diff --git a/app/Helpers/general.php b/app/Helpers/general.php index 12f6241896..60e104634b 100644 --- a/app/Helpers/general.php +++ b/app/Helpers/general.php @@ -3,6 +3,8 @@ declare(strict_types=1); use App\IATI\Models\User\Role; +use Illuminate\Contracts\Foundation\Application; +use Illuminate\Contracts\Translation\Translator; use Illuminate\Encryption\Encrypter; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Config; @@ -367,7 +369,10 @@ function getCodeList($listName, $listType, bool $code = true): array $data = []; foreach ($codeList as $list) { - $data[$list['code']] = ($code) ? $list['code'] . (array_key_exists('name', $list) ? ' - ' . $list['name'] : '') : $list['name']; + $data[$list['code']] = ($code) ? $list['code'] . (array_key_exists( + 'name', + $list + ) ? ' - ' . $list['name'] : '') : $list['name']; } return $data; @@ -400,12 +405,12 @@ function getCodeListArray($listName, $listType, bool $code = true): array if (!function_exists('customDecryptString')) { /** - * @param string $encryptedString + * @param string $encryptedString * @param string|null $key * * @return bool|string|null */ - function customDecryptString(string $encryptedString, string $key = null): bool|string|null + function customDecryptString(string $encryptedString, string $key = null): bool | string | null { $frontendEncryptor = new Encrypter($key ?? env('MIX_ENCRYPTION_KEY'), Config::get('app.cipher')); @@ -415,12 +420,12 @@ function customDecryptString(string $encryptedString, string $key = null): bool| if (!function_exists('customEncryptString')) { /** - * @param string $string + * @param string $string * @param string|null $key * * @return bool|string|null */ - function customEncryptString(string $string, string $key = null): bool|string|null + function customEncryptString(string $string, string $key = null): bool | string | null { $frontendEncryptor = new Encrypter($key ?? env('MIX_ENCRYPTION_KEY'), Config::get('app.cipher')); @@ -437,15 +442,26 @@ function customEncryptString(string $string, string $key = null): bool|string|nu * @return bool|string|null * @throws Exception */ - function encryptString(string $string): bool|string|null + function encryptString(string $string): bool | string | null { $iv = random_bytes(16); $salt = random_bytes(256); $iterations = 999; $encryptMethodLength = 256 / 4; - $hashKey = hash_pbkdf2('sha512', env('MIX_ENCRYPTION_KEY'), $salt, $iterations, $encryptMethodLength); + $hashKey = hash_pbkdf2( + 'sha512', + env('MIX_ENCRYPTION_KEY'), + $salt, + $iterations, + $encryptMethodLength + ); $encryptedData = openssl_encrypt($string, 'AES-256-CBC', hex2bin($hashKey), OPENSSL_RAW_DATA, $iv); - $output = ['ciphertext' => base64_encode($encryptedData), 'iv' => bin2hex($iv), 'salt' => bin2hex($salt), 'iterations' => $iterations]; + $output = [ + 'ciphertext' => base64_encode($encryptedData), + 'iv' => bin2hex($iv), + 'salt' => bin2hex($salt), + 'iterations' => $iterations, + ]; return base64_encode(json_encode($output, JSON_THROW_ON_ERROR)); } @@ -461,7 +477,7 @@ function encryptString(string $string): bool|string|null * @return bool|string|null * @throws JsonException */ - function decryptString(string $encryptedString, string $key): bool|string|null + function decryptString(string $encryptedString, string $key): bool | string | null { $json = json_decode(base64_decode($encryptedString), true, 512, JSON_THROW_ON_ERROR); @@ -495,7 +511,7 @@ function decryptString(string $encryptedString, string $key): bool|string|null * Return codeList array from json codeList. * * @param string $filePath - * @param bool $code + * @param bool $code * * @return array * @throws JsonException @@ -617,7 +633,9 @@ function getPeriodTypes(): array */ function generateToastData(): array { - $toast['message'] = Session::exists('error') ? Session::get('error') : (Session::exists('success') ? Session::get('success') : ''); + $toast['message'] = Session::exists('error') ? Session::get('error') : (Session::exists( + 'success' + ) ? Session::get('success') : ''); $toast['type'] = Session::exists('error') ? false : 'success'; Session::forget('success'); Session::forget('error'); @@ -670,7 +688,10 @@ function getTableConfig($module): array { $tableConfig = [ 'activity' => ['orderBy' => ['updated_at'], 'direction' => ['asc', 'desc']], - 'organisation' => ['orderBy' => ['updated_at', 'all_activities_count', 'name'], 'direction' => ['asc', 'desc']], + 'organisation' => [ + 'orderBy' => ['updated_at', 'all_activities_count', 'name'], + 'direction' => ['asc', 'desc'], + ], ]; return $tableConfig[$module]; @@ -687,7 +708,12 @@ function getTableConfig($module): array */ function getDefaultLanguage($defaultValues): string { - if (!empty($defaultValues) && array_key_exists('default_language', $defaultValues) && !empty($defaultValues['default_language'])) { + if ( + !empty($defaultValues) && array_key_exists( + 'default_language', + $defaultValues + ) && !empty($defaultValues['default_language']) + ) { return $defaultValues['default_language']; } @@ -726,7 +752,23 @@ function ($value) { */ function getNonArrayElements(): array { - return ['activity_status', 'activity_scope', 'default_flow_type', 'default_finance_type', 'default_tied_status', 'capital_spend', 'collaboration_type', 'identifier', 'org_id', 'default_field_values', 'updated_at', 'created_at', 'id', 'iati_identifier', 'element_status']; + return [ + 'activity_status', + 'activity_scope', + 'default_flow_type', + 'default_finance_type', + 'default_tied_status', + 'capital_spend', + 'collaboration_type', + 'identifier', + 'org_id', + 'default_field_values', + 'updated_at', + 'created_at', + 'id', + 'iati_identifier', + 'element_status', + ]; } } @@ -781,7 +823,7 @@ function getEncodingType($file): string } return 'UTF-8'; - } catch (\Exception $exception) { + } catch (Exception $exception) { return 'UTF-8'; } } @@ -816,7 +858,7 @@ function trimInput($input): string * * @return false|string */ -function dateFormat($format, $date): bool|string +function dateFormat($format, $date): bool | string { if (is_array($date) || is_bool($date)) { return false; @@ -829,7 +871,11 @@ function dateFormat($format, $date): bool|string $dateArray = date_parse_from_format('Y-m-d', $date); - if (checkdate((int) $dateArray['month'], (int) $dateArray['day'], (int) $dateArray['year']) && (bool) strtotime($date)) { + if ( + checkdate((int) $dateArray['month'], (int) $dateArray['day'], (int) $dateArray['year']) && (bool) strtotime( + $date + ) + ) { return date($format, strtotime($date)); } @@ -846,7 +892,7 @@ function dateFormat($format, $date): bool|string * * @return false|int */ -function dateStrToTime($date): int|bool +function dateStrToTime($date): int | bool { if (is_array($date)) { return false; @@ -859,7 +905,11 @@ function dateStrToTime($date): int|bool $dateArray = date_parse_from_format('Y-m-d', $date); - if (checkdate((int) $dateArray['month'], (int) $dateArray['day'], (int) $dateArray['year']) && (bool) strtotime($date)) { + if ( + checkdate((int) $dateArray['month'], (int) $dateArray['day'], (int) $dateArray['year']) && (bool) strtotime( + $date + ) + ) { return strtotime($date); } @@ -1066,3 +1116,47 @@ function is_variable_null($var): bool return is_array($var) ? is_array_values_null($var) : is_null($var); } } + +if (!function_exists('translate_this')) { + /** + * @param string $prefix_key + * @param string $suffix_key + * + * @return array|string|Translator|Application|null + */ + function translate_this(string $prefix_key, string $suffix_key = ''): array | string | Translator | Application | null + { + if (empty($suffix_key)) { + return trans('requests.' . $prefix_key); + } + + return trans('requests.' . $prefix_key, ['suffix' => trans('requests.suffix.' . $suffix_key)]); + } +} + +if (!function_exists('hot_swap')) { + /** + * @param $elements + * + * @return array|mixed + */ + function hot_swap($elements) + { + $swapable_keys = ['label', 'placeholder', 'hover_text', 'help_text']; + $result = []; + if (is_array($elements)) { + foreach ($elements as $key => $value) { + if (is_string($value) && in_array($key, $swapable_keys)) { + $translated = trans($value); + $result[$key] = $translated; + } else { + $result[$key] = hot_swap($value); + } + } + } else { + $result = $elements; + } + + return $result; + } +} diff --git a/app/Http/Controllers/Admin/Activity/ActivityController.php b/app/Http/Controllers/Admin/Activity/ActivityController.php index 440282b437..4dfd2bbcd6 100644 --- a/app/Http/Controllers/Admin/Activity/ActivityController.php +++ b/app/Http/Controllers/Admin/Activity/ActivityController.php @@ -21,6 +21,8 @@ use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Session; +use JsonException; +use Throwable; /** * Class ActivityController. @@ -60,12 +62,12 @@ class ActivityController extends Controller /** * ActivityController Constructor. * - * @param ActivityService $activityService - * @param DatabaseManager $db - * @param ResultService $resultService - * @param TransactionService $transactionService + * @param ActivityService $activityService + * @param DatabaseManager $db + * @param ResultService $resultService + * @param TransactionService $transactionService * @param ActivityValidatorResponseService $activityValidatorResponseService - * @param OrganizationService $organizationService + * @param OrganizationService $organizationService */ public function __construct( ActivityService $activityService, @@ -88,7 +90,7 @@ public function __construct( * * @return View|JsonResponse */ - public function index(): View|JsonResponse + public function index(): View | JsonResponse { try { $languages = getCodeListArray('Languages', 'ActivityArray'); @@ -98,7 +100,12 @@ public function index(): View|JsonResponse } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while fetching activities.']); + return response()->json( + [ + 'success' => false, + 'error' => trans('controller.error_has_occurred', ['action' => trans('controller.fetching'), 'suffix' => trans('el_common.activities')]), + ] + ); } } @@ -118,7 +125,7 @@ public function create(): void * @param ActivityCreateRequest $request * * @return JsonResponse - * @throws \Throwable + * @throws Throwable */ public function store(ActivityCreateRequest $request): JsonResponse { @@ -128,17 +135,30 @@ public function store(ActivityCreateRequest $request): JsonResponse $this->db->beginTransaction(); $activity = $this->activityService->store($input); $this->db->commit(); - Session::put('success', 'Activity has been created successfully.'); + Session::put( + 'success', + ucfirst( + trans('controller.has_been_actioned_successfully', ['prefix' => trans('el_common.activity'), 'action' => trans('controller.created')]) + ) + ); return response()->json([ 'success' => true, - 'message' => 'Activity created successfully.', + 'message' => ucfirst( + trans('controller.actioned_successfully', ['prefix' => trans('el_common.activity'), 'action' => trans('controller.created')]) + ), 'data' => $activity, ]); } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while saving activity.', 'data' => []]); + return response()->json( + [ + 'success' => false, + 'message' => trans('controller.error_has_occurred', ['action' => trans('controller.saving'), 'suffix' => trans('el_common.activity')]), + 'data' => [], + ] + ); } } @@ -149,38 +169,66 @@ public function store(ActivityCreateRequest $request): JsonResponse * * @return View|JsonResponse|RedirectResponse */ - public function show($id): View|JsonResponse|RedirectResponse + public function show($id): View | JsonResponse | RedirectResponse { try { $toast = generateToastData(); $activity = $this->activityService->getActivity($id); - $elements = readElementJsonSchema(); + $elements = hot_swap(readElementJsonSchema()); $elementGroups = readElementGroup(); $types = $this->getActivityDetailDataType(); - $results = $this->resultService->getActivityResultsWithIndicatorsAndPeriods($activity->id); + $results = $this->resultService->getActivityResultsWithIndicatorsAndPeriods( + $activity->id + ); $hasIndicatorPeriod = $this->resultService->checkResultIndicatorPeriod($results); $transactions = $this->transactionService->getActivityTransactions($activity->id); $status = $activity->element_status; - $status['transactions'] = $transactions->count() === 0 ? false : Arr::get($status, 'transactions', false); + $status['transactions'] = $transactions->count() === 0 ? false : Arr::get( + $status, + 'transactions', + false + ); $status['result'] = $results->count() === 0 ? false : Arr::get($status, 'result', false); $progress = $this->activityService->activityPublishingProgress($activity); - $coreCompleted = isCoreElementCompleted(array_merge(['reporting_org' => $activity->organization->reporting_org_element_completed], $activity->element_status)); + $coreCompleted = isCoreElementCompleted( + array_merge( + ['reporting_org' => $activity->organization->reporting_org_element_completed], + $activity->element_status + ) + ); $validatorResponse = $this->activityValidatorResponseService->getValidatorResponse($id); $organization_identifier = $activity->organization->identifier; $activity->iati_identifier = [ - 'activity_identifier' => $activity->iati_identifier['activity_identifier'], + 'activity_identifier' => $activity->iati_identifier['activity_identifier'], 'iati_identifier_text' => $activity->organization->identifier . '-' . $activity->iati_identifier['activity_identifier'], ]; $iatiValidatorResponse = $validatorResponse->response ?? null; return view( 'admin.activity.show', - compact('elements', 'elementGroups', 'progress', 'activity', 'toast', 'types', 'status', 'results', 'hasIndicatorPeriod', 'transactions', 'coreCompleted', 'iatiValidatorResponse', 'organization_identifier') + compact( + 'elements', + 'elementGroups', + 'progress', + 'activity', + 'toast', + 'types', + 'status', + 'results', + 'hasIndicatorPeriod', + 'transactions', + 'coreCompleted', + 'iatiValidatorResponse', + 'organization_identifier' + ) ); } catch (Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activities.index')->with('error', 'Error has occurred while opening activity detail page.'); + return redirect()->route('admin.activities.index')->with( + 'error', + trans('controller.error_has_occurred_page', ['action' => trans('controller.opening'), 'suffix' => trans('el_common.activity_detail')]) + ); } } @@ -200,7 +248,7 @@ public function edit(Activity $activity): void /** * Update the specified resource in storage. * - * @param Request $request + * @param Request $request * @param Activity $activity * * @return void @@ -223,19 +271,43 @@ public function destroy($activityId): JsonResponse $activity = $this->activityService->getActivity($activityId); if ($activity->linked_to_iati) { - Session::put('error', 'Activity must be un-published before deleting.'); + Session::put('error', trans('controller.activity_must_be_unpublished_before_deleting')); - return response()->json(['success' => false, 'message' => 'Activity must be un-published before deleting.']); + return response()->json( + ['success' => false, 'message' => trans('controller.activity_must_be_unpublished_before_deleting')] + ); } if ($this->activityService->deleteActivity($activity)) { - Session::put('success', 'Activity has been deleted successfully.'); - - return response()->json(['success' => true, 'message' => 'Activity has been deleted successfully.']); + Session::put( + 'success', + trans( + 'controller.has_been_actioned_successfully', + ['prefix' => trans('el_common.activities'), 'actioned' => trans('controller.deleted')] + ) + ); + + return response()->json( + [ + 'success' => true, + 'message' => trans( + 'controller.has_been_actioned_successfully', + ['prefix' => trans('el_common.activities'), 'actioned' => trans('controller.deleted')] + ), + ] + ); } - return response()->json(['success' => false, 'message' => 'Activity delete failed.']); - } catch (\Exception $e) { + return response()->json( + [ + 'success' => false, + 'message' => trans( + 'controller.action_failed', + ['prefix' => trans('el_common.activity'), 'action' => trans('controller.deleted')] + ), + ] + ); + } catch (Exception $e) { logger()->error($e->getMessage()); return response()->json(['success' => false, 'message' => $e->getMessage()]); @@ -271,7 +343,7 @@ public function sanitizeRequest($request): array /** * @param Request $request - * @param int $page + * @param int $page * * @return JsonResponse */ @@ -282,13 +354,13 @@ public function getPaginatedActivities(Request $request, int $page = 1): JsonRes return response()->json([ 'success' => true, - 'message' => 'Activities fetched successfully', + 'message' => trans('controller.actioned_successfully', ['prefix' => trans('el_common.activities'), 'actioned' => trans('controller.fetched')]), 'data' => $activities, ]); - } catch (\Exception $e) { + } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -305,7 +377,7 @@ public function getLanguagesOrganization(): JsonResponse return response()->json([ 'success' => true, - 'message' => 'Languages fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.languages'), 'actioned'=>trans('controller.fetched')])), 'data' => [ 'languages' => $languages, 'organization' => $organization, @@ -314,7 +386,7 @@ public function getLanguagesOrganization(): JsonResponse } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -322,7 +394,7 @@ public function getLanguagesOrganization(): JsonResponse * Get activity detail data type. * * @return array - * @throws \JsonException + * @throws JsonException */ public function getActivityDetailDataType(): array { diff --git a/app/Http/Controllers/Admin/Activity/ActivityDefaultController.php b/app/Http/Controllers/Admin/Activity/ActivityDefaultController.php index f38727d4b0..8db87d5641 100644 --- a/app/Http/Controllers/Admin/Activity/ActivityDefaultController.php +++ b/app/Http/Controllers/Admin/Activity/ActivityDefaultController.php @@ -56,7 +56,7 @@ public function edit($activityId): View|RedirectResponse return redirect()->route('admin.activity.show', $activityId)->with( 'error', - 'Error has occurred while rendering default values form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.default_values')]) ); } } @@ -73,11 +73,11 @@ public function getActivityDefaultValues($activityId): JsonResponse try { $setting = $this->activityDefaultService->getActivityDefaultValues($activityId); - return response()->json(['success' => true, 'message' => 'Default values fetched successfully', 'data' => $setting]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default_values'), 'actioned'=>trans('controller.fetched')])), 'data' => $setting]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -98,12 +98,12 @@ public function update(DefaultFormRequest $request, $activityId): JsonResponse DB::commit(); - return response()->json(['success' => true, 'message' => 'Activity default values updated successfully']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_default_values'), 'actioned'=>trans('controller.updated')]))]); } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while updating data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.the_data')])]); } } } diff --git a/app/Http/Controllers/Admin/Activity/BudgetController.php b/app/Http/Controllers/Admin/Activity/BudgetController.php index 313cb202ae..6bb1b772f4 100644 --- a/app/Http/Controllers/Admin/Activity/BudgetController.php +++ b/app/Http/Controllers/Admin/Activity/BudgetController.php @@ -61,7 +61,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening budget form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.budget')])); } } @@ -79,14 +79,14 @@ public function update(BudgetRequest $request, $id): JsonResponse|RedirectRespon $activityBudget = $request->all(); if (!$this->budgetService->update($id, $activityBudget)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating budget.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.budget')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Budget updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.budget'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating budget.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.budget')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/CapitalSpendController.php b/app/Http/Controllers/Admin/Activity/CapitalSpendController.php index 9ead0a90ef..cf9d994533 100644 --- a/app/Http/Controllers/Admin/Activity/CapitalSpendController.php +++ b/app/Http/Controllers/Admin/Activity/CapitalSpendController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering activity capital-spend form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_capital_form')])); } } @@ -71,14 +71,14 @@ public function update($id, CapitalSpendRequest $request): JsonResponse|Redirect $activityCapitalSpend = $request->get('capital_spend') !== null ? (float) $request->get('capital_spend') : null; if (!$this->capitalSpendService->update($id, $activityCapitalSpend)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity capital-spend.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_capital_spend')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity capital-spend updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_capital_spend'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity capital-spend.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_capital_spend')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/CollaborationTypeController.php b/app/Http/Controllers/Admin/Activity/CollaborationTypeController.php index 7834eed80e..652bbdd701 100644 --- a/app/Http/Controllers/Admin/Activity/CollaborationTypeController.php +++ b/app/Http/Controllers/Admin/Activity/CollaborationTypeController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering activity collaboration-type form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_collab_type')])); } } @@ -71,14 +71,14 @@ public function update(CollaborationTypeRequest $request, $id): JsonResponse|Red $activityCollaborationType = $request->get('collaboration_type') !== null ? (int) $request->get('collaboration_type') : null; if (!$this->collaborationTypeService->update($id, $activityCollaborationType)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity collaboration-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_collab_type')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity collaboration-type updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_collab_type'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity collaboration type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_collab_type')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/ConditionController.php b/app/Http/Controllers/Admin/Activity/ConditionController.php index 4598fe44a1..6b442e14c5 100644 --- a/app/Http/Controllers/Admin/Activity/ConditionController.php +++ b/app/Http/Controllers/Admin/Activity/ConditionController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering activity condition form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_condition')])); } } @@ -71,14 +71,14 @@ public function update(ConditionRequest $request, $id): JsonResponse|RedirectRes $activityCondition = $request->except(['_token', '_method']); if (!$this->conditionService->update($id, $activityCondition)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity condition.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_condition')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity condition updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_condition'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity condition.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_condition')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/ContactInfoController.php b/app/Http/Controllers/Admin/Activity/ContactInfoController.php index 14dc6318aa..fb3d23a29f 100644 --- a/app/Http/Controllers/Admin/Activity/ContactInfoController.php +++ b/app/Http/Controllers/Admin/Activity/ContactInfoController.php @@ -54,7 +54,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering contact-info controller item form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.contact_info_controller')])); } } @@ -72,14 +72,14 @@ public function update(ContactInfoRequest $request, $id): JsonResponse|RedirectR $activityCountryBudgetItem = $request->except(['_token', '_method']); if (!$this->contactInfoService->update($id, $activityCountryBudgetItem)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating contact-info.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.contact_info')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Contact-info updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.contact_info'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating contact-info.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.contact-info')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/CountryBudgetItemController.php b/app/Http/Controllers/Admin/Activity/CountryBudgetItemController.php index ef2cdbf235..1183fc0a24 100644 --- a/app/Http/Controllers/Admin/Activity/CountryBudgetItemController.php +++ b/app/Http/Controllers/Admin/Activity/CountryBudgetItemController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering country-budget-item form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.country_budget_form')])); } } @@ -71,14 +71,14 @@ public function update(CountryBudgetItemRequest $request, $id): JsonResponse|Red $activityCountryBudgetItem = $request->except(['_token', '_method']); if (!$this->countryBudgetItemService->update($id, $activityCountryBudgetItem)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating country-budget-item.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.country_budget_items')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Country-budget-item updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.country_budget_items'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating country-budget-item.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.country_budget_items')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DateController.php b/app/Http/Controllers/Admin/Activity/DateController.php index b88c7f0a94..a97140059c 100644 --- a/app/Http/Controllers/Admin/Activity/DateController.php +++ b/app/Http/Controllers/Admin/Activity/DateController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering activity-date form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.activity_date')])); } } @@ -71,14 +71,14 @@ public function update(DateRequest $request, $id): JsonResponse|RedirectResponse $activityDate = $request->all(); if (!$this->dateService->update($id, $activityDate)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity-date.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_date')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity-date updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.activity_date'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity-date.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_date')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DefaultAidTypeController.php b/app/Http/Controllers/Admin/Activity/DefaultAidTypeController.php index 3fa77c8b6b..a80d110223 100644 --- a/app/Http/Controllers/Admin/Activity/DefaultAidTypeController.php +++ b/app/Http/Controllers/Admin/Activity/DefaultAidTypeController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering default-aid-type form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.default_aid_type')])); } } @@ -70,14 +70,14 @@ public function update(DefaultAidTypeRequest $request, $id): JsonResponse|Redire $activityDefaultAidType = $request->all(); if (!$this->defaultAidTypeService->update($id, $activityDefaultAidType)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-aid-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_aid_type')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Default-aid-type updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default_aid_type'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default aid type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_aid_type')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DefaultFinanceTypeController.php b/app/Http/Controllers/Admin/Activity/DefaultFinanceTypeController.php index 7709a6ffb4..06457bb567 100644 --- a/app/Http/Controllers/Admin/Activity/DefaultFinanceTypeController.php +++ b/app/Http/Controllers/Admin/Activity/DefaultFinanceTypeController.php @@ -53,7 +53,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering default-finance-type form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.default_finance_type')])); } } @@ -71,14 +71,14 @@ public function update(DefaultFinanceTypeRequest $request, $id): JsonResponse|Re $activityDefaultFinanceType = $request->get('default_finance_type') !== null ? (int) $request->get('default_finance_type') : null; if (!$this->defaultFinanceTypeService->update($id, $activityDefaultFinanceType)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-finance-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_finance_type')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Default-finance-type updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default_finance_type'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-finance-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_finance_type')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DefaultFlowTypeController.php b/app/Http/Controllers/Admin/Activity/DefaultFlowTypeController.php index 323fa24cb9..231ffb8d0b 100644 --- a/app/Http/Controllers/Admin/Activity/DefaultFlowTypeController.php +++ b/app/Http/Controllers/Admin/Activity/DefaultFlowTypeController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering default-flow-type form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.default_flow_type')])); } } @@ -68,14 +68,14 @@ public function update(DefaultFlowTypeRequest $request, $id): JsonResponse|Redir $activityDefaultFlowType = $request->get('default_flow_type') !== null ? (int) $request->get('default_flow_type') : null; if (!$this->defaultFlowTypeService->update($id, $activityDefaultFlowType)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-flow-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_flow_type')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Default-flow-type updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default_flow_type'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-flow-type.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_flow_type')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DefaultTiedStatusController.php b/app/Http/Controllers/Admin/Activity/DefaultTiedStatusController.php index 67ac1b3f6f..e7bcef6864 100644 --- a/app/Http/Controllers/Admin/Activity/DefaultTiedStatusController.php +++ b/app/Http/Controllers/Admin/Activity/DefaultTiedStatusController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering default-tied-status form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.default_tied_status')])); } } @@ -68,14 +68,14 @@ public function update(DefaultTiedStatusRequest $request, $id): JsonResponse|Red $activityDefaultTiedStatus = $request->get('default_tied_status') !== null ? (int) $request->get('default_tied_status') : null; if (!$this->defaultTiedStatusService->update($id, $activityDefaultTiedStatus)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-tied-status.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_tied_status')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Default-tied-status updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default_tied_status'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating default-tied-status.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.default_tied_status')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DescriptionController.php b/app/Http/Controllers/Admin/Activity/DescriptionController.php index 517944252b..04d18933c6 100644 --- a/app/Http/Controllers/Admin/Activity/DescriptionController.php +++ b/app/Http/Controllers/Admin/Activity/DescriptionController.php @@ -44,13 +44,14 @@ public function edit(int $id): View|RedirectResponse $element = getElementSchema('description'); $activity = $this->descriptionService->getActivityData($id); $form = $this->descriptionService->formGenerator($id); - $data = ['title' => $element['label'], 'name' => 'description']; + + $data = ['title' =>$element['label'], 'name' => 'description']; return view('admin.activity.description.edit', compact('form', 'activity', 'data')); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering activity description form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.activity_description')])); } } @@ -69,14 +70,14 @@ public function update(DescriptionRequest $request, $id): JsonResponse|RedirectR $activityDescription = $request->all(); if (!$this->descriptionService->update($activityDescription, $activityData)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating description.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.description')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Description updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.default'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating description.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.description')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/DocumentLinkController.php b/app/Http/Controllers/Admin/Activity/DocumentLinkController.php index a8fdba6f19..d202531c4f 100644 --- a/app/Http/Controllers/Admin/Activity/DocumentLinkController.php +++ b/app/Http/Controllers/Admin/Activity/DocumentLinkController.php @@ -70,7 +70,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering document-link form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.document_link')])); } } @@ -93,12 +93,12 @@ public function update(DocumentLinkRequest $request, $id): JsonResponse|Redirect $this->db->commit(); - return redirect()->route('admin.activity.show', $id)->with('success', 'Document-link updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.document_link'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { $this->db->rollBack(); logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating document-link.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.document_link')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/HumanitarianScopeController.php b/app/Http/Controllers/Admin/Activity/HumanitarianScopeController.php index 1cd3be8063..a13b767c26 100644 --- a/app/Http/Controllers/Admin/Activity/HumanitarianScopeController.php +++ b/app/Http/Controllers/Admin/Activity/HumanitarianScopeController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering humanitarian-scope form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.humanitarian_scope')])); } } @@ -66,14 +66,14 @@ public function update(HumanitarianScopeRequest $request, $id): JsonResponse|Red { try { if ($this->humanitarianScopeService->update($id, $request->except(['_token', '_method']))) { - return redirect()->route('admin.activity.show', $id)->with('success', 'Humanitarian-scope updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.humanitarian_scope'), 'actioned'=>trans('controller.updated')]))); } - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating humanitarian-scope.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.humanitarian_scope')])); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating humanitarian-scope.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.humanitarian_scope')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/IdentifierController.php b/app/Http/Controllers/Admin/Activity/IdentifierController.php index c5c62f91da..f742825c06 100644 --- a/app/Http/Controllers/Admin/Activity/IdentifierController.php +++ b/app/Http/Controllers/Admin/Activity/IdentifierController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity title form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.activity_title')])); } } @@ -66,15 +66,15 @@ public function update(IdentifierRequest $request, $id): JsonResponse|RedirectRe { try { if (!$this->identifierService->update($id, $request->except(['_method', '_token']))) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating iati-identifier.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.iati_identifier')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Iati-identifier updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.iati_identifier'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); return response()->json( - ['success' => false, 'error' => 'Error has occurred while updating iati-identifier.'] + ['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.iati_identifier')])] ); } } diff --git a/app/Http/Controllers/Admin/Activity/IndicatorController.php b/app/Http/Controllers/Admin/Activity/IndicatorController.php index b4d13846a9..c5033a7918 100644 --- a/app/Http/Controllers/Admin/Activity/IndicatorController.php +++ b/app/Http/Controllers/Admin/Activity/IndicatorController.php @@ -91,7 +91,7 @@ public function index($resultId): View|RedirectResponse return redirect()->route('admin.activity.result.index', $resultId)->with( 'error', - 'Error has occurred while rendering activity transactions listing.' + trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transactions_listing')]) ); } } @@ -111,13 +111,13 @@ public function getPaginatedIndicators(int $resultId, int $page = 1): JsonRespon return response()->json([ 'success' => true, - 'message' => 'Indicators fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.indicators'), 'actioned'=>trans('controller.fetched')])), 'data' => $indicator, ]); } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -143,7 +143,7 @@ public function create($resultId): Factory|View|RedirectResponse|Application return redirect()->route('admin.result.indicator.index', [$resultId])->with( 'error', - 'Error has occurred while rendering indicator form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.indicator')]) ); } } @@ -174,7 +174,7 @@ public function store(IndicatorRequest $request, $resultId): RedirectResponse return redirect()->route('admin.result.indicator.index', $resultId)->with( 'error', - 'Error has occurred while creating result indicator.' + trans('controller.error_has_occurred', ['action'=>trans('controller.creating'), 'suffix'=>trans('controller.result_indicator')]) ); } } @@ -195,7 +195,7 @@ public function show($resultId, $indicatorId): Factory|View|RedirectResponse|App $resultTitle = $result['result']['title']; $activity = $result->activity; $period = $this->periodService->getPeriods($indicatorId)->toArray(); - $element = getElementSchema('indicator'); + $element = hot_swap(getElementSchema('indicator')); $types = getIndicatorTypes(); $toast = generateToastData(); @@ -205,7 +205,7 @@ public function show($resultId, $indicatorId): Factory|View|RedirectResponse|App return redirect()->route('admin.result.indicator.index', $resultId)->with( 'error', - 'Error has occurred while rending result detail page.' + trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.result_detail')]) ); } } @@ -233,7 +233,7 @@ public function edit($resultId, $indicatorId): Factory|View|RedirectResponse|App return redirect()->route('admin.result.indicator.index', $resultId)->with( 'error', - 'Error has occurred while rendering indicator form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.indicator')]) ); } } @@ -257,7 +257,7 @@ public function update(IndicatorRequest $request, $resultId, $indicatorId): Redi if (!$this->indicatorService->update($indicatorId, ['result_id' => $result->id, 'indicator' => $indicatorData])) { return redirect()->route('admin.result.indicator.index', $resultId)->with( 'error', - 'Error has occurred while updating result indicator.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.result_indicator')]) ); } @@ -270,7 +270,7 @@ public function update(IndicatorRequest $request, $resultId, $indicatorId): Redi return redirect()->route('admin.result.indicator.index', $resultId)->with( 'error', - 'Error has occurred while updating indicator.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.indicator')]) ); } } @@ -287,20 +287,20 @@ public function destroy($id, $indicatorId): JsonResponse { try { $this->indicatorService->deleteIndicator($indicatorId); - Session::flash('success', 'Indicator Deleted Successfully'); + Session::flash('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.indicator'), 'actioned'=>trans('controller.deleted')]))); return response()->json([ 'status' => true, - 'msg' => 'Indicator Deleted Successfully', + 'msg' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.indicator'), 'actioned'=>trans('controller.deleted')])), 'result_id' => $id, ]); } catch (Exception $e) { logger()->error($e->getMessage()); - Session::flash('error', 'Indicator Delete Error'); + Session::flash('error', ucwords(trans('controller.delete_error', ['prefix'=>trans('el_common.indicator')]))); return response()->json([ 'status' => true, - 'msg' => 'Indicator Delete Error', + 'msg' => ucwords(trans('controller.delete_error', ['prefix'=>trans('el_common.indicator')])), 'result_id' => $id, ], 400); } diff --git a/app/Http/Controllers/Admin/Activity/LegacyDataController.php b/app/Http/Controllers/Admin/Activity/LegacyDataController.php index 95747ea60c..c09940e551 100644 --- a/app/Http/Controllers/Admin/Activity/LegacyDataController.php +++ b/app/Http/Controllers/Admin/Activity/LegacyDataController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering legacy-data form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.legacy_data')])); } } @@ -69,11 +69,11 @@ public function update(LegacyDataRequest $request, $id): JsonResponse|RedirectRe return redirect()->route('admin.activity.show', $id)->with('success', 'Legacy-data updated successfully.'); } - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating legacy-data.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.legacy_data')])); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating legacy-data.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.legacy_data')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/LocationController.php b/app/Http/Controllers/Admin/Activity/LocationController.php index 9fb67d08d2..aee9958bc4 100644 --- a/app/Http/Controllers/Admin/Activity/LocationController.php +++ b/app/Http/Controllers/Admin/Activity/LocationController.php @@ -51,7 +51,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering location form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.location')])); } } @@ -67,14 +67,14 @@ public function update(LocationRequest $request, $id): JsonResponse|RedirectResp { try { if (!$this->locationService->update($id, $request->except(['_token', '_method']))) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating location.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.location')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Location updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.location'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating location.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.location')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/OtherIdentifierController.php b/app/Http/Controllers/Admin/Activity/OtherIdentifierController.php index fa5063fa3e..94b37dbf0b 100644 --- a/app/Http/Controllers/Admin/Activity/OtherIdentifierController.php +++ b/app/Http/Controllers/Admin/Activity/OtherIdentifierController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening other-identifier edit form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.other_identifier')])); } } @@ -66,14 +66,14 @@ public function update(OtherIdentifierRequest $request, $id): JsonResponse|Redir { try { if (!$this->otherIdentifierService->update($id, $request->get('other_identifier'))) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating other-identifier.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.other_identifier')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Other-identifier updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.other_identifier'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating other-identifier.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.other_identifier')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/ParticipatingOrganizationController.php b/app/Http/Controllers/Admin/Activity/ParticipatingOrganizationController.php index f5a1c62e6f..2af6b19177 100644 --- a/app/Http/Controllers/Admin/Activity/ParticipatingOrganizationController.php +++ b/app/Http/Controllers/Admin/Activity/ParticipatingOrganizationController.php @@ -51,7 +51,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering participating-organization form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.participating_organisation')])); } } @@ -67,14 +67,14 @@ public function update(ParticipatingOrganizationRequest $request, $id): JsonResp { try { if (!$this->participatingOrganizationService->update($id, $request->except(['_token', '_method']))) { - return redirect()->route('admin.activities.show', $id)->with('error', 'Error has occurred while updating participating-organization.'); + return redirect()->route('admin.activities.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.participating_organisation')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Participating-organization updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.participating_organisation'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating participating-organization.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.participating_organisation')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/PeriodController.php b/app/Http/Controllers/Admin/Activity/PeriodController.php index 0a4ec80c78..4a1d7c1284 100644 --- a/app/Http/Controllers/Admin/Activity/PeriodController.php +++ b/app/Http/Controllers/Admin/Activity/PeriodController.php @@ -77,13 +77,13 @@ public function getPaginatedPeriods(int $indicatorId, int $page = 1): JsonRespon return response()->json([ 'success' => true, - 'message' => 'Period fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.period'), 'actioned'=>trans('controller.fetched')])), 'data' => $period, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -119,7 +119,7 @@ public function index($indicatorId): Factory|View|RedirectResponse|Application } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', 'Error has occurred while rendering activity transactions listing.'); + return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transactions_listing')])); } } @@ -143,7 +143,7 @@ public function create($indicatorId): Factory|View|RedirectResponse|Application } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', 'Error has occurred while rendering indicator period form.'); + return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.indicator_period')])); } } @@ -167,14 +167,14 @@ public function store(PeriodRequest $request, $indicatorId): RedirectResponse return redirect()->route('admin.indicator.period.show', [$indicatorId, $period['id']])->with( 'success', - 'Indicator period created successfully.' + ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.indicator_period'), 'actioned'=>trans('el_common.created')])) ); } catch (\Exception $e) { logger()->error($e->getMessage()); return redirect()->route('admin.indicator.period.index', $indicatorId)->with( 'error', - 'Error has occurred while creating indicator period.' + trans('controller.error_has_occurred', ['action'=>trans('controller.creating'), 'suffix'=>trans('controller.indicator_period')]) ); } } @@ -205,7 +205,7 @@ public function show($indicatorId, $periodId): Factory|View|RedirectResponse|App ], ]; $period = $this->periodService->getPeriod($periodId); - $element = getElementSchema('period'); + $element = hot_swap(getElementSchema('period')); $types = getPeriodTypes(); $toast = generateToastData(); @@ -215,7 +215,7 @@ public function show($indicatorId, $periodId): Factory|View|RedirectResponse|App return redirect()->route('admin.indicator.period.index', [$indicatorId])->with( 'error', - 'Error has occurred while rending result detail page.' + trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.result_detail')]) ); } } @@ -241,7 +241,7 @@ public function edit($indicatorId, $periodId): Factory|View|RedirectResponse|App } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', 'Error has occurred while rendering period form.'); + return redirect()->route('admin.indicator.period.index', $indicatorId)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.period')])); } } @@ -263,20 +263,20 @@ public function update(PeriodRequest $request, int $indicatorId, int $periodId): if (!$this->periodService->update($periodId, ['indicator_id' => $indicatorId, 'period' => $periodData])) { return redirect()->route('admin.indicator.period.index', [$indicatorId])->with( 'error', - 'Error has occurred while updating indicator period.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.indicator_period')]) ); } return redirect()->route('admin.indicator.period.show', [$indicatorId, $period['id']])->with( 'success', - 'Indicator period updated successfully.' + ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.indicator_period'), 'actioned'=>trans('el_common.updated')])) ); } catch (\Exception $e) { logger()->error($e->getMessage()); return redirect()->route('admin.indicator.period.show', [$indicatorId, $periodId])->with( 'error', - 'Error has occurred while updating indicator period.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.indicator_period')]) ); } } @@ -293,20 +293,20 @@ public function destroy($id, $periodId): JsonResponse { try { $this->periodService->deletePeriod($periodId); - Session::flash('success', 'Period Deleted Successfully'); + Session::flash('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.period'), 'actioned'=>trans('controller.deleted')]))); return response()->json([ 'status' => true, - 'msg' => 'Period Deleted Successfully', + 'msg' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.period'), 'actioned'=>trans('controller.deleted')])), 'indicator_id' => $id, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - Session::flash('error', 'Period Delete Error'); + Session::flash('error', ucwords(trans('controller.delete_error', ['prefix'=>trans('el_common.period')]))); return response()->json([ 'status' => true, - 'msg' => 'Period Delete Error', + 'msg' => ucwords(trans('controller.delete_error', ['prefix'=>trans('el_common.period')])), 'indicator_id' => $id, ], 400); } diff --git a/app/Http/Controllers/Admin/Activity/PlannedDisbursementController.php b/app/Http/Controllers/Admin/Activity/PlannedDisbursementController.php index 5168f8240c..68db2febe0 100644 --- a/app/Http/Controllers/Admin/Activity/PlannedDisbursementController.php +++ b/app/Http/Controllers/Admin/Activity/PlannedDisbursementController.php @@ -51,7 +51,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while rendering planned-disbursement form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.planned_disbursement')])); } } @@ -67,14 +67,14 @@ public function update(PlannedDisbursementRequest $request, $id): JsonResponse|R { try { if (!$this->plannedDisbursementService->update($id, $request->except(['_token', '_method']))) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating planned-disbursement.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.planned_disbursement')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Planned-disbursement updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.planned_disbursement'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating planned-disbursement.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.planned_disbursement')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/PolicyMarkerController.php b/app/Http/Controllers/Admin/Activity/PolicyMarkerController.php index 6a0e521338..1d184c80b2 100644 --- a/app/Http/Controllers/Admin/Activity/PolicyMarkerController.php +++ b/app/Http/Controllers/Admin/Activity/PolicyMarkerController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening policy-marker form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.policy_maker')])); } } @@ -66,14 +66,14 @@ public function update(PolicyMarkerRequest $request, $id): JsonResponse|Redirect { try { if (!$this->policyMarkerService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating policy-marker.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.policy_maker')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Policy-marker updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.policy_maker'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating policy-marker.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.policy_maker')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/RecipientCountryController.php b/app/Http/Controllers/Admin/Activity/RecipientCountryController.php index ce6f3b9f14..239c8c1614 100644 --- a/app/Http/Controllers/Admin/Activity/RecipientCountryController.php +++ b/app/Http/Controllers/Admin/Activity/RecipientCountryController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening recipient-country form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.recipient_country')])); } } @@ -66,14 +66,14 @@ public function update(RecipientCountryRequest $request, $id): JsonResponse|Redi { try { if (!$this->recipientCountryService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating recipient-country.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.recipient_country')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Recipient-country updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.recipient_country'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating recipient-country.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.recipient_country')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/RecipientRegionController.php b/app/Http/Controllers/Admin/Activity/RecipientRegionController.php index 25c61cd8d4..d64a380206 100644 --- a/app/Http/Controllers/Admin/Activity/RecipientRegionController.php +++ b/app/Http/Controllers/Admin/Activity/RecipientRegionController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening recipient-region form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.recipient_region')])); } } @@ -66,14 +66,14 @@ public function update(RecipientRegionRequest $request, $id): JsonResponse|Redir { try { if (!$this->recipientRegionService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating recipient-region.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.recipient_region')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Recipient-Region updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.recipient_region'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating recipient-region.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.recipient_region')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/RelatedActivityController.php b/app/Http/Controllers/Admin/Activity/RelatedActivityController.php index 3d1338a0c9..bdc5a5f17c 100644 --- a/app/Http/Controllers/Admin/Activity/RelatedActivityController.php +++ b/app/Http/Controllers/Admin/Activity/RelatedActivityController.php @@ -48,7 +48,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening related-activity form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.related_activity')])); } } @@ -64,14 +64,14 @@ public function update(RelatedActivityRequest $request, $id): JsonResponse|Redir { try { if (!$this->relatedActivityService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating related-activity.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.related_activity')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Related-activity updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.related_activity'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating related-activity.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.related_activity')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/ReportingOrgController.php b/app/Http/Controllers/Admin/Activity/ReportingOrgController.php index f95fe88660..9e0bbdf6a4 100644 --- a/app/Http/Controllers/Admin/Activity/ReportingOrgController.php +++ b/app/Http/Controllers/Admin/Activity/ReportingOrgController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity reporting_org form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.activity_reporting_org')])); } } @@ -66,14 +66,14 @@ public function update(ReportingOrgRequest $request, int $id): RedirectResponse { try { if (!$this->reportingOrgService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating reporting-org.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.reporting_organisation')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity reporting-org updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.reporting_organisation'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity reporting-org.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.reporting_organisation')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/ResultController.php b/app/Http/Controllers/Admin/Activity/ResultController.php index 514e8e73b2..95bd9013f7 100644 --- a/app/Http/Controllers/Admin/Activity/ResultController.php +++ b/app/Http/Controllers/Admin/Activity/ResultController.php @@ -65,7 +65,7 @@ public function index($activityId): View|RedirectResponse return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while rendering activity transactions listing.' + trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transactions_listing')]) ); } } @@ -85,13 +85,13 @@ public function getPaginatedResults(int $activityId, int $page = 1): JsonRespons return response()->json([ 'success' => true, - 'message' => 'Results fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.results'), 'actioned'=>trans('controller.fetched')])), 'data' => $result, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -116,7 +116,7 @@ public function create($id): Factory|View|RedirectResponse|Application return redirect()->route('admin.activity.result.index', $id)->with( 'error', - 'Error has occurred while rendering activity result form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('el_common.result')]) ); } } @@ -140,14 +140,14 @@ public function store(ResultRequest $request, $activityId): RedirectResponse return redirect()->route('admin.activity.result.show', [$activityId, $result['id']])->with( 'success', - 'Activity result created successfully.' + ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_result'), 'actioned'=>trans('controller.created')])) ); } catch (\Exception $e) { logger()->error($e->getMessage()); return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while creating activity result.' + trans('controller.error_has_occurred', ['action'=>trans('controller.creating'), 'suffix'=>trans('controller.activity_result')]) ); } } @@ -166,7 +166,7 @@ public function show($activityId, $resultId): View|RedirectResponse $toast = generateToastData(); $activity = $this->activityService->getActivity($activityId); $result = $this->resultService->getResultWithIndicatorAndPeriod($resultId, $activityId); - $element = getElementSchema('result'); + $element = hot_swap(getElementSchema('result')); $types = getResultTypes(); return view('admin.activity.result.detail', compact('activity', 'result', 'types', 'toast', 'element')); @@ -175,7 +175,7 @@ public function show($activityId, $resultId): View|RedirectResponse return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while rending result detail page.' + trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.result_detail')]) ); } } @@ -202,7 +202,7 @@ public function edit($activityId, $resultId): View|RedirectResponse return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while rendering activity result form.' + trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_result')]) ); } } @@ -224,20 +224,20 @@ public function update(ResultRequest $request, $activityId, $resultId): Redirect if (!$this->resultService->update($resultId, ['activity_id' => $activityId, 'result' => $resultData])) { return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while updating activity result.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_result')]) ); } return redirect()->route('admin.activity.result.show', [$activityId, $resultId])->with( 'success', - 'Activity result updated successfully.' + ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_result'), 'actioned'=>trans('controller.updated')])) ); } catch (\Exception $e) { logger()->error($e->getMessage()); return redirect()->route('admin.activity.result.index', $activityId)->with( 'error', - 'Error has occurred while updating activity result.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_result')]) ); } } @@ -254,20 +254,20 @@ public function destroy($id, $resultId): JsonResponse { try { $this->resultService->deleteResult($resultId); - Session::flash('success', 'Result Deleted Successfully'); + Session::flash('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.result'), 'actioned'=>trans('controller.deleted')]))); return response()->json([ 'status' => true, - 'msg' => 'Result Deleted Successfully', + 'msg' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.result'), 'actioned'=>trans('controller.deleted')])), 'activity_id' => $id, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - Session::flash('error', 'Result Delete Error'); + Session::flash('error', ucwords(trans('delete_error', ['prefix'=>trans('el_common.result')]))); return response()->json([ 'status' => true, - 'msg' => 'Result Delete Error', + 'msg' => ucwords(trans('delete_error', ['prefix'=>trans('el_common.result')])), 'activity_id' => $id, ], 400); } diff --git a/app/Http/Controllers/Admin/Activity/ScopeController.php b/app/Http/Controllers/Admin/Activity/ScopeController.php index 6ad4efe02d..034948c3ef 100644 --- a/app/Http/Controllers/Admin/Activity/ScopeController.php +++ b/app/Http/Controllers/Admin/Activity/ScopeController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity-scope form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.activity_form')])); } } @@ -68,14 +68,14 @@ public function update(ScopeRequest $request, $id): JsonResponse|RedirectRespons $activityScope = $request->get('activity_scope') !== null ? (int) $request->get('activity_scope') : null; if (!$this->scopeService->update($id, $activityScope)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity-scope.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_scope')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity-scope updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.activity_scope'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity-scope.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_scope')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/SectorController.php b/app/Http/Controllers/Admin/Activity/SectorController.php index b424bda623..8dd14fd324 100644 --- a/app/Http/Controllers/Admin/Activity/SectorController.php +++ b/app/Http/Controllers/Admin/Activity/SectorController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity sector form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.activity_sector')])); } } @@ -66,14 +66,14 @@ public function update(SectorRequest $request, $id): JsonResponse|RedirectRespon { try { if (!$this->sectorService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity sector.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_sector')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity sector updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.activity_sector'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity sector.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_sector')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/StatusController.php b/app/Http/Controllers/Admin/Activity/StatusController.php index b657865c44..0f2ab82bd8 100644 --- a/app/Http/Controllers/Admin/Activity/StatusController.php +++ b/app/Http/Controllers/Admin/Activity/StatusController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse|JsonResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity title form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.activity_title')])); } } @@ -68,15 +68,15 @@ public function update(StatusRequest $request, $id): JsonResponse|RedirectRespon $activityStatus = $request->get('activity_status') !== null ? (int) $request->get('activity_status') : null; if (!$this->statusService->update($id, $activityStatus)) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity status.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_status')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity status updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.activity_status'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); return response()->json( - ['success' => false, 'error' => 'Error has occurred while updating activity status.'] + ['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.activity_status')])] ); } } diff --git a/app/Http/Controllers/Admin/Activity/TagController.php b/app/Http/Controllers/Admin/Activity/TagController.php index 15bcc2198f..17f66a347c 100644 --- a/app/Http/Controllers/Admin/Activity/TagController.php +++ b/app/Http/Controllers/Admin/Activity/TagController.php @@ -50,7 +50,7 @@ public function edit(int $id): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening tag form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.tag')])); } } @@ -66,14 +66,14 @@ public function update(TagRequest $request, $id): JsonResponse|RedirectResponse { try { if (!$this->tagService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating tag.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.tag')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Tag updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.tag'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating tag.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.tag')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/TitleController.php b/app/Http/Controllers/Admin/Activity/TitleController.php index 67c5490ed8..5dec2c1d18 100644 --- a/app/Http/Controllers/Admin/Activity/TitleController.php +++ b/app/Http/Controllers/Admin/Activity/TitleController.php @@ -52,7 +52,7 @@ public function edit(int $id): Factory|View|RedirectResponse|Application } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while opening activity title form.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.activity_title')])); } } @@ -68,14 +68,14 @@ public function update(TitleRequest $request, $id): JsonResponse|RedirectRespons { try { if (!$this->titleService->update($id, $request->all())) { - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity title.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_title')])); } - return redirect()->route('admin.activity.show', $id)->with('success', 'Activity title updated successfully.'); + return redirect()->route('admin.activity.show', $id)->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.activity_title'), 'actioned'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activity.show', $id)->with('error', 'Error has occurred while updating activity title.'); + return redirect()->route('admin.activity.show', $id)->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_title')])); } } } diff --git a/app/Http/Controllers/Admin/Activity/TransactionController.php b/app/Http/Controllers/Admin/Activity/TransactionController.php index 8667e23eeb..7699107d42 100644 --- a/app/Http/Controllers/Admin/Activity/TransactionController.php +++ b/app/Http/Controllers/Admin/Activity/TransactionController.php @@ -74,7 +74,7 @@ public function index($activityId): Factory|View|RedirectResponse|Application return redirect()->route('admin.activity.show', $activityId)->with( 'error', - 'Error has occurred while rendering activity transactions listing.' + trans('controller.error_has_occurred', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transactions_listing')]) ); } } @@ -94,13 +94,13 @@ public function getPaginatedTransactions(int $activityId, int $page = 1): JsonRe return response()->json([ 'success' => true, - 'message' => 'Transactions fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.transactions'), 'actioned'=>trans('controller.fetched')])), 'data' => $transaction, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -125,7 +125,7 @@ public function create($activityId): Factory|View|RedirectResponse|Application return redirect()->route('admin.activity.show', $activityId)->with( 'error', - 'Error has occurred while rendering activity transaction form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transaction')]) ); } } @@ -149,14 +149,14 @@ public function store(TransactionRequest $request, $activityId): RedirectRespons return redirect()->route('admin.activity.transaction.show', [$activityId, $transaction['id']])->with( 'success', - 'Activity transaction created successfully.' + ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.activity_transaction'), 'actioned'=>trans('controller.created')])) ); } catch (\Exception $e) { logger()->error($e->getMessage()); return redirect()->route('admin.activity.transaction.index', $activityId)->with( 'error', - 'Error has occurred while creating activity transaction.' + trans('controller.error_has_occurred', ['action'=>trans('controller.creating'), 'suffix'=>trans('controller.activity_transaction')]) ); } } @@ -174,7 +174,7 @@ public function show($activityId, $transactionId): Factory|View|RedirectResponse try { $activity = $this->activityService->getActivity($activityId); $transaction = $this->transactionService->getTransaction($transactionId); - $element = getElementSchema('transactions'); + $element = hot_swap(getElementSchema('transactions')); $types = getTransactionTypes(); $toast = generateToastData(); @@ -184,7 +184,7 @@ public function show($activityId, $transactionId): Factory|View|RedirectResponse return redirect()->route('admin.activity.transaction.index', $activityId)->with( 'error', - 'Error has occurred while rending transaction detail page.' + trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.transaction_detail')]) ); } } @@ -211,7 +211,7 @@ public function edit($activityId, $transactionId): Factory|View|RedirectResponse return redirect()->route('admin.activity.transaction.index', $activityId)->with( 'error', - 'Error has occurred while rendering activity transaction form.' + trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_transaction')]) ); } } @@ -231,7 +231,7 @@ public function update(TransactionRequest $request, $activityId, $transactionId) if (!$this->transactionService->update($transactionId, $request->except(['_method', '_token']))) { return redirect()->route('admin.activity.transaction.index', $activityId)->with( 'error', - 'Error has occurred while updating activity transaction.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_transaction')]) ); } @@ -244,7 +244,7 @@ public function update(TransactionRequest $request, $activityId, $transactionId) return redirect()->route('admin.activity.transaction.index', $activityId)->with( 'error', - 'Error has occurred while updating activity transaction.' + trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.activity_transaction')]) ); } } @@ -262,20 +262,20 @@ public function destroy($id, $transactionId): JsonResponse try { $this->transactionService->deleteTransaction($transactionId); - Session::flash('success', 'Transaction Deleted Successfully'); + Session::flash('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.transaction'), 'actioned'=>trans('controller.deleted')]))); return response()->json([ 'status' => true, - 'msg' => 'Transaction Deleted Successfully', + 'msg' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.transaction'), 'actioned'=>trans('controller.deleted')])), 'activity_id' => $id, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - Session::flash('error', 'Transaction Delete Error'); + Session::flash('error', ucwords(trans('delete_error', ['prefix'=>trans('el_common.transaction')]))); return response()->json([ 'status' => false, - 'msg' => 'Transaction Delete Error', + 'msg' => ucwords(trans('delete_error', ['prefix'=>trans('el_common.transaction')])), 'activity_id' => $id, ], 400); } diff --git a/app/Http/Controllers/Admin/Download/DownloadActivityController.php b/app/Http/Controllers/Admin/Download/DownloadActivityController.php index 5f32c94fdb..3339413808 100644 --- a/app/Http/Controllers/Admin/Download/DownloadActivityController.php +++ b/app/Http/Controllers/Admin/Download/DownloadActivityController.php @@ -72,7 +72,7 @@ public function downloadActivityCsv(Request $request): BinaryFileResponse|JsonRe } if (!isset($activities) || !count($activities)) { - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } $csvData = $this->downloadActivityService->getCsvData($activities); @@ -81,7 +81,7 @@ public function downloadActivityCsv(Request $request): BinaryFileResponse|JsonRe } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while downloading activity csv.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.downloading'), 'suffix'=>trans('controller.activity_csv')])]); } } @@ -107,7 +107,7 @@ public function downloadActivityXml(Request $request, bool $download = false): R } if (!isset($activities) || !count($activities)) { - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } $mergedContent = $this->downloadActivityService->getCombinedXmlFile($activities); @@ -127,7 +127,7 @@ public function downloadActivityXml(Request $request, bool $download = false): R } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while downloading activity csv.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.downloading'), 'suffix'=>trans('controller.activity_csv')])]); } } diff --git a/app/Http/Controllers/Admin/ImportActivity/ImportActivityController.php b/app/Http/Controllers/Admin/ImportActivity/ImportActivityController.php index f4d6c28204..c25c62c3be 100644 --- a/app/Http/Controllers/Admin/ImportActivity/ImportActivityController.php +++ b/app/Http/Controllers/Admin/ImportActivity/ImportActivityController.php @@ -82,7 +82,7 @@ public function index(): View|JsonResponse|RedirectResponse { try { if (!Auth::user()->organization_id) { - Session::put('error', 'User is not associated with any organization.'); + Session::put('error', trans('controller.user_not_associated')); return redirect()->route('admin.activities.index'); } @@ -91,7 +91,7 @@ public function index(): View|JsonResponse|RedirectResponse } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while rendering activity import page.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred_form', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_import')])]); } } @@ -117,7 +117,7 @@ public function store(ImportActivityRequest $request): JsonResponse } } else { if ($this->importCsvService->isCsvFileEmpty($file)) { - $response = ['success' => false, 'type' => 'danger', 'code' => ['message', ['message' => trans('Data not available')]], 'error' => trans('Data not available')]; + $response = ['success' => false, 'type' => 'danger', 'code' => ['message', ['message' => trans(trans('controller.data_not_available'))]], 'error' => trans(trans('controller.data_not_available'))]; return response()->json($response); } @@ -131,11 +131,11 @@ public function store(ImportActivityRequest $request): JsonResponse } } - return response()->json(['success' => true, 'message' => 'Uploaded successfully', 'type' => $filetype]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.action_failed', ['prefix'=>'', 'action'=>trans('controller.uploaded')])), 'type' => $filetype]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while rendering activity import page.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.activity_import')])]); } } @@ -171,10 +171,10 @@ public function importValidatedActivities(Request $request): mixed return response()->json(['success' => true, 'message' => 'Imported successfully', 'type' => $filetype]); } catch (\Exception $e) { - Session::put('error', 'Error occurred while importing activity'); + Session::put('error', trans('controller.error_has_occurred', ['action'=>trans('controller.importing'), 'suffix'=>trans('el_common.activity')])); logger()->error($e->getMessage()); - return redirect()->back()->withResponse(['success' => false, 'message' => 'Error has occurred while importing activity.']); + return redirect()->back()->withResponse(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.importing'), 'suffix'=>trans('el_common.activity')])]); } } @@ -190,7 +190,7 @@ public function status(): View|RedirectResponse $orgId = Auth::user()->organization_id; if (!$orgId) { - Session::put('error', 'User is not associated with any organization.'); + Session::put('error', trans('controller.user_not_associated')); return redirect()->route('admin.activities.index'); } @@ -227,7 +227,7 @@ public function status(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activities.index')->withResponse(['success' => false, 'error' => 'Error has occurred while checking the status.']); + return redirect()->route('admin.activities.index')->withResponse(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.checking'), 'suffix'=>trans('controller.the_status')])]); } } @@ -242,9 +242,9 @@ public function checkStatus(): JsonResponse $filetype = Session::get('import_filetype'); if (!$filetype) { - Session::put('error', 'Please upload csv or xml file to import activity.'); + Session::put('error', trans('controller.please_upload_csc_or_xml')); - return response()->json(['status' => 'error', 'message' => 'Please upload csv or xml file to import activity.']); + return response()->json(['status' => 'error', 'message' => trans('controller.please_upload_csc_or_xml')]); } if ($filetype === 'xml') { @@ -258,7 +258,7 @@ public function checkStatus(): JsonResponse $status = strcasecmp($result->message, 'Complete') === 0; if (!$data) { - Session::put('error', 'Error has occurred while importing activities.'); + Session::put('error', trans('controller.error_has_occurred', ['action'=>trans('controller.importing'), 'suffix'=>trans('el_common.activities')])); } return response()->json(['status' => $status, 'data' => $data]); diff --git a/app/Http/Controllers/Admin/Organization/DocumentLinkController.php b/app/Http/Controllers/Admin/Organization/DocumentLinkController.php index d79e8cd5c2..bf20c88a2e 100644 --- a/app/Http/Controllers/Admin/Organization/DocumentLinkController.php +++ b/app/Http/Controllers/Admin/Organization/DocumentLinkController.php @@ -50,7 +50,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization document-link form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_document_link')])); } } @@ -65,14 +65,14 @@ public function update(DocumentLinkRequest $request): RedirectResponse { try { if (!$this->documentLinkService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization document-link.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_document_link')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization document-link updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_document_link', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization document-link.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_document_link')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/NameController.php b/app/Http/Controllers/Admin/Organization/NameController.php index d7498c672c..e5b6e5241e 100644 --- a/app/Http/Controllers/Admin/Organization/NameController.php +++ b/app/Http/Controllers/Admin/Organization/NameController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization name form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.org_name')])); } } @@ -64,14 +64,14 @@ public function update(NameRequest $request): RedirectResponse { try { if (!$this->nameService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization name.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.org_name')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization name updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'el_common.organisation_name', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization name.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.org_name')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/OrganizationController.php b/app/Http/Controllers/Admin/Organization/OrganizationController.php index 738fe3704b..2e0e16fd50 100644 --- a/app/Http/Controllers/Admin/Organization/OrganizationController.php +++ b/app/Http/Controllers/Admin/Organization/OrganizationController.php @@ -73,7 +73,7 @@ public function show(): View|RedirectResponse try { $toast['message'] = Session::has('error') ? Session::get('error') : (Session::get('success') ? Session::get('success') : ''); $toast['type'] = Session::has('error') ? 'error' : 'success'; - $elements = json_decode(file_get_contents(app_path('IATI/Data/organizationElementJsonSchema.json')), true, 512, JSON_THROW_ON_ERROR); + $elements = hot_swap(json_decode(file_get_contents(app_path('IATI/Data/organizationElementJsonSchema.json')), true, 512, JSON_THROW_ON_ERROR)); $elementGroups = json_decode(file_get_contents(app_path('Data/Organization/OrganisationElementsGroup.json')), true, 512, JSON_THROW_ON_ERROR); $types = $this->organizationService->getOrganizationTypes(); $organization = $this->organizationService->getOrganizationData(Auth::user()->organization_id); @@ -86,7 +86,7 @@ public function show(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activities.index')->with('error', 'Error has occurred while opening organization detail page.'); + return redirect()->route('admin.activities.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_detail')])); } } @@ -144,7 +144,7 @@ public function getRegistrationAgency($country_code): array } } - return ['message' => 'Filtered Agency successfully fetched', 'data' => $filtered_agency]; + return ['message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.filtered_agency', 'suffix'=>trans('controller.fetched')])), 'data' => $filtered_agency]; } /** @@ -162,7 +162,7 @@ public function getPublisherStatus(): JsonResponse return response()->json([ 'success' => true, - 'message' => 'Publisher status successfully retrieved.', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.publisher_status', 'suffix'=>trans('controller.retrieved')])), 'data' => ['publisher_active' => $status], ]); } catch (\Exception $e) { diff --git a/app/Http/Controllers/Admin/Organization/OrganizationIdentifierController.php b/app/Http/Controllers/Admin/Organization/OrganizationIdentifierController.php index e18fc76ca9..5a25387387 100644 --- a/app/Http/Controllers/Admin/Organization/OrganizationIdentifierController.php +++ b/app/Http/Controllers/Admin/Organization/OrganizationIdentifierController.php @@ -51,7 +51,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activities.show', $id)->with('error', 'Error has occurred while opening organization identifier form.'); + return redirect()->route('admin.activities.show', $id)->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.organisation_identifier')])); } } @@ -70,18 +70,18 @@ public function update(OrganizationIdentifierRequest $request): RedirectResponse $organizationIdentifier = $request->all(); if (!$this->verifyPublisher($organizationIdentifier)) { - return redirect()->route('admin.organisation.identifier.edit')->with('error', 'Please enter correct identifier as present in IATI Registry.')->withInput(); + return redirect()->route('admin.organisation.identifier.edit')->with('error', trans('controller.enter_correct_identifier'))->withInput(); } if (!$this->organizationIdentifierService->update($id, $organizationIdentifier)) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization identifier.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.organisation_identifier')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization identifier updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'el_common.organisation_identifier', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization identifier.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.organisation_identifier')])); } } diff --git a/app/Http/Controllers/Admin/Organization/RecipientCountryBudgetController.php b/app/Http/Controllers/Admin/Organization/RecipientCountryBudgetController.php index 57dd1c4804..584bfbc78a 100644 --- a/app/Http/Controllers/Admin/Organization/RecipientCountryBudgetController.php +++ b/app/Http/Controllers/Admin/Organization/RecipientCountryBudgetController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization recipient-country-budget form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('el_common.org_recipient_country_budget')])); } } @@ -64,14 +64,14 @@ public function update(RecipientCountryBudgetRequest $request): RedirectResponse { try { if (!$this->recipientCountryBudgetService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-country-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.org_recipient_country_budget')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization recipient-country-budget updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_recipient_country_budget', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-country-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('el_common.org_recipient_country_budget')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/RecipientOrgBudgetController.php b/app/Http/Controllers/Admin/Organization/RecipientOrgBudgetController.php index f81b269ceb..8ded1b3dd4 100644 --- a/app/Http/Controllers/Admin/Organization/RecipientOrgBudgetController.php +++ b/app/Http/Controllers/Admin/Organization/RecipientOrgBudgetController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization recipient-org-budget form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_recipient_org_budget')])); } } @@ -64,14 +64,14 @@ public function update(RecipientOrgBudgetRequest $request): RedirectResponse { try { if (!$this->recipientOrgBudgetService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-org-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_recipient_org_budget')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization recipient-org-budget updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_recipient_org_budget', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-org-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_recipient_org_budget')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/RecipientRegionBudgetController.php b/app/Http/Controllers/Admin/Organization/RecipientRegionBudgetController.php index b9a58bc1ae..0b56de2fcf 100644 --- a/app/Http/Controllers/Admin/Organization/RecipientRegionBudgetController.php +++ b/app/Http/Controllers/Admin/Organization/RecipientRegionBudgetController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization recipient-region-budget form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_recipient_region_budget')])); } } @@ -64,14 +64,14 @@ public function update(RecipientRegionBudgetRequest $request): RedirectResponse { try { if (!$this->recipientRegionBudgetService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-region-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_recipient_region_budget')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization recipient-region-budget updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_recipient_region_budget', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization recipient-region-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_recipient_region_budget')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/ReportingOrgController.php b/app/Http/Controllers/Admin/Organization/ReportingOrgController.php index a817ccf6ef..a9b8972bd3 100644 --- a/app/Http/Controllers/Admin/Organization/ReportingOrgController.php +++ b/app/Http/Controllers/Admin/Organization/ReportingOrgController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization reporting_org form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_reporting_org')])); } } @@ -64,14 +64,14 @@ public function update(ReportingOrgRequest $request): RedirectResponse { try { if (!$this->reportingOrgService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization reporting_org.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_reporting_org')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization reporting_org updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_reporting_org', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization reporting_org.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_reporting_org')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/TotalBudgetController.php b/app/Http/Controllers/Admin/Organization/TotalBudgetController.php index cadd75d1a8..53745052ac 100644 --- a/app/Http/Controllers/Admin/Organization/TotalBudgetController.php +++ b/app/Http/Controllers/Admin/Organization/TotalBudgetController.php @@ -46,7 +46,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization reporting_org form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_reporting_org')])); } } @@ -61,14 +61,14 @@ public function update(TotalBudgetRequest $request): RedirectResponse { try { if (!$this->totalBudgetService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization total-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_total_budget')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization total-budget updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_total_budget', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization total-budget.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_total_budget')])); } } } diff --git a/app/Http/Controllers/Admin/Organization/TotalExpenditureController.php b/app/Http/Controllers/Admin/Organization/TotalExpenditureController.php index a09203c2b0..5d24a594c4 100644 --- a/app/Http/Controllers/Admin/Organization/TotalExpenditureController.php +++ b/app/Http/Controllers/Admin/Organization/TotalExpenditureController.php @@ -49,7 +49,7 @@ public function edit(): View|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while opening organization total-expenditure form.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred_form', ['action'=>trans('controller.opening'), 'suffix'=>trans('controller.org_total_expenditure')])); } } @@ -64,14 +64,14 @@ public function update(TotalExpenditureRequest $request): RedirectResponse { try { if (!$this->totalExpenditureService->update(Auth::user()->organization_id, $request->all())) { - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization total-expenditure.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_total_expenditure')])); } - return redirect()->route('admin.organisation.index')->with('success', 'Organization total-expenditure updated successfully.'); + return redirect()->route('admin.organisation.index')->with('success', ucfirst(trans('controller.actioned_successfully', ['prefix'=>'controller.org_total_expenditure', 'suffix'=>trans('controller.updated')]))); } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization total-expenditure.'); + return redirect()->route('admin.organisation.index')->with('error', trans('controller.error_has_occurred', ['action'=>trans('controller.updating'), 'suffix'=>trans('controller.org_total_expenditure')])); } } } diff --git a/app/Http/Controllers/Admin/Setting/SettingController.php b/app/Http/Controllers/Admin/Setting/SettingController.php index f008deee7c..b0346d6caa 100644 --- a/app/Http/Controllers/Admin/Setting/SettingController.php +++ b/app/Http/Controllers/Admin/Setting/SettingController.php @@ -59,7 +59,7 @@ public function index(): Factory|View|Application|RedirectResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return redirect()->route('admin.activities.index')->with('error', 'Error while rendering setting page'); + return redirect()->route('admin.activities.index')->with('error', trans('controller.error_has_occurred_page', ['action'=>trans('controller.rendering'), 'suffix'=>trans('controller.setting')])); } } @@ -71,11 +71,11 @@ public function getSetting(): JsonResponse try { $setting = $this->settingService->getSetting(); - return response()->json(['success' => true, 'message' => 'Settings fetched successfully', 'data' => $setting]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('settings.settings_label'), 'actioned'=>trans('controller.fetched')])), 'data' => $setting]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -96,15 +96,15 @@ public function verify(PublisherFormRequest $request): JsonResponse $publisherData['publisher_verification'] = ($this->verifyPublisher($publisherData))['validation']; $publisherData['token_verification'] = ($this->verifyApi($publisherData))['validation']; $message = $publisherData['publisher_verification'] ? - ($publisherData['token_verification'] ? 'API token verified successfully' : 'API token incorrect. Please enter valid API token.') - : 'API token incorrect. Please make sure that your publisher is approved in IATI Registry.'; + ($publisherData['token_verification'] ? trans('controller.actioned_successfully', ['prefix'=>trans('controller.api_token'), 'actioned'=>trans('controller.verified')]) : trans('controller.api_token_incorrect') . ' ' . trans('controller.enter_valid_api_token')) + : trans('controller.api_token_incorrect') . ' ' . trans('controller.make_sure_publisher_is_approved'); $success = $publisherData['publisher_verification'] && $publisherData['token_verification']; return response()->json(['success' => $success, 'message' => $message, 'data' => $publisherData]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while verify publisher']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('el_common.publisher')])]); } } @@ -134,13 +134,13 @@ public function storePublishingInfo(PublisherFormRequest $request): JsonResponse $this->db->commit(); - return response()->json(['success' => true, 'message' => 'Publisher setting stored successfully', 'data' => $publisherData]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.publisher_setting'), 'actioned'=>trans('controller.stored')])), 'data' => $publisherData]); } return response()->json( [ 'success' => false, - 'message' => 'Error occurred while verifying data', + 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('controller.the_data')]), 'data' => $publisherData, 'error' => ['token' => $token_verification, 'publisher_verification' => $publisher_verification], ] @@ -148,7 +148,7 @@ public function storePublishingInfo(PublisherFormRequest $request): JsonResponse } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while storing setting']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.storing'), 'suffix'=>trans('controller.setting')])]); } } @@ -169,12 +169,12 @@ public function storeDefaultForm(DefaultFormRequest $request): JsonResponse $this->db->commit(); - return response()->json(['success' => true, 'message' => 'Default setting stored successfully', 'data' => $setting]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.default_settings'), 'actioned'=>trans('controller.stored')])), 'data' => $setting]); } catch (\Exception $e) { $this->db->rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while storing setting']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.storing'), 'suffix'=>trans('controller.setting')])]); } } @@ -265,7 +265,7 @@ public function getSettingStatus(): JsonResponse return response()->json([ 'success' => true, - 'message' => 'Setting status successfully retrieved.', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.setting_status'), 'actioned'=>trans('controller.retrieved')])), 'data' => $status, ]); } catch (\Exception $e) { diff --git a/app/Http/Controllers/Admin/User/UserController.php b/app/Http/Controllers/Admin/User/UserController.php index 85cae388a1..f0414c16d8 100644 --- a/app/Http/Controllers/Admin/User/UserController.php +++ b/app/Http/Controllers/Admin/User/UserController.php @@ -54,7 +54,7 @@ public function getUserVerificationStatus(): JsonResponse return response()->json([ 'success' => true, - 'message' => 'User status successfully retrieved.', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.user_status'), 'actioned'=>trans('controller.retrieved')])), 'data' => ['account_verified' => $status], ]); } catch (\Exception $e) { @@ -81,7 +81,7 @@ public function resendVerificationEmail(): JsonResponse return response()->json([ 'success' => true, - 'message' => 'Verification email successfully sent.', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.verification_email'), 'actioned'=>trans('controller.sent')])), ]); } catch (\Exception $e) { logger()->error($e->getMessage()); diff --git a/app/Http/Controllers/Admin/Workflow/ActivityWorkflowController.php b/app/Http/Controllers/Admin/Workflow/ActivityWorkflowController.php index c69bbb3e59..897c16bf49 100644 --- a/app/Http/Controllers/Admin/Workflow/ActivityWorkflowController.php +++ b/app/Http/Controllers/Admin/Workflow/ActivityWorkflowController.php @@ -64,7 +64,7 @@ public function publish($id): JsonResponse DB::commit(); Session::put('success', 'Activity has been published successfully.'); - return response()->json(['success' => true, 'message' => 'Activity has been published successfully.']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.has_been_actioned_successfully', ['prefix'=>trans('el_common.activity'), 'actioned'=>trans('controller.published')]))]); } catch (PublisherNotFound $message) { DB::rollBack(); logger()->error($message->getMessage()); @@ -74,9 +74,9 @@ public function publish($id): JsonResponse } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - Session::put('error', 'Error has occurred while publishing activity.'); + Session::put('error', trans('controller.error_has_occurred', ['action'=>trans('controller.publishing'), 'suffix'=>trans('el_common.activity')])); - return response()->json(['success' => false, 'message' => 'Error has occurred while publishing activity.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.publishing'), 'suffix'=>trans('el_common.activity')])]); } } @@ -94,22 +94,22 @@ public function unpublish($id): JsonResponse $activity = $this->activityWorkflowService->findActivity($id); if (!$activity->linked_to_iati) { - Session::put('error', 'This activity has not been published to un-publish.'); + Session::put('error', trans('activity_not_been_published_to_unpublish')); - return response()->json(['success' => false, 'message' => 'This activity has not been published to un-publish.']); + return response()->json(['success' => false, 'message' => trans('activity_not_been_published_to_unpublish')]); } $this->activityWorkflowService->unpublishActivity($activity); DB::commit(); - Session::put('success', 'Activity has been un-published successfully.'); + Session::put('success', ucfirst(trans('controller.has_been_actioned_successfully', ['prefix'=>trans('el_common.activity'), 'actioned'=>trans('controller.unpublished')]))); - return response()->json(['success' => true, 'message' => 'Activity has been un-published successfully.']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.has_been_actioned_successfully', ['prefix'=>trans('el_common.activity'), 'actioned'=>trans('controller.unpublished')]))]); } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - Session::put('error', 'Error has occurred while un-publishing activity.'); + Session::put('error', trans('controller.error_has_occurred', ['action'=>trans('controller.unpublishing'), 'suffix'=>trans('el_common.activity')])); - return response()->json(['success' => false, 'message' => 'Error has occurred while un-publishing activity.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.unpublishing'), 'suffix'=>trans('el_common.activity')])]); } } @@ -139,7 +139,7 @@ public function validateActivity($id): JsonResponse return response()->json(json_decode($response, true, 512, JSON_THROW_ON_ERROR)); } - return response()->json(['success' => false, 'error' => 'Error has occurred while validating activity.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activity')])]); } catch (BadResponseException $ex) { if ($ex->getCode() === 422) { $response = $ex->getResponse()->getBody()->getContents(); @@ -149,11 +149,11 @@ public function validateActivity($id): JsonResponse } } - return response()->json(['success' => false, 'error' => 'Error has occurred while validating activity.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activity')])]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while validating activity.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activity')])]); } } @@ -171,11 +171,11 @@ public function checksForActivityPublish(): JsonResponse return response()->json(['success' => false, 'message' => $message]); } - return response()->json(['success' => true, 'message' => 'Activity is ready to be published.']); + return response()->json(['success' => true, 'message' => trans('activity_ready_to_publish')]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while checking activity.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.checking'), 'suffix'=>trans('el_common.activity')])]); } } } diff --git a/app/Http/Controllers/Admin/Workflow/BulkPublishingController.php b/app/Http/Controllers/Admin/Workflow/BulkPublishingController.php index 37f5245bf0..a0b36c064a 100644 --- a/app/Http/Controllers/Admin/Workflow/BulkPublishingController.php +++ b/app/Http/Controllers/Admin/Workflow/BulkPublishingController.php @@ -84,20 +84,20 @@ public function checkCoreElementsCompleted(Request $request): JsonResponse } if ($this->publishingStatusService->ongoingBulkPublishing(auth()->user()->organization->id)) { - return response()->json(['success' => false, 'message' => 'Another bulk publishing is already in progress.']); + return response()->json(['success' => false, 'message' => trans('another_bulk_publ_in_process')]); } $activityIds = json_decode($request->get('activities'), true, 512, JSON_THROW_ON_ERROR); if (!empty($activityIds)) { - return response()->json(['success' => true, 'message' => 'Retrieved data successfully.', 'data' => $this->bulkPublishingService->getCoreElementsCompletedArray($activityIds)]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.has_been_actioned_successfully', ['prefix'=>trans('controller.the_data'), 'actioned'=>trans('controller.retrieved')])), 'data' => $this->bulkPublishingService->getCoreElementsCompletedArray($activityIds)]); } - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while checking core elements completed.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.checking'), 'suffix'=>trans('common.core_completed_title')])]); } } @@ -130,18 +130,18 @@ public function validateActivities(Request $request): JsonResponse DB::commit(); if (!Arr::get($validationResponse, 'success', true)) { - return response()->json(['success' => false, 'message' => 'Activities validation failed.']); + return response()->json(['success' => false, 'message' => trans('controller.action_failed', ['prefix' => trans('el_common.activities'), 'actioned' => trans('controller.validation')])]); } - return response()->json(['success' => true, 'message' => 'Activities validated successfully.', 'data' => $validationResponse]); + return response()->json(['success' => true, 'message' => trans('controller.actioned_successfully', ['prefix' => trans('el_common.activities'), 'actioned' => trans('controller.validated')]), 'data' => $validationResponse]); } - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while validating activities.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activities')])]); } } @@ -168,7 +168,7 @@ public function startBulkPublish(Request $request): JsonResponse } if ($this->publishingStatusService->ongoingBulkPublishing(auth()->user()->organization->id)) { - return response()->json(['success' => false, 'message' => 'Another bulk publishing is already in progress.']); + return response()->json(['success' => false, 'message' => trans('another_bulk_publ_in_process')]); } $activityIds = json_decode($request->get('activities'), false, 512, JSON_THROW_ON_ERROR); @@ -177,7 +177,7 @@ public function startBulkPublish(Request $request): JsonResponse $activities = $this->activityService->getActivitiesHavingIds($activityIds); if (!count($activities)) { - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } $response = $this->bulkPublishingService->generateInitialBulkPublishingResponse($activities); @@ -185,15 +185,15 @@ public function startBulkPublish(Request $request): JsonResponse dispatch(new BulkPublishActivities($activities, $response['organization_id'], $response['job_batch_uuid'])); DB::commit(); - return response()->json(['success' => true, 'message' => 'Bulk publishing started', 'data' => $response]); + return response()->json(['success' => true, 'message' => trans('controller.bulk_publishing', ['suffix'=>trans('controller.started')]), 'data' => $response]); } - return response()->json(['success' => false, 'message' => 'No activities selected.']); + return response()->json(['success' => false, 'message' => trans('controller.no_activities_selected')]); } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Bulk publishing failed.']); + return response()->json(['success' => false, 'message' => trans('controller.bulk_publishing', ['suffix'=>trans('controller.failed')])]); } } @@ -219,18 +219,18 @@ public function getBulkPublishStatus(): JsonResponse return response()->json(['success' => true, 'message' => $response['message'], 'data' => $response]); } - return response()->json(['success' => true, 'message' => 'No bulk publishing in process.']); + return response()->json(['success' => true, 'message' => trans('controller.no_publishing_in_process')]); } - return response()->json(['success' => false, 'message' => 'Insufficient data.']); + return response()->json(['success' => false, 'message' => trans('controller.insufficient_data')]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Status generation failed.']); + return response()->json(['success' => false, 'message' => trans('controller.status_generation_failed')]); } catch (NotFoundExceptionInterface | ContainerExceptionInterface $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Request error']); + return response()->json(['success' => false, 'message' => trans('controller.request_error')]); } } } diff --git a/app/Http/Controllers/Admin/Workflow/OrganizationWorkflowController.php b/app/Http/Controllers/Admin/Workflow/OrganizationWorkflowController.php index 1e55e67e00..53451247d3 100644 --- a/app/Http/Controllers/Admin/Workflow/OrganizationWorkflowController.php +++ b/app/Http/Controllers/Admin/Workflow/OrganizationWorkflowController.php @@ -61,7 +61,7 @@ public function publish(): JsonResponse $this->organizationWorkflowService->publishOrganization($organization); DB::commit(); - return response()->json(['success' => true, 'message' => 'Organization has been published successfully.']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.organisation'), 'actioned'=>trans('controller.published')]))]); } catch (PublisherNotFound $message) { DB::rollBack(); logger()->error($message->getMessage()); @@ -71,7 +71,7 @@ public function publish(): JsonResponse DB::rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while publishing organization.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.publishing'), 'suffix'=>trans('el_common.organisation')])]); } } @@ -87,18 +87,18 @@ public function unPublish(): JsonResponse|RedirectResponse $organization = Auth::user()->organization; if (!$organization->is_published && $organization->status === 'draft') { - return redirect()->route('admin.activities.index')->with('error', 'This organization has not been published to un-publish.'); + return redirect()->route('admin.activities.index')->with('error', trans('org_not_been_published_to_unpublish')); } $this->organizationWorkflowService->unpublishOrganization($organization); DB::commit(); - return response()->json(['success' => true, 'message' => 'Organization has been un-published successfully.']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.organisation'), 'actioned'=>trans('controller.unpublished')]))]); } catch (\Exception $e) { DB::rollBack(); logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occurred while un-publishing organization.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.unpublishing'), 'suffix'=>trans('el_common.organisation')])]); } } @@ -111,6 +111,6 @@ public function checksForOrganizationPublish(): JsonResponse { $message = $this->activityWorkflowService->getPublishErrorMessage(auth()->user()->organization, 'organization'); - return !empty($message) ? response()->json(['success' => false, 'message' => $message]) : response()->json(['success' => true, 'message' => 'Organization is ready to be published.']); + return !empty($message) ? response()->json(['success' => false, 'message' => $message]) : response()->json(['success' => true, 'message' => trans('controller.organisation_ready_to_publish')]); } } diff --git a/app/Http/Controllers/Api/ActivityController.php b/app/Http/Controllers/Api/ActivityController.php index ce6c9996cf..ed84e46c88 100644 --- a/app/Http/Controllers/Api/ActivityController.php +++ b/app/Http/Controllers/Api/ActivityController.php @@ -41,10 +41,10 @@ public function deleteElement($id, $element): Response|Application|ResponseFacto { try { if (!$this->activityService->deleteElement($id, $element)) { - return response(['status' => false, 'message' => 'Error has occurred while deleting activity element.']); + return response(['status' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.deleting'), 'suffix'=>trans('controller.activity_element')])]); } - $message = "$element element deleted successfully."; + $message = $element . ' ' . trans('controller.actioned_successfully', [':prefix'=>trans('common.element'), 'actioned'=>trans('controller.deleted')]); Session::put('success', $message); @@ -52,7 +52,7 @@ public function deleteElement($id, $element): Response|Application|ResponseFacto } catch (\Exception $e) { logger()->error($e->getMessage()); - return response(['status' => false, 'message' => 'Error has occurred while deleting activity element.']); + return response(['status' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.deleting'), 'suffix'=>trans('controller.activity_element')])]); } } } diff --git a/app/Http/Controllers/Auth/IatiRegisterController.php b/app/Http/Controllers/Auth/IatiRegisterController.php index a6f048bbeb..033bfc8e63 100644 --- a/app/Http/Controllers/Auth/IatiRegisterController.php +++ b/app/Http/Controllers/Auth/IatiRegisterController.php @@ -110,7 +110,7 @@ public function verifyPublisher(IatiRegisterFormRequest $request): JsonResponse| ]); } - return response()->json(['success' => true, 'message' => 'Publisher verified successfully', 'data' => $publisherCheck]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.publisher'), 'actioned'=>trans('controller.deleted')])), 'data' => $publisherCheck]); } catch (ClientException $e) { logger()->error($e->getMessage()); @@ -122,7 +122,7 @@ public function verifyPublisher(IatiRegisterFormRequest $request): JsonResponse| } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'errors' => 'Error has occurred while verifying the publisher.']); + return response()->json(['success' => false, 'errors' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('el_common.publisher')])]); } } @@ -138,11 +138,11 @@ public function verifyPublisher(IatiRegisterFormRequest $request): JsonResponse| public function verifyContactInfo(IatiRegisterFormRequest $request): JsonResponse|RedirectResponse { try { - return response()->json(['success' => true, 'message' => 'Contact info successfully verified']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.contact_info'), 'actioned'=>trans('controller.verified')]))]); } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => true, 'message' => 'Error occurred while verifying contact info']); + return response()->json(['success' => true, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('el_common.contact_info')])]); } } @@ -158,11 +158,11 @@ public function verifyContactInfo(IatiRegisterFormRequest $request): JsonRespons public function verifyAdditionalInfo(IatiRegisterFormRequest $request): JsonResponse|RedirectResponse { try { - return response()->json(['success' => true, 'message' => 'Additional Information successfully verified.']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.additional_info'), 'actioned'=>trans('controller.verified')]))]); } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => true, 'message' => 'Error occurred while verifying additional info.']); + return response()->json(['success' => true, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('controller.additional_info')])]); } } @@ -227,11 +227,11 @@ public function register(IatiRegisterFormRequest $request): JsonResponse|Redirec event(new Registered($createUser['user'])); Session::put('role_id', app(Role::class)->getOrganizationAdminId()); - return response()->json(['success' => true, 'message' => 'User registered successfully']); + return response()->json(['success' => true, 'message' => trans('controller.actioned_successfully', ['prefix'=>trans('controller.user'), 'actioned'=>trans('controller.registered')])]); } catch (Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error has occured while trying to register user. Please try again later.']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['actioned'=>trans('controller.trying_to'), 'suffix'=>trans('controller.register_user')]) . ' ' . trans('controller.try_again')]); } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index d25bcd4ffd..9e3ea5e86b 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -159,7 +159,7 @@ public function verifyPublisher(Request $request): JsonResponse|\GuzzleHttp\Exce ]); } - return response()->json(['success' => true, 'message' => 'Publisher verified successfully', 'data' => $response]); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.publisher'), 'actioned'=>trans('controller.deleted')])), 'data' => $response]); } catch (ClientException $e) { logger()->error($e->getMessage()); @@ -167,15 +167,15 @@ public function verifyPublisher(Request $request): JsonResponse|\GuzzleHttp\Exce [ 'success' => false, 'errors' => [ - 'publisher_name' => ['Publisher Name doesn\'t match your IATI Registry information'], - 'publisher_id' => ['Publisher ID doesn\'t match with your IATI Registry information'], + 'publisher_name' => [trans('publisher_name_doesnt_match')], + 'publisher_id' => [trans('publisher_id_doesnt_match')], ], ] ); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while verifying the publisher.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.verifying'), 'suffix'=>trans('el_common.publisher')])]); } } @@ -231,7 +231,7 @@ public function register(Request $request): JsonResponse|RedirectResponse event(new Registered($user)); Session::put('role_id', app(Role::class)->getOrganizationAdminId()); - return response()->json(['success' => true, 'message' => 'User registered successfully']); + return response()->json(['success' => true, 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('controller.user'), 'actioned'=>trans('controller.deleted')]))]); } /** diff --git a/app/Http/Controllers/SuperAdmin/SuperAdminController.php b/app/Http/Controllers/SuperAdmin/SuperAdminController.php index 9794fc6452..9cd7132575 100644 --- a/app/Http/Controllers/SuperAdmin/SuperAdminController.php +++ b/app/Http/Controllers/SuperAdmin/SuperAdminController.php @@ -41,7 +41,7 @@ public function listOrganizations(): View|Factory|JsonResponse|Application } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'error' => 'Error has occurred while fetching organisations.']); + return response()->json(['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('el_common.organisations')])]); } } @@ -63,13 +63,13 @@ public function getPaginatedOrganizations(Request $request, int $page = 1): Json return response()->json([ 'success' => true, - 'message' => 'Organizations fetched successfully', + 'message' => ucfirst(trans('controller.actioned_successfully', ['prefix'=>trans('el_common.organisations'), 'actioned'=>trans('controller.fetched')])), 'data' => $organizations, ]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while fetching the data']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.fetching'), 'suffix'=>trans('controller.the_data')])]); } } @@ -116,15 +116,15 @@ public function proxyOrganization($userId): JsonResponse if ($user) { auth()->loginUsingId($userId); - return response()->json(['success' => true, 'message' => 'Proxy successful.']); + return response()->json(['success' => true, 'message' => trans('proxy_successful')]); } } - return response()->json(['success' => false, 'message' => 'Error occurred while trying to proxy']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.trying_to'), 'suffix'=>trans('buttons.proxy')])]); } catch (\Exception $e) { logger()->error($e->getMessage()); - return response()->json(['success' => false, 'message' => 'Error occurred while trying to proxy']); + return response()->json(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.trying_to'), 'suffix'=>trans('buttons.proxy')])]); } } } diff --git a/app/Http/Controllers/Web/WebController.php b/app/Http/Controllers/Web/WebController.php index ca75ad9fa7..6934c3ced8 100644 --- a/app/Http/Controllers/Web/WebController.php +++ b/app/Http/Controllers/Web/WebController.php @@ -20,7 +20,7 @@ class WebController extends Controller */ public function index($page = 'signin'): \Illuminate\Contracts\Support\Renderable { - $message = Str::contains(Redirect::intended()->getTargetUrl(), '/email/verify/') ? 'User must be logged in to verify email.' : ''; + $message = Str::contains(Redirect::intended()->getTargetUrl(), '/email/verify/') ? trans('controller.web.user_must_be_logged_in') : ''; return view('web.welcome', compact('page', 'message')); } diff --git a/app/Http/Middleware/AccessibleRoute.php b/app/Http/Middleware/AccessibleRoute.php index f2dc5e00f0..2466caeb36 100644 --- a/app/Http/Middleware/AccessibleRoute.php +++ b/app/Http/Middleware/AccessibleRoute.php @@ -50,6 +50,6 @@ public function handle(Request $request, Closure $next): mixed return $next($request); } - return response(['status'=>false, 'message' => 'Activity element delete denied']); + return response(['status'=>false, 'message' => trans('middleware.activity_element_delete_denied')]); } } diff --git a/app/Http/Middleware/RedirectActivity.php b/app/Http/Middleware/RedirectActivity.php index a7ac33e045..47cfb3e756 100644 --- a/app/Http/Middleware/RedirectActivity.php +++ b/app/Http/Middleware/RedirectActivity.php @@ -96,7 +96,7 @@ public function handle(Request $request, Closure $next): mixed $activity = $this->activityService->getActivity($id); if ($activity === null || !$activity->isActivityOfOrg()) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Activity does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.activity')])); } $byPassResultRoutes = ['admin.activity.result.index', 'admin.activity.results.paginate', 'admin.activity.result.create', 'admin.activity.result.store']; @@ -105,7 +105,7 @@ public function handle(Request $request, Closure $next): mixed $resultId = (int) $request->route('resultId'); if (!$this->resultService->activityResultExists($id, $resultId)) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Result does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.result')])); } } @@ -115,18 +115,18 @@ public function handle(Request $request, Closure $next): mixed $transactionId = (int) $request->route('transactionId'); if (!$this->transactionService->activityTransactionExists($id, $transactionId)) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Transaction does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.transaction')])); } } } elseif ($module === 'result') { $result = $this->resultService->getResult($id); if ($result === null) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Result does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.result')])); } if ($result->activity === null || !$result->activity->isActivityOfOrg()) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Activity does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.activity')])); } $byPassIndicatorRoutes = ['admin.result.indicator.index', 'admin.result.indicators.paginate', 'admin.result.indicator.create', 'admin.result.indicator.store']; @@ -135,7 +135,7 @@ public function handle(Request $request, Closure $next): mixed $indicatorId = (int) $request->route('indicatorId'); if (!$this->indicatorService->resultIndicatorExists($id, $indicatorId)) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Indicator does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.indicator')])); } } @@ -144,15 +144,15 @@ public function handle(Request $request, Closure $next): mixed $indicator = $this->indicatorService->getIndicator($id); if ($indicator === null) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Indicator does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.indicator')])); } if ($indicator->result === null) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Result does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.result')])); } if ($indicator->result->activity === null || !$indicator->result->activity->isActivityOfOrg()) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Activity does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.activity')])); } $byPassPeriodRoutes = ['admin.indicator.period.index', 'admin.indicator.periods.paginate', 'admin.indicator.period.create', 'admin.indicator.period.store']; @@ -161,7 +161,7 @@ public function handle(Request $request, Closure $next): mixed $periodId = (int) $request->route('periodId'); if (!$this->periodService->indicatorPeriodExist($id, $periodId)) { - return redirect(RouteServiceProvider::HOME)->with('error', 'Period does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.period')])); } } $activity = $indicator->result->activity; @@ -171,7 +171,7 @@ public function handle(Request $request, Closure $next): mixed return $next($request); } - return redirect(RouteServiceProvider::HOME)->with('error', 'Activity does not exist'); + return redirect(RouteServiceProvider::HOME)->with('error', trans('middleware.does_not_exist', ['prefix'=>trans('common.activity')])); } return abort(404); diff --git a/app/Http/Middleware/SuperAdminMiddleware.php b/app/Http/Middleware/SuperAdminMiddleware.php index 55feb589f4..3461485eb7 100644 --- a/app/Http/Middleware/SuperAdminMiddleware.php +++ b/app/Http/Middleware/SuperAdminMiddleware.php @@ -38,7 +38,7 @@ public function handle(Request $request, Closure $next): mixed return redirect()->route('admin.activities.index')->with( 'error', - 'You need to be superadmin to use this route.' + trans('middleware.you_need_to_be_superadmin') ); } } diff --git a/app/Http/Requests/Activity/ActivityBaseRequest.php b/app/Http/Requests/Activity/ActivityBaseRequest.php index bd2e6ad040..de1555d910 100644 --- a/app/Http/Requests/Activity/ActivityBaseRequest.php +++ b/app/Http/Requests/Activity/ActivityBaseRequest.php @@ -293,7 +293,7 @@ public function getRulesForRequiredNarrative($formFields, $formBase): array public function getMessagesForRequiredNarrative($formFields, $formBase): array { $messages = []; - $messages[sprintf('%s.narrative.unique_lang', $formBase)] = 'The @xml:lang field must be unique.'; + $messages[sprintf('%s.narrative.unique_lang', $formBase)] = trans('requests.xml_lang_field_symbol', ['suffix'=>trans('requests.suffix.must_be_unique')]); return $messages; } @@ -336,20 +336,20 @@ public function getRulesForNarrative($formFields, $formBase): array public function getMessagesForNarrative($formFields, $formBase): array { $messages = []; - $messages[sprintf('%s.narrative.unique_lang', $formBase)] = 'The narrative language field must be unique.'; - $messages[sprintf('%s.narrative.unique_default_lang', $formBase)] = 'The narrative language field must be unique.'; + $messages[sprintf('%s.narrative.unique_lang', $formBase)] = trans('requests.narrative_lang', ['suffix'=>trans('requests.suffix.must_be_unique')]); + $messages[sprintf('%s.narrative.unique_default_lang', $formBase)] = trans('requests.narrative_lang', ['suffix'=>trans('requests.suffix.must_be_unique')]); foreach ($formFields as $narrativeIndex => $narrative) { $messages[sprintf( '%s.narrative.%s.narrative.required_with_language', $formBase, $narrativeIndex - )] = 'The narrative field is required with @xml:lang field.'; + )] = trans('requests.narrative_field', ['suffix'=>trans('requests.suffix.is_required_with_xml')]); $messages[sprintf( '%s.narrative.%s.language.in', $formBase, $narrativeIndex - )] = 'The @xml:lang field is invalid.'; + )] = trans('requests.xml_lang_field_symbol', ['suffix'=>trans('requests.suffix.is_invalid')]); } return $messages; @@ -387,8 +387,8 @@ public function getMessagesForPeriodStart($formFields, $formBase): array $messages = []; foreach ($formFields as $periodStartKey => $periodStartVal) { - $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date'] = 'Period end must be a date.'; - $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date_greater_than'] = 'Period end date must be date greater than year 1900.'; + $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.must_be_a_date')]); + $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date_greater_than'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); } return $messages; @@ -430,10 +430,10 @@ public function getMessagesForPeriodEnd($formFields, $formBase): array $messages = []; foreach ($formFields as $periodEndKey => $periodEndVal) { - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.required'] = 'Period end is a required field'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = 'Period end must be a date field'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = 'Period end must be a date after period'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = 'Period end date must be date greater than year 1900.'; + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.required'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.is_a_required_field')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.must_be_a_date_field')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); } return $messages; @@ -526,10 +526,10 @@ public function getMessagesForDocumentLink($formFields, $formBase = null): array $documentLinkForm = sprintf('document_link.%s', $documentLinkIndex); } - $messages[sprintf('%s.format', $documentLinkForm)] = 'The document link format is invalid'; + $messages[sprintf('%s.format', $documentLinkForm)] = trans('requests.document_link', ['suffix'=>trans('requests.suffix.format_is_invalid')]); if (Arr::get($documentLink, 'url', null) !== '') { - $messages[sprintf('%s.url.url', $documentLinkForm)] = 'The @url field must be a valid url.'; + $messages[sprintf('%s.url.url', $documentLinkForm)] = trans('requests.url_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); } if (Arr::get($documentLink, 'document_date', null) !== '') { @@ -540,10 +540,10 @@ public function getMessagesForDocumentLink($formFields, $formBase = null): array } } - $messages[sprintf('%s.category.unique_category', $documentLinkForm)] = 'The document link category code field must be a unique.'; - $messages[sprintf('%s.category.0.code.in', $documentLinkForm)] = 'The document link category code is invalid.'; - $messages[sprintf('%s.language.unique_language', $documentLinkForm)] = 'The document link language code field must be a unique.'; - $messages[sprintf('%s.language.0.code.in', $documentLinkForm)] = 'The document link language code is invalid.'; + $messages[sprintf('%s.category.unique_category', $documentLinkForm)] = trans('requests.document_category_link_field', ['suffix'=>trans('requests.must_be_unique')]); + $messages[sprintf('%s.category.0.code.in', $documentLinkForm)] = trans('requests.document_category_link', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.language.unique_language', $documentLinkForm)] = trans('requests.document_category_link_field', ['suffix'=>trans('requests.must_be_unique')]); + $messages[sprintf('%s.language.0.code.in', $documentLinkForm)] = trans('requests.document_category_link', ['suffix'=>trans('requests.suffix.code_is_invalid')]); $narrativeTitleMessages = $this->getMessagesForNarrative($documentLink['title'][0]['narrative'], sprintf('%s.title.0', $documentLinkForm)); foreach ($narrativeTitleMessages as $key => $item) { @@ -574,9 +574,9 @@ protected function getMessagesForDocumentDate($formFields, $formIndex): array foreach ($formFields as $documentCategoryIndex => $documentCategory) { $messages[sprintf('%s.document_date.%s.date.date', $formIndex, $documentCategoryIndex)] - = 'The @iso-date field must be a proper date.'; + = trans('requests.iso_field_symbol', ['suffix'=>trans('requests.suffix.must_be_a_proper_date')]); $messages[sprintf('%s.document_date.%s.date.date_greater_than', $formIndex, $documentCategoryIndex)] - = 'The @iso-date field must be a greater than 1900.'; + = trans('requests.iso_field_symbol', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); } return $messages; diff --git a/app/Http/Requests/Activity/ActivityCreateRequest.php b/app/Http/Requests/Activity/ActivityCreateRequest.php index 07204cb9e4..0be42e0c81 100644 --- a/app/Http/Requests/Activity/ActivityCreateRequest.php +++ b/app/Http/Requests/Activity/ActivityCreateRequest.php @@ -70,7 +70,7 @@ public function rules(): array public function messages(): array { return [ - 'activity_identifier.not_in' => 'The activity identifier already exists.', + 'activity_identifier.not_in' => trans('requests.activity', ['suffix'=>trans('requests.suffix.identifier_already_exists')]), ]; } } diff --git a/app/Http/Requests/Activity/Budget/BudgetRequest.php b/app/Http/Requests/Activity/Budget/BudgetRequest.php index b7f1917039..1eda0edb6d 100644 --- a/app/Http/Requests/Activity/Budget/BudgetRequest.php +++ b/app/Http/Requests/Activity/Budget/BudgetRequest.php @@ -213,7 +213,7 @@ public function getMessagesForBudget(array $formFields, bool $fileUpload = false if (count($this->identicalIds)) { foreach ($this->identicalIds as $ids) { foreach ($ids as $id) { - $messages['budget.' . $id . '.budget_status.budgets_identical'] = $fileUpload ? 'Budget elements are duplicated.' : 'Budget elements at position ' . $this->getIdenticalIds($ids) . ' have same status, type, period start and period end.'; + $messages['budget.' . $id . '.budget_status.budgets_identical'] = $fileUpload ? trans('requests.budget_elements_duplicated') : trans('requests.budget_elements_position') . $this->getIdenticalIds($ids) . trans('requests.have_same_status'); } } } @@ -221,7 +221,7 @@ public function getMessagesForBudget(array $formFields, bool $fileUpload = false if (count($this->revisedIds)) { foreach ($this->revisedIds as $ids) { foreach ($ids as $id) { - $messages['budget.' . $id . '.budget_status.budget_revised_invalid'] = 'Budget with type revised must have period start and end same to that of one of the budgets having same status and type original for budgets elements at position ' . $this->getIdenticalIds($ids); + $messages['budget.' . $id . '.budget_status.budget_revised_invalid'] = trans('requests.budget_with_type_revised') . $this->getIdenticalIds($ids); } } } @@ -246,10 +246,10 @@ public function getMessagesForBudget(array $formFields, bool $fileUpload = false $messages[$key] = $valueMessage; } - $messages[$budgetForm . '.budget_type.in'] = 'The budget type is invalid.'; - $messages[$budgetForm . '.budget_status.in'] = 'The budget status is invalid.'; - $messages[$budgetForm . '.period_end.0.date.before'] = 'The Period End iso-date must be within a year after Period Start iso-date.'; - $messages[$budgetForm . '.period_end.0.date.period_start_end'] = 'The Budget Period must not be longer than one year'; + $messages[$budgetForm . '.budget_type.in'] = trans('requests.budget', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $messages[$budgetForm . '.budget_status.in'] = trans('requests.budget', ['suffix'=>trans('requests.suffix.status_is_invalid')]); + $messages[$budgetForm . '.period_end.0.date.before'] = trans('requests.period_end_iso', ['suffix'=>trans('requests.suffix.must_be_within_a_year')]); + $messages[$budgetForm . '.period_end.0.date.period_start_end'] = trans('requests.budget', ['suffix'=>trans('requests.suffix.must_not_be_longer_than_1_year')]); } return $messages; @@ -268,9 +268,9 @@ public function getMessagesForPeriodStart($formFields, $formBase): array $messages = []; foreach ($formFields as $periodStartKey => $periodStartVal) { - $messages[$formBase . '.period_start.' . $periodStartKey . '.date.date'] = 'The iso-date field must be a valid date.'; - $messages[$formBase . '.period_start.' . $periodStartKey . '.date.date_greater_than'] = 'The iso-date field must date after year 1900.'; - $messages[$formBase . '.period_start.' . $periodStartKey . '.date.period_start_end'] = 'The Budget Period must not be longer than one year'; + $messages[$formBase . '.period_start.' . $periodStartKey . '.date.date'] = trans('requests.iso_field', ['suffix'=>trans('requests.suffix.must_be_a_valid_date')]); + $messages[$formBase . '.period_start.' . $periodStartKey . '.date.date_greater_than'] = trans('requests.iso_field', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); + $messages[$formBase . '.period_start.' . $periodStartKey . '.date.period_start_end'] = trans('requests.budget_period', ['suffix'=>trans('requests.suffix.must_not_be_linger_than_1_year')]); } return $messages; @@ -289,9 +289,9 @@ public function getMessagesForPeriodEnd($formFields, $formBase): array $messages = []; foreach ($formFields as $periodEndKey => $periodEndVal) { - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = 'The iso-date field must be a valid date.'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = 'The iso-date field must be date after year 1900.'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = 'The Period End iso-date must be a date after Period Start iso-date'; + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = trans('requests.iso_field', ['suffix'=>trans('requests.suffix.must_be_a_valid_date')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = trans('requests.iso_field', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = trans('requests.period_end_iso', ['suffix'=>trans('requests.suffix.must_be_within_a_year')]); } return $messages; @@ -311,11 +311,11 @@ protected function getMessagesForValue($formFields, $formBase): array foreach ($formFields as $valueIndex => $value) { $valueForm = sprintf('%s.budget_value.%s', $formBase, $valueIndex); - $messages[sprintf('%s.amount.numeric', $valueForm)] = 'The amount field must be a number.'; - $messages[sprintf('%s.amount.min', $valueForm)] = 'The amount field must not be in negative.'; - $messages[sprintf('%s.value_date.date', $valueForm)] = 'The value-date field must be a valid date.'; - $messages[sprintf('%s.value_date.after', $valueForm)] = 'The value-date field must be a between period start and period end'; - $messages[sprintf('%s.value_date.before', $valueForm)] = 'The value-date field must be a between period start and period end'; + $messages[sprintf('%s.amount.numeric', $valueForm)] = trans('requests.amount_field', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.amount.min', $valueForm)] = trans('requests.amount_field', ['suffix'=>trans('requests.suffix.must_not_be_negative')]); + $messages[sprintf('%s.value_date.date', $valueForm)] = trans('requests.value_date_field', ['suffix'=>trans('requests.suffix.must_be_a_valid_date')]); + $messages[sprintf('%s.value_date.after', $valueForm)] = trans('requests.value_date_field', ['suffix'=>trans('requests.suffix.must_be_between')]); + $messages[sprintf('%s.value_date.before', $valueForm)] = trans('requests.value_date_field', ['suffix'=>trans('requests.suffix.must_be_between')]); } return $messages; diff --git a/app/Http/Requests/Activity/CapitalSpend/CapitalSpendRequest.php b/app/Http/Requests/Activity/CapitalSpend/CapitalSpendRequest.php index 985cc56418..3a2043e73f 100644 --- a/app/Http/Requests/Activity/CapitalSpend/CapitalSpendRequest.php +++ b/app/Http/Requests/Activity/CapitalSpend/CapitalSpendRequest.php @@ -37,9 +37,9 @@ public function rules($capital_spend = null): array public function messages(): array { return [ - 'numeric' => 'The capital spend must be a number', - 'between' => 'The capital spend must be a number between 0 and 100', - 'size' => 'The capital spend cannot have more than one value.', + 'numeric' => trans('requests.capital_spend', ['suffix'=>trans('requests.suffix.must_be_a_number')]), + 'between' => trans('requests.capital_spend', ['suffix'=>trans('requests.suffix.must_be_between_0_100')]), + 'size' => trans('requests.capital_spend', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/CollaborationType/CollaborationTypeRequest.php b/app/Http/Requests/Activity/CollaborationType/CollaborationTypeRequest.php index 6337a24102..671acf8731 100644 --- a/app/Http/Requests/Activity/CollaborationType/CollaborationTypeRequest.php +++ b/app/Http/Requests/Activity/CollaborationType/CollaborationTypeRequest.php @@ -39,8 +39,8 @@ public function rules($collaboration = null): array public function messages(): array { return [ - 'in' => 'The collaboration type does not exist.', - 'size' => 'The collaboration type cannot have more than one value.', + 'in' => trans('requests.collaboration_type', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.collaboration_type', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/Condition/ConditionRequest.php b/app/Http/Requests/Activity/Condition/ConditionRequest.php index 9802e24076..285c0072cd 100644 --- a/app/Http/Requests/Activity/Condition/ConditionRequest.php +++ b/app/Http/Requests/Activity/Condition/ConditionRequest.php @@ -67,7 +67,7 @@ public function getMessagesForCondition(array $formFields): array foreach ($formFields as $conditionIndex => $condition) { $conditionForm = sprintf('condition.%s', $conditionIndex); - $messages[sprintf('%s.condition_type.in', $conditionForm)] = 'The condition type is invalid.'; + $messages[sprintf('%s.condition_type.in', $conditionForm)] = trans('requests.condition', ['suffix'=>trans('requests.suffix.type_is_invalid')]); foreach ($this->getMessagesForNarrative($condition['narrative'], $conditionForm) as $conditionNarrativeIndex => $conditionNarrativeMessages) { $messages[$conditionNarrativeIndex] = $conditionNarrativeMessages; diff --git a/app/Http/Requests/Activity/ContactInfo/ContactInfoRequest.php b/app/Http/Requests/Activity/ContactInfo/ContactInfoRequest.php index e140f3fb14..bbf2921fc5 100644 --- a/app/Http/Requests/Activity/ContactInfo/ContactInfoRequest.php +++ b/app/Http/Requests/Activity/ContactInfo/ContactInfoRequest.php @@ -80,7 +80,7 @@ public function getMessagesForContactInfo(array $formFields): array foreach ($formFields as $contactInfoIndex => $contactInfo) { $contactInfoForm = sprintf('contact_info.%s', $contactInfoIndex); - $messages[sprintf('%s.type.in', $contactInfoForm)] = 'The contact info type is invalid.'; + $messages[sprintf('%s.type.in', $contactInfoForm)] = trans('requests.contact_info', ['suffix'=>trans('requests.suffix.type_is_invalid')]); $tempMessages = [ $this->getMessagesForDepartment(Arr::get($contactInfo, 'department', []), $contactInfoForm), $this->getMessagesForOrganisation(Arr::get($contactInfo, 'organisation', []), $contactInfoForm), @@ -364,10 +364,10 @@ protected function getMessagesForTelephone($formFields, $formBase): array $messages = []; foreach ($formFields as $telephoneIndex => $telephone) { - $messages[sprintf('%s.telephone.%s.telephone.numeric', $formBase, $telephoneIndex)] = 'The contact info telephone number must be valid numeric value'; - $messages[sprintf('%s.telephone.%s.telephone.regex', $formBase, $telephoneIndex)] = 'The contact info telephone number is invalid'; - $messages[sprintf('%s.telephone.%s.telephone.min', $formBase, $telephoneIndex)] = 'The contact info telephone number must have atleast 7 digits.'; - $messages[sprintf('%s.telephone.%s.telephone.max', $formBase, $telephoneIndex)] = 'The contact info telephone number must not have more than 20 digits.'; + $messages[sprintf('%s.telephone.%s.telephone.numeric', $formBase, $telephoneIndex)] = trans('requests.contact_info_telephone', ['suffix'=>trans('requests.suffix.must_be_numeric')]); + $messages[sprintf('%s.telephone.%s.telephone.regex', $formBase, $telephoneIndex)] = trans('requests.contact_info_telephone', ['suffix'=>trans('requests.suffix.is_invalid')]); + $messages[sprintf('%s.telephone.%s.telephone.min', $formBase, $telephoneIndex)] = trans('requests.contact_info_telephone', ['suffix'=>trans('requests.suffix.must_be_atleast_7_digits')]); + $messages[sprintf('%s.telephone.%s.telephone.max', $formBase, $telephoneIndex)] = trans('requests.contact_info_telephone', ['suffix'=>trans('requests.suffix.must_not_be_more_than_20_digits')]); } return $messages; @@ -405,8 +405,8 @@ protected function getMessagesForEmail($formFields, $formBase): array $messages = []; foreach ($formFields as $emailIndex => $email) { - $messages[sprintf('%s.email.%s.email.email', $formBase, $emailIndex)] = 'The contact info email must be valid'; - $messages[sprintf('%s.email.%s.email.regex', $formBase, $emailIndex)] = 'The contact info email format is invalid'; + $messages[sprintf('%s.email.%s.email.email', $formBase, $emailIndex)] = trans('requests.contact_info_email', ['suffix'=>trans('requests.suffix.must_be_valid')]); + $messages[sprintf('%s.email.%s.email.regex', $formBase, $emailIndex)] = trans('requests.contact_info_email', ['suffix'=>trans('requests.suffix.format_is_invalid')]); } return $messages; @@ -444,7 +444,7 @@ protected function getMessagesForWebsite($formFields, $formBase): array $messages = []; foreach ($formFields as $websiteIndex => $website) { - $messages[sprintf('%s.website.%s.website.url', $formBase, $websiteIndex)] = 'The contact info website url must be valid url.'; + $messages[sprintf('%s.website.%s.website.url', $formBase, $websiteIndex)] = trans('requests.contact_info_website', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); } return $messages; diff --git a/app/Http/Requests/Activity/CountryBudgetItem/CountryBudgetItemRequest.php b/app/Http/Requests/Activity/CountryBudgetItem/CountryBudgetItemRequest.php index 003221ada4..b03219afc4 100644 --- a/app/Http/Requests/Activity/CountryBudgetItem/CountryBudgetItemRequest.php +++ b/app/Http/Requests/Activity/CountryBudgetItem/CountryBudgetItemRequest.php @@ -57,7 +57,7 @@ public function getRulesForCountryBudgetItem(array $formFields): array public function getMessagesForCountryBudgetItem(array $formFields): array { $messages = $this->getBudgetItemMessages(Arr::get($formFields, 'budget_item', [])); - $messages['country_budget_vocabulary.in'] = 'The country budget item vocabulary is invalid.'; + $messages['country_budget_vocabulary.in'] = trans('requests.country_budget_item', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); return $messages; } @@ -105,11 +105,11 @@ public function getBudgetItemMessages(array $formFields): array foreach ($formFields as $budgetItemIndex => $budgetItem) { $budgetItemForm = sprintf('budget_item.%s', $budgetItemIndex); - $messages[sprintf('%s.code.in', $budgetItemForm)] = 'The budget item code in invalid.'; - $messages[sprintf('%s.percentage.%s', $budgetItemForm, 'numeric')] = 'The budget item percentage field must be a number.'; - $messages[sprintf('%s.percentage.%s', $budgetItemForm, 'max')] = 'The budget item percentage field cannot be greater than 100.'; - $messages[sprintf('%s.percentage.sum', $budgetItemForm)] = 'The sum of percentage with budget items must add up to 100.'; - $messages[sprintf('%s.percentage.total', $budgetItemForm)] = 'The budget item percentage field should be 100 when there is only one budget item.'; + $messages[sprintf('%s.code.in', $budgetItemForm)] = trans('requests.budget_item', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.percentage.%s', $budgetItemForm, 'numeric')] = trans('requests.budget_percent', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.percentage.%s', $budgetItemForm, 'max')] = trans('requests.budget_percentage', ['suffix'=>trans('requests.suffix.cannot_be_greater_than_100')]); + $messages[sprintf('%s.percentage.sum', $budgetItemForm)] = trans('requests.the_sum_of_budget'); + $messages[sprintf('%s.percentage.total', $budgetItemForm)] = trans('requests.budget_percentage', ['suffix'=>trans('requests.suffix.should_be_100')]); foreach ($this->getBudgetItemDescriptionMessages($budgetItem['description'], $budgetItemForm) as $budgetItemDescriptionIndex => $budgetItemDescriptionNarrativeMessages) { $messages[$budgetItemDescriptionIndex] = $budgetItemDescriptionNarrativeMessages; diff --git a/app/Http/Requests/Activity/Date/DateRequest.php b/app/Http/Requests/Activity/Date/DateRequest.php index b86a53c59b..d98f11afdc 100644 --- a/app/Http/Requests/Activity/Date/DateRequest.php +++ b/app/Http/Requests/Activity/Date/DateRequest.php @@ -66,9 +66,9 @@ public function getMessagesForDate(array $formFields): array foreach ($formFields as $activityDateIndex => $activityDate) { $activityDateForm = sprintf('activity_date.%s', $activityDateIndex); - $messages[sprintf('%s.date.date', $activityDateForm)] = 'Date is invalid.'; - $messages[sprintf('%s.date.before', $activityDateForm)] = 'Actual start and end dates may not be in the future.'; - $messages[sprintf('%s.date.end_later_than_start', $activityDateForm)] = 'End date must be later than the start date.'; + $messages[sprintf('%s.date.date', $activityDateForm)] = trans('requests.date', ['suffix'=>trans('requests.suffix.is_invalid')]); + $messages[sprintf('%s.date.before', $activityDateForm)] = trans('requests.actual_start_and_end_dates', ['suffix'=>trans('requests.suffix.may_not_be_in_future')]); + $messages[sprintf('%s.date.end_later_than_start', $activityDateForm)] = trans('requests.end_date', ['suffix'=>trans('requests.suffix.must_be_later_than_start_date')]); $messages += $this->getMessagesForNarrative($activityDate['narrative'], $activityDateForm); } diff --git a/app/Http/Requests/Activity/DefaultAidType/DefaultAidTypeRequest.php b/app/Http/Requests/Activity/DefaultAidType/DefaultAidTypeRequest.php index 4823038b2a..3c1bfe84a2 100644 --- a/app/Http/Requests/Activity/DefaultAidType/DefaultAidTypeRequest.php +++ b/app/Http/Requests/Activity/DefaultAidType/DefaultAidTypeRequest.php @@ -67,11 +67,11 @@ public function getMessagesForDefaultAidType(array $formFields): array foreach ($formFields as $index => $formField) { $baseForm = sprintf('default_aid_type.%s', $index); - $messages[sprintf('%s.default_aid_type_vocabulary.in', $baseForm)] = 'The default aid type vocabulary is invalid.'; - $messages[sprintf('%s.default_aid_type.in', $baseForm)] = 'The default aid type is invalid.'; - $messages[sprintf('%s.earmarking_category.in', $baseForm)] = 'The default aid type earmarking category is invalid.'; - $messages[sprintf('%s.earmarking_modality.in', $baseForm)] = 'The default aid type earmarking modality is invalid.'; - $messages[sprintf('%s.cash_and_voucher_modalities.in', $baseForm)] = 'The default aid type cash and voucher modalities is invalid.'; + $messages[sprintf('%s.default_aid_type_vocabulary.in', $baseForm)] = trans('requests.default_aid', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $messages[sprintf('%s.default_aid_type.in', $baseForm)] = trans('requests.default_aid', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $messages[sprintf('%s.earmarking_category.in', $baseForm)] = trans('requests.default_aid', ['suffix'=>trans('requests.suffix.earmarking_category_is_invalid')]); + $messages[sprintf('%s.earmarking_modality.in', $baseForm)] = trans('requests.default_aid', ['suffix'=>trans('requests.suffix.earmarking_modality_is_invalid')]); + $messages[sprintf('%s.cash_and_voucher_modalities.in', $baseForm)] = trans('requests.default_aid', ['suffix'=>trans('requests.suffix.cash_and_voucher_is_invalid')]); } return $messages; diff --git a/app/Http/Requests/Activity/DefaultFinanceType/DefaultFinanceTypeRequest.php b/app/Http/Requests/Activity/DefaultFinanceType/DefaultFinanceTypeRequest.php index 1e06beb69f..564af91648 100644 --- a/app/Http/Requests/Activity/DefaultFinanceType/DefaultFinanceTypeRequest.php +++ b/app/Http/Requests/Activity/DefaultFinanceType/DefaultFinanceTypeRequest.php @@ -39,8 +39,8 @@ public function rules($finance_type = null): array public function messages(): array { return [ - 'in' => 'The default finance type does not exist.', - 'size' => 'The default finance type cannot have more than one value.', + 'in' => trans('requests.default_finance', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.default_finance', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/DefaultFlowType/DefaultFlowTypeRequest.php b/app/Http/Requests/Activity/DefaultFlowType/DefaultFlowTypeRequest.php index c681a325cf..748fb974ae 100644 --- a/app/Http/Requests/Activity/DefaultFlowType/DefaultFlowTypeRequest.php +++ b/app/Http/Requests/Activity/DefaultFlowType/DefaultFlowTypeRequest.php @@ -39,8 +39,8 @@ public function rules($default_flow_type = null): array public function messages(): array { return [ - 'in' => 'The default flow type does not exist.', - 'size' => 'The default flow type cannot have more than one value.', + 'in' => trans('requests.default_flow', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.default_flow', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/DefaultTiedStatus/DefaultTiedStatusRequest.php b/app/Http/Requests/Activity/DefaultTiedStatus/DefaultTiedStatusRequest.php index 719f84f4a3..8b70f22637 100644 --- a/app/Http/Requests/Activity/DefaultTiedStatus/DefaultTiedStatusRequest.php +++ b/app/Http/Requests/Activity/DefaultTiedStatus/DefaultTiedStatusRequest.php @@ -39,8 +39,8 @@ public function rules($tied_status = null): array public function messages(): array { return [ - 'in' => 'The default tied status does not exist.', - 'size' => 'The default tied status cannot have more than one value.', + 'in' => trans('requests.default_flow', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.default_flow', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/HumanitarianScope/HumanitarianScopeRequest.php b/app/Http/Requests/Activity/HumanitarianScope/HumanitarianScopeRequest.php index 70fa918158..4d67a1d5e1 100644 --- a/app/Http/Requests/Activity/HumanitarianScope/HumanitarianScopeRequest.php +++ b/app/Http/Requests/Activity/HumanitarianScope/HumanitarianScopeRequest.php @@ -70,10 +70,10 @@ public function getMessagesForHumanitarianScope(array $formFields): array foreach ($formFields as $humanitarianScopeIndex => $humanitarianScope) { $humanitarianScopeForm = 'humanitarian_scope.' . $humanitarianScopeIndex; - $messages[sprintf('%s.type.in', $humanitarianScopeForm)] = 'The humanitarian scope type is invalid.'; - $messages[sprintf('%s.vocabulary.in', $humanitarianScopeForm)] = 'The humanitarian scope vocabulary is invalid.'; - $messages[sprintf('%s.code.string', $humanitarianScopeForm)] = 'The humanitarian scope code must be a string.'; - $messages[sprintf('%s.vocabulary_uri.url', $humanitarianScopeForm)] = 'The humanitarian scope vocabulary-uri must be a proper url.'; + $messages[sprintf('%s.type.in', $humanitarianScopeForm)] = trans('requests.humanitarian', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $messages[sprintf('%s.vocabulary.in', $humanitarianScopeForm)] = trans('requests.humanitarian', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.code.string', $humanitarianScopeForm)] = trans('requests.humanitarian_code', ['suffix'=>trans('requests.suffix.must_be_a_string')]); + $messages[sprintf('%s.vocabulary_uri.url', $humanitarianScopeForm)] = trans('requests.humanitarian', ['suffix'=>trans('requests.suffix.must_be_valid_vocal_url')]); foreach ($this->getMessagesForNarrative($humanitarianScope['narrative'], $humanitarianScopeForm) as $humanitarianIndex => $narrativeMessages) { $messages[$humanitarianIndex] = $narrativeMessages; diff --git a/app/Http/Requests/Activity/Identifier/IdentifierRequest.php b/app/Http/Requests/Activity/Identifier/IdentifierRequest.php index 55518246db..6a74bc1377 100644 --- a/app/Http/Requests/Activity/Identifier/IdentifierRequest.php +++ b/app/Http/Requests/Activity/Identifier/IdentifierRequest.php @@ -56,7 +56,7 @@ public function rules(bool $fileUpload = false): array public function messages(): array { return [ - 'activity_identifier.not_in' => 'The activity identifier already exists.', + 'activity_identifier.not_in' => trans('requests.activity', ['suffix'=>trans('requests.suffix.identifier_already_exists')]), ]; } } diff --git a/app/Http/Requests/Activity/Indicator/IndicatorRequest.php b/app/Http/Requests/Activity/Indicator/IndicatorRequest.php index 1bf5047531..92bcd7b089 100644 --- a/app/Http/Requests/Activity/Indicator/IndicatorRequest.php +++ b/app/Http/Requests/Activity/Indicator/IndicatorRequest.php @@ -82,9 +82,9 @@ public function getRulesForIndicator(array $formFields, bool $fileUpload = false public function getMessagesForIndicator(array $formFields): array { $messages = []; - $messages['measure.in'] = 'The indicator measure is invalid.'; - $messages['aggregation_status.in'] = 'The indicator aggregation status is invalid.'; - $messages['ascending.in'] = 'The indicator ascending is invalid.'; + $messages['measure.in'] = trans('requests.indicator_measure', ['suffix'=>trans('requests.suffix.is_invalid')]); + $messages['aggregation_status.in'] = trans('requests.indicator_aggregation', ['suffix'=>trans('requests.suffix.is_invalid')]); + $messages['ascending.in'] = trans('requests.indicator_ascending', ['suffix'=>trans('requests.suffix.is_invalid')]); $tempMessages = [ $this->getMessagesForNarrative(Arr::get($formFields, 'title', []), 'title.0'), @@ -162,10 +162,10 @@ protected function getMessagesForReference($formFields): array foreach ($formFields as $referenceIndex => $reference) { $referenceForm = sprintf('reference.%s', $referenceIndex); - $messages[sprintf('%s.indicator_uri.url', $referenceForm)] = 'The @indicator-uri field must be a valid url.'; + $messages[sprintf('%s.indicator_uri.url', $referenceForm)] = trans('requests.indicator_uri_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); if (!empty($reference['code'])) { - $messages[sprintf('%s.code.result_ref_code_present', $referenceForm)] = 'The code is already defined in its result'; + $messages[sprintf('%s.code.result_ref_code_present', $referenceForm)] = trans('requests.code', ['suffix'=>trans('requests.suffix.defined_in_result')]); } } @@ -230,12 +230,12 @@ protected function getMessagesForBaseline($formFields): array foreach ($formFields as $baselineIndex => $baseline) { $baselineForm = sprintf('baseline.%s', $baselineIndex); - $messages[sprintf('%s.year.date_format', $baselineForm)] = 'The @year field is not valid.'; - $messages[sprintf('%s.year.in', $baselineForm)] = 'The @year field should be the year of baseline date'; - $messages[sprintf('%s.year.digits', $baselineForm)] = 'The @year field must have 4 digits.'; + $messages[sprintf('%s.year.date_format', $baselineForm)] = trans('requests.year_field_symbol', ['suffix'=>trans('requests.suffix.is_not_valid')]); + $messages[sprintf('%s.year.in', $baselineForm)] = trans('requests.year_field_symbol', ['suffix'=>trans('requests.suffix.should_be_baseline')]); + $messages[sprintf('%s.year.digits', $baselineForm)] = trans('requests.year_field_symbol', ['suffix'=>trans('requests.suffix.must_be_4_digits')]); - $messages[sprintf('%s.value.numeric', $baselineForm)] = 'The @value field must be a number.'; - $messages[sprintf('%s.value.gte', $baselineForm)] = 'The @value field must be greater or equal to 0.'; + $messages[sprintf('%s.value.numeric', $baselineForm)] = trans('requests.value_field_symbol', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.value.gte', $baselineForm)] = trans('requests.value_field_symbol', ['suffix'=>trans('requests.suffix.must_be_greater_equal_0')]); $narrativeMessages = $this->getMessagesForNarrative($baseline['comment'][0]['narrative'], sprintf('%s.comment.0', $baselineForm)); diff --git a/app/Http/Requests/Activity/Location/LocationRequest.php b/app/Http/Requests/Activity/Location/LocationRequest.php index c56d55442d..1d688e07f2 100644 --- a/app/Http/Requests/Activity/Location/LocationRequest.php +++ b/app/Http/Requests/Activity/Location/LocationRequest.php @@ -80,11 +80,11 @@ public function getMessagesForLocation($formFields): array foreach ($formFields as $locationIndex => $location) { $locationForm = 'location.' . $locationIndex; - $messages[sprintf('%s.ref.not_regex', $locationForm)] = 'The location reference field shouldn\'t contain the symbols /, &, | or ?.'; - $messages[sprintf('%s.location_reach.0.code.in', $locationForm)] = 'The location reach code is invalid.'; - $messages[sprintf('%s.exactness.0.code.in', $locationForm)] = 'The location exactness is invalid.'; - $messages[sprintf('%s.location_class.0.code.in', $locationForm)] = 'The location class is invalid.'; - $messages[sprintf('%s.feature_designation.0.code.in', $locationForm)] = 'The location feature designation is invalid.'; + $messages[sprintf('%s.ref.not_regex', $locationForm)] = trans('requests.location_ref_field', ['suffix'=>trans('requests.suffix.shouldnt_contain_symbol')]); + $messages[sprintf('%s.location_reach.0.code.in', $locationForm)] = trans('requests.location', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.exactness.0.code.in', $locationForm)] = trans('requests.location', ['suffix'=>trans('requests.suffix.exactness_is_invalid')]); + $messages[sprintf('%s.location_class.0.code.in', $locationForm)] = trans('requests.location', ['suffix'=>trans('requests.suffix.class_is_invalid')]); + $messages[sprintf('%s.feature_designation.0.code.in', $locationForm)] = trans('requests.location_feature', ['suffix'=>trans('requests.suffix.designation_is_invalid')]); $tempMessages = [ $this->getMessagesForLocationId($location['location_id'], $locationForm), $this->getMessagesForName($location['name'], $locationForm), @@ -138,7 +138,7 @@ public function getMessagesForLocationId($formFields, $formBase): array foreach ($formFields as $locationIdIndex => $locationId) { $locationIdForm = sprintf('%s.location_id.%s', $formBase, $locationIdIndex); - $messages[sprintf('%s.vocabulary.in', $locationIdForm)] = 'The location id vocabulary is invalid.'; + $messages[sprintf('%s.vocabulary.in', $locationIdForm)] = trans('requests.location_id', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); } return $messages; @@ -317,10 +317,10 @@ public function getMessagesForAdministrative($formFields, $formBase): array foreach ($formFields as $administrativeIndex => $administrative) { $administrativeForm = sprintf('%s.administrative.%s', $formBase, $administrativeIndex); - $messages[sprintf('%s.vocabulary.in', $administrativeForm)] = 'The location administrative vocabulary is invalid.'; - $messages[sprintf('%s.code.in', $administrativeForm)] = 'The location administrative code is invalid.'; - $messages[sprintf('%s.level.min', $administrativeForm)] = 'The location administrative level must not have negative value.'; - $messages[sprintf('%s.level.integer', $administrativeForm)] = 'The location administrative level must be an integer.'; + $messages[sprintf('%s.vocabulary.in', $administrativeForm)] = trans('requests.location_admin', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.code.in', $administrativeForm)] = trans('requests.location_admin', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.level.min', $administrativeForm)] = trans('requests.location_admin_level', ['suffix'=>trans('requests.suffix.must_not_be_negative')]); + $messages[sprintf('%s.level.integer', $administrativeForm)] = trans('requests.location_admin_level', ['suffix'=>trans('requests.suffix.must_be_an_integer')]); } return $messages; @@ -361,8 +361,8 @@ public function getMessagesForPoint($formFields, $formBase): array $pointForm = sprintf('%s.point.0', $formBase); $positionForm = sprintf('%s.position.0', $pointForm); - $messages[sprintf('%s.latitude.numeric', $positionForm)] = 'The pos latitude must be numeric'; - $messages[sprintf('%s.longitude.numeric', $positionForm)] = 'The pos longitude must be numeric'; + $messages[sprintf('%s.latitude.numeric', $positionForm)] = trans('requests.pos_latitude', ['suffix'=>trans('requests.suffix.must_be_numeric')]); + $messages[sprintf('%s.longitude.numeric', $positionForm)] = trans('requests.pos_longitude', ['suffix'=>trans('requests.suffix.must_be_numeric')]); return $messages; } diff --git a/app/Http/Requests/Activity/OtherIdentifier/OtherIdentifierRequest.php b/app/Http/Requests/Activity/OtherIdentifier/OtherIdentifierRequest.php index 1ecb39e961..38c876f5f2 100644 --- a/app/Http/Requests/Activity/OtherIdentifier/OtherIdentifierRequest.php +++ b/app/Http/Requests/Activity/OtherIdentifier/OtherIdentifierRequest.php @@ -68,8 +68,8 @@ public function getMessagesForOtherIdentifier(array $formFields): array foreach ($formFields as $otherIdentifierIndex => $otherIdentifier) { $otherIdentifierForm = sprintf('other_identifier.%s', $otherIdentifierIndex); - $messages[sprintf('%s.reference.not_regex', $otherIdentifierForm)] = 'The other identifier reference field shouldn\'t contain the symbols /, &, | or ?.'; - $messages[sprintf('%s.reference_type.in', $otherIdentifierForm)] = 'The other identifier type is not valid.'; + $messages[sprintf('%s.reference.not_regex', $otherIdentifierForm)] = trans('requests.other_identifier_ref', ['suffix'=>trans('requests.suffix.shouldnt_contain_symbol')]); + $messages[sprintf('%s.reference_type.in', $otherIdentifierForm)] = trans('requests.other_identifier', ['suffix'=>trans('requests.suffix.type_is_not_valid')]); foreach ($this->getMessagesForOwnerOrg($otherIdentifier['owner_org'], $otherIdentifierForm) as $ownerOrgIndex => $ownerOrgMessages) { $messages[$ownerOrgIndex] = $ownerOrgMessages; @@ -117,7 +117,7 @@ public function getMessagesForOwnerOrg($formFields, $formBase) foreach ($formFields as $ownerOrgIndex => $ownerOrg) { $ownerOrgForm = sprintf('%s.owner_org.%s', $formBase, $ownerOrgIndex); - $messages[sprintf('%s.owner_org.%s.ref.not_regex', $formBase, $ownerOrgIndex)] = 'The owner org reference field shouldn\'t contain the symbols /, &, | or ?.'; + $messages[sprintf('%s.owner_org.%s.ref.not_regex', $formBase, $ownerOrgIndex)] = trans('requests.org_reference', ['suffix'=>trans('requests.suffix.shouldnt_contain_symbol')]); foreach ($this->getMessagesForNarrative($ownerOrg['narrative'], $ownerOrgForm) as $ownerOrgNarrativeIndex => $ownerOrgNarrativeMessages) { $messages[$ownerOrgNarrativeIndex] = $ownerOrgNarrativeMessages; diff --git a/app/Http/Requests/Activity/ParticipatingOrganization/ParticipatingOrganizationRequest.php b/app/Http/Requests/Activity/ParticipatingOrganization/ParticipatingOrganizationRequest.php index ea9d89a1ca..7c3d384245 100644 --- a/app/Http/Requests/Activity/ParticipatingOrganization/ParticipatingOrganizationRequest.php +++ b/app/Http/Requests/Activity/ParticipatingOrganization/ParticipatingOrganizationRequest.php @@ -78,8 +78,8 @@ public function getMessagesForParticipatingOrg($formFields): array ['attribute' => trans('elementForm.identifier'), 'values' => trans('elementForm.identifier')] ); - $messages[sprintf('%s.organization_role.in', $participatingOrgForm)] = 'The participating organisation role is invalid.'; - $messages[sprintf('%s.type.in', $participatingOrgForm)] = 'The participating organisation type is invalid.'; + $messages[sprintf('%s.organization_role.in', $participatingOrgForm)] = trans('requests.participating_org', ['suffix'=>trans('requests.suffix.role_is_invalid')]); + $messages[sprintf('%s.type.in', $participatingOrgForm)] = trans('requests.participating_org', ['suffix'=>trans('requests.suffix.type_is_invalid')]); foreach ($this->getMessagesForNarrative($participatingOrg['narrative'], $participatingOrgForm) as $participatingNarrativeIndex => $narrativeMessages) { $messages[$participatingNarrativeIndex] = $narrativeMessages; diff --git a/app/Http/Requests/Activity/Period/PeriodRequest.php b/app/Http/Requests/Activity/Period/PeriodRequest.php index a1cbacb61c..09746beb35 100644 --- a/app/Http/Requests/Activity/Period/PeriodRequest.php +++ b/app/Http/Requests/Activity/Period/PeriodRequest.php @@ -151,21 +151,21 @@ protected function getMessagesForResultPeriod($formFields, $periodType): array $periodType, $periodStartKey )] - = 'The @date field must be a proper date.'; + = trans('requests.date_field_symbol', ['suffix'=>trans('requests.suffix.must_be_a_proper_date')]); $messages[sprintf( '%s.%s.date.after', $periodType, $periodStartKey )] - = 'The @iso-date field of period end must be a date after @iso-field of period start'; + = trans('requests.the_iso_date_field_after'); $messages[sprintf( '%s.%s.date.period_start_end', $periodType, $periodStartKey )] - = 'The @iso-date field of period end and @iso-date of period start must not have difference of more than a year'; + = trans('requests.the_iso_date_field_difference'); } return $messages; @@ -251,7 +251,7 @@ protected function getMessagesForTarget($formFields, $valueType, $fileUpload, $i foreach ($formFields as $targetIndex => $target) { $targetForm = sprintf('%s.%s', $valueType, $targetIndex); - $messages[sprintf('%s.%s.value.numeric', $valueType, $targetIndex)] = 'The @value field must be numeric.'; + $messages[sprintf('%s.%s.value.numeric', $valueType, $targetIndex)] = trans('requests.value_field_symbol', ['suffix'=>trans('requests.suffix.must_be_numeric')]); $narrativeMessages = $this->getMessagesForNarrative($target['comment'][0]['narrative'], sprintf('%s.comment.0', $targetForm)); @@ -266,9 +266,9 @@ protected function getMessagesForTarget($formFields, $valueType, $fileUpload, $i } if ($indicatorMeasureType['non_qualitative']) { - $messages[sprintf('%s.%s.value', $valueType, $targetIndex)] = 'Value must be filled when the indicator measure is non-qualitative.'; + $messages[sprintf('%s.%s.value', $valueType, $targetIndex)] = trans('requests.value_must_be_filled'); } elseif ($indicatorMeasureType['qualitative'] && !empty($target['value'])) { - $messages[sprintf('%s.%s.value.qualitative_empty', $valueType, $targetIndex)] = 'Value must be omitted when the indicator measure is qualitative.'; + $messages[sprintf('%s.%s.value.qualitative_empty', $valueType, $targetIndex)] = trans('requests.value_must_be_omitted'); } } diff --git a/app/Http/Requests/Activity/PlannedDisbursement/PlannedDisbursementRequest.php b/app/Http/Requests/Activity/PlannedDisbursement/PlannedDisbursementRequest.php index 0f96446c5b..795488a651 100644 --- a/app/Http/Requests/Activity/PlannedDisbursement/PlannedDisbursementRequest.php +++ b/app/Http/Requests/Activity/PlannedDisbursement/PlannedDisbursementRequest.php @@ -100,7 +100,7 @@ public function getMessagesForPlannedDisbursement(array $formFields): array foreach ($formFields as $plannedDisbursementIndex => $plannedDisbursement) { $plannedDisbursementForm = sprintf('planned_disbursement.%s', $plannedDisbursementIndex); - $messages[sprintf('%s.planned_disbursement_type.in', $plannedDisbursementForm)] = 'The planned disbursement type is invalid.'; + $messages[sprintf('%s.planned_disbursement_type.in', $plannedDisbursementForm)] = trans('requests.planned_disb', ['suffix'=>trans('requests.suffix.type_is_invalid')]); $periodStartMessages = $this->getMessagesForPeriodStart($plannedDisbursement['period_start'], $plannedDisbursementForm); @@ -175,8 +175,8 @@ public function getMessagesForProviderOrg(array $formFields, $formBase): array foreach ($formFields as $providerOrgIndex => $providerOrg) { $providerOrgForm = sprintf('%s.provider_org.%s', $formBase, $providerOrgIndex); - $message[sprintf('%s.type.in', $providerOrgForm)] = 'The planned disbursement provider org type is invalid.'; - $message[sprintf('%s.ref.not_regex', $providerOrgForm)] = 'The planned disbursement provider org ref shouldn\'t contain the symbols /, &, | or ?.'; + $message[sprintf('%s.type.in', $providerOrgForm)] = trans('requests.planned_disb_pro', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $message[sprintf('%s.ref.not_regex', $providerOrgForm)] = trans('requests.planned_disb_pro_ref', ['suffix'=>trans('requests.suffix.shouldnt_contain_symbol')]); foreach ($this->getMessagesForNarrative($providerOrg['narrative'], $providerOrgForm) as $providerOrgNarrativeIndex => $providerOrgNarrativeMessages) { $message[$providerOrgNarrativeIndex] = $providerOrgNarrativeMessages; @@ -225,8 +225,8 @@ public function getMessagesForReceiverOrg(array $formFields, $formBase): array foreach ($formFields as $receiverOrgIndex => $receiverOrg) { $receiverOrgForm = sprintf('%s.receiver_org.%s', $formBase, $receiverOrgIndex); - $message[sprintf('%s.type.in', $receiverOrgForm)] = 'The planned disbursement receiver org type is invalid.'; - $message[sprintf('%s.ref.not_regex', $receiverOrgForm)] = 'The planned disbursement receiver org ref shouldn\'t contain the symbols /, &, | or ?.'; + $message[sprintf('%s.type.in', $receiverOrgForm)] = trans('requests.planned_disb_rec', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $message[sprintf('%s.ref.not_regex', $receiverOrgForm)] = trans('requests.planned_disb_rec_ref', ['suffix'=>trans('requests.suffix.shouldnt_contain_symbol')]); foreach ($this->getMessagesForNarrative($receiverOrg['narrative'], $receiverOrgForm) as $receiverOrgNarrativeIndex => $receiverOrgNarrativeMessages) { $message[$receiverOrgNarrativeIndex] = $receiverOrgNarrativeMessages; @@ -250,13 +250,13 @@ public function getMessagesForValue($formFields, $formBase): array foreach ($formFields as $valueIndex => $value) { $valueForm = sprintf('%s.value.%s', $formBase, $valueIndex); - $messages[sprintf('%s.amount.required', $valueForm)] = 'Amount field is required'; - $messages[sprintf('%s.amount.numeric', $valueForm)] = 'Amount field must be a number'; - $messages[sprintf('%s.amount.min', $valueForm)] = 'Amount field must not be in negative.'; - $messages[sprintf('%s.currency.in', $valueForm)] = 'The value currency is invalid.'; - $messages[sprintf('%s.value_date.required', $valueForm)] = 'Value date is a required field'; - $messages[sprintf('%s.value_date.after', $valueForm)] = 'The value date field must be a between period start and period end'; - $messages[sprintf('%s.value_date.before', $valueForm)] = 'The value date field must be a between period start and period end'; + $messages[sprintf('%s.amount.required', $valueForm)] = trans('requests.alt_amount_field', ['suffix'=>trans('requests.suffix.is_required')]); + $messages[sprintf('%s.amount.numeric', $valueForm)] = trans('requests.alt_amount_field', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.amount.min', $valueForm)] = trans('requests.alt_amount_field', ['suffix'=>trans('requests.suffix.must_not_be_negative')]); + $messages[sprintf('%s.currency.in', $valueForm)] = trans('requests.value', ['suffix'=>trans('requests.suffix.currency_is_invalid')]); + $messages[sprintf('%s.value_date.required', $valueForm)] = trans('requests.alt_value_date', ['suffix'=>trans('requests.suffix.is_a_required_field')]); + $messages[sprintf('%s.value_date.after', $valueForm)] = trans('requests.value_date_field', ['suffix'=>trans('requests.suffix.must_be_between')]); + $messages[sprintf('%s.value_date.before', $valueForm)] = trans('requests.value_date_field', ['suffix'=>trans('requests.suffix.must_be_between')]); } return $messages; @@ -295,9 +295,9 @@ public function getMessagesForPeriodStart($formFields, $formBase): array foreach ($formFields as $periodStartKey => $periodStartVal) { $messages[$formBase . '.period_start.' . $periodStartKey . '.date.required'] = trans('validation.required', ['attribute' => trans('elementForm.period_start')]); - $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date'] = 'Period end must be a date.'; - $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date_greater_than'] = 'Period end date must be date greater than year 1900.'; - $messages[$formBase . '.period_start.' . $periodStartKey . '.date.period_start_end'] = 'The Planned Disbursement Period must not be longer than three months'; + $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.must_be_a_date')]); + $messages[$formBase . '.period_end.' . $periodStartKey . '.date.date_greater_than'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); + $messages[$formBase . '.period_start.' . $periodStartKey . '.date.period_start_end'] = trans('requests.planned_disb_period', ['suffix'=>trans('requests.suffix.must_not_be_longer_than_3_months')]); } return $messages; @@ -342,11 +342,11 @@ public function getMessagesForPeriodEnd($formFields, $formBase): array $messages = []; foreach ($formFields as $periodEndKey => $periodEndVal) { - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.required'] = 'Period end is a required field'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = 'Period end must be a date field'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = 'Period end must be a date after period'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = 'Period end date must be date greater than year 1900.'; - $messages[$formBase . '.period_end.' . $periodEndKey . '.date.period_start_end'] = 'The Planned Disbursement Period must not be longer than three months'; + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.required'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.is_a_required_field')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.must_be_a_date_field')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.after'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.must_be_a_date_after_period')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.date_greater_than'] = trans('requests.alt_period_end', ['suffix'=>trans('requests.suffix.date_must_be_greater')]); + $messages[$formBase . '.period_end.' . $periodEndKey . '.date.period_start_end'] = trans('requests.planned_disb_period', ['suffix'=>trans('requests.suffix.must_not_be_longer_than_3_months')]); } return $messages; diff --git a/app/Http/Requests/Activity/PolicyMarker/PolicyMarkerRequest.php b/app/Http/Requests/Activity/PolicyMarker/PolicyMarkerRequest.php index 2ac7624dc8..ac551e3bf6 100644 --- a/app/Http/Requests/Activity/PolicyMarker/PolicyMarkerRequest.php +++ b/app/Http/Requests/Activity/PolicyMarker/PolicyMarkerRequest.php @@ -77,15 +77,15 @@ public function getMessagesForPolicyMarker(array $formFields): array foreach ($formFields as $policyMarkerIndex => $policyMarker) { $policyMarkerForm = sprintf('policy_marker.%s', $policyMarkerIndex); - $messages[sprintf('%s.policy_marker_vocabulary.in', $policyMarkerForm)] = 'The policy marker vocabulary is invalid.'; - $messages[sprintf('%s.significance.in', $policyMarkerForm)] = 'The policy marker significance is invalid.'; - $messages[sprintf('%s.policy_marker.in', $policyMarkerForm)] = 'The policy marker code is invalid.'; + $messages[sprintf('%s.policy_marker_vocabulary.in', $policyMarkerForm)] = trans('requests.policy_maker', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.significance.in', $policyMarkerForm)] = trans('requests.policy_maker', ['suffix'=>trans('requests.suffix.significance_is_invalid')]); + $messages[sprintf('%s.policy_marker.in', $policyMarkerForm)] = trans('requests.policy_maker', ['suffix'=>trans('requests.suffix.code_is_invalid')]); $messages[sprintf('%s.vocabulary_uri.url', $policyMarkerForm)] - = 'The @vocabulary-uri field must be a valid url.'; + = trans('requests.vocab_url_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); if (Arr::get($policyMarker, 'policy_marker_vocabulary') === '99') { foreach (array_keys($policyMarker['narrative']) as $narrativeIndex) { - $messages[sprintf('%s.narrative.%s.narrative.required', $policyMarkerForm, $narrativeIndex)] = 'The narrative field is required when vocabulary is reporting organisation.'; + $messages[sprintf('%s.narrative.%s.narrative.required', $policyMarkerForm, $narrativeIndex)] = trans('requests.narrative_field', ['suffix'=>trans('requests.suffix.required_when_vocabulary')]); } } diff --git a/app/Http/Requests/Activity/RecipientCountry/RecipientCountryRequest.php b/app/Http/Requests/Activity/RecipientCountry/RecipientCountryRequest.php index 12775274aa..144e2e95cf 100644 --- a/app/Http/Requests/Activity/RecipientCountry/RecipientCountryRequest.php +++ b/app/Http/Requests/Activity/RecipientCountry/RecipientCountryRequest.php @@ -134,22 +134,22 @@ public function getRulesForRecipientCountry(array $formFields, bool $fileUpload */ public function getMessagesForRecipientCountry(array $formFields): array { - $messages = ['recipient_country.already_in_transactions' => 'Recipient Country Already defined in Transactions']; + $messages = ['recipient_country.already_in_transactions' => trans('requests.alt_recipient_country', ['suffix'=>trans('requests.suffix.already_defined_in_transaction')])]; foreach ($formFields as $recipientCountryIndex => $recipientCountry) { $recipientCountryForm = 'recipient_country.' . $recipientCountryIndex; - $messages[sprintf('%s.country_code.in', $recipientCountryForm)] = 'The recipient country code is invalid.'; - $messages[$recipientCountryForm . '.percentage.numeric'] = 'The recipient country percentage must be a number.'; - $messages[$recipientCountryForm . '.percentage.max'] = 'The recipient country percentage cannot be greater than 100'; - $messages[$recipientCountryForm . '.percentage.sum_exceeded'] = 'The sum of recipient country percentage cannot be greater than 100'; + $messages[sprintf('%s.country_code.in', $recipientCountryForm)] = trans('requests.recipient_country', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[$recipientCountryForm . '.percentage.numeric'] = trans('requests.recipient_country_percentage', ['suffix'=>trans('requests.suffix.percent_must_be_a_number')]); + $messages[$recipientCountryForm . '.percentage.max'] = trans('requests.recipient_country_percentage', ['suffix'=>trans('requests.suffix.cannot_be_greater_than_100')]); + $messages[$recipientCountryForm . '.percentage.sum_exceeded'] = trans('the_sum_of_recipient'); $narrativeMessages = $this->getMessagesForNarrative($recipientCountry['narrative'], $recipientCountryForm); foreach ($narrativeMessages as $key => $item) { $messages[$key] = $item; } - $messages[$recipientCountryForm . '.percentage.in'] = 'Recipient country percent must be equal to allocated percent'; - $messages[$recipientCountryForm . '.percentage.allocated_country_percent_exceeded'] = 'Recipient country percent must match with allocated percent'; + $messages[$recipientCountryForm . '.percentage.in'] = trans('requests.alt_recipient_country', ['suffix'=>trans('requests.suffix.percent_equal_allocated')]); + $messages[$recipientCountryForm . '.percentage.allocated_country_percent_exceeded'] = trans('requests.alt_recipient_country', ['suffix'=>trans('requests.suffix.percent_match_allocated')]); } return $messages; diff --git a/app/Http/Requests/Activity/RecipientRegion/RecipientRegionRequest.php b/app/Http/Requests/Activity/RecipientRegion/RecipientRegionRequest.php index 3a43add75d..430d9306e4 100644 --- a/app/Http/Requests/Activity/RecipientRegion/RecipientRegionRequest.php +++ b/app/Http/Requests/Activity/RecipientRegion/RecipientRegionRequest.php @@ -149,10 +149,10 @@ public function getMessagesForRecipientRegion(array $formFields): array foreach ($formFields as $recipientRegionIndex => $recipientRegion) { $recipientRegionForm = 'recipient_region.' . $recipientRegionIndex; - $messages[sprintf('%s.region_vocabulary.in', $recipientRegionForm)] = 'The recipient region vocabulary is invalid.'; - $messages[sprintf('%s.region_code.in', $recipientRegionForm)] = 'The recipient region code is invalid.'; - $messages[$recipientRegionForm . '.percentage.numeric'] = 'The recipient region percentage field must be a number.'; - $messages[sprintf('%s.vocabulary_uri.url', $recipientRegionForm)] = 'The recipient region vocabulary uri must be a valid url.'; + $messages[sprintf('%s.region_vocabulary.in', $recipientRegionForm)] = trans('requests.recipient_region', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.region_code.in', $recipientRegionForm)] = trans('requests.recipient_region', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[$recipientRegionForm . '.percentage.numeric'] = trans('requests.recipient_region_perc_field', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.vocabulary_uri.url', $recipientRegionForm)] = trans('requests.recipient', ['suffix'=>trans('requests.suffix.must_be_valid_vocal_url')]); $narrativeMessages = $this->getMessagesForNarrative($recipientRegion['narrative'], $recipientRegionForm); @@ -160,10 +160,10 @@ public function getMessagesForRecipientRegion(array $formFields): array $messages[$key] = $item; } - $messages[$recipientRegionForm . '.percentage.in'] = 'Region percent must be equal to allocated percent'; - $messages[$recipientRegionForm . '.percentage.allocated_region_total_mismatch'] = 'Region percent must match with allocated percent'; - $messages[$recipientRegionForm . '.percentage.sum_greater_than'] = 'Sum of percentage within vocabulary cannot be greater than 100'; - $messages[$recipientRegionForm . '.percentage.percentage_within_vocabulary'] = 'The total percentage within different vocabulary must be equal.'; + $messages[$recipientRegionForm . '.percentage.in'] = trans('requests.alt_region', ['suffix'=>trans('requests.suffix.percent_equal_allocated')]); + $messages[$recipientRegionForm . '.percentage.allocated_region_total_mismatch'] = trans('requests.alt_region', ['suffix'=>trans('requests.suffix.percent_match_allocated')]); + $messages[$recipientRegionForm . '.percentage.sum_greater_than'] = trans('requests.sum_of_percent'); + $messages[$recipientRegionForm . '.percentage.percentage_within_vocabulary'] = trans('requests.the_total_percent_equal'); } return $messages; diff --git a/app/Http/Requests/Activity/RelatedActivity/RelatedActivityRequest.php b/app/Http/Requests/Activity/RelatedActivity/RelatedActivityRequest.php index 440ee9cad4..131b9f61d3 100644 --- a/app/Http/Requests/Activity/RelatedActivity/RelatedActivityRequest.php +++ b/app/Http/Requests/Activity/RelatedActivity/RelatedActivityRequest.php @@ -64,7 +64,7 @@ public function getMessagesForRelatedActivity(array $formFields): array foreach ($formFields as $index => $formField) { $baseForm = sprintf('related_activity.%s', $index); - $messages[sprintf('%s.relationship_type.in', $baseForm)] = 'The relationship type in related activity is invalid.'; + $messages[sprintf('%s.relationship_type.in', $baseForm)] = trans('requests.relationship_type', ['suffix'=>trans('requests.suffix.is_invalid')]); } return $messages; diff --git a/app/Http/Requests/Activity/ReportingOrg/ReportingOrgRequest.php b/app/Http/Requests/Activity/ReportingOrg/ReportingOrgRequest.php index 52a7b842aa..9b30368c3a 100644 --- a/app/Http/Requests/Activity/ReportingOrg/ReportingOrgRequest.php +++ b/app/Http/Requests/Activity/ReportingOrg/ReportingOrgRequest.php @@ -71,13 +71,13 @@ public function getMessagesForReportingOrganization(array $formFields): array { $messages = []; - $messages['reporting_org.size'] = 'The reporting organisation should not have multiple values or narratives.'; + $messages['reporting_org.size'] = trans('requests.reporting_org', ['suffix'=>trans('requests.suffix.should_not_have_multiple_values')]); foreach ($formFields as $reportingOrganizationIndex => $reportingOrganization) { $reportingOrganizationForm = sprintf('reporting_org.%s', $reportingOrganizationIndex); - $messages[$reportingOrganizationForm . '.ref.not_regex'] = 'The reference format for reporting organisation is invalid.'; - $messages[$reportingOrganizationForm . '.type.in'] = 'The type for reporting organisation is invalid.'; + $messages[$reportingOrganizationForm . '.ref.not_regex'] = trans('requests.reference_format', ['suffix'=>trans('requests.suffix.should_not_have_multiple_values')]); + $messages[$reportingOrganizationForm . '.type.in'] = trans('requests.type_for', ['suffix'=>trans('requests.suffix.organisation_is_invalid')]); $narrativeMessages = $this->getMessagesForNarrative($reportingOrganization['narrative'], $reportingOrganizationForm); diff --git a/app/Http/Requests/Activity/Result/ResultRequest.php b/app/Http/Requests/Activity/Result/ResultRequest.php index db02a9a3cd..5bd894a963 100644 --- a/app/Http/Requests/Activity/Result/ResultRequest.php +++ b/app/Http/Requests/Activity/Result/ResultRequest.php @@ -163,10 +163,10 @@ protected function getMessagesForReferences($formFields, $fileUpload = false): a foreach ($formFields as $referenceIndex => $reference) { $referenceForm = sprintf('reference.%s', $referenceIndex); - $messages[sprintf('%s.vocabulary_uri.url', $referenceForm)] = 'The @vocabulary-uri field must be a valid url.'; + $messages[sprintf('%s.vocabulary_uri.url', $referenceForm)] = trans('requests.vocab_url_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); if (!empty($reference['code']) && $hasResultId) { - $messages[sprintf('%s.code.indicator_ref_code_present', $referenceForm)] = 'The code is already defined in its indicators'; + $messages[sprintf('%s.code.indicator_ref_code_present', $referenceForm)] = trans('requests.code', ['suffix'=>trans('requests.suffix.defined_in_indicators')]); } } diff --git a/app/Http/Requests/Activity/Scope/ScopeRequest.php b/app/Http/Requests/Activity/Scope/ScopeRequest.php index e724fb47e0..208a19c4e2 100644 --- a/app/Http/Requests/Activity/Scope/ScopeRequest.php +++ b/app/Http/Requests/Activity/Scope/ScopeRequest.php @@ -39,8 +39,8 @@ public function rules($scope = null): array public function messages(): array { return [ - 'in' => 'The activity scope does not exist.', - 'size' => 'The activity scope cannot have more than one value.', + 'in' => trans('requests.activity_scope', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.activity_scope', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/Sector/SectorRequest.php b/app/Http/Requests/Activity/Sector/SectorRequest.php index e2ad9ec68e..c925506d18 100644 --- a/app/Http/Requests/Activity/Sector/SectorRequest.php +++ b/app/Http/Requests/Activity/Sector/SectorRequest.php @@ -152,16 +152,16 @@ public function getSectorsMessages($formFields): array foreach ($formFields as $sectorIndex => $sector) { $sectorForm = sprintf('sector.%s', $sectorIndex); - $messages[sprintf('%s.sector_vocabulary.in', $sectorForm)] = 'The sector vocabulary is invalid.'; - $messages[sprintf('%s.code.in', $sectorForm)] = 'The sector code is invalid.'; - $messages[sprintf('%s.category_code.in', $sectorForm)] = 'The sector code is invalid.'; - $messages[sprintf('%s.sdg_goal.in', $sectorForm)] = 'The sector code is invalid.'; - $messages[sprintf('%s.sdg_target.in', $sectorForm)] = 'The sector code is invalid.'; - $messages[sprintf('%s.vocabulary_uri.url', $sectorForm)] = 'The sector vocabulary-uri field must be a valid url.'; - $messages[sprintf('%s.percentage.numeric', $sectorForm)] = 'The sector percentage field must be a number.'; - $messages[sprintf('%s.percentage.in', $sectorForm)] = 'The sector percentage for single sector must be either omitted or be 100.'; - $messages[sprintf('%s.percentage.sector_total_percent', $sectorForm)] = 'The total percentage within a vocabulary must be 100.'; - $messages[sprintf('%s.sector_vocabulary.sector_has_five_digit_oced_vocab', $sectorForm)] = 'The sector vocabulary must have 5 digit OECD'; + $messages[sprintf('%s.sector_vocabulary.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.is_invalid')]); + $messages[sprintf('%s.code.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.category_code.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.sdg_goal.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.sdg_target.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.vocabulary_uri.url', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.must_be_valid_vocal_url')]); + $messages[sprintf('%s.percentage.numeric', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.percent_field_must_be_a_number')]); + $messages[sprintf('%s.percentage.in', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.percentage_omitted')]); + $messages[sprintf('%s.percentage.sector_total_percent', $sectorForm)] = trans('requests.the_total_percent_100'); + $messages[sprintf('%s.sector_vocabulary.sector_has_five_digit_oced_vocab', $sectorForm)] = trans('requests.sector', ['suffix'=>trans('requests.suffix.must_have_oecd')]); $messageNarratives = $this->getMessagesForNarrative($sector['narrative'], $sectorForm); diff --git a/app/Http/Requests/Activity/Status/StatusRequest.php b/app/Http/Requests/Activity/Status/StatusRequest.php index a4c4deb84c..2d847a16f4 100644 --- a/app/Http/Requests/Activity/Status/StatusRequest.php +++ b/app/Http/Requests/Activity/Status/StatusRequest.php @@ -39,8 +39,8 @@ public function rules($status = null): array public function messages(): array { return [ - 'in' => 'The activity status does not exist.', - 'size' => 'The activity status cannot have more than one value.', + 'in' => trans('requests.activity_status', ['suffix'=>trans('requests.suffix.doesnt_exist')]), + 'size' => trans('requests.activity_status', ['suffix'=>trans('requests.suffix.cannot_have_more_than_one')]), ]; } } diff --git a/app/Http/Requests/Activity/Tag/TagRequest.php b/app/Http/Requests/Activity/Tag/TagRequest.php index 18404c19bd..d1df56b25d 100644 --- a/app/Http/Requests/Activity/Tag/TagRequest.php +++ b/app/Http/Requests/Activity/Tag/TagRequest.php @@ -70,10 +70,10 @@ public function getMessagesForTag(array $formFields): array foreach ($formFields as $tagIndex => $tag) { $tagForm = sprintf('tag.%s', $tagIndex); - $messages[sprintf('%s.tag_vocabulary.in', $tagForm)] = 'The tag vocabulary is invalid.'; - $messages[sprintf('%s.goals_tag_code.in', $tagForm)] = 'The tag SDG code is invalid'; - $messages[sprintf('%s.targets_tag_code.in', $tagForm)] = 'The tag SDG targets code is invalid.'; - $messages[sprintf('%s.vocabulary_uri.url', $tagForm)] = 'The @vocabulary-uri field must be a valid url.'; + $messages[sprintf('%s.tag_vocabulary.in', $tagForm)] = trans('requests.tag', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.goals_tag_code.in', $tagForm)] = trans('requests.sdg', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.targets_tag_code.in', $tagForm)] = trans('requests.sdg_targets', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.vocabulary_uri.url', $tagForm)] = trans('requests.vocab_url_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); foreach ($this->getMessagesForNarrative($tag['narrative'], $tagForm) as $tagNarrativeIndex => $narrativeMessages) { $messages[$tagNarrativeIndex] = $narrativeMessages; diff --git a/app/Http/Requests/Activity/Title/TitleRequest.php b/app/Http/Requests/Activity/Title/TitleRequest.php index 06728082d8..d3e92eda64 100644 --- a/app/Http/Requests/Activity/Title/TitleRequest.php +++ b/app/Http/Requests/Activity/Title/TitleRequest.php @@ -52,14 +52,14 @@ public function messages($name = 'narrative', $data = []): array $titles = request()->get('narrative'); } - $messages[sprintf('%s.unique_lang', $name)] = 'The title language field must be unique.'; - $messages[sprintf('%s.unique_default_lang', $name)] = 'The title language field must be unique.'; - $messages[sprintf('%s.0.narrative.required', $name)] = 'The first title is required.'; + $messages[sprintf('%s.unique_lang', $name)] = trans('requests.title_language_field', ['suffix'=>trans('requests.suffix.must_be_unique')]); + $messages[sprintf('%s.unique_default_lang', $name)] = trans('requests.title_language_field', ['suffix'=>trans('requests.suffix.must_be_unique')]); + $messages[sprintf('%s.0.narrative.required', $name)] = trans('requests.first_title', ['suffix'=>trans('requests.suffix.is_required')]); if (is_array($titles) && count($titles)) { foreach ($titles as $key => $title) { if ($key !== 0) { - $messages[sprintf('%s.%s.narrative.required_with_language', $name, $key)] = 'The narrative is required when language is specified.'; + $messages[sprintf('%s.%s.narrative.required_with_language', $name, $key)] = trans('requests.narrative', ['suffix'=>trans('requests.suffix.required_when_language')]); } } } diff --git a/app/Http/Requests/Activity/Transaction/TransactionRequest.php b/app/Http/Requests/Activity/Transaction/TransactionRequest.php index 3a7dc888a5..5418a736d8 100644 --- a/app/Http/Requests/Activity/Transaction/TransactionRequest.php +++ b/app/Http/Requests/Activity/Transaction/TransactionRequest.php @@ -107,17 +107,17 @@ public function getMessagesForTransaction(array $formFields): array $messages = []; $messages['reference.not_in'] - = 'The transaction reference field must be unique for an activity.'; - - $messages['transaction_type.0.transaction_type_code.in'] = 'The transaction type is invalid.'; - $messages['flow_type.0.flow_type.in'] = 'The transaction flow type code is invalid.'; - $messages['finance_type.0.finance_type.in'] = 'The transaction finance type code is invalid.'; - $messages['aid_type.0.aid_type_vocabulary.in'] = 'The transaction aid type vocabulary is invalid.'; - $messages['aid_type.0.aid_type_code.in'] = 'The transaction aid type code is invalid.'; - $messages['aid_type.0.earmarking_category.in'] = 'The transaction aid type code is invalid.'; - $messages['aid_type.0.earmarking_modality.in'] = 'The transaction aid type code is invalid.'; - $messages['aid_type.0.cash_and_voucher_modalities.in'] = 'The transaction aid type code is invalid.'; - $messages['tied_status.0.tied_status_code.in'] = 'The transaction tied status code is invalid.'; + = trans('requests.transaction_ref_field', ['suffix'=>trans('requests.suffix.must_be_unique_for_activity')]); + + $messages['transaction_type.0.transaction_type_code.in'] = trans('requests.transaction', ['suffix'=>trans('requests.suffix.type_is_invalid')]); + $messages['flow_type.0.flow_type.in'] = trans('requests.transaction_flow', ['suffix'=>trans('requests.suffix.code_in_invalid')]); + $messages['finance_type.0.finance_type.in'] = trans('requests.transaction_finance', ['suffix'=>trans('requests.suffix.code_in_invalid')]); + $messages['aid_type.0.aid_type_vocabulary.in'] = trans('requests.transaction_aid', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages['aid_type.0.aid_type_code.in'] = trans('requests.transaction_aid', ['suffix'=>trans('requests.suffix.code_in_invalid')]); + $messages['aid_type.0.earmarking_category.in'] = trans('requests.transaction_aid', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages['aid_type.0.earmarking_modality.in'] = trans('requests.transaction_aid', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages['aid_type.0.cash_and_voucher_modalities.in'] = trans('requests.transaction_aid', ['suffix'=>trans('requests.suffix.code_in_invalid')]); + $messages['tied_status.0.tied_status_code.in'] = trans('requests.transaction_tied', ['suffix'=>trans('requests.suffix.code_in_invalid')]); $tempMessages = [ $this->getTransactionDateMessages($formFields['transaction_date']), $this->getValueMessages($formFields['value']), @@ -170,8 +170,8 @@ public function getTransactionDateMessages(array $formFields): array foreach ($formFields as $dateIndex => $date) { $dateForm = sprintf('transaction_date.%s', $dateIndex); - $messages[sprintf('%s.date.before', $dateForm)] = 'The @iso-date must not be in future.'; - $messages[sprintf('%s.date.date', $dateForm)] = 'The @iso-date field mus be a valid date.'; + $messages[sprintf('%s.date.before', $dateForm)] = trans('requests.iso_date_symbol', ['suffix'=>trans('requests.suffix.must_not_be_future')]); + $messages[sprintf('%s.date.date', $dateForm)] = trans('requests.iso_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_date')]); } return $messages; @@ -210,10 +210,10 @@ public function getValueMessages(array $formFields): array foreach ($formFields as $valueIndex => $value) { $valueForm = sprintf('value.%s', $valueIndex); - $messages[sprintf('%s.amount.numeric', $valueForm)] = 'The @amount field must be a number.'; - $messages[sprintf('%s.amount.min', $valueForm)] = 'The @amount field must not be in negative.'; - $messages[sprintf('%s.date.before', $valueForm)] = 'The @value-date must not be in future.'; - $messages[sprintf('%s.date.date', $valueForm)] = 'The @value-date field must be a valid date.'; + $messages[sprintf('%s.amount.numeric', $valueForm)] = trans('requests.amount_field_symbol', ['suffix'=>trans('requests.suffix.must_be_a_number')]); + $messages[sprintf('%s.amount.min', $valueForm)] = trans('requests.amount_field_symbol', ['suffix'=>trans('requests.suffix.must_not_be_negative')]); + $messages[sprintf('%s.date.before', $valueForm)] = trans('requests.value_date_symbol', ['suffix'=>trans('requests.suffix.must_not_be_future')]); + $messages[sprintf('%s.date.date', $valueForm)] = trans('requests.value_date_field_symbol', ['suffix'=>trans('requests.suffix.must_be_a_valid_date')]); } return $messages; @@ -329,7 +329,7 @@ public function getSectorsRules(array $formFields, bool $fileUpload, array $acti */ public function getSectorsMessages(array $formFields): array { - $messages = ['sector.already_in_activity' => 'Sector already defined in Activity so cannot be mentioned in transaction.']; + $messages = ['sector.already_in_activity' => trans('requests.alt_sector', ['suffix'=>'requests.suffix.already_defined_in_activity'])]; if (empty($formFields)) { return $messages; @@ -337,15 +337,15 @@ public function getSectorsMessages(array $formFields): array foreach ($formFields as $sectorIndex => $sector) { $sectorForm = sprintf('sector.%s', $sectorIndex); - $messages[sprintf('%s.sector_vocabulary.in', $sectorForm)] = 'The transaction sector vocabulary is invalid.'; - $messages[sprintf('%s.code.in', $sectorForm)] = 'The transaction sector code is invalid.'; - $messages[sprintf('%s.category_code.in', $sectorForm)] = 'The transaction sector code is invalid.'; - $messages[sprintf('%s.sdg_goal.in', $sectorForm)] = 'The transaction sector code is invalid.'; - $messages[sprintf('%s.sdg_target.in', $sectorForm)] = 'The transaction sector code is invalid.'; + $messages[sprintf('%s.sector_vocabulary.in', $sectorForm)] = trans('requests.transaction_sector', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.code.in', $sectorForm)] = trans('requests.transaction_sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.category_code.in', $sectorForm)] = trans('requests.transaction_sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.sdg_goal.in', $sectorForm)] = trans('requests.transaction_sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.sdg_target.in', $sectorForm)] = trans('requests.transaction_sector', ['suffix'=>trans('requests.suffix.code_is_invalid')]); if (isset($sector['sector_vocabulary']) && $sector['sector_vocabulary'] === '99') { $messages[sprintf('%s.vocabulary_uri.url', $sectorForm)] - = 'The transaction sector vocabulary-uri field must be a valid url.'; + = trans('requests.transaction', ['suffix'=>trans('requests.suffix.must_be_valid_vocal_url')]); } $narrativeMessages = $this->getMessagesForNarrative($sector['narrative'], $sectorForm); @@ -396,8 +396,8 @@ public function getMessagesForProviderOrg(array $formFields): array foreach ($formFields as $providerOrgIndex => $providerOrg) { $providerOrgForm = sprintf('provider_organization.%s', $providerOrgIndex); - $message[sprintf('%s.%s.exclude_operators', $providerOrgForm, 'provider_activity_id')] = 'The transaction provider-activity-id field is not valid.'; - $messages[sprintf('%s.%s.in', $providerOrgForm, 'type')] = 'The transaction provider org type is invalid.'; + $message[sprintf('%s.%s.exclude_operators', $providerOrgForm, 'provider_activity_id')] = trans('requests.transaction_pro_org', ['suffix'=>trans('requests.suffix.is_not_valid')]); + $messages[sprintf('%s.%s.in', $providerOrgForm, 'type')] = trans('requests.transaction_pro_activity', ['suffix'=>trans('requests.suffix.type_is_invalid')]); $narrativeMessages = $this->getMessagesForNarrative($providerOrg['narrative'], $providerOrgForm); foreach ($narrativeMessages as $key => $item) { @@ -446,8 +446,8 @@ public function getMessagesForReceiverOrg(array $formFields): array foreach ($formFields as $receiverOrgIndex => $receiverOrg) { $receiverOrgForm = sprintf('receiver_organization.%s', $receiverOrgIndex); - $message[sprintf('%s.%s.exclude_operators', $receiverOrgForm, 'receiver_activity_id')] = 'The transaction receiver-activity-id field is not valid.'; - $messages[sprintf('%s.%s.in', $receiverOrgForm, 'type')] = 'The transaction receiver org type is invalid.'; + $message[sprintf('%s.%s.exclude_operators', $receiverOrgForm, 'receiver_activity_id')] = trans('requests.transaction_rec_org', ['suffix'=>trans('requests.suffix.is_not_valid')]); + $messages[sprintf('%s.%s.in', $receiverOrgForm, 'type')] = trans('requests.transaction_rec_activity', ['suffix'=>trans('requests.suffix.type_is_invalid')]); $narrativeMessages = $this->getMessagesForNarrative($receiverOrg['narrative'], $receiverOrgForm); foreach ($narrativeMessages as $key => $item) { @@ -519,7 +519,7 @@ public function getRulesForRecipientRegion(array $formFields, bool $fileUpload, */ public function getMessagesForRecipientRegion(array $formFields): array { - $messages = ['recipient_region.already_in_activity' => 'Recipient Region already defined in Activity so cannot be mentioned in transaction.']; + $messages = ['recipient_region.already_in_activity' => trans('requests.alt_recipient_region', ['suffix'=>trans('requests.suffix.already_defined_in_activity')])]; if (!$formFields) { return $messages; @@ -527,13 +527,13 @@ public function getMessagesForRecipientRegion(array $formFields): array foreach ($formFields as $recipientRegionIndex => $recipientRegion) { $recipientRegionForm = sprintf('recipient_region.%s', $recipientRegionIndex); - $messages[sprintf('%s.region_vocabulary.in', $recipientRegionForm)] = 'The transaction recipient region vocabulary is invalid.'; - $messages[sprintf('%s.region_code.in', $recipientRegionForm)] = 'The transaction recipient region code is invalid.'; - $messages[sprintf('%s.vocabulary_uri.url', $recipientRegionForm)] = 'The transaction recipient region vocabulary uri must be a valid url.'; + $messages[sprintf('%s.region_vocabulary.in', $recipientRegionForm)] = trans('requests.transaction_rec_region', ['suffix'=>trans('requests.suffix.vocabulary_is_invalid')]); + $messages[sprintf('%s.region_code.in', $recipientRegionForm)] = trans('requests.transaction_rec_region', ['suffix'=>trans('requests.suffix.code_is_invalid')]); + $messages[sprintf('%s.vocabulary_uri.url', $recipientRegionForm)] = trans('requests.transaction_rec_region', ['suffix'=>trans('requests.suffix.must_be_valid_vocal_url')]); if (Arr::get($recipientRegion, 'region_vocabulary', 1) === '99') { $messages[sprintf('%s.vocabulary_uri.url', $recipientRegionForm)] - = 'The @vocabulary-uri field must be a valid url.'; + = trans('requests.vocab_url_field_symbol', ['suffix'=>trans('requests.suffix.must_be_valid_url')]); } $narrativeMessages = $this->getMessagesForNarrative($recipientRegion['narrative'], $recipientRegionForm); @@ -601,7 +601,7 @@ public function getRulesForRecipientCountry(array $formFields, bool $fileUpload, */ public function getMessagesForRecipientCountry(array $formFields): array { - $messages = ['recipient_country.already_in_activity' => 'Recipient Country already defined in Activity so cannot be mentioned in transaction.']; + $messages = ['recipient_country.already_in_activity' => trans('requests.alt_recipient_country', ['suffix'=>trans('requests.suffix.already_defined_in_activity')])]; if (!$formFields) { return $messages; @@ -609,7 +609,7 @@ public function getMessagesForRecipientCountry(array $formFields): array foreach ($formFields as $recipientCountryIndex => $recipientCountry) { $recipientCountryForm = sprintf('recipient_country.%s', $recipientCountryIndex); - $messages[sprintf('%s.country_code.in', $recipientCountryForm)] = 'The transaction recipient country code is invalid.'; + $messages[sprintf('%s.country_code.in', $recipientCountryForm)] = trans('requests.transaction_ref_country', ['suffix'=>trans('requests.suffix.code_is_invalid')]); $narrativeMessages = $this->getMessagesForNarrative($recipientCountry['narrative'], $recipientCountryForm); foreach ($narrativeMessages as $key => $item) { diff --git a/app/Http/Requests/Activity/UploadActivity/ImportActivityRequest.php b/app/Http/Requests/Activity/UploadActivity/ImportActivityRequest.php index 6b672d4ed5..3c0132f8ec 100644 --- a/app/Http/Requests/Activity/UploadActivity/ImportActivityRequest.php +++ b/app/Http/Requests/Activity/UploadActivity/ImportActivityRequest.php @@ -50,9 +50,9 @@ public function rules(): array */ public function messages(): array { - $messages['activity.required'] = 'The activity file must be uploaded'; - $messages['activity.activity_file'] = 'The file must be of either xml or csv format.'; - $messages['activity.max'] = 'The file shouldn\'t be greater than 10MB.'; + $messages['activity.required'] = trans('requests.activity_files', ['suffix'=>trans('requests.suffix.must_be_uploaded')]); + $messages['activity.activity_file'] = trans('requests.either_xml_csv'); + $messages['activity.max'] = trans('requests.greater_than_100mb'); return $messages; } diff --git a/app/Http/Requests/Organization/DocumentLink/DocumentLinkRequest.php b/app/Http/Requests/Organization/DocumentLink/DocumentLinkRequest.php index 0169a9ef72..59bc57922d 100644 --- a/app/Http/Requests/Organization/DocumentLink/DocumentLinkRequest.php +++ b/app/Http/Requests/Organization/DocumentLink/DocumentLinkRequest.php @@ -143,14 +143,14 @@ public function getMessagesForDocumentCategory($formFields, $formIndex): array $messages[sprintf( '%s.category.unique_category', $formIndex - )] = 'The category @code field must be unique.'; + )] = translate_this('category_code_field_symbol', 'must_be_unique'); foreach ($formFields as $documentCategoryIndex => $documentCategory) { $messages[sprintf( '%s.category.%s.code.required', $formIndex, $documentCategoryIndex - )] = 'The @code field is required.'; + )] = translate_this('code_field_symbol', 'is_required'); } return $messages; @@ -190,14 +190,14 @@ public function getMessagesForDocumentLanguage($formFields, $formIndex): array $messages[sprintf( '%s.language.unique_language', $formIndex - )] = 'The language @code field must be unique.'; + )] = translate_this('language_code_symbol', 'must_be_unique'); foreach ($formFields as $documentCategoryIndex => $documentCategory) { $messages[sprintf( '%s.language.%s.code.required', $formIndex, $documentCategoryIndex - )] = 'The @code field is required.'; + )] = translate_this('code_field_symbol', 'is_required'); } return $messages; diff --git a/app/Http/Requests/Organization/Name/NameRequest.php b/app/Http/Requests/Organization/Name/NameRequest.php index 1771356a24..5f53c462e5 100644 --- a/app/Http/Requests/Organization/Name/NameRequest.php +++ b/app/Http/Requests/Organization/Name/NameRequest.php @@ -31,9 +31,9 @@ public function rules(): array */ public function messages(): array { - $messages['narrative.unique_lang'] = 'The @xml:lang field must be unique.'; - $messages['narrative.0.narrative.required'] = 'The narrative is required.'; - $messages['narrative.unique_default_lang'] = 'The @xml:lang field must be unique.'; + $messages['narrative.unique_lang'] = translate_this('xml_lang_field_symbol', 'must_be_unique'); + $messages['narrative.0.narrative.required'] = translate_this('narrative', 'is_required'); + $messages['narrative.unique_default_lang'] = translate_this('xml_lang_field_symbol', 'must_be_unique'); return $messages; } diff --git a/app/Http/Requests/Organization/OrganizationBaseRequest.php b/app/Http/Requests/Organization/OrganizationBaseRequest.php index f492d1a5e4..9129ef79d0 100644 --- a/app/Http/Requests/Organization/OrganizationBaseRequest.php +++ b/app/Http/Requests/Organization/OrganizationBaseRequest.php @@ -159,7 +159,7 @@ public function uniqueDefaultLangValidator($attribute, $value, $parameters, $val $validator->addReplacer( 'unique_default_lang', function ($message) use ($validator, $defaultLanguage) { - return 'The @xml:lang must be unique'; + return translate_this('xml_lang_symbol', 'must_be_unique'); } ); @@ -212,15 +212,15 @@ public function getRulesForNarrative($formFields, $formBase): array public function getMessagesForNarrative($formFields, $formBase): array { $messages = []; - $messages[sprintf('%s.narrative.unique_lang', $formBase)] = 'The @xml:lang field must be unique.'; + $messages[sprintf('%s.narrative.unique_lang', $formBase)] = translate_this('xml_lang_field_symbol', 'must_be_unique'); foreach ($formFields as $narrativeIndex => $narrative) { - $messages[sprintf('%s.narrative.%s.narrative.required', $formBase, $narrativeIndex)] = 'The narrative field is required.'; + $messages[sprintf('%s.narrative.%s.narrative.required', $formBase, $narrativeIndex)] = translate_this('narrative', 'is_required'); $messages[sprintf( '%s.narrative.%s.narrative.required_with_language', $formBase, $narrativeIndex - )] = 'The language field is required when narrative field is present.'; + )] = translate_this('language_field', 'required_when_narrative_present'); } return $messages; @@ -264,13 +264,13 @@ public function getMessagesForValue($formFields, $formBase): array foreach ($formFields as $valueKey => $valueVal) { $valueForm = $formBase . '.value.' . $valueKey; - $messages[$valueForm . '.amount.required'] = 'The amount field is required.'; - $messages[$valueForm . '.amount.numeric'] = 'The amount must be numeric.'; - $messages[$valueForm . '.amount.min'] = 'The amount must not be in negative.'; - $messages[$valueForm . '.value_date.required'] = 'The @value-date field is required.'; - $messages[$valueForm . '.value_date.date'] = 'The @value-date must be date.'; - $messages[sprintf('%s.value_date.after', $valueForm)] = 'The @value-date field must be a between period start and period end'; - $messages[sprintf('%s.value_date.before', $valueForm)] = 'The @value-date field must be a between period start and period end'; + $messages[$valueForm . '.amount.required'] = translate_this('amount_field', 'is_required'); + $messages[$valueForm . '.amount.numeric'] = translate_this('amount', 'must_be_numeric'); + $messages[$valueForm . '.amount.min'] = translate_this('amount', 'must_not_be_negative'); + $messages[$valueForm . '.value_date.required'] = translate_this('value_date_field_symbol', 'is_required'); + $messages[$valueForm . '.value_date.date'] = translate_this('value_date_symbol', 'must_be_a_date'); + $messages[sprintf('%s.value_date.after', $valueForm)] = translate_this('value_date_field_symbol', 'must_be_between'); + $messages[sprintf('%s.value_date.before', $valueForm)] = translate_this('value_date_field_symbol', 'must_be_between'); } return $messages; diff --git a/app/Http/Requests/Organization/OrganizationIdentifier/OrganizationIdentifierRequest.php b/app/Http/Requests/Organization/OrganizationIdentifier/OrganizationIdentifierRequest.php index f0c9032c5a..4a8f7b6cfd 100644 --- a/app/Http/Requests/Organization/OrganizationIdentifier/OrganizationIdentifierRequest.php +++ b/app/Http/Requests/Organization/OrganizationIdentifier/OrganizationIdentifierRequest.php @@ -32,7 +32,7 @@ public function rules(): array public function messages(): array { return [ - 'registration_number.not_regex' => 'The registration_number format is invalid.', + 'registration_number.not_regex' => trans('registration_number', 'is_invalid'), ]; } } diff --git a/app/Http/Requests/Web/IatiRegister/IatiRegisterFormRequest.php b/app/Http/Requests/Web/IatiRegister/IatiRegisterFormRequest.php index 0895c5a149..182f65f50f 100644 --- a/app/Http/Requests/Web/IatiRegister/IatiRegisterFormRequest.php +++ b/app/Http/Requests/Web/IatiRegister/IatiRegisterFormRequest.php @@ -81,11 +81,11 @@ public function messages(): array switch ($step) { case '1': - $messages['publisher_id.regex'] = 'The publisher id is invalid. The publisher id must be at least two characters long and lower case. It can include letters, numbers and also - (dash) and _ (underscore).'; - $messages['registration_number.regex'] = 'The registration number is invalid. Valid registration number includes letter, number, . and _, - (dash).'; + $messages['publisher_id.regex'] = translate_this('the_publisher_is_invalid'); + $messages['registration_number.regex'] = translate_this('the_registration_num_id_invalid'); break; case '4': - $messages['username.regex'] = 'The username is invalid. Username must be purely lowercase alphabets followed by alphanumeric(ascii) characters and these symbols:-_'; + $messages['username.regex'] = translate_this('the_user_name_is_invalid'); break; } diff --git a/app/IATI/Data/elementJsonSchema.json b/app/IATI/Data/elementJsonSchema.json index a68d291e2f..c0704deb80 100644 --- a/app/IATI/Data/elementJsonSchema.json +++ b/app/IATI/Data/elementJsonSchema.json @@ -1,38 +1,38 @@ { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "multiple": false, "add_more": false, - "hover_text": "A short, human-readable title that contains a meaningful summary of the activity. May be repeated for different languages. For more information", + "hover_text": "elements.activities.title.hover_text", "help_text": "", "show_info_in_title": true, "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "text", "placeholder": "", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide the title for this activity. For example: \"Water for Women Malawi\".", + "hover_text": "elements.activities.title.narrative.hover_text", + "help_text": "elements.activities.title.narrative.help_text", "attr": { "row": 4 }, "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.title.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -41,36 +41,36 @@ }, "reporting_org": { "name": "reporting_org", - "label": "reporting org", + "label": "el_common.reporting_organisation", "add_more": false, - "help_text": "This is your IATI Organisation Identifier (it is the unique ID that was generated for your organisation when you registered).For more information.", - "hover_text": "The organisation issuing the report. May be a primary source (reporting on its own activity as donor, implementing agency, etc) or a secondary source (reporting on the activities of another organisation).

Specifying the @ref attribute is mandatory. May contain the organisation name as content. For more information", + "help_text": "elements.activities.reporting_org.hover_text", + "hover_text": "elements.activities.reporting_org.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", "placeholder": "", "required": true, "criteria": "mandatory", - "hover_text": "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber}. For more information", + "hover_text": "elements.organisation.reporting_org.reference.hover_text", "help_text": "" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", "placeholder": "", "multiSelect": false, "choices": "Organization/OrganizationType.json", "required": true, "criteria": "mandatory", - "hover_text": "The type of organisation issuing the report. For more information", + "hover_text": "elements.organisation.reporting_org.type.hover_text", "help_text": "" }, "secondary_reporter": { "name": "secondary_reporter", - "label": "secondary reporter", + "label": "el_common.secondary_reporter", "type": "select", "placeholder": "", "choices": { @@ -79,14 +79,14 @@ }, "required": false, "criteria": "", - "hover_text": "A flag indicating that the reporting organisation of this activity is acting as a secondary reporter. A secondary reporter is one that reproduces data on the activities of an organisation for which it is not directly responsible. For more information", + "hover_text": "elements.organisation.reporting_org.secondary_reporter.hover_text", "help_text": "" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", "placeholder": "", "required": true, @@ -95,20 +95,20 @@ "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "This is the name you provided for your organisation when you registered.", + "hover_text": "el_common.the_free_text_name_link_4", + "help_text": "el_common.this_is_the_name_provided_for_org", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "multiSelect": false, "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_5", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -116,82 +116,82 @@ } }, "iati_identifier": { - "label": "iati identifier", + "label": "el_common.iati_identifier", "attributes": { "activity_identifier": { "name": "activity_identifier", - "label": "activity-identifier", + "label": "el_common.activity_identifier", "type": "text", - "placeholder": "Type activity identifier here", + "placeholder": "el_common.type_identifier_here", "required": true, "criteria": "mandatory", "hover_text": "", - "help_text": "Enter a unique series of letters and / or numbers to identify your activity. For example PROJECT-00120467 or AFG-COVAX.

You must make sure:

Each IATI identifier you publish is unique.

Each IATI identifier should not start or end with whitespace.

Only use numbers, letters and dashes to form your IATI identifiers.

Once you have published an activity its IATI identifier must not change.Further guidance." + "help_text": "elements.activities.activity_identifier.help_text" }, "iati_identifier_text": { "name": "iati_identifier_text", - "label": "iati identifier", + "label": "el_common.iati_identifier", "type": "text", "placeholder": "", "required": false, "criteria": "", "read_only": true, - "hover_text": "A globally unique identifier for the activity.

This MUST be prefixed with EITHER the current IATI organisation identifier for the reporting organisation (reporting-org/@ref) OR a previous identifier reported in other-identifier, and suffixed with the organisation’s own activity identifier. The prefix and the suffix should be separated by a hyphen “-“.

Once an activity has been reported to IATI its identifier MUST NOT be changed in subsequent updates.For more information", - "help_text": "This is autogenerated by adding your activity-identifier to the end of your Organisation Identifier (this is the unique ID that was generated for your organisation when you registered). Futher guidance.

Once an activity has been reported to IATI its identifier MUST NOT be changed in subsequent updates. For more information." + "hover_text": "elements.activities.iati_identifier.hover_text", + "help_text": "elements.activities.iati_identifier.help_text" } }, "sub_elements": {} }, "other_identifier": { "name": "other_identifier", - "label": "other identifier", + "label": "el_common.other_identifier", "add_more": true, - "hover_text": "Another identifier for the activity. This may be a publishers own identifier that it wishes to record with the activity. This element is also used to trace changes to activity identifiers, for example when an organisation has changed it’s organisation identifier.For more information", + "hover_text": "elements.activities.other_identifier.hover_text", "attributes": { "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": true, "criteria": "mandatory", - "hover_text": "The identifier you wish to report. This can be used to report a number of different types of identifiers. See the OtherIdentifier Type codelist for details and options.

This attribute is required.For more information", - "help_text": "Please provide the identifier related to this activity." + "hover_text": "elements.activities.other_identifier.reference.hover_text", + "help_text": "elements.activities.other_identifier.reference.help_text" }, "reference_type": { "name": "reference_type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/OtherIdentifierType.json", "required": true, "criteria": "mandatory", - "hover_text": "The type of identifier being reported, taken from the OtherIdentifierType codelist.

This attribute is required.For more information", - "help_text": "If you want to record another identifier related to this activity, you must select which type of identifier you are providing. See descriptions of all possible types in the Other Identifier Type codelist." + "hover_text": "elements.activities.other_identifier.ref_type.hover_text", + "help_text": "elements.activities.other_identifier.ref_type.help_text" } }, "sub_elements": { "owner_org": { "name": "owner_org", - "label": "owner org", + "label": "el_common.owner", "add_more": false, - "hover_text": "Where applicable, the organisation that owns the other identifier being reported. When used, then either other-identifier/owner-org/@ref or other-identifier/owner-org/narrative/text() MUST be present.For more information", + "hover_text": "elements.activities.other_identifier.owner_org.hover_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "Where applicable, the organisation that owns the other identifier being reported. When used, then either other-identifier/owner-org/@ref or other-identifier/owner-org/narrative/text() MUST be present.For more information", - "help_text": "Please provide the Organisation Identifier of the owner of the other identifier for the activity. If your organisation is not the owner, you can search other organisations in the IATI Publisher List. If you cannot find the organisation, see further guidance." + "hover_text": "elements.activities.other_identifier.owner_org.hover_text", + "help_text": "elements.activities.other_identifier.owner_org.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", "placeholder": "", "required": false, @@ -200,19 +200,19 @@ "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide a description of the other identifier for the activity.", + "hover_text": "elements.activities.other_identifier.narrative.hover_text", + "help_text": "elements.activities.other_identifier.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_8", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -223,47 +223,47 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": true, - "hover_text": "A longer, human-readable description containing a meaningful description of the activity. May be repeated for different languages. For more information", + "hover_text": "elements.activities.description.hover_text", "attributes": { "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/DescriptionType.json", "required": false, "criteria": "", - "hover_text": "Activity description types. (General, objectives, etc).For more information", - "help_text": "Select the type of description that best describes your activity.

1. General - Unstructured, long description of the activity.

2. Objectives - Specific objectives for the activity, e.g. taken from logical framework.

3. Target Groups - Details of groups that are intended to benefit from the activity.

4. Other - For miscellaneous use. A further classification or breakdown may be included in the narrative" + "hover_text": "elements.activities.description.type.hover_text", + "help_text": "elements.activities.description.type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information.", - "help_text": "Provide a description for your activity. For example: “This project will improve maternal and child health seeking behaviours among 800 pregnant women and 6,500 caregivers of children under five in [location], thereby contributing to a reduction in the high maternal and under-five mortality and morbidity rates in these communities”.", + "hover_text": "elements.activities.description.narrative.hover_text", + "help_text": "elements.activities.description.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.description.narrative.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -272,77 +272,77 @@ }, "activity_status": { "label": "activity status", - "help_text": "An activity status should be provided. This describes the lifecycle status of the activity from pipeline to completion. You can publish activities that are already completed, currently happening or not yet started. As the activity progresses over time, the activity status should be updated.", - "hover_text": "The current status of the activity.For more information", + "help_text": "elements.activities.activity_status.help_text", + "hover_text": "elements.activities.activity_status.hover_text", "show_info_in_title": true, "attributes": { "activity_status": { "name": "activity_status", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/ActivityStatus.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the current status of the activity.

This attribute is required.For more information", - "help_text": "Select an option that defines the current status of your activity.

1. Pipeline/identification: The activity is being scoped or planned

2. Implementation: The activity is currently being implemented

3. Finalisation: Physical activity is complete or the final disbursement has been made, but the activity remains open pending financial sign off or M&E

4. Closed: Physical activity is complete or the final disbursement has been made

5. Canceled: The activity has been canceled

6. Suspended: The activity has been temporarily suspended" + "hover_text": "elements.activities.activity_status.code.hover_text", + "help_text": "elements.activities.activity_status.code.help_text" } }, "sub_elements": {} }, "activity_date": { "name": "activity_date", - "label": "activity date", + "label": "el_common.activity_date", "add_more": true, - "hover_text": "The planned and actual start and completion dates of the activity. Start dates may reflect either the commencement of funding, planning or physical activity. End dates should, wherever possible, reflect the ending of physical activity.For more information", + "hover_text": "elements.activities.activity_status.activity_date.hover_text", "attributes": { "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/ActivityDateType.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the type of activity date being reported.

This attribute is required.For more information", - "help_text": "Please select the type of activity date that you will report.

1. Planned start: The date on which the activity is planned to start, for example the date of the first planned disbursement or when physical activity starts.

2. Actual start: The actual date the activity starts, for example the date of the first disbursement or when physical activity starts.

3. Planned End: The date on which the activity is planned to end, for example the date of the last planned disbursement or when physical activity is complete.

4. Actual end: The actual date the activity ends, for example the date of the last disbursement or when physical activity is complete." + "hover_text": "elements.activities.activity_status.activity_date.type.hover_text", + "help_text": "elements.activities.activity_status.activity_date.type.help_text" }, "date": { "name": "date", - "label": "iso date", + "label": "el_common.iso_date", "type": "date", - "placeholder": "Select date", + "placeholder": "el_common.select_date", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.
This value must be of type xsd:date.
1: The planned start date of the activity must be before the planned end date.
2: The actual start date of the activity must be before the actual end date.
3: The actual start date of the activity must not be in the future.
4: The actual end date of the activity must not be in the future.For more information", - "help_text": "Provide the date of your activity." + "hover_text": "elements.activities.activity_status.date.hover_text", + "help_text": "elements.activities.activity_status.date.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide any accompanying information or explanation for your chosen activity status.", + "hover_text": "elements.activities.activity_status.narrative.hover_text", + "help_text": "elements.activities.activity_status.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, the default language is assumed." + "hover_text": "elements.activities.activity_status.language.hover_text", + "help_text": "el_common.default_value_assumed_the" } }, "sub_elements": {} @@ -351,77 +351,77 @@ }, "activity_scope": { "label": "activity scope", - "hover_text": "The geographical scope of the activity: regional, national, sub-national, etc.For more information", + "hover_text": "elements.activities.activity_scope.hover_text", "show_info_in_title": true, "attributes": { "activity_scope": { "name": "activity_scope", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/ActivityScope.json", "required": true, "criteria": "mandatory", - "hover_text": "The geographical scope.. This attribute is required.For more information", - "help_text": "Select an option that best describes the scope of this activity.

1. Global - The activity scope is global. For example, some activities, such as research, are not based in or benefitting particular countries or regions

2. Regional - The activity scope is a supranational region

3. Multi-national - The activity scope covers multiple countries, that don’t constitute a region

4. National - The activity scope covers one country

5. Sub-national: Multi-first-level administrative areas - The activity scope covers more than one first-level subnational administrative areas (e.g. counties, provinces, states)

6. Sub-national: Single first-level administrative area - The activity scope covers one first-level subnational administrative area (e.g. country, province, state)

7. Sub-national: Single second-level administrative area - The activity scope covers one second-level subnational administrative area (e.g. municipality or district)

8. Single location - The activity scope covers one single location (e.g. town, village, farm) Further guidance." + "hover_text": "elements.activities.activity_scope.activity_code.hover_text", + "help_text": "elements.activities.activity_scope.activity_code.help_text" } }, "sub_elements": {} }, "recipient_country": { "name": "recipient_country", - "label": "recipient country", + "label": "el_common.recipient_country", "add_more": true, - "help_text": "Each activity in IATI should specify the country (e.g. China) in which the activity is taking place, or the places that will benefit from the activity. If the country is not known, then a supra-national region or regions (e.g. East Asia) must be added.

There are several ways you can publish information on which country and/or region will benefit from this activity.

If just one country or region is benefitting from this activity, you should simply select the country or region below. This means that only one country or region will be benefiting from 100% of the funding that you publish for this activity.

However if multiple countries and/or regions are benefitting from your activity you can:

1. Publish the recipient country or region for every individual transaction you publish for this activity. You will be required to publish data on at least one transaction for every activity that you publish (publish data on transactions). Each transaction represents money flowing in or out of the activity. You can select a different country or region for each transaction that you publish.

If you want to provide the recipient county or region for your individual transactions, then you should not select a country or region for the entire activity below.

2. You can select multiple countries or regions for the entire activity below. If you choose to do this, you must allocate a percentage of funding for the activity to each country and/or region.

3. You can choose to create a separate activity for every country that is benefitting from this activity’s funding.Further guidance.", - "hover_text": "A country that will benefit from this activity. If a specific country is not known the recipient-region element should be used instead. For geographical location, use the location element.

Multiple countries and regions can be reported, in which case the percentage attribute MUST be used to specify the share of total commitments across all reported countries and regions.

The country can also be specified at transaction rather than activity level. If recipient-country OR recipient-region are reported at the transaction level, ALL transactions MUST contain a recipient-country or recipient-region element and iati-activity/recipient-country and iati-activity/recipient-region MUST NOT be used.For more information", + "help_text": "elements.activities.recipient_country.help_text", + "hover_text": "elements.activities.recipient_country.hover_text", "attributes": { "country_code": { "name": "country_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Country.json", "required": true, "criteria": "mandatory", - "hover_text": "ISO 3166-1 alpha-2 code for the country. This attribute is required.For more information", - "help_text": "Select a country benefiting from this activity. However, do not select a country here if you want to specify the recipient country benefiting from the individual transactions within this activity." + "hover_text": "elements.activities.recipient_country.country_code.hover_text", + "help_text": "elements.activities.recipient_country.country_code.help_text" }, "percentage": { "name": "percentage", - "label": "percentage", + "label": "el_common.percentage_organisation", "type": "text", - "placeholder": "Select percentage", + "placeholder": "el_common.select_percentage", "required": false, "criteria": "recommended", - "hover_text": "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. Percentages for all reported countries and regions within a vocabulary MUST add up to 100.For more information", - "help_text": "Select the percentage of funding benefitting this country. Percentages for all reported countries and regions MUST add up to 100. Further guidance." + "hover_text": "elements.activities.recipient_country.percentage.hover_text", + "help_text": "elements.activities.recipient_country.percentage.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Add the free text name and/or description regarding the country benefitting from the activity.", + "hover_text": "el_common.the_free_text_name_link_7", + "help_text": "elements.activities.recipient_country.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_9", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -430,10 +430,10 @@ }, "recipient_region": { "name": "recipient_region", - "label": "recipient region", + "label": "el_common.recipient_region", "add_more": true, - "help_text": "If you cannot identify the specific country/countries benefiting from this activity, then you should provide the region instead.

If a region is included, it must be in addition to any countries specified. If the recipient country(ies) is known, then the corresponding recipient region should not also be added. For example, if 100% of the funding is going to Uganda, then you should record Uganda as the recipient country and you should not add that the funding is going to the region of Africa.

However, if you know that at least 80% of the expected funding is going to Uganda, you can specify that the unknown 20% is going to the region of Africa.More information", - "hover_text": "A supranational geopolitical region that will benefit from this activity. For sub-national geographical location, use the location element. Multiple countries and regions can be reported, in which case the percentage attribute MUST be used to specify the share of total commitments across all reported countries and regions. Recipient-region must not be used merely to describe the region of a country reported in recipient-country, but ONLY if the region is a recipient IN ADDITION to the country.For more information", + "help_text": "elements.activities.recipient_region.help_text", + "hover_text": "elements.activities.recipient_region.hover_text", "dependent_attributes": { "region_code": {}, "custom_code": {}, @@ -442,95 +442,102 @@ "attributes": { "region_vocabulary": { "name": "region_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select a list of regions", + "placeholder": "el_common.select_a_list_of_regions", "choices": "Activity/RegionVocabulary.json", "required": false, "criteria": "recommended", - "hover_text": "An IATI code for the vocabulary from which the region code is drawn. If it is not present 1 - ‘OECD DAC’ is assumed.For more information", - "help_text": "There are two lists of regions; the OECD DAC and UN region code lists. Please select one.IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined.

If you do not choose an option, then the code list 'OECD DAC' is assumed." + "hover_text": "elements.activities.recipient_region.region_vocabulary.hover_text", + "help_text": "elements.activities.recipient_region.region_vocabulary.help_text" }, "region_code": { "name": "region_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select region", + "placeholder": "el_common.select_region", "choices": "Activity/Region.json", "required": true, "criteria": "mandatory", - "hover_text": "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute.This attribute is required.
For more information", - "help_text": "Select the region benefitting from this activity.", + "hover_text": "elements.activities.recipient_region.region_code.hover_text", + "help_text": "el_common.select_the_activity_region", "parent": { "name": "region_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "custom_code": { "name": "custom_code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute.This attribute is required.For more information", - "help_text": "Select the region benefitting from this activity.", + "hover_text": "elements.activities.recipient_region.custom_code.hover_text", + "help_text": "el_common.select_the_activity_region", "parent": { "name": "region_vocabulary", - "value": ["2", "99"] + "value": [ + "2", + "99" + ] } }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type uri", + "placeholder": "el_common.type_uri", "required": false, "criteria": "recommended", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", - "help_text": "If you have selected the option: ‘Reporting Organisation’ please provide the URI where this internal list is defined.", + "hover_text": "elements.activities.recipient_region.vocabulary_uri.hover_text", + "help_text": "el_common.if_you_have_selected", "parent": { "name": "region_vocabulary", - "value": ["99"] + "value": [ + "99" + ] } }, "percentage": { "name": "percentage", - "label": "percentage", + "label": "el_common.percentage_organisation", "type": "text", - "placeholder": "Type percentage", + "placeholder": "el_common.type_percentage", "required": false, "criteria": "recommended", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users. For more information", - "help_text": "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. Percentages for all reported countries and regions within a vocabulary MUST add up to 100.For more information" + "hover_text": "elements.activities.recipient_region.percentage.hover_text", + "help_text": "elements.activities.recipient_region.percentage.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Add the free text name of this region benefitting from the activity.", + "hover_text": "el_common.the_free_text_name_link_7", + "help_text": "elements.activities.recipient_region.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default value is assumed." + "hover_text": "el_common.a_code_specifying_text_link_9", + "help_text": "elements.activities.recipient_region.language.help_text" } }, "sub_elements": {} @@ -538,11 +545,11 @@ } }, "sector": { - "label": "sector", + "label": "el_common.sector", "name": "sector", "add_more": true, - "hover_text": "A recognised code, from a recognised vocabulary, classifying the purpose of the activity. Sector MUST EITHER be reported here OR at transaction level for ALL transactions. For more information", - "help_text": "Provide information on the sector which the activity targets or supports. For example, primary education or agriculture. You can select more than one sector but you must provide at least one.", + "hover_text": "elements.activities.sector.hover_text", + "help_text": "elements.activities.sector.help_text", "dependent_attributes": { "vocabulary_uri": {}, "code": {}, @@ -554,139 +561,159 @@ "attributes": { "sector_vocabulary": { "name": "sector_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/SectorVocabulary.json", "required": false, "criteria": "recommended", - "hover_text": "An IATI code for the vocabulary (see codelist) used for sector classifications. If omitted, OECD DAC 5-digit Purpose Codes are assumed. It is recommended that OECD DAC 5-digit Purpose Codes are used wherever possible. It is also recommended that if a publisher has its own classification system or systems then the vocabularies 99 or 98 (Reporting Organisation’s own vocabularies) should be used in addition to DAC codes.For more information", - "help_text": "Please choose the sector list from which you will select the sectors that your activity targets. IATI recommends choosing the OECD DAC 5-digit sector codelist, in which you can make a selection from over 300 sectors.

In addition to the OECD DAC 5-digit codelist, you can also choose to use another list (see information on all possible options). If you want to use your organisation’s own list of internal sector classifications, select the option: ‘Reporting Organisation’.

You can choose to use multiple lists. If you use more than one internal sector classification, select ‘Reporting Organisation 2’ (which has the code 98) for the additional list.Further guidance." + "hover_text": "elements.activities.sector.sector_vocabulary.hover_text", + "help_text": "elements.activities.sector.sector_vocabulary.help_text" }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary-uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "recommended", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 or 98 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", - "help_text": "If you have chosen to use an internal sector classification codelist, please provide a link to it.", + "hover_text": "elements.activities.sector.vocabulary_uri.hover_text", + "help_text": "elements.activities.sector.vocabulary_uri.help_text", "parent": { "name": "sector_vocabulary", - "value": ["99", "98"] + "value": [ + "99", + "98" + ] } }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/SectorCode.json", "criteria": "mandatory", "required": true, - "hover_text": "The code for the sector. This attribute is required.For more information", - "help_text": "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "hover_text": "el_common.the_code_for_sector_link_1", + "help_text": "el_common.select_the_selector", "parent": { "name": "sector_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "text": { "name": "text", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": true, "criteria": "mandatory", - "hover_text": "The code for the sector. This attribute is required.For more information", - "help_text": "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "hover_text": "el_common.the_code_for_sector_link_1", + "help_text": "el_common.select_the_selector", "parent": { "name": "sector_vocabulary", - "value": ["3", "4", "5", "6", "9", "10", "99", "98"] + "value": [ + "3", + "4", + "5", + "6", + "9", + "10", + "99", + "98" + ] } }, "category_code": { "name": "category_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/SectorCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "The code for the sector. This attribute is required.For more information", - "help_text": "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "hover_text": "el_common.the_code_for_sector_link_1", + "help_text": "el_common.select_the_selector", "parent": { "name": "sector_vocabulary", - "value": ["2"] + "value": [ + "2" + ] } }, "sdg_goal": { "name": "sdg_goal", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/UNSDG-Goals.json", "required": true, "criteria": "mandatory", - "hover_text": "The code for the sector. This attribute is required.
For more information", - "help_text": "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "hover_text": "el_common.the_code_for_sector_link_2", + "help_text": "el_common.select_the_selector", "parent": { "name": "sector_vocabulary", - "value": ["7"] + "value": [ + "7" + ] } }, "sdg_target": { "name": "sdg_target", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/UNSDG-Targets.json", "required": true, "criteria": "mandatory", - "hover_text": "The code for the sector. This attribute is required.
For more information", - "help_text": "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "hover_text": "el_common.the_code_for_sector_link_2", + "help_text": "el_common.select_the_selector", "parent": { "name": "sector_vocabulary", - "value": ["8"] + "value": [ + "8" + ] } }, "percentage": { "name": "percentage", - "label": "percentage", + "label": "el_common.percentage_organisation", "type": "text", - "placeholder": "Type percentage", + "placeholder": "el_common.type_percentage", "required": false, "criteria": "recommended", - "hover_text": "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. All reported sectors from the same vocabulary MUST add up to 100. For more information", - "help_text": "If you have selected more than one sector (from the same list), each sector must be given a percentage. These percentages can then be applied to the funding amounts to estimate the resources allocated to each sector. For example, using the OECD DAC 5-digit sector codelist you could allocate 50% of the funding for the activity to the sector code ‘teacher training’ (11130) and 50% to ‘primary education’ (11220)." + "hover_text": "elements.activities.sector.percentage.hover_text", + "help_text": "elements.activities.sector.percentage.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used).For more information", - "help_text": "If you have chosen a sector from an internal sector classification codelist, please provide a description of this sector.", + "hover_text": "elements.activities.sector.narrative.hover_text", + "help_text": "elements.activities.sector.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the description. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.sector.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_desc" } }, "sub_elements": {} @@ -695,10 +722,10 @@ }, "tag": { "name": "tag", - "label": "tag", + "label": "el_common.tag", "add_more": true, - "hover_text": "Categorisations from established taxonomies that enrich the classification of the activity but that, unlike those reported in the sector element, cannot be associated with percentage splits on finances. For more information", - "help_text": "You can provide other useful information about your activity through ‘tagging’ it to categorisations from established taxonomies.

For example, IATI recommends that, if possible, you should tag your activity according to which UN Sustainable Development Goal(s) it is contributing to. Please read guidance on reporting data on the UN Sustainable Development Goals.", + "hover_text": "elements.activities.tag.hover_text", + "help_text": "elements.activities.tag.help_text", "dependent_attributes": { "goals_tag_code": {}, "targets_tag_code": {}, @@ -708,103 +735,112 @@ "attributes": { "tag_vocabulary": { "name": "tag_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/TagVocabulary.json", "required": false, "criteria": "", - "hover_text": "An IATI code for the vocabulary or taxonomy (see non-embedded codelist) used for tag classifications.For more information", - "help_text": "Choose a list. See information on all options. You may choose to tag your activity according to an internal category list, by choosing ‘Reporting Organisation’." + "hover_text": "elements.activities.tag.tag_vocabulary.hover_text", + "help_text": "elements.activities.tag.tag_vocabulary.help_text" }, "goals_tag_code": { "name": "goals_tag_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/UNSDG-Goals.json", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "The code for the tag as defined in the specified vocabulary.

This attribute is required.For more information", - "help_text": "Choose an option from this list.", + "hover_text": "el_common.the_code_for_the_tag", + "help_text": "el_common.chose_an_option_from_this_list", "parent": { "name": "tag_vocabulary", - "value": ["2"] + "value": [ + "2" + ] } }, "targets_tag_code": { "name": "targets_tag_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/UNSDG-Targets.json", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "The code for the tag as defined in the specified vocabulary.

This attribute is required. For more information", - "help_text": "Choose an option from this list.", + "hover_text": "elements.activities.tag.targets_tag_code.hover_text", + "help_text": "el_common.chose_an_option_from_this_list", "parent": { "name": "tag_vocabulary", - "value": ["3"] + "value": [ + "3" + ] } }, "tag_text": { "name": "tag_text", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "The code for the tag as defined in the specified vocabulary.

This attribute is required.For more information", - "help_text": "Choose an option from this list.", + "hover_text": "el_common.the_code_for_the_tag", + "help_text": "el_common.chose_an_option_from_this_list", "parent": { "name": "tag_vocabulary", - "value": ["1", "99"] + "value": [ + "1", + "99" + ] } }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", "hidden": true, - "hover_text": "The URI where this vocabulary is defined.
For more information", - "help_text": "Provide a link to your chosen list.", + "hover_text": "elements.activities.tag.vocabulary_uri.hover_text", + "help_text": "elements.activities.tag.vocabulary_uri.help_text", "parent": { "name": "tag_vocabulary", - "value": ["99"] + "value": [ + "99" + ] } } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "You can provide additional information on the option that you have chosen.", + "hover_text": "elements.activities.tag.narrative.hover_text", + "help_text": "elements.activities.tag.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.tag.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -813,10 +849,10 @@ }, "policy_marker": { "name": "policy_marker", - "label": "policy marker", + "label": "el_common.policy_maker", "add_more": true, - "hover_text": "A policy or theme addressed by the activity. This element was designed for the reporting of OECD DAC CRS policy markers (columns 20-23 and 28-31 of the CRS++ reporting format) but the vocabulary attribute allows it use by other (including local) systems. This element can be repeated for each policy marker.For more information", - "help_text": "Provide information about the policy or theme addressed by your activity, for example: climate change mitigation or disability. An activity can have multiple policy-markers and percentages do not need to be added to each policy-marker.", + "hover_text": "elements.activities.policy_marker.hover_text", + "help_text": "elements.activities.policy_marker.help_text", "dependent_attributes": { "vocabulary_uri": {}, "policy_marker": {}, @@ -825,97 +861,103 @@ "attributes": { "policy_marker_vocabulary": { "name": "policy_marker_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/PolicyMarkerVocabulary.json", "required": false, "criteria": "", - "hover_text": "An IATI code for the vocabulary to be used to define policy markers. If omitted then the OECD DAC vocabulary is assumed. For more information", - "help_text": "Select a list that includes the policy marker(s) related to your activity.

1 OECD DAC CRS - IATI recommends that you select this list which has 12 options to choose from.

99 Reporting Organisation - choose this option if you want to provide a code for a policy marker that is defined and tracked by your organisation." + "hover_text": "elements.activities.policy_marker.policy_marker_vocabulary.hover_text", + "help_text": "elements.activities.policy_marker.policy_marker_vocabulary.help_text" }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary", "type": "text", - "placeholder": "Select vocabulary-uri", + "placeholder": "el_common.select_vocabulary_uri", "required": false, "criteria": "", "hidden": true, - "hover_text": "If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", - "help_text": "If you have selected 99 Reporting Organisation (above), please provide a link to where your chosen policy marker is listed.", + "hover_text": "elements.activities.policy_marker.vocabulary_uri.hover_text", + "help_text": "elements.activities.policy_marker.vocabulary_uri.help_text", "parent": { "name": "policy_marker_vocabulary", - "value": ["99"] + "value": [ + "99" + ] } }, "significance": { "name": "significance", - "label": "significance", + "label": "el_common.significance", "type": "select", - "placeholder": "Select significance", + "placeholder": "el_common.select_significance", "choices": "Activity/PolicySignificance.json", "required": false, "criteria": "", - "hover_text": "An OECD DAC CRS code indicating the significance of the policy marker for this activity. This attribute MUST be used for all OECD DAC CRS vocabularies.For more information", - "help_text": "If you have chosen a policy or theme from the policy-marker OECD DAC CRS list, then you must indicate how significant it is for your activity. For example, it could be the principal objective or a significant objective for your activity. Please read information on all options before making a selection." + "hover_text": "elements.activities.policy_marker.significance.hover_text", + "help_text": "elements.activities.policy_marker.significance.help_text" }, "policy_marker": { "name": "policy_marker", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/PolicyMarker.json", "required": true, "criteria": "mandatory", - "hover_text": "A policy marker code from the codelist specified in the vocabulary. This attribute is required. For more information", - "help_text": "Provide the code for the policy or theme addressed by your activity. If you are using the OECD DAC CRS policy-marker list, please make a selection from these options.", + "hover_text": "elements.activities.policy_marker.policy_marker.hover_text", + "help_text": "el_common.provide_the_code_for_policy", "parent": { "name": "policy_marker_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "policy_marker_text": { "name": "policy_marker_text", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "A policy marker code from the codelist specified in the vocabulary. This attribute is required.
For more information", - "help_text": "Provide the code for the policy or theme addressed by your activity. If you are using the OECD DAC CRS policy-marker list, please make a selection from these options.", + "hover_text": "elements.activities.policy_marker.policy_marker_text.hover_text", + "help_text": "el_common.provide_the_code_for_policy", "parent": { "name": "policy_marker_vocabulary", - "value": ["99"] + "value": [ + "99" + ] } } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "A description of the policy marker. This MUST ONLY be used if vocabulary is 99 (the reporting organisation’s own marker vocabulary). May be repeated for multiple languages.For more information", - "help_text": "If you have selected 99 Reporting Organisation (above), please provide a description for the policy marker(s) that you have chosen.", + "hover_text": "elements.activities.policy_marker.narrative.hover_text", + "help_text": "elements.activities.policy_marker.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.
This value should be on the Language codelist.For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.policy_marker.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -924,71 +966,71 @@ }, "collaboration_type": { "label": "collaboration type", - "hover_text": "The type of collaboration involved in the activity’s disbursements, e.g. “bilateral” or “multilateral”.For more information", - "help_text": "You can describe how funds are flowing between organisations within this activity. For example, funds could be flowing bilaterally, meaning between two governments. This is largely applicable to bilateral and multilateral organisations.", + "hover_text": "elements.activities.collaboration_type.hover_text", + "help_text": "elements.activities.collaboration_type.help_text", "show_info_in_title": true, "attributes": { "collaboration_type": { "name": "collaboration_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/CollaborationType.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the OECD DAC CRS “Bi_Multi” codelist.For more information", - "help_text": "Please select a collaboration type, if there is an option that is applicable to your activity. See information on all options. Otherwise, leave this blank." + "hover_text": "elements.activities.collaboration_type.collaboration_type.hover_text", + "help_text": "elements.activities.collaboration_type.collaboration_type.help_text" } }, "sub_elements": {} }, "default_flow_type": { - "label": "default flow type", - "hover_text": "Whether the activity is funded by Official Development Assistance (ODA), Other Official Flows (OOF), etc. For more information", - "help_text": "Flow type is another way to categorise financial flows. It distinguishes the flow as official development assistance (ODA), other official flows (OOF), or several types of private flows, including private grants often provided by NGOs and other civil society organisations.", + "label": "el_common.default_flow_type", + "hover_text": "elements.activities.default_flow_type.hover_text", + "help_text": "elements.activities.default_flow_type.help_text", "show_info_in_title": true, "attributes": { "default_flow_type": { "name": "default_flow_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/FlowType.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the OECD DAC CRS “Type of flow” codelist. This attribute is required.For more information", - "help_text": "If this activity’s funds can be classified by the following options, please make a selection here. Otherwise, leave blank." + "hover_text": "elements.activities.default_flow_type.default_flow_type.hover_text", + "help_text": "elements.activities.default_flow_type.default_flow_type.hover_text" } }, "sub_elements": {} }, "default_finance_type": { - "label": "default finance type", - "hover_text": "The type of finance (e.g. grant, loan, debt relief, etc). This the default value for all transactions in the activity report; it can be overridden by individual transactions. For more information", - "help_text": "Finance type specifies the financial instrument that is being used for this activity. For example, financing is most commonly delivered as a grant or a loan.", + "label": "el_common.default_finance_type", + "hover_text": "elements.activities.default_finance_type.hover_text", + "help_text": "elements.activities.default_finance_type.help_text", "show_info_in_title": true, "attributes": { "default_finance_type": { "name": "default_finance_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", "choices": "Activity/FinanceType.json", - "hover_text": "A code from the OECD DAC CRS “Type of finance” codelist. This attribute is required.
For more information", - "help_text": "Please select a finance type for this activity from the following options." + "hover_text": "elements.activities.default_finance_type.default_finance_type.hover_text", + "help_text": "elements.activities.default_finance_type.default_finance_type.hover_text" } }, "sub_elements": {} }, "default_aid_type": { "name": "default_aid_type", - "label": "default aid type", + "label": "el_common.default_aid_type", "add_more": true, "add_more_attributes": true, - "hover_text": "The type of aid being supplied (project-type intervention, budget support, debt relief, etc.). This element specifies a default for all the activity’s financial transactions; it can be overridden at the individual transaction level. For more information", - "help_text": "You can provide information about the type of aid that is being delivered. This is most commonly referred to as the aid modality and IATI recommends that an aid type from the OECD DAC codelist be selected for all activities.

Examples from this codelist include: project-type interventions which provide support to a particular project, budget support which is a financial contribution to a recipient government’s budget. Project-type interventions is the most common aid type for NGOs and CSOs but many other options are found here.

If your activity is addressing a humanitarian event, you can provide specific information on the type of funds for it. This includes providing information on the level of earmarking of the activity’s funds and if the activity is providing funds through cash or vouchers. More information on publishing aid-types related to humanitarian activities.", + "hover_text": "el_common.the_type_of_aid_being_supplied", + "help_text": "el_common.you_can_provide_information", "dependent_attributes": { "default_aid_type": {}, "earmarking_category": {}, @@ -998,76 +1040,84 @@ "attributes": { "default_aid_type_vocabulary": { "name": "default_aid_type_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/AidTypeVocabulary.json", "required": false, "criteria": "", - "hover_text": "A code for the vocabulary aid-type classifications. If omitted the AidType (OECD DAC) codelist is assumed. The code must be a valid value in the AidTypeVocabulary codelist. For more information", - "help_text": "Select a list that includes the aid-type related to your activity (if any are applicable). Otherwise leave this blank. You can choose to select an aid-type from more than one list.

]1 OECD DAC - IATI recommends that you select this list which has over 20 options to choose from. Then, in addition you can select an option from another list

2 Earmarking Category - select this list to categorise how flexible humanitarian funding is. There are 4 earmarking categories. Understand more about the categories in Annex 1

3 Earmarking Modality - use this list to choose the specific earmarking modality to describe your activity’s humanitarian funding. All earmarking modality options are listed in Annex 1

4 Cash and Voucher Modalities - select this list to specify if your activity is responding to a humanitarian event by providing cash and voucher assistance. More information.
" + "hover_text": "elements.activities.default_aid_type.default_aid_type_vocabulary.hover_text", + "help_text": "elements.activities.default_aid_type.default_aid_type_vocabulary.help_text" }, "default_aid_type": { "name": "default_aid_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/AidType.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the specified vocabulary. This attribute is required. For more information", - "help_text": "Select the aid-type related to your activity.", + "hover_text": "elements.activities.default_aid_type.default_aid_type.hover_text", + "help_text": "el_common.select_the_aid_type", "parent": { "name": "default_aid_type_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "earmarking_category": { "name": "earmarking_category", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/EarmarkingCategory.json", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "A code from the specified vocabulary. This attribute is required.
For more information", - "help_text": "Select the aid-type related to your activity.", + "hover_text": "el_common.a_code_from_the_specified_vocabulary", + "help_text": "el_common.select_the_aid_type", "parent": { "name": "default_aid_type_vocabulary", - "value": ["2"] + "value": [ + "2" + ] } }, "earmarking_modality": { "name": "earmarking_modality", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/EarmarkingModality.json", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "A code from the specified vocabulary. This attribute is required.
For more information", - "help_text": "Select the aid-type related to your activity.", + "hover_text": "el_common.a_code_from_the_specified_vocabulary", + "help_text": "el_common.select_the_aid_type", "parent": { "name": "default_aid_type_vocabulary", - "value": ["3"] + "value": [ + "3" + ] } }, "cash_and_voucher_modalities": { "name": "cash_and_voucher_modalities", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/CashandVoucherModalities.json", "required": true, "criteria": "mandatory", "hidden": true, - "hover_text": "A code from the specified vocabulary. This attribute is required.
For more information", - "help_text": "Select the aid-type related to your activity.", + "hover_text": "el_common.a_code_from_the_specified_vocabulary", + "help_text": "el_common.select_the_aid_type", "parent": { "name": "default_aid_type_vocabulary", - "value": ["4"] + "value": [ + "4" + ] } } }, @@ -1075,105 +1125,105 @@ }, "default_tied_status": { "label": "default tied status", - "hover_text": "Whether the aid is untied, tied, or partially tied. This element specifies a default for all the activity’s financial transactions; it can be overridden at the individual transaction level.For more information", - "help_text": "You can state the tied status of this transaction. Here you can specify if funds are tied - where they must be spent on goods or services procured from a particular country (e.g. donor country) or group of countries. Or if funds are untied, this is where the recipient organisation is allowed to procure from any country.", + "hover_text": "elements.activities.default_tied_status.hover_text", + "help_text": "elements.activities.default_tied_status.help_text", "show_info_in_title": true, "attributes": { "default_tied_status": { "name": "default_tied_status", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/TiedStatus.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code interpreting the usage of Columns 36-38 of the CRS++ reporting format. (Amount tied, Amount partially untied, Amount tied). For more information", - "help_text": "Select a default-tied-status, if applicable to your activity. See descriptions of all options. Otherwise leave blank." + "hover_text": "elements.activities.default_tied_status.default_tied_status.hover_text", + "help_text": "elements.activities.default_tied_status.default_tied_status.help_text" } }, "sub_elements": {} }, "country_budget_items": { "name": "country_budget_items", - "label": "country-budget-items", + "label": "el_common.country_budget_items", "add_more": true, - "hover_text": "This item encodes the alignment of activities with both the functional and administrative classifications used in the recipient country’s Chart of Accounts. This applies to both on- and off-budget activities.For more information", + "hover_text": "elements.activities.country_budget_items.hover_text", "show_info_in_title": true, "attributes": { "country_budget_vocabulary": { "name": "country_budget_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/BudgetIdentifierVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for the common functional classification or country system (This allows for common codes, country-specific, or any other classification agreed between countries and donors). For more information", + "hover_text": "elements.activities.country_budget_items.country_budget_vocabulary.hover_text", "help_text": "" } }, "sub_elements": { "budget_item": { "name": "budget_item", - "label": "budget item", + "label": "el_common.budget_item", "element_criteria": "mandatory", "add_more": true, - "hover_text": "Identifier for a single item in the recipient-country budget. If more than one identifier is reported the percentage share must be reported and all percentages should add up to 100 percent.For more information", + "hover_text": "elements.activities.country_budget_items.budget_item.hover_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/BudgetIdentifier.json", "required": true, "criteria": "mandatory", - "hover_text": "A code for the budget-item from the vocabulary specified. This attribute is required.For more information", + "hover_text": "elements.activities.country_budget_items.budget_item.code.hover_text", "help_text": "" }, "percentage": { "name": "percentage", - "label": "percentage", + "label": "el_common.percentage_organisation", "type": "text", - "placeholder": "Type percentage", + "placeholder": "el_common.type_percentage", "required": false, "criteria": "", - "hover_text": "When multiple budget-item elements are declared within a single country-budget-items element, then, for each vocabulary used, the percentage values should sum 100%.For more information", - "help_text": "If no value is selected, default value is assumed." + "hover_text": "elements.activities.country_budget_items.budget_item.percentage.hover_text", + "help_text": "elements.activities.country_budget_items.budget_item.percentage.help_text" } }, "sub_elements": { "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, - "hover_text": "A longer, human-readable description of the budget-item. May be repeated for different languages. For more information", + "hover_text": "elements.activities.country_budget_items.budget_item.description.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "hover_text": "elements.activities.country_budget_items.budget_item.narrative.hover_text", "help_text": "", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": false, "choices": "Activity/Language.json", "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.country_budget_items.budget_item.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1186,10 +1236,10 @@ }, "humanitarian_scope": { "name": "humanitarian_scope", - "label": "Humanitarian scope", + "label": "el_common.humanitarian_scope", "add_more": true, - "hover_text": "Classification of emergencies, appeals and other humanitarian events and actions. For more information", - "help_text": "The ‘humanitarian-scope’ element can be used to specify the emergency and/or appeal that your activity is responding to", + "hover_text": "elements.activities.humanitarian_scope.hover_text", + "help_text": "elements.activities.humanitarian_scope.help_text", "dependent_attributes": { "vocabulary_uri": {}, "code": {} @@ -1197,81 +1247,87 @@ "attributes": { "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/HumanitarianScopeType.json", "required": true, "criteria": "mandatory", - "hover_text": "A code for the type of event or action being classified. For more information", - "help_text": "Select which type of information you can provide:

  • Emergencies (type 1)
    Select this option if you can provide the GLIDE number for the specific humanitarian emergency that your activity is responding to. Alternatively, select this option if you can declare a code for the emergency from another public list.

  • Appeals (type 2)
    Select this option if your activity is contributing to a UN Office for the Coordination of Humanitarian Affairs (OCHA) Humanitarian Response Plan or Flash Appeal. These codes are created by UN OCHA for use in their Financial Tracking Service (FTS). Alternatively, select this option if you can declare a code for the appeal from another public list.
  • " + "hover_text": "elements.activities.humanitarian_scope.type.hover_text", + "help_text": "elements.activities.humanitarian_scope.type.help_text" }, "vocabulary": { "name": "vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/HumanitarianScopeVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "A code for a recognised vocabulary of terms classifying the event or action.

    This attribute is required. For more information", - "help_text": "Select the list that you will use to identify the emergency or appeal that your activity is responding to:

    1-2 Glide
    2-1 Humanitarian Plan
    99 Reporting Organisation - select this option if you can declare a code for the emergency or appeal from an alternative public list." + "hover_text": "elements.activities.humanitarian_scope.vocabulary.hover_text", + "help_text": "elements.activities.humanitarian_scope.vocabulary.help_text" }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", "hidden": true, - "hover_text": "A u.r.i. for the vocabulary specified which provides access to the list of codes and descriptions. For more information", - "help_text": "Provide a link to the list of emergencies or appeals that you will use, which includes its codes and descriptions.", + "hover_text": "elements.activities.humanitarian_scope.vocabulary_uri.hover_text", + "help_text": "elements.activities.humanitarian_scope.vocabulary_uri.help_text", "parent": { "name": "vocabulary", - "value": ["99"] + "value": [ + "99" + ] } }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "A code for the event or action from the vocabulary specified.For more information", - "help_text": "Provide the code for the specific emergency or appeal that your activity is responding to.

    For example, if you are providing a code for an emergency that has a Glide Number, the format for this code would be: [Emergency Type] + [Year] + [Number] + [Country].", + "hover_text": "elements.activities.humanitarian_scope.code.hover_text", + "help_text": "elements.activities.humanitarian_scope.code.help_text", "parent": { "name": "vocabulary", - "value": ["1-2", "2-1", "99"] + "value": [ + "1-2", + "2-1", + "99" + ] } } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The description of the code specified. For more information", - "help_text": "If you have used a code for the emergency or appeal from an alternative public list (i.e. you have selected 99 Reporting Organisation above), please provide a description of the code that you have specified.", + "hover_text": "elements.activities.humanitarian_scope.narrative.hover_text", + "help_text": "elements.activities.humanitarian_scope.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.humanitarian_scope.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1280,122 +1336,122 @@ }, "capital_spend": { "label": "capital spend", - "hover_text": "The percentage of the total commitment that is for capital spending. For more information", - "help_text": "Please indicate how much of the total activity’s funding will be spent on capital. Capital describes physical assets with a useful life of more than one year. For example, a road.", + "hover_text": "elements.activities.capital_spend.hover_text", + "help_text": "elements.activities.capital_spend.help_text", "show_info_in_title": true, "attributes": { "capital_spend": { "name": "capital_spend", - "label": "percentage", + "label": "el_common.percentage_organisation", "type": "text", - "placeholder": "Type percentage", + "placeholder": "el_common.type_percentage", "required": true, "criteria": "mandatory", - "hover_text": "The percentage of the total commitment allocated to or planned for capital expenditure. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign.For more information", - "help_text": "Percentage must not exceed 100." + "hover_text": "elements.activities.capital_spend.capital_spend.hover_text", + "help_text": "elements.activities.capital_spend.capital_spend.help_text" } }, "sub_elements": {} }, "related_activity": { "name": "related_activity", - "label": "related-activity", + "label": "el_common.related_activity", "add_more": true, "add_more_attributes": true, - "hover_text": "Another separately reported IATI activity that is related to this one. The ‘type’ attribute describes the type of relationship: (eg. parent, child, multifunded). It is strongly recommended that linkage between activities in a hierarchical group should always be managed by use of this element with @type of 1 (parent) or 2 (child). For more information", - "help_text": "If this activity is part of a programme with multiple activities within one organisation, you should include details of all related activities. Please read more about the types of related activities that you can report.

    Please only refer to your own activities here.", + "hover_text": "elements.activities.related_activity.hover_text", + "help_text": "elements.activities.related_activity.help_text", "attributes": { "activity_identifier": { "name": "activity_identifier", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": true, "criteria": "mandatory", - "hover_text": "A valid activity identifier (as defined in iati-activity/iati-identifier).", - "help_text": "If you have a related activity to report, please provide its full activity-id (including the organisation-id part). See more information on activity-ids. You can ask the person(s) who reported the related activity for this, or search for the activity on d-portal.org. See further guidance." + "hover_text": "elements.activities.related_activity.activity_identifier.hover_text", + "help_text": "elements.activities.related_activity.activity_identifier.help_text" }, "relationship_type": { "name": "relationship_type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/RelatedActivityType.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for the type of relationship", - "help_text": "Please select the type of relationship between the activity being reported and the related activity from this list." + "hover_text": "elements.activities.related_activity.relationship_type.hover_text", + "help_text": "elements.activities.related_activity.relationship_type.help_text" } }, "sub_elements": {} }, "conditions": { "name": "conditions", - "label": "conditions", + "label": "el_common.conditions", "add_more": true, - "hover_text": "Specific terms and conditions attached to the activity that, if not met, may influence the delivery of commitments made by participating organisations. For more information", - "help_text": "Please declare any conditions or specific terms that are attached to this activity. For example, requirements issued by your funder or a six month review to assess whether or not the activity is worth continuing.

    If a condition relates to the whole organisation, such as organisation-wide terms and conditions, it should not be reported within this activity. Instead, you should report this in the document-link element in your organisation file.Further guidance.", + "hover_text": "elements.activities.conditions.hover_text", + "help_text": "elements.activities.conditions.help_text", "show_info_in_title": true, "attributes": { "condition_attached": { "name": "condition_attached", - "label": "attached", + "label": "el_common.attached", "type": "select", - "placeholder": "Select attached", + "placeholder": "el_common.select_attached", "choices": { "0": "False", "1": "True" }, "required": true, "criteria": "mandatory", - "hover_text": "A yes/no (1/0) value stating whether there are conditions attached to the activity. It is strongly recommended that this attribute is reported, even if there are no conditions attached (i.e. attached=”0”)", - "help_text": "Please select ‘Yes’ if your activity has a condition attached to it or ‘No’ if it does not." + "hover_text": "elements.activities.conditions.condition_attached.hover_text", + "help_text": "elements.activities.conditions.condition_attached.help_text" } }, "sub_elements": { "condition": { "name": "condition", - "label": "Condition", + "label": "el_common.condition", "add_more": true, - "hover_text": "The text of a specific condition attached to the activity. Organisation-wide terms and conditions that apply to all activities should not be reported here, but in either iati-organisation/document-link or iati-activity-document-link. For more information", + "hover_text": "elements.activities.conditions.condition.hover_text", "attributes": { "condition_type": { "name": "condition_type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/ConditionType.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the type of condition. ", - "help_text": "Select the type of condition that you want to report. Three types of condition can be reported:

    Policy: e.g. a particular policy needs to be implemented by the organisation receiving funds.

    Performance: e.g. certain outputs or outcomes need to be achieved.

    Fiduciary: e.g. the recipient is required to use certain public financial management or public accountability measures.Full description of types." + "hover_text": "elements.activities.conditions.condition_type.hover_text", + "help_text": "elements.activities.conditions.condition_type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short description of the condition here.

    You can provide more information by adding a link to a relevant document or webpage in the activity document-link element.", + "hover_text": "el_common.the_free_text_name_link_1", + "help_text": "elements.activities.conditions.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_1", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1406,40 +1462,40 @@ }, "legacy_data": { "name": "legacy_data", - "label": "legacy-data", + "label": "el_common.legacy_data", "add_more": true, "add_more_attributes": true, - "hover_text": "The legacy data element allows for the reporting of values held in a field in the reporting organisation’s system which is similar, but not identical to an IATI element. For more information", - "help_text": "You can link this activity to your organisation’s internal data and record which IATI Standard element it most relates to.", + "hover_text": "elements.activities.legacy_data.hover_text", + "help_text": "elements.activities.legacy_data.help_text", "attributes": { "legacy_name": { "name": "legacy_name", - "label": "name", + "label": "el_common.name", "type": "text", - "placeholder": "Type name", + "placeholder": "el_common.type_name", "required": true, "criteria": "mandatory", - "hover_text": "The original field name in the reporting organisation’s system", + "hover_text": "elements.activities.legacy_data.legacy_name.hover_text", "help_text": "" }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": true, "criteria": "mandatory", - "hover_text": "The original field value in the reporting organisation’s system", + "hover_text": "elements.activities.legacy_data.value.hover_text", "help_text": "" }, "iati_equivalent": { "name": "iati_equivalent", - "label": "iati-equivalent", + "label": "el_common.iati_equivalent", "type": "text", - "placeholder": "Type iati_equivalent", + "placeholder": "el_common.type_iati_equivalent", "required": false, "criteria": "", - "hover_text": "The name of the equivalent IATI element.", + "hover_text": "elements.activities.legacy_data.iati_equivalent.hover_text", "help_text": "" } }, @@ -1447,31 +1503,31 @@ }, "document_link": { "name": "document_link", - "label": "document link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document. For more information", - "help_text": "You can report further information about this activity by providing a publicly accessible link to a document or webpage.

    If documents are available in other languages and stored separately, please provide them by creating additional document elements.Further guidance", + "hover_text": "elements.activities.document_link.hover_text", + "help_text": "elements.activities.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. 'http://www.example.org/doc.odt'.For more information", - "help_text": "The URL must begin with either ‘http://’ or ‘https://’." + "hover_text": "elements.activities.document_link.url.hover_text", + "help_text": "el_common.the_url_must_begin_with_either" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Type format", + "placeholder": "el_common.type_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", - "help_text": "If you know the format of the document file, please type it using an option from this list." + "hover_text": "elements.activities.document_link.format.hover_text", + "help_text": "elements.activities.document_link.format.help_text" }, "document": { "name": "document", @@ -1490,33 +1546,33 @@ "label": "Title", "element_criteria": "", "add_more": false, - "hover_text": "A short, human-readable title.For information", + "hover_text": "elements.activities.document_link.title.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short title for the document or webpage.", + "hover_text": "el_common.the_free_text_name_link_1", + "help_text": "el_common.provide_a_short_title_for_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_1", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1525,35 +1581,35 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "hover_text": "elements.activities.document_link.description.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short description of the document or webpage, including any instructions on where to find relevant information.", + "hover_text": "el_common.the_free_text_name_link_1", + "help_text": "el_common.provide_a_short_description_of_document", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the description. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_1", + "help_text": "el_common.select_the_language_of_text_in_desc" } }, "sub_elements": {} @@ -1562,62 +1618,62 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "element_criteria": "mandatory", "add_more": true, "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", - "help_text": "You must select a category of the document or webpage that you have provided.", + "hover_text": "elements.activities.document_link.category.hover_text", + "help_text": "el_common.you_must_select_category", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a category of the document or webpage that you have provided from this list." + "hover_text": "elements.activities.document_link.category.code.hover_text", + "help_text": "elements.activities.document_link.category.code.help_text" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the document or webpage." + "hover_text": "el_common.a_code_specifying_text_link_1", + "help_text": "elements.activities.document_link.language.code.help_text" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. (@iso-date).For more information", + "hover_text": "elements.activities.document_link.document_date.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to. For more information", - "help_text": "Provide the date of publication for the document or webpage, or provide the date that it was last updated." + "hover_text": "el_common.the_date_of_document_link_2", + "help_text": "el_common.provide_the_date_of_publication" } }, "sub_elements": {} @@ -1626,54 +1682,54 @@ }, "contact_info": { "name": "contact_info", - "label": "contact info", + "label": "el_common.contact_info", "add_more": true, - "hover_text": "Contact information for the activity. Specify whatever is available. You may repeat this element for each contact person.For more information", + "hover_text": "elements.activities.contact_info.hover_text", "attributes": { "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/ContactType.json", "required": false, "criteria": "", - "hover_text": "The type of contact. See IATI codelist for values.For more information", + "hover_text": "elements.activities.contact_info.type.hover_text", "help_text": "" } }, "sub_elements": { "organisation": { "name": "organisation", - "label": "organisation", + "label": "el_common.organisation", "add_more": false, - "hover_text": "The name of the organisation to contact for more information about the activity. For more information", + "hover_text": "elements.activities.contact_info.type.organisation.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the name of the organisation to contact for more information about the activity.", + "hover_text": "elements.activities.contact_info.type.organisation.narrative.hover_text", + "help_text": "elements.activities.contact_info.type.organisation.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "elements.activities.contact_info.type.organisation.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1682,35 +1738,35 @@ }, "department": { "name": "department", - "label": "department", + "label": "el_common.department", "add_more": false, - "hover_text": "The department within the organisation to contact for more information about the activity. For more information", + "hover_text": "elements.activities.contact_info.type.department.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the name of the department within the organisation to contact for more information about the activity. ", + "hover_text": "el_common.the_free_text_name_link_6", + "help_text": "elements.activities.contact_info.type.department.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_7", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -1719,35 +1775,35 @@ }, "person_name": { "name": "person_name", - "label": "person name", + "label": "el_common.person_name", "add_more": false, - "hover_text": "The name of the contact person for the activity.For more information", + "hover_text": "elements.activities.contact_info.type.person_name.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the name of the contact for more information about the activity. ", + "hover_text": "el_common.the_free_text_name_link_6", + "help_text": "elements.activities.contact_info.type.person_name.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, the default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_7", + "help_text": "el_common.default_value_assumed_the" } }, "sub_elements": {} @@ -1756,35 +1812,35 @@ }, "job_title": { "name": "job_title", - "label": "job title", + "label": "el_common.job_title", "add_more": false, - "hover_text": "The job title of the contact person at the organisation.For more information", + "hover_text": "elements.activities.contact_info.type.job_title.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the job title of the contact at the organisation. ", + "hover_text": "el_common.the_free_text_name_link_6", + "help_text": "elements.activities.contact_info.type.job_title.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_7", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1793,18 +1849,18 @@ }, "telephone": { "name": "telephone", - "label": "telephone", + "label": "el_common.telephone", "add_more": true, "wrapper_collection": false, "attributes": { "telephone": { "name": "telephone", - "label": "telephone", + "label": "el_common.telephone", "type": "text", - "placeholder": "Type telephone", + "placeholder": "el_common.type_telephone", "required": false, "criteria": "", - "hover_text": "The contact telephone number. May be repeated for multiple numbers.For more information", + "hover_text": "elements.activities.contact_info.type.telephone.hover_text", "help_text": "" } }, @@ -1812,18 +1868,18 @@ }, "email": { "name": "email", - "label": "email", + "label": "el_common.email", "add_more": true, "wrapper_collection": false, "attributes": { "email": { "name": "email", - "label": "email", + "label": "el_common.email", "type": "text", - "placeholder": "Type email", + "placeholder": "el_common.type_email", "required": false, "criteria": "", - "hover_text": "The contact email address. May be repeated for multiple addresses.For more information", + "hover_text": "elements.activities.contact_info.type.email.hover_text", "help_text": "" } }, @@ -1831,18 +1887,18 @@ }, "website": { "name": "website", - "label": "website", + "label": "el_common.website", "add_more": true, "wrapper_collection": false, "attributes": { "website": { "name": "website", - "label": "website", + "label": "el_common.website", "type": "text", - "placeholder": "Type URL", + "placeholder": "el_common.type_URL", "required": false, "criteria": "", - "hover_text": "The contact web address. May be repeated for multiple sites.For more information", + "hover_text": "elements.activities.contact_info.type.website.hover_text", "help_text": "" } }, @@ -1850,35 +1906,35 @@ }, "mailing_address": { "name": "mailing_address", - "label": "mailing address", + "label": "el_common.mailing_address", "add_more": true, - "hover_text": "The contact mailing address.For more information", + "hover_text": "elements.activities.contact_info.type.mailing_address.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide any further information about this contact.", + "hover_text": "elements.activities.contact_info.type.mailing_address.narrative.hover_text", + "help_text": "elements.activities.contact_info.type.mailing_address.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.contact_info.type.mailing_address.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -1889,107 +1945,107 @@ }, "location": { "name": "location", - "label": "location", + "label": "el_common.location", "add_more": true, - "hover_text": "The sub-national geographical identification of the target locations of an activity. These can be described by gazetteer reference, coordinates, administrative areas or a textual description. Any number of locations may be reported.For more information", - "help_text": "Provide the sub-national location/s of an activity, if it is known. However location data should only be added when it is safe to do so. It is the publishing organisation’s responsibility to ensure that the data it publishes is safe.

    You can provide geographic coordinates of a location, the name and description of a location, the administrative area or other features of the location e.g. health centre, village etc.Further guidance.", + "hover_text": "elements.activities.location.hover_text", + "help_text": "elements.activities.location.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference that describes the location in the reporting organisation’s own system.For more information", - "help_text": "You can provide an internal reference used by your organisation to describe the location for example: AF-KAN." + "hover_text": "elements.activities.location.reference.hover_text", + "help_text": "elements.activities.location.reference.help_text" } }, "sub_elements": { "location_reach": { "name": "location_reach", - "label": "location reach", + "label": "el_common.location_reach", "add_more": false, - "hover_text": "Does this location describe where the activity takes place or where the intended beneficiaries reside? For more information", - "help_text": "Please specify if the location describes where the activity takes place or where the intended beneficiaries reside.", + "hover_text": "elements.activities.location.location_reach.hover_text", + "help_text": "elements.activities.location.location_reach.help_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/GeographicLocationReach.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for the geographic scope of the activity. This attribute is required.For more information", - "help_text": "Please choose an option to describe the reach of the location.

    1. Activity - The location specifies where the activity is carried out

    2. Intended Beneficiaries - The location specifies where the intended beneficiaries of the activity live" + "hover_text": "elements.activities.location.location_reach.code.hover_text", + "help_text": "elements.activities.location.location_reach.code.help_text" } }, "sub_elements": {} }, "location_id": { "name": "location_id", - "label": "location-id", + "label": "el_common.location_id", "add_more": true, "wrapper_collection": false, - "hover_text": "A unique code describing the location according to a recognised gazetteer or administrative boundary repository. Administrative areas should only be reported here if the location being defined is the administrative area itself. For describing the administrative area/s within which a more specific location falls the location/administrative element should be used.For more information", - "help_text": "You can provide a unique code describing the location according to a recognised gazetteer or administrative boundary repository. You can select an option of a gazetteer or administrative boundary repository from the list below.", + "hover_text": "elements.activities.location.location_id.hover_text", + "help_text": "elements.activities.location.location_id.help_text", "attributes": { "vocabulary": { "name": "vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/GeographicVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for a recognised gazetteer or administrative boundary repository.
    This attribute is required.For more information", - "help_text": "Please select the gazetteer or administrative boundary repository that you will provide a code from.View more information about each option." + "hover_text": "elements.activities.location.location_id.vocabulary.hover_text", + "help_text": "elements.activities.location.location_id.vocabulary.help_text" }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Enter a code", + "placeholder": "el_common.enter_a_code", "required": true, "criteria": "mandatory", - "hover_text": "A code from the gazetteer or administrative boundary repository specified by the vocabulary
    For more information", - "help_text": "Provide a unique code describing the location with a recognised gazetteer or administrative boundary repository (see list)." + "hover_text": "elements.activities.location.location_id.code.hover_text", + "help_text": "elements.activities.location.location_id.code.help_text" } }, "sub_elements": {} }, "name": { "name": "name", - "label": "name", + "label": "el_common.name", "add_more": false, - "hover_text": "The human readable name for the location.For more information", + "hover_text": "elements.activities.location.name", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative here", + "placeholder": "el_common.type_narrative_here", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the free text name of the location of the activity.", + "hover_text": "elements.activities.location.name.narrative.hover_text", + "help_text": "elements.activities.location.name.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "elements.activities.location.name.language.hover_text", + "help_text": "elements.activities.location.name.language.help_text" } }, "sub_elements": {} @@ -1998,34 +2054,34 @@ }, "description": { "name": "description", - "label": "description", - "hover_text": "A description that qualifies the location, not the activity.For more information", + "label": "el_common.description", + "hover_text": "elements.activities.location.description.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative here", + "placeholder": "el_common.type_narrative_here", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide a description of the location of the activity.", + "hover_text": "elements.activities.location.description.narrative.hover_text", + "help_text": "elements.activities.location.description.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.location.description.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -2034,35 +2090,35 @@ }, "activity_description": { "name": "activity_description", - "label": "activity description", + "label": "el_common.activity_description", "add_more": false, - "hover_text": "A description that qualifies the activity taking place at the location. This should not duplicate information provided in the main activity description, and should typically be used to distinguish between activities at multiple locations within a single iati-activity record.For more information", + "hover_text": "elements.activities.location.activity_description.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative here", + "placeholder": "el_common.type_narrative_here", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "hover_text": "elements.activities.location.activity_description.narrative.hover_text", "help_text": "", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.location.activity_description.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -2071,76 +2127,76 @@ }, "administrative": { "name": "administrative", - "label": "administrative", + "label": "el_common.administrative", "add_more": false, - "hover_text": "Coded identification of national and sub-national divisions according to recognised administrative boundary repositories. Multiple levels may be reported.For more information", - "help_text": "You can provide a unique code to describe the activity location according to an administrative boundary repository.", + "hover_text": "elements.activities.location.administrative.hover_text", + "help_text": "elements.activities.location.administrative.help_text", "attributes": { "vocabulary": { "name": "vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/GeographicVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for a recognised administrative boundary repository.For more information", - "help_text": "Select an administrative boundary list that includes a code to represent your activity location." + "hover_text": "elements.activities.location.administrative.vocabulary.hover_text", + "help_text": "elements.activities.location.administrative.vocabulary.help_text" }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Country.json", "required": true, "criteria": "mandatory", - "hover_text": "The code for the administrative area being reported from the vocabulary specified.For more information", - "help_text": "Provide a code to represent your activity location (from your chosen administrative boundary list)." + "hover_text": "elements.activities.location.administrative.code.hover_text", + "help_text": "elements.activities.location.administrative.code.help_text" }, "level": { "name": "level", - "label": "level", + "label": "el_common.level", "type": "text", - "placeholder": "Type level", + "placeholder": "el_common.type_level", "required": false, "criteria": "Type level", - "hover_text": "A number defining a subdivision within a hierarchical system of administrative areas. The precise system for defining the particular meaning of each @level value is determined by the @vocabulary being used.For more information", - "help_text": "Within your chosen administrative boundary list, you can provide a number to define a subdivision within a hierarchical system of administrative areas." + "hover_text": "elements.activities.location.administrative.level.hover_text", + "help_text": "elements.activities.location.administrative.level.help_text" } }, "sub_elements": {} }, "point": { "name": "point", - "label": "point", + "label": "el_common.point", "add_more": false, - "hover_text": "The point element is based on a subset of the GML 3.3 Point element.For more information", - "help_text": "You can provide geo-coordinates for the location, in the format of latitude and longitude coordinates

    Coordinates are published using the point and pos elements. The point element is always:

    The pos element then contains the latitude coordinate (the first number), followed by the longitude coordinate (the second number) e.g. -46.7733 167.6321.

    Please note that coordinates can refer to an ‘exact’ or an ‘approximate’ location. This should be specified using the location exactness element.More information.", + "hover_text": "elements.activities.location.point.hover_text", + "help_text": "elements.activities.location.point.help_text", "attributes": { "srs_name": { "name": "srs_name", - "label": "srsName", + "label": "el_common.srsName", "type": "text", - "placeholder": "Type srs name", + "placeholder": "el_common.type_srs_name", "required": true, "criteria": "mandatory", - "hover_text": "The name of the spatial reference system used by the coordinates.For more information", - "help_text": "This value never changes." + "hover_text": "elements.activities.location.point.srs_name.hover_text", + "help_text": "elements.activities.location.point.srs_name.help_text" } }, "sub_elements": { "pos": { "name": "pos", "element_criteria": "mandatory", - "hover_text": "The latitude and longitude coordinates in the format “lat lng”.For more information", - "help_text": "Add latitude and longitude separated by a space e.g. 31.616944 65.716944

    If you don’t already have a way to find the coordinates for an activity, there are some online platforms to help, e.g. Google Maps and Latlong.net. To find the coordinates for an activity on Google Maps, right-click over the location of the activity and select ‘what’s here?’. The coordinates will then be presented. Alternatively, type in the coordinates and the location of the activity that will be pinpointed on the map.More information.", + "hover_text": "elements.activities.location.point.pos.hover_text", + "help_text": "elements.activities.location.point.pos.help_text", "attributes": { "latitude": { "name": "latitude", - "label": "latitude", + "label": "el_common.latitude", "type": "text", - "placeholder": "Type latitude value", + "placeholder": "el_common.type_latitude_value", "required": true, "criteria": "mandatory", "hover_text": "", @@ -2148,9 +2204,9 @@ }, "longitude": { "name": "longitude", - "label": "longitude", + "label": "el_common.longitude", "type": "text", - "placeholder": "Type longitude value", + "placeholder": "el_common.type_longitude_value", "required": true, "criteria": "mandatory", "hover_text": "", @@ -2163,60 +2219,60 @@ }, "exactness": { "name": "exactness", - "label": "exactness", + "label": "el_common.exactness", "add_more": false, - "hover_text": "Defines whether the location represents the most distinct point reasonably possible for this type of activity or is an approximation due to lack of more detailed information.For more information", + "hover_text": "elements.activities.location.exactness.hover_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/GeographicExactness.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the Geographic Exactness Codelist. This attribute is required.For more information", - "help_text": "If you have provided the geo-coordinates for the activity location, then select an option from the Geographic Exactness list to specify whether the location is exact or approximate." + "hover_text": "elements.activities.location.code.hover_text", + "help_text": "elements.activities.location.code.help_text" } }, "sub_elements": {} }, "location_class": { "name": "location_class", - "label": "location class", + "label": "el_common.location_class", "add_more": false, - "hover_text": "Whether the location refers to a structure, a populated place (e.g. city or village), an administrative division, or another topological feature (e.g. river, nature reserve).For more information", + "hover_text": "elements.activities.location.location_class.hover_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/GeographicLocationClass.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the Location Class codelist. This attribute is required.For more information", - "help_text": "Please specify the form of the activity location from the Geographic Location Class list. For example a populated place (town, farm), or topographical feature (mountain, river)." + "hover_text": "elements.activities.location.code.hover_text", + "help_text": "elements.activities.location.code.help_text" } }, "sub_elements": {} }, "feature_designation": { "name": "feature_designation", - "label": "feature designation", + "label": "el_common.feature_designation", "add_more": false, - "hover_text": "A more refined coded classification of the type of feature referred to by this location.For more information", + "hover_text": "elements.activities.location.feature_designation.hover_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/LocationType.json", "required": true, "criteria": "mandatory", - "hover_text": "A feature designation code form the authorised list (maintained by the US National Geospatial-Intelligence Agency).For more information", - "help_text": "You can provide more detail on the type of your activity’s location (e.g. beach, well or college).Please make a selection from the Location Type list." + "hover_text": "elements.activities.location.code.hover_text", + "help_text": "elements.activities.location.code.help_text" } }, "sub_elements": {} @@ -2225,21 +2281,21 @@ }, "planned_disbursement": { "name": "planned_disbursement", - "label": "planned disbursement", + "label": "el_common.planned_disbursement", "add_more": true, - "hover_text": "The planned disbursement element should only be used to report specific planned cash transfers. These should be reported for a specific date or a meaningfully predictable period.For more information", - "help_text": "You can publish data on your planned cash transfers to organisations (or between two other organisations) as part of this activity.

    The purpose of planned disbursements is to publish predefined payment schedules. Planned disbursements should be reported for a specific date or a meaningfully predictable period. Planned disbursements should be reported in addition and should not replace the activity’s budget.", + "hover_text": "elements.activities.planned_disbursement.hover_text", + "help_text": "elements.activities.planned_disbursement.help_text", "attributes": { "planned_disbursement_type": { "name": "planned_disbursement_type", - "label": "type", + "label": "el_common.type", "type": "select", "placeholder": "", "choices": "Activity/BudgetType.json", "required": false, "criteria": "", - "hover_text": "The purpose of planned-disbursement is to describe any predefined payment schedule.For more information", - "help_text": "Specify if this is an ‘original’ planned disbursement (prepared when the original commitment was made) or has subsequently been ‘revised’." + "hover_text": "elements.activities.planned_disbursement.planned_disbursement_type.hover_text", + "help_text": "elements.activities.planned_disbursement.planned_disbursement_type.help_text" } }, "sub_elements": { @@ -2247,16 +2303,16 @@ "name": "period_start", "label": "period start", "add_more": false, - "hover_text": "The exact date of the planned disbursement OR the starting date of the period in which this specific disbursement will be made.For more information", + "hover_text": "elements.activities.planned_disbursement.period_start.hover_text", "attributes": { "date": { "name": "date", "label": "iso_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The exact date of the planned disbursement OR the starting date of the period in which this specific disbursement will be made.For more information", + "hover_text": "elements.activities.planned_disbursement.period_start.hover_text", "help_text": "" } }, @@ -2266,16 +2322,16 @@ "name": "period_end", "label": "period end", "add_more": false, - "hover_text": "The ending date for the period in which this specific disbursement will be made.For more information", + "hover_text": "elements.activities.planned_disbursement.period_end.hover_text", "attributes": { "date": { "name": "date", "label": "iso_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The ending date for the period in which this specific disbursement will be made.For more information", + "hover_text": "elements.activities.planned_disbursement.period_end.hover_text", "help_text": "" } }, @@ -2283,16 +2339,16 @@ }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The amount that is planned to be disbursed in the specified currency. For more information", + "hover_text": "elements.activities.planned_disbursement.value.hover_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": true, "criteria": "mandatory", "hover_text": "", @@ -2300,24 +2356,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "choices": "Activity/Currency.json", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", - "help_text": "Select the currency that you have provided the value in. If no value is selected, default value is assumed." + "hover_text": "elements.activities.planned_disbursement.value.currency.hover_text", + "help_text": "elements.activities.planned_disbursement.value.currency.help_text" }, "value_date": { "name": "value_date", - "label": "value date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.This attribute is required. For more information", - "help_text": "Provide the date on which the planned disbursement was agreed." + "hover_text": "elements.activities.planned_disbursement.value_date.hover_text", + "help_text": "elements.activities.planned_disbursement.value_date.help_text" } }, "sub_elements": {} @@ -2326,66 +2382,66 @@ "name": "provider_org", "label": "provider organisation", "add_more": false, - "hover_text": "The organisation from which the planned disbursement will originate. If omitted the reporting-org is assumed.For more information", - "help_text": "Will your organisation be disbursing these funds? If so then you are the provider organisation. If not, please provide information on the organisation who will be disbursing these funds.", + "hover_text": "elements.activities.planned_disbursement.provider_org.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber} where {RegistrationAgency} is a valid code in the Organisation Registration Agency code list and {RegistrationNumber} is a valid identifier issued by the {RegistrationAgency}. If this is not present then the narrative MUST contain the name of the organisation.For more information", - "help_text": "Please type the provider organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance." + "hover_text": "elements.activities.planned_disbursement.provider_org.reference.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.reference.help_text" }, "provider_activity_id": { "name": "provider_activity_id", - "label": "provider-activity-id", + "label": "el_common.provider_activity", "type": "text", - "placeholder": "Type provider-activity-id", + "placeholder": "el_common.type_provider_activity_id", "required": false, "criteria": "", - "hover_text": "The identifier for the activity in which the planned disbursement will be reported. If omitted the current activity is assumed. For more information", - "help_text": "The provider organisation may have published IATI data on these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the provider organisation for this activity-id, or search for their activity on d-portal.org. See further guidance.

    If you are the provider organisation then leave this blank." + "hover_text": "elements.activities.planned_disbursement.provider_org.provider_activity_id.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.provider_activity_id.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Organization/OrganizationType.json", "required": false, "criteria": "", - "hover_text": "The type of organisation providing the funds.For more information", - "help_text": "Select the type that best describes the provider organisation (if this is not your organisation). Information on all organisation types." + "hover_text": "elements.activities.planned_disbursement.provider_org.type.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, - "hover_text": "The name of the organisation. This can be repeated in multiple languages.For more information", - "help_text": "If the provider organisation does not have an IATI Organisation Identifier, the name of the organisation must be given.", + "hover_text": "elements.activities.planned_disbursement.provider_org.narrative.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.narrative.help_text", "attr": { "row": 4 }, "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the name provided. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.planned_disbursement.provider_org.language.hover_text", + "help_text": "elements.activities.planned_disbursement.provider_org.language.help_text" } }, "sub_elements": {} @@ -2394,68 +2450,68 @@ }, "receiver_org": { "name": "receiver_org", - "label": "receiver organisation", + "label": "el_common.receiver_organisation", "add_more": false, - "hover_text": "The organisation receiving the money from the planned disbursement.For more information", - "help_text": "Provide information on which organisation will be receiving the funds.", + "hover_text": "elements.activities.planned_disbursement.receiving_org.hover_text", + "help_text": "elements.activities.planned_disbursement.receiving_org.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber} where {RegistrationAgency} is a valid code in the Organisation Registration Agency code list and {RegistrationNumber} is a valid identifier issued by the {RegistrationAgency}. If this is not present then the narrative MUST contain the name of the organisation.For more information", - "help_text": "Please provide the receiver organisation’s IATI Organisation Identifier (org-ID). The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance." + "hover_text": "elements.activities.planned_disbursement.receiving_org.reference.hover_text", + "help_text": "elements.activities.planned_disbursement.receiving_org.reference.help_text" }, "receiver_activity_id": { "name": "receiver_activity_id", - "label": "receiver-activity-id", + "label": "el_common.receiver_activity", "type": "text", - "placeholder": "Type receiver-activity", + "placeholder": "el_common.type_receiver_activity", "required": false, "criteria": "", - "hover_text": "If outgoing funds are being provided to another activity that is reported to IATI, this may, if possible, record the unique IATI activity identifier for that activity.For more information", - "help_text": "If possible, please provide the activity-id for the receiver’s activity which will receive this disbursement. You can ask the receiver organisation for this activity-id, or search for their activity on d-portal.org. See further guidance." + "hover_text": "elements.activities.planned_disbursement.receiving_org.receiver_activity_id.hover_text", + "help_text": "elements.activities.planned_disbursement.receiving_org.receiver_activity_id.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Organization/OrganizationType.json", "required": false, "criteria": "", - "hover_text": "The type of organisation receiving the funds.For more information", - "help_text": "Select the type that best describes the receiver organisation. Information on all organisation types." + "hover_text": "elements.activities.planned_disbursement.receiving_org.type.hover_text", + "help_text": "elements.activities.planned_disbursement.receiving_org.type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, - "hover_text": "The name of the organisation. This can be repeated in multiple languages. For more information", - "help_text": "Add the name of the receiver organisation.", + "hover_text": "elements.activities.planned_disbursement.receiving_org.narrative.hover_text", + "help_text": "elements.activities.planned_disbursement.receiving_org.narrative.help_text", "attr": { "row": 4 }, "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + "hover_text": "elements.activities.planned_disbursement.receiving_org.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -2468,69 +2524,69 @@ "name": "participating_org", "label": "participating organization", "add_more": true, - "help_text": "Specify which organisations are involved with this activity, and what their individual roles are. For example they could be a donor, funder, implementing agency, etc.", - "hover_text": "An organisation involved with the activity. May be a donor, funder, implementing agency, etc. Specifying the @ref identifier is strongly recommended. May contain the organisation name as narrative.

    If the reporting organisation plays a role in the activity it should be repeated here. One organisation may play more than one role (eg, funding and implementing): in such a case each role should be reported and the name of the organisation repeated.For more information", + "help_text": "elements.activities.participating_org.hover_text", + "hover_text": "elements.activities.participating_org.help_text", "attributes": { "organization_role": { "name": "organization_role", - "label": "role", + "label": "el_common.role", "type": "select", - "placeholder": "Select role", + "placeholder": "el_common.select_role", "choices": "Organization/OrganisationRole.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code describing the organisation’s role in the activity (donor, agency, etc.).

    This attribute is required.For more information", - "help_text": "Select an option that describes the organisation’s role in the activity (funder, implementing agency, etc.):

    1. Funding - The government or organisation which provides funds to the activity

    2. Accountable - An organisation responsible for oversight of the activity and its outcomes

    3. Extending - An organisation that manages the budget and direction of an activity on behalf of the funding organisation

    4. Implementing - The organisation that physically carries out the activity or intervention.
    " + "hover_text": "elements.activities.participating_org.organisation_role.hover_text", + "help_text": "elements.activities.participating_org.organisation_role.help_text" }, "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "recommended", - "hover_text": "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber} where {RegistrationAgency} is a valid code in the Organisation Registration Agency code list and {RegistrationNumber} is a valid identifier issued by the {RegistrationAgency}. If this is not present then the narrative MUST contain the name of the organisation.For more information", - "help_text": "Please provide the participating organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance." + "hover_text": "elements.activities.participating_org.reference.hover_text", + "help_text": "elements.activities.participating_org.reference.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Organization/OrganizationType.json", "required": false, "criteria": "recommended", - "hover_text": "The type of organisation issuing the report.For more information", - "help_text": "Select the type that best describes the participating organisation. Information on all organisation types." + "hover_text": "elements.activities.participating_org.type.hover_text", + "help_text": "elements.activities.participating_org.type.help_text" }, "identifier": { "name": "identifier", - "label": "activity-id", + "label": "el_common.activity_id", "type": "text", - "placeholder": "Type activity-id", + "placeholder": "el_common.type_id", "required": false, "criteria": "recommended", - "hover_text": "A valid activity identifier published by the participating organisation which points to the activity that it has published to IATI that describes its role in this activity.For more information", - "help_text": "If the participating organisation has published an activity to IATI for this activity, please provide the activity-id for their activity. You can ask the participating organisation for this, or search for their activity on d-portal.org. Further guidance." + "hover_text": "elements.activities.participating_org.activity_id.hover_text", + "help_text": "elements.activities.participating_org.activity_id.help_text" }, "crs_channel_code": { "name": "crs_channel_code", - "label": "crs-channel-code", + "label": "el_common.crs_channel_code", "type": "select", - "placeholder": "Type crs-channel-code", + "placeholder": "el_common.type_crs_channel_code", "choices": "Activity/CRSChannelCode.json", "required": false, "criteria": "", - "hover_text": "Under CRS++ Reporting Directives this code identifies the implementing agency. Codes ending in ‘00’ are generic and are similar to the OrganisationType code.For more information", + "hover_text": "elements.activities.participating_org.crs_channel_code.hover_text", "help_text": "" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "element_criteria": "recommended", "required": false, "criteria": "recommended", @@ -2538,19 +2594,19 @@ "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "Provide the name of the participating organisation.", + "hover_text": "elements.activities.participating_org.narrative.hover_text", + "help_text": "elements.activities.participating_org.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_8", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -2559,88 +2615,88 @@ }, "budget": { "name": "budget", - "label": "budget", + "label": "el_common.budget", "add_more": true, - "hover_text": "The value of the activity’s budget for each financial quarter or year over the lifetime of the activity. The purpose of this element is to provide predictability for recipient planning on an annual basis. The status explains whether the budget being reported is indicative or has been formally committed. For more information", - "help_text": "Provide the amount of finance expected to be spent as part of this activity. You need to provide budget(s) broken down by time periods of a year or less covering the whole life of the activity. Publishing budgets for each quarter is helpful for data users. A budget must not span more than 12 months.

    \nYou should provide your budget(s) for your activity as soon as possible. You can then update this over time as more or less funding comes in, or the scope of the activity changes. More information.", + "hover_text": "elements.activities.budget.hover_text", + "help_text": "elements.activities.budget.help_text", "attributes": { "budget_status": { "name": "budget_status", - "label": "status", + "label": "el_common.status", "type": "select", - "placeholder": "Select status", + "placeholder": "el_common.select_status", "choices": "Activity/BudgetStatus.json", "required": false, "criteria": "recommended", - "hover_text": "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", - "help_text": "Please select a status for this budget:

    1 Indicative: a non-binding estimate for the described budget

    2 committed a binding agreement for the described budget

    If this budget changes status, you should change the status of this budget here. You should not create a new budget for the same time period with a different status. More information." + "hover_text": "elements.activities.budget.budget_status.hover_text", + "help_text": "elements.activities.budget.budget_status.help_text" }, "budget_type": { "name": "budget_type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/BudgetType.json", "required": false, "criteria": "recommended", - "hover_text": "Whether this is the original budget (prepared when the original commitment was made) or has subsequently been revised.For more information", - "help_text": "Select the type of budget that you a providing:

    1 Original The original budget allocated to the activity. Select this option if you are publishing information about this budget for the first time.

    2 Revised The updated budget for an activity. Select this option if you are revising your original budget.

    For example: an activity lasts a year. The original budget was $10,000 and was later decreased by $2,000. The final total budget for the activity is $8,000.You would need to create two budgets for this time period. Firstly you would add a budget with the type ‘original’ with the start and end date for the year, with the value of $10,000. Once you know that the budget has been revised, you would then add another budget for the same dates, with the type ‘revised’ with a value of $8,000.

    If there are further changes to the revised budget, you should change the value in the ‘revised’ budget. Do not create additional ‘revised’ budgets for the same time period.

    Therefore only one original and one revised budget should be published for each time period. More information." + "hover_text": "elements.activities.budget.budget_type.hover_text", + "help_text": "elements.activities.budget.budget_type.help_text" } }, "sub_elements": { "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The start of the budget period.For more information", + "hover_text": "elements.activities.budget.period_start.hover_text", "attributes": { "date": { "name": "date", "label": "iso date", "type": "date", - "placeholder": "Type date", + "placeholder": "el_common.type_date", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.

    This value must be of type xsd:date.For more information", - "help_text": "Provide the start date of the budget." + "hover_text": "elements.activities.budget.period_start.date.hover_text", + "help_text": "elements.activities.budget.period_start.date.help_text" } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The end of the period (which must not be greater than one year). For more information", + "hover_text": "elements.activities.budget.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "iso date", + "label": "el_common.iso_date", "type": "date", - "placeholder": "Select date", + "placeholder": "el_common.select_date", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date.For more information", - "help_text": "Provide the end date of the budget." + "hover_text": "elements.activities.budget.period_end.date.hover_text", + "help_text": "elements.activities.budget.period_end.date.help_text" } }, "sub_elements": {} }, "budget_value": { "name": "budget_value", - "label": "value", + "label": "el_common.value", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The budget for this period.For more information", - "help_text": "Provide the total finance for this budget", + "hover_text": "elements.activities.budget.budget_value.hover_text", + "help_text": "elements.activities.budget.budget_value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": true, "criteria": "mandatory", "hover_text": "", @@ -2648,23 +2704,23 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "choices": "Activity/Currency.json", "required": false, "criteria": "recommended", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified.For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.activities.budget.budget_value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "Select value-date", + "placeholder": "el_common.select_value", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.This attribute is required.For more information", + "hover_text": "elements.activities.budget.budget_value.value_date.hover_text", "help_text": "" } }, @@ -2674,71 +2730,71 @@ }, "result": { "name": "result", - "label": "result", + "label": "el_common.result", "add_more": false, - "hover_text": "A container for reporting outputs, outcomes, impacts and other results that stem directly from the activity. This may be repeated for each type of result reported. For more information.", - "help_text": "Results describe the benefit or intended benefits of an activity; these can be broken down into types: outputs, outcomes and impacts. You can provide multiple results for your activity. Updating results regularly means that data users can track an activity’s progress, including whether the activity was a success and what challenges were faced. Both positive and negative results should be included. See guidance for more information: Results Information and Understanding results data.

    Please note: security implications may prevent results data from being published, or require results to be aggregated. Any security considerations should be outlined in an organisation’s exclusion policy.", + "hover_text": "elements.activities.result.hover_text", + "help_text": "elements.activities.result.help_text", "show_info_in_title": true, "attributes": { "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Activity/ResultType.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code for the type of result being reported. For more information.", - "help_text": "Select the type of result that your activity is aiming to achieve or has already achieved.

    Output - Results of the activity that came about as a direct effect of your work and specifically, what is done, and what communities are reached. For example, X number of individuals trained.

    Outcome - Results of the activity that produce an effect on the overall communities or issues you serve. For example lower rate of infection after a vaccination programme.

    Impact - The long term effects of the outcomes, that lead to larger, overarching results, such as improved life-expectancy.

    Other - Another type of result, not specified above" + "hover_text": "elements.activities.result.type.hover_text", + "help_text": "elements.activities.result.type.help_text" }, "aggregation_status": { "name": "aggregation_status", - "label": "aggregation-status", + "label": "el_common.aggregation_status", "type": "select", - "placeholder": "Select aggregation status", + "placeholder": "el_common.select_aggregation_status", "choices": { "0": "False", "1": "True" }, "required": false, "criteria": "", - "hover_text": "Flag indicating whether the data in the result set are suitable for aggregation.For more information.", - "help_text": "Select yes if the results data that you provide is suitable for aggregation (the data user should be able to add them up to get the total)." + "hover_text": "elements.activities.result.aggregation_status.hover_text", + "help_text": "elements.activities.result.aggregation_status.help_text" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "add_more": false, "attributes": {}, - "hover_text": "A short, human-readable title.For more information.", + "hover_text": "elements.activities.result.title.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", "placeholder": "", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a title for the result. For example ‘People have access to independent media covering a diverse range of outcomes’. ", + "hover_text": "elements.activities.result.title.narrative.hover_text", + "help_text": "elements.activities.result.title.narrative.help_text", "attr": { "row": 4 }, "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text that you provided in the narrative. If no language is selected, then your default value is assumed." + "hover_text": "el_common.a_code_specifying_text_link_4", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -2747,35 +2803,35 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, "attributes": {}, - "hover_text": "A longer, human-readable description. For more information.", + "hover_text": "elements.activities.result.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a longer description for the result.", + "hover_text": "elements.activities.result.description.narrative.hover_text", + "help_text": "elements.activities.result.description.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.result.description.language.hover_text", + "help_text": "elements.activities.indicator.document_link.description.language.help_text" } }, "sub_elements": {} @@ -2784,65 +2840,65 @@ }, "document_link": { "name": "document_link", - "label": "document-link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document expanding on the result. For more information.", - "help_text": "You may provide more information about the result by providing a link to an online, publicly accessible web page or document.", + "hover_text": "elements.activities.result.document_link.hover_text", + "help_text": "elements.activities.result.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. http://www.example.org/doc.odt. For more information.", - "help_text": "Type the URL for the document that provides more information about the result. Make sure it includes “https://…" + "hover_text": "elements.activities.result.document_link.url.hover_text", + "help_text": "elements.activities.result.document_link.url.help_text" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Select format", + "placeholder": "el_common.select_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "hover_text": "elements.activities.result.document_link.format.hover_text", "help_text": "" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "attributes": {}, - "hover_text": "A short, human-readable title.For more information.", + "hover_text": "el_common.a_short_human_readable", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link then you must provide a title for the document.", + "hover_text": "el_common.the_free_text_name_link_3", + "help_text": "el_common.if_you_provided_a_document_link_title", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_3", + "help_text": "elements.activities.indicator.document_link.description.language.help_text" } }, "sub_elements": {} @@ -2851,34 +2907,34 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document.For more information.", + "hover_text": "el_common.a_description_of_the_document", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link, then you can provide a description of the document.", + "hover_text": "el_common.the_free_text_name_link_2", + "help_text": "el_common.if_you_provided_a_document_link_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_2", + "help_text": "elements.activities.indicator.document_link.description.language.help_text" } }, "sub_elements": {} @@ -2887,62 +2943,62 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "element_criteria": "", "add_more": true, "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information.", - "help_text": "If you have provided a document link, then you must select a category that best describes the document.", + "hover_text": "elements.activities.result.document_link.category.hover_text", + "help_text": "elements.activities.result.document_link.category.help_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a document category from this list." + "hover_text": "elements.activities.result.document_link.category.code.hover_text", + "help_text": "elements.activities.result.document_link.category.code.help_text" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, "attributes": { "language": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "ISO 639-1 language code. For more information", - "help_text": "Select the language that the document is written in." + "hover_text": "elements.activities.result.document_link.language.code.hover_text", + "help_text": "el_common.default_value_assumed" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document-date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. (@iso-date). For more information", + "hover_text": "el_common.the_date_of_document_link_1", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to. For more information", - "help_text": "Provide the date for when the document was published." + "hover_text": "el_common.the_date_of_document_link_2", + "help_text": "el_common.provide_the_date_for_when" } }, "sub_elements": {} @@ -2951,41 +3007,41 @@ }, "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "add_more": true, "make_collection": false, - "hover_text": "A reference element to allow for the coded identification of results framework. For more information", - "help_text": "If this result is contained in a results framework, then you may provide information about it. You can choose to provide a reference to a results framework in two ways:

    1. You can provide a reference to a results framework for the result here OR

    2. You can provide a reference to a results framework for each individual indicator that measures this result. For every result that you publish, you will be required to provide an indicator (which measures the result).

    Option 2 is recommended. To implement this option, leave the next three fields blank: code, vocabulary, vocabulary uri.

    Do note: You cannot provide a reference to a results framework for both the result and indicator. See guidance for more information: Results Information ", + "hover_text": "elements.activities.result.reference.hover_text", + "help_text": "elements.activities.result.reference.help_text", "attributes": { "vocabulary": { "name": "vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/ResultVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "A code for the results framework vocabulary. The code must be a valid value in the ResultVocabulary codelist. For more information", + "hover_text": "elements.activities.result.reference.vocabulary.hover_text", "help_text": "" }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": true, "criteria": "mandatory", - "hover_text": "A code from the codelist identified in vocabulary that identifies a results framework. For more information", + "hover_text": "el_common.a_code_from_the_codelist_identifies", "help_text": "" }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", + "hover_text": "elements.activities.result.reference.vocabulary_uri.hover_text", "help_text": "" } }, @@ -2995,85 +3051,85 @@ }, "indicator": { "name": "indicator", - "label": "indicator", + "label": "el_common.indicator", "add_more": false, - "hover_text": "The indicator(s) that are measured to meet the results. There can be multiple indicators for each result.For more information", - "help_text": "

    Example usage: An activity is working towards the outcome: ‘people to have access to independent media covering a diverse range of outcomes’. One of the ways this is being measured is through ‘the percentage of journalists who feel free to express their opinion’ (which is an indicator). This is measured through a bi-annual survey where they are asked to score how free they feel on a scale of 1 - 4.

    See Results Information for more details on this example and Understanding results data for further examples.", + "hover_text": "elements.activities.indicator.hover_text", + "help_text": "elements.activities.indicator.help_text", "show_info_in_title": true, "attributes": { "measure": { "name": "measure", - "label": "measure", + "label": "el_common.measure", "type": "select", - "placeholder": "Select measure", + "placeholder": "el_common.select_measure", "choices": "Activity/IndicatorMeasure.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the unit of measure in which the value is reported. For more information", - "help_text": "Select the unit of measurement for the indicator:

    Unit - The indicator is measured in units e.g. number of workshops delivered.

    Percentage - The indicator is measured in percentages e.g. percentage of the population who have received a vaccine.

    Nominal - The indicator is measured as a quantitative nominal scale. For example gender, race etc.

    Ordinal - The indicator is measured as a quantitative ordinal scale. For example: “very satisfied,” “satisfied,” “dissatisfied,” and “very dissatisfied.” In an ordinal scale, the order of answer options is what’s significant—you can’t quantify the exact difference between each answer option. The difference between responses like “very satisfied” and “satisfied,” for example, is relative, not exact.

    Qualitative - The indicator is qualitative and this is often a description, such as detailing more favourable attitudes towards gender equality amongst trained staff." + "hover_text": "elements.activities.indicator.measure.hover_text", + "help_text": "elements.activities.indicator.measure.help_text" }, "ascending": { "name": "ascending", - "label": "ascending", + "label": "el_common.ascending", "type": "select", - "placeholder": "Select ascending", + "placeholder": "el_common.select_ascending", "choices": { "0": "False", "1": "True" }, "required": false, "criteria": "", - "hover_text": "A flag describing the behaviour of the indicator. It is “true” if the indicator improves from small to large (e.g. clinics built); false if it improves from large to small (e.g. cases of a disease). For more information", - "help_text": "Select an option here if your indicator is a numerical (quantitative) measure. If a high number shows improvement, select 1 (true). If a low number shows improvement, select 0 (false)." + "hover_text": "elements.activities.indicator.ascending.hover_text", + "help_text": "elements.activities.indicator.ascending.help_text" }, "aggregation_status": { "name": "aggregation_status", - "label": "aggregation status", + "label": "el_common.aggregation_status", "type": "select", - "placeholder": "Select aggregation status", + "placeholder": "el_common.select_aggregation_status", "choices": { "0": "False", "1": "True" }, "required": false, "criteria": "", - "hover_text": "Flag indicating whether the data in the result set are suitable for aggregation. For more information", - "help_text": "Select yes if the results data that you provide is suitable for aggregation (the data user should add them up to get the total)." + "hover_text": "elements.activities.indicator.aggregation_status.hover_text", + "help_text": "elements.activities.indicator.aggregation_status.help_text" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "add_more": false, "attributes": {}, - "hover_text": "A short, human-readable title.For more information", + "hover_text": "elements.activities.indicator.title.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a title or brief description of the indicator. Using the same example above, a narrative could be: “The percentage of journalists who feel free to express their opinion (scoring 3 or 4 with a scale of 1 - 4)\".

    See Results Information for more details on this example.", + "hover_text": "elements.activities.indicator.title.narrative.hover_text", + "help_text": "elements.activities.indicator.title.narrative.help_text", "attr": { "row": 4 }, "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.title.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3082,35 +3138,35 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, "attributes": {}, - "hover_text": "A longer, human-readable description. For more information", + "hover_text": "elements.activities.indicator.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "You can provide a longer description or additional information to help explain what’s being measured and how.

    Using the example above this additional information could be:

    “1 = Not at all free
    2 = No, not entirely free
    3 = Yes, up to some level
    4 = Yes, entirely free
    This is measured through a bi-annual survey amongst journalists.”

    See Results Information for more details on this example.", + "hover_text": "elements.activities.indicator.description.narrative.hover_text", + "help_text": "elements.activities.indicator.description.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.description.language.hover_text", + "help_text": "elements.activities.indicator.document_link.description.language.help_text" } }, "sub_elements": {} @@ -3119,65 +3175,65 @@ }, "document_link": { "name": "document_link", - "label": "document link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document expanding on the result. For more information", - "help_text": "You may provide more information about the result indicator by providing a link to an online, publicly accessible web page or document.", + "hover_text": "elements.activities.indicator.document_link.hover_text", + "help_text": "elements.activities.indicator.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. http://www.example.org/doc.odt. For more information.", - "help_text": "Provide the link to a specific results indicator being reported. Make sure it includes “https://…" + "hover_text": "elements.activities.indicator.document_link.url.hover_text", + "help_text": "elements.activities.indicator.document_link.url.help_text" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Select format", + "placeholder": "el_common.select_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "hover_text": "elements.activities.indicator.document_link.format.hover_text", "help_text": "" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", - "hover_text": "A short, human-readable title. For more information", + "hover_text": "elements.activities.indicator.title.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link then you must provide a title for the document.", + "hover_text": "el_common.the_free_text_name_link_3", + "help_text": "el_common.if_you_provided_a_document_link_title", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_3", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3186,34 +3242,34 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document.For more information", + "hover_text": "elements.activities.indicator.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", - "help_text": "If you have provided a document link, then you can provide a description of the document.", + "hover_text": "elements.activities.indicator.description.narrative.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.description.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3222,62 +3278,62 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "element_criteria": "", "add_more": true, "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", - "help_text": "If you have provided a document link, then select a category that best describes the document.", + "hover_text": "elements.activities.indicator.document_link.category.hover_text", + "help_text": "elements.activities.indicator.document_link.category.help_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a document category." + "hover_text": "elements.activities.indicator.document_link.category.code.hover_text", + "help_text": "el_common.select_a_document_category" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, "attributes": { "language": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "ISO 639-1 language code. For more information", - "help_text": "Select the language that the document is written in." + "hover_text": "elements.activities.indicator.document_link.language.code.hover_text", + "help_text": "el_common.default_value_assumed" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. (@iso-date). For more information", + "hover_text": "elements.activities.indicator.document_link.document_date.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to.For more information", - "help_text": "Provide the date of publication for the document." + "hover_text": "elements.activities.indicator.document_link.document_date.date.hover_text", + "help_text": "elements.activities.indicator.document_link.document_date.date.help_text" } }, "sub_elements": {} @@ -3286,115 +3342,115 @@ }, "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "add_more": true, "make_collection": false, - "hover_text": "A reference element to allow for the coded identification of results framework. For more information", - "help_text": "If the indicator that you report is included in an existing results framework, please provide information on it here.", + "hover_text": "elements.activities.indicator.reference.hover_text", + "help_text": "elements.activities.indicator.reference.help_text", "attributes": { "vocabulary": { "name": "vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/IndicatorVocabulary.json", "required": true, "criteria": "mandatory", - "hover_text": "A code for the results framework vocabulary. The code must be a valid value in the ResultVocabulary codelist. For more information", - "help_text": "Select the results framework that your indicator is included in. If the results framework is not listed, select ‘99 Reporting Organisation’." + "hover_text": "elements.activities.indicator.reference.vocabulary.help_text", + "help_text": "elements.activities.indicator.reference.vocabulary.help_text" }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "A code from the codelist identified in vocabulary that identifies a results framework. For more information", - "help_text": "If you selected a results framework, then provide the code for the indicator as specified in this results framework." + "hover_text": "elements.activities.indicator.reference.vocabulary.hover_text", + "help_text": "elements.activities.indicator.reference.vocabulary.help_text" }, "indicator_uri": { "name": "indicator_uri", "label": "indicator uri", "type": "text", - "placeholder": "Type indicator-uri", + "placeholder": "el_common.type_indicator_uri", "required": false, "criteria": "", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users. For more information", - "help_text": "If you selected a results framework, provide a link to it. If you selected 99 (Reporting Organisation), it is strongly recommended that a link to the codelist is included here. This helps ensure that users can understand the meaning of the code." + "hover_text": "elements.activities.indicator.reference.indicator_uri.hover_text", + "help_text": "elements.activities.indicator.reference.indicator_uri.help_text" } }, "sub_elements": {} }, "baseline": { "name": "baseline", - "label": "baseline", + "label": "el_common.baseline", "add_more": true, - "hover_text": "The baseline value for the indicator. For more information", - "help_text": "For each indicator please provide a baseline value, a target and the actual result achieved. The baseline is the starting point. The target is a result an organisation wants an activity to achieve in a certain period of time. The actual result is what was achieved at the end of that period.

    For example: The starting value (baseline) was 15% of journalists felt free to express their opinions. At the end of the chosen time period, the target was set at 50%. The activity achieved its target, as by the end of the period (actual) 53% of journalists felt free to express their opinions.

    See Results Information for more details on this example and Understanding results data for further examples.", + "hover_text": "elements.activities.indicator.baseline.hover_text", + "help_text": "elements.activities.indicator.baseline.help_text", "attributes": { "year": { "name": "year", - "label": "year", + "label": "el_common.year", "type": "text", - "placeholder": "Type year", + "placeholder": "el_common.type_year", "required": true, "criteria": "mandatory", - "hover_text": "The year the baseline value was taken (yyyy). For more information", - "help_text": "Provide the year when the indicator’s baseline was measured." + "hover_text": "elements.activities.indicator.baseline.year.hover_text", + "help_text": "elements.activities.indicator.baseline.year.help_text" }, "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": false, "criteria": "", - "hover_text": "The date of baseline value was taken. For more information", - "help_text": "Provide the date for when the indicator’s baseline was measured." + "hover_text": "elements.activities.indicator.baseline.date.hover_text", + "help_text": "elements.activities.indicator.baseline.date.help_text" }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "The baseline value. For more information", - "help_text": "Provide the baseline value. For example if the value is 15 percent, just type 15 (as you have provided the unit of measure above).

    Please leave this blank if this indicator uses a qualitative measure (and add your baseline in the comment field below)." + "hover_text": "elements.activities.indicator.baseline.value.hover_text", + "help_text": "elements.activities.indicator.baseline.value.help_text" } }, "sub_elements": { "comment": { "name": "comment", - "label": "comment", + "label": "el_common.comment", "attributes": {}, - "hover_text": "A human-readable comment associated with a piece of aid information. For more information", + "hover_text": "elements.activities.indicator.baseline.comment.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If the indicator is a qualitative measure, provide a descriptive baseline here.

    You may also add other descriptive information about your baseline here. For example: “Baseline measured in a survey amongst 1083 journalists in country X”.", + "hover_text": "elements.activities.indicator.baseline.comment.narrative.hover_text", + "help_text": "elements.activities.indicator.baseline.comment.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.baseline.comment.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3403,30 +3459,30 @@ }, "dimension": { "name": "dimension", - "label": "dimension", + "label": "el_common.dimension", "add_more": true, "wrapper_collection": false, - "hover_text": "A category used for disaggregating the result by gender, age, etc. For more information", - "help_text": "Please note: A baseline can have multiple dimensions.", + "hover_text": "elements.activities.indicator.baseline.dimension.hover_text", + "help_text": "elements.activities.indicator.baseline.dimension.help_text", "attributes": { "name": { "name": "name", - "label": "name", + "label": "el_common.name", "type": "text", - "placeholder": "Type name", + "placeholder": "el_common.type_name", "required": false, "criteria": "", - "hover_text": "Freetext description of a category being disaggregated. For more information", - "help_text": "For example an activity could declare the dimension’s name as ‘sex’, with a value of ‘female’." + "hover_text": "elements.activities.indicator.baseline.dimension.name.hover_text", + "help_text": "elements.activities.indicator.baseline.dimension.name.help_text" }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "Description of the value being disaggregated. For more information", + "hover_text": "elements.activities.indicator.baseline.dimension.value.hover_text", "help_text": "" } }, @@ -3434,67 +3490,67 @@ }, "document_link": { "name": "document_link", - "label": "document link", + "label": "el_common.document_link", "add_more": true, "element_criteria": "", - "hover_text": "A link to an online, publicly accessible web page or document expanding on the result. For more information", - "help_text": "You may provide more information about the indicator baseline by providing a link to an online, publicly accessible web page or document.", + "hover_text": "elements.activities.indicator.baseline.document_link.hover_text", + "help_text": "elements.activities.indicator.baseline.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", - "help_text": "Type the URL for the document that provides more information about the indicator baseline. Make sure it includes “https://…" + "hover_text": "elements.activities.indicator.baseline.document_link.url.hover_text", + "help_text": "elements.activities.indicator.baseline.document_link.url.help_text" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Type format", + "placeholder": "el_common.type_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "hover_text": "elements.activities.indicator.baseline.document_link.format.hover_text", "help_text": "" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "add_more": false, "attributes": {}, - "hover_text": "A short, human-readable title. For more information", + "hover_text": "elements.activities.indicator.baseline.document_link.title.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "hover_text": "elements.activities.indicator.baseline.document_link.title.narrative.hover_text", "help_text": "", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.baseline.document_link.title.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3503,35 +3559,35 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "hover_text": "elements.activities.indicator.baseline.document_link.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link, then you can provide a description of the document.", + "hover_text": "elements.activities.indicator.baseline.document_link.description.narrative.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.indicator.baseline.document_link.description.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3540,42 +3596,42 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "element_criteria": "", "add_more": true, "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", - "help_text": "If you have provided a document link, select a category that best describes the document.", + "hover_text": "elements.activities.indicator.baseline.document_link.category.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_best", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a document category." + "hover_text": "elements.activities.indicator.baseline.document_link.category.code.hover_text", + "help_text": "el_common.select_a_document_category" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, "attributes": { "language": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "ISO 639-1 language code. For more information", + "hover_text": "elements.activities.indicator.baseline.document_link.language.code.hover_text", "help_text": "" } }, @@ -3583,19 +3639,19 @@ }, "document_date": { "name": "document_date", - "label": "document date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. For more information", + "hover_text": "el_common.the_date_of_document_link_3", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to. For more information", - "help_text": "Provide the date for when the document was published." + "hover_text": "el_common.the_date_of_document_link_3", + "help_text": "el_common.provide_the_date_for_when" } }, "sub_elements": {} @@ -3604,18 +3660,18 @@ }, "location": { "name": "location", - "label": "location", + "label": "el_common.location", "add_more": "true", - "hover_text": "A location already defined and described in the iati-activity/location element.For more information", + "hover_text": "elements.activities.indicator.baseline.location.hover_text", "attributes": { "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information", + "hover_text": "elements.activities.indicator.baseline.location.reference.hover_text", "help_text": "" } }, @@ -3627,10 +3683,10 @@ }, "period": { "name": "period", - "label": "period", + "label": "el_common.period", "add_more": false, - "hover_text": "The period covered for the results reported. Multiple periods can be reported for a single indicator. For more information", - "help_text": "Each indicator can have a given time period with a start and an end date. This is the time period in which the indicator is being measured, e.g. agricultural season or school term.", + "hover_text": "elements.activities.period.hover_text", + "help_text": "elements.activities.period.help_text", "show_info_in_title": true, "attributes": {}, "sub_elements": { @@ -3639,16 +3695,16 @@ "label": "period start", "element_criteria": "", "add_more": false, - "hover_text": "The start of the reporting period. For more information", + "hover_text": "el_common.the_start_of_reporting_period", "attributes": { "date": { "name": "date", - "label": "iso date", + "label": "el_common.iso_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The start of the reporting period. For more information", + "hover_text": "el_common.the_start_of_reporting_period", "help_text": "" } }, @@ -3656,19 +3712,19 @@ }, "period_end": { "name": "period_end", - "label": "period end", + "label": "el_common.period_end", "element_criteria": "", "add_more": false, - "hover_text": "The end of the reporting period. For more information", + "hover_text": "el_common.the_end_of_reporting_period", "attributes": { "date": { "name": "date", "label": "iso date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The end of the reporting period. For more information", + "hover_text": "el_common.the_end_of_reporting_period", "help_text": "" } }, @@ -3676,39 +3732,39 @@ }, "target": { "name": "target", - "label": "target", + "label": "el_common.target", "add_more": true, - "hover_text": "The target milestone for this period. For more information", - "help_text": "The target is a result an organisation wants an activity to achieve in a certain period of time.", + "hover_text": "elements.activities.period.target.hover_text", + "help_text": "elements.activities.period.target.help_text", "attributes": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "The target value. For more information", - "help_text": "Add a target value if your indicator is a numerical (quantitative) measure e.g.measured by units or percentages.

    Please leave this blank if this indicator uses a qualitative measure (and add your target in the comment field below)." + "hover_text": "elements.activities.period.target.value.hover_text", + "help_text": "elements.activities.period.target.value.help_text" } }, "sub_elements": { "comment": { "name": "comment", - "label": "comment", - "hover_text": "A human-readable comment associated with a piece of aid information. For more information", - "help_text": "If the indicator is a qualitative measure, provide a descriptive target here.

    You may also add other descriptive information about the target here.", + "label": "el_common.comment", + "hover_text": "elements.activities.period.target.comment.hover_text", + "help_text": "elements.activities.period.target.comment.help_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "hover_text": "elements.activities.period.target.comment.narrative.hover_text", "help_text": "", "attr": { "row": 4 @@ -3716,14 +3772,14 @@ "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.period.target.comment.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3732,28 +3788,28 @@ }, "dimension": { "name": "dimension", - "label": "dimension", + "label": "el_common.dimension", "add_more": true, "wrapper_collection": false, "attributes": { "name": { "name": "name", - "label": "name", + "label": "el_common.name", "type": "text", "placeholder": "Type name", "required": false, "criteria": "", - "hover_text": "Freetext description of a category being disaggregated. For more information", - "help_text": "For example an activity could declare the dimension’s name as ‘sex’, with a value of ‘female’." + "hover_text": "elements.activities.period.dimension.name", + "help_text": "el_common.for_example_an_activity" }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "Description of the value being disaggregated. For more information", + "hover_text": "elements.activities.period.target.dimension.value.hover_text", "help_text": "" } }, @@ -3761,65 +3817,65 @@ }, "document_link": { "name": "document_link", - "label": "document link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document expanding on the result. For more information", - "help_text": "You may provide more information about the indicator target by providing a link to an online, publicly accessible web page or document.", + "hover_text": "elements.activities.period.target.document_link.hover_text", + "help_text": "elements.activities.period.target.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", - "help_text": "Type the URL for the document that provides more information about the indicator target. Make sure it includes “https://…" + "hover_text": "elements.activities.period.target.document_link.url.hover_text", + "help_text": "elements.activities.period.target.document_link.url.help_text" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Select format", + "placeholder": "el_common.select_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "hover_text": "elements.activities.period.target.document_link.format.hover_text", "help_text": "" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "attributes": {}, - "hover_text": "A short, human-readable title. For more information", + "hover_text": "elements.activities.period.target.document_link.title.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link then you must provide a title for the document.", + "hover_text": "elements.activities.period.target.document_link.title.narrative.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_title", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.period.target.document_link.title.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3828,34 +3884,34 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "hover_text": "elements.activities.period.target.document_link.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link, then you can provide a description of the document.", + "hover_text": "elements.activities.period.target.document_link.description.narrative.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.period.target.document_link.description.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -3864,62 +3920,62 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "add_more": true, "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", - "help_text": "If you have provided a document link, select a category that best describes the document.", + "hover_text": "elements.activities.period.target.document_link.category.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_best", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": false, "criteria": "", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a document category." + "hover_text": "elements.activities.period.target.document_link.category.code.hover_text", + "help_text": "el_common.select_a_document_category" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, - "hover_text": "The ISO 639-1 language code in which target document is written, e.g. “en”. Can be repeated to describe multi-lingual documents. For more information", + "hover_text": "elements.activities.period.target.document_link.language.hover_text", "attributes": { "language": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "ISO 639-1 language code.For more information", - "help_text": "Select the language that the document is written in." + "hover_text": "elements.activities.period.target.document_link.language.language.hover_text", + "help_text": "el_common.default_value_assumed" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. For more information", + "hover_text": "el_common.the_date_of_document_link_4", "attributes": { "date": { "name": "date", "label": "iso date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to. For more information", - "help_text": "Provide the date for when the document was published." + "hover_text": "el_common.the_date_of_document_link_4", + "help_text": "el_common.provide_the_date_for_when" } }, "sub_elements": {} @@ -3928,18 +3984,18 @@ }, "location": { "name": "location", - "label": "location", + "label": "el_common.location", "add_more": "true", "wrapper_collection": false, "attributes": { "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information", + "hover_text": "elements.activities.period.target.document_link.location.reference.hover_text", "help_text": "" } }, @@ -3949,39 +4005,39 @@ }, "actual": { "name": "actual", - "label": "actual", + "label": "el_common.actual", "add_more": true, - "hover_text": "A record of the achieved result for this period. For more information", - "help_text": "The actual is what was achieved at the end of that period.", + "hover_text": "elements.activities.period.actual.hover_text", + "help_text": "elements.activities.period.actual.help_text", "attributes": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "The actual measure. For more information", - "help_text": "Add the actual value achieved, if your indicator is a numerical (quantitative) measure e.g.measured by units or percentages.

    Please leave this blank if this indicator uses a qualitative measure (and add your actual in the comment field below)." + "hover_text": "elements.activities.period.actual.value.hover_text", + "help_text": "elements.activities.period.actual.value.help_text" } }, "sub_elements": { "comment": { "name": "comment", - "label": "comment", - "hover_text": "A human-readable comment associated with a piece of aid information. For more information", - "help_text": "If the indicator is a qualitative measure, provide a descriptive of the actual result reported here.

    You may also add other descriptive information about the actual result here.", + "label": "el_common.comment", + "hover_text": "elements.activities.period.actual.comment.hover_text", + "help_text": "elements.activities.period.actual.comment.help_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "hover_text": "elements.activities.period.actual.comment.narrative.hover_text", "help_text": "", "attr": { "row": 4 @@ -3989,14 +4045,14 @@ "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.period.actual.comment.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -4005,29 +4061,29 @@ }, "dimension": { "name": "dimension", - "label": "dimension", + "label": "el_common.dimension", "add_more": true, "wrapper_collection": false, - "hover_text": "A category used for disaggregating the result by gender, age, etc. For more information", + "hover_text": "elements.activities.period.actual.dimension.hover_text", "attributes": { "name": { "name": "name", - "label": "name", + "label": "el_common.name", "type": "text", - "placeholder": "Type name", + "placeholder": "el_common.type_name", "required": false, "criteria": "", - "hover_text": "Freetext description of a category being disaggregated. For more information", - "help_text": "For example an activity could declare the dimension’s name as ‘sex’, with a value of ‘female’." + "hover_text": "elements.activities.period.actual.dimension.name.hover_text", + "help_text": "el_common.for_example_an_activity" }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value", + "placeholder": "el_common.type_value", "required": false, "criteria": "", - "hover_text": "Description of the value being disaggregated. For more information", + "hover_text": "elements.activities.period.actual.dimension.value.hover_text", "help_text": "" } }, @@ -4035,65 +4091,65 @@ }, "document_link": { "name": "document_link", - "label": "document link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document expanding on the result. For more information", - "help_text": "You may provide more information about the actual value or result by providing a link to an online, publicly accessible web page or document.", + "hover_text": "elements.activities.period.actual.document_link.hover_text", + "help_text": "elements.activities.period.actual.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Type url", + "placeholder": "el_common.type_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", - "help_text": "Type the URL for the document that provides more information about the actual value or result. Make sure it includes “https://…" + "hover_text": "elements.activities.period.actual.document_link.url.hover_text", + "help_text": "elements.activities.period.actual.document_link.url.help_text" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Select format", + "placeholder": "el_common.select_format", "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "hover_text": "elements.activities.period.actual.document_link.format.hover_text", "help_text": "" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "element_criteria": "", "attributes": {}, - "hover_text": "A short, human-readable title. For more information", + "hover_text": "elements.activities.period.actual.document_link.title.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link then provide a title for the document", + "hover_text": "elements.activities.period.actual.document_link.title.narrative.hover_text", + "help_text": "elements.activities.period.actual.document_link.title.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.period.actual.document_link.title.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -4102,34 +4158,34 @@ }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "hover_text": "elements.activities.period.actual.document_link.description.narrative.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "If you have provided a document link, then you can provide a description of the document.", + "hover_text": "elements.activities.period.actual.document_link.description.narrative.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_desc", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.reporting_org.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -4138,63 +4194,63 @@ }, "category": { "name": "category", - "label": "category", + "label": "el_common.category", "add_more": true, "element_criteria": "", "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", - "help_text": "If you have provided a document link, select a category that best describes the document.", + "hover_text": "elements.activities.period.actual.category.hover_text", + "help_text": "el_common.if_you_provided_a_document_link_best", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DocumentCategory.json", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "Select a document category." + "hover_text": "elements.activities.period.actual.category.code.hover_text", + "help_text": "el_common.select_a_document_category" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, - "hover_text": "The ISO 639-1 language code in which target document is written, e.g. “en”. Can be repeated to describe multi-lingual documents. For more information", + "hover_text": "elements.activities.period.actual.language.hover_text.", "attributes": { "language": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "ISO 639-1 language code. For more information", - "help_text": "Select the language that the document is written in." + "hover_text": "elements.activities.period.actual.language.language.hover_text.", + "help_text": "el_common.default_value_assumed" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document-date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. For more information", + "hover_text": "elements.activities.period.actual.document_date.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date of publication of the document that is being linked to. For more information", - "help_text": "Provide the date for when the document was published." + "hover_text": "elements.activities.period.actual.document_date.date.hover_text", + "help_text": "el_common.provide_the_date_for_when" } }, "sub_elements": {} @@ -4203,18 +4259,18 @@ }, "location": { "name": "location", - "label": "location", + "label": "el_common.location", "add_more": "true", "wrapper_collection": false, "attributes": { "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information", + "hover_text": "elements.activities.period.location.reference.hover_text", "help_text": "" } }, @@ -4226,35 +4282,35 @@ }, "transactions": { "name": "transaction", - "label": "transaction", + "label": "el_common.transaction", "add_more": false, - "hover_text": "Transactions recording committed or actual funds flowing in or out of an aid activity.For more information", - "help_text": "Please provide a record of how your activity is being financed and how the finance is being used. Each incoming and outgoing flow should be published as a transaction.

    If an organisation makes many small transactions, these can be grouped together. For example, all travel expenses for one month could be published as one expenditure transaction. When deciding whether (or how) to aggregate transactions, it is recommended that publishers consider the needs of data users, as too much aggregation can inhibit the usability of the data

    Please note, you should not group together flows of funds to or from multiple external organisations (e.g. a disbursement to CARE should not be combined with a disbursement to IRC).Guidance on publishing financial transactions", + "hover_text": "elements.activities.transactions.hover_text", + "help_text": "elements.activities.transactions.help_text", "show_info_in_title": true, "attributes": { "reference": { "name": "reference", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference linking this transaction back to the publisher’s financial management system. For more information", - "help_text": "You can provide a reference that you use to identify this transaction in your organisation’s internal financial management system" + "hover_text": "elements.activities.transactions.reference.hover_text", + "help_text": "elements.activities.transactions.reference.help_text" }, "humanitarian": { "name": "humanitarian", - "label": "humanitarian", + "label": "el_common.humanitarian", "type": "select", - "placeholder": "Select humanitarian", + "placeholder": "el_common.select_humanitarian", "choices": { "0": "False", "1": "True" }, "required": false, "criteria": "", - "hover_text": "A process flag to indicate that this transaction relates entirely or partially to humanitarian aid. For more information", - "help_text": "

    You can flag if this transaction relates to humanitarian aid by selecting ‘yes’.

    If this entire activity relates to humanitarian aid you should select yes using IATI Activity humanitarian flag, rather than for each transaction.

    See guidance on all the ways to publish humanitarian data

    ." + "hover_text": "elements.activities.transactions.humanitarian.hover_text", + "help_text": "elements.activities.transactions.humanitarian.help_text" } }, "dependent_attributes": { @@ -4283,58 +4339,58 @@ "sub_elements": { "transaction_type": { "name": "transaction_type", - "label": "transaction type", + "label": "el_common.transaction_type", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The type of the transaction (e.g. commitment, disbursement, expenditure, etc.). For more information", - "help_text": "Please choose the type of transaction that best reflects the flow of money in or out of this activity. Types include incoming funds, outgoing commitments, disbursement, expenditure.", + "hover_text": "elements.activities.transactions.transaction_type.hover_text", + "help_text": "elements.activities.transactions.transaction_type.help_text", "attributes": { "transaction_type_code": { "name": "transaction_type_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/TransactionType.json", "required": true, "criteria": "mandatory", - "hover_text": "A code from the specified vocabulary. For more information", - "help_text": "Please provide a type for this transaction. Read all options with descriptions." + "hover_text": "elements.activities.transactions.transaction_type.transaction_type_code.hover_text", + "help_text": "elements.activities.transactions.transaction_type.transaction_type_code.help_text" } }, "sub_elements": {} }, "transaction_date": { "name": "transaction_date", - "label": "transaction date", + "label": "el_common.transaction_date", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The date on which the transaction was made or (in the case of commitments) agreed. For more information", + "hover_text": "elements.activities.transactions.transaction_date.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This value must be of type xsd:date. For more information", - "help_text": "Provide the date on which the transaction was made or (in the case of commitments) agreed." + "hover_text": "elements.activities.transactions.transaction_date.date.hover_text", + "help_text": "elements.activities.transactions.transaction_date.date.help_text" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "element_criteria": "mandatory", "add_more": false, - "hover_text": "The amount of the contribution. For more information", + "hover_text": "elements.activities.transactions.value.hover_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -4342,59 +4398,59 @@ }, "date": { "name": "date", - "label": "value date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.", - "help_text": "This date must not be in the future." + "hover_text": "elements.activities.transactions.value.date.hover_text", + "help_text": "elements.activities.transactions.value.date.help_text" }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", - "placeholder": "Type currency", + "placeholder": "el_common.type_currency", "choices": "Activity/Currency.json", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. For more information", - "help_text": "Select the currency of this transaction.
    This value must be on the Currency codelist." + "hover_text": "elements.activities.transactions.value.currency.hover_text", + "help_text": "elements.activities.transactions.value.currency.help_text" } }, "sub_elements": {} }, "description": { "name": "description", - "label": "description", + "label": "el_common.description", "add_more": false, "attributes": {}, - "hover_text": "A human-readable description of the transaction. For more information", + "hover_text": "elements.activities.transactions.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "add_more": true, "criteria": "", "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short description of the transaction e.g. what it was for.", + "hover_text": "elements.activities.transactions.description.narrative.hover_text", + "help_text": "elements.activities.transactions.description.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.description.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4403,69 +4459,69 @@ }, "provider_organization": { "name": "provider_organization", - "label": "provider organisation", + "label": "el_common.provider_organisation", "element_criteria": "", "add_more": false, - "hover_text": "For incoming funds this is the organisation from which the transaction originated. If omitted on outgoing funds the reporting-org is assumed. For more information", - "help_text": "For each transaction it is strongly recommended that you publish information on both the provider and receiver organisations of the funds. This includes instances where your organisation is either the provider or the receiver.

    If you do not provide information on the provider organisation for incoming transactions, then it is presumed that your organisation is the provider of the funds.", + "hover_text": "elements.activities.transactions.provider_organization.hover_text", + "help_text": "elements.activities.transactions.provider_organization.help_text", "attributes": { "organization_identifer_code": { "name": "organization_identifier_code", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "recommended", - "hover_text": "Machine-readable identification string for the organisation issuing the report. For more information", - "help_text": "Please type the provider organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If your organisation is the provider, please type your IATI Organisation Identifier. Your organisation created its org-ID when it first registered as an IATI publisher. You can find it here." + "hover_text": "elements.activities.transactions.provider_organization.organization_identifer_code.hover_text", + "help_text": "elements.activities.transactions.provider_organization.organization_identifer_code.help_text" }, "provider_activity_id": { "name": "provider_activity_id", - "label": "provider-activity-id", + "label": "el_common.provider_activity", "type": "text", - "placeholder": "Type provider-activity-id", + "placeholder": "el_common.type_provider_activity_id", "required": false, "criteria": "recommended", - "hover_text": "If incoming funds are being provided from the budget of another activity that is reported to IATI, it if STRONGLY RECOMMENDED that this should record the provider’s unique IATI activity identifier for that activity. For more information", - "help_text": "The provider organisation may have published IATI data on these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the provider organisation for this activity-id, or search for their activity on d-portal.org. See further guidance.

    If you are the provider organisation then leave this blank." + "hover_text": "elements.activities.transactions.provider_organization.provider_activity_id.hover_text", + "help_text": "elements.activities.transactions.provider_organization.provider_activity_id.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Organization/OrganizationType.json", "required": false, "criteria": "recommended", - "hover_text": "The type of organisation providing the funds. For more information", - "help_text": "Select the type that best describes the provider organisation. Information on all organisation types.

    If your organisation is the provider, please select the organisation type that your organisation provided when it first registered. You can find it here." + "hover_text": "elements.activities.transactions.provider_organization.type.hover_text", + "help_text": "elements.activities.transactions.provider_organization.type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "recommended", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The name of the organisation. This can be repeated in multiple languages. For more information", - "help_text": "If the provider organisation does not have an IATI Organisation Identifier, you must provide the text name of the organisation.

    Please do not type a code here for the provider organisation.", + "hover_text": "elements.activities.reporting_org.narrative.hover_text", + "help_text": "elements.activities.transactions.provider_organization.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.

    For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.provider_organization.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4474,69 +4530,69 @@ }, "receiver_organization": { "name": "receiver_organization", - "label": "receiver-organisation", + "label": "el_common.receiver_organisation", "element_criteria": "", "add_more": false, - "hover_text": "The organisation receiving the money from the transaction. For more information", - "help_text": "Please provide the organisation that will/has received the funds as part of this transaction. If your organisation is the receiver, please provide your organisation’s details.", + "hover_text": "elements.activities.transactions.receiver_organization.hover_text", + "help_text": "elements.activities.transactions.receiver_organization.help_text", "attributes": { "organization_identifier_code": { "name": "organization_identifier_code", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type @ref here", + "placeholder": "el_common.type_ref_symbol_here", "required": false, "criteria": "recommended", - "hover_text": "Machine-readable identification string for the organisation issuing the report. For more information.", - "help_text": "Please provide the receiver organisation’s IATI Organisation Identifier (org-ID). The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If your organisation is the receiver, please type your IATI Organisation Identifier (org-ID). Your organisation created its org-ID when it first registered as an IATI publisher. You can find it here." + "hover_text": "elements.activities.transactions.receiver_organization.organization_identifier_code.hover_text", + "help_text": "elements.activities.transactions.receiver_organization.organization_identifier_code.help_text" }, "receiver_activity_id": { "name": "receiver_activity_id", - "label": "receiver-activity-id", + "label": "el_common.receiver_activity", "type": "text", - "placeholder": "Type receiver-activity-id", + "placeholder": "el_common.type_receiver_activity_id", "required": false, "criteria": "recommended", - "hover_text": "If outgoing funds are being provided to another activity that is reported to IATI, this may, if possible, record the unique IATI activity identifier for that activity. For more information", - "help_text": "The receiver organisation may have published IATI data on receiving these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the receiver organisation for this activity-id, or search for their activity on d-portal.org See further guidance.

    If you are the provider organisation then leave this blank." + "hover_text": "elements.activities.transactions.receiver_organization.receiver_activity_id.hover_text", + "help_text": "elements.activities.transactions.receiver_organization.receiver_activity_id.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "choices": "Organization/OrganizationType.json", "required": false, "criteria": "recommended", - "hover_text": "The type of organisation receiving the funds. For more information", - "help_text": "Select the type that best describes the receiver organisation. Information on all organisation types
    .
    If your organisation is the receiver, please select the organisation type that your organisation provided when it first registered. You can find it here." + "hover_text": "elements.activities.transactions.receiver_organization.type.hover_text", + "help_text": "elements.activities.transactions.receiver_organization.type.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "add_more": true, "criteria": "recommended", - "label": "narrative", + "label": "el_common.narrative", "attr": { "row": 4 }, - "hover_text": "The name of the organisation. This can be repeated in multiple languages. For more information", - "help_text": "If the receiver organisation does not have an IATI Organisation Identifier, the text name of the organisation must be given.

    Please do not type a code here for the receiver organisation.", + "hover_text": "elements.activities.transactions.receiver_organization.narrative.hover_text", + "help_text": "elements.activities.transactions.receiver_organization.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.receiver_organization.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4545,31 +4601,31 @@ }, "disbursement_channel": { "name": "disbursement_channel", - "label": "disbursement-channel", + "label": "el_common.disbursement_channel", "add_more": false, - "hover_text": "The channel through which the funds will flow for this transaction, from an IATI codelist. For more information", - "help_text": "Select the best option for how your disbursements are channeled (e.g. through the recipient government or outside of the recipient government).", + "hover_text": "elements.activities.transactions.disbursement_channel.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.help_text", "attributes": { "disbursement_channel_code": { "name": "disbursement_channel_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/DisbursementChannel.json", "required": false, "criteria": "", - "hover_text": "An IATI code defining channels of disbursement. For more information", - "help_text": "Please read the list of disbursement channels and choose the option that applies to this transaction (if any are applicable)." + "hover_text": "elements.activities.transactions.disbursement_channel.disbursement_channel_code.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.disbursement_channel_code.help_text" } }, "sub_elements": {} }, "sector": { - "label": "sector", + "label": "el_common.sector", "name": "sector", "add_more": true, - "hover_text": "A recognised code, from a recognised vocabulary, classifying the purpose of this transaction.For more information", - "help_text": "You can specify one sector that this individual transaction is supporting. For example, primary education or agriculture. If you do this, then you must specify a sector for every transaction that you publish.
    You should not specify a sector for any of your transactions if you want to provide data on the sector(s) of this entire activity (which you can publish here). Sectors must only be provided at either the activity or transaction level and not both.
    Once your organisation decides where to publish information about which sectors it is working in, you should be consistent across all activities that you publish. This means you should publish all sector information at either activity level or for all transactions. More information.
    ", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.help_text", "dependent_attributes": { "vocabulary_uri": {}, "code": {}, @@ -4581,110 +4637,130 @@ "attributes": { "sector_vocabulary": { "name": "sector_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/SectorVocabulary.json", "required": false, "criteria": "", - "hover_text": "An IATI code for the vocabulary (codelist) used for sector classifications. If omitted, OECD DAC 5-digit Purpose Codes are assumed. For more information", - "help_text": "If you decide to publish what sector this transaction is supporting, then you need to choose a list of sectors. IATI recommends choosing the OECD DAC 5-digit sector codelist, in which you can make a selection from over 300 sectors.

    You can choose to use another list (see information on all possible options). If you want to use your organisation’s own list of internal sector classifications, select the option: ‘Reporting Organisation’.

    You can choose to use multiple lists. If you use more than one internal sector classification, please select ‘Reporting Organisation 2’ (which has the code 98) for the additional list. Additional guidance.

    Do not select a list if you have / will choose a sector list for the entire activity." + "hover_text": "elements.activities.transactions.disbursement_channel.sector.sector_vocabulary.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sector_vocabulary.help_text" }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 or 98 (reporting organisation), the URI where this internal vocabulary is defined. For more information", - "help_text": "If you have chosen to use an internal sector classification codelist, please provide a link to it.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.vocabulary_uri.hover_text", + "help_text": "elements.activities.sector.vocabulary_uri.help_text", "parent": { "name": "sector_vocabulary", - "value": ["99", "98"] + "value": [ + "99", + "98" + ] } }, "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": false, "criteria": "", "choices": "Activity/SectorCode.json", - "hover_text": "The code for the sector.For more information", - "help_text": "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.code.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.help_text", "parent": { "name": "sector_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "text": { "name": "text", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Type code", + "placeholder": "el_common.type_", "required": false, "criteria": "", - "hover_text": "The code for the sector. For more information", - "help_text": "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.text.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.help_text", "parent": { "name": "sector_vocabulary", - "value": ["3", "4", "5", "6", "9", "10", "99", "98"] + "value": [ + "3", + "4", + "5", + "6", + "9", + "10", + "99", + "98" + ] } }, "category_code": { "name": "category_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/SectorCategory.json", "required": false, "criteria": "", - "hover_text": "The code for the sector.
    For more information", - "help_text": "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.help_text", "parent": { "name": "sector_vocabulary", - "value": ["2"] + "value": [ + "2" + ] } }, "sdg_goal": { "name": "sdg_goal", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/UNSDG-Goals.json", "required": false, "criteria": "", - "hover_text": "The code for the sector.
    For more information", - "help_text": "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.help_text", "parent": { "name": "sector_vocabulary", - "value": ["7"] + "value": [ + "7" + ] } }, "sdg_target": { "name": "sdg_target", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": false, "criteria": "", "choices": "Activity/UNSDG-Targets.json", - "hover_text": "The code for the sector.
    For more information", - "help_text": "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use.", + "hover_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.hover_text", + "help_text": "elements.activities.transactions.disbursement_channel.sector.sdg_target.help_text", "parent": { "name": "sector_vocabulary", - "value": ["8"] + "value": [ + "8" + ] } } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "element_criteria": "recommended", @@ -4692,19 +4768,19 @@ "attr": { "row": 4 }, - "hover_text": "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used).For more information", - "help_text": "If you have chosen a sector from an internal sector classification codelist, please provide a description of this sector.", + "hover_text": "elements.activities.transactions.disbursement_channel.narrative.hover_text", + "help_text": "elements.activities.sector.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.disbursement_channel.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4713,48 +4789,48 @@ }, "recipient_country": { "name": "recipient_country", - "label": "recipient-country", + "label": "el_common.recipient_country", "add_more": false, - "hover_text": "A country that will benefit from this transaction. For more information", - "help_text": "You can specify one country or region that an individual transaction is taking place in, or the place that will benefit from it.

    You should not specify a country or region for any of your transactions if you want to provide the recipient country or region of this entire activity (which you can publish here). Recipient countries or regions) must only be provided at either the activity or transaction level and not both.

    Once your organisation decides where to publish information about its recipient countries (or regions), it should be consistent across all activities that it publishes. This means you should publish all recipient country or region information at either activity level or for all transactions. More information.", + "hover_text": "elements.activities.transactions.recipient_country.hover_text", + "help_text": "elements.activities.transactions.recipient_country.help_text", "attributes": { "country_code": { "name": "country_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Country.json", "required": false, "criteria": "", - "hover_text": "ISO 3166-1 alpha-2 code for the country. For more information", - "help_text": "Select one country that this transaction is taking place in, or will benefit from its funds.

    Do not select a country if you have / will choose a recipient country for the entire activity." + "hover_text": "elements.activities.transactions.recipient_country.country_code.hover_text", + "help_text": "elements.activities.transactions.recipient_country.country_code.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Add the free text name and/or description for the country benefitting from the transaction.", + "hover_text": "elements.activities.transactions.recipient_country.narrative.hover_text", + "help_text": "elements.activities.transactions.recipient_country.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.recipient_country.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4763,92 +4839,99 @@ }, "recipient_region": { "name": "recipient_region", - "label": "recipient region", + "label": "el_common.recipient_region", "add_more": false, - "hover_text": "A supranational geopolitical region that will benefit from this transaction. If a specific country is not known, then this element MUST be used. For more information", - "help_text": "If you cannot identify the specific country benefiting from this transaction, then you can provide the recipient region instead. Do not provide both a recipient country and a region.

    For example, if the funding is going to Uganda, then you should record Uganda as the recipient country and you should not add that the funding is also going to the region of Africa.", + "hover_text": "elements.activities.transactions.recipient_region.hover_text", + "help_text": "elements.activities.transactions.recipient_region.help_text", "attributes": { "region_vocabulary": { "name": "region_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Type vocabulary", + "placeholder": "el_common.type_vocabulary", "choices": "Activity/RegionVocabulary.json", "required": false, "criteria": "", - "hover_text": "An IATI code for the vocabulary from which the region code is drawn. If it is not present 1 - ‘OECD DAC’ is assumed.For more information", - "help_text": "There are two lists of regions; the OECD DAC and UN region code lists. Please select one. IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined. If you do not choose an option, then the code list 'OECD DAC' is assumed." + "hover_text": "elements.activities.transactions.recipient_region.region_vocabulary.hover_text", + "help_text": "elements.activities.transactions.recipient_region.region_vocabulary.help_text" }, "region_code": { "name": "region_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/Region.json", "required": false, "criteria": "", - "hover_text": "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute. For more information", - "help_text": "Select the region benefitting from this transaction.", + "hover_text": "elements.activities.transactions.recipient_region.custom_code.hover_text", + "help_text": "elements.activities.transactions.recipient_region.custom_code.help_text", "parent": { "name": "region_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "custom_code": { "name": "custom_code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": false, "criteria": "", - "hover_text": "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute. For more information", - "help_text": "Select the region benefitting from this transaction.", + "hover_text": "elements.activities.transactions.recipient_region.custom_code.hover_text", + "help_text": "elements.activities.transactions.recipient_region.custom_code.help_text", "hidden": true, "parent": { "name": "region_vocabulary", - "value": ["2", "99"] + "value": [ + "2", + "99" + ] } }, "vocabulary_uri": { "name": "vocabulary_uri", - "label": "vocabulary-uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", - "help_text": "If you have selected the option: ‘Reporting Organisation’ please provide the URI where this internal list is defined.", + "hover_text": "elements.activities.transactions.recipient_region.vocabulary_uri.hover_text", + "help_text": "el_common.if_you_have_selected", "parent": { "name": "region_vocabulary", - "value": ["99"] + "value": [ + "99" + ] } } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used). For more information", - "help_text": "If you have selected the option: ‘Reporting Organisation’ please add the free text name and/or description regarding this region benefitting from the activity.", + "hover_text": "elements.activities.transactions.aid_type.narrative.hover_text", + "help_text": "elements.activities.transactions.aid_type.narrative.help_text", "attributes": { "language": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "choices": "Activity/Language.json", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.activities.transactions.aid_type.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -4857,127 +4940,135 @@ }, "flow_type": { "name": "flow_type", - "label": "flow type", + "label": "el_common.flow_type", "add_more": false, - "hover_text": "Optional element to override the top-level default-flow-type element. For more information", - "help_text": "Flow type is another way to categorise financial flows. It distinguishes the flow as official development assistance (ODA), other official flows (OOF), or several types of private flows, including private grants often provided by NGOs and other civil society organisations.", + "hover_text": "elements.activities.transactions.flow_type.hover_text", + "help_text": "elements.activities.transactions.flow_type.help_text", "attributes": { "flow_type": { "name": "flow_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/FlowType.json", "required": false, "criteria": "", - "hover_text": "A code from the OECD DAC CRS “Type of flow” codelist. For more information", - "help_text": "Please select a flow type for this transaction from the following options.

    Do note: if you select a flow-type for this transaction, this will override the default flow type for the entire activity (which is selected here), enabling you to choose a flow-type on a transaction-by-transaction basis, if needed." + "hover_text": "elements.activities.transactions.flow_type.flow_type.hover_text", + "help_text": "elements.activities.transactions.flow_type.flow_type.help_text" } }, "sub_elements": {} }, "finance_type": { "name": "finance_type", - "label": "finance type", + "label": "el_common.finance_type", "add_more": false, - "hover_text": "Optional element to override the top-level default-finance-type element on a transaction-by-transaction basis, if needed. For more information", - "help_text": "Finance type specifies the financial instrument that is being used. For example, financing is most commonly delivered as a grant or a loan. ", + "hover_text": "elements.activities.transactions.finance_type.hover_text", + "help_text": "elements.activities.transactions.finance_type.help_text", "attributes": { "finance_type": { "name": "finance_type", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/FinanceType.json", "required": false, "criteria": "", - "hover_text": "A code from the OECD DAC CRS “Type of finance” codelist. For more information", - "help_text": "Please select a finance type for this transaction from the following options.

    Do note: if you select a finance-type for this transaction, this will override the default finance type for the entire activity (which is selected here), enabling you to choose a finance-type on a transaction-by-transaction basis, if needed." + "hover_text": "elements.activities.transactions.finance_type.finance_type.hover_text", + "help_text": "elements.activities.transactions.finance_type.finance_type.help_text" } }, "sub_elements": {} }, "aid_type": { "name": "aid_type", - "label": "aid type", + "label": "el_common.aid_type", "add_more": false, "add_more_attributes": true, "wrapper_collection": false, - "hover_text": "Optional element to override the top-level default-aid-type element (debt relief, etc.) on a transaction-by-transaction basis if needed. For more information", - "help_text": "You can provide information about the type of aid that is being delivered. This is most commonly referred to as the aid modality and IATI recommends that an aid type from the OECD DAC codelist be selected for all activities. Examples from this codelist include: project-type interventions which provide support to a particular project and budget support which is a financial contribution to a recipient government’s budget. Project-type interventions is the most common aid type for NGOs and CSOs but many other options are found here.

    If your transaction is addressing a humanitarian event, you can provide specific information on the type of funds for it. This includes providing information on the level of earmarking of the transaction’s funds and if the transaction is providing funds through cash or vouchers. More information on publishing aid-types related to humanitarian transactions.

    Do note: if you select an aid-type for this transaction, this will override the default aid type for the entire activity (which is selected here), enabling you to choose an aid-type on a transaction-by-transaction basis, if needed.", + "hover_text": "elements.activities.transactions.aid_type.hover_text", + "help_text": "elements.activities.transactions.aid_type.help_text", "attributes": { "aid_type_vocabulary": { "name": "aid_type_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "choices": "Activity/AidTypeVocabulary.json", "required": false, "criteria": "", - "hover_text": "A code for the vocabulary aid-type classifications. If omitted the AidType (OECD DAC) codelist is assumed. The code must be a valid value in the AidTypeVocabulary codelist. For more information", - "help_text": "Select a list that includes the aid-type list related to your transaction. You can choose to select one aid-type from more than one list.

    1 OECD DAC - IATI recommends that you select this list which has over 20 options to choose from. Then, in addition you can select an option from another list

    2 Earmarking Category - select this list to categorise how flexible humanitarian funding is. There are 4 earmarking categories. Understand more about the categories in Annex 1

    3 Earmarking Modality - use this list to choose the specific earmarking modality to describe your activity’s humanitarian funding. All earmarking modality options are listed in Annex 1

    4 Cash and Voucher Modalities - select this list to specify if your transaction is responding to a humanitarian event by providing cash and voucher assistance. More information." + "hover_text": "elements.activities.transactions.aid_type.aid_type_vocabulary.hover_text", + "help_text": "elements.activities.transactions.aid_type.aid_type_vocabulary.help_text" }, "aid_type_code": { "name": "aid_type_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/AidType.json", "required": false, "criteria": "", - "hover_text": "A code from the specified vocabulary. For more information", - "help_text": "Select the aid-type related to your transaction.", + "hover_text": "elements.activities.transactions.aid_type.earmarking_category.hover_text", + "help_text": "elements.activities.transactions.aid_type.aid_type_code.help_text", "parent": { "name": "aid_type_vocabulary", - "value": ["1"] + "value": [ + "1" + ] } }, "earmarking_category": { "name": "earmarking_category", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/EarmarkingCategory.json", "required": false, "criteria": "", "hidden": true, - "hover_text": "A code from the specified vocabulary. For more information", + "hover_text": "elements.activities.transactions.aid_type.earmarking_category.hover_text", "help_text": "", "parent": { "name": "aid_type_vocabulary", - "value": ["2"] + "value": [ + "2" + ] } }, "earmarking_modality": { "name": "earmarking_modality", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/EarmarkingModality.json", "required": false, "criteria": "", "hidden": true, - "hover_text": "A code from the specified vocabulary.
    For more information", + "hover_text": "elements.activities.transactions.cash_and_voucher_modalities.hover_text", "help_text": "", "parent": { "name": "aid_type_vocabulary", - "value": ["3"] + "value": [ + "3" + ] } }, "cash_and_voucher_modalities": { - "label": "code", + "label": "el_common.code", "name": "cash_and_voucher_modalities", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/CashandVoucherModalities.json", "required": false, "criteria": "", "hidden": true, - "hover_text": "A code from the specified vocabulary.
    For more information", + "hover_text": "elements.activities.transactions.cash_and_voucher_modalities.hover_text", "help_text": "", "parent": { "name": "aid_type_vocabulary", - "value": ["4"] + "value": [ + "4" + ] } } }, @@ -4985,21 +5076,21 @@ }, "tied_status": { "name": "tied_status", - "label": "tied status", + "label": "el_common.tied_status", "add_more": false, - "hover_text": "Optional element to override the top-level default-tied-status element on a transaction-by-transaction basis if needed. For more information", - "help_text": "You can state the tied status of this transaction. Here you can specify if funds are tied - where they must be spent on goods or services procured from a particular country (e.g. donor country) or group of countries. Or if funds are untied, this is where the recipient organisation is allowed to procure from any country.

    Do note: if you select a tied status for this transaction, this will override the default tied status for the entire activity (which is selected here), enabling you to choose a tied status on a transaction-by-transaction basis, if needed.", + "hover_text": "elements.activities.transactions.tied_status.hover_text", + "help_text": "elements.activities.transactions.tied_status.help_text", "attributes": { "tied_status_code": { "name": "tied_status_code", - "label": "code", + "label": "el_common.code", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "choices": "Activity/TiedStatus.json", "required": false, "criteria": "", - "hover_text": "An IATI code interpreting the usage of Columns 36-38 of the CRS++ reporting format. (Amount tied, Amount partially untied, Amount tied). For more information", - "help_text": "Select a default-tied-status, if applicable to your transaction. Descriptions of all options. Otherwise leave blank." + "hover_text": "elements.activities.transactions.tied_status_code.hover_text", + "help_text": "elements.activities.transactions.tied_status_code.help_text" } }, "sub_elements": {} diff --git a/app/IATI/Data/organizationElementJsonSchema.json b/app/IATI/Data/organizationElementJsonSchema.json index 008aeed024..a5222bd0c4 100644 --- a/app/IATI/Data/organizationElementJsonSchema.json +++ b/app/IATI/Data/organizationElementJsonSchema.json @@ -1,58 +1,58 @@ { "organisation_identifier": { "name": "organisation_identifier", - "label": "organisation-identifier", + "label": "el_common.organisation_identifier", "criteria": "mandatory", - "hover_text": "The Organisation Identifier is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier.
    For more information", + "hover_text": "elements.organisation.organisation_identifier.hover_text", "help_text": "", "attributes": { "organization_country": { "name": "organization_country", - "label": "Country", + "label": "el_common.country", "type": "select", "choices": "Activity/Country.json", "required": false, "criteria": "", - "hover_text": "Select the location of your organisation.", - "help_text": "Provide the country where your organisation is located." + "hover_text": "elements.organisation.organisation_identifier.organization_country.hover_text", + "help_text": "elements.organisation.organisation_identifier.organization_country.help_text" }, "organization_registration_agency": { "name": "organization_registration_agency", - "label": "Organisation Registration Agency", + "label": "el_common.organisation_registration_agency", "type": "select", "choices": "Organization/OrganizationRegistrationAgency.json", "required": true, "criteria": "mandatory", - "hover_text": "Select the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org", - "help_text": "Provide the name of the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org." + "hover_text": "elements.organisation.organisation_identifier.organization_registration_agency.hover_text", + "help_text": "elements.organisation.organisation_identifier.organization_registration_agency.help_text" }, "registration_number": { "name": "registration_number", - "label": "Registration Number", + "label": "el_common.registration_number", "type": "text", "required": true, "placeholder": "for e.g. 123456", "criteria": "mandatory", - "hover_text": "Provide the registration number for your organisation that has been provided by the organisation registration agency. If you do not know this please email support@iatistandard.org", - "help_text": "Provide the registration number for your organisation that has been provided by the registration agency named above. If you do not know this information please email support@iatistandard.org." + "hover_text": "elements.organisation.organisation_identifier.registration_number.hover_text", + "help_text": "elements.organisation.organisation_identifier.registration_number.help_text" }, "iati-activity-identifier": { "name": "organisation_identifier", - "label": "organisation-identifier", + "label": "el_common.organisation_identifier", "type": "text", "required": true, "criteria": "mandatory", - "hover_text": "The Organisation Identifier is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier. For more information", - "help_text": "The Organisation Identifier (Org-ID) is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier." + "hover_text": "elements.organisation.organisation_identifier.iati-activity-identifier.hover_text", + "help_text": "elements.organisation.organisation_identifier.iati-activity-identifier.help_text" } }, "sub_elements": {} }, "name": { "name": "name", - "label": "name", + "label": "el_common.name", "multiple": false, - "hover_text": "The human-readable name of the organisation.", + "hover_text": "elements.organisation.name.hover_text", "show_info_in_title": true, "attributes": {}, "sub_elements": { @@ -64,23 +64,23 @@ "criteria": "mandatory", "element_criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Type the name of your organisation.", + "hover_text": "elements.organisation.name.narrative.hover_text", + "help_text": "elements.organisation.name.narrative.help_text", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language that you have provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.name.language.hover_text", + "help_text": "elements.organisation.name.language.help_text" } }, "sub_elements": {} @@ -90,53 +90,53 @@ "reporting_org": { "name": "reporting_org", "label": "reporting organisation", - "hover_text": "The organisation issuing the report. May be a primary source (reporting on its own activity as donor, implementing agency, etc) or a secondary source (reporting on the activities of another organisation).For more information", - "help_text": "You need to specify which organisation is publishing the file, and which organisation the data is about. In most cases, the publishing organisation is publishing data about itself.Further guidance", + "hover_text": "elements.organisation.reporting_org.hover_text", + "help_text": "elements.organisation.reporting_org.help_text", "add_more": false, "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": true, "criteria": "mandatory", - "hover_text": "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber}.
    For more information", - "help_text": "Provide the IATI Organisation Identifier of the organisation publishing the data. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance. " + "hover_text": "elements.organisation.reporting_org.reference.hover_text", + "help_text": "elements.organisation.reporting_org.reference.help_text" }, "type": { "name": "type", - "label": "type", + "label": "el_common.type", "type": "select", "multiSelect": false, "choices": "Organization/OrganizationType.json", - "placeholder": "Select type", + "placeholder": "el_common.select_type", "required": true, "criteria": "mandatory", - "hover_text": "The type of organisation issuing the report.For more information", - "help_text": "Select the type that best describes the organisation publishing the data.Information on all organisation types." + "hover_text": "elements.organisation.reporting_org.type.hover_text", + "help_text": "elements.organisation.reporting_org.type.help_text" }, "secondary_reporter": { "name": "secondary_reporter", - "label": "secondary-reporter", + "label": "el_common.secondary_reporter", "type": "select", "choices": { "1": "Yes", "0": "No" }, - "placeholder": "Select secondary-reporter", + "placeholder": "el_common.select_secondary_reporter", "required": false, "criteria": "", - "hover_text": "A flag indicating that the reporting organisation of this activity is acting as a secondary reporter. A secondary reporter is one that reproduces data on the activities of an organisation for which it is not directly responsible.For more information", - "help_text": "Are you reproducing the data reported by another organisation? If so, your organisation is a ‘secondary reporter’ and you should select 'Yes’. If you are reporting your own organisation’s data, select ‘No’.

    Please note: you are not a secondary reporter if your organisation is officially assigned as a proxy to report IATI data on behalf of another organisation." + "hover_text": "elements.organisation.reporting_org.secondary_reporter.hover_text", + "help_text": "elements.organisation.reporting_org.secondary_reporter.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "element_criteria": "mandatory", @@ -144,20 +144,20 @@ "attr": { "row": 4 }, - "hover_text": "The text in this element must be of type xsd:string. This element must occur at least once (within each parent element). For more information", - "help_text": "If you are reporting another organisation’s data, provide their name.", + "hover_text": "elements.organisation.reporting_org.narrative.hover_text", + "help_text": "elements.organisation.reporting_org.narrative.help_text", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", "language": "Select language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", - "help_text": "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.reporting_org.language.hover_text", + "help_text": "el_common.your_default_language_assumed_no_that" } }, "sub_elements": {} @@ -166,77 +166,77 @@ }, "total_budget": { "name": "total_budget", - "label": "total budget", + "label": "el_common.total_budget", "add_more": true, - "hover_text": "The total-budget element allows for the reporting of the organisation’s own budget. The recommendation is that, where and when possible, the organisation’s total annual planned budget for each of the next three years is reported.For more information", - "help_text": "Provide your organisation’s total expected development and humanitarian spend for the current and (where possible) following three years. Each total budget that you provide must span a period of no more than 12 months, and preferably aligned with your organisation’s fiscal year.

    Budgets can also be published for periods of less than one year, for example, into quarters. The time periods of the budgets should not overlap.Further guidance.", + "hover_text": "elements.organisation.total_budget.hover_text", + "help_text": "elements.organisation.total_budget.help_text", "attributes": { "status": { "name": "total_budget_status", - "label": "status", + "label": "el_common.status", "type": "select", "multiselect": false, "choices": "Activity/BudgetStatus.json", "required": false, "criteria": "", - "hover_text": "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", - "help_text": "Please select a status that best describes this budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is selected, the budget is assumed to be indicative." + "hover_text": "elements.organisation.total_budget.status.hover_text", + "help_text": "elements.organisation.total_budget.status.help_text" } }, "sub_elements": { "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The start of the budget period.For more information", + "hover_text": "elements.organisation.total_budget.period_start.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.For more information", - "help_text": "Provide the start date of the budget period." + "hover_text": "elements.organisation.total_budget.period_start.date.hover_text", + "help_text": "el_common.provide_the_start_of_budget_period " } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The end of the period (which must not be greater than one year).For more information", + "hover_text": "elements.organisation.total_budget.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.For more information", - "help_text": "Provide the end date of the budget period." + "hover_text": "elements.organisation.total_budget.period_end.date.hover_text", + "help_text": "el_common.provide_the_end_of_budget_period" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The total value of the organisation’s aid budget for this period. For more information", - "help_text": "Provide the total finance for this budget.", + "hover_text": "elements.organisation.total_budget.value.hover_text", + "help_text": "elements.organisation.total_budget.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -244,24 +244,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified.For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.total_budget.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.

    This attribute is required. For more information", + "hover_text": "elements.organisation.total_budget.value.value_date.hover_text", "help_text": "" } }, @@ -269,35 +269,35 @@ }, "budget_line": { "name": "budget_line", - "label": "budget line", + "label": "el_common.budget_line", "add_more": true, - "hover_text": "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", - "help_text": "You can provide further budget information in budget lines. Budget lines allow the total budget to be broken down, for example into different programmes happening in the same year.

    Do note: The sum of each budget line does not have to equal the value of the total budget. Further guidance.", + "hover_text": "elements.organisation.total_budget.budget_line.hover_text", + "help_text": "elements.organisation.total_budget.budget_line.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", - "help_text": "You can provide a reference that you use to identify this budget line in your organisation’s financial reporting system." + "hover_text": "el_common.an_internal_reference", + "help_text": "elements.organisation.total_budget.budget_line.reference.help_text" } }, "sub_elements": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, - "hover_text": "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", - "help_text": "Provide the total finance for this budget line.", + "hover_text": "elements.organisation.total_budget.budget_line.value.hover_text", + "help_text": "elements.organisation.total_budget.budget_line.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -305,24 +305,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", "required": true, "criteria": "mandatory", - "placeholder": "Select currency", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount.For more information", - "help_text": "Select the currency that you have provided the value in." + "placeholder": "el_common.select_currency", + "hover_text": "elements.organisation.total_budget.budget_line.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.For more information", + "hover_text": "elements.organisation.total_budget.budget_line.value.value_date.hover_text", "help_text": "" } }, @@ -330,29 +330,29 @@ }, "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a description for this budget line.", + "hover_text": "el_common.the_free_text_name_link_5", + "help_text": "el_common.provide_a_description_for_budget_line", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed" + "hover_text": "el_common.a_code_specifying_text_link_6", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -363,70 +363,70 @@ }, "recipient_org_budget": { "name": "recipient_org_budget", - "label": "recipient organisation budget", + "label": "el_common.recipient_organisation_budget", "add_more": true, - "hover_text": "The recipient-org-budget element allows for the reporting of forward looking budgets for each institution which receives core funding from the reporting organisation. For more information", - "help_text": "If your organisation will provide core funding to a recipient organisation(s), please publish information on this budget here. Further guidance.

    Where possible, you should provide annual planned budgets for each recipient organisation for each of the next three financial years.", + "hover_text": "elements.organisation.recipient_org_budget.hover_text", + "help_text": "elements.organisation.recipient_org_budget.help_text", "attributes": { "status": { "name": "status", - "label": "status", + "label": "el_common.status", "type": "select", "multiselect": false, "choices": "Activity/BudgetStatus.json", - "placeholder": "Select status", + "placeholder": "el_common.select_status", "required": false, "criteria": "", - "hover_text": "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", - "help_text": "Please select a status that best describes this recipient organisation budget:

    (1) indicative - a non-binding estimate for the described budget line.

    (2) committed - a binding agreement for the described budget line.

    If no status is selected, the budget is assumed to be indicative." + "hover_text": "elements.organisation.recipient_org_budget.status.hover_text", + "help_text": "elements.organisation.recipient_org_budget.status.help_text" } }, "sub_elements": { "recipient_org": { "name": "recipient_org", - "label": "recipient organisation", + "label": "el_common.recipient_organisation", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The organisation that will receive the funds. For more information", - "help_text": "Provide information about the organisation who will receive the funds.", + "hover_text": "elements.organisation.recipient_org_budget.recipient_org.hover_text", + "help_text": "elements.organisation.recipient_org_budget.recipient_org.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "The organisation that will receive the funds.For more information", - "help_text": "Please type the recipient organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If you cannot provide the Organisation Identifier then you MUST provide the name of the organisation below." + "hover_text": "elements.organisation.recipient_org_budget.recipient_org.reference.hover_text", + "help_text": "elements.organisation.recipient_org_budget.recipient_org.reference.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The name of the organisation. This can be repeated in multiple languages.For more information", - "help_text": "Type the name of the recipient organisation.", + "hover_text": "elements.organisation.recipient_org_budget.recipient_org.narrative.hover_text", + "help_text": "elements.organisation.recipient_org_budget.recipient_org.narrative.help_text", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.recipient_org_budget.recipient_org.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -435,56 +435,56 @@ }, "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "add_more": false, "element_criteria": "mandatory", - "hover_text": "This element must occur once and only once (within each parent element). For more information", + "hover_text": "elements.organisation.recipient_org_budget.period_start.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date.For more information", - "help_text": "Provide the start date of the budget period." + "hover_text": "elements.organisation.recipient_org_budget.period_start.date.hover_text", + "help_text": "el_common.provide_the_start_of_budget_period " } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The end of the period (which must not be greater than one year).For more information", + "hover_text": "elements.organisation.recipient_org_budget.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date.For more information", - "help_text": "Provide the end date of the budget period." + "hover_text": "elements.organisation.recipient_org_budget.period_end.date.hover_text", + "help_text": "el_common.provide_the_end_of_budget_period" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The total value of the money budgeted to be disbursed to the specified recipient organisation during this time period. For more information", + "hover_text": "elements.organisation.recipient_org_budget.value.hover_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -492,24 +492,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.recipient_org_budget.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions. This attribute is required. For more information", + "hover_text": "elements.organisation.recipient_org_budget.value.value_date.hover_text", "help_text": "" } }, @@ -517,34 +517,34 @@ }, "budget_line": { "name": "budget_line", - "label": "budget line", + "label": "el_common.budget_line", "add_more": true, - "hover_text": "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative.For more information", - "help_text": "You can provide a breakdown of the recipient organisation’s budget into budget lines.

    Do note: The sum of each budget line does not have to equal the total value of the recipient organisation budget.Further guidance.", + "hover_text": "elements.organisation.recipient_org_budget.budget_line.hover_text", + "help_text": "elements.organisation.recipient_org_budget.budget_line.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", - "help_text": "You can provide a reference that you use to identify this budget line in your organisation’s internal financial management system." + "hover_text": "el_common.an_internal_reference", + "help_text": "el_common.you_can_provide_a_reference" } }, "sub_elements": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, - "hover_text": "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", + "hover_text": "elements.organisation.recipient_org_budget.budget_line.value.hover_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -552,24 +552,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.recipient_org_budget.budget_line.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.For more information", + "hover_text": "elements.organisation.recipient_org_budget.budget_line.value.value_date.hover_text", "help_text": "" } }, @@ -577,29 +577,29 @@ }, "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a description for this budget line.", + "hover_text": "el_common.the_free_text_name_link_5", + "help_text": "el_common.provide_a_description_for_budget_line", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_6", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -610,105 +610,105 @@ }, "recipient_region_budget": { "name": "recipient_region_budget", - "label": "recipient region budget", + "label": "el_common.recipient_region_budget", "add_more": true, - "hover_text": "The recipient-region-budget element allows for the reporting of forward looking budgets where the organisation maintains region-wide, rather than or in addition to country-specific budgets.For more information", - "help_text": "IATI strongly encourages organisations to break down your total budget into smaller budgets for the recipient countries or recipient regions in which you operate.

    If you provide a recipient region or country budget(s), you do not need to use the same periods, and these budgets do not have to add up to your organisation’s total budget.

    If you want to provide a recipient region budget, it must NOT be an aggregation of recipient country budgets. For example, if you publish a recipient country budget for Uganda for USD 100,000 and a budget for Kenya of USD 100,000 for the next year, then you should NOT publish a recipient region budget for Africa of USD 200,000 for the next year.", + "hover_text": "elements.organisation.recipient_region_budget.hover_text", + "help_text": "elements.organisation.recipient_region_budget.help_text", "attributes": { "status": { "name": "status", - "label": "status", + "label": "el_common.status", "type": "select", "multiselect": false, "choices": "Activity/BudgetStatus.json", - "placeholder": "Select status", + "placeholder": "el_common.select_status", "required": true, "criteria": "mandatory", - "hover_text": "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", - "help_text": "Please select a status that best describes this recipient region budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is present, the budget is assumed to be indicative." + "hover_text": "elements.organisation.recipient_region_budget.status.hover_text", + "help_text": "elements.organisation.recipient_region_budget.status.help_text" } }, "sub_elements": { "recipient_region": { "name": "recipient_region", - "label": "recipient region", + "label": "el_common.recipient_region", "criteria": "mandatory", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The supranational geographic region where funds have been allocated.For more information", + "hover_text": "elements.organisation.recipient_region_budget.recipient_region.hover_text", "attributes": { "vocabulary": { "name": "region_vocabulary", - "label": "vocabulary", + "label": "el_common.vocabulary", "type": "select", "multiselect": false, "choices": "Activity/RegionVocabulary.json", - "placeholder": "Select vocabulary", + "placeholder": "el_common.select_vocabulary", "required": false, "criteria": "", - "hover_text": "An IATI code for the vocabulary from which the region code is drawn. If it is not present, code 1 (‘OECD DAC’) is assumed. For more information", - "help_text": "There are two lists of regions; the OECD DAC and UN region code lists. Please select one. IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined.

    If you do not choose an option, then the code list 'OECD DAC' is assumed." + "hover_text": "elements.organisation.recipient_region_budget.recipient_region.vocabulary.hover_text", + "help_text": "elements.organisation.recipient_region_budget.recipient_region.vocabulary.help_text" }, "oecd_region_code": { "name": "region_code", - "label": "code", + "label": "el_common.code", "type": "select", "multiselect": false, "choices": "Activity/Region.json", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": false, "criteria": "", - "hover_text": "Either an OECD DAC, UN region code or (if code ‘99’ Reporting organisation is selected for recipient-region/@vocabulary) a code from your internal vocabulary. For more information", - "help_text": "Select the region benefitting from this budget." + "hover_text": "el_common.either_an_orcs", + "help_text": "el_common.select_the_budget_region" }, "region_code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "text", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": false, "criteria": "", "hidden": true, - "hover_text": "Either an OECD DAC, UN region code or (if code ‘99’ Reporting organisation is selected for recipient-region/@vocabulary) a code from your internal vocabulary. For more information", - "help_text": "Select the region benefitting from this budget." + "hover_text": "el_common.either_an_orcs", + "help_text": "el_common.select_the_budget_region" }, "vocabulary-uri": { "name": "vocabulary_uri", - "label": "vocabulary-uri", + "label": "el_common.vocabulary_uri", "type": "text", - "placeholder": "Type vocabulary-uri", + "placeholder": "el_common.type_vocabulary_uri", "required": false, "criteria": "", - "hover_text": "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", - "help_text": "If you have selected the option: ‘Reporting Organisation’ please provide the URI where this internal list is defined." + "hover_text": "elements.organisation.recipient_region_budget.recipient_region.vocabulary-uri.hover_text", + "help_text": "el_common.if_you_have_selected" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Type the name of the region benefitting from the budget.", + "hover_text": "elements.organisation.recipient_region_budget.recipient_region.narrative.hover_text", + "help_text": "elements.organisation.recipient_region_budget.recipient_region.narrative.help_text", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": false, "criteria": "recommended", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.recipient_region_budget.recipient_region.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -717,57 +717,57 @@ }, "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The start of the budget period.This element must occur once and only once (within each parent element).For more information", + "hover_text": "elements.organisation.recipient_region_budget.period_start.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date. For more information", - "help_text": "Provide the start date of the recipient region budget period" + "hover_text": "elements.organisation.recipient_region_budget.period_start.date.hover_text", + "help_text": "elements.organisation.recipient_region_budget.period_start.date.help_text" } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The end of the period (which must not be greater than one year).For more information", + "hover_text": "elements.organisation.recipient_region_budget.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date. For more information", - "help_text": "Provide the end date of the recipient region budget period." + "hover_text": "elements.organisation.recipient_region_budget.period_end.date.hover_text", + "help_text": "elements.organisation.recipient_region_budget.period_end.date.help_text" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The total value of the money budgeted to be disbursed to the specified country during this time period. For more information", - "help_text": "Provide the amount of finance for this recipient region budget.", + "hover_text": "elements.organisation.recipient_region_budget.value.hover_text", + "help_text": "elements.organisation.recipient_region_budget.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -775,24 +775,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "el_common.a_three_letter_iso", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions. This attribute is required. For more information", + "hover_text": "elements.organisation.recipient_region_budget.value.value_date.hover_text", "help_text": "" } }, @@ -800,35 +800,35 @@ }, "budget_line": { "name": "budget_line", - "label": "budget line", + "label": "el_common.budget_line", "add_more": true, - "hover_text": "A breakdown of the recipient country’s budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", - "help_text": "You can provide further information about this recipient region budget in budget lines. Budget lines allow the recipient region budget to be broken down, for example into different projects happening in a given year.

    Do note: The sum of each budget line does not have to equal the total value of the recipient region budget.", + "hover_text": "elements.organisation.recipient_region_budget.budget_line.hover_text", + "help_text": "elements.organisation.recipient_region_budget.budget_line.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", - "help_text": "You can provide a reference that you use to identify this budget line in your organisation’s internal financial management system." + "hover_text": "elements.organisation.recipient_region_budget.budget_line.reference.hover_text", + "help_text": "el_common.you_can_provide_a_reference" } }, "sub_elements": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, - "hover_text": "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", - "help_text": "Provide the amount of finance for this budget line.", + "hover_text": "elements.organisation.recipient_region_budget.budget_line.value.hover_text", + "help_text": "el_common.provide_the_amount_of_finance", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -836,24 +836,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.recipient_region_budget.budget_line.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions. For more information", + "hover_text": "elements.organisation.recipient_region_budget.budget_line.value.value_date.hover_text", "help_text": "" } }, @@ -861,29 +861,29 @@ }, "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a description for this budget line.", + "hover_text": "el_common.the_free_text_name_link_5", + "help_text": "el_common.provide_a_description_for_budget_line", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_6", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -894,71 +894,71 @@ }, "recipient_country_budget": { "name": "recipient_country_budget", - "label": "recipient country budget", + "label": "el_common.recipient_country_budget", "add_more": true, - "hover_text": "The recipient-country-budget element allows for the reporting of forward looking budgets for each country in which the organisation operates. For more information", - "help_text": "You can provide your organisation’s budget(s) according to its recipient country. You do not need to use the same periods, and these budgets do not have to add up to your organisation’s total budget.

    If your organisation maintains country-wide budgets please provide them here.", + "hover_text": "elements.organisation.recipient_country_budget.hover_text", + "help_text": "elements.organisation.recipient_country_budget.help_text", "attributes": { "status": { "name": "status", - "label": "status", + "label": "el_common.status", "type": "select", "multiselect": false, "choices": "Activity/BudgetStatus.json", - "placeholder": "Select status", + "placeholder": "el_common.select_status", "required": false, "criteria": "", - "hover_text": "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", - "help_text": "Please select a status that best describes this recipient country budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is selected, the budget is assumed to be indicative." + "hover_text": "elements.organisation.recipient_country_budget.status.hover_text", + "help_text": "elements.organisation.recipient_country_budget.status.help_text" } }, "sub_elements": { "recipient_country": { "name": "recipient_country", - "label": "recipient country", + "label": "el_common.recipient_country", "add_more": true, "element_criteria": "mandatory", - "hover_text": "The recipient country. For more information", + "hover_text": "elements.organisation.recipient_country_budget.recipient_country.hover_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", "multiselect": false, "choices": "Activity/Country.json", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "ISO 3166-1 alpha-2 code for the country.This attribute is required. For more information", - "help_text": "Select the recipient country for this budget." + "hover_text": "elements.organisation.recipient_country_budget.recipient_country.code.hover_text", + "help_text": "elements.organisation.recipient_country_budget.recipient_country.code.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": false, "criteria": "", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Type the name for the recipient country.", + "hover_text": "elements.organisation.recipient_country_budget.recipient_country.narrative.hover_text", + "help_text": "elements.organisation.recipient_country_budget.recipient_country.narrative.help_text", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": false, "criteria": "", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.recipient_country_budget.recipient_country.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -967,57 +967,57 @@ }, "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The start of the budget period.This element must occur once and only once (within each parent element). For more information", + "hover_text": "elements.organisation.recipient_country_budget.period_start.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date. For more information", - "help_text": "Provide the start date of the recipient country budget period." + "hover_text": "elements.organisation.recipient_country_budget.period_start.date.hover_text", + "help_text": "elements.organisation.recipient_country_budget.period_start.date.help_text" } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The end of the period (which must not be greater than one year). For more information", + "hover_text": "elements.organisation.recipient_country_budget.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date. For more information", - "help_text": "Provide the end date of the recipient country budget period." + "hover_text": "elements.organisation.recipient_country_budget.period_end.date.hover_text", + "help_text": "elements.organisation.recipient_country_budget.period_end.date.help_text" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The total value of the money budgeted to be disbursed to the specified recipient organisation during this time period. For more information", - "help_text": "Provide the amount of finance for this budget.", + "hover_text": "elements.organisation.recipient_country_budget.value.hover_text", + "help_text": "elements.organisation.recipient_country_budget.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -1025,24 +1025,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "el_common.a_three_letter_iso", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.

    This attribute is required. For more information", + "hover_text": "elements.organisation.recipient_country_budget.value.value_date.hover_text", "help_text": "" } }, @@ -1050,35 +1050,35 @@ }, "budget_line": { "name": "budget_line", - "label": "budget line", + "label": "el_common.budget_line", "add_more": true, - "hover_text": "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", - "help_text": "You can provide further information about this recipient country budget in budget lines. Budget lines allow the recipient country budget to be broken down, for example into different projects happening in a given year.

    Do note: The sum of each budget line does not have to equal the total value of the recipient country budget.", + "hover_text": "elements.organisation.recipient_country_budget.budget_line.hover_text", + "help_text": "elements.organisation.recipient_country_budget.budget_line.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", - "help_text": "You can provide a reference that you use to identify this budget line in your organisation’s internal financial management system." + "hover_text": "elements.organisation.recipient_country_budget.budget_line.reference.hover_text", + "help_text": "el_common.you_can_provide_a_reference" } }, "sub_elements": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, - "hover_text": "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", - "help_text": "Provide the amount of finance for this budget line.", + "hover_text": "elements.organisation.recipient_country_budget.budget_line.value.hover_text", + "help_text": "el_common.provide_the_amount_of_finance", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -1086,24 +1086,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount.For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.recipient_country_budget.budget_line.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions. For more information", + "hover_text": "elements.organisation.recipient_country_budget.budget_line.value.value_date.hover_text", "help_text": "" } }, @@ -1111,29 +1111,29 @@ }, "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a description for this budget line.", + "hover_text": "elements.organisation.recipient_country_budget.budget_line.narrative.hover_text", + "help_text": "el_common.provide_a_description_for_budget_line", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "elements.organisation.recipient_country_budget.budget_line.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -1144,65 +1144,65 @@ }, "total_expenditure": { "name": "total_expenditure", - "label": "total expenditure", + "label": "el_common.total_expenditure", "add_more": true, - "hover_text": "The total-expenditure element allows for the reporting of the organisation’s international development expenditure. For more information", - "help_text": "IATI recommends that your organisation reports its past spending on its humanitarian and development work. This is known as ‘total expenditure’ and IATI recommends, where possible, the organisation reports its total expenditure for each of the past 3 years.

    An expenditure period must not be longer than one year.", + "hover_text": "elements.organisation.total_expenditure.hover_text", + "help_text": "elements.organisation.total_expenditure.help_text", "attributes": {}, "sub_elements": { "period_start": { "name": "period_start", - "label": "period-start", + "label": "el_common.period_start", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The start of the budget period.For more information", + "hover_text": "elements.organisation.total_expenditure.period_start.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.This value must be of type xsd:date. For more information", - "help_text": "Provide the start date of the expenditure period." + "hover_text": "elements.organisation.total_expenditure.period_start.date.hover_text", + "help_text": "elements.organisation.total_expenditure.period_start.date.help_text" } }, "sub_elements": {} }, "period_end": { "name": "period_end", - "label": "period-end", + "label": "el_common.period_end", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The end of the period (which must not be greater than one year). For more information", + "hover_text": "elements.organisation.total_expenditure.period_end.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required.This value must be of type xsd:date. For more information", - "help_text": "Provide the end date of the expenditure period." + "hover_text": "elements.organisation.total_expenditure.period_end.date.hover_text", + "help_text": "elements.organisation.total_expenditure.period_end.date.help_text" } }, "sub_elements": {} }, "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, "element_criteria": "mandatory", - "hover_text": "The total value of the organisation’s aid expenditure for this period. For more information", - "help_text": "Provide the amount of finance for this expenditure.", + "hover_text": "elements.organisation.total_expenditure.value.hover_text", + "help_text": "elements.organisation.total_expenditure.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -1210,24 +1210,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount. For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.total_expenditure.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions. For more information", + "hover_text": "elements.organisation.total_expenditure.value.value_date.hover_text", "help_text": "" } }, @@ -1235,35 +1235,35 @@ }, "expense_line": { "name": "expense_line", - "label": "expense line", + "label": "el_common.expense_line", "add_more": true, - "hover_text": "A breakdown of the total expenditure into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", - "help_text": "You can provide further information about your organisation’s expenditure in expense line(s). Expense lines allow the expenditure to be broken down into smaller expenses.

    Do note: The sum of each expense line does not have to equal the total value of the expenditure.", + "hover_text": "elements.organisation.total_expenditure.expense_line.hover_text", + "help_text": "elements.organisation.total_expenditure.expense_line.help_text", "attributes": { "ref": { "name": "ref", - "label": "reference", + "label": "el_common.reference", "type": "text", - "placeholder": "Type reference", + "placeholder": "el_common.type_reference", "required": false, "criteria": "", - "hover_text": "An internal reference for this expenditure line taken from the reporting organisation’s own system. For more information", - "help_text": "You can provide a reference that you use to identify this expense line in your organisation’s internal financial management system." + "hover_text": "elements.organisation.total_expenditure.expense_line.reference.hover_text", + "help_text": "elements.organisation.total_expenditure.expense_line.reference.help_text" } }, "sub_elements": { "value": { "name": "value", - "label": "value", + "label": "el_common.value", "add_more": false, - "hover_text": "The expenditure sub-total. The definition of the sub-division is determined by iati-organisation/total-expenditure/expenditure-line/narrative. For more information", - "help_text": "Provide the amount of finance for this expense line.", + "hover_text": "elements.organisation.total_expenditure.expense_line.value.hover_text", + "help_text": "elements.organisation.total_expenditure.expense_line.value.help_text", "attributes": { "amount": { "name": "amount", - "label": "value", + "label": "el_common.value", "type": "text", - "placeholder": "Type value here", + "placeholder": "el_common.type_value_here", "required": true, "criteria": "mandatory", "hover_text": "", @@ -1271,24 +1271,24 @@ }, "currency": { "name": "currency", - "label": "currency", + "label": "el_common.currency", "type": "select", "multiselect": false, "choices": "Activity/Currency.json", - "placeholder": "Select currency", + "placeholder": "el_common.select_currency", "required": true, "criteria": "mandatory", - "hover_text": "A three letter ISO 4217 code for the original currency of the amount.For more information", - "help_text": "Select the currency that you have provided the value in." + "hover_text": "elements.organisation.total_expenditure.expense_line.value.currency.hover_text", + "help_text": "el_common.select_the_currency_that_you_provided" }, "value_date": { "name": "value_date", - "label": "value-date", + "label": "el_common.value_date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "The date to be used for determining the exchange rate for currency conversions.For more information", + "hover_text": "elements.organisation.total_expenditure.expense_line.value.value_date.hover_text", "help_text": "" } }, @@ -1296,29 +1296,29 @@ }, "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a description for this expense line.", + "hover_text": "elements.organisation.total_expenditure.expense_line.narrative.hover_text", + "help_text": "elements.organisation.total_expenditure.expense_line.narrative.help_text", "attr": { "row": 4 }, "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed" + "hover_text": "elements.organisation.total_expenditure.expense_line.language.hover_text", + "help_text": "el_common.select_the_language_of_text_in_narrative" } }, "sub_elements": {} @@ -1329,68 +1329,68 @@ }, "document_link": { "name": "document_link", - "label": "document-link", + "label": "el_common.document_link", "add_more": true, - "hover_text": "A link to an online, publicly accessible web page or document. For more information", - "help_text": "You can report further information about your organisation’s development of humanitarian programming by providing a publicly accessible link to a document or webpage. For example you could provide a link to your organisation’s annual report or a work plan for a particular country.

    If documents are available in other languages and stored separately, please provide them by creating additional document elements.Further guidance.", + "hover_text": "elements.organisation.document_link.hover_text", + "help_text": "elements.organisation.document_link.help_text", "attributes": { "url": { "name": "url", - "label": "url", + "label": "el_common.url", "type": "text", - "placeholder": "Select url", + "placeholder": "el_common.select_url", "required": true, "criteria": "mandatory", - "hover_text": "The target URL of the external document, e.g. 'http://www.example.org/doc.odt'.For more information", - "help_text": "The URL must begin with either ‘http://’ or ‘https://’." + "hover_text": "elements.organisation.document_link.url.hover_text", + "help_text": "el_common.the_url_must_begin_with_either" }, "format": { "name": "format", - "label": "format", + "label": "el_common.format", "type": "select", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "multiselect": false, "choices": "Activity/FileFormat.json", "required": true, "criteria": "mandatory", - "hover_text": "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", - "help_text": "If you know the format of the document file, please type it using an option from this list." + "hover_text": "elements.organisation.document_link.format.hover_text", + "help_text": "elements.organisation.document_link.format.help_text" } }, "sub_elements": { "title": { "name": "title", - "label": "title", + "label": "el_common.title", "add_more": false, "element_criteria": "mandatory", - "hover_text": "A short, human-readable title. For more information", + "hover_text": "elements.organisation.document_link.title.hover_text", "attributes": {}, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short title for the document or webpage.", + "hover_text": "el_common.the_free_text_name_link_4", + "help_text": "el_common.provide_a_short_title_for_desc", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_5", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -1399,36 +1399,36 @@ }, "description": { "name": "description", - "label": "Description", + "label": "el_common.description", "add_more": false, "attributes": {}, - "hover_text": "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "hover_text": "elements.organisation.document_link.description.hover_text", "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Provide a short description of the document or webpage, including any instructions on where to find relevant information.", + "hover_text": "el_common.the_free_text_name_link_4", + "help_text": "el_common.provide_a_short_description_of_document", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_5", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} @@ -1437,116 +1437,116 @@ }, "category": { "name": "category", - "label": "Category", + "label": "el_common.category", "add_more": true, "element_criteria": "mandatory", "wrapper_collection": false, - "hover_text": "IATI Document Category Code. For more information", + "hover_text": "elements.organisation.document_link.category.hover_text", "help_text": "", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", "multiSelect": false, "choices": "Activity/DocumentCategory.json", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "An IATI code defining the category of the document. For more information", - "help_text": "You must select a category of the document or webpage that you have provided." + "hover_text": "elements.organisation.document_link.category.code.hover_text", + "help_text": "el_common.you_must_select_category" } }, "sub_elements": {} }, "language": { "name": "language", - "label": "Language", + "label": "el_common.language", "add_more": true, "wrapper_collection": false, - "hover_text": "The ISO 639-1 language code in which target document is written, e.g. “en”. Can be repeated to describe multi-lingual documents. For more information", + "hover_text": "elements.organisation.document_link.language.hover_text", "attributes": { "code": { "name": "language", - "label": "code", + "label": "el_common.code", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "ISO 639-1 language code. For more information", - "help_text": "Select the language of the document or webpage" + "hover_text": "elements.organisation.document_link.language.code.hover_text", + "help_text": "elements.organisation.document_link.language.code.help_text" } }, "sub_elements": {} }, "document_date": { "name": "document_date", - "label": "document date", + "label": "el_common.document_date", "add_more": false, - "hover_text": "The date of publication of the document that is being linked to. For more information", + "hover_text": "elements.organisation.document_link.document_date.hover_text", "attributes": { "date": { "name": "date", - "label": "date", + "label": "el_common.date", "type": "date", - "placeholder": "YYYY-MM-DD", + "placeholder": "el_common.yyyy_mm_dd", "required": true, "criteria": "mandatory", - "hover_text": "This attribute is required. This value must be of type xsd:date. For more information", - "help_text": "Provide the date of publication for the document or webpage, or provide the date that it was last updated." + "hover_text": "elements.organisation.document_link.document_date.date.hover_text", + "help_text": "el_common.provide_the_date_of_publication" } }, "sub_elements": {} }, "recipient_country": { "name": "recipient_country", - "label": "recipient country", + "label": "el_common.recipient_country", "criteria": "", "add_more": true, - "hover_text": "The recipient country that is the focus of the document. May be repeated for multiple countries. For more information", - "help_text": "If a recipient country is the focus of this document or webpage, please specify it here. You can state more than one country.", + "hover_text": "elements.organisation.document_link.recipient_country.hover_text", + "help_text": "elements.organisation.document_link.recipient_country.help_text", "attributes": { "code": { "name": "code", - "label": "code", + "label": "el_common.code", "type": "select", "multiselect": false, "choices": "Activity/Country.json", - "placeholder": "Select code", + "placeholder": "el_common.select_code", "required": true, "criteria": "mandatory", - "hover_text": "ISO 3166-1 alpha-2 code for the country. This attribute is required. For more information", - "help_text": "Select the recipient country that is the focus for this document or webpage." + "hover_text": "elements.organisation.document_link.recipient_country.code.hover_text", + "help_text": "elements.organisation.document_link.recipient_country.code.help_text" } }, "sub_elements": { "narrative": { "name": "narrative", - "label": "narrative", + "label": "el_common.narrative", "type": "textarea", - "placeholder": "Type narrative", + "placeholder": "el_common.type_narrative", "required": true, "criteria": "mandatory", "add_more": true, "attr": { "row": 4 }, - "hover_text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", - "help_text": "Type the name of the country that is the focus for this document or webpage.", + "hover_text": "el_common.the_free_text_name_link_4", + "help_text": "elements.organisation.document_link.recipient_country.narrative.help_text", "attributes": { "lang": { "name": "language", - "label": "language", + "label": "el_common.language", "type": "select", "multiSelect": false, "choices": "Activity/Language.json", - "placeholder": "Select language", + "placeholder": "el_common.select_language", "required": true, "criteria": "mandatory", - "hover_text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", - "help_text": "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + "hover_text": "el_common.a_code_specifying_text_link_5", + "help_text": "el_common.select_the_language_of_text_in_narrative_2" } }, "sub_elements": {} diff --git a/app/IATI/Elements/Builder/BaseFormCreator.php b/app/IATI/Elements/Builder/BaseFormCreator.php index adc4afd904..630dbf3f7c 100644 --- a/app/IATI/Elements/Builder/BaseFormCreator.php +++ b/app/IATI/Elements/Builder/BaseFormCreator.php @@ -60,7 +60,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'buttons' => [ 'clear' => [ - 'label' => 'Cancel', + 'label' => trans('buttons.cancel'), 'attr' => [ 'type' => 'anchor', 'class' => 'ghost-btn mr-8', @@ -69,7 +69,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'submit' => [ - 'label' => 'Save and Exit', + 'label' => trans('buttons.save_and_exit'), 'attr' => [ 'type' => 'submit', 'class' => 'primary-btn save-btn', diff --git a/app/IATI/Elements/Builder/MultilevelSubElementFormCreator.php b/app/IATI/Elements/Builder/MultilevelSubElementFormCreator.php index b72a33d244..13e46766e2 100644 --- a/app/IATI/Elements/Builder/MultilevelSubElementFormCreator.php +++ b/app/IATI/Elements/Builder/MultilevelSubElementFormCreator.php @@ -58,7 +58,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'buttons' => [ 'clear' => [ - 'label' => 'Cancel', + 'label' => trans('buttons.cancel'), 'attr' => [ 'type' => 'anchor', 'class' => 'ghost-btn mr-8', @@ -66,7 +66,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], ], 'submit' => [ - 'label' => 'Save and Exit', + 'label' => trans('buttons.save_and_exit'), 'attr' => [ 'type' => 'submit', 'class' => 'primary-btn save-btn', diff --git a/app/IATI/Elements/Builder/ParentCollectionFormCreator.php b/app/IATI/Elements/Builder/ParentCollectionFormCreator.php index 8b732743e6..47f45552b5 100644 --- a/app/IATI/Elements/Builder/ParentCollectionFormCreator.php +++ b/app/IATI/Elements/Builder/ParentCollectionFormCreator.php @@ -58,7 +58,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'buttons' => [ 'clear' => [ - 'label' => 'Cancel', + 'label' => trans('buttons.cancel'), 'attr' => [ 'type' => 'anchor', 'class' => 'ghost-btn mr-8', @@ -66,7 +66,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], ], 'submit' => [ - 'label' => 'Save and Exit', + 'label' => trans('buttons.save_and_exit'), 'attr' => [ 'type' => 'submit', 'class' => 'primary-btn save-btn', diff --git a/app/IATI/Elements/Builder/ResultElementFormCreator.php b/app/IATI/Elements/Builder/ResultElementFormCreator.php index 996988a9ca..e5d974d9d6 100644 --- a/app/IATI/Elements/Builder/ResultElementFormCreator.php +++ b/app/IATI/Elements/Builder/ResultElementFormCreator.php @@ -58,7 +58,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'buttons' => [ 'clear' => [ - 'label' => 'Cancel', + 'label' => trans('buttons.cancel'), 'attr' => [ 'type' => 'anchor', 'class' => 'ghost-btn mr-8', @@ -66,7 +66,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], ], 'submit' => [ - 'label' => 'Save and Exit', + 'label' => trans('buttons.save_and_exit'), 'attr' => [ 'type' => 'submit', 'class' => 'primary-btn save-btn', diff --git a/app/IATI/Elements/Builder/TransactionElementFormCreator.php b/app/IATI/Elements/Builder/TransactionElementFormCreator.php index fe9ec0ff9e..16346b12b4 100644 --- a/app/IATI/Elements/Builder/TransactionElementFormCreator.php +++ b/app/IATI/Elements/Builder/TransactionElementFormCreator.php @@ -58,7 +58,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], 'buttons' => [ 'clear' => [ - 'label' => 'Cancel', + 'label' => trans('buttons.cancel'), 'attr' => [ 'type' => 'anchor', 'class' => 'ghost-btn mr-8', @@ -66,7 +66,7 @@ public function editForm(array $model, $formData, $method, string $parent_url): ], ], 'submit' => [ - 'label' => 'Save and Exit', + 'label' => trans('buttons.save_and_exit'), 'attr' => [ 'type' => 'submit', 'class' => 'primary-btn save-btn', diff --git a/app/IATI/Elements/Forms/BaseForm.php b/app/IATI/Elements/Forms/BaseForm.php index 57f8d21b37..67395ac115 100644 --- a/app/IATI/Elements/Forms/BaseForm.php +++ b/app/IATI/Elements/Forms/BaseForm.php @@ -41,8 +41,8 @@ public function buildCollection($field): void 'data' => $field, 'label' => false, 'element_criteria' => Arr::get($field, 'element_criteria', ''), - 'hover_text' => Arr::get($field, 'hover_text', ''), - 'help_text' => Arr::get($field, 'help_text', ''), + 'hover_text' => trans(Arr::get($field, 'hover_text', '')), + 'help_text' => trans(Arr::get($field, 'help_text', '')), 'wrapper' => [ 'class' => 'wrapped-child-body', ], @@ -63,7 +63,7 @@ public function buildCollection($field): void if ((isset($field['add_more']) && $field['add_more']) || (isset($element['add_more_attributes']) && $element['add_more_attributes'])) { $this->add('add_to_collection_' . $field['name'], 'button', [ - 'label' => sprintf('Add additional %s', str_replace('_', ' ', $field['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $field['name'])), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral ', 'form_type' => $field['parent'] . '_' . $field['name'], @@ -86,8 +86,8 @@ public function buildCollection($field): void 'data' => $field, 'label' => false, 'element_criteria' => $field['element_criteria'] ?? '', - 'hover_text' => isset($field['name']) ? Arr::get($field, 'hover_text', '') : Arr::get($element, 'hover_text', ''), - 'help_text' => isset($field['name']) ? Arr::get($field, 'hover_text', '') : Arr::get($element, 'help_text', ''), + 'hover_text' => isset($field['name']) ? trans(Arr::get($field, 'hover_text', '')) : trans(Arr::get($element, 'hover_text', '')), + 'help_text' => isset($field['name']) ? trans(Arr::get($field, 'hover_text', '')) : trans(Arr::get($element, 'help_text', '')), 'wrapper' => [ 'class' => ((Arr::get($element, 'attributes', null) && isset($field['name']) && strtolower( $field['name'] @@ -112,7 +112,7 @@ public function buildCollection($field): void if ((isset($field['add_more']) && $field['add_more']) || Arr::get($element, 'add_more_attributes', false)) { $this->add('add_to_collection_' . $name, 'button', [ - 'label' => sprintf('add additional %s', str_replace('_', ' ', Arr::get($element, 'attributes', null) ? ($field['name'] ?? $name) : $element['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', Arr::get($element, 'attributes', null) ? ($field['name'] ?? $name) : $element['name'])), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral ', 'form_type' => !empty(Arr::get($this->getData(), 'name', null)) ? sprintf( @@ -230,7 +230,7 @@ public function buildField($field): void 'read_only', $field ) && $field['read_only'] == true) ? 'readonly' : false, - 'placeholder' => Arr::get($field, 'placeholder', ''), + 'placeholder' => trans(Arr::get($field, 'placeholder', '')), ], 'wrapper' => [ @@ -240,7 +240,7 @@ public function buildField($field): void if ($field['type'] === 'select') { $options['attr']['class'] = 'select2'; - $options['attr']['data-placeholder'] = Arr::get($field, 'placeholder', ''); + $options['attr']['data-placeholder'] = trans(Arr::get($field, 'placeholder', '')); $options['empty_value'] = $field['empty_value'] ?? 'Select a value'; $options['choices'] = $field['choices'] ? (is_string($field['choices']) ? ($this->getCodeList($field['choices'])) : $field['choices']) : false; $options['default_value'] = $field['default'] ?? ''; diff --git a/app/IATI/Elements/Forms/ParentCollectionForm.php b/app/IATI/Elements/Forms/ParentCollectionForm.php index 34debd79c1..f3aa0370fd 100644 --- a/app/IATI/Elements/Forms/ParentCollectionForm.php +++ b/app/IATI/Elements/Forms/ParentCollectionForm.php @@ -33,8 +33,8 @@ public function buildForm(): void 'data' => $this->data, 'label' => false, 'element_criteria' => $field['element_criteria'] ?? '', - 'hover_text' => Arr::get($field, 'hover_text', ''), - 'help_text' => Arr::get($field, 'help_text', ''), + 'hover_text' => trans(Arr::get($field, 'hover_text', '')), + 'help_text' => trans(Arr::get($field, 'help_text', '')), 'wrapper' => [ 'class' => 'multi-form relative', ], @@ -49,7 +49,7 @@ public function buildForm(): void if (Arr::get($field, 'add_more', false) || Arr::get($field, 'add_more_attributes', false)) { $this->add('add_to_collection', 'button', [ - 'label' => sprintf('add additional %s', str_replace('_', ' ', $field['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $field['name'])), 'attr' => [ 'icon' => true, 'class' => 'add_to_parent add_more button relative text-xs font-bold text-spring-50 text-bluecoral uppercase leading-normal -translate-y-1/2 pl-3.5', diff --git a/app/IATI/Elements/Forms/ResultElementForm.php b/app/IATI/Elements/Forms/ResultElementForm.php index b1d5db0cbf..25793e00ea 100644 --- a/app/IATI/Elements/Forms/ResultElementForm.php +++ b/app/IATI/Elements/Forms/ResultElementForm.php @@ -79,7 +79,7 @@ public function buildForm(): void if (Arr::get($sub_element, 'add_more', false) || Arr::get($sub_element, 'add_more_attributes', false)) { $this->add('add_to_collection_' . $sub_element['name'], 'button', [ 'label' => sprintf( - 'add additional %s', + trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $this->getData(sprintf('sub_elements.%s.name', $name))) ), 'attr' => [ diff --git a/app/IATI/Elements/Forms/SubElementForm.php b/app/IATI/Elements/Forms/SubElementForm.php index 0544c6cb2d..534248d48d 100644 --- a/app/IATI/Elements/Forms/SubElementForm.php +++ b/app/IATI/Elements/Forms/SubElementForm.php @@ -68,7 +68,7 @@ public function buildFields($field, $isAttribute = false): void 'multiple' => $field['multiple'] ?? false, 'attr' => [ 'class' => 'form__input border-0', - 'placeholder' => Arr::get($field, 'placeholder', ''), + 'placeholder' => trans(Arr::get($field, 'placeholder', '')), ], 'wrapper' => [ 'class' => 'form-field xl:basis-6/12', @@ -77,7 +77,7 @@ public function buildFields($field, $isAttribute = false): void if (array_key_exists('type', $field) && $field['type'] == 'select') { $options['attr']['class'] = 'select2'; - $options['attr']['data-placeholder'] = Arr::get($field, 'placeholder', ''); + $options['attr']['data-placeholder'] = trans(Arr::get($field, 'placeholder', '')); $options['empty_value'] = $field['empty_value'] ?? 'Select a value'; $options['choices'] = $field['choices'] ? (is_string($field['choices']) ? ($this->getCodeList($field['choices'])) : $field['choices']) : false; $options['default_value'] = $field['default'] ?? ''; diff --git a/app/IATI/Elements/Forms/TransactionElementForm.php b/app/IATI/Elements/Forms/TransactionElementForm.php index 32be52349a..256fb0e5a7 100644 --- a/app/IATI/Elements/Forms/TransactionElementForm.php +++ b/app/IATI/Elements/Forms/TransactionElementForm.php @@ -65,7 +65,7 @@ public function buildForm(): void if (Arr::get($sub_element, 'add_more', false) || Arr::get($sub_element, 'add_more_attributes', false)) { $this->add('add_to_collection_' . $sub_element['name'], 'button', [ - 'label' => sprintf('add additional %s', str_replace('_', ' ', $sub_element['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $sub_element['name'])), 'attr' => [ 'class' => 'add_to_parent add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral', 'form_type' => $sub_element['name'], diff --git a/app/IATI/Elements/Forms/WrapperCollection.php b/app/IATI/Elements/Forms/WrapperCollection.php index c10e7b27ce..22c448e15f 100644 --- a/app/IATI/Elements/Forms/WrapperCollection.php +++ b/app/IATI/Elements/Forms/WrapperCollection.php @@ -72,7 +72,7 @@ public function buildForm(): void if (isset($field['add_more']) && $field['add_more']) { $this->add('add_to_collection_' . $name, 'button', [ - 'label' => sprintf('Add additional %s', str_replace('_', ' ', $name)), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $name)), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral', 'form_type' => $data['parent'] . '_' . $data['name'] . '_' . $field['name'], @@ -107,7 +107,7 @@ public function buildFields($field): void 'multiple' => $field['multiple'] ?? false, 'attr' => [ 'class' => 'form__input border-0', - 'placeholder' => Arr::get($field, 'placeholder', ''), + 'placeholder' => trans(Arr::get($field, 'placeholder', '')), ], 'wrapper' => [ 'class' => 'form-field basis-auto w-full xl:min-w-[300px] xl:basis-6/12 sub-attribute', @@ -116,7 +116,7 @@ public function buildFields($field): void if (array_key_exists('type', $field) && $field['type'] == 'select') { $options['attr']['class'] = 'select2'; - $options['attr']['data-placeholder'] = Arr::get($field, 'placeholder', ''); + $options['attr']['data-placeholder'] = trans(Arr::get($field, 'placeholder', '')); $options['empty_value'] = $field['empty_value'] ?? 'Select a value'; $options['choices'] = $field['choices'] ? (is_string($field['choices']) ? ($this->getCodeList($field['choices'])) : $field['choices']) : false; $options['default_value'] = $field['default'] ?? ''; @@ -200,7 +200,7 @@ public function buildCollection($field): void if (isset($field['add_more']) && $field['add_more']) { $this->add('add_to_collection_' . $field['name'], 'button', [ - 'label' => sprintf('Add additional %s', str_replace('_', ' ', $field['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $field['name'])), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral ', 'form_type' => $field['name'], diff --git a/app/IATI/Elements/Forms/WrapperCollectionForm.php b/app/IATI/Elements/Forms/WrapperCollectionForm.php index f71f500406..86678e127f 100644 --- a/app/IATI/Elements/Forms/WrapperCollectionForm.php +++ b/app/IATI/Elements/Forms/WrapperCollectionForm.php @@ -75,7 +75,7 @@ public function buildForm(): void if (isset($field['add_more']) && $field['add_more']) { $this->add('add_to_collection_' . $name, 'button', [ - 'label' => sprintf('Add additional %s', str_replace('_', ' ', Arr::get($data, 'attributes', null) ? $field['name'] : $data['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', Arr::get($data, 'attributes', null) ? $field['name'] : $data['name'])), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral', 'form_type' => $data['parent'] . '_' . $data['name'] . '_' . $field['name'], @@ -118,7 +118,7 @@ public function buildFields($field): void 'multiple' => $field['multiple'] ?? false, 'attr' => [ 'class' => 'form__input border-0', - 'placeholder' => Arr::get($field, 'placeholder', ''), + 'placeholder' => trans(Arr::get($field, 'placeholder', '')), ], 'wrapper' => [ 'class' => 'form-field basis-auto w-full xl:min-w-[300px] xl:basis-6/12 sub-attribute', @@ -127,7 +127,7 @@ public function buildFields($field): void if (array_key_exists('type', $field) && $field['type'] == 'select') { $options['attr']['class'] = 'select2'; - $options['attr']['data-placeholder'] = Arr::get($field, 'placeholder', ''); + $options['attr']['data-placeholder'] = trans(Arr::get($field, 'placeholder', '')); $options['empty_value'] = $field['empty_value'] ?? 'Select a value'; $options['choices'] = $field['choices'] ? (is_string($field['choices']) ? ($this->getCodeList($field['choices'])) : $field['choices']) : false; $options['default_value'] = $field['default'] ?? ''; @@ -211,7 +211,7 @@ public function buildCollection($field): void if (isset($field['add_more']) && $field['add_more']) { $this->add('add_to_collection_' . $field['name'], 'button', [ - 'label' => sprintf('Add additional %s', str_replace('_', ' ', $field['name'])), + 'label' => sprintf(trans('buttons.add_additional') . ' %s', str_replace('_', ' ', $field['name'])), 'attr' => [ 'class' => 'add_to_collection add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-spring-50 text-bluecoral ', 'form_type' => $field['name'], diff --git a/app/IATI/Models/User/User.php b/app/IATI/Models/User/User.php index 19c3075049..55801a8aa2 100644 --- a/app/IATI/Models/User/User.php +++ b/app/IATI/Models/User/User.php @@ -96,11 +96,10 @@ public static function sendEmail(): void { VerifyEmail::toMailUsing(function ($notifiable, $url) { return (new MailMessage) - ->subject('Verify Email Address') - ->greeting('Hello ' . $notifiable->full_name) - ->line('Welcome to IATI Publisher. Your email has been used to create a new account here. - Please click the button below to verify that you have created the account in it.') - ->action('Verify Email Address', $url); + ->subject(trans('common.sendEmail.verify_email_address')) + ->greeting(trans('common.sendEmail.hello') . $notifiable->full_name) + ->line(trans('common.sendEmail.line')) + ->action(trans('common.sendEmail.verify_email_address'), $url); }); } diff --git a/app/IATI/Services/User/UserService.php b/app/IATI/Services/User/UserService.php index 4bbca917d6..ad6b2ef3ab 100644 --- a/app/IATI/Services/User/UserService.php +++ b/app/IATI/Services/User/UserService.php @@ -209,7 +209,7 @@ public function checkIATIIdentifier(string $identifier): array $errors = []; if ($res->getStatusCode() === 404) { - $errors['error'] = ['Error occurred while trying to check user email.']; + $errors['error'] = [trans('controller.error_has_occurred', ['action'=>trans('controller.trying_to'), 'suffix'=>trans('controller.check_user_email')])]; return $errors; } @@ -314,7 +314,7 @@ public function checkUserEmail(string $email): array $errors = []; if ($res->getStatusCode() === 404) { - $errors['error'] = ['Error occurred while trying to check user email.']; + $errors['error'] = [trans('controller.error_has_occurred', ['action'=>trans('controller.trying_to'), 'suffix'=>trans('controller.check_user_email')])]; return $errors; } diff --git a/app/IATI/Services/Workflow/ActivityWorkflowService.php b/app/IATI/Services/Workflow/ActivityWorkflowService.php index dd324dbd22..f830d5d481 100644 --- a/app/IATI/Services/Workflow/ActivityWorkflowService.php +++ b/app/IATI/Services/Workflow/ActivityWorkflowService.php @@ -266,16 +266,16 @@ public function getPublishErrorMessage($organization, string $type = 'activity') $messages = []; if (!$this->isUserVerified()) { - $messages[] = 'You have not verified your email address.'; + $messages[] = trans('common.error.publish_error_1'); } if ($this->hasNoPublisherInfo($organization->settings)) { - $messages[] = 'Your API Key is not valid or it is empty.'; + $messages[] = trans('common.error.publish_error_2'); } if ($type === 'activity' && !$this->isOrganizationPublished($organization)) { - $messages[] = 'Your Organisation data is not published.'; + $messages[] = trans('common.error.publish_error_3'); } if (!$this->organizationService->isPublisherStateActive($organization['publisher_id'])) { - $messages[] = 'The Publisher ID is not verified in IATI Registry.'; + $messages[] = trans('common.error.publish_error_4'); } return $messages; diff --git a/app/IATI/Services/Workflow/BulkPublishingService.php b/app/IATI/Services/Workflow/BulkPublishingService.php index 00d88a3f3e..1c90c78529 100644 --- a/app/IATI/Services/Workflow/BulkPublishingService.php +++ b/app/IATI/Services/Workflow/BulkPublishingService.php @@ -77,7 +77,7 @@ public function getCoreElementsCompletedArray($activityIds): array if ($activity && $activity->status === 'draft') { $coreElementsCompleted[$this->getCompleteStatus($activity)][] = [ 'activity_id' => $activity->id, - 'title' => Arr::get($activity->title, '0.narrative', 'Not Available') ?: 'Not Available', + 'title' => Arr::get($activity->title, '0.narrative', trans('common.missing.not_available')) ?: trans('common.missing.not_available'), ]; } } @@ -122,11 +122,11 @@ public function validateActivitiesOnIATI($activityIds): array $response = $this->validateWithException($activity); if (!Arr::get($response, 'success', true)) { - logger()->error('Error has occurred while validating activity with id' . $activityId); + logger()->error(trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('controller.activity_with_id')]) . $activityId); } else { $totalResponse[$activity->id] = [ 'activity_id' => $activity->id, - 'title' => Arr::get($activity->title, '0.narrative', 'Not Available') ?: 'Not Available', + 'title' => Arr::get($activity->title, '0.narrative', trans('common.missing.not_available')) ?: trans('common.missing.not_available'), 'response' => $response, ]; } @@ -154,7 +154,7 @@ public function validateWithException($activity): array return $response; } - return ['success' => false, 'error' => 'Error has occurred while validating activity.']; + return ['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activity')])]; } catch (BadResponseException $ex) { if ($ex->getCode() === 422) { $response = json_decode($ex->getResponse()->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR); @@ -164,7 +164,7 @@ public function validateWithException($activity): array } } - return ['success' => false, 'error' => 'Error has occurred while validating activity.']; + return ['success' => false, 'error' => trans('controller.error_has_occurred', ['action'=>trans('controller.validating'), 'suffix'=>trans('el_common.activity')])]; } catch (\Exception $e) { logger()->error($e->getMessage()); @@ -208,16 +208,16 @@ public function checkActivityErrors($response, $modifiedResponse): array if (array_sum($summary) === 0) { $modifiedResponse['no_errors'][] = [ - 'activity_id' => Arr::get($response, 'activity_id', 'Not Available'), - 'title' => Arr::get($response, 'title', 'Not Available'), + 'activity_id' => Arr::get($response, 'activity_id', trans('common.missing.not_available')), + 'title' => Arr::get($response, 'title', trans('common.missing.not_available')), 'errors' => [], ]; } if (Arr::get($summary, 'critical', 0) > 0) { $modifiedResponse['critical'][] = [ - 'activity_id' => Arr::get($response, 'activity_id', 'Not Available'), - 'title' => Arr::get($response, 'title', 'Not Available'), + 'activity_id' => Arr::get($response, 'activity_id', trans('common.missing.not_available')), + 'title' => Arr::get($response, 'title', trans('common.missing.not_available')), 'errors' => [ 'critical' => Arr::get($summary, 'critical', 0), ], @@ -226,8 +226,8 @@ public function checkActivityErrors($response, $modifiedResponse): array if ((Arr::get($summary, 'error', 0) > 0) || (Arr::get($summary, 'warning', 0) > 0)) { $modifiedResponse['errors'][] = [ - 'activity_id' => Arr::get($response, 'activity_id', 'Not Available'), - 'title' => Arr::get($response, 'title', 'Not Available'), + 'activity_id' => Arr::get($response, 'activity_id', trans('common.missing.not_available')), + 'title' => Arr::get($response, 'title', trans('common.missing.not_available')), 'errors' => [ 'error' => Arr::get($summary, 'error', 0), 'warning' => Arr::get($summary, 'warning', 0), @@ -251,13 +251,13 @@ public function generateInitialBulkPublishingResponse($activities): array $response['status'] = 'processing'; $response['organization_id'] = auth()->user()->organization->id; $response['job_batch_uuid'] = (string) Str::uuid(); - $response['message'] = 'Bulk publishing started'; + $response['message'] = trans('controller.bulk_publishing', ['suffix'=>trans('controller.started')]); $response['activities'] = []; if (count($activities)) { foreach ($activities as $activity) { $response['activities'][$activity->id]['activity_id'] = $activity->id; - $response['activities'][$activity->id]['activity_title'] = Arr::get($activity->title, '0.narrative', 'Not Available') ?: 'Not Available'; + $response['activities'][$activity->id]['activity_title'] = Arr::get($activity->title, '0.narrative', trans('common.missing.not_available')) ?: trans('common.missing.not_available'); $response['activities'][$activity->id]['status'] = 'created'; } } @@ -281,7 +281,7 @@ public function getPublishingResponse($publishStatus): array $response['status'] = 'completed'; $response['organization_id'] = $publishStatus->first()->organization_id; $response['job_batch_uuid'] = $publishStatus->first()->job_batch_uuid; - $response['message'] = 'Bulk publishing completed'; + $response['message'] = trans('controller.bulk_publishing', ['suffix'=>trans('controller.completed')]); $response['activities'] = []; if (count($publishStatus)) { @@ -298,7 +298,7 @@ public function getPublishingResponse($publishStatus): array if ($processing) { $response['status'] = 'processing'; - $response['message'] = 'Bulk publishing processing.'; + $response['message'] = trans('controller.bulk_publishing', ['suffix'=>trans('controller.processing')]); } if (!$processing) { diff --git a/app/XmlImporter/Foundation/XmlQueueProcessor.php b/app/XmlImporter/Foundation/XmlQueueProcessor.php index 0b9c6a2a0e..d44c398c0d 100644 --- a/app/XmlImporter/Foundation/XmlQueueProcessor.php +++ b/app/XmlImporter/Foundation/XmlQueueProcessor.php @@ -104,7 +104,7 @@ public function import($filename, $orgId, $orgRef, $userId, $dbIatiIdentifiers): $this->userId = $userId; $this->filename = $filename; $contents = awsGetFile(sprintf('%s/%s/%s', $this->xml_file_storage_path, $this->orgId, $filename)); - awsUploadFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $this->orgId, 'status.json'), json_encode(['success' => true, 'message' => 'Processing'], JSON_THROW_ON_ERROR)); + awsUploadFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $this->orgId, 'status.json'), json_encode(['success' => true, 'message' => ucfirst(trans('controller.processing'))], JSON_THROW_ON_ERROR)); awsDeleteFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $this->orgId, 'schema_error.log')); if ($this->xmlServiceProvider->isValidAgainstSchema($contents)) { @@ -125,7 +125,7 @@ public function import($filename, $orgId, $orgRef, $userId, $dbIatiIdentifiers): )); awsUploadFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $orgId, 'status.json'), json_encode( - ['success' => false, 'message' => 'Invalid XMl or Header mismatched'], + ['success' => false, 'message' => trans('invalid_xml_or_header')], JSON_THROW_ON_ERROR )); @@ -133,7 +133,7 @@ public function import($filename, $orgId, $orgRef, $userId, $dbIatiIdentifiers): return false; } catch (\Exception $e) { - awsUploadFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $orgId, 'status.json'), json_encode(['success' => false, 'message' => 'Error has occurred while importing the file.'], JSON_THROW_ON_ERROR)); + awsUploadFile(sprintf('%s/%s/%s', $this->xml_data_storage_path, $orgId, 'status.json'), json_encode(['success' => false, 'message' => trans('controller.error_has_occurred', ['action'=>trans('controller.importing'), 'suffix'=>trans('controller.the_file')])], JSON_THROW_ON_ERROR)); throw $e; } diff --git a/lang/en/about.php b/lang/en/about.php new file mode 100644 index 0000000000..46e7f12e30 --- /dev/null +++ b/lang/en/about.php @@ -0,0 +1,27 @@ + "ABOUT IATI Publisher", + 'what_is_iati_publisher_header' => "What is IATI Publisher?", + 'what_is_iati_publisher_description' => [ + 'one' => 'IATI Publisher enables organisations to publish data on activities and resource flows according to the IATI Standard. The IATI Standard is a set of rules and guidance on how to publish useful development and humanitarian data.', + ], + 'use_iati_publisher_to_header' => 'Use IATI Publisher to:', + 'use_iati_publisher_to_description' => [ + 'one' => [ + 'list_items' => [ + 'one' => 'Register your organisation with an IATI Publisher account', + 'two' => 'Understand the data fields in the IATI Standard (with IATI Standard Reference definitions, helpful explanations and links to guidance)', + 'three' => 'Provide your organisation’s data easily by completing online forms. Or upload data on multiple activities on a CSV or .xml file with the Bulk Upload feature', + 'four' => 'Run automatic checks (via the IATI Validator) for errors before publishing your data', + 'five' => 'Publish your data. IATI Publisher will add your data to the IATI Registry (where links to all IATI data is found)', + ] + ], + 'two' => 'IATI Publisher has been built to support organisations that publish a limited number of development and humanitarian activities. An ‘activity’ is an individual project or another unit of development and humanitarian work, which is determined by the organisation that is publishing the data. Organisations who publish a limited number of activities tend to represent small and medium sized organisations. ', + 'three' => 'Large organisations, such as donor governments or UN agencies delivering 100+ activities are advised not to use IATI Publisher. Instead these organisations likely need to use an alternative technical solution that enables the publication of large volumes of data. Please email the IATI Helpdesk for more information:support@iatistandard.org ', + ], + 'development_of_iati_header' => 'Development of IATI Publisher', + 'development_of_iati_description' => [ + 'one' => 'IATI Publisher was first launched in December 2022 by the IATI Secretariat and has been developed by Young Innovations , a software development firm based in Nepal. IATI Publisher is fully aligned with the IATI Standard XML schema and rulesets .', + ], +]; diff --git a/lang/en/activities.php b/lang/en/activities.php new file mode 100644 index 0000000000..d260000385 --- /dev/null +++ b/lang/en/activities.php @@ -0,0 +1,22 @@ + 'Your Activities', + 'what_is_activity' => [ + 'label' => 'What is an activity?', + 'description' => [ + 'one' => 'You need to provide data about your organisation\'s development and humanitarian \'activities\'. The unit of work described by an \'activity\' is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country\'s government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months.
    Therefore, your organisation will need to determine how it will divide its work internally into activities. Read the Publishing Checklist for more information.', + ], + ], + + //Lines for the table + 'publish_label' => 'Publish', + 'status_labels' => [ + 'draft' => 'draft', + 'publish' => 'publish', + ], + + //lines for add activity modal + 'add_a_tittle_and_identifier_label' => 'Add a title and identifier for the activity ', +]; + diff --git a/lang/en/activity_default.php b/lang/en/activity_default.php new file mode 100644 index 0000000000..ac768e1cb9 --- /dev/null +++ b/lang/en/activity_default.php @@ -0,0 +1,43 @@ + [ + 'label' => "Override default values", + 'text' => "Use the following form to change the default values such as currency, language etc for this specific activity. Changing the values here will not change the default values in the setting page.", + ], + 'currency' => [ + 'label' => "Currency", + 'placeholder' => "Select from dropdown", + 'hover_header' => "Default Currency", + 'hover_text' => "The currency in which you report your financial transactions. You can later manually change the currency on individual transactions and budgets if required.", + 'help_text' => "The currency in which you are reporting your financial transactions for this activity. Select from dropdown ", + ], + 'language' => [ + 'label' => "Language", + 'placeholder' => "Select from dropdown", + 'hover_header' => "Default Language", + 'hover_text' => "The language in which you provide data on your activities. You can later manually change the language on individual text if required.", + 'help_text' => "The language in which you are reporting this activity. Select from dropdown.", + ], + 'hierarchy' => [ + 'label' => "Hierarchy", + 'placeholder' => "Type default hierarchy here", + 'hover_header' => "Default Hierarchy", + 'hover_text' => "If you are reporting both programmes (parent activities) and projects (child activities), choose the hierarchical level that most of your activities are at. e.g. parent activity = 1; child activity = 2.
    If all your activities are at the same level i.e. you have no child activities, then choose 1.", + 'help_text' => "IATI allows for activities to be reported hierarchically (eg. parent - child ; programme - project - sub-project, etc). For activities at lower levels, their hierarchy can be edited as you are entering them. ", + ], + 'budget_not_provided' => [ + 'label' => "Budget not provided", + 'placeholder' => "select budget not provided type here", + 'hover_header' => "Budget not provided", + 'hover_text' => "A code indicating the reason why this activity does not contain any iati-activity/budget elements. The attribute MUST only be used when no budget elements are present.", + ], + 'humanitarian' => [ + 'label' => "Humanitarian", + 'placeholder' => "Select Humanitarian here", + 'hover_header' => "Humanitarian", + 'hover_text' => "Add a 'Humanitarian Flag' to every activity that your organisation publishes data on. This means that your organisation identifies all their activities as wholly or partially addressing a humanitarian crisis or multiple crises. You can later manually add or remove a Humanitarian Flag on individual activities if required.", + ], + 'cancel_label' => "Cancel", + 'save_default_values_label' => "Save default values", +]; diff --git a/lang/en/activity_detail.php b/lang/en/activity_detail.php new file mode 100644 index 0000000000..61cc829805 --- /dev/null +++ b/lang/en/activity_detail.php @@ -0,0 +1,31 @@ + 'Your Activities', + + //Lines for the four hover-able buttons and section legend. + 'identification' => [ + 'label' => 'Identification', + 'uppercase' => 'IDENTIFICATION', + ], + 'basic_activity_information' => [ + 'label' => 'Basic Activity Information', + 'uppercase' => 'BASIC ACTIVITY INFORMATION', + ], + 'classifications' => [ + 'label' => 'Classifications', + 'uppercase' => 'CLASSIFICATIONS', + ], + 'financial' => [ + 'label' => 'Financial', + 'uppercase' => 'FINANCIAL', + ], + + 'complete_all_core_label' => 'Complete all core elements to get 100% score', + 'search_elements_placeholder' => 'Search elements to add/edit', + 'all_elements_label' => 'All Elements', + 'uc_publish_label' => 'PUBLISH', + 'uc_override_this_activity_label' => 'OVERRIDE THIS ACTIVITY\'S DEFAULT VALUES', + 'no_activity_has_been_added_label' => 'No activity has been added yet.', + 'click_on_button_to_add_new_label' => 'Click on the button below to add a new activity', +]; diff --git a/lang/en/admin.php b/lang/en/admin.php new file mode 100644 index 0000000000..38de809f02 --- /dev/null +++ b/lang/en/admin.php @@ -0,0 +1,18 @@ + [ + 'activity_data' => 'ACTIVITY DATA', + 'organisation_data' => 'ORGANISATION DATA', + 'settings' => 'SETTINGS', + 'search_activity' => 'Search activity...', + 'search_organisation' => 'Search organisation...', + 'your_profile' => 'Your Profile', + 'logout' => 'Logout', + 'go_to_dashboard' => 'Go to Dashboard', + ], + + 'footer' => [ + 'dashboard' => 'Dashboard', + ], +]; diff --git a/lang/en/auth.php b/lang/en/auth.php index 1c9bccb282..b0080ec9de 100644 --- a/lang/en/auth.php +++ b/lang/en/auth.php @@ -16,4 +16,12 @@ 'failed' => 'These credentials do not match our records.', 'password' => 'The provided password is incorrect.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', -]; + +// 'Confirm Password', +// 'Please confirm your password before continuing.', +// 'Password', +// 'Confirm Password', +// 'Forgot Your Password?', +// 'Reset Password', +// 'Email Address', + ]; diff --git a/lang/en/buttons.php b/lang/en/buttons.php new file mode 100644 index 0000000000..a016eae5fb --- /dev/null +++ b/lang/en/buttons.php @@ -0,0 +1,67 @@ + "Download all", + 'add_activity' => "Add activity ", + 'cancel' => "Cancel", + 'save_and_exit' => "Save and Exit", + 'close' => "Close", + 'save' => "Save", + 'publish' => "Publish", + 'publish_selected' => "Publish selected", + 'next' => "Next", + 'prev' => "Prev", + 'save_publishing_settings' => "Save publishing settings", + 'verify' => "Verify", + 'save_default_values' => "Save default values", + 'edit' => "Edit", + 'show_full_period' => "Show full period list", + 'delete' => "Delete", + 'go_back' => "Go Back", + 'download' => "Download", + 'continue' => "Continue", + 'continue_anyway' => "Continue Anyway", + 'publish_anyway' => "Publish Anyway", + 'fix_issues' => "Fix issues", + 'period_nocase' => "period", + 'download_xml_confirmation' => "The XML file is in wrong format. Would you like to download it anyway?", + 'read_more' => "Read more", + 'learn_more' => "Learn More", + 'see_all_data_fields' => "See all data fields", + 'sign_in' => "Sign in", + 'reset' => "Reset", + 'hide' => "Hide", + 'send_password_reset' => "Send password reset link", + 'republish' => "Republish", + 'unpublish' => "Unpublish", + 'upload_file' => "Upload file", + 'import' => "Import", + 'get_started' => "Get Started", + 'proxy' => "Proxy", + 'switch_back' => "Switch Back", + 'next_step' => "Next Step", + 'step' => "Step", + 'out_of' => "out of", + 'save_data' => "Saved data", + 'add_additional' => 'add additional ', + + /** + * ":something" is replaced by translated line in vue files + * {{language.button_lang.#key#.replace(':something', language.common_lang.#key for value#)}} + **/ + 'delete_confirmation' => "Are you sure you want to delete this :something ?", + 'unpublish_confirmation' => "Are you sure you want to delete this :something ?", + 'add_something' => "add :something", + 'edit_something' => "edit :something", + 'view_something' => "view :something", + 'delete_something' => "delete :something", + 'show_something' => "show :something", + 'download_something' => "download :something", + + + /**Not yet translation lines**/ + 'not_yet_added_period' => "You haven't added any period yet.", + 'not_yet_added_period_btn' => "Add new indicator", + 'not_yet_added_indicator' => "You haven't added any indicator yet.", +]; diff --git a/lang/en/common.php b/lang/en/common.php new file mode 100644 index 0000000000..72703cfc34 --- /dev/null +++ b/lang/en/common.php @@ -0,0 +1,309 @@ + 'Alerts', + 'show_more' => 'Show more', + 'show_less' => 'Show less', + 'completed' => 'completed', + 'not_completed' => 'not completed', + 'publishing_progress' => 'Publishing Progress', + 'core' => 'Core', + 'element' => 'Element', + 'elements' => 'Elements', + 'all_elements' => 'All Elements', + 'mandatory_fields' => 'Mandatory fields', + 'untitled' => 'Untitled', + 'this_is_autogenerated' => "This is autogenerated", + 'iati_standard_reference' => 'IATI Standard Reference', + 'language' => 'Language', + 'attached' => 'Attached', + 'narrative' => 'Narrative', + 'yes' => 'Yes', + 'no' => 'No', + 'true' => 'True', + 'false' => 'False', + 'conditions_not_attached' => 'Conditions Not Attached', + 'date' => 'Date', + 'period' => 'Period', + 'download_file' => "Download file.", + 'click_the_download' => 'Click the download button to save the file', + 'periods' => 'Periods', + 'error_message' => 'Error message', + 'organisation' => 'Organisation', + 'organisations' => 'Organisations', + 'person_name' => 'Person Name', + 'department' => 'Department', + 'job_title' => 'Job Title', + 'email' => 'Email', + 'telephone' => 'Telephone', + 'website' => 'Website', + 'mailing_address' => 'Mailing Address', + 'vocabulary' => 'Vocabulary', + 'vocabulary_uri' => 'Vocabulary URI', + 'code' => 'Code', + 'value' => 'Value', + 'iati_equivalent' => 'IATI-Equivalent', + 'reference' => 'Reference', + 'location_id' => 'Location ID', + 'description' => 'Description', + 'activity_description' => 'Activity Description', + 'level' => 'Level', + 'point' => 'Point', + 'latitude' => 'Latitude', + 'longitude' => 'Longitude', + 'exactness' => 'Exactness', + 'location_class' => 'Location Class', + 'feature_designation' => 'Feature Designation', + 'owner_organisation_reference' => 'Owner Organisation Reference', + 'owner_organisation_narrative' => 'Owner Organisation Narrative', + "organisation_id" => 'Organisation ID', + "organisation_name" => 'Organisation Name', + "organisation_type" => 'Organisation Type', + "organisation_role" => 'Organisation Role', + "ref" => 'Ref', + "activity_id" => 'Activity ID', + "crs_channel_code" => 'CRS Channel Code', + 'value_amount' => 'Value Amount', + 'type' => 'Type', + 'receiver' => 'Receiver', + 'provider' => 'Provider', + 'org' => 'Org', + 'significance' => 'Significance', + 'region_code' => 'region Code', + 'custom_code' => 'Custom Code', + 'percentage' => 'Percentage', + 'secondary_reporter' => 'Secondary Reporter', + 'result_type' => 'Result Type', + 'baseline' => 'Baseline', + 'indicator' => 'Indicator', + 'document_link' => 'Document Link', + 'indicator_detail' => 'Indicator Detail', + 'title' => 'Title', + 'measure' => 'Measure', + 'aggregation_status' => 'Aggregation Status', + 'action' => 'Action', + 'year' => 'Year', + 'location' => 'Location', + 'dimension' => 'Dimension', + 'format' => 'Format', + 'category' => 'Category', + 'document_date' => 'Document Date', + 'ascending' => 'Ascending', + 'indicator_uri' => 'Indicator URI', + 'core_elements' => 'Core Elements', + 'mandatory_sub_elements' => 'Mandatory sub-elements', + 'recommended_sub_elements' => 'Recommended sub-elements', + 'note' => 'Note', + 'location_reference' => 'Location Reference', + 'target_value' => 'Target Value', + 'target' => 'Target', + 'actual' => 'Actual', + 'period_detail' => 'Period Detail', + 'periods_list' => 'Periods List', + 'view_indicator' => 'View Indicator', + 'indicator_title' => 'Indicator title', + 'actual_value' => 'Actual Value', + 'result_detail' => 'Result Detail', + 'documents' => 'Documents', + 'document' => 'Document', + 'indicator_nocase' => 'indicator', + 'add_indicator_nocase' => 'add indicator', + 'result_list' => 'Result List', + 'organiser_identifier_code' => 'Organiser Identifier Code', + 'provider_activity_id' => 'Provider Activity ID', + 'transaction_detail' => 'Transaction detail', + 'transaction' => 'Transaction', + 'transaction_list' => 'Transaction List', + 'publishing' => 'Publishing', + 'activities' => 'Activities', + 'activities_nocase' => 'activities', + 'view_errors_or_warning' => 'View the errors or warnings in detail', + 'publishing_alert' => 'Publishing alert', + 'activities_already_published_will_not' => 'Activities that are already published will not be published.', + 'changes_made_to_published_will_be_republished' => 'Changes made to published activities (Draft) will be republished.', + 'please_wait' => 'Please wait', + 'verifying_core_elements' => 'Verifying Core Elements', + 'validating_activities' => 'Validating Activities', + 'starting_to_publish' => 'Starting to publish', + 'refresh' => 'Refresh', + 'critical_error_found' => 'Critical error found in', + 'errors_and_warnings_found' => 'Errors and Warning found in', + 'add_import_activity' => 'ADD / IMPORT ACTIVITY', + 'add_activity_manually' => 'ADD ACTIVITY MANUALLY', + 'import_activities' => 'IMPORT ACTIVITIES FROM .CSV/.XML', + 'activities_not_found' => 'Activities not found.', + 'validating' => 'Validating', + 'unpublishing' => 'unpublishing', + 'activity' => 'Activity', + 'delete_confirmation_default' => 'Are you sure you want to delete this ', + 'result' => 'Result', + 'module' => 'module', + 'related_indicator_period_deleted' => 'Related Indicators and Periods will also be deleted', + 'related_period_deleted' => 'Related Periods will also be deleted', + 'issues_found' => 'Issues found', + 'issues_found_in_iati_validator' => 'Issues found in IATI Validator', + 'previously_published_on_iati' => 'Previously Published on IATI', + 'general' => 'General', + 'objectives' => 'Objectives', + 'target_groups' => 'Target_groups', + 'other' => 'Other', + 'api_key_pub_id' => 'API key & Publisher ID', + 'enter_correct_api_token' => 'Please enter correct API token', + 'update_default_values' => 'Update default values', + 'publisher_is_inactive' => 'Publisher is Inactive', + 'publisher_is_not_active' => 'Publisher is not active at IATI Registry.', + 'mandatory_fields_not_filled' => 'Mandatory fields not filled', + 'some_mandatory_fields_not_completed' => 'Some mandatory fields have not been completed.', + 'import_activity' => 'Import Activity', + 'activities_with_error' => 'Activities with errors cannot be imported. Please solve the errors to import your activities.', + 'status' => 'Status', + 'show' => 'Show', + 'errors_nocase' => 'errors', + 'new' => 'New', + 'existing' => 'Existing', + 'select' => 'Select', + 'reset_password' => 'Reset Password', + 'new_password' => 'New Password', + 'repeat_password' => 'Repeat Password', + 'enter_new_password' => 'Please enter your new password', + 'enter_new_password_placeholder' => 'Enter a new password', + 'reenter_password' => 'Re-enter your password', + 'activity_title' => 'Activity Title', + 'updated_on' => 'Updated On', + 'data' => 'Data', + 'fetching_data' => 'Fetching Data...', + 'recipient_country' => 'Recipient Country', + 'value_date' => 'Value Date', + 'budget_line' => 'Budget line', + 'recipient_org' => 'Recipient Org', + 'expense_line' => 'Expense line', + 'expenditure_amount' => 'Expenditure Amount', + 'fill_mandatory_fields' => 'Fill mandatory fields of all elements to get 100% score', + 'cannot_publish_activity_until_mandatory' => 'You cannot publish an activity until all the mandatory fields have been filled.', + 'core_elements_include' => 'Core elements include the IATI Standard\'s “mandatory and recommended” elements and it is important to provide this data to ensure your data is usable and useful', + 'each_element_represents' => 'Each “Element” represents a basic unit of information in the IATI Standard. Click on each element listed below and complete all data fields contained in the element. For each element, you will find its technical hover_text, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide.', + 'the_iati_standard_contains_wide' => 'The IATI Standard contains a wide range of data elements and your organisation is encouraged to (at least) publish data in elements marked as “Core”.', + 'already_have_account' => 'Already have an account?', + 'iati_registry' => 'IATI Registry', + 'contact' => 'Contact', + 'for_more_details' => 'for more details', + 'name' => 'Name', + 'location_reached' => 'Location reached', + 'srs_name' => 'SRS Name', + 'reference_role' => 'Reference role', + 'transaction_type' => 'Transaction type', + 'disbursement' => 'Disbursement Channel Code', + 'finance_type' => 'Finance type', + 'flow_type' => 'Flow type', + 'tied_status' => 'Tied Status Code', + 'amount' => 'Amount', + 'url' => 'URL', + 'budget_amount' => 'Budget Amount', + 'period_start' => 'Period Start', + 'period_end' => 'Period End', + 'budget' => 'Budget', + 'budget_value' => 'Budget Value', + 'new_result' => "New Result", + 'full_result' => "full result list", + 'new_indicator' => "New Indicator", + 'full_indicator' => "full indicator list", + 'delete_element' => "Delete element", + 'full_transaction' => "full transaction list", + 'csv' => "CSV", + 'xml' => "XML", + 'anyway' => "Anyway", + 'partnership_against_children' => "Partnership against child exploitation", + 'this_is_help_text' => "This is a help text", + 'indicator_list' => "Indicator List", + 'alert' => "Alert", + 'item' => "Item", + 'help' => "Help", + 'country' => "Country", + 'activity_detail_page' => "Activity Detail Page", + 'you_are_logged_in' => "You are logged in!", + + + /** + * ":something missing", something is replaced by other keyword + * Such that narrative missing, language missing, reference missing, etc can be obtained + * Example: {{ language.common_lang.missing.something.replace(':something', language.common_lang.narrative) }} + **/ + 'missing' => [ + 'default' => 'Missing', + 'something' => ':something missing', + 'data' => 'Missing Data', + 'no_content' => 'No content', + 'not_available' => 'Not available', + ], + + /**related title and description in some component**/ + 'core_completed_title' => 'Core Elements Complete', + 'core_completed_description' => 'Congratulations! All the core elements are complete. Continue to Validate this activity.', + 'core_not_completed_title' => 'Core Elements not complete', + 'core_not_completed_description' => '

    There is missing data in some of the core elements. We highly recommend that you complete these data fields to help ensure your data is useful.

    Do you want to continue anyway and run checks on (validate) this data.

    ', + 'add_narrative_in_other_lang' => 'ADD NARRATIVE IN OTHER LANGUAGE', + 'education_and_psychosocial' => 'Education and psychosocial support to children in Aleppo Governorate', + 'add_additional_description' => 'add additional description', + 'account_not_verified' => 'Account not Verified', + 'account_not_verified_description' => "Please check for verification email sent to you and verify your account resend verification email if you haven’t received your verification email. Contact PubToolTest@iatistandard.org for further assistance.", + 'complete_your_setup' => 'Complete your setup', + 'complete_your_setup_description' => 'Please complete your setup in order to enable complete features of IATI publisher tool.', + 'update_registry_information' => 'Update registry information', + 'download_csv_template' => 'Download .CSV activity Template', + 'download_csv_template_description' => 'This template contains all the elements that you have to fill as per the IATI Standard before uploading in IATI Publisher. Please make sure that you follow the structure and format of the template.', + + + //common placeholders + 'placeholder' => [ + 'select_a_value' => 'Select a value', + 'select_a_lang' => 'Select a language', + 'enter_activity_title' => "Enter an activity title text", + ], + + 'error' => [ + 'default' => 'Error', + 'activity_could_not_be_published' => 'Activity couldn\'t be published because', + 'org_could_not_be_published' => 'Organisation couldn\'t be published because', + + 'publish_error_1' => 'You have not verified your email address.', + 'publish_error_2' => 'Your API Key is not valid or it is empty.', + 'publish_error_3' => 'Your Organisation data is not published.', + 'publish_error_4' => 'The Publisher ID is not verified in IATI Registry.', + ], + //for ValidationErrors.vue error message + 'message' => [ + 'critical' => 'Data will not be available on the IATI Datastore and may not be available on other data portals/tools/software that use IATI data. We highly recommend you fix these issue(s) before publishing.', + 'warning' => 'We highly recommend you fix these issue(s) before publishing your activity to improve the quality and usefulness of your data.', + 'no_error' => 'Congratulations! No errors were found. Publish your data now. This data will be available on the IATI Datastore and other data portals/tools/ software that use IATI data.', + ], + + //for sticky messages generated in PublishButton.vue + 'sticky' => [ + 'title_1' => 'Activity will be validated before publishing', + 'description_1' => 'This activity will be first validated before publishing the activity to the IATI Registry.', + 'title_2' => 'IATI Validation', + 'description_2' => '

    Congratulations! No errors were found. Publish your data now.

    This data will be available on the IATI Datastore and other data portals/tools/software that use IATI data.

    ', + 'title_3' => 'IATI Validation Issue', + 'common' => [ + 'errors' => 'errors', + 'critical' => 'critical', + 'and' => 'and', + 'warnings' => 'warnings', + 'were_found' => 'were found', + 'we_highly_recommend' => 'We highly recommend you fix these issue(s) before publishing your activity to improve the quality and usefulness of your data.', + 'has_atleast_one_critical_error' => 'As your data has at least one critical error, it will not be available on the IATI Datastore and may not be available on other data portals/tools/software that use IATI data.', + 'view_information' => 'View information about these errors/warnings at the top of the activity page.', + ], + ], + + // for sendEmail() in User/User.php + 'sendEmail' => [ + 'verify_email_address' => 'Verify Email Address', + 'greeting' => 'Hello', + 'line' => 'Welcome to IATI Publisher. Your email has been used to create a new account here. Please click the button below to verify that you have created the account in it.' + ] +]; diff --git a/lang/en/controller.php b/lang/en/controller.php new file mode 100644 index 0000000000..28e6bc8b7a --- /dev/null +++ b/lang/en/controller.php @@ -0,0 +1,139 @@ + [ + 'user_must_be_logged_in' => 'User must be logged in to verify email.' + ], + + /* + * list for possible :actioned + */ + 'completed' => 'completed', + 'created' => 'created', + 'deleted' => 'deleted', + 'failed' => 'failed', + 'fetched' => 'fetched', + 'published' => 'published', + 'registered' => 'registered', + 'retrieved' => 'retrieved', + 'sent' => 'sent', + 'started' => 'started', + 'unpublished' => 'unpublished', + 'updated' => 'updated', + 'uploaded' => 'uploaded', + 'validated' => 'validated', + 'verified' => 'verified', + + /* + * list for possible :action + */ + 'checking' => 'checking', + 'creating' => 'creating', + 'deleting' => 'deleting', + 'downloading' => 'downloading', + 'fetching' => 'fetching', + 'importing' => 'importing', + 'opening' => 'opening', + 'processing' => 'processing', + 'rendering' => 'rendering', + 'saving' => 'saving', + 'storing' => 'storing', + 'trying_to' => 'trying to', + 'updating' => 'updating', + 'validation' => 'validation', + 'verifying' => 'verifying', + + + /* + * list for possible :suffix + * not covered in common.php or el_common.php + * some might seem repeated in el_common, but it's not. + */ + 'activity_capital_spend' => 'activity capital-spend', + 'activity_collab_type' => 'activity collaboration-type', + 'activity_condition' => 'activity condition', + 'activity_csv' => 'activity csv', + 'activity_detail' => 'activity detail', + 'activity_element' => 'activity element', + 'activity_import' => 'activity import', + 'activity_reporting_org' => 'activity reporting-org', + 'activity_result' => 'activity result', + 'activity_title' => 'activity title', + 'activity_transaction' => 'activity transaction', + 'activity_transactions_listing' => 'activity transactions listing', + 'activity_transactions' => 'activity transactions', + 'activity_with_id' => 'activity with id', + 'additional_info' => 'additional info', + 'api_token' => 'API token.', + 'check_user_email' => 'check user email', + 'contact_info_controller' => 'contact-info controller item', + 'default setting' => 'default setting', + 'default_settings' => 'Default settings', + 'filtered_agency' => 'Filtered Agency', + 'indicator_period' => 'indicator period', + 'org_detail' => 'organisation detail', + 'org_document_link' => 'organisation document-link', + 'org_recipient_country_budget' => 'organisation recipient-country-budget', + 'org_recipient_org_budget' => 'organization recipient-org-budget', + 'org_recipient_region_budget' => 'organization recipient-region-budget', + 'org_reporting_org' => 'organization reporting-org', + 'org_total_budget' => 'organization total-budget.', + 'org_total_expenditure' => 'organization total-expenditure', + 'proxy_successful' => 'Proxy successful', + 'publisher_settings' => 'Publisher setting', + 'publisher_status' => 'publisher status', + 'result_detail' => 'result detail', + 'result_indicator' => 'result indicator', + 'setting_status' => 'Setting status', + 'setting' => 'setting', + 'the_data' => 'the data.', + 'the_file' => 'the file.', + 'the_status' => 'the status.', + 'transaction_detail' => 'transaction detail', + 'user_status' => 'User status', + 'user' => 'User', + 'verification_email' => 'Verification email', + + + /* + * Mostly standalone lines, some are used as suffix or prefix for paragraph translations + */ + 'activity_must_be_unpublished_before_deleting' => 'Activity must be un-published before deleting.', + 'activity_not_been_published_to_unpublish' => 'This activity has not been published to un-publish.', + 'activity_ready_to_publish' => 'Activity is ready to be published.', + 'another_bulk_publ_in_process' => 'Another bulk publishing is already in progress.', + 'api_token_incorrect' => 'API token incorrect.', + 'data_not_available' => 'Data not available', + 'enter_correct_identifier' => 'Please enter correct identifier as present in IATI Registry.', + 'enter_valid_api_token' => 'Please enter valid API token.', + 'insufficient_data' => 'Insufficient data.', + 'invalid_xml_or_header' => 'Invalid XMl or Header mismatched', + 'make_sure_publisher_is_approved' => 'Please make sure that your publisher is approved in IATI Registry.', + 'no_activities_selected' => 'No activities selected.', + 'no_publishing_in_process' => 'No bulk publishing in process.', + 'org_not_been_published_to_unpublish' => 'This organization has not been published to un-publish.', + 'organisation_ready_to_publish' => 'Organisation is ready to be published.', + 'please_upload_csc_or_xml' => 'Please upload csv or xml file to import activity.', + 'publisher_id_doesnt_match' => 'Publisher ID doesn\'t match with your IATI Registry information', + 'publisher_name_doesnt_match' => 'Publisher Name doesn\'t match your IATI Registry information', + 'register_user' => 'register_user', + 'request_error' => 'Request error', + 'status_generation_failed' => 'Status generation failed.', + 'try_again' => 'Please try again later.', + 'user_not_associated' => 'User is not associated with any organization.', + + + /* + * Translation lines with placeholders + */ + 'action_failed' => ':prefix :action failed.', + 'actioned_successfully' => ':prefix :actioned successfully.', + 'bulk_publishing' => 'Bulk publishing :suffix.', + 'delete_error' => ':prefix delete error.', + 'error_has_occurred_form' => 'Error has occurred whiled :action :suffix form.', + 'error_has_occurred_page' => 'Error has occurred whiled :action :suffix page.', + 'error_has_occurred' => 'Error has occurred whiled :action :suffix.', + 'has_been_actioned_successfully' => ':prefix has been :actioned successfully.', + +]; + diff --git a/lang/en/el_common.php b/lang/en/el_common.php new file mode 100644 index 0000000000..d85b89d855 --- /dev/null +++ b/lang/en/el_common.php @@ -0,0 +1,272 @@ + 'activities', + 'activity' => 'activity', + 'activity_date' => 'activity-date', + 'activity_description' => 'activity-description', + 'activity_scope' => 'activity-scope', + 'activity_status' => 'activity-status', + 'activity_sector' => 'activity-sector', + 'activity_id' => 'activity-id', + 'activity_identifier' => 'activity-identifier', + 'actual' => 'actual', + 'administrative' => 'administrative', + 'aggregation_status' => 'aggregation-status', + 'aid_type' => 'aid type', + 'ascending' => 'ascending', + 'attached' => 'attached', + 'baseline' => 'baseline', + 'budget' => 'budget', + 'budget_item' => 'budget-item', + 'budget_line' => 'budget-line', + 'capital' => 'capital-spend', + 'category' => 'category', + 'code' => 'code', + 'collaboration' => 'collaboration-type', + 'comment' => 'comment', + 'condition' => 'condition', + 'conditions' => 'conditions', + 'contact_info' => 'contact-info', + 'country' => 'country', + 'country_budget_items' => 'country-budget-items', + 'crs_channel_code' => 'crs-channel-code', + 'currency' => 'currency', + 'date' => 'date', + 'default_aid_type' => 'default-aid-type', + 'default_finance_type' => 'default-finance-type', + 'default_flow_type' => 'default-flow-type', + 'default_tied_status' => 'default-tied-status', + 'default_values' => 'default-values', + 'department' => 'department', + 'description' => 'description', + 'dimension' => 'dimension', + 'disbursement_channel' => 'disbursement-channel', + 'document_date' => 'document-date', + 'document_link' => 'document-link', + 'email' => 'email', + 'exactness' => 'exactness', + 'expense_line' => 'expense-line', + 'feature_designation' => 'feature-designation', + 'finance_type' => 'finance-type', + 'flow_type' => 'flow type', + 'format' => 'format', + 'humanitarian' => 'humanitarian', + 'humanitarian_scope' => 'humanitarian-scope', + 'iati_identifier' => 'iati identifier', + 'iati_equivalent' => 'iati-equivalent', + 'indicator' => 'indicator', + 'indicators' => 'indicators', + 'indicator_uri' => 'indicator-uri', + 'iso_date' => 'iso-date', + 'job_title' => 'job-title', + 'language' => 'language', + 'languages' => 'languages', + 'latitude' => 'latitude', + 'legacy_data' => 'legacy-data', + 'level' => 'level', + 'location' => 'location', + 'location_class' => 'location-class', + 'location_reach' => 'location-reach', + 'location_id' => 'location-id', + 'longitude' => 'longitude', + 'mailing_address' => 'mailing-address', + 'measure' => 'measure', + 'name' => 'name', + 'narrative' => 'narrative', + 'organisation' => 'organisation', + 'organisations' => 'organisations', + 'organisation_name' => 'organisation-name', + 'organisation_registration_agency' => 'organisation-registration-agency', + 'organisation_identifier' => 'organisation-identifier', + 'other_identifier' => 'other-identifier', + 'owner' => 'owner-org', + 'participating_organisation' => 'participating-organisation', + 'percentage_organisation' => 'percentage', + 'period' => 'period', + 'period_end' => 'period-end', + 'period_start' => 'period-start', + 'person_name' => 'person-name', + 'planned_disbursement' => 'planned-disbursement', + 'point' => 'point', + 'policy_maker' => 'policy-marker', + 'provider_organisation' => 'provider-organisation', + 'provider_activity' => 'provider-activity-id', + 'publisher' => 'publisher', + 'receiver_organisation' => 'receiver organisation', + 'receiver_activity' => 'receiver-activity-id', + 'recipient_country_budget' => 'recipient-country-budget', + 'recipient_organisation' => 'recipient-organisation', + 'recipient_organisation_budget' => 'recipient-organisation-budget', + 'recipient_region' => 'recipient-region', + 'recipient_region_budget' => 'recipient-region budget', + 'recipient_country' => 'recipient-country', + 'reference' => 'reference', + 'registration_number' => 'Registration Number', + 'related_activity' => 'related-activity', + 'reporting_organisation' => 'reporting-organisation', + 'result' => 'result', + 'results' => 'results', + 'role' => 'role', + 'secondary_reporter' => 'secondary-reporter', + 'sector' => 'sector', + 'significance' => 'significance', + 'srsName' => 'srsName', + 'status' => 'status', + 'tag' => 'tag', + 'target' => 'target', + 'telephone' => 'telephone', + 'tied_status' => 'tied-status', + 'title' => 'title', + 'total_budget' => 'total-budget', + 'total_expenditure' => 'total-expenditure', + 'transaction' => 'transaction', + 'transactions' => 'transactions', + 'transaction_date' => 'transaction-date', + 'transaction_type' => 'transaction-type', + 'type' => 'type', + 'url' => 'url', + 'value' => 'value', + 'value_date' => 'value-date', + 'vocabulary' => 'vocabulary', + 'vocabulary_uri' => 'vocabulary-uri', + 'website' => 'website', + 'year' => 'year', + + + /* + * Common placeholders + */ + 'enter_a_code' => 'Enter a code', + 'select_a_list_of_regions' => 'Select a list of regions', + 'select_aggregation_status' => 'Select aggregation status', + 'select_ascending' => 'Select ascending', + 'select_attached' => 'Select attached', + 'select_code' => 'Select code', + 'select_currency' => 'Select currency', + 'select_date' => 'Select date', + 'select_format' => 'Select format', + 'select_humanitarian' => 'Select humanitarian', + 'select_language' => 'Select language', + 'select_measure' => 'Select measure', + 'select_percentage' => 'Select percentage', + 'select_region' => 'Select region', + 'select_role' => 'Select role', + 'select_secondary_reporter' => 'Select secondary-reporter', + 'select_significance' => 'Select significance', + 'select_status' => 'Select status', + 'select_type' => 'Select type', + 'select_url' => 'Select url', + 'select_value' => 'Select value-date', + 'select_vocabulary' => 'Select vocabulary', + 'select_vocabulary_uri' => 'Select vocabulary-uri', + 'type_ref_symbol_here' => 'Type @ref here', + 'type_identifier_here' => 'Type activity identifier here', + 'type_id' => 'Type activity-id', + 'type_' => 'Type code', + 'type_crs_channel_code' => 'Type crs-channel-code', + 'type_currency' => 'Type currency', + 'type_date' => 'Type date', + 'type_email' => 'Type email', + 'type_format' => 'Type format', + 'type_iati_equivalent' => 'Type iati_equivalent', + 'type_indicator_uri' => 'Type indicator-uri', + 'type_latitude_value' => 'Type latitude value', + 'type_level' => 'Type level', + 'type_longitude_value' => 'Type longitude value', + 'type_name' => 'Type name', + 'type_narrative' => 'Type narrative', + 'type_narrative_here' => 'Type narrative here', + 'type_percentage' => 'Type percentage', + 'type_provider_activity_id' => 'Type provider-activity-id', + 'type_receiver_activity' => 'Type receiver-activity', + 'type_receiver_activity_id' => 'Type receiver-activity-id', + 'type_reference' => 'Type reference', + 'type_srs_name' => 'Type srs name', + 'type_telephone' => 'Type telephone', + 'type_uri' => 'Type uri', + 'type_url' => 'Type url', + 'type_URL' => 'Type URL', + 'type_value' => 'Type value', + 'type_value_here' => 'Type value here', + 'type_vocabulary' => 'Type vocabulary', + 'type_vocabulary_uri' => 'Type vocabulary-uri', + 'type_year' => 'Type year', + 'this_is_the_name_provided_for_org' => 'This is the name you provided for your organisation when you registered.', + 'yyyy_mm_dd' => 'YYYY-MM-DD', + + /*Common hover text*/ + "a_code_from_the_codelist_identifies" => "A code from the codelist identified in vocabulary that identifies a results framework. For more information", + "a_code_from_the_specified_vocabulary" => "A code from the specified vocabulary. This attribute is required.
    For more information", + "a_code_specifying_text_link_1" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_2" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_3" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_4" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_5" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_6" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "a_code_specifying_text_link_7" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "a_code_specifying_text_link_8" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "a_code_specifying_text_link_9" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "a_description_of_the_document" => "A description of the document contents, or guidance on where to access the relevant information in the document.For more information.", + "a_short_human_readable" => "A short, human-readable title.For more information.", + "a_three_letter_iso" => "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", + "an_internal_reference" => "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", + "either_an_orcs" => "Either an OECD DAC, UN region code or (if code ‘99’ Reporting organisation is selected for recipient-region/@vocabulary) a code from your internal vocabulary. For more information", + "the_code_for_sector_link_1" => "The code for the sector. This attribute is required.For more information", + "the_code_for_sector_link_2" => "The code for the sector. This attribute is required.
    For more information", + "the_code_for_the_tag" => "The code for the tag as defined in the specified vocabulary.

    This attribute is required.For more information", + "the_date_of_document_link_1" => "The date of publication of the document that is being linked to. (@iso-date). For more information", + "the_date_of_document_link_2" => "The date of publication of the document that is being linked to. For more information", + "the_date_of_document_link_3" => "The date of publication of the document that is being linked to. For more information", + "the_date_of_document_link_4" => "The date of publication of the document that is being linked to. For more information", + "the_end_of_reporting_period" => "The end of the reporting period. For more information", + "the_free_text_name_link_1" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "the_free_text_name_link_2" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "the_free_text_name_link_3" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "the_free_text_name_link_4" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "the_free_text_name_link_5" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "the_free_text_name_link_6" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "the_free_text_name_link_7" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "the_start_of_reporting_period" => "The start of the reporting period. For more information", + "the_type_of_aid_being_supplied" => "The type of aid being supplied (project-type intervention, budget support, debt relief, etc.). This element specifies a default for all the activity’s financial transactions; it can be overridden at the individual transaction level. For more information", + + + /*Common help text*/ + "chose_an_option_from_this_list" => "Choose an option from this list.", + "for_example_an_activity" => "For example an activity could declare the dimension’s name as ‘sex’, with a value of ‘female’.", + "if_you_provided_a_document_link_title" => "If you have provided a document link then you must provide a title for the document.", + "if_you_provided_a_document_link_best" => "If you have provided a document link, select a category that best describes the document.", + "if_you_provided_a_document_link_desc" => "If you have provided a document link, then you can provide a description of the document.", + "if_you_have_selected" => "If you have selected the option: ‘Reporting Organisation’ please provide the URI where this internal list is defined.", + "provide_a_description_for_budget_line" => "Provide a description for this budget line.", + "provide_a_short_description_of_document" => "Provide a short description of the document or webpage, including any instructions on where to find relevant information.", + "provide_a_short_title_for_desc" => "Provide a short title for the document or webpage.", + "provide_the_amount_of_finance" => "Provide the amount of finance for this budget line.", + "provide_the_code_for_policy" => "Provide the code for the policy or theme addressed by your activity. If you are using the OECD DAC CRS policy-marker list, please make a selection from these options.", + "provide_the_date_for_when" => "Provide the date for when the document was published.", + "provide_the_date_of_publication" => "Provide the date of publication for the document or webpage, or provide the date that it was last updated.", + "provide_the_end_of_budget_period" => "Provide the end date of the budget period.", + "provide_the_start_of_budget_period " => "Provide the start date of the budget period.", + "select_a_document_category" => "Select a document category.", + "select_the_aid_type" => "Select the aid-type related to your activity.", + "select_the_currency_that_you_provided" => "Select the currency that you have provided the value in.", + "select_the_language_of_text_in_desc" => "Select the language of the text in the description. If no language is selected, your default language is assumed.", + "select_the_language_of_text_in_narrative" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed.", + "default_value_assumed_the" => "Select the language of the text you provided in the narrative. If no language is selected, the default language is assumed.", + "your_default_language_assumed_no_that" => "Select the language of the text you provided in the narrative. If no language is selected, your default language is assumed.", + "default_value_assumed" => "Select the language that the document is written in.", + "select_the_activity_region" => "Select the region benefitting from this activity.", + "select_the_budget_region" => "Select the region benefitting from this budget.", + "select_the_selector" => "Select the sector which the activity is targeting or supporting. You can choose more than one sector.", + "the_url_must_begin_with_either" => "The URL must begin with either ‘http://’ or ‘https://’.", + "you_can_provide_a_reference" => "You can provide a reference that you use to identify this budget line in your organisation’s internal financial management system.", + "you_can_provide_information" => "You can provide information about the type of aid that is being delivered. This is most commonly referred to as the aid modality and IATI recommends that an aid type from the OECD DAC codelist be selected for all activities.

    Examples from this codelist include: project-type interventions which provide support to a particular project, budget support which is a financial contribution to a recipient government’s budget. Project-type interventions is the most common aid type for NGOs and CSOs but many other options are found here.

    If your activity is addressing a humanitarian event, you can provide specific information on the type of funds for it. This includes providing information on the level of earmarking of the activity’s funds and if the activity is providing funds through cash or vouchers. More information on publishing aid-types related to humanitarian activities.", + "you_must_select_category" => "You must select a category of the document or webpage that you have provided.", +]; + + + diff --git a/lang/en/elements.php b/lang/en/elements.php new file mode 100644 index 0000000000..e7c552f930 --- /dev/null +++ b/lang/en/elements.php @@ -0,0 +1,1724 @@ + [ + 'activity_identifier' => [ + 'help_text' => "Enter a unique series of letters and / or numbers to identify your activity. For example PROJECT-00120467 or AFG-COVAX.

    You must make sure:

    Each IATI identifier you publish is unique.

    Each IATI identifier should not start or end with whitespace.

    Only use numbers, letters and dashes to form your IATI identifiers.

    Once you have published an activity its IATI identifier must not change.Further guidance.", + 'shorter_help_text' => "Enter your own unique activity identifier such as abbreviation or simply a number. Make sure it is unique across all the activities. IATI Publisher will concatenate Organization Identifier and Activity Identifier to autogenerate 'iati-identifier'.", + ], + 'iati_identifier' => [ + 'hover_text' => "A globally unique identifier for the activity.

    This MUST be prefixed with EITHER the current IATI organisation identifier for the reporting organisation (reporting-org/@ref) OR a previous identifier reported in other-identifier, and suffixed with the organisation’s own activity identifier. The prefix and the suffix should be separated by a hyphen “-“.

    Once an activity has been reported to IATI its identifier MUST NOT be changed in subsequent updates.For more information", + 'help_text' => "This is autogenerated by adding your activity-identifier to the end of your Organisation Identifier (this is the unique ID that was generated for your organisation when you registered). Futher guidance.

    Once an activity has been reported to IATI its identifier MUST NOT be changed in subsequent updates. For more information.", + ], + 'reporting_org' => [ + 'hover_text' => "This is your IATI Organisation Identifier (it is the unique ID that was generated for your organisation when you registered).For more information.", + 'help_text' => "The organisation issuing the report. May be a primary source (reporting on its own activity as donor, implementing agency, etc) or a secondary source (reporting on the activities of another organisation).

    Specifying the @ref attribute is mandatory. May contain the organisation name as content. For more information", + 'narrative' => [ + 'help_text' => "This is the name you provided for your organisation when you registered.", + 'hover_text' => "The name of the organisation. This can be repeated in multiple languages. For more information", + ], + 'language' => [ + 'hover_text' => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + 'type' => [ + 'hover_text' => "The type of organisation issuing the report. [ + 'hover_text' => "A short, human-readable title that contains a meaningful summary of the activity. May be repeated for different languages. For more information", + 'narrative' => [ + 'hover_text' => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + 'help_text' => "Provide the title for this activity. For example: \"Water for Women Malawi\".", + ], + 'language' => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + 'description' => [ + 'hover_text' => "A longer, human-readable description containing a meaningful description of the activity. May be repeated for different languages. For more information", + 'narrative' => [ + 'hover_text' => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information.", + 'help_text' => "Provide a description for your activity. For example: “This project will improve maternal and child health seeking behaviours among 800 pregnant women and 6,500 caregivers of children under five in [location], thereby contributing to a reduction in the high maternal and under-five mortality and morbidity rates in these communities”." + ], + 'language' => [ + 'hover_text' => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + 'type' => [ + 'hover_text' => "Activity description types. (General, objectives, etc).For more information", + 'help_text' => "Select the type of description that best describes your activity.

    1. General - Unstructured, long description of the activity.

    2. Objectives - Specific objectives for the activity, e.g. taken from logical framework.

    3. Target Groups - Details of groups that are intended to benefit from the activity.

    4. Other - For miscellaneous use. A further classification or breakdown may be included in the narrative" + ], + ], + 'participating_org' => [ + 'hover_text' => "Specify which organisations are involved with this activity, and what their individual roles are. For example they could be a donor, funder, implementing agency, etc.", + 'help_text' => "An organisation involved with the activity. May be a donor, funder, implementing agency, etc. Specifying the @ref identifier is strongly recommended. May contain the organisation name as narrative.

    If the reporting organisation plays a role in the activity it should be repeated here. One organisation may play more than one role (eg, funding and implementing): in such a case each role should be reported and the name of the organisation repeated.For more information", + 'narrative' => [ + 'hover_text' => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + 'help_text' => "Provide the name of the participating organisation.", + ], + 'organisation_role' => [ + 'hover_text' => "An IATI code describing the organisation’s role in the activity (donor, agency, etc.).

    This attribute is required.For more information", + 'help_text' => "Select an option that describes the organisation’s role in the activity (funder, implementing agency, etc.):

    1. Funding - The government or organisation which provides funds to the activity

    2. Accountable - An organisation responsible for oversight of the activity and its outcomes

    3. Extending - An organisation that manages the budget and direction of an activity on behalf of the funding organisation

    4. Implementing - The organisation that physically carries out the activity or intervention.
    " + ], + "reference" => [ + 'hover_text' => "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber}.
    For more information", + 'help_text' => "Please provide the participating organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance." + ], + 'type' => [ + "hover_text" => "The type of organisation issuing the report.For more information", + "help_text" => "Select the type that best describes the participating organisation. Information on all organisation types." + ], + "activity_id" => [ + "hover_text" => "A valid activity identifier published by the participating organisation which points to the activity that it has published to IATI that describes its role in this activity.For more information", + "help_text" => "If the participating organisation has published an activity to IATI for this activity, please provide the activity-id for their activity. You can ask the participating organisation for this, or search for their activity on d-portal.org. Further guidance." + ], + 'crs_channel_code' => [ + "hover_text" => "Under CRS++ Reporting Directives this code identifies the implementing agency. Codes ending in ‘00’ are generic and are similar to the OrganisationType code.For more information", + ], + ], + 'other_identifier' => [ + "hover_text" => "Another identifier for the activity. This may be a publishers own identifier that it wishes to record with the activity. This element is also used to trace changes to activity identifiers, for example when an organisation has changed it’s organisation identifier.For more information", + "reference" => [ + "hover_text" => "The identifier you wish to report. This can be used to report a number of different types of identifiers. See the OtherIdentifier Type codelist for details and options.

    This attribute is required.For more information", + "help_text" => "Please provide the identifier related to this activity." + ], + 'ref_type' => [ + "hover_text" => "The type of identifier being reported, taken from the OtherIdentifierType codelist.

    This attribute is required.For more information", + "help_text" => "If you want to record another identifier related to this activity, you must select which type of identifier you are providing. See descriptions of all possible types in the Other Identifier Type codelist." + ], + 'owner_org' => [ + "hover_text" => "Where applicable, the organisation that owns the other identifier being reported. When used, then either other-identifier/owner-org/@ref or other-identifier/owner-org/narrative/text() MUST be present.For more information", + "help_text" => "Please provide the Organisation Identifier of the owner of the other identifier for the activity. If your organisation is not the owner, you can search other organisations in the IATI Publisher List. If you cannot find the organisation, see further guidance." + ], + 'narrative' => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide a description of the other identifier for the activity.", + ], + ], + 'activity_status' => [ + "help_text" => "An activity status should be provided. This describes the lifecycle status of the activity from pipeline to completion. You can publish activities that are already completed, currently happening or not yet started. As the activity progresses over time, the activity status should be updated.", + "hover_text" => "The current status of the activity.For more information", + 'code' => [ + "hover_text" => "An IATI code defining the current status of the activity.

    This attribute is required.For more information", + "help_text" => "Select an option that defines the current status of your activity.

    1. Pipeline/identification: The activity is being scoped or planned

    2. Implementation: The activity is currently being implemented

    3. Finalisation: Physical activity is complete or the final disbursement has been made, but the activity remains open pending financial sign off or M&E

    4. Closed: Physical activity is complete or the final disbursement has been made

    5. Canceled: The activity has been canceled

    6. Suspended: The activity has been temporarily suspended" + ], + 'activity_date' => [ + "hover_text" => "The planned and actual start and completion dates of the activity. Start dates may reflect either the commencement of funding, planning or physical activity. End dates should, wherever possible, reflect the ending of physical activity.For more information", + "type" => [ + "hover_text" => "An IATI code defining the type of activity date being reported.

    This attribute is required.For more information", + "help_text" => "Please select the type of activity date that you will report.

    1. Planned start: The date on which the activity is planned to start, for example the date of the first planned disbursement or when physical activity starts.

    2. Actual start: The actual date the activity starts, for example the date of the first disbursement or when physical activity starts.

    3. Planned End: The date on which the activity is planned to end, for example the date of the last planned disbursement or when physical activity is complete.

    4. Actual end: The actual date the activity ends, for example the date of the last disbursement or when physical activity is complete." + ], + ], + "date" => [ + "hover_text" => "This attribute is required.
    This value must be of type xsd:date.
    1: The planned start date of the activity must be before the planned end date.
    2: The actual start date of the activity must be before the actual end date.
    3: The actual start date of the activity must not be in the future.
    4: The actual end date of the activity must not be in the future.For more information", + "help_text" => "Provide the date of your activity." + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide any accompanying information or explanation for your chosen activity status.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + 'contact_info' => [ + "hover_text" => "Contact information for the activity. Specify whatever is available. You may repeat this element for each contact person.For more information", + "type" => [ + "hover_text" => "The type of contact. See IATI codelist for values.For more information", + "organisation" => [ + "hover_text" => "The name of the organisation to contact for more information about the activity. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide the name of the organisation to contact for more information about the activity.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + "department" => [ + "hover_text" => "The department within the organisation to contact for more information about the activity. For more information", + "narrative" => [ + "help_text" => "Provide the name of the department within the organisation to contact for more information about the activity. ", + ], + ], + "person_name" => [ + "hover_text" => "The name of the contact person for the activity.For more information", + "narrative" => [ + "help_text" => "Provide the name of the contact for more information about the activity. ", + ], + ], + "job_title" => [ + "hover_text" => "The job title of the contact person at the organisation.For more information", + "narrative" => [ + "help_text" => "Provide the job title of the contact at the organisation. ", + ], + ], + "telephone" => [ + "hover_text" => "The contact telephone number. May be repeated for multiple numbers.For more information", + ], + "email" => [ + "hover_text" => "The contact email address. May be repeated for multiple addresses.For more information", + ], + "website" => [ + "hover_text" => "The contact web address. May be repeated for multiple sites.For more information", + ], + "mailing_address" => [ + "hover_text" => "The contact mailing address.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide any further information about this contact.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + ], + ], + 'activity_scope' => [ + "hover_text" => "The geographical scope of the activity: regional, national, sub-national, etc.For more information", + "activity_code" => [ + "hover_text" => "The geographical scope.. This attribute is required.For more information", + "help_text" => "Select an option that best describes the scope of this activity.

    1. Global - The activity scope is global. For example, some activities, such as research, are not based in or benefitting particular countries or regions

    2. Regional - The activity scope is a supranational region

    3. Multi-national - The activity scope covers multiple countries, that don’t constitute a region

    4. National - The activity scope covers one country

    5. Sub-national: Multi-first-level administrative areas - The activity scope covers more than one first-level subnational administrative areas (e.g. counties, provinces, states)

    6. Sub-national: Single first-level administrative area - The activity scope covers one first-level subnational administrative area (e.g. country, province, state)

    7. Sub-national: Single second-level administrative area - The activity scope covers one second-level subnational administrative area (e.g. municipality or district)

    8. Single location - The activity scope covers one single location (e.g. town, village, farm) Further guidance." + ], + ], + 'recipient_country' => [ + "help_text" => "Each activity in IATI should specify the country (e.g. China) in which the activity is taking place, or the places that will benefit from the activity. If the country is not known, then a supra-national region or regions (e.g. East Asia) must be added.

    There are several ways you can publish information on which country and/or region will benefit from this activity.

    If just one country or region is benefitting from this activity, you should simply select the country or region below. This means that only one country or region will be benefiting from 100% of the funding that you publish for this activity.

    However if multiple countries and/or regions are benefitting from your activity you can:

    1. Publish the recipient country or region for every individual transaction you publish for this activity. You will be required to publish data on at least one transaction for every activity that you publish (publish data on transactions). Each transaction represents money flowing in or out of the activity. You can select a different country or region for each transaction that you publish.

    If you want to provide the recipient county or region for your individual transactions, then you should not select a country or region for the entire activity below.

    2. You can select multiple countries or regions for the entire activity below. If you choose to do this, you must allocate a percentage of funding for the activity to each country and/or region.

    3. You can choose to create a separate activity for every country that is benefitting from this activity’s funding.Further guidance.", + "hover_text" => "A country that will benefit from this activity. If a specific country is not known the recipient-region element should be used instead. For geographical location, use the location element.

    Multiple countries and regions can be reported, in which case the percentage attribute MUST be used to specify the share of total commitments across all reported countries and regions.

    The country can also be specified at transaction rather than activity level. If recipient-country OR recipient-region are reported at the transaction level, ALL transactions MUST contain a recipient-country or recipient-region element and iati-activity/recipient-country and iati-activity/recipient-region MUST NOT be used.For more information", + "country_code" => [ + "hover_text" => "ISO 3166-1 alpha-2 code for the country. This attribute is required.For more information", + "help_text" => "Select a country benefiting from this activity. However, do not select a country here if you want to specify the recipient country benefiting from the individual transactions within this activity." + ], + "percentage" => [ + "hover_text" => "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. Percentages for all reported countries and regions within a vocabulary MUST add up to 100.For more information", + "help_text" => "Select the percentage of funding benefitting this country. Percentages for all reported countries and regions MUST add up to 100. Further guidance." + ], + "narrative" => [ + "help_text" => "Add the free text name and/or description regarding the country benefitting from the activity.", + ], + ], + 'recipient_region' => [ + "help_text" => "If you cannot identify the specific country/countries benefiting from this activity, then you should provide the region instead.

    If a region is included, it must be in addition to any countries specified. If the recipient country(ies) is known, then the corresponding recipient region should not also be added. For example, if 100% of the funding is going to Uganda, then you should record Uganda as the recipient country and you should not add that the funding is going to the region of Africa.

    However, if you know that at least 80% of the expected funding is going to Uganda, you can specify that the unknown 20% is going to the region of Africa.More information", + "hover_text" => "A supranational geopolitical region that will benefit from this activity. For sub-national geographical location, use the location element. Multiple countries and regions can be reported, in which case the percentage attribute MUST be used to specify the share of total commitments across all reported countries and regions. Recipient-region must not be used merely to describe the region of a country reported in recipient-country, but ONLY if the region is a recipient IN ADDITION to the country.For more information", + "region_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary from which the region code is drawn. If it is not present 1 - ‘OECD DAC’ is assumed.For more information", + "help_text" => "There are two lists of regions; the OECD DAC and UN region code lists. Please select one.IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined.

    If you do not choose an option, then the code list 'OECD DAC' is assumed." + ], + "region_code" => [ + "hover_text" => "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute.This attribute is required.
    For more information", + ], + "custom_code" => [ + "hover_text" => "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute.This attribute is required.For more information", + ], + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", + ], + "percentage" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users. For more information", + "help_text" => "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. Percentages for all reported countries and regions within a vocabulary MUST add up to 100.For more information" + ], + "narrative" => [ + "help_text" => "Add the free text name of this region benefitting from the activity.", + ], + "language" => [ + "help_text" => "Select the language of the text you provided in the narrative. If no language is selected, then your default value is assumed." + ], + ], + 'sector' => [ + "hover_text" => "A recognised code, from a recognised vocabulary, classifying the purpose of the activity. Sector MUST EITHER be reported here OR at transaction level for ALL transactions. For more information", + "help_text" => "Provide information on the sector which the activity targets or supports. For example, primary education or agriculture. You can select more than one sector but you must provide at least one.", + "sector_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary (see codelist) used for sector classifications. If omitted, OECD DAC 5-digit Purpose Codes are assumed. It is recommended that OECD DAC 5-digit Purpose Codes are used wherever possible. It is also recommended that if a publisher has its own classification system or systems then the vocabularies 99 or 98 (Reporting Organisation’s own vocabularies) should be used in addition to DAC codes.For more information", + "help_text" => "Please choose the sector list from which you will select the sectors that your activity targets. IATI recommends choosing the OECD DAC 5-digit sector codelist, in which you can make a selection from over 300 sectors.

    In addition to the OECD DAC 5-digit codelist, you can also choose to use another list (see information on all possible options). If you want to use your organisation’s own list of internal sector classifications, select the option: ‘Reporting Organisation’.

    You can choose to use multiple lists. If you use more than one internal sector classification, select ‘Reporting Organisation 2’ (which has the code 98) for the additional list.Further guidance." + ], + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 or 98 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", + "help_text" => "If you have chosen to use an internal sector classification codelist, please provide a link to it.", + ], + "percentage" => [ + "hover_text" => "The percentage of total commitments or total activity budget to this item. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign. All reported sectors from the same vocabulary MUST add up to 100. For more information", + "help_text" => "If you have selected more than one sector (from the same list), each sector must be given a percentage. These percentages can then be applied to the funding amounts to estimate the resources allocated to each sector. For example, using the OECD DAC 5-digit sector codelist you could allocate 50% of the funding for the activity to the sector code ‘teacher training’ (11130) and 50% to ‘primary education’ (11220)." + ], + "narrative" => [ + "hover_text" => "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used).For more information", + "help_text" => "If you have chosen a sector from an internal sector classification codelist, please provide a description of this sector.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + 'tag' => [ + "hover_text" => "Categorisations from established taxonomies that enrich the classification of the activity but that, unlike those reported in the sector element, cannot be associated with percentage splits on finances. For more information", + "help_text" => "You can provide other useful information about your activity through ‘tagging’ it to categorisations from established taxonomies.

    For example, IATI recommends that, if possible, you should tag your activity according to which UN Sustainable Development Goal(s) it is contributing to. Please read guidance on reporting data on the UN Sustainable Development Goals.", + "tag_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary or taxonomy (see non-embedded codelist) used for tag classifications.For more information", + "help_text" => "Choose a list. See information on all options. You may choose to tag your activity according to an internal category list, by choosing ‘Reporting Organisation’." + ], + "targets_tag_code" => [ + "hover_text" => "The code for the tag as defined in the specified vocabulary.

    This attribute is required. For more information", + ], + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined.
    For more information", + "help_text" => "Provide a link to your chosen list.", + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "You can provide additional information on the option that you have chosen.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + 'policy_marker' => [ + "hover_text" => "A policy or theme addressed by the activity. This element was designed for the reporting of OECD DAC CRS policy markers (columns 20-23 and 28-31 of the CRS++ reporting format) but the vocabulary attribute allows it use by other (including local) systems. This element can be repeated for each policy marker.For more information", + "help_text" => "Provide information about the policy or theme addressed by your activity, for example: climate change mitigation or disability. An activity can have multiple policy-markers and percentages do not need to be added to each policy-marker.", + "policy_marker_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary to be used to define policy markers. If omitted then the OECD DAC vocabulary is assumed. For more information", + "help_text" => "Select a list that includes the policy marker(s) related to your activity.

    1 OECD DAC CRS - IATI recommends that you select this list which has 12 options to choose from.

    99 Reporting Organisation - choose this option if you want to provide a code for a policy marker that is defined and tracked by your organisation." + ], + "vocabulary_uri" => [ + "hover_text" => "If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", + "help_text" => "If you have selected 99 Reporting Organisation (above), please provide a link to where your chosen policy marker is listed.", + ], + "significance" => [ + "hover_text" => "An OECD DAC CRS code indicating the significance of the policy marker for this activity. This attribute MUST be used for all OECD DAC CRS vocabularies.For more information", + "help_text" => "If you have chosen a policy or theme from the policy-marker OECD DAC CRS list, then you must indicate how significant it is for your activity. For example, it could be the principal objective or a significant objective for your activity. Please read information on all options before making a selection." + ], + "policy_marker" => [ + "hover_text" => "A policy marker code from the codelist specified in the vocabulary. This attribute is required. For more information", + ], + "policy_marker_text" => [ + "hover_text" => "A policy marker code from the codelist specified in the vocabulary. This attribute is required.
    For more information", + ], + "narrative" => [ + "hover_text" => "A description of the policy marker. This MUST ONLY be used if vocabulary is 99 (the reporting organisation’s own marker vocabulary). May be repeated for multiple languages.For more information", + "help_text" => "If you have selected 99 Reporting Organisation (above), please provide a description for the policy marker(s) that you have chosen.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.
    This value should be on the Language codelist.For more information", + ], + ], + 'collaboration_type' => [ + "hover_text" => "The type of collaboration involved in the activity’s disbursements, e.g. “bilateral” or “multilateral”.For more information", + "help_text" => "You can describe how funds are flowing between organisations within this activity. For example, funds could be flowing bilaterally, meaning between two governments. This is largely applicable to bilateral and multilateral organisations.", + "collaboration_type" => [ + "hover_text" => "A code from the OECD DAC CRS “Bi_Multi” codelist.For more information", + "help_text" => "Please select a collaboration type, if there is an option that is applicable to your activity. See information on all options. Otherwise, leave this blank." + ], + ], + 'default_flow_type' => [ + "hover_text" => "Whether the activity is funded by Official Development Assistance (ODA), Other Official Flows (OOF), etc. For more information", + "help_text" => "Flow type is another way to categorise financial flows. It distinguishes the flow as official development assistance (ODA), other official flows (OOF), or several types of private flows, including private grants often provided by NGOs and other civil society organisations.", + "default_flow_type" => [ + "hover_text" => "A code from the OECD DAC CRS 'Type of flow' codelist. This attribute is required.For more information", + "help_text" => "If this activity's funds can be classified by the following options, please make a selection here. Otherwise, leave blank." + ], + ], + "default_finance_type" => [ + "hover_text" => "The type of finance (e.g. grant, loan, debt relief, etc). This the default value for all transactions in the activity report; it can be overridden by individual transactions. For more information", + "help_text" => "Finance type specifies the financial instrument that is being used for this activity. For example, financing is most commonly delivered as a grant or a loan.", + "default_finance_type" => [ + "hover_text" => "A code from the OECD DAC CRS “Type of finance” codelist. This attribute is required.
    For more information", + "help_text" => "Please select a finance type for this activity from the following options." + ], + ], + 'default_aid_type' => [ + "default_aid_type_vocabulary" => [ + "hover_text" => "A code for the vocabulary aid-type classifications. If omitted the AidType (OECD DAC) codelist is assumed. The code must be a valid value in the AidTypeVocabulary codelist. For more information", + "help_text" => "Select a list that includes the aid-type related to your activity (if any are applicable). Otherwise leave this blank. You can choose to select an aid-type from more than one list.

    ]1 OECD DAC - IATI recommends that you select this list which has over 20 options to choose from. Then, in addition you can select an option from another list

    2 Earmarking Category - select this list to categorise how flexible humanitarian funding is. There are 4 earmarking categories. Understand more about the categories in Annex 1

    3 Earmarking Modality - use this list to choose the specific earmarking modality to describe your activity’s humanitarian funding. All earmarking modality options are listed in Annex 1

    4 Cash and Voucher Modalities - select this list to specify if your activity is responding to a humanitarian event by providing cash and voucher assistance. More information.
    ", + ], + "default_aid_type" => [ + "hover_text" => "A code from the specified vocabulary. This attribute is required. For more information", + ], + ], + 'default_tied_status' => [ + "hover_text" => "Whether the aid is untied, tied, or partially tied. This element specifies a default for all the activity’s financial transactions; it can be overridden at the individual transaction level.For more information", + "help_text" => "You can state the tied status of this transaction. Here you can specify if funds are tied - where they must be spent on goods or services procured from a particular country (e.g. donor country) or group of countries. Or if funds are untied, this is where the recipient organisation is allowed to procure from any country.", + "default_tied_status" => [ + "hover_text" => "An IATI code interpreting the usage of Columns 36-38 of the CRS++ reporting format. (Amount tied, Amount partially untied, Amount tied). For more information", + "help_text" => "Select a default-tied-status, if applicable to your activity. See descriptions of all options. Otherwise leave blank." + ], + ], + 'country_budget_items' => [ + "hover_text" => "This item encodes the alignment of activities with both the functional and administrative classifications used in the recipient country’s Chart of Accounts. This applies to both on- and off-budget activities.For more information", + "country_budget_vocabulary" => [ + "hover_text" => "An IATI code for the common functional classification or country system (This allows for common codes, country-specific, or any other classification agreed between countries and donors). For more information", + ], + "budget_item" => [ + "hover_text" => "Identifier for a single item in the recipient-country budget. If more than one identifier is reported the percentage share must be reported and all percentages should add up to 100 percent.For more information", + "code" => [ + "hover_text" => "A code for the budget-item from the vocabulary specified. This attribute is required.For more information", + ], + "percentage" => [ + "hover_text" => "When multiple budget-item elements are declared within a single country-budget-items element, then, for each vocabulary used, the percentage values should sum 100%.For more information", + "help_text" => "If no value is selected, default value is assumed.", + ], + "description" => [ + "hover_text" => "A longer, human-readable description of the budget-item. May be repeated for different languages. For more information", + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + ], + 'humanitarian_scope' => [ + "hover_text" => "Classification of emergencies, appeals and other humanitarian events and actions. For more information", + "help_text" => "The ‘humanitarian-scope’ element can be used to specify the emergency and/or appeal that your activity is responding to", + "type" => [ + "hover_text" => "A code for the type of event or action being classified. For more information", + "help_text" => "Select which type of information you can provide:

  • Emergencies (type 1)
    Select this option if you can provide the GLIDE number for the specific humanitarian emergency that your activity is responding to. Alternatively, select this option if you can declare a code for the emergency from another public list.

  • Appeals (type 2)
    Select this option if your activity is contributing to a UN Office for the Coordination of Humanitarian Affairs (OCHA) Humanitarian Response Plan or Flash Appeal. These codes are created by UN OCHA for use in their Financial Tracking Service (FTS). Alternatively, select this option if you can declare a code for the appeal from another public list.
  • ", + ], + "vocabulary" => [ + "hover_text" => "A code for a recognised vocabulary of terms classifying the event or action.

    This attribute is required. For more information", + "help_text" => "Select the list that you will use to identify the emergency or appeal that your activity is responding to:

    1-2 Glide
    2-1 Humanitarian Plan
    99 Reporting Organisation - select this option if you can declare a code for the emergency or appeal from an alternative public list.", + ], + "vocabulary_uri" => [ + "hover_text" => "A u.r.i. for the vocabulary specified which provides access to the list of codes and descriptions. For more information", + "help_text" => "Provide a link to the list of emergencies or appeals that you will use, which includes its codes and descriptions.", + ], + "code" => [ + "hover_text" => "A code for the event or action from the vocabulary specified.For more information", + "help_text" => "Provide the code for the specific emergency or appeal that your activity is responding to.

    For example, if you are providing a code for an emergency that has a Glide Number, the format for this code would be: [Emergency Type] + [Year] + [Number] + [Country].", + ], + "narrative" => [ + "hover_text" => "The description of the code specified. For more information", + "help_text" => "If you have used a code for the emergency or appeal from an alternative public list (i.e. you have selected 99 Reporting Organisation above), please provide a description of the code that you have specified.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + 'capital_spend' => [ + "hover_text" => "The percentage of the total commitment that is for capital spending. For more information", + "help_text" => "Please indicate how much of the total activity’s funding will be spent on capital. Capital describes physical assets with a useful life of more than one year. For example, a road.", + "capital_spend" => [ + "hover_text" => "The percentage of the total commitment allocated to or planned for capital expenditure. Content must be a decimal number between 0 and 100 inclusive, with no percentage sign.For more information", + "help_text" => "Percentage must not exceed 100.", + ], + ], + 'related_activity' => [ + "hover_text" => "Another separately reported IATI activity that is related to this one. The ‘type’ attribute describes the type of relationship: (eg. parent, child, multifunded). It is strongly recommended that linkage between activities in a hierarchical group should always be managed by use of this element with @type of 1 (parent) or 2 (child). For more information", + "help_text" => "If this activity is part of a programme with multiple activities within one organisation, you should include details of all related activities. Please read more about the types of related activities that you can report.

    Please only refer to your own activities here.", + "activity_identifier" => [ + "hover_text" => "A valid activity identifier (as defined in iati-activity/iati-identifier).", + "help_text" => "If you have a related activity to report, please provide its full activity-id (including the organisation-id part). See more information on activity-ids. You can ask the person(s) who reported the related activity for this, or search for the activity on d-portal.org. See further guidance.", + ], + "relationship_type" => [ + "hover_text" => "An IATI code for the type of relationship", + "help_text" => "Please select the type of relationship between the activity being reported and the related activity from this list.", + ], + ], + 'conditions' => [ + "hover_text" => "Specific terms and conditions attached to the activity that, if not met, may influence the delivery of commitments made by participating organisations. For more information", + "help_text" => "Please declare any conditions or specific terms that are attached to this activity. For example, requirements issued by your funder or a six month review to assess whether or not the activity is worth continuing.

    If a condition relates to the whole organisation, such as organisation-wide terms and conditions, it should not be reported within this activity. Instead, you should report this in the document-link element in your organisation file.Further guidance.", + "condition_attached" => [ + "hover_text" => "A yes/no (1/0) value stating whether there are conditions attached to the activity. It is strongly recommended that this attribute is reported, even if there are no conditions attached (i.e. attached=”0”)", + "help_text" => "Please select ‘Yes’ if your activity has a condition attached to it or ‘No’ if it does not.", + ], + "condition" => [ + "hover_text" => "The text of a specific condition attached to the activity. Organisation-wide terms and conditions that apply to all activities should not be reported here, but in either iati-organisation/document-link or iati-activity-document-link. For more information", + ], + "condition_type" => [ + "hover_text" => "An IATI code defining the type of condition. ", + "help_text" => "Select the type of condition that you want to report. Three types of condition can be reported:

    Policy: e.g. a particular policy needs to be implemented by the organisation receiving funds.

    Performance: e.g. certain outputs or outcomes need to be achieved.

    Fiduciary: e.g. the recipient is required to use certain public financial management or public accountability measures.Full description of types.", + ], + "narrative" => [ + "help_text" => "Provide a short description of the condition here.

    You can provide more information by adding a link to a relevant document or webpage in the activity document-link element.", + ], + ], + 'legacy_data' => [ + "hover_text" => "The legacy data element allows for the reporting of values held in a field in the reporting organisation’s system which is similar, but not identical to an IATI element. For more information", + "help_text" => "You can link this activity to your organisation’s internal data and record which IATI Standard element it most relates to.", + "legacy_name" => [ + "hover_text" => "The original field name in the reporting organisation’s system", + ], + "value" => [ + "hover_text" => "The original field value in the reporting organisation’s system", + ], + "iati_equivalent" => [ + "hover_text" => "The name of the equivalent IATI element.", + ], + ], + 'document_link' => [ + "hover_text" => "A link to an online, publicly accessible web page or document. For more information", + "help_text" => "You can report further information about this activity by providing a publicly accessible link to a document or webpage.

    If documents are available in other languages and stored separately, please provide them by creating additional document elements.Further guidance", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. 'http://www.example.org/doc.odt'.For more information", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "help_text" => "If you know the format of the document file, please type it using an option from this list.", + ], + "title" => [ + "hover_text" => "A short, human-readable title.For information", + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + "help_text" => "Select a category of the document or webpage that you have provided from this list.", + ], + ], + "language" => [ + "code" => [ + "help_text" => "Select the language of the document or webpage.", + ], + ], + "document_date" => [ + "hover_text" => "The date of publication of the document that is being linked to. (@iso-date).For more information", + ], + ], + 'location' => [ + "hover_text" => "The sub-national geographical identification of the target locations of an activity. These can be described by gazetteer reference, coordinates, administrative areas or a textual description. Any number of locations may be reported.For more information", + "help_text" => "Provide the sub-national location/s of an activity, if it is known. However location data should only be added when it is safe to do so. It is the publishing organisation’s responsibility to ensure that the data it publishes is safe.

    You can provide geographic coordinates of a location, the name and description of a location, the administrative area or other features of the location e.g. health centre, village etc.Further guidance.", + "reference" => [ + "hover_text" => "An internal reference that describes the location in the reporting organisation’s own system.For more information", + "help_text" => "You can provide an internal reference used by your organisation to describe the location for example: AF-KAN.", + ], + "location_id" => [ + "hover_text" => "A unique code describing the location according to a recognised gazetteer or administrative boundary repository. Administrative areas should only be reported here if the location being defined is the administrative area itself. For describing the administrative area/s within which a more specific location falls the location/administrative element should be used.For more information", + "help_text" => "You can provide a unique code describing the location according to a recognised gazetteer or administrative boundary repository. You can select an option of a gazetteer or administrative boundary repository from the list below.", + "vocabulary" => [ + "hover_text" => "An IATI code for a recognised gazetteer or administrative boundary repository.
    This attribute is required.For more information", + "help_text" => "Please select the gazetteer or administrative boundary repository that you will provide a code from.View more information about each option.", + ], + "code" => [ + "hover_text" => "A code from the gazetteer or administrative boundary repository specified by the vocabulary
    For more information", + "help_text" => "Provide a unique code describing the location with a recognised gazetteer or administrative boundary repository (see list).", + ], + ], + "location_reach" => [ + "hover_text" => "Does this location describe where the activity takes place or where the intended beneficiaries reside? For more information", + "help_text" => "Please specify if the location describes where the activity takes place or where the intended beneficiaries reside.", + "code" => [ + "hover_text" => "An IATI code for the geographic scope of the activity. This attribute is required.For more information", + "help_text" => "Please choose an option to describe the reach of the location.

    1. Activity - The location specifies where the activity is carried out

    2. Intended Beneficiaries - The location specifies where the intended beneficiaries of the activity live", + ], + ], + "name" => [ + "hover_text" => "The human readable name for the location.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide the free text name of the location of the activity.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "help_text" => "Select the language of the text you provided in the narrative. If no language is selected, then your default language is assumed." + ], + ], + "description" => [ + "hover_text" => "A description that qualifies the location, not the activity.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + "help_text" => "Provide a description of the location of the activity.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + "activity_description" => [ + "hover_text" => "A description that qualifies the activity taking place at the location. This should not duplicate information provided in the main activity description, and should typically be used to distinguish between activities at multiple locations within a single iati-activity record.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + "administrative" => [ + "hover_text" => "Coded identification of national and sub-national divisions according to recognised administrative boundary repositories. Multiple levels may be reported.For more information", + + "help_text" => "You can provide a unique code to describe the activity location according to an administrative boundary repository.", + "vocabulary" => [ + "hover_text" => "An IATI code for a recognised administrative boundary repository.For more information", + + "help_text" => "Select an administrative boundary list that includes a code to represent your activity location." + ], + "code" => [ + "hover_text" => "The code for the administrative area being reported from the vocabulary specified.For more information", + "help_text" => "Provide a code to represent your activity location (from your chosen administrative boundary list).", + ], + "level" => [ + "hover_text" => "A number defining a subdivision within a hierarchical system of administrative areas. The precise system for defining the particular meaning of each @level value is determined by the @vocabulary being used.For more information", + "help_text" => "Within your chosen administrative boundary list, you can provide a number to define a subdivision within a hierarchical system of administrative areas.", + ], + ], + "point" => [ + "hover_text" => "The point element is based on a subset of the GML 3.3 Point element.For more information", + "help_text" => "You can provide geo-coordinates for the location, in the format of latitude and longitude coordinates

    Coordinates are published using the point and pos elements. The point element is always:

    The pos element then contains the latitude coordinate (the first number), followed by the longitude coordinate (the second number) e.g. -46.7733 167.6321.

    Please note that coordinates can refer to an 'exact' or an 'approximate' location. This should be specified using the location exactness element.More information.", + "srs_name" => [ + "hover_text" => "The name of the spatial reference system used by the coordinates.For more information", + "help_text" => "This value never changes.", + ], + "pos" => [ + "hover_text" => "The latitude and longitude coordinates in the format 'lat lng'.For more information", + "help_text" => "Add latitude and longitude separated by a space e.g. 31.616944 65.716944

    If you don't already have a way to find the coordinates for an activity, there are some online platforms to help, e.g. Google Maps and Latlong.net. To find the coordinates for an activity on Google Maps, right-click over the location of the activity and select 'what's here?'. The coordinates will then be presented. Alternatively, type in the coordinates and the location of the activity that will be pinpointed on the map.More information." + ], + 'exactness' => [ + 'hover_text' => "Defines whether the location represents the most distinct point reasonably possible for this type of activity or is an approximation due to lack of more detailed information.For more information", + 'code' => [ + 'hover_text' => "A code from the Geographic Exactness Codelist. This attribute is required.For more information", + 'help_text' => "If you have provided the geo-coordinates for the activity location, then select an option from the Geographic Exactness list to specify whether the location is exact or approximate.", + ], + ], + 'location_class' => [ + 'hover_text' => "Whether the location refers to a structure, a populated place (e.g. city or village), an administrative division, or another topological feature (e.g. river, nature reserve).For more information", + 'code' => [ + 'hover_text' => "A code from the Location Class codelist. This attribute is required.For more information", + 'help_text' => "Please specify the form of the activity location from the Geographic Location Class list. For example a populated place (town, farm), or topographical feature (mountain, river).", + ], + ], + 'feature_designation' => [ + 'hover_text' => "A more refined coded classification of the type of feature referred to by this location.For more information", + 'code' => [ + 'hover_text' => "A feature designation code form the authorised list (maintained by the US National Geospatial-Intelligence Agency).For more information", + 'help_text' => "You can provide more detail on the type of your activity's location (e.g. beach, well or college).Please make a selection from the Location Type list.", + ], + ], + ], + ], + 'planned_disbursement' => [ + "hover_text" => "The planned disbursement element should only be used to report specific planned cash transfers. These should be reported for a specific date or a meaningfully predictable period.For more information", + "help_text" => "You can publish data on your planned cash transfers to organisations (or between two other organisations) as part of this activity.

    The purpose of planned disbursements is to publish predefined payment schedules. Planned disbursements should be reported for a specific date or a meaningfully predictable period. Planned disbursements should be reported in addition and should not replace the activity’s budget.", + "period_start" => [ + "hover_text" => "The exact date of the planned disbursement OR the starting date of the period in which this specific disbursement will be made.For more information" + ], + "period_end" => [ + "hover_text" => "The ending date for the period in which this specific disbursement will be made.For more information" + ], + "planned_disbursement_type" => [ + "hover_text" => "The purpose of planned-disbursement is to describe any predefined payment schedule.For more information", + "help_text" => "Specify if this is an ‘original’ planned disbursement (prepared when the original commitment was made) or has subsequently been ‘revised’.", + ], + "value" => [ + "hover_text" => "The amount that is planned to be disbursed in the specified currency. For more information", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", + "help_text" => "Select the currency that you have provided the value in. If no value is selected, default value is assumed.", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.This attribute is required. For more information", + "help_text" => "Provide the date on which the planned disbursement was agreed.", + ], + ], + "provider_org" => [ + "hover_text" => "The organisation from which the planned disbursement will originate. If omitted the reporting-org is assumed.For more information", + "help_text" => "Will your organisation be disbursing these funds? If so then you are the provider organisation. If not, please provide information on the organisation who will be disbursing these funds.", + "reference" => [ + "hover_text" => "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber} where {RegistrationAgency} is a valid code in the Organisation Registration Agency code list and {RegistrationNumber} is a valid identifier issued by the {RegistrationAgency}. If this is not present then the narrative MUST contain the name of the organisation.For more information", + "help_text" => "Please type the provider organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.", + ], + "provider_activity_id" => [ + "hover_text" => "The identifier for the activity in which the planned disbursement will be reported. If omitted the current activity is assumed. For more information", + "help_text" => "The provider organisation may have published IATI data on these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the provider organisation for this activity-id, or search for their activity on d-portal.org. See further guidance.

    If you are the provider organisation then leave this blank.", + ], + "type" => [ + "hover_text" => "The type of organisation providing the funds.For more information", + "help_text" => "Select the type that best describes the provider organisation (if this is not your organisation). Information on all organisation types.", + ], + "narrative" => [ + "hover_text" => "The name of the organisation. This can be repeated in multiple languages.For more information", + "help_text" => "If the provider organisation does not have an IATI Organisation Identifier, the name of the organisation must be given.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "help_text" => "Select the language of the name provided. If no language is selected, your default language is assumed.", + ], + ], + "receiving_org" => [ + "reference" => [ + "hover_text" => "The organisation receiving the money from the planned disbursement.For more information", + "help_text" => "Provide information on which organisation will be receiving the funds.", + ], + "receiver_activity_id" => [ + "hover_text" => "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber} where {RegistrationAgency} is a valid code in the Organisation Registration Agency code list and {RegistrationNumber} is a valid identifier issued by the {RegistrationAgency}. If this is not present then the narrative MUST contain the name of the organisation.For more information", + "help_text" => "Please provide the receiver organisation's IATI Organisation Identifier (org-ID). The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.", + ], + "type" => [ + "hover_text" => "If outgoing funds are being provided to another activity that is reported to IATI, this may, if possible, record the unique IATI activity identifier for that activity.For more information", + "help_text" => "If possible, please provide the activity-id for the receiver's activity which will receive this disbursement. You can ask the receiver organisation for this activity-id, or search for their activity on d-portal.org. See further guidance.", + ], + "narrative" => [ + "hover_text" => "The type of organisation receiving the funds.For more information", + "help_text" => "Select the type that best describes the receiver organisation. Information on all organisation types.", + ], + "language" => [ + "hover_text" => "The name of the organisation. This can be repeated in multiple languages. For more information", + ], + ], + ], + 'budget' => [ + "hover_text" => "The value of the activity’s budget for each financial quarter or year over the lifetime of the activity. The purpose of this element is to provide predictability for recipient planning on an annual basis. The status explains whether the budget being reported is indicative or has been formally committed. For more information", + "help_text" => "Provide the amount of finance expected to be spent as part of this activity. You need to provide budget(s) broken down by time periods of a year or less covering the whole life of the activity. Publishing budgets for each quarter is helpful for data users. A budget must not span more than 12 months.

    You should provide your budget(s) for your activity as soon as possible. You can then update this over time as more or less funding comes in, or the scope of the activity changes. More information.", + "budget_status" => [ + "hover_text" => "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", + "help_text" => "Please select a status for this budget:

    1 Indicative: a non-binding estimate for the described budget

    2 committed a binding agreement for the described budget

    If this budget changes status, you should change the status of this budget here. You should not create a new budget for the same time period with a different status. More information.", + ], + "budget_type" => [ + "hover_text" => "Whether this is the original budget (prepared when the original commitment was made) or has subsequently been revised.For more information", + "help_text" => "Select the type of budget that you a providing:

    1 Original The original budget allocated to the activity. Select this option if you are publishing information about this budget for the first time.

    2 Revised The updated budget for an activity. Select this option if you are revising your original budget.

    For example: an activity lasts a year. The original budget was $10,000 and was later decreased by $2,000. The final total budget for the activity is $8,000.You would need to create two budgets for this time period. Firstly you would add a budget with the type ‘original’ with the start and end date for the year, with the value of $10,000. Once you know that the budget has been revised, you would then add another budget for the same dates, with the type ‘revised’ with a value of $8,000.

    If there are further changes to the revised budget, you should change the value in the ‘revised’ budget. Do not create additional ‘revised’ budgets for the same time period.

    Therefore only one original and one revised budget should be published for each time period. More information.", + ], + "period_start" => [ + "hover_text" => "The start of the budget period.For more information", + "date" => [ + "hover_text" => "This attribute is required.

    This value must be of type xsd:date.For more information", + "help_text" => "Provide the start date of the budget.", + ], + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year). For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date.For more information", + "help_text" => "Provide the end date of the budget.", + ], + ], + "budget_value" => [ + "hover_text" => "The budget for this period.For more information", + "help_text" => "Provide the total finance for this budget", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified.For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.This attribute is required.For more information", + ], + ], + ], + 'result' => [ + "hover_text" => "A container for reporting outputs, outcomes, impacts and other results that stem directly from the activity. This may be repeated for each type of result reported. For more information.", + "help_text" => "Results describe the benefit or intended benefits of an activity; these can be broken down into types: outputs, outcomes and impacts. You can provide multiple results for your activity. Updating results regularly means that data users can track an activity’s progress, including whether the activity was a success and what challenges were faced. Both positive and negative results should be included. See guidance for more information: Results Information and Understanding results data.

    Please note: security implications may prevent results data from being published, or require results to be aggregated. Any security considerations should be outlined in an organisation’s exclusion policy.", + "type" => [ + "hover_text" => "An IATI code for the type of result being reported. For more information.", + "help_text" => "Select the type of result that your activity is aiming to achieve or has already achieved.

    Output - Results of the activity that came about as a direct effect of your work and specifically, what is done, and what communities are reached. For example, X number of individuals trained.

    Outcome - Results of the activity that produce an effect on the overall communities or issues you serve. For example lower rate of infection after a vaccination programme.

    Impact - The long term effects of the outcomes, that lead to larger, overarching results, such as improved life-expectancy.

    Other - Another type of result, not specified above", + ], + "aggregation_status" => [ + "hover_text" => "Flag indicating whether the data in the result set are suitable for aggregation.For more information.", + "help_text" => "Select yes if the results data that you provide is suitable for aggregation (the data user should be able to add them up to get the total)." + ], + "title" => [ + "hover_text" => "A short, human-readable title.For more information.", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Provide a title for the result. For example ‘People have access to independent media covering a diverse range of outcomes’. ", + ], + ], + "description" => [ + "hover_text" => "A longer, human-readable description. For more information.", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Provide a longer description for the result.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + "help_text" => "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed.", + ], + + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document expanding on the result. For more information.", + "help_text" => "You may provide more information about the result by providing a link to an online, publicly accessible web page or document.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. http://www.example.org/doc.odt. For more information.", + "help_text" => "Type the URL for the document that provides more information about the result. Make sure it includes “https://…", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "language" => [ + "help_text" => "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed.", + ], + ], + "description" => [ + "language" => [ + "help_text" => "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed.", + ], + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information.", + "help_text" => "If you have provided a document link, then you must select a category that best describes the document.", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + "help_text" => "Select a document category from this list.", + ], + ], + "language" => [ + "code" => [ + "hover_text" => "ISO 639-1 language code. For more information", + ], + ], + ], + "reference" => [ + "hover_text" => "A reference element to allow for the coded identification of results framework. For more information", + "help_text" => "If this result is contained in a results framework, then you may provide information about it. You can choose to provide a reference to a results framework in two ways:

    1. You can provide a reference to a results framework for the result here OR

    2. You can provide a reference to a results framework for each individual indicator that measures this result. For every result that you publish, you will be required to provide an indicator (which measures the result).

    Option 2 is recommended. To implement this option, leave the next three fields blank: code, vocabulary, vocabulary uri.

    Do note: You cannot provide a reference to a results framework for both the result and indicator. See guidance for more information: Results Information ", + + "vocabulary" => [ + "hover_text" => "A code for the results framework vocabulary. The code must be a valid value in the ResultVocabulary codelist. For more information", + ], + + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users.For more information", + ], + ], + ], + 'indicator' => [ + "hover_text" => "The indicator(s) that are measured to meet the results. There can be multiple indicators for each result.For more information", + "help_text" => "

    Example usage: An activity is working towards the outcome: ‘people to have access to independent media covering a diverse range of outcomes’. One of the ways this is being measured is through ‘the percentage of journalists who feel free to express their opinion’ (which is an indicator). This is measured through a bi-annual survey where they are asked to score how free they feel on a scale of 1 - 4.

    See Results Information for more details on this example and Understanding results data for further examples.", + "measure" => [ + "hover_text" => "An IATI code defining the unit of measure in which the value is reported. For more information", + "help_text" => "Select the unit of measurement for the indicator:

    Unit - The indicator is measured in units e.g. number of workshops delivered.

    Percentage - The indicator is measured in percentages e.g. percentage of the population who have received a vaccine.

    Nominal - The indicator is measured as a quantitative nominal scale. For example gender, race etc.

    Ordinal - The indicator is measured as a quantitative ordinal scale. For example: “very satisfied,” “satisfied,” “dissatisfied,” and “very dissatisfied.” In an ordinal scale, the order of answer options is what’s significant—you can’t quantify the exact difference between each answer option. The difference between responses like “very satisfied” and “satisfied,” for example, is relative, not exact.

    Qualitative - The indicator is qualitative and this is often a description, such as detailing more favourable attitudes towards gender equality amongst trained staff.", + ], + "ascending" => [ + "hover_text" => "A flag describing the behaviour of the indicator. It is “true” if the indicator improves from small to large (e.g. clinics built); false if it improves from large to small (e.g. cases of a disease). For more information", + "help_text" => "Select an option here if your indicator is a numerical (quantitative) measure. If a high number shows improvement, select 1 (true). If a low number shows improvement, select 0 (false).", + ], + "aggregation_status" => [ + "hover_text" => "Flag indicating whether the data in the result set are suitable for aggregation. For more information", + "help_text" => "Select yes if the results data that you provide is suitable for aggregation (the data user should add them up to get the total)." + ], + "title" => [ + "hover_text" => "A short, human-readable title.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Provide a title or brief description of the indicator. Using the same example above, a narrative could be: “The percentage of journalists who feel free to express their opinion (scoring 3 or 4 with a scale of 1 - 4)\".

    See Results Information for more details on this example.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document.For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages.For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + + ], + "document_date" => [ + "hover_text" => "The date of publication of the document that is being linked to. (@iso-date). For more information", + "date" => [ + "hover_text" => "The date of publication of the document that is being linked to.For more information", + "help_text" => "Provide the date of publication for the document.", + ] + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document expanding on the result. For more information", + "help_text" => "You may provide more information about the result indicator by providing a link to an online, publicly accessible web page or document.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. http://www.example.org/doc.odt. For more information.", + "help_text" => "Provide the link to a specific results indicator being reported. Make sure it includes “https://…", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "language" => [ + "help_text" => "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed.", + ], + ], + 'title' => [ + "hover_text" => "A short, human-readable title. For more information", + + ], + "description" => [ + "language" => [ + "help_text" => "Select the language of the text that you provided in the narrative. If no language is selected, your default language is assumed.", + ], + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "help_text" => "If you have provided a document link, then select a category that best describes the document.", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + ] + ], + "language" => [ + "code" => [ + "hover_text" => "ISO 639-1 language code. For more information", + ] + ], + ], + "reference" => [ + "hover_text" => "A reference element to allow for the coded identification of results framework. For more information", + "help_text" => "If the indicator that you report is included in an existing results framework, please provide information on it here.", + "vocabulary" => [ + "hover_text" => "A code for the results framework vocabulary. The code must be a valid value in the ResultVocabulary codelist. For more information", + "help_text" => "Select the results framework that your indicator is included in. If the results framework is not listed, select '99 Reporting Organisation'.", + ], + "indicator_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. While this is an optional field it is STRONGLY RECOMMENDED that all publishers use it to ensure that the meaning of their codes are fully understood by data users. For more information", + "help_text" => "If you selected a results framework, provide a link to it. If you selected 99 (Reporting Organisation), it is strongly recommended that a link to the codelist is included here. This helps ensure that users can understand the meaning of the code.", + ], + ], + "baseline" => [ + "hover_text" => "The baseline value for the indicator. For more information", + "help_text" => "For each indicator please provide a baseline value, a target and the actual result achieved. The baseline is the starting point. The target is a result an organisation wants an activity to achieve in a certain period of time. The actual result is what was achieved at the end of that period.

    For example: The starting value (baseline) was 15% of journalists felt free to express their opinions. At the end of the chosen time period, the target was set at 50%. The activity achieved its target, as by the end of the period (actual) 53% of journalists felt free to express their opinions.

    See Results Information for more details on this example and Understanding results data for further examples.", + "year" => [ + "hover_text" => "The year the baseline value was taken (yyyy). For more information", + "help_text" => "Provide the year when the indicator’s baseline was measured.", + ], + "date" => [ + "hover_text" => "The date of baseline value was taken. For more information", + "help_text" => "Provide the date for when the indicator’s baseline was measured.", + ], + "value" => [ + "hover_text" => "The baseline value. For more information", + "help_text" => "Provide the baseline value. For example if the value is 15 percent, just type 15 (as you have provided the unit of measure above).

    Please leave this blank if this indicator uses a qualitative measure (and add your baseline in the comment field below).", + ], + "comment" => [ + "hover_text" => "A human-readable comment associated with a piece of aid information. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "If the indicator is a qualitative measure, provide a descriptive baseline here.

    You may also add other descriptive information about your baseline here. For example: “Baseline measured in a survey amongst 1083 journalists in country X”.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "dimension" => [ + "hover_text" => "A category used for disaggregating the result by gender, age, etc. For more information", + "help_text" => "Please note: A baseline can have multiple dimensions.", + "name" => [ + "hover_text" => "Freetext description of a category being disaggregated. For more information", + "help_text" => "For example an activity could declare the dimension's name as 'sex', with a value of 'female'.", + ], + "value" => [ + "hover_text" => "Description of the value being disaggregated. For more information", + ], + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document expanding on the result. For more information", + "help_text" => "You may provide more information about the indicator baseline by providing a link to an online, publicly accessible web page or document.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", + "help_text" => "Type the URL for the document that provides more information about the indicator baseline. Make sure it includes “https://…", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + ], + "title" => [ + "hover_text" => "A short, human-readable title. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + ], + ], + "language" => [ + "code" => [ + "hover_text" => "ISO 639-1 language code. For more information", + ], + ], + ], + "location" => [ + "hover_text" => "A location already defined and described in the iati-activity/location element.For more information", + "reference" => [ + "hover_text" => "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information", + ], + ], + ], + ], + 'period' => [ + "hover_text" => "The period covered for the results reported. Multiple periods can be reported for a single indicator. For more information", + "help_text" => "Each indicator can have a given time period with a start and an end date. This is the time period in which the indicator is being measured, e.g. agricultural season or school term.", + "target" => [ + "hover_text" => "The target milestone for this period. For more information", + "help_text" => "The target is a result an organisation wants an activity to achieve in a certain period of time.", + "value" => [ + "hover_text" => "The target value. For more information", + "help_text" => "Add a target value if your indicator is a numerical (quantitative) measure e.g.measured by units or percentages.

    Please leave this blank if this indicator uses a qualitative measure (and add your target in the comment field below).", + ], + "comment" => [ + "hover_text" => "A human-readable comment associated with a piece of aid information. For more information", + "help_text" => "If the indicator is a qualitative measure, provide a descriptive target here.

    You may also add other descriptive information about the target here.", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "dimension" => [ + "name" => [ + "hover_text" => "Freetext description of a category being disaggregated. For more information", + ], + "value" => [ + "hover_text" => "Description of the value being disaggregated. For more information", + ], + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document expanding on the result. For more information", + "help_text" => "You may provide more information about the indicator target by providing a link to an online, publicly accessible web page or document.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", + "help_text" => "Type the URL for the document that provides more information about the indicator target. Make sure it includes “https://…", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + ], + "title" => [ + "hover_text" => "A short, human-readable title. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ] + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + ], + ], + "language" => [ + "hover_text" => "The ISO 639-1 language code in which target document is written, e.g. “en”. Can be repeated to describe multi-lingual documents. For more information", + "language" => [ + "hover_text" => "ISO 639-1 language code.For more information", + ], + ], + "location" => [ + "reference" => [ + "hover_text" => "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information", + ] + ], + ], + ], + "actual" => [ + "hover_text" => "A record of the achieved result for this period. For more information", + "help_text" => "The actual is what was achieved at the end of that period.", + "value" => [ + "hover_text" => "The actual measure. For more information", + "help_text" => "Add the actual value achieved, if your indicator is a numerical (quantitative) measure e.g.measured by units or percentages.

    Please leave this blank if this indicator uses a qualitative measure (and add your actual in the comment field below).", + ], + "comment" => [ + "hover_text" => "A human-readable comment associated with a piece of aid information. For more information", + "help_text" => "If the indicator is a qualitative measure, provide a descriptive of the actual result reported here.

    You may also add other descriptive information about the actual result here.", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "dimension" => [ + "hover_text" => "A category used for disaggregating the result by gender, age, etc. For more information", + "name" => [ + "hover_text" => "Freetext description of a category being disaggregated. For more information", + ], + "value" => [ + "hover_text" => "Description of the value being disaggregated. For more information", + ], + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document expanding on the result. For more information", + "help_text" => "You may provide more information about the actual value or result by providing a link to an online, publicly accessible web page or document.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. “http://www.example.org/doc.odt”. For more information", + "help_text" => "Type the URL for the document that provides more information about the actual value or result. Make sure it includes “https://…", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + ], + "title" => [ + "hover_text" => "A short, human-readable title. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "If you have provided a document link then provide a title for the document", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + ], + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + + ] + ], + "language" => [ + "hover_text" => "The ISO 639-1 language code in which target document is written, e.g. 'en'. Can be repeated to describe multi-lingual documents. For more information", + "language" => [ + "hover_text" => "ISO 639-1 language code. For more information", + ], + ], + "document_date" => [ + "hover_text" => "The date of publication of the document that is being linked to. For more information", + "date" => [ + "hover_text" => "The date of publication of the document that is being linked to. For more information" + ], + ], + ], + "location" => [ + "reference" => [ + "hover_text" => "A cross-reference to the internal reference assigned to a defined location: iati-activity/location/@ref. For more information" + ] + ], + ], + 'transactions' => [ + "hover_text" => "Transactions recording committed or actual funds flowing in or out of an aid activity.For more information", + "help_text" => "Please provide a record of how your activity is being financed and how the finance is being used. Each incoming and outgoing flow should be published as a transaction.

    If an organisation makes many small transactions, these can be grouped together. For example, all travel expenses for one month could be published as one expenditure transaction. When deciding whether (or how) to aggregate transactions, it is recommended that publishers consider the needs of data users, as too much aggregation can inhibit the usability of the data

    Please note, you should not group together flows of funds to or from multiple external organisations (e.g. a disbursement to CARE should not be combined with a disbursement to IRC).Guidance on publishing financial transactions", + "reference" => [ + "hover_text" => "An internal reference linking this transaction back to the publisher’s financial management system. For more information", + "help_text" => "You can provide a reference that you use to identify this transaction in your organisation’s internal financial management system" + ], + "humanitarian" => [ + "hover_text" => "A process flag to indicate that this transaction relates entirely or partially to humanitarian aid. For more information", + "help_text" => "

    You can flag if this transaction relates to humanitarian aid by selecting ‘yes’.

    If this entire activity relates to humanitarian aid you should select yes using IATI Activity humanitarian flag, rather than for each transaction.

    See guidance on all the ways to publish humanitarian data

    ." + ], + "transaction_type" => [ + "hover_text" => "The type of the transaction (e.g. commitment, disbursement, expenditure, etc.). For more information", + "help_text" => "Please choose the type of transaction that best reflects the flow of money in or out of this activity. Types include incoming funds, outgoing commitments, disbursement, expenditure.", + "transaction_type_code" => [ + "hover_text" => "A code from the specified vocabulary. For more information", + "help_text" => "Please provide a type for this transaction. Read all options with descriptions." + ], + ], + "transaction_date" => [ + "hover_text" => "The date on which the transaction was made or (in the case of commitments) agreed. For more information", + "date" => [ + "hover_text" => "This value must be of type xsd:date. For more information", + "help_text" => "Provide the date on which the transaction was made or (in the case of commitments) agreed." + ] + ], + "value" => [ + "hover_text" => "The amount of the contribution. For more information", + "date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.", + "help_text" => "This date must not be in the future." + ], + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. For more information", + "help_text" => "Select the currency of this transaction.
    This value must be on the Currency codelist." + ] + ], + "description" => [ + "hover_text" => "A human-readable description of the transaction. For more information", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Provide a short description of the transaction e.g. what it was for.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ] + ], + "provider_organization" => [ + "hover_text" => "For incoming funds this is the organisation from which the transaction originated. If omitted on outgoing funds the reporting-org is assumed. For more information", + "help_text" => "For each transaction it is strongly recommended that you publish information on both the provider and receiver organisations of the funds. This includes instances where your organisation is either the provider or the receiver.

    If you do not provide information on the provider organisation for incoming transactions, then it is presumed that your organisation is the provider of the funds.", + "organization_identifer_code" => [ + "hover_text" => "Machine-readable identification string for the organisation issuing the report. For more information", + "help_text" => "Please type the provider organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If your organisation is the provider, please type your IATI Organisation Identifier. Your organisation created its org-ID when it first registered as an IATI publisher. You can find it here." + ], + "provider_activity_id" => [ + "hover_text" => "If incoming funds are being provided from the budget of another activity that is reported to IATI, it if STRONGLY RECOMMENDED that this should record the provider’s unique IATI activity identifier for that activity. For more information", + "help_text" => "The provider organisation may have published IATI data on these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the provider organisation for this activity-id, or search for their activity on d-portal.org. See further guidance.

    If you are the provider organisation then leave this blank." + ], + "type" => [ + "hover_text" => "The type of organisation providing the funds. For more information", + "help_text" => "Select the type that best describes the provider organisation. Information on all organisation types.

    If your organisation is the provider, please select the organisation type that your organisation provided when it first registered. You can find it here." + ], + "narrative" => [ + "hover_text" => "The name of the organisation. This can be repeated in multiple languages. For more information", + "help_text" => "If the provider organisation does not have an IATI Organisation Identifier, you must provide the text name of the organisation.

    Please do not type a code here for the provider organisation.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.

    For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ], + ], + "receiver_organization" => [ + "hover_text" => "The organisation receiving the money from the transaction. For more information", + "help_text" => "Please provide the organisation that will/has received the funds as part of this transaction. If your organisation is the receiver, please provide your organisation’s details.", + "organization_identifier_code" => [ + "hover_text" => "Machine-readable identification string for the organisation issuing the report. For more information.", + "help_text" => "Please provide the receiver organisation’s IATI Organisation Identifier (org-ID). The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If your organisation is the receiver, please type your IATI Organisation Identifier (org-ID). Your organisation created its org-ID when it first registered as an IATI publisher. You can find it here." + ], + "receiver_activity_id" => [ + "hover_text" => "If outgoing funds are being provided to another activity that is reported to IATI, this may, if possible, record the unique IATI activity identifier for that activity. For more information", + "help_text" => "The receiver organisation may have published IATI data on receiving these funds in their own activity. If so, please provide the activity-id for their activity that includes information on this funding. You can ask the receiver organisation for this activity-id, or search for their activity on d-portal.org See further guidance.

    If you are the provider organisation then leave this blank." + ], + "type" => [ + "hover_text" => "The type of organisation receiving the funds. For more information", + "help_text" => "Select the type that best describes the receiver organisation. Information on all organisation types
    .
    If your organisation is the receiver, please select the organisation type that your organisation provided when it first registered. You can find it here." + ], + "narrative" => [ + "hover_text" => "The name of the organisation. This can be repeated in multiple languages. For more information", + "help_text" => "If the receiver organisation does not have an IATI Organisation Identifier, the text name of the organisation must be given.

    Please do not type a code here for the receiver organisation.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ], + ], + "disbursement_channel" => [ + "hover_text" => "The channel through which the funds will flow for this transaction, from an IATI codelist. For more information", + "help_text" => "Select the best option for how your disbursements are channeled (e.g. through the recipient government or outside of the recipient government).", + "disbursement_channel_code" => [ + "hover_text" => "An IATI code defining channels of disbursement. For more information", + "help_text" => "Please read the list of disbursement channels and choose the option that applies to this transaction (if any are applicable)." + ], + "sector" => [ + "hover_text" => "A recognised code, from a recognised vocabulary, classifying the purpose of this transaction.For more information", + "help_text" => "You can specify one sector that this individual transaction is supporting. For example, primary education or agriculture. If you do this, then you must specify a sector for every transaction that you publish.
    You should not specify a sector for any of your transactions if you want to provide data on the sector(s) of this entire activity (which you can publish here). Sectors must only be provided at either the activity or transaction level and not both.
    Once your organisation decides where to publish information about which sectors it is working in, you should be consistent across all activities that you publish. This means you should publish all sector information at either activity level or for all transactions. More information.
    ", + + "sector_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary (codelist) used for sector classifications. If omitted, OECD DAC 5-digit Purpose Codes are assumed. For more information", + "help_text" => "If you decide to publish what sector this transaction is supporting, then you need to choose a list of sectors. IATI recommends choosing the OECD DAC 5-digit sector codelist, in which you can make a selection from over 300 sectors.

    You can choose to use another list (see information on all possible options). If you want to use your organisation’s own list of internal sector classifications, select the option: ‘Reporting Organisation’.

    You can choose to use multiple lists. If you use more than one internal sector classification, please select ‘Reporting Organisation 2’ (which has the code 98) for the additional list. Additional guidance.

    Do not select a list if you have / will choose a sector list for the entire activity." + ], + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 or 98 (reporting organisation), the URI where this internal vocabulary is defined. For more information", + "help_text" => "If you have chosen to use an internal sector classification codelist, please provide a link to it." + ], + "code" => [ + "hover_text" => "The code for the sector.For more information", + "help_text" => "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use." + ], + "text" => [ + "hover_text" => "The code for the sector. For more information", + "help_text" => "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use." + ], + "category_code" => [ + "hover_text" => "The code for the sector.
    For more information", + "help_text" => "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use." + ], + "sdg_goal" => [ + "hover_text" => "The code for the sector.
    For more information", + "help_text" => "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use." + ], + "sdg_target" => [ + "hover_text" => "The code for the sector.
    For more information", + "help_text" => "Select the sector that the transaction’s funds are supporting. You must only choose one sector from each list that you use." + ] + ], + "narrative" => [ + "hover_text" => "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used).For more information", + "help_text" => "If you have chosen a sector from an internal sector classification codelist, please provide a description of this sector.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ], + ], + "recipient_country" => [ + "hover_text" => "A country that will benefit from this transaction. For more information", + "help_text" => "You can specify one country or region that an individual transaction is taking place in, or the place that will benefit from it.

    You should not specify a country or region for any of your transactions if you want to provide the recipient country or region of this entire activity (which you can publish here). Recipient countries or regions) must only be provided at either the activity or transaction level and not both.

    Once your organisation decides where to publish information about its recipient countries (or regions), it should be consistent across all activities that it publishes. This means you should publish all recipient country or region information at either activity level or for all transactions. More information.", + "country_code" => [ + "hover_text" => "ISO 3166-1 alpha-2 code for the country. For more information", + "help_text" => "Select one country that this transaction is taking place in, or will benefit from its funds.

    Do not select a country if you have / will choose a recipient country for the entire activity." + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Add the free text name and/or description for the country benefitting from the transaction.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ] + ], + "recipient_region" => [ + "hover_text" => "A supranational geopolitical region that will benefit from this transaction. If a specific country is not known, then this element MUST be used. For more information", + "help_text" => "If you cannot identify the specific country benefiting from this transaction, then you can provide the recipient region instead. Do not provide both a recipient country and a region.

    For example, if the funding is going to Uganda, then you should record Uganda as the recipient country and you should not add that the funding is also going to the region of Africa.", + + "region_vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary from which the region code is drawn. If it is not present 1 - ‘OECD DAC’ is assumed.For more information", + "help_text" => "There are two lists of regions; the OECD DAC and UN region code lists. Please select one. IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined. If you do not choose an option, then the code list 'OECD DAC' is assumed." + ], + "region_code" => [ + "hover_text" => "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute. For more information", + "help_text" => "Select the region benefitting from this transaction." + ], + "custom_code" => [ + "hover_text" => "Either an OECD DAC or UN region code. Codelist is determined by vocabulary attribute. For more information", + "help_text" => "Select the region benefitting from this transaction." + ], + "vocabulary_uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", + "help_text" => "If you have selected the option: ‘Reporting Organisation’ please provide the URI where this internal list is defined." + ], + "narrative" => [ + "hover_text" => "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used). For more information", + "help_text" => "If you have selected the option: ‘Reporting Organisation’ please add the free text name and/or description regarding this region benefitting from the activity.", + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ] + ], + ], + "flow_type" => [ + "hover_text" => "Optional element to override the top-level default-flow-type element. For more information", + "help_text" => "Flow type is another way to categorise financial flows. It distinguishes the flow as official development assistance (ODA), other official flows (OOF), or several types of private flows, including private grants often provided by NGOs and other civil society organisations.", + "flow_type" => [ + "hover_text" => "A code from the OECD DAC CRS “Type of flow” codelist. For more information", + "help_text" => "Please select a flow type for this transaction from the following options.

    Do note: if you select a flow-type for this transaction, this will override the default flow type for the entire activity (which is selected here), enabling you to choose a flow-type on a transaction-by-transaction basis, if needed.", + ], + ], + "finance_type" => [ + "hover_text" => "Optional element to override the top-level default-finance-type element on a transaction-by-transaction basis, if needed. For more information", + "help_text" => "Finance type specifies the financial instrument that is being used. For example, financing is most commonly delivered as a grant or a loan. ", + "finance_type" => [ + "hover_text" => "A code from the OECD DAC CRS “Type of finance” codelist. For more information", + "help_text" => "Please select a finance type for this transaction from the following options.

    Do note: if you select a finance-type for this transaction, this will override the default finance type for the entire activity (which is selected here), enabling you to choose a finance-type on a transaction-by-transaction basis, if needed." + ] + ], + "aid_type" => [ + "hover_text" => "Optional element to override the top-level default-aid-type element (debt relief, etc.) on a transaction-by-transaction basis if needed. For more information", + "help_text" => "You can provide information about the type of aid that is being delivered. This is most commonly referred to as the aid modality and IATI recommends that an aid type from the OECD DAC codelist be selected for all activities. Examples from this codelist include: project-type interventions which provide support to a particular project and budget support which is a financial contribution to a recipient government’s budget. Project-type interventions is the most common aid type for NGOs and CSOs but many other options are found here.

    If your transaction is addressing a humanitarian event, you can provide specific information on the type of funds for it. This includes providing information on the level of earmarking of the transaction’s funds and if the transaction is providing funds through cash or vouchers. More information on publishing aid-types related to humanitarian transactions.

    Do note: if you select an aid-type for this transaction, this will override the default aid type for the entire activity (which is selected here), enabling you to choose an aid-type on a transaction-by-transaction basis, if needed.", + "aid_type_vocabulary" => [ + "hover_text" => "A code for the vocabulary aid-type classifications. If omitted the AidType (OECD DAC) codelist is assumed. The code must be a valid value in the AidTypeVocabulary codelist. For more information", + "help_text" => "Select a list that includes the aid-type list related to your transaction. You can choose to select one aid-type from more than one list.

    1 OECD DAC - IATI recommends that you select this list which has over 20 options to choose from. Then, in addition you can select an option from another list

    2 Earmarking Category - select this list to categorise how flexible humanitarian funding is. There are 4 earmarking categories. Understand more about the categories in Annex 1

    3 Earmarking Modality - use this list to choose the specific earmarking modality to describe your activity’s humanitarian funding. All earmarking modality options are listed in Annex 1

    4 Cash and Voucher Modalities - select this list to specify if your transaction is responding to a humanitarian event by providing cash and voucher assistance. More information." + ], + "aid_type_code" => [ + "hover_text" => "A code from the specified vocabulary. For more information", + "help_text" => "Select the aid-type related to your transaction." + ], + "earmarking_category" => [ + "hover_text" => "A code from the specified vocabulary. For more information", + ], + "narrative" => [ + "hover_text" => "The description of a sector defined by the reporting organisation. (Only to be used when the reporting organisation’s own vocabulary is being used). For more information", + "help_text" => "If you have selected the option: ‘Reporting Organisation’ please add the free text name and/or description regarding this region benefitting from the activity.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language of the text in the narrative. If no language is selected, your default language is assumed." + ], + ], + "earmarking_modality" => [ + "hover_text" => "A code from the specified vocabulary.
    For more information", + ], + "cash_and_voucher_modalities" => [ + "hover_text" => "A code from the specified vocabulary.
    For more information", + ], + "tied_status" => [ + "hover_text" => "Optional element to override the top-level default-tied-status element on a transaction-by-transaction basis if needed. For more information", + "help_text" => "You can state the tied status of this transaction. Here you can specify if funds are tied - where they must be spent on goods or services procured from a particular country (e.g. donor country) or group of countries. Or if funds are untied, this is where the recipient organisation is allowed to procure from any country.

    Do note: if you select a tied status for this transaction, this will override the default tied status for the entire activity (which is selected here), enabling you to choose a tied status on a transaction-by-transaction basis, if needed.", + ], + "tied_status_code" => [ + "hover_text" => "An IATI code interpreting the usage of Columns 36-38 of the CRS++ reporting format. (Amount tied, Amount partially untied, Amount tied). For more information", + "help_text" => "Select a default-tied-status, if applicable to your transaction. Descriptions of all options. Otherwise leave blank." + ], + ], + ], + 'organisation' => [ + "organisation_identifier" => [ + "hover_text" => "The Organisation Identifier is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier.
    For more information", + "organization_country" => [ + "hover_text" => "Select the location of your organisation.", + "help_text" => "Provide the country where your organisation is located." + ], + "organization_registration_agency" => [ + "hover_text" => "Select the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org", + "help_text" => "Provide the name of the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org." + ], + "registration_number" => [ + "hover_text" => "Provide the registration number for your organisation that has been provided by the organisation registration agency. If you do not know this please email support@iatistandard.org", + "help_text" => "Provide the registration number for your organisation that has been provided by the registration agency named above. If you do not know this information please email support@iatistandard.org." + ], + "iati-activity-identifier" => [ + "hover_text" => "The Organisation Identifier is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier. For more information", + "help_text" => "The Organisation Identifier (Org-ID) is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier." + ] + ], + "name" => [ + "hover_text" => "The human-readable name of the organisation.", + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Type the name of your organisation.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + "help_text" => "Select the language that you have provided in the narrative. If no language is selected, your default language is assumed.", + ], + ], + "reporting_org" => [ + "hover_text" => "The organisation issuing the report. May be a primary source (reporting on its own activity as donor, implementing agency, etc) or a secondary source (reporting on the activities of another organisation).For more information", + "help_text" => "You need to specify which organisation is publishing the file, and which organisation the data is about. In most cases, the publishing organisation is publishing data about itself.Further guidance", + "reference" => [ + "hover_text" => "Machine-readable identification string for the organisation issuing the report. Must be in the format {RegistrationAgency}-{RegistrationNumber}.
    For more information", + "help_text" => "Provide the IATI Organisation Identifier of the organisation publishing the data. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance. " + ], + "type" => [ + "hover_text" => "The type of organisation issuing the report.For more information", + "help_text" => "Select the type that best describes the organisation publishing the data.Information on all organisation types." + ], + "secondary_reporter" => [ + "hover_text" => "A flag indicating that the reporting organisation of this activity is acting as a secondary reporter. A secondary reporter is one that reproduces data on the activities of an organisation for which it is not directly responsible.For more information", + "help_text" => "Are you reproducing the data reported by another organisation? If so, your organisation is a ‘secondary reporter’ and you should select 'Yes’. If you are reporting your own organisation’s data, select ‘No’.

    Please note: you are not a secondary reporter if your organisation is officially assigned as a proxy to report IATI data on behalf of another organisation." + ], + "narrative" => [ + "hover_text" => "The text in this element must be of type xsd:string. This element must occur at least once (within each parent element). For more information", + "help_text" => "If you are reporting another organisation’s data, provide their name.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed.For more information", + ], + ], + "total_budget" => [ + "hover_text" => "The total-budget element allows for the reporting of the organisation’s own budget. The recommendation is that, where and when possible, the organisation’s total annual planned budget for each of the next three years is reported.For more information", + "help_text" => "Provide your organisation’s total expected development and humanitarian spend for the current and (where possible) following three years. Each total budget that you provide must span a period of no more than 12 months, and preferably aligned with your organisation’s fiscal year.

    Budgets can also be published for periods of less than one year, for example, into quarters. The time periods of the budgets should not overlap.Further guidance.", + "status" => [ + "hover_text" => "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", + "help_text" => "Please select a status that best describes this budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is selected, the budget is assumed to be indicative." + ], + "period_start" => [ + "hover_text" => "The start of the budget period.For more information", + "date" => [ + "hover_text" => "This attribute is required.For more information", + ] + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year).For more information", + "date" => [ + "hover_text" => "This attribute is required.For more information", + ], + ], + "value" => [ + "hover_text" => "The total value of the organisation’s aid budget for this period. For more information", + "help_text" => "Provide the total finance for this budget.", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified.For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.

    This attribute is required. For more information", + ] + ], + "budget_line" => [ + "hover_text" => "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", + "help_text" => "You can provide further budget information in budget lines. Budget lines allow the total budget to be broken down, for example into different programmes happening in the same year.

    Do note: The sum of each budget line does not have to equal the value of the total budget. Further guidance.", + "reference" => [ + "help_text" => "You can provide a reference that you use to identify this budget line in your organisation’s financial reporting system." + ], + "value" => [ + "hover_text" => "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", + "help_text" => "Provide the total finance for this budget line.", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount.For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.For more information", + ], + ], + ], + ], + "recipient_org_budget" => [ + "hover_text" => "The recipient-org-budget element allows for the reporting of forward looking budgets for each institution which receives core funding from the reporting organisation. For more information", + "help_text" => "If your organisation will provide core funding to a recipient organisation(s), please publish information on this budget here. Further guidance.

    Where possible, you should provide annual planned budgets for each recipient organisation for each of the next three financial years.", + "status" => [ + "hover_text" => "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", + "help_text" => "Please select a status that best describes this recipient organisation budget:

    (1) indicative - a non-binding estimate for the described budget line.

    (2) committed - a binding agreement for the described budget line.

    If no status is selected, the budget is assumed to be indicative." + ], + "recipient_org" => [ + "hover_text" => "The organisation that will receive the funds. For more information", + "help_text" => "Provide information about the organisation who will receive the funds.", + "reference" => [ + "hover_text" => "The organisation that will receive the funds.For more information", + "help_text" => "Please type the recipient organisation’s IATI Organisation Identifier. The quickest way to find this is to search for the organisation in the IATI Publisher List. If you cannot find the organisation, see further guidance.

    If you cannot provide the Organisation Identifier then you MUST provide the name of the organisation below." + ], + "narrative" => [ + "hover_text" => "The name of the organisation. This can be repeated in multiple languages.For more information", + "help_text" => "Type the name of the recipient organisation.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. For more information", + ] + ], + "period_start" => [ + "hover_text" => "This element must occur once and only once (within each parent element). For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date.For more information", + ] + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year).For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date.For more information", + ], + ], + "value" => [ + "hover_text" => "The total value of the money budgeted to be disbursed to the specified recipient organisation during this time period. For more information", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. This is required for all currency amounts unless the iati-organisation/@default-currency attribute is specified. For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions. This attribute is required. For more information", + ] + ], + "budget_line" => [ + "hover_text" => "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative.For more information", + "help_text" => "You can provide a breakdown of the recipient organisation’s budget into budget lines.

    Do note: The sum of each budget line does not have to equal the total value of the recipient organisation budget.Further guidance.", + "value" => [ + "hover_text" => "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.For more information", + ] + ], + ], + ], + "recipient_region_budget" => [ + "hover_text" => "The recipient-region-budget element allows for the reporting of forward looking budgets where the organisation maintains region-wide, rather than or in addition to country-specific budgets.For more information", + "help_text" => "IATI strongly encourages organisations to break down your total budget into smaller budgets for the recipient countries or recipient regions in which you operate.

    If you provide a recipient region or country budget(s), you do not need to use the same periods, and these budgets do not have to add up to your organisation’s total budget.

    If you want to provide a recipient region budget, it must NOT be an aggregation of recipient country budgets. For example, if you publish a recipient country budget for Uganda for USD 100,000 and a budget for Kenya of USD 100,000 for the next year, then you should NOT publish a recipient region budget for Africa of USD 200,000 for the next year.", + "status" => [ + "hover_text" => "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", + "help_text" => "Please select a status that best describes this recipient region budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is present, the budget is assumed to be indicative." + ], + "recipient_region" => [ + "hover_text" => "The supranational geographic region where funds have been allocated.For more information", + "vocabulary" => [ + "hover_text" => "An IATI code for the vocabulary from which the region code is drawn. If it is not present, code 1 (‘OECD DAC’) is assumed. For more information", + "help_text" => "There are two lists of regions; the OECD DAC and UN region code lists. Please select one. IATI recommends that you use the OECD DAC codelist. Otherwise you can use another list of regions by selecting the option: ‘Reporting Organisation’ and providing the URI where this internal list is defined.

    If you do not choose an option, then the code list 'OECD DAC' is assumed." + ], + "vocabulary-uri" => [ + "hover_text" => "The URI where this vocabulary is defined. If the vocabulary is 99 (reporting organisation), the URI where this internal vocabulary is defined. For more information", + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Type the name of the region benefitting from the budget.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ] + ], + "period_start" => [ + "hover_text" => "The start of the budget period.This element must occur once and only once (within each parent element).For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date. For more information", + "help_text" => "Provide the start date of the recipient region budget period" + ] + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year).For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date. For more information", + "help_text" => "Provide the end date of the recipient region budget period." + ] + ], + "value" => [ + "hover_text" => "The total value of the money budgeted to be disbursed to the specified country during this time period. For more information", + "help_text" => "Provide the amount of finance for this recipient region budget.", + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions. This attribute is required. For more information", + ] + ], + "budget_line" => [ + "hover_text" => "A breakdown of the recipient country’s budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", + "help_text" => "You can provide further information about this recipient region budget in budget lines. Budget lines allow the recipient region budget to be broken down, for example into different projects happening in a given year.

    Do note: The sum of each budget line does not have to equal the total value of the recipient region budget.", + "reference" => [ + "hover_text" => "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", + ], + "value" => [ + "hover_text" => "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions. For more information", + ], + ], + ], + ], + "recipient_country_budget" => [ + "hover_text" => "The recipient-country-budget element allows for the reporting of forward looking budgets for each country in which the organisation operates. For more information", + "help_text" => "You can provide your organisation’s budget(s) according to its recipient country. You do not need to use the same periods, and these budgets do not have to add up to your organisation’s total budget.

    If your organisation maintains country-wide budgets please provide them here.", + "status" => [ + "hover_text" => "The status explains whether the budget being reported is indicative or has been formally committed. The value should appear within the BudgetStatus codelist.For more information", + "help_text" => "Please select a status that best describes this recipient country budget:

    (1) indicative - a non-binding estimate for the described budget.

    (2) committed - a binding agreement for the described budget.

    If no status is selected, the budget is assumed to be indicative." + ], + "recipient_country" => [ + "hover_text" => "The recipient country. For more information", + "code" => [ + "hover_text" => "ISO 3166-1 alpha-2 code for the country.This attribute is required. For more information", + "help_text" => "Select the recipient country for this budget." + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Type the name for the recipient country.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. For more information", + ] + ], + "period_start" => [ + "hover_text" => "The start of the budget period.This element must occur once and only once (within each parent element). For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date. For more information", + "help_text" => "Provide the start date of the recipient country budget period." + ] + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year). For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date. For more information", + "help_text" => "Provide the end date of the recipient country budget period." + ] + ], + "value" => [ + "hover_text" => "The total value of the money budgeted to be disbursed to the specified recipient organisation during this time period. For more information", + "help_text" => "Provide the amount of finance for this budget.", + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.

    This attribute is required. For more information", + ] + ], + "budget_line" => [ + "hover_text" => "A breakdown of the total budget into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", + "help_text" => "You can provide further information about this recipient country budget in budget lines. Budget lines allow the recipient country budget to be broken down, for example into different projects happening in a given year.

    Do note: The sum of each budget line does not have to equal the total value of the recipient country budget.", + "reference" => [ + "hover_text" => "An internal reference for this budget line taken from the reporting organisation’s own system. For more information", + ], + "value" => [ + "hover_text" => "The budget sub-total. The definition of the sub-division is determined by iati-organisation/total-budget/budget-line/narrative For more information", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount.For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions. For more information", + ] + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ], + ] + ], + "total_expenditure" => [ + "hover_text" => "The total-expenditure element allows for the reporting of the organisation’s international development expenditure. For more information", + "help_text" => "IATI recommends that your organisation reports its past spending on its humanitarian and development work. This is known as ‘total expenditure’ and IATI recommends, where possible, the organisation reports its total expenditure for each of the past 3 years.

    An expenditure period must not be longer than one year.", + "period_start" => [ + "hover_text" => "The start of the budget period.For more information", + "date" => [ + "hover_text" => "This attribute is required.This value must be of type xsd:date. For more information", + "help_text" => "Provide the start date of the expenditure period." + ] + ], + "period_end" => [ + "hover_text" => "The end of the period (which must not be greater than one year). For more information", + "date" => [ + "hover_text" => "This attribute is required.This value must be of type xsd:date. For more information", + "help_text" => "Provide the end date of the expenditure period." + ] + ], + "value" => [ + "hover_text" => "The total value of the organisation’s aid expenditure for this period. For more information", + "help_text" => "Provide the amount of finance for this expenditure.", + + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount. For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions. For more information", + ] + ], + "expense_line" => [ + "hover_text" => "A breakdown of the total expenditure into sub-totals. The breakdown is determined by the reporting organisation and described in the narrative. For more information", + "help_text" => "You can provide further information about your organisation’s expenditure in expense line(s). Expense lines allow the expenditure to be broken down into smaller expenses.

    Do note: The sum of each expense line does not have to equal the total value of the expenditure.", + "reference" => [ + "hover_text" => "An internal reference for this expenditure line taken from the reporting organisation’s own system. For more information", + "help_text" => "You can provide a reference that you use to identify this expense line in your organisation’s internal financial management system." + ], + "value" => [ + "hover_text" => "The expenditure sub-total. The definition of the sub-division is determined by iati-organisation/total-expenditure/expenditure-line/narrative. For more information", + "help_text" => "Provide the amount of finance for this expense line.", + "currency" => [ + "hover_text" => "A three letter ISO 4217 code for the original currency of the amount.For more information", + ], + "value_date" => [ + "hover_text" => "The date to be used for determining the exchange rate for currency conversions.For more information", + ] + ], + "narrative" => [ + "hover_text" => "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + "help_text" => "Provide a description for this expense line.", + ], + "language" => [ + "hover_text" => "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + ] + ] + ], + "document_link" => [ + "hover_text" => "A link to an online, publicly accessible web page or document. For more information", + "help_text" => "You can report further information about your organisation’s development of humanitarian programming by providing a publicly accessible link to a document or webpage. For example you could provide a link to your organisation’s annual report or a work plan for a particular country.

    If documents are available in other languages and stored separately, please provide them by creating additional document elements.Further guidance.", + "url" => [ + "hover_text" => "The target URL of the external document, e.g. 'http://www.example.org/doc.odt'.For more information", + ], + "format" => [ + "hover_text" => "An IANA code for the MIME type of the document being referenced, e.g. “application/pdf”. For more information", + "help_text" => "If you know the format of the document file, please type it using an option from this list." + ], + "title" => [ + "hover_text" => "A short, human-readable title. For more information", + ], + "description" => [ + "hover_text" => "A description of the document contents, or guidance on where to access the relevant information in the document. For more information", + ], + "category" => [ + "hover_text" => "IATI Document Category Code. For more information", + "code" => [ + "hover_text" => "An IATI code defining the category of the document. For more information", + ], + ], + "language" => [ + "hover_text" => "The ISO 639-1 language code in which target document is written, e.g. “en”. Can be repeated to describe multi-lingual documents. For more information", + "code" => [ + "hover_text" => "ISO 639-1 language code. For more information", + "help_text" => "Select the language of the document or webpage" + ] + ], + "document_date" => [ + "hover_text" => "The date of publication of the document that is being linked to. For more information", + "date" => [ + "hover_text" => "This attribute is required. This value must be of type xsd:date. For more information", + ] + ], + "recipient_country" => [ + "hover_text" => "The recipient country that is the focus of the document. May be repeated for multiple countries. For more information", + "help_text" => "If a recipient country is the focus of this document or webpage, please specify it here. You can state more than one country.", + "code" => [ + "hover_text" => "ISO 3166-1 alpha-2 code for the country. This attribute is required. For more information", + "help_text" => "Select the recipient country that is the focus for this document or webpage." + ], + "narrative" => [ + "help_text" => "Type the name of the country that is the focus for this document or webpage.", + ], + ], + ], + ], +]; diff --git a/lang/en/email_verification.php b/lang/en/email_verification.php new file mode 100644 index 0000000000..e51a1196aa --- /dev/null +++ b/lang/en/email_verification.php @@ -0,0 +1,6 @@ + "Please verify your account", + 'click_and_activate' => "Please click on the link in the email to verify and activate your new IATI publisher account.", +]; diff --git a/lang/en/home.php b/lang/en/home.php new file mode 100644 index 0000000000..9f40707bd6 --- /dev/null +++ b/lang/en/home.php @@ -0,0 +1,32 @@ + 'IATI PUBLISHER', + 'iati_publishing_tool_header' => 'IATI Publishing Tool', + 'iati_publishing_tool_section' => [ + 'welcome_text' => 'Welcome to IATI Publisher. Publish IATI data on your organisation’s development and humanitarian financing and activities. Enter your login information if you’re already a user or create a new account if you’re new here.', + 'havent_registered_label' => 'Haven\'t registered yet?', + 'already_have_account_label' => 'Already have an account?', + ], + + //Join Now Section Lines + 'join_now_section' => [ + 'to_begin_text' => 'To begin, your organisation needs to be registered as an IATI publisher. Select an option and we’ll guide you through this process.', + 'new_to_iati_label' => 'I am new to IATI', + 'new_to_iati_text' => 'Use this option if your organization has not registered an account with IATI on the IATI Registry', + 'my_organisation_has_registered_label' => 'My organization has registered with IATI.', + 'my_organisation_has_registered_text' => 'Use this option if your organisation is already registered as an IATI Publisher on the IATI Registry', + 'not_sure_which_one_label' => 'Not sure which one to select?', + 'contact_support_label' => 'Contact Support.', + ], + + //Sign In Section lines, + 'sign_in_section' => [ + 'welcome_back_label' => 'Welcome back! Please enter your details.', + 'username_label' => 'Username', + 'username_placeholder' => 'Enter a registered username', + 'password_label' => 'Password', + 'password_placeholder' => 'Enter a correct password', + 'forgot_password_label' => 'Forgot your password?', + ], +]; diff --git a/lang/en/iati_register.php b/lang/en/iati_register.php new file mode 100644 index 0000000000..fbfc1499b0 --- /dev/null +++ b/lang/en/iati_register.php @@ -0,0 +1,8 @@ + "Create IATI Publisher Account and IATI Registry Account", + "t2" => "Register your organisation to start your IATI publishing journey by creating accounts in IATI publisher and IATI Registry at once.", + "t3" => "This information will be used to create a Publisher in IATI Publisher", + "t4" => "We refer to organisations who publish IATI data as 'Publishers'. Before publishing data, all organisations need their own 'Publisher Account' on the IATI Registry (iatiregistry.org). Enter your organisation's data here and we'll create your organisation's Publisher Account for you. These details will also be saved here in IATI Publisher.", +]; diff --git a/lang/en/iati_standard.php b/lang/en/iati_standard.php new file mode 100644 index 0000000000..2e28d5f799 --- /dev/null +++ b/lang/en/iati_standard.php @@ -0,0 +1,56 @@ + 'IATI Standard', + 'iati_standard_description' => [ + 'one' => 'IATI Standard The IATI Standard is a set of rules and guidance on how to publish useful development and humanitarian data. IATI Publisher will take you through all data fields (which are referred to as ‘elements’) of the IATI Standard, offering helpful explanations and links to further information and guidance. The IATI Standard requires organisations to publish two sets of data: ' + ], + 'organisation_data_header' => 'Organisation Data', + 'organisation_data_description' => [ + 'one' => [ + 'list_items' => [ + 'header' => 'IATI Standard You will be asked to publish data about your entire organisation. This includes basic information about your organisation, such as your name and the type of organisation you are. You can also provide data on: ', + 'one' => 'Total spend by your organisation over the last year ', + 'two' => 'Total annual planned budget for your organisation in each of the next three years, where available', + 'three' => 'Planned budgets broken down by individual recipient countries or regions', + 'four' => 'Run automatic checks (via the IATI Validator) for errors before publishing your data', + 'five' => 'Useful background documents, such as country action plans and annual reports ', + ], + ], + 'two' => 'Publish your Organisation Data', + ], + 'activity_data_header' => 'Activity Data', + 'activity_data_description' => [ + 'one' => [ + 'list_items' => [ + 'header' => 'The IATI Standard also requires organisations to provide data about their development and humanitarian ‘activities’. For each activity, you can publish a wide range of information, including:', + 'one' => 'Basic information and identification of the activity e.g. providing a title and a description for your activity ', + 'two' => 'Participating organisations – information on which other organisations are involved in the activity ', + 'three' => 'Participating organisations – information on which other organisations are involved in ', + 'four' => 'Financial data – covers the budgets and the transactions for the activity ', + 'five' => 'Classifications – helps categorise the activity using various development and humanitarian taxonomies. For example, what sector does the activity target or support (e.g. primary education or agriculture), or what type of aid is used to fund the activity (e.g. a grant or loan) ', + 'six' => 'Links to other data that have already been published on the activity elsewhere ', + 'seven' => 'The results that the activity is aiming to achieve ', + ], + ], + ], + 'publishing_data_either_header' => 'Publishing data at either Activity level or Transaction level ', + 'publishing_data_either_description' => [ + 'one' => 'As listed above, you will need to provide data on your activity’s transactions, which shows how the activity is being financed and how the finance is being used. ', + 'two' => 'There are specific types of information that you can either publish about your entire activity, or about individual transactions (each transaction represents money flowing in or out of the activity). For example, you can publish data on which country/region your entire activity is benefitting, or you can publish data on which country/region each transaction is benefitting. However you must not publish this information at both activity and transaction levels. ', + 'three' => 'IATI Publisher provides explanations for each element of the IATI Standard and tells you where you have a choice of which level to publish data for. ', + 'four' => 'Publish your Organisation Data', + ], + 'download_pdf_header' => 'Download PDF of IATI Standard data fields', + 'download_pdf_description' => [ + 'one' => 'IATI Standard Whilst gathering and preparing your organisation’s IATI data, you may find it helpful to view the following spreadsheets that provide information on all of the data elements in the IATI Standard. You will also be able to view this information as you work your way through completing the forms for each element on IATI Publisher.', + 'two' => 'Activity Standard', + 'three' => 'Organisation Standard', + ], + 'iati_standard_reference_header' => 'IATI Standard reference', + 'iati_standard_reference_description' => [ + 'one' => "You can look up detailed and technical information about each element of the IATI Standard on the IATI Reference section of IATI’s main website: ", + 'two' => "Activity Standard", + 'three' => "organisation Standard", + ], +]; diff --git a/lang/en/middleware.php b/lang/en/middleware.php new file mode 100644 index 0000000000..548dc683cc --- /dev/null +++ b/lang/en/middleware.php @@ -0,0 +1,7 @@ + 'Activity element delete denied.', + 'you_need_to_be_admin' => 'You need to be superadmin to use this route.', + 'does_not_exist' => ':prefix does not exist.', +]; diff --git a/lang/en/missing.php b/lang/en/missing.php new file mode 100644 index 0000000000..2c6908cef7 --- /dev/null +++ b/lang/en/missing.php @@ -0,0 +1,40 @@ + 'Missing', + 'something' => ':something missing', + 'type' => 'Type missing', + 'date' => 'Date missing', + 'narrative' => 'Narrative :missing', + 'vocabulary' => 'Vocabulary missing', + 'name' => 'Name missing', + 'location_reached' => 'Location reached missing', + 'level' => 'Level missing', + 'latitude' => 'Latitude missing', + 'longitude' => 'Longitude missing', + 'srs_name' => 'SRS Name missing', + 'organisation_role' => 'Organisation role missing', + 'reference_role' => 'Reference role missing', + 'transaction_type' => 'Transaction type missing', + 'language' => 'Language missing', + 'disbursement' => 'Disbursement Channel Code Missing', + 'finance_type' => 'Finance type missing', + 'flow_type' => 'Flow type missing', + 'tied_status' => 'Tied Status Code Missing', + 'amount' => 'Amount missing', + 'url' => 'URL missing', + 'category' => 'Category missing', + 'budget_amount' => 'Budget Amount Missing', + 'code' => 'Code missing', + 'value_date' => 'Value Date missing', + 'period_start' => 'Period Start missing', + 'period_end' => 'Period End missing', + 'budget' => 'Budget missing', + 'budget_line' => 'Budget Line missing', + 'vocabulary_uri' => 'Vocabulary URI missing', + 'expense_line' => 'Expense line missing', + 'expenditure_amount' => 'Expenditure Amount missing', + 'not_available' => 'Not Available', + 'content' => 'No content', + +]; diff --git a/lang/en/organisation.php b/lang/en/organisation.php new file mode 100644 index 0000000000..4fe3a96f1f --- /dev/null +++ b/lang/en/organisation.php @@ -0,0 +1,21 @@ + 'Your Organisation', + 'publishing_progress' => [ + 'label' => 'Publishing Progress', + 'hover_text' => 'You cannot publish an activity until all the mandatory fields have been filled.' + ], + 'elements' => [ + 'label' => 'Elements', + 'hover_text' => 'Each “Element” represents a basic unit of information in the IATI Standard. Click on each element listed below and complete all data fields contained in the element. For each element, you will find its technical hover_text, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide.', + ], + 'core' => [ + 'label' => 'Core', + 'hover_text' => 'Core elements include the IATI Standard\'s “mandatory and recommended” elements and it is important to provide this data to ensure your data is usable and useful', + ], + 'completed' => [ + 'label' => 'Completed', + 'hover_text' => 'You cannot publish an activity until all the mandatory fields have been filled.', + ], +]; diff --git a/lang/en/password_recovery.php b/lang/en/password_recovery.php new file mode 100644 index 0000000000..7d3b54a4f5 --- /dev/null +++ b/lang/en/password_recovery.php @@ -0,0 +1,9 @@ + "Password Recovery", + 'password_recovery_description' => "Please enter your email, we will send you a link to reset your password", + 'email_label' => "Email", + 'email_placeholder' => "Enter your email address", + 'your_email_has_been_sent_with_label' => "An email has been sent with further instructions, please check it out when you get it.", +]; diff --git a/lang/en/publishing_checklist.php b/lang/en/publishing_checklist.php new file mode 100644 index 0000000000..f01b3a2cf7 --- /dev/null +++ b/lang/en/publishing_checklist.php @@ -0,0 +1,68 @@ + 'Publishing Checklist', + 'organisations_using_iati_label' => 'Organisations using IATI Publisher need to take the following steps to publish your data: ', + 'register_a_publisher_header' => 'Register a Publisher Account', + 'register_a_publisher_description' => [ + 'one' => 'Organisations who publish data to IATI are referred to as \'Publishers\'. Before publishing data, organisations need their own \'Publisher Account\' on the IATI Registry (iatiregistry.org). If your organisation does not yet have a Publisher Account on the IATI Registry, IATI Publisher will ask you for additional details and create one for you (so you don’t have to visit IATI Registry to do this).', + 'two' => 'Create your IATI Registry Publisher Account', + 'three' => 'If your organisation has already registered a Publisher Account on the IATI Registry, IATI Publisher will ask you to provide your organisation’s account details.', + 'four' => 'Provide your organisations existing IATI Registry Publisher Account details', + ], + 'publish_your_organisation_header' => 'Publish your Organisation Data', + 'publish_your_organisation_description' => [ + 'one' => 'The IATI Standard requires you to provide data about your entire organisation. For example, basic information about your organisation, such as its name and financial data about your entire organisation’s budgets and expenditure.', + 'two' => 'The IATI Standard contains a wide range of data fields. Data fields are referred to as ‘elements’ and they represent a basic unit of information in the IATI Standard. For each element you will find its technical definition, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide. Your organisation is encouraged to (at least) publish data in fields marked as “Core” in IATI Publisher. Core elements include IATI’s "mandatory and recommended" elements and it is important to provide this data to ensure your data is usable and useful.', + 'three' => 'Discover what Activity Data is required by the IATI Standard', + 'four' => 'Publish your Activity Data', + + ], + 'publish_your_activity_header' => 'Publish your Activity Data', + 'publish_your_activity_description' => [ + 'one' => 'You also need to provide data about your organisation’s development and humanitarian ‘activities’. The unit of work described by an ‘activity’ is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country’s government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months.', + 'two' => [ + 'list_items' => [ + 'header' => 'Therefore your organisation will need to determine how it will divide its work internally into activities. You could consider one activity to be: ', + 'one' => 'a large programme at country or region level', + 'two' => 'a smaller project in a local area', + 'three' => 'the work relating to a particular grant or contract', + ], + ], + 'three' => [ + 'list_items' => [ + 'header' => 'You can provide your Activity Data in two ways on IATI Publisher: ', + 'one' => 'fill out the data fields in the Activity Data form for each Activity that you create', + 'two' => 'If you have multiple activities, you can use the Bulk Upload feature to upload a spreadsheet of the core fields of your data then you can edit them further using the online Activity Data form.', + ], + ], + 'four' => 'When publishing your Activity Data you are encouraged to (at least) publish data in fields marked as “Core” in IATI Publisher. They include IATI’s "mandatory and recommended" elements and it is important to provide this data to ensure your data is usable and useful. ', + 'five' => 'Discover what Activity Data is required by the IATI Standard', + 'six' => 'Publish your Activity Data', + ], + 'understand_further_data_header' => 'Understand further data requirements', + 'understand_further_data_description' => [ + 'one' => 'If your organisation receives funding from the UK, Dutch or Belgian governments, you may also need to report IATI data according to their specific requirements. You are advised to understand the specific IATI data requirements of each government if you are receiving a grant from them.See more information.', + 'two' => 'You will also need to consider if your organisation needs to exclude data that it publishes. For example an organisation may not be able to publish data because of political sensitivity issues or if information is commercially restricted. See information on creating an Exclusion Policy .', + ], + 'run_automatic_checks_header' => 'Run automatic checks on your data for errors', + 'run_automatic_checks_description' => [ + 'one' => 'After you have added your data to IATI Publisher, it will run automatic checks for errors. You will receive information about any errors that you need to fix. Make sure you fix these errors before publishing your data. ' + ], + 'publish_your_data_header' => 'Publish your data to the IATI Registry', + 'publish_your_data_description' => [ + 'one' => 'Once you are happy with the data that you have provided, you can instruct IATI Publisher to publish it. ', + 'two' => 'IATI Publisher converts your data files into XML, the format that is required by the IATI Standard. IATI Publisher will store your XML data files online, and provide a link to these files on the IATI Registry. The IATI Registry stores links to every IATI data file published and you can search for your organisation’s IATI XML files here: ', + ], + 'access_your_data_header' => 'Access your data', + 'access_your_data_description' => [ + 'one' => 'IATI data is open data and can be accessed by anyone. It is pulled from the IATI Registry and used for many purposes. For example, IATI data can be used by governments to monitor development resources going into their countries, by donors and civil society to enable coordination, by analysts and academics to inform research and policy, or by organisations who include IATI data in their own online data portals. ', + 'two' => 'There are many online data tools and platforms that share and visualise IATI data. You can start by looking at your organisation’s data on IATI’s simple platform called d-portal. Within 24 hours of publishing your data, it will be displayed there. Simply search for your organisation in the “Publisher’ drop-down menu. And to see your data in a format that is used by governments and other data users, visit the Country Development Finance Data tool', + 'three' => 'See more information on IATI tools and resources.' + ], + 'update_and_improve_header' => 'Update and improve your data', + 'update_and_improve_description' => [ + 'one' => 'Once your organisation has published its first dataset, you are encouraged to update and improve your data over time. You should update your data at least every quarter. You should also aim to expand the number of data fields that you provide information for. Read more about improving the quality of IATI data. ', + 'two' => 'For more information about publishing IATI data please visit IATI’s main website: iatistandard.org/guidance.', + ], +]; diff --git a/lang/en/register.php b/lang/en/register.php new file mode 100644 index 0000000000..59cb51d1ba --- /dev/null +++ b/lang/en/register.php @@ -0,0 +1,137 @@ + "Create IATI Publisher Account and IATI Registry Account", + 'create_iati_publisher_subheader' => "Register your organisation to start your IATI publishing journey by creating accounts in IATI publisher and IATI Registry at once.", + 'information_doesnt_match_registry' => "Sorry, the information you provided doesn’t match your IATI Registry information.", + 'if_you_are_account_holder' => "Please note that if you’re an account holder in", + 'make_sure_your' => "make sure your ", + 'match_your_iati_registry_info' => "match your IATI Registry Information", + + /** For registration modals **/ + 'publisher_information' => [ + 'label' => "Publisher Information", + 'description' => "This information will be used to create a Publisher in IATI Publisher", + 'hover_text' => "We refer to organisations who publish IATI data as 'Publishers'. Before publishing data, all organisations need their own 'Publisher Account' on the IATI Registry (iatiregistry.org). Enter your organisation's data here and we'll create your organisation's Publisher Account for you. These details will also be saved here in IATI Publisher.", + ], + 'publisher_name' => [ + "label" => "Publisher Name", + 'placeholder' => "Type your organisation name here", + 'hover_text' => "The name of your organisation publishing the data.", + ], + 'publisher_id' => [ + "label" => "Publisher ID", + 'placeholder' => "Type your organisation ID here", + 'hover_text' => "Provide a unique ID for your organisation. It must be at least two characters long and use lower case letters. You can include letters, numbers and also - (dash) and _ (underscore). Where possible use a short abbreviation of your organisation's name, for example: 'nef_mali' for Near East Foundation Mali.", + ], + 'country' => [ + 'label' => "Country", + 'placeholder' => "Select a Country", + 'hover_text' => "Add the location of your organisation.", + ], + 'org_registration_agency' => [ + "label" => "Organisation Registration Agency", + "placeholder" => "Select an Organisation Registration Agency", + "hover_text" => "Select the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org", + ], + 'org_registration_no' => [ + 'label' => "Organisation Registration Number", + 'placeholder' => "Type your Registration Number here", + 'hover_text' => "Add the registration number for your organisation that has been provided by the registration agency named above.", + ], + 'registration_number' => [ + 'label' => "Registration Number", + 'placeholder' => "Type your Registration Number here", + 'hover_text' => "Provide the registration number for your organisation that has been provided by organisation registration agency. If you do not know this please email support@iatistandard.org.", + ], + 'iati_org_identifier' => [ + 'label' => "IATI Organisational Identifier", + 'hover_text' => "The Organisation Identifier is a unique code for your organisation. This is genereated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier.", + 'help_text' => "This is autogenerated, please make sure to fill the above fields correctly." + ], + 'publisher_type' => [ + 'label' => "Publisher Type", + 'placeholder' => "Select a publisher type ", + 'hover_text' => "Select the type that best describes your organisation. Read more on Organisation types.", + ], + 'publisher_logo_url' => [ + 'label' => "Publisher Logo Url", + 'hover_text' => " Provide a link to an image to your organisation's logo (Optimum size: 200 x 120 px)", + ], + 'organisation_desc' => [ + 'label' => "Organization Description", + 'placeholder' => "Type Description here", + 'hover_text' => " Provide a short description about your organisation.", + ], + 'contact_info' => [ + 'title' => "Contact Information", + ], + 'contact' => [ + 'label' => "Contact Email", + 'hover_text' => "Please add a contact email address for your organisation. Please note that IATI is an open data standard and the email provided here will be visible to others on the IATI Registry.", + ], + 'website' => [ + 'label' => "Website", + 'hover_text' => "Add the URL to your organisation's website.", + ], + 'address' => [ + 'label' => "Address", + 'placeholder' => "Type address here", + 'hover_text' => "Provide a contact address for your organisation.", + ], + 'publishing_additional_info' => [ + 'title' => "Publishing Additional Information", + 'description' => "This information will be used to create an admin account in IATI Publisher", + ], + 'source' => [ + 'label' => "Source", + 'placeholder' => "Select a Source", + 'hover_text' => "Select an option:
    Primary - your organisation is publishing its own or (associated organisations') data
    Secondary - your organisation is reproducing data on the activities of another organisation", + ], + 'record_exclusions' => [ + 'label' => "Record Exclusions", + 'placeholder' => "Type Record Exclusions here", + 'hover_text' => "Does your organisation have an exclusion policy that provide details on what data that it cannot publish? For example an organisation may not be able to publish data because of political sensitivity issues or if information is commercially restricted. Please provide details here about what data your organisation needs to exclude (if any), and a URL to your organisation's exclusion policy (if it has one). For more information read: Information and data you can't publish (exclusions)", + ], + 'administrator_information' => [ + 'title' => "Administrator Information", + 'iati_register_description' => "Provide your information to create an admin account here on IATI Publisher and IATI Registry at once.", + 'register_description' => "This information will be used to create an admin account in IATI Publisher", + 'hover_text' => "Provide your information to create an admin account here on IATI Publisher.", + ], + 'username' => [ + 'label' => "Username", + 'placeholder' => "Type username here", + 'hover_text' => "You will need this later to login into IATI Publisher.", + ], + 'fullname' => [ + 'label' => "Full Name", + 'placeholder' => "Type your full name here", + ], + 'email_address' => [ + 'label' => "Email Address", + 'placeholder' => "Type valid email here", + ], + 'password' => [ + 'label' => "Password", + 'placeholder' => "Type password here", + 'help_text' => "Minimum length: 6 characters", + 'confirm' => "Confirm Password", + 'confirm_help' => "should match the password above", + ], + 'email_verification' => [ + 'title' => "Email Verification", + 'description' => "Please verify and activate your IATI Publisher account through your provided email", + ], + 'data_license' => [ + 'label' => "Data License", + 'placeholder' => "Select a Data License", + 'hover_text' => " Select the License under which your data is being published. IATI is an open data standard and requires you to make your data available under an open licence so it can be freely used. One of the most frequently used licenses is Creative Commons Attribution. For more information read: How to license your data.", + ], + + /** + * For "for e.g" , always used with tempelate literal in vue files + * `....${language.register_lang.for_eg}....` + * */ + 'for_eg' => "For e.g.", +]; diff --git a/lang/en/requests.php b/lang/en/requests.php new file mode 100644 index 0000000000..387fbb8993 --- /dev/null +++ b/lang/en/requests.php @@ -0,0 +1,244 @@ + 'Budget elements are duplicated.', + 'budget_elements_position' => 'Budget elements at position ', + 'have_same_status' => ' have same status, type, period start and period end.', + 'budget_with_type_revised' => 'Budget with type revised must have period start and end same to that of one of the budgets having same status and type original for budgets elements at position ', + + /* + * Not worth extracting or no use extracting common from these. + */ + 'sum_of_percent' => 'Sum of percentage within vocabulary cannot be greater than 100', + 'the_sum_of_budget' => 'The sum of percentage with budget items must add up to 100.', + 'the_sum_of_recipient' => 'The sum of recipient country percentage cannot be greater than 100', + 'the_total_percent_100' => 'The total percentage within a vocabulary must be 100.', + 'the_total_percent_equal' => 'The total percentage within different vocabulary must be equal.', + 'either_xml_csv' => 'The file must be of either xml or csv format.', + 'greater_than_100mb' => 'The file shouldn\'t be greater than 10MB.', + 'the_user_name_is_invalid' => 'The username is invalid. Username must be purely lowercase alphabets followed by alphanumeric(ascii) characters and these symbols:-_', + 'the_publisher_is_invalid' => 'The publisher id is invalid. The publisher id must be at least two characters long and lower case. It can include letters, numbers and also - (dash) and _ (underscore).', + 'the_registration_num_id_invalid' => 'The registration number is invalid. Valid registration number includes letter, number, . and _, - (dash).', + 'the_iso_date_field_after' => 'The @iso-date field of period end must be a date after @iso-field of period start', + 'the_iso_date_field_difference' => 'The @iso-date field of period end and @iso-date of period start must not have difference of more than a year', + 'value_must_be_filled' => 'Value must be filled when the indicator measure is non-qualitative.', + 'value_must_be_omitted' => 'Value must be omitted when the indicator measure is qualitative.', + + /* + * Use this from lines that are too complex + * (used 0 times) + */ + 'the_midfix_suffix' => 'The :midfix :suffix', + + /* + * Extracted common from these. + * ':suffix' is swappable + */ + 'alt_amount_field' => 'Amount field :suffix', + 'alt_recipient_country' => 'Recipient country :suffix', + 'alt_recipient_region' => 'Recipient region :suffix', + 'alt_value_date' => 'Value date :suffix', + 'alt_period_end' => 'Period end :suffix', + 'alt_region' => 'Region :suffix', + 'activity_file' => 'The activity file :suffix', + 'activity_scope' => 'The activity scope :suffix', + 'activity_status' => 'The activity status :suffix', + 'activity' => 'The activity :suffix', + 'actual_start_and_end_dates' => 'Actual start and end dates :suffix', + 'amount_field_symbol' => 'The @amount field :suffix', + 'amount_field' => 'The amount field :suffix', + 'amount' => 'The amount :suffix', + 'budget_item' => 'The budget item :suffix', + 'budget_percentage' => 'The budget item percentage field :suffix', + 'budget_period' => 'The budget period :suffix', + 'budget' => 'The budget :suffix', + 'capital_spend' => 'The capital spend :suffix', + 'code_field_symbol' => 'The @code field :suffix', + 'category_code_field_symbol' => 'The category @code field :suffix', + 'code' => 'The code :suffix', + 'code_spend' => 'The code spend :suffix', + 'collaboration_type' => 'The collaboration type :suffix', + 'condition' => 'The condition :suffix', + 'contact_info' => 'The contact info :suffix', + 'contact_info_email' => 'The contact info email :suffix', + 'contact_info_telephone' => 'The contact info telephone number :suffix', + 'contact_info_website' => 'The contact info website url :suffix', + 'country_budget_item' => 'The country budget item :suffix', + 'date' => 'Date :suffix', + 'date_field_symbol' => 'The date field :suffix', + 'default_aid' => 'The default aid :suffix', + 'default_finance' => 'The default finance type :suffix', + 'default_flow' => 'The default flow type :suffix', + 'default_tied_status' => 'The default tied status :suffix', + 'document_link_category_field' => 'The document link category code field :suffix', + 'document_link_category' => 'The document link category :suffix', + 'document_link_language_field' => 'The document link language code field :suffix', + 'document_link_language' => 'The document link language :suffix', + 'end_date' => 'End date :suffix', + 'first_title' => 'The first title :suffix', + 'humanitarian_code' => 'The humanitarian scope code :suffix', + 'humanitarian' => 'The humanitarian scope :suffix', + 'indicator_ascending' => 'The indicator ascending :suffix', + 'indicator_measure' => 'The indicator measure :suffix', + 'indicator_aggregation' => 'The indicator aggregation status :suffix', + 'indicator_uri_symbol' => 'The @indicator-uri field :suffix', + 'iso_date_symbol' => 'The @iso-date :suffix', + 'iso_field_symbol' => 'The @iso-date field :suffix', + 'iso_field' => 'The iso-date field :suffix', + 'language_code_symbol' => 'The language @code field :suffix', + 'language_field' => 'The language field :suffix', + 'location_admin_level' => 'The location administrative level', + 'location_admin' => 'The location administrative', + 'location_feature' => 'The location feature :suffix', + 'location_id' => 'The location id :suffix', + 'location_reach' => 'The location reach :suffix', + 'location_ref_field' => 'The location reference field :suffix', + 'location' => 'The location :suffix', + 'narrative_field' => 'The narrative field :suffix', + 'narrative_language' => 'The narrative language :suffix', + 'narrative' => 'The narrative :suffix', + 'org_reference' => 'The owner org reference field :suffix', + 'other_identifier_ref' => 'The other identifier reference field :suffix', + 'other_identifier' => 'The other identifier :suffix', + 'participating_org' => 'The participating organisation :suffix', + 'period_end_iso' => 'The Period End iso-date :suffix', + 'planned_disb_period' => 'The planned disbursement period :suffix', + 'planned_disb_pro_ref' => 'The Planned Disbursement provider ref :suffix', + 'planned_disb_pro' => 'The Planned Disbursement provider org :suffix', + 'planned_disb_rec_ref' => 'The planned disbursement receiver org ref :suffix', + 'planned_disb_rec' => 'The planned disbursement receiver org :suffix', + 'planned_disb' => 'The planned disbursement :suffix', + 'policy_maker' => 'The policy maker :suffix', + 'pos_latitude' => 'The pos latitude :suffix', + 'pos_longitude' => 'The pos longitude :suffix', + 'recipient_country' => 'The recipient country :suffix', + 'recipient_country_percentage' => 'The recipient country :suffix', + 'recipient_region' => 'The recipient region :suffix', + 'recipient_region_perc_field' => 'The recipient region percentage field :suffix', + 'ref_format_symbol' => 'The @ref format :suffix', + 'reference_format' => 'The reference format for :suffix', + 'registration_number' => 'The registration number :suffix', + 'relationship_type' => 'The relationship type in related activity :suffix', + 'reporting_org' => 'The reporting organisation :suffix', + 'sdg_targets' => 'The tag SDG targets :suffix', + 'sdg' => 'The tag SDG :suffix', + 'sector' => 'The sector :suffix', + 'tag' => 'The tag :suffix', + 'the_value_date' => 'The value-date :suffix', + 'title_language_field' => 'The title language field :suffix', + 'transaction_aid' => 'The transaction aid type :suffix', + 'transaction_finance' => 'The transaction finance type :suffix', + 'transaction_flow' => 'The transaction flow type :suffix', + 'transaction_tied' => 'The transaction tied status :suffix', + 'transaction_sector' => 'The transaction sector :suffix', + 'transaction_pro_org' => 'The transaction provider-activity-id field :suffix', + 'transaction_pro_activity' => 'The transaction provider org :suffix', + 'transaction_rec_org' => 'The transaction receiver-activity-id field :suffix', + 'transaction_rec_activity' => 'The transaction receiver org :suffix', + 'transaction_ref_field' => 'The transaction reference field :suffix', + 'transaction_ref_country' => 'The transaction reference field :suffix', + 'transaction' => 'The transaction :suffix', + 'type_for' => 'The type for :suffix', + 'url_field_symbol' => 'The @url field suffix', + 'value_date_symbol' => 'The @value-date :suffix', + 'value_date_field_symbol' => 'The @value-date field :suffix', + 'value_date_field' => 'The value-date field :suffix', + 'value_field_symbol' => 'The @value field :suffix', + 'value_field' => 'The value field :suffix', + 'value' => 'The value :suffix', + 'vocab_url_date_symbol' => 'The @vocabulary-uri date :suffix', + 'vocab_url_field_symbol' => 'The @vocabulary-uri field :suffix', + 'xml_lang_field_symbol' => 'The @xml:lang field :suffix', + 'xml_lang_symbol' => 'The @xml:lang :suffix', + 'year_field_symbol' => 'The @year field :suffix', + 'transaction_rec_region' => 'The transaction recipient region :suffix', + + 'suffix' => [ + 'already_defined_in_transaction' => ' already defined in Transactions', + 'identifier_already_exists' => ' identifier already exists', + 'are_duplicated' => ' are duplicated.', + 'at_position' => ' at position', + 'cash_and_voucher_is_invalid' => ' cash and voucher modalities is invalid.', + 'cannot_be_greater_than_100' => ' cannot be greater than 100', + 'cannot_have_more_than_one' => ' cannot have more than one value.', + 'class_is_invalid' => ' class is invalid', + 'code_is_invalid' => ' code is invalid.', + 'currency_is_invalid' => ' currency is invalid.', + 'date_must_be_greater' => ' date must be date greater than year 1900.', + 'defined_in_indicators' => ' is already defined in its indicator.', + 'defined_in_result' => ' is already defined in its result.', + 'designation_is_invalid' => ' designation is invalid', + 'doesnt_exist' => ' does not exist.', + 'earmarking_category_is_invalid' => ' type earmarking category is invalid.', + 'earmarking_modality_is_invalid' => ' type earmarking modality is invalid.', + 'exactness_is_invalid' => ' exactness is invalid', + 'format_is_invalid' => ' format is invalid.', + 'identifier_exists' => ' identifier already exists.', + 'is_not_valid' => ' is not valid,', + 'is_a_required_field' => ' is a required field,', + 'is_invalid' => ' is invalid.', + 'is_required_with_val' => ' is required with value,.', + 'is_required_with_xml' => ' is required with @xml:lang field.', + 'is_required' => ' is required.', + 'may_not_be_in_future' => ' may not be in the future.', + 'must_be_4_digits' => ' must be 4 digits.', + 'must_be_a_date_after_period_start' => ' must be a date after period-start date', + 'must_be_a_date_after_period' => ' must be a date after period.', + 'must_be_a_date_field' => ' must be a date field.', + 'must_be_a_date' => ' must be a date.', + 'must_be_a_proper_date' => ' must be a proper date.', + 'must_be_a_string' => ' must be a string', + 'must_be_a_valid_date' => ' must be a valid date.', + 'must_be_an_integer' => ' must be an integer', + 'must_be_atleast_7_digits . ' => ' must be atleast 7 digits.', + 'must_be_between' => ' must be a between period start and period end', + 'must_be_between_0_100' => ' must be between 0 and 100.', + 'must_be_greater_equal_0' => ' must be greater or equal to 0.', + 'must_be_later_than_start_date' => ' must be later than the start date.', + 'must_be_a_number' => ' must be a number.', + 'must_be_numeric' => ' must be numeric.', + 'must_be_unique' => ' must be a unique.', + 'must_be_uploaded' => ' must be uploaded.', + 'must_be_valid_url' => ' must be a valid url.', + 'must_be_valid_vocal_url' => ' vocabulary uri must be a valid url.', + 'must_be_within_a_year' => ' must be within a year after Period Start iso-date.', + 'must_have_oecd' => ' vocabulary must have 5 digit OECD', + 'must_not_be_more_than_20_digits' => ' must not have more than 20 digits.', + 'must_not_be_longer_than_1_year' => ' must not be longer than one year.', + 'must_not_be_longer_than_3_months' => ' must not be longer than three months', + 'must_not_be_future' => ' must not be in future.', + 'must_not_be_negative' => ' must not be in negative.', + 'must_not_have_difference' => ' of period end and @iso - date of period start must not have difference of more than a year', + 'organisation_is_invalid' => ' reporting organisation is invalid.', + 'percent_cannot_be_greater' => ' percent cannot be greater than 100.', + 'percent_equal_allocated' => ' percent must be equal to allocated percent', + 'percent_match_allocated' => ' percent must match with allocated percent', + 'percent_must_be_a_number' => ' percent number must be a number.', + 'percent_field_must_be_a_number' => ' percent number must be a number.', + 'percentage_omitted' => ' percentage for single sector must be either omitted or be 100.', + 'period_end_must_be_after' => ' of period end must be a date after @iso-field of period start', + 'reach_code_is_invalid' => ' reach_code is invalid', + 'required_when_language' => ' is required when language is specified.', + 'required_when_narrative_present' => ' is required when narrative field is present.', + 'required_when_vocabulary' => ' is required when vocabulary is reporting organisation.', + 'role_is_invalid' => ' role is invalid.', + 'should_be_100' => ' should be 100 when there is only one budget item.', + 'should_be_baseline' => ' should be the year of baseline date.', + 'should_not_have_multiple_values' => ' should not have multiple values or narratives.', + 'shouldnt_contain_symbol' => ' shouldn\'t contain the symbols /, &, | or ?.', + 'significance_is_invalid' => ' significance is invalid', + 'type_is_invalid' => ' type is invalid.', + 'type_is_not_valid' => ' type is not valid.', + 'vocabulary_is_invalid' => ' vocabulary is invalid.', + 'already_defined_in_activity' => ' already defined in Activity so cannot be mentioned in transaction.', + 'must_be_unique_for_activity' => ' must be unique for an activity.', + ], +]; + + diff --git a/lang/en/setting.php b/lang/en/setting.php index 5a5669d303..3f510c4d0d 100644 --- a/lang/en/setting.php +++ b/lang/en/setting.php @@ -2,7 +2,7 @@ return [ 'humanitarian_types' => [ - '1' => 'Yes', - '0' => 'No', + '1' => 'Yes', + '0' => 'No', ], ]; diff --git a/lang/en/settings.php b/lang/en/settings.php new file mode 100644 index 0000000000..23f3c71409 --- /dev/null +++ b/lang/en/settings.php @@ -0,0 +1,66 @@ + "Settings", + 'publishing_settings_label' => "Publishing Settings", + 'default_values_label' => "Default Values", + 'registry_information' => [ + 'label' => "Registry Information", + 'hover_text' => "IATI Publisher needs to add your organisation's data to the IATI Registry (iatiregistry.org). To do this, we need to access your organisation's IATI Registry Publisher Account. Please provide your organisation's credentials from the IATI Registry.", + ], + 'publisher_id' => [ + 'label' => "Publisher ID", + 'hover_text' => "This is the unique ID for your organisation that you created when you set up your IATI Registry Publisher Account. It is a shortened version of your organisation's name, which will include lowercase letters and may include numbers and also - (dash) and _ (underscore). For example nef_mali' for Near East Foundation Mali.", + 'placeholder' => "Type Publisher ID here", + ], + 'api_token' => [ + 'label' => "API Token", + 'hover_text' => "The API token is a unique key that is generated from your organisation's IATI Registry Publisher Account. It is required to give IATI Publisher permission to add data to the IATI Registry on your behalf. Generate a Token in the 'My Account' tab by logging into to the IATI Registry.", + 'placeholder' => "Type API Token here", + ], + + 'correct_label' => "Correct", + 'incorrect_label' => "Incorrect", + 'uc_verify' => "VERIFY", + 'uc_cancel' => "CANCEL", + 'uc_save_publishing' => "SAVE PUBLISHING SETTING", + + 'default_values' => [ + 'label' => "Default Values", + 'hover_text' => "These values will be automatically added to your data files.", + ], + 'default_currency' => [ + 'label' => "Default Currency", + 'hover_text' => "The currency in which you report your financial transactions. You can later manually change the currency on individual transactions and budgets if required.", + 'placeholder' => "Select from dropdown", + 'help_text' => "If you do not set your default currency, you have to choose and select currency manually for all the financial transactions.", + ], + 'default_language' => [ + 'label' => "Default Values", + 'hover_text' => "The language in which you provide data on your activities. You can later manually change the language on individual text if required.", + 'placeholder' => "Select language from dropdown", + 'help_text' => 'If you do not set your default language, you have to choose and select language for all the narrative text in activity and organisation.', + ], + 'default_hierarchy' => [ + 'label' => "Default Hierarchy", + 'hover_text' => "If you are reporting both programmes (parent activities) and projects (child activities), choose the hierarchical level that most of your activities are at. e.g. parent activity = 1; child activity = 2.
    If all your activities are at the same level i.e. you have no child activities, then choose 1.", + 'placeholder' => "Type default hierarchy here", + 'help_text' => "If hierarchy is not reported then 1 is assumed. If multiple levels are reported then, to avoid double counting, financial transactions should only be reported at the lowest hierarchical level. ", + ], + 'budget_not_provided' => [ + 'label' => "Budget Not Provided", + 'hover_text' => "Add a 'Humanitarian Flag' to every activity that your organisation publishes data on. This means that your organisation identifies all their activities as wholly or partially addressing a humanitarian crisis or multiple crises. You can later manually add or remove a Humanitarian Flag on individual activities if required.", + 'placeholder' => "Select budget not provided type here", + 'help_text' => "If not selected, it will be set to 'Yes' in all the activities.", + ], + 'humanitarian' => [ + 'label' => "Humanitarian", + 'hover_text' => "Add a 'Humanitarian Flag' to every activity that your organisation publishes data on. This means that your organisation identifies all their activities as wholly or partially addressing a humanitarian crisis or multiple crises. You can later manually add or remove a Humanitarian Flag on individual activities if required.", + 'placeholder' => "Select Humanitarian here", + 'help_text' => "If not selected, it will be set to 'Yes' in all the activities.", + ], + + 'default_for_all_data_label' => "Default for all data", + 'default_for_activity_label' => "Default for activity data", + 'uc_save_default_values_label' => "SAVE DEFAULT VAlUES", +]; diff --git a/lang/en/support.php b/lang/en/support.php new file mode 100644 index 0000000000..13914b96ea --- /dev/null +++ b/lang/en/support.php @@ -0,0 +1,9 @@ + 'Support', + 'support_description' => [ + 'one' => 'If your organisation needs support to use IATI Publisher or has questions about what data to publish please contact IATI’s Helpdesk: support@iatistandard.org.', + 'two' => 'You may also join IATI’s online community at IATI Connect , where you can post messages about IATI publishing in the Data Publishing Community of Practice.', + ], +]; diff --git a/lang/en/user.php b/lang/en/user.php index 42ae7887c7..e4d89db0c5 100644 --- a/lang/en/user.php +++ b/lang/en/user.php @@ -530,5 +530,4 @@ 'ZW-ROD' => 'Registrar of Deeds', 'ZZ-EBID' => 'European Business Identifier (EBID)', ], - ]; diff --git a/lang/en/validation.php b/lang/en/validation.php index 38814cd05a..dff7019273 100644 --- a/lang/en/validation.php +++ b/lang/en/validation.php @@ -158,8 +158,6 @@ | */ - 'attributes' => [], - /* |-------------------------------------------------------------------------- | Custom Validation Language Lines @@ -170,60 +168,60 @@ | specify a specific custom language line for a given attribute rule. | */ - 'sum' => 'The sum of percentage within a vocabulary must add up to 100.', - 'overall_sum' => 'The sum of percentage must not be more than 100.', - 'required_custom' => ':attribute is required when there are multiple codes.', - 'total' => ':attribute should be 100 when there is only one :values.', - 'csv_required' => 'At row :number :attribute is required', - 'csv_unique' => 'At row :number :attribute should be unique', - 'csv_invalid' => 'At row :number :attribute is invalid', - 'csv_numeric' => 'At row :number :attribute should be numeric', - 'csv_unique_validation' => 'At row :number :attribute is invalid and must be unique.', - 'csv_among' => 'At row :number at least one :type among :attribute is required.', - 'csv_only_one' => 'At row :number only one among :attribute is required.', - 'year_value_narrative_validation' => ':year and :value is required if :narrative is not empty.', - 'year_narrative_validation' => ':year is required if :narrative is not empty.', - 'org_required' => 'At least one organisation name is required', - 'custom_unique' => ':attribute has already been taken.', - 'user_identifier_taken' => 'Sorry! this User Identifier is already taken', - 'enter_valid' => 'Please enter valid :attribute', - 'sector_validation' => 'Sector must be present either at Activity or in all Transactions level.', - 'sector_narrative' => 'Sector Narrative is required when vocabulay is 98 or 99.', - 'transaction_sector_narrative' => 'Transaction Sector Narrative is required when vocabulay is 98 or 99.', - 'transaction_sector_validation' => 'All Transactions must contain Sector element.', - 'sector_in_activity_and_transaction_remove' => 'You can only mention Sector either at Activity or in Transaction level(should be included in all transactions) but not both.
    Please click the link to remove Sector From: Transaction Level OR Activity Level', - 'sector_in_activity_and_transaction' => 'You need to mention either Recipient Country or Region either in Activity Level or in Transaction level. You can\'t have Country/Region in both Activity level and Transaction level. Also, they cannot be empty for both activity and transactions', - 'recipient_country_or_region_required' => 'Either Recipient Country or Recipient Region is required in Activity Level or Transaction Level.', + 'sum' => 'The sum of percentage within a vocabulary must add up to 100.', + 'overall_sum' => 'The sum of percentage must not be more than 100.', + 'required_custom' => ':attribute is required when there are multiple codes.', + 'total' => ':attribute should be 100 when there is only one :values.', + 'csv_required' => 'At row :number :attribute is required', + 'csv_unique' => 'At row :number :attribute should be unique', + 'csv_invalid' => 'At row :number :attribute is invalid', + 'csv_numeric' => 'At row :number :attribute should be numeric', + 'csv_unique_validation' => 'At row :number :attribute is invalid and must be unique.', + 'csv_among' => 'At row :number at least one :type among :attribute is required.', + 'csv_only_one' => 'At row :number only one among :attribute is required.', + 'year_value_narrative_validation' => ':year and :value is required if :narrative is not empty.', + 'year_narrative_validation' => ':year is required if :narrative is not empty.', + 'org_required' => 'At least one organisation name is required', + 'custom_unique' => ':attribute has already been taken.', + 'user_identifier_taken' => 'Sorry! this User Identifier is already taken', + 'enter_valid' => 'Please enter valid :attribute', + 'sector_validation' => 'Sector must be present either at Activity or in all Transactions level.', + 'sector_narrative' => 'Sector Narrative is required when vocabulay is 98 or 99.', + 'transaction_sector_narrative' => 'Transaction Sector Narrative is required when vocabulay is 98 or 99.', + 'transaction_sector_validation' => 'All Transactions must contain Sector element.', + 'sector_in_activity_and_transaction_remove' => 'You can only mention Sector either at Activity or in Transaction level(should be included in all transactions) but not both.
    Please click the link to remove Sector From: Transaction Level OR Activity Level', + 'sector_in_activity_and_transaction' => 'You need to mention either Recipient Country or Region either in Activity Level or in Transaction level. You can\'t have Country/Region in both Activity level and Transaction level. Also, they cannot be empty for both activity and transactions', + 'recipient_country_or_region_required' => 'Either Recipient Country or Recipient Region is required in Activity Level or Transaction Level.', 'transaction_recipient_country_or_region_required' => 'All Transactions must contain Recipient Region or Recipient Country', - 'sum_of_percentage' => 'The sum of percentage in :attribute must be 100.', - 'validation_before_completed' => 'Please make sure you enter the following fields before changing to completed state.', - 'reporting_org_identifier_unique' => 'This reporting organization identifier is being used by :orgName. This identifier has to be unique. Please contact us at support@aidstream.org', - 'code_list' => ':attribute is not valid.', - 'string' => ':attribute should be string', - 'negative' => ':attribute cannot be negative', - 'actual_date' => 'Actual Start Date And Actual End Date must not exceed present date', - 'multiple_activity_date' => 'Multiple Activity dates are not allowed.', - 'start_end_date' => 'Actual Start Date or Planned Start Date should be before Actual End Date or Planned End Date.', - 'csv_date' => ':attribute must be of format Y-m-d.', - 'multiple_values' => 'Multiple :attribute are not allowed.', - 'csv_size' => 'At least one :attribute is required', - 'multiple_narratives' => 'Multiple narratives for :attribute with the same type is not allowed.', - 'required_only_one_among' => 'Either :attribute or :values is required.', - 'recipient_country_region_percentage_sum' => 'Sum of percentage of Recipient Country and Recipient Region must be equal to 100.', - 'invalid_in_transaction' => 'Entered :attribute is incorrect in Transaction.', - 'invalid_in_sector' => 'Entered :attribute is incorrect in Sector.', - 'required_if_in_transaction' => ':attribute is required if :values is not present in Transaction.', - 'sector_vocabulary_required' => 'Sector Vocabulary is required in Transaction if not present in Activity Level.', - 'required_in_transaction' => ':attribute is required in Transaction.', - 'invalid_language' => 'Invalid :attribute language', - 'unique_lang' => 'Repeated :attribute in the same language is not allowed.', - 'indicator_ascending' => 'Indicator Ascending should be true/false, 0/1 or Yes/No.', - 'indicator_size' => 'Indicator Baseline Year or Value should occur once and no more than once within an Indicator.', - 'narrative_required' => ':attribute Narrative is required.', - 'no_more_than_once' => ':attribute should occur once and no more than once within :values.', - 'budget_period_end_date' => 'Budget Period End Date', - 'spaces_not_allowed' => 'You cannot enter spaces in organization name abbreviation.', - 'custom' => [ + 'sum_of_percentage' => 'The sum of percentage in :attribute must be 100.', + 'validation_before_completed' => 'Please make sure you enter the following fields before changing to completed state.', + 'reporting_org_identifier_unique' => 'This reporting organization identifier is being used by :orgName. This identifier has to be unique. Please contact us at support@aidstream.org', + 'code_list' => ':attribute is not valid.', + 'string' => ':attribute should be string', + 'negative' => ':attribute cannot be negative', + 'actual_date' => 'Actual Start Date And Actual End Date must not exceed present date', + 'multiple_activity_date' => 'Multiple Activity dates are not allowed.', + 'start_end_date' => 'Actual Start Date or Planned Start Date should be before Actual End Date or Planned End Date.', + 'csv_date' => ':attribute must be of format Y-m-d.', + 'multiple_values' => 'Multiple :attribute are not allowed.', + 'csv_size' => 'At least one :attribute is required', + 'multiple_narratives' => 'Multiple narratives for :attribute with the same type is not allowed.', + 'required_only_one_among' => 'Either :attribute or :values is required.', + 'recipient_country_region_percentage_sum' => 'Sum of percentage of Recipient Country and Recipient Region must be equal to 100.', + 'invalid_in_transaction' => 'Entered :attribute is incorrect in Transaction.', + 'invalid_in_sector' => 'Entered :attribute is incorrect in Sector.', + 'required_if_in_transaction' => ':attribute is required if :values is not present in Transaction.', + 'sector_vocabulary_required' => 'Sector Vocabulary is required in Transaction if not present in Activity Level.', + 'required_in_transaction' => ':attribute is required in Transaction.', + 'invalid_language' => 'Invalid :attribute language', + 'unique_lang' => 'Repeated :attribute in the same language is not allowed.', + 'indicator_ascending' => 'Indicator Ascending should be true/false, 0/1 or Yes/No.', + 'indicator_size' => 'Indicator Baseline Year or Value should occur once and no more than once within an Indicator.', + 'narrative_required' => ':attribute Narrative is required.', + 'no_more_than_once' => ':attribute should occur once and no more than once within :values.', + 'budget_period_end_date' => 'Budget Period End Date', + 'spaces_not_allowed' => 'You cannot enter spaces in organization name abbreviation.', + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], @@ -239,10 +237,9 @@ | */ - 'attributes' => [], - 'within_a_year' => "The :attribute must be within a year after :date.", - 'required_if_any' => "The :field is required if any of the fields of :element are filled.", - 'amount' => 'Please enter amount in the format xx.xx', - 'greater' => 'The :attribute must be greater than or equal to :value', + 'within_a_year' => "The :attribute must be within a year after :date.", + 'required_if_any' => "The :field is required if any of the fields of :element are filled.", + 'amount' => 'Please enter amount in the format xx.xx', + 'greater' => 'The :attribute must be greater than or equal to :value', 'date_greater_than' => 'The date must be greater than :value', ]; diff --git a/lang/en/web.php b/lang/en/web.php new file mode 100644 index 0000000000..b2ceb5e88d --- /dev/null +++ b/lang/en/web.php @@ -0,0 +1,42 @@ + 'IATI Publisher', + 'home' => 'Home', + 'about' => 'About', + 'sign_in' => 'Sign In', + 'join_now' => 'Join Now', + 'iati_standard' => 'IATI Standard', + 'publishing_checklist' => 'Publishing Checklist', + 'support' => 'Support', + 'language' => 'Language', + 'go_to_dashboard' => "Go to Dashboard", + + //Lines for nav-item hover card + 'header' => [ + 'about_hover_text' => 'IATI Publisher helps small and medium-sized organisations publish IATI data on development and humanitarian financing and activities', + 'publishing_checklist_hover_text' => 'New to IATI? Use our checklist to track each step required for your organisation to successfully publish IATI data', + 'iati_standard_hover_text' => 'The IATI Standard provides information and guidance on all the data fields that your organisation can publish IATI data on', + 'support_hover_text' => 'Any questions? Get help to publish your organisation’s data', + ], + + //Lines for footer + 'footer' => [ + 'part_of_iati_unified_label' => 'Part of the IATI Unified Platform', + 'code_licensed_under_label' => 'Code licensed under the GNU AGPL.', + 'documentation_licensed_under_label' => 'Documentation licensed under CC BY 3.0', + 'any_questions_contact_label' => 'ANY QUESTIONS? CONTACT SUPPORT', + 'copyright_label' => 'Copyright IATI 2022. All rights reserved.', + ], +]; + + diff --git a/public/css/app.css b/public/css/app.css index 03d65048ff..077ab119d5 100755 --- a/public/css/app.css +++ b/public/css/app.css @@ -586,6 +586,9 @@ video { .-bottom-24 { bottom: -6rem; } +.left-4 { + left: 1rem; +} .top-full { top: 100%; } @@ -628,12 +631,6 @@ video { .bottom-0 { bottom: 0px; } -.top-7 { - top: 1.75rem; -} -.bottom-4 { - bottom: 1rem; -} .bottom-\[calc\(100\%-52px\)\] { bottom: calc(100% - 52px); } @@ -676,6 +673,9 @@ video { .left-5 { left: 1.25rem; } +.bottom-4 { + bottom: 1rem; +} .top-16 { top: 4rem; } @@ -1001,15 +1001,6 @@ video { .h-px { height: 1px; } -.h-56 { - height: 14rem; -} -.h-11 { - height: 2.75rem; -} -.h-1 { - height: 0.25rem; -} .h-0 { height: 0px; } @@ -1028,6 +1019,9 @@ video { .h-10 { height: 2.5rem; } +.h-1 { + height: 0.25rem; +} .h-3 { height: 0.75rem; } @@ -1091,15 +1085,6 @@ video { .w-72 { width: 18rem; } -.w-52 { - width: 13rem; -} -.w-11 { - width: 2.75rem; -} -.w-10 { - width: 2.5rem; -} .w-\[250px\] { width: 250px; } @@ -1112,9 +1097,6 @@ video { .w-64 { width: 16rem; } -.w-\[200px\] { - width: 200px; -} .w-\[280px\] { width: 280px; } @@ -1142,6 +1124,9 @@ video { .w-0 { width: 0px; } +.w-52 { + width: 13rem; +} .w-\[150px\] { width: 150px; } @@ -1181,6 +1166,9 @@ video { .max-w-\[50\%\] { max-width: 50%; } +.max-w-lg { + max-width: 32rem; +} .max-w-\[70\%\] { max-width: 70%; } @@ -1381,12 +1369,12 @@ video { .gap-4 { gap: 1rem; } -.gap-2 { - gap: 0.5rem; -} .gap-3 { gap: 0.75rem; } +.gap-2 { + gap: 0.5rem; +} .gap-6 { gap: 1.5rem; } @@ -1469,9 +1457,6 @@ video { text-overflow: ellipsis; white-space: nowrap; } -.text-ellipsis { - text-overflow: ellipsis; -} .whitespace-nowrap { white-space: nowrap; } @@ -1619,14 +1604,6 @@ video { --tw-border-opacity: 1; border-left-color: rgba(var(--salmon-50), var(--tw-border-opacity)); } -.border-b-bluecoral { - --tw-border-opacity: 1; - border-bottom-color: rgba(var(--bluecoral), var(--tw-border-opacity)); -} -.border-l-turquoise { - --tw-border-opacity: 1; - border-left-color: rgba(var(--turquoise), var(--tw-border-opacity)); -} .border-b-n-10 { --tw-border-opacity: 1; border-bottom-color: rgba(var(--n-10), var(--tw-border-opacity)); @@ -1634,6 +1611,10 @@ video { .border-b-transparent { border-bottom-color: transparent; } +.border-l-turquoise { + --tw-border-opacity: 1; + border-left-color: rgba(var(--turquoise), var(--tw-border-opacity)); +} .border-opacity-20 { --tw-border-opacity: 0.2; } @@ -1792,14 +1773,6 @@ video { padding-left: 6.06%; padding-right: 6.06%; } -.py-7 { - padding-top: 1.75rem; - padding-bottom: 1.75rem; -} -.px-8 { - padding-left: 2rem; - padding-right: 2rem; -} .px-10 { padding-left: 2.5rem; padding-right: 2.5rem; @@ -1824,6 +1797,10 @@ video { padding-left: 3px; padding-right: 3px; } +.py-7 { + padding-top: 1.75rem; + padding-bottom: 1.75rem; +} .px-\[6\%\] { padding-left: 6%; padding-right: 6%; @@ -1873,21 +1850,6 @@ video { .pb-\[71px\] { padding-bottom: 71px; } -.pt-5 { - padding-top: 1.25rem; -} -.pb-5 { - padding-bottom: 1.25rem; -} -.pt-10 { - padding-top: 2.5rem; -} -.pt-2 { - padding-top: 0.5rem; -} -.pt-11 { - padding-top: 2.75rem; -} .pb-4 { padding-bottom: 1rem; } @@ -1903,9 +1865,15 @@ video { .pb-8 { padding-bottom: 2rem; } +.pt-5 { + padding-top: 1.25rem; +} .pb-72 { padding-bottom: 18rem; } +.pt-2 { + padding-top: 0.5rem; +} .pt-3 { padding-top: 0.75rem; } @@ -1918,8 +1886,14 @@ video { .pr-20 { padding-right: 5rem; } -.pt-0 { - padding-top: 0px; +.pb-5 { + padding-bottom: 1.25rem; +} +.pt-10 { + padding-top: 2.5rem; +} +.pt-11 { + padding-top: 2.75rem; } .text-left { text-align: left; @@ -2021,9 +1995,6 @@ video { .uppercase { text-transform: uppercase; } -.lowercase { - text-transform: lowercase; -} .capitalize { text-transform: capitalize; } @@ -5135,10 +5106,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement .hover\:border-b-2:hover { border-bottom-width: 2px; } -.hover\:border-b-spring-50:hover { - --tw-border-opacity: 1; - border-bottom-color: rgba(var(--spring-50), var(--tw-border-opacity)); -} .hover\:border-b-turquoise:hover { --tw-border-opacity: 1; border-bottom-color: rgba(var(--turquoise), var(--tw-border-opacity)); @@ -5151,10 +5118,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement --tw-bg-opacity: 1; background-color: rgba(var(--n-20), var(--tw-bg-opacity)); } -.hover\:bg-n-50:hover { - --tw-bg-opacity: 1; - background-color: rgba(var(--n-50), var(--tw-bg-opacity)); -} .hover\:bg-white:hover { --tw-bg-opacity: 1; background-color: rgba(var(--white), var(--tw-bg-opacity)); @@ -5179,6 +5142,16 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement --tw-text-opacity: 1; color: rgba(var(--n-50), var(--tw-text-opacity)); } +.group:hover .group-hover\:visible { + visibility: visible; +} +.group:hover .group-hover\:translate-y-0 { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} @media (min-width: 640px) { .sm\:left-6 { @@ -5190,10 +5163,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement margin-right: 2.5rem; } - .sm\:mt-12 { - margin-top: 3rem; - } - .sm\:mt-14 { margin-top: 3.5rem; } @@ -5222,20 +5191,20 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement margin-top: 2.5rem; } - .sm\:block { - display: block; + .sm\:mt-12 { + margin-top: 3rem; } - .sm\:h-72 { - height: 18rem; + .sm\:block { + display: block; } .sm\:h-16 { height: 4rem; } - .sm\:w-auto { - width: auto; + .sm\:h-72 { + height: 18rem; } .sm\:w-64 { @@ -5291,16 +5260,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-right: 2.5rem; } - .sm\:py-5 { - padding-top: 1.25rem; - padding-bottom: 1.25rem; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - .sm\:py-14 { padding-top: 3.5rem; padding-bottom: 3.5rem; @@ -5336,6 +5295,16 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-right: 1.75rem; } + .sm\:py-5 { + padding-top: 1.25rem; + padding-bottom: 1.25rem; + } + + .sm\:px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } + .sm\:pr-40 { padding-right: 10rem; } @@ -5356,10 +5325,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-bottom: 2rem; } - .sm\:text-heading-2 { - font-size: 56px; - } - .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; @@ -5379,6 +5344,10 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement line-height: 2.5rem; } + .sm\:text-heading-2 { + font-size: 56px; + } + .sm\:leading-10 { line-height: 2.5rem; } @@ -5628,16 +5597,16 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-right: 12%; } - .xl\:px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; - } - .xl\:px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } + .xl\:px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + .xl\:px-24 { padding-left: 6rem; padding-right: 6rem; @@ -5648,10 +5617,6 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-right: 3.5rem; } - .xl\:pt-0 { - padding-top: 0px; - } - .xl\:pr-2 { padding-right: 0.5rem; } @@ -5660,6 +5625,10 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement padding-right: 1.5rem; } + .xl\:pt-0 { + padding-top: 0px; + } + .xl\:pr-40 { padding-right: 10rem; } @@ -5669,4 +5638,4 @@ form .subelement.pagination > a:not(.prev-btn) > label, form .subelement } } -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzL2FwcC5jc3MiLCJtYXBwaW5ncyI6IkFBQUE7O0NBQUE7OztDQUFBOztBQUFBOzs7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztFQUFBO0FBQUE7O0FBQUE7Ozs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtLQUFBO0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7Ozs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBO0VBQUE7VUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOzs7Ozs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7Ozs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOztFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7OztDQUFBOztBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7Ozs7Q0FBQTs7QUFBQTs7Ozs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOztFQUFBO0FBQUE7O0FBQUE7OztDQUFBOztBQUFBOzs7O0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOzs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFBQTtBQUFBOztBQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7O0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOzs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFBQTs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTtBQUFBO0VBQUE7QUFBQTs7QUFBQTs7OztDQUFBOztBQUFBOzs7Ozs7OztFQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUNBQTtFQUFBO0FBQUE7QUFBQTs7RUFBQTtJQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FBQUE7O0VBQUE7SUFBQTtFQUFBO0FBQUE7QUFBQTs7RUFBQTtJQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FDQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FBQUE7O0VBQUE7SUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO1VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUNBQTtFQUNFO0VBQ0E7RUFDQTtFQUdBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUdBO0VBQ0E7RUFFQTtFQUNBO0VBSUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBR0E7RUFDQTtFQUNBO0VBQ0E7QUNaRjs7QUN6REE7RUFDRTtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUQ0REY7QUFDRjtBQzFEQTtFQUNFO0VBQ0E7QUQ0REY7O0FDMURBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFDQTtBRDZERjs7QUMxREU7RUFBQTtFQUFBO0VBQ0E7QUFEQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0FEK0RGO0FDNURJO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7RUFBQTtFQUFBO0VBQ0E7QUFGQTtBQUtFO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUtGO0VBQUE7RUFBQTtFQUNBO0FBREE7O0FBSUo7RUFDRTtJQUNFO0VENERGO0VDekRJO0lBQUE7SUFBQTtJQUNBO0VBREE7RUFJRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUFBO0lBQ0E7SUFDQTtJQUNBO0VEMkRKO0VDekRFO0lBQ0U7RUQyREo7QUFDRjtBQ3ZERTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FBREY7RUFFRTtFQUNBO0VBQ0E7RUFDQTtBRDBERjs7QUN2REU7RUFDRTtFQUNBO0VBQ0E7QUQwREo7O0FDdERFO0VBREY7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFBQTtJQUFBO0lBQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUQwREY7RUN0RE07SUFBQTtJQUFBO0lBQ0E7SUFDQTtFQUZBO0VBS0U7SUFBQTtJQUFBO0VBQUE7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUFBO0VEd0RSO0VDdERNO0lBQ0U7RUR3RFI7QUFDRjtBQ25ERTtFQTlDRjtJQStDSTtJQUNBO0lBQ0E7RURzREY7QUFD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TUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUdFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFFQTtFQUhGO0lBSUk7RVJxcUJKO0FBQ0Y7QVFucUJNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7RUFDQTtBQUZBO0FBTUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUo7RUFDRTtBUm1xQko7QVEvcEJJO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFNRjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUNBO0FBREE7QUFJRTtFQUFBO0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtBQUFBOztBQU1GO0VBQUE7RUFBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUdFO0VBQUE7RUFBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtBQURBO0FBRUE7RUFDRTtFQUNBO0FSNnBCTjtBUTFwQk07RUFBQTtFQUFBO0FBQUE7QUFJRjtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBO0VBQUE7QUFBQTtBQUdGO0VBQ0U7RUFDQTtBUjBwQko7O0FRcHBCRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtBQUFBOztBQUtGO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUE7RUFBQTtBQUFBOztBQUtGO0VBQUE7QUFBQTs7QUFJQTtFQUFBO0VBQUE7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OztHQUFBO0FaNmxDRjtBWXJ0Q0k7RUFBQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0FBQUE7QUFJQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFLSjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBWnd0Q047QVlydENNO0VBQUE7RUFBQTtBQUFBO0FBS0Y7RUFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBRUU7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUdBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFNRjs7O0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBRUU7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7OztFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFHQTs7O0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0E7RUFBQTtFQUFBO0FBQUE7QUFBQTs7O0VBQUE7RUFBQTtBQUFBO0FBTUY7O0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUVFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUY7RUFBQTtBQUFBO0FBRUU7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUNBO0VBQ0E7QUFGQTtBQU1GO0VBQ0U7RUFDQTtFQUNBO0Fad3RDTjtBWXB0Q0k7RUFBQTtBQUFBO0FB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akRGO0FlL2lERTtFQUNFO0FmaWpESjtBZTlpREU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7T0FBQTtBZmdqREo7QWU5aURJO0VBQ0U7QWZnakROO0FlN2lESTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FmK2lETjs7QWUxaURBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBZjZpREY7O0FlMWlEQTtFQUNFO0VBQ0E7RUFDQTtPQUFBO0FmNmlERjtBZTNpREU7RUFDRTtBZjZpREo7O0FleGlERTtFQUNFO0FmMmlESjtBZXppREk7RUFDRTtFQUNBO0VBQ0E7QWYyaUROO0FleGlESTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0FmMGlETjs7QWVyaURBO0VBQ0U7RUFDQTtBZndpREY7QWV0aURFO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBZndpREo7QWV0aURJO0VBQ0U7QWZ3aUROOztBZW5pREE7RUFDRTtFQUNBO0Fmc2lERjs7QWVuaURBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBZnNpREY7O0FlamlESTtFQUNFO0VBQ0E7QWZvaUROO0FlamlESTtFQUNFO0VBQ0E7RUFDQTtBZm1pRE47QWVoaURJO0VBQ0U7QWZraUROO0FlL2hESTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QWZpaUROO0FlL2hETTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FmaWlEUjtBZTdoREU7RUFDRTtFQUNBO0FmK2hESjs7QWV6aERJO0VBQ0U7RUFDQTtBZjRoRE47QWV2aERJO0VBQ0U7RUFDQTtBZnloRE47QWVwaERJO0VBQ0U7RUFDQTtBZnNoRE47O0FnQmhzREE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QWhCbXNERjtBZ0Jsc0RFO0VBYkY7SUFjSTtFaEJxc0RGO0FBQ0Y7QWdCbnNERTtFQUNFO0FoQnFzREo7QWdCbHNERTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0FoQm9zREo7O0FnQmpzREE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FoQm9zREY7QWdCbHNERTtFQUNFO0VBQ0E7QWhCb3NESjs7QWdCanNEQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QWhCb3NERjtBZ0Jsc0RFO0VBYkY7SUFjSTtJQUNBO0VoQnFzREY7QUFDRjtBZ0Juc0RFO0VBQ0U7RUFDQTtBaEJxc0RKO0FKdndEQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQSx1QnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSx1QnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxtQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxtQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxtQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxtQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxzQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxzQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxpQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxpQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxxQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSxxQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSwrQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQSwrQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBLHVCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHVCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLGdDcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLG9CcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSx3QnFCQUE7SXJCQUEsK0RxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLGdDcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSwrQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHFCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxxQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsb0JxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxvQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsbUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLG9CcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxzQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsc0JxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSxnQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsbUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBO0NBQUE7QXJCQUE7O0VBQUE7SUFBQSxnQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUEsNkJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLDRCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSxtQnFCQUE7SXJCQUE7R3FCQUE7Q0FBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxxQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7Q0FBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSx3QnFCQUE7SXJCQUEsd0RxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHFCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxrQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsc0JxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHFCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxtQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RhaWx3aW5kY3NzL2Jhc2UuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90YWlsd2luZGNzcy9jb21wb25lbnRzLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGFpbHdpbmRjc3MvdXRpbGl0aWVzLmNzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYWJzdHJhY3RzL192YXJpYWJsZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYXBwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2xheW91dHMvX2hlYWRlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2xheW91dHMvX2Zvb3Rlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19hY3Rpdml0eS5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19zZXR0aW5nX3BhZ2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvbGF5b3V0cy9fd2VicG9ydGFscGFnZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYmFzZS9fdHlwb2dyYXBoeS5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2J1dHRvbi5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2hhbWJ1cmdlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2lucHV0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2NvbXBvbmVudC9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvY29tcG9uZW50L19mb3Jtcy5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvY29tcG9uZW50L19vdmVybGF5LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2NvbXBvbmVudC9fc2VsZWN0Mi5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX3NpZGViYXItaWNvbi5zY3NzIiwid2VicGFjazovLy88bm8gc291cmNlPiJdLCJzb3VyY2VzQ29udGVudCI6WyJAdGFpbHdpbmQgYmFzZTtcbiIsIkB0YWlsd2luZCBjb21wb25lbnRzO1xuIiwiQHRhaWx3aW5kIHV0aWxpdGllcztcbiIsIjpyb290IHtcbiAgLS1ibGFjazogMCwgMCwgMDtcbiAgLS13aGl0ZTogMjU1LCAyNTUsIDI1NTtcbiAgLS10cmFuc3BhcmVudDogdHJhbnNwYXJlbnQ7XG5cbiAgLy8gTmV1dHJhbHNcbiAgLS1uLTA6IDI1NSwgMjU1LCAyNTU7XG4gIC0tbi0xMDogMjQxLCAyNDcsIDI0OTtcbiAgLS1uLTIwOiAyMTMsIDIyMCwgMjIyO1xuICAtLW4tMzA6IDE2NiwgMTgxLCAxODY7XG4gIC0tbi00MDogMTA0LCAxMjEsIDEyNjtcbiAgLS1uLTUwOiA0MiwgNDcsIDQ4O1xuXG4gIC8vIFByaW1hcnkgY29sb3JzXG4gIC0tdHVycXVvaXNlOiA2LCAyMTksIDIyODtcbiAgLS1ibHVlY29yYWw6IDIxLCA4MywgMTAyO1xuXG4gIC0tYmx1ZWNvcmFsLTQwOiA2MCwgMTEyLCAxMjg7XG4gIC0tYmx1ZWNvcmFsLTUwOiAyMSwgODMsIDEwMjtcblxuICAvLyBTZWNvbmRhcnkgY29sb3JzXG4gIC8vIENhbWVsXG4gIC0tY2FtZWwtMTA6IDI1MiwgMjM5LCAyMjg7XG4gIC0tY2FtZWwtMjA6IDI0OSwgMjE5LCAxOTM7XG4gIC0tY2FtZWwtMzA6IDI0OCwgMjA3LCAxNzM7XG4gIC0tY2FtZWwtNDA6IDI0NiwgMTk1LCAxNTI7XG4gIC0tY2FtZWwtNTA6IDI0NCwgMTgzLCAxMzI7XG4gIC8vIFRlYWxcbiAgLS10ZWFsLTEwOiAyMzEsIDI0MywgMjQxO1xuICAtLXRlYWwtMjA6IDIxNSwgMjM1LCAyMzI7XG4gIC0tdGVhbC0zMDogMTk1LCAyMjQsIDIyMDtcbiAgLS10ZWFsLTQwOiAxNzUsIDIxNCwgMjA5O1xuICAtLXRlYWwtNTA6IDEzNSwgMTk0LCAxODY7XG4gIC8vIFNwcmluZ1xuICAtLXNwcmluZy0xMDogMTc4LCAyMjEsIDIxMTtcbiAgLS1zcHJpbmctMjA6IDEzOSwgMjA0LCAxODk7XG4gIC0tc3ByaW5nLTMwOiAxMDAsIDE4NywgMTY3O1xuICAtLXNwcmluZy00MDogNjIsIDE3MCwgMTQ1O1xuICAtLXNwcmluZy01MDogMjMsIDE1MywgMTIzO1xuICAvLyBMYWdvb25cbiAgLS1sYWdvb24tMTA6IDIwOSwgMjM4LCAyNDA7XG4gIC0tbGFnb29uLTIwOiAxNzgsIDIyNywgMjI5O1xuICAtLWxhZ29vbi0zMDogMTM5LCAyMTMsIDIxNjtcbiAgLS1sYWdvb24tNDA6IDEwMSwgMjAwLCAyMDQ7XG4gIC0tbGFnb29uLTUwOiAyNCwgMTcyLCAxNzg7XG4gIC8vIFNhbG1vblxuICAtLXNhbG1vbi0xMDogMjU1LCAyMjcsIDIyNDtcbiAgLS1zYWxtb24tMjA6IDI1NSwgMjA4LCAyMDM7XG4gIC0tc2FsbW9uLTMwOiAyNTUsIDE4NCwgMTc3O1xuICAtLXNhbG1vbi00MDogMjU1LCAxNjEsIDE1MjtcbiAgLS1zYWxtb24tNTA6IDI1NSwgMTE0LCAxMDA7XG4gIC8vIExhdmVuZGVyXG4gIC0tbGF2ZW5kZXItMTA6IDIzNywgMjI2LCAyNTE7XG4gIC0tbGF2ZW5kZXItMjA6IDIyNSwgMjA3LCAyNDg7XG4gIC0tbGF2ZW5kZXItMzA6IDIxMCwgMTgyLCAyNDQ7XG4gIC0tbGF2ZW5kZXItNDA6IDE5NiwgMTU4LCAyNDA7XG4gIC0tbGF2ZW5kZXItNTA6IDE2NiwgMTEwLCAyMzM7XG4gIC0tbGF2ZW5kZXItNjA6IDI0NiwgMjQwLCAyNTU7XG4gIC8vIENyaW1zb25cbiAgLS1jcmltc29uLTEwOiAyNTUsIDI0OCwgMjQ3O1xuICAtLWNyaW1zb24tMjA6IDI1MCwgMjEzLCAyMTU7XG4gIC0tY3JpbXNvbi0zMDogMjQxLCAxNTUsIDE2MDtcbiAgLS1jcmltc29uLTQwOiAyMjcsIDc3LCA5MTtcbiAgLS1jcmltc29uLTUwOiAyMDksIDAsIDMwO1xuXG4gIC8vIFBhc3RlbCBjb2xvcnNcbiAgLS1lZ2dzaGVsbDogMjU1LCAyNTMsIDIzMTtcbiAgLS1taW50OiAyMzgsIDI0OSwgMjQ1O1xuICAtLXJvc2U6IDI1NSwgMjQxLCAyNDA7XG4gIC0tcGFwZXI6IDI0NiwgMjQ3LCAyNTI7XG59XG4iLCJAdGFpbHdpbmQgYmFzZTtcbkB0YWlsd2luZCBjb21wb25lbnRzO1xuQHRhaWx3aW5kIHV0aWxpdGllcztcbjpyb290IHtcbiAgLS1ibGFjazogMCwgMCwgMDtcbiAgLS13aGl0ZTogMjU1LCAyNTUsIDI1NTtcbiAgLS10cmFuc3BhcmVudDogdHJhbnNwYXJlbnQ7XG4gIC0tbi0wOiAyNTUsIDI1NSwgMjU1O1xuICAtLW4tMTA6IDI0MSwgMjQ3LCAyNDk7XG4gIC0tbi0yMDogMjEzLCAyMjAsIDIyMjtcbiAgLS1uLTMwOiAxNjYsIDE4MSwgMTg2O1xuICAtLW4tNDA6IDEwNCwgMTIxLCAxMjY7XG4gIC0tbi01MDogNDIsIDQ3LCA0ODtcbiAgLS10dXJxdW9pc2U6IDYsIDIxOSwgMjI4O1xuICAtLWJsdWVjb3JhbDogMjEsIDgzLCAxMDI7XG4gIC0tYmx1ZWNvcmFsLTQwOiA2MCwgMTEyLCAxMjg7XG4gIC0tYmx1ZWNvcmFsLTUwOiAyMSwgODMsIDEwMjtcbiAgLS1jYW1lbC0xMDogMjUyLCAyMzksIDIyODtcbiAgLS1jYW1lbC0yMDogMjQ5LCAyMTksIDE5MztcbiAgLS1jYW1lbC0zMDogMjQ4LCAyMDcsIDE3MztcbiAgLS1jYW1lbC00MDogMjQ2LCAxOTUsIDE1MjtcbiAgLS1jYW1lbC01MDogMjQ0LCAxODMsIDEzMjtcbiAgLS10ZWFsLTEwOiAyMzEsIDI0MywgMjQxO1xuICAtLXRlYWwtMjA6IDIxNSwgMjM1LCAyMzI7XG4gIC0tdGVhbC0zMDogMTk1LCAyMjQsIDIyMDtcbiAgLS10ZWFsLTQwOiAxNzUsIDIxNCwgMjA5O1xuICAtLXRlYWwtNTA6IDEzNSwgMTk0LCAxODY7XG4gIC0tc3ByaW5nLTEwOiAxNzgsIDIyMSwgMjExO1xuICAtLXNwcmluZy0yMDogMTM5LCAyMDQsIDE4OTtcbiAgLS1zcHJpbmctMzA6IDEwMCwgMTg3LCAxNjc7XG4gIC0tc3ByaW5nLTQwOiA2MiwgMTcwLCAxNDU7XG4gIC0tc3ByaW5nLTUwOiAyMywgMTUzLCAxMjM7XG4gIC0tbGFnb29uLTEwOiAyMDksIDIzOCwgMjQwO1xuICAtLWxhZ29vbi0yMDogMTc4LCAyMjcsIDIyOTtcbiAgLS1sYWdvb24tMzA6IDEzOSwgMjEzLCAyMTY7XG4gIC0tbGFnb29uLTQwOiAxMDEsIDIwMCwgMjA0O1xuICAtLWxhZ29vbi01MDogMjQsIDE3MiwgMTc4O1xuICAtLXNhbG1vbi0xMDogMjU1LCAyMjcsIDIyNDtcbiAgLS1zYWxtb24tMjA6IDI1NSwgMjA4LCAyMDM7XG4gIC0tc2FsbW9uLTMwOiAyNTUsIDE4NCwgMTc3O1xuICAtLXNhbG1vbi00MDogMjU1LCAxNjEsIDE1MjtcbiAgLS1zYWxtb24tNTA6IDI1NSwgMTE0LCAxMDA7XG4gIC0tbGF2ZW5kZXItMTA6IDIzNywgMjI2LCAyNTE7XG4gIC0tbGF2ZW5kZXItMjA6IDIyNSwgMjA3LCAyNDg7XG4gIC0tbGF2ZW5kZXItMzA6IDIxMCwgMTgyLCAyNDQ7XG4gIC0tbGF2ZW5kZXItNDA6IDE5NiwgMTU4LCAyNDA7XG4gIC0tbGF2ZW5kZXItNTA6IDE2NiwgMTEwLCAyMzM7XG4gIC0tbGF2ZW5kZXItNjA6IDI0NiwgMjQwLCAyNTU7XG4gIC0tY3JpbXNvbi0xMDogMjU1LCAyNDgsIDI0NztcbiAgLS1jcmltc29uLTIwOiAyNTAsIDIxMywgMjE1O1xuICAtLWNyaW1zb24tMzA6IDI0MSwgMTU1LCAxNjA7XG4gIC0tY3JpbXNvbi00MDogMjI3LCA3NywgOTE7XG4gIC0tY3JpbXNvbi01MDogMjA5LCAwLCAzMDtcbiAgLS1lZ2dzaGVsbDogMjU1LCAyNTMsIDIzMTtcbiAgLS1taW50OiAyMzgsIDI0OSwgMjQ1O1xuICAtLXJvc2U6IDI1NSwgMjQxLCAyNDA7XG4gIC0tcGFwZXI6IDI0NiwgMjQ3LCAyNTI7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC53cmFwcGVyOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDI5MnB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWFnZXMvbWFycXVlLXdoaXRlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTYuNSU7XG4gICAgYmFja2dyb3VuZC1zaXplOiA3MCU7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbn1cbi5oZWFkZXIge1xuICBtYXgtd2lkdGg6IDExNjZweDtcbiAgbWFyZ2luOiBhdXRvO1xufVxuXG4ubmF2X19hY3RpdmU6OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDRweDtcbiAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmxpbmtzX19hY3RpdmUge1xuICBAYXBwbHkgdGV4dC1ibGFjaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5uYXZfX2xpbmtzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAyMHB4IDhweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuLm5hdl9fbGlua3MgYTpob3ZlciB7XG4gIEBhcHBseSB0ZXh0LW4tNTA7XG59XG4ubmF2X19saW5rcyAucmVhZF9fbW9yZSB7XG4gIEBhcHBseSByb3VuZGVkLXNtIGJnLWJsdWVjb3JhbCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgcGFkZGluZzogOHB4IDE4cHg7XG59XG4ubmF2X19saW5rcyAucmVhZF9fbW9yZTpob3ZlciB7XG4gIEBhcHBseSBiZy1uLTUwIHRleHQtd2hpdGU7XG59XG4ubmF2X19saW5rcyBhIHtcbiAgQGFwcGx5IHRleHQtd2hpdGU7XG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcbiAgLm5hdl9fbGlua3Mge1xuICAgIHBhZGRpbmc6IDBweCA4cHggMjBweDtcbiAgfVxuICAubmF2X19saW5rcyBhIHtcbiAgICBAYXBwbHkgdGV4dC1uLTUwO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgfVxuICAubmF2X19saW5rczo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCwgMSk7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIC5uYXZfX2xpbmtzOmhvdmVyOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgfVxufVxuLmRyb3Bkb3duX19jb250ZW50IHtcbiAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSByaWdodC0wIHRvcC03IGhpZGRlbiBoLTU2IGJnLXdoaXRlIHB5LTcgcHgtOCBvcGFjaXR5LTAgZHVyYXRpb24tMzAwIHhsOmJsb2NrO1xuICB3aWR0aDogNDI0cHg7XG4gIGhlaWdodDogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4uZHJvcGRvd246aG92ZXIgLmRyb3Bkb3duX19jb250ZW50IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpIHtcbiAgLm5hdl9fbGlzdCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTEwO1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCA4cHggIzAwMCk7XG4gIH1cbiAgLm5hdl9fbGlzdCAuYWN0aXZlIGEge1xuICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgfVxuICAubmF2X19saXN0IC5hY3RpdmUgYTpob3ZlciB7XG4gICAgQGFwcGx5IHRleHQtd2hpdGU7XG4gIH1cbiAgLm5hdl9fbGlzdCAuYWN0aXZlIGE6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAxKTtcbiAgICB0cmFuc2l0aW9uOiAwLjNzO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgfVxuICAubmF2X19saXN0IC5hY3RpdmUgYTpob3Zlcjo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gIC5uYXZfX2xpc3Qge1xuICAgIHdpZHRoOiAyNTBweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4jbWVudS1vdmVybGF5IHtcbiAgQGFwcGx5IHhsOmhpZGRlbjtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gICNhY3Rpdml0eS1tZW51LW92ZXJsYXkge1xuICAgIEBhcHBseSBoaWRkZW47XG4gIH1cbn1cblxuLm1lbnUtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxMDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmFjdGl2aXR5LW5hdi1tZW51IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtd2hpdGU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTAwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCAwcHggOHB4ICMwMDApO1xuICB9XG4gIC5hY3Rpdml0eS1uYXYtbWVudSAuYWN0aXZpdHktbmF2LWxpc3Qge1xuICAgIEBhcHBseSBtdC01NiBmbGV4IGZsZXgtY29sIHNwYWNlLXktOTtcbiAgfVxufVxuXG4ubmF2LWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG59XG5cbi5uYXZfX3BvaW50ZXIsIC5uYXZfX3BvaW50ZXItaG92ZXIge1xuICBAYXBwbHkgcmVsYXRpdmU7XG59XG4ubmF2X19wb2ludGVyOmFmdGVyLCAubmF2X19wb2ludGVyLWhvdmVyOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCBoLTEgdy1mdWxsIHNjYWxlLXgtMCBzY2FsZS15LTEwMCByb3VuZGVkLXNtIGJnLXR1cnF1b2lzZSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDA7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLm5hdl9fcG9pbnRlcjphZnRlciwgLm5hdl9fcG9pbnRlci1ob3ZlcjphZnRlciB7XG4gICAgQGFwcGx5IC1ib3R0b20tMztcbiAgfVxufVxuLm5hdl9fcG9pbnRlcjpob3ZlcjphZnRlciwgLm5hdl9fcG9pbnRlci1ob3Zlcjpob3ZlcjphZnRlciB7XG4gIEBhcHBseSBzY2FsZS14LTEwMDtcbn1cbi5uYXZfX3BvaW50ZXI6YWZ0ZXIge1xuICBAYXBwbHkgc2NhbGUteC0xMDA7XG59XG5cbi5hY3Rpdml0eS1uYXYge1xuICBAYXBwbHkgZmxleCBncm93O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gIC5hY3Rpdml0eS1uYXYge1xuICAgIEBhcHBseSBqdXN0aWZ5LWVuZDtcbiAgfVxufVxuXG4ubWFpbl9fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMTY2cHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIHRyYW5zcGFyZW50KTtcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIgYSB7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIgYTpob3ZlciB7XG4gIEBhcHBseSBib3JkZXItYi0yIGJvcmRlci10dXJxdW9pc2U7XG59XG4ubWFpbiAucmlnaHQge1xuICB3aWR0aDogOTMlO1xuICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5tYWluIC5yaWdodF9fY29udGFpbmVyIGgyIHtcbiAgbGluZS1oZWlnaHQ6IDYwcHg7XG59XG4ubWFpbiAucmlnaHRfX2NvbnRlbnQge1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWxnIGJnLXdoaXRlIHB5LTYgcHgtNTtcbn1cbi5tYWluIC5yaWdodF9fY29udGVudCAucmlnaHRfX2ljb24ge1xuICBAYXBwbHkgdGV4dC1sYWdvb24tNTA7XG4gIG1hcmdpbi1ib3R0b206IC04cHg7XG59XG4ubWFpbiAucmlnaHRfX2NvbnRlbnQgLnJpZ2h0X19hcnJvdyB7XG4gIEBhcHBseSB0ZXh0LXdoaXRlO1xufVxuLm1haW4gLnJpZ2h0X19jb250ZW50OmhvdmVyIHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItdHVycXVvaXNlIGJnLXR1cnF1b2lzZSBiZy1vcGFjaXR5LTEwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDI1cHggMHB4IHRyYW5zcGFyZW50O1xufVxuLm1haW4gLnJpZ2h0X19jb250ZW50OmhvdmVyIC5yaWdodF9faWNvbiBzdmcge1xuICBAYXBwbHkgZmlsbC1sYWdvb24tNTAgdGV4dC13aGl0ZTtcbn1cbi5tYWluIC5yaWdodF9fY29udGVudDpob3ZlciAucmlnaHRfX2Fycm93IHtcbiAgQGFwcGx5IGZpbGwtd2hpdGUgdGV4dC10dXJxdW9pc2U7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMzY2cHgpIHtcbiAgLm1haW4gLmpvaW4tbm93IHtcbiAgICBAYXBwbHkgcHgtMjA7XG4gIH1cbiAgLm1haW4gLmpvaW4tbm93IC5yaWdodF9fY29udGVudCB7XG4gICAgd2lkdGg6IDQyM3B4O1xuICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIGlucHV0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubGVmdCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcbiAgfVxuICAubGVmdF9fY29udGFpbmVyIHtcbiAgICB3aWR0aDogMzg2cHg7XG4gIH1cbiAgLnJpZ2h0IHtcbiAgICBoZWlnaHQ6IDY0OXB4O1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucmlnaHQge1xuICAgIG1hcmdpbi10b3A6IC0yNjVweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgLnJpZ2h0X19pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5kZXRhaWxzIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiA4cHg7XG4gIGhlaWdodDogOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYmctbi0yMCBob3ZlcjpiZy1uLTMwO1xufVxuXG5tYWluIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDFmciBhdXRvO1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDY1cHgpO1xufVxuXG4uYWN0aXZpdGllc19fc2lkZWJhciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gIC5hY3Rpdml0aWVzX19zaWRlYmFyIHtcbiAgICB3aWR0aDogMjIwcHggIWltcG9ydGFudDtcbiAgfVxufVxuXG5ib2R5LmRpc2FibGUtc2Nyb2xsIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAxMHB4O1xufVxuXG5ib2R5IHtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG59XG5cbmJvZHkubm8tbmF2IHtcbiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50O1xufVxuXG5odG1sIHtcbiAgc2Nyb2xsLXBhZGRpbmctdG9wOiA2MHB4OyAvKiBoZWlnaHQgb2Ygc3RpY2t5IGhlYWRlciAqL1xufVxuXG4uZm9vdGVyX19jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDExNjZweDtcbiAgbWFyZ2luOiBhdXRvO1xufVxuLmZvb3Rlcl9fY29udGFpbmVyIC5mb290ZXJfX2xpbmtzIGEge1xuICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1uLTIwO1xufVxuLmZvb3Rlcl9fY29udGFpbmVyIC5mb290ZXJfX2xpbmtzIGE6aG92ZXIge1xuICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHVycXVvaXNlO1xufVxuXG4uZWxsaXBzaXMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4uZWxsaXBzaXNfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG4uZWxsaXBzaXNfX3RpdGxlLS1ob3ZlciB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgbGVmdC0wIHRvcC1mdWxsIHotMjAgbWF4LXctbWQgc3BhY2UteS0xLjUgcm91bmRlZCBiZy1lZ2dzaGVsbCBwLTQgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1ub3JtYWwgdGV4dC1uLTQwIG9wYWNpdHktMCBkdXJhdGlvbi0yMDA7XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi5lbGxpcHNpczpob3ZlciAuZWxsaXBzaXNfX3RpdGxlLS1ob3Zlcixcbi5lbGxpcHNpc19fdGl0bGU6aG92ZXIgLmVsbGlwc2lzX190aXRsZS0taG92ZXIsXG4uYnJlYWRjcnVtYl9fdGl0bGU6aG92ZXIgLmVsbGlwc2lzX190aXRsZS0taG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNXB4KTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cblxuLmJyZWFkY3J1bWJfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMwcHgpO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgLmFkZF9pbmRpY2F0b3Ige1xuICAgIG1heC13aWR0aDogNDAwcHg7XG4gIH1cbn1cblxuLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IC5lZGl0LWJ1dHRvbixcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdiAuZGVsZXRlLWJ1dHRvbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IC5lZGl0LWJ1dHRvbixcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdiAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmVkaXQtYnV0dG9uIHtcbiAgb3JkZXI6IDI7XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmRlbGV0ZS1idXR0b24ge1xuICBvcmRlcjogMTtcbn1cbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdjpob3ZlciAuZWRpdC1idXR0b24sIC5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdjpob3ZlciAuZGVsZXRlLWJ1dHRvbiB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmVsZW1lbnRzLXN2ZyB7XG4gIEBhcHBseSBtci0xLjUgdGV4dC14bCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLmRlc2NyaXB0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNTAwcHg7XG59XG5cbi5lbGVtZW50cy1kZXRhaWwge1xuICBAYXBwbHkgZmxleCBmbGV4LWNvbCB0ZXh0LXhzIHRleHQtbi01MDtcbn1cbi5lbGVtZW50cy1kZXRhaWwgKiB7XG4gIEBhcHBseSBsZWFkaW5nLTU7XG59XG4uZWxlbWVudHMtZGV0YWlsIHRkOm50aC1jaGlsZCgxKSB7XG4gIEBhcHBseSB0ZXh0LW4tNDA7XG4gIHdpZHRoOiAxMDBweDtcbn1cbi5lbGVtZW50cy1kZXRhaWwud2lkZXI6bm90KC5zbWFsbCkgdGQ6bnRoLWNoaWxkKDEpIHtcbiAgQGFwcGx5IHRleHQtbi00MDtcbiAgd2lkdGg6IDE5MHB4O1xufVxuLmVsZW1lbnRzLWRldGFpbCB0ZDpudGgtY2hpbGQoMikge1xuICBAYXBwbHkgZmxleCBmbGV4LWNvbCBwbC0yIHRleHQteHMgdGV4dC1uLTUwO1xufVxuLmVsZW1lbnRzLWRldGFpbCAubXVsdGlsaW5lIHtcbiAgQGFwcGx5IGl0ZW1zLXN0YXJ0O1xufVxuLmVsZW1lbnRzLWRldGFpbCB0ZCB7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4uZWxlbWVudHMtZGV0YWlsIHRhYmxlID4gdGJvZHkgPiB0cjpub3QoOmxhc3QtY2hpbGQpID4gdGQge1xuICBAYXBwbHkgcGItMztcbn1cblxuLnZhbHVlIHtcbiAgQGFwcGx5IGZsZXggc3BhY2UteC0xIHRleHQtbi01MDtcbn1cblxuLmNhdGVnb3J5IHtcbiAgQGFwcGx5IG1iLTIgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1uLTUwO1xufVxuXG4ubGFuZ3VhZ2Uge1xuICBAYXBwbHkgdy1bMzAwcHhdIHRleHQteHMgaXRhbGljIHRleHQtbi0zMCAgc206dy1hdXRvO1xufVxuXG4uZGVzY3JpcHRpb24tY29udGVudCB7XG4gIEBhcHBseSB3LVszMDBweF0gc206dy1hdXRvO1xufVxuXG4udGl0bGUtYm9yZGVyOjphZnRlciB7XG4gIHdpZHRoOiA5NTBweDtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIHRvcC0yIGxlZnQtNCBoLXB4IGJnLW4tMzA7XG59XG5cbi5lbGVtZW50cy10aXRsZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgaC1weCBncm93IGJnLW4tMzA7XG59XG5cbi50b3Age1xuICBtYXJnaW4tdG9wOiAxcHg7XG59XG5cbi5tb2RhbCBwOm5vdCg6bGFzdC1jaGlsZCkge1xuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xufVxuXG4uc2VjdGlvbi13cmFwcGVyIHtcbiAgQGFwcGx5IG14LTMgYmctcGFwZXIgc206bXgtMTA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIHtcbiAgbWF4LXdpZHRoOiAxMDAwcHg7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmc6IDE2cHggMHB4IDI0cHg7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIge1xuICBAYXBwbHkgcmVsYXRpdmUgcm91bmRlZC1sZyBiZy13aGl0ZSBwLTcgbWQ6cHktMTQgbWQ6cHgtMjA7XG4gIG1heC1oZWlnaHQ6IDY1dmg7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NDBweCkge1xuICAuc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIge1xuICAgIEBhcHBseSBweC0zO1xuICB9XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgLnZ1ZV9fc2VsZWN0IHtcbiAgbWFyZ2luOiA4cHggMHB4O1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZ19fY29udGFpbmVyIC5yZWdpc3RyeV9faW5mbyB7XG4gIEBhcHBseSBteS00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1iLW4tMjA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgcCB7XG4gIEBhcHBseSB0ZXh0LXhzIGxlYWRpbmctNSB0ZXh0LW4tNDA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgLnRleHQge1xuICBAYXBwbHkgbWItOCB0ZXh0LXNtO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZ19fY29udGFpbmVyIGxhYmVsIHtcbiAgQGFwcGx5IHRleHQteHMgdGV4dC1uLTUwO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXIge1xuICBAYXBwbHkgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLW4tMzAgcC00IHNtOnAtNjtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIge1xuICBAYXBwbHkgZ3JpZCBnYXAtMyBzbTpnYXAtNiBsZzpncmlkLWNvbHMtMjtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIgLnRhZ19fY29ycmVjdCB7XG4gIEBhcHBseSBhYnNvbHV0ZSByaWdodC0yIHRvcC0xMCBmbGV4IGgtNSBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1zcHJpbmctNDAgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICB3aWR0aDogNTBweDtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIgLnRhZ19faW5jb3JyZWN0IHtcbiAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTIgdG9wLTEwIGZsZXggaC01IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXNhbG1vbi01MCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gIHdpZHRoOiA2MXB4O1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXIgLnZlcmlmeS1idG4ge1xuICB3aWR0aDogMTIwcHg7XG4gIG1hcmdpbi10b3A6IDE0cHg7XG4gIEBhcHBseSBmbGV4IGgtMTAganVzdGlmeS1jZW50ZXI7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIC5yZWdpc3Rlcl9faW5wdXQge1xuICBAYXBwbHkgbXQtMiB3LWZ1bGwgYm9yZGVyIGJvcmRlci1uLTMwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gIHBhZGRpbmc6IDEzcHggMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQwcHgpIHtcbiAgLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXJfX2lucHV0IHtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICB9XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIC5yZWdpc3Rlcl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAuZXJyb3JfX2lucHV0IHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbn1cblxuLnNhdmUtYnRuIHtcbiAgQGFwcGx5IHB4LTQ7XG59XG5cbi5idG5fX2FjdGl2ZSB7XG4gIEBhcHBseSBmb250LWJvbGQgdGV4dC13aGl0ZTtcbn1cblxuLnNtb290aCB7XG4gIGFuaW1hdGlvbjogZmFkZUluQW5pbWF0aW9uIGVhc2UgMC4zcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5BbmltYXRpb24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5ib2R5IHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBAYXBwbHkgbWluLWgtc2NyZWVuIGJnLXBhcGVyO1xufVxuXG5hIHtcbiAgY29sb3I6IHJnYih2YXIoLS1ibHVlY29yYWwpKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cbmE6aG92ZXIge1xuICBjb2xvcjogcmdiKHZhcigtLXNwcmluZy01MCkpO1xufVxuXG4ubGVmdF9fdGl0bGUge1xuICBmb250LXNpemU6IDI3cHg7XG4gIHRleHQtc2hhZG93OiA0cHggNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5sZWZ0X190aXRsZSB7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICB9XG59XG5cbmgyIHtcbiAgQGFwcGx5IHRleHQtaGVhZGluZy01IGZvbnQtYm9sZCB0ZXh0LW4tNTAgbWQ6dGV4dC1oZWFkaW5nLTM7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xuICBoMiB7XG4gICAgQGFwcGx5IHRleHQtaGVhZGluZy00O1xuICB9XG59XG5cbmg0IHtcbiAgQGFwcGx5IHRleHQtaGVhZGluZy00IGxlYWRpbmctbm9ybWFsO1xufVxuXG4uYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgb3V0bGluZTogbm9uZTtcbiAgQGFwcGx5IGJnLXR1cnF1b2lzZSB0ZXh0LW4tNTA7XG59XG4uYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbiAgQGFwcGx5IHRleHQtd2hpdGU7XG59XG4uYnRuOmhvdmVyIHN2ZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xufVxuXG4uYnRuLWJhY2sge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IDAuM3M7XG4gIEBhcHBseSB3LTI0IHRleHQtYmx1ZWNvcmFsO1xufVxuLmJ0bi1iYWNrIHN2ZyB7XG4gIHRyYW5zaXRpb246IDAuM3M7XG59XG4uYnRuLWJhY2s6aG92ZXIgc3ZnIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xufVxuXG4uYnRuLW5leHQge1xuICBAYXBwbHkgdy0zNiBweS0yLjUgdGV4dC1uLTUwIHNtOnctNDA7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAuYnRuLW5leHQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBwYWRkaW5nOiAxM3B4IDI0cHg7XG4gIH1cbn1cbi5idG4tbmV4dCBzdmcge1xuICBtYXJnaW4tbGVmdDogMTNweDtcbiAgdHJhbnNpdGlvbjogMC4ycztcbn1cblxuLmdldC1zdGFydGVkLWJ0biB7XG4gIHdpZHRoOiAxODVweDtcbn1cblxuLnJlc2V0LWJ0biB7XG4gIEBhcHBseSBtdC02IGZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXItbm9uZSBiZy10dXJxdW9pc2UgdGV4dC1zbSBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtbi01MCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMjAwIGhvdmVyOmJnLWJsdWVjb3JhbCBob3Zlcjp0ZXh0LXdoaXRlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMTZweCA5NHB4O1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAucmVzZXQtYnRuIHtcbiAgICBwYWRkaW5nOiAxOHB4IDk0cHg7XG4gIH1cbn1cbnN2ZyB7XG4gIGhlaWdodDogMWVtO1xufVxuXG4udnJwX193cmFwcGVyIHAge1xuICBAYXBwbHkgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbn1cbi52cnBfX3dyYXBwZXIgc3ZnIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uYnV0dG9uLFxuYnV0dG9uIHtcbiAgQGFwcGx5IGZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHRleHQteHMgbGVhZGluZy1ub3JtYWwgdHJhY2tpbmctdGlnaHQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG59XG5cbi50b29sdGlwLWJ0biB7XG4gIEBhcHBseSByZWxhdGl2ZSB0ZXh0LW4tMzA7XG59XG4udG9vbHRpcC1idG4gYnV0dG9uIHtcbiAgQGFwcGx5IHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItc29saWQgYm9yZGVyLW4tMzAgcHktMS41IHB4LTIuNTtcbn1cbi50b29sdGlwLWJ0biBzdmcge1xuICBAYXBwbHkgbXItMSB0ZXh0LXhzO1xufVxuLnRvb2x0aXAtYnRuX19jb250ZW50IHtcbiAgQGFwcGx5IGFic29sdXRlIHRvcC1mdWxsIGxlZnQtMCBoaWRkZW4gdy1bMzUycHhdO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC50b29sdGlwLWJ0bl9fY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yNSUpO1xuICB9XG59XG4udG9vbHRpcC1idG5fX2NvbnRlbnQgLmNvbnRlbnQge1xuICBAYXBwbHkgbXQtNiByb3VuZGVkIGJnLWVnZ3NoZWxsIHRleHQtbi01MDtcbiAgcGFkZGluZzogMTZweCAzM3B4IDE2cHggMTZweDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi50b29sdGlwLWJ0bl9fY29udGVudCBwIHtcbiAgQGFwcGx5IG1iLTEuNSB0ZXh0LXhzIGxlYWRpbmctbm9ybWFsO1xufVxuLnRvb2x0aXAtYnRuOmhvdmVyIC50b29sdGlwLWJ0bl9fY29udGVudCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnRvb2x0aXAtYnRuOmhvdmVyIGJ1dHRvbiB7XG4gIEBhcHBseSBib3JkZXItc3ByaW5nLTUwIHRleHQtc3ByaW5nLTUwO1xufVxuXG4ucHJpbWFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgcm91bmRlZCBiZy1ibHVlY29yYWwgcC0zIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC13aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5wcmltYXJ5LWJ0bi5zcGFjZSB7XG4gIEBhcHBseSBweC02O1xufVxuLnByaW1hcnktYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLW4tNTAgdGV4dC13aGl0ZTtcbn1cbi5wcmltYXJ5LWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlO1xufVxuXG4uc2Vjb25kYXJ5LWJ0biB7XG4gIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbn1cbi5zZWNvbmRhcnktYnRuLS10b3VjaCB7XG4gIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5zZWNvbmRhcnktYnRuLS10b3VjaCAuZHJvcGRvd25fX2Fycm93IHtcbiAgZm9udC1zaXplOiA2cHg7XG4gIHRyYW5zaXRpb246IDAuMnM7XG59XG4uc2Vjb25kYXJ5LWJ0bi0tdG91Y2ggc3ZnIHtcbiAgQGFwcGx5IHRleHQtYmFzZTtcbn1cbi5zZWNvbmRhcnktYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xufVxuLnNlY29uZGFyeS1idG4gc3ZnIHtcbiAgQGFwcGx5IHRleHQtYmFzZTtcbn1cbi5zZWNvbmRhcnktYnRuIC5kcm9wZG93bl9fYXJyb3cge1xuICBmb250LXNpemU6IDZweDtcbiAgdHJhbnNpdGlvbjogMC4ycztcbn1cblxuLnByaW1hcnktb3V0bGluZS1idG4ge1xuICBAYXBwbHkganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1zcHJpbmctNTAgcHgtMy41IHRleHQtc20gbGVhZGluZy1yZWxheGVkIHRleHQtc3ByaW5nLTUwO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xufVxuLnByaW1hcnktb3V0bGluZS1idG46aG92ZXIge1xuICBAYXBwbHkgYmctc3ByaW5nLTUwIHRleHQtd2hpdGU7XG59XG4ucHJpbWFyeS1vdXRsaW5lLWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlO1xufVxuXG4uZ2hvc3QtYnRuIHtcbiAgQGFwcGx5IHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LW4tNDA7XG4gIHRyYW5zaXRpb246IDAuNHM7XG59XG4uZ2hvc3QtYnRuOmhvdmVyIHtcbiAgQGFwcGx5IHRleHQtYmx1ZWNvcmFsO1xufVxuXG4udGFiLWJ0bi1hbmNob3Ige1xuICBAYXBwbHkgY3Vyc29yLWRlZmF1bHQ7XG59XG5cbi50YWItYnRuIHtcbiAgQGFwcGx5IGgtOSByb3VuZGVkIGJvcmRlciBib3JkZXItbi0yMCBiZy13aGl0ZSBwLTIgdGV4dC14cyB0ZXh0LW4tNDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi50YWItYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLmFjdGl2ZV9fdGFiIHtcbiAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLnBhbmVsLWJ0biB7XG4gIEBhcHBseSBoLTEwIHNwYWNlLXgtMSByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBiZy1lZ2dzaGVsbCBweS0zIHB4LTI7XG4gIHdpZHRoOiA0M3B4O1xufVxuLnBhbmVsLWJ0bjpob3ZlciB7XG4gIEBhcHBseSBiZy1ibHVlY29yYWwgdGV4dC13aGl0ZTtcbn1cbi5wYW5lbC1idG4gLmRyb3Bkb3duX19hcnJvdyB7XG4gIGZvbnQtc2l6ZTogNnB4O1xuICB0cmFuc2l0aW9uOiAwLjJzO1xufVxuXG4uaGFtYnVyZ2VyIHtcbiAgQGFwcGx5IHJlbGF0aXZlIHotYXV0byBmbGV4IGgtMTEgdy0xMSBjdXJzb3ItcG9pbnRlciBkdXJhdGlvbi0zMDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkO1xuICB6LWluZGV4OiAxMjA7XG59XG4uaGFtYnVyZ2VyLmFjdGl2ZSBzcGFuIHtcbiAgQGFwcGx5IGJnLW4tMTA7XG59XG4uaGFtYnVyZ2VyIHNwYW4ge1xuICBAYXBwbHkgcG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBoLTEgdy0xMCByb3VuZGVkLWxnIGR1cmF0aW9uLTMwMDtcbn1cbi5oYW1idXJnZXIgc3BhbjpudGgtY2hpbGQoMSkge1xuICBib3R0b206IDE4cHg7XG4gIGxlZnQ6IDJweDtcbiAgd2lkdGg6IDMwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XG59XG4uaGFtYnVyZ2VyLmFjdGl2ZSBzcGFuOm50aC1jaGlsZCgxKSB7XG4gIHdpZHRoOiA0MHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWigwKTtcbn1cbi5oYW1idXJnZXIuYWN0aXZlIHNwYW46bnRoLWNoaWxkKDIpIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDYwcHgpO1xufVxuLmhhbWJ1cmdlci5hY3RpdmUgc3BhbjpudGgtY2hpbGQoMykge1xuICB3aWR0aDogNDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCkgcm90YXRlKDMxNWRlZyk7XG59XG4uaGFtYnVyZ2VyIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgdG9wOiAxOHB4O1xuICBsZWZ0OiAycHg7XG4gIHdpZHRoOiAyMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTVweCk7XG59XG5cbi5oYW1idXJnZXItbWVudSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmhhbWJ1cmdlci1tZW51IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG4uaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICB0cmFuc2xhdGU6IC00OTAlIC05MCU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAuaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICAgIHRyYW5zbGF0ZTogLTM1MCUgLTE0MCU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gIC5ob21lLWJ1cmdlci1tZW51LmFjdGl2ZSB7XG4gICAgdHJhbnNsYXRlOiAtMzgwJSAtOTAlO1xuICB9XG59XG5cbi5pbnB1dCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDE0cHggMHB4IDE0cHggNTVweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgaC0xNCBib3JkZXIgYm9yZGVyLW4tMzAgc206aC0xNjtcbn1cbi5pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgQGFwcGx5IGZvbnQtbm9ybWFsIHRleHQtbi00MDtcbn1cbi5pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmlucHV0IHtcbiAgICBwYWRkaW5nOiAyMHB4IDBweCAyMHB4IDU1cHg7XG4gIH1cbn1cblxuLmVycm9yIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1jcmltc29uLTUwIHNtOnRleHQtYmFzZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG4uaGFzX2Vycm9yIC5mb3JtX19pbnB1dCB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLWNyaW1zb24tNTA7XG59XG5cbnRleHRhcmVhLmZvcm1fX2lucHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi50ZXh0LWFyZWEge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogNjBweDtcbiAgcmVzaXplOiBub25lO1xufVxuXG4uZm9ybV9faW5wdXQge1xuICBAYXBwbHkgbWItMiBib3gtYm9yZGVyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCB0ZXh0LWJsdWVjb3JhbCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xuICBwYWRkaW5nOiAxMHB4IDAgMTBweCAxNnB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmZvcm1fX2lucHV0IHtcbiAgICBwYWRkaW5nOiAxM3B4IDAgMTNweCAxNnB4O1xuICB9XG59XG4uZm9ybV9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTQwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5mb3JtX19pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5mb3JtX19pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuXG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQge1xuICBAYXBwbHkgYmctbi0yMCB0ZXh0LW4tNTA7XG59XG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQuaXMtcG9pbnRlZCB7XG4gIEBhcHBseSBiZy1uLTIwIHRleHQtbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LmlzLWFjdGl2ZSB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIEBhcHBseSB3LVszMTBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHByLTMgdGV4dC1zbSB0ZXh0LW4tNDAgZHVyYXRpb24tMzAwO1xufVxuLmlucHV0X19maWVsZCAubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXI6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTAgdG9wLTMgaC02IHctNyBiZy13aGl0ZTtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LmlzLW9wZW4gLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LWRyb3Bkb3duIHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LWNhcmV0IHtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCIvaW1hZ2VzL2Ryb3Bkb3duLWFycm93LnN2Z1wiKTtcbiAgbWFzay1pbWFnZTogdXJsKFwiL2ltYWdlcy9kcm9wZG93bi1hcnJvdy5zdmdcIik7XG59XG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1zZWFyY2gge1xuICBAYXBwbHkgY3Vyc29yLXBvaW50ZXIgYm9yZGVyIGJvcmRlci1uLTMwIHB5LTIuNTtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LXNlYXJjaDpmb2N1cyB7XG4gIEBhcHBseSBiZy1uLTEwO1xufVxuLmlucHV0X19maWVsZCAubXVsdGlzZWxlY3Qtc2VhcmNoOmZvY3VzICsgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyOjphZnRlciB7XG4gIEBhcHBseSBiZy1uLTEwO1xufVxuLmlucHV0X19maWVsZCAudnVlX19zZWxlY3Qge1xuICBAYXBwbHkgbWItMiBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1zbSBsZWFkaW5nLTYgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbiAgcGFkZGluZzogMTNweCAwcHggMTNweCA1NXB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmlucHV0X19maWVsZCAudnVlX19zZWxlY3Qge1xuICAgIHBhZGRpbmc6IDE2cHggMHB4IDE2cHggNTVweDtcbiAgfVxufVxuXG4uZXJyb3JfaW5wdXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZDEwMDFlO1xufVxuXG4ucGFuZWxfX2lucHV0IHtcbiAgQGFwcGx5IGJveC1ib3JkZXIgaC0xMCB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgYmctcGFwZXIgcHktMi41IHBsLTcgcHItMyBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuLnBhbmVsX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LW4tMzAgZHVyYXRpb24tMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5wYW5lbF9faW5wdXQ6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi00MDtcbn1cblxuLnNlYXJjaCB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5zZWFyY2hfX2lucHV0IHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItbi0zMCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmU7XG4gIHBhZGRpbmc6IDEwcHggNDJweCAxMHB4IDM0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4uc2VhcmNoIHN2ZyB7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTMgdG9wLTMgdGV4dC1iYXNlIHRleHQtbi0zMDtcbn1cblxuLnJlcXVpcmVkLWljb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgdG9wLTAuNSB0ZXh0LWJhc2UgbGVhZGluZy1ub25lIHRleHQtY3JpbXNvbi01MDtcbn1cblxuLmlhdGktbGlzdC10YWJsZSB7XG4gIEBhcHBseSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItbi0yMCB0ZXh0LWxlZnQ7XG4gIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDQ1cHgpO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAuaWF0aS1saXN0LXRhYmxlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gIH1cbn1cbi5pYXRpLWxpc3QtdGFibGUgdGFibGUge1xuICBAYXBwbHkgdGFibGUgdy1mdWxsICBiZy13aGl0ZTtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6aG92ZXIge1xuICB6LWluZGV4OiAxO1xuICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICBAYXBwbHkgYmctbi0xMDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZCxcbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0aCB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZDphZnRlcixcbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0aDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIGJvdHRvbS0wIGgtcHggdy1mdWxsIG1heC13LWZ1bGwgYmctbi0yMDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZDpmaXJzdC1jaGlsZDphZnRlciB7XG4gIEBhcHBseSBtbC02O1xufVxuLmlhdGktbGlzdC10YWJsZSB0Ym9keSB0cjpub3QoOmxhc3QtY2hpbGQpIHRoLmNoZWNrLWNvbHVtbjphZnRlciB7XG4gIEBhcHBseSAtbWwtNjtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGgge1xuICBAYXBwbHkgcHktNCBweC02IGFsaWduLXRvcCB0ZXh0LXhzIHVwcGVyY2FzZSBsZWFkaW5nLW5vcm1hbDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGggc3ZnIHtcbiAgQGFwcGx5IG1yLTEgdGV4dC14bCB0ZXh0LW4tMzA7XG59XG4uaWF0aS1saXN0LXRhYmxlIHRoIGEge1xuICBAYXBwbHkgZmxleDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGggYSBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ZCB7XG4gIEBhcHBseSByZWxhdGl2ZSBweS00IHB4LTYgYWxpZ24tdG9wIHRleHQtc20gbGVhZGluZy1yZWxheGVkO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ci5hbHJlYWR5LXB1Ymxpc2hlZCB0ZCxcbi5pYXRpLWxpc3QtdGFibGUgdHIuYWxyZWFkeS1wdWJsaXNoZWQgdGguY2hlY2stY29sdW1uIHtcbiAgQGFwcGx5IHB0LTExO1xufVxuLmlhdGktbGlzdC10YWJsZSAuaGFzLXN0YXR1cyB0ZCB7XG4gIEBhcHBseSBweC02IHB0LTExIHBiLTc7XG59XG4uaWF0aS1saXN0LXRhYmxlIC5oYXMtc3RhdHVzIHRoIHtcbiAgQGFwcGx5IHB4LTYgcHQtMTEgcGItNztcbn1cbi5pYXRpLWxpc3QtdGFibGUgLmNoZWNrLWNvbHVtbiAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG5cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yIHtcbiAgQGFwcGx5IGJnLXJvc2U7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvcjpob3ZlciB7XG4gIEBhcHBseSBiZy1yb3NlO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3IgLnRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2Om5vdCg6bGFzdC1jaGlsZCkge1xuICBAYXBwbHkgYm9yZGVyLWIgYm9yZGVyLWItbi0yMCBwYi00O1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItY29udGVudCBkaXYgdWwge1xuICBAYXBwbHkgbXQtNCBzcGFjZS15LTQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWJsdWVjb3JhbDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2IGxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDM2cHg7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1jb250ZW50IGRpdiBsaTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgQGFwcGx5IGJvcmRlci1iIGJvcmRlci1iLW4tMjAgcGItNDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2IGxpOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogOHB4O1xuICBsZWZ0OiAyMHB4O1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgYmctYmx1ZWNvcmFsO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItY29udGVudC5vcGVuIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDI2cHg7XG4gIHJpZ2h0OiAwO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItaWNvbiBzdmcge1xuICBmb250LXNpemU6IDZweDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWljb24ub3BlbiB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbiNjYiB7XG4gIHdpZHRoOiA2OHB4O1xufVxuXG4jc3RhdHVzIHtcbiAgd2lkdGg6IDE5MnB4O1xufVxuXG4jcHVibGlzaCB7XG4gIHdpZHRoOiAyODBweDtcbn1cblxuI2RhdGUge1xuICB3aWR0aDogMTczcHg7XG59XG5cbi5pYXRpLWxpc3QtdGFibGUgdHIge1xuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ZDpudGgtY2hpbGQoMSkge1xuICBtYXgtd2lkdGg6IDE1MHB4ICFpbXBvcnRhbnQ7XG59XG4uaWF0aS1saXN0LXRhYmxlIHRkOm50aC1jaGlsZCgxKSBhIHtcbiAgbWF4LXdpZHRoOiAxNDVweCAhaW1wb3J0YW50O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY2hlY2tib3gge1xuICBAYXBwbHkgcmVsYXRpdmUgYmxvY2sgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmU7XG59XG4uY2hlY2tib3ggLmNoZWNrbWFyayB7XG4gIEBhcHBseSBmbGV4IGgtNCB3LTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYm9yZGVyLTIgYm9yZGVyLW4tMjA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG59XG4uY2hlY2tib3ggLmNoZWNrbWFyazphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMCAzcHggM3B4IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBtYi0wLjUgaGlkZGVuIGgtMiB3LVs1cHhdIHJvdGF0ZS00NSBib3JkZXItc3ByaW5nLTUwO1xufVxuLmNoZWNrYm94IGlucHV0IHtcbiAgQGFwcGx5IGFic29sdXRlIGgtMCB3LTAgY3Vyc29yLXBvaW50ZXIgb3BhY2l0eS0wO1xufVxuLmNoZWNrYm94IGlucHV0OmNoZWNrZWQgfiAuY2hlY2ttYXJrIHtcbiAgQGFwcGx5IGJvcmRlci1zcHJpbmctNTA7XG59XG4uY2hlY2tib3ggaW5wdXQ6Y2hlY2tlZCB+IC5jaGVja21hcms6YWZ0ZXIge1xuICBAYXBwbHkgYmxvY2s7XG59XG4uY2hlY2tib3g6aG92ZXIgaW5wdXQgfiAuY2hlY2ttYXJrIHtcbiAgQGFwcGx5IGJvcmRlci1zcHJpbmctNTA7XG59XG5cbi8qKlxuICBMYXJhdmVsIGZvcm0gZGVzaWduXG4gKi9cbmZvcm0ge1xuICAvKipcbiAgKiBDb25kaXRpb24gdG8gc2hvdyBhbmQgZGVsZXRlIGNvbGxlY3Rpb24gZXJyb3IgaW4gZm9ybVxuICAqL1xufVxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCB7XG4gIEBhcHBseSByZWxhdGl2ZSBwLTM7XG59XG5mb3JtIC5mb3JtLWZpZWxkLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkge1xuICBAYXBwbHkgbWItNjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXAgLmZvcm0tZmllbGQge1xuICBAYXBwbHkgcC0zO1xufVxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCAuZm9ybS1maWVsZCAuaGVscC10ZXh0IHtcbiAgQGFwcGx5IG10LTIgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG59XG5mb3JtIGJ1dHRvbi5kZWxldGUtaXRlbSB7XG4gIEBhcHBseSBhYnNvbHV0ZSBoLTggdy04IGN1cnNvci1wb2ludGVyIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctbi00MCAtaW5kZW50LTQwO1xufVxuZm9ybSBidXR0b24uZGVsZXRlLWl0ZW06YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1hZ2VzL3RyYXNoX2Z1bGwuc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTEvMiB0b3AtMS8yIGgtWzE4cHhdIHctWzE4cHhdIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMjtcbn1cbmZvcm0gYnV0dG9uLmRlbGV0ZS1pdGVtOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXAtb3V0ZXIgLmZvcm0tZmllbGQge1xuICBAYXBwbHkgcHgtMztcbn1cbmZvcm0gLmZvcm0tZmllbGQtbGFiZWwge1xuICBAYXBwbHkgbWItMiBmbGV4IGp1c3RpZnktYmV0d2Vlbjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtbGFiZWwgbGFiZWwge1xuICBAYXBwbHkgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG59XG5mb3JtIC5mb3JtLWZpZWxkLWxhYmVsIC5yZXF1aXJlZCB7XG4gIEBhcHBseSBmb250LWJvbGQgdGV4dC1zYWxtb24tNTA7XG59XG5mb3JtIGlucHV0W3R5cGU9dGV4dF0sXG5mb3JtIGlucHV0W3R5cGU9ZGF0ZV0sXG5mb3JtIHRleHRhcmVhIHtcbiAgQGFwcGx5IG10LTAgaC0xMiB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgcHgtNCBweS0yLjUgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuZm9ybSBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlcixcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXTo6cGxhY2Vob2xkZXIsXG5mb3JtIHRleHRhcmVhOjpwbGFjZWhvbGRlciB7XG4gIEBhcHBseSB0ZXh0LXNtIHRleHQtbi00MDtcbn1cbmZvcm0gaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXTpmb2N1cyxcbmZvcm0gdGV4dGFyZWE6Zm9jdXMge1xuICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG59XG5mb3JtIGlucHV0W3R5cGU9dGV4dF06Zm9jdXM6OnBsYWNlaG9sZGVyLFxuZm9ybSBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzOjpwbGFjZWhvbGRlcixcbmZvcm0gdGV4dGFyZWE6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi01MDtcbn1cbmZvcm0gaW5wdXRbdHlwZT10ZXh0XSxcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXSB7XG4gIEBhcHBseSBoLTEyO1xufVxuZm9ybSBzZWxlY3Qge1xuICBAYXBwbHkgdy1mdWxsIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtbi00MCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuZm9ybSBzZWxlY3Q6Zm9jdXMge1xuICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG59XG5mb3JtIC5oZWxwIHtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuZm9ybSAuaGVscF9fdGV4dCB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgdG9wLTQgei0yMCBzcGFjZS15LTEuNSByb3VuZGVkIGJnLWVnZ3NoZWxsIHAtNCB0ZXh0LWxlZnQgdGV4dC14cyB0ZXh0LW4tNDAgb3BhY2l0eS0wIGR1cmF0aW9uLTIwMDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7XG59XG5mb3JtIC5oZWxwOmhvdmVyIC5oZWxwX190ZXh0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG5mb3JtIC5hZGRfbW9yZSB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbmZvcm0gLmFkZF9tb3JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC0xLzIgdy1weCBib3JkZXItbCBib3JkZXItc3ByaW5nLTUwO1xufVxuZm9ybSAuYWRkX21vcmU6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0yLzQgaC1weCB3LTMuNSAtdHJhbnNsYXRlLXktMS8yIGJvcmRlci1iIGJvcmRlci1zcHJpbmctNTA7XG59XG5mb3JtIC5hZGRfbW9yZSBpIHtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltYWdlcy9hZGQtbW9yZS1ncmVlbi5zdmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbn1cbmZvcm0gLnN1YmVsZW1lbnQuYm9yZGVyLWwgPiBsYWJlbCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuZm9ybSAuc3ViZWxlbWVudCAuc3ViZWxlbWVudCxcbmZvcm0gLnN1YmVsZW1lbnQgLnN1YmVsZW1lbnQgKyBidXR0b24ge1xuICBAYXBwbHkgbWwtNjtcbn1cbmZvcm0gLnN1YmVsZW1lbnQgLndyYXBwZWQtY2hpbGQtYm9keSB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbmZvcm0gLnN1YmVsZW1lbnQgLndyYXBwZWQtY2hpbGQtYm9keSA+IC5kZWxldGUtcGFyZW50IHtcbiAgQGFwcGx5IGJsb2NrO1xufVxuZm9ybSAuc3ViZWxlbWVudCA+IC5tdWx0aS1mb3JtOm9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50LFxuZm9ybSAuc3ViZWxlbWVudCAud3JhcHBlZC1jaGlsZC1ib2R5Om9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50IHtcbiAgQGFwcGx5IGhpZGRlbjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXA6b25seS1vZi10eXBlID4gLmRlbGV0ZS1pdGVtIHtcbiAgQGFwcGx5IGhpZGRlbjtcbn1cbmZvcm0gLmNvbGxlY3Rpb25fZXJyb3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuZm9ybSAubXVsdGktZm9ybSArIC5jb2xsZWN0aW9uX2Vycm9yLFxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCArIC5jb2xsZWN0aW9uX2Vycm9yLFxuZm9ybSAud3JhcHBlZC1jaGlsZC1ib2R5ICsgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gIFNlbGVjdCAyIGZpZWxkXG4qL1xuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xufVxuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7XG4gIEBhcHBseSBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LW4tNDAgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gIEBhcHBseSBwLTAgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gIEBhcHBseSBoLTExO1xufVxuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHNwYW4ge1xuICBAYXBwbHkgbXItMi41IHRleHQtc207XG59XG5zcGFuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDA7XG59XG5zcGFuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF0ge1xuICBjb2xvcjogIzFmMjkzNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNjtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTUwO1xufVxuXG4ubWF4LXctaGFsZiB7XG4gIG1heC13aWR0aDogNTAlO1xufVxuXG4vKipcbiAgQWN0aXZpdHkgRGV0YWlsIFBhZ2VcbiovXG4uYWN0aXZpdGllcyB7XG4gIEBhcHBseSBmbGV4IGdhcC01IHhsOmdhcC03O1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXIge1xuICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXItaW5uZXIge1xuICBvcmRlcjogMTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYWN0aXZpdGllc19fY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNTBweCk7XG4gIH1cbn1cbi5hY3Rpdml0aWVzX19jYXJkIHtcbiAgQGFwcGx5IGZsZXggZmxleC1jb2wgYmctd2hpdGUgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LW4tNDA7XG4gIHBhZGRpbmc6IDEzcHg7XG59XG4uYWN0aXZpdGllcyAucHJvZ3Jlc3Mge1xuICBAYXBwbHkgaXRlbXMtY2VudGVyO1xuICB3aWR0aDogMTUxcHg7XG4gIG1pbi1oZWlnaHQ6IDE3NHB4O1xuICBib3JkZXItcmFkaXVzOiA4cHggMHB4IDBweCA4cHg7XG59XG4uYWN0aXZpdGllcyAudGFiLWJ0bjpkaXNhYmxlZCB7XG4gIEBhcHBseSBwb2ludGVyLWV2ZW50cy1ub25lIHRleHQtbi0yMDtcbn1cbi5hY3Rpdml0aWVzIC50YWItYnRuOmRpc2FibGVkIHN2ZyB7XG4gIEBhcHBseSB0ZXh0LW4tMjA7XG59XG4uYWN0aXZpdGllcyAuaG92ZXItdGV4dCBzdmcge1xuICBAYXBwbHkgdGV4dC1uLTMwO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmVsZW1lbnRzLWNhcmQge1xuICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAubWFudWFsLWltcG9ydCAuaGVscF9fdGV4dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnJlZ2lzdHJ5X19pbmZvIC5oZWxwX190ZXh0LFxuLnJlZ2lzdGVyIC5oZWxwX190ZXh0LFxuYXNpZGUgLmhlbHBfX3RleHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgIWltcG9ydGFudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJlZ2lzdHJ5X19pbmZvIC5oZWxwX190ZXh0LFxuLnJlZ2lzdGVyIC5oZWxwX190ZXh0LFxuYXNpZGUgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAyNTBweCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5pbXBvcnQtYWN0aXZpdHkgLmhlbHBfX3RleHQsXG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xufVxuXG5hc2lkZSAucHJvZ3Jlc3MgLmhlbHBfX3RleHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgYXNpZGUgLnByb2dyZXNzIC5oZWxwX190ZXh0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQ1JSkgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uYWN0aXZpdGllc19fY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGFiLWJ0biAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAudGFiLWJ0biAuaGVscF9fdGV4dCB7XG4gICAgbGVmdDogMDtcbiAgfVxufVxuXG4uYWN0aXZpdHktZGVmYXVsdC12YWx1ZSAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSkgIWltcG9ydGFudDtcbn1cblxuLnBhZ2luYXRpb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgei0wIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW4tNDA7XG59XG4ucGFnaW5hdGlvbiA+IGEsXG4ucGFnaW5hdGlvbiA+IHNwYW4ge1xuICBAYXBwbHkgZmxleCBib3JkZXIteSBib3JkZXItbCBib3JkZXItbi0yMCBweS0xLjUgcHgtMztcbn1cbi5wYWdpbmF0aW9uID4gYTpub3QoLnByZXYtYnRuKSxcbi5wYWdpbmF0aW9uID4gc3Bhbjpub3QoLnByZXYtYnRuKSB7XG4gIEBhcHBseSBib3JkZXItbCBib3JkZXItbi0yMDtcbn1cbi5wYWdpbmF0aW9uID4gYS5wcmV2LWJ0biwgLnBhZ2luYXRpb24gPiBhLm5leHQtYnRuLFxuLnBhZ2luYXRpb24gPiBzcGFuLnByZXYtYnRuLFxuLnBhZ2luYXRpb24gPiBzcGFuLm5leHQtYnRuIHtcbiAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLW4tMTA7XG59XG4ucGFnaW5hdGlvbiA+IGEucHJldi1idG4gc3ZnLCAucGFnaW5hdGlvbiA+IGEubmV4dC1idG4gc3ZnLFxuLnBhZ2luYXRpb24gPiBzcGFuLnByZXYtYnRuIHN2Zyxcbi5wYWdpbmF0aW9uID4gc3Bhbi5uZXh0LWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC14cztcbn1cbi5wYWdpbmF0aW9uID4gYS5wcmV2LWJ0bixcbi5wYWdpbmF0aW9uID4gc3Bhbi5wcmV2LWJ0biB7XG4gIEBhcHBseSByb3VuZGVkLXRsIHJvdW5kZWQtYmw7XG59XG4ucGFnaW5hdGlvbiA+IGEubmV4dC1idG4sXG4ucGFnaW5hdGlvbiA+IHNwYW4ubmV4dC1idG4ge1xuICBAYXBwbHkgcm91bmRlZC1iciByb3VuZGVkLXRyIGJvcmRlci1yO1xufVxuLnBhZ2luYXRpb24gPiBhLnByZXYtYnRuIHN2Zyxcbi5wYWdpbmF0aW9uID4gc3Bhbi5wcmV2LWJ0biBzdmcge1xuICBAYXBwbHkgbXItMTtcbn1cbi5wYWdpbmF0aW9uID4gYS5uZXh0LWJ0biBzdmcsXG4ucGFnaW5hdGlvbiA+IHNwYW4ubmV4dC1idG4gc3ZnIHtcbiAgQGFwcGx5IG1sLTE7XG59XG4ucGFnaW5hdGlvbiA+IGE6aG92ZXIsIC5wYWdpbmF0aW9uID4gYS5jdXJyZW50LFxuLnBhZ2luYXRpb24gPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiBzcGFuLmN1cnJlbnQge1xuICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtcGFwZXI7XG59XG5cbi5vdmVybGF5IHtcbiAgQGFwcGx5IGZpeGVkIGxlZnQtMCB0b3AtMCBoLWZ1bGwgdy1mdWxsIGJnLWJsYWNrO1xuICB6LWluZGV4OiAxMDA7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5vdmVybGF5X19pbm5lciB7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbDtcbn1cbi5vdmVybGF5X19jb250ZW50IHtcbiAgQGFwcGx5IGFic29sdXRlIGxlZnQtMi80IHRvcC0yLzQ7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLm92ZXJsYXlfX2NvbnRlbnQgLnNwaW5uZXIge1xuICBAYXBwbHkgaW5saW5lLWJsb2NrIGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLW4tMTAgYm9yZGVyLW9wYWNpdHktNTtcbiAgd2lkdGg6IDc1cHg7XG4gIGhlaWdodDogNzVweDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uc2VsZWN0Mi1jb250YWluZXI6Zm9jdXMtd2l0aGluIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjdmOTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDI4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGU6Zm9jdXMtd2l0aGluIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzJhMmYzMDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAxO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4uc2VsZWN0Mi1kcm9wZG93biB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTEwMDAwMHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYWFhO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiB7XG4gIHBhZGRpbmc6IDZweDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1kcm9wZG93biB7XG4gIGxlZnQ6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd24tLWFib3ZlIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd24tLWJlbG93IHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5zZWxlY3QyLXNlYXJjaC0tZHJvcGRvd24ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNHB4O1xufVxuLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDRweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2E2YjViYTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5bdHlwZT1zZWFyY2hdIHtcbiAgb3V0bGluZS1jb2xvcjogI2E2YjViYTtcbiAgb3V0bGluZS1vZmZzZXQ6IDA7XG59XG5cbi5zZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDtcbiAgbWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgY2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50O1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gIGNvbG9yOiAjMTU1MzY2O1xuICBsaW5lLWhlaWdodDogMjhweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgcmlnaHQ6IDFweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjZweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IGIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG4gIG1hcmdpbi1sZWZ0OiAtNHB4O1xuICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogNXB4IDRweCAwIDRweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzID4gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9ucyB7XG4gIG1heC1oZWlnaHQ6IDIwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyBiIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjODg4IHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6IDAgNHB4IDVweCA0cHg7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWFib3ZlIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5zaWRlYmFyLW9wZW4taWNvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsZWZ0OiAwcHg7XG4gIGJvdHRvbTogNTBweDtcbiAgei1pbmRleDogNjA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGRkZTA7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBib3JkZXItcmFkaXVzOiAwIDEwMCUgMTAwJSAwO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5zaWRlYmFyLW9wZW4taWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5zaWRlYmFyLW9wZW4taWNvbjpob3ZlciB7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbn1cbi5zaWRlYmFyLW9wZW4taWNvbiBzdmcge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMTU1MzY2O1xufVxuXG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyODBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG59XG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24gc3ZnIHtcbiAgbWFyZ2luOiBhdXRvO1xuICBjb2xvcjogIzE1NTM2Njtcbn1cblxuLnNpZGViYXItY2xvc2UtaWNvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiA1MHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGxlZnQ6IDI3NXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGRkZTA7XG4gIGhlaWdodDogNDBweDtcbiAgd2lkdGg6IDQwcHg7XG4gIHotaW5kZXg6IDIwMDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3MDBweCkge1xuICAuc2lkZWJhci1jbG9zZS1pY29uIHtcbiAgICBsZWZ0OiAyNDBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB9XG59XG4uc2lkZWJhci1jbG9zZS1pY29uIHN2ZyB7XG4gIG1hcmdpbjogYXV0bztcbiAgY29sb3I6ICMxNTUzNjY7XG59IiwiQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLndyYXBwZXI6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMjkycHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1hZ2VzL21hcnF1ZS13aGl0ZS5wbmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTYuNSU7XG4gICAgYmFja2dyb3VuZC1zaXplOiA3MCU7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIGNvbnRlbnQ6ICcnO1xuICB9XG59XG4uaGVhZGVyIHtcbiAgbWF4LXdpZHRoOiAxMTY2cHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5uYXZfX2FjdGl2ZTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICBjb250ZW50OiAnJztcbn1cbi5saW5rc19fYWN0aXZlIHtcbiAgQGFwcGx5IHRleHQtYmxhY2s7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLm5hdl9fbGlua3Mge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDIwcHggOHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG5cbiAgYTpob3ZlciB7XG4gICAgQGFwcGx5IHRleHQtbi01MDtcbiAgfVxuXG4gIC5yZWFkX19tb3JlIHtcbiAgICBAYXBwbHkgcm91bmRlZC1zbSBiZy1ibHVlY29yYWwgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBwYWRkaW5nOiA4cHggMThweDtcblxuICAgICY6aG92ZXIge1xuICAgICAgQGFwcGx5IGJnLW4tNTAgdGV4dC13aGl0ZTtcbiAgICB9XG4gIH1cblxuICBhIHtcbiAgICBAYXBwbHkgdGV4dC13aGl0ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XG4gIC5uYXZfX2xpbmtzIHtcbiAgICBwYWRkaW5nOiAwcHggOHB4IDIwcHg7XG5cbiAgICBhIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAxKTtcbiAgICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgICB9XG4gIH1cbn1cbi5kcm9wZG93bl9fY29udGVudCB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtNyBoaWRkZW4gaC01NiBiZy13aGl0ZSBweS03IHB4LTggb3BhY2l0eS0wIGR1cmF0aW9uLTMwMCB4bDpibG9jaztcbiAgd2lkdGg6IDQyNHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi5kcm9wZG93bjpob3ZlciB7XG4gIC5kcm9wZG93bl9fY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm5hdl9fbGlzdCB7XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMzAwcHg7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbiAgICBwYWRkaW5nOiAzMHB4O1xuICAgIEBhcHBseSBiZy1ibHVlY29yYWwgdGV4dC13aGl0ZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTtcbiAgICB0cmFuc2l0aW9uOiAwLjNzO1xuICAgIHotaW5kZXg6IDExMDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KC0wcHggMHB4IDhweCAjMDAwKTtcblxuICAgIC5hY3RpdmUge1xuICAgICAgYSB7XG4gICAgICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAyNHB4O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDRweDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDEpO1xuICAgICAgICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgICAgICAgfVxuICAgICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgd2lkdGg6IDI1MHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG59XG5cbiNtZW51LW92ZXJsYXkge1xuICBAYXBwbHkgeGw6aGlkZGVuO1xufVxuXG4jYWN0aXZpdHktbWVudS1vdmVybGF5IHtcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gICAgQGFwcGx5IGhpZGRlbjtcbiAgfVxufVxuXG4ubWVudS1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6IDEwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG4uYWN0aXZpdHktbmF2LW1lbnUge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtd2hpdGU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTAwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCAwcHggOHB4ICMwMDApO1xuXG4gICAgLmFjdGl2aXR5LW5hdi1saXN0IHtcbiAgICAgIEBhcHBseSBtdC01NiBmbGV4IGZsZXgtY29sIHNwYWNlLXktOTtcbiAgICB9XG4gIH1cbn1cbi5uYXYtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcbn1cblxuLm5hdiB7XG4gICZfX3BvaW50ZXIsXG4gICZfX3BvaW50ZXItaG92ZXIge1xuICAgIEBhcHBseSByZWxhdGl2ZTtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgQGFwcGx5IGFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCBoLTEgdy1mdWxsIHNjYWxlLXgtMCBzY2FsZS15LTEwMCByb3VuZGVkLXNtIGJnLXR1cnF1b2lzZSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDA7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDExOTBweCkge1xuICAgICAgICBAYXBwbHkgLWJvdHRvbS0zO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6aG92ZXI6YWZ0ZXIge1xuICAgICAgQGFwcGx5IHNjYWxlLXgtMTAwO1xuICAgIH1cbiAgfVxuXG4gICZfX3BvaW50ZXI6YWZ0ZXIge1xuICAgIEBhcHBseSBzY2FsZS14LTEwMDtcbiAgfVxufVxuXG4uYWN0aXZpdHktbmF2IHtcbiAgQGFwcGx5IGZsZXggZ3JvdztcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMTkwcHgpIHtcbiAgICBAYXBwbHkganVzdGlmeS1lbmQ7XG4gIH1cbn1cbiIsIi5tYWluIHtcbiAgJl9fY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDExNjZweDtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cbiAgLmxlZnRfX2NvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgMTYwZGVnLFxuICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLFxuICAgICAgdHJhbnNwYXJlbnRcbiAgICApO1xuXG4gICAgYSB7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHVycXVvaXNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAucmlnaHQge1xuICAgIHdpZHRoOiA5MyU7XG4gICAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG5cbiAgICAmX19jb250YWluZXIge1xuICAgICAgaDIge1xuICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19jb250ZW50IHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1sZyBiZy13aGl0ZSBweS02IHB4LTU7XG5cbiAgICAgIC5yaWdodF9faWNvbiB7XG4gICAgICAgIEBhcHBseSB0ZXh0LWxhZ29vbi01MDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLThweDtcbiAgICAgIH1cbiAgICAgIC5yaWdodF9fYXJyb3cge1xuICAgICAgICBAYXBwbHkgdGV4dC13aGl0ZTtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci10dXJxdW9pc2UgYmctdHVycXVvaXNlIGJnLW9wYWNpdHktMTA7XG4gICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMjVweCAwcHggdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgLnJpZ2h0X19pY29uIHtcbiAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgQGFwcGx5IGZpbGwtbGFnb29uLTUwIHRleHQtd2hpdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5yaWdodF9fYXJyb3cge1xuICAgICAgICAgIEBhcHBseSBmaWxsLXdoaXRlIHRleHQtdHVycXVvaXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEzNjZweCkge1xuICAgIC5qb2luLW5vdyB7XG4gICAgICBAYXBwbHkgcHgtMjA7XG5cbiAgICAgIC5yaWdodF9fY29udGVudCB7XG4gICAgICAgIHdpZHRoOiA0MjNweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIGlucHV0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubGVmdCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcblxuICAgICZfX2NvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMzg2cHg7XG4gICAgfVxuICB9XG4gIC5yaWdodCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnJpZ2h0IHtcbiAgICBtYXJnaW4tdG9wOiAtMjY1cHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQyMHB4KSB7XG4gIC5yaWdodF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogOHB4O1xuICBoZWlnaHQ6IDhweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBAYXBwbHkgcm91bmRlZC1sZyBiZy1uLTIwIGhvdmVyOmJnLW4tMzA7XG59XG5tYWluIHtcbiAgZGlzcGxheTogZ3JpZDsgLy8gTGluZSAxXG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsgLy8gTGluZSAyXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0NjVweCk7IC8vIExpbmUgM1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXIge1xuICBmbGV4LXNocmluazogMDtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gICAgd2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbmJvZHkuZGlzYWJsZS1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDEwcHg7XG59XG5ib2R5IHtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG59XG5cbmJvZHkubm8tbmF2IHtcbiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50O1xufVxuaHRtbCB7XG4gIHNjcm9sbC1wYWRkaW5nLXRvcDogNjBweDsgLyogaGVpZ2h0IG9mIHN0aWNreSBoZWFkZXIgKi9cbn1cbiIsIi5mb290ZXJfX2NvbnRhaW5lciB7XG4gIG1heC13aWR0aDogMTE2NnB4O1xuICBtYXJnaW46IGF1dG87XG5cbiAgLmZvb3Rlcl9fbGlua3Mge1xuICAgIGEge1xuICAgICAgQGFwcGx5IGJvcmRlci1iLTIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtbi0yMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIEBhcHBseSBib3JkZXItYi0yIGJvcmRlci10dXJxdW9pc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIuZWxsaXBzaXMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLmVsbGlwc2lzX190aXRsZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5lbGxpcHNpc19fdGl0bGUtLWhvdmVyIHtcbiAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLWZ1bGwgei0yMCBtYXgtdy1tZCBzcGFjZS15LTEuNSByb3VuZGVkIGJnLWVnZ3NoZWxsIHAtNCB0ZXh0LWxlZnQgdGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LW4tNDAgb3BhY2l0eS0wIGR1cmF0aW9uLTIwMDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYigwIDAgMCAvIDEwJSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uZWxsaXBzaXM6aG92ZXIsXG4uZWxsaXBzaXNfX3RpdGxlOmhvdmVyLFxuLmJyZWFkY3J1bWJfX3RpdGxlOmhvdmVyIHtcbiAgLmVsbGlwc2lzX190aXRsZS0taG92ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1cHgpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLmJyZWFkY3J1bWJfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG4vLyBhY3Rpdml0eSBkZXRhaWxcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMzBweCk7XG4gIH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLmFkZF9pbmRpY2F0b3Ige1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICB9XG4gIH1cbn1cblxuLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IHtcbiAgLmVkaXQtYnV0dG9uLFxuICAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAvLyBvdXRsaW5lOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC5lZGl0LWJ1dHRvbiB7XG4gICAgb3JkZXI6IDI7XG4gIH1cblxuICAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgb3JkZXI6IDE7XG4gIH1cblxuICAmOmhvdmVyIC5lZGl0LWJ1dHRvbixcbiAgJjpob3ZlciAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgLmVsZW1lbnRzLXN2ZyB7XG4gICAgQGFwcGx5IG1yLTEuNSB0ZXh0LXhsIHRleHQtYmx1ZWNvcmFsO1xuICB9XG59XG4uZGVzY3JpcHRpb24ge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA1MDBweDtcbn1cblxuLmVsZW1lbnRzLWRldGFpbCB7XG4gIEBhcHBseSBmbGV4IGZsZXgtY29sIHRleHQteHMgdGV4dC1uLTUwO1xuXG4gIC8vIHRhYmxlIHtcbiAgLy8gICBmb250LXNpemU6IGluaGVyaXQ7XG5cbiAgLy8gfVxuXG4gICYgKiB7XG4gICAgQGFwcGx5IGxlYWRpbmctNTtcbiAgfVxuXG4gIHRkOm50aC1jaGlsZCgxKSB7XG4gICAgQGFwcGx5IHRleHQtbi00MDtcbiAgICB3aWR0aDogMTAwcHg7XG4gIH1cbiAgJi53aWRlcjpub3QoLnNtYWxsKSB7XG4gICAgdGQ6bnRoLWNoaWxkKDEpIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNDA7XG4gICAgICB3aWR0aDogMTkwcHg7XG4gICAgfVxuICB9XG5cbiAgdGQ6bnRoLWNoaWxkKDIpIHtcbiAgICBAYXBwbHkgZmxleCBmbGV4LWNvbCBwbC0yIHRleHQteHMgdGV4dC1uLTUwO1xuICB9XG4gIC5tdWx0aWxpbmUge1xuICAgIEBhcHBseSBpdGVtcy1zdGFydDtcbiAgfVxuXG4gIHRkIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB9XG5cbiAgdGFibGUgPiB0Ym9keSA+IHRyOm5vdCg6bGFzdC1jaGlsZCkgPiB0ZCB7XG4gICAgQGFwcGx5IHBiLTM7XG4gIH1cbn1cbi52YWx1ZSB7XG4gIEBhcHBseSBmbGV4IHNwYWNlLXgtMSB0ZXh0LW4tNTA7XG59XG4uY2F0ZWdvcnkge1xuICBAYXBwbHkgbWItMiB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LW4tNTA7XG59XG4ubGFuZ3VhZ2Uge1xuICBAYXBwbHkgdy1bMzAwcHhdIHRleHQteHMgaXRhbGljIHRleHQtbi0zMCAgc206dy1hdXRvO1xufVxuLmRlc2NyaXB0aW9uLWNvbnRlbnQge1xuICBAYXBwbHkgdy1bMzAwcHhdIHNtOnctYXV0bztcbn1cbi50aXRsZS1ib3JkZXI6OmFmdGVyIHtcbiAgd2lkdGg6IDk1MHB4O1xuICBjb250ZW50OiAnJztcbiAgQGFwcGx5IGFic29sdXRlIHRvcC0yIGxlZnQtNCBoLXB4IGJnLW4tMzA7XG59XG4uZWxlbWVudHMtdGl0bGU6OmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIEBhcHBseSBoLXB4IGdyb3cgYmctbi0zMDtcbn1cbi50b3Age1xuICBtYXJnaW4tdG9wOiAxcHg7XG59XG5cbi5tb2RhbCB7XG4gIHA6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgfVxufVxuIiwiLnNlY3Rpb24td3JhcHBlciB7XG4gIEBhcHBseSBteC0zIGJnLXBhcGVyIHNtOm14LTEwO1xuXG4gIC5zZXR0aW5nIHtcbiAgICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMTZweCAwcHggMjRweDtcblxuICAgICZfX2NvbnRhaW5lciB7XG4gICAgICBAYXBwbHkgcmVsYXRpdmUgcm91bmRlZC1sZyBiZy13aGl0ZSBwLTcgbWQ6cHktMTQgbWQ6cHgtMjA7XG4gICAgICBtYXgtaGVpZ2h0OiA2NXZoO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NDBweCkge1xuICAgICAgICBAYXBwbHkgcHgtMztcbiAgICAgIH1cblxuICAgICAgLnZ1ZV9fc2VsZWN0IHtcbiAgICAgICAgbWFyZ2luOiA4cHggMHB4O1xuICAgICAgfVxuICAgICAgLnJlZ2lzdHJ5X19pbmZvIHtcbiAgICAgICAgQGFwcGx5IG15LTQgZmxleCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgYm9yZGVyLWItbi0yMDtcbiAgICAgIH1cbiAgICAgIHAge1xuICAgICAgICBAYXBwbHkgdGV4dC14cyBsZWFkaW5nLTUgdGV4dC1uLTQwO1xuICAgICAgfVxuICAgICAgLnRleHQge1xuICAgICAgICBAYXBwbHkgbWItOCB0ZXh0LXNtO1xuICAgICAgfVxuICAgICAgbGFiZWwge1xuICAgICAgICBAYXBwbHkgdGV4dC14cyB0ZXh0LW4tNTA7XG4gICAgICB9XG4gICAgfVxuICAgIC5yZWdpc3RlciB7XG4gICAgICBAYXBwbHkgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLW4tMzAgcC00IHNtOnAtNjtcblxuICAgICAgJl9fY29udGFpbmVyIHtcbiAgICAgICAgQGFwcGx5IGdyaWQgZ2FwLTMgc206Z2FwLTYgbGc6Z3JpZC1jb2xzLTI7XG5cbiAgICAgICAgLnRhZ19fY29ycmVjdCB7XG4gICAgICAgICAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTIgdG9wLTEwIGZsZXggaC01IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXNwcmluZy00MCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gICAgICAgICAgd2lkdGg6IDUwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAudGFnX19pbmNvcnJlY3Qge1xuICAgICAgICAgIEBhcHBseSBhYnNvbHV0ZSByaWdodC0yIHRvcC0xMCBmbGV4IGgtNSBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1zYWxtb24tNTAgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICAgICAgICAgIHdpZHRoOiA2MXB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAudmVyaWZ5LWJ0biB7XG4gICAgICAgIHdpZHRoOiAxMjBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTRweDtcbiAgICAgICAgQGFwcGx5IGZsZXggaC0xMCBqdXN0aWZ5LWNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgLnJlZ2lzdGVyX19pbnB1dCB7XG4gICAgICBAYXBwbHkgbXQtMiB3LWZ1bGwgYm9yZGVyIGJvcmRlci1uLTMwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIH1cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gICAgICB9XG4gICAgICAmOmZvY3VzOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgICB9XG4gICAgfVxuICAgIC5lcnJvcl9faW5wdXQge1xuICAgICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbiAgICB9XG4gIH1cbn1cbi5zYXZlLWJ0biB7XG4gIEBhcHBseSBweC00O1xufVxuLmJ0bl9fYWN0aXZlIHtcbiAgQGFwcGx5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlO1xufVxuIiwiLnNtb290aCB7XG4gIGFuaW1hdGlvbjogZmFkZUluQW5pbWF0aW9uIGVhc2UgMC4zcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5BbmltYXRpb24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4iLCJib2R5IHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBAYXBwbHkgbWluLWgtc2NyZWVuIGJnLXBhcGVyO1xufVxuXG5hIHtcbiAgY29sb3I6IHJnYih2YXIoLS1ibHVlY29yYWwpKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogcmdiKHZhcigtLXNwcmluZy01MCkpO1xuICB9XG59XG5cbi5sZWZ0IHtcbiAgJl9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICB0ZXh0LXNoYWRvdzogNHB4IDRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjAxKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgIH1cbiAgfVxufVxuXG5oMiB7XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7XG4gICAgQGFwcGx5IHRleHQtaGVhZGluZy00O1xuICB9XG4gIEBhcHBseSB0ZXh0LWhlYWRpbmctNSBmb250LWJvbGQgdGV4dC1uLTUwIG1kOnRleHQtaGVhZGluZy0zO1xufVxuXG5oNCB7XG4gIEBhcHBseSB0ZXh0LWhlYWRpbmctNCBsZWFkaW5nLW5vcm1hbDtcbn1cbiIsIi8vIFR1cnF1b2lzZSBidXR0b25cbi5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICBAYXBwbHkgYmctdHVycXVvaXNlIHRleHQtbi01MDtcblxuICAmOmhvdmVyIHtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsO1xuICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpO1xuICAgICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICB9XG4gIH1cbn1cblxuLmJ0bi1iYWNrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgdy0yNCB0ZXh0LWJsdWVjb3JhbDtcblxuICBzdmcge1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xuICAgIH1cbiAgfVxufVxuXG4uYnRuLW5leHQge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBwYWRkaW5nOiAxM3B4IDI0cHg7XG4gIH1cbiAgQGFwcGx5IHctMzYgcHktMi41IHRleHQtbi01MCBzbTp3LTQwO1xuXG4gIHN2ZyB7XG4gICAgbWFyZ2luLWxlZnQ6IDEzcHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuXG4uZ2V0LXN0YXJ0ZWQtYnRuIHtcbiAgd2lkdGg6IDE4NXB4O1xufVxuXG4ucmVzZXQtYnRuIHtcbiAgQGFwcGx5IG10LTYgZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJvcmRlci1ub25lIGJnLXR1cnF1b2lzZSB0ZXh0LXNtIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC1uLTUwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0yMDAgaG92ZXI6YmctYmx1ZWNvcmFsIGhvdmVyOnRleHQtd2hpdGU7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxNnB4IDk0cHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5yZXNldC1idG4ge1xuICAgIHBhZGRpbmc6IDE4cHggOTRweDtcbiAgfVxufVxuXG5zdmcge1xuICBoZWlnaHQ6IDFlbTtcbn1cblxuLnZycF9fd3JhcHBlciB7XG4gIHAge1xuICAgIEBhcHBseSB0ZXh0LXNtIGxlYWRpbmctbm9ybWFsO1xuICB9XG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbi5idXR0b24sXG5idXR0b24ge1xuICBAYXBwbHkgZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgdGV4dC14cyBsZWFkaW5nLW5vcm1hbCB0cmFja2luZy10aWdodDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cblxuLy8gdG9vbHRpcCBidXR0b25cbi50b29sdGlwLWJ0biB7XG4gIEBhcHBseSByZWxhdGl2ZSB0ZXh0LW4tMzA7XG5cbiAgYnV0dG9uIHtcbiAgICBAYXBwbHkgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1zb2xpZCBib3JkZXItbi0zMCBweS0xLjUgcHgtMi41O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgbXItMSB0ZXh0LXhzO1xuICB9XG5cbiAgJl9fY29udGVudCB7XG4gICAgQGFwcGx5IGFic29sdXRlIHRvcC1mdWxsIGxlZnQtMCBoaWRkZW4gdy1bMzUycHhdO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI1JSk7XG4gICAgfVxuICAgIC5jb250ZW50IHtcbiAgICAgIEBhcHBseSBtdC02IHJvdW5kZWQgYmctZWdnc2hlbGwgdGV4dC1uLTUwO1xuICAgICAgcGFkZGluZzogMTZweCAzM3B4IDE2cHggMTZweDtcbiAgICAgIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBAYXBwbHkgbWItMS41IHRleHQteHMgbGVhZGluZy1ub3JtYWw7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlciAudG9vbHRpcC1idG5fX2NvbnRlbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgJjpob3ZlciBidXR0b24ge1xuICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwIHRleHQtc3ByaW5nLTUwO1xuICB9XG59XG5cbi8vIHByaW1hcnkgYnV0dG9uXG4ucHJpbWFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgcm91bmRlZCBiZy1ibHVlY29yYWwgcC0zIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC13aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcblxuICAmLnNwYWNlIHtcbiAgICBAYXBwbHkgcHgtNjtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIEBhcHBseSBiZy1uLTUwIHRleHQtd2hpdGU7XG4gIH1cblxuICBzdmcge1xuICAgIEBhcHBseSB0ZXh0LWJhc2U7XG4gIH1cbn1cblxuLy8gc2Vjb25kYXJ5IGJ1dHRvblxuLnNlY29uZGFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgZ2FwLXgtMSByb3VuZGVkIGJnLXdoaXRlIHAtMyB1cHBlcmNhc2UgdGV4dC1ibHVlY29yYWw7XG5cbiAgJi0tdG91Y2gge1xuICAgIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIC5kcm9wZG93bl9fYXJyb3cge1xuICAgICAgZm9udC1zaXplOiA2cHg7XG4gICAgICB0cmFuc2l0aW9uOiAwLjJzO1xuICAgIH1cbiAgICBzdmcge1xuICAgICAgQGFwcGx5IHRleHQtYmFzZTtcbiAgICB9XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICB9XG5cbiAgLmRyb3Bkb3duX19hcnJvdyB7XG4gICAgZm9udC1zaXplOiA2cHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuXG4vLyBwcmltYXJ5IG91dGxpbmUgYnV0dG9uXG4ucHJpbWFyeS1vdXRsaW5lLWJ0biB7XG4gIEBhcHBseSBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLTN4bCBib3JkZXIgYm9yZGVyLXNwcmluZy01MCBweC0zLjUgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1zcHJpbmctNTA7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKSk7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLXNwcmluZy01MCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICB9XG59XG5cbi5naG9zdC1idG4ge1xuICBAYXBwbHkgdGV4dC14cyBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtbi00MDtcbiAgdHJhbnNpdGlvbjogMC40cztcblxuICAmOmhvdmVyIHtcbiAgICBAYXBwbHkgdGV4dC1ibHVlY29yYWw7XG4gIH1cbn1cblxuLnRhYi1idG4tYW5jaG9yIHtcbiAgQGFwcGx5IGN1cnNvci1kZWZhdWx0O1xufVxuXG4udGFiLWJ0biB7XG4gIEBhcHBseSBoLTkgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMjAgYmctd2hpdGUgcC0yIHRleHQteHMgdGV4dC1uLTQwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbiAgfVxufVxuXG4uYWN0aXZlX190YWIge1xuICBAYXBwbHkgYm9yZGVyLXR1cnF1b2lzZSBiZy1uLTEwIHRleHQtYmx1ZWNvcmFsO1xufVxuXG4ucGFuZWwtYnRuIHtcbiAgQGFwcGx5IGgtMTAgc3BhY2UteC0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIGJnLWVnZ3NoZWxsIHB5LTMgcHgtMjtcbiAgd2lkdGg6IDQzcHg7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgLmRyb3Bkb3duX19hcnJvdyB7XG4gICAgZm9udC1zaXplOiA2cHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuIiwiLmhhbWJ1cmdlciB7XG4gIEBhcHBseSByZWxhdGl2ZSB6LWF1dG8gZmxleCBoLTExIHctMTEgY3Vyc29yLXBvaW50ZXIgZHVyYXRpb24tMzAwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZDtcbiAgei1pbmRleDogMTIwO1xuXG4gICYuYWN0aXZlIHtcbiAgICBzcGFuIHtcbiAgICAgIEBhcHBseSBiZy1uLTEwO1xuICAgIH1cbiAgfVxuXG4gIHNwYW4ge1xuICAgIEBhcHBseSBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGgtMSB3LTEwIHJvdW5kZWQtbGcgZHVyYXRpb24tMzAwO1xuICB9XG4gIHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgICBib3R0b206IDE4cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XG4gIH1cbiAgJi5hY3RpdmUge1xuICAgIHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpICB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgICBzcGFuOm50aC1jaGlsZCgyKSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNjBweCk7XG4gICAgfVxuICAgIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCkgcm90YXRlKDMxNWRlZyk7XG4gICAgfVxuICB9XG4gIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgICB0b3A6IDE4cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxNXB4KTtcbiAgfVxufVxuLmhhbWJ1cmdlci1tZW51IHtcbiAgZGlzcGxheTogbm9uZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG4uaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIHRyYW5zbGF0ZTogLTM1MCUgLTE0MCU7XG4gIH1cbiAgdHJhbnNsYXRlOiAtNDkwJSAtOTAlO1xuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgdHJhbnNsYXRlOiAtMzgwJSAtOTAlO1xuICB9XG59XG5cbiIsIi5pbnB1dCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDE0cHggMHB4IDE0cHggNTVweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgaC0xNCBib3JkZXIgYm9yZGVyLW4tMzAgc206aC0xNjtcblxuICAmOmZvY3VzIHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gIH1cblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgQGFwcGx5IGZvbnQtbm9ybWFsIHRleHQtbi00MDtcbiAgfVxuXG4gICY6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgICBAYXBwbHkgdGV4dC1uLTUwO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgICBwYWRkaW5nOiAyMHB4IDBweCAyMHB4IDU1cHg7XG4gIH1cbn1cbi5lcnJvciB7XG4gIEBhcHBseSB0ZXh0LXNtIHRleHQtY3JpbXNvbi01MCBzbTp0ZXh0LWJhc2U7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxuLmhhc19lcnJvciB7XG4gIC5mb3JtX19pbnB1dCB7XG4gICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbiAgfVxufVxudGV4dGFyZWEuZm9ybV9faW5wdXQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi50ZXh0LWFyZWEge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogNjBweDtcbiAgcmVzaXplOiBub25lO1xufVxuLmZvcm1fX2lucHV0IHtcbiAgQGFwcGx5IG1iLTIgYm94LWJvcmRlciB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1ibHVlY29yYWwgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIHBhZGRpbmc6IDEzcHggMCAxM3B4IDE2cHg7XG4gIH1cbiAgcGFkZGluZzogMTBweCAwIDEwcHggMTZweDtcblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTQwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgQGFwcGx5IGJvcmRlciBib3JkZXItbi01MCBiZy1uLTEwO1xuICB9XG5cbiAgJjpmb2N1czo6cGxhY2Vob2xkZXIge1xuICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gIH1cbn1cbi5pbnB1dF9fZmllbGQge1xuICAubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkIHtcbiAgICBAYXBwbHkgYmctbi0yMCB0ZXh0LW4tNTA7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkLmlzLXBvaW50ZWQge1xuICAgIEBhcHBseSBiZy1uLTIwIHRleHQtbi01MDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC5pcy1hY3RpdmUge1xuICAgIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBAYXBwbHkgdy1bMzEwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBwci0zIHRleHQtc20gdGV4dC1uLTQwIGR1cmF0aW9uLTMwMDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIEBhcHBseSBhYnNvbHV0ZSByaWdodC0wIHRvcC0zIGgtNiB3LTcgYmctd2hpdGU7XG4gIH1cblxuICAubXVsdGlzZWxlY3QuaXMtb3BlbiB7XG4gICAgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0LWRyb3Bkb3duIHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LWNhcmV0IHtcbiAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybCgnL2ltYWdlcy9kcm9wZG93bi1hcnJvdy5zdmcnKTtcbiAgICBtYXNrLWltYWdlOiB1cmwoJy9pbWFnZXMvZHJvcGRvd24tYXJyb3cuc3ZnJyk7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qtc2VhcmNoIHtcbiAgICBAYXBwbHkgY3Vyc29yLXBvaW50ZXIgYm9yZGVyIGJvcmRlci1uLTMwIHB5LTIuNTtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC1zZWFyY2g6Zm9jdXMge1xuICAgIEBhcHBseSBiZy1uLTEwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LXNlYXJjaDpmb2N1cyArIC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcjo6YWZ0ZXIge1xuICAgIEBhcHBseSBiZy1uLTEwO1xuICB9XG5cbiAgLnZ1ZV9fc2VsZWN0IHtcbiAgICBAYXBwbHkgbWItMiBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1zbSBsZWFkaW5nLTYgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDBweCAxNnB4IDU1cHg7XG4gICAgfVxuICAgIHBhZGRpbmc6IDEzcHggMHB4IDEzcHggNTVweDtcbiAgfVxufVxuLmVycm9yX2lucHV0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2QxMDAxZTtcbn1cblxuLnBhbmVsX19pbnB1dCB7XG4gIEBhcHBseSBib3gtYm9yZGVyIGgtMTAgdy1mdWxsIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIGJnLXBhcGVyIHB5LTIuNSBwbC03IHByLTMgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGFwcGx5IHRleHQteHMgZm9udC1ub3JtYWwgdGV4dC1uLTMwIGR1cmF0aW9uLTMwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgfVxuXG4gICY6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgICBAYXBwbHkgdGV4dC1uLTQwO1xuICB9XG59XG4uc2VhcmNoIHtcbiAgQGFwcGx5IHJlbGF0aXZlO1xuXG4gICZfX2lucHV0IHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTMwIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZTtcbiAgICBwYWRkaW5nOiAxMHB4IDQycHggMTBweCAzNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIH1cbiAgc3ZnIHtcbiAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0zIHRvcC0zIHRleHQtYmFzZSB0ZXh0LW4tMzA7XG4gIH1cbn1cbi5yZXF1aXJlZC1pY29uIHtcbiAgQGFwcGx5IHJlbGF0aXZlIHRvcC0wLjUgdGV4dC1iYXNlIGxlYWRpbmctbm9uZSB0ZXh0LWNyaW1zb24tNTA7XG59XG4iLCIuaWF0aS1saXN0LXRhYmxlIHtcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1uLTIwIHRleHQtbGVmdDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDVweCk7XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgfVxuXG4gIHRhYmxlIHtcbiAgICBAYXBwbHkgdGFibGUgdy1mdWxsICBiZy13aGl0ZTtcblxuICAgIC8vIG1pbi13aWR0aDogODAwcHggIWltcG9ydGFudCA7XG4gIH1cbiAgdGJvZHkge1xuICAgIHRyIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICAgICAgICBAYXBwbHkgYmctbi0xMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdHI6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICB0ZCxcbiAgICAgIHRoIHtcbiAgICAgICAgQGFwcGx5IHJlbGF0aXZlO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnICc7XG4gICAgICAgICAgQGFwcGx5IGFic29sdXRlIGxlZnQtMCBib3R0b20tMCBoLXB4IHctZnVsbCBtYXgtdy1mdWxsIGJnLW4tMjA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRkOmZpcnN0LWNoaWxkOmFmdGVyIHtcbiAgICAgICAgQGFwcGx5IG1sLTY7XG4gICAgICB9XG4gICAgICB0aC5jaGVjay1jb2x1bW46YWZ0ZXIge1xuICAgICAgICBAYXBwbHkgLW1sLTY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGgge1xuICAgIEBhcHBseSBweS00IHB4LTYgYWxpZ24tdG9wIHRleHQteHMgdXBwZXJjYXNlIGxlYWRpbmctbm9ybWFsO1xuXG4gICAgc3ZnIHtcbiAgICAgIEBhcHBseSBtci0xIHRleHQteGwgdGV4dC1uLTMwO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgQGFwcGx5IGZsZXg7XG4gICAgICBzdmcge1xuICAgICAgICBAYXBwbHkgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRkIHtcbiAgICBAYXBwbHkgcmVsYXRpdmUgcHktNCBweC02IGFsaWduLXRvcCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZDtcbiAgfVxuXG4gIHRyLmFscmVhZHktcHVibGlzaGVkIHtcbiAgICB0ZCxcbiAgICB0aC5jaGVjay1jb2x1bW4ge1xuICAgICAgQGFwcGx5IHB0LTExO1xuICAgIH1cbiAgfVxuXG4gIC5oYXMtc3RhdHVzIHtcbiAgICB0ZCB7XG4gICAgICBAYXBwbHkgcHgtNiBwdC0xMSBwYi03O1xuICAgIH1cbiAgICB0aCB7XG4gICAgICBAYXBwbHkgcHgtNiBwdC0xMSBwYi03O1xuICAgIH1cbiAgfVxuXG4gIC5jaGVjay1jb2x1bW4gLmNoZWNrYm94IHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gIH1cbn1cblxuLnVwbG9hZC1saXN0LXRhYmxlIHtcbiAgLnVwbG9hZC1lcnJvciB7XG4gICAgQGFwcGx5IGJnLXJvc2U7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIEBhcHBseSBiZy1yb3NlO1xuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gIH1cblxuICAudXBsb2FkLWVycm9yLWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICBkaXYge1xuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgQGFwcGx5IGJvcmRlci1iIGJvcmRlci1iLW4tMjAgcGItNDtcbiAgICAgIH1cblxuICAgICAgdWwge1xuICAgICAgICBAYXBwbHkgbXQtNCBzcGFjZS15LTQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWJsdWVjb3JhbDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzZweDtcblxuICAgICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgIEBhcHBseSBib3JkZXItYiBib3JkZXItYi1uLTIwIHBiLTQ7XG4gICAgICAgIH1cblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDhweDtcbiAgICAgICAgICBsZWZ0OiAyMHB4O1xuICAgICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIEBhcHBseSBiZy1ibHVlY29yYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm9wZW4ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLnVwbG9hZC1lcnJvci1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAyNnB4O1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgc3ZnIHtcbiAgICAgIGZvbnQtc2l6ZTogNnB4O1xuICAgIH1cblxuICAgICYub3BlbiB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cbiAgfVxufVxuXG4jY2Ige1xuICB3aWR0aDogNjhweDtcbn1cblxuI3N0YXR1cyB7XG4gIHdpZHRoOiAxOTJweDtcbn1cblxuI3B1Ymxpc2gge1xuICB3aWR0aDogMjgwcHg7XG59XG5cbiNkYXRlIHtcbiAgd2lkdGg6IDE3M3B4O1xufVxuLmlhdGktbGlzdC10YWJsZSB7XG4gIHRyIHtcbiAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xuICB9XG4gIHRkOm50aC1jaGlsZCgxKSB7XG4gICAgbWF4LXdpZHRoOiAxNTBweCAhaW1wb3J0YW50O1xuXG4gICAgYSB7XG4gICAgICBtYXgtd2lkdGg6IDE0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxufVxuIiwiLmNoZWNrYm94IHtcbiAgQGFwcGx5IHJlbGF0aXZlIGJsb2NrIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lO1xuICAuY2hlY2ttYXJrIHtcbiAgICBAYXBwbHkgZmxleCBoLTQgdy00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJvcmRlci0yIGJvcmRlci1uLTIwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG4gICAgJjphZnRlciB7XG4gICAgICBib3JkZXItd2lkdGg6IDAgM3B4IDNweCAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgbWItMC41IGhpZGRlbiBoLTIgdy1bNXB4XSByb3RhdGUtNDUgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG4gIH1cbiAgaW5wdXQge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBoLTAgdy0wIGN1cnNvci1wb2ludGVyIG9wYWNpdHktMDtcbiAgICAmOmNoZWNrZWQgfiAuY2hlY2ttYXJrIHtcbiAgICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwO1xuICAgICAgJjphZnRlciB7XG4gICAgICAgIEBhcHBseSBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgJjpob3ZlciBpbnB1dCB+IC5jaGVja21hcmsge1xuICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwO1xuICB9XG59XG4vKipcbiAgTGFyYXZlbCBmb3JtIGRlc2lnblxuICovXG5mb3JtIHtcbiAgLmZvcm0tZmllbGQtZ3JvdXAge1xuICAgIEBhcHBseSByZWxhdGl2ZSBwLTM7XG4gICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIEBhcHBseSBtYi02O1xuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkIHtcbiAgICAgIEBhcHBseSBwLTM7XG4gICAgICAuaGVscC10ZXh0IHtcbiAgICAgICAgQGFwcGx5IG10LTIgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGJ1dHRvbi5kZWxldGUtaXRlbSB7XG4gICAgQGFwcGx5IGFic29sdXRlIGgtOCB3LTggY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtZnVsbCBiZy1uLTQwIC1pbmRlbnQtNDA7XG4gICAgJjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWFnZXMvdHJhc2hfZnVsbC5zdmcnKSBuby1yZXBlYXQgY2VudGVyO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0xLzIgdG9wLTEvMiBoLVsxOHB4XSB3LVsxOHB4XSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzI7XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbiAgICB9XG4gIH1cblxuICAuZm9ybS1maWVsZC1ncm91cC1vdXRlciAuZm9ybS1maWVsZCB7XG4gICAgQGFwcGx5IHB4LTM7XG4gIH1cblxuICAuZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgQGFwcGx5IG1iLTIgZmxleCBqdXN0aWZ5LWJldHdlZW47XG4gICAgbGFiZWwge1xuICAgICAgQGFwcGx5IHRleHQteHMgbGVhZGluZy1yZWxheGVkO1xuICAgIH1cbiAgICAucmVxdWlyZWQge1xuICAgICAgQGFwcGx5IGZvbnQtYm9sZCB0ZXh0LXNhbG1vbi01MDtcbiAgICB9XG4gIH1cbiAgaW5wdXRbdHlwZT0ndGV4dCddLFxuICBpbnB1dFt0eXBlPSdkYXRlJ10sXG4gIHRleHRhcmVhIHtcbiAgICBAYXBwbHkgbXQtMCBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTIuNSB0ZXh0LXNtIGxlYWRpbmctbm9ybWFsIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICAgIH1cbiAgICAmOmZvY3VzIHtcbiAgICAgIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgICB9XG4gICAgJjpmb2N1czo6cGxhY2Vob2xkZXIge1xuICAgICAgQGFwcGx5IHRleHQtbi01MDtcbiAgICB9XG4gIH1cblxuICBpbnB1dFt0eXBlPSd0ZXh0J10sXG4gIGlucHV0W3R5cGU9J2RhdGUnXSB7XG4gICAgQGFwcGx5IGgtMTI7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIEBhcHBseSB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgcHgtNCBweS0zIHRleHQtc20gdGV4dC1uLTQwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgJjpmb2N1cyB7XG4gICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gICAgfVxuICB9XG4gIC5oZWxwIHtcbiAgICBAYXBwbHkgcmVsYXRpdmU7XG4gICAgJl9fdGV4dCB7XG4gICAgICBAYXBwbHkgaW52aXNpYmxlIGFic29sdXRlIHRvcC00IHotMjAgc3BhY2UteS0xLjUgcm91bmRlZCBiZy1lZ2dzaGVsbCBwLTQgdGV4dC1sZWZ0IHRleHQteHMgdGV4dC1uLTQwIG9wYWNpdHktMCBkdXJhdGlvbi0yMDA7XG4gICAgICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiKDAgMCAwIC8gMTAlKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICAgIH1cbiAgfVxuICAuaGVscDpob3ZlciB7XG4gICAgLmhlbHBfX3RleHQge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cbiAgLmFkZF9tb3JlIHtcbiAgICBAYXBwbHkgcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGgtMS8yIHctcHggYm9yZGVyLWwgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTIvNCBoLXB4IHctMy41IC10cmFuc2xhdGUteS0xLzIgYm9yZGVyLWIgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG5cbiAgICBpIHtcbiAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1hZ2VzL2FkZC1tb3JlLWdyZWVuLnN2ZycpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgfVxuICB9XG4gIC5zdWJlbGVtZW50IHtcbiAgICAmLmJvcmRlci1sID4gbGFiZWwge1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICAgIC5zdWJlbGVtZW50LFxuICAgIC5zdWJlbGVtZW50ICsgYnV0dG9uIHtcbiAgICAgIEBhcHBseSBtbC02O1xuICAgIH1cblxuICAgIC53cmFwcGVkLWNoaWxkLWJvZHkge1xuICAgICAgQGFwcGx5IHJlbGF0aXZlO1xuICAgICAgPiAuZGVsZXRlLXBhcmVudCB7XG4gICAgICAgIEBhcHBseSBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAubXVsdGktZm9ybTpvbmx5LW9mLXR5cGUgPiAuZGVsZXRlLXBhcmVudCxcbiAgICAud3JhcHBlZC1jaGlsZC1ib2R5Om9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50IHtcbiAgICAgIEBhcHBseSBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tZmllbGQtZ3JvdXA6b25seS1vZi10eXBlID4gLmRlbGV0ZS1pdGVtIHtcbiAgICBAYXBwbHkgaGlkZGVuO1xuICB9XG5cbiAgLyoqXG4gICogQ29uZGl0aW9uIHRvIHNob3cgYW5kIGRlbGV0ZSBjb2xsZWN0aW9uIGVycm9yIGluIGZvcm1cbiAgKi9cbiAgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAubXVsdGktZm9ybSArIC5jb2xsZWN0aW9uX2Vycm9yLFxuICAuZm9ybS1maWVsZC1ncm91cCArIC5jb2xsZWN0aW9uX2Vycm9yLFxuICAud3JhcHBlZC1jaGlsZC1ib2R5ICsgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbi8qKlxuICBTZWxlY3QgMiBmaWVsZFxuKi9cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuICAgIEBhcHBseSBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LW4tNDAgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgICAgIEBhcHBseSBwLTAgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gICAgICBAYXBwbHkgaC0xMTtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciBzcGFuIHtcbiAgICAgIEBhcHBseSBtci0yLjUgdGV4dC1zbTtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlciB7XG4gICAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDA7XG4gICAgfVxuICB9XG4gIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF0ge1xuICAgIGNvbG9yOiAjMWYyOTM3O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjY7XG4gIH1cbiAgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIHtcbiAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNTA7XG4gIH1cbn1cbi5tYXgtdy1oYWxmIHtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5cbi8qKlxuICBBY3Rpdml0eSBEZXRhaWwgUGFnZVxuKi9cbi5hY3Rpdml0aWVzIHtcbiAgQGFwcGx5IGZsZXggZ2FwLTUgeGw6Z2FwLTc7XG5cbiAgJl9fc2lkZWJhciB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgd2lkdGg6IDI4MHB4O1xuXG4gICAgJi1pbm5lciB7XG4gICAgICBvcmRlcjogMTtcbiAgICB9XG4gIH1cblxuICAmX19jb250ZW50IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDUwcHgpO1xuICAgIH1cbiAgfVxuXG4gICZfX2NhcmQge1xuICAgIEBhcHBseSBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1uLTQwO1xuICAgIHBhZGRpbmc6IDEzcHg7XG4gIH1cblxuICAucHJvZ3Jlc3Mge1xuICAgIEBhcHBseSBpdGVtcy1jZW50ZXI7XG4gICAgd2lkdGg6IDE1MXB4O1xuICAgIG1pbi1oZWlnaHQ6IDE3NHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweCAwcHggMHB4IDhweDtcbiAgfVxuXG4gIC50YWItYnRuOmRpc2FibGVkIHtcbiAgICBAYXBwbHkgcG9pbnRlci1ldmVudHMtbm9uZSB0ZXh0LW4tMjA7XG5cbiAgICBzdmcge1xuICAgICAgQGFwcGx5IHRleHQtbi0yMDtcbiAgICB9XG4gIH1cbiAgLmhvdmVyLXRleHQge1xuICAgIHN2ZyB7XG4gICAgICBAYXBwbHkgdGV4dC1uLTMwO1xuICAgIH1cbiAgfVxufVxuLmVsZW1lbnRzLWNhcmQge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ubWFudWFsLWltcG9ydCB7XG4gIC5oZWxwX190ZXh0IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAzNTBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG4ucmVnaXN0cnlfX2luZm8sXG4ucmVnaXN0ZXIsXG5hc2lkZSB7XG4gIC5oZWxwX190ZXh0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgIWltcG9ydGFudDtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAyNTBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuLmltcG9ydC1hY3Rpdml0eSxcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IHtcbiAgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xuICB9XG59XG5hc2lkZSB7XG4gIC5wcm9ncmVzcyB7XG4gICAgLmhlbHBfX3RleHQge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00NSUpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4uYWN0aXZpdGllc19fY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnRhYi1idG4ge1xuICAuaGVscF9fdGV4dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgbGVmdDogMDtcbiAgICB9XG4gIH1cbn1cbi5hY3Rpdml0eS1kZWZhdWx0LXZhbHVlIHtcbiAgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSkgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLnBhZ2luYXRpb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgei0wIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW4tNDA7XG5cbiAgPiBhLFxuICA+IHNwYW4ge1xuICAgIEBhcHBseSBmbGV4IGJvcmRlci15IGJvcmRlci1sIGJvcmRlci1uLTIwIHB5LTEuNSBweC0zO1xuXG4gICAgJjpub3QoLnByZXYtYnRuKSB7XG4gICAgICBAYXBwbHkgYm9yZGVyLWwgYm9yZGVyLW4tMjA7XG4gICAgfVxuXG4gICAgJi5wcmV2LWJ0bixcbiAgICAmLm5leHQtYnRuIHtcbiAgICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1uLTEwO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAYXBwbHkgdGV4dC14cztcbiAgICAgIH1cbiAgICB9XG4gICAgJi5wcmV2LWJ0biB7XG4gICAgICBAYXBwbHkgcm91bmRlZC10bCByb3VuZGVkLWJsO1xuICAgIH1cblxuICAgICYubmV4dC1idG4ge1xuICAgICAgQGFwcGx5IHJvdW5kZWQtYnIgcm91bmRlZC10ciBib3JkZXItcjtcbiAgICB9XG5cbiAgICAmLnByZXYtYnRuIHN2ZyB7XG4gICAgICBAYXBwbHkgbXItMTtcbiAgICB9XG5cbiAgICAmLm5leHQtYnRuIHN2ZyB7XG4gICAgICBAYXBwbHkgbWwtMTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICYuY3VycmVudCB7XG4gICAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtcGFwZXI7XG4gICAgfVxuICB9XG59XG4iLCIub3ZlcmxheSB7XG4gIEBhcHBseSBmaXhlZCBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbCBiZy1ibGFjaztcbiAgei1pbmRleDogMTAwO1xuICBvcGFjaXR5OiAwLjc7XG5cbiAgJl9faW5uZXIge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbDtcbiAgfVxuXG4gICZfX2NvbnRlbnQge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTIvNCB0b3AtMi80O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgLnNwaW5uZXIge1xuICAgICAgQGFwcGx5IGlubGluZS1ibG9jayBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1uLTEwIGJvcmRlci1vcGFjaXR5LTU7XG4gICAgICB3aWR0aDogNzVweDtcbiAgICAgIGhlaWdodDogNzVweDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxufVxuIiwiLnNlbGVjdDItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjdmOTtcbiAgfVxuXG4gIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICY6Zm9jdXMtd2l0aGluIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyYTJmMzA7XG4gICAgfVxuXG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgfVxuICB9XG59XG5cbi5zZWxlY3QyLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTAwMDAwcHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHtcbiAgcGFkZGluZzogNnB4O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAmW2FyaWEtc2VsZWN0ZWRdIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbn1cblxuLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIHtcbiAgLnNlbGVjdDItZHJvcGRvd24ge1xuICAgIGxlZnQ6IDA7XG5cbiAgICAmLS1hYm92ZSB7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWJlbG93IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxufVxuXG4uc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDRweDtcblxuICAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYTZiNWJhO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcblxuICAgICY6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5bdHlwZT0nc2VhcmNoJ10ge1xuICBvdXRsaW5lLWNvbG9yOiAjYTZiNWJhO1xuICBvdXRsaW5lLW9mZnNldDogMDtcbn1cblxuLnNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDFweCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50O1xuICBtYXJnaW46IC0xcHggIWltcG9ydGFudDtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xuICBjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCB7XG4gIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgICAgIGNvbG9yOiAjMTU1MzY2O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgfVxuXG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAjOTk5O1xuICAgIH1cblxuICAgIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICByaWdodDogMXB4O1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBoZWlnaHQ6IDI2cHg7XG5cbiAgICAgIGIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtNHB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogNXB4IDRweCAwIDRweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLnNlbGVjdDItcmVzdWx0cyA+IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMge1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cbn1cblxuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIHtcbiAgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gICAgYiB7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM4ODggdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItd2lkdGg6IDAgNHB4IDVweCA0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUge1xuICAgIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAmLnNlbGVjdDItY29udGFpbmVyLS1iZWxvdyB7XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLnNpZGViYXItb3Blbi1pY29uIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBoZWlnaHQ6IDQwcHg7XG4gIGxlZnQ6IDBweDtcbiAgYm90dG9tOiA1MHB4O1xuICB6LWluZGV4OiA2MDtcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZGRlMDtcbiAgcGFkZGluZzogMCA1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTAwJSAxMDAlIDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogbm9uZTtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGNvbG9yOiAjMTU1MzY2O1xuICB9XG59XG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyODBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG5cbiAgc3ZnIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgY29sb3I6ICMxNTUzNjY7XG4gIH1cbn1cbi5zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyNzVweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gICAgbGVmdDogMjQwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIGNvbG9yOiAjMTU1MzY2O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzL2FwcC5jc3MiLCJtYXBwaW5ncyI6IkFBQUE7O0NBQUE7OztDQUFBOztBQUFBOzs7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztFQUFBO0FBQUE7O0FBQUE7Ozs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtLQUFBO0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7Ozs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBO0VBQUE7VUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOzs7Ozs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7Ozs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOztFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7OztDQUFBOztBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7Ozs7Q0FBQTs7QUFBQTs7Ozs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBOztFQUFBO0FBQUE7O0FBQUE7OztDQUFBOztBQUFBOzs7O0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOztDQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7O0NBQUE7O0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOzs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFBQTtBQUFBOztBQUFBO0VBQUE7RUFBQTtBQUFBOztBQUFBO0VBQUE7QUFBQTs7QUFBQTs7O0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7RUFBQTtBQUFBOztBQUFBOzs7Q0FBQTs7QUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFBQTs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7O0NBQUE7O0FBQUE7O0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTtBQUFBO0VBQUE7QUFBQTs7QUFBQTs7OztDQUFBOztBQUFBOzs7Ozs7OztFQUFBO0VBQUE7QUFBQTs7QUFBQTs7Q0FBQTs7QUFBQTs7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUNBQTtFQUFBO0FBQUE7QUFBQTs7RUFBQTtJQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FBQUE7O0VBQUE7SUFBQTtFQUFBO0FBQUE7QUFBQTs7RUFBQTtJQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FDQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBOztFQUFBO0lBQUE7RUFBQTtBQUFBO0FBQUE7O0VBQUE7SUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO1VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7QUFBQTtBQ0FBO0VBQ0U7RUFDQTtFQUNBO0VBR0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBR0E7RUFDQTtFQUVBO0VBQ0E7RUFJQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFHQTtFQUNBO0VBQ0E7RUFDQTtBQ1pGOztBQ3pEQTtFQUNFO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFRDRERjtBQUNGO0FDMURBO0VBQ0U7RUFDQTtBRDRERjs7QUMxREE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFBQTtFQUNBO0FENkRGOztBQzFERTtFQUFBO0VBQUE7RUFDQTtBQURB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SEY7SUFJSTtFUnFxQko7QUFDRjtBUW5xQk07RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtFQUNBO0FBRkE7QUFNQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFJSjtFQUNFO0FSbXFCSjtBUS9wQkk7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQU1GO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0FBQUE7O0FBTUY7RUFBQTtFQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0U7RUFBQTtFQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUNBO0FBREE7QUFFQTtFQUNFO0VBQ0E7QVI2cEJOO0FRMXBCTTtFQUFBO0VBQUE7QUFBQTtBQUlGO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtBQUFBO0FBR0Y7RUFDRTtFQUNBO0FSMHBCSjs7QVFwcEJFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtBQURBO0FBSUU7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0FBQUE7O0FBS0Y7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtBQURBO0FBSUU7RUFBQTtFQUFBO0FBQUE7O0FBS0Y7RUFBQTtBQUFBOztBQUlBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBS0Y7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTs7QUFJ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QUFBO0VBQUE7QUFBQTtBQUdFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7QUFEQTtBQUtBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0FBQUE7O0FBSUY7RUFBQTtBQUFBO0FBR0U7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtFQUNBO0FBRkE7QUFLQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7O0FBSUY7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBOztBQzNKQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFDQTtBQURBO0FBR0E7RUFKRjtJQUtJO0lBQ0E7RVhxa0NGO0FBQ0Y7QVdsa0NJO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQU1FO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFBQTtBWGlrQ1I7QVczakNROztFQUFBO0FBQUE7QUFDQTs7RUFDRTtFQUNBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QVhpa0NWO0FXN2pDUTtFQUFBO0FBQUE7QUFHQTtFQUFBO0FBQUE7QUFNSjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0U7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFNSjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBTUU7O0VBQUE7QUFBQTtBQU1BO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUdBO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUlKO0VBQ0U7QVhtakNKOztBVzdpQ0k7RUFBQTtFQUFBO0FBQUE7QUFHRTtFQUFBO0VBQUE7QUFBQTtBQUdGO0VBQ0U7QVhnakNOO0FXNWlDRTtFQUNFO0FYOGlDSjtBVzFpQ1E7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0Y7RUFDRTtFQUNBO0FYMmlDUjtBV3hpQ1U7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7QVgwaUNWO0FXcmlDSTtFQUNFO0FYdWlDTjtBV25pQ0U7RUFDRTtFQUNBO0VBQ0E7QVhxaUNKO0FXbmlDSTtFQUNFO0FYcWlDTjtBV2xpQ0k7RUFDRTtBWG9pQ047O0FXL2hDQTtFQUNFO0FYa2lDRjs7QVcvaENBO0VBQ0U7QVhraUNGOztBVy9oQ0E7RUFDRTtBWGtpQ0Y7O0FXL2hDQTtFQUNFO0FYa2lDRjs7QVcvaENFO0VBQ0U7QVhraUNKO0FXaGlDRTtFQUNFO0FYa2lDSjtBV2hpQ0k7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FYa2lDTjs7QVkvc0NFO0VBQUE7RUFBQTtFQUFBO0VBQUE7S0FBQTtVQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUNBO0FBREE7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FacXRDTjtBWWp0Q0k7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7QUFBQTtBQUVFO0VBQUE7QUFBQTtBQUtKO0VBQUE7RUFBQTtBQUFBOztBQUdKOztFQUFBO0FBR0E7RUEwSEU7O0dBQUE7QVo2bENGO0FZcnRDSTtFQUFBO0VBQUE7QUFBQTtBQUVFO0VBQUE7QUFBQTtBQUlBO0VBQUE7QUFBQTtBQUVFO0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUtKO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0Fad3RDTjtBWXJ0Q007RUFBQTtFQUFBO0FBQUE7QUFLRjtFQUFBO0VBQUE7QUFBQTtBQUlBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBR0E7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQU1GOzs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTs7O0VBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQTtBQUdBOzs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFHQTtFQUFBO0VBQUE7QUFBQTtBQUFBOzs7RUFBQTtFQUFBO0FBQUE7QUFNRjs7RUFBQTtBQUFBO0FBSUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBRUU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFJRjtFQUFBO0FBQUE7QUFFRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQ0E7RUFDQTtBQUZBO0FBTUY7RUFDRTtFQUNBO0VBQ0E7QVp3dENOO0FZcHRDSTtFQUFBO0FBQUE7QUFDQTtFQUNFO0VBQ0E7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBWnd0Q047QVl4dENNO0VBQUE7QUFBQTtBQUVGO0VBQ0U7RUFDQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtBWnd0Q047QVlydENJ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REE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FmNmlERjs7QWUxaURBO0VBQ0U7RUFDQTtFQUNBO09BQUE7QWY2aURGO0FlM2lERTtFQUNFO0FmNmlESjs7QWV4aURFO0VBQ0U7QWYyaURKO0FlemlESTtFQUNFO0VBQ0E7RUFDQTtBZjJpRE47QWV4aURJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7QWYwaUROOztBZXJpREE7RUFDRTtFQUNBO0Fmd2lERjtBZXRpREU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0Fmd2lESjtBZXRpREk7RUFDRTtBZndpRE47O0FlbmlEQTtFQUNFO0VBQ0E7QWZzaURGOztBZW5pREE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0Fmc2lERjs7QWVqaURJO0VBQ0U7RUFDQTtBZm9pRE47QWVqaURJO0VBQ0U7RUFDQTtFQUNBO0FmbWlETjtBZWhpREk7RUFDRTtBZmtpRE47QWUvaERJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBZmlpRE47QWUvaERNO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QWZpaURSO0FlN2hERTtFQUNFO0VBQ0E7QWYraERKOztBZXpoREk7RUFDRTtFQUNBO0FmNGhETjtBZXZoREk7RUFDRTtFQUNBO0FmeWhETjtBZXBoREk7RUFDRTtFQUNBO0Fmc2hETjs7QWdCaHNEQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBaEJtc0RGO0FnQmxzREU7RUFiRjtJQWNJO0VoQnFzREY7QUFDRjtBZ0Juc0RFO0VBQ0U7QWhCcXNESjtBZ0Jsc0RFO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7QWhCb3NESjs7QWdCanNEQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QWhCb3NERjtBZ0Jsc0RFO0VBQ0U7RUFDQTtBaEJvc0RKOztBZ0Jqc0RBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBaEJvc0RGO0FnQmxzREU7RUFiRjtJQWNJO0lBQ0E7RWhCcXNERjtBQUNGO0FnQm5zREU7RUFDRTtFQUNBO0FoQnFzREo7QUp2d0RBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTtFQUFBLHVCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHVCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLG1CcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHNCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHNCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLGlCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLGlCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLHFCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLCtCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBLCtCcUJBQTtFckJBQTtDcUJBQTtBckJBQTtFQUFBO0NxQkFBO0FyQkFBO0VBQUEsdUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEsbUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEsbUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEsbUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEsZ0NxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEscUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEscUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEscUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUEscUJxQkFBO0VyQkFBO0NxQkFBO0FyQkFBO0VBQUE7Q3FCQUE7QXJCQUE7RUFBQSxzQnFCQUE7RXJCQUE7Q3FCQUE7QXJCQUE7RUFBQTtDcUJBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLG9CcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSx3QnFCQUE7SXJCQUEsK0RxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLGdDcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSwrQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLG9CcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxrQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsb0JxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLG1CcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxvQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsc0JxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHNCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxxQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSxnQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEsbUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBO0NBQUE7QXJCQUE7O0VBQUE7SUFBQSxnQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUEsNkJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLDRCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSxtQnFCQUE7SXJCQUE7R3FCQUE7Q0FBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxxQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7O0VyQkFBO0lBQUE7R3FCQUE7Q0FBQTtBckJBQTs7RUFBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBLGtCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQTtHcUJBQTs7RXJCQUE7SUFBQSx3QnFCQUE7SXJCQUEsd0RxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHFCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxrQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBLHNCcUJBQTtJckJBQTtHcUJBQTs7RXJCQUE7SUFBQSxtQnFCQUE7SXJCQUE7R3FCQUE7O0VyQkFBO0lBQUEscUJxQkFBO0lyQkFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBOztFckJBQTtJQUFBO0dxQkFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RhaWx3aW5kY3NzL2Jhc2UuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90YWlsd2luZGNzcy9jb21wb25lbnRzLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGFpbHdpbmRjc3MvdXRpbGl0aWVzLmNzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYWJzdHJhY3RzL192YXJpYWJsZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYXBwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2xheW91dHMvX2hlYWRlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2xheW91dHMvX2Zvb3Rlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19hY3Rpdml0eS5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9sYXlvdXRzL19zZXR0aW5nX3BhZ2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvbGF5b3V0cy9fd2VicG9ydGFscGFnZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvYmFzZS9fdHlwb2dyYXBoeS5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2J1dHRvbi5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2hhbWJ1cmdlci5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX2lucHV0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2NvbXBvbmVudC9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvY29tcG9uZW50L19mb3Jtcy5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL3Nhc3MvY29tcG9uZW50L19vdmVybGF5LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2NvbXBvbmVudC9fc2VsZWN0Mi5zY3NzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvc2Fzcy9jb21wb25lbnQvX3NpZGViYXItaWNvbi5zY3NzIiwid2VicGFjazovLy88bm8gc291cmNlPiJdLCJzb3VyY2VzQ29udGVudCI6WyJAdGFpbHdpbmQgYmFzZTtcbiIsIkB0YWlsd2luZCBjb21wb25lbnRzO1xuIiwiQHRhaWx3aW5kIHV0aWxpdGllcztcbiIsIjpyb290IHtcbiAgLS1ibGFjazogMCwgMCwgMDtcbiAgLS13aGl0ZTogMjU1LCAyNTUsIDI1NTtcbiAgLS10cmFuc3BhcmVudDogdHJhbnNwYXJlbnQ7XG5cbiAgLy8gTmV1dHJhbHNcbiAgLS1uLTA6IDI1NSwgMjU1LCAyNTU7XG4gIC0tbi0xMDogMjQxLCAyNDcsIDI0OTtcbiAgLS1uLTIwOiAyMTMsIDIyMCwgMjIyO1xuICAtLW4tMzA6IDE2NiwgMTgxLCAxODY7XG4gIC0tbi00MDogMTA0LCAxMjEsIDEyNjtcbiAgLS1uLTUwOiA0MiwgNDcsIDQ4O1xuXG4gIC8vIFByaW1hcnkgY29sb3JzXG4gIC0tdHVycXVvaXNlOiA2LCAyMTksIDIyODtcbiAgLS1ibHVlY29yYWw6IDIxLCA4MywgMTAyO1xuXG4gIC0tYmx1ZWNvcmFsLTQwOiA2MCwgMTEyLCAxMjg7XG4gIC0tYmx1ZWNvcmFsLTUwOiAyMSwgODMsIDEwMjtcblxuICAvLyBTZWNvbmRhcnkgY29sb3JzXG4gIC8vIENhbWVsXG4gIC0tY2FtZWwtMTA6IDI1MiwgMjM5LCAyMjg7XG4gIC0tY2FtZWwtMjA6IDI0OSwgMjE5LCAxOTM7XG4gIC0tY2FtZWwtMzA6IDI0OCwgMjA3LCAxNzM7XG4gIC0tY2FtZWwtNDA6IDI0NiwgMTk1LCAxNTI7XG4gIC0tY2FtZWwtNTA6IDI0NCwgMTgzLCAxMzI7XG4gIC8vIFRlYWxcbiAgLS10ZWFsLTEwOiAyMzEsIDI0MywgMjQxO1xuICAtLXRlYWwtMjA6IDIxNSwgMjM1LCAyMzI7XG4gIC0tdGVhbC0zMDogMTk1LCAyMjQsIDIyMDtcbiAgLS10ZWFsLTQwOiAxNzUsIDIxNCwgMjA5O1xuICAtLXRlYWwtNTA6IDEzNSwgMTk0LCAxODY7XG4gIC8vIFNwcmluZ1xuICAtLXNwcmluZy0xMDogMTc4LCAyMjEsIDIxMTtcbiAgLS1zcHJpbmctMjA6IDEzOSwgMjA0LCAxODk7XG4gIC0tc3ByaW5nLTMwOiAxMDAsIDE4NywgMTY3O1xuICAtLXNwcmluZy00MDogNjIsIDE3MCwgMTQ1O1xuICAtLXNwcmluZy01MDogMjMsIDE1MywgMTIzO1xuICAvLyBMYWdvb25cbiAgLS1sYWdvb24tMTA6IDIwOSwgMjM4LCAyNDA7XG4gIC0tbGFnb29uLTIwOiAxNzgsIDIyNywgMjI5O1xuICAtLWxhZ29vbi0zMDogMTM5LCAyMTMsIDIxNjtcbiAgLS1sYWdvb24tNDA6IDEwMSwgMjAwLCAyMDQ7XG4gIC0tbGFnb29uLTUwOiAyNCwgMTcyLCAxNzg7XG4gIC8vIFNhbG1vblxuICAtLXNhbG1vbi0xMDogMjU1LCAyMjcsIDIyNDtcbiAgLS1zYWxtb24tMjA6IDI1NSwgMjA4LCAyMDM7XG4gIC0tc2FsbW9uLTMwOiAyNTUsIDE4NCwgMTc3O1xuICAtLXNhbG1vbi00MDogMjU1LCAxNjEsIDE1MjtcbiAgLS1zYWxtb24tNTA6IDI1NSwgMTE0LCAxMDA7XG4gIC8vIExhdmVuZGVyXG4gIC0tbGF2ZW5kZXItMTA6IDIzNywgMjI2LCAyNTE7XG4gIC0tbGF2ZW5kZXItMjA6IDIyNSwgMjA3LCAyNDg7XG4gIC0tbGF2ZW5kZXItMzA6IDIxMCwgMTgyLCAyNDQ7XG4gIC0tbGF2ZW5kZXItNDA6IDE5NiwgMTU4LCAyNDA7XG4gIC0tbGF2ZW5kZXItNTA6IDE2NiwgMTEwLCAyMzM7XG4gIC0tbGF2ZW5kZXItNjA6IDI0NiwgMjQwLCAyNTU7XG4gIC8vIENyaW1zb25cbiAgLS1jcmltc29uLTEwOiAyNTUsIDI0OCwgMjQ3O1xuICAtLWNyaW1zb24tMjA6IDI1MCwgMjEzLCAyMTU7XG4gIC0tY3JpbXNvbi0zMDogMjQxLCAxNTUsIDE2MDtcbiAgLS1jcmltc29uLTQwOiAyMjcsIDc3LCA5MTtcbiAgLS1jcmltc29uLTUwOiAyMDksIDAsIDMwO1xuXG4gIC8vIFBhc3RlbCBjb2xvcnNcbiAgLS1lZ2dzaGVsbDogMjU1LCAyNTMsIDIzMTtcbiAgLS1taW50OiAyMzgsIDI0OSwgMjQ1O1xuICAtLXJvc2U6IDI1NSwgMjQxLCAyNDA7XG4gIC0tcGFwZXI6IDI0NiwgMjQ3LCAyNTI7XG59XG4iLCJAdGFpbHdpbmQgYmFzZTtcbkB0YWlsd2luZCBjb21wb25lbnRzO1xuQHRhaWx3aW5kIHV0aWxpdGllcztcbjpyb290IHtcbiAgLS1ibGFjazogMCwgMCwgMDtcbiAgLS13aGl0ZTogMjU1LCAyNTUsIDI1NTtcbiAgLS10cmFuc3BhcmVudDogdHJhbnNwYXJlbnQ7XG4gIC0tbi0wOiAyNTUsIDI1NSwgMjU1O1xuICAtLW4tMTA6IDI0MSwgMjQ3LCAyNDk7XG4gIC0tbi0yMDogMjEzLCAyMjAsIDIyMjtcbiAgLS1uLTMwOiAxNjYsIDE4MSwgMTg2O1xuICAtLW4tNDA6IDEwNCwgMTIxLCAxMjY7XG4gIC0tbi01MDogNDIsIDQ3LCA0ODtcbiAgLS10dXJxdW9pc2U6IDYsIDIxOSwgMjI4O1xuICAtLWJsdWVjb3JhbDogMjEsIDgzLCAxMDI7XG4gIC0tYmx1ZWNvcmFsLTQwOiA2MCwgMTEyLCAxMjg7XG4gIC0tYmx1ZWNvcmFsLTUwOiAyMSwgODMsIDEwMjtcbiAgLS1jYW1lbC0xMDogMjUyLCAyMzksIDIyODtcbiAgLS1jYW1lbC0yMDogMjQ5LCAyMTksIDE5MztcbiAgLS1jYW1lbC0zMDogMjQ4LCAyMDcsIDE3MztcbiAgLS1jYW1lbC00MDogMjQ2LCAxOTUsIDE1MjtcbiAgLS1jYW1lbC01MDogMjQ0LCAxODMsIDEzMjtcbiAgLS10ZWFsLTEwOiAyMzEsIDI0MywgMjQxO1xuICAtLXRlYWwtMjA6IDIxNSwgMjM1LCAyMzI7XG4gIC0tdGVhbC0zMDogMTk1LCAyMjQsIDIyMDtcbiAgLS10ZWFsLTQwOiAxNzUsIDIxNCwgMjA5O1xuICAtLXRlYWwtNTA6IDEzNSwgMTk0LCAxODY7XG4gIC0tc3ByaW5nLTEwOiAxNzgsIDIyMSwgMjExO1xuICAtLXNwcmluZy0yMDogMTM5LCAyMDQsIDE4OTtcbiAgLS1zcHJpbmctMzA6IDEwMCwgMTg3LCAxNjc7XG4gIC0tc3ByaW5nLTQwOiA2MiwgMTcwLCAxNDU7XG4gIC0tc3ByaW5nLTUwOiAyMywgMTUzLCAxMjM7XG4gIC0tbGFnb29uLTEwOiAyMDksIDIzOCwgMjQwO1xuICAtLWxhZ29vbi0yMDogMTc4LCAyMjcsIDIyOTtcbiAgLS1sYWdvb24tMzA6IDEzOSwgMjEzLCAyMTY7XG4gIC0tbGFnb29uLTQwOiAxMDEsIDIwMCwgMjA0O1xuICAtLWxhZ29vbi01MDogMjQsIDE3MiwgMTc4O1xuICAtLXNhbG1vbi0xMDogMjU1LCAyMjcsIDIyNDtcbiAgLS1zYWxtb24tMjA6IDI1NSwgMjA4LCAyMDM7XG4gIC0tc2FsbW9uLTMwOiAyNTUsIDE4NCwgMTc3O1xuICAtLXNhbG1vbi00MDogMjU1LCAxNjEsIDE1MjtcbiAgLS1zYWxtb24tNTA6IDI1NSwgMTE0LCAxMDA7XG4gIC0tbGF2ZW5kZXItMTA6IDIzNywgMjI2LCAyNTE7XG4gIC0tbGF2ZW5kZXItMjA6IDIyNSwgMjA3LCAyNDg7XG4gIC0tbGF2ZW5kZXItMzA6IDIxMCwgMTgyLCAyNDQ7XG4gIC0tbGF2ZW5kZXItNDA6IDE5NiwgMTU4LCAyNDA7XG4gIC0tbGF2ZW5kZXItNTA6IDE2NiwgMTEwLCAyMzM7XG4gIC0tbGF2ZW5kZXItNjA6IDI0NiwgMjQwLCAyNTU7XG4gIC0tY3JpbXNvbi0xMDogMjU1LCAyNDgsIDI0NztcbiAgLS1jcmltc29uLTIwOiAyNTAsIDIxMywgMjE1O1xuICAtLWNyaW1zb24tMzA6IDI0MSwgMTU1LCAxNjA7XG4gIC0tY3JpbXNvbi00MDogMjI3LCA3NywgOTE7XG4gIC0tY3JpbXNvbi01MDogMjA5LCAwLCAzMDtcbiAgLS1lZ2dzaGVsbDogMjU1LCAyNTMsIDIzMTtcbiAgLS1taW50OiAyMzgsIDI0OSwgMjQ1O1xuICAtLXJvc2U6IDI1NSwgMjQxLCAyNDA7XG4gIC0tcGFwZXI6IDI0NiwgMjQ3LCAyNTI7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC53cmFwcGVyOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDI5MnB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWFnZXMvbWFycXVlLXdoaXRlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTYuNSU7XG4gICAgYmFja2dyb3VuZC1zaXplOiA3MCU7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbn1cbi5oZWFkZXIge1xuICBtYXgtd2lkdGg6IDExNjZweDtcbiAgbWFyZ2luOiBhdXRvO1xufVxuXG4ubmF2X19hY3RpdmU6OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDRweDtcbiAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmxpbmtzX19hY3RpdmUge1xuICBAYXBwbHkgdGV4dC1ibGFjaztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5uYXZfX2xpbmtzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAyMHB4IDhweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuLm5hdl9fbGlua3MgYTpob3ZlciB7XG4gIEBhcHBseSB0ZXh0LW4tNTA7XG59XG4ubmF2X19saW5rcyAucmVhZF9fbW9yZSB7XG4gIEBhcHBseSByb3VuZGVkLXNtIGJnLWJsdWVjb3JhbCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgcGFkZGluZzogOHB4IDE4cHg7XG59XG4ubmF2X19saW5rcyAucmVhZF9fbW9yZTpob3ZlciB7XG4gIEBhcHBseSBiZy1uLTUwIHRleHQtd2hpdGU7XG59XG4ubmF2X19saW5rcyBhIHtcbiAgQGFwcGx5IHRleHQtd2hpdGU7XG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcbiAgLm5hdl9fbGlua3Mge1xuICAgIHBhZGRpbmc6IDBweCA4cHggMjBweDtcbiAgfVxuICAubmF2X19saW5rcyBhIHtcbiAgICBAYXBwbHkgdGV4dC1uLTUwO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgfVxuICAubmF2X19saW5rczo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCwgMSk7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIC5uYXZfX2xpbmtzOmhvdmVyOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgfVxufVxuLmRyb3Bkb3duX19jb250ZW50IHtcbiAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSByaWdodC0wIHRvcC03IGhpZGRlbiBoLTU2IGJnLXdoaXRlIHB5LTcgcHgtOCBvcGFjaXR5LTAgZHVyYXRpb24tMzAwIHhsOmJsb2NrO1xuICB3aWR0aDogNDI0cHg7XG4gIGhlaWdodDogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4uZHJvcGRvd246aG92ZXIgLmRyb3Bkb3duX19jb250ZW50IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpIHtcbiAgLm5hdl9fbGlzdCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTEwO1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCA4cHggIzAwMCk7XG4gIH1cbiAgLm5hdl9fbGlzdCAuYWN0aXZlIGEge1xuICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgfVxuICAubmF2X19saXN0IC5hY3RpdmUgYTpob3ZlciB7XG4gICAgQGFwcGx5IHRleHQtd2hpdGU7XG4gIH1cbiAgLm5hdl9fbGlzdCAuYWN0aXZlIGE6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAxKTtcbiAgICB0cmFuc2l0aW9uOiAwLjNzO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgfVxuICAubmF2X19saXN0IC5hY3RpdmUgYTpob3Zlcjo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gIC5uYXZfX2xpc3Qge1xuICAgIHdpZHRoOiAyNTBweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4jbWVudS1vdmVybGF5IHtcbiAgQGFwcGx5IHhsOmhpZGRlbjtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gICNhY3Rpdml0eS1tZW51LW92ZXJsYXkge1xuICAgIEBhcHBseSBoaWRkZW47XG4gIH1cbn1cblxuLm1lbnUtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxMDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmFjdGl2aXR5LW5hdi1tZW51IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtd2hpdGU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTAwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCAwcHggOHB4ICMwMDApO1xuICB9XG4gIC5hY3Rpdml0eS1uYXYtbWVudSAuYWN0aXZpdHktbmF2LWxpc3Qge1xuICAgIEBhcHBseSBtdC01NiBmbGV4IGZsZXgtY29sIHNwYWNlLXktOTtcbiAgfVxufVxuXG4ubmF2LWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG59XG5cbi5uYXZfX3BvaW50ZXIsIC5uYXZfX3BvaW50ZXItaG92ZXIge1xuICBAYXBwbHkgcmVsYXRpdmU7XG59XG4ubmF2X19wb2ludGVyOmFmdGVyLCAubmF2X19wb2ludGVyLWhvdmVyOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCBoLTEgdy1mdWxsIHNjYWxlLXgtMCBzY2FsZS15LTEwMCByb3VuZGVkLXNtIGJnLXR1cnF1b2lzZSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDA7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLm5hdl9fcG9pbnRlcjphZnRlciwgLm5hdl9fcG9pbnRlci1ob3ZlcjphZnRlciB7XG4gICAgQGFwcGx5IC1ib3R0b20tMztcbiAgfVxufVxuLm5hdl9fcG9pbnRlcjpob3ZlcjphZnRlciwgLm5hdl9fcG9pbnRlci1ob3Zlcjpob3ZlcjphZnRlciB7XG4gIEBhcHBseSBzY2FsZS14LTEwMDtcbn1cbi5uYXZfX3BvaW50ZXI6YWZ0ZXIge1xuICBAYXBwbHkgc2NhbGUteC0xMDA7XG59XG5cbi5hY3Rpdml0eS1uYXYge1xuICBAYXBwbHkgZmxleCBncm93O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gIC5hY3Rpdml0eS1uYXYge1xuICAgIEBhcHBseSBqdXN0aWZ5LWVuZDtcbiAgfVxufVxuXG4ubWFpbl9fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMTY2cHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIHRyYW5zcGFyZW50KTtcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIgYSB7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cbi5tYWluIC5sZWZ0X19jb250YWluZXIgYTpob3ZlciB7XG4gIEBhcHBseSBib3JkZXItYi0yIGJvcmRlci10dXJxdW9pc2U7XG59XG4ubWFpbiAucmlnaHQge1xuICB3aWR0aDogOTMlO1xuICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5tYWluIC5yaWdodF9fY29udGFpbmVyIGgyIHtcbiAgbGluZS1oZWlnaHQ6IDYwcHg7XG59XG4ubWFpbiAucmlnaHRfX2NvbnRlbnQge1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLWxnIGJnLXdoaXRlIHB5LTYgcHgtNTtcbn1cbi5tYWluIC5yaWdodF9fY29udGVudCAucmlnaHRfX2ljb24ge1xuICBAYXBwbHkgdGV4dC1sYWdvb24tNTA7XG4gIG1hcmdpbi1ib3R0b206IC04cHg7XG59XG4ubWFpbiAucmlnaHRfX2NvbnRlbnQgLnJpZ2h0X19hcnJvdyB7XG4gIEBhcHBseSB0ZXh0LXdoaXRlO1xufVxuLm1haW4gLnJpZ2h0X19jb250ZW50OmhvdmVyIHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItdHVycXVvaXNlIGJnLXR1cnF1b2lzZSBiZy1vcGFjaXR5LTEwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDI1cHggMHB4IHRyYW5zcGFyZW50O1xufVxuLm1haW4gLnJpZ2h0X19jb250ZW50OmhvdmVyIC5yaWdodF9faWNvbiBzdmcge1xuICBAYXBwbHkgZmlsbC1sYWdvb24tNTAgdGV4dC13aGl0ZTtcbn1cbi5tYWluIC5yaWdodF9fY29udGVudDpob3ZlciAucmlnaHRfX2Fycm93IHtcbiAgQGFwcGx5IGZpbGwtd2hpdGUgdGV4dC10dXJxdW9pc2U7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMzY2cHgpIHtcbiAgLm1haW4gLmpvaW4tbm93IHtcbiAgICBAYXBwbHkgcHgtMjA7XG4gIH1cbiAgLm1haW4gLmpvaW4tbm93IC5yaWdodF9fY29udGVudCB7XG4gICAgd2lkdGg6IDQyM3B4O1xuICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIGlucHV0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubGVmdCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcbiAgfVxuICAubGVmdF9fY29udGFpbmVyIHtcbiAgICB3aWR0aDogMzg2cHg7XG4gIH1cbiAgLnJpZ2h0IHtcbiAgICBoZWlnaHQ6IDY0OXB4O1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucmlnaHQge1xuICAgIG1hcmdpbi10b3A6IC0yNjVweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgLnJpZ2h0X19pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5kZXRhaWxzIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiA4cHg7XG4gIGhlaWdodDogOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYmctbi0yMCBob3ZlcjpiZy1uLTMwO1xufVxuXG5tYWluIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDFmciBhdXRvO1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDY1cHgpO1xufVxuXG4uYWN0aXZpdGllc19fc2lkZWJhciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gIC5hY3Rpdml0aWVzX19zaWRlYmFyIHtcbiAgICB3aWR0aDogMjIwcHggIWltcG9ydGFudDtcbiAgfVxufVxuXG5ib2R5LmRpc2FibGUtc2Nyb2xsIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAxMHB4O1xufVxuXG5ib2R5IHtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG59XG5cbmJvZHkubm8tbmF2IHtcbiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50O1xufVxuXG5odG1sIHtcbiAgc2Nyb2xsLXBhZGRpbmctdG9wOiA2MHB4OyAvKiBoZWlnaHQgb2Ygc3RpY2t5IGhlYWRlciAqL1xufVxuXG4uZm9vdGVyX19jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDExNjZweDtcbiAgbWFyZ2luOiBhdXRvO1xufVxuLmZvb3Rlcl9fY29udGFpbmVyIC5mb290ZXJfX2xpbmtzIGEge1xuICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1uLTIwO1xufVxuLmZvb3Rlcl9fY29udGFpbmVyIC5mb290ZXJfX2xpbmtzIGE6aG92ZXIge1xuICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHVycXVvaXNlO1xufVxuXG4uZWxsaXBzaXMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4uZWxsaXBzaXNfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG4uZWxsaXBzaXNfX3RpdGxlLS1ob3ZlciB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgbGVmdC0wIHRvcC1mdWxsIHotMjAgbWF4LXctbWQgc3BhY2UteS0xLjUgcm91bmRlZCBiZy1lZ2dzaGVsbCBwLTQgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1ub3JtYWwgdGV4dC1uLTQwIG9wYWNpdHktMCBkdXJhdGlvbi0yMDA7XG4gIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi5lbGxpcHNpczpob3ZlciAuZWxsaXBzaXNfX3RpdGxlLS1ob3Zlcixcbi5lbGxpcHNpc19fdGl0bGU6aG92ZXIgLmVsbGlwc2lzX190aXRsZS0taG92ZXIsXG4uYnJlYWRjcnVtYl9fdGl0bGU6aG92ZXIgLmVsbGlwc2lzX190aXRsZS0taG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNXB4KTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cblxuLmJyZWFkY3J1bWJfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQge1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMwcHgpO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgLmFkZF9pbmRpY2F0b3Ige1xuICAgIG1heC13aWR0aDogNDAwcHg7XG4gIH1cbn1cblxuLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IC5lZGl0LWJ1dHRvbixcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdiAuZGVsZXRlLWJ1dHRvbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IC5lZGl0LWJ1dHRvbixcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdiAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmVkaXQtYnV0dG9uIHtcbiAgb3JkZXI6IDI7XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmRlbGV0ZS1idXR0b24ge1xuICBvcmRlcjogMTtcbn1cbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdjpob3ZlciAuZWRpdC1idXR0b24sIC5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IGRpdjpob3ZlciAuZGVsZXRlLWJ1dHRvbiB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCBkaXYgLmVsZW1lbnRzLXN2ZyB7XG4gIEBhcHBseSBtci0xLjUgdGV4dC14bCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLmRlc2NyaXB0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNTAwcHg7XG59XG5cbi5lbGVtZW50cy1kZXRhaWwge1xuICBAYXBwbHkgZmxleCBmbGV4LWNvbCB0ZXh0LXhzIHRleHQtbi01MDtcbn1cbi5lbGVtZW50cy1kZXRhaWwgKiB7XG4gIEBhcHBseSBsZWFkaW5nLTU7XG59XG4uZWxlbWVudHMtZGV0YWlsIHRkOm50aC1jaGlsZCgxKSB7XG4gIEBhcHBseSB0ZXh0LW4tNDA7XG4gIHdpZHRoOiAxMDBweDtcbn1cbi5lbGVtZW50cy1kZXRhaWwud2lkZXI6bm90KC5zbWFsbCkgdGQ6bnRoLWNoaWxkKDEpIHtcbiAgQGFwcGx5IHRleHQtbi00MDtcbiAgd2lkdGg6IDE5MHB4O1xufVxuLmVsZW1lbnRzLWRldGFpbCB0ZDpudGgtY2hpbGQoMikge1xuICBAYXBwbHkgZmxleCBmbGV4LWNvbCBwbC0yIHRleHQteHMgdGV4dC1uLTUwO1xufVxuLmVsZW1lbnRzLWRldGFpbCAubXVsdGlsaW5lIHtcbiAgQGFwcGx5IGl0ZW1zLXN0YXJ0O1xufVxuLmVsZW1lbnRzLWRldGFpbCB0ZCB7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4uZWxlbWVudHMtZGV0YWlsIHRhYmxlID4gdGJvZHkgPiB0cjpub3QoOmxhc3QtY2hpbGQpID4gdGQge1xuICBAYXBwbHkgcGItMztcbn1cblxuLnZhbHVlIHtcbiAgQGFwcGx5IGZsZXggc3BhY2UteC0xIHRleHQtbi01MDtcbn1cblxuLmNhdGVnb3J5IHtcbiAgQGFwcGx5IG1iLTIgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1uLTUwO1xufVxuXG4ubGFuZ3VhZ2Uge1xuICBAYXBwbHkgdy1bMzAwcHhdIHRleHQteHMgaXRhbGljIHRleHQtbi0zMCAgc206dy1hdXRvO1xufVxuXG4uZGVzY3JpcHRpb24tY29udGVudCB7XG4gIEBhcHBseSB3LVszMDBweF0gc206dy1hdXRvO1xufVxuXG4udGl0bGUtYm9yZGVyOjphZnRlciB7XG4gIHdpZHRoOiA5NTBweDtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIHRvcC0yIGxlZnQtNCBoLXB4IGJnLW4tMzA7XG59XG5cbi5lbGVtZW50cy10aXRsZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgaC1weCBncm93IGJnLW4tMzA7XG59XG5cbi50b3Age1xuICBtYXJnaW4tdG9wOiAxcHg7XG59XG5cbi5tb2RhbCBwOm5vdCg6bGFzdC1jaGlsZCkge1xuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xufVxuXG4uc2VjdGlvbi13cmFwcGVyIHtcbiAgQGFwcGx5IG14LTMgYmctcGFwZXIgc206bXgtMTA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIHtcbiAgbWF4LXdpZHRoOiAxMDAwcHg7XG4gIGhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmc6IDE2cHggMHB4IDI0cHg7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIge1xuICBAYXBwbHkgcmVsYXRpdmUgcm91bmRlZC1sZyBiZy13aGl0ZSBwLTcgbWQ6cHktMTQgbWQ6cHgtMjA7XG4gIG1heC1oZWlnaHQ6IDY1dmg7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NDBweCkge1xuICAuc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIge1xuICAgIEBhcHBseSBweC0zO1xuICB9XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgLnZ1ZV9fc2VsZWN0IHtcbiAgbWFyZ2luOiA4cHggMHB4O1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZ19fY29udGFpbmVyIC5yZWdpc3RyeV9faW5mbyB7XG4gIEBhcHBseSBteS00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1iLW4tMjA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgcCB7XG4gIEBhcHBseSB0ZXh0LXhzIGxlYWRpbmctNSB0ZXh0LW4tNDA7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nX19jb250YWluZXIgLnRleHQge1xuICBAYXBwbHkgbWItOCB0ZXh0LXNtO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZ19fY29udGFpbmVyIGxhYmVsIHtcbiAgQGFwcGx5IHRleHQteHMgdGV4dC1uLTUwO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXIge1xuICBAYXBwbHkgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLW4tMzAgcC00IHNtOnAtNjtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIge1xuICBAYXBwbHkgZ3JpZCBnYXAtMyBzbTpnYXAtNiBsZzpncmlkLWNvbHMtMjtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIgLnRhZ19fY29ycmVjdCB7XG4gIEBhcHBseSBhYnNvbHV0ZSByaWdodC0yIHRvcC0xMCBmbGV4IGgtNSBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1zcHJpbmctNDAgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICB3aWR0aDogNTBweDtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19jb250YWluZXIgLnRhZ19faW5jb3JyZWN0IHtcbiAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTIgdG9wLTEwIGZsZXggaC01IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXNhbG1vbi01MCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gIHdpZHRoOiA2MXB4O1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXIgLnZlcmlmeS1idG4ge1xuICB3aWR0aDogMTIwcHg7XG4gIG1hcmdpbi10b3A6IDE0cHg7XG4gIEBhcHBseSBmbGV4IGgtMTAganVzdGlmeS1jZW50ZXI7XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIC5yZWdpc3Rlcl9faW5wdXQge1xuICBAYXBwbHkgbXQtMiB3LWZ1bGwgYm9yZGVyIGJvcmRlci1uLTMwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gIHBhZGRpbmc6IDEzcHggMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQwcHgpIHtcbiAgLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAucmVnaXN0ZXJfX2lucHV0IHtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICB9XG59XG4uc2VjdGlvbi13cmFwcGVyIC5zZXR0aW5nIC5yZWdpc3Rlcl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5zZWN0aW9uLXdyYXBwZXIgLnNldHRpbmcgLnJlZ2lzdGVyX19pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuLnNlY3Rpb24td3JhcHBlciAuc2V0dGluZyAuZXJyb3JfX2lucHV0IHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbn1cblxuLnNhdmUtYnRuIHtcbiAgQGFwcGx5IHB4LTQ7XG59XG5cbi5idG5fX2FjdGl2ZSB7XG4gIEBhcHBseSBmb250LWJvbGQgdGV4dC13aGl0ZTtcbn1cblxuLnNtb290aCB7XG4gIGFuaW1hdGlvbjogZmFkZUluQW5pbWF0aW9uIGVhc2UgMC4zcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5BbmltYXRpb24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5ib2R5IHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBAYXBwbHkgbWluLWgtc2NyZWVuIGJnLXBhcGVyO1xufVxuXG5hIHtcbiAgY29sb3I6IHJnYih2YXIoLS1ibHVlY29yYWwpKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cbmE6aG92ZXIge1xuICBjb2xvcjogcmdiKHZhcigtLXNwcmluZy01MCkpO1xufVxuXG4ubGVmdF9fdGl0bGUge1xuICBmb250LXNpemU6IDI3cHg7XG4gIHRleHQtc2hhZG93OiA0cHggNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5sZWZ0X190aXRsZSB7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICB9XG59XG5cbmgyIHtcbiAgQGFwcGx5IHRleHQtaGVhZGluZy01IGZvbnQtYm9sZCB0ZXh0LW4tNTAgbWQ6dGV4dC1oZWFkaW5nLTM7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xuICBoMiB7XG4gICAgQGFwcGx5IHRleHQtaGVhZGluZy00O1xuICB9XG59XG5cbmg0IHtcbiAgQGFwcGx5IHRleHQtaGVhZGluZy00IGxlYWRpbmctbm9ybWFsO1xufVxuXG4uYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgb3V0bGluZTogbm9uZTtcbiAgQGFwcGx5IGJnLXR1cnF1b2lzZSB0ZXh0LW4tNTA7XG59XG4uYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbiAgQGFwcGx5IHRleHQtd2hpdGU7XG59XG4uYnRuOmhvdmVyIHN2ZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xufVxuXG4uYnRuLWJhY2sge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IDAuM3M7XG4gIEBhcHBseSB3LTI0IHRleHQtYmx1ZWNvcmFsO1xufVxuLmJ0bi1iYWNrIHN2ZyB7XG4gIHRyYW5zaXRpb246IDAuM3M7XG59XG4uYnRuLWJhY2s6aG92ZXIgc3ZnIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xufVxuXG4uYnRuLW5leHQge1xuICBAYXBwbHkgdy0zNiBweS0yLjUgdGV4dC1uLTUwIHNtOnctNDA7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAuYnRuLW5leHQge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBwYWRkaW5nOiAxM3B4IDI0cHg7XG4gIH1cbn1cbi5idG4tbmV4dCBzdmcge1xuICBtYXJnaW4tbGVmdDogMTNweDtcbiAgdHJhbnNpdGlvbjogMC4ycztcbn1cblxuLmdldC1zdGFydGVkLWJ0biB7XG4gIHdpZHRoOiAxODVweDtcbn1cblxuLnJlc2V0LWJ0biB7XG4gIEBhcHBseSBtdC02IGZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXItbm9uZSBiZy10dXJxdW9pc2UgdGV4dC1zbSBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtbi01MCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMjAwIGhvdmVyOmJnLWJsdWVjb3JhbCBob3Zlcjp0ZXh0LXdoaXRlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMTZweCA5NHB4O1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAucmVzZXQtYnRuIHtcbiAgICBwYWRkaW5nOiAxOHB4IDk0cHg7XG4gIH1cbn1cbnN2ZyB7XG4gIGhlaWdodDogMWVtO1xufVxuXG4udnJwX193cmFwcGVyIHAge1xuICBAYXBwbHkgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbn1cbi52cnBfX3dyYXBwZXIgc3ZnIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uYnV0dG9uLFxuYnV0dG9uIHtcbiAgQGFwcGx5IGZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHRleHQteHMgbGVhZGluZy1ub3JtYWwgdHJhY2tpbmctdGlnaHQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG59XG5cbi50b29sdGlwLWJ0biB7XG4gIEBhcHBseSByZWxhdGl2ZSB0ZXh0LW4tMzA7XG59XG4udG9vbHRpcC1idG4gYnV0dG9uIHtcbiAgQGFwcGx5IHJvdW5kZWQtM3hsIGJvcmRlciBib3JkZXItc29saWQgYm9yZGVyLW4tMzAgcHktMS41IHB4LTIuNTtcbn1cbi50b29sdGlwLWJ0biBzdmcge1xuICBAYXBwbHkgbXItMSB0ZXh0LXhzO1xufVxuLnRvb2x0aXAtYnRuX19jb250ZW50IHtcbiAgQGFwcGx5IGFic29sdXRlIHRvcC1mdWxsIGxlZnQtMCBoaWRkZW4gdy1bMzUycHhdO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC50b29sdGlwLWJ0bl9fY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yNSUpO1xuICB9XG59XG4udG9vbHRpcC1idG5fX2NvbnRlbnQgLmNvbnRlbnQge1xuICBAYXBwbHkgbXQtNiByb3VuZGVkIGJnLWVnZ3NoZWxsIHRleHQtbi01MDtcbiAgcGFkZGluZzogMTZweCAzM3B4IDE2cHggMTZweDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi50b29sdGlwLWJ0bl9fY29udGVudCBwIHtcbiAgQGFwcGx5IG1iLTEuNSB0ZXh0LXhzIGxlYWRpbmctbm9ybWFsO1xufVxuLnRvb2x0aXAtYnRuOmhvdmVyIC50b29sdGlwLWJ0bl9fY29udGVudCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnRvb2x0aXAtYnRuOmhvdmVyIGJ1dHRvbiB7XG4gIEBhcHBseSBib3JkZXItc3ByaW5nLTUwIHRleHQtc3ByaW5nLTUwO1xufVxuXG4ucHJpbWFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgcm91bmRlZCBiZy1ibHVlY29yYWwgcC0zIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC13aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5wcmltYXJ5LWJ0bi5zcGFjZSB7XG4gIEBhcHBseSBweC02O1xufVxuLnByaW1hcnktYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLW4tNTAgdGV4dC13aGl0ZTtcbn1cbi5wcmltYXJ5LWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlO1xufVxuXG4uc2Vjb25kYXJ5LWJ0biB7XG4gIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbn1cbi5zZWNvbmRhcnktYnRuLS10b3VjaCB7XG4gIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5zZWNvbmRhcnktYnRuLS10b3VjaCAuZHJvcGRvd25fX2Fycm93IHtcbiAgZm9udC1zaXplOiA2cHg7XG4gIHRyYW5zaXRpb246IDAuMnM7XG59XG4uc2Vjb25kYXJ5LWJ0bi0tdG91Y2ggc3ZnIHtcbiAgQGFwcGx5IHRleHQtYmFzZTtcbn1cbi5zZWNvbmRhcnktYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xufVxuLnNlY29uZGFyeS1idG4gc3ZnIHtcbiAgQGFwcGx5IHRleHQtYmFzZTtcbn1cbi5zZWNvbmRhcnktYnRuIC5kcm9wZG93bl9fYXJyb3cge1xuICBmb250LXNpemU6IDZweDtcbiAgdHJhbnNpdGlvbjogMC4ycztcbn1cblxuLnByaW1hcnktb3V0bGluZS1idG4ge1xuICBAYXBwbHkganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1zcHJpbmctNTAgcHgtMy41IHRleHQtc20gbGVhZGluZy1yZWxheGVkIHRleHQtc3ByaW5nLTUwO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xufVxuLnByaW1hcnktb3V0bGluZS1idG46aG92ZXIge1xuICBAYXBwbHkgYmctc3ByaW5nLTUwIHRleHQtd2hpdGU7XG59XG4ucHJpbWFyeS1vdXRsaW5lLWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlO1xufVxuXG4uZ2hvc3QtYnRuIHtcbiAgQGFwcGx5IHRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LW4tNDA7XG4gIHRyYW5zaXRpb246IDAuNHM7XG59XG4uZ2hvc3QtYnRuOmhvdmVyIHtcbiAgQGFwcGx5IHRleHQtYmx1ZWNvcmFsO1xufVxuXG4udGFiLWJ0bi1hbmNob3Ige1xuICBAYXBwbHkgY3Vyc29yLWRlZmF1bHQ7XG59XG5cbi50YWItYnRuIHtcbiAgQGFwcGx5IGgtOSByb3VuZGVkIGJvcmRlciBib3JkZXItbi0yMCBiZy13aGl0ZSBwLTIgdGV4dC14cyB0ZXh0LW4tNDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi50YWItYnRuOmhvdmVyIHtcbiAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLmFjdGl2ZV9fdGFiIHtcbiAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbn1cblxuLnBhbmVsLWJ0biB7XG4gIEBhcHBseSBoLTEwIHNwYWNlLXgtMSByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBiZy1lZ2dzaGVsbCBweS0zIHB4LTI7XG4gIHdpZHRoOiA0M3B4O1xufVxuLnBhbmVsLWJ0bjpob3ZlciB7XG4gIEBhcHBseSBiZy1ibHVlY29yYWwgdGV4dC13aGl0ZTtcbn1cbi5wYW5lbC1idG4gLmRyb3Bkb3duX19hcnJvdyB7XG4gIGZvbnQtc2l6ZTogNnB4O1xuICB0cmFuc2l0aW9uOiAwLjJzO1xufVxuXG4uaGFtYnVyZ2VyIHtcbiAgQGFwcGx5IHJlbGF0aXZlIHotYXV0byBmbGV4IGgtMTEgdy0xMSBjdXJzb3ItcG9pbnRlciBkdXJhdGlvbi0zMDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkO1xuICB6LWluZGV4OiAxMjA7XG59XG4uaGFtYnVyZ2VyLmFjdGl2ZSBzcGFuIHtcbiAgQGFwcGx5IGJnLW4tMTA7XG59XG4uaGFtYnVyZ2VyIHNwYW4ge1xuICBAYXBwbHkgcG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBoLTEgdy0xMCByb3VuZGVkLWxnIGR1cmF0aW9uLTMwMDtcbn1cbi5oYW1idXJnZXIgc3BhbjpudGgtY2hpbGQoMSkge1xuICBib3R0b206IDE4cHg7XG4gIGxlZnQ6IDJweDtcbiAgd2lkdGg6IDMwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XG59XG4uaGFtYnVyZ2VyLmFjdGl2ZSBzcGFuOm50aC1jaGlsZCgxKSB7XG4gIHdpZHRoOiA0MHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWigwKTtcbn1cbi5oYW1idXJnZXIuYWN0aXZlIHNwYW46bnRoLWNoaWxkKDIpIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDYwcHgpO1xufVxuLmhhbWJ1cmdlci5hY3RpdmUgc3BhbjpudGgtY2hpbGQoMykge1xuICB3aWR0aDogNDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCkgcm90YXRlKDMxNWRlZyk7XG59XG4uaGFtYnVyZ2VyIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgdG9wOiAxOHB4O1xuICBsZWZ0OiAycHg7XG4gIHdpZHRoOiAyMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTVweCk7XG59XG5cbi5oYW1idXJnZXItbWVudSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmhhbWJ1cmdlci1tZW51IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG4uaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICB0cmFuc2xhdGU6IC00OTAlIC05MCU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAuaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICAgIHRyYW5zbGF0ZTogLTM1MCUgLTE0MCU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gIC5ob21lLWJ1cmdlci1tZW51LmFjdGl2ZSB7XG4gICAgdHJhbnNsYXRlOiAtMzgwJSAtOTAlO1xuICB9XG59XG5cbi5pbnB1dCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDE0cHggMHB4IDE0cHggNTVweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgaC0xNCBib3JkZXIgYm9yZGVyLW4tMzAgc206aC0xNjtcbn1cbi5pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgQGFwcGx5IGZvbnQtbm9ybWFsIHRleHQtbi00MDtcbn1cbi5pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmlucHV0IHtcbiAgICBwYWRkaW5nOiAyMHB4IDBweCAyMHB4IDU1cHg7XG4gIH1cbn1cblxuLmVycm9yIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1jcmltc29uLTUwIHNtOnRleHQtYmFzZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG4uaGFzX2Vycm9yIC5mb3JtX19pbnB1dCB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLWNyaW1zb24tNTA7XG59XG5cbnRleHRhcmVhLmZvcm1fX2lucHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi50ZXh0LWFyZWEge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogNjBweDtcbiAgcmVzaXplOiBub25lO1xufVxuXG4uZm9ybV9faW5wdXQge1xuICBAYXBwbHkgbWItMiBib3gtYm9yZGVyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCB0ZXh0LWJsdWVjb3JhbCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xuICBwYWRkaW5nOiAxMHB4IDAgMTBweCAxNnB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmZvcm1fX2lucHV0IHtcbiAgICBwYWRkaW5nOiAxM3B4IDAgMTNweCAxNnB4O1xuICB9XG59XG4uZm9ybV9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTQwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5mb3JtX19pbnB1dDpmb2N1cyB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbn1cbi5mb3JtX19pbnB1dDpmb2N1czo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1uLTUwO1xufVxuXG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQge1xuICBAYXBwbHkgYmctbi0yMCB0ZXh0LW4tNTA7XG59XG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQuaXMtcG9pbnRlZCB7XG4gIEBhcHBseSBiZy1uLTIwIHRleHQtbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LmlzLWFjdGl2ZSB7XG4gIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIEBhcHBseSB3LVszMTBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHByLTMgdGV4dC1zbSB0ZXh0LW4tNDAgZHVyYXRpb24tMzAwO1xufVxuLmlucHV0X19maWVsZCAubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXI6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTAgdG9wLTMgaC02IHctNyBiZy13aGl0ZTtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LmlzLW9wZW4gLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LWRyb3Bkb3duIHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItbi01MDtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LWNhcmV0IHtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCIvaW1hZ2VzL2Ryb3Bkb3duLWFycm93LnN2Z1wiKTtcbiAgbWFzay1pbWFnZTogdXJsKFwiL2ltYWdlcy9kcm9wZG93bi1hcnJvdy5zdmdcIik7XG59XG4uaW5wdXRfX2ZpZWxkIC5tdWx0aXNlbGVjdC1zZWFyY2gge1xuICBAYXBwbHkgY3Vyc29yLXBvaW50ZXIgYm9yZGVyIGJvcmRlci1uLTMwIHB5LTIuNTtcbn1cbi5pbnB1dF9fZmllbGQgLm11bHRpc2VsZWN0LXNlYXJjaDpmb2N1cyB7XG4gIEBhcHBseSBiZy1uLTEwO1xufVxuLmlucHV0X19maWVsZCAubXVsdGlzZWxlY3Qtc2VhcmNoOmZvY3VzICsgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyOjphZnRlciB7XG4gIEBhcHBseSBiZy1uLTEwO1xufVxuLmlucHV0X19maWVsZCAudnVlX19zZWxlY3Qge1xuICBAYXBwbHkgbWItMiBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1zbSBsZWFkaW5nLTYgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbiAgcGFkZGluZzogMTNweCAwcHggMTNweCA1NXB4O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmlucHV0X19maWVsZCAudnVlX19zZWxlY3Qge1xuICAgIHBhZGRpbmc6IDE2cHggMHB4IDE2cHggNTVweDtcbiAgfVxufVxuXG4uZXJyb3JfaW5wdXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZDEwMDFlO1xufVxuXG4ucGFuZWxfX2lucHV0IHtcbiAgQGFwcGx5IGJveC1ib3JkZXIgaC0xMCB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgYmctcGFwZXIgcHktMi41IHBsLTcgcHItMyBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuLnBhbmVsX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LW4tMzAgZHVyYXRpb24tMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cbi5wYW5lbF9faW5wdXQ6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi00MDtcbn1cblxuLnNlYXJjaCB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5zZWFyY2hfX2lucHV0IHtcbiAgQGFwcGx5IGJvcmRlciBib3JkZXItbi0zMCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmU7XG4gIHBhZGRpbmc6IDEwcHggNDJweCAxMHB4IDM0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG59XG4uc2VhcmNoIHN2ZyB7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTMgdG9wLTMgdGV4dC1iYXNlIHRleHQtbi0zMDtcbn1cblxuLnJlcXVpcmVkLWljb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgdG9wLTAuNSB0ZXh0LWJhc2UgbGVhZGluZy1ub25lIHRleHQtY3JpbXNvbi01MDtcbn1cblxuLmlhdGktbGlzdC10YWJsZSB7XG4gIEBhcHBseSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItbi0yMCB0ZXh0LWxlZnQ7XG4gIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDQ1cHgpO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAuaWF0aS1saXN0LXRhYmxlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gIH1cbn1cbi5pYXRpLWxpc3QtdGFibGUgdGFibGUge1xuICBAYXBwbHkgdGFibGUgdy1mdWxsICBiZy13aGl0ZTtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6aG92ZXIge1xuICB6LWluZGV4OiAxO1xuICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICBAYXBwbHkgYmctbi0xMDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZCxcbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0aCB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZDphZnRlcixcbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0aDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIGJvdHRvbS0wIGgtcHggdy1mdWxsIG1heC13LWZ1bGwgYmctbi0yMDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGJvZHkgdHI6bm90KDpsYXN0LWNoaWxkKSB0ZDpmaXJzdC1jaGlsZDphZnRlciB7XG4gIEBhcHBseSBtbC02O1xufVxuLmlhdGktbGlzdC10YWJsZSB0Ym9keSB0cjpub3QoOmxhc3QtY2hpbGQpIHRoLmNoZWNrLWNvbHVtbjphZnRlciB7XG4gIEBhcHBseSAtbWwtNjtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGgge1xuICBAYXBwbHkgcHktNCBweC02IGFsaWduLXRvcCB0ZXh0LXhzIHVwcGVyY2FzZSBsZWFkaW5nLW5vcm1hbDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGggc3ZnIHtcbiAgQGFwcGx5IG1yLTEgdGV4dC14bCB0ZXh0LW4tMzA7XG59XG4uaWF0aS1saXN0LXRhYmxlIHRoIGEge1xuICBAYXBwbHkgZmxleDtcbn1cbi5pYXRpLWxpc3QtdGFibGUgdGggYSBzdmcge1xuICBAYXBwbHkgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ZCB7XG4gIEBhcHBseSByZWxhdGl2ZSBweS00IHB4LTYgYWxpZ24tdG9wIHRleHQtc20gbGVhZGluZy1yZWxheGVkO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ci5hbHJlYWR5LXB1Ymxpc2hlZCB0ZCxcbi5pYXRpLWxpc3QtdGFibGUgdHIuYWxyZWFkeS1wdWJsaXNoZWQgdGguY2hlY2stY29sdW1uIHtcbiAgQGFwcGx5IHB0LTExO1xufVxuLmlhdGktbGlzdC10YWJsZSAuaGFzLXN0YXR1cyB0ZCB7XG4gIEBhcHBseSBweC02IHB0LTExIHBiLTc7XG59XG4uaWF0aS1saXN0LXRhYmxlIC5oYXMtc3RhdHVzIHRoIHtcbiAgQGFwcGx5IHB4LTYgcHQtMTEgcGItNztcbn1cbi5pYXRpLWxpc3QtdGFibGUgLmNoZWNrLWNvbHVtbiAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG5cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yIHtcbiAgQGFwcGx5IGJnLXJvc2U7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvcjpob3ZlciB7XG4gIEBhcHBseSBiZy1yb3NlO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3IgLnRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2Om5vdCg6bGFzdC1jaGlsZCkge1xuICBAYXBwbHkgYm9yZGVyLWIgYm9yZGVyLWItbi0yMCBwYi00O1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItY29udGVudCBkaXYgdWwge1xuICBAYXBwbHkgbXQtNCBzcGFjZS15LTQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWJsdWVjb3JhbDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2IGxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDM2cHg7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1jb250ZW50IGRpdiBsaTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgQGFwcGx5IGJvcmRlci1iIGJvcmRlci1iLW4tMjAgcGItNDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWNvbnRlbnQgZGl2IGxpOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogOHB4O1xuICBsZWZ0OiAyMHB4O1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgYmctYmx1ZWNvcmFsO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItY29udGVudC5vcGVuIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4udXBsb2FkLWxpc3QtdGFibGUgLnVwbG9hZC1lcnJvci1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDI2cHg7XG4gIHJpZ2h0OiAwO1xufVxuLnVwbG9hZC1saXN0LXRhYmxlIC51cGxvYWQtZXJyb3ItaWNvbiBzdmcge1xuICBmb250LXNpemU6IDZweDtcbn1cbi51cGxvYWQtbGlzdC10YWJsZSAudXBsb2FkLWVycm9yLWljb24ub3BlbiB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbiNjYiB7XG4gIHdpZHRoOiA2OHB4O1xufVxuXG4jc3RhdHVzIHtcbiAgd2lkdGg6IDE5MnB4O1xufVxuXG4jcHVibGlzaCB7XG4gIHdpZHRoOiAyODBweDtcbn1cblxuI2RhdGUge1xuICB3aWR0aDogMTczcHg7XG59XG5cbi5pYXRpLWxpc3QtdGFibGUgdHIge1xuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuLmlhdGktbGlzdC10YWJsZSB0ZDpudGgtY2hpbGQoMSkge1xuICBtYXgtd2lkdGg6IDE1MHB4ICFpbXBvcnRhbnQ7XG59XG4uaWF0aS1saXN0LXRhYmxlIHRkOm50aC1jaGlsZCgxKSBhIHtcbiAgbWF4LXdpZHRoOiAxNDVweCAhaW1wb3J0YW50O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY2hlY2tib3gge1xuICBAYXBwbHkgcmVsYXRpdmUgYmxvY2sgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmU7XG59XG4uY2hlY2tib3ggLmNoZWNrbWFyayB7XG4gIEBhcHBseSBmbGV4IGgtNCB3LTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYm9yZGVyLTIgYm9yZGVyLW4tMjA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG59XG4uY2hlY2tib3ggLmNoZWNrbWFyazphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMCAzcHggM3B4IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBtYi0wLjUgaGlkZGVuIGgtMiB3LVs1cHhdIHJvdGF0ZS00NSBib3JkZXItc3ByaW5nLTUwO1xufVxuLmNoZWNrYm94IGlucHV0IHtcbiAgQGFwcGx5IGFic29sdXRlIGgtMCB3LTAgY3Vyc29yLXBvaW50ZXIgb3BhY2l0eS0wO1xufVxuLmNoZWNrYm94IGlucHV0OmNoZWNrZWQgfiAuY2hlY2ttYXJrIHtcbiAgQGFwcGx5IGJvcmRlci1zcHJpbmctNTA7XG59XG4uY2hlY2tib3ggaW5wdXQ6Y2hlY2tlZCB+IC5jaGVja21hcms6YWZ0ZXIge1xuICBAYXBwbHkgYmxvY2s7XG59XG4uY2hlY2tib3g6aG92ZXIgaW5wdXQgfiAuY2hlY2ttYXJrIHtcbiAgQGFwcGx5IGJvcmRlci1zcHJpbmctNTA7XG59XG5cbi8qKlxuICBMYXJhdmVsIGZvcm0gZGVzaWduXG4gKi9cbmZvcm0ge1xuICAvKipcbiAgKiBDb25kaXRpb24gdG8gc2hvdyBhbmQgZGVsZXRlIGNvbGxlY3Rpb24gZXJyb3IgaW4gZm9ybVxuICAqL1xufVxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCB7XG4gIEBhcHBseSByZWxhdGl2ZSBwLTM7XG59XG5mb3JtIC5mb3JtLWZpZWxkLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkge1xuICBAYXBwbHkgbWItNjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXAgLmZvcm0tZmllbGQge1xuICBAYXBwbHkgcC0zO1xufVxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCAuZm9ybS1maWVsZCAuaGVscC10ZXh0IHtcbiAgQGFwcGx5IG10LTIgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG59XG5mb3JtIGJ1dHRvbi5kZWxldGUtaXRlbSB7XG4gIEBhcHBseSBhYnNvbHV0ZSBoLTggdy04IGN1cnNvci1wb2ludGVyIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctbi00MCAtaW5kZW50LTQwO1xufVxuZm9ybSBidXR0b24uZGVsZXRlLWl0ZW06YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1hZ2VzL3RyYXNoX2Z1bGwuc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTEvMiB0b3AtMS8yIGgtWzE4cHhdIHctWzE4cHhdIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMjtcbn1cbmZvcm0gYnV0dG9uLmRlbGV0ZS1pdGVtOmhvdmVyIHtcbiAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXAtb3V0ZXIgLmZvcm0tZmllbGQge1xuICBAYXBwbHkgcHgtMztcbn1cbmZvcm0gLmZvcm0tZmllbGQtbGFiZWwge1xuICBAYXBwbHkgbWItMiBmbGV4IGp1c3RpZnktYmV0d2Vlbjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtbGFiZWwgbGFiZWwge1xuICBAYXBwbHkgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG59XG5mb3JtIC5mb3JtLWZpZWxkLWxhYmVsIC5yZXF1aXJlZCB7XG4gIEBhcHBseSBmb250LWJvbGQgdGV4dC1zYWxtb24tNTA7XG59XG5mb3JtIGlucHV0W3R5cGU9dGV4dF0sXG5mb3JtIGlucHV0W3R5cGU9ZGF0ZV0sXG5mb3JtIHRleHRhcmVhIHtcbiAgQGFwcGx5IG10LTAgaC0xMiB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgcHgtNCBweS0yLjUgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuZm9ybSBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlcixcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXTo6cGxhY2Vob2xkZXIsXG5mb3JtIHRleHRhcmVhOjpwbGFjZWhvbGRlciB7XG4gIEBhcHBseSB0ZXh0LXNtIHRleHQtbi00MDtcbn1cbmZvcm0gaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXTpmb2N1cyxcbmZvcm0gdGV4dGFyZWE6Zm9jdXMge1xuICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG59XG5mb3JtIGlucHV0W3R5cGU9dGV4dF06Zm9jdXM6OnBsYWNlaG9sZGVyLFxuZm9ybSBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzOjpwbGFjZWhvbGRlcixcbmZvcm0gdGV4dGFyZWE6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgQGFwcGx5IHRleHQtbi01MDtcbn1cbmZvcm0gaW5wdXRbdHlwZT10ZXh0XSxcbmZvcm0gaW5wdXRbdHlwZT1kYXRlXSB7XG4gIEBhcHBseSBoLTEyO1xufVxuZm9ybSBzZWxlY3Qge1xuICBAYXBwbHkgdy1mdWxsIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtbi00MCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xufVxuZm9ybSBzZWxlY3Q6Zm9jdXMge1xuICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG59XG5mb3JtIC5oZWxwIHtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuZm9ybSAuaGVscF9fdGV4dCB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgdG9wLTQgei0yMCBzcGFjZS15LTEuNSByb3VuZGVkIGJnLWVnZ3NoZWxsIHAtNCB0ZXh0LWxlZnQgdGV4dC14cyB0ZXh0LW4tNDAgb3BhY2l0eS0wIGR1cmF0aW9uLTIwMDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7XG59XG5mb3JtIC5oZWxwOmhvdmVyIC5oZWxwX190ZXh0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG5mb3JtIC5hZGRfbW9yZSB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbmZvcm0gLmFkZF9tb3JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC0xLzIgdy1weCBib3JkZXItbCBib3JkZXItc3ByaW5nLTUwO1xufVxuZm9ybSAuYWRkX21vcmU6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0yLzQgaC1weCB3LTMuNSAtdHJhbnNsYXRlLXktMS8yIGJvcmRlci1iIGJvcmRlci1zcHJpbmctNTA7XG59XG5mb3JtIC5hZGRfbW9yZSBpIHtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltYWdlcy9hZGQtbW9yZS1ncmVlbi5zdmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbn1cbmZvcm0gLnN1YmVsZW1lbnQuYm9yZGVyLWwgPiBsYWJlbCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuZm9ybSAuc3ViZWxlbWVudCAuc3ViZWxlbWVudCxcbmZvcm0gLnN1YmVsZW1lbnQgLnN1YmVsZW1lbnQgKyBidXR0b24ge1xuICBAYXBwbHkgbWwtNjtcbn1cbmZvcm0gLnN1YmVsZW1lbnQgLndyYXBwZWQtY2hpbGQtYm9keSB7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbmZvcm0gLnN1YmVsZW1lbnQgLndyYXBwZWQtY2hpbGQtYm9keSA+IC5kZWxldGUtcGFyZW50IHtcbiAgQGFwcGx5IGJsb2NrO1xufVxuZm9ybSAuc3ViZWxlbWVudCA+IC5tdWx0aS1mb3JtOm9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50LFxuZm9ybSAuc3ViZWxlbWVudCAud3JhcHBlZC1jaGlsZC1ib2R5Om9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50IHtcbiAgQGFwcGx5IGhpZGRlbjtcbn1cbmZvcm0gLmZvcm0tZmllbGQtZ3JvdXA6b25seS1vZi10eXBlID4gLmRlbGV0ZS1pdGVtIHtcbiAgQGFwcGx5IGhpZGRlbjtcbn1cbmZvcm0gLmNvbGxlY3Rpb25fZXJyb3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuZm9ybSAubXVsdGktZm9ybSArIC5jb2xsZWN0aW9uX2Vycm9yLFxuZm9ybSAuZm9ybS1maWVsZC1ncm91cCArIC5jb2xsZWN0aW9uX2Vycm9yLFxuZm9ybSAud3JhcHBlZC1jaGlsZC1ib2R5ICsgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gIFNlbGVjdCAyIGZpZWxkXG4qL1xuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCB7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xufVxuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7XG4gIEBhcHBseSBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LW4tNDAgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gIEBhcHBseSBwLTAgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gIEBhcHBseSBoLTExO1xufVxuc3Bhbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHNwYW4ge1xuICBAYXBwbHkgbXItMi41IHRleHQtc207XG59XG5zcGFuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIge1xuICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDA7XG59XG5zcGFuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF0ge1xuICBjb2xvcjogIzFmMjkzNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNjtcbn1cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIHtcbiAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTUwO1xufVxuXG4ubWF4LXctaGFsZiB7XG4gIG1heC13aWR0aDogNTAlO1xufVxuXG4vKipcbiAgQWN0aXZpdHkgRGV0YWlsIFBhZ2VcbiovXG4uYWN0aXZpdGllcyB7XG4gIEBhcHBseSBmbGV4IGdhcC01IHhsOmdhcC03O1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXIge1xuICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXItaW5uZXIge1xuICBvcmRlcjogMTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuYWN0aXZpdGllc19fY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNTBweCk7XG4gIH1cbn1cbi5hY3Rpdml0aWVzX19jYXJkIHtcbiAgQGFwcGx5IGZsZXggZmxleC1jb2wgYmctd2hpdGUgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LW4tNDA7XG4gIHBhZGRpbmc6IDEzcHg7XG59XG4uYWN0aXZpdGllcyAucHJvZ3Jlc3Mge1xuICBAYXBwbHkgaXRlbXMtY2VudGVyO1xuICB3aWR0aDogMTUxcHg7XG4gIG1pbi1oZWlnaHQ6IDE3NHB4O1xuICBib3JkZXItcmFkaXVzOiA4cHggMHB4IDBweCA4cHg7XG59XG4uYWN0aXZpdGllcyAudGFiLWJ0bjpkaXNhYmxlZCB7XG4gIEBhcHBseSBwb2ludGVyLWV2ZW50cy1ub25lIHRleHQtbi0yMDtcbn1cbi5hY3Rpdml0aWVzIC50YWItYnRuOmRpc2FibGVkIHN2ZyB7XG4gIEBhcHBseSB0ZXh0LW4tMjA7XG59XG4uYWN0aXZpdGllcyAuaG92ZXItdGV4dCBzdmcge1xuICBAYXBwbHkgdGV4dC1uLTMwO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgLmVsZW1lbnRzLWNhcmQge1xuICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAubWFudWFsLWltcG9ydCAuaGVscF9fdGV4dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnJlZ2lzdHJ5X19pbmZvIC5oZWxwX190ZXh0LFxuLnJlZ2lzdGVyIC5oZWxwX190ZXh0LFxuYXNpZGUgLmhlbHBfX3RleHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgIWltcG9ydGFudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnJlZ2lzdHJ5X19pbmZvIC5oZWxwX190ZXh0LFxuLnJlZ2lzdGVyIC5oZWxwX190ZXh0LFxuYXNpZGUgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAyNTBweCAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5pbXBvcnQtYWN0aXZpdHkgLmhlbHBfX3RleHQsXG4uYWN0aXZpdGllc19fY29udGVudC0tZWxlbWVudCAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xufVxuXG5hc2lkZSAucHJvZ3Jlc3MgLmhlbHBfX3RleHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgYXNpZGUgLnByb2dyZXNzIC5oZWxwX190ZXh0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQ1JSkgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uYWN0aXZpdGllc19fY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGFiLWJ0biAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAudGFiLWJ0biAuaGVscF9fdGV4dCB7XG4gICAgbGVmdDogMDtcbiAgfVxufVxuXG4uYWN0aXZpdHktZGVmYXVsdC12YWx1ZSAuaGVscF9fdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSkgIWltcG9ydGFudDtcbn1cblxuLnBhZ2luYXRpb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgei0wIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW4tNDA7XG59XG4ucGFnaW5hdGlvbiA+IGEsXG4ucGFnaW5hdGlvbiA+IHNwYW4ge1xuICBAYXBwbHkgZmxleCBib3JkZXIteSBib3JkZXItbCBib3JkZXItbi0yMCBweS0xLjUgcHgtMztcbn1cbi5wYWdpbmF0aW9uID4gYTpub3QoLnByZXYtYnRuKSxcbi5wYWdpbmF0aW9uID4gc3Bhbjpub3QoLnByZXYtYnRuKSB7XG4gIEBhcHBseSBib3JkZXItbCBib3JkZXItbi0yMDtcbn1cbi5wYWdpbmF0aW9uID4gYS5wcmV2LWJ0biwgLnBhZ2luYXRpb24gPiBhLm5leHQtYnRuLFxuLnBhZ2luYXRpb24gPiBzcGFuLnByZXYtYnRuLFxuLnBhZ2luYXRpb24gPiBzcGFuLm5leHQtYnRuIHtcbiAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLW4tMTA7XG59XG4ucGFnaW5hdGlvbiA+IGEucHJldi1idG4gc3ZnLCAucGFnaW5hdGlvbiA+IGEubmV4dC1idG4gc3ZnLFxuLnBhZ2luYXRpb24gPiBzcGFuLnByZXYtYnRuIHN2Zyxcbi5wYWdpbmF0aW9uID4gc3Bhbi5uZXh0LWJ0biBzdmcge1xuICBAYXBwbHkgdGV4dC14cztcbn1cbi5wYWdpbmF0aW9uID4gYS5wcmV2LWJ0bixcbi5wYWdpbmF0aW9uID4gc3Bhbi5wcmV2LWJ0biB7XG4gIEBhcHBseSByb3VuZGVkLXRsIHJvdW5kZWQtYmw7XG59XG4ucGFnaW5hdGlvbiA+IGEubmV4dC1idG4sXG4ucGFnaW5hdGlvbiA+IHNwYW4ubmV4dC1idG4ge1xuICBAYXBwbHkgcm91bmRlZC1iciByb3VuZGVkLXRyIGJvcmRlci1yO1xufVxuLnBhZ2luYXRpb24gPiBhLnByZXYtYnRuIHN2Zyxcbi5wYWdpbmF0aW9uID4gc3Bhbi5wcmV2LWJ0biBzdmcge1xuICBAYXBwbHkgbXItMTtcbn1cbi5wYWdpbmF0aW9uID4gYS5uZXh0LWJ0biBzdmcsXG4ucGFnaW5hdGlvbiA+IHNwYW4ubmV4dC1idG4gc3ZnIHtcbiAgQGFwcGx5IG1sLTE7XG59XG4ucGFnaW5hdGlvbiA+IGE6aG92ZXIsIC5wYWdpbmF0aW9uID4gYS5jdXJyZW50LFxuLnBhZ2luYXRpb24gPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiBzcGFuLmN1cnJlbnQge1xuICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtcGFwZXI7XG59XG5cbi5vdmVybGF5IHtcbiAgQGFwcGx5IGZpeGVkIGxlZnQtMCB0b3AtMCBoLWZ1bGwgdy1mdWxsIGJnLWJsYWNrO1xuICB6LWluZGV4OiAxMDA7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5vdmVybGF5X19pbm5lciB7XG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbDtcbn1cbi5vdmVybGF5X19jb250ZW50IHtcbiAgQGFwcGx5IGFic29sdXRlIGxlZnQtMi80IHRvcC0yLzQ7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLm92ZXJsYXlfX2NvbnRlbnQgLnNwaW5uZXIge1xuICBAYXBwbHkgaW5saW5lLWJsb2NrIGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLW4tMTAgYm9yZGVyLW9wYWNpdHktNTtcbiAgd2lkdGg6IDc1cHg7XG4gIGhlaWdodDogNzVweDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uc2VsZWN0Mi1jb250YWluZXI6Zm9jdXMtd2l0aGluIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjdmOTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDI4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGU6Zm9jdXMtd2l0aGluIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzJhMmYzMDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAxO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuXG4uc2VsZWN0Mi1kcm9wZG93biB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTEwMDAwMHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYWFhO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiB7XG4gIHBhZGRpbmc6IDZweDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZF0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1kcm9wZG93biB7XG4gIGxlZnQ6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd24tLWFib3ZlIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItZHJvcGRvd24tLWJlbG93IHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5zZWxlY3QyLXNlYXJjaC0tZHJvcGRvd24ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNHB4O1xufVxuLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDRweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2E2YjViYTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuLnNlbGVjdDItc2VhcmNoLS1kcm9wZG93biAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5bdHlwZT1zZWFyY2hdIHtcbiAgb3V0bGluZS1jb2xvcjogI2E2YjViYTtcbiAgb3V0bGluZS1vZmZzZXQ6IDA7XG59XG5cbi5zZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDtcbiAgbWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgY2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50O1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gIGNvbG9yOiAjMTU1MzY2O1xuICBsaW5lLWhlaWdodDogMjhweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFweDtcbiAgcmlnaHQ6IDFweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjZweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93IGIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG4gIG1hcmdpbi1sZWZ0OiAtNHB4O1xuICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogNXB4IDRweCAwIDRweDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCAuc2VsZWN0Mi1yZXN1bHRzID4gLnNlbGVjdDItcmVzdWx0c19fb3B0aW9ucyB7XG4gIG1heC1oZWlnaHQ6IDIwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyBiIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjODg4IHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6IDAgNHB4IDVweCA0cHg7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWFib3ZlIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4uc2VsZWN0Mi1jb250YWluZXItLWJlbG93IC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5zaWRlYmFyLW9wZW4taWNvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsZWZ0OiAwcHg7XG4gIGJvdHRvbTogNTBweDtcbiAgei1pbmRleDogNjA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGRkZTA7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBib3JkZXItcmFkaXVzOiAwIDEwMCUgMTAwJSAwO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5zaWRlYmFyLW9wZW4taWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5zaWRlYmFyLW9wZW4taWNvbjpob3ZlciB7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbn1cbi5zaWRlYmFyLW9wZW4taWNvbiBzdmcge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMTU1MzY2O1xufVxuXG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyODBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG59XG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24gc3ZnIHtcbiAgbWFyZ2luOiBhdXRvO1xuICBjb2xvcjogIzE1NTM2Njtcbn1cblxuLnNpZGViYXItY2xvc2UtaWNvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYm90dG9tOiA1MHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGxlZnQ6IDI3NXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGRkZTA7XG4gIGhlaWdodDogNDBweDtcbiAgd2lkdGg6IDQwcHg7XG4gIHotaW5kZXg6IDIwMDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3MDBweCkge1xuICAuc2lkZWJhci1jbG9zZS1pY29uIHtcbiAgICBsZWZ0OiAyNDBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB9XG59XG4uc2lkZWJhci1jbG9zZS1pY29uIHN2ZyB7XG4gIG1hcmdpbjogYXV0bztcbiAgY29sb3I6ICMxNTUzNjY7XG59IiwiQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLndyYXBwZXI6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMjkycHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1hZ2VzL21hcnF1ZS13aGl0ZS5wbmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTYuNSU7XG4gICAgYmFja2dyb3VuZC1zaXplOiA3MCU7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIGNvbnRlbnQ6ICcnO1xuICB9XG59XG4uaGVhZGVyIHtcbiAgbWF4LXdpZHRoOiAxMTY2cHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5uYXZfX2FjdGl2ZTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICBjb250ZW50OiAnJztcbn1cbi5saW5rc19fYWN0aXZlIHtcbiAgQGFwcGx5IHRleHQtYmxhY2s7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLm5hdl9fbGlua3Mge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDIwcHggOHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG5cbiAgYTpob3ZlciB7XG4gICAgQGFwcGx5IHRleHQtbi01MDtcbiAgfVxuXG4gIC5yZWFkX19tb3JlIHtcbiAgICBAYXBwbHkgcm91bmRlZC1zbSBiZy1ibHVlY29yYWwgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBwYWRkaW5nOiA4cHggMThweDtcblxuICAgICY6aG92ZXIge1xuICAgICAgQGFwcGx5IGJnLW4tNTAgdGV4dC13aGl0ZTtcbiAgICB9XG4gIH1cblxuICBhIHtcbiAgICBAYXBwbHkgdGV4dC13aGl0ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XG4gIC5uYXZfX2xpbmtzIHtcbiAgICBwYWRkaW5nOiAwcHggOHB4IDIwcHg7XG5cbiAgICBhIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAxKTtcbiAgICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgICB9XG4gIH1cbn1cbi5kcm9wZG93bl9fY29udGVudCB7XG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtNyBoaWRkZW4gaC01NiBiZy13aGl0ZSBweS03IHB4LTggb3BhY2l0eS0wIGR1cmF0aW9uLTMwMCB4bDpibG9jaztcbiAgd2lkdGg6IDQyNHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi5kcm9wZG93bjpob3ZlciB7XG4gIC5kcm9wZG93bl9fY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm5hdl9fbGlzdCB7XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEyODBweCkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMzAwcHg7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbiAgICBwYWRkaW5nOiAzMHB4O1xuICAgIEBhcHBseSBiZy1ibHVlY29yYWwgdGV4dC13aGl0ZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTtcbiAgICB0cmFuc2l0aW9uOiAwLjNzO1xuICAgIHotaW5kZXg6IDExMDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KC0wcHggMHB4IDhweCAjMDAwKTtcblxuICAgIC5hY3RpdmUge1xuICAgICAgYSB7XG4gICAgICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAyNHB4O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDRweDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDEpO1xuICAgICAgICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgQGFwcGx5IGJnLXR1cnF1b2lzZTtcbiAgICAgICAgfVxuICAgICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgd2lkdGg6IDI1MHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICB9XG59XG5cbiNtZW51LW92ZXJsYXkge1xuICBAYXBwbHkgeGw6aGlkZGVuO1xufVxuXG4jYWN0aXZpdHktbWVudS1vdmVybGF5IHtcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTE5MHB4KSB7XG4gICAgQGFwcGx5IGhpZGRlbjtcbiAgfVxufVxuXG4ubWVudS1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6IDEwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG4uYWN0aXZpdHktbmF2LW1lbnUge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtd2hpdGU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwNSUpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig3cHgpO1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gICAgei1pbmRleDogMTAwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCAwcHggOHB4ICMwMDApO1xuXG4gICAgLmFjdGl2aXR5LW5hdi1saXN0IHtcbiAgICAgIEBhcHBseSBtdC01NiBmbGV4IGZsZXgtY29sIHNwYWNlLXktOTtcbiAgICB9XG4gIH1cbn1cbi5uYXYtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcbn1cblxuLm5hdiB7XG4gICZfX3BvaW50ZXIsXG4gICZfX3BvaW50ZXItaG92ZXIge1xuICAgIEBhcHBseSByZWxhdGl2ZTtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgQGFwcGx5IGFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCBoLTEgdy1mdWxsIHNjYWxlLXgtMCBzY2FsZS15LTEwMCByb3VuZGVkLXNtIGJnLXR1cnF1b2lzZSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDA7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDExOTBweCkge1xuICAgICAgICBAYXBwbHkgLWJvdHRvbS0zO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6aG92ZXI6YWZ0ZXIge1xuICAgICAgQGFwcGx5IHNjYWxlLXgtMTAwO1xuICAgIH1cbiAgfVxuXG4gICZfX3BvaW50ZXI6YWZ0ZXIge1xuICAgIEBhcHBseSBzY2FsZS14LTEwMDtcbiAgfVxufVxuXG4uYWN0aXZpdHktbmF2IHtcbiAgQGFwcGx5IGZsZXggZ3JvdztcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMTkwcHgpIHtcbiAgICBAYXBwbHkganVzdGlmeS1lbmQ7XG4gIH1cbn1cbiIsIi5tYWluIHtcbiAgJl9fY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDExNjZweDtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cbiAgLmxlZnRfX2NvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgMTYwZGVnLFxuICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLFxuICAgICAgdHJhbnNwYXJlbnRcbiAgICApO1xuXG4gICAgYSB7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItdHVycXVvaXNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAucmlnaHQge1xuICAgIHdpZHRoOiA5MyU7XG4gICAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG5cbiAgICAmX19jb250YWluZXIge1xuICAgICAgaDIge1xuICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19jb250ZW50IHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1sZyBiZy13aGl0ZSBweS02IHB4LTU7XG5cbiAgICAgIC5yaWdodF9faWNvbiB7XG4gICAgICAgIEBhcHBseSB0ZXh0LWxhZ29vbi01MDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLThweDtcbiAgICAgIH1cbiAgICAgIC5yaWdodF9fYXJyb3cge1xuICAgICAgICBAYXBwbHkgdGV4dC13aGl0ZTtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci10dXJxdW9pc2UgYmctdHVycXVvaXNlIGJnLW9wYWNpdHktMTA7XG4gICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMjVweCAwcHggdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgLnJpZ2h0X19pY29uIHtcbiAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgQGFwcGx5IGZpbGwtbGFnb29uLTUwIHRleHQtd2hpdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5yaWdodF9fYXJyb3cge1xuICAgICAgICAgIEBhcHBseSBmaWxsLXdoaXRlIHRleHQtdHVycXVvaXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEzNjZweCkge1xuICAgIC5qb2luLW5vdyB7XG4gICAgICBAYXBwbHkgcHgtMjA7XG5cbiAgICAgIC5yaWdodF9fY29udGVudCB7XG4gICAgICAgIHdpZHRoOiA0MjNweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIGlucHV0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubGVmdCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcblxuICAgICZfX2NvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMzg2cHg7XG4gICAgfVxuICB9XG4gIC5yaWdodCB7XG4gICAgaGVpZ2h0OiA2NDlweDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnJpZ2h0IHtcbiAgICBtYXJnaW4tdG9wOiAtMjY1cHg7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQyMHB4KSB7XG4gIC5yaWdodF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAuZGV0YWlscyB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogOHB4O1xuICBoZWlnaHQ6IDhweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBAYXBwbHkgcm91bmRlZC1sZyBiZy1uLTIwIGhvdmVyOmJnLW4tMzA7XG59XG5tYWluIHtcbiAgZGlzcGxheTogZ3JpZDsgLy8gTGluZSAxXG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsgLy8gTGluZSAyXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0NjVweCk7IC8vIExpbmUgM1xufVxuLmFjdGl2aXRpZXNfX3NpZGViYXIge1xuICBmbGV4LXNocmluazogMDtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gICAgd2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbmJvZHkuZGlzYWJsZS1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDEwcHg7XG59XG5ib2R5IHtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG59XG5cbmJvZHkubm8tbmF2IHtcbiAgcGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50O1xufVxuaHRtbCB7XG4gIHNjcm9sbC1wYWRkaW5nLXRvcDogNjBweDsgLyogaGVpZ2h0IG9mIHN0aWNreSBoZWFkZXIgKi9cbn1cbiIsIi5mb290ZXJfX2NvbnRhaW5lciB7XG4gIG1heC13aWR0aDogMTE2NnB4O1xuICBtYXJnaW46IGF1dG87XG5cbiAgLmZvb3Rlcl9fbGlua3Mge1xuICAgIGEge1xuICAgICAgQGFwcGx5IGJvcmRlci1iLTIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtbi0yMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIEBhcHBseSBib3JkZXItYi0yIGJvcmRlci10dXJxdW9pc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIuZWxsaXBzaXMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuLmVsbGlwc2lzX190aXRsZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIEBhcHBseSByZWxhdGl2ZTtcbn1cbi5lbGxpcHNpc19fdGl0bGUtLWhvdmVyIHtcbiAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLWZ1bGwgei0yMCBtYXgtdy1tZCBzcGFjZS15LTEuNSByb3VuZGVkIGJnLWVnZ3NoZWxsIHAtNCB0ZXh0LWxlZnQgdGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LW4tNDAgb3BhY2l0eS0wIGR1cmF0aW9uLTIwMDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYigwIDAgMCAvIDEwJSk7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uZWxsaXBzaXM6aG92ZXIsXG4uZWxsaXBzaXNfX3RpdGxlOmhvdmVyLFxuLmJyZWFkY3J1bWJfX3RpdGxlOmhvdmVyIHtcbiAgLmVsbGlwc2lzX190aXRsZS0taG92ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1cHgpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLmJyZWFkY3J1bWJfX3RpdGxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgQGFwcGx5IHJlbGF0aXZlO1xufVxuXG4vLyBhY3Rpdml0eSBkZXRhaWxcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMzBweCk7XG4gIH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLmFkZF9pbmRpY2F0b3Ige1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICB9XG4gIH1cbn1cblxuLmFjdGl2aXRpZXNfX2NvbnRlbnQtLWVsZW1lbnQgZGl2IHtcbiAgLmVkaXQtYnV0dG9uLFxuICAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAvLyBvdXRsaW5lOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC5lZGl0LWJ1dHRvbiB7XG4gICAgb3JkZXI6IDI7XG4gIH1cblxuICAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgb3JkZXI6IDE7XG4gIH1cblxuICAmOmhvdmVyIC5lZGl0LWJ1dHRvbixcbiAgJjpob3ZlciAuZGVsZXRlLWJ1dHRvbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgLmVsZW1lbnRzLXN2ZyB7XG4gICAgQGFwcGx5IG1yLTEuNSB0ZXh0LXhsIHRleHQtYmx1ZWNvcmFsO1xuICB9XG59XG4uZGVzY3JpcHRpb24ge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA1MDBweDtcbn1cblxuLmVsZW1lbnRzLWRldGFpbCB7XG4gIEBhcHBseSBmbGV4IGZsZXgtY29sIHRleHQteHMgdGV4dC1uLTUwO1xuXG4gIC8vIHRhYmxlIHtcbiAgLy8gICBmb250LXNpemU6IGluaGVyaXQ7XG5cbiAgLy8gfVxuXG4gICYgKiB7XG4gICAgQGFwcGx5IGxlYWRpbmctNTtcbiAgfVxuXG4gIHRkOm50aC1jaGlsZCgxKSB7XG4gICAgQGFwcGx5IHRleHQtbi00MDtcbiAgICB3aWR0aDogMTAwcHg7XG4gIH1cbiAgJi53aWRlcjpub3QoLnNtYWxsKSB7XG4gICAgdGQ6bnRoLWNoaWxkKDEpIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNDA7XG4gICAgICB3aWR0aDogMTkwcHg7XG4gICAgfVxuICB9XG5cbiAgdGQ6bnRoLWNoaWxkKDIpIHtcbiAgICBAYXBwbHkgZmxleCBmbGV4LWNvbCBwbC0yIHRleHQteHMgdGV4dC1uLTUwO1xuICB9XG4gIC5tdWx0aWxpbmUge1xuICAgIEBhcHBseSBpdGVtcy1zdGFydDtcbiAgfVxuXG4gIHRkIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB9XG5cbiAgdGFibGUgPiB0Ym9keSA+IHRyOm5vdCg6bGFzdC1jaGlsZCkgPiB0ZCB7XG4gICAgQGFwcGx5IHBiLTM7XG4gIH1cbn1cbi52YWx1ZSB7XG4gIEBhcHBseSBmbGV4IHNwYWNlLXgtMSB0ZXh0LW4tNTA7XG59XG4uY2F0ZWdvcnkge1xuICBAYXBwbHkgbWItMiB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LW4tNTA7XG59XG4ubGFuZ3VhZ2Uge1xuICBAYXBwbHkgdy1bMzAwcHhdIHRleHQteHMgaXRhbGljIHRleHQtbi0zMCAgc206dy1hdXRvO1xufVxuLmRlc2NyaXB0aW9uLWNvbnRlbnQge1xuICBAYXBwbHkgdy1bMzAwcHhdIHNtOnctYXV0bztcbn1cbi50aXRsZS1ib3JkZXI6OmFmdGVyIHtcbiAgd2lkdGg6IDk1MHB4O1xuICBjb250ZW50OiAnJztcbiAgQGFwcGx5IGFic29sdXRlIHRvcC0yIGxlZnQtNCBoLXB4IGJnLW4tMzA7XG59XG4uZWxlbWVudHMtdGl0bGU6OmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIEBhcHBseSBoLXB4IGdyb3cgYmctbi0zMDtcbn1cbi50b3Age1xuICBtYXJnaW4tdG9wOiAxcHg7XG59XG5cbi5tb2RhbCB7XG4gIHA6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgfVxufVxuIiwiLnNlY3Rpb24td3JhcHBlciB7XG4gIEBhcHBseSBteC0zIGJnLXBhcGVyIHNtOm14LTEwO1xuXG4gIC5zZXR0aW5nIHtcbiAgICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMTZweCAwcHggMjRweDtcblxuICAgICZfX2NvbnRhaW5lciB7XG4gICAgICBAYXBwbHkgcmVsYXRpdmUgcm91bmRlZC1sZyBiZy13aGl0ZSBwLTcgbWQ6cHktMTQgbWQ6cHgtMjA7XG4gICAgICBtYXgtaGVpZ2h0OiA2NXZoO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NDBweCkge1xuICAgICAgICBAYXBwbHkgcHgtMztcbiAgICAgIH1cblxuICAgICAgLnZ1ZV9fc2VsZWN0IHtcbiAgICAgICAgbWFyZ2luOiA4cHggMHB4O1xuICAgICAgfVxuICAgICAgLnJlZ2lzdHJ5X19pbmZvIHtcbiAgICAgICAgQGFwcGx5IG15LTQgZmxleCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgYm9yZGVyLWItbi0yMDtcbiAgICAgIH1cbiAgICAgIHAge1xuICAgICAgICBAYXBwbHkgdGV4dC14cyBsZWFkaW5nLTUgdGV4dC1uLTQwO1xuICAgICAgfVxuICAgICAgLnRleHQge1xuICAgICAgICBAYXBwbHkgbWItOCB0ZXh0LXNtO1xuICAgICAgfVxuICAgICAgbGFiZWwge1xuICAgICAgICBAYXBwbHkgdGV4dC14cyB0ZXh0LW4tNTA7XG4gICAgICB9XG4gICAgfVxuICAgIC5yZWdpc3RlciB7XG4gICAgICBAYXBwbHkgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLW4tMzAgcC00IHNtOnAtNjtcblxuICAgICAgJl9fY29udGFpbmVyIHtcbiAgICAgICAgQGFwcGx5IGdyaWQgZ2FwLTMgc206Z2FwLTYgbGc6Z3JpZC1jb2xzLTI7XG5cbiAgICAgICAgLnRhZ19fY29ycmVjdCB7XG4gICAgICAgICAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTIgdG9wLTEwIGZsZXggaC01IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXNwcmluZy00MCB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtd2hpdGU7XG4gICAgICAgICAgd2lkdGg6IDUwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAudGFnX19pbmNvcnJlY3Qge1xuICAgICAgICAgIEBhcHBseSBhYnNvbHV0ZSByaWdodC0yIHRvcC0xMCBmbGV4IGgtNSBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1zYWxtb24tNTAgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LXdoaXRlO1xuICAgICAgICAgIHdpZHRoOiA2MXB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAudmVyaWZ5LWJ0biB7XG4gICAgICAgIHdpZHRoOiAxMjBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTRweDtcbiAgICAgICAgQGFwcGx5IGZsZXggaC0xMCBqdXN0aWZ5LWNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgLnJlZ2lzdGVyX19pbnB1dCB7XG4gICAgICBAYXBwbHkgbXQtMiB3LWZ1bGwgYm9yZGVyIGJvcmRlci1uLTMwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIH1cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gICAgICB9XG4gICAgICAmOmZvY3VzOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgICB9XG4gICAgfVxuICAgIC5lcnJvcl9faW5wdXQge1xuICAgICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbiAgICB9XG4gIH1cbn1cbi5zYXZlLWJ0biB7XG4gIEBhcHBseSBweC00O1xufVxuLmJ0bl9fYWN0aXZlIHtcbiAgQGFwcGx5IGZvbnQtYm9sZCB0ZXh0LXdoaXRlO1xufVxuIiwiLnNtb290aCB7XG4gIGFuaW1hdGlvbjogZmFkZUluQW5pbWF0aW9uIGVhc2UgMC4zcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW5BbmltYXRpb24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4iLCJib2R5IHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBAYXBwbHkgbWluLWgtc2NyZWVuIGJnLXBhcGVyO1xufVxuXG5hIHtcbiAgY29sb3I6IHJnYih2YXIoLS1ibHVlY29yYWwpKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogcmdiKHZhcigtLXNwcmluZy01MCkpO1xuICB9XG59XG5cbi5sZWZ0IHtcbiAgJl9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICB0ZXh0LXNoYWRvdzogNHB4IDRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjAxKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgIH1cbiAgfVxufVxuXG5oMiB7XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7XG4gICAgQGFwcGx5IHRleHQtaGVhZGluZy00O1xuICB9XG4gIEBhcHBseSB0ZXh0LWhlYWRpbmctNSBmb250LWJvbGQgdGV4dC1uLTUwIG1kOnRleHQtaGVhZGluZy0zO1xufVxuXG5oNCB7XG4gIEBhcHBseSB0ZXh0LWhlYWRpbmctNCBsZWFkaW5nLW5vcm1hbDtcbn1cbiIsIi8vIFR1cnF1b2lzZSBidXR0b25cbi5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICBAYXBwbHkgYmctdHVycXVvaXNlIHRleHQtbi01MDtcblxuICAmOmhvdmVyIHtcbiAgICBAYXBwbHkgYmctYmx1ZWNvcmFsO1xuICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpO1xuICAgICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICB9XG4gIH1cbn1cblxuLmJ0bi1iYWNrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgdy0yNCB0ZXh0LWJsdWVjb3JhbDtcblxuICBzdmcge1xuICAgIHRyYW5zaXRpb246IDAuM3M7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xuICAgIH1cbiAgfVxufVxuXG4uYnRuLW5leHQge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIGhlaWdodDogNDhweDtcbiAgICBwYWRkaW5nOiAxM3B4IDI0cHg7XG4gIH1cbiAgQGFwcGx5IHctMzYgcHktMi41IHRleHQtbi01MCBzbTp3LTQwO1xuXG4gIHN2ZyB7XG4gICAgbWFyZ2luLWxlZnQ6IDEzcHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuXG4uZ2V0LXN0YXJ0ZWQtYnRuIHtcbiAgd2lkdGg6IDE4NXB4O1xufVxuXG4ucmVzZXQtYnRuIHtcbiAgQGFwcGx5IG10LTYgZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJvcmRlci1ub25lIGJnLXR1cnF1b2lzZSB0ZXh0LXNtIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC1uLTUwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0yMDAgaG92ZXI6YmctYmx1ZWNvcmFsIGhvdmVyOnRleHQtd2hpdGU7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxNnB4IDk0cHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5yZXNldC1idG4ge1xuICAgIHBhZGRpbmc6IDE4cHggOTRweDtcbiAgfVxufVxuXG5zdmcge1xuICBoZWlnaHQ6IDFlbTtcbn1cblxuLnZycF9fd3JhcHBlciB7XG4gIHAge1xuICAgIEBhcHBseSB0ZXh0LXNtIGxlYWRpbmctbm9ybWFsO1xuICB9XG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbi5idXR0b24sXG5idXR0b24ge1xuICBAYXBwbHkgZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgdGV4dC14cyBsZWFkaW5nLW5vcm1hbCB0cmFja2luZy10aWdodDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbn1cblxuLy8gdG9vbHRpcCBidXR0b25cbi50b29sdGlwLWJ0biB7XG4gIEBhcHBseSByZWxhdGl2ZSB0ZXh0LW4tMzA7XG5cbiAgYnV0dG9uIHtcbiAgICBAYXBwbHkgcm91bmRlZC0zeGwgYm9yZGVyIGJvcmRlci1zb2xpZCBib3JkZXItbi0zMCBweS0xLjUgcHgtMi41O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgbXItMSB0ZXh0LXhzO1xuICB9XG5cbiAgJl9fY29udGVudCB7XG4gICAgQGFwcGx5IGFic29sdXRlIHRvcC1mdWxsIGxlZnQtMCBoaWRkZW4gdy1bMzUycHhdO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI1JSk7XG4gICAgfVxuICAgIC5jb250ZW50IHtcbiAgICAgIEBhcHBseSBtdC02IHJvdW5kZWQgYmctZWdnc2hlbGwgdGV4dC1uLTUwO1xuICAgICAgcGFkZGluZzogMTZweCAzM3B4IDE2cHggMTZweDtcbiAgICAgIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBAYXBwbHkgbWItMS41IHRleHQteHMgbGVhZGluZy1ub3JtYWw7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlciAudG9vbHRpcC1idG5fX2NvbnRlbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgJjpob3ZlciBidXR0b24ge1xuICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwIHRleHQtc3ByaW5nLTUwO1xuICB9XG59XG5cbi8vIHByaW1hcnkgYnV0dG9uXG4ucHJpbWFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgcm91bmRlZCBiZy1ibHVlY29yYWwgcC0zIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC13aGl0ZTtcbiAgYm94LXNoYWRvdzogMHB4IDJweCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcblxuICAmLnNwYWNlIHtcbiAgICBAYXBwbHkgcHgtNjtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIEBhcHBseSBiZy1uLTUwIHRleHQtd2hpdGU7XG4gIH1cblxuICBzdmcge1xuICAgIEBhcHBseSB0ZXh0LWJhc2U7XG4gIH1cbn1cblxuLy8gc2Vjb25kYXJ5IGJ1dHRvblxuLnNlY29uZGFyeS1idG4ge1xuICBAYXBwbHkgZ2FwLTEgZ2FwLXgtMSByb3VuZGVkIGJnLXdoaXRlIHAtMyB1cHBlcmNhc2UgdGV4dC1ibHVlY29yYWw7XG5cbiAgJi0tdG91Y2gge1xuICAgIEBhcHBseSBnYXAtMSBnYXAteC0xIHJvdW5kZWQgYmctd2hpdGUgcC0zIHVwcGVyY2FzZSB0ZXh0LWJsdWVjb3JhbDtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIC5kcm9wZG93bl9fYXJyb3cge1xuICAgICAgZm9udC1zaXplOiA2cHg7XG4gICAgICB0cmFuc2l0aW9uOiAwLjJzO1xuICAgIH1cbiAgICBzdmcge1xuICAgICAgQGFwcGx5IHRleHQtYmFzZTtcbiAgICB9XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICB9XG5cbiAgLmRyb3Bkb3duX19hcnJvdyB7XG4gICAgZm9udC1zaXplOiA2cHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuXG4vLyBwcmltYXJ5IG91dGxpbmUgYnV0dG9uXG4ucHJpbWFyeS1vdXRsaW5lLWJ0biB7XG4gIEBhcHBseSBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLTN4bCBib3JkZXIgYm9yZGVyLXNwcmluZy01MCBweC0zLjUgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1zcHJpbmctNTA7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKSk7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLXNwcmluZy01MCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICB9XG59XG5cbi5naG9zdC1idG4ge1xuICBAYXBwbHkgdGV4dC14cyBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtbi00MDtcbiAgdHJhbnNpdGlvbjogMC40cztcblxuICAmOmhvdmVyIHtcbiAgICBAYXBwbHkgdGV4dC1ibHVlY29yYWw7XG4gIH1cbn1cblxuLnRhYi1idG4tYW5jaG9yIHtcbiAgQGFwcGx5IGN1cnNvci1kZWZhdWx0O1xufVxuXG4udGFiLWJ0biB7XG4gIEBhcHBseSBoLTkgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMjAgYmctd2hpdGUgcC0yIHRleHQteHMgdGV4dC1uLTQwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJvcmRlci10dXJxdW9pc2UgYmctbi0xMCB0ZXh0LWJsdWVjb3JhbDtcbiAgfVxufVxuXG4uYWN0aXZlX190YWIge1xuICBAYXBwbHkgYm9yZGVyLXR1cnF1b2lzZSBiZy1uLTEwIHRleHQtYmx1ZWNvcmFsO1xufVxuXG4ucGFuZWwtYnRuIHtcbiAgQGFwcGx5IGgtMTAgc3BhY2UteC0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIGJnLWVnZ3NoZWxsIHB5LTMgcHgtMjtcbiAgd2lkdGg6IDQzcHg7XG5cbiAgJjpob3ZlciB7XG4gICAgQGFwcGx5IGJnLWJsdWVjb3JhbCB0ZXh0LXdoaXRlO1xuICB9XG5cbiAgLmRyb3Bkb3duX19hcnJvdyB7XG4gICAgZm9udC1zaXplOiA2cHg7XG4gICAgdHJhbnNpdGlvbjogMC4ycztcbiAgfVxufVxuIiwiLmhhbWJ1cmdlciB7XG4gIEBhcHBseSByZWxhdGl2ZSB6LWF1dG8gZmxleCBoLTExIHctMTEgY3Vyc29yLXBvaW50ZXIgZHVyYXRpb24tMzAwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZDtcbiAgei1pbmRleDogMTIwO1xuXG4gICYuYWN0aXZlIHtcbiAgICBzcGFuIHtcbiAgICAgIEBhcHBseSBiZy1uLTEwO1xuICAgIH1cbiAgfVxuXG4gIHNwYW4ge1xuICAgIEBhcHBseSBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGgtMSB3LTEwIHJvdW5kZWQtbGcgZHVyYXRpb24tMzAwO1xuICB9XG4gIHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgICBib3R0b206IDE4cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XG4gIH1cbiAgJi5hY3RpdmUge1xuICAgIHNwYW46bnRoLWNoaWxkKDEpIHtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpICB0cmFuc2xhdGVaKDApO1xuICAgIH1cbiAgICBzcGFuOm50aC1jaGlsZCgyKSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNjBweCk7XG4gICAgfVxuICAgIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCkgcm90YXRlKDMxNWRlZyk7XG4gICAgfVxuICB9XG4gIHNwYW46bnRoLWNoaWxkKDMpIHtcbiAgICB0b3A6IDE4cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxNXB4KTtcbiAgfVxufVxuLmhhbWJ1cmdlci1tZW51IHtcbiAgZGlzcGxheTogbm9uZTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG4uaG9tZS1idXJnZXItbWVudS5hY3RpdmUge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIHRyYW5zbGF0ZTogLTM1MCUgLTE0MCU7XG4gIH1cbiAgdHJhbnNsYXRlOiAtNDkwJSAtOTAlO1xuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgdHJhbnNsYXRlOiAtMzgwJSAtOTAlO1xuICB9XG59XG5cbiIsIi5pbnB1dCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDE0cHggMHB4IDE0cHggNTVweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xuICBAYXBwbHkgaC0xNCBib3JkZXIgYm9yZGVyLW4tMzAgc206aC0xNjtcblxuICAmOmZvY3VzIHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gIH1cblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgQGFwcGx5IGZvbnQtbm9ybWFsIHRleHQtbi00MDtcbiAgfVxuXG4gICY6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgICBAYXBwbHkgdGV4dC1uLTUwO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgICBwYWRkaW5nOiAyMHB4IDBweCAyMHB4IDU1cHg7XG4gIH1cbn1cbi5lcnJvciB7XG4gIEBhcHBseSB0ZXh0LXNtIHRleHQtY3JpbXNvbi01MCBzbTp0ZXh0LWJhc2U7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxuLmhhc19lcnJvciB7XG4gIC5mb3JtX19pbnB1dCB7XG4gICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcbiAgfVxufVxudGV4dGFyZWEuZm9ybV9faW5wdXQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi50ZXh0LWFyZWEge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogNjBweDtcbiAgcmVzaXplOiBub25lO1xufVxuLmZvcm1fX2lucHV0IHtcbiAgQGFwcGx5IG1iLTIgYm94LWJvcmRlciB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1ibHVlY29yYWwgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIHBhZGRpbmc6IDEzcHggMCAxM3B4IDE2cHg7XG4gIH1cbiAgcGFkZGluZzogMTBweCAwIDEwcHggMTZweDtcblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTQwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgQGFwcGx5IGJvcmRlciBib3JkZXItbi01MCBiZy1uLTEwO1xuICB9XG5cbiAgJjpmb2N1czo6cGxhY2Vob2xkZXIge1xuICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gIH1cbn1cbi5pbnB1dF9fZmllbGQge1xuICAubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkIHtcbiAgICBAYXBwbHkgYmctbi0yMCB0ZXh0LW4tNTA7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkLmlzLXBvaW50ZWQge1xuICAgIEBhcHBseSBiZy1uLTIwIHRleHQtbi01MDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC5pcy1hY3RpdmUge1xuICAgIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBAYXBwbHkgdy1bMzEwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBwci0zIHRleHQtc20gdGV4dC1uLTQwIGR1cmF0aW9uLTMwMDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIEBhcHBseSBhYnNvbHV0ZSByaWdodC0wIHRvcC0zIGgtNiB3LTcgYmctd2hpdGU7XG4gIH1cblxuICAubXVsdGlzZWxlY3QuaXMtb3BlbiB7XG4gICAgLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyIHtcbiAgICAgIEBhcHBseSB0ZXh0LW4tNTA7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0LWRyb3Bkb3duIHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LWNhcmV0IHtcbiAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybCgnL2ltYWdlcy9kcm9wZG93bi1hcnJvdy5zdmcnKTtcbiAgICBtYXNrLWltYWdlOiB1cmwoJy9pbWFnZXMvZHJvcGRvd24tYXJyb3cuc3ZnJyk7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qtc2VhcmNoIHtcbiAgICBAYXBwbHkgY3Vyc29yLXBvaW50ZXIgYm9yZGVyIGJvcmRlci1uLTMwIHB5LTIuNTtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC1zZWFyY2g6Zm9jdXMge1xuICAgIEBhcHBseSBiZy1uLTEwO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LXNlYXJjaDpmb2N1cyArIC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcjo6YWZ0ZXIge1xuICAgIEBhcHBseSBiZy1uLTEwO1xuICB9XG5cbiAgLnZ1ZV9fc2VsZWN0IHtcbiAgICBAYXBwbHkgbWItMiBib3JkZXIgYm9yZGVyLW4tMzAgdGV4dC1zbSBsZWFkaW5nLTYgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDBweCAxNnB4IDU1cHg7XG4gICAgfVxuICAgIHBhZGRpbmc6IDEzcHggMHB4IDEzcHggNTVweDtcbiAgfVxufVxuLmVycm9yX2lucHV0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2QxMDAxZTtcbn1cblxuLnBhbmVsX19pbnB1dCB7XG4gIEBhcHBseSBib3gtYm9yZGVyIGgtMTAgdy1mdWxsIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIGJnLXBhcGVyIHB5LTIuNSBwbC03IHByLTMgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcblxuICAmOjpwbGFjZWhvbGRlciB7XG4gICAgQGFwcGx5IHRleHQteHMgZm9udC1ub3JtYWwgdGV4dC1uLTMwIGR1cmF0aW9uLTMwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgfVxuXG4gICY6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcbiAgICBAYXBwbHkgdGV4dC1uLTQwO1xuICB9XG59XG4uc2VhcmNoIHtcbiAgQGFwcGx5IHJlbGF0aXZlO1xuXG4gICZfX2lucHV0IHtcbiAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTMwIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZTtcbiAgICBwYWRkaW5nOiAxMHB4IDQycHggMTBweCAzNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIH1cbiAgc3ZnIHtcbiAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0zIHRvcC0zIHRleHQtYmFzZSB0ZXh0LW4tMzA7XG4gIH1cbn1cbi5yZXF1aXJlZC1pY29uIHtcbiAgQGFwcGx5IHJlbGF0aXZlIHRvcC0wLjUgdGV4dC1iYXNlIGxlYWRpbmctbm9uZSB0ZXh0LWNyaW1zb24tNTA7XG59XG4iLCIuaWF0aS1saXN0LXRhYmxlIHtcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1uLTIwIHRleHQtbGVmdDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDVweCk7XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgfVxuXG4gIHRhYmxlIHtcbiAgICBAYXBwbHkgdGFibGUgdy1mdWxsICBiZy13aGl0ZTtcblxuICAgIC8vIG1pbi13aWR0aDogODAwcHggIWltcG9ydGFudCA7XG4gIH1cbiAgdGJvZHkge1xuICAgIHRyIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICAgICAgICBAYXBwbHkgYmctbi0xMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdHI6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICB0ZCxcbiAgICAgIHRoIHtcbiAgICAgICAgQGFwcGx5IHJlbGF0aXZlO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnICc7XG4gICAgICAgICAgQGFwcGx5IGFic29sdXRlIGxlZnQtMCBib3R0b20tMCBoLXB4IHctZnVsbCBtYXgtdy1mdWxsIGJnLW4tMjA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRkOmZpcnN0LWNoaWxkOmFmdGVyIHtcbiAgICAgICAgQGFwcGx5IG1sLTY7XG4gICAgICB9XG4gICAgICB0aC5jaGVjay1jb2x1bW46YWZ0ZXIge1xuICAgICAgICBAYXBwbHkgLW1sLTY7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGgge1xuICAgIEBhcHBseSBweS00IHB4LTYgYWxpZ24tdG9wIHRleHQteHMgdXBwZXJjYXNlIGxlYWRpbmctbm9ybWFsO1xuXG4gICAgc3ZnIHtcbiAgICAgIEBhcHBseSBtci0xIHRleHQteGwgdGV4dC1uLTMwO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgQGFwcGx5IGZsZXg7XG4gICAgICBzdmcge1xuICAgICAgICBAYXBwbHkgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRkIHtcbiAgICBAYXBwbHkgcmVsYXRpdmUgcHktNCBweC02IGFsaWduLXRvcCB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZDtcbiAgfVxuXG4gIHRyLmFscmVhZHktcHVibGlzaGVkIHtcbiAgICB0ZCxcbiAgICB0aC5jaGVjay1jb2x1bW4ge1xuICAgICAgQGFwcGx5IHB0LTExO1xuICAgIH1cbiAgfVxuXG4gIC5oYXMtc3RhdHVzIHtcbiAgICB0ZCB7XG4gICAgICBAYXBwbHkgcHgtNiBwdC0xMSBwYi03O1xuICAgIH1cbiAgICB0aCB7XG4gICAgICBAYXBwbHkgcHgtNiBwdC0xMSBwYi03O1xuICAgIH1cbiAgfVxuXG4gIC5jaGVjay1jb2x1bW4gLmNoZWNrYm94IHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gIH1cbn1cblxuLnVwbG9hZC1saXN0LXRhYmxlIHtcbiAgLnVwbG9hZC1lcnJvciB7XG4gICAgQGFwcGx5IGJnLXJvc2U7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIEBhcHBseSBiZy1yb3NlO1xuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gIH1cblxuICAudXBsb2FkLWVycm9yLWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICBkaXYge1xuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgQGFwcGx5IGJvcmRlci1iIGJvcmRlci1iLW4tMjAgcGItNDtcbiAgICAgIH1cblxuICAgICAgdWwge1xuICAgICAgICBAYXBwbHkgbXQtNCBzcGFjZS15LTQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWJsdWVjb3JhbDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzZweDtcblxuICAgICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgIEBhcHBseSBib3JkZXItYiBib3JkZXItYi1uLTIwIHBiLTQ7XG4gICAgICAgIH1cblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDhweDtcbiAgICAgICAgICBsZWZ0OiAyMHB4O1xuICAgICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIEBhcHBseSBiZy1ibHVlY29yYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm9wZW4ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLnVwbG9hZC1lcnJvci1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAyNnB4O1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgc3ZnIHtcbiAgICAgIGZvbnQtc2l6ZTogNnB4O1xuICAgIH1cblxuICAgICYub3BlbiB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cbiAgfVxufVxuXG4jY2Ige1xuICB3aWR0aDogNjhweDtcbn1cblxuI3N0YXR1cyB7XG4gIHdpZHRoOiAxOTJweDtcbn1cblxuI3B1Ymxpc2gge1xuICB3aWR0aDogMjgwcHg7XG59XG5cbiNkYXRlIHtcbiAgd2lkdGg6IDE3M3B4O1xufVxuLmlhdGktbGlzdC10YWJsZSB7XG4gIHRyIHtcbiAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xuICB9XG4gIHRkOm50aC1jaGlsZCgxKSB7XG4gICAgbWF4LXdpZHRoOiAxNTBweCAhaW1wb3J0YW50O1xuXG4gICAgYSB7XG4gICAgICBtYXgtd2lkdGg6IDE0NXB4ICFpbXBvcnRhbnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxufVxuIiwiLmNoZWNrYm94IHtcbiAgQGFwcGx5IHJlbGF0aXZlIGJsb2NrIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lO1xuICAuY2hlY2ttYXJrIHtcbiAgICBAYXBwbHkgZmxleCBoLTQgdy00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJvcmRlci0yIGJvcmRlci1uLTIwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG4gICAgJjphZnRlciB7XG4gICAgICBib3JkZXItd2lkdGg6IDAgM3B4IDNweCAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgbWItMC41IGhpZGRlbiBoLTIgdy1bNXB4XSByb3RhdGUtNDUgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG4gIH1cbiAgaW5wdXQge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBoLTAgdy0wIGN1cnNvci1wb2ludGVyIG9wYWNpdHktMDtcbiAgICAmOmNoZWNrZWQgfiAuY2hlY2ttYXJrIHtcbiAgICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwO1xuICAgICAgJjphZnRlciB7XG4gICAgICAgIEBhcHBseSBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgJjpob3ZlciBpbnB1dCB+IC5jaGVja21hcmsge1xuICAgIEBhcHBseSBib3JkZXItc3ByaW5nLTUwO1xuICB9XG59XG4vKipcbiAgTGFyYXZlbCBmb3JtIGRlc2lnblxuICovXG5mb3JtIHtcbiAgLmZvcm0tZmllbGQtZ3JvdXAge1xuICAgIEBhcHBseSByZWxhdGl2ZSBwLTM7XG4gICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIEBhcHBseSBtYi02O1xuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkIHtcbiAgICAgIEBhcHBseSBwLTM7XG4gICAgICAuaGVscC10ZXh0IHtcbiAgICAgICAgQGFwcGx5IG10LTIgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGJ1dHRvbi5kZWxldGUtaXRlbSB7XG4gICAgQGFwcGx5IGFic29sdXRlIGgtOCB3LTggY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtZnVsbCBiZy1uLTQwIC1pbmRlbnQtNDA7XG4gICAgJjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWFnZXMvdHJhc2hfZnVsbC5zdmcnKSBuby1yZXBlYXQgY2VudGVyO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0xLzIgdG9wLTEvMiBoLVsxOHB4XSB3LVsxOHB4XSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzI7XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgQGFwcGx5IGJnLWJsdWVjb3JhbDtcbiAgICB9XG4gIH1cblxuICAuZm9ybS1maWVsZC1ncm91cC1vdXRlciAuZm9ybS1maWVsZCB7XG4gICAgQGFwcGx5IHB4LTM7XG4gIH1cblxuICAuZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgQGFwcGx5IG1iLTIgZmxleCBqdXN0aWZ5LWJldHdlZW47XG4gICAgbGFiZWwge1xuICAgICAgQGFwcGx5IHRleHQteHMgbGVhZGluZy1yZWxheGVkO1xuICAgIH1cbiAgICAucmVxdWlyZWQge1xuICAgICAgQGFwcGx5IGZvbnQtYm9sZCB0ZXh0LXNhbG1vbi01MDtcbiAgICB9XG4gIH1cbiAgaW5wdXRbdHlwZT0ndGV4dCddLFxuICBpbnB1dFt0eXBlPSdkYXRlJ10sXG4gIHRleHRhcmVhIHtcbiAgICBAYXBwbHkgbXQtMCBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTIuNSB0ZXh0LXNtIGxlYWRpbmctbm9ybWFsIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwO1xuICAgIH1cbiAgICAmOmZvY3VzIHtcbiAgICAgIEBhcHBseSBib3JkZXIgYm9yZGVyLW4tNTAgYmctbi0xMDtcbiAgICB9XG4gICAgJjpmb2N1czo6cGxhY2Vob2xkZXIge1xuICAgICAgQGFwcGx5IHRleHQtbi01MDtcbiAgICB9XG4gIH1cblxuICBpbnB1dFt0eXBlPSd0ZXh0J10sXG4gIGlucHV0W3R5cGU9J2RhdGUnXSB7XG4gICAgQGFwcGx5IGgtMTI7XG4gIH1cblxuICBzZWxlY3Qge1xuICAgIEBhcHBseSB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgcHgtNCBweS0zIHRleHQtc20gdGV4dC1uLTQwIG91dGxpbmUtbm9uZSBkdXJhdGlvbi0zMDA7XG4gICAgJjpmb2N1cyB7XG4gICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1uLTUwIGJnLW4tMTA7XG4gICAgfVxuICB9XG4gIC5oZWxwIHtcbiAgICBAYXBwbHkgcmVsYXRpdmU7XG4gICAgJl9fdGV4dCB7XG4gICAgICBAYXBwbHkgaW52aXNpYmxlIGFic29sdXRlIHRvcC00IHotMjAgc3BhY2UteS0xLjUgcm91bmRlZCBiZy1lZ2dzaGVsbCBwLTQgdGV4dC1sZWZ0IHRleHQteHMgdGV4dC1uLTQwIG9wYWNpdHktMCBkdXJhdGlvbi0yMDA7XG4gICAgICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiKDAgMCAwIC8gMTAlKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xuICAgIH1cbiAgfVxuICAuaGVscDpob3ZlciB7XG4gICAgLmhlbHBfX3RleHQge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cbiAgLmFkZF9tb3JlIHtcbiAgICBAYXBwbHkgcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGgtMS8yIHctcHggYm9yZGVyLWwgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTIvNCBoLXB4IHctMy41IC10cmFuc2xhdGUteS0xLzIgYm9yZGVyLWIgYm9yZGVyLXNwcmluZy01MDtcbiAgICB9XG5cbiAgICBpIHtcbiAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1hZ2VzL2FkZC1tb3JlLWdyZWVuLnN2ZycpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgfVxuICB9XG4gIC5zdWJlbGVtZW50IHtcbiAgICAmLmJvcmRlci1sID4gbGFiZWwge1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICAgIC5zdWJlbGVtZW50LFxuICAgIC5zdWJlbGVtZW50ICsgYnV0dG9uIHtcbiAgICAgIEBhcHBseSBtbC02O1xuICAgIH1cblxuICAgIC53cmFwcGVkLWNoaWxkLWJvZHkge1xuICAgICAgQGFwcGx5IHJlbGF0aXZlO1xuICAgICAgPiAuZGVsZXRlLXBhcmVudCB7XG4gICAgICAgIEBhcHBseSBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAubXVsdGktZm9ybTpvbmx5LW9mLXR5cGUgPiAuZGVsZXRlLXBhcmVudCxcbiAgICAud3JhcHBlZC1jaGlsZC1ib2R5Om9ubHktb2YtdHlwZSA+IC5kZWxldGUtcGFyZW50IHtcbiAgICAgIEBhcHBseSBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tZmllbGQtZ3JvdXA6b25seS1vZi10eXBlID4gLmRlbGV0ZS1pdGVtIHtcbiAgICBAYXBwbHkgaGlkZGVuO1xuICB9XG5cbiAgLyoqXG4gICogQ29uZGl0aW9uIHRvIHNob3cgYW5kIGRlbGV0ZSBjb2xsZWN0aW9uIGVycm9yIGluIGZvcm1cbiAgKi9cbiAgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAubXVsdGktZm9ybSArIC5jb2xsZWN0aW9uX2Vycm9yLFxuICAuZm9ybS1maWVsZC1ncm91cCArIC5jb2xsZWN0aW9uX2Vycm9yLFxuICAud3JhcHBlZC1jaGlsZC1ib2R5ICsgLmNvbGxlY3Rpb25fZXJyb3Ige1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbi8qKlxuICBTZWxlY3QgMiBmaWVsZFxuKi9cbnNwYW4uc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuICAgIEBhcHBseSBoLTEyIHctZnVsbCByb3VuZGVkIGJvcmRlciBib3JkZXItbi0zMCBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LW4tNDAgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgICAgIEBhcHBseSBwLTAgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbDtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gICAgICBAYXBwbHkgaC0xMTtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciBzcGFuIHtcbiAgICAgIEBhcHBseSBtci0yLjUgdGV4dC1zbTtcbiAgICB9XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlciB7XG4gICAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDA7XG4gICAgfVxuICB9XG4gIC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRbYXJpYS1zZWxlY3RlZF0ge1xuICAgIGNvbG9yOiAjMWYyOTM3O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjY7XG4gIH1cbiAgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIHtcbiAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNTA7XG4gIH1cbn1cbi5tYXgtdy1oYWxmIHtcbiAgbWF4LXdpZHRoOiA1MCU7XG59XG5cbi8qKlxuICBBY3Rpdml0eSBEZXRhaWwgUGFnZVxuKi9cbi5hY3Rpdml0aWVzIHtcbiAgQGFwcGx5IGZsZXggZ2FwLTUgeGw6Z2FwLTc7XG5cbiAgJl9fc2lkZWJhciB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgd2lkdGg6IDI4MHB4O1xuXG4gICAgJi1pbm5lciB7XG4gICAgICBvcmRlcjogMTtcbiAgICB9XG4gIH1cblxuICAmX19jb250ZW50IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDUwcHgpO1xuICAgIH1cbiAgfVxuXG4gICZfX2NhcmQge1xuICAgIEBhcHBseSBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1uLTQwO1xuICAgIHBhZGRpbmc6IDEzcHg7XG4gIH1cblxuICAucHJvZ3Jlc3Mge1xuICAgIEBhcHBseSBpdGVtcy1jZW50ZXI7XG4gICAgd2lkdGg6IDE1MXB4O1xuICAgIG1pbi1oZWlnaHQ6IDE3NHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweCAwcHggMHB4IDhweDtcbiAgfVxuXG4gIC50YWItYnRuOmRpc2FibGVkIHtcbiAgICBAYXBwbHkgcG9pbnRlci1ldmVudHMtbm9uZSB0ZXh0LW4tMjA7XG5cbiAgICBzdmcge1xuICAgICAgQGFwcGx5IHRleHQtbi0yMDtcbiAgICB9XG4gIH1cbiAgLmhvdmVyLXRleHQge1xuICAgIHN2ZyB7XG4gICAgICBAYXBwbHkgdGV4dC1uLTMwO1xuICAgIH1cbiAgfVxufVxuLmVsZW1lbnRzLWNhcmQge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTkwcHgpIHtcbiAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ubWFudWFsLWltcG9ydCB7XG4gIC5oZWxwX190ZXh0IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAzNTBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG4ucmVnaXN0cnlfX2luZm8sXG4ucmVnaXN0ZXIsXG5hc2lkZSB7XG4gIC5oZWxwX190ZXh0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSkgIWltcG9ydGFudDtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAyNTBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuLmltcG9ydC1hY3Rpdml0eSxcbi5hY3Rpdml0aWVzX19jb250ZW50LS1lbGVtZW50IHtcbiAgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xuICB9XG59XG5hc2lkZSB7XG4gIC5wcm9ncmVzcyB7XG4gICAgLmhlbHBfX3RleHQge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00NSUpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4uYWN0aXZpdGllc19fY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnRhYi1idG4ge1xuICAuaGVscF9fdGV4dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgbGVmdDogMDtcbiAgICB9XG4gIH1cbn1cbi5hY3Rpdml0eS1kZWZhdWx0LXZhbHVlIHtcbiAgLmhlbHBfX3RleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSkgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLnBhZ2luYXRpb24ge1xuICBAYXBwbHkgcmVsYXRpdmUgei0wIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW4tNDA7XG5cbiAgPiBhLFxuICA+IHNwYW4ge1xuICAgIEBhcHBseSBmbGV4IGJvcmRlci15IGJvcmRlci1sIGJvcmRlci1uLTIwIHB5LTEuNSBweC0zO1xuXG4gICAgJjpub3QoLnByZXYtYnRuKSB7XG4gICAgICBAYXBwbHkgYm9yZGVyLWwgYm9yZGVyLW4tMjA7XG4gICAgfVxuXG4gICAgJi5wcmV2LWJ0bixcbiAgICAmLm5leHQtYnRuIHtcbiAgICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1uLTEwO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAYXBwbHkgdGV4dC14cztcbiAgICAgIH1cbiAgICB9XG4gICAgJi5wcmV2LWJ0biB7XG4gICAgICBAYXBwbHkgcm91bmRlZC10bCByb3VuZGVkLWJsO1xuICAgIH1cblxuICAgICYubmV4dC1idG4ge1xuICAgICAgQGFwcGx5IHJvdW5kZWQtYnIgcm91bmRlZC10ciBib3JkZXItcjtcbiAgICB9XG5cbiAgICAmLnByZXYtYnRuIHN2ZyB7XG4gICAgICBAYXBwbHkgbXItMTtcbiAgICB9XG5cbiAgICAmLm5leHQtYnRuIHN2ZyB7XG4gICAgICBAYXBwbHkgbWwtMTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICYuY3VycmVudCB7XG4gICAgICBAYXBwbHkgYmctYmx1ZWNvcmFsIHRleHQtcGFwZXI7XG4gICAgfVxuICB9XG59XG4iLCIub3ZlcmxheSB7XG4gIEBhcHBseSBmaXhlZCBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbCBiZy1ibGFjaztcbiAgei1pbmRleDogMTAwO1xuICBvcGFjaXR5OiAwLjc7XG5cbiAgJl9faW5uZXIge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbDtcbiAgfVxuXG4gICZfX2NvbnRlbnQge1xuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTIvNCB0b3AtMi80O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgLnNwaW5uZXIge1xuICAgICAgQGFwcGx5IGlubGluZS1ibG9jayBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1uLTEwIGJvcmRlci1vcGFjaXR5LTU7XG4gICAgICB3aWR0aDogNzVweDtcbiAgICAgIGhlaWdodDogNzVweDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxufVxuIiwiLnNlbGVjdDItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjdmOTtcbiAgfVxuXG4gIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICY6Zm9jdXMtd2l0aGluIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyYTJmMzA7XG4gICAgfVxuXG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMTtcbiAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgfVxuICB9XG59XG5cbi5zZWxlY3QyLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTAwMDAwcHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHtcbiAgcGFkZGluZzogNnB4O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAmW2FyaWEtc2VsZWN0ZWRdIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbn1cblxuLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIHtcbiAgLnNlbGVjdDItZHJvcGRvd24ge1xuICAgIGxlZnQ6IDA7XG5cbiAgICAmLS1hYm92ZSB7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWJlbG93IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxufVxuXG4uc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDRweDtcblxuICAuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYTZiNWJhO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcblxuICAgICY6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5bdHlwZT0nc2VhcmNoJ10ge1xuICBvdXRsaW5lLWNvbG9yOiAjYTZiNWJhO1xuICBvdXRsaW5lLW9mZnNldDogMDtcbn1cblxuLnNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDFweCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50O1xuICBtYXJnaW46IC0xcHggIWltcG9ydGFudDtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xuICBjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7XG59XG5cbi5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCB7XG4gIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgICAgIGNvbG9yOiAjMTU1MzY2O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgfVxuXG4gICAgLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAjOTk5O1xuICAgIH1cblxuICAgIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICByaWdodDogMXB4O1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBoZWlnaHQ6IDI2cHg7XG5cbiAgICAgIGIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtNHB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICM4ODggdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgIGJvcmRlci13aWR0aDogNXB4IDRweCAwIDRweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLnNlbGVjdDItcmVzdWx0cyA+IC5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMge1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cbn1cblxuLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIHtcbiAgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG4gICAgYiB7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM4ODggdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItd2lkdGg6IDAgNHB4IDVweCA0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmUge1xuICAgIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG4gIH1cblxuICAmLnNlbGVjdDItY29udGFpbmVyLS1iZWxvdyB7XG4gICAgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLnNpZGViYXItb3Blbi1pY29uIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBoZWlnaHQ6IDQwcHg7XG4gIGxlZnQ6IDBweDtcbiAgYm90dG9tOiA1MHB4O1xuICB6LWluZGV4OiA2MDtcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZGRlMDtcbiAgcGFkZGluZzogMCA1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTAwJSAxMDAlIDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogbm9uZTtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGNvbG9yOiAjMTU1MzY2O1xuICB9XG59XG4uZGV0YWlscy1zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyODBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG5cbiAgc3ZnIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgY29sb3I6ICMxNTUzNjY7XG4gIH1cbn1cbi5zaWRlYmFyLWNsb3NlLWljb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogNTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZWZ0OiAyNzVweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkZGUwO1xuICBoZWlnaHQ6IDQwcHg7XG4gIHdpZHRoOiA0MHB4O1xuICB6LWluZGV4OiAyMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7XG4gICAgbGVmdDogMjQwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgfVxuXG4gIHN2ZyB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIGNvbG9yOiAjMTU1MzY2O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index a9d50ba404..22a80a558e 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -205,6 +205,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); + var translation = window['globalLang']; var showUserDropdown = (0, vue_2.ref)(false); var toastVisibility = (0, vue_2.ref)(false); var showSidebar = (0, vue_2.ref)(false); @@ -229,20 +230,20 @@ exports["default"] = (0, vue_1.defineComponent)({ active: false }], menus: [{ - name: 'Activity DATA', + name: translation.admin.header.activity_data, permalink: '/activities', active: true }, { - name: 'Organisation DATA', + name: translation.admin.header.organisation_data, permalink: '/organisation', active: false }, { - name: 'Settings', + name: translation.admin.header.settings, permalink: '/setting', active: false }, { - name: 'Add / Import Activity', - permalink: '', + name: translation.common_lang.add_import_activity, + permalink: '#', active: false }] }); @@ -380,6 +381,7 @@ exports["default"] = (0, vue_1.defineComponent)({ localStorage.removeItem('openAddModel'); }); var __returned__ = { + translation: translation, showUserDropdown: showUserDropdown, toastVisibility: toastVisibility, showSidebar: showSidebar, @@ -536,7 +538,10 @@ exports["default"] = (0, vue_1.defineComponent)({ components: {}, props: {}, setup: function setup() { - return {}; + var language = window["globalLang"]; + return { + language: language + }; } }); @@ -728,6 +733,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); + var language = window["globalLang"]; var show = (0, vue_2.ref)(false); var hasErrors = (0, vue_2.ref)(false); var errorCount = (0, vue_2.ref)(0); @@ -793,6 +799,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }); }); var __returned__ = { + language: language, show: show, hasErrors: hasErrors, errorCount: errorCount, @@ -848,6 +855,7 @@ exports["default"] = (0, vue_1.defineComponent)({ emit = _a.emit; expose(); var props = __props; + var language = window["globalLang"]; var close = function close() { emit('close-popup', 'closed'); @@ -860,6 +868,7 @@ exports["default"] = (0, vue_1.defineComponent)({ document.documentElement.style.overflow = 'auto'; }); var __returned__ = { + language: language, emit: emit, props: props, close: close @@ -925,6 +934,12 @@ exports["default"] = (0, vue_1.defineComponent)({ required: false, "default": false } + }, + setup: function setup() { + var language = window["globalLang"]; + return { + language: language + }; } }); @@ -1122,6 +1137,7 @@ exports["default"] = (0, vue_1.defineComponent)({ emits: ['fetchActivities'], setup: function setup(props, _a) { var emit = _a.emit; + var language = window["globalLang"]; var active_page = (0, vue_1.ref)(1); (0, vue_1.watch)(active_page, function () { emit('fetchActivities', active_page.value); @@ -1149,7 +1165,8 @@ exports["default"] = (0, vue_1.defineComponent)({ updateActivePage: updateActivePage, nextPage: nextPage, previousPage: previousPage, - changePage: changePage + changePage: changePage, + language: language }; } }); @@ -1259,6 +1276,7 @@ exports["default"] = (0, vue_1.defineComponent)({ text: 'Please Wait' }); // call api for unpublishing + var language = window["globalLang"]; var toastMessage = (0, vue_2.inject)('toastMessage'); var deleteFunction = function deleteFunction() { @@ -1287,6 +1305,7 @@ exports["default"] = (0, vue_1.defineComponent)({ deleteValue: deleteValue, deleteToggle: deleteToggle, loader: loader, + language: language, toastMessage: toastMessage, deleteFunction: deleteFunction, BtnComponent: ButtonComponent_vue_1["default"], @@ -1429,6 +1448,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var _b = (0, vue_2.toRefs)(props), linkedToIati = _b.linkedToIati, @@ -1477,13 +1497,16 @@ exports["default"] = (0, vue_1.defineComponent)({ icon = 'tick'; // different content for step 1 based on coreElement status if (coreElementStatus) { - title = 'Core Elements Complete'; - description = 'Congratulations! All the core elements are complete. Continue to Validate this activity.'; + title = language.common_lang.core_completed_title; + description = language.common_lang.core_completed_description; } else { - title = 'Core Elements not complete'; - description = '

    There is missing data in some of the core elements. We highly recommend that you complete these data fields to help ensure your data is useful.

    Do you want to continue anyway and run checks on (validate) this data.

    '; + title = language.common_lang.core_not_completed_title; + description = language.common_lang.core_not_completed_description; icon = 'warning-fill'; - } + } //creating a shorter variable so that building error description for case 3 and 4 becomes easire + + + var s = language.common_lang.sticky.common; switch (publishStep.value) { // first step @@ -1496,32 +1519,32 @@ exports["default"] = (0, vue_1.defineComponent)({ //second step case 1: - publishState.title = "Activity will be validated before publishing"; - publishState.description = "This activity will be first validated before publishing the activity to the IATI Registry. "; + publishState.title = language.common_lang.sticky.title_1; + publishState.description = language.common_lang.sticky.description_1; publishState.icon = "shield"; publishState.alertState = false; break; // case 2 is for success validation case 2: - publishState.title = "IATI Validation"; - publishState.description = "

    Congratulations! No errors were found. Publish your data now.

    This data will be available on the IATI Datastore and other data portals/tools/software that use IATI data.

    "; + publishState.title = language.common_lang.sticky.title_2; + publishState.description = language.common_lang.sticky.description_2; publishState.icon = "tick"; publishState.alertState = true; break; //case 3 is for validation with critical errors case 3: - publishState.title = "IATI Validation Issue"; - publishState.description = "

    ".concat(err.criticalNumber, " critical errors, ").concat(err.errorNumber, " errors and ").concat(err.warningNumber, " warnings were found. View information about these errors/warnings at the top of the activity page.

    As your data has at least one critical error, it will not be available on the IATI Datastore and may not be available on other data portals/tools/software that use IATI data.

    We highly recommend you fix these issue(s) before publishing your activity to improve the quality and usefulness of your data.

    "); + publishState.title = language.common_lang.sticky.title_3; + publishState.description = "

    ".concat(err.criticalNumber, " ").concat(s.critical, " ").concat(s.errors, ", ").concat(err.errorNumber, " ").concat(s.errors, " ").concat(s.and, " ").concat(err.warningNumber, " ").concat(s.warnings, " ").concat(s.warnings, ". ").concat(s.critical, "

    ").concat(s.has_atleast_one_critical_error, "

    ").concat(s.we_highly_recommend, "

    "); publishState.icon = "warning-fill"; publishState.alertState = false; break; // case 4 is for validation without critical errors case 4: - publishState.title = "IATI Validation Issue"; - publishState.description = "

    ".concat(err.errorNumber, " errors and ").concat(err.warningNumber, " warnings were found. View information about these errors/warnings at the top of the activity page.

    We highly recommend you fix these issue(s) before publishing your activity to improve the quality and usefulness of your data.

    "); + publishState.title = language.common_lang.sticky.title_3; + publishState.description = "

    ".concat(err.errorNumber, " ").concat(s.errors, " ").concat(s.and, " ").concat(err.warningNumber, " ").concat(s.warnings, " ").concat(s.were_found, ". ").concat(s.view_information, "

    ").concat(s.we_highly_recommend, "

    "); publishState.icon = "warning-fill"; publishState.alertState = false; break; @@ -1551,7 +1574,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var validatorFunction = function validatorFunction() { loader.value = true; - loaderText.value = 'Validating Activity'; + loaderText.value = "".concat(language.common_lang.validating, " ").concat(language.common_lang.activity); axios_1["default"].post("/activity/".concat(id, "/validateActivity")).then(function (res) { var response = res.data; var errors = response.errors; @@ -1603,7 +1626,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var publishFunction = function publishFunction() { loader.value = true; - loaderText.value = 'Publishing Activity'; + loaderText.value = "".concat(language.common_lang.publishing, " ").concat(language.common_lang.activity); resetPublishStep(); axios_1["default"].post("/activity/".concat(id, "/publish")).then(function (res) { var response = res.data; @@ -1622,14 +1645,15 @@ exports["default"] = (0, vue_1.defineComponent)({ }); var btnText = (0, vue_2.computed)(function () { if (publishStatus.linked_to_iati && publishStatus.status === 'draft') { - return 'Republish'; + return language.button_lang.republish; } else if (!publishStatus.linked_to_iati && publishStatus.status === 'draft') { - return 'Publish'; + return language.button_lang.publish; } else { return ''; } }); var __returned__ = { + language: language, props: props, linkedToIati: linkedToIati, status: status, @@ -1721,6 +1745,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var activityId = (0, vue_2.toRefs)(props).activityId; // toggle state for modal popup var _b = (0, core_1.useToggle)(), @@ -1734,14 +1759,14 @@ exports["default"] = (0, vue_1.defineComponent)({ var loader = (0, vue_2.reactive)({ value: false, - text: 'Please Wait' + text: language.common_lang.please_wait }); // call api for unpublishing var toastMessage = (0, vue_2.inject)('toastMessage'); var unPublishFunction = function unPublishFunction() { loader.value = true; - loader.text = 'Unpublishing'; + loader.text = language.common_lang.unpublishing; axios_1["default"].post("/activity/".concat(id, "/unpublish")).then(function (res) { var response = res.data; toastMessage.message = response.message; @@ -1760,6 +1785,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, props: props, activityId: activityId, unpublishValue: unpublishValue, @@ -1811,8 +1837,7 @@ var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/a var ButtonComponent_vue_1 = __importDefault(__webpack_require__(/*! Components/ButtonComponent.vue */ "./resources/assets/js/components/ButtonComponent.vue")); -var PopupModal_vue_1 = __importDefault(__webpack_require__(/*! Components/PopupModal.vue */ "./resources/assets/js/components/PopupModal.vue")); // props - +var PopupModal_vue_1 = __importDefault(__webpack_require__(/*! Components/PopupModal.vue */ "./resources/assets/js/components/PopupModal.vue")); exports["default"] = (0, vue_1.defineComponent)({ __name: 'DeleteAction', @@ -1829,7 +1854,9 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); - var props = __props; // toggle state for modal popup + var props = __props; + var language = window["globalLang"]; // props + // toggle state for modal popup var _b = (0, core_1.useToggle)(), deleteValue = _b[0], @@ -1859,6 +1886,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, props: props, deleteValue: deleteValue, deleteToggle: deleteToggle, @@ -2087,6 +2115,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; // toggle state for modal popup var _b = (0, core_1.useToggle)(), publishValue = _b[0], @@ -2195,6 +2224,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }); var __returned__ = { + language: language, publishValue: publishValue, publishToggle: publishToggle, unpublishValue: unpublishValue, @@ -2363,7 +2393,8 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); - var props = __props; // toggle issues + var props = __props; + var language = window["globalLang"]; // toggle issues var _b = (0, core_1.useToggle)(), errorValue = _b[0], @@ -2414,6 +2445,7 @@ exports["default"] = (0, vue_1.defineComponent)({ updateTempMessage(); }); var __returned__ = { + language: language, props: props, errorValue: errorValue, errorToggle: errorToggle, @@ -2461,10 +2493,12 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var data = (0, vue_2.toRefs)(props).data; var color = data.value ? 'text-spring-50' : 'text-crimson-50', - text = data.value ? 'completed' : 'not completed'; + text = data.value ? language.common_lang.completed : language.common_lang.not_completed; var __returned__ = { + language: language, props: props, data: data, color: color, @@ -2500,7 +2534,7 @@ exports["default"] = (0, vue_1.defineComponent)({ props: { text: { type: String, - "default": 'Previously Published on IATI' + "default": window["globalLang"].common_lang.previously_published_on_iati }, icon: { type: String, @@ -2510,6 +2544,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + ; var __returned__ = {}; Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, @@ -2710,10 +2745,6 @@ var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/a var Loader_vue_1 = __importDefault(__webpack_require__(/*! Components/Loader.vue */ "./resources/assets/js/components/Loader.vue")); var ToastMessage_vue_1 = __importDefault(__webpack_require__(/*! Components/ToastMessage.vue */ "./resources/assets/js/components/ToastMessage.vue")); -/** - * Props - */ - exports["default"] = (0, vue_1.defineComponent)({ __name: 'ActivityDefaultValue', @@ -2745,6 +2776,11 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window['globalLang']; + /** + * Props + */ + /** * Reactive variables */ @@ -2831,6 +2867,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } var __returned__ = { + language: language, props: props, defaultValues: defaultValues, defaultErrors: defaultErrors, @@ -2972,6 +3009,8 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; + var _a = (0, vue_1.toRefs)(props), types = _a.types, coreCompleted = _a.coreCompleted; @@ -3183,8 +3222,8 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', - link: '/activities' + title: language.activities_lang.your_activities, + link: "/activities" }, { title: pageTitle, link: '' @@ -3234,7 +3273,8 @@ exports["default"] = (0, vue_1.defineComponent)({ toggleSidebar: toggleSidebar, istopVisible: istopVisible, screenWidth: screenWidth, - width: width + width: width, + language: language }; } }); @@ -3773,6 +3813,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var _this = this; var emit = _a.emit; + var language = window["globalLang"]; var formData = (0, vue_1.reactive)({ narrative: '', language: '', @@ -3832,7 +3873,8 @@ exports["default"] = (0, vue_1.defineComponent)({ languages: languages, organization: organization, closeModal: closeModal, - storeActivity: storeActivity + storeActivity: storeActivity, + language: language }; } }); @@ -4005,8 +4047,7 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var vue_2 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); //inject - +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); exports["default"] = (0, vue_1.defineComponent)({ __name: 'BulkPublishing', @@ -4016,6 +4057,8 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var refreshToastMsg = (0, vue_2.inject)("refreshToastMsg"); + var language = window["globalLang"]; //inject + var paStorage = (0, vue_2.inject)("paStorage"); var activities = (0, vue_2.ref)(paStorage.value.publishingActivities.activities), completed = (0, vue_2.ref)("processing"); @@ -4183,6 +4226,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var __returned__ = { refreshToastMsg: refreshToastMsg, + language: language, paStorage: paStorage, activities: activities, completed: completed, @@ -4237,6 +4281,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var selectedActivities = (0, vue_2.inject)('selectedActivities'); var toggle = (0, vue_2.ref)(false); @@ -4279,6 +4324,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, selectedActivities: selectedActivities, toggle: toggle, accordionToggle: accordionToggle, @@ -4348,6 +4394,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); + var language = window["globalLang"]; /** * Global State */ @@ -4363,7 +4410,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var loader = (0, vue_2.ref)(false); // Dynamic text for loader - var loaderText = (0, vue_2.ref)('Please Wait'); // reset step to zero after closing modal + var loaderText = (0, vue_2.ref)(language.common_lang.please_wait); // reset step to zero after closing modal var resetPublishStep = function resetPublishStep() { bulkPublishStep.value = 1; @@ -4423,7 +4470,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var verifyCoreElements = function verifyCoreElements() { loader.value = true; - loaderText.value = 'Verifying Core Elements'; + loaderText.value = language.common_lang.verifying_core_elements; var activities = store.state.selectedActivities.join(', '); axios_1["default"].get("/activities/core-elements-completed?activities=[".concat(activities, "]")).then(function (res) { var response = res.data; @@ -4452,7 +4499,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var validateActivities = function validateActivities() { loader.value = true; - loaderText.value = 'Validating Activity'; + loaderText.value = language.common_lang.validating_activities; var activities = store.state.selectedActivities.join(', '); axios_1["default"].post("/activities/validate-activities?activities=[".concat(activities, "]")).then(function (res) { var response = res.data; @@ -4484,7 +4531,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var startBulkPublish = function startBulkPublish() { loader.value = true; - loaderText.value = 'Starting to publish'; + loaderText.value = language.common_lang.starting_to_publish; pa.value.publishingActivities = {}; axios_1["default"].get("activities/start-bulk-publish?activities=[".concat(selectedActivities.value, "]")).then(function (res) { var response = res.data; @@ -4503,6 +4550,7 @@ exports["default"] = (0, vue_1.defineComponent)({ (0, vue_2.provide)('paStorage', pa); var __returned__ = { + language: language, store: store, publishAlertValue: publishAlertValue, publishAlertToggle: publishAlertToggle, @@ -4572,11 +4620,13 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var className = (0, vue_2.ref)(''); className.value = props.type ? 'bg-mint border-spring-10' : 'bg-crimson-10 border-crimson-20'; var className2 = (0, vue_2.ref)(''); className2.value = props.type ? 'text-spring-50 hover:text-spring-50' : 'text-crimson-50 hover:text-crimson-50'; var __returned__ = { + language: language, props: props, className: className, className2: className2 @@ -4625,10 +4675,12 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); - var criticalMessage = "Data will not be available on the IATI Datastore and may not be available on other data portals/tools/software that use IATI data. We highly recommend you fix these issue(s) before publishing."; - var warningMessage = "We highly recommend you fix these issue(s) before publishing your activity to improve the quality and usefulness of your data."; - var noErrorMessage = "Congratulations! No errors were found. Publish your data now. This data will be available on the IATI Datastore and other data portals/tools/ software that use IATI data."; + var language = window["globalLang"]; + var criticalMessage = language.common_lang.message.critical; + var warningMessage = language.common_lang.message.warning; + var noErrorMessage = language.common_lang.message.no_error; var __returned__ = { + language: language, criticalMessage: criticalMessage, warningMessage: warningMessage, noErrorMessage: noErrorMessage, @@ -4677,6 +4729,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)('types'); function formatDate(date) { @@ -4685,7 +4738,8 @@ exports["default"] = (0, vue_1.defineComponent)({ return { types: types, - formatDate: formatDate + formatDate: formatDate, + language: language }; } }); @@ -4724,10 +4778,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); return { types: types, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -4759,9 +4815,11 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window['globalLang']; var types = (0, vue_1.inject)("types"); return { - types: types + types: types, + language: language }; } }); @@ -4793,9 +4851,11 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window['globalLang']; var types = (0, vue_1.inject)('types'); return { - types: types + types: types, + language: language }; } }); @@ -4830,8 +4890,10 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("types"); var __returned__ = { + language: language, types: types }; Object.defineProperty(__returned__, '__isScriptSetup', { @@ -4898,7 +4960,10 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { - return {}; + var language = window['globalLang']; + return { + language: language + }; } }); @@ -4929,9 +4994,11 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window['globalLang']; var types = (0, vue_1.inject)('types'); return { - types: types + types: types, + language: language }; } }); @@ -4963,8 +5030,10 @@ exports["default"] = (0, vue_1.defineComponent)({ }, setup: function setup() { var types = (0, vue_1.inject)('types'); + var language = window['globalLang']; return { - types: types + types: types, + language: language }; } }); @@ -4995,9 +5064,11 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window['globalLang']; var types = (0, vue_1.inject)('types'); return { - types: types + types: types, + language: language }; } }); @@ -5045,9 +5116,11 @@ exports["default"] = (0, vue_1.defineComponent)({ return (0, moment_1["default"])(date).format("LL"); } + var language = window["globalLang"]; var types = (0, vue_2.inject)("types"); var __returned__ = { formatDate: formatDate, + language: language, types: types }; Object.defineProperty(__returned__, '__isScriptSetup', { @@ -5092,10 +5165,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); return { types: types, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -5126,6 +5201,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)('types'); function roundFloat(num) { @@ -5134,7 +5210,8 @@ exports["default"] = (0, vue_1.defineComponent)({ return { types: types, - roundFloat: roundFloat + roundFloat: roundFloat, + language: language }; } }); @@ -5169,6 +5246,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)('types'); function roundFloat(num) { @@ -5176,6 +5254,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } var __returned__ = { + language: language, types: types, roundFloat: roundFloat }; @@ -5259,8 +5338,10 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("types"); var __returned__ = { + language: language, types: types }; Object.defineProperty(__returned__, '__isScriptSetup', { @@ -5340,6 +5421,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var format = 'MMMM DD, YYYY'; var data = (0, vue_1.toRefs)(props).data; var resultData = data.value.content; @@ -5350,7 +5432,8 @@ exports["default"] = (0, vue_1.defineComponent)({ resultData: resultData, getActivityTitle: title_1["default"], currentLanguage: currentLanguage, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -5381,6 +5464,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); function roundFloat(num) { @@ -5389,7 +5473,8 @@ exports["default"] = (0, vue_1.defineComponent)({ return { types: types, - roundFloat: roundFloat + roundFloat: roundFloat, + language: language }; } }); @@ -5428,10 +5513,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); return { types: types, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -5463,9 +5550,11 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); return { - types: types + types: types, + language: language }; } }); @@ -5509,10 +5598,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var types = (0, vue_1.inject)("types"); return { types: types, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -5599,6 +5690,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var linkClasses = 'flex items-center w-full bg-white rounded p-2 text-sm text-n-50 font-bold leading-normal mb-2 shadow-default'; var toastData = (0, vue_1.reactive)({ visibility: false, @@ -5649,8 +5741,8 @@ exports["default"] = (0, vue_1.defineComponent)({ var breadcrumbData = [{ - title: 'Your Activities', - link: '/activities' + title: language.activities_lang.your_activities, + link: "/activities" }, { title: (0, title_1["default"])(activityTitle, 'en'), link: activityLink @@ -5705,7 +5797,8 @@ exports["default"] = (0, vue_1.defineComponent)({ toastData: toastData, periodData: periodData, showSidebar: showSidebar, - istopVisible: istopVisible + istopVisible: istopVisible, + language: language }; } }); @@ -5928,6 +6021,8 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var _this = this; + var language = window["globalLang"]; + var _a = (0, vue_1.toRefs)(props), activity = _a.activity, parentData = _a.parentData; @@ -5951,7 +6046,7 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', + title: language.activities_lang.your_activities, link: '/activities' }, { title: (0, title_1["default"])(activityTitle, 'en'), @@ -5960,7 +6055,7 @@ exports["default"] = (0, vue_1.defineComponent)({ title: resultTitle, link: "/activity/".concat(activityId, "/result/").concat(resultId) }, { - title: 'Indicator List', + title: language.common_lang.indicator_list, link: '' }]; (0, vue_1.onMounted)(function () { @@ -6013,7 +6108,8 @@ exports["default"] = (0, vue_1.defineComponent)({ breadcrumbData: breadcrumbData, toastData: toastData, resultId: resultId, - handleNavigate: handleNavigate + handleNavigate: handleNavigate, + language: language }; } }); @@ -6045,10 +6141,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var statusData = data.value; return { - statusData: statusData + statusData: statusData, + language: language }; } }); @@ -6090,6 +6188,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var data = (0, vue_1.toRefs)(props).data; var elementSpacing = 'mb-1'; + var language = window["globalLang"]; var baseline = data.value; var location = function location(data) { @@ -6128,7 +6227,8 @@ exports["default"] = (0, vue_1.defineComponent)({ baseline: baseline, location: location, dimensions: dimensions, - elementSpacing: elementSpacing + elementSpacing: elementSpacing, + language: language }; } }); @@ -6164,10 +6264,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var descriptionData = data.value; return { - descriptionData: descriptionData + descriptionData: descriptionData, + language: language }; } }); @@ -6217,11 +6319,13 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var dlData = data.value; return { dlData: dlData, - getActivityTitle: title_1["default"] + getActivityTitle: title_1["default"], + language: language }; } }); @@ -6251,6 +6355,12 @@ exports["default"] = (0, vue_1.defineComponent)({ type: String, required: true } + }, + setup: function setup() { + var language = window["globalLang"]; + return { + language: language + }; } }); @@ -6285,10 +6395,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var measureData = data.value; return { - measureData: measureData + measureData: measureData, + language: language }; } }); @@ -6332,10 +6444,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var id = (0, vue_1.inject)('parentData'); return { id: id, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -6371,10 +6485,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var refData = data.value; return { - refData: refData + refData: refData, + language: language }; } }); @@ -6410,10 +6526,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var titleData = data.value; return { - titleData: titleData + titleData: titleData, + language: language }; } }); @@ -6457,6 +6575,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var data = (0, vue_2.toRefs)(props).data; var dropdown = (0, vue_2.ref)(); var dropdownBtn = (0, vue_2.ref)(); @@ -6530,6 +6649,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } var __returned__ = { + language: language, props: props, data: data, dropdown: dropdown, @@ -6639,8 +6759,9 @@ exports["default"] = (0, vue_1.defineComponent)({ var _b = (0, core_1.useToggle)(), deleteValue = _b[0], - deleteToggle = _b[1]; // call api for publishing + deleteToggle = _b[1]; + var translation = window["globalLang"]; // call api for publishing var toastData = (0, vue_2.inject)('toastData'); var layout = 'basis-full lg:basis-6/12'; @@ -6688,6 +6809,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var __returned__ = { deleteValue: deleteValue, deleteToggle: deleteToggle, + translation: translation, props: props, toastData: toastData, layout: layout, @@ -6763,6 +6885,7 @@ exports["default"] = (0, vue_1.defineComponent)({ CreateModal: CreateModal_vue_1["default"] }, setup: function setup() { + var language = window["globalLang"]; var state = (0, vue_1.reactive)({ isVisible: false }); @@ -6799,7 +6922,8 @@ exports["default"] = (0, vue_1.defineComponent)({ toggle: toggle, modalToggle: modalToggle, toggleModel: toggleModel, - dropdownBtn: dropdownBtn + dropdownBtn: dropdownBtn, + language: language }; } }); @@ -6852,6 +6976,7 @@ exports["default"] = (0, vue_1.defineComponent)({ Modal: PopupModal_vue_1["default"] }, setup: function setup() { + var language = window["globalLang"]; var state = (0, vue_1.reactive)({ isVisible: false }); @@ -7030,7 +7155,8 @@ exports["default"] = (0, vue_1.defineComponent)({ showErrorpopup: showErrorpopup, downloadErrorxml: downloadErrorxml, message: message, - downloadError: downloadError + downloadError: downloadError, + language: language }; } }); @@ -7066,7 +7192,10 @@ exports["default"] = (0, vue_1.defineComponent)({ HoverText: HoverText_vue_1["default"] }, setup: function setup() { - return {}; + var language = window["globalLang"]; + return { + language: language + }; } }); @@ -7101,11 +7230,13 @@ exports["default"] = (0, vue_1.defineComponent)({ ActivityButton: AddActivityButton_vue_1["default"] }, setup: function setup() { + var language = window['globalLang']; var state = (0, vue_1.reactive)({ dismiss: true }); return { - state: state + state: state, + language: language }; } }); @@ -7157,11 +7288,13 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var store = (0, index_1.useStore)(); var toastMessage = (0, vue_2.inject)('toastData'); var errorData = (0, vue_2.inject)('errorData'); var refreshToastMsg = (0, vue_2.inject)('refreshToastMsg'); var __returned__ = { + language: language, store: store, toastMessage: toastMessage, errorData: errorData, @@ -7254,6 +7387,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var _b = (0, core_1.useToggle)(), selectAllValue = _b[0], @@ -7304,6 +7438,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, selectAllValue: selectAllValue, selectAllToggle: selectAllToggle, store: store, @@ -7399,6 +7534,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var linkClasses = 'flex items-center w-full bg-white rounded p-2 text-sm text-n-50 font-bold leading-normal mb-2 shadow-default'; var _a = (0, vue_1.toRefs)(props), @@ -7433,8 +7569,8 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', - link: '/activities' + title: language.acttivities_lang.your_activities, + link: "/activities" }, { title: activityTitle, link: activityLink @@ -7445,8 +7581,8 @@ exports["default"] = (0, vue_1.defineComponent)({ title: indicatorTitle, link: indicatorLink }, { - title: 'Period', - link: '' + title: language.common_lang.period, + link: "" }]; (0, vue_1.onMounted)(function () { if (props.toast.message !== '') { @@ -7469,7 +7605,8 @@ exports["default"] = (0, vue_1.defineComponent)({ indicatorLink: indicatorLink, periodLink: periodLink, toastData: toastData, - showSidebar: showSidebar + showSidebar: showSidebar, + language: language }; } }); @@ -7688,6 +7825,8 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var _this = this; + var language = window["globalLang"]; + var _a = (0, vue_1.toRefs)(props), activity = _a.activity, parentData = _a.parentData; @@ -7714,7 +7853,7 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', + title: language.activities_lang.your_activities, link: '/activity' }, { title: (0, title_1["default"])(activityTitle, 'en'), @@ -7726,7 +7865,7 @@ exports["default"] = (0, vue_1.defineComponent)({ title: (0, title_1["default"])(indicatorTitle, 'en'), link: indicatorLink }, { - title: 'Periods List', + title: language.common_lang.periods_list, link: '' }]; (0, vue_1.onMounted)(function () { @@ -7778,7 +7917,8 @@ exports["default"] = (0, vue_1.defineComponent)({ fetchListings: fetchListings, indicatorId: indicatorId, toastData: toastData, - handleNavigate: handleNavigate + handleNavigate: handleNavigate, + language: language }; } }); @@ -7824,6 +7964,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; // vue inject var dlType = (0, vue_1.inject)('types'); @@ -7834,7 +7975,8 @@ exports["default"] = (0, vue_1.defineComponent)({ elementSpacing: elementSpacing, location: location, getLocation: utils_1["default"], - dlType: dlType + dlType: dlType, + language: language }; } }); @@ -7880,6 +8022,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; // vue inject // const languageType = inject('types').language; @@ -7892,7 +8035,8 @@ exports["default"] = (0, vue_1.defineComponent)({ location: location, getLocation: utils_1["default"], // languageType, - dlType: dlType + dlType: dlType, + language: language }; } }); @@ -7968,6 +8112,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var linkClasses = 'flex items-center w-full bg-white rounded p-2 text-sm text-n-50 font-bold leading-normal mb-2 shadow-default'; var positionY = (0, vue_1.ref)(0); var showSidebar = (0, vue_1.ref)(false); @@ -7999,8 +8144,8 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', - link: '/activities' + title: language.activities_lang.your_activities, + link: "/activities" }, { title: (0, title_1["default"])(activityTitle, 'en'), link: activityLink @@ -8058,7 +8203,8 @@ exports["default"] = (0, vue_1.defineComponent)({ breadcrumbData: breadcrumbData, toastData: toastData, showSidebar: showSidebar, - istopVisible: istopVisible + istopVisible: istopVisible, + language: language }; } }); @@ -8136,11 +8282,13 @@ exports["default"] = (0, vue_1.defineComponent)({ resultVocabulary = types.value.resultVocabulary, language = types.value.language; + var translationLanguage = window["globalLang"]; return { elementData: elementData, resultType: resultType, resultVocabulary: resultVocabulary, - language: language + language: language, + translationLanguage: translationLanguage }; } }); @@ -8359,6 +8507,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var _this = this; + var language = window["globalLang"]; var activity = (0, vue_1.toRefs)(props).activity; var activityId = activity.value.id, activityTitle = activity.value.title, @@ -8375,13 +8524,13 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', + title: language.activities_lang.your_activities, link: '/activities' }, { title: (0, title_1["default"])(activityTitle, 'en'), link: activityLink }, { - title: 'Result List', + title: language.common_lang.result_list, link: '' }]; @@ -8432,7 +8581,8 @@ exports["default"] = (0, vue_1.defineComponent)({ resultsData: resultsData, getActivityTitle: title_1["default"], fetchListings: fetchListings, - handleNavigate: handleNavigate + handleNavigate: handleNavigate, + language: language }; } }); @@ -8531,12 +8681,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var result = (0, vue_1.toRefs)(props).result; var indicatorData = result.value.indicators.reverse(); return { indicatorData: indicatorData, dateFormat: dateFormat_1["default"], - getActivityTitle: title_1["default"] + getActivityTitle: title_1["default"], + language: language }; } }); @@ -8572,10 +8724,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var referenceData = data.value; return { - referenceData: referenceData + referenceData: referenceData, + language: language }; } }); @@ -8610,10 +8764,12 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var typeData = data.value; return { - typeData: typeData + typeData: typeData, + language: language }; } }); @@ -8725,6 +8881,8 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; + var _a = (0, vue_1.toRefs)(props), activity = _a.activity, transaction = _a.transaction; @@ -8781,14 +8939,14 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', - link: '/activity' + title: language.activities_lang.your_activities, + link: "/activity" }, { title: activityTitle, link: activityLink }, { - title: 'Transaction', - link: '' + title: language.common_lang.transaction, + link: "" }]; (0, vue_1.onMounted)(function () { window.addEventListener('scroll', handleScroll); @@ -8807,10 +8965,8 @@ exports["default"] = (0, vue_1.defineComponent)({ var isMandatoryIcon = function isMandatoryIcon(r) { return r.toString() === 'value' || r.toString() === 'transaction_type' || r.toString() === 'transaction_date'; - }; // const language = global_lang as Translation; - + }; - var language = window["global_lang"]; return { activityTitle: activityTitle, dateFormat: dateFormat_1["default"], @@ -8905,6 +9061,8 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; + var _a = (0, vue_1.toRefs)(props), data = _a.data, types = _a.types, @@ -8921,7 +9079,8 @@ exports["default"] = (0, vue_1.defineComponent)({ return { elementData: elementData, getLanguages: getLanguages, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -9147,6 +9306,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var _this = this; + var language = window["globalLang"]; var activity = (0, vue_1.toRefs)(props).activity; var activityId = activity.value.id, activityTitle = (0, title_1["default"])(activity.value.title, 'en'), @@ -9199,13 +9359,13 @@ exports["default"] = (0, vue_1.defineComponent)({ */ var breadcrumbData = [{ - title: 'Your Activities', + title: language.activities_lang.your_activities, link: '/activities' }, { title: activityTitle, link: activityLink }, { - title: 'Transaction List', + title: language.common_lang.transaction_list, link: '' }]; return { @@ -9218,7 +9378,8 @@ exports["default"] = (0, vue_1.defineComponent)({ toastData: toastData, deleteValue: deleteValue, deleteToggle: deleteToggle, - handleNavigate: handleNavigate + handleNavigate: handleNavigate, + language: language }; } }); @@ -9250,12 +9411,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var atData = data.value; var type = (0, vue_1.inject)('types'); return { atData: atData, - type: type + type: type, + language: language }; } }); @@ -9287,12 +9450,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var tdData = data.value; var type = (0, vue_1.inject)('types'); return { tdData: tdData, - type: type + type: type, + language: language }; } }); @@ -9324,12 +9489,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var code = data.value; var type = (0, vue_1.inject)('types'); return { code: code, - type: type + type: type, + language: language }; } }); @@ -9361,12 +9528,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var financeData = data.value; var type = (0, vue_1.inject)('types'); return { financeData: financeData, - type: type + type: type, + language: language }; } }); @@ -9398,12 +9567,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var flowData = data.value; var type = (0, vue_1.inject)('types'); return { flowData: flowData, - type: type + type: type, + language: language }; } }); @@ -9435,12 +9606,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var PoData = data.value; var type = (0, vue_1.inject)('types'); return { PoData: PoData, - type: type + type: type, + language: language }; } }); @@ -9472,12 +9645,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var PoData = data.value; var type = (0, vue_1.inject)('types'); return { PoData: PoData, - type: type + type: type, + language: language }; } }); @@ -9509,12 +9684,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var country = data.value; var type = (0, vue_1.inject)('types'); return { country: country, - type: type + type: type, + language: language }; } }); @@ -9546,12 +9723,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var country = data.value; var type = (0, vue_1.inject)("types"); return { country: country, - type: type + type: type, + language: language }; } }); @@ -9583,12 +9762,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var type = (0, vue_1.inject)("types"); var sector = data.value; return { sector: sector, - type: type + type: type, + language: language }; } }); @@ -9620,12 +9801,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var tsData = data.value; var type = (0, vue_1.inject)('types'); return { tsData: tsData, - type: type + type: type, + language: language }; } }); @@ -9665,11 +9848,13 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var date = data.value; return { date: date, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -9701,12 +9886,14 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var code = data.value; var type = (0, vue_1.inject)('types'); return { code: code, - type: type + type: type, + language: language }; } }); @@ -9746,11 +9933,13 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var data = (0, vue_1.toRefs)(props).data; var value = data.value; return { value: value, - dateFormat: dateFormat_1["default"] + dateFormat: dateFormat_1["default"], + language: language }; } }); @@ -9793,6 +9982,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var file = (0, vue_2.ref)(), error = (0, vue_2.ref)(''), loader = (0, vue_2.ref)(false), @@ -9844,6 +10034,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } var __returned__ = { + language: language, file: file, error: error, loader: loader, @@ -9902,6 +10093,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var activities = (0, vue_2.reactive)({}); var selectedActivities = (0, vue_2.reactive)([]); var selectedCount = (0, vue_2.ref)(0); @@ -9988,6 +10180,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } var __returned__ = { + language: language, activities: activities, selectedActivities: selectedActivities, selectedCount: selectedCount, @@ -10094,6 +10287,7 @@ exports["default"] = (0, vue_1.defineComponent)({ emit = _a.emit; expose(); var props = __props; + var language = window["globalLang"]; var active = (0, vue_2.ref)(false); var activities = (0, vue_2.reactive)([]); @@ -10127,6 +10321,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }); var __returned__ = { + language: language, props: props, emit: emit, active: active, @@ -10230,6 +10425,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var toastData = (0, vue_1.reactive)({ visibility: false, message: '', @@ -10400,7 +10596,8 @@ exports["default"] = (0, vue_1.defineComponent)({ errorData: errorData, toggleSidebar: toggleSidebar, showSidebar: showSidebar, - istopVisible: istopVisible + istopVisible: istopVisible, + language: language }; } }); @@ -10452,6 +10649,7 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); var props = __props; + var language = window["globalLang"]; var _b = (0, core_1.useToggle)(), searchBtnValue = _b[0], @@ -10503,6 +10701,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, props: props, searchBtnValue: searchBtnValue, searchBtnToggle: searchBtnToggle, @@ -10595,7 +10794,8 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); - var props = __props; // const status = ''; + var props = __props; + var language = window["globalLang"]; // const status = ''; var layout = 'basis-6/12'; @@ -10612,6 +10812,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, props: props, layout: layout, replaceUnderscore: replaceUnderscore, @@ -10671,13 +10872,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -10727,13 +10930,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -10783,13 +10988,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -10831,8 +11038,10 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)('orgTypes'); var __returned__ = { + language: language, types: types }; Object.defineProperty(__returned__, '__isScriptSetup', { @@ -10881,13 +11090,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -10937,13 +11148,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -10993,13 +11206,15 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; var types = (0, vue_2.inject)("orgTypes"); function formatDate(date) { - return date ? (0, moment_1["default"])(date).format("LL") : "Date Missing"; + return date ? (0, moment_1["default"])(date).format("LL") : language.common_lang.missing.date; } var __returned__ = { + language: language, types: types, formatDate: formatDate }; @@ -11043,6 +11258,7 @@ exports["default"] = (0, vue_1.defineComponent)({ Loader: Loader_vue_1["default"] }, setup: function setup() { + var language = window["globalLang"]; var formData = (0, vue_1.reactive)({ email: '' }); @@ -11076,7 +11292,8 @@ exports["default"] = (0, vue_1.defineComponent)({ formData: formData, loaderVisibility: loaderVisibility, emailError: emailError, - reset: reset + reset: reset, + language: language }; } }); @@ -11125,6 +11342,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var loaderVisibility = (0, vue_1.ref)(false); var formData = (0, vue_1.reactive)({ email: props.email, @@ -11204,7 +11422,8 @@ exports["default"] = (0, vue_1.defineComponent)({ loaderVisibility: loaderVisibility, formData: formData, errorData: errorData, - reset: reset + reset: reset, + language: language }; } }); @@ -11264,6 +11483,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var store = (0, store_1.useStore)(); var defaultForm = (0, vue_1.computed)(function () { return store.state.defaultForm; @@ -11283,7 +11503,8 @@ exports["default"] = (0, vue_1.defineComponent)({ props: props, defaultForm: defaultForm, defaultError: defaultError, - updateStore: updateStore + updateStore: updateStore, + language: language }; } }); @@ -11516,6 +11737,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(props) { var _this = this; + var language = window["globalLang"]; var tab = (0, vue_1.ref)('publish'); var store = (0, store_1.useStore)(); var loaderVisibility = (0, vue_1.ref)(false); @@ -11686,7 +11908,8 @@ exports["default"] = (0, vue_1.defineComponent)({ toastMessage: toastMessage, toastType: toastType, toggleTab: toggleTab, - submitForm: submitForm + submitForm: submitForm, + language: language }; } }); @@ -11733,6 +11956,7 @@ exports["default"] = (0, vue_1.defineComponent)({ emits: ['submitPublishing'], setup: function setup(props, _a) { var emit = _a.emit; + var language = window["globalLang"]; var tab = (0, vue_1.ref)('publish'); var store = (0, store_1.useStore)(); var publishingForm = (0, vue_1.computed)(function () { @@ -11774,7 +11998,8 @@ exports["default"] = (0, vue_1.defineComponent)({ submitPublishing: submitPublishing, toggleTab: toggleTab, updateStore: updateStore, - autoVerify: autoVerify + autoVerify: autoVerify, + language: language }; } }); @@ -11811,21 +12036,22 @@ var ProgressLoader_vue_1 = __importDefault(__webpack_require__(/*! Components/se var ToastMessage_vue_1 = __importDefault(__webpack_require__(/*! Components/ToastMessage.vue */ "./resources/assets/js/components/ToastMessage.vue")); -var TableList_vue_1 = __importDefault(__webpack_require__(/*! ./components/TableList.vue */ "./resources/assets/js/views/superadmin/components/TableList.vue")); // ref - +var TableList_vue_1 = __importDefault(__webpack_require__(/*! ./components/TableList.vue */ "./resources/assets/js/views/superadmin/components/TableList.vue")); exports["default"] = (0, vue_1.defineComponent)({ __name: 'OrganisationList', setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; // ref + var loader = (0, vue_2.reactive)({ status: false, - text: 'Please Wait' + text: language.common_lang.please_wait }); //Breadcrumb data var breadcrumbData = [{ - title: 'Organisations', + title: language.common_lang.organisations, link: '' }]; var toastMessage = (0, vue_2.reactive)({ @@ -11837,6 +12063,7 @@ exports["default"] = (0, vue_1.defineComponent)({ (0, vue_2.provide)('loader', loader); (0, vue_2.provide)('toastData', toastMessage); var __returned__ = { + language: language, loader: loader, breadcrumbData: breadcrumbData, toastMessage: toastMessage, @@ -11885,6 +12112,7 @@ exports["default"] = (0, vue_1.defineComponent)({ setup: function setup(__props, _a) { var expose = _a.expose; expose(); + var language = window["globalLang"]; /** * Switch Back */ @@ -11894,6 +12122,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, switchBack: switchBack }; Object.defineProperty(__returned__, '__isScriptSetup', { @@ -12090,6 +12319,8 @@ exports["default"] = (0, vue_1.defineComponent)({ var expose = _a.expose; expose(); + var language = window["globalLang"]; // inject + var toastMessage = (0, vue_2.inject)('toastData'); var loader = (0, vue_2.inject)('loader'); //typeface @@ -12189,6 +12420,7 @@ exports["default"] = (0, vue_1.defineComponent)({ }; var __returned__ = { + language: language, toastMessage: toastMessage, loader: loader, organisationData: organisationData, @@ -12311,6 +12543,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var step = (0, vue_1.ref)(1); var publisherExists = (0, vue_1.ref)(true); var isLoaderVisible = (0, vue_1.ref)(false); @@ -12403,121 +12636,121 @@ exports["default"] = (0, vue_1.defineComponent)({ var registerForm = (0, vue_1.reactive)({ 1: { - title: "Publisher Information", + title: language.register_lang.publisher_information.label, is_complete: false, - description: "This information will be used to create a Publisher in IATI Publisher", - hover_text: "We refer to organisations who publish IATI data as 'Publishers'. Before publishing data, all organisations need their own 'Publisher Account' on the IATI Registry (iatiregistry.org). Enter your organisation's data here and we'll create your organisation's Publisher Account for you. These details will also be saved here in IATI Publisher. ", + description: language.register_lang.publisher_information.description, + hover_text: language.register_lang.publisher_information.hover_text, fields: { publisher_name: { - label: "Publisher Name", + label: language.register_lang.publisher_name.label, name: "publisher_name", - placeholder: "Type your organisation name here", + placeholder: language.register_lang.publisher_name.placeholder, id: "publisher-name", required: true, - hover_text: "The name of your organisation publishing the data.", + hover_text: language.register_lang.publisher_name.hover_text, type: "text", "class": "col-span-2 mb-4 lg:mb-2", help_text: "" }, publisher_id: { - label: "Publisher ID", + label: language.register_lang.publisher_id.label, name: "publisher_id", - placeholder: "Type your organisation ID here", + placeholder: language.register_lang.publisher_id.placeholder, id: "publisher-id", required: true, - hover_text: "Provide a unique ID for your organisation. It must be at least two characters long and use lower case letters. You can include letters, numbers and also - (dash) and _ (underscore). Where possible use a short abbreviation of your organisation's name, for example: 'nef_mali' for Near East Foundation Mali.", + hover_text: language.register_lang.publisher_id.hover_text, type: "text", "class": "mb-4 lg:mb-2", help_text: "" }, country: { - label: "Country", + label: language.register_lang.country.label, name: "country", - placeholder: "Select a Country", + placeholder: language.register_lang.country.placeholder, id: "country_select", required: false, type: "select", - hover_text: "Add the location of your organisation.", + hover_text: language.register_lang.country.hover_text, options: props.types.country, "class": "mb-4 lg:mb-2 relative", help_text: "" }, registration_agency: { - label: "Organisation Registration Agency", + label: language.register_lang.org_registration_agency.label, name: "registration_agency", - placeholder: "Select an Organisation Registration Agency", + placeholder: language.register_lang.org_registration_agency.placeholder, id: "registration-agency", required: true, - hover_text: "Select the agency in your country where your organisation is registered. If you do not know this information please email support@iatistandard.org", + hover_text: language.register_lang.org_registration_agency.hover_text, type: "select", options: registration_agency, "class": "mb-4 lg:mb-2 relative", help_text: "" }, registration_number: { - label: "Registration Number", + label: language.register_lang.registration_number.label, name: "registration_number", - placeholder: "Type your Registration Number here", + placeholder: language.register_lang.registration_number.placeholder, id: "registration-number", required: true, - hover_text: "Provide the registration number for your organisation that has been provided by organisation registration agency. If you do not know this please email support@iatistandard.org.", + hover_text: language.register_lang.registration_number.hover_text, type: "text", "class": "mb-4 lg:mb-2", - help_text: "for e.g. 123456" + help_text: "".concat(language.register_lang.for_eg, " 123456") }, identifier: { - label: "IATI Organisational Identifier", + label: language.register_lang.iati_org_identifier.label, name: "identifier", placeholder: "", id: "identifier", required: true, - hover_text: 'The Organisation Identifier is a unique code for your organisation. This is genereated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier.', + hover_text: language.register_lang.iati_org_identifier.hover_text, type: "text", "class": "mb-4 lg:mb-6", - help_text: "This is autogenerated, please make sure to fill the above fields correctly." + help_text: language.register_lang.iati_org_identifier.help_text }, publisher_type: { - label: "Publisher Type", + label: language.register_lang.publisher_type.label, name: "publisher_type", - placeholder: "Select a publisher type ", + placeholder: language.register_lang.publisher_type.placeholder, id: "publisher-type", required: true, - hover_text: 'Select the type that best describes your organisation. Read more on Organisation types.', + hover_text: language.register_lang.publisher_type.hover_text, type: "select", options: props.types.publisherType, "class": "mb-4 lg:mb-2 relative", help_text: "" }, license_id: { - label: "Data License", + label: language.register_lang.data_license.label, name: "license_id", - placeholder: "Select a Data License", + placeholder: language.register_lang.data_license.placeholder, id: "data-license", required: true, - hover_text: " Select the License under which your data is being published. IATI is an open data standard and requires you to make your data available under an open licence so it can be freely used. One of the most frequently used licenses is Creative Commons Attribution. For more information read: How to license your data.", + hover_text: language.register_lang.data_license.hover_text, type: "select", options: props.types.dataLicense, "class": "mb-4 lg:mb-2 relative", help_text: "" }, image_url: { - label: "Publisher Logo Url", + label: language.register_lang.publisher_logo_url.label, name: "image_url", - placeholder: "For e.g. http://mylogo.com ", + placeholder: "".concat(language.register_lang.for_eg, " http://mylogo.com "), id: "publisher-logo-url", required: false, - hover_text: " Provide a link to an image to your organisation's logo (Optimum size: 200 x 120 px)", + hover_text: language.register_lang.publisher_logo_url.hover_text, type: "text", "class": "mb-4 lg:mb-2 relative", help_text: "" }, description: { - label: "Organization Description", + label: language.register_lang.organisation_desc.label, name: "description", - placeholder: "Type Description here", + placeholder: language.register_lang.organisation_desc.placeholder, id: "organization-description", required: false, - hover_text: " Provide a short description about your organisation.", + hover_text: language.register_lang.organisation_desc.hover_text, type: "textarea", "class": "mb-4 col-span-2 lg:mb-2 relative", help_text: "" @@ -12525,90 +12758,90 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, 2: { - title: "Contact Information", + title: language.register_lang.contact_info.title, is_complete: false, - description: "This information will be used to create a Publisher in IATI Publisher", + description: language.register_lang.publisher_information.description, fields: { contact_email: { - label: "Contact Email", + label: language.register_lang.contact.label, name: "contact_email", placeholder: "", id: "contact-email", required: true, - hover_text: "Please add a contact email address for your organisation. Please note that IATI is an open data standard and the email provided here will be visible to others on the IATI Registry.", + hover_text: language.register_lang.contact.hover_text, type: "text", "class": "mb-4 lg:mb-6" }, website: { - label: "Website", + label: language.register_lang.website.label, name: "website", - placeholder: "For e.g. http://mywebsite.com", + placeholder: "".concat(language.register_lang.for_eg, " http://mywebsite.com"), id: "website", required: false, - hover_text: "Add the URL to your organisation's website.", + hover_text: language.register_lang.website.hover_text, type: "text", "class": "mb-4 lg:mb-6" }, address: { - label: "Address", + label: language.register_lang.address.label, name: "address", - placeholder: "Type address here", + placeholder: language.register_lang.address.placeholder, id: "address", required: false, - hover_text: "Provide a contact address for your organisation.", + hover_text: language.register_lang.address.hover_text, type: "textarea", "class": "mb-4 col-span-2 lg:mb-6" } } }, 3: { - title: "Publishing Aditional Information", + title: language.register_lang.publishing_additional_info.title, is_complete: false, - description: "This information will be used to create an admin account in IATI Publisher", + description: language.register_lang.publishing_additional_info.description, fields: { source: { - label: "Source", + label: language.register_lang.source.label, name: "source", - placeholder: "Select a Source", + placeholder: language.register_lang.source.placeholder, id: "contact-email", required: true, - hover_text: "Select an option:
    Primary - your organisation is publishing its own or (associated organisations') data
    Secondary - your organisation is reproducing data on the activities of another organisation", + hover_text: language.register_lang.source.hover_text, type: "select", options: props.types.source, "class": "mb-4 lg:mb-6" }, record_exclusions: { - label: "Record Exclusions", + label: language.register_lang.record_exclusions.label, name: "record_exclusions", - placeholder: "Type Record Exclusions here", + placeholder: language.register_lang.record_exclusions.placeholder, id: "record-exclusions", required: false, - hover_text: "Does your organisation have an exclusion policy that provide details on what data that it cannot publish? For example an organisation may not be able to publish data because of political sensitivity issues or if information is commercially restricted. Please provide details here about what data your organisation needs to exclude (if any), and a URL to your organisation's exclusion policy (if it has one). For more information read: Information and data you can't publish (exclusions)", + hover_text: language.register_lang.record_exclusions.hover_text, type: "textarea", "class": "mb-4 col-span-2 lg:mb-6" } } }, 4: { - title: "Administrator Information", + title: language.register_lang.administrator_information.title, is_complete: false, - description: "Provide your information to create an admin account here on IATI Publisher and IATI Registry at once.", + description: language.register_lang.administrator_information.iati_register_description, fields: { username: { - label: "Username", + label: language.register_lang.username.label, name: "username", - placeholder: "Type username here", + placeholder: language.register_lang.username.placeholder, id: "username", required: true, - hover_text: "You will need this later to login into IATI Publisher.", + hover_text: language.register_lang.username.hover_text, type: "text", "class": "mb-4 lg:mb-2", help_text: "" }, full_name: { - label: "Full Name", + label: language.register_lang.fullname.label, name: "full_name", - placeholder: "Type your full name here", + placeholder: language.register_lang.fullname.placeholder, id: "full-name", hover_text: "", required: true, @@ -12616,9 +12849,9 @@ exports["default"] = (0, vue_1.defineComponent)({ "class": "col-start-1 mb-4 lg:mb-2" }, email: { - label: "Email Address", + label: language.register_lang.email_address.label, name: "email", - placeholder: "Type valid email here", + placeholder: language.register_lang.email_address.placeholder, id: "email", required: true, hover_text: "", @@ -12626,31 +12859,31 @@ exports["default"] = (0, vue_1.defineComponent)({ "class": "mb-4 lg:mb-2" }, password: { - label: "Password", + label: language.register_lang.password.label, name: "password", - placeholder: "Type password here", + placeholder: language.register_lang.password.placeholder, id: "password", required: true, - help_text: "Minimum length: 6 characters", + help_text: language.register_lang.password.help_text, type: "password", "class": "mb-4 lg:mb-2" }, password_confirmation: { - label: "Confirm Password", + label: language.register_lang.password.confirm, name: "password_confirmation", - placeholder: "Type password here", + placeholder: language.register_lang.password.placeholder, id: "password-confirmation", required: true, - help_text: "Should match the password above", + help_text: language.register_lang.password.confirm_help, type: "password", "class": "mb-4 lg:mb-6" } } }, 5: { - title: "Email Verification", + title: language.register_lang.email_verification.title, is_complete: false, - description: "Please verify and activate your IATI Publisher account through your provided email" + description: language.register_lang.email_verification.description } }); /** @@ -12907,17 +13140,18 @@ exports["default"] = (0, vue_1.defineComponent)({ props: props, step: step, resize: resize, - textarea: textarea + textarea: textarea, + language: language }; } }); /***/ }), -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true": -/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true ***! - \*********************************************************************************************************************************************************************************************************************************************************************************/ +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true": +/*!**************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true ***! + \**************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; @@ -12930,17 +13164,13 @@ Object.defineProperty(exports, "__esModule", ({ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); exports["default"] = (0, vue_1.defineComponent)({ - __name: 'PublishingChecklist', + __name: 'IatiStandard', setup: function setup(__props, _a) { var expose = _a.expose; expose(); - - function triggerModel() { - localStorage.setItem('openAddModel', 'true'); - } - + var language = window["globalLang"]; var __returned__ = { - triggerModel: triggerModel + language: language }; Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, @@ -12952,6 +13182,54 @@ exports["default"] = (0, vue_1.defineComponent)({ /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts": +/*!**********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts ***! + \**********************************************************************************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); + +var SimpleSpan_vue_1 = __importDefault(__webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'Components/SimpleSpan.vue'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()))); + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +exports["default"] = (0, vue_1.defineComponent)({ + components: { + SimpleSpan: SimpleSpan_vue_1["default"] + }, + props: { + elements: { + type: String, + required: true + } + }, + setup: function setup() { + var language = window["globalLang"]; + return { + SimpleSpan: SimpleSpan_vue_1["default"], + language: language + }; + } +}); + +function triggerModel() { + localStorage.setItem('openAddModel', 'true'); +} + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/RegisterPage.vue?vue&type=script&lang=ts": /*!***************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/RegisterPage.vue?vue&type=script&lang=ts ***! @@ -13019,6 +13297,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup(props) { + var language = window["globalLang"]; var step = (0, vue_1.ref)(1); var publisherExists = (0, vue_1.ref)(true); var isLoaderVisible = (0, vue_1.ref)(false); @@ -13081,102 +13360,102 @@ exports["default"] = (0, vue_1.defineComponent)({ }); var registerForm = (0, vue_1.reactive)({ 1: { - title: "Publisher Information", + title: language.register_lang.publisher_information.label, is_complete: false, - description: "This information will be used to create a Publisher in IATI Publisher", - hover_text: "Provide information about your organisation. You will need to provide the same information that you used to create your Publisher Account on the IATI Registry (iatiregistry.org).", + description: language.register_lang.publisher_information.description, + hover_text: language.register_lang.publisher_information.hover_text, fields: { publisher_name: { - label: "Publisher Name", + label: language.register_lang.publisher_name, name: "publisher_name", - placeholder: "Type your Publisher Name here", + placeholder: language.register_lang.publsher_name.placeholder, id: "publisher-name", required: true, - hover_text: "Provide the name of your organisation.", + hover_text: language.register_lang.publsher_name.hover_text, type: "text", "class": "col-span-2 mb-4 lg:mb-2", help_text: "" }, publisher_id: { - label: "Publisher ID", + label: language.register_lang.publisher_id.label, name: "publisher_id", - placeholder: "Type your organisation ID here", + placeholder: language.register_lang.publisher_id.placeholder, id: "publisher-id", required: true, - hover_text: "This is the unique ID for your organisation that you created when you set up your IATI Registry Publisher Account. It should be a shorter version of your organisation's name, which will include lowercase letters and may include numbers, - (dash) or _ (underscore). For example nef_mali' for Near East Foundation Mali.", + hover_text: language.register_lang.publisher_id.hover_text, type: "text", "class": "mb-4 lg:mb-2", help_text: "" }, country: { - label: "Country", + label: language.register_lang.country.label, name: "country", - placeholder: "Select a Country", + placeholder: language.register_lang.country.placeholder, id: "country_select", required: false, type: "select", - hover_text: "Add the location of your organisation.", + hover_text: language.register_lang.country.hover_text, options: props.country, "class": "mb-4 lg:mb-2 relative", help_text: "" }, organization_registration_agency: { - label: "Organisation Registration Agency", + label: language.register_lang.org_registration_agency.label, name: "registration_agency", - placeholder: "Select an Organisation Registration Agency", + placeholder: language.register_lang.org_registration_agency.placeholder, id: "registration-agency", required: true, - hover_text: "Provide the name of the agency in your country where you organisation is registered. If you do not know this information please email support@iatistandard.org.", + hover_text: language.register_lang.org_registration_agency.hover_text, type: "select", options: registration_agency, "class": "mb-4 lg:mb-2 relative", help_text: "" }, organization_registration_no: { - label: "Organisation Registration Number", + label: language.register_lang.org_registration_no.label, name: "registration_number", - placeholder: "Type your Registration Number here", + placeholder: language.register_lang.org_registration_no.placeholder, id: "registration-number", required: true, - hover_text: "Add the registration number for your organisation that has been provided by the registration agency named above.", + hover_text: language.register_lang.org_registration_no.hover_text, type: "text", "class": "mb-4 lg:mb-2", - help_text: "for e.g. 123456" + help_text: "".concat(language.register_lang.for_eg, " 123456") }, iati_organizational_identifier: { - label: "IATI Organisational Identifier", + label: language.register_lang.iati_org_identifier.label, name: "identifier", placeholder: "", id: "identifier", required: true, - hover_text: 'The Organisation Identifier is a unique code for your organisation. This is generated from the Organisation Registration Agency and Registration Number. For more information read: How to create your IATI organisation identifier.', + hover_text: language.register_lang.iati_org_identifier.hover_text, type: "text", "class": "mb-4 lg:mb-6", - help_text: "This is autogenerated, please make sure to fill the above fields correctly." + help_text: language.register_lang.iati_org_identifier.help_text } } }, 2: { - title: "Administrator Information", + title: language.register_lang.administrator_information.label, is_complete: false, - description: "This information will be used to create an admin account in IATI Publisher", - hover_text: "Provide your information to create an admin account here on IATI Publisher.", + description: language.register_lang.administrator_information.register_description, + hover_text: language.register_lang.administrator_information.hover_text, fields: { username: { - label: "Username", + label: language.register_lang.username.label, name: "username", - placeholder: "Type username here", + placeholder: language.register_lang.username.placeholder, id: "username", required: true, - hover_text: "You will need this later to login into IATI Publisher.", + hover_text: language.register_lang.username.hover_text, type: "text", "class": "mb-4 lg:mb-2", help_text: "" }, full_name: { - label: "Full Name", + label: language.register_lang.fullname.label, name: "full_name", - placeholder: "Type your full name here", + placeholder: language.register_lang.fullname.placeholder, id: "full-name", hover_text: "", required: true, @@ -13184,9 +13463,9 @@ exports["default"] = (0, vue_1.defineComponent)({ "class": "col-start-1 mb-4 lg:mb-2" }, email: { - label: "Email Address", + label: language.register_lang.email_address.label, name: "email", - placeholder: "Type valid email here", + placeholder: language.register_lang.email_address.placeholder, id: "email", required: true, hover_text: "", @@ -13194,9 +13473,9 @@ exports["default"] = (0, vue_1.defineComponent)({ "class": "mb-4 lg:mb-2" }, password: { - label: "Password", + label: language.register_lang.password.label, name: "password", - placeholder: "Type password here", + placeholder: language.register_lang.password.placeholder, id: "password", required: true, hover_text: "", @@ -13204,9 +13483,9 @@ exports["default"] = (0, vue_1.defineComponent)({ "class": "mb-4 lg:mb-2" }, confirm_password: { - label: "Confirm Password", + label: language.register_lang.password.confirm, name: "password_confirmation", - placeholder: "Type password here", + placeholder: language.register_lang.password.placeholder, id: "password-confirmation", required: true, hover_text: "", @@ -13216,9 +13495,9 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, 3: { - title: "Email Verification", + title: language.register_lang.email_verification.title, is_complete: false, - description: "Please verify and activate your IATI Publisher account through your provided email" + description: language.register_lang.email_verification.description } }); @@ -13321,7 +13600,109 @@ exports["default"] = (0, vue_1.defineComponent)({ getCurrentStep: getCurrentStep, checkStep: checkStep, isTextField: isTextField, - props: props + props: props, + language: language + }; + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true": +/*!*************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true ***! + \*************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +exports["default"] = (0, vue_1.defineComponent)({ + __name: 'SupportPage', + setup: function setup(__props, _a) { + var expose = _a.expose; + expose(); + var language = window["globalLang"]; + var __returned__ = { + language: language + }; + Object.defineProperty(__returned__, '__isScriptSetup', { + enumerable: false, + value: true + }); + return __returned__; + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true": +/*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true ***! + \**********************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +exports["default"] = (0, vue_1.defineComponent)({ + __name: 'AdminFooter', + setup: function setup(__props, _a) { + var expose = _a.expose; + expose(); + var language = window["globalLang"]; + var __returned__ = { + language: language + }; + Object.defineProperty(__returned__, '__isScriptSetup', { + enumerable: false, + value: true + }); + return __returned__; + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts": +/*!*******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts ***! + \*******************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +exports["default"] = (0, vue_1.defineComponent)({ + props: { + message: { + type: String, + required: false, + "default": "" + } + }, + setup: function setup() { + var language = window["globalLang"]; + return { + language: language }; } }); @@ -13510,6 +13891,7 @@ exports["default"] = (0, vue_1.defineComponent)({ } }, setup: function setup() { + var language = window["globalLang"]; var formData = (0, vue_1.reactive)({ username: '', password: '' @@ -13578,8 +13960,43 @@ exports["default"] = (0, vue_1.defineComponent)({ formData: formData, errorData: errorData, isLoaderVisible: isLoaderVisible, - login: login + login: login, + language: language + }; + } +}); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true": +/*!********************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true ***! + \********************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +exports["default"] = (0, vue_1.defineComponent)({ + __name: 'WebFooter', + setup: function setup(__props, _a) { + var expose = _a.expose; + expose(); + var language = window["globalLang"]; + var __returned__ = { + language: language }; + Object.defineProperty(__returned__, '__isScriptSetup', { + enumerable: false, + value: true + }); + return __returned__; } }); @@ -13629,6 +14046,10 @@ exports["default"] = (0, vue_1.defineComponent)({ (0, vue_1.onUnmounted)(function () { document.body.classList.remove('no-nav'); }); + var language = window["globalLang"]; + return { + language: language + }; } }); @@ -13703,8 +14124,8 @@ var _hoisted_12 = { "class": "add-import" }; var _hoisted_13 = { - key: 0, - "class": "button__dropdown add-import-dropdown absolute top-full z-10 w-56 -translate-y-3 bg-white p-2 text-left shadow-dropdown transition-all duration-300" + key: 2, + "class": "button__dropdown invisible absolute left-4 top-full z-10 w-56 -translate-y-3 bg-white p-2 text-left opacity-0 shadow-dropdown outline transition-all duration-300 group-hover:visible group-hover:translate-y-0 group-hover:opacity-100" }; var _hoisted_14 = { "class": "flex-col" @@ -13715,81 +14136,58 @@ var _hoisted_15 = { var _hoisted_16 = { "class": "search" }; -var _hoisted_17 = { +var _hoisted_17 = ["placeholder"]; +var _hoisted_18 = ["placeholder"]; +var _hoisted_19 = { key: 2, "class": "spinner" }; -var _hoisted_18 = { +var _hoisted_20 = { key: 0, "class": "profile__dropdown" }; -var _hoisted_19 = { +var _hoisted_21 = { "class": "border-b border-b-n-20" }; -var _hoisted_20 = { +var _hoisted_22 = { "class": "flex flex-col break-all capitalize leading-4" }; -var _hoisted_21 = { +var _hoisted_23 = { "class": "text-n-50" }; -var _hoisted_22 = { +var _hoisted_24 = { "class": "text-tiny text-n-40" }; -var _hoisted_23 = { +var _hoisted_25 = { "class": "dropdown__list border-b border-b-n-20" }; - -var _hoisted_24 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("a", { - href: "#" - }, "Your Profile", -1 - /* HOISTED */ - ); -}); - -var _hoisted_25 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("button", { - "class": "text-sm" - }, "Logout", -1 - /* HOISTED */ - ); -}); - var _hoisted_26 = { - "class": "border-b border-b-n-20" + href: "#" }; var _hoisted_27 = { - "class": "flex flex-col break-all capitalize leading-4" + "class": "text-sm" }; var _hoisted_28 = { - "class": "text-n-50" + "class": "border-b border-b-n-20" }; var _hoisted_29 = { - "class": "text-tiny text-n-40" + "class": "flex flex-col break-all capitalize leading-4" }; var _hoisted_30 = { + "class": "text-n-50" +}; +var _hoisted_31 = { + "class": "text-tiny text-n-40" +}; +var _hoisted_32 = { "class": "dropdown__list border-b border-b-n-20" }; - -var _hoisted_31 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("a", { - href: "#" - }, "Your Profile", -1 - /* HOISTED */ - ); -}); - -var _hoisted_32 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("button", { - "class": "text-sm" - }, "Logout", -1 - /* HOISTED */ - ); -}); +var _hoisted_33 = { + href: "#" +}; +var _hoisted_34 = { + "class": "text-sm" +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _a, _b; @@ -13820,7 +14218,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: index, "class": (0, vue_1.normalizeClass)($setup.data.menuNavLiClasses) - }, [menu.name !== 'Add / Import Activity' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + }, [menu.name !== $setup.translation.common_lang.add_import_activity ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, "class": (0, vue_1.normalizeClass)([{ nav__pointer: menu.active @@ -13830,24 +14228,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* TEXT */ )], 10 /* CLASS, PROPS */ - , _hoisted_10)) : (0, vue_1.createCommentVNode)("v-if", true), menu.name === 'Add / Import Activity' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", { + , _hoisted_10)) : (0, vue_1.createCommentVNode)("v-if", true), menu.name === $setup.translation.common_lang.add_import_activity ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", { key: 1, "class": (0, vue_1.normalizeClass)([{ nav__pointer: menu.active }, $setup.data.menuNavAnchorClasses]) - }, [(0, vue_1.createElementVNode)("span", _hoisted_12, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(menu.name) + " ", 1 + }, [(0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)(menu.name), 1 /* TEXT */ - ), menu.name === 'Add / Import Activity' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_13, [(0, vue_1.createElementVNode)("ul", _hoisted_14, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { - "class": (0, vue_1.normalizeClass)(["cursor-pointer", $setup.liClass]), + )], 2 + /* CLASS */ + )) : (0, vue_1.createCommentVNode)("v-if", true), menu.name === $setup.translation.common_lang.add_import_activity ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_13, [(0, vue_1.createElementVNode)("ul", _hoisted_14, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { + "class": (0, vue_1.normalizeClass)($setup.liClass), onClick: _cache[2] || (_cache[2] = function ($event) { return $setup.modalValue = true; }) - }, "Add activity manually")]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { + }, (0, vue_1.toDisplayString)($setup.translation.common_lang.add_activity_manually), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { href: "/import", "class": (0, vue_1.normalizeClass)($setup.liClass) - }, "Import activities from .csv/.xml")])])])) : (0, vue_1.createCommentVNode)("v-if", true)])], 2 - /* CLASS */ - )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 + }, (0, vue_1.toDisplayString)($setup.translation.common_lang.import_activities), 1 + /* TEXT */ + )])])])) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 @@ -13864,28 +14266,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }), "class": "search__input mr-3.5", type: "text", - placeholder: "Search activity...", + placeholder: $setup.translation.admin.header.search_activity, onKeyup: _cache[4] || (_cache[4] = (0, vue_1.withKeys)(function ($event) { return $setup.searchFunction('/activities'); }, ["enter"])) - }, null, 544 - /* HYDRATE_EVENTS, NEED_PATCH */ - )), [[vue_1.vModelText, $setup.searchValue]]) : (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("input", { + }, null, 40 + /* PROPS, HYDRATE_EVENTS */ + , _hoisted_17)), [[vue_1.vModelText, $setup.searchValue]]) : (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("input", { key: 1, "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { return $setup.searchValue = $event; }), "class": "search__input mr-3.5", type: "text", - placeholder: "Search organisation...", + placeholder: $setup.translation.admin.header.search_organisation, onKeyup: _cache[6] || (_cache[6] = (0, vue_1.withKeys)(function ($event) { return $setup.searchFunction('/list-organisations'); }, ["enter"])) - }, null, 544 - /* HYDRATE_EVENTS, NEED_PATCH */ - )), [[vue_1.vModelText, $setup.searchValue]]), (0, vue_1.createVNode)(_component_svg_vue, { + }, null, 40 + /* PROPS, HYDRATE_EVENTS */ + , _hoisted_18)), [[vue_1.vModelText, $setup.searchValue]]), (0, vue_1.createVNode)(_component_svg_vue, { icon: "search" - }), $setup.spinner ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17)) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("button", { + }), $setup.spinner ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19)) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("button", { "class": (0, vue_1.normalizeClass)($setup.isTouchDevice ? 'button secondary-btn--touch' : 'button secondary-btn dropdown-btn'), onClick: _cache[7] || (_cache[7] = function ($event) { return $setup.showUserDropdown = !$setup.showUserDropdown; @@ -13895,38 +14297,46 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }), (0, vue_1.createVNode)(_component_svg_vue, { "class": "dropdown__arrow", icon: "dropdown-arrow" - }), !$setup.isTouchDevice ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", _hoisted_19, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { + }), !$setup.isTouchDevice ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", _hoisted_21, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "user-profile", icon: "user-profile" - })]), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("span", _hoisted_21, (0, vue_1.toDisplayString)($props.user.full_name), 1 + })]), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("span", _hoisted_23, (0, vue_1.toDisplayString)($props.user.full_name), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_22, (0, vue_1.toDisplayString)((_a = $props.organization) === null || _a === void 0 ? void 0 : _a.publisher_name), 1 + ), (0, vue_1.createElementVNode)("span", _hoisted_24, (0, vue_1.toDisplayString)((_a = $props.organization) === null || _a === void 0 ? void 0 : _a.publisher_name), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("li", _hoisted_23, [(0, vue_1.createVNode)(_component_svg_vue, { + )])]), (0, vue_1.createElementVNode)("li", _hoisted_25, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "user" - }), _hoisted_24]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("a", _hoisted_26, (0, vue_1.toDisplayString)($setup.translation.admin.header.your_profile), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "dropdown__list", onClick: $setup.logout }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "logout" - }), _hoisted_25])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { + }), (0, vue_1.createElementVNode)("button", _hoisted_27, (0, vue_1.toDisplayString)($setup.translation.admin.header.logout), 1 + /* TEXT */ + )])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: 1, "class": (0, vue_1.normalizeClass)([!$setup.showUserDropdown ? 'invisible -translate-y-2 opacity-0' : 'opacity-1 visible translate-y-0', "profile__dropdown--touch"]) - }, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", _hoisted_26, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", _hoisted_28, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "user-profile", icon: "user-profile" - })]), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("span", _hoisted_28, (0, vue_1.toDisplayString)($props.user.full_name), 1 + })]), (0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createElementVNode)("span", _hoisted_30, (0, vue_1.toDisplayString)($props.user.full_name), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_29, (0, vue_1.toDisplayString)((_b = $props.organization) === null || _b === void 0 ? void 0 : _b.publisher_name), 1 + ), (0, vue_1.createElementVNode)("span", _hoisted_31, (0, vue_1.toDisplayString)((_b = $props.organization) === null || _b === void 0 ? void 0 : _b.publisher_name), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("li", _hoisted_30, [(0, vue_1.createVNode)(_component_svg_vue, { + )])]), (0, vue_1.createElementVNode)("li", _hoisted_32, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "user" - }), _hoisted_31]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("a", _hoisted_33, (0, vue_1.toDisplayString)($setup.translation.admin.header.your_profile), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "dropdown__list", onClick: $setup.logout }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "logout" - }), _hoisted_32])])], 2 + }), (0, vue_1.createElementVNode)("button", _hoisted_34, (0, vue_1.toDisplayString)($setup.translation.admin.header.logout), 1 + /* TEXT */ + )])])], 2 /* CLASS */ ))], 2 /* CLASS */ @@ -14087,49 +14497,161 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "subelement rounded-tl-lg border-l border-spring-50 pb-11" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_3 = { "class": "control-label flex rounded-tl-lg rounded-tr-lg border-t border-r border-spring-50 py-4 px-6 text-sm font-bold leading-relaxed" -}, "Description", -1 -/* HOISTED */ -); - +}; var _hoisted_4 = { "class": "multi-form relative" }; +var _hoisted_5 = { + "class": "form-field-group flex flex-wrap rounded-br-lg border-y border-r border-spring-50 p-6" +}; +var _hoisted_6 = { + "class": "form-field max-w-half basis-6/12" +}; +var _hoisted_7 = { + "class": "form-field-label" +}; +var _hoisted_8 = { + "for": "" +}; -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createStaticVNode)("
    ", 2); +var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + "class": "text-salmon-40" +}, " *", -1 +/* HOISTED */ +); -var _hoisted_7 = { +var _hoisted_10 = { + id: "", + "aria-hidden": "true", + "class": "", + required: "", + tabindex: "-1" +}; +var _hoisted_11 = { + value: "" +}; +var _hoisted_12 = { + "data-select2-id": "select2-data-2-e15l", + value: "1" +}; +var _hoisted_13 = { + value: "2" +}; +var _hoisted_14 = { + value: "3" +}; +var _hoisted_15 = { + value: "4" +}; +var _hoisted_16 = { "class": "add_to_collection add_more button relative ml-6 -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-bluecoral", icon: "", type: "button" }; -var _hoisted_8 = { +var _hoisted_17 = { "class": "mr-1.5 text-lg" }; +var _hoisted_18 = { + "class": "subelement rounded-tl-lg border-l border-spring-50 pb-11" +}; +var _hoisted_19 = { + "class": "control-label flex rounded-tl-lg rounded-tr-lg border-t border-r border-spring-50 py-4 px-6 text-sm font-bold leading-relaxed" +}; +var _hoisted_20 = { + "class": "form-child-body relative" +}; +var _hoisted_21 = { + "class": "form-field-group flex flex-wrap rounded-br-lg border-y border-r border-spring-50 p-6" +}; +var _hoisted_22 = { + "class": "form-field max-w-half basis-6/12" +}; +var _hoisted_23 = { + "class": "form-field-label" +}; +var _hoisted_24 = { + "for": "" +}; -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createTextVNode)(" ADD NARRATIVE IN OTHER LANGUAGE "); +var _hoisted_25 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + "class": "text-salmon-40" +}, " *", -1 +/* HOISTED */ +); -var _hoisted_10 = { +var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("textarea", { + "class": "form__input border-0", + cols: "50", + name: "", + required: "", + rows: "10" +}, "\nEducation and psychosocial support to children in Aleppo Governorate", -1 +/* HOISTED */ +); + +var _hoisted_27 = { + "class": "form-field max-w-half basis-6/12" +}; + +var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { + "class": "form-field-label" +}, [/*#__PURE__*/(0, vue_1.createElementVNode)("label", { + "for": "" +}, [/*#__PURE__*/(0, vue_1.createTextVNode)("@xml:lang"), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + "class": "text-salmon-40" +}, " *")])], -1 +/* HOISTED */ +); + +var _hoisted_29 = { + value: "" +}; + +var _hoisted_30 = /*#__PURE__*/(0, vue_1.createStaticVNode)("", 5); + +var _hoisted_35 = { "class": "add_to_parent add_more button relative -translate-y-1/2 pl-3.5 text-xs font-bold uppercase leading-normal text-bluecoral", icon: "", type: "button" }; -var _hoisted_11 = { +var _hoisted_36 = { "class": "mr-1.5 text-lg" }; -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createTextVNode)(" add additional description "); - function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("form", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [_hoisted_5, (0, vue_1.createElementVNode)("button", _hoisted_7, [(0, vue_1.createElementVNode)("span", _hoisted_8, [(0, vue_1.createVNode)(_component_svg_vue, { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("form", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("label", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.commoon_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("label", _hoisted_8, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.commoon_lang.type), 1 + /* TEXT */ + ), _hoisted_9])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("select", _hoisted_10, [(0, vue_1.createElementVNode)("option", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.language.common_lang.placeholder.select_a_value), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("option", _hoisted_12, " 1 - " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.general), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("option", _hoisted_13, "2 - " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.objectives), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("option", _hoisted_14, "3 - " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.target_groups) + " Groups", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("option", _hoisted_15, "4 - " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.other), 1 + /* TEXT */ + )])])])]), (0, vue_1.createElementVNode)("button", _hoisted_16, [(0, vue_1.createElementVNode)("span", _hoisted_17, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "add-more" - })]), _hoisted_9])])]), (0, vue_1.createElementVNode)("button", _hoisted_10, [(0, vue_1.createElementVNode)("span", _hoisted_11, [(0, vue_1.createVNode)(_component_svg_vue, { + })]), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.add_narrative_in_other_lang), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("label", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("label", _hoisted_24, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.type), 1 + /* TEXT */ + ), _hoisted_25])]), _hoisted_26]), (0, vue_1.createElementVNode)("div", _hoisted_27, [_hoisted_28, (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("select", null, [(0, vue_1.createElementVNode)("option", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.language.common_lang.placeholder.select_a_value), 1 + /* TEXT */ + ), _hoisted_30])])])])])])])]), (0, vue_1.createElementVNode)("button", _hoisted_35, [(0, vue_1.createElementVNode)("span", _hoisted_36, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "add-more" - })]), _hoisted_12])]); + })]), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.add_additional_description), 1 + /* TEXT */ + )])]); } exports.render = render; @@ -14167,34 +14689,15 @@ var _hoisted_4 = ["show"]; var _hoisted_5 = { "class": "text-sm font-bold text-n-50" }; - -var _hoisted_6 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-sm font-bold text-n-50" - }, "Account not verified", -1 - /* HOISTED */ - ); -}); - -var _hoisted_7 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-sm font-bold text-bluecoral" - }, "Complete your setup", -1 - /* HOISTED */ - ); -}); - -var _hoisted_8 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-sm font-bold text-n-50" - }, "Publisher is Inactive", -1 - /* HOISTED */ - ); -}); - +var _hoisted_6 = { + "class": "text-sm font-bold text-n-50" +}; +var _hoisted_7 = { + "class": "text-sm font-bold text-bluecoral" +}; +var _hoisted_8 = { + "class": "text-sm font-bold text-n-50" +}; var _hoisted_9 = { key: 1, "class": "ml-4 mr-6" @@ -14208,120 +14711,52 @@ var _hoisted_11 = { var _hoisted_12 = { "class": "alert__content" }; - -var _hoisted_13 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", null, "Account not verified", -1 - /* HOISTED */ - ); -}); - -var _hoisted_14 = { +var _hoisted_13 = { "class": "ml-5 text-left" }; - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Please check for verification email sent to you and verify your account, "); - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createTextVNode)(" if you haven’t received your verification email. Contact "); - -var _hoisted_17 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { - target: "_blank", - href: "mailto:support@iatistandard.org" - }, "support@iatistandard.org")], -1 - /* HOISTED */ - ); -}); - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createTextVNode)(" for further assistance. "); - -var _hoisted_19 = { +var _hoisted_14 = { key: 2, "class": "ml-4 mr-6" }; -var _hoisted_20 = { +var _hoisted_15 = { "class": "alert mb-2.5" }; -var _hoisted_21 = { +var _hoisted_16 = { "class": "alert__container" }; -var _hoisted_22 = { +var _hoisted_17 = { "class": "alert__content" }; - -var _hoisted_23 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", null, "Complete your setup", -1 - /* HOISTED */ - ); -}); - -var _hoisted_24 = { +var _hoisted_18 = { "class": "ml-5" }; - -var _hoisted_25 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("p", null, [/*#__PURE__*/(0, vue_1.createTextVNode)(" Please "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { - href: "/setting", - target: "_blank" - }, "complete your setup")]), /*#__PURE__*/(0, vue_1.createTextVNode)(" in order to enable complete features of IATI publisher tool. ")], -1 - /* HOISTED */ - ); -}); - -var _hoisted_26 = { +var _hoisted_19 = { key: 0, "class": "alert__message" }; - -var _hoisted_27 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Update registry information - API Key & Publisher ID"); - -var _hoisted_28 = { +var _hoisted_20 = { key: 0 }; -var _hoisted_29 = { +var _hoisted_21 = { key: 1, "class": "alert__message" }; - -var _hoisted_30 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("p", null, "Update default values", -1 - /* HOISTED */ - ); -}); - -var _hoisted_31 = { +var _hoisted_22 = { key: 3, "class": "ml-4 mr-6" }; -var _hoisted_32 = { +var _hoisted_23 = { "class": "alert mb-2.5" }; -var _hoisted_33 = { +var _hoisted_24 = { "class": "alert__container" }; -var _hoisted_34 = { +var _hoisted_25 = { "class": "alert__content" }; - -var _hoisted_35 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", null, "Publisher is Inactive", -1 - /* HOISTED */ - ); -}); - -var _hoisted_36 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("div", { - "class": "ml-5 text-left" - }, [/*#__PURE__*/(0, vue_1.createElementVNode)("p", null, "The publisher is not active at IATI Registry.")], -1 - /* HOISTED */ - ); -}); +var _hoisted_26 = { + "class": "ml-5 text-left" +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -14353,7 +14788,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_6], 2 + }), (0, vue_1.createElementVNode)("span", _hoisted_6, (0, vue_1.toDisplayString)($setup.language.common_lang.account_not_verified), 1 + /* TEXT */ + )], 2 /* CLASS */ )) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_setting || !$setup.errorData.default_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: 1, @@ -14361,7 +14798,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_7], 2 + }), (0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.common_lang.complete_your_setup), 1 + /* TEXT */ + )], 2 /* CLASS */ )) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_active ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: 2, @@ -14369,14 +14808,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_8], 2 + }), (0, vue_1.createElementVNode)("span", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.common_lang.publisher_is_inactive), 1 + /* TEXT */ + )], 2 /* CLASS */ )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("button", { "class": "text-sm leading-relaxed text-bluecoral", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.show = !$setup.show; }) - }, " Show " + (0, vue_1.toDisplayString)($setup.show ? "less" : "more"), 1 + }, (0, vue_1.toDisplayString)($setup.language.button_lang.show) + " " + (0, vue_1.toDisplayString)($setup.show ? "less" : "more"), 1 /* TEXT */ )])])], 10 /* CLASS, PROPS */ @@ -14398,19 +14839,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_13]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("p", null, [_hoisted_15, (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createElementVNode)("a", { - "class": "cursor-pointer border-b-2 border-b-bluecoral font-bold text-bluecoral hover:border-b-spring-50", - onClick: _cache[1] || (_cache[1] = function ($event) { - return $setup.resendVerificationEmail(); - }) - }, "resend verification email")]), _hoisted_16, _hoisted_17, _hoisted_18])])])])]; + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.account_not_verified), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.common_lang.account_not_verified_description), 1 + /* TEXT */ + )])])])]; }), _: 1 /* STABLE */ }, 8 /* PROPS */ - , ["show"])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_setting || !$setup.errorData.default_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19, [(0, vue_1.createVNode)($setup["TransitionRoot"], { + , ["show"])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_setting || !$setup.errorData.default_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_14, [(0, vue_1.createVNode)($setup["TransitionRoot"], { show: $setup.show, as: "template", enter: "transition-all duration-300 ease-out", @@ -14421,23 +14861,33 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "leave-to": "-translate-y-32 opacity-0 w-[65%] mx-auto" }, { "default": (0, vue_1.withCtx)(function () { - return [(0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createVNode)(_component_svg_vue, { + return [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_23]), (0, vue_1.createElementVNode)("div", _hoisted_24, [_hoisted_25, !$setup.errorData.publisher_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_26, [(0, vue_1.createVNode)(_component_svg_vue, { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.complete_your_setup), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.common_lang.complete_your_setup_description), 1 + /* TEXT */ + ), !$setup.errorData.publisher_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-cross", "class": "text-[7px]" - }), (0, vue_1.createElementVNode)("p", null, [_hoisted_27, !$setup.errorData.token_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, ". Please enter correct API token.")) : (0, vue_1.createCommentVNode)("v-if", true)])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.default_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_29, [(0, vue_1.createVNode)(_component_svg_vue, { + }), (0, vue_1.createElementVNode)("p", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)($setup.language.common_lang.update_registry_information) + " - " + (0, vue_1.toDisplayString)($setup.language.common_lang.api_key_pub_id), 1 + /* TEXT */ + ), !$setup.errorData.token_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, ". " + (0, vue_1.toDisplayString)($setup.language.common_lang.enter_correct_api_token) + ".", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.default_setting ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_21, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-cross", "class": "text-[7px]" - }), _hoisted_30])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]; + }), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.common_lang.update_default_values), 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]; }), _: 1 /* STABLE */ }, 8 /* PROPS */ - , ["show"])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_active ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_31, [(0, vue_1.createVNode)($setup["TransitionRoot"], { + , ["show"])])) : (0, vue_1.createCommentVNode)("v-if", true), !$setup.errorData.publisher_active ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_22, [(0, vue_1.createVNode)($setup["TransitionRoot"], { show: $setup.show, as: "template", enter: "transition-all duration-300 ease-out", @@ -14448,10 +14898,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "leave-to": "-translate-y-11 opacity-0 w-[90%] mx-auto" }, { "default": (0, vue_1.withCtx)(function () { - return [(0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createElementVNode)("div", _hoisted_33, [(0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createVNode)(_component_svg_vue, { + return [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "red-dot", "class": "text-[6px]" - }), _hoisted_35]), _hoisted_36])])]; + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.publisher_is_inactive), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_26, [(0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.common_lang.publisher_is_not_active), 1 + /* TEXT */ + )])])])]; }), _: 1 /* STABLE */ @@ -14506,6 +14960,9 @@ var _hoisted_6 = { key: 1, "class": "list-disc rounded-md bg-salmon-10 p-3 font-medium" }; +var _hoisted_7 = { + "class": "mt-4 flex flex-row-reverse" +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -14526,12 +14983,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ); }), 128 /* KEYED_FRAGMENT */ - ))])), (0, vue_1.createElementVNode)("div", { - "class": "mt-4 flex flex-row-reverse" - }, [(0, vue_1.createElementVNode)("button", { + ))])), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("button", { "class": "rounded bg-bluecoral py-2 px-5 font-semibold text-white", onClick: $setup.close - }, " Close ")])])]); + }, (0, vue_1.toDisplayString)($setup.language.button_lang.close), 1 + /* TEXT */ + )])])]); } exports.render = render; @@ -14580,7 +15037,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["class"])]), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)([_ctx.position === 'right' ? 'help__text left-0 ' + _ctx.width : 'help__text right-0 ' + _ctx.width]) - }, [_ctx.showIatiReference ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, " IATI standard reference ")) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.name), 1 + }, [_ctx.showIatiReference ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.common_lang.iati_standard_reference), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.name), 1 /* TEXT */ ), (0, vue_1.createCommentVNode)(" eslint-disable vue/no-v-html "), (0, vue_1.createElementVNode)("p", { innerHTML: _ctx.hoverText @@ -14590,8 +15049,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { key: 1, href: _ctx.link, "class": "inline-block font-bold text-bluecoral" - }, "Learn more", 8 - /* PROPS */ + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.learn_more), 9 + /* TEXT, PROPS */ , _hoisted_5)) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ )]); @@ -14836,20 +15295,13 @@ var _hoisted_1 = { "class": "pagination", "aria-label": "Pagination" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_2 = { "class": "" -}, "Prev", -1 -/* HOISTED */ -); - +}; var _hoisted_3 = ["onClick"]; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_4 = { "class": "" -}, "Next", -1 -/* HOISTED */ -); +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -14872,7 +15324,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "arrow-left" - }), _hoisted_2], 2 + }), (0, vue_1.createElementVNode)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.button_lang.prev), 1 + /* TEXT */ + )], 2 /* CLASS */ ), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data.last_page, function (index, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { @@ -14902,7 +15356,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.nextPage && _ctx.nextPage.apply(_ctx, args); }) - }, [_hoisted_4, (0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.button_lang.next), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { icon: "arrow-right" })], 2 /* CLASS */ @@ -14991,21 +15447,13 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "flex mb-6 title" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Delete activity", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "p-4 rounded-lg bg-rose" -}, " Are you sure you want to delete this activity? ", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_4 = { "class": "flex justify-end" }; -var _hoisted_6 = { +var _hoisted_5 = { "class": "inline-flex" }; @@ -15029,19 +15477,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 mt-0.5 text-lg text-crimson-40", icon: "delete" - }), _hoisted_3]), _hoisted_4]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_something.replace(':something', $setup.language.common_lang.activity)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_confirmation.replace(':something', $setup.language.common_lang.activity)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "px-6 uppercase bg-white", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.deleteValue = false; }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Delete", + text: $setup.language.button_lang["delete"], type: "primary", onClick: $setup.deleteFunction - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -15201,68 +15657,86 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [$setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 0, "class": "bg-white px-6 uppercase", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.publishValue = false; }) - })) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 1, "class": "space", - text: "Continue", + text: $setup.language.button_lang["continue"], type: "primary", onClick: $setup.stepPlusOne - })) : (0, vue_1.createCommentVNode)("v-if", true)], 64 + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)], 64 /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 }, [$setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 0, "class": "bg-white px-6 uppercase", - text: "Continue Anyway", + text: $setup.language.button_lang.continue_anyway, type: "", onClick: $setup.stepPlusOne - })) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep == 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 1, "class": "space", - text: "Add Missing Data", + text: $setup.language.button_lang.add_something.replace(':something', $setup.language.common_lang.missing.data), type: "primary", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.publishValue = false; }) - })) : (0, vue_1.createCommentVNode)("v-if", true)], 64 + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)], 64 /* STABLE_FRAGMENT */ )), $setup.publishStep === 1 || $setup.publishStep === 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 2, "class": "bg-white px-6 uppercase", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: $setup.stepMinusOne - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api validator button (validatorFunction) "), $setup.publishStep === 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api validator button (validatorFunction) "), $setup.publishStep === 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 3, "class": "space", - text: "Continue", + text: $setup.language.button_lang["continue"], type: "primary", onClick: $setup.validatorFunction - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api publishing button (publishFunction) "), $setup.publishStep === 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api publishing button (publishFunction) "), $setup.publishStep === 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 4, "class": "space", - text: "Publish", + text: $setup.language.button_lang.publish, type: "primary", onClick: $setup.publishFunction - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api publishing button (publishFunction) "), $setup.publishStep === 3 || $setup.publishStep === 4 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" api publishing button (publishFunction) "), $setup.publishStep === 3 || $setup.publishStep === 4 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 5, "class": "bg-white px-6 uppercase", - text: "Publish Anyway", + text: $setup.language.button_lang.publish_anyway, type: "", onClick: $setup.publishFunction - })) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep === 3 || $setup.publishStep === 4 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.publishStep === 3 || $setup.publishStep === 4 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 6, "class": "space", - text: "Fix issues", + text: $setup.language.button_lang.fix_issues, type: "primary", onClick: $setup.resetPublishStep - })) : (0, vue_1.createCommentVNode)("v-if", true)])])]; + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)])])]; }), _: 1 /* STABLE */ @@ -15308,21 +15782,13 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "flex mb-6 title" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Unpublish activity", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "p-4 rounded-lg bg-rose" -}, " Are you sure you want to unpublish this activity? ", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_4 = { "class": "flex justify-end" }; -var _hoisted_6 = { +var _hoisted_5 = { "class": "inline-flex" }; @@ -15348,19 +15814,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 mt-0.5 text-lg text-crimson-40", icon: "cancel-cloud" - }), _hoisted_3]), _hoisted_4]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.button_lang.unpublish) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.activity), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.button_lang.unpublish_confirmation.replace(':something', $setup.language.common_lang.activity)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "px-6 uppercase bg-white", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.unpublishValue = false; }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Unpublish", + text: $setup.language.button_lang.unpublish, type: "primary", onClick: $setup.unPublishFunction - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -15467,19 +15941,43 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 mt-0.5 text-lg text-crimson-40", icon: "delete" - }), $setup.props.itemType === 'result' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_3, "Delete Result")) : $setup.props.itemType === 'indicator' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_4, "Delete Indicator")) : $setup.props.itemType === 'period' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_5, "Delete Period")) : $setup.props.itemType === 'transaction' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_6, "Delete Transaction")) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_7, "Delete"))]), (0, vue_1.createElementVNode)("div", _hoisted_8, [$setup.props.itemType === 'result' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_9, " Are you sure you want to delete this Result? Related Indicators and Periods will also be deleted ")) : $setup.props.itemType === 'indicator' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_10, " Are you sure you want to delete this Indicator? Related Periods will also be deleted ")) : $setup.props.itemType === 'period' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_11, " Are you sure you want to delete this Period? ")) : $setup.props.itemType === 'transaction' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_12, " Are you sure you want to delete this Transaction? ")) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_13, "Are you sure you want to delete this module?"))])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), $setup.props.itemType === 'result' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_result), 1 + /* TEXT */ + )) : $setup.props.itemType === 'indicator' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_4, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_indicator), 1 + /* TEXT */ + )) : $setup.props.itemType === 'period' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_period), 1 + /* TEXT */ + )) : $setup.props.itemType === 'transaction' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_6, (0, vue_1.toDisplayString)($setup.language.button_lang.delete_transaction), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("b", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.button_lang["delete"]), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_8, [$setup.props.itemType === 'result' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_9, (0, vue_1.toDisplayString)($setup.language.common_lang.delete_confim_default) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.result) + " ? " + (0, vue_1.toDisplayString)($setup.language.common_lang.related_indicator_period_deleted), 1 + /* TEXT */ + )) : $setup.props.itemType === 'indicator' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.common_lang.delete_confim_default) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.indicator) + " ? " + (0, vue_1.toDisplayString)($setup.language.common_lang.related_period_deleted), 1 + /* TEXT */ + )) : $setup.props.itemType === 'period' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_11, (0, vue_1.toDisplayString)($setup.language.common_lang.delete_confim_default) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.period) + " ? ", 1 + /* TEXT */ + )) : $setup.props.itemType === 'transaction' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.delete_confim_default) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.transaction) + " ? ", 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_13, (0, vue_1.toDisplayString)($setup.language.common_lang.delete_confirm_default) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.module) + " ?", 1 + /* TEXT */ + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "bg-white px-6 uppercase", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.deleteValue = false; }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Delete", + text: $setup.language.button_lang["delete"], type: "primary", onClick: $setup.deleteFunction - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -15647,21 +16145,13 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "title mb-6 flex" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Unpublish organisation", -1 -/* HOISTED */ -); - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_8 = { "class": "rounded-lg bg-rose p-4" -}, " Are you sure you want to unpublish this organisation? ", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +}; +var _hoisted_9 = { "class": "flex justify-end" }; -var _hoisted_11 = { +var _hoisted_10 = { "class": "inline-flex" }; @@ -15708,17 +16198,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { )]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [!$setup.mandatoryElementStatus ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 0, "class": "bg-white px-6 uppercase", - text: "Add Missing Data", + text: $setup.language.button_lang.add_something.replace(':something', $setup.language.common_lang.missing.data), type: "", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.publishValue = false; }) - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Continue", + text: $setup.language.button_lang["continue"], type: "primary", onClick: $setup.publishFunction - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -15728,13 +16222,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["modal-active", "onClose"]), $setup.publishStatus.is_published ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 1, "class": "ml-4", - text: "Unpublish", + text: $setup.language.button_lang.unpublish, type: "primary", icon: "cancel-cloud", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.unpublishValue = true; }) - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["Modal"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["Modal"], { "modal-active": $setup.unpublishValue, width: "583", onClose: $setup.unpublishToggle @@ -15743,19 +16239,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 mt-0.5 text-lg text-crimson-40", icon: "cancel-cloud" - }), _hoisted_8]), _hoisted_9]), (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.button_lang.unpublish) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.organisation), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.button_lang.unpublish_confirmation.replace(':something', $setup.language.common_lang.organisation)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "bg-white px-6 uppercase", - text: "Go Back", + text: $setup.language.button_lang.go_back, type: "", onClick: _cache[2] || (_cache[2] = function ($event) { return $setup.unpublishValue = false; }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Unpublish", + text: $setup.language.button_lang.unpublish, type: "primary", onClick: $setup.unPublishFunction - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -15966,28 +16470,32 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-base text-crimson-50", icon: "warning-fill" - }), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.errorData.length) + " Issues found", 1 + }), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.errorData.length) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.issues_found), 1 /* TEXT */ )]), (0, vue_1.createElementVNode)("button", { "class": "validation__toggle", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.errorToggle(); }) - }, "Show")])], 2 + }, (0, vue_1.toDisplayString)($setup.language.common_lang.show), 1 + /* TEXT */ + )])], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["validation validation__errors", { 'opacity-1 visible': $setup.errorValue, 'invisible opacity-0': !$setup.errorValue }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)($setup.errorData.length) + " Issues found in IATI Validator ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)($setup.errorData.length) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.issues_found_in_iati_validator), 1 /* TEXT */ )]), (0, vue_1.createElementVNode)("button", { "class": "validation__toggle", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.errorToggle(); }) - }, "Hide")]), (0, vue_1.createElementVNode)("div", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.tempData, function (error, e) { + }, (0, vue_1.toDisplayString)($setup.language.button_lang.hide), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.tempData, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": (0, vue_1.normalizeClass)({ @@ -16109,37 +16617,25 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "setting input__field" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_3 = { "class": "text-xs font-bold text-n-40" -}, "Override default values", -1 -/* HOISTED */ -); - +}; var _hoisted_4 = { - "class": "mb-6 flex flex-wrap items-center justify-between gap-2" + "class": "flex items-center justify-between" }; var _hoisted_5 = { - "class": "mt-4 flex items-center" + "class": "mt-4 mb-6 flex items-center" }; var _hoisted_6 = ["href"]; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("h2", { +var _hoisted_7 = { "class": "ml-3 text-heading-4 font-bold text-n-50" -}, " Override default values ", -1 -/* HOISTED */ -); - +}; var _hoisted_8 = { "class": "setting__container overflow-x-hidden" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_9 = { "class": "mb-8 text-xs text-n-40" -}, " Use the following form to change the default values such as currency, language etc for this specific activity. Changing the values here will not change the default values in the setting page. ", -1 -/* HOISTED */ -); - +}; var _hoisted_10 = { "class": "register mt-4" }; @@ -16149,13 +16645,9 @@ var _hoisted_11 = { var _hoisted_12 = { "class": "flex justify-between" }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_13 = { "for": "default-currency" -}, "Currency", -1 -/* HOISTED */ -); - +}; var _hoisted_14 = { key: 0 }; @@ -16169,13 +16661,9 @@ var _hoisted_16 = { var _hoisted_17 = { "class": "flex justify-between" }; - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_18 = { "for": "default-currency" -}, "Language", -1 -/* HOISTED */ -); - +}; var _hoisted_19 = { key: 0 }; @@ -16189,62 +16677,51 @@ var _hoisted_21 = { var _hoisted_22 = { "class": "flex justify-between" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "for": "default-currency" -}, "Hierarchy", -1 -/* HOISTED */ -); - -var _hoisted_24 = { - key: 0 +var _hoisted_23 = { + "for": "default-hierarchy" }; +var _hoisted_24 = ["placeholder"]; var _hoisted_25 = { - "class": "text-xs" + key: 0 }; var _hoisted_26 = { + "class": "text-xs" +}; +var _hoisted_27 = { key: 1, "class": "text-xs text-n-40" }; -var _hoisted_27 = { +var _hoisted_28 = { "class": "flex justify-between" }; - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "for": "default-currency" -}, "Budget not provided", -1 -/* HOISTED */ -); - var _hoisted_29 = { - key: 0 + "for": "default-currency" }; var _hoisted_30 = { - "class": "text-xs" + key: 0 }; var _hoisted_31 = { + "class": "text-xs" +}; +var _hoisted_32 = { "class": "flex justify-between" }; - -var _hoisted_32 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "for": "default-currency" -}, "Humanitarian", -1 -/* HOISTED */ -); - var _hoisted_33 = { - key: 0 + "for": "default-currency" }; var _hoisted_34 = { - "class": "text-xs" + key: 0 }; var _hoisted_35 = { - "class": "fixed bottom-0 left-0 w-full bg-eggshell py-5 pr-40 shadow-dropdown" + "class": "text-xs" }; var _hoisted_36 = { + "class": "fixed bottom-0 left-0 w-full bg-eggshell py-5 pr-40 shadow-dropdown" +}; +var _hoisted_37 = { "class": "flex items-center justify-end" }; -var _hoisted_37 = ["href"]; +var _hoisted_38 = ["href"]; function render(_ctx, _cache, $props, $setup, $data, $options) { var _a; @@ -16255,35 +16732,45 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("section", _hoisted_1, [$setup.loaderVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Loader"], { key: 0 - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("a", { + })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.override_default_values.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("a", { href: "/activity/".concat($props.activityId) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "left-arrow" })], 8 /* PROPS */ - , _hoisted_6), _hoisted_7]), (0, vue_1.createElementVNode)("div", null, [$setup.toastVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Toast"], { + , _hoisted_6), (0, vue_1.createElementVNode)("h2", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.override_default_values.label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", null, [$setup.toastVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Toast"], { key: 0, message: $setup.toastMessage, type: $setup.toastType }, null, 8 /* PROPS */ - , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true)])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, [_hoisted_13, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "Default Currency", - "hover-text": "The currency in which you report your financial transactions. You can later manually change the currency on individual transactions and budgets if required.", + , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true)])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.override_default_values.text), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("label", _hoisted_13, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.currency.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: $setup.language.activity_default_lang.currency.hover_header, + "hover-text": $setup.language.activity_default_lang.currency.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)($setup["Multiselect"], { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)($setup["Multiselect"], { id: "default-currency", modelValue: $setup.defaultValues.default_currency, "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return $setup.defaultValues.default_currency = $event; }), "class": "vue__select", - placeholder: "Select from dropdown", + placeholder: $setup.language.activity_default_lang.currency.placeholder, options: $props.currencies, searchable: true }, null, 8 /* PROPS */ - , ["modelValue", "options"]), $setup.defaultErrors.default_currency.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_14, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)((_a = $setup.defaultErrors) === null || _a === void 0 ? void 0 : _a.default_currency, function (error, e) { + , ["modelValue", "placeholder", "options"]), $setup.defaultErrors.default_currency.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_14, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)((_a = $setup.defaultErrors) === null || _a === void 0 ? void 0 : _a.default_currency, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": "error", @@ -16293,23 +16780,29 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { )]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.default_currency.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_16, " The currency in which you are reporting your financial transactions for this activity. Select from dropdown ")) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_17, [_hoisted_18, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "Default Language", - "hover-text": "The language in which you provide data on your activities. You can later manually change the language on individual text if required.", + ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.default_currency.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_16, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.currency.help_text), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("label", _hoisted_18, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.language.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: $setup.language.activity_default_lang.language.hover_header, + "hover-text": $setup.language.activity_default_lang.language.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)($setup["Multiselect"], { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)($setup["Multiselect"], { id: "default-language", modelValue: $setup.defaultValues.default_language, "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return $setup.defaultValues.default_language = $event; }), "class": "vue__select", - placeholder: "Select from dropdown", + placeholder: $setup.language.activity_default_lang.language.placeholder, searchable: true, options: $setup.props.languages }, null, 8 /* PROPS */ - , ["modelValue", "options"]), $setup.defaultErrors.default_language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.default_language, function (error, e) { + , ["modelValue", "placeholder", "options"]), $setup.defaultErrors.default_language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.default_language, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": "error", @@ -16319,95 +16812,113 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { )]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.default_language.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_21, " The language in which you are reporting this activity. Select from dropdown. ")) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.default_language.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_21, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.language.help_text), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("label", _hoisted_23, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.hierarchy.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-64", - name: "Default Hierarchy", - "hover-text": "If you are reporting both programmes (parent activities) and projects (child activities),\n choose the hierarchical level that most of your activities are at. e.g. parent activity = 1; child activity = 2.\n
    If all your activities are at the same level i.e. you have no child activities, then choose 1.", + name: $setup.language.activity_default_lang.hierarchy.hover_header, + "hover-text": $setup.language.activity_default_lang.hierarchy.hover_text, "show-iati-reference": true - })])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "default-hierarchy", "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { return $setup.defaultValues.hierarchy = $event; }), "class": "register__input mb-2", type: "text", - placeholder: "Type default hierarchy here" - }, null, 512 - /* NEED_PATCH */ - ), [[vue_1.vModelText, $setup.defaultValues.hierarchy]]), $setup.defaultErrors.hierarchy.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_24, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.hierarchy, function (error, e) { + placeholder: $setup.language.activity_default_lang.hierarchy.placeholder + }, null, 8 + /* PROPS */ + , _hoisted_24), [[vue_1.vModelText, $setup.defaultValues.hierarchy]]), $setup.defaultErrors.hierarchy.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_25, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.hierarchy, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": "error", role: "alert" - }, [(0, vue_1.createElementVNode)("span", _hoisted_25, (0, vue_1.toDisplayString)(error), 1 + }, [(0, vue_1.createElementVNode)("span", _hoisted_26, (0, vue_1.toDisplayString)(error), 1 /* TEXT */ )]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.hierarchy.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_26, " IATI allows for activities to be reported hierarchically (eg. parent - child ; programme - project - sub-project, etc). For activities at lower levels, their hierarchy can be edited as you are entering them. ")) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_27, [_hoisted_28, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + ))])) : (0, vue_1.createCommentVNode)("v-if", true), $setup.defaultErrors.hierarchy.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_27, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.hierarchy.help_text), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("label", _hoisted_29, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.budget_not_provided.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-72", - name: "Budget Not Provided", - "hover-text": "A code indicating the reason why this activity does not contain any iati-activity/budget elements. The attribute MUST only be used when no budget elements are present." - })])]), (0, vue_1.createVNode)($setup["Multiselect"], { + name: $setup.language.activity_default_lang.budget_not_provided.hover_header, + "hover-text": $setup.language.activity_default_lang.budget_not_provided.hover_text + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)($setup["Multiselect"], { id: "budget_not_provided", modelValue: $setup.defaultValues.budget_not_provided, "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { return $setup.defaultValues.budget_not_provided = $event; }), "class": "vue__select", - placeholder: "Select budget not provided type here", + placeholder: $setup.language.activity_default_lang.budget_not_provided.placeholder, options: $props.budgetNotProvided, searchable: true }, null, 8 /* PROPS */ - , ["modelValue", "options"]), $setup.defaultErrors.budget_not_provided.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_29, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.budget_not_provided, function (error, e) { + , ["modelValue", "placeholder", "options"]), $setup.defaultErrors.budget_not_provided.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_30, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.budget_not_provided, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": "error", role: "alert" - }, [(0, vue_1.createElementVNode)("span", _hoisted_30, (0, vue_1.toDisplayString)(error), 1 + }, [(0, vue_1.createElementVNode)("span", _hoisted_31, (0, vue_1.toDisplayString)(error), 1 /* TEXT */ )]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_31, [_hoisted_32, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + ))])) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createElementVNode)("label", _hoisted_33, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.humanitarian.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-72", - name: "Humanitarian", - "hover-text": "Add a 'Humanitarian Flag' to every activity that your organisation publishes data on. This means that your organisation identifies all their activities as wholly or partially addressing a humanitarian crisis or multiple crises. You can later manually add or remove a Humanitarian Flag on individual activities if required.", + name: $setup.language.activity_default_lang.humanitarian.hover_header, + "hover-text": $setup.language.activity_default_lang.humanitarian.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)($setup["Multiselect"], { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)($setup["Multiselect"], { id: "humanitarian", modelValue: $setup.defaultValues.humanitarian, "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { return $setup.defaultValues.humanitarian = $event; }), "class": "vue__select", - placeholder: "Select Humanitarian here", + placeholder: $setup.language.activity_default_lang.humanitarian.placeholder, options: $props.humanitarian, searchable: true }, null, 8 /* PROPS */ - , ["modelValue", "options"]), $setup.defaultErrors.humanitarian.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_33, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.humanitarian, function (error, e) { + , ["modelValue", "placeholder", "options"]), $setup.defaultErrors.humanitarian.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_34, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.defaultErrors.humanitarian, function (error, e) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: e, "class": "error", role: "alert" - }, [(0, vue_1.createElementVNode)("span", _hoisted_34, (0, vue_1.toDisplayString)(error), 1 + }, [(0, vue_1.createElementVNode)("span", _hoisted_35, (0, vue_1.toDisplayString)(error), 1 /* TEXT */ )]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true)])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createElementVNode)("a", { + ))])) : (0, vue_1.createCommentVNode)("v-if", true)])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createElementVNode)("div", _hoisted_37, [(0, vue_1.createElementVNode)("a", { "class": "ghost-btn mr-8", href: "/activity/".concat($props.activityId) - }, "Cancel", 8 - /* PROPS */ - , _hoisted_37), (0, vue_1.createElementVNode)("button", { + }, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.cancel_label), 9 + /* TEXT, PROPS */ + , _hoisted_38), (0, vue_1.createElementVNode)("button", { "class": "primary-btn save-btn", onClick: _cache[5] || (_cache[5] = function ($event) { return $setup.submitForm(); }) - }, " Save default values ")])])]); + }, (0, vue_1.toDisplayString)($setup.language.activity_default_lang.save_default_values_label), 1 + /* TEXT */ + )])])]); } exports.render = render; @@ -16448,13 +16959,10 @@ var _hoisted_4 = { var _hoisted_5 = { "class": "flex" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_6 = { "class": "whitespace-nowrap font-bold", href: "/activities" -}, " Your Activities ", -1 -/* HOISTED */ -); +}; var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { "class": "separator mx-4" @@ -16466,7 +16974,7 @@ var _hoisted_8 = { "class": "breadcrumb__title" }; var _hoisted_9 = { - "class": "breadcrumb__title last w-[200px] overflow-hidden text-ellipsis text-n-30" + "class": "breadcrumb__title last max-w-lg overflow-hidden text-n-30" }; var _hoisted_10 = { "class": "ellipsis__title--hover w-[calc(100%_+_35px)]" @@ -16527,136 +17035,86 @@ var _hoisted_27 = { var _hoisted_28 = { "class": "mb-2 flex items-center justify-between" }; - -var _hoisted_29 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_29 = { "class": "mr-2" -}, "Publishing Progress", -1 -/* HOISTED */ -); - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Complete all core elements to get 100% score", -1 -/* HOISTED */ -); - -var _hoisted_31 = { +}; +var _hoisted_30 = { "class": "activities__card elements" }; -var _hoisted_32 = { +var _hoisted_31 = { "class": "mb-7 flex items-center justify-between" }; - -var _hoisted_33 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Elements", -1 -/* HOISTED */ -); - -var _hoisted_34 = { +var _hoisted_32 = { "class": "mb-3 flex justify-between" }; -var _hoisted_35 = { +var _hoisted_33 = { "class": "flex items-center space-x-1" }; - -var _hoisted_36 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_37 = { +var _hoisted_34 = { "class": "flex justify-between" }; -var _hoisted_38 = { +var _hoisted_35 = { "class": "flex items-center space-x-1" }; - -var _hoisted_39 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_40 = { +var _hoisted_36 = { "class": "!z-[200] w-[280px] bg-white pt-8" }; -var _hoisted_41 = { +var _hoisted_37 = { key: 0, "class": "mb-2" }; -var _hoisted_42 = { +var _hoisted_38 = { "class": "mb-1 flex" }; -var _hoisted_43 = { +var _hoisted_39 = { "class": "activities__card progress mr-1" }; -var _hoisted_44 = { +var _hoisted_40 = { "class": "mb-2 flex items-center justify-between" }; - -var _hoisted_45 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_41 = { "class": "mr-2" -}, "Publishing Progress", -1 -/* HOISTED */ -); - -var _hoisted_46 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Complete all core elements to get 100% score", -1 -/* HOISTED */ -); - -var _hoisted_47 = { +}; +var _hoisted_42 = { "class": "activities__card elements" }; -var _hoisted_48 = { +var _hoisted_43 = { "class": "mb-7 flex items-center justify-between" }; - -var _hoisted_49 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Elements", -1 -/* HOISTED */ -); - -var _hoisted_50 = { +var _hoisted_44 = { "class": "mb-3 flex justify-between" }; -var _hoisted_51 = { +var _hoisted_45 = { "class": "flex items-center space-x-1" }; - -var _hoisted_52 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_53 = { +var _hoisted_46 = { "class": "flex justify-between" }; -var _hoisted_54 = { +var _hoisted_47 = { "class": "flex items-center space-x-1" }; - -var _hoisted_55 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_56 = { +var _hoisted_48 = { "class": "flex justify-end" }; -var _hoisted_57 = ["href"]; - -var _hoisted_58 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_49 = ["href"]; +var _hoisted_50 = { "class": "whitespace-nowrap" -}, "Override this activity's default values", -1 -/* HOISTED */ -); - -var _hoisted_59 = { +}; +var _hoisted_51 = { "class": "mb-3 inline-flex max-w-[70%] flex-wrap gap-2 lg:max-w-full" }; -var _hoisted_60 = ["href"]; -var _hoisted_61 = ["disabled"]; -var _hoisted_62 = { +var _hoisted_52 = ["href"]; +var _hoisted_53 = ["disabled"]; +var _hoisted_54 = { "class": "hover__text" }; -var _hoisted_63 = { +var _hoisted_55 = { "class": "activities__content--elements -mx-3 flex flex-wrap" }; -var _hoisted_64 = { +var _hoisted_56 = { "class": "elements-title relative mx-3 mt-3 mb-1 flex w-full items-center text-sm uppercase text-n-40" }; -var _hoisted_65 = ["id"]; +var _hoisted_57 = ["id"]; function render(_ctx, _cache, $props, $setup, $data, $options) { var _a; @@ -16713,15 +17171,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "chevron", "class": "rotate-180 pb-2 text-3xl text-white" - })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createCommentVNode)(" title section "), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("nav", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [_hoisted_6, _hoisted_7, (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("span", _hoisted_9, (0, vue_1.toDisplayString)((_a = _ctx.pageTitle) !== null && _a !== void 0 ? _a : 'Untitled'), 1 + })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createCommentVNode)(" title section "), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("nav", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("a", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.activity_lang.your_activities_label), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : 'Untitled'), 1 + ), _hoisted_7, (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("span", _hoisted_9, (0, vue_1.toDisplayString)((_a = _ctx.pageTitle) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.untitled), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : _ctx.language.common_lang.untitled), 1 /* TEXT */ )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("a", _hoisted_15, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "arrow-short-left" - })])]), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("h4", _hoisted_17, [(0, vue_1.createElementVNode)("span", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : 'Untitled'), 1 + })])]), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("h4", _hoisted_17, [(0, vue_1.createElementVNode)("span", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : _ctx.language.common_lang.untitled), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : 'Untitled'), 1 + ), (0, vue_1.createElementVNode)("span", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.pageTitle ? _ctx.pageTitle : _ctx.language.common_lang.untitled), 1 /* TEXT */ )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createCommentVNode)(" toast msg for publishing "), _ctx.toastData.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Toast, { key: 0, @@ -16733,13 +17193,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.errorData.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_ErrorPopUp, { key: 1, message: _ctx.errorData.message, - title: "Activity couldn’t be published because", + title: _ctx.language.common_lang.error.activity_could_not_be_published, onClosePopup: _cache[2] || (_cache[2] = function () { _ctx.errorData.visibility = false; }) }, null, 8 /* PROPS */ - , ["message"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" {{ typeof toastData.message }} "), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createCommentVNode)(" Delete Activity "), (0, vue_1.createVNode)(_component_DeleteButton), (0, vue_1.createCommentVNode)(" Unpublish Activity "), _ctx.store.state.unPublished ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_UnPublish, { + , ["message", "title"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" {{ typeof toastData.message }} "), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createCommentVNode)(" Delete Activity "), (0, vue_1.createVNode)(_component_DeleteButton), (0, vue_1.createCommentVNode)(" Unpublish Activity "), _ctx.store.state.unPublished ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_UnPublish, { key: 0, "activity-id": _ctx.activityProps.id }, null, 8 @@ -16773,34 +17233,52 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "chevron", "class": "pb-2 text-3xl text-white" - })]), (0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("aside", _hoisted_24, [_ctx.publishStatus.linked_to_iati && _ctx.publishStatus.status === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_25, [(0, vue_1.createVNode)(_component_PreviouslyPublished)])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_26, [(0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [_hoisted_29, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "The IATI Standard contains a wide range of data elements and your organisation is encouraged to (at least) publish data in elements marked as “Core”.", + })]), (0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("aside", _hoisted_24, [_ctx.publishStatus.linked_to_iati && _ctx.publishStatus.status === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_25, [(0, vue_1.createVNode)(_component_PreviouslyPublished)])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_26, [(0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("span", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.language.common_lang.publishing_progress), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text", position: "right" - })]), (0, vue_1.createVNode)(_component_ProgressBar, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createVNode)(_component_ProgressBar, { percent: _ctx.progress, "class": "mb-3" }, null, 8 /* PROPS */ - , ["percent"]), _hoisted_30]), (0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("div", _hoisted_32, [_hoisted_33, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "Each “Element” represents a basic unit of information in the IATI Standard. Click on each element listed below and complete all data fields contained in the element. For each element, you will find its technical definition, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide.", + , ["percent"]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.activity_lang.complete_all_core_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_30, [(0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.elements), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.each_element_represents, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createElementVNode)("div", _hoisted_33, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "core" - }), _hoisted_36]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "Core elements include the IATI Standard's “mandatory and recommended” elements and it is important to provide this data to ensure your data is usable and useful.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.core_elements_include, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_37, [(0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-spring-50", icon: "double-tick" - }), _hoisted_39]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })])])]), (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createVNode)(_component_Elements, { + }, null, 8 + /* PROPS */ + , ["hover-text"])])])]), (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createVNode)(_component_Elements, { "activity-id": _ctx.activity.id, data: _ctx.elementProps }, null, 8 @@ -16809,34 +17287,52 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { boundary: '.activities' }]])]), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)([_ctx.showSidebar ? ' h-screen -translate-x-[20px]' : ' h-screen -translate-x-[110%]', "opacity-1 fixed top-[60px] z-[200] block h-[calc(100vh_-_60px)] overflow-y-auto duration-200 lg:hidden"]) - }, [(0, vue_1.createElementVNode)("aside", _hoisted_40, [_ctx.publishStatus.linked_to_iati && _ctx.publishStatus.status === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_41, [(0, vue_1.createVNode)(_component_PreviouslyPublished)])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_42, [(0, vue_1.createElementVNode)("div", _hoisted_43, [(0, vue_1.createElementVNode)("div", _hoisted_44, [_hoisted_45, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "The IATI Standard contains a wide range of data elements and your organisation is encouraged to (at least) publish data in elements marked as “Core”.", + }, [(0, vue_1.createElementVNode)("aside", _hoisted_36, [_ctx.publishStatus.linked_to_iati && _ctx.publishStatus.status === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_37, [(0, vue_1.createVNode)(_component_PreviouslyPublished)])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createElementVNode)("div", _hoisted_39, [(0, vue_1.createElementVNode)("div", _hoisted_40, [(0, vue_1.createElementVNode)("span", _hoisted_41, (0, vue_1.toDisplayString)(_ctx.language.common_lang.publishing_progress), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.the_iati_standard_contains_wide, name: "", "class": "hover-text", position: "right" - })]), (0, vue_1.createVNode)(_component_ProgressBar, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createVNode)(_component_ProgressBar, { percent: _ctx.progress, "class": "mb-3" }, null, 8 /* PROPS */ - , ["percent"]), _hoisted_46]), (0, vue_1.createElementVNode)("div", _hoisted_47, [(0, vue_1.createElementVNode)("div", _hoisted_48, [_hoisted_49, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "Each “Element” represents a basic unit of information in the IATI Standard. Click on each element listed below and complete all data fields contained in the element. For each element, you will find its technical definition, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide.", + , ["percent"]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.activity_lang.complete_all_core_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_42, [(0, vue_1.createElementVNode)("div", _hoisted_43, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.elements), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.each_element_represents, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_50, [(0, vue_1.createElementVNode)("div", _hoisted_51, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_44, [(0, vue_1.createElementVNode)("div", _hoisted_45, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "core" - }), _hoisted_52]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "Core elements include the IATI Standard's “mandatory and recommended” elements and it is important to provide this data to ensure your data is usable and useful.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.core_elements_include, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_53, [(0, vue_1.createElementVNode)("div", _hoisted_54, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_46, [(0, vue_1.createElementVNode)("div", _hoisted_47, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-spring-50", icon: "double-tick" - }), _hoisted_55]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })])])]), (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createVNode)(_component_Elements, { + }, null, 8 + /* PROPS */ + , ["hover-text"])])])]), (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createVNode)(_component_Elements, { "activity-id": _ctx.activity.id, data: _ctx.elementProps }, null, 8 @@ -16845,15 +17341,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { boundary: '.activities' }]])])], 2 /* CLASS */ - ), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_56, [(0, vue_1.createElementVNode)("a", { + ), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_48, [(0, vue_1.createElementVNode)("a", { href: "/activity/".concat(_ctx.activityProps.id, "/default_values"), "class": "mb-4 flex items-center text-xs font-bold uppercase leading-normal text-n-50" }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-0.5 text-base", icon: "setting" - }), _hoisted_58], 8 + }), (0, vue_1.createElementVNode)("span", _hoisted_50, (0, vue_1.toDisplayString)(_ctx.language.activity_lang.uc_override_this_activity_label), 1 + /* TEXT */ + )], 8 /* PROPS */ - , _hoisted_57)]), (0, vue_1.createElementVNode)("div", _hoisted_59, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { + , _hoisted_49)]), (0, vue_1.createElementVNode)("div", _hoisted_51, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { return (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: index, href: "#".concat(String(key)), @@ -16863,28 +17361,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "tab-btn" }, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(post.label), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_62, [(0, vue_1.createVNode)(_component_HoverText, { + ), (0, vue_1.createElementVNode)("span", _hoisted_54, [(0, vue_1.createVNode)(_component_HoverText, { name: post.label, - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, icon_size: "text-tiny" }, null, 8 /* PROPS */ - , ["name"])])], 8 + , ["name", "hover-text"])])], 8 /* PROPS */ - , _hoisted_61)], 8 + , _hoisted_53)], 8 /* PROPS */ - , _hoisted_60)), [[_directive_smooth_scroll]]); + , _hoisted_52)), [[_directive_smooth_scroll]]); }), 128 /* KEYED_FRAGMENT */ - ))]), (0, vue_1.createElementVNode)("div", _hoisted_63, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { + ))]), (0, vue_1.createElementVNode)("div", _hoisted_55, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: index - }, [(0, vue_1.createElementVNode)("div", _hoisted_64, [(0, vue_1.createElementVNode)("div", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_56, [(0, vue_1.createElementVNode)("div", { id: key, "class": "mr-4 shrink-0" }, (0, vue_1.toDisplayString)(_ctx.formatTitle(key)), 9 /* TEXT, PROPS */ - , _hoisted_65)]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.elements, function (element, name, i) { + , _hoisted_57)]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.elements, function (element, name, i) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { @@ -17032,15 +17530,9 @@ var _withScopeId = function _withScopeId(n) { return (0, vue_1.pushScopeId)("data-v-c7ca28b8"), n = n(), (0, vue_1.popScopeId)(), n; }; -var _hoisted_1 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("h5", { - "class": "title mb-5 flex text-xl font-bold text-bluecoral sm:text-2xl" - }, " Add a title and identifier for the activity ", -1 - /* HOISTED */ - ); -}); - +var _hoisted_1 = { + "class": "title mb-5 flex text-xl font-bold text-bluecoral sm:text-2xl" +}; var _hoisted_2 = { "class": "manual-import overflow-hidden" }; @@ -17053,16 +17545,9 @@ var _hoisted_4 = { var _hoisted_5 = { "class": "form-group-title-container" }; - -var _hoisted_6 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("p", { - "class": "form-group-title" - }, "title", -1 - /* HOISTED */ - ); -}); - +var _hoisted_6 = { + "class": "form-group-title" +}; var _hoisted_7 = { "class": "form-group" }; @@ -17072,121 +17557,122 @@ var _hoisted_8 = { var _hoisted_9 = { "class": "label-field" }; +var _hoisted_10 = { + "class": "label", + "for": "narrative" +}; -var _hoisted_10 = /*#__PURE__*/_withScopeId(function () { +var _hoisted_11 = /*#__PURE__*/_withScopeId(function () { /*#__PURE__*/ - return (0, vue_1.createElementVNode)("label", { - "class": "label", - "for": "narrative" - }, [/*#__PURE__*/(0, vue_1.createTextVNode)("narrative "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + return (0, vue_1.createElementVNode)("span", { "class": "required-icon" - }, " *")], -1 + }, " *", -1 /* HOISTED */ ); }); -var _hoisted_11 = { +var _hoisted_12 = ["placeholder"]; +var _hoisted_13 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_12 = { +var _hoisted_14 = { "class": "label-field" }; +var _hoisted_15 = { + "class": "label", + "for": "" +}; -var _hoisted_13 = /*#__PURE__*/_withScopeId(function () { +var _hoisted_16 = /*#__PURE__*/_withScopeId(function () { /*#__PURE__*/ - return (0, vue_1.createElementVNode)("label", { - "class": "label", - "for": "" - }, [/*#__PURE__*/(0, vue_1.createTextVNode)("language "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + return (0, vue_1.createElementVNode)("span", { "class": "required-icon" - }, " *")], -1 + }, " *", -1 /* HOISTED */ ); }); -var _hoisted_14 = { +var _hoisted_17 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_15 = { +var _hoisted_18 = { key: 1, "class": "text-xs font-normal text-n-40" }; -var _hoisted_16 = { +var _hoisted_19 = { "class": "form-group-title-container" }; - -var _hoisted_17 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("p", { - "class": "form-group-title" - }, "iati-identifier", -1 - /* HOISTED */ - ); -}); - -var _hoisted_18 = { +var _hoisted_20 = { + "class": "form-group-title" +}; +var _hoisted_21 = { "class": "form-group" }; -var _hoisted_19 = { +var _hoisted_22 = { "class": "form__content" }; +var _hoisted_23 = { + "class": "label-field" +}; +var _hoisted_24 = { + "class": "label", + "for": "" +}; -var _hoisted_20 = /*#__PURE__*/_withScopeId(function () { +var _hoisted_25 = /*#__PURE__*/_withScopeId(function () { /*#__PURE__*/ - return (0, vue_1.createElementVNode)("div", { - "class": "label-field" - }, [/*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "class": "label", - "for": "" - }, [/*#__PURE__*/(0, vue_1.createTextVNode)("activity identifiers "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + return (0, vue_1.createElementVNode)("span", { "class": "required-icon" - }, " *")])], -1 + }, " *", -1 /* HOISTED */ ); }); -var _hoisted_21 = { +var _hoisted_26 = ["placeholder"]; +var _hoisted_27 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_22 = { +var _hoisted_28 = { key: 1, "class": "text-xs font-normal text-n-40" }; +var _hoisted_29 = { + "class": "label-field" +}; +var _hoisted_30 = { + "class": "label", + "for": "" +}; -var _hoisted_23 = /*#__PURE__*/_withScopeId(function () { +var _hoisted_31 = /*#__PURE__*/_withScopeId(function () { /*#__PURE__*/ - return (0, vue_1.createElementVNode)("div", { - "class": "label-field" - }, [/*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "class": "label", - "for": "" - }, [/*#__PURE__*/(0, vue_1.createTextVNode)("iati-identifier "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { + return (0, vue_1.createElementVNode)("span", { "class": "required-icon" - }, " *")])], -1 + }, " *", -1 /* HOISTED */ ); }); -var _hoisted_24 = ["value"]; -var _hoisted_25 = { +var _hoisted_32 = ["value"]; +var _hoisted_33 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_26 = { +var _hoisted_34 = { key: 1, "class": "text-xs font-normal text-n-40" }; -var _hoisted_27 = { +var _hoisted_35 = { "class": "mt-8 flex justify-end" }; -var _hoisted_28 = { +var _hoisted_36 = { "class": "inline-flex" }; @@ -17207,16 +17693,26 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "default": (0, vue_1.withCtx)(function () { return [_ctx.loaderVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Loader, { key: 0 - })) : (0, vue_1.createCommentVNode)("v-if", true), _hoisted_1, (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createVNode)(_component_HoverText, { - name: 'title', - "hover-text": "A short, human-readable title. For more information", + })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("h5", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.language.activities_lang.add_a_tittle_and_identifier_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.el_common_lang.title, + "hover-text": _ctx.language.elements_lang.activities.title.hover_text, position: "right", "show-iati-reference": true - }), _hoisted_6]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_9, [_hoisted_10, (0, vue_1.createVNode)(_component_HoverText, { - name: 'narrative', - "hover-text": "The free text name or description of the item being described. This can be repeated in multiple languages. For more information", + }, null, 8 + /* PROPS */ + , ["name", "hover-text"]), (0, vue_1.createElementVNode)("p", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.el_common_lang.title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("label", _hoisted_10, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.el_common_lang.narrative) + " ", 1 + /* TEXT */ + ), _hoisted_11]), (0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.el_common_lang.narrative, + "hover-text": _ctx.language.elements_lang.activities.title.narrative.hover_text, "show-iati-reference": true - })]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.formData.narrative = $event; }), @@ -17224,16 +17720,20 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.errorData.narrative != '' }]), type: "text", - placeholder: "Type narrative here" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.narrative]]), _ctx.errorData.narrative != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.errorData.narrative), 1 + placeholder: _ctx.language.el_common_lang.type_narrative_here + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_12), [[vue_1.vModelText, _ctx.formData.narrative]]), _ctx.errorData.narrative != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.errorData.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, [_hoisted_13, (0, vue_1.createVNode)(_component_HoverText, { - name: "language", - "hover-text": "A code specifying the language of text in this element. It is recommended that wherever possible only codes from ISO 639-1 are used. If not present, the default language is assumed. For more information", + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("label", _hoisted_15, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.el_common_lang.language) + " ", 1 + /* TEXT */ + ), _hoisted_16]), (0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.el_common_lang.language, + "hover-text": _ctx.language.el_common_lang.a_code_specifying_text_link_5, "show-iati-reference": true - })]), (0, vue_1.createVNode)(_component_Multiselect, { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])]), (0, vue_1.createVNode)(_component_Multiselect, { modelValue: _ctx.formData.language, "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return _ctx.formData.language = $event; @@ -17243,17 +17743,25 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]), searchable: true, options: _ctx.languages, - placeholder: "Select language" + placeholder: _ctx.language.el_common_lang.select_language }, null, 8 /* PROPS */ - , ["modelValue", "class", "options"]), _ctx.errorData.language != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.errorData.language), 1 + , ["modelValue", "class", "options", "placeholder"]), _ctx.errorData.language != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.errorData.language), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.language.el_common_lang.your_default_language_assumed_no_that), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, "If no value is selected, default value is assumed. "))])])])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createVNode)(_component_HoverText, { - name: 'iati-identifier', + ))])])])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.el_common_lang.iati_identifier, position: "right", - "hover-text": "A globally unique identifier for the activity.

    This MUST be prefixed with EITHER the current IATI organisation identifier for the reporting organisation (reporting-org/@ref) OR a previous identifier reported in other-identifier, and suffixed with the organisation’s own activity identifier. The prefix and the suffix should be separated by a hyphen “-“.

    Once an activity has been reported to IATI its identifier MUST NOT be changed in subsequent updates. For more information", + "hover-text": _ctx.language.elements_lang.activities.iati_identifier.hover_text, "show-iati-reference": true - }), _hoisted_17]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", null, [_hoisted_20, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"]), (0, vue_1.createElementVNode)("p", _hoisted_20, (0, vue_1.toDisplayString)(_ctx.language.el_common_lang.iati_identifier), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("label", _hoisted_24, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.el_common_lang.acitivity_identifier) + " ", 1 + /* TEXT */ + ), _hoisted_25])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { return _ctx.formData.activity_identifier = $event; }), @@ -17261,12 +17769,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.errorData.activity_identifier != '' }]), type: "text", - placeholder: "Type activity-identifier here" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.activity_identifier]]), _ctx.errorData.activity_identifier != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)(_ctx.errorData.activity_identifier), 1 + placeholder: _ctx.language.el_common_lang.type_activity_identifier_here + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_26), [[vue_1.vModelText, _ctx.formData.activity_identifier]]), _ctx.errorData.activity_identifier != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_27, (0, vue_1.toDisplayString)(_ctx.errorData.activity_identifier), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, (0, vue_1.toDisplayString)(_ctx.language.elements_lang.activities.activity_identifier.shorter_help_text), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createElementVNode)("label", _hoisted_30, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.el_common_lang.iati_identifier) + " ", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, "Enter your own unique activity identifier such as abbreviation or simply a number. Make sure it is unique across all the activities. IATI Publisher will concatenate Organization Identifier and Activity Identifier to autogenerate 'iati-identifier'. "))]), (0, vue_1.createElementVNode)("div", null, [_hoisted_23, (0, vue_1.createElementVNode)("input", { + ), _hoisted_31])]), (0, vue_1.createElementVNode)("input", { "class": "form__input", type: "text", placeholder: "", @@ -17274,23 +17786,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { disabled: "true" }, null, 8 /* PROPS */ - , _hoisted_24), _ctx.errorData.iati_identifier_text != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)(_ctx.errorData.iati_identifier_text), 1 + , _hoisted_32), _ctx.errorData.iati_identifier_text != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_33, (0, vue_1.toDisplayString)(_ctx.errorData.iati_identifier_text), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_26, "This is autogenerated "))])])])]), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createVNode)(_component_BtnComponent, { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_34, (0, vue_1.toDisplayString)(_ctx.language.common_lang.this_is_autogenerated), 1 + /* TEXT */ + ))])])])]), (0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createVNode)(_component_BtnComponent, { "class": "mx-3 bg-white px-3 uppercase", type: "", - text: "Cancel", + text: _ctx.language.button_lang.cancel, onClick: _ctx.closeModal }, null, 8 /* PROPS */ - , ["onClick"]), (0, vue_1.createVNode)(_component_BtnComponent, { + , ["text", "onClick"]), (0, vue_1.createVNode)(_component_BtnComponent, { "class": "space", type: "primary", - text: "Save", + text: _ctx.language.button_lang.save, onClick: _cache[3] || (_cache[3] = function ($event) { return _ctx.storeActivity(); }) - })])])])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])])])]; }), _: 1 /* STABLE */ @@ -17339,16 +17855,9 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "flex shrink-0" }; - -var _hoisted_5 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-xs uppercase" - }, "Retry", -1 - /* HOISTED */ - ); -}); - +var _hoisted_5 = { + "class": "text-xs uppercase" +}; var _hoisted_6 = { "class": "bulk-activities max-h-[240px] overflow-y-auto overflow-x-hidden bg-white transition-all duration-500" }; @@ -17366,7 +17875,7 @@ var _hoisted_9 = { function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, " Publishing " + (0, vue_1.toDisplayString)(Object.keys($setup.activities).length) + " activities ", 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.common_lang.publishing) + " " + (0, vue_1.toDisplayString)(Object.keys($setup.activities).length) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.activities_nocase), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_4, [$setup.hasFailedActivities.ids.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: 0, @@ -17375,7 +17884,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1", icon: "redo" - }), _hoisted_5])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { + }), (0, vue_1.createElementVNode)("span", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.common_lang.retry), 1 + /* TEXT */ + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: 1, "class": "cursor-pointer minus", onClick: $setup.toggleWindow @@ -17431,16 +17942,9 @@ var _hoisted_1 = { "class": "flex items-center accordion-title" }; var _hoisted_2 = ["href"]; - -var _hoisted_3 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-xs" - }, "Show more", -1 - /* HOISTED */ - ); -}); - +var _hoisted_3 = { + "class": "text-xs" +}; var _hoisted_4 = { "class": "checkbox shrink-0" }; @@ -17462,15 +17966,9 @@ var _hoisted_8 = { "class": "mb-2" }; var _hoisted_9 = ["href"]; - -var _hoisted_10 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "mr-1 grow" - }, "View the errors and warnings in detail", -1 - /* HOISTED */ - ); -}); +var _hoisted_10 = { + "class": "mr-1 grow" +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -17491,7 +17989,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { key: 0, "class": "flex mr-2 cursor-pointer shrink-0", onClick: $setup.accordionToggle - }, [_hoisted_3, (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.common_lang.show_more), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-xl transition-transform duration-500 text-blue-50", icon: "arrow-down" })])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("label", _hoisted_4, [(0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { @@ -17508,7 +18008,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { href: "/activity/".concat(error.activity_id), target: "_blank", "class": "inline-flex items-center" - }, [_hoisted_10, (0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.common_lang.view_errors_or_warning), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "shrink-0", icon: "external" })], 8 @@ -17547,19 +18049,12 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "title mb-6 flex items-center text-sm" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Publishing alert", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "rounded-lg bg-eggshell p-4" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_4 = { "class": "text-sm leading-normal" -}, " Activities that are already published will not be published. Changes made to published activities (Draft) will be republished. ")], -1 -/* HOISTED */ -); - +}; var _hoisted_5 = { "class": "flex justify-end" }; @@ -17572,56 +18067,46 @@ var _hoisted_7 = { var _hoisted_8 = { "class": "title mb-6 flex" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Core Elements Complete", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_9 = { "class": "rounded-lg bg-mint px-6" }; -var _hoisted_11 = { +var _hoisted_10 = { key: 0, "class": "coreCompleted" }; -var _hoisted_12 = ["href"]; -var _hoisted_13 = { +var _hoisted_11 = ["href"]; +var _hoisted_12 = { key: 1, "class": "py-6" }; -var _hoisted_14 = { +var _hoisted_13 = { "class": "non-eligible-activities mb-6 text-sm leading-relaxed" }; -var _hoisted_15 = { +var _hoisted_14 = { "class": "title mb-6 flex" }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Core Elements not Complete", -1 -/* HOISTED */ -); - -var _hoisted_17 = { +var _hoisted_15 = { "class": "rounded-lg bg-rose px-6" }; -var _hoisted_18 = { +var _hoisted_16 = { key: 0, "class": "notCompleted" }; -var _hoisted_19 = ["href"]; -var _hoisted_20 = { +var _hoisted_17 = ["href"]; +var _hoisted_18 = { key: 1, "class": "py-6" }; -var _hoisted_21 = { +var _hoisted_19 = { "class": "flex justify-end" }; -var _hoisted_22 = { +var _hoisted_20 = { "class": "inline-flex" }; -var _hoisted_23 = { +var _hoisted_21 = { "class": "flex justify-end" }; -var _hoisted_24 = { +var _hoisted_22 = { "class": "inline-flex" }; @@ -17646,28 +18131,38 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg text-crimson-40", icon: "shield" - }), _hoisted_3]), _hoisted_4]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.common_lang.publishing_alert), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)($setup.language.common_lang.activities_already_published_will_not) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.changes_made_to_published_will_be_republished), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "bg-white px-6 uppercase", - text: "Cancel", + text: $setup.language.common_lang.cancel, type: "", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.resetPublishStep(); }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Continue", + text: $setup.language.common_lang["continue"], type: "primary", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.verifyCoreElements(); }) - })])])], 64 + }, null, 8 + /* PROPS */ + , ["text"])])])], 64 /* STABLE_FRAGMENT */ )) : $setup.bulkPublishStep === 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "tick", "class": "mr-1 mt-0.5 text-lg text-spring-50" - }), _hoisted_9]), (0, vue_1.createElementVNode)("div", _hoisted_10, [$setup.coreCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.coreCompletedActivities, function (act, i) { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.common_lang.core_completed_title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_9, [$setup.coreCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_10, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.coreCompletedActivities, function (act, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)(["item py-6", { @@ -17678,15 +18173,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "" }, (0, vue_1.toDisplayString)(act.title), 9 /* TEXT, PROPS */ - , _hoisted_12)], 2 + , _hoisted_11)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_13, "No activities found"))])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createVNode)(_component_svg_vue, { + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.activities_lang.no_activities_found), 1 + /* TEXT */ + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "warning-fill", "class": "mr-1 mt-0.5 text-lg text-crimson-40" - }), _hoisted_16]), (0, vue_1.createElementVNode)("div", _hoisted_17, [$setup.coreInCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.coreInCompletedActivities, function (act, i) { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.common_lang.core_completed_title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_15, [$setup.coreInCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_16, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.coreInCompletedActivities, function (act, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)(["item py-6", { @@ -17698,27 +18197,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "" }, (0, vue_1.toDisplayString)(act.title), 9 /* TEXT, PROPS */ - , _hoisted_19)], 2 + , _hoisted_17)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, "No activities found"))])]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, [$setup.coreCompletedActivities.length > 0 || $setup.coreInCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, "No activities found"))])]), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", _hoisted_20, [$setup.coreCompletedActivities.length > 0 || $setup.coreInCompletedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 0, "class": "bg-white px-6 uppercase", type: "", - text: "Continue Anyway", + text: $setup.language.common_lang.continue_anyway, onClick: _cache[2] || (_cache[2] = function ($event) { return $setup.validateActivities(); }) - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", type: "primary", - text: "Go Back", + text: $setup.language.common_lang.go_back, onClick: _cache[3] || (_cache[3] = function ($event) { return $setup.resetPublishStep(); }) - })])])], 64 + }, null, 8 + /* PROPS */ + , ["text"])])])], 64 /* STABLE_FRAGMENT */ )) : $setup.bulkPublishStep === 3 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 2 @@ -17726,19 +18229,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { data: $setup.validationErrors }, null, 8 /* PROPS */ - , ["data"]), (0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createVNode)($setup["BtnComponent"], { + , ["data"]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "bg-white px-6 uppercase", type: "", - text: "Cancel", + text: $setup.language.common_lang.cancel, onClick: _cache[4] || (_cache[4] = function ($event) { return $setup.resetPublishStep(); }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": (0, vue_1.normalizeClass)(["space", { 'pointer-events-none': $setup.selectedActivities.length === 0 }]), type: "primary", - text: "Publish (".concat($setup.selectedActivities.length, ") Activities"), + text: "".concat($setup.language.common_lang.publishing, " (").concat($setup.selectedActivities.length, ") ").concat($setup.language.common_lang.activities), onClick: _cache[5] || (_cache[5] = function ($event) { return $setup.startBulkPublish(); }) @@ -17790,10 +18295,6 @@ var _hoisted_1 = { "class": "mr-5" }; -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Refresh", -1 -/* HOISTED */ -); - function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -17812,7 +18313,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "redo", "class": "mr-1" - }), _hoisted_2], 2 + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.refresh), 1 + /* TEXT */ + )], 2 /* CLASS */ )], 2 /* CLASS */ @@ -17885,27 +18388,33 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [$props.data.critical.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "warning", "class": "mr-1 mt-0.5 shrink-0 text-lg text-crimson-40" - }), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("b", null, "Critical error found in " + (0, vue_1.toDisplayString)($props.data.critical.length) + " activities.", 1 + }), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.common_lang.critical_error_found) + " " + (0, vue_1.toDisplayString)($props.data.critical.length) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.activities_nocase) + ".", 1 /* TEXT */ - ), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.criticalMessage))])]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createVNode)($setup["ErrorItem"], { + ), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.criticalMessage), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createVNode)($setup["ErrorItem"], { data: $props.data.critical, message: $setup.criticalMessage }, null, 8 /* PROPS */ - , ["data"])])])])) : (0, vue_1.createCommentVNode)("v-if", true), $props.data.errors.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_svg_vue, { + , ["data", "message"])])])])) : (0, vue_1.createCommentVNode)("v-if", true), $props.data.errors.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "warning-fill", "class": "mr-1 mt-0.5 shrink-0 text-lg text-camel-40" - }), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("b", null, "Errors and Warning found in " + (0, vue_1.toDisplayString)($props.data.errors.length) + " activities.", 1 + }), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.common_lang.errors_and_warnings_found) + " " + (0, vue_1.toDisplayString)($props.data.errors.length) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.activities_nocase) + ".", 1 + /* TEXT */ + ), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.warningMessage), 1 /* TEXT */ - ), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.warningMessage))])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createVNode)($setup["ErrorItem"], { + )])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createVNode)($setup["ErrorItem"], { data: $props.data.errors, message: $setup.warningMessage }, null, 8 /* PROPS */ - , ["data"])])])])) : (0, vue_1.createCommentVNode)("v-if", true), $props.data.no_errors.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createVNode)(_component_svg_vue, { + , ["data", "message"])])])])) : (0, vue_1.createCommentVNode)("v-if", true), $props.data.no_errors.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "tick", "class": "mr-1 mt-0.5 shrink-0 text-lg text-spring-50" - }), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)($setup.noErrorMessage))]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createVNode)($setup["ErrorItem"], { + }), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)($setup.noErrorMessage), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createVNode)($setup["ErrorItem"], { data: $props.data.no_errors }, null, 8 /* PROPS */ @@ -17959,24 +18468,19 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "multiline" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_8 = { key: 0, "class": "flex flex-col" }; -var _hoisted_10 = { +var _hoisted_9 = { key: 0, "class": "language top" }; -var _hoisted_11 = { +var _hoisted_10 = { key: 1, "class": "description" }; -var _hoisted_12 = { +var _hoisted_11 = { key: 1, "class": "italic" }; @@ -17990,19 +18494,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", null, [post.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.activityDate[post.type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Type Missing"))]), (0, vue_1.createElementVNode)("div", null, [post.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.formatDate(post.date)), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, "Date Missing"))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { + ))]), (0, vue_1.createElementVNode)("div", null, [post.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.formatDate(post.date)), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.date)), 1 + /* TEXT */ + ))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)([{ 'mb-4': i !== post.narrative.length - 1 }, "date-content elements-detail"]) - }, [(0, vue_1.createElementVNode)("table", _hoisted_6, [(0, vue_1.createElementVNode)("tr", _hoisted_7, [_hoisted_8, (0, vue_1.createElementVNode)("td", null, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_9, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, " (Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_6, [(0, vue_1.createElementVNode)("tr", _hoisted_7, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.nattative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(item.narrative), 1 + ), (0, vue_1.createElementVNode)("td", null, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(item.narrative), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "Missing"))])])])], 2 + ))])])])], 2 /* CLASS */ ); }), 128 @@ -18042,76 +18554,78 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "category" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Attached - ", -1 -/* HOISTED */ -); - -var _hoisted_4 = { +var _hoisted_3 = { key: 0 }; -var _hoisted_5 = { +var _hoisted_4 = { key: 1 }; -var _hoisted_6 = { +var _hoisted_5 = { "class": "mb-2 text-sm font-bold" }; -var _hoisted_7 = { +var _hoisted_6 = { key: 0 }; -var _hoisted_8 = { +var _hoisted_7 = { key: 1, "class": "italic" }; -var _hoisted_9 = { +var _hoisted_8 = { "class": "ml-5" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_9 = { key: 0, "class": "flex flex-col" }; -var _hoisted_12 = { +var _hoisted_10 = { key: 0, "class": "language top" }; -var _hoisted_13 = { +var _hoisted_11 = { key: 1, "class": "description" }; -var _hoisted_14 = { +var _hoisted_12 = { key: 1, "class": "italic" }; -var _hoisted_15 = { +var _hoisted_13 = { key: 1, "class": "text-sm italic" }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [_ctx.data.condition_attached == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("span", null, [_ctx.data.condition_attached == '0' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "No")) : _ctx.data.condition_attached == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, "Yes")) : (0, vue_1.createCommentVNode)("v-if", true)])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data.condition, function (post, key) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [_ctx.data.condition_attached == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.attached) + " - ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", null, [_ctx.data.condition_attached == '0' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.no), 1 + /* TEXT */ + )) : _ctx.data.condition_attached == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.common_lang.yes), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data.condition, function (post, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: key, "class": (0, vue_1.normalizeClass)({ 'mb-4': Number(key) !== _ctx.data.condition.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, [post.condition_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.types.conditionType[post.condition_type]), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, [post.condition_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.types.conditionType[post.condition_type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, "Type Missing"))]), (0, vue_1.createElementVNode)("table", _hoisted_9, [(0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("table", _hoisted_8, [(0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: i, "class": (0, vue_1.normalizeClass)(["multiline", { 'mb-4': i !== post.narrative.length - 1 }]) - }, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ")", 1 + }, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_9, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(item.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(item.narrative), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.language.common_lang.attached), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, "Missing"))])], 2 + ))])], 2 /* CLASS */ ); }), 128 @@ -18121,7 +18635,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ); }), 128 /* KEYED_FRAGMENT */ - ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, "Condition not Attached"))]); + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.language.common_lang.conditions_not_attached), 1 + /* TEXT */ + ))]); } exports.render = render; @@ -18157,83 +18673,43 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "ml-5" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organization", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "language mb-1.5" }; -var _hoisted_7 = { +var _hoisted_6 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Person Name", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_7 = { "class": "language mb-1.5" }; -var _hoisted_10 = { +var _hoisted_8 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Department", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_9 = { "class": "language mb-1.5" }; -var _hoisted_13 = { +var _hoisted_10 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Job Title", -1 -/* HOISTED */ -); - -var _hoisted_15 = { +var _hoisted_11 = { "class": "language mb-1.5" }; -var _hoisted_16 = { +var _hoisted_12 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Email", -1 -/* HOISTED */ -); - -var _hoisted_18 = { +var _hoisted_13 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Telephone", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +var _hoisted_14 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Website", -1 -/* HOISTED */ -); - -var _hoisted_22 = { +var _hoisted_15 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Mailing Address", -1 -/* HOISTED */ -); - -var _hoisted_24 = { +var _hoisted_16 = { "class": "language mb-1.5" }; -var _hoisted_25 = { +var _hoisted_17 = { "class": "w-[500px] max-w-full" }; @@ -18246,7 +18722,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.contactType[post.type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Type Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.organisation[0].narrative, function (narrative, k) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organisation), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.organisation[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18254,16 +18734,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.organisation[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_8, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.person_name[0].narrative, function (narrative, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.person_name), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.person_name[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18271,16 +18753,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.person_name[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_9, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_7, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.department[0].narrative, function (narrative, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.department), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.department[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18288,16 +18772,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.department[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_12, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Missing") + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.job_title[0].narrative, function (narrative, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.job_title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.job_title[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18305,16 +18791,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.job_title[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_15, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_11, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_16, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_17, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.email, function (email_value, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.email) + "l", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.email, function (email_value, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18322,14 +18810,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.email.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_18, (0, vue_1.toDisplayString)((_a = email_value.email) !== null && _a !== void 0 ? _a : "Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)((_a = email_value.email) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.telephone, function (tel, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.telephone), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.telephone, function (tel, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18337,14 +18827,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.telephone.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_20, (0, vue_1.toDisplayString)((_a = tel.telephone) !== null && _a !== void 0 ? _a : "Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)((_a = tel.telephone) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_21, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.website, function (w, k) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.website), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.website, function (w, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18352,14 +18844,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.website.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_22, (0, vue_1.toDisplayString)((_a = w.website) !== null && _a !== void 0 ? _a : "Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)((_a = w.website) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.mailing_address, function (address, address_index) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.mailing_address), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.mailing_address, function (address, address_index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: address_index, "class": (0, vue_1.normalizeClass)({ @@ -18371,9 +18865,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: k, "class": "description-content" - }, [(0, vue_1.createElementVNode)("div", _hoisted_24, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Not Available") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_16, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? _ctx.types.languages[narrative.language] : "Not Available") + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_25, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Not Available"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.not_available), 1 /* TEXT */ )]); }), 128 @@ -18447,17 +18941,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.descriptionType[post.type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Type Missing"))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 + /* TEXT */ + ))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)([{ 'mb-4': i !== post.narrative.length - 1 }, "text-sm description-content"]) - }, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_4, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " (Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 + }, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_4, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(item.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Narrative Missing"))], 2 + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.narrative)), 1 + /* TEXT */ + ))], 2 /* CLASS */ ); }), 128 @@ -18502,37 +19000,18 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "ml-5" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { key: 0 }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_8 = ["href"]; -var _hoisted_9 = { +var _hoisted_6 = ["href"]; +var _hoisted_7 = { key: 1, "class": "italic" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_8 = { "class": "language mb-1.5" }; -var _hoisted_13 = { +var _hoisted_9 = { "class": "w-[500px] max-w-full" }; @@ -18547,17 +19026,29 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)((_a = $setup.types.humanitarianScopeType[post.type]) !== null && _a !== void 0 ? _a : "Missing"), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Vocabulary Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.types.humanitarianScopeVocabulary[post.vocabulary]) !== null && _b !== void 0 ? _b : "Missing"), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.vocabulary)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.vocabulary), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.types.humanitarianScopeVocabulary[post.vocabulary]) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), post.vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_6, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + )]), post.vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.vocabulary_uri }, (0, vue_1.toDisplayString)(post.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_8)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, "Missing"))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = post.code) !== null && _c !== void 0 ? _c : "Missing"), 1 + , _hoisted_6)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = post.code) !== null && _c !== void 0 ? _c : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -18565,9 +19056,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_12, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_8, " (" + (0, vue_1.toDisplayString)($setup.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : $setup.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ @@ -18652,33 +19143,23 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "ml-5" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { key: 0 }; -var _hoisted_7 = { +var _hoisted_6 = { "class": "description" }; -var _hoisted_8 = { +var _hoisted_7 = { key: 1, "class": "italic" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Iati-Equivalent", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_8 = { key: 0 }; -var _hoisted_11 = { +var _hoisted_9 = { "class": "description" }; -var _hoisted_12 = { +var _hoisted_10 = { key: 1, "class": "italic" }; @@ -18692,11 +19173,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.legacy_name ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, (0, vue_1.toDisplayString)(post.legacy_name), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Name Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, post.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)(post.value), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.name)), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_8, "Missing"))])]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_9, post.iati_equivalent ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_10, [(0, vue_1.createElementVNode)("span", _hoisted_11, (0, vue_1.toDisplayString)(post.iati_equivalent), 1 + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.value), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_12, "Missing"))])])])], 2 + ), post.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_5, [(0, vue_1.createElementVNode)("span", _hoisted_6, (0, vue_1.toDisplayString)(post.value), 1 + /* TEXT */ + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.iati_equivalent), 1 + /* TEXT */ + ), post.iati_equivalent ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_8, [(0, vue_1.createElementVNode)("span", _hoisted_9, (0, vue_1.toDisplayString)(post.iati_equivalent), 1 + /* TEXT */ + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -18749,210 +19240,165 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "ml-5" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_8 = { "class": "text-sm" }; -var _hoisted_10 = { +var _hoisted_9 = { key: 0 }; -var _hoisted_11 = { +var _hoisted_10 = { key: 1, "class": "italic" }; -var _hoisted_12 = { +var _hoisted_11 = { "class": "ml-5" }; -var _hoisted_13 = { +var _hoisted_12 = { "class": "w-full" }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Location Id", -1 -/* HOISTED */ -); - -var _hoisted_15 = { +var _hoisted_13 = { "class": "flex space-x-1" }; -var _hoisted_16 = { +var _hoisted_14 = { "class": "value" }; -var _hoisted_17 = { +var _hoisted_15 = { key: 0 }; -var _hoisted_18 = { +var _hoisted_16 = { key: 1, "class": "italic" }; -var _hoisted_19 = { +var _hoisted_17 = { key: 0 }; -var _hoisted_20 = { +var _hoisted_18 = { key: 1, "class": "italic" }; -var _hoisted_21 = { +var _hoisted_19 = { "class": "w-full" }; -var _hoisted_22 = { +var _hoisted_20 = { "class": "multiline" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_24 = { +var _hoisted_21 = { key: 0, "class": "flex flex-col" }; -var _hoisted_25 = { +var _hoisted_22 = { key: 0, "class": "language top" }; -var _hoisted_26 = { +var _hoisted_23 = { "class": "description" }; -var _hoisted_27 = { +var _hoisted_24 = { key: 1, "class": "italic" }; -var _hoisted_28 = { +var _hoisted_25 = { "class": "w-full" }; -var _hoisted_29 = { +var _hoisted_26 = { "class": "multiline" }; - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Activity Description", -1 -/* HOISTED */ -); - -var _hoisted_31 = { +var _hoisted_27 = { key: 0, "class": "flex flex-col" }; -var _hoisted_32 = { +var _hoisted_28 = { key: 0, "class": "language top" }; -var _hoisted_33 = { +var _hoisted_29 = { "class": "description" }; -var _hoisted_34 = { +var _hoisted_30 = { key: 1, "class": "italic" }; -var _hoisted_35 = { +var _hoisted_31 = { "class": "w-full" }; - -var _hoisted_36 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Administrative", -1 -/* HOISTED */ -); - -var _hoisted_37 = { +var _hoisted_32 = { "class": "flex" }; -var _hoisted_38 = { +var _hoisted_33 = { key: 0 }; -var _hoisted_39 = { +var _hoisted_34 = { key: 1, "class": "italic" }; -var _hoisted_40 = { +var _hoisted_35 = { key: 0 }; -var _hoisted_41 = { +var _hoisted_36 = { key: 1, "class": "ml-1 italic" }; -var _hoisted_42 = { +var _hoisted_37 = { key: 0 }; -var _hoisted_43 = { +var _hoisted_38 = { key: 1, "class": "ml-1 italic" }; -var _hoisted_44 = { +var _hoisted_39 = { "class": "w-full" }; - -var _hoisted_45 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Point", -1 -/* HOISTED */ -); - -var _hoisted_46 = { +var _hoisted_40 = { "class": "flex space-x-1" }; -var _hoisted_47 = { +var _hoisted_41 = { key: 0 }; -var _hoisted_48 = { +var _hoisted_42 = { key: 1, "class": "italic" }; -var _hoisted_49 = { +var _hoisted_43 = { key: 0 }; -var _hoisted_50 = { +var _hoisted_44 = { key: 1, "class": "italic" }; -var _hoisted_51 = { +var _hoisted_45 = { key: 0 }; -var _hoisted_52 = { +var _hoisted_46 = { key: 1, "class": "italic" }; -var _hoisted_53 = { +var _hoisted_47 = { "class": "w-full" }; - -var _hoisted_54 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Exactness", -1 -/* HOISTED */ -); - -var _hoisted_55 = { +var _hoisted_48 = { key: 0 }; -var _hoisted_56 = { +var _hoisted_49 = { key: 1, "class": "italic" }; -var _hoisted_57 = { +var _hoisted_50 = { "class": "w-full" }; - -var _hoisted_58 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Location Class", -1 -/* HOISTED */ -); - -var _hoisted_59 = { +var _hoisted_51 = { key: 0 }; -var _hoisted_60 = { +var _hoisted_52 = { key: 1, "class": "italic" }; -var _hoisted_61 = { +var _hoisted_53 = { "class": "w-full" }; - -var _hoisted_62 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Feature Designation", -1 -/* HOISTED */ -); - -var _hoisted_63 = { +var _hoisted_54 = { key: 0 }; -var _hoisted_64 = { +var _hoisted_55 = { key: 1, "class": "italic" }; @@ -18972,7 +19418,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.geographicLocationReach[item.code]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Location Reach Missing"))])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "language.common_lang.missing.something.replace(':something', language.common_lang.location_reached)"))])], 2 /* CLASS */ ); }), 128 @@ -18991,9 +19437,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_4, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - ), narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + ), narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, "(language.common_lang.language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, "Name Missing"))], 2 + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, "language.common_lang.missing.something.replace(':something', language.common_lang.name)"))], 2 /* CLASS */ ); }), 128 @@ -19003,19 +19449,29 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ); }), 128 /* KEYED_FRAGMENT */ - )), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_8, (0, vue_1.createElementVNode)("td", _hoisted_9, [post.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(post.ref), 1 + )), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.refernece), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, "Missing"))])])])]), (0, vue_1.createElementVNode)("div", _hoisted_12, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.location_id, function (item, i) { + ), (0, vue_1.createElementVNode)("td", _hoisted_8, [post.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(post.ref), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.location_id, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.location_id.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_13, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [item.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.types.geographicVocabulary[item.vocabulary]) + ", ", 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_12, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_id), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [item.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.types.geographicVocabulary[item.vocabulary]) + ", ", 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.vocabulary)) + ")", 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code) + " " + (0, vue_1.toDisplayString)(item.code), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "(Vocabulary Missing)"))]), (0, vue_1.createElementVNode)("div", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, "code " + (0, vue_1.toDisplayString)(item.code), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ")", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, "(Missing)"))])])])])])], 2 + ))])])])])])], 2 /* CLASS */ ); }), 128 @@ -19032,11 +19488,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': j !== item.narrative.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_21, [(0, vue_1.createElementVNode)("tr", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_24, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_19, [(0, vue_1.createElementVNode)("tr", _hoisted_20, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_26, (0, vue_1.toDisplayString)(narrative.narrative), 1 + ), (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_21, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, "(language.common_lang.language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_27, "Missing"))])])])], 2 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_23, (0, vue_1.toDisplayString)(narrative.narrative), 1 + /* TEXT */ + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_24, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -19058,11 +19518,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': j !== item.narrative.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_28, [(0, vue_1.createElementVNode)("tr", _hoisted_29, [_hoisted_30, (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_31, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_32, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_25, [(0, vue_1.createElementVNode)("tr", _hoisted_26, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.activity_description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_27, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_33, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_29, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_34, "Missing"))])])])], 2 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_30, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -19078,13 +19542,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.administrative.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_35, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_36, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_37, [(0, vue_1.createElementVNode)("div", null, [item.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_38, "Vocabulary - " + (0, vue_1.toDisplayString)(_ctx.types.geographicVocabulary[item.vocabulary]), 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_31, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.administrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createElementVNode)("div", null, [item.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_33, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary) + " - " + (0, vue_1.toDisplayString)(_ctx.types.geographicVocabulary[item.vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_39, "(Vocabulary Missing)"))]), (0, vue_1.createElementVNode)("div", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_40, ", code " + (0, vue_1.toDisplayString)(_ctx.types.country[item.code]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_34, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.vocabulary)) + ")", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_41, " (Code Missing)"))]), (0, vue_1.createElementVNode)("div", null, [item.level ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, ", level " + (0, vue_1.toDisplayString)(item.level), 1 + ))]), (0, vue_1.createElementVNode)("div", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_35, ", " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.code) + " " + (0, vue_1.toDisplayString)(_ctx.types.country[item.code]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_43, " (Level Missing)"))])])])])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_36, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.code)) + ")", 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", null, [item.level ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_37, ", " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.level) + " " + (0, vue_1.toDisplayString)(item.level), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_38, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.level)) + ")", 1 + /* TEXT */ + ))])])])])])], 2 /* CLASS */ ); }), 128 @@ -19095,13 +19567,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["flex space-x-1", { 'mb-4': i !== post.point.length - 1 }]) - }, [(0, vue_1.createElementVNode)("table", _hoisted_44, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_45, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_46, [(0, vue_1.createElementVNode)("div", null, [item.srs_name ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_47, "(" + (0, vue_1.toDisplayString)(item.srs_name) + ")", 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_39, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.point), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_40, [(0, vue_1.createElementVNode)("div", null, [item.srs_name ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_41, "(" + (0, vue_1.toDisplayString)(item.srs_name) + ")", 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.srs_name)) + ")", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_48, " (SRS Name Missing)"))]), (0, vue_1.createElementVNode)("div", null, [item.pos[0].latitude ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_49, " latitude " + (0, vue_1.toDisplayString)(item.pos[0].latitude) + ", ", 1 + ))]), (0, vue_1.createElementVNode)("div", null, [item.pos[0].latitude ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_43, (0, vue_1.toDisplayString)(_ctx.language.common_lang.latitude) + " " + (0, vue_1.toDisplayString)(item.pos[0].latitude) + ", ", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_50, " (Latitude Missing)"))]), (0, vue_1.createElementVNode)("div", null, [item.pos[0].longitude ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_51, "longitude " + (0, vue_1.toDisplayString)(item.pos[0].longitude), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_44, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.latitude)) + ")", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_52, " (Longitude Missing)"))])])])])])], 2 + ))]), (0, vue_1.createElementVNode)("div", null, [item.pos[0].longitude ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_45, (0, vue_1.toDisplayString)(_ctx.language.common_lang.longitude) + " " + (0, vue_1.toDisplayString)(item.pos[0].longitude), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_46, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.longitude)) + ")", 1 + /* TEXT */ + ))])])])])])], 2 /* CLASS */ ); }), 128 @@ -19112,9 +19592,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.exactness.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_53, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_54, (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_55, (0, vue_1.toDisplayString)(_ctx.types.geographicExactness[item.code]), 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_47, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.exactness), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_48, (0, vue_1.toDisplayString)(_ctx.types.geographicExactness[item.code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_49, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_56, "Missing"))])])])], 2 + ))])])])], 2 /* CLASS */ ); }), 128 @@ -19125,9 +19609,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.location_class.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_57, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_58, (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_59, (0, vue_1.toDisplayString)(_ctx.types.geographicLocationClass[item.code]), 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_50, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_class), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_60, "Missing"))])])])], 2 + ), (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_51, (0, vue_1.toDisplayString)(_ctx.types.geographicLocationClass[item.code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_52, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -19138,9 +19626,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.feature_designation.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", _hoisted_61, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_62, (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_63, (0, vue_1.toDisplayString)(_ctx.types.locationType[item.code]), 1 + }, [(0, vue_1.createElementVNode)("table", _hoisted_53, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.feature_designation.proper_class), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [item.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_54, (0, vue_1.toDisplayString)(_ctx.types.locationType[item.code]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_64, "Missing"))])])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_55, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -19199,36 +19691,26 @@ var _hoisted_7 = { var _hoisted_8 = { "class": "ml-5 tb-content" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Owner Organisation Reference", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_9 = { key: 0 }; -var _hoisted_11 = { +var _hoisted_10 = { key: 1, "class": "italic" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Owner Organisation Narrative", -1 -/* HOISTED */ -); - -var _hoisted_13 = { +var _hoisted_11 = { key: 0, "class": "flex flex-col" }; -var _hoisted_14 = { +var _hoisted_12 = { key: 0, "class": "language top" }; -var _hoisted_15 = { +var _hoisted_13 = { key: 1, "class": "description" }; -var _hoisted_16 = { +var _hoisted_14 = { key: 1, "class": "italic" }; @@ -19242,27 +19724,39 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [identifier.reference_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.types.otherIdentifierType[identifier.reference_type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "Type Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [identifier.reference ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(identifier.reference), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [identifier.reference ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(identifier.reference), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.reference)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Reference Missing"))]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_8, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(identifier.owner_org, function (post, i) { + ))]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_8, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(identifier.owner_org, function (post, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)({ 'mb-4': key !== identifier.owner_org.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_9, post.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_10, (0, vue_1.toDisplayString)(post.ref), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.owner_organisation_reference), 1 + /* TEXT */ + ), post.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_9, (0, vue_1.toDisplayString)(post.ref), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_11, "Missing"))]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_12, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (n, k) { + ))]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.owner_organisation_narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (n, k) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: k, "class": (0, vue_1.normalizeClass)(["item", { 'mb-2': k != post.narrative.length - 1 }]) - }, [n.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_13, [n.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[n.language]) + ")", 1 + }, [n.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [n.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[n.language]) + ")", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), n.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(n.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), n.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(n.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, "Missing"))], 2 + ))], 2 /* CLASS */ ); }), 128 @@ -19329,83 +19823,54 @@ var _hoisted_8 = { var _hoisted_9 = { "class": "multiline" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organisation Name", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_10 = { key: 0, "class": "flex flex-col" }; -var _hoisted_12 = { +var _hoisted_11 = { key: 0, "class": "language top" }; -var _hoisted_13 = { +var _hoisted_12 = { key: 1, "class": "description" }; -var _hoisted_14 = { +var _hoisted_13 = { key: 1, "class": "italic" }; - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organisation Type", -1 -/* HOISTED */ -); - -var _hoisted_16 = { +var _hoisted_14 = { key: 0 }; -var _hoisted_17 = { +var _hoisted_15 = { key: 1, "class": "italic" }; - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organisation Role", -1 -/* HOISTED */ -); - -var _hoisted_19 = { +var _hoisted_16 = { key: 0 }; -var _hoisted_20 = { +var _hoisted_17 = { key: 1, "class": "italic" }; - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Ref", -1 -/* HOISTED */ -); - -var _hoisted_22 = { +var _hoisted_18 = { key: 0 }; -var _hoisted_23 = { +var _hoisted_19 = { key: 1, "class": "italic" }; - -var _hoisted_24 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Activity Id", -1 -/* HOISTED */ -); - -var _hoisted_25 = { +var _hoisted_20 = { key: 0 }; -var _hoisted_26 = { +var _hoisted_21 = { key: 1, "class": "italic" }; -var _hoisted_27 = { +var _hoisted_22 = { key: 0 }; -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "CRS Channel Code", -1 -/* HOISTED */ -); - function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data, function (participating_org, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -19415,28 +19880,54 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [participating_org.organization_role ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.organisationRole[participating_org.organization_role]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Organization Role Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [participating_org.narrative['0'].narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(participating_org.narrative['0'].narrative), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.missing_lang.something.replace(':something', _ctx.language.common_lang.organisation_role)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [participating_org.narrative['0'].narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(participating_org.narrative['0'].narrative), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.narrative)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("table", _hoisted_8, [(0, vue_1.createElementVNode)("tr", _hoisted_9, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organisation_name), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, "Narrative Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("table", _hoisted_8, [(0, vue_1.createElementVNode)("tr", _hoisted_9, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(participating_org.narrative, function (narrative, i) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(participating_org.narrative, function (narrative, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": "flex flex-col" - }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_10, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + " " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, "Missing"))]); + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_15, participating_org.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_16, (0, vue_1.toDisplayString)(_ctx.types.organizationType[participating_org.type]), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organisation_type), 1 + /* TEXT */ + ), participating_org.type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.types.organizationType[participating_org.type]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organisation_role), 1 + /* TEXT */ + ), participating_org.organization_role ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_16, (0, vue_1.toDisplayString)(_ctx.types.organisationRole[participating_org.organization_role]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.ref), 1 + /* TEXT */ + ), participating_org.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_18, (0, vue_1.toDisplayString)(participating_org.ref), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_17, "Missing"))]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_18, participating_org.organization_role ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.types.organisationRole[participating_org.organization_role]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_20, "Missing"))]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_21, participating_org.ref ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_22, (0, vue_1.toDisplayString)(participating_org.ref), 1 + ))]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.activity_id), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_23, "Missing"))]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_24, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [participating_org.identifier ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)(participating_org.identifier), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [participating_org.identifier ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, (0, vue_1.toDisplayString)(participating_org.identifier), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_26, "Missing"))])])]), participating_org.crs_channel_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_27, [_hoisted_28, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.types.crsChannelCode[participating_org.crs_channel_code]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])]), participating_org.crs_channel_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_22, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.crs_channel_code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.types.crsChannelCode[participating_org.crs_channel_code]), 1 /* TEXT */ )])) : (0, vue_1.createCommentVNode)("v-if", true)])])], 2 /* CLASS */ @@ -19472,105 +19963,42 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "mb-4 ml-5" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "category" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Value")], -1 -/* HOISTED */ -); - +}; var _hoisted_4 = { "class": "ml-5" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Amount", -1 -/* HOISTED */ -); - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Date", -1 -/* HOISTED */ -); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period Start", -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period End", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_5 = { key: 0, "class": "mb-4 ml-5" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_6 = { "class": "category" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Provider org")], -1 -/* HOISTED */ -); - -var _hoisted_11 = { +}; +var _hoisted_7 = { "class": "ml-5" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Type", -1 -/* HOISTED */ -); - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Provider Activity ID", -1 -/* HOISTED */ -); - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_16 = { +var _hoisted_8 = { "class": "language mb-1.5" }; -var _hoisted_17 = { +var _hoisted_9 = { "class": "w-[500px] max-w-full" }; -var _hoisted_18 = { +var _hoisted_10 = { key: 1, "class": "ml-5" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_11 = { "class": "category" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Receiver org")], -1 -/* HOISTED */ -); - -var _hoisted_20 = { +}; +var _hoisted_12 = { "class": "ml-5" }; - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Type", -1 -/* HOISTED */ -); - -var _hoisted_22 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Receiver Activity ID", -1 -/* HOISTED */ -); - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_24 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_25 = { +var _hoisted_13 = { "class": "language mb-1.5" }; -var _hoisted_26 = { +var _hoisted_14 = { "class": "w-[500px] max-w-full" }; @@ -19583,23 +20011,43 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["elements-detail", { 'mb-4': Number(key) !== $props.data.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)((_a = $setup.types.budgetType[post.planned_disbursement_type]) !== null && _a !== void 0 ? _a : "Type Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)((_a = $setup.types.budgetType[post.planned_disbursement_type]) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.type)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_amount), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.value[0].amount ? Number(post.value[0].amount).toLocaleString() + " " + $setup.types.currency[post.value[0].currency] : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.value[0].value_date ? $setup.formatDate(post.value[0].value_date) : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period_start), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(post.period_start[0].date ? $setup.formatDate(post.period_start[0].date) : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.value[0].amount ? Number(post.value[0].amount).toLocaleString() + " " + $setup.types.currency[post.value[0].currency] : "Missing"), 1 + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period_end), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.value[0].value_date ? $setup.formatDate(post.value[0].value_date) : "Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(post.period_end[0].date ? $setup.formatDate(post.period_end[0].date) : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(post.period_start[0].date ? $setup.formatDate(post.period_start[0].date) : "Date Missing"), 1 + )])])])])]), post.provider_org ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.provider) + (0, vue_1.toDisplayString)($setup.language.common_lang.org) + " org", 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_8, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(post.period_end[0].date ? $setup.formatDate(post.period_end[0].date) : "Date Missing"), 1 + )]), (0, vue_1.createElementVNode)("table", _hoisted_7, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.provider) + (0, vue_1.toDisplayString)($setup.language.common_lang.activity_id), 1 /* TEXT */ - )])])])])]), post.provider_org ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_9, [_hoisted_10, (0, vue_1.createElementVNode)("table", _hoisted_11, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_12, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.provider_org[0].type ? $setup.types.organizationType[post.provider_org[0].type] : "Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.provider_org[0].type ? $setup.types.organizationType[post.provider_org[0].type] : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = post.provider_org[0].provider_activity_id) !== null && _b !== void 0 ? _b : "Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = post.provider_org[0].ref) !== null && _c !== void 0 ? _c : "Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = post.provider_org[0].provider_activity_id) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_15, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.provider_org[0].narrative, function (narrative, k) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = post.provider_org[0].ref) !== null && _c !== void 0 ? _c : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.provider_org[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -19607,22 +20055,32 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.provider_org[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_16, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_8, " (" + (0, vue_1.toDisplayString)($setup.language.common_lang.language) + " " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : $setup.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])])])])])) : (0, vue_1.createCommentVNode)("v-if", true), post.receiver_org ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, [_hoisted_19, (0, vue_1.createElementVNode)("table", _hoisted_20, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_21, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.receiver_org[0].type ? $setup.types.organizationType[post.receiver_org[0].type] : "Missing"), 1 + ))])])])])])) : (0, vue_1.createCommentVNode)("v-if", true), post.receiver_org ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.provider) + (0, vue_1.toDisplayString)($setup.language.common_lang.org), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("table", _hoisted_12, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.type), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.receiver_org[0].type ? $setup.types.organizationType[post.receiver_org[0].type] : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_22, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_d = post.receiver_org[0].receiver_activity_id) !== null && _d !== void 0 ? _d : "Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.receiver) + (0, vue_1.toDisplayString)($setup.language.common_lang.activity_id), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_e = post.receiver_org[0].ref) !== null && _e !== void 0 ? _e : "Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_d = post.receiver_org[0].receiver_activity_id) !== null && _d !== void 0 ? _d : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_24, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.receiver_org[0].narrative, function (narrative, k) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_e = post.receiver_org[0].ref) !== null && _e !== void 0 ? _e : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.receiver_org[0].narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -19630,9 +20088,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.receiver_org[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_25, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, " (" + (0, vue_1.toDisplayString)($setup.language.common_lang.language) + " " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : $setup.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_26, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ @@ -19706,45 +20164,30 @@ var _hoisted_11 = { var _hoisted_12 = { key: 0 }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_14 = ["href"]; -var _hoisted_15 = { +var _hoisted_13 = ["href"]; +var _hoisted_14 = { key: 1, "class": "italic" }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Significance", -1 -/* HOISTED */ -); - -var _hoisted_17 = { +var _hoisted_15 = { key: 0 }; -var _hoisted_18 = { +var _hoisted_16 = { key: 1, "class": "italic" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +var _hoisted_17 = { key: 0, "class": "flex flex-col" }; -var _hoisted_21 = { +var _hoisted_18 = { key: 0, "class": "language top" }; -var _hoisted_22 = { +var _hoisted_19 = { "class": "description" }; -var _hoisted_23 = { +var _hoisted_20 = { key: 1, "class": "italic" }; @@ -19758,30 +20201,48 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.policy_marker_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.policyMarkerVocabulary[post.policy_marker_vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Vocabulary Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [post.policy_marker_vocabulary == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [post.policy_marker ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.types.policyMarker[post.policy_marker]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.vocabulary)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [post.policy_marker_vocabulary == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [post.policy_marker ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.types.policyMarker[post.policy_marker]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Missing"))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [post.policy_marker_text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(post.policy_marker_text), 1 + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [post.policy_marker_text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(post.policy_marker_text), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, "Missing"))]))]), (0, vue_1.createElementVNode)("table", _hoisted_11, [(0, vue_1.createElementVNode)("tbody", null, [post.policy_marker_vocabulary == '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_12, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]))]), (0, vue_1.createElementVNode)("table", _hoisted_11, [(0, vue_1.createElementVNode)("tbody", null, [post.policy_marker_vocabulary == '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_12, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.vocabulary_uri }, (0, vue_1.toDisplayString)(post.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_14)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, "Missing"))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_16, (0, vue_1.createElementVNode)("td", null, [post.significance ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.types.policySignificance[post.significance]), 1 + , _hoisted_13)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.significance), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.significance ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.types.policySignificance[post.significance]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "Missing"))])]), (0, vue_1.createElementVNode)("tr", { + ))])]), (0, vue_1.createElementVNode)("tr", { "class": (0, vue_1.normalizeClass)(["multiline", { 'mb-4': _ctx.k !== post.narrative.length - 1 }]) - }, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { + }, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: k - }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_17, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_19, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_22, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_23, "Missing"))]); + ))]); }), 128 /* KEYED_FRAGMENT */ ))])], 2 @@ -19853,17 +20314,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* TEXT */ ), participating_org.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "(" + (0, vue_1.toDisplayString)(_ctx.roundFloat(participating_org.percentage)) + "%)", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "Missing"))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(participating_org.narrative, function (item, i) { + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(participating_org.narrative, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)([{ 'mb-4': i !== participating_org.narrative.length - 1 }, "text-sm recipient_country-content"]) - }, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, " (Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 + }, [item.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [item.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[item.language]) + ") ", 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(item.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Narrative Missing"))], 2 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.narrative)), 1 + /* TEXT */ + ))], 2 /* CLASS */ ); }), 128 @@ -19911,63 +20376,38 @@ var _hoisted_4 = { var _hoisted_5 = { key: 0 }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Region Code", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +var _hoisted_6 = { key: 0 }; +var _hoisted_7 = { + key: 1 +}; var _hoisted_8 = { key: 1 }; var _hoisted_9 = { + key: 0 +}; +var _hoisted_10 = { key: 1 }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Custom Code", -1 -/* HOISTED */ -); - var _hoisted_11 = { key: 0 }; var _hoisted_12 = { key: 1 }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Percentage", -1 -/* HOISTED */ -); - -var _hoisted_14 = { - key: 0 +var _hoisted_13 = { + key: 2 }; +var _hoisted_14 = ["href"]; var _hoisted_15 = { key: 1 }; var _hoisted_16 = { - key: 2 -}; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary-uri", -1 -/* HOISTED */ -); - -var _hoisted_18 = ["href"]; -var _hoisted_19 = { - key: 1 -}; - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_21 = { "class": "language mb-1.5" }; -var _hoisted_22 = { +var _hoisted_17 = { "class": "w-[500px] max-w-full text-xs" }; @@ -19980,19 +20420,39 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.region_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)($setup.types.regionVocabulary[post.region_vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Vocabulary Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [post.region_vocabulary == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_5, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, [post.region_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.types.region[post.region_code]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.vocabulary)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [post.region_vocabulary == '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.region_code), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, "Missing"))])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_9, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, [post.custom_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(post.custom_code), 1 + ), (0, vue_1.createElementVNode)("td", null, [post.region_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)($setup.types.region[post.region_code]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "Missing"))])])), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, [post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, " (" + (0, vue_1.toDisplayString)($setup.roundFloat(post.percentage)) + "%) ", 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, "Missing"))])]), post.region_vocabulary == '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_16, [_hoisted_17, (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + ))])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_8, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.custom_code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.custom_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(post.custom_code), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.percentage), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, " (" + (0, vue_1.toDisplayString)($setup.roundFloat(post.percentage)) + "%) ", 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])]), post.region_vocabulary == '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_13, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.vocabulary_uri }, (0, vue_1.toDisplayString)(post.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_18)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, "Missing"))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_20, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { + , _hoisted_14)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -20000,9 +20460,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k !== post.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_21, " (Language: " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : 'Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_16, " (" + (0, vue_1.toDisplayString)($setup.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(narrative.language ? $setup.types.languages[narrative.language] : $setup.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_22, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)((_a = narrative.narrative) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ @@ -20067,9 +20527,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [post.relationship_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.types.relatedActivityType[post.relationship_type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "Type Missing"))]), (0, vue_1.createElementVNode)("div", null, [post.activity_identifier ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(post.activity_identifier), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, "Reference Missing"))])])], 2 + ))]), (0, vue_1.createElementVNode)("div", null, [post.activity_identifier ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(post.activity_identifier), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.reference)), 1 + /* TEXT */ + ))])])], 2 /* CLASS */ ); }), 128 @@ -20103,23 +20567,10 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "category" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Secondary Reporter", -1 -/* HOISTED */ -); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_3 = { "class": "language mb-1.5" }; -var _hoisted_7 = { +var _hoisted_4 = { "class": "w-[500px] max-w-full" }; @@ -20132,13 +20583,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.data.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(reporting_org.type ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.organizationType[reporting_org.type] : "Type Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(reporting_org.type ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.organizationType[reporting_org.type] : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.type)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.references), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_3, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = reporting_org.ref) !== null && _b !== void 0 ? _b : "Reference Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = reporting_org.ref) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.reference)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(reporting_org.secondary_reporter) ? "True" : reporting_org.secondary_reporter ? "False" : "Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.secondary_reporter), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(reporting_org.narrative, function (narrative, j) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(reporting_org.secondary_reporter) ? $setup.language.common_lang["true"] : reporting_org.secondary_reporter ? $setup.language.common_lang["false"] : $setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(reporting_org.narrative, function (narrative, j) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -20146,9 +20603,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': j != reporting_org.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_3, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.narrative)), 1 /* TEXT */ )], 2 /* CLASS */ @@ -20244,111 +20701,79 @@ var _hoisted_17 = { var _hoisted_18 = { "class": "mb-3" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Result Type", -1 -/* HOISTED */ -); - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_21 = { +var _hoisted_19 = { "class": "description-content" }; -var _hoisted_22 = { +var _hoisted_20 = { "class": "language mb-1.5" }; -var _hoisted_23 = { +var _hoisted_21 = { "class": "w-[500px] max-w-full" }; -var _hoisted_24 = { +var _hoisted_22 = { key: 0 }; -var _hoisted_25 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 +var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 /* HOISTED */ ); -var _hoisted_26 = { +var _hoisted_24 = { key: 0, "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; -var _hoisted_27 = { +var _hoisted_25 = { "class": "head flex items-center border-b border-n-20 px-6 py-2" }; - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_26 = { "class": "grow text-xs font-bold text-n-50" -}, " Indicator ", -1 -/* HOISTED */ -); - -var _hoisted_29 = { +}; +var _hoisted_27 = { "class": "inline-flex shrink-0" }; -var _hoisted_30 = { +var _hoisted_28 = { "class": "elements-detail grow" }; -var _hoisted_31 = { +var _hoisted_29 = { "class": "category flex" }; -var _hoisted_32 = { +var _hoisted_30 = { "class": "mr-4" }; -var _hoisted_33 = { +var _hoisted_31 = { "class": "flex shrink-0 grow justify-between" }; -var _hoisted_34 = { +var _hoisted_32 = { "class": "flex" }; - -var _hoisted_35 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Baseline:", -1 -/* HOISTED */ -); - -var _hoisted_36 = { +var _hoisted_33 = { "class": "description text-xs" }; - -var _hoisted_37 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Value: "); - -var _hoisted_38 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing, "); - -var _hoisted_39 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Date: "); - -var _hoisted_40 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_41 = { +var _hoisted_34 = { key: 0 }; - -var _hoisted_42 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period:", -1 -/* HOISTED */ -); - -var _hoisted_43 = { +var _hoisted_35 = { "class": "inline-flex gap-4" }; -var _hoisted_44 = { +var _hoisted_36 = { "class": "text-xs" }; -var _hoisted_45 = ["href"]; -var _hoisted_46 = { +var _hoisted_37 = ["href"]; +var _hoisted_38 = { "class": "ml-2" }; -var _hoisted_47 = { +var _hoisted_39 = { "class": "shrink-0" }; -var _hoisted_48 = { +var _hoisted_40 = { key: 1 }; -var _hoisted_49 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 +var _hoisted_41 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 /* HOISTED */ ); -var _hoisted_50 = { +var _hoisted_42 = { key: 0, "class": "divider my-5 h-px w-full border-b border-n-20" }; @@ -20375,24 +20800,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { 'text-spring-50': _ctx.completed, 'text-crimson-50': !_ctx.completed }]) - }, [_hoisted_6, _ctx.completed ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "completed")) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, "not completed"))], 2 + }, [_hoisted_6, _ctx.completed ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.completed), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.common_lang.not_completed), 1 + /* TEXT */ + ))], 2 /* CLASS */ )]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add New Result", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.new_result), icon: "add", link: "/activity/".concat(_ctx.activityId, "/").concat(_ctx.title, "/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Show full result list", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.show_something.replace(':something', _ctx.language.common_lang.full_result_list), icon: "", design: "bgText", link: "/activity/".concat(_ctx.activityId, "/").concat(_ctx.title), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_svg_vue, { + , ["text", "link"]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1.5", icon: "core" }), (0, vue_1.createVNode)(_component_HoverText, { @@ -20408,78 +20837,88 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createCommentVNode)(" title "), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.title[0].narrative, 'en')), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createVNode)(_component_Btn, { - text: "View Result", + text: _ctx.language.button_lang.view_something.replace(':something', _ctx.language.common_lang.result), icon: "eye", link: "/activity/".concat(_ctx.activityId, "/").concat(_ctx.title, "/").concat(result.id), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Result", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.result), icon: "edit", link: "/activity/".concat(_ctx.activityId, "/").concat(_ctx.title, "/").concat(result.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])]), (0, vue_1.createCommentVNode)(" content "), (0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("table", _hoisted_18, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.types.resultType[result.result.type]), 1 + , ["text", "link"])])]), (0, vue_1.createCommentVNode)(" content "), (0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("table", _hoisted_18, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.result_type), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.types.resultType[result.result.type]), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_20, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("div", _hoisted_22, " (Language: " + (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.description[0].narrative, _ctx.currentLanguage) === 'Untitled' ? 'Missing' : _ctx.types.languages[_ctx.currentLanguage]) + ") ", 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", _hoisted_20, " (Language: " + (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.description[0].narrative, _ctx.currentLanguage) === 'Untitled' ? _ctx.language.common_lang.missing["default"] : _ctx.types.languages[_ctx.currentLanguage]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_23, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.description[0].narrative, _ctx.currentLanguage)), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_21, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.description[0].narrative, _ctx.currentLanguage)), 1 /* TEXT */ - )])])]), result.indicators.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_24, [_hoisted_25, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_NotYet, { + )])])]), result.indicators.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_NotYet, { link: "/".concat(_ctx.title, "/").concat(result.id, "/indicator/create"), - description: "You haven't added any indicator yet.", - "btn-text": "Add new indicator" + description: _ctx.language.button_lang.not_yet_added_period, + "btn-text": _ctx.language.button_lang.not_yet_added_period_btn }, null, 8 /* PROPS */ - , ["link"])])])])) : (0, vue_1.createCommentVNode)("v-if", true)])]), (0, vue_1.createCommentVNode)(" indicator "), result.indicators.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_26, [(0, vue_1.createElementVNode)("div", _hoisted_27, [_hoisted_28, (0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add New Indicator", + , ["link", "description", "btn-text"])])])])) : (0, vue_1.createCommentVNode)("v-if", true)])]), (0, vue_1.createCommentVNode)(" indicator "), result.indicators.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("div", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.new_indicator), icon: "add", link: "/".concat(_ctx.title, "/").concat(result.id, "/indicator/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Show full indicator list", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.show_something.replace(':something', _ctx.language.common_lang.full_indicator), icon: "", design: "bgText", link: "/".concat(_ctx.title, "/").concat(result.id, "/indicator") }, null, 8 /* PROPS */ - , ["link"])])]), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(result.indicators, function (indicator, i) { + , ["text", "link"])])]), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(result.indicators, function (indicator, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)(["indicator-content flex px-6 py-2", { 'mb-2 border-b border-n-20': i !== result.indicators.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_30, [(0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("div", _hoisted_32, (0, vue_1.toDisplayString)(indicator.indicator.title[0].narrative[0].narrative), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createElementVNode)("div", _hoisted_30, (0, vue_1.toDisplayString)(indicator.indicator.title[0].narrative[0].narrative), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_33, [(0, vue_1.createElementVNode)("span", _hoisted_34, [(0, vue_1.createVNode)(_component_Btn, { - text: "View Indicator", + ), (0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("span", _hoisted_32, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.view_something.replace(':something', _ctx.language.common_lang.indicator), icon: "eye", link: "/".concat(_ctx.title, "/").concat(result.id, "/indicator/").concat(indicator.id), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Indicator", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.indicator), link: "/".concat(_ctx.title, "/").concat(result.id, "/indicator/").concat(indicator.id, "/edit"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"])]), (0, vue_1.createVNode)(_component_Btn, { - text: "Add Period", + , ["text", "link"])]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), icon: "add", link: "/indicator/".concat(indicator.id, "/period/create") }, null, 8 /* PROPS */ - , ["link"])])]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_35, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(indicator.indicator.baseline, function (baseline, b) { + , ["text", "link"])])]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.baseline) + ":", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(indicator.indicator.baseline, function (baseline, b) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: b, "class": (0, vue_1.normalizeClass)(["", { 'mb-1': b !== indicator.indicator.baseline.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createElementVNode)("span", null, [_hoisted_37, baseline.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_33, [(0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.value) + ": ", 1 + /* TEXT */ + ), baseline.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(baseline.value) + ", ", 1 /* TEXT */ @@ -20487,9 +20926,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_38], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ", ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - ))]), (0, vue_1.createElementVNode)("span", null, [_hoisted_39, baseline.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + ))]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.date) + ": ", 1 + /* TEXT */ + ), baseline.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(baseline.date), 1 /* TEXT */ @@ -20497,54 +20940,58 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_40], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), indicator.periods.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_41, [_hoisted_42, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_43, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(indicator.periods, function (period, p) { + ))])]), indicator.periods.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_34, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.period) + ":", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(indicator.periods, function (period, p) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: p, "class": (0, vue_1.normalizeClass)(["flex", { 'mb-1': p !== indicator.periods.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_44, [(0, vue_1.createElementVNode)("a", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createElementVNode)("a", { "class": "text-xs text-n-50", href: "/indicator/".concat(indicator.id, "/period/").concat(period.id) }, (0, vue_1.toDisplayString)(_ctx.dateFormat(period.period.period_start[0].date, _ctx.format)) + " - " + (0, vue_1.toDisplayString)(_ctx.dateFormat(period.period.period_end[0].date, _ctx.format)), 9 /* TEXT, PROPS */ - , _hoisted_45)]), (0, vue_1.createElementVNode)("div", _hoisted_46, [(0, vue_1.createVNode)(_component_Btn, { - text: "Edit", + , _hoisted_37)]), (0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit, icon: "edit", link: "/indicator/".concat(indicator.id, "/period/").concat(period.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])], 2 + , ["text", "link"])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))]), (0, vue_1.createElementVNode)("div", _hoisted_47, [(0, vue_1.createVNode)(_component_Btn, { + ))]), (0, vue_1.createElementVNode)("div", _hoisted_39, [(0, vue_1.createVNode)(_component_Btn, { "class": "-mt-1", - text: "Show full period list", + text: _ctx.language.common_lang.buttons.show_full_period, icon: "", design: "bgText", link: "/indicator/".concat(indicator.id, "/period") }, null, 8 /* PROPS */ - , ["link"])])])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_48, [_hoisted_49, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_NotYet, { + , ["text", "link"])])])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_40, [_hoisted_41, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_NotYet, { link: "/indicator/".concat(indicator.id, "/period/create"), - description: "You haven't added any period yet." + description: _ctx.language.button_lang.not_yet_added_period }, null, 8 /* PROPS */ - , ["link"])])])]))])])])], 2 + , ["link", "description"])])])]))])])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]), r !== _ctx.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_50)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 + ))])])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]), r !== _ctx.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_42)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 /* STABLE_FRAGMENT */ ); }), 128 @@ -20647,36 +21094,26 @@ var _hoisted_21 = { var _hoisted_22 = { "class": "multiline" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_24 = { +var _hoisted_23 = { key: 0, "class": "flex flex-col" }; -var _hoisted_25 = { +var _hoisted_24 = { key: 0, "class": "language top" }; -var _hoisted_26 = { +var _hoisted_25 = { "class": "description" }; -var _hoisted_27 = { +var _hoisted_26 = { key: 1, "class": "italic" }; -var _hoisted_28 = { +var _hoisted_27 = { key: 0 }; - -var _hoisted_29 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_30 = ["href"]; -var _hoisted_31 = { +var _hoisted_28 = ["href"]; +var _hoisted_29 = { key: 1, "class": "italic" }; @@ -20690,40 +21127,60 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.sector_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.sectorVocabulary[post.sector_vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Vocabulary Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [post.sector_vocabulary == 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.types.sectorCode[post.code]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.vocabulary)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [post.sector_vocabulary == 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.types.sectorCode[post.code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])) : post.sector_vocabulary == 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [post.category_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.types.sectorCategory[post.category_code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Missing"))])) : post.sector_vocabulary == 2 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [post.category_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.types.sectorCategory[post.category_code]), 1 + ))])) : post.sector_vocabulary == 7 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [post.sdg_goal ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.types.sdgGoals[post.sdg_goal]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, "Missing"))])) : post.sector_vocabulary == 7 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [post.sdg_goal ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.types.sdgGoals[post.sdg_goal]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, "Missing"))])) : post.sector_vocabulary == 8 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_14, [post.sdg_target ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.types.sdgTarget[post.sdg_target]), 1 + ))])) : post.sector_vocabulary == 8 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_14, [post.sdg_target ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.types.sdgTarget[post.sdg_target]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, "Missing"))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_17, [post.text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)(post.text), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, "Missing"))]))]), post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, "(" + (0, vue_1.toDisplayString)(_ctx.roundFloat(post.percentage)) + "%)", 1 + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_17, [post.text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)(post.text), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]))]), post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, "(" + (0, vue_1.toDisplayString)(_ctx.roundFloat(post.percentage)) + "%)", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_22, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: k, "class": (0, vue_1.normalizeClass)({ 'mb-0': k !== post.narrative - 1 }) - }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_24, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_23, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_24, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_26, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_25, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_27, "Missing"))], 2 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.sector_vocabulary === '98' || post.sector_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_28, [_hoisted_29, (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + ))])]), post.sector_vocabulary === '98' || post.sector_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_27, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_language.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.vocabulary_uri }, (0, vue_1.toDisplayString)(post.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_30)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_31, "Missing"))])])) : (0, vue_1.createCommentVNode)("v-if", true)])])], 2 + , _hoisted_28)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])) : (0, vue_1.createCommentVNode)("v-if", true)])])], 2 /* CLASS */ ); }), 128 @@ -20800,33 +21257,23 @@ var _hoisted_14 = { var _hoisted_15 = { key: 0 }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_17 = ["href"]; -var _hoisted_18 = { +var _hoisted_16 = ["href"]; +var _hoisted_17 = { key: 1, "class": "italic" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +var _hoisted_18 = { key: 0, "class": "flex flex-col" }; -var _hoisted_21 = { +var _hoisted_19 = { key: 0, "class": "language top" }; -var _hoisted_22 = { +var _hoisted_20 = { "class": "description" }; -var _hoisted_23 = { +var _hoisted_21 = { key: 1, "class": "italic" }; @@ -20840,31 +21287,47 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [post.tag_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.types.tagVocabulary[post.tag_vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, "Vocabulary Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [post.tag_vocabulary === '1' || post.tag_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, [post.tag_text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(post.tag_text), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.vocabulary)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "Missing"))])) : (0, vue_1.createCommentVNode)("v-if", true), post.tag_vocabulary === '2' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, [post.goals_tag_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.types.sdgGoals[post.goals_tag_code]), 1 + ))]), (0, vue_1.createElementVNode)("div", _hoisted_4, [post.tag_vocabulary === '1' || post.tag_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, [post.tag_text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(post.tag_text), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, "Missing"))])) : (0, vue_1.createCommentVNode)("v-if", true), post.tag_vocabulary === '3' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, [post.targets_tag_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.types.sdgTarget[post.targets_tag_code]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, "Missing"))])) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("table", _hoisted_14, [(0, vue_1.createElementVNode)("tbody", null, [post.tag_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_15, [_hoisted_16, (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + ))])) : (0, vue_1.createCommentVNode)("v-if", true), post.tag_vocabulary === '2' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, [post.goals_tag_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.types.sdgGoals[post.goals_tag_code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])) : (0, vue_1.createCommentVNode)("v-if", true), post.tag_vocabulary === '3' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, [post.targets_tag_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.types.sdgTarget[post.targets_tag_code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("table", _hoisted_14, [(0, vue_1.createElementVNode)("tbody", null, [post.tag_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_15, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.vocabulary_uri }, (0, vue_1.toDisplayString)(post.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_17)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "Missing"))])])) : (0, vue_1.createCommentVNode)("v-if", true), (post === null || post === void 0 ? void 0 : post.narrative) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { + , _hoisted_16)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), (post === null || post === void 0 ? void 0 : post.narrative) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: 1, "class": (0, vue_1.normalizeClass)(["multiline", { 'mb-4': _ctx.k !== post.narrative.length - 1 }]) - }, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { + }, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.narrative, function (narrative, k) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: k - }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, "(Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 + }, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, "(" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_22, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_20, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_23, "Missing"))]); + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]); }), 128 /* KEYED_FRAGMENT */ ))])], 2 @@ -20923,11 +21386,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": "title-content" - }, [post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [post.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, " (Language: " + (0, vue_1.toDisplayString)(_ctx.types.languages[post.language]) + ") ", 1 + }, [post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [post.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.types.languages[post.language]) + ") ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(post.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.narrative).replace(':missing', "bruh")), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "Title Missing")), i !== _ctx.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5)) : (0, vue_1.createCommentVNode)("v-if", true)]); + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.type)), 1 + /* TEXT */ + )), i !== _ctx.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5)) : (0, vue_1.createCommentVNode)("v-if", true)]); }), 128 /* KEYED_FRAGMENT */ ); @@ -20971,21 +21436,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["", { 'mb-4': Number(t) !== _ctx.data.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)((_a = _ctx.types.transactionType[trans.transaction.transaction_type[0].transaction_type_code]) !== null && _a !== void 0 ? _a : "Transaction type missing") + " ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)((_a = _ctx.types.transactionType[trans.transaction.transaction_type[0].transaction_type_code]) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.transaction_type)) + " ", 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_Btn, { - text: "Edit", + text: _ctx.language.button_lang.edit, icon: "edit", link: "/activity/".concat(trans.activity_id, "/transaction/").concat(trans.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(trans.transaction.value, function (val, v) { + , ["text", "link"])])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(trans.transaction.value, function (val, v) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: v, "class": (0, vue_1.normalizeClass)(["description text-sm", { 'mb-4': Number(t) !== trans.transaction.value.length - 1 }]) - }, (0, vue_1.toDisplayString)(val.amount ? Number(val.amount).toLocaleString() : "Value missing") + " " + (0, vue_1.toDisplayString)(val.currency) + " " + (0, vue_1.toDisplayString)(_ctx.dateFormat(val.date, "MMMM DD, YYYY") ? "- valued at" + " " + _ctx.dateFormat(val.date, "MMMM DD, YYYY") : ""), 3 + }, (0, vue_1.toDisplayString)(val.amount ? Number(val.amount).toLocaleString() : _ctx.language.common_lang.missing.value) + " " + (0, vue_1.toDisplayString)(val.currency) + " " + (0, vue_1.toDisplayString)(_ctx.dateFormat(val.date, "MMMM DD, YYYY") ? "- valued at" + " " + _ctx.dateFormat(val.date, "MMMM DD, YYYY") : ""), 3 /* TEXT, CLASS */ ); }), 128 @@ -21062,54 +21527,54 @@ var _hoisted_17 = { key: 0 }; var _hoisted_18 = ["href"]; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createTextVNode)(" add period "); - -var _hoisted_20 = { +var _hoisted_19 = { key: 1 }; - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createTextVNode)(" period "); - -var _hoisted_22 = [_hoisted_21]; -var _hoisted_23 = { +var _hoisted_20 = { "class": "activities__content" }; -var _hoisted_24 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 +var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 /* HOISTED */ ); -var _hoisted_25 = { +var _hoisted_22 = { "class": "bg-white px-4 py-5" }; -var _hoisted_26 = { +var _hoisted_23 = { "class": "category flex" }; -var _hoisted_27 = { +var _hoisted_24 = { "class": "ml-4" }; -var _hoisted_28 = { +var _hoisted_25 = { "class": "indicators elements-detail" }; -var _hoisted_29 = { +var _hoisted_26 = { key: 0, id: "document_link" }; - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_27 = { "class": "title mb-4" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_28 = { "class": "item elements-detail wider" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("table", { +}; +var _hoisted_29 = { "class": "mb-5" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Link"), /*#__PURE__*/(0, vue_1.createElementVNode)("td")])])]), /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; + +var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 +/* HOISTED */ +); + +var _hoisted_31 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "divider mb-4 h-px w-full border-b border-n-20" -})], -1 +}, null, -1 /* HOISTED */ ); -var _hoisted_31 = { +var _hoisted_32 = { "class": "ml-4" }; @@ -21159,7 +21624,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "rotate-180 pb-2 text-3xl text-white" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Indicator Detail", + text: _ctx.language.common_lang.indicator_detail, "back-link": "".concat(_ctx.indicatorLink) }, { "default": (0, vue_1.withCtx)(function () { @@ -21171,32 +21636,32 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, null, 8 /* PROPS */ , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createVNode)(_component_Btn, { - text: "Add Indicator", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.indicator), icon: "add", link: "".concat(_ctx.indicatorLink, "/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Add Period", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), icon: "add", link: "/indicator/".concat(_ctx.indicator.id, "/period/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Indicator", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.indicator), link: "".concat(_ctx.indicatorLink, "/").concat(_ctx.indicator.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])]; + , ["text", "link"])])]; }), _: 1 /* STABLE */ }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createElementVNode)("div", { + , ["breadcrumb-data", "text", "back-link"]), (0, vue_1.createElementVNode)("div", { "class": "sidebar-open-icon", onClick: _cache[2] || (_cache[2] = function () { _ctx.showSidebar = !_ctx.showSidebar; @@ -21253,20 +21718,27 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "add", "class": "mr-2 text-n-40" - }), _hoisted_19], 10 + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period)), 1 + /* TEXT */ + )], 10 /* CLASS, PROPS */ - , _hoisted_18)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", _hoisted_20, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + , _hoisted_18)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", _hoisted_19, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { href: "#period", "class": (0, vue_1.normalizeClass)(_ctx.linkClasses) - }, _hoisted_22, 2 + }, [(0, vue_1.createVNode)(_component_svg_vue, { + icon: "core", + "class": "mr-2 text-base" + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.period_nocase), 1 + /* TEXT */ + )], 2 /* CLASS */ - )), [[_directive_smooth_scroll]])]))])])]), (0, vue_1.createElementVNode)("div", _hoisted_23, [_hoisted_24, (0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("div", { + )), [[_directive_smooth_scroll]])]))])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [_hoisted_21, (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["elements-detail wider", { 'mb-10': _ctx.indicatorData.document_link.length > 0 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.indicatorTitle), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_23, (0, vue_1.toDisplayString)(_ctx.indicatorTitle), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [_ctx.indicatorData.title[0].narrative.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_TitleElement, { + ), (0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [_ctx.indicatorData.title[0].narrative.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_TitleElement, { key: 0, id: "title", data: _ctx.indicatorData.title[0], @@ -21315,7 +21787,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { data: _ctx.periodData }, null, 8 /* PROPS */ - , ["data"])])])])]), _ctx.indicatorData.document_link.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_29, [_hoisted_30, (0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createVNode)(_component_DocumentLink, { + , ["data"])])])])]), _ctx.indicatorData.document_link.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_26, [(0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("table", _hoisted_29, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link), 1 + /* TEXT */ + ), _hoisted_30])])]), _hoisted_31]), (0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createVNode)(_component_DocumentLink, { data: _ctx.indicatorData.document_link, type: _ctx.types }, null, 8 @@ -21355,46 +21829,46 @@ var _hoisted_3 = ["href"]; var _hoisted_4 = { "class": "iati-list-table text-n-40" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("thead", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", { +var _hoisted_5 = { "class": "bg-n-10" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_6 = { id: "title", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Title")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_7 = { id: "measure", scope: "col", width: "190px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Measure")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_8 = { id: "aggregation_status", scope: "col", width: "208px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Aggregation Status")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_9 = { id: "action", scope: "col", width: "190px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Action")])])], -1 -/* HOISTED */ -); - -var _hoisted_6 = ["onClick"]; -var _hoisted_7 = { +}; +var _hoisted_10 = ["onClick"]; +var _hoisted_11 = { "class": "ellipsis relative" }; -var _hoisted_8 = ["href"]; -var _hoisted_9 = { +var _hoisted_12 = ["href"]; +var _hoisted_13 = { "class": "w-52" }; -var _hoisted_10 = { +var _hoisted_14 = { "class": "ellipsis__title--hover" }; -var _hoisted_11 = ["onClick"]; -var _hoisted_12 = ["onClick"]; -var _hoisted_13 = { +var _hoisted_15 = ["onClick"]; +var _hoisted_16 = ["onClick"]; +var _hoisted_17 = { "class": "flex text-n-40" }; -var _hoisted_14 = ["href"]; -var _hoisted_15 = { +var _hoisted_18 = ["href"]; +var _hoisted_19 = { "class": "mt-6" }; @@ -21413,7 +21887,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Indicator List", + text: _ctx.language.common_lang.indicator_link, "back-link": "".concat(_ctx.resultLink) }, { "default": (0, vue_1.withCtx)(function () { @@ -21427,10 +21901,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.indicatorLink, "/create") }, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add Indicator", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.indicator), icon: "plus", type: "primary" - })], 8 + }, null, 8 + /* PROPS */ + , ["text"])], 8 /* PROPS */ , _hoisted_3)])]; }), @@ -21439,7 +21915,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [_hoisted_5, (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.indicatorsData.data, function (indicator, t, index) { + , ["breadcrumb-data", "text", "back-link"]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_7, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.measure), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_8, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.aggregation_status), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_9, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.action), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.indicatorsData.data, function (indicator, t, index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: index }, [(0, vue_1.createElementVNode)("td", { @@ -21447,30 +21931,30 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: function onClick($event) { return _ctx.handleNavigate("/result/".concat(indicator.result_id, "/indicator/").concat(indicator.id)); } - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("a", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("a", { href: "/result/".concat(indicator.result_id, "/indicator/").concat(indicator.id), "class": "ellipsis overflow-hidden text-n-50" }, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(indicator.indicator.title[0].narrative, 'en')), 9 /* TEXT, PROPS */ - , _hoisted_8), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(indicator.indicator.title[0].narrative, 'en')), 1 + , _hoisted_12), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(indicator.indicator.title[0].narrative, 'en')), 1 /* TEXT */ )])])], 8 /* PROPS */ - , _hoisted_6), (0, vue_1.createElementVNode)("td", { + , _hoisted_10), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer", onClick: function onClick($event) { return _ctx.handleNavigate("/result/".concat(indicator.result_id, "/indicator/").concat(indicator.id)); } }, (0, vue_1.toDisplayString)(_ctx.types.indicatorMeasure[indicator.indicator.measure]), 9 /* TEXT, PROPS */ - , _hoisted_11), (0, vue_1.createElementVNode)("td", { + , _hoisted_15), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer capitalize", onClick: function onClick($event) { return _ctx.handleNavigate("/result/".concat(indicator.result_id, "/indicator/").concat(indicator.id)); } }, (0, vue_1.toDisplayString)(parseInt(indicator.indicator.aggregation_status) ? 'True' : indicator.indicator.aggregation_status ? 'False' : 'Missing'), 9 /* TEXT, PROPS */ - , _hoisted_12), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("a", { + , _hoisted_16), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("a", { "class": "mr-6", href: "/result/".concat(indicator.result_id, "/indicator/").concat(indicator.id, "/edit") }, [(0, vue_1.createVNode)(_component_svg_vue, { @@ -21478,7 +21962,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-xl" })], 8 /* PROPS */ - , _hoisted_14), (0, vue_1.createVNode)(_component_DeleteAction, { + , _hoisted_18), (0, vue_1.createVNode)(_component_DeleteAction, { "item-id": indicator.id, "item-type": "indicator" }, null, 8 @@ -21486,7 +21970,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["item-id"])])])]); }), 128 /* KEYED_FRAGMENT */ - ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_15, [_ctx.indicatorsData && _ctx.indicatorsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { + ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_19, [_ctx.indicatorsData && _ctx.indicatorsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { key: 0, data: _ctx.indicatorsData, onFetchActivities: _ctx.fetchListings @@ -21515,16 +21999,14 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Aggregation Status", -1 -/* HOISTED */ -); - -var _hoisted_2 = { +var _hoisted_1 = { "class": "capitalize" }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", _hoisted_2, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? 'True' : _ctx.data ? 'False' : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.aggregation_status), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", _hoisted_1, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? 'True' : _ctx.data ? _ctx.language.common_lang["false"] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )]); } @@ -21549,56 +22031,28 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Baseline", -1 -/* HOISTED */ -); - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Year: "); - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Date: "); - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); +var _hoisted_1 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Value: "); +var _hoisted_2 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location: ", -1 -/* HOISTED */ -); - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_3 = { "class": "description" }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_14 = { +var _hoisted_4 = { "class": "description" }; -var _hoisted_15 = { +var _hoisted_5 = { key: 0 }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_6 = { "class": "mb-2.5 flex" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Document Link: "), /*#__PURE__*/(0, vue_1.createElementVNode)("div")], -1 +}; + +var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 /* HOISTED */ ); -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "w-full h-px mb-4 border-b divider border-n-20" }, null, -1 /* HOISTED */ @@ -21607,7 +22061,9 @@ var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_DocumentLink = (0, vue_1.resolveComponent)("DocumentLink"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.baseline, function (base, b) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.baseline), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.baseline, function (base, b) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: b, "class": (0, vue_1.normalizeClass)({ @@ -21615,7 +22071,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(_ctx.elementSpacing) - }, [(0, vue_1.createElementVNode)("span", null, [_hoisted_2, base.year ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + }, [(0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.year) + ": ", 1 + /* TEXT */ + ), base.year ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.year), 1 /* TEXT */ @@ -21623,9 +22081,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_3], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_4]), (0, vue_1.createElementVNode)("span", null, [_hoisted_5, base.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_1]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.date) + ": ", 1 + /* TEXT */ + ), base.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.date), 1 /* TEXT */ @@ -21633,9 +22095,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_6], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_7]), (0, vue_1.createElementVNode)("span", null, [_hoisted_8, base.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_2]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.value) + ": ", 1 + /* TEXT */ + ), base.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.value), 1 /* TEXT */ @@ -21643,31 +22109,39 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_9], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_10, (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.location(base.location) ? _ctx.location(base.location) : 'Missing'), 1 + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.location(base.location) ? _ctx.location(base.location) : _ctx.language.common_lang.baseline["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_11, (0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.dimensions(base.dimension)), 1 + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.dimensions(base.dimension)), 1 /* TEXT */ )], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_13, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.comment[0].narrative, function (com, c) { + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': c !== base.comment[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : 'Missing') + " (Language: " + (0, vue_1.toDisplayString)(com.language ? _ctx.baseType.language[com.language] : 'Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : _ctx.language.common_lang.missing["default"]) + " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(com.language ? _ctx.baseType.language[com.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ )])], 2 /* CLASS */ @@ -21676,7 +22150,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* KEYED_FRAGMENT */ ))])], 2 /* CLASS */ - ), base.document_link.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_15, [_hoisted_16, _hoisted_17, (0, vue_1.createVNode)(_component_DocumentLink, { + ), base.document_link.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link) + ": ", 1 + /* TEXT */ + ), _hoisted_7]), _hoisted_8, (0, vue_1.createVNode)(_component_DocumentLink, { data: base.document_link, type: _ctx.baseType, alignment: "" @@ -21710,27 +22186,25 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_2 = { +var _hoisted_1 = { "class": "mb-1 language" }; -var _hoisted_3 = { +var _hoisted_2 = { "class": "text-xs description" }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.descriptionData.narrative, function (description, t) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.descriptionData.narrative, function (description, t) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: t, "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-3': t !== _ctx.descriptionData.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_2, " (Language: " + (0, vue_1.toDisplayString)(description.language ? _ctx.descType[description.language] : 'Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(description.language ? _ctx.descType[description.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)(description.narrative), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(description.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -21781,66 +22255,32 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "ml-4" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Title", -1 -/* HOISTED */ -); - -var _hoisted_8 = { +var _hoisted_7 = { "class": "mb-1 language" }; -var _hoisted_9 = { +var _hoisted_8 = { "class": "text-xs description" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Link", -1 -/* HOISTED */ -); - -var _hoisted_11 = ["href"]; -var _hoisted_12 = { +var _hoisted_9 = ["href"]; +var _hoisted_10 = { key: 1 }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Format", -1 -/* HOISTED */ -); - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_15 = { +var _hoisted_11 = { "class": "mb-1 language" }; -var _hoisted_16 = { +var _hoisted_12 = { "class": "text-xs description" }; -var _hoisted_17 = { +var _hoisted_13 = { key: 0 }; - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Category", -1 -/* HOISTED */ -); - -var _hoisted_19 = { +var _hoisted_14 = { key: 1 }; - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Language", -1 -/* HOISTED */ -); - -var _hoisted_21 = { +var _hoisted_15 = { "class": "text-xs" }; - -var _hoisted_22 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Date", -1 -/* HOISTED */ -); - -var _hoisted_23 = { +var _hoisted_16 = { "class": "text-xs" }; @@ -21850,9 +22290,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: i - }, [_ctx.alignment === 'center' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_3)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(post.title[0].narrative, 'en') ? _ctx.getActivityTitle(post.title[0].narrative, 'en') : 'Missing'), 1 + }, [_ctx.alignment === 'center' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_3)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(post.title[0].narrative, 'en') ? _ctx.getActivityTitle(post.title[0].narrative, 'en') : _ctx.language.common_lang.missing.defualt), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.title[0].narrative, function (na, n) { + ), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.title[0].narrative, function (na, n) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -21860,24 +22302,32 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["title-content", { 'mb-1.5': post.title[0].narrative.length - 1 != n }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_8, " (Language: " + (0, vue_1.toDisplayString)(na.language ? _ctx.type.language[na.language] : 'Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_7, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(na.language ? _ctx.type.language[na.language] : _ctx.language.common_lang.missing.defualt) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)((_a = na.narrative) !== null && _a !== void 0 ? _a : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)((_a = na.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.defualt), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, [post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, target: "_blank", href: post.url }, (0, vue_1.toDisplayString)(post.url), 9 /* TEXT, PROPS */ - , _hoisted_11)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, "Missing"))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = post.format) !== null && _a !== void 0 ? _a : 'Missing'), 1 + , _hoisted_9)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.format), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description[0].narrative, function (na, n) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = post.format) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.defualt), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description[0].narrative, function (na, n) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -21885,31 +22335,37 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-1.5': post.description[0].narrative.length - 1 != n }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_15, " (Language: " + (0, vue_1.toDisplayString)(na.language ? _ctx.type.language[na.language] : 'Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_11, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(na.language ? _ctx.type.language[na.language] : _ctx.language.common_lang.missing.defualt) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_16, (0, vue_1.toDisplayString)((_a = na.narrative) !== null && _a !== void 0 ? _a : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)((_a = na.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.defualt), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.category.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_17, [_hoisted_18, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.category, function (cat, c) { + ))])]), post.category.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_13, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.category), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.category, function (cat, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["text-xs", { 'mb-1': post.category.length - 1 != c }]) - }, (0, vue_1.toDisplayString)(cat.code ? _ctx.type.documentCategory[cat.code] : 'Missing'), 3 + }, (0, vue_1.toDisplayString)(cat.code ? _ctx.type.documentCategory[cat.code] : _ctx.language.common_lang.missing.defualt), 3 /* TEXT, CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])])) : (0, vue_1.createCommentVNode)("v-if", true), post.language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_19, [_hoisted_20, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_21, (0, vue_1.toDisplayString)(post.language[0].language ? post.language.map(function (entry) { + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), post.language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_14, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.language), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)(post.language[0].language ? post.language.map(function (entry) { return _ctx.type.language[entry.language]; - }).join(', ') : 'Missing'), 1 + }).join(', ') : _ctx.language.common_lang.missing.defualt), 1 + /* TEXT */ + )])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_date), 1 /* TEXT */ - )])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_22, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_23, (0, vue_1.toDisplayString)((_b = post.document_date[0].date) !== null && _b !== void 0 ? _b : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_16, (0, vue_1.toDisplayString)((_b = post.document_date[0].date) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.missing.defualt), 1 /* TEXT */ )])])])])])])])]); }), 128 @@ -21937,12 +22393,10 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Ascending", -1 -/* HOISTED */ -); - function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? 'True' : _ctx.data ? 'False' : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.ascending), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? 'True' : _ctx.data ? 'False' : 'Missing'), 1 /* TEXT */ )]); } @@ -21967,12 +22421,10 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Measure", -1 -/* HOISTED */ -); - function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.measureData ? _ctx.measureType[_ctx.measureData] : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.measure), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.measureData ? _ctx.measureType[_ctx.measureData] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )]); } @@ -22008,19 +22460,14 @@ var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 var _hoisted_3 = { key: 1 }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Periods", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +var _hoisted_4 = { "class": "inline-flex gap-4" }; -var _hoisted_6 = ["href"]; -var _hoisted_7 = { +var _hoisted_5 = ["href"]; +var _hoisted_6 = { "class": "ml-2" }; -var _hoisted_8 = { +var _hoisted_7 = { "class": "shrink-0" }; @@ -22031,12 +22478,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.data.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_1, [_hoisted_2, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_NotYet, { link: "/indicator/".concat(_ctx.id.indicator, "/period/create"), - description: "You haven't added any periods yet.", - "btn-text": "Add period", + description: _ctx.language.button_lang.not_yet_added_period, + "btn-text": _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), "class": "max-w-[442px]" }, null, 8 /* PROPS */ - , ["link"])])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data, function (item, key) { + , ["link", "description", "btn-text"])])])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_3, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.periods), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.data, function (item, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: key, "class": (0, vue_1.normalizeClass)(["flex", { @@ -22047,26 +22496,26 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { href: "/indicator/".concat(_ctx.id.indicator, "/period/").concat(item.id) }, (0, vue_1.toDisplayString)(_ctx.dateFormat(item.period.period_start[0].date, 'MMMM DD, YYYY')) + " - " + (0, vue_1.toDisplayString)(_ctx.dateFormat(item.period.period_end[0].date, 'MMMM DD, YYYY')), 9 /* TEXT, PROPS */ - , _hoisted_6)]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createVNode)(_component_Btn, { - text: "Edit", + , _hoisted_5)]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit, icon: "edit", link: "/indicator/".concat(_ctx.id.indicator, "/period/").concat(item.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])], 2 + , ["text", "link"])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))]), (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createVNode)(_component_Btn, { - text: "Show full period list", + ))]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.show_full_period, icon: "", design: "bgText", link: "/indicator/".concat(_ctx.id.indicator, "/period"), "class": "mr-2.5 -mt-1" }, null, 8 /* PROPS */ - , ["link"])])])])])); + , ["text", "link"])])])])])); } exports.render = render; @@ -22089,41 +22538,38 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_2 = { +var _hoisted_1 = { key: 0 }; -var _hoisted_3 = { +var _hoisted_2 = { key: 1 }; -var _hoisted_4 = { +var _hoisted_3 = { key: 2 }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Indicator URI: "); - -var _hoisted_6 = ["href"]; +var _hoisted_4 = ["href"]; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.refData, function (ref, r) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.refData, function (ref, r) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: r, "class": (0, vue_1.normalizeClass)({ 'mb-1.5': r !== Object.keys(_ctx.refData).length - 1 }) - }, [ref.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, " Vocabulary: " + (0, vue_1.toDisplayString)(_ctx.refType.indicatorVocabulary[ref.vocabulary]) + ", ", 1 + }, [ref.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary) + ": " + (0, vue_1.toDisplayString)(_ctx.refType.indicatorVocabulary[ref.vocabulary]) + ", ", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), ref.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code) + ": " + (0, vue_1.toDisplayString)(ref.code) + ", ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), ref.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, " Code: " + (0, vue_1.toDisplayString)(ref.code) + ", ", 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), ref.indicator_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator_uri) + ": ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), ref.indicator_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, [_hoisted_5, (0, vue_1.createElementVNode)("a", { + ), (0, vue_1.createElementVNode)("a", { target: "_blank", href: ref.indicator_uri }, (0, vue_1.toDisplayString)(ref.indicator_uri), 9 /* TEXT, PROPS */ - , _hoisted_6)])) : (0, vue_1.createCommentVNode)("v-if", true)], 2 + , _hoisted_4)])) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 @@ -22151,20 +22597,18 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Title", -1 -/* HOISTED */ -); - -var _hoisted_2 = { +var _hoisted_1 = { key: 0, "class": "language mb-1" }; -var _hoisted_3 = { +var _hoisted_2 = { "class": "description text-xs" }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [_hoisted_1, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.titleData.narrative, function (title, t) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.titleData.narrative, function (title, t) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -22172,9 +22616,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["title-content", { 'mb-3': t !== _ctx.titleData.narrative.length - 1 }]) - }, [title.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, " (Language: " + (0, vue_1.toDisplayString)(_ctx.titleType[title.language]) + ") ", 1 + }, [title.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.titleType[title.language]) + ") ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)((_a = title.narrative) !== null && _a !== void 0 ? _a : 'Missing'), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)((_a = title.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ @@ -22223,31 +22667,14 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "w-full bg-eggshell py-2" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "All Elements", -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Not Completed", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_7 = { "class": "elements__listing mt-3 grid grid-cols-2 gap-2" }; -var _hoisted_12 = ["href"]; -var _hoisted_13 = { +var _hoisted_8 = ["href"]; +var _hoisted_9 = { "class": "status_icons absolute top-0 right-0 mt-1 mr-1 inline-flex" }; -var _hoisted_14 = { +var _hoisted_10 = { "class": "title mt-1 text-xs" }; @@ -22296,7 +22723,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "box" - }), _hoisted_7]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.all_elements), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[3] || (_cache[3] = function ($event) { return $setup.dropdownFilter('core'); @@ -22304,7 +22733,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "core" - }), _hoisted_8]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[4] || (_cache[4] = function ($event) { return $setup.dropdownFilter('completed'); @@ -22312,7 +22743,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "double-tick" - }), _hoisted_9]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[5] || (_cache[5] = function ($event) { return $setup.dropdownFilter('not_completed'); @@ -22320,16 +22753,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "ml-1 !mr-1.5", icon: "red-cross" - }), _hoisted_10])])], 512 + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.not_completed), 1 + /* TEXT */ + )])])], 512 /* NEED_PATCH */ - ), [[vue_1.vShow, $setup.searchBtnValue]])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.filteredElements, function (post, index) { + ), [[vue_1.vShow, $setup.searchBtnValue]])])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.filteredElements, function (post, index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: index }, [!(index.toString() === 'indicator' || index.toString() === 'period') ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: 0, "class": "elements__item relative flex cursor-pointer flex-col items-center justify-center rounded border border-dashed border-n-40 py-2.5 text-n-30", href: $setup.getLink(post.has_data, index.toString()) - }, [(0, vue_1.createElementVNode)("div", _hoisted_13, [post.completed ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, [post.completed ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { key: 0, "class": "text-base text-spring-50", icon: "double-tick" @@ -22347,11 +22782,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-base" }, null, 8 /* PROPS */ - , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)(index.toString().replace(/_/g, "-")), 1 + , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)(index.toString().replace(/_/g, "-")), 1 /* TEXT */ )], 8 /* PROPS */ - , _hoisted_12)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 + , _hoisted_8)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 /* STABLE_FRAGMENT */ ); }), 128 @@ -22385,388 +22820,325 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "title mb-6 flex" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Delete element", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "rounded-lg bg-rose p-4" -}, " Are you sure you want to delete this element? ", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_4 = { "class": "flex justify-end" }; -var _hoisted_6 = { +var _hoisted_5 = { "class": "inline-flex" }; -var _hoisted_7 = ["id"]; -var _hoisted_8 = { +var _hoisted_6 = ["id"]; +var _hoisted_7 = { "class": "mb-4 flex" }; -var _hoisted_9 = { +var _hoisted_8 = { "class": "title flex grow" }; -var _hoisted_10 = { +var _hoisted_9 = { "class": "title text-sm font-bold" }; -var _hoisted_11 = { +var _hoisted_10 = { "class": "icons flex items-center" }; -var _hoisted_12 = { +var _hoisted_11 = { key: 1, "class": "mr-2.5 flex gap-2.5" }; -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "divider mb-4 h-px w-full bg-n-20" }, null, -1 /* HOISTED */ ); -var _hoisted_14 = { +var _hoisted_13 = { "class": "default_aid_type-content" }; -var _hoisted_15 = { +var _hoisted_14 = { "class": "date-type mb-2 text-sm font-bold" }; -var _hoisted_16 = { +var _hoisted_15 = { key: 0 }; -var _hoisted_17 = { +var _hoisted_16 = { key: 1, "class": "italic" }; -var _hoisted_18 = { +var _hoisted_17 = { key: 0, "class": "text-sm" }; -var _hoisted_19 = { +var _hoisted_18 = { key: 0 }; -var _hoisted_20 = { +var _hoisted_19 = { key: 1, "class": "italic" }; -var _hoisted_21 = { +var _hoisted_20 = { key: 1, "class": "text-sm" }; -var _hoisted_22 = { +var _hoisted_21 = { key: 0 }; -var _hoisted_23 = { +var _hoisted_22 = { key: 1, "class": "italic" }; -var _hoisted_24 = { +var _hoisted_23 = { key: 2, "class": "text-sm" }; -var _hoisted_25 = { +var _hoisted_24 = { key: 0 }; -var _hoisted_26 = { +var _hoisted_25 = { key: 1, "class": "italic" }; -var _hoisted_27 = { +var _hoisted_26 = { key: 3, "class": "max-w-[887px] text-sm" }; -var _hoisted_28 = { +var _hoisted_27 = { key: 0 }; -var _hoisted_29 = { +var _hoisted_28 = { key: 1, "class": "italic" }; -var _hoisted_30 = { +var _hoisted_29 = { "class": "category" }; - -var _hoisted_31 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Vocabulary - ", -1 -/* HOISTED */ -); - -var _hoisted_32 = { +var _hoisted_30 = { key: 0 }; -var _hoisted_33 = { +var _hoisted_31 = { key: 1, "class": "italic" }; -var _hoisted_34 = { +var _hoisted_32 = { key: 0, "class": "text-sm" }; -var _hoisted_35 = { +var _hoisted_33 = { key: 0, "class": "flex space-x-1" }; -var _hoisted_36 = { +var _hoisted_34 = { key: 1, "class": "italic" }; -var _hoisted_37 = { +var _hoisted_35 = { key: 1, "class": "text-sm" }; -var _hoisted_38 = { +var _hoisted_36 = { key: 0 }; -var _hoisted_39 = { +var _hoisted_37 = { key: 1, "class": "italic" }; -var _hoisted_40 = { +var _hoisted_38 = { key: 2 }; -var _hoisted_41 = { +var _hoisted_39 = { key: 3, "class": "italic" }; -var _hoisted_42 = { +var _hoisted_40 = { "class": "multiline" }; - -var _hoisted_43 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_44 = { +var _hoisted_41 = { key: 0, "class": "flex flex-col" }; -var _hoisted_45 = { +var _hoisted_42 = { key: 0, "class": "language top" }; -var _hoisted_46 = { +var _hoisted_43 = { "class": "description" }; -var _hoisted_47 = { +var _hoisted_44 = { key: 1, "class": "italic" }; -var _hoisted_48 = { +var _hoisted_45 = { "class": "category" }; -var _hoisted_49 = { +var _hoisted_46 = { key: 0 }; -var _hoisted_50 = { +var _hoisted_47 = { key: 1, "class": "italic" }; -var _hoisted_51 = { +var _hoisted_48 = { "class": "text-sm" }; -var _hoisted_52 = { +var _hoisted_49 = { key: 0, "class": "value" }; -var _hoisted_53 = { +var _hoisted_50 = { key: 0 }; -var _hoisted_54 = { +var _hoisted_51 = { key: 1, "class": "italic" }; -var _hoisted_55 = { +var _hoisted_52 = { "class": "ml-5" }; - -var _hoisted_56 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period Start", -1 -/* HOISTED */ -); - -var _hoisted_57 = { +var _hoisted_53 = { key: 0 }; -var _hoisted_58 = { +var _hoisted_54 = { key: 1, "class": "italic" }; - -var _hoisted_59 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period end", -1 -/* HOISTED */ -); - -var _hoisted_60 = { +var _hoisted_55 = { key: 0 }; -var _hoisted_61 = { +var _hoisted_56 = { key: 1, "class": "italic" }; - -var _hoisted_62 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Status", -1 -/* HOISTED */ -); - -var _hoisted_63 = { +var _hoisted_57 = { key: 0 }; -var _hoisted_64 = { +var _hoisted_58 = { key: 1, "class": "italic" }; -var _hoisted_65 = { +var _hoisted_59 = { key: 0, "class": "max-w-[887px] text-sm" }; -var _hoisted_66 = ["href"]; -var _hoisted_67 = { +var _hoisted_60 = ["href"]; +var _hoisted_61 = { key: 1, "class": "italic" }; -var _hoisted_68 = { +var _hoisted_62 = { "class": "ml-5" }; - -var _hoisted_69 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Language", -1 -/* HOISTED */ -); - -var _hoisted_70 = { +var _hoisted_63 = { key: 0 }; -var _hoisted_71 = { +var _hoisted_64 = { key: 1, "class": "italic" }; - -var _hoisted_72 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Date", -1 -/* HOISTED */ -); - -var _hoisted_73 = { +var _hoisted_65 = { key: 0 }; -var _hoisted_74 = { +var _hoisted_66 = { key: 1, "class": "italic" }; -var _hoisted_75 = { +var _hoisted_67 = { "class": "multiline" }; - -var _hoisted_76 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Title", -1 -/* HOISTED */ -); - -var _hoisted_77 = { +var _hoisted_68 = { key: 0, "class": "language" }; -var _hoisted_78 = { +var _hoisted_69 = { key: 1, "class": "flex flex-col" }; -var _hoisted_79 = { +var _hoisted_70 = { key: 2, "class": "italic" }; - -var _hoisted_80 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Category", -1 -/* HOISTED */ -); - -var _hoisted_81 = { +var _hoisted_71 = { key: 0 }; -var _hoisted_82 = { +var _hoisted_72 = { key: 1, "class": "italic" }; - -var _hoisted_83 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Format", -1 -/* HOISTED */ -); - -var _hoisted_84 = { +var _hoisted_73 = { key: 0 }; -var _hoisted_85 = { +var _hoisted_74 = { key: 1, "class": "italic" }; -var _hoisted_86 = { +var _hoisted_75 = { "class": "multiline" }; - -var _hoisted_87 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_88 = { +var _hoisted_76 = { key: 0, "class": "flex flex-col" }; -var _hoisted_89 = { +var _hoisted_77 = { key: 0, "class": "language" }; -var _hoisted_90 = { +var _hoisted_78 = { key: 1, "class": "italic" }; -var _hoisted_91 = { +var _hoisted_79 = { "class": "content text-sm" }; -var _hoisted_92 = { +var _hoisted_80 = { key: 0 }; -var _hoisted_93 = { +var _hoisted_81 = { key: 1, "class": "italic" }; -var _hoisted_94 = { +var _hoisted_82 = { key: 0 }; -var _hoisted_95 = { +var _hoisted_83 = { key: 1, "class": "italic" }; -var _hoisted_96 = { +var _hoisted_84 = { key: 0 }; -var _hoisted_97 = { +var _hoisted_85 = { key: 1, "class": "italic" }; -var _hoisted_98 = { +var _hoisted_86 = { key: 0 }; -var _hoisted_99 = { +var _hoisted_87 = { key: 1, "class": "italic" }; -var _hoisted_100 = { +var _hoisted_88 = { key: 0 }; -var _hoisted_101 = { +var _hoisted_89 = { key: 1, "class": "italic" }; -var _hoisted_102 = { +var _hoisted_90 = { key: 0 }; -var _hoisted_103 = { +var _hoisted_91 = { key: 1, "class": "italic" }; -var _hoisted_104 = { +var _hoisted_92 = { key: 0 }; -var _hoisted_105 = { +var _hoisted_93 = { key: 1, "class": "italic" }; -var _hoisted_106 = { +var _hoisted_94 = { key: 7 }; @@ -22782,21 +23154,29 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 mt-0.5 text-lg text-crimson-40", icon: "delete" - }), _hoisted_3]), _hoisted_4]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.translation.button_lang.delete_something.replace(':something', $setup.translation.common_lang.element)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, (0, vue_1.toDisplayString)($setup.translation.button_lang.delete_confirmation.replace(':something', $setup.translation.common_lang.element)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "bg-white px-6 uppercase", - text: "Go Back", + text: $setup.translation.button_lang.go_back, type: "", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.deleteValue = false; }) - }), (0, vue_1.createVNode)($setup["BtnComponent"], { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createVNode)($setup["BtnComponent"], { "class": "space", - text: "Delete", + text: $setup.translation.button_lang["delete"], type: "primary", onClick: _cache[1] || (_cache[1] = function ($event) { return $setup.deleteElement($props.activityId, $props.title); }) - })])])]; + }, null, 8 + /* PROPS */ + , ["text"])])])]; }), _: 1 /* STABLE */ @@ -22808,7 +23188,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createElementVNode)("div", { id: $props.title, "class": "rounded-lg bg-white p-4" - }, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", _hoisted_9, [$props.title === 'reporting_org' || $props.title === 'default_tied_status' || $props.title === 'crs_add' || $props.title === 'fss' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [$props.title === 'reporting_org' || $props.title === 'default_tied_status' || $props.title === 'crs_add' || $props.title === 'fss' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { key: 0, "class": "elements-svg", icon: "activity-elements/building" @@ -22822,44 +23202,46 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "elements-svg" }, null, 8 /* PROPS */ - , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)($props.title.toString().replace(/_/g, '-')), 1 + , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)($props.title.toString().replace(/_/g, '-')), 1 /* TEXT */ ), (0, vue_1.createVNode)($setup["Status"], { data: $props.completed }, null, 8 /* PROPS */ - , ["data"])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [$props.title == 'transactions' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + , ["data"])]), (0, vue_1.createElementVNode)("div", _hoisted_10, [$props.title == 'transactions' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createVNode)($setup["Btn"], { - text: "Add Transaction", + text: $setup.translation.button_lang.add_something.replace(':something', $setup.translation.common_lang.transaction), icon: "add", link: "/activity/".concat($props.activityId, "/transaction/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)($setup["Btn"], { - text: "Show full transaction list", + , ["text", "link"]), (0, vue_1.createVNode)($setup["Btn"], { + text: $setup.translation.button_lang.show_something.replace(':something', $setup.translation.common_lang.full_transaction), icon: "", design: "bgText", link: "/activity/".concat($props.activityId, "/transaction"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"])], 64 + , ["text", "link"])], 64 /* STABLE_FRAGMENT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_12, [(0, vue_1.createVNode)($setup["Btn"], { - text: "Edit", + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, [(0, vue_1.createVNode)($setup["Btn"], { + text: $setup.translation.button_lang.edit, link: "/activity/".concat($props.activityId, "/").concat($props.title), "class": "edit-button" }, null, 8 /* PROPS */ - , ["link"]), $props.title !== 'title' && $props.title !== 'iati_identifier' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Btn"], { + , ["text", "link"]), $props.title !== 'title' && $props.title !== 'iati_identifier' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Btn"], { key: 0, - text: "Delete", + text: $setup.translation.button_lang["delete"], "class": "delete-button", icon: "delete", onClick: $setup.deleteActivityElement - })) : (0, vue_1.createCommentVNode)("v-if", true)])), $setup.activityCoreElements().includes($props.title) ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)])), $setup.activityCoreElements().includes($props.title) ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { key: 2, "class": "mr-1.5", icon: "core" @@ -22871,7 +23253,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-n-40" }, null, 8 /* PROPS */ - , ["name", "hover-text"])) : (0, vue_1.createCommentVNode)("v-if", true)])]), _hoisted_13, $props.title === 'iati_identifier' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["IatiIdentifier"], { + , ["name", "hover-text"])) : (0, vue_1.createCommentVNode)("v-if", true)])]), _hoisted_12, $props.title === 'iati_identifier' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["IatiIdentifier"], { key: 0, data: $props.data.content.iati_identifier_text }, null, 8 @@ -22949,17 +23331,25 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["default_aid_type", { 'mb-4': key !== $props.data.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [post.default_aid_type_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, (0, vue_1.toDisplayString)($props.types.aidTypeVocabulary[post.default_aid_type_vocabulary]), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [post.default_aid_type_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)($props.types.aidTypeVocabulary[post.default_aid_type_vocabulary]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, "Vocabulary Missing"))]), post.default_aid_type_vocabulary == '2' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_17, [post.earmarking_category ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)($props.types.earmarkingCategory[post.earmarking_category]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing.something.replace(':something', $setup.translation.common_lang.code)), 1 + /* TEXT */ + ))])) : post.default_aid_type_vocabulary == '3' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, [post.earmarking_modality ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)($props.types.earmarkingModality[post.earmarking_modality]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, "Vocabulary Missing"))]), post.default_aid_type_vocabulary == '2' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_18, [post.earmarking_category ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, (0, vue_1.toDisplayString)($props.types.earmarkingCategory[post.earmarking_category]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing.something.replace(':something', $setup.translation.common_lang.code)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, "Code Missing"))])) : post.default_aid_type_vocabulary == '3' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_21, [post.earmarking_modality ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, (0, vue_1.toDisplayString)($props.types.earmarkingModality[post.earmarking_modality]), 1 + ))])) : post.default_aid_type_vocabulary == '4' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_23, [post.cash_and_voucher_modalities ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_24, (0, vue_1.toDisplayString)($props.types.cashandVoucherModalities[post.cash_and_voucher_modalities]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_23, "Code Missing"))])) : post.default_aid_type_vocabulary == '4' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_24, [post.cash_and_voucher_modalities ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)($props.types.cashandVoucherModalities[post.cash_and_voucher_modalities]), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing.something.replace(':something', $setup.translation.common_lang.code)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_26, "Code Missing"))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_27, [post.default_aid_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, (0, vue_1.toDisplayString)($props.types.aidType[post.default_aid_type]), 1 + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_26, [post.default_aid_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_27, (0, vue_1.toDisplayString)($props.types.aidType[post.default_aid_type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_29, "Code Missing"))]))])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing.something.replace(':something', $setup.translation.common_lang.code)), 1 + /* TEXT */ + ))]))])], 2 /* CLASS */ ); }), 128 @@ -22968,23 +23358,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : $props.title === 'country_budget_items' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 15 - }, [(0, vue_1.createCommentVNode)(" Country Budget Items "), (0, vue_1.createElementVNode)("div", _hoisted_30, [_hoisted_31, (0, vue_1.createElementVNode)("span", null, [$props.data.content.country_budget_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_32, (0, vue_1.toDisplayString)($setup.props.types.budgetIdentifierVocabulary[$props.data.content.country_budget_vocabulary]), 1 + }, [(0, vue_1.createCommentVNode)(" Country Budget Items "), (0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.vocabulary) + " - ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", null, [$props.data.content.country_budget_vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_30, (0, vue_1.toDisplayString)($setup.props.types.budgetIdentifierVocabulary[$props.data.content.country_budget_vocabulary]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_33, "Missing"))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($props.data.content.budget_item, function (post, key) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_31, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($props.data.content.budget_item, function (post, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: key, "class": (0, vue_1.normalizeClass)(["elements-detail", { 'mb-4': key !== $props.data.content.budget_item.length - 1 }]) - }, [$props.data.content.country_budget_vocabulary === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_34, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_35, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($props.types.budgetIdentifier[post.code]), 1 + }, [$props.data.content.country_budget_vocabulary === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_32, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_33, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($props.types.budgetIdentifier[post.code]), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("span", null, "(" + (0, vue_1.toDisplayString)($setup.roundFloat(post.percentage)) + "%)", 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_36, "Missing"))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_37, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_38, (0, vue_1.toDisplayString)($props.types.budgetIdentifier[post.code]), 1 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_34, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_35, [post.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_36, (0, vue_1.toDisplayString)($props.types.budgetIdentifier[post.code]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_39, "Missing")), post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_40, " (" + (0, vue_1.toDisplayString)($setup.roundFloat(post.percentage)) + " %)", 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_37, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_41, "(Percentage Missing)"))])), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description, function (item, i) { + )), post.percentage ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_38, " (" + (0, vue_1.toDisplayString)($setup.roundFloat(post.percentage)) + " %)", 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_39, "(Percentage Missing)"))])), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: i }, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(item.narrative, function (narrative, k) { @@ -22993,11 +23391,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["elements-detail ml-5", { 'mb-0': k !== item.narrative - 1 }]) - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_42, [_hoisted_43, (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_44, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_45, "(Language: " + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ")", 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_40, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_41, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, "(" + (0, vue_1.toDisplayString)($setup.translation.common_lang.language) + ": " + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_46, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_43, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_47, "Missing"))])])])], 2 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_44, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])], 2 /* CLASS */ ); }), 128 @@ -23030,34 +23432,38 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["elements-detail", { 'mb-4': key !== $props.data.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_48, [post.budget_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_49, (0, vue_1.toDisplayString)($props.types.budgetType[post.budget_type]), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_45, [post.budget_type ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_46, (0, vue_1.toDisplayString)($props.types.budgetType[post.budget_type]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_50, "Type Missing"))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.budget_value, function (item, i) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_47, "Type Missing"))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.budget_value, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)(["elements-detail mb-1", { 'mb-4': i !== post.budget_value.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_51, [item.amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_52, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(Number(item.amount).toLocaleString()), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_48, [item.amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_49, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(Number(item.amount).toLocaleString()), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(item.currency), 1 /* TEXT */ - ), item.value_date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_53, "(Valued at " + (0, vue_1.toDisplayString)($setup.formatDate(item.value_date)) + ")", 1 + ), item.value_date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_50, "(Valued at " + (0, vue_1.toDisplayString)($setup.formatDate(item.value_date)) + ")", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_54, "Budget Value Missing"))])], 2 + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_51, "Budget Value Missing"))])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - )), (0, vue_1.createElementVNode)("div", _hoisted_55, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.period_start, function (item, i) { + )), (0, vue_1.createElementVNode)("div", _hoisted_52, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.period_start, function (item, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.period_start.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_56, item.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_57, (0, vue_1.toDisplayString)($setup.formatDate(item.date)), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.period_start), 1 + /* TEXT */ + ), item.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_53, (0, vue_1.toDisplayString)($setup.formatDate(item.date)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_58, "Missing"))])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_54, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])], 2 /* CLASS */ ); }), 128 @@ -23068,16 +23474,24 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4': i !== post.period_end.length - 1 }) - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_59, item.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_60, (0, vue_1.toDisplayString)($setup.formatDate(item.date)), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.period_end), 1 + /* TEXT */ + ), item.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_55, (0, vue_1.toDisplayString)($setup.formatDate(item.date)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_61, "Missing"))])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_56, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - )), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_62, (0, vue_1.createElementVNode)("td", null, [post.budget_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_63, (0, vue_1.toDisplayString)($props.types.budgetStatus[post.budget_status]), 1 + )), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.period), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [post.budget_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_57, (0, vue_1.toDisplayString)($props.types.budgetStatus[post.budget_status]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_64, "Missing"))])])])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_58, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])])], 2 /* CLASS */ ); }), 128 @@ -23100,25 +23514,33 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["elements-detail", { 'mb-4': key !== $props.data.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", null, [post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_65, [(0, vue_1.createElementVNode)("a", { + }, [(0, vue_1.createElementVNode)("div", null, [post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_59, [(0, vue_1.createElementVNode)("a", { href: post.url, target: "_blank" }, (0, vue_1.toDisplayString)(post.url), 9 /* TEXT, PROPS */ - , _hoisted_66)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_67, "URL Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_68, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.language, function (language, i) { + , _hoisted_60)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_61, "URL Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_62, [(0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.language, function (language, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_69, (0, vue_1.createElementVNode)("td", null, [language.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_70, (0, vue_1.toDisplayString)($props.types.languages[language.code]), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.language), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [language.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_63, (0, vue_1.toDisplayString)($props.types.languages[language.code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_64, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_71, "Missing"))])])])]); + ))])])])]); }), 128 /* KEYED_FRAGMENT */ )), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.document_date, function (document_date, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_72, (0, vue_1.createElementVNode)("td", null, [document_date.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_73, (0, vue_1.toDisplayString)($setup.formatDate(document_date.date)), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [document_date.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_65, (0, vue_1.toDisplayString)($setup.formatDate(document_date.date)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_74, "Missing"))])])])]); + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_66, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])]); }), 128 /* KEYED_FRAGMENT */ ))]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.title, function (item, i) { @@ -23128,11 +23550,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: j, "class": "mb-1 flex items-center space-x-1" - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_75, [_hoisted_76, (0, vue_1.createElementVNode)("td", null, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_77, " (" + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_67, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_68, " (" + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ") ", 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_69, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_78, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_70, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_79, "Missing"))])])])]); + ))])])])]); }), 128 /* KEYED_FRAGMENT */ ))]); @@ -23141,24 +23567,36 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { )), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.category, function (category, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_80, (0, vue_1.createElementVNode)("td", null, [category.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_81, (0, vue_1.toDisplayString)($props.types.documentCategory[category.code]), 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.category), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_82, "Missing"))])])])]); + ), (0, vue_1.createElementVNode)("td", null, [category.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_71, (0, vue_1.toDisplayString)($props.types.documentCategory[category.code]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_72, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])]); }), 128 /* KEYED_FRAGMENT */ - )), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_83, post.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_84, (0, vue_1.toDisplayString)(post.format), 1 + )), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.category), 1 + /* TEXT */ + ), post.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_73, (0, vue_1.toDisplayString)(post.format), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_85, "Missing"))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description, function (description, i) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_74, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description, function (description, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i }, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(description.narrative, function (narrative, j) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: j - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_86, [_hoisted_87, (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_88, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_89, "(Language: " + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ")", 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", _hoisted_75, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.translation.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_76, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_77, "(" + (0, vue_1.toDisplayString)($setup.translation.common_lang.language) + ": " + (0, vue_1.toDisplayString)($props.types.languages[narrative.language]) + ")", 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_90, "Missing"))])])])]); + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_78, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])]); }), 128 /* KEYED_FRAGMENT */ ))]); @@ -23193,53 +23631,69 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["data"])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 24 - }, [(0, vue_1.createCommentVNode)(" Activity Status "), (0, vue_1.createElementVNode)("div", _hoisted_91, [$props.title === 'activity_status' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + }, [(0, vue_1.createCommentVNode)(" Activity Status "), (0, vue_1.createElementVNode)("div", _hoisted_79, [$props.title === 'activity_status' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 - }, [$props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_92, (0, vue_1.toDisplayString)($setup.props.types.activityStatus[$props.data.content]), 1 + }, [$props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_80, (0, vue_1.toDisplayString)($setup.props.types.activityStatus[$props.data.content]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_81, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_93, "Missing"))], 64 + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'activity_scope' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [(0, vue_1.createCommentVNode)(" Activity Scope "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_94, (0, vue_1.toDisplayString)($setup.props.types.activityScope[$props.data.content]), 1 + }, [(0, vue_1.createCommentVNode)(" Activity Scope "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_82, (0, vue_1.toDisplayString)($setup.props.types.activityScope[$props.data.content]), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_83, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_95, "Missing"))], 64 + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'collaboration_type' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 2 - }, [(0, vue_1.createCommentVNode)(" Collaboration Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_96, (0, vue_1.toDisplayString)($setup.props.types.collaborationType[$props.data.content]), 1 + }, [(0, vue_1.createCommentVNode)(" Collaboration Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_84, (0, vue_1.toDisplayString)($setup.props.types.collaborationType[$props.data.content]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_97, "Missing"))], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_85, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'default_flow_type' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 3 - }, [(0, vue_1.createCommentVNode)(" Default Flow Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_98, (0, vue_1.toDisplayString)($setup.props.types.flowType[$props.data.content]), 1 + }, [(0, vue_1.createCommentVNode)(" Default Flow Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_86, (0, vue_1.toDisplayString)($setup.props.types.flowType[$props.data.content]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_99, "Missing"))], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_87, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'default_tied_status' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 4 - }, [(0, vue_1.createCommentVNode)(" Default Tied Status "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_100, (0, vue_1.toDisplayString)($setup.props.types.tiedStatus[$props.data.content]), 1 + }, [(0, vue_1.createCommentVNode)(" Default Tied Status "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_88, (0, vue_1.toDisplayString)($setup.props.types.tiedStatus[$props.data.content]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_101, "Missing"))], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_89, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'capital_spend' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 5 - }, [(0, vue_1.createCommentVNode)(" Capital Spend "), $props.data.content.toString() ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_102, (0, vue_1.toDisplayString)($props.data.content.toString()) + "%", 1 + }, [(0, vue_1.createCommentVNode)(" Capital Spend "), $props.data.content.toString() ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_90, (0, vue_1.toDisplayString)($props.data.content.toString()) + "%", 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_103, "Missing"))], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_91, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 64 /* STABLE_FRAGMENT */ )) : $props.title === 'default_finance_type' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 6 - }, [(0, vue_1.createCommentVNode)(" Default Finance Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_104, (0, vue_1.toDisplayString)($setup.props.types.financeType[$props.data.content]), 1 + }, [(0, vue_1.createCommentVNode)(" Default Finance Type "), $props.data.content ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_92, (0, vue_1.toDisplayString)($setup.props.types.financeType[$props.data.content]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_105, "Missing"))], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_93, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 64 /* STABLE_FRAGMENT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_106, "No content"))])], 64 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_94, (0, vue_1.toDisplayString)($setup.translation.common_lang.missing.no_content), 1 + /* TEXT */ + ))])], 64 /* STABLE_FRAGMENT */ ))], 8 /* PROPS */ - , _hoisted_7)], 2 + , _hoisted_6)], 2 /* CLASS */ )], 64 /* STABLE_FRAGMENT */ @@ -23266,11 +23720,7 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); -var _hoisted_1 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Add Activity", -1 -/* HOISTED */ -); - -var _hoisted_2 = { +var _hoisted_1 = { key: 0, "class": "button__dropdown absolute right-0 top-full z-10 w-56 bg-white p-2 text-left shadow-dropdown" }; @@ -23295,19 +23745,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "plus" - }), _hoisted_1, _ctx.state.isVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.button_lang.add_activity), 1 + /* TEXT */ + ), _ctx.state.isVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { href: "#", "class": (0, vue_1.normalizeClass)(_ctx.liClass), onClick: _cache[0] || (_cache[0] = function ($event) { return _ctx.modalValue = true; }) - }, "Add activity manually", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.common_lang.add_activity_manually), 3 + /* TEXT, CLASS */ )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { href: "/import", "class": (0, vue_1.normalizeClass)(_ctx.liClass) - }, "Import activities from .csv/.xml", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.common_lang.import_activities), 3 + /* TEXT, CLASS */ )])])])) : (0, vue_1.createCommentVNode)("v-if", true)], 512 /* NEED_PATCH */ ), (0, vue_1.createVNode)(_component_CreateModal, { @@ -23342,34 +23794,23 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var _hoisted_1 = { "class": "relative flex flex-row-reverse gap-2" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Download All "); - -var _hoisted_3 = { +var _hoisted_2 = { key: 2, "class": "button__dropdown absolute left-0 top-[calc(100%_+_8px)] z-10 w-56 bg-white p-2 text-left shadow-dropdown" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_3 = { "class": "text-sm font-bold" -}, " The XML file is in wrong format. Would you like to download it anyway? ", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_4 = { "class": "mb-4 h-40 overflow-y-auto rounded-lg bg-rose p-4 text-sm" }; -var _hoisted_6 = { +var _hoisted_5 = { "class": "mb-2 flex justify-between" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_6 = { "class": "text-xs font-bold" -}, "Error message", -1 -/* HOISTED */ -); - -var _hoisted_8 = { +}; +var _hoisted_7 = { "class": "flex justify-end space-x-4" }; @@ -23398,7 +23839,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "download-file" - }), _hoisted_2], 512 + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_all), 1 + /* TEXT */ + )], 512 /* NEED_PATCH */ )) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.store.state.selectedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { key: 1, @@ -23418,22 +23861,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { icon: "download-file" })], 512 /* NEED_PATCH */ - )) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.state.isVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_3, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { + )) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.state.isVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_2, [(0, vue_1.createElementVNode)("ul", null, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { href: "#", "class": (0, vue_1.normalizeClass)(_ctx.liClass), onClick: _cache[2] || (_cache[2] = function ($event) { return _ctx.downloadCsv(_ctx.store.state.selectedActivities.length); }) - }, "Download CSV", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_something.replace(':something', _ctx.language.common_lang.csv)), 3 + /* TEXT, CLASS */ )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", { href: "#", "class": (0, vue_1.normalizeClass)(_ctx.liClass), onClick: _cache[3] || (_cache[3] = function ($event) { return _ctx.downloadXml(_ctx.store.state.selectedActivities.length); }) - }, "Download XML", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_something.replace(':something', _ctx.language.common_lang.xml)), 3 + /* TEXT, CLASS */ )])])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_Modal, { "modal-active": _ctx.showErrorpopup, width: "583", @@ -23442,24 +23885,34 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, { "default": (0, vue_1.withCtx)(function () { - return [_hoisted_4, (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [_hoisted_7, (0, vue_1.createElementVNode)("a", { + return [(0, vue_1.createElementVNode)("p", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_xml_confirmation), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.common_lang.error_message), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", { "class": "top-1 right-3 cursor-pointer text-xs font-bold", onClick: _cache[4] || (_cache[4] = function ($event) { return _ctx.downloadError('error', _ctx.message); }) - }, "Download error message")]), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.message), 1 + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_something.replace(':something', _ctx.language.common_lang.error_message)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("button", { + )]), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.message), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("button", { "class": "text-xs font-bold capitalize text-bluecoral", onClick: _cache[5] || (_cache[5] = function () { _ctx.showErrorpopup = false; }) - }, " Go back "), (0, vue_1.createElementVNode)("button", { + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.go_back), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", { "class": "rounded bg-bluecoral px-4 py-3 font-bold text-white", onClick: _cache[6] || (_cache[6] = function ($event) { return _ctx.downloadErrorxml(_ctx.store.state.selectedActivities.length); }) - }, " Download Anyway ")])]; + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.download_something.replace(':something', _ctx.language.common_lang.anyway)), 1 + /* TEXT */ + )])]; }), _: 1 /* STABLE */ @@ -23505,70 +23958,66 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var _hoisted_1 = { "class": "p-6 text-xs leading-relaxed bg-white rounded-lg text-n-40" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_2 = { "class": "mb-3" -}, "Note", -1 -/* HOISTED */ -); - +}; var _hoisted_3 = { "class": "flex justify-between mb-3" }; var _hoisted_4 = { "class": "flex items-center space-x-1" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core Elements", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "flex justify-between mb-3" }; -var _hoisted_7 = { +var _hoisted_6 = { "class": "flex items-center space-x-1" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Mandatory sub-elements", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_7 = { "class": "flex justify-between mb-3" }; -var _hoisted_10 = { +var _hoisted_8 = { "class": "flex items-center space-x-1" }; -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Recommended sub-elements", -1 -/* HOISTED */ -); - function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); var _component_HoverText = (0, vue_1.resolveComponent)("HoverText"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [_hoisted_2, (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createVNode)(_component_svg_vue, { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.common_lang.note), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-sm", icon: "core" - }), _hoisted_5]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.core_elements), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "" - })]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-sm", icon: "star" - }), _hoisted_8]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.mandatory_sub_elements), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "" - })]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-sm", icon: "moon" - }), _hoisted_11]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.recommended_sub_elements), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "" - })])]); + }, null, 8 + /* PROPS */ + , ["hover-text"])])]); } exports.render = render; @@ -23601,18 +24050,12 @@ var _hoisted_2 = { "background": "linear-gradient(180deg, #e3ecfa 0%, #dae7ff 100%)" } }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("h5", { +var _hoisted_3 = { "class": "mb-[5px] text-heading-5 font-bold leading-9" -}, " No activity has been added yet. ", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_4 = { "class": "mb-[17px] text-caption-c1 leading-5 text-n-50" -}, " Click on the button below to add a new activity ", -1 -/* HOISTED */ -); +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -23622,7 +24065,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "folder", "class": "text-[94px]" - })]), _hoisted_3, _hoisted_4, (0, vue_1.createVNode)(_component_ActivityButton)]); + })]), (0, vue_1.createElementVNode)("h5", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.activity.no_activity_has_been_added_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.activity.click_on_button_to_add_new_label), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_ActivityButton)]); } exports.render = render; @@ -23654,82 +24101,78 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "title shrink-0 grow-0" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_4 = { "class": "mb-2 text-caption-c1 text-n-40 xl:mb-4" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("nav", { +}; +var _hoisted_5 = { "aria-label": "breadcrumbs", "class": "breadcrumb" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("p", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_6 = { "class": "last font-bold" -}, "Your Activities")])])], -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_7 = { "class": "inline-flex flex-col space-y-2 md:flex-row md:items-center" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("h4", { +var _hoisted_8 = { "class": "mr-4 text-3xl font-bold xl:text-heading-4" -}, " Your Activities ", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +}; +var _hoisted_9 = { "class": "tooltip-btn" }; -var _hoisted_8 = { +var _hoisted_10 = { "class": "" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "What is an activity?", -1 -/* HOISTED */ -); - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_11 = { "class": "tooltip-btn__content z-[1]" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_12 = { "class": "content" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_13 = { "class": "mb-1.5 text-caption-c1 font-bold text-bluecoral" -}, " What is an activity? "), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, [/*#__PURE__*/(0, vue_1.createTextVNode)(" You need to provide data about your organisation's development and humanitarian 'activities'. The unit of work described by an 'activity' is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country's government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months. "), /*#__PURE__*/(0, vue_1.createElementVNode)("br"), /*#__PURE__*/(0, vue_1.createTextVNode)(" Therefore your organisation will need to determine how it will divide its work internally into activities. Read the "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - target: "_blank", - rel: "noopener noreferrer", - href: "/publishing-checklist", - "class": "text-bluecoral" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Publishing Checklist")]), /*#__PURE__*/(0, vue_1.createTextVNode)(" for more information. ")])])], -1 -/* HOISTED */ -); - -var _hoisted_11 = { +}; +var _hoisted_14 = ["innerHTML"]; +var _hoisted_15 = { "class": "actions relative inline-flex grow flex-col items-end justify-end space-y-2 lg:flex-row" }; -var _hoisted_12 = { +var _hoisted_16 = { "class": "inline-flex justify-end" }; -var _hoisted_13 = { +var _hoisted_17 = { "class": "inline-flex shrink-0 flex-col items-end justify-end gap-3 md:flex-row" }; -var _hoisted_14 = { +var _hoisted_18 = { "class": "flex flex-col gap-2 md:flex-row" }; -var _hoisted_15 = { +var _hoisted_19 = { "class": "flex gap-2" }; -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createTextVNode)(); +var _hoisted_20 = /*#__PURE__*/(0, vue_1.createTextVNode)(); -var _hoisted_17 = { +var _hoisted_21 = { "class": "flex gap-2" }; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("div", _hoisted_5, [_hoisted_6, (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("button", _hoisted_8, [(0, vue_1.createVNode)(_component_svg_vue, { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("nav", _hoisted_5, [(0, vue_1.createElementVNode)("p", null, [(0, vue_1.createElementVNode)("span", _hoisted_6, (0, vue_1.toDisplayString)($setup.language.activities_lang.your_activities), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("h4", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.activities_lang.your_activities), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("button", _hoisted_10, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "question-mark" - }), _hoisted_9]), _hoisted_10])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [$setup.toastMessage.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Toast"], { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, [(0, vue_1.createElementVNode)("span", { + innerHTML: $setup.language.activities_lang.what_is_activity.description.one + }, null, 8 + /* PROPS */ + , _hoisted_14)])])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_15, [$setup.toastMessage.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Toast"], { key: 0, "class": "whitespace-nowrap lg:mr-3.5", message: $setup.toastMessage.message, @@ -23745,13 +24188,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, null, 8 /* PROPS */ - , ["message"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [$setup.refreshToastMsg.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["RefreshToastMessage"], { + , ["message"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [$setup.refreshToastMsg.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["RefreshToastMessage"], { key: 0, message: $setup.refreshToastMsg.refreshMessage, type: $setup.refreshToastMsg.refreshMessageType }, null, 8 /* PROPS */ - , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createVNode)($setup["DownloadActivityButton"]), _hoisted_16, (0, vue_1.createVNode)($setup["PublishSelected"])]), (0, vue_1.createElementVNode)("div", _hoisted_17, [$setup.store.state.selectedActivities.length === 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["DeleteButton"], { + , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createVNode)($setup["DownloadActivityButton"]), _hoisted_20, (0, vue_1.createVNode)($setup["PublishSelected"])]), (0, vue_1.createElementVNode)("div", _hoisted_21, [$setup.store.state.selectedActivities.length === 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["DeleteButton"], { key: 0 })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)($setup["AddActivityButton"])])])])])])])]); } @@ -23838,109 +24281,93 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "bg-n-10" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +var _hoisted_3 = { id: "title", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Activity Title")], -1 -/* HOISTED */ -); - +}; var _hoisted_4 = { id: "date", scope: "col" }; var _hoisted_5 = ["href"]; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Updated On", -1 -/* HOISTED */ -); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +var _hoisted_6 = { id: "status", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_7 = { "class": "hidden" -}, "Status")], -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_8 = { id: "publish", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { - "class": "hidden" -}, "Publish")], -1 -/* HOISTED */ -); - +}; var _hoisted_9 = { + "class": "hidden" +}; +var _hoisted_10 = { id: "cb", scope: "col" }; -var _hoisted_10 = { +var _hoisted_11 = { key: 0 }; -var _hoisted_11 = { +var _hoisted_12 = { "class": "title" }; -var _hoisted_12 = { +var _hoisted_13 = { "class": "inline-flex items-start transition duration-500 hover:text-spring-50" }; -var _hoisted_13 = { +var _hoisted_14 = { "class": "ellipsis relative" }; -var _hoisted_14 = ["href"]; -var _hoisted_15 = { +var _hoisted_15 = ["href"]; +var _hoisted_16 = { "class": "w-52" }; -var _hoisted_16 = { +var _hoisted_17 = { "class": "ellipsis__title--hover" }; -var _hoisted_17 = { +var _hoisted_18 = { "class": "text-n-40" }; -var _hoisted_18 = { +var _hoisted_19 = { "class": "mr-1 text-base" }; -var _hoisted_19 = { +var _hoisted_20 = { "class": "text-sm leading-relaxed" }; -var _hoisted_20 = { +var _hoisted_21 = { "class": "flex flex-wrap gap-2" }; -var _hoisted_21 = { +var _hoisted_22 = { "class": "sr-only", "for": "" }; -var _hoisted_22 = { +var _hoisted_23 = { "class": "checkbox" }; -var _hoisted_23 = ["value"]; +var _hoisted_24 = ["value"]; -var _hoisted_24 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_25 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { "class": "checkmark" }, null, -1 /* HOISTED */ ); -var _hoisted_25 = { +var _hoisted_26 = { key: 1 }; - -var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", { +var _hoisted_27 = { colspan: "5", "class": "text-center" -}, "Activities not found", -1 -/* HOISTED */ -); - -var _hoisted_27 = [_hoisted_26]; +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("th", _hoisted_4, [(0, vue_1.createElementVNode)("a", { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_2, [(0, vue_1.createElementVNode)("th", _hoisted_3, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.activity_title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_4, [(0, vue_1.createElementVNode)("a", { "class": "text-n-50 transition duration-500 hover:text-spring-50", href: $setup.sortByDateUrl() }, [(0, vue_1.createElementVNode)("span", { @@ -23951,47 +24378,53 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["icon"])], 2 /* CLASS */ - ), _hoisted_6], 8 + ), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.updated_on), 1 + /* TEXT */ + )], 8 /* PROPS */ - , _hoisted_5)]), _hoisted_7, _hoisted_8, (0, vue_1.createElementVNode)("th", _hoisted_9, [(0, vue_1.createElementVNode)("span", { + , _hoisted_5)]), (0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.common_lang.status), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_8, [(0, vue_1.createElementVNode)("span", _hoisted_9, (0, vue_1.toDisplayString)($setup.language.common_lang.publish), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_10, [(0, vue_1.createElementVNode)("span", { "class": "cursor-pointer", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.toggleSelectAll($props.data.data, $setup.selectAllValue); }) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "checkbox" - })])])])]), $props.data.total > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tbody", _hoisted_10, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($props.data.data, function (datum) { + })])])])]), $props.data.total > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tbody", _hoisted_11, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($props.data.data, function (datum) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: datum['id'], "class": (0, vue_1.normalizeClass)({ 'already-published': datum['linked_to_iati'] && datum['status'] === 'draft' }) - }, [(0, vue_1.createElementVNode)("td", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [datum['linked_to_iati'] && datum['status'] === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["PreviouslyPublished"], { + }, [(0, vue_1.createElementVNode)("td", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [datum['linked_to_iati'] && datum['status'] === 'draft' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["PreviouslyPublished"], { key: 0, "class": "absolute top-0 left-0" - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("a", { + })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("a", { href: '/activity/' + datum['id'], "class": "ellipsis overflow-hidden text-n-50" - }, (0, vue_1.toDisplayString)(datum['default_title_narrative'] && datum['default_title_narrative'] !== '' ? datum['default_title_narrative'] : 'Untitled'), 9 + }, (0, vue_1.toDisplayString)(datum['default_title_narrative'] && datum['default_title_narrative'] !== '' ? datum['default_title_narrative'] : $setup.language.common_lang.untitled), 9 /* TEXT, PROPS */ - , _hoisted_14), (0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("span", _hoisted_16, (0, vue_1.toDisplayString)(datum['default_title_narrative'] && datum['default_title_narrative'] !== '' ? datum['default_title_narrative'] : 'Untitled'), 1 + , _hoisted_15), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("span", _hoisted_17, (0, vue_1.toDisplayString)(datum['default_title_narrative'] && datum['default_title_narrative'] !== '' ? datum['default_title_narrative'] : $setup.language.common_lang.untitled), 1 /* TEXT */ - )])])])]), (0, vue_1.createElementVNode)("td", _hoisted_17, (0, vue_1.toDisplayString)($setup.formatDate(datum.updated_at)), 1 + )])])])]), (0, vue_1.createElementVNode)("td", _hoisted_18, (0, vue_1.toDisplayString)($setup.formatDate(datum.updated_at)), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("button", { "class": (0, vue_1.normalizeClass)(["inline-flex items-center transition duration-500 hover:text-spring-50", { 'text-n-40': datum['status'] === 'draft', 'text-spring-50': datum['status'] === 'published' }]) - }, [(0, vue_1.createElementVNode)("span", _hoisted_18, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_19, [(0, vue_1.createVNode)(_component_svg_vue, { icon: datum['status'] === 'draft' ? 'document-write' : 'tick' }, null, 8 /* PROPS */ - , ["icon"])]), (0, vue_1.createElementVNode)("span", _hoisted_19, (0, vue_1.toDisplayString)(datum['status']), 1 + , ["icon"])]), (0, vue_1.createElementVNode)("span", _hoisted_20, (0, vue_1.toDisplayString)($setup.language.activities_lang.status_labels[datum['status']]), 1 /* TEXT */ )], 2 /* CLASS */ - )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_20, [datum.linked_to_iati ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["UnPublish"], { + )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_21, [datum.linked_to_iati ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["UnPublish"], { key: 0, type: "outline", "activity-id": datum['id'] @@ -24011,9 +24444,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: _cache[2] || (_cache[2] = function (event) { return event.stopPropagation(); }) - }, [(0, vue_1.createElementVNode)("label", _hoisted_21, " Select \"" + (0, vue_1.toDisplayString)(datum['default_title_narrative']) + "\" ", 1 + }, [(0, vue_1.createElementVNode)("label", _hoisted_22, (0, vue_1.toDisplayString)($setup.language.common_lang.select) + " \"" + (0, vue_1.toDisplayString)(datum['default_title_narrative']) + "\" ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("label", _hoisted_22, [(0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + ), (0, vue_1.createElementVNode)("label", _hoisted_23, [(0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return $setup.store.state.selectedActivities = $event; }), @@ -24021,12 +24454,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { type: "checkbox" }, null, 8 /* PROPS */ - , _hoisted_23), [[vue_1.vModelCheckbox, $setup.store.state.selectedActivities]]), _hoisted_24])])], 2 + , _hoisted_24), [[vue_1.vModelCheckbox, $setup.store.state.selectedActivities]]), _hoisted_25])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tbody", _hoisted_25, _hoisted_27))])]); + ))])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tbody", _hoisted_26, [(0, vue_1.createElementVNode)("td", _hoisted_27, (0, vue_1.toDisplayString)($setup.language.common_lang.activities_not_found), 1 + /* TEXT */ + )]))])]); } exports.render = render; @@ -24078,30 +24513,25 @@ var _hoisted_9 = { var _hoisted_10 = { "class": "text-sm font-bold leading-relaxed" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createTextVNode)(" target "); - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createTextVNode)(" actual "); - -var _hoisted_13 = { +var _hoisted_11 = { "class": "activities__content" }; -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 +var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 /* HOISTED */ ); -var _hoisted_15 = { +var _hoisted_13 = { "class": "bg-white px-4 py-5" }; -var _hoisted_16 = { +var _hoisted_14 = { "class": "elements-detail wider" }; -var _hoisted_17 = { +var _hoisted_15 = { "class": "category flex" }; -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "divider my-10 h-px w-full border-b border-n-20" }, null, -1 /* HOISTED */ @@ -24141,7 +24571,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "rotate-180 pb-2 text-3xl text-white" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Period Detail", + title: _ctx.language.common_lang.period_detail, "back-link": "".concat(_ctx.periodLink) }, { "default": (0, vue_1.withCtx)(function () { @@ -24153,25 +24583,25 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, null, 8 /* PROPS */ , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createVNode)(_component_Btn, { - text: "Add Period", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), icon: "add", link: "".concat(_ctx.periodLink, "/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Period", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.period), link: "".concat(_ctx.periodLink, "/").concat(_ctx.period.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])]; + , ["text", "link"])])]; }), _: 1 /* STABLE */ }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createElementVNode)("div", { + , ["breadcrumb-data", "title", "back-link"]), (0, vue_1.createElementVNode)("div", { "class": "sidebar-open-icon", onClick: _cache[2] || (_cache[2] = function () { _ctx.showSidebar = !_ctx.showSidebar; @@ -24196,21 +24626,25 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("aside", _hoisted_8, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("ul", _hoisted_10, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { href: "#target", "class": (0, vue_1.normalizeClass)(_ctx.linkClasses) - }, [(0, vue_1.createCommentVNode)(" "), _hoisted_11], 2 + }, [(0, vue_1.createCommentVNode)(" "), (0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.target), 1 + /* TEXT */ + )], 2 /* CLASS */ )), [[_directive_smooth_scroll]])]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { href: "#actual", "class": (0, vue_1.normalizeClass)(_ctx.linkClasses) - }, [(0, vue_1.createCommentVNode)(" "), _hoisted_12], 2 + }, [(0, vue_1.createCommentVNode)(" "), (0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.target), 1 + /* TEXT */ + )], 2 /* CLASS */ - )), [[_directive_smooth_scroll]])])])])])), [[_directive_sticky_component]])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [_hoisted_14, (0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.dateFormat(_ctx.periodData.period_start[0].date)) + " - " + (0, vue_1.toDisplayString)(_ctx.dateFormat(_ctx.periodData.period_end[0].date)), 1 + )), [[_directive_smooth_scroll]])])])])])), [[_directive_sticky_component]])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [_hoisted_12, (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.dateFormat(_ctx.periodData.period_start[0].date)) + " - " + (0, vue_1.toDisplayString)(_ctx.dateFormat(_ctx.periodData.period_end[0].date)), 1 /* TEXT */ ), (0, vue_1.createVNode)(_component_TargetValue, { id: "target", data: _ctx.periodData.target }, null, 8 /* PROPS */ - , ["data"]), _hoisted_18, (0, vue_1.createVNode)(_component_ActualValue, { + , ["data"]), _hoisted_16, (0, vue_1.createVNode)(_component_ActualValue, { id: "actual", data: _ctx.periodData.actual }, null, 8 @@ -24248,27 +24682,25 @@ var _hoisted_3 = ["href"]; var _hoisted_4 = { "class": "iati-list-table text-n-40" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("thead", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", { +var _hoisted_5 = { "class": "bg-n-10 text-left" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_6 = { id: "transaction_type", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Start Date - End Date")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_7 = { id: "action", scope: "col", - width: "177px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Action")])])], -1 -/* HOISTED */ -); - -var _hoisted_6 = ["onClick"]; -var _hoisted_7 = ["href"]; -var _hoisted_8 = { - "class": "flex" + wideleth: "177px" }; +var _hoisted_8 = ["onClick"]; var _hoisted_9 = ["href"]; var _hoisted_10 = { + "class": "flex" +}; +var _hoisted_11 = ["href"]; +var _hoisted_12 = { "class": "mt-6" }; @@ -24287,7 +24719,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Periods List", + title: _ctx.language.common_lang.periods_list, "back-link": _ctx.indicatorLink }, { "default": (0, vue_1.withCtx)(function () { @@ -24301,10 +24733,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.periodLink, "/create") }, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add Period", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), icon: "plus", type: "primary" - })], 8 + }, null, 8 + /* PROPS */ + , ["text"])], 8 /* PROPS */ , _hoisted_3)])]; }), @@ -24313,7 +24747,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [_hoisted_5, (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.periodsData.data, function (pe, p) { + , ["breadcrumb-data", "title", "back-link"]), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.start_date) + " - " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.end_date), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_7, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.action), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.periodsData.data, function (pe, p) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: p, "class": "cursor-pointer", @@ -24323,9 +24761,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { "class": "text-sm font-bold leading-relaxed text-n-50", href: "".concat(_ctx.periodLink, "/").concat(pe.id) - }, (0, vue_1.toDisplayString)(pe.period.period_start[0].date ? _ctx.dateFormat(pe.period.period_start[0].date) : 'Missing') + " - " + (0, vue_1.toDisplayString)(pe.period.period_end[0].date ? _ctx.dateFormat(pe.period.period_end[0].date) : 'Missing'), 9 + }, (0, vue_1.toDisplayString)(pe.period.period_start[0].date ? _ctx.dateFormat(pe.period.period_start[0].date) : _ctx.language.common_lang.missing["default"]) + " - " + (0, vue_1.toDisplayString)(pe.period.period_end[0].date ? _ctx.dateFormat(pe.period.period_end[0].date) : _ctx.language.common_lang.missing["default"]), 9 /* TEXT, PROPS */ - , _hoisted_7)]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("a", { + , _hoisted_9)]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("a", { "class": "mr-6 text-n-40", href: "".concat(_ctx.periodLink, "/").concat(pe.id, "/edit") }, [(0, vue_1.createVNode)(_component_svg_vue, { @@ -24333,17 +24771,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-xl" })], 8 /* PROPS */ - , _hoisted_9), (0, vue_1.createVNode)(_component_DeleteAction, { + , _hoisted_11), (0, vue_1.createVNode)(_component_DeleteAction, { "item-type": "period", "item-id": pe.id }, null, 8 /* PROPS */ , ["item-id"])])])], 8 /* PROPS */ - , _hoisted_6); + , _hoisted_8); }), 128 /* KEYED_FRAGMENT */ - ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_10, [_ctx.periodsData && _ctx.periodsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { + ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_12, [_ctx.periodsData && _ctx.periodsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { key: 0, data: _ctx.periodsData, onFetchActivities: _ctx.fetchListings @@ -24378,34 +24816,22 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "w-full mb-3" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_3 = { "class": "flex category" -}, "Actual Value")], -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location Reference: ", -1 -/* HOISTED */ -); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("table", { +}; +var _hoisted_4 = { "class": "w-full mb-3" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("tbody", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("td", { +}; +var _hoisted_5 = { colspan: "2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_6 = { "class": "flex category" -}, "Document Link"), /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; + +var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "w-full h-px my-4 border-b divider border-n-20" -})])])])], -1 +}, null, -1 /* HOISTED */ ); @@ -24418,25 +24844,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: v, "class": "item" - }, [(0, vue_1.createElementVNode)("table", _hoisted_2, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_3, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { + }, [(0, vue_1.createElementVNode)("table", _hoisted_2, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.actual_value.upper_case), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(_ctx.elementSpacing) - }, (0, vue_1.toDisplayString)((_a = tValue.value) !== null && _a !== void 0 ? _a : 'Missing'), 3 + }, (0, vue_1.toDisplayString)((_a = tValue.value) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 3 /* TEXT, CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_4, (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.getLocation(tValue.location) ? _ctx.getLocation(tValue.location) : 'Missing'), 1 + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_reference.upper_case) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.getLocation(tValue.location) ? _ctx.getLocation(tValue.location) : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_5, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.dimension, function (dim, d) { + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension.upper_case) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.dimension, function (dim, d) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": "dimension" - }, (0, vue_1.toDisplayString)((_a = dim.name) !== null && _a !== void 0 ? _a : 'Missing') + " (" + (0, vue_1.toDisplayString)((_b = dim.value) !== null && _b !== void 0 ? _b : 'Missing') + ") ", 1 + }, (0, vue_1.toDisplayString)((_a = dim.name) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]) + " (" + (0, vue_1.toDisplayString)((_b = dim.value) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ ); }), 128 @@ -24445,15 +24877,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_6, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.comment[0].narrative, function (com, c) { + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment.upper_case) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': c !== tValue.comment[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : 'Missing') + "   ", 1 + }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : _ctx.language.common_lang.missing["default"]) + "   ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", null, " (Language: " + (0, vue_1.toDisplayString)(com.language ? _ctx.dlType.language[com.language] : 'Missing') + ") ", 1 + ), (0, vue_1.createElementVNode)("span", null, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(com.language ? _ctx.dlType.language[com.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ )])], 2 /* CLASS */ @@ -24462,7 +24896,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* KEYED_FRAGMENT */ ))])], 2 /* CLASS */ - )])])])]), _hoisted_7, (0, vue_1.createVNode)(_component_DocumentLink, { + )])])])]), (0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link.upper_case), 1 + /* TEXT */ + ), _hoisted_7])])])]), (0, vue_1.createVNode)(_component_DocumentLink, { data: tValue.document_link, type: _ctx.dlType }, null, 8 @@ -24499,41 +24935,28 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "w-full mb-3" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_3 = { "class": "flex category" -}, "Target Value")], -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location Reference: ", -1 -/* HOISTED */ -); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +}; +var _hoisted_4 = { "class": "language mb-1.5" }; -var _hoisted_8 = { +var _hoisted_5 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("table", { +var _hoisted_6 = { "class": "w-full mb-3" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("tbody", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("td", { +}; +var _hoisted_7 = { colspan: "2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_8 = { "class": "flex category" -}, "Document Link"), /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; + +var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "w-full h-px my-4 border-b divider border-n-20" -})])])])], -1 +}, null, -1 /* HOISTED */ ); @@ -24551,25 +24974,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: v, "class": "item" - }, [(0, vue_1.createElementVNode)("table", _hoisted_2, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_3, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { + }, [(0, vue_1.createElementVNode)("table", _hoisted_2, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.common_lang.target_value), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(_ctx.elementSpacing) - }, (0, vue_1.toDisplayString)((_a = tValue.value) !== null && _a !== void 0 ? _a : "Missing"), 3 + }, (0, vue_1.toDisplayString)((_a = tValue.value) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 3 /* TEXT, CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_4, (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.getLocation(tValue.location) ? _ctx.getLocation(tValue.location) : "Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_reference) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.getLocation(tValue.location) ? _ctx.getLocation(tValue.location) : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_5, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.dimension, function (dim, d) { + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.dimension, function (dim, d) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": "dimension" - }, (0, vue_1.toDisplayString)((_a = dim.name) !== null && _a !== void 0 ? _a : "Missing") + " (" + (0, vue_1.toDisplayString)((_b = dim.value) !== null && _b !== void 0 ? _b : "Missing") + ") ", 1 + }, (0, vue_1.toDisplayString)((_a = dim.name) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]) + " (" + (0, vue_1.toDisplayString)((_b = dim.value) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ ); }), 128 @@ -24578,15 +25007,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* CLASS */ ), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["flex", _ctx.elementSpacing]) - }, [_hoisted_6, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.comment[0].narrative, function (com, c) { + }, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tValue.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-1.5': c !== tValue.comment[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, " (Language: " + (0, vue_1.toDisplayString)(com.language ? _ctx.dlType.language[com.language] : "Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_4, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(com.language ? _ctx.dlType.language[com.language] : _ctx.language.common_lang.missing["default"]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : "Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)(com.narrative ? com.narrative : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )], 2 /* CLASS */ @@ -24595,7 +25026,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* KEYED_FRAGMENT */ ))])], 2 /* CLASS */ - )])])])]), _hoisted_9, (0, vue_1.createVNode)(_component_DocumentLink, { + )])])])]), (0, vue_1.createElementVNode)("table", _hoisted_6, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link), 1 + /* TEXT */ + ), _hoisted_9])])])]), (0, vue_1.createVNode)(_component_DocumentLink, { data: tValue.document_link, type: _ctx.dlType }, null, 8 @@ -24669,44 +25102,31 @@ var _hoisted_16 = ["href"]; var _hoisted_17 = { key: 0 }; - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createTextVNode)(" indicator "); - -var _hoisted_19 = { +var _hoisted_18 = { key: 1 }; -var _hoisted_20 = ["href"]; - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createTextVNode)(" add indicator "); - -var _hoisted_22 = { +var _hoisted_19 = ["href"]; +var _hoisted_20 = { "class": "activities__content" }; -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 +var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, null, -1 /* HOISTED */ ); -var _hoisted_24 = { +var _hoisted_22 = { "class": "activities__content--elements -mx-3 -mt-3 flex-wrap xl:flex" }; -var _hoisted_25 = ["href"]; - -var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_23 = ["href"]; +var _hoisted_24 = { "class": "grow text-left italic" -}, " You haven't added any indicator yet. ", -1 -/* HOISTED */ -); - -var _hoisted_27 = { +}; +var _hoisted_25 = { "class": "flex shrink-0 items-center font-bold uppercase text-bluecoral" }; - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_26 = { "class": "grow text-[10px]" -}, "Add new indicator", -1 -/* HOISTED */ -); +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -24740,7 +25160,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "rotate-180 pb-2 text-3xl text-white" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Result Detail", + title: _ctx.language.common_lang.result_detail, "back-link": "".concat(_ctx.activityLink, "/result") }, { "default": (0, vue_1.withCtx)(function () { @@ -24754,12 +25174,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.activityLink, "/result/create") }, [(0, vue_1.createVNode)(_component_Btn, { - text: "Edit Result", + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.result), link: "".concat(_ctx.resultLink, "/edit"), icon: "edit" }, null, 8 /* PROPS */ - , ["link"])], 8 + , ["text", "link"])], 8 /* PROPS */ , _hoisted_3)])]; }), @@ -24768,7 +25188,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createElementVNode)("div", { + , ["breadcrumb-data", "title", "back-link"]), (0, vue_1.createElementVNode)("div", { "class": "sidebar-open-icon", onClick: _cache[2] || (_cache[2] = function () { _ctx.showSidebar = !_ctx.showSidebar; @@ -24822,17 +25242,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { )), _ctx.hasIndicators ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", _hoisted_17, [(0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { href: "#indicator", "class": (0, vue_1.normalizeClass)(_ctx.linkClasses) - }, [(0, vue_1.createCommentVNode)(" "), _hoisted_18], 2 + }, [(0, vue_1.createCommentVNode)(" "), (0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator_nocase), 1 + /* TEXT */ + )], 2 /* CLASS */ - )), [[_directive_smooth_scroll]])])) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.hasIndicators ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", _hoisted_19, [(0, vue_1.createElementVNode)("a", { + )), [[_directive_smooth_scroll]])])) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.hasIndicators ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", _hoisted_18, [(0, vue_1.createElementVNode)("a", { href: "/result/".concat(_ctx.result.id, "/indicator/create"), "class": (0, vue_1.normalizeClass)([_ctx.linkClasses, "border border-dashed border-n-40"]) }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "add", "class": "mr-2 text-n-40" - }), _hoisted_21], 10 + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.add_indicator_nocase), 1 + /* TEXT */ + )], 10 /* CLASS, PROPS */ - , _hoisted_20)])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), (0, vue_1.createElementVNode)("div", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("div", _hoisted_24, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.result.result, function (post, key) { + , _hoisted_19)])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [_hoisted_21, (0, vue_1.createElementVNode)("div", _hoisted_22, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.result.result, function (post, key) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_ResultElement, { @@ -24859,12 +25283,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { key: 0, href: "/result/".concat(_ctx.result.id, "/indicator/create"), "class": "add_indicator flex w-full rounded border border-dashed border-n-40 bg-white px-4 py-3 text-xs leading-normal" - }, [_hoisted_26, (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_24, (0, vue_1.toDisplayString)(_ctx.language.button_lang.not_yet_added_indicator), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "add", "class": "mr-1 shrink-0 text-base" - }), _hoisted_28])], 8 + }), (0, vue_1.createElementVNode)("span", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.new_indicator)), 1 + /* TEXT */ + )])], 8 /* PROPS */ - , _hoisted_25)) : (0, vue_1.createCommentVNode)("v-if", true)])])]); + , _hoisted_23)) : (0, vue_1.createCommentVNode)("v-if", true)])])]); } exports.render = render; @@ -24945,7 +25373,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { type: _ctx.types.language }, null, 8 /* PROPS */ - , ["data", "type"])) : _ctx.elementName === 'aggregation_status' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? 'True' : _ctx.data ? 'False' : 'Missing'), 1 + , ["data", "type"])) : _ctx.elementName === 'aggregation_status' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(parseInt(_ctx.data) ? _ctx.translationLanguage.common_lang["true"] : _ctx.data ? _ctx.translationLanguage.common_lang["false"] : _ctx.translationlanguage.common_lang.missing["default"]), 1 /* TEXT */ )) : _ctx.elementName === 'document_link' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_DocumentLink, { key: 2, @@ -25006,46 +25434,46 @@ var _hoisted_3 = ["href"]; var _hoisted_4 = { "class": "iati-list-table text-n-40" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("thead", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", { +var _hoisted_5 = { "class": "bg-n-10 text-left" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_6 = { id: "transaction_type", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Title")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_7 = { id: "transaction_value", scope: "col", width: "190px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "RESULT TYPE")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_8 = { id: "transaction_date", scope: "col", width: "208px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "AGGREGATION STATUS")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_9 = { id: "action", scope: "col", width: "177px" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Action")])])], -1 -/* HOISTED */ -); - -var _hoisted_6 = ["onClick"]; -var _hoisted_7 = { +}; +var _hoisted_10 = ["onClick"]; +var _hoisted_11 = { "class": "ellipsis relative" }; -var _hoisted_8 = ["href"]; -var _hoisted_9 = { +var _hoisted_12 = ["href"]; +var _hoisted_13 = { "class": "w-52" }; -var _hoisted_10 = { +var _hoisted_14 = { "class": "ellipsis__title--hover" }; -var _hoisted_11 = ["onClick"]; -var _hoisted_12 = ["onClick"]; -var _hoisted_13 = { +var _hoisted_15 = ["onClick"]; +var _hoisted_16 = ["onClick"]; +var _hoisted_17 = { "class": "flex" }; -var _hoisted_14 = ["href"]; -var _hoisted_15 = { +var _hoisted_18 = ["href"]; +var _hoisted_19 = { "class": "mt-6" }; @@ -25064,7 +25492,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Result List", + text: _ctx.language.common_lang.result_list, "back-link": _ctx.activityLink }, { "default": (0, vue_1.withCtx)(function () { @@ -25078,10 +25506,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.activityLink, "/result/create") }, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add Result", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.add), icon: "plus", type: "primary" - })], 8 + }, null, 8 + /* PROPS */ + , ["text"])], 8 /* PROPS */ , _hoisted_3)])]; }), @@ -25090,7 +25520,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createCommentVNode)(" page content "), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [_hoisted_5, (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.resultsData.data, function (result, t, index) { + , ["breadcrumb-data", "text", "back-link"]), (0, vue_1.createCommentVNode)(" page content "), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_7, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.result_type), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_8, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.aggregation_status), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_9, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.action), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.resultsData.data, function (result, t, index) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { @@ -25100,30 +25538,30 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/result/").concat(result.id)); } - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("a", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.activityLink, "/result/").concat(result.id), "class": "ellipsis overflow-hidden text-n-50" }, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.title[0].narrative, 'en')), 9 /* TEXT, PROPS */ - , _hoisted_8), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.title[0].narrative, 'en')), 1 + , _hoisted_12), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(result.result.title[0].narrative, 'en')), 1 /* TEXT */ )])])], 8 /* PROPS */ - , _hoisted_6), (0, vue_1.createElementVNode)("td", { + , _hoisted_10), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer", onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/result/").concat(result.id)); } }, (0, vue_1.toDisplayString)((_a = _ctx.types.resultType[result.result.type]) !== null && _a !== void 0 ? _a : 'Missing'), 9 /* TEXT, PROPS */ - , _hoisted_11), (0, vue_1.createElementVNode)("td", { + , _hoisted_15), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer capitalize", onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/result/").concat(result.id)); } - }, (0, vue_1.toDisplayString)(parseInt(result.result.aggregation_status) ? 'True' : result.result.aggregation_status ? 'False' : 'Missing'), 9 + }, (0, vue_1.toDisplayString)(parseInt(result.result.aggregation_status) ? 'True' : result.result.aggregation_status ? _ctx.language.common_lang["false"] : _ctx.language.common_lang.missing["default"]), 9 /* TEXT, PROPS */ - , _hoisted_12), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("a", { + , _hoisted_16), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("a", { "class": "mr-6 text-n-40", href: "/activity/".concat(result.activity_id, "/result/").concat(result.id, "/edit") }, [(0, vue_1.createVNode)(_component_svg_vue, { @@ -25131,7 +25569,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-xl" })], 8 /* PROPS */ - , _hoisted_14), (0, vue_1.createVNode)(_component_DeleteAction, { + , _hoisted_18), (0, vue_1.createVNode)(_component_DeleteAction, { "item-id": result.id, "item-type": "result" }, null, 8 @@ -25139,7 +25577,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["item-id"])])])]); }), 128 /* KEYED_FRAGMENT */ - ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_15, [_ctx.resultsData && _ctx.resultsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { + ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_19, [_ctx.resultsData && _ctx.resultsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { key: 0, data: _ctx.resultsData, onFetchActivities: _ctx.fetchListings @@ -25180,72 +25618,38 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "mb-3" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Title", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "mb-1 language" }; -var _hoisted_7 = { +var _hoisted_6 = { "class": "text-xs description" }; -var _hoisted_8 = { +var _hoisted_7 = { key: 0 }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Link", -1 -/* HOISTED */ -); - -var _hoisted_10 = ["href"]; -var _hoisted_11 = { +var _hoisted_8 = ["href"]; +var _hoisted_9 = { key: 1 }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Format", -1 -/* HOISTED */ -); - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_14 = { +var _hoisted_10 = { "class": "mb-1 language" }; -var _hoisted_15 = { +var _hoisted_11 = { "class": "text-xs description" }; -var _hoisted_16 = { +var _hoisted_12 = { key: 2 }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Category", -1 -/* HOISTED */ -); - -var _hoisted_18 = { +var _hoisted_13 = { key: 3 }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Language", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +var _hoisted_14 = { "class": "text-xs" }; -var _hoisted_21 = { +var _hoisted_15 = { key: 4 }; - -var _hoisted_22 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Date", -1 -/* HOISTED */ -); - -var _hoisted_23 = { +var _hoisted_16 = { "class": "text-xs" }; @@ -25256,36 +25660,46 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "item elements-detail" }, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(post.title[0].narrative[0].narrative), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.title[0].narrative, function (na, n) { + ), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.title[0].narrative, function (na, n) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: n, "class": "title-content mb-1.5" - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, " (Language: " + (0, vue_1.toDisplayString)(_ctx.type.language[na.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.type.language[na.language]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)(na.narrative), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)(na.narrative), 1 /* TEXT */ )]); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_8, [_hoisted_9, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { + ))])]), post.url ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_7, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { target: "_blank", href: post.url }, (0, vue_1.toDisplayString)(post.url), 9 /* TEXT, PROPS */ - , _hoisted_10)])])) : (0, vue_1.createCommentVNode)("v-if", true), post.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_11, [_hoisted_12, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.format), 1 + , _hoisted_8)])])) : (0, vue_1.createCommentVNode)("v-if", true), post.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_9, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.format), 1 /* TEXT */ - )])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description[0].narrative, function (na, n) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.format), 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.description[0].narrative, function (na, n) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: n, "class": "description-content mb-1.5" - }, [(0, vue_1.createElementVNode)("div", _hoisted_14, " (Language: " + (0, vue_1.toDisplayString)(_ctx.type.language[na.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_10, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.type.language[na.language]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)(na.narrative), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_11, (0, vue_1.toDisplayString)(na.narrative), 1 /* TEXT */ )]); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.category.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_16, [_hoisted_17, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.category, function (cat, c) { + ))])]), post.category.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_12, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.category), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.category, function (cat, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": "mb-1 text-xs" @@ -25294,11 +25708,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ); }), 128 /* KEYED_FRAGMENT */ - ))])])) : (0, vue_1.createCommentVNode)("v-if", true), post.language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_18, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_20, (0, vue_1.toDisplayString)(post.language.map(function (entry) { + ))])])) : (0, vue_1.createCommentVNode)("v-if", true), post.language.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_13, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.language), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)(post.language.map(function (entry) { return _ctx.type.language[entry.language]; }).join(", ")), 1 /* TEXT */ - )])])) : (0, vue_1.createCommentVNode)("v-if", true), post.document_date[0].date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_21, [_hoisted_22, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_23, (0, vue_1.toDisplayString)(post.document_date[0].date), 1 + )])])) : (0, vue_1.createCommentVNode)("v-if", true), post.document_date[0].date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_15, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_16, (0, vue_1.toDisplayString)(post.document_date[0].date), 1 /* TEXT */ )])])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]); }), 128 @@ -25339,13 +25757,9 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "title flex grow items-center" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_5 = { "class": "title text-sm font-bold" -}, "Indicator", -1 -/* HOISTED */ -); - +}; var _hoisted_6 = { "class": "icons flex items-center" }; @@ -25401,258 +25815,121 @@ var _hoisted_21 = { var _hoisted_22 = { "class": "mb-3" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Indicator Title", -1 -/* HOISTED */ -); - -var _hoisted_24 = { +var _hoisted_23 = { "class": "language mb-1" }; -var _hoisted_25 = { +var _hoisted_24 = { "class": "description text-xs" }; -var _hoisted_26 = { +var _hoisted_25 = { key: 0 }; - -var _hoisted_27 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Measure", -1 -/* HOISTED */ -); - -var _hoisted_28 = { +var _hoisted_26 = { key: 1 }; - -var _hoisted_29 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Aggregation Status", -1 -/* HOISTED */ -); - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_31 = { +var _hoisted_27 = { "class": "language mb-1" }; -var _hoisted_32 = { +var _hoisted_28 = { "class": "description text-xs" }; - -var _hoisted_33 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_34 = { +var _hoisted_29 = { key: 0 }; -var _hoisted_35 = { +var _hoisted_30 = { key: 1 }; -var _hoisted_36 = { +var _hoisted_31 = { key: 2 }; -var _hoisted_37 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Link", -1 -/* HOISTED */ -); - -var _hoisted_38 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Baseline", -1 -/* HOISTED */ -); - -var _hoisted_39 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Year: "); - -var _hoisted_40 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_41 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); - -var _hoisted_42 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Date: "); - -var _hoisted_43 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); +var _hoisted_32 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); -var _hoisted_44 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); +var _hoisted_33 = /*#__PURE__*/(0, vue_1.createTextVNode)(" , "); -var _hoisted_45 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Value: "); - -var _hoisted_46 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_47 = { +var _hoisted_34 = { "class": "flex" }; - -var _hoisted_48 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location: ", -1 -/* HOISTED */ -); - -var _hoisted_49 = /*#__PURE__*/(0, vue_1.createTextVNode)("Missing"); - -var _hoisted_50 = { +var _hoisted_35 = { "class": "flex" }; - -var _hoisted_51 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_52 = { +var _hoisted_36 = { "class": "description" }; -var _hoisted_53 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_54 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); - -var _hoisted_55 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Missing) "); +var _hoisted_37 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); -var _hoisted_56 = { +var _hoisted_38 = { "class": "flex" }; - -var _hoisted_57 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_58 = { +var _hoisted_39 = { "class": "description" }; -var _hoisted_59 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_60 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); - -var _hoisted_61 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Language: "); - -var _hoisted_62 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing) "); +var _hoisted_40 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); -var _hoisted_63 = { +var _hoisted_41 = { "class": "flex" }; - -var _hoisted_64 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Document Link: ", -1 -/* HOISTED */ -); - -var _hoisted_65 = { +var _hoisted_42 = { key: 2 }; -var _hoisted_66 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 +var _hoisted_43 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, null, -1 /* HOISTED */ ); -var _hoisted_67 = { +var _hoisted_44 = { "class": "mt-3" }; -var _hoisted_68 = { +var _hoisted_45 = { key: 0, "class": "periods" }; -var _hoisted_69 = { +var _hoisted_46 = { "class": "category" }; -var _hoisted_70 = { +var _hoisted_47 = { "class": "category flex" }; -var _hoisted_71 = { +var _hoisted_48 = { "class": "mr-10" }; -var _hoisted_72 = ["href"]; -var _hoisted_73 = { +var _hoisted_49 = ["href"]; +var _hoisted_50 = { "class": "flex shrink-0 grow justify-between" }; - -var _hoisted_74 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Target Value", -1 -/* HOISTED */ -); - -var _hoisted_75 = { +var _hoisted_51 = { "class": "language target_value mb-1" }; -var _hoisted_76 = { +var _hoisted_52 = { "class": "location_reference flex" }; - -var _hoisted_77 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location Reference: ", -1 -/* HOISTED */ -); - -var _hoisted_78 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_79 = { +var _hoisted_53 = { "class": "dimension flex" }; - -var _hoisted_80 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_81 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_82 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Missing) "); - -var _hoisted_83 = { +var _hoisted_54 = { "class": "flex" }; -var _hoisted_84 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_85 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_86 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); - -var _hoisted_87 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Language: "); - -var _hoisted_88 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing) "); +var _hoisted_55 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); -var _hoisted_89 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Actual Value", -1 -/* HOISTED */ -); - -var _hoisted_90 = { +var _hoisted_56 = { "class": "language target_value mb-1" }; -var _hoisted_91 = { +var _hoisted_57 = { "class": "location_reference flex" }; - -var _hoisted_92 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Location Reference: ", -1 -/* HOISTED */ -); - -var _hoisted_93 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_94 = { +var _hoisted_58 = { "class": "dimension flex" }; - -var _hoisted_95 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Dimension: ", -1 -/* HOISTED */ -); - -var _hoisted_96 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_97 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Missing) "); - -var _hoisted_98 = { +var _hoisted_59 = { "class": "flex" }; -var _hoisted_99 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", null, "Comment: ", -1 -/* HOISTED */ -); - -var _hoisted_100 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing "); - -var _hoisted_101 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); - -var _hoisted_102 = /*#__PURE__*/(0, vue_1.createTextVNode)(" (Language: "); - -var _hoisted_103 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Missing) "); +var _hoisted_60 = /*#__PURE__*/(0, vue_1.createTextVNode)("   "); -var _hoisted_104 = { +var _hoisted_61 = { key: 0, "class": "divider my-8 h-px w-full border-b border-n-20" }; @@ -25667,22 +25944,24 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1.5 text-xl text-bluecoral", icon: "bill" - }), _hoisted_5, (0, vue_1.createCommentVNode)("
    "), (0, vue_1.createCommentVNode)(" ."), (0, vue_1.createCommentVNode)(" not completed"), (0, vue_1.createCommentVNode)("
    ")]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add Indicator", + }), (0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator), 1 + /* TEXT */ + ), (0, vue_1.createCommentVNode)("
    "), (0, vue_1.createCommentVNode)(" ."), (0, vue_1.createCommentVNode)(" not completed"), (0, vue_1.createCommentVNode)("
    ")]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.indicator), icon: "add", link: "/result/".concat(_ctx.result.id, "/indicator/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Show full indicator list", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.show_something.replace(':something', _ctx.language.common_lang.full_indicator), icon: "", design: "bgText", link: "/result/".concat(_ctx.result.id, "/indicator"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_svg_vue, { + , ["text", "link"]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1.5", icon: "core" }), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_svg_vue, { @@ -25700,85 +25979,101 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, (0, vue_1.toDisplayString)(_ctx.getActivityTitle(post.indicator.title[0].narrative, 'en')), 9 /* TEXT, PROPS */ , _hoisted_17)]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("span", _hoisted_19, [(0, vue_1.createVNode)(_component_Btn, { - text: "View Indicator", + text: _ctx.language.button_lang.view_something.replace(':something', _ctx.language.common_lang.indicator), icon: "eye", link: "/result/".concat(_ctx.result.id, "/indicator/").concat(post.id), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Indicator", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.indicator), icon: "edit", link: "/result/".concat(_ctx.result.id, "/indicator/").concat(post.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])]), (0, vue_1.createVNode)(_component_Btn, { - text: "Add Period", + , ["text", "link"])]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.period), icon: "edit", link: "/indicator/".concat(post.id, "/period/create"), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("table", _hoisted_22, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.title[0].narrative, function (title, t) { + , ["text", "link"])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("table", _hoisted_22, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator_title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.title[0].narrative, function (title, t) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: t, "class": (0, vue_1.normalizeClass)(["title-content", { 'mb-1.5': t !== post.indicator.title[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_24, " (Language: " + (0, vue_1.toDisplayString)(_ctx.type.language[title.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_23, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.type.language[title.language]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_25, (0, vue_1.toDisplayString)(title.narrative), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_24, (0, vue_1.toDisplayString)(title.narrative), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.indicator.measure ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_26, [_hoisted_27, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.type.indicatorMeasure[post.indicator.measure]), 1 + ))])]), post.indicator.measure ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_25, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.lanugage.common_lang.measure), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.type.indicatorMeasure[post.indicator.measure]), 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), post.indicator.aggregation_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_26, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.aggregation_status), 1 /* TEXT */ - )])) : (0, vue_1.createCommentVNode)("v-if", true), post.indicator.aggregation_status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_28, [_hoisted_29, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.indicator.aggregation_status != 0), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.indicator.aggregation_status != 0), 1 /* TEXT */ - )])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_30, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.description[0].narrative, function (description, d) { + )])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.description[0].narrative, function (description, d) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": (0, vue_1.normalizeClass)(["title-content", { 'mb-1.5': d !== post.indicator.description[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_31, " (Language: " + (0, vue_1.toDisplayString)(_ctx.type.language[description.language]) + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_27, " (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)(_ctx.type.language[description.language]) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_32, (0, vue_1.toDisplayString)(description.narrative), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_28, (0, vue_1.toDisplayString)(description.narrative), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_33, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.reference, function (ref, r) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.references), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.reference, function (ref, r) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: r, "class": (0, vue_1.normalizeClass)({ 'mb-1.5': r !== post.indicator.reference.length - 1 }) - }, [ref.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_34, " Vocabulary: " + (0, vue_1.toDisplayString)(ref.vocabulary) + ", ", 1 + }, [ref.vocabulary ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary) + ": " + (0, vue_1.toDisplayString)(ref.vocabulary) + ", ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), ref.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_35, " Code: " + (0, vue_1.toDisplayString)(ref.code) + ", ", 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), ref.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_30, " Code: " + (0, vue_1.toDisplayString)(ref.code) + ", ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), ref.indicator_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_36, " Indicator URI: " + (0, vue_1.toDisplayString)(ref.indicator_uri), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), ref.indicator_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_31, (0, vue_1.toDisplayString)(_ctx.language.common_lang.indicator_uri) + ": " + (0, vue_1.toDisplayString)(ref.indicator_uri), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_37, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.indicator.document_link.length) + " documents ", 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_38, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.baseline, function (base, b) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(post.indicator.document_link.length) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.documents), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.baseline), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.indicator.baseline, function (base, b) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: b, "class": (0, vue_1.normalizeClass)({ 'mb-1.5': b !== post.indicator.baseline.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("span", null, [_hoisted_39, base.year ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + }, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.year) + ": ", 1 + /* TEXT */ + ), base.year ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.year), 1 /* TEXT */ @@ -25786,9 +26081,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_40], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_41]), (0, vue_1.createElementVNode)("span", null, [_hoisted_42, base.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_32]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.date) + ": ", 1 + /* TEXT */ + ), base.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.date), 1 /* TEXT */ @@ -25796,9 +26095,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_43], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_44]), (0, vue_1.createElementVNode)("span", null, [_hoisted_45, base.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_33]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.value) + ": ", 1 + /* TEXT */ + ), base.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(base.value), 1 /* TEXT */ @@ -25806,9 +26109,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_46], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_47, [_hoisted_48, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.location, function (loc, l) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.location, function (loc, l) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: l, "class": (0, vue_1.normalizeClass)(["item", { @@ -25822,14 +26129,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_49], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_50, [_hoisted_51, (0, vue_1.createElementVNode)("div", _hoisted_52, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.dimension, function (dim, d) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_36, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.dimension, function (dim, d) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": (0, vue_1.normalizeClass)({ @@ -25843,9 +26154,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_53], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_54]), (0, vue_1.createElementVNode)("span", null, [dim.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_37]), (0, vue_1.createElementVNode)("span", null, [dim.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(dim.value) + ") ", 1 /* TEXT */ @@ -25853,14 +26166,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_55], 64 + }, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_56, [_hoisted_57, (0, vue_1.createElementVNode)("div", _hoisted_58, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.comment[0].narrative, function (com, c) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_39, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(base.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["item", { @@ -25874,9 +26191,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_59], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_60]), (0, vue_1.createElementVNode)("span", null, [_hoisted_61, com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_40]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": ", 1 + /* TEXT */ + ), com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.type.language[com.language]) + ") ", 1 /* TEXT */ @@ -25884,59 +26205,67 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_62], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_63, [_hoisted_64, (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(base.document_link.length) + " document ", 1 + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_41, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.document_link) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(base.document_link.length) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.document), 1 /* TEXT */ )])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), post.periods.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_65, [_hoisted_66, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_67, [(0, vue_1.createVNode)(_component_NotYet, { + ))])]), post.periods.length === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_42, [_hoisted_43, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_44, [(0, vue_1.createVNode)(_component_NotYet, { link: "/indicator/".concat(post.id, "/period/create"), description: "You haven't added any periods yet.", "btn-text": "Add period", "class": "w-[442px]" }, null, 8 /* PROPS */ - , ["link"])])])])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), (0, vue_1.createCommentVNode)(" for periods "), post.periods.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_68, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.periods, function (item, key) { + , ["link"])])])])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), (0, vue_1.createCommentVNode)(" for periods "), post.periods.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_45, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.periods, function (item, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("table", { key: key - }, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_69, " Period " + (0, vue_1.toDisplayString)(Number(key) + 1), 1 + }, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_46, (0, vue_1.toDisplayString)(_ctx.language.common_lang.period) + " " + (0, vue_1.toDisplayString)(Number(key) + 1), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_70, [(0, vue_1.createElementVNode)("div", _hoisted_71, [(0, vue_1.createElementVNode)("a", { + )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_47, [(0, vue_1.createElementVNode)("div", _hoisted_48, [(0, vue_1.createElementVNode)("a", { "class": "text-n-50", href: "/indicator/".concat(post.id, "/period/").concat(item.id) }, (0, vue_1.toDisplayString)(_ctx.dateFormat(item.period.period_start[0].date, 'MMMM DD, YYYY')) + " - " + (0, vue_1.toDisplayString)(_ctx.dateFormat(item.period.period_end[0].date, 'MMMM DD, YYYY')), 9 /* TEXT, PROPS */ - , _hoisted_72)]), (0, vue_1.createElementVNode)("div", _hoisted_73, [(0, vue_1.createVNode)(_component_Btn, { - text: "View Period", + , _hoisted_49)]), (0, vue_1.createElementVNode)("div", _hoisted_50, [(0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.view_something.replace(':something', _ctx.language.common_lang.period), icon: "eye", link: "/indicator/".concat(post.id, "/period/").concat(item.id), "class": "mr-2.5" }, null, 8 /* PROPS */ - , ["link"]), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Period", + , ["text", "link"]), (0, vue_1.createVNode)(_component_Btn, { + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.period), icon: "edit", link: "/indicator/".concat(post.id, "/period/").concat(item.id, "/edit") }, null, 8 /* PROPS */ - , ["link"])])])])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_74, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(item.period.target, function (tar, t) { + , ["text", "link"])])])])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.target_value), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(item.period.target, function (tar, t) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: t, "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': t !== item.period.target.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_75, (0, vue_1.toDisplayString)(tar.value), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_51, (0, vue_1.toDisplayString)(tar.value), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_76, [_hoisted_77, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.location, function (loc, l) { + ), (0, vue_1.createElementVNode)("div", _hoisted_52, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_reference) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.location, function (loc, l) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: l, "class": (0, vue_1.normalizeClass)(["item", { @@ -25950,14 +26279,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_78], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_79, [_hoisted_80, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.dimension, function (dim, d) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_53, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.dimension, function (dim, d) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": (0, vue_1.normalizeClass)(["item", { @@ -25971,7 +26304,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_81], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))]), (0, vue_1.createElementVNode)("span", null, [dim.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 @@ -25981,14 +26316,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_82], 64 + }, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_83, [_hoisted_84, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.comment[0].narrative, function (com, c) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_54, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["item", { @@ -26002,9 +26341,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_85], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_86]), (0, vue_1.createElementVNode)("span", null, [_hoisted_87, com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_55]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": ", 1 + /* TEXT */ + ), com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.type.language[com.language]) + ") ", 1 /* TEXT */ @@ -26012,7 +26355,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_88], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ @@ -26024,15 +26369,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_89, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(item.period.actual, function (tar, t) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.actual_value), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(item.period.actual, function (tar, t) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: t, "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': t !== item.period.actual.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_90, (0, vue_1.toDisplayString)(tar.value), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_56, (0, vue_1.toDisplayString)(tar.value), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_91, [_hoisted_92, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.location, function (loc, l) { + ), (0, vue_1.createElementVNode)("div", _hoisted_57, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.location_reference) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.location, function (loc, l) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: l, "class": (0, vue_1.normalizeClass)(["item", { @@ -26046,14 +26395,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_93], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_94, [_hoisted_95, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.dimension, function (dim, d) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_58, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.dimension) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.dimension, function (dim, d) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: d, "class": (0, vue_1.normalizeClass)(["item", { @@ -26067,7 +26420,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_96], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))]), (0, vue_1.createElementVNode)("span", null, [dim.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 @@ -26077,14 +26432,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_97], 64 + }, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_98, [_hoisted_99, (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.comment[0].narrative, function (com, c) { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_59, [(0, vue_1.createElementVNode)("div", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.comment) + ": ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(tar.comment[0].narrative, function (com, c) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: c, "class": (0, vue_1.normalizeClass)(["item", { @@ -26098,9 +26457,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_100], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ - )), _hoisted_101]), (0, vue_1.createElementVNode)("span", null, [_hoisted_102, com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { + )), _hoisted_60]), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createTextVNode)(" (" + (0, vue_1.toDisplayString)(_ctx.language.common_lang.language) + ": ", 1 + /* TEXT */ + ), com.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 0 }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.type.language[com.language]) + ") ", 1 /* TEXT */ @@ -26108,7 +26471,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* STABLE_FRAGMENT */ )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 - }, [_hoisted_103], 64 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]) + ") ", 1 + /* TEXT */ + )], 64 /* STABLE_FRAGMENT */ ))])])], 2 /* CLASS */ @@ -26123,7 +26488,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { ))])])])]); }), 128 /* KEYED_FRAGMENT */ - ))])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), ri != _ctx.indicatorData.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_104)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 + ))])) : (0, vue_1.createCommentVNode)("v-if", true)])])]), ri != _ctx.indicatorData.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_61)) : (0, vue_1.createCommentVNode)("v-if", true)], 64 /* STABLE_FRAGMENT */ ); }), 128 @@ -26160,16 +26525,7 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "mb-3" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_6 = ["href"]; +var _hoisted_4 = ["href"]; function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.referenceData, function (ref, r) { @@ -26180,14 +26536,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.type[ref.vocabulary]), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(ref.code), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(ref.code), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { target: "_blank", href: ref.vocabulary_uri }, (0, vue_1.toDisplayString)(ref.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_6)])])])])])], 2 + , _hoisted_4)])])])])])], 2 /* CLASS */ ); }), 128 @@ -26222,7 +26582,7 @@ var _hoisted_1 = { function render(_ctx, _cache, $props, $setup, $data, $options) { var _a; - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)((_a = _ctx.type[_ctx.typeData]) !== null && _a !== void 0 ? _a : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)((_a = _ctx.type[_ctx.typeData]) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ ); } @@ -26363,7 +26723,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "rotate-180 pb-2 text-3xl text-white" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "".concat((_a = _ctx.transactionData.reference) !== null && _a !== void 0 ? _a : 'Untitled', " - Transaction detail"), + title: "".concat((_a = _ctx.transactionData.reference) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.untitled, " - ").concat(_ctx.language.common_lang.transaction_detail), "back-link": "".concat(_ctx.activityLink, "/transaction") }, { "default": (0, vue_1.withCtx)(function () { @@ -26375,12 +26735,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, null, 8 /* PROPS */ , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createVNode)(_component_Btn, { - text: "Edit Transaction", + text: _ctx.language.button_lang.edit_something.replace(':something', _ctx.language.common_lang.transaction), link: "".concat(_ctx.activityLink, "/transaction/").concat(_ctx.transaction.id, "/edit"), icon: "edit" }, null, 8 /* PROPS */ - , ["link"])])]; + , ["text", "link"])])]; }), _: 1 /* STABLE */ @@ -26585,7 +26945,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { data: _ctx.elementData }, null, 8 /* PROPS */ - , ["data"])) : _ctx.elementName === 'humanitarian' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.data === "0" ? "False" : _ctx.data === "1" ? "True" : "Missing"), 1 + , ["data"])) : _ctx.elementName === 'humanitarian' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.data === "0" ? _ctx.language.common_lang["false"] : _ctx.data === "1" ? _ctx.language.common_lang["true"] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )) : _ctx.elementName === 'provider_organization' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_ProviderOrganization, { key: 6, @@ -26632,7 +26992,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { data: _ctx.elementData }, null, 8 /* PROPS */ - , ["data"])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, (0, vue_1.toDisplayString)((_a = _ctx.data) !== null && _a !== void 0 ? _a : "Missing"), 1 + , ["data"])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_11, (0, vue_1.toDisplayString)((_a = _ctx.data) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ ))])])], 10 /* CLASS, PROPS */ @@ -26669,47 +27029,48 @@ var _hoisted_3 = ["href"]; var _hoisted_4 = { "class": "iati-list-table text-n-40" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("thead", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("tr", { +var _hoisted_5 = { "class": "bg-n-10" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_6 = { id: "internal_ref", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Internal Ref")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_7 = { id: "transaction_type", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Transaction Type")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_8 = { id: "transaction_value", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Transaction Value")]), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_9 = { id: "transaction_date", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Transaction Date")]), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" Status"), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createCommentVNode)(" "), /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_10 = { id: "action", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Action")])])], -1 -/* HOISTED */ -); - -var _hoisted_6 = ["onClick"]; -var _hoisted_7 = { +}; +var _hoisted_11 = ["onClick"]; +var _hoisted_12 = { "class": "ellipsis relative" }; -var _hoisted_8 = ["href"]; -var _hoisted_9 = { +var _hoisted_13 = ["href"]; +var _hoisted_14 = { "class": "w-52" }; -var _hoisted_10 = { +var _hoisted_15 = { "class": "ellipsis__title--hover" }; -var _hoisted_11 = ["onClick"]; -var _hoisted_12 = ["onClick"]; -var _hoisted_13 = ["onClick"]; -var _hoisted_14 = { +var _hoisted_16 = ["onClick"]; +var _hoisted_17 = ["onClick"]; +var _hoisted_18 = ["onClick"]; +var _hoisted_19 = { "class": "flex text-n-40" }; -var _hoisted_15 = ["href"]; -var _hoisted_16 = { +var _hoisted_20 = ["href"]; +var _hoisted_21 = { "class": "mt-6" }; @@ -26728,7 +27089,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createVNode)(_component_PageTitle, { "breadcrumb-data": _ctx.breadcrumbData, - title: "Transaction List", + title: _ctx.language.common_lang.transaction_list, "back-link": _ctx.activityLink }, { "default": (0, vue_1.withCtx)(function () { @@ -26742,10 +27103,12 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.activityLink, "/transaction/create") }, [(0, vue_1.createVNode)(_component_Btn, { - text: "Add Transaction", + text: _ctx.language.button_lang.add_something.replace(':something', _ctx.language.common_lang.transaction), icon: "plus", type: "primary" - })], 8 + }, null, 8 + /* PROPS */ + , ["text"])], 8 /* PROPS */ , _hoisted_3)])]; }), @@ -26754,7 +27117,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, 8 /* PROPS */ - , ["breadcrumb-data", "back-link"]), (0, vue_1.createCommentVNode)(" page content "), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [_hoisted_5, (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.transactionsData.data, function (trans, t, index) { + , ["breadcrumb-data", "title", "back-link"]), (0, vue_1.createCommentVNode)(" page content "), (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_5, [(0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.internal) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.ref), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_7, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.transaction) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.type), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_8, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.transaction) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.value), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_9, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.transaction) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.date), 1 + /* TEXT */ + )]), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" Status"), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createCommentVNode)(" "), (0, vue_1.createElementVNode)("th", _hoisted_10, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.action), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("tbody", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.transactionsData.data, function (trans, t, index) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { @@ -26764,31 +27137,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/transaction/").concat(trans.id)); } - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("a", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("a", { href: "".concat(_ctx.activityLink, "/transaction/").concat(trans.id) }, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(trans.transaction.reference && trans.transaction.reference !== '' ? trans.transaction.reference : '- - -'), 1 /* TEXT */ )], 8 /* PROPS */ - , _hoisted_8), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)(trans.transaction.reference && trans.transaction.reference !== '' ? trans.transaction.reference : '- - -'), 1 + , _hoisted_13), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("span", _hoisted_15, (0, vue_1.toDisplayString)(trans.transaction.reference && trans.transaction.reference !== '' ? trans.transaction.reference : '- - -'), 1 /* TEXT */ )])])], 8 /* PROPS */ - , _hoisted_6), (0, vue_1.createElementVNode)("td", { + , _hoisted_11), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer", onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/transaction/").concat(trans.id)); } }, (0, vue_1.toDisplayString)((_a = _ctx.types.transactionType[trans.transaction.transaction_type[0].transaction_type_code]) !== null && _a !== void 0 ? _a : '- - -'), 9 /* TEXT, PROPS */ - , _hoisted_11), (0, vue_1.createElementVNode)("td", { + , _hoisted_16), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer truncate", onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/transaction/").concat(trans.id)); } }, (0, vue_1.toDisplayString)(trans.transaction.value[0].amount ? Number(trans.transaction.value[0].amount).toLocaleString() : '- - -'), 9 /* TEXT, PROPS */ - , _hoisted_12), (0, vue_1.createElementVNode)("td", { + , _hoisted_17), (0, vue_1.createElementVNode)("td", { "class": "cursor-pointer", onClick: function onClick($event) { return _ctx.handleNavigate("".concat(_ctx.activityLink, "/transaction/").concat(trans.id)); @@ -26797,7 +27170,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* TEXT */ )], 8 /* PROPS */ - , _hoisted_13), (0, vue_1.createCommentVNode)(" completed"), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("a", { + , _hoisted_18), (0, vue_1.createCommentVNode)(" completed"), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("a", { "class": "mr-6", href: "".concat(_ctx.activityLink, "/transaction/").concat(trans.id, "/edit") }, [(0, vue_1.createVNode)(_component_svg_vue, { @@ -26805,7 +27178,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-xl" })], 8 /* PROPS */ - , _hoisted_15), (0, vue_1.createVNode)(_component_DeleteAction, { + , _hoisted_20), (0, vue_1.createVNode)(_component_DeleteAction, { "item-id": trans.id, "item-type": "transaction" }, null, 8 @@ -26813,7 +27186,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["item-id"])])])]); }), 128 /* KEYED_FRAGMENT */ - ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_16, [_ctx.transactionsData && _ctx.transactionsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { + ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_21, [_ctx.transactionsData && _ctx.transactionsData.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Pagination, { key: 0, data: _ctx.transactionsData, onFetchActivities: _ctx.fetchListings @@ -26854,27 +27227,22 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "mb-3" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "text-sm" }; -var _hoisted_7 = { +var _hoisted_6 = { key: 0 }; -var _hoisted_8 = { +var _hoisted_7 = { key: 1 }; -var _hoisted_9 = { +var _hoisted_8 = { key: 2 }; -var _hoisted_10 = { +var _hoisted_9 = { key: 3 }; -var _hoisted_11 = { +var _hoisted_10 = { key: 4 }; @@ -26887,17 +27255,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': i !== Object.keys(_ctx.atData).length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)((_a = _ctx.type.aidTypeVocabulary[at.aid_type_vocabulary]) !== null && _a !== void 0 ? _a : 'Missing'), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)((_a = _ctx.type.aidTypeVocabulary[at.aid_type_vocabulary]) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_6, [at.aid_type_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.type.aidType[at.aid_type_code]), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, [at.aid_type_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.type.aidType[at.aid_type_code]), 1 /* TEXT */ - )) : at.cash_and_voucher_modalities ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.type.cashAndVoucherModalities[at.cash_and_voucher_modalities]), 1 + )) : at.cash_and_voucher_modalities ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.type.cashAndVoucherModalities[at.cash_and_voucher_modalities]), 1 /* TEXT */ - )) : at.earmarking_category ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.type.earMarkingCategory[at.earmarking_category]), 1 + )) : at.earmarking_category ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.type.earMarkingCategory[at.earmarking_category]), 1 /* TEXT */ - )) : at.earmarking_modality ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.type.earMarkingModality[at.earmarking_modality]), 1 + )) : at.earmarking_modality ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.type.earMarkingModality[at.earmarking_modality]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, " Missing "))])])])])])], 2 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))])])])])])], 2 /* CLASS */ ); }), 128 @@ -26941,9 +27313,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["title-content", { 'mb-4': i !== Object.keys(_ctx.tdData[0].narrative).length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, " (" + (0, vue_1.toDisplayString)(post.language ? "Language: ".concat(_ctx.type.languages[post.language]) : 'Language Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, " (" + (0, vue_1.toDisplayString)(post.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[post.language]) : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.language)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)((_a = post.narrative) !== null && _a !== void 0 ? _a : 'Narrative Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)((_a = post.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -26978,7 +27350,7 @@ var _hoisted_1 = { }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.code[0].disbursement_channel_code ? _ctx.type.disbursementChannel[_ctx.code[0].disbursement_channel_code] : 'Disbursement Channel Code Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.code[0].disbursement_channel_code ? _ctx.type.disbursementChannel[_ctx.code[0].disbursement_channel_code] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.disbursement_channel_code)), 1 /* TEXT */ ); } @@ -27008,7 +27380,7 @@ var _hoisted_1 = { }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.financeData[0].finance_type ? _ctx.type.financeType[_ctx.financeData[0].finance_type] : 'Finance Type Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.financeData[0].finance_type ? _ctx.type.financeType[_ctx.financeData[0].finance_type] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.finance_type)), 1 /* TEXT */ ); } @@ -27038,7 +27410,7 @@ var _hoisted_1 = { }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.flowData[0].flow_type ? _ctx.type.flowType[_ctx.flowData[0].flow_type] : 'Flow Type Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.flowData[0].flow_type ? _ctx.type.flowType[_ctx.flowData[0].flow_type] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.flow_type)), 1 /* TEXT */ ); } @@ -27072,48 +27444,32 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "mb-3" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organisation Identifier Code", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +var _hoisted_4 = { "class": "text-sm" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +var _hoisted_5 = { "class": "language mb-1.5" }; -var _hoisted_8 = { +var _hoisted_6 = { "class": "text-sm" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Provider Activity ID", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_7 = { "class": "text-sm" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Type", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_8 = { "class": "text-sm" }; function render(_ctx, _cache, $props, $setup, $data, $options) { var _a, _b; - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)((_a = _ctx.PoData[0].organization_identifier_code) !== null && _a !== void 0 ? _a : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organiser_identifier_code), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.PoData[0].narrative, function (po, i) { + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)((_a = _ctx.PoData[0].organization_identifier_code) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.PoData[0].narrative, function (po, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -27121,18 +27477,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["mb-4 title-content", { 'mb-4': i !== _ctx.PoData[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, " ( " + (0, vue_1.toDisplayString)(po.language ? "Language: ".concat(_ctx.type.languages[po.language]) : 'Language: Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, " ( " + (0, vue_1.toDisplayString)(po.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[po.language]) : "".concat(_ctx.language.common_lang.language, ":").concat(_ctx.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)((_a = po.narrative) !== null && _a !== void 0 ? _a : 'Narrative Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)((_a = po.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_9, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_b = _ctx.PoData[0].provider_activity_id) !== null && _b !== void 0 ? _b : 'Missing'), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.provider_activity_id), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_b = _ctx.PoData[0].provider_activity_id) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.type), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.PoData[0].type ? _ctx.type.organizationType[_ctx.PoData[0].type] : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.PoData[0].type ? _ctx.type.organizationType[_ctx.PoData[0].type] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )])])])])])]); } @@ -27166,48 +27526,32 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "mb-3" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Organisation Identifier Code", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +var _hoisted_4 = { "class": "text-sm" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +var _hoisted_5 = { "class": "language mb-1.5" }; -var _hoisted_8 = { +var _hoisted_6 = { "class": "text-sm" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Provider Activity ID", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_7 = { "class": "text-sm" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Type", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_8 = { "class": "text-sm" }; function render(_ctx, _cache, $props, $setup, $data, $options) { var _a, _b; - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, (0, vue_1.toDisplayString)((_a = _ctx.PoData[0].organization_identifier_code) !== null && _a !== void 0 ? _a : 'Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("table", _hoisted_3, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.organiser_identifier_code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)((_a = _ctx.PoData[0].organization_identifier_code) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.defualt), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.PoData[0].narrative, function (po, i) { + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.PoData[0].narrative, function (po, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -27215,18 +27559,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["mb-4 title-content", { 'mb-4': i !== _ctx.PoData[0].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_7, " (" + (0, vue_1.toDisplayString)(po.language ? "Language: ".concat(_ctx.type.languages[po.language]) : 'Language Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, " (" + (0, vue_1.toDisplayString)(po.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[po.language]) : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.language)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)((_a = po.narrative) !== null && _a !== void 0 ? _a : 'Narrative Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)((_a = po.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_9, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_b = _ctx.PoData[0].receiver_activity_id) !== null && _b !== void 0 ? _b : 'Missing'), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.provider_activity_id), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_b = _ctx.PoData[0].receiver_activity_id) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.PoData[0].type ? _ctx.type.organizationType[_ctx.PoData[0].type] : 'Missing'), 1 + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.type), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.PoData[0].type ? _ctx.type.organizationType[_ctx.PoData[0].type] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ )])])])])])]); } @@ -27263,15 +27611,10 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "mb-3" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "language mb-1.5" }; -var _hoisted_7 = { +var _hoisted_6 = { "class": "text-sm" }; @@ -27284,7 +27627,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.type.countryCode[cou.country_code]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(cou.narrative, function (sd, i) { + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(cou.narrative, function (sd, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -27292,9 +27637,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["mb-4 title-content", { 'mb-4': i !== cou.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, " ( " + (0, vue_1.toDisplayString)(sd.language ? "Language: ".concat(_ctx.type.languages[sd.language]) : 'Language Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_5, " ( " + (0, vue_1.toDisplayString)(sd.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[sd.language]) : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.language)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : 'Narrative Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_6, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -27341,35 +27686,20 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "mb-3" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { key: 0 }; -var _hoisted_7 = { +var _hoisted_6 = { key: 1 }; -var _hoisted_8 = { +var _hoisted_7 = { key: 0 }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_10 = ["href"]; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_12 = { +var _hoisted_8 = ["href"]; +var _hoisted_9 = { "class": "language mb-1.5" }; -var _hoisted_13 = { +var _hoisted_10 = { "class": "text-sm" }; @@ -27384,16 +27714,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.type.regionVocabulary[cou.region_vocabulary]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [cou.region_vocabulary === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(cou.region_code ? _ctx.type.regionCode[cou.region_code] : "Code Missing"), 1 + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)((_a = cou.custom_code) !== null && _a !== void 0 ? _a : "Code Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, [cou.region_vocabulary === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(cou.region_code ? _ctx.type.regionCode[cou.region_code] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.code)), 1 /* TEXT */ - ))])]), cou.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_8, [_hoisted_9, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)((_a = cou.custom_code) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.code)), 1 + /* TEXT */ + ))])]), cou.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_7, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("a", { target: "_blank", href: cou.vocabulary_uri }, (0, vue_1.toDisplayString)(cou.vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_10)])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(cou.narrative, function (sd, i) { + , _hoisted_8)])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(cou.narrative, function (sd, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -27401,9 +27737,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["mb-4 title-content", { 'mb-4': i !== cou.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_12, " ( " + (0, vue_1.toDisplayString)(sd.language ? "Language: ".concat(_ctx.type.languages[sd.language]) : "Language Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, " ( " + (0, vue_1.toDisplayString)(sd.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[sd.language]) : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.language)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -27450,59 +27786,44 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "mb-3" }; - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_5 = { "class": "text-sm" }; -var _hoisted_7 = { +var _hoisted_6 = { key: 0 }; -var _hoisted_8 = { +var _hoisted_7 = { key: 1 }; -var _hoisted_9 = { +var _hoisted_8 = { key: 2 }; -var _hoisted_10 = { +var _hoisted_9 = { key: 3 }; -var _hoisted_11 = { +var _hoisted_10 = { key: 4 }; -var _hoisted_12 = { +var _hoisted_11 = { key: 0 }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_14 = { +var _hoisted_12 = { "class": "text-sm" }; -var _hoisted_15 = { +var _hoisted_13 = { key: 0 }; -var _hoisted_16 = { +var _hoisted_14 = { href: "sec.vocabulary_uri", target: "_blank" }; -var _hoisted_17 = { +var _hoisted_15 = { key: 1 }; - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_19 = { +var _hoisted_16 = { "class": "language mb-1.5" }; -var _hoisted_20 = { +var _hoisted_17 = { "class": "text-sm" }; @@ -27515,21 +27836,29 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': s !== Object.keys(_ctx.sector).length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(sec.sector_vocabulary ? _ctx.type.sectorVocabulary[sec.sector_vocabulary] : "Vocabulary Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(sec.sector_vocabulary ? _ctx.type.sectorVocabulary[sec.sector_vocabulary] : _ctx.language.common_lang.missing.vocabulary), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, [sec.text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)((_a = sec.text) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )) : sec.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(sec.code ? _ctx.type.sectorCode[sec.code] : _ctx.language.common_lang.missing["default"]), 1 + /* TEXT */ + )) : sec.category_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(sec.category_code ? _ctx.type.sectorCategory[sec.category_code] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("table", _hoisted_4, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_6, [sec.text ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)((_a = sec.text) !== null && _a !== void 0 ? _a : "Missing"), 1 + )) : sec.sdg_goal ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(sec.sdg_goal ? _ctx.type.unsdgGoals[sec.sdg_goal] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : sec.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(sec.code ? _ctx.type.sectorCode[sec.code] : "Missing"), 1 + )) : sec.sdg_target ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(sec.sdg_target ? _ctx.type.unsdgTargets[sec.sdg_target] : _ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : sec.category_code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(sec.category_code ? _ctx.type.sectorCategory[sec.category_code] : "Missing"), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true)])])]), sec.sector_vocabulary === '98' || sec.sector_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_11, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.vocabulary_uri), 1 /* TEXT */ - )) : sec.sdg_goal ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(sec.sdg_goal ? _ctx.type.unsdgGoals[sec.sdg_goal] : "Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_12, [sec.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, [(0, vue_1.createElementVNode)("a", _hoisted_14, (0, vue_1.toDisplayString)(sec.vocabulary_uri), 1 /* TEXT */ - )) : sec.sdg_target ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(sec.sdg_target ? _ctx.type.unsdgTargets[sec.sdg_target] : "Missing"), 1 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])])]), sec.sector_vocabulary === '98' || sec.sector_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_12, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", _hoisted_14, [sec.vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, [(0, vue_1.createElementVNode)("a", _hoisted_16, (0, vue_1.toDisplayString)(sec.vocabulary_uri), 1 + ))])])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.description), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, " Missing"))])])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_18, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(sec.narrative, function (sd, i) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(sec.narrative, function (sd, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -27537,9 +27866,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["title-content mb-4", { 'mb-4': i !== sec.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_19, " ( " + (0, vue_1.toDisplayString)(sd.language ? "Language: ".concat(_ctx.type.languages[sd.language]) : "Language Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_16, " ( " + (0, vue_1.toDisplayString)(sd.language ? "".concat(_ctx.language.common_lang.language, ": ").concat(_ctx.type.languages[sd.language]) : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.language)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_20, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)((_a = sd.narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -27579,7 +27908,7 @@ var _hoisted_1 = { }; function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.tsData[0].tied_status_code ? _ctx.type.tiedStatusType[_ctx.tsData[0].tied_status_code] : 'Tied Status Code Missing'), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, (0, vue_1.toDisplayString)(_ctx.tsData[0].tied_status_code ? _ctx.type.tiedStatusType[_ctx.tsData[0].tied_status_code] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.tied_status)), 1 /* TEXT */ ); } @@ -27605,7 +27934,7 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.toDisplayString)(_ctx.date[0].date ? _ctx.dateFormat(_ctx.date[0].date) : 'Date Missing'); + return (0, vue_1.toDisplayString)(_ctx.date[0].date ? _ctx.dateFormat(_ctx.date[0].date) : _ctx.language.common_lang.missing.date); } exports.render = render; @@ -27629,7 +27958,7 @@ exports.render = void 0; var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); function render(_ctx, _cache, $props, $setup, $data, $options) { - return (0, vue_1.toDisplayString)(_ctx.code[0].transaction_type_code ? _ctx.type.transactionType[_ctx.code[0].transaction_type_code] : 'Code Missing'); + return (0, vue_1.toDisplayString)(_ctx.code[0].transaction_type_code ? _ctx.type.transactionType[_ctx.code[0].transaction_type_code] : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.code)); } exports.render = render; @@ -27669,7 +27998,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'text-[64px]': _ctx.value[0].amount }) - }, (0, vue_1.toDisplayString)(_ctx.value[0].amount ? Number(_ctx.value[0].amount).toLocaleString() : "Amount Missing"), 3 + }, (0, vue_1.toDisplayString)(_ctx.value[0].amount ? Number(_ctx.value[0].amount).toLocaleString() : _ctx.language.common_lang.missing.something.replace(':something', _ctx.language.common_lang.amount)), 3 /* TEXT, CLASS */ ), _ctx.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.value[0].currency), 1 /* TEXT */ @@ -27724,76 +28053,58 @@ var _hoisted_7 = { var _hoisted_8 = { "class": "inline-flex min-h-[48px] grow items-center" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("h4", { +var _hoisted_9 = { "class": "ellipsis__title relative mr-4 font-bold" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { - "class": "ellipsis__title overflow-hidden" -}, " Import Activity ")], -1 -/* HOISTED */ -); - +}; var _hoisted_10 = { - "class": "tooltip-btn" + "class": "ellipsis__title overflow-hidden" }; var _hoisted_11 = { + "class": "tooltip-btn" +}; +var _hoisted_12 = { "class": "" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "What is an activity?", -1 -/* HOISTED */ -); - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_13 = { "class": "tooltip-btn__content z-[1]" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_14 = { "class": "content" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_15 = { "class": "mb-1.5 text-caption-c1 font-bold text-bluecoral" -}, " What is an activity? "), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, [/*#__PURE__*/(0, vue_1.createTextVNode)(" You need to provide data about your organisation's development and humanitarian 'activities'. The unit of work described by an 'activity' is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country's government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months. "), /*#__PURE__*/(0, vue_1.createElementVNode)("br"), /*#__PURE__*/(0, vue_1.createTextVNode)(" Therefore your organisation will need to determine how it will divide its work internally into activities. Read the "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - target: "_blank", - rel: "noopener noreferrer", - href: "/publishing-checklist", - "class": "text-bluecoral" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Publishing Checklist")]), /*#__PURE__*/(0, vue_1.createTextVNode)(" for more information. ")])])], -1 -/* HOISTED */ -); - -var _hoisted_14 = { +}; +var _hoisted_16 = { "class": "mx-10 flex min-h-[65vh] w-[500px] items-start justify-center rounded-lg border border-n-20 bg-white md:w-[calc(100%_-_80px)]" }; -var _hoisted_15 = { +var _hoisted_17 = { "class": "mt-24 max-w-[95%] rounded-lg border border-n-30" }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_18 = { "class": "border-b border-n-30 p-4 text-sm font-bold uppercase text-n-50" -}, " Import .CSV/.XML file ", -1 -/* HOISTED */ -); - -var _hoisted_17 = { +}; +var _hoisted_19 = { "class": "p-6" }; -var _hoisted_18 = { +var _hoisted_20 = { "class": "mb-4 rounded border border-n-30 px-4 py-3" }; -var _hoisted_19 = { +var _hoisted_21 = { ref: "file", type: "file", "class": "min-w-[480px] cursor-pointer p-0 text-sm file:cursor-pointer file:rounded-full file:border file:border-solid file:border-spring-50 file:bg-white file:px-4 file:py-0.5 file:text-spring-50 file:outline-none" }; -var _hoisted_20 = { +var _hoisted_22 = { key: 0, "class": "error" }; -var _hoisted_21 = { +var _hoisted_23 = { "class": "flex w-[280px] flex-col items-start gap-4 md:w-[400px] md:flex-row md:items-end lg:w-auto lg:justify-between" }; -var _hoisted_22 = { +var _hoisted_24 = { "class": "flex items-center space-x-2.5" }; -var _hoisted_23 = { +var _hoisted_25 = { "class": "relative text-sm text-bluecoral" }; @@ -27802,30 +28113,46 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("a", _hoisted_7, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "arrow-short-left" - })])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("button", _hoisted_11, [(0, vue_1.createVNode)(_component_svg_vue, { + })])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("h4", _hoisted_9, [(0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.common_lang.import_activity), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("button", _hoisted_12, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "question-mark" - }), _hoisted_12]), _hoisted_13])])])]), (0, vue_1.createCommentVNode)("
    \n
    \n \n
    \n
    ")])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", null, [_hoisted_16, (0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("input", _hoisted_19, null, 512 + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.description.one), 1 + /* TEXT */ + )])])])])])]), (0, vue_1.createCommentVNode)("
    \n
    \n \n
    \n
    ")])]), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("p", _hoisted_18, (0, vue_1.toDisplayString)($setup.language.common_lang.import_activities), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("input", _hoisted_21, null, 512 /* NEED_PATCH */ - )]), $setup.error ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, (0, vue_1.toDisplayString)($setup.error), 1 + )]), $setup.error ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, (0, vue_1.toDisplayString)($setup.error), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createVNode)($setup["BtnComponent"], { + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createVNode)($setup["BtnComponent"], { "class": "!border-red !border", type: "primary", - text: "Upload file", + text: $setup.language.button_lang.upload_file, icon: "upload-file", onClick: $setup.uploadFile - }), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("button", _hoisted_23, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["text"]), (0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("button", _hoisted_25, [(0, vue_1.createVNode)(_component_svg_vue, { icon: 'download', "class": "mr-1" }), (0, vue_1.createElementVNode)("span", { onClick: $setup.downloadExcel - }, "Download .CSV activity Template")]), (0, vue_1.createVNode)($setup["HoverText"], { - "hover-text": "This template contains all the elements that you have to fill as per the IATI Standard before uploading in IATI Publisher. Please make sure that you follow the structure and format of the template.", + }, (0, vue_1.toDisplayString)($setup.language.common_lang.download_csv_template), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)($setup["HoverText"], { + "hover-text": $setup.language.common_lang.download_csv_template_description, name: "", "class": "hover-text import-activity", position: "right", "show-iati-reference": true - })])])])])])])]), $setup.loader ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Loader"], { + }, null, 8 + /* PROPS */ + , ["hover-text"])])])])])])])]), $setup.loader ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Loader"], { key: 0, text: $setup.loaderText, "class": (0, vue_1.normalizeClass)({ @@ -27864,137 +28191,130 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "page-title mb-6" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "pb-4 text-caption-c1 text-n-40" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("nav", { +}; +var _hoisted_4 = { "aria-label": "breadcrumbs", "class": "breadcrumb" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_5 = { "class": "flex" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { +}; +var _hoisted_6 = { "class": "whitespace-nowrap font-bold", href: "/activities" -}, " Your Activities ")])])])], -1 -/* HOISTED */ -); - -var _hoisted_4 = { +}; +var _hoisted_7 = { "class": "flex items-end gap-4" }; -var _hoisted_5 = { +var _hoisted_8 = { "class": "title max-w-[50%] basis-6/12" }; -var _hoisted_6 = { +var _hoisted_9 = { "class": "inline-flex w-full items-center" }; -var _hoisted_7 = { +var _hoisted_10 = { "class": "inline-flex min-h-[48px] grow flex-wrap items-center" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("h4", { +var _hoisted_11 = { "class": "ellipsis__title relative mr-4 font-bold" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_12 = { "class": "ellipsis__title overflow-hidden" -}, " Import Activity ")], -1 -/* HOISTED */ -); - -var _hoisted_9 = { +}; +var _hoisted_13 = { "class": "tooltip-btn" }; -var _hoisted_10 = { +var _hoisted_14 = { "class": "" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "What is an activity?", -1 -/* HOISTED */ -); - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_15 = { "class": "tooltip-btn__content z-[1]" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_16 = { "class": "content" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_17 = { "class": "mb-1.5 text-caption-c1 font-bold text-bluecoral" -}, " What is an activity? "), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, [/*#__PURE__*/(0, vue_1.createTextVNode)(" You need to provide data about your organisation's development and humanitarian 'activities'. The unit of work described by an 'activity' is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country's government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months. "), /*#__PURE__*/(0, vue_1.createElementVNode)("br"), /*#__PURE__*/(0, vue_1.createTextVNode)(" Therefore your organisation will need to determine how it will divide its work internally into activities. Read the "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - target: "_blank", - rel: "noopener noreferrer", - href: "/publishing-checklist", - "class": "text-bluecoral" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Publishing Checklist")]), /*#__PURE__*/(0, vue_1.createTextVNode)(" for more information. ")])])], -1 -/* HOISTED */ -); - -var _hoisted_13 = { +}; +var _hoisted_18 = { "class": "actions relative flex grow flex-col items-end justify-end" }; -var _hoisted_14 = { +var _hoisted_19 = { "class": "inline-flex justify-end" }; -var _hoisted_15 = { +var _hoisted_20 = { "class": "actions flex grow justify-end" }; -var _hoisted_16 = { +var _hoisted_21 = { "class": "inline-flex justify-center" }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_22 = { "class": "mb-2 border-l-2 border-l-salmon-50 bg-paper" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("div", { +}; +var _hoisted_23 = { "class": "alert__content m-2 mb-2.5 rounded bg-camel-10 p-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_24 = { "class": "overflow-hidden text-sm font-normal" -}, " Activities with errors cannot be imported. Please solve the errors to import your activities.")])], -1 -/* HOISTED */ -); - -var _hoisted_18 = { +}; +var _hoisted_25 = { "class": "iati-list-table upload-list-table" }; -var _hoisted_19 = { +var _hoisted_26 = { "class": "bg-n-10" }; - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +var _hoisted_27 = { id: "title", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Activity Title")], -1 -/* HOISTED */ -); - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +}; +var _hoisted_28 = { id: "status", scope: "col" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_29 = { "class": "block text-left" -}, "Status")], -1 -/* HOISTED */ -); - -var _hoisted_22 = { +}; +var _hoisted_30 = { id: "cb", scope: "col" }; -var _hoisted_23 = { +var _hoisted_31 = { "class": "cursor-pointer" }; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [_hoisted_8, (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("button", _hoisted_10, [(0, vue_1.createVNode)(_component_svg_vue, { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("nav", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("a", _hoisted_6, (0, vue_1.toDisplayString)($setup.language.activities_lang.your_activities), 1 + /* TEXT */ + )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("h4", _hoisted_11, [(0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.import_activiy), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("button", _hoisted_14, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "question-mark" - }), _hoisted_11]), _hoisted_12])])])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [$setup.selectedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.activities_lang.what_is_activity.description.one), 1 + /* TEXT */ + )])])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("div", _hoisted_21, [$setup.selectedActivities.length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["BtnComponent"], { key: 0, "class": "mr-3.5", type: "primary", - text: "Import (".concat($setup.selectedCount, "/").concat($setup.activitiesLength, ")"), + text: "".concat($setup.language.button_lang["import"], " (").concat($setup.selectedCount, "/").concat($setup.activitiesLength, ")"), icon: "download-file", onClick: $setup.importActivities }, null, 8 /* PROPS */ - , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)])])])])])]), (0, vue_1.createCommentVNode)(" Table layout: show after upload complete "), _hoisted_17, (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_19, [_hoisted_20, _hoisted_21, (0, vue_1.createElementVNode)("th", _hoisted_22, [(0, vue_1.createElementVNode)("span", _hoisted_23, [(0, vue_1.createVNode)(_component_svg_vue, { + , ["text"])) : (0, vue_1.createCommentVNode)("v-if", true)])])])])])]), (0, vue_1.createCommentVNode)(" Table layout: show after upload complete "), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("span", _hoisted_24, (0, vue_1.toDisplayString)($setup.language.common_lang.activities_with_error), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("thead", null, [(0, vue_1.createElementVNode)("tr", _hoisted_26, [(0, vue_1.createElementVNode)("th", _hoisted_27, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.activities) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.title), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_28, [(0, vue_1.createElementVNode)("span", _hoisted_29, (0, vue_1.toDisplayString)($setup.language.common_lang.status), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("th", _hoisted_30, [(0, vue_1.createElementVNode)("span", _hoisted_31, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "checkbox", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.selectAllActivities(); @@ -28101,14 +28421,10 @@ var _hoisted_2 = ["innerHTML"]; var _hoisted_3 = { "class": "text-sm leading-relaxed" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_4 = { "class": "sr-only", "for": "" -}, " Select ", -1 -/* HOISTED */ -); - +}; var _hoisted_5 = { key: 0, "class": "checkbox" @@ -28135,13 +28451,13 @@ var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)("td", _hoisted_1, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)($props.activity["data"]["title"][0]["narrative"] ? $props.activity["data"]["title"][0]["narrative"] : "Missing") + " ", 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)("td", _hoisted_1, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)($props.activity["data"]["title"][0]["narrative"] ? $props.activity["data"]["title"][0]["narrative"] : $setup.language.common_lang.missing["default"]) + " ", 1 /* TEXT */ ), Object.keys($props.activity['errors']).length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", { key: 0, "class": "inline-flex cursor-pointer items-center text-crimson-50", onClick: $setup.toggleError - }, [(0, vue_1.createTextVNode)(" Show " + (0, vue_1.toDisplayString)($setup.countErrors()) + " errors ", 1 + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)($setup.language.common_lang.show) + " " + (0, vue_1.toDisplayString)($setup.countErrors()) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.errors_nocase) + " ", 1 /* TEXT */ ), (0, vue_1.createVNode)(_component_svg_vue, { icon: "dropdown-arrow", @@ -28175,14 +28491,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* KEYED_FRAGMENT */ ))], 2 /* CLASS */ - )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(!$props.activity["existence"] ? "New" : "Existing"), 1 + )]), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(!$props.activity["existence"] ? $setup.language.common_lang["new"] : $setup.language.common_lang.existing), 1 /* TEXT */ )]), (0, vue_1.createElementVNode)("td", { "class": "check-column", onClick: _cache[2] || (_cache[2] = function (event) { return event.stopPropagation(); }) - }, [_hoisted_4, $setup.countErrors() === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("label", _hoisted_5, [(0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, [(0, vue_1.createElementVNode)("label", _hoisted_4, (0, vue_1.toDisplayString)($setup.language.common_lang.select), 1 + /* TEXT */ + ), $setup.countErrors() === 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("label", _hoisted_5, [(0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return $setup.activities = $event; }), @@ -28242,13 +28560,10 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "flex" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_8 = { "class": "whitespace-nowrap font-bold", href: "/activities" -}, "Your Organisation", -1 -/* HOISTED */ -); +}; var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { "class": "separator mx-4" @@ -28304,110 +28619,64 @@ var _hoisted_24 = { var _hoisted_25 = { "class": "mb-2 flex items-center justify-between" }; - -var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_26 = { "class": "mr-2" -}, "Publishing Progress", -1 -/* HOISTED */ -); - -var _hoisted_27 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Fill mandatory fields of all elements to get 100% score", -1 -/* HOISTED */ -); - -var _hoisted_28 = { +}; +var _hoisted_27 = { "class": "activities__card elements" }; -var _hoisted_29 = { +var _hoisted_28 = { "class": "mb-7 flex items-center justify-between" }; - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Elements", -1 -/* HOISTED */ -); - -var _hoisted_31 = { +var _hoisted_29 = { "class": "mb-3 flex justify-between" }; -var _hoisted_32 = { +var _hoisted_30 = { "class": "flex items-center space-x-1" }; - -var _hoisted_33 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_34 = { +var _hoisted_31 = { "class": "flex justify-between" }; -var _hoisted_35 = { +var _hoisted_32 = { "class": "flex items-center space-x-1" }; - -var _hoisted_36 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_37 = { +var _hoisted_33 = { "class": "!z-[200] h-full w-[280px] bg-white pt-8" }; -var _hoisted_38 = { +var _hoisted_34 = { "class": "mb-1 flex" }; -var _hoisted_39 = { +var _hoisted_35 = { "class": "activities__card progress mr-1" }; -var _hoisted_40 = { +var _hoisted_36 = { "class": "mb-2 flex items-center justify-between" }; - -var _hoisted_41 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_37 = { "class": "mr-2" -}, "Publishing Progress", -1 -/* HOISTED */ -); - -var _hoisted_42 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Fill mandatory fields of all elements to get 100% score", -1 -/* HOISTED */ -); - -var _hoisted_43 = { +}; +var _hoisted_38 = { "class": "activities__card elements" }; -var _hoisted_44 = { +var _hoisted_39 = { "class": "mb-7 flex items-center justify-between" }; - -var _hoisted_45 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Elements", -1 -/* HOISTED */ -); - -var _hoisted_46 = { +var _hoisted_40 = { "class": "mb-3 flex justify-between" }; -var _hoisted_47 = { +var _hoisted_41 = { "class": "flex items-center space-x-1" }; - -var _hoisted_48 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_49 = { +var _hoisted_42 = { "class": "flex justify-between" }; -var _hoisted_50 = { +var _hoisted_43 = { "class": "flex items-center space-x-1" }; - -var _hoisted_51 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_52 = { +var _hoisted_44 = { "class": "activities__content" }; -var _hoisted_53 = { +var _hoisted_45 = { "class": "activities__content--elements -mx-3 grid grid-cols-2" }; @@ -28452,15 +28721,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "chevron", "class": "rotate-180 pb-2 text-3xl text-white" - })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createCommentVNode)(" title section "), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("nav", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [_hoisted_8, _hoisted_9, (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("span", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_a = _ctx.organization.name['0'].narrative) !== null && _a !== void 0 ? _a : 'Untitled' : 'Untitled'), 1 + })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createCommentVNode)(" title section "), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("nav", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("a", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.org_lang.your_org), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_b = _ctx.organization.name['0'].narrative) !== null && _b !== void 0 ? _b : 'Untitled' : 'Untitled'), 1 + ), _hoisted_9, (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("span", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_a = _ctx.organization.name["0"].narrative) !== null && _a !== void 0 ? _a : _ctx.language.common_lang.untitled : _ctx.language.common_lang.untitled), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_b = _ctx.organization.name["0"].narrative) !== null && _b !== void 0 ? _b : _ctx.language.common_lang.untitled : _ctx.language.common_lang.untitled), 1 /* TEXT */ )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("a", _hoisted_15, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "arrow-short-left" - })])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("h4", _hoisted_16, [(0, vue_1.createElementVNode)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_c = _ctx.organization.name['0'].narrative) !== null && _c !== void 0 ? _c : 'Untitled' : 'Untitled'), 1 + })])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("h4", _hoisted_16, [(0, vue_1.createElementVNode)("span", _hoisted_17, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_c = _ctx.organization.name["0"].narrative) !== null && _c !== void 0 ? _c : _ctx.language.common_lang.untitled : _ctx.language.common_lang.untitled), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("span", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_d = _ctx.organization.name['0'].narrative) !== null && _d !== void 0 ? _d : 'Untitled' : 'Untitled'), 1 + ), (0, vue_1.createElementVNode)("span", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.organization.name ? (_d = _ctx.organization.name["0"].narrative) !== null && _d !== void 0 ? _d : _ctx.language.common_lang.untitled : _ctx.language.common_lang.untitled), 1 /* TEXT */ )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_19, [_ctx.toastData.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Toast, { key: 0, @@ -28472,13 +28743,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { , ["message", "type"])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.errorData.visibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_ErrorPopUp, { key: 1, message: _ctx.errorData.message, - title: "Organisation couldn’t be published because", + title: _ctx.language.common_lang.error.org_could_not_be_published, onClosePopup: _cache[2] || (_cache[2] = function () { _ctx.errorData.visibility = false; }) }, null, 8 /* PROPS */ - , ["message"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createCommentVNode)(" Unpublish /Publish Activity "), (0, vue_1.createVNode)(_component_PublishUnpublish)])])])]), (0, vue_1.createCommentVNode)(" title section ends "), (0, vue_1.createElementVNode)("div", { + , ["message", "title"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createCommentVNode)(" Unpublish /Publish Activity "), (0, vue_1.createVNode)(_component_PublishUnpublish)])])])]), (0, vue_1.createCommentVNode)(" title section ends "), (0, vue_1.createElementVNode)("div", { "class": "sidebar-open-icon", onClick: _cache[3] || (_cache[3] = //@ts-ignore function () { @@ -28493,35 +28764,53 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "chevron", "class": "pb-2 text-3xl text-white" - })]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("aside", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [_hoisted_26, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + })]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("aside", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("span", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.language.common_lang.publishing_progress), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text", position: "right" - })]), (0, vue_1.createVNode)(_component_RadialProgressBar, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createVNode)(_component_RadialProgressBar, { "class": "mb-3 h-20 text-8xl", "is-percent": true, percent: _ctx.progress }, null, 8 /* PROPS */ - , ["percent"]), _hoisted_27]), (0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("div", _hoisted_29, [_hoisted_30, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + , ["percent"]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.fill_mandatory_fields), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("div", _hoisted_28, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.elements), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_29, [(0, vue_1.createElementVNode)("div", _hoisted_30, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "core" - }), _hoisted_33]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_31, [(0, vue_1.createElementVNode)("div", _hoisted_32, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "double-tick", "class": "text-spring-50" - }), _hoisted_36]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })])])]), (0, vue_1.createVNode)(_component_OrganisationElements, { + }, null, 8 + /* PROPS */ + , ["hover-text"])])])]), (0, vue_1.createVNode)(_component_OrganisationElements, { "activity-id": _ctx.organization.id, data: _ctx.elementProps, status: _ctx.status @@ -28529,35 +28818,53 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["activity-id", "data", "status"])]), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)([_ctx.showSidebar ? '-translate-x-[20px] ' : ' -translate-x-[110%]', "opacity-1 fixed top-[60px] z-[100] block h-[calc(100vh_-_50px)] overflow-y-auto duration-200 lg:hidden"]) - }, [(0, vue_1.createElementVNode)("aside", _hoisted_37, [(0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createElementVNode)("div", _hoisted_39, [(0, vue_1.createElementVNode)("div", _hoisted_40, [_hoisted_41, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }, [(0, vue_1.createElementVNode)("aside", _hoisted_33, [(0, vue_1.createElementVNode)("div", _hoisted_34, [(0, vue_1.createElementVNode)("div", _hoisted_35, [(0, vue_1.createElementVNode)("div", _hoisted_36, [(0, vue_1.createElementVNode)("span", _hoisted_37, (0, vue_1.toDisplayString)(_ctx.language.common_lang.publishing_progress), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text", position: "right" - })]), (0, vue_1.createVNode)(_component_RadialProgressBar, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createVNode)(_component_RadialProgressBar, { "class": "mb-3 h-20 text-8xl", "is-percent": true, percent: _ctx.progress }, null, 8 /* PROPS */ - , ["percent"]), _hoisted_42]), (0, vue_1.createElementVNode)("div", _hoisted_43, [(0, vue_1.createElementVNode)("div", _hoisted_44, [_hoisted_45, (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + , ["percent"]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.fill_mandatory_fields), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_38, [(0, vue_1.createElementVNode)("div", _hoisted_39, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.elements), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_46, [(0, vue_1.createElementVNode)("div", _hoisted_47, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_40, [(0, vue_1.createElementVNode)("div", _hoisted_41, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "core" - }), _hoisted_48]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })]), (0, vue_1.createElementVNode)("div", _hoisted_49, [(0, vue_1.createElementVNode)("div", _hoisted_50, [(0, vue_1.createVNode)(_component_svg_vue, { + }, null, 8 + /* PROPS */ + , ["hover-text"])]), (0, vue_1.createElementVNode)("div", _hoisted_42, [(0, vue_1.createElementVNode)("div", _hoisted_43, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "double-tick", "class": "text-spring-50" - }), _hoisted_51]), (0, vue_1.createVNode)(_component_HoverText, { - "hover-text": "You cannot publish an activity until all the mandatory fields have been filled.", + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createVNode)(_component_HoverText, { + "hover-text": _ctx.language.common_lang.cannot_publish_activity_until_mandatory, name: "", "class": "hover-text" - })])])]), (0, vue_1.createVNode)(_component_OrganisationElements, { + }, null, 8 + /* PROPS */ + , ["hover-text"])])])]), (0, vue_1.createVNode)(_component_OrganisationElements, { "activity-id": _ctx.organization.id, data: _ctx.elementProps, status: _ctx.status @@ -28565,7 +28872,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["activity-id", "data", "status"])])], 2 /* CLASS */ - ), (0, vue_1.createElementVNode)("div", _hoisted_52, [(0, vue_1.createElementVNode)("div", _hoisted_53, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { + ), (0, vue_1.createElementVNode)("div", _hoisted_44, [(0, vue_1.createElementVNode)("div", _hoisted_45, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.groupedData, function (post, key, index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: index }, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(post.elements, function (element, name, i) { @@ -28636,31 +28943,14 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "w-full py-2 bg-eggshell" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "All Elements", -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Core", -1 -/* HOISTED */ -); - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Completed", -1 -/* HOISTED */ -); - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Not Completed", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_7 = { "class": "grid grid-cols-2 gap-2 elements__listing" }; -var _hoisted_12 = ["href"]; -var _hoisted_13 = { +var _hoisted_8 = ["href"]; +var _hoisted_9 = { "class": "absolute top-0 right-0 inline-flex mt-1 mr-1 status_icons" }; -var _hoisted_14 = { +var _hoisted_10 = { "class": "mt-1 text-xs break-all title" }; @@ -28709,7 +28999,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "box" - }), _hoisted_7]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.all_elements), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[3] || (_cache[3] = function ($event) { return $setup.dropdownFilter('core'); @@ -28717,7 +29009,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "core" - }), _hoisted_8]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.core), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[4] || (_cache[4] = function ($event) { return $setup.dropdownFilter('completed'); @@ -28725,7 +29019,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-1 text-lg", icon: "double-tick" - }), _hoisted_9]), (0, vue_1.createElementVNode)("li", { + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.completed), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", { "class": "flex py-1.5 px-3.5 hover:bg-white", onClick: _cache[5] || (_cache[5] = function ($event) { return $setup.dropdownFilter('not_completed'); @@ -28733,14 +29029,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "ml-1 !mr-1.5", icon: "red-cross" - }), _hoisted_10])])], 512 + }), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.completed), 1 + /* TEXT */ + )])])], 512 /* NEED_PATCH */ - ), [[vue_1.vShow, $setup.searchBtnValue]])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.filteredElements, function (post, index) { + ), [[vue_1.vShow, $setup.searchBtnValue]])])]), (0, vue_1.createElementVNode)("div", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)($setup.filteredElements, function (post, index) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", { key: String(index), "class": "elements__item relative flex cursor-pointer flex-col items-center justify-center rounded border border-dashed border-n-40 px-[3px] py-2.5 text-n-30", href: post.has_data ? '#' + index : '/organisation/' + index - }, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(index === 'organisation_identifier' ? $props.status['identifier'] : $props.status[index.toString()]) ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(index === 'organisation_identifier' ? $props.status['identifier'] : $props.status[index.toString()]) ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_svg_vue, { key: 0, "class": "text-base text-teal-50", icon: "double-tick" @@ -28758,11 +29056,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "text-base" }, null, 8 /* PROPS */ - , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)(index.toString().replace(/_/g, "-")), 1 + , ["icon"])), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)(index.toString().replace(/_/g, "-")), 1 /* TEXT */ )], 8 /* PROPS */ - , _hoisted_12); + , _hoisted_8); }), 128 /* KEYED_FRAGMENT */ ))])]); @@ -28815,12 +29113,9 @@ var _hoisted_8 = { "class": "icons flex flex-row-reverse items-center" }; var _hoisted_9 = ["href"]; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_10 = { "class": "hidden text-[10px] lg:block" -}, "Edit", -1 -/* HOISTED */ -); +}; var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "divider mb-4 h-px w-full bg-n-20" @@ -28913,7 +29208,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { 'text-spring-50': $props.status, 'text-crimson-50': !$props.status }]) - }, [_hoisted_5, $props.status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, "completed")) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, "not completed"))], 2 + }, [_hoisted_5, $props.status ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)($setup.language.common_lang.completed), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.common_lang.not_completed), 1 + /* TEXT */ + ))], 2 /* CLASS */ )], 8 /* PROPS */ @@ -28921,9 +29220,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": "edit-button mx-2.5 flex items-center text-xs font-bold uppercase", href: '/organisation/' + $props.title }, [(0, vue_1.createVNode)(_component_svg_vue, { - "class": "mr-0.5 text-base", + "class": "mr-0.5 text-xs", icon: "edit" - }), _hoisted_10], 8 + }), (0, vue_1.createElementVNode)("span", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.button_lang.edit), 1 + /* TEXT */ + )], 8 /* PROPS */ , _hoisted_9), $props.tooltip ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["HoverText"], { key: 0, @@ -28945,11 +29246,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i, "class": "title-content" - }, [post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_15, [post.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, " (Language: " + (0, vue_1.toDisplayString)((_a = $props.types) === null || _a === void 0 ? void 0 : _a.languages[post.language]) + ") ", 1 + }, [post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_15, [post.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, " (" + (0, vue_1.toDisplayString)($setup.language.common_lang.language) + ": " + (0, vue_1.toDisplayString)((_a = $props.types) === null || _a === void 0 ? void 0 : _a.languages[post.language]) + ") ", 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), post.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)(post.narrative), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, "Title Missing")), i !== $props.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19)) : (0, vue_1.createCommentVNode)("v-if", true)]); + )) : (0, vue_1.createCommentVNode)("v-if", true)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.title), 1 + /* TEXT */ + )), i !== $props.data.content.length - 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_19)) : (0, vue_1.createCommentVNode)("v-if", true)]); }), 128 /* KEYED_FRAGMENT */ ))])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createCommentVNode)(" name ends "), $props.title == 'reporting_org' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_20, [(0, vue_1.createVNode)($setup["ReportingOrganisation"], { @@ -29019,86 +29322,52 @@ var _hoisted_4 = { var _hoisted_5 = { "class": "ml-4" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Title", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +var _hoisted_6 = { key: 0, "class": "language" }; -var _hoisted_8 = { +var _hoisted_7 = { key: 1, "class": "flex flex-col" }; -var _hoisted_9 = { +var _hoisted_8 = { key: 2, "class": "italic" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Description", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_9 = { "class": "language mb-1.5" }; -var _hoisted_12 = { +var _hoisted_10 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Language", -1 -/* HOISTED */ -); - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Format", -1 -/* HOISTED */ -); - -var _hoisted_15 = { +var _hoisted_11 = { key: 0 }; -var _hoisted_16 = { +var _hoisted_12 = { key: 1, "class": "italic" }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Category", -1 -/* HOISTED */ -); - -var _hoisted_18 = { +var _hoisted_13 = { key: 0 }; -var _hoisted_19 = { +var _hoisted_14 = { key: 1, "class": "italic" }; - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Document Date", -1 -/* HOISTED */ -); - -var _hoisted_21 = { +var _hoisted_15 = { key: 0 }; -var _hoisted_22 = { +var _hoisted_16 = { key: 1, "class": "italic" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Recipient Country", -1 -/* HOISTED */ -); - -var _hoisted_24 = { +var _hoisted_17 = { "class": "mb-1.5 text-xs" }; -var _hoisted_25 = { +var _hoisted_18 = { "class": "language mb-1.5" }; -var _hoisted_26 = { +var _hoisted_19 = { "class": "w-[500px] max-w-full" }; @@ -29115,7 +29384,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { target: "_blank" }, (0, vue_1.toDisplayString)(document_link.url), 9 /* TEXT, PROPS */ - , _hoisted_3)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, "URL Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.title['0'].narrative, function (narrative, j) { + , _hoisted_3)) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.url)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.title), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.title['0'].narrative, function (narrative, j) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29123,16 +29396,20 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-1.5': j != document_link.title['0'].narrative.length - 1 }) - }, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [narrative.language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_8, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), narrative.narrative ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_7, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(narrative.narrative), 1 /* TEXT */ - )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, "Missing"))], 2 + )])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_10, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.description['0'].narrative, function (narrative, j) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.description), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.description['0'].narrative, function (narrative, j) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29140,30 +29417,38 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': j != document_link.description['0'].length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_11, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.language), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': _ctx.i != document_link.language.length - 1 }]) }, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(document_link.language.map(function (entry) { return $setup.types.languages[entry.language]; - }).join(", ") === "" ? "Language Missing" : document_link.language.map(function (entry) { + }).join(", ") === "" ? $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.language) : document_link.language.map(function (entry) { return $setup.types.languages[entry.language]; }).join(", ")), 1 /* TEXT */ )], 2 /* CLASS */ - )])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_14, document_link.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_15, (0, vue_1.toDisplayString)(document_link.format), 1 + )])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.format), 1 + /* TEXT */ + ), document_link.format ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_11, (0, vue_1.toDisplayString)(document_link.format), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_16, "Missing"))]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_17, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.category, function (category, i) { + ))]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.category), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.category, function (category, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29171,27 +29456,35 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-1.5': i != document_link.category.length - 1 }]) - }, [category.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_18, (0, vue_1.toDisplayString)(category.code ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.documentCategory[category.code] : "Category Missing"), 1 + }, [category.code ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(category.code ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.documentCategory[category.code] : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.category)), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, "Missing"))], 2 + ))], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_20, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.document_date, function (document_date, i) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.document_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.document_date, function (document_date, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i - }, [document_date.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)($setup.formatDate(document_date.date)), 1 + }, [document_date.date ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_15, (0, vue_1.toDisplayString)($setup.formatDate(document_date.date)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, "Missing"))]); + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.recipient_country, function (recipient_country, i) { + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.recipient_country), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(document_link.recipient_country, function (recipient_country, i) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: i - }, [(0, vue_1.createElementVNode)("div", _hoisted_24, (0, vue_1.toDisplayString)(recipient_country.code ? "".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.country[recipient_country.code]) : "Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_17, (0, vue_1.toDisplayString)(recipient_country.code ? "".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.country[recipient_country.code]) : $setup.language.common_lang.missing["default"]), 1 /* TEXT */ ), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_country.narrative, function (narrative, j) { var _a, _b; @@ -29201,9 +29494,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': j != document_link.description['0'].length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_25, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language], " ") : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_18, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language], " ") : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_26, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_19, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -29259,82 +29552,49 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "ml-4" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +var _hoisted_7 = { "class": "description-content" }; -var _hoisted_11 = { +var _hoisted_8 = { "class": "language mb-1.5" }; -var _hoisted_12 = { +var _hoisted_9 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_13 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period", -1 -/* HOISTED */ -); - -var _hoisted_14 = { +var _hoisted_10 = { "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_11 = { "class": "head flex items-center border-b border-n-20 px-6 py-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_12 = { "class": "text-xs font-bold text-n-50" -}, "Budget line")], -1 -/* HOISTED */ -); - -var _hoisted_16 = { +}; +var _hoisted_13 = { "class": "indicator-content flex px-6 py-2" }; -var _hoisted_17 = { +var _hoisted_14 = { "class": "elements-detail grow" }; -var _hoisted_18 = { +var _hoisted_15 = { "class": "category flex" }; -var _hoisted_19 = { +var _hoisted_16 = { key: 0 }; -var _hoisted_20 = { +var _hoisted_17 = { key: 1 }; -var _hoisted_21 = { +var _hoisted_18 = { "class": "ml-4" }; - -var _hoisted_22 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", { +var _hoisted_19 = { "class": "pr-20 text-n-40" -}, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_24 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_25 = { +}; +var _hoisted_20 = { "class": "language mb-1.5" }; -var _hoisted_26 = { +var _hoisted_21 = { "class": "w-[500px] max-w-full" }; @@ -29347,15 +29607,23 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_country_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_country_budget.status] : "Status Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_country_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_country_budget.status] : $setup.language.common_lang.missing.status), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_3, [recipient_country_budget.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(Number(recipient_country_budget.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(recipient_country_budget.value["0"].currency), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " Budget Amount Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.value["0"].value_date)), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget_value)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.value["0"].value_date)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.code), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_8, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(recipient_country_budget.recipient_country["0"].code ? $setup.types.country[recipient_country_budget.recipient_country["0"].code] : "Code Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(recipient_country_budget.recipient_country["0"].code ? $setup.types.country[recipient_country_budget.recipient_country["0"].code] : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.code)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_9, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_country_budget.recipient_country['0'].narrative, function (narrative, i) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_country_budget.recipient_country['0'].narrative, function (narrative, i) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29363,18 +29631,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': i != recipient_country_budget.recipient_country['0'].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + " ) ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + " ) ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_12, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_13, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.period_end["0"].date)), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(recipient_country_budget.period_end["0"].date)), 1 + /* TEXT */ + )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.budget_line), 1 /* TEXT */ - )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [_hoisted_15, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_country_budget.budget_line, function (budget_line, j) { + )]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_country_budget.budget_line, function (budget_line, j) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29382,13 +29654,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-2 border-b border-n-20': j !== recipient_country_budget.budget_line.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", _hoisted_18, [budget_line.value['0'].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_19, (0, vue_1.toDisplayString)(Number(budget_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [budget_line.value['0'].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_16, (0, vue_1.toDisplayString)(Number(budget_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_17, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget_amount)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", _hoisted_19, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, " Budget Amount Missing "))]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_22, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : "Reference Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.reference), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_23, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(budget_line.value["0"].value_date)), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_24, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(budget_line.value["0"].value_date)), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29396,9 +29676,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k != budget_line.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_25, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_20, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_26, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_21, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -29456,70 +29736,40 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "elements-detail mb-4" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Recipient Org", -1 -/* HOISTED */ -); - -var _hoisted_8 = { +var _hoisted_7 = { "class": "description-content" }; -var _hoisted_9 = { +var _hoisted_8 = { "class": "language mb-1.5" }; -var _hoisted_10 = { +var _hoisted_9 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Date", -1 -/* HOISTED */ -); - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period", -1 -/* HOISTED */ -); - -var _hoisted_13 = { +var _hoisted_10 = { "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_11 = { "class": "head flex items-center border-b border-n-20 px-6 py-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_12 = { "class": "text-xs font-bold text-n-50" -}, "budget line")], -1 -/* HOISTED */ -); - -var _hoisted_15 = { +}; +var _hoisted_13 = { "class": "indicator-content flex px-6 py-2" }; -var _hoisted_16 = { +var _hoisted_14 = { "class": "elements-detail grow" }; -var _hoisted_17 = { +var _hoisted_15 = { "class": "category flex" }; -var _hoisted_18 = { +var _hoisted_16 = { "class": "ml-4" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_22 = { +var _hoisted_17 = { "class": "language mb-1.5" }; -var _hoisted_23 = { +var _hoisted_18 = { "class": "w-[500px] max-w-full" }; @@ -29532,11 +29782,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_org_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_org_budget.status] : "Status Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_org_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_org_budget.status] : $setup.language.common_lang.missing.status), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_3, [recipient_org_budget.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(Number(recipient_org_budget.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(recipient_org_budget.value["0"].currency), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " Budget Amount Missing"))])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_org_budget.recipient_org, function (recipient_org, recipient_org_index) { + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget_line)), 1 + /* TEXT */ + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_org_budget.recipient_org, function (recipient_org, recipient_org_index) { var _a, _b, _c; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29544,7 +29796,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': recipient_org_index != recipient_org_budget.recipient_org.length - 1 }]) - }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(recipient_org.ref ? "Reference - ".concat(recipient_org.ref) : "Reference Missing") + " ", 1 + }, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.recipient_org), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(recipient_org.ref ? "".concat($setup.language.common_lang.reference, " - ").concat(recipient_org.ref) : $setup.language.common_lang.missing.reference) + " ", 1 /* TEXT */ ), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_org.narrative, function (narrative, narrative_index) { var _a, _b; @@ -29554,25 +29808,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': narrative_index != recipient_org.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("div", _hoisted_9, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + " ) ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("div", _hoisted_8, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + " ) ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_10, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_9, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_11, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate((_a = recipient_org_budget.value["0"].value_date) !== null && _a !== void 0 ? _a : "Value Date Missing")), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate((_a = recipient_org_budget.value["0"].value_date) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.value_date))), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_12, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate((_b = recipient_org_budget.period_start["0"].date) !== null && _b !== void 0 ? _b : "Period Start Missing")) + " - " + (0, vue_1.toDisplayString)($setup.formatDate((_c = recipient_org_budget.period_end["0"].date) !== null && _c !== void 0 ? _c : "Period End Missing")), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate((_b = recipient_org_budget.period_start["0"].date) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.period_start))) + " - " + (0, vue_1.toDisplayString)($setup.formatDate((_c = recipient_org_budget.period_end["0"].date) !== null && _c !== void 0 ? _c : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.period_end))), 1 /* TEXT */ )])])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))]), (0, vue_1.createElementVNode)("div", _hoisted_13, [_hoisted_14, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_org_budget.budget_line, function (budget_line, j) { + ))]), (0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.common_lang.budget_line), 1 + /* TEXT */ + )]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_org_budget.budget_line, function (budget_line, j) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29580,13 +29840,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-2 border-b border-n-20': j !== recipient_org_budget.budget_line.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(budget_line.value["0"].amount ? Number(budget_line.value[0].amount).toLocaleString() : "Budget Missing") + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(budget_line.value["0"].amount ? Number(budget_line.value[0].amount).toLocaleString() : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget)) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.reference), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : "Reference Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.formatDate(budget_line.value["0"].value_date)) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.value_date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_20, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.formatDate(budget_line.value["0"].value_date)) !== null && _b !== void 0 ? _b : "Value Date Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_21, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29594,9 +29860,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k != budget_line.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_22, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_17, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_23, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_18, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -29642,23 +29908,10 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "category" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Secondary Reporter", -1 -/* HOISTED */ -); - -var _hoisted_5 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_6 = { +var _hoisted_3 = { "class": "language mb-1.5" }; -var _hoisted_7 = { +var _hoisted_4 = { "class": "w-[500px] max-w-full" }; @@ -29671,13 +29924,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(reporting_org.type ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.organizationType[reporting_org.type] : 'Type Missing'), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(reporting_org.type ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.organizationType[reporting_org.type] : $setup.language.common_lang.missing.type), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = reporting_org.ref) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.reference), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_3, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = reporting_org.ref) !== null && _b !== void 0 ? _b : 'Reference Missing'), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.secondary_reporter), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_4, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(reporting_org.secondary_reporter) ? 'True' : reporting_org.secondary_reporter ? 'False' : 'Missing'), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(parseInt(reporting_org.secondary_reporter) ? $setup.language.common_lang["true"] : reporting_org.secondary_reporter ? $setup.language.common_lang["false"] : $setup.language.missing_lang), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_5, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(reporting_org.narrative, function (narrative, j) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(reporting_org.narrative, function (narrative, j) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29685,9 +29944,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': j != reporting_org.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_6, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : 'Language : Missing') + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_3, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_7, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : 'Narrative Missing'), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_4, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -29740,96 +29999,54 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "ml-4" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary", -1 -/* HOISTED */ -); - -var _hoisted_9 = { +var _hoisted_7 = { key: 0 }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Vocabulary URI", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_8 = { key: 0 }; -var _hoisted_12 = ["href"]; -var _hoisted_13 = { +var _hoisted_9 = ["href"]; +var _hoisted_10 = { key: 1 }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Code", -1 -/* HOISTED */ -); - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_16 = { +var _hoisted_11 = { "class": "description-content" }; -var _hoisted_17 = { +var _hoisted_12 = { "class": "language mb-1.5" }; -var _hoisted_18 = { +var _hoisted_13 = { "class": "w-[500px] max-w-full" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +var _hoisted_14 = { "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { "class": "head flex items-center border-b border-n-20 px-6 py-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { - "class": "text-xs font-bold text-n-50" -}, "Budget line")], -1 +}, null, -1 /* HOISTED */ ); -var _hoisted_22 = { +var _hoisted_16 = { "class": "indicator-content flex px-6 py-2" }; -var _hoisted_23 = { +var _hoisted_17 = { "class": "elements-detail grow" }; -var _hoisted_24 = { +var _hoisted_18 = { "class": "category flex" }; -var _hoisted_25 = { +var _hoisted_19 = { "class": "ml-4" }; - -var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", { +var _hoisted_20 = { "class": "pr-20 text-n-40" -}, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_27 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Date", -1 -/* HOISTED */ -); - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_29 = { +}; +var _hoisted_21 = { "class": "language mb-1.5" }; -var _hoisted_30 = { +var _hoisted_22 = { "class": "w-[500px] max-w-full" }; @@ -29842,22 +30059,36 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_region_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_region_budget.status] : "Status Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(recipient_region_budget.status ? (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[recipient_region_budget.status] : $setup.language.common_lang.missing.status), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_3, [recipient_region_budget.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(Number(recipient_region_budget.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(recipient_region_budget.value["0"].currency), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " Budget Amount Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.value["0"].value_date)), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget_line)), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_8, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = (_b = $setup.types) === null || _b === void 0 ? void 0 : _b.regionVocabulary[recipient_region_budget.recipient_region["0"].region_vocabulary]) !== null && _c !== void 0 ? _c : "Vocabulary Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.value["0"].value_date)), 1 /* TEXT */ - )]), recipient_region_budget.recipient_region['0'].region_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_9, [_hoisted_10, recipient_region_budget.recipient_region['0'].vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_11, [(0, vue_1.createElementVNode)("a", { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.vocabulary), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = (_b = $setup.types) === null || _b === void 0 ? void 0 : _b.regionVocabulary[recipient_region_budget.recipient_region["0"].region_vocabulary]) !== null && _c !== void 0 ? _c : $setup.language.common_lang.missing.vocabulary), 1 + /* TEXT */ + )]), recipient_region_budget.recipient_region['0'].region_vocabulary === '99' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_7, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.vocabulary_uri), 1 + /* TEXT */ + ), recipient_region_budget.recipient_region['0'].vocabulary_uri ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_8, [(0, vue_1.createElementVNode)("a", { target: "_blank", href: recipient_region_budget.recipient_region['0'].vocabulary_uri }, (0, vue_1.toDisplayString)(recipient_region_budget.recipient_region["0"].vocabulary_uri), 9 /* TEXT, PROPS */ - , _hoisted_12)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_13, "Vocabulary URI Missing"))])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(recipient_region_budget.recipient_region["0"].region_vocabulary === "1" ? (_d = $setup.types.region[recipient_region_budget.recipient_region["0"].region_code]) !== null && _d !== void 0 ? _d : "Code Missing" : (_e = recipient_region_budget.recipient_region["0"].code) !== null && _e !== void 0 ? _e : "Code Missing"), 1 + , _hoisted_9)])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("td", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.vocabulary_uri)), 1 + /* TEXT */ + ))])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.code), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)(recipient_region_budget.recipient_region["0"].region_vocabulary === "1" ? (_d = $setup.types.region[recipient_region_budget.recipient_region["0"].region_code]) !== null && _d !== void 0 ? _d : $setup.language.common_lang.code : (_e = recipient_region_budget.recipient_region["0"].code) !== null && _e !== void 0 ? _e : $setup.language.common_lang.code), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_15, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_region_budget.recipient_region['0'].narrative, function (narrative, i) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_region_budget.recipient_region['0'].narrative, function (narrative, i) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29865,18 +30096,20 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4': i != recipient_region_budget.recipient_region['0'].narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + " ) ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, " ( " + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + " ) ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_18, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_13, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )])], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_19, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.period_end["0"].date)), 1 + ))])]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period), 1 /* TEXT */ - )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_20, [_hoisted_21, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_region_budget.budget_line, function (budget_line, j) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(recipient_region_budget.period_end["0"].date)), 1 + /* TEXT */ + )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_14, [_hoisted_15, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(recipient_region_budget.budget_line, function (budget_line, j) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29884,13 +30117,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-2 border-b border-n-20': j !== recipient_region_budget.budget_line.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(budget_line.value["0"].amount ? Number(budget_line.value[0].amount).toLocaleString() : "Budget Missing") + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(budget_line.value["0"].amount ? Number(budget_line.value[0].amount).toLocaleString() : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget)) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", _hoisted_20, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.reference), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_26, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : "Reference Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_27, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(budget_line.value["0"].value_date)), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(budget_line.value["0"].value_date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_28, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -29898,9 +30137,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k != budget_line.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_29, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_21, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_30, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_22, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -29955,56 +30194,31 @@ var _hoisted_4 = { var _hoisted_5 = { key: 1 }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period", -1 -/* HOISTED */ -); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_8 = { +var _hoisted_6 = { "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_7 = { "class": "head flex items-center border-b border-n-20 px-6 py-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_8 = { "class": "text-xs font-bold text-n-50" -}, "Budget line")], -1 -/* HOISTED */ -); - -var _hoisted_10 = { +}; +var _hoisted_9 = { "class": "indicator-content flex px-6 py-2" }; -var _hoisted_11 = { +var _hoisted_10 = { "class": "elements-detail grow" }; -var _hoisted_12 = { +var _hoisted_11 = { "class": "category flex" }; -var _hoisted_13 = { +var _hoisted_12 = { "class": "ml-4" }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Date", -1 -/* HOISTED */ -); - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_17 = { +var _hoisted_13 = { "class": "language mb-1.5" }; -var _hoisted_18 = { +var _hoisted_14 = { "class": "w-[500px] max-w-full" }; @@ -30017,15 +30231,23 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)((_b = (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[total_budget.total_budget_status]) !== null && _b !== void 0 ? _b : "Budget Status Missing"), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)((_b = (_a = $setup.types) === null || _a === void 0 ? void 0 : _a.budgetType[total_budget.total_budget_status]) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget_line)), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("div", _hoisted_3, [total_budget.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(Number(total_budget.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(total_budget.value["0"].currency), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, " Budget Amount Missing"))]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = $setup.formatDate(total_budget.period_start["0"].date)) !== null && _c !== void 0 ? _c : "Period Start Date Missing") + " - " + (0, vue_1.toDisplayString)((_d = $setup.formatDate(total_budget.period_end["0"].date)) !== null && _d !== void 0 ? _d : "Period End Date Missing"), 1 + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.common_lang.budget_amount), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_c = $setup.formatDate(total_budget.period_start["0"].date)) !== null && _c !== void 0 ? _c : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.period_start)) + " - " + (0, vue_1.toDisplayString)((_d = $setup.formatDate(total_budget.period_end["0"].date)) !== null && _d !== void 0 ? _d : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.period_end)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_e = $setup.formatDate(total_budget.value["0"].value_date)) !== null && _e !== void 0 ? _e : "Value Date Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(total_budget.budget_line, function (budget_line, j) { + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_e = $setup.formatDate(total_budget.value["0"].value_date)) !== null && _e !== void 0 ? _e : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.value_date)), 1 + /* TEXT */ + )])])])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("span", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.common_lang.budget_lang), 1 + /* TEXT */ + )]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(total_budget.budget_line, function (budget_line, j) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -30033,13 +30255,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-2 border-b border-n-20': j !== total_budget.budget_line.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(Number(budget_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)(Number(budget_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(budget_line.value["0"].currency), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.refernece), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.reference), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_14, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = budget_line.ref) !== null && _a !== void 0 ? _a : "Reference Missing"), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.formatDate(budget_line.value["0"].value_date)) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.value_date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_15, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_b = $setup.formatDate(budget_line.value["0"].value_date)) !== null && _b !== void 0 ? _b : "Value Date Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_16, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(budget_line.narrative, function (narrative, k) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -30047,9 +30275,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k != budget_line.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_17, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_13, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.common_lang.missing["default"])) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_18, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_14, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -30104,62 +30332,37 @@ var _hoisted_4 = { var _hoisted_5 = { "class": "ml-4" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Period", -1 -/* HOISTED */ -); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value date", -1 -/* HOISTED */ -); - -var _hoisted_8 = { +var _hoisted_6 = { "class": "indicator overflow-hidden rounded-t-lg border border-n-20" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_7 = { "class": "head flex items-center border-b border-n-20 px-6 py-2" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_8 = { "class": "text-xs font-bold text-n-50" -}, "Expense line")], -1 -/* HOISTED */ -); - -var _hoisted_10 = { +}; +var _hoisted_9 = { "class": "indicator-content flex px-6 py-2" }; -var _hoisted_11 = { +var _hoisted_10 = { "class": "elements-detail grow" }; -var _hoisted_12 = { +var _hoisted_11 = { "class": "category flex" }; -var _hoisted_13 = { +var _hoisted_12 = { key: 0 }; -var _hoisted_14 = { +var _hoisted_13 = { key: 1 }; -var _hoisted_15 = { +var _hoisted_14 = { "class": "ml-4" }; - -var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Reference", -1 -/* HOISTED */ -); - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Value Date", -1 -/* HOISTED */ -); - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", null, "Narrative", -1 -/* HOISTED */ -); - -var _hoisted_19 = { +var _hoisted_15 = { "class": "language mb-1.5" }; -var _hoisted_20 = { +var _hoisted_16 = { "class": "w-[500px] max-w-full" }; @@ -30170,13 +30373,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)({ 'mb-4 border-b border-n-20 pb-4': Number(index) != $props.content.length - 1 }) - }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [total_expenditure.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(total_expenditure.value["0"].amount ? Number(total_expenditure.value[0].amount).toLocaleString() : "Budget Missing") + " " + (0, vue_1.toDisplayString)(total_expenditure.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [total_expenditure.value[0].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_3, (0, vue_1.toDisplayString)(total_expenditure.value["0"].amount ? Number(total_expenditure.value[0].amount).toLocaleString() : $setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.budget)) + " " + (0, vue_1.toDisplayString)(total_expenditure.value["0"].currency), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.something.replace(':something', $setup.language.common_lang.expenditure_amount)), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, " Expenditure Amount Missing"))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_6, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.period_end["0"].date)), 1 + ))]), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.period), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_7, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.value["0"].value_date)), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.period_start["0"].date)) + " - " + (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.period_end["0"].date)), 1 /* TEXT */ - )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(total_expenditure.expense_line, function (expense_line, j) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(total_expenditure.value["0"].value_date)), 1 + /* TEXT */ + )])])])])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("span", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.common_lang.expense_line), 1 + /* TEXT */ + )]), ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(total_expenditure.expense_line, function (expense_line, j) { var _a; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -30184,13 +30395,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["item", { 'mb-2 border-b border-n-20': j !== total_expenditure.expense_line.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [expense_line.value['0'].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(Number(expense_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(expense_line.value["0"].currency), 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [expense_line.value['0'].amount ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(Number(expense_line.value["0"].amount).toLocaleString()) + " " + (0, vue_1.toDisplayString)(expense_line.value["0"].currency), 1 + /* TEXT */ + )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)($setup.language.common_lang.expense_line) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.missing["default"]), 1 + /* TEXT */ + ))]), (0, vue_1.createElementVNode)("div", _hoisted_14, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.reference), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = expense_line.ref) !== null && _a !== void 0 ? _a : $setup.language.common_lang.missing.reference), 1 /* TEXT */ - )) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, " Expense Line Missing "))]), (0, vue_1.createElementVNode)("div", _hoisted_15, [(0, vue_1.createElementVNode)("table", null, [(0, vue_1.createElementVNode)("tbody", null, [(0, vue_1.createElementVNode)("tr", null, [_hoisted_16, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)((_a = expense_line.ref) !== null && _a !== void 0 ? _a : "Reference Missing"), 1 + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.value_date), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_17, (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(expense_line.value["0"].value_date)), 1 + ), (0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.formatDate(expense_line.value["0"].value_date)), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("tr", null, [_hoisted_18, (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(expense_line.narrative, function (narrative, k) { + )]), (0, vue_1.createElementVNode)("tr", null, [(0, vue_1.createElementVNode)("td", null, (0, vue_1.toDisplayString)($setup.language.common_lang.narrative), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("td", null, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(expense_line.narrative, function (narrative, k) { var _a, _b; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { @@ -30198,9 +30417,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["description-content", { 'mb-4': k != expense_line.narrative.length - 1 }]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_19, " (" + (0, vue_1.toDisplayString)(narrative.language ? "Language: ".concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "Language : Missing") + ") ", 1 + }, [(0, vue_1.createElementVNode)("div", _hoisted_15, " (" + (0, vue_1.toDisplayString)(narrative.language ? "".concat($setup.language.common_lang.language, ": ").concat((_a = $setup.types) === null || _a === void 0 ? void 0 : _a.languages[narrative.language]) : "".concat($setup.language.common_lang.language, " : ").concat($setup.language.missing_lang)) + ") ", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_20, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : "Narrative Missing"), 1 + ), (0, vue_1.createElementVNode)("div", _hoisted_16, (0, vue_1.toDisplayString)((_b = narrative.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.narrative), 1 /* TEXT */ )], 2 /* CLASS */ @@ -30243,25 +30462,18 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var _hoisted_1 = { "class": "mt-7 sm:mt-14" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_2 = { "class": "mb-4 flex flex-col sm:mb-8" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("h2", null, "Password Recovery"), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, " Please enter your email, we will send you a link to reset your password ")], -1 -/* HOISTED */ -); - +}; var _hoisted_3 = { "class": "reset__content" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_4 = { "class": "text-sm font-bold text-bluecoral", "for": "email" -}, "Email", -1 -/* HOISTED */ -); - -var _hoisted_5 = { +}; +var _hoisted_5 = ["placeholder"]; +var _hoisted_6 = { key: 0, "class": "error", role: "alert" @@ -30286,22 +30498,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.reset && _ctx.reset.apply(_ctx, args); }, ["enter"])) - }, [_hoisted_2, (0, vue_1.createElementVNode)("div", _hoisted_3, [_hoisted_4, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("h2", null, (0, vue_1.toDisplayString)(_ctx.language.password_recovery.password_recovery_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)(_ctx.language.password_recovery.password_recovery_description), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("label", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.password_recovery.email_label), 1 + /* TEXT */ + ), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "email", "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.formData.email = $event; }), type: "email", - placeholder: "Enter your email address", + placeholder: _ctx.language.password_recovery.email_placeholder, "class": (0, vue_1.normalizeClass)(["input", { error__input: _ctx.emailError != '' }]) - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.email]]), (0, vue_1.createVNode)(_component_svg_vue, { + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_5), [[vue_1.vModelText, _ctx.formData.email]]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "mail-icon", icon: "mail" - }), _ctx.emailError ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.emailError), 1 + }), _ctx.emailError ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.emailError), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("button", { type: "submit", @@ -30309,7 +30527,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: _cache[1] || (_cache[1] = function ($event) { return _ctx.reset(); }) - }, " Send password reset link ")], 32 + }, (0, vue_1.toDisplayString)(_ctx.language.button_lang.send_password_reset), 1 + /* TEXT */ + )], 32 /* HYDRATE_EVENTS */ )]); } @@ -30337,33 +30557,22 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var _hoisted_1 = { "class": "mt-14" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("h2", null, "Reset Password", -1 -/* HOISTED */ -); - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_2 = { "class": "mb-4" -}, "Please enter your new password", -1 -/* HOISTED */ -); - -var _hoisted_4 = { +}; +var _hoisted_3 = { "class": "text-center" }; -var _hoisted_5 = { +var _hoisted_4 = { key: 0, "class": "error", role: "alert" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_5 = { "class": "text-sm font-bold text-bluecoral", "for": "password" -}, "New Password", -1 -/* HOISTED */ -); - +}; +var _hoisted_6 = ["placeholder"]; var _hoisted_7 = { key: 0, "class": "error", @@ -30372,15 +30581,12 @@ var _hoisted_7 = { var _hoisted_8 = { "class": "reset__content mt-4" }; - -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_9 = { "class": "text-sm font-bold text-bluecoral", "for": "password_confirmation" -}, "Repeat Password", -1 -/* HOISTED */ -); - -var _hoisted_10 = { +}; +var _hoisted_10 = ["placeholder"]; +var _hoisted_11 = { key: 0, "class": "error", role: "alert" @@ -30405,14 +30611,20 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.reset && _ctx.reset.apply(_ctx, args); }, ["enter"])) - }, [_hoisted_2, _hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [_ctx.errorData.email != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.errorData.email), 1 + }, [(0, vue_1.createElementVNode)("h2", null, (0, vue_1.toDisplayString)(_ctx.language.common_lang.reset_password), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.common_lang.enter_new_password), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_3, [_ctx.errorData.email != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.errorData.email), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", { "class": (0, vue_1.normalizeClass)({ 'reset__content mt-8': !_ctx.errorData.email, 'reset__content mt-3': _ctx.errorData.email }) - }, [_hoisted_6, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, [(0, vue_1.createElementVNode)("label", _hoisted_5, (0, vue_1.toDisplayString)(_ctx.language.common_lang.new_password), 1 + /* TEXT */ + ), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "new_password", "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.formData.password = $event; @@ -30421,17 +30633,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.errorData.password != '' }]), type: "password", - placeholder: "Enter a new password" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.password]]), (0, vue_1.createVNode)(_component_svg_vue, { + placeholder: _ctx.language.common_lang.enter_new_password_placeholder + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_6), [[vue_1.vModelText, _ctx.formData.password]]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "lock-icon text-xl", icon: "pw-lock" }), _ctx.errorData.password != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.errorData.password), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ - ), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + ), (0, vue_1.createElementVNode)("div", _hoisted_8, [(0, vue_1.createElementVNode)("label", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.language.common_lang.repeat_password), 1 + /* TEXT */ + ), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "repeat_password", "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return _ctx.formData.password_confirmation = $event; @@ -30440,13 +30654,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.errorData.password_confirmation || (_ctx.errorData.password && _ctx.formData.password != '') != '' }]), type: "password", - placeholder: "Re-enter your password" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.password_confirmation]]), (0, vue_1.createVNode)(_component_svg_vue, { + placeholder: _ctx.language.common_lang.reenter_password_placeholder + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_10), [[vue_1.vModelText, _ctx.formData.password_confirmation]]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "lock-icon text-xl", icon: "pw-lock" - }), _ctx.errorData.password_confirmation != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.errorData.password_confirmation), 1 + }), _ctx.errorData.password_confirmation != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.errorData.password_confirmation), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("button", { type: "submit", @@ -30454,7 +30668,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: _cache[2] || (_cache[2] = function ($event) { return _ctx.reset(); }) - }, " Reset Password ")], 32 + }, (0, vue_1.toDisplayString)(_ctx.language.common_lang.reset_password), 1 + /* TEXT */ + )], 32 /* HYDRATE_EVENTS */ )]); } @@ -30492,13 +30708,9 @@ var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { var _hoisted_3 = { "class": "flex items-center mb-4 text-xs text-n-50" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_4 = { "class": "text-sm font-bold text-n-50" -}, "Default for all data", -1 -/* HOISTED */ -); - +}; var _hoisted_5 = { "class": "mt-4 mb-6 register" }; @@ -30508,13 +30720,9 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "flex justify-between" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_8 = { "for": "default-currency" -}, "Default Currency", -1 -/* HOISTED */ -); - +}; var _hoisted_9 = { key: 0, "class": "error", @@ -30526,13 +30734,9 @@ var _hoisted_10 = { var _hoisted_11 = { "class": "flex justify-between" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_12 = { "for": "default-language" -}, "Default Language", -1 -/* HOISTED */ -); - +}; var _hoisted_13 = { key: 0, "class": "error", @@ -30541,13 +30745,9 @@ var _hoisted_13 = { var _hoisted_14 = { key: 1 }; - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_15 = { "class": "text-sm font-bold text-n-50" -}, "Default for activity data", -1 -/* HOISTED */ -); - +}; var _hoisted_16 = { "class": "mt-4 register" }; @@ -30557,52 +30757,41 @@ var _hoisted_17 = { var _hoisted_18 = { "class": "flex justify-between" }; - -var _hoisted_19 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_19 = { "for": "default-hierarchy" -}, "Default Hierarchy", -1 -/* HOISTED */ -); - -var _hoisted_20 = { +}; +var _hoisted_20 = ["placeholder"]; +var _hoisted_21 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_21 = { +var _hoisted_22 = { key: 1 }; -var _hoisted_22 = { +var _hoisted_23 = { "class": "flex justify-between" }; - -var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "for": "budget-not-provided" -}, "Budget Not Provided", -1 -/* HOISTED */ -); - var _hoisted_24 = { + "for": "budget-not-provided" +}; +var _hoisted_25 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_25 = { +var _hoisted_26 = { "class": "flex justify-between" }; - -var _hoisted_26 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { - "for": "humanitarian" -}, "Humanitarian", -1 -/* HOISTED */ -); - var _hoisted_27 = { + "for": "humanitarian" +}; +var _hoisted_28 = { key: 0, "class": "error", role: "alert" }; -var _hoisted_28 = { +var _hoisted_29 = { key: 1 }; @@ -30612,20 +30801,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Multiselect = (0, vue_1.resolveComponent)("Multiselect"); return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [_hoisted_2, (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "Default Values", - "hover-text": "These values will be automatically added to your data files." - })])])]), _hoisted_4, (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_7, [_hoisted_8, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "Default Currency", - "hover-text": "The currency in which you report your financial transactions. You can later manually change the currency on individual transactions and budgets if required.", + name: _ctx.language.settings_lang.default_values.label, + "hover-text": _ctx.language.settings_lang.default_values.hover_text + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])])]), (0, vue_1.createElementVNode)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_for_all_data_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("label", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_currency.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.settings_lang.default_currency.label, + "hover-text": _ctx.language.settings_lang.default_currency.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)(_component_Multiselect, { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)(_component_Multiselect, { id: "default-currency", modelValue: _ctx.defaultForm.default_currency, "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.defaultForm.default_currency = $event; }), "class": "vue__select", - placeholder: "Select from dropdown", + placeholder: _ctx.language.settings_lang.default_currency.placeholder, options: _ctx.props.currencies, searchable: true, onClick: _cache[1] || (_cache[1] = function ($event) { @@ -30633,13 +30830,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, null, 8 /* PROPS */ - , ["modelValue", "options"]), _ctx.defaultError.default_currency ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.defaultError.default_currency), 1 + , ["modelValue", "placeholder", "options"]), _ctx.defaultError.default_currency ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.defaultError.default_currency), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.default_currency ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_currency.help_text), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("label", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_language.label), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.default_currency ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_10, " If you do not set your default currency, you have to choose and select currency manually for all the financial transactions. ")) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_11, [_hoisted_12, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "Default Language", - "hover-text": "The language in which you provide data on your activities. You can later manually change the language on individual text if required.", + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.settings_lang.default_language.label, + "hover-text": _ctx.language.settings_lang.default_language.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)(_component_Multiselect, { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)(_component_Multiselect, { id: "default-language", modelValue: _ctx.defaultForm.default_language, "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { @@ -30648,7 +30851,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["vue__select", { error__input: _ctx.defaultError.default_language }]), - placeholder: "Select language from dropdown", + placeholder: _ctx.language.settings_lang.default_language.placeholder, searchable: true, options: _ctx.props.languages, onClick: _cache[3] || (_cache[3] = function ($event) { @@ -30656,33 +30859,47 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, null, 8 /* PROPS */ - , ["modelValue", "class", "options"]), _ctx.defaultError.default_language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.defaultError.default_language), 1 + , ["modelValue", "class", "placeholder", "options"]), _ctx.defaultError.default_language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.defaultError.default_language), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.default_language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_language.label), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)])])]), (0, vue_1.createElementVNode)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_for_activity_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("label", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_hierarchy.label), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.default_language ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_14, " If you do not set your default language, you have to choose and select language for all the narrative text in activity and organisation. ")) : (0, vue_1.createCommentVNode)("v-if", true)])])]), _hoisted_15, (0, vue_1.createElementVNode)("div", _hoisted_16, [(0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_18, [_hoisted_19, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-64", - name: "Default Hierarchy", - "hover-text": "If you are reporting both programmes (parent activities) and projects (child activities),\n choose the hierarchical level that most of your activities are at. e.g. parent activity = 1; child activity = 2.\n
    If all your activities are at the same level i.e. you have no child activities, then choose 1.", + name: _ctx.language.settings_lang.default_hierarchy.label, + "hover-text": _ctx.language.settings_lang.default_hierarchy.hover_text, "show-iati-reference": true - })])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "default-hierarchy", "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { return _ctx.defaultForm.hierarchy = $event; }), "class": "mb-2 register__input", type: "text", - placeholder: "Type default hierarchy here", + placeholder: _ctx.language.settings_lang.default_hierarchy.placeholder, onInput: _cache[5] || (_cache[5] = function ($event) { return _ctx.updateStore('hierarchy'); }) - }, null, 544 - /* HYDRATE_EVENTS, NEED_PATCH */ - ), [[vue_1.vModelText, _ctx.defaultForm.hierarchy]]), _ctx.defaultError.hierarchy ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, (0, vue_1.toDisplayString)(_ctx.defaultError.hierarchy), 1 + }, null, 40 + /* PROPS, HYDRATE_EVENTS */ + , _hoisted_20), [[vue_1.vModelText, _ctx.defaultForm.hierarchy]]), _ctx.defaultError.hierarchy ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_21, (0, vue_1.toDisplayString)(_ctx.defaultError.hierarchy), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.hierarchy ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_22, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_hierarchy.help_text), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.hierarchy ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_21, " If hierarchy is not reported then 1 is assumed. If multiple levels are reported then, to avoid double counting, financial transactions should only be reported at the lowest hierarchical level. ")) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_22, [_hoisted_23, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("label", _hoisted_24, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.budget_not_provided.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-72", - name: "Budget Not Provided", - "hover-text": "A code indicating the reason why this activity does not contain any iati-activity/budget elements. The attribute MUST only be used when no budget elements are present." - })])]), (0, vue_1.createVNode)(_component_Multiselect, { + name: _ctx.language.settings_lang.budget_not_provided.label, + "hover-text": _ctx.language.settings_lang.budget_not_provided.hover_text + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)(_component_Multiselect, { id: "budget_not_provided", modelValue: _ctx.defaultForm.budget_not_provided, "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { @@ -30691,7 +30908,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["vue__select", { error__input: _ctx.defaultError.budget_not_provided }]), - placeholder: "Select budget not provided type here", + placeholder: _ctx.language.settings_lang.budget_not_provided.placeholder, options: _ctx.props.budgetNotProvided, searchable: true, onClick: _cache[7] || (_cache[7] = function ($event) { @@ -30699,14 +30916,18 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, null, 8 /* PROPS */ - , ["modelValue", "class", "options"]), _ctx.defaultError.budget_not_provided ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_24, (0, vue_1.toDisplayString)(_ctx.defaultError.budget_not_provided), 1 + , ["modelValue", "class", "placeholder", "options"]), _ctx.defaultError.budget_not_provided ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)(_ctx.defaultError.budget_not_provided), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_26, [(0, vue_1.createElementVNode)("label", _hoisted_27, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.humanitarian.label), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_25, [_hoisted_26, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-72", - name: "Humanitarian", - "hover-text": "Add a 'Humanitarian Flag' to every activity that your organisation publishes data on. This means that your organisation identifies all their activities as wholly or partially addressing a humanitarian crisis or multiple crises. You can later manually add or remove a Humanitarian Flag on individual activities if required.", + name: _ctx.language.settings_lang.humanitarian.label, + "hover-text": _ctx.language.settings_lang.humanitarian.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createVNode)(_component_Multiselect, { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createVNode)(_component_Multiselect, { id: "humanitarian", modelValue: _ctx.defaultForm.humanitarian, "onUpdate:modelValue": _cache[8] || (_cache[8] = function ($event) { @@ -30715,7 +30936,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { "class": (0, vue_1.normalizeClass)(["vue__select", { error__input: _ctx.defaultError.humanitarian }]), - placeholder: "Select Humanitarian here", + placeholder: _ctx.language.settings_lang.humanitarian.placeholder, options: _ctx.props.humanitarian, searchable: true, onClick: _cache[9] || (_cache[9] = function ($event) { @@ -30723,9 +30944,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, null, 8 /* PROPS */ - , ["modelValue", "class", "options"]), _ctx.defaultError.humanitarian ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_27, (0, vue_1.toDisplayString)(_ctx.defaultError.humanitarian), 1 + , ["modelValue", "class", "placeholder", "options"]), _ctx.defaultError.humanitarian ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, (0, vue_1.toDisplayString)(_ctx.defaultError.humanitarian), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.humanitarian ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.humanitarian.help_text), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.defaultError.humanitarian ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_28, " If not selected, it will be set to 'Yes' in all the activities. ")) : (0, vue_1.createCommentVNode)("v-if", true)])])])]); + )) : (0, vue_1.createCommentVNode)("v-if", true)])])])]); } exports.render = render; @@ -30770,13 +30993,9 @@ var _hoisted_5 = { var _hoisted_6 = { href: "/activities" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("h2", { +var _hoisted_7 = { "class": "ml-3 text-heading-5 font-bold text-n-50 sm:text-heading-4" -}, " Settings ", -1 -/* HOISTED */ -); - +}; var _hoisted_8 = { "class": "flex" }; @@ -30786,13 +31005,10 @@ var _hoisted_9 = { var _hoisted_10 = { "class": "flex items-center justify-end" }; - -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_11 = { "class": "ghost-btn mr-4 sm:mr-8", href: "/activities" -}, "Cancel", -1 -/* HOISTED */ -); +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Loader = (0, vue_1.resolveComponent)("Loader"); @@ -30809,7 +31025,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { key: 0 })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("a", _hoisted_6, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "left-arrow" - })]), _hoisted_7]), (0, vue_1.createElementVNode)("div", null, [_ctx.toastVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Toast, { + })]), (0, vue_1.createElementVNode)("h2", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.settings_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", null, [_ctx.toastVisibility ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Toast, { key: 0, message: _ctx.toastMessage, type: _ctx.toastType @@ -30824,8 +31042,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: _cache[0] || (_cache[0] = function ($event) { return _ctx.toggleTab('publish'); }) - }, " Publishing Settings ", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.publishing_settings_label), 3 + /* TEXT, CLASS */ ), (0, vue_1.createElementVNode)("button", { "class": (0, vue_1.normalizeClass)(["tab-btn", { active__tab: _ctx.tab === 'default' @@ -30833,8 +31051,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { onClick: _cache[1] || (_cache[1] = function ($event) { return _ctx.toggleTab('default'); }) - }, " Default Values ", 2 - /* CLASS */ + }, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.default_values_label), 3 + /* TEXT, CLASS */ )]), _ctx.tab === 'publish' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_SettingPublishingForm, { key: 0, organization: _ctx.props.organization, @@ -30853,12 +31071,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* PROPS */ , ["currencies", "languages", "humanitarian", "budget-not-provided", "onKeyup"]))], 2 /* CLASS */ - )]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [_hoisted_11, (0, vue_1.createElementVNode)("button", { + )]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("a", _hoisted_11, (0, vue_1.toDisplayString)(_ctx.language.button_lang.cancel), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", { "class": "primary-btn save-btn", onClick: _cache[2] || (_cache[2] = function ($event) { return _ctx.submitForm('setting/store/publisher'); }) - }, (0, vue_1.toDisplayString)(_ctx.tab === 'publish' ? 'Save publishing setting' : 'Save default values'), 1 + }, (0, vue_1.toDisplayString)(_ctx.tab === 'publish' ? _ctx.language.button_lang.save_publishing_settings : _ctx.language.button_lang.save_default_values), 1 /* TEXT */ )])])]); } @@ -30886,13 +31106,9 @@ var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bund var _hoisted_1 = { "class": "registry__info" }; - -var _hoisted_2 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_2 = { "class": "mb-4 text-sm font-bold text-n-50" -}, "Registry Information", -1 -/* HOISTED */ -); - +}; var _hoisted_3 = { "class": "flex items-center mb-4 text-xs text-n-50" }; @@ -30905,14 +31121,10 @@ var _hoisted_5 = { var _hoisted_6 = { "class": "flex justify-between" }; - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_7 = { "for": "publisher-id" -}, "Publisher ID ", -1 -/* HOISTED */ -); - -var _hoisted_8 = ["value"]; +}; +var _hoisted_8 = ["placeholder", "value"]; var _hoisted_9 = { key: 0, "class": "error", @@ -30924,14 +31136,11 @@ var _hoisted_10 = { var _hoisted_11 = { "class": "flex justify-between" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("label", { +var _hoisted_12 = { "for": "api-token" -}, "API Token ", -1 -/* HOISTED */ -); - -var _hoisted_13 = { +}; +var _hoisted_13 = ["placeholder"]; +var _hoisted_14 = { key: 0, "class": "error", role: "alert" @@ -30940,10 +31149,14 @@ var _hoisted_13 = { function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_HoverText = (0, vue_1.resolveComponent)("HoverText"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [_hoisted_2, (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "IATI Registry Information", - "hover-text": "IATI Publisher needs to add your organisation's data to the IATI Registry (iatiregistry.org). To do this, we need to access your organisation's IATI Registry Publisher Account. Please provide your organisation's credentials from the IATI Registry." - })])])]), (0, vue_1.createElementVNode)("div", { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.registry_information.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.settings_lang.registry_information.label, + "hover-text": _ctx.language.settings_lang.registry_information.hover_text + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])])]), (0, vue_1.createElementVNode)("div", { "class": "mt-6 register", onKeyup: _cache[4] || (_cache[4] = (0, vue_1.withKeys)( //@ts-ignore function () { @@ -30955,18 +31168,22 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.autoVerify && _ctx.autoVerify.apply(_ctx, args); }, ["enter"])) - }, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [_hoisted_7, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + }, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("label", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.publisher_id.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { width: "w-72", - name: "Publisher ID", - "hover-text": "This is the unique ID for your organisation that you created when you set up your IATI Registry Publisher Account. It is a shortened version of your organisation's name, which will include lowercase letters and may include numbers and also - (dash) and _ (underscore). For example nef_mali' for Near East Foundation Mali.", + name: _ctx.language.settings_lang.publisher_id.label, + "hover-text": _ctx.language.settings_lang.publisher_id.hover_text, "show-iati-reference": true - })])]), (0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.createElementVNode)("input", { id: "publisher-id", "class": (0, vue_1.normalizeClass)(["mb-2 register__input", { error__input: _ctx.publishingError.publisher_id }]), type: "text", - placeholder: "Type Publisher ID here", + placeholder: _ctx.language.settings_lang.publisher_id.placeholder, value: _ctx.organization.publisher_id, disabled: "true", onInput: _cache[0] || (_cache[0] = function ($event) { @@ -30976,11 +31193,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /* CLASS, PROPS, HYDRATE_EVENTS */ , _hoisted_8)]), _ctx.publishingError.publisher_id ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.publishingError.publisher_id), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [_hoisted_12, (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { - name: "API Token", - "hover-text": "The API token is a unique key that is generated from your organisation's IATI Registry Publisher Account. It is required to give IATI Publisher permission to add data to the IATI Registry on your behalf. Generate a Token in the 'My Account' tab by logging into to the IATI Registry.", + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("div", _hoisted_10, [(0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("label", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.api_token.label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("button", null, [(0, vue_1.createVNode)(_component_HoverText, { + name: _ctx.language.settings_lang.api_token.label, + "hover-text": _ctx.language.settings_lang.api_token.hover_text, "show-iati-reference": true - })])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + }, null, 8 + /* PROPS */ + , ["name", "hover-text"])])]), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "api-token", "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return _ctx.publishingForm.api_token = $event; @@ -30989,21 +31210,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.publishingError.api_token }]), type: "text", - placeholder: "Type API Token here", + placeholder: _ctx.language.settings_lang.api_token.placeholder, onInput: _cache[2] || (_cache[2] = function ($event) { return _ctx.updateStore('api_token'); }) - }, null, 34 - /* CLASS, HYDRATE_EVENTS */ - ), [[vue_1.vModelText, _ctx.publishingForm.api_token]]), _ctx.publishingInfo.isVerificationRequested ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", { + }, null, 42 + /* CLASS, PROPS, HYDRATE_EVENTS */ + , _hoisted_13), [[vue_1.vModelText, _ctx.publishingForm.api_token]]), _ctx.publishingInfo.isVerificationRequested ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", { key: 0, "class": (0, vue_1.normalizeClass)({ tag__correct: _ctx.publishingInfo.token_verification, tag__incorrect: !_ctx.publishingInfo.token_verification }) - }, (0, vue_1.toDisplayString)(_ctx.publishingInfo.token_verification ? 'Correct' : 'Incorrect'), 3 + }, (0, vue_1.toDisplayString)(_ctx.publishingInfo.token_verification ? _ctx.language.settings_lang.correct_label : _ctx.language.settings_lang.incorrect_label), 3 /* TEXT, CLASS */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.publishingError.api_token ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.publishingError.api_token), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.publishingError.api_token ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.publishingError.api_token), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)])]), (0, vue_1.createElementVNode)("button", { "class": "primary-btn verify-btn", @@ -31017,7 +31238,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.submitPublishing && _ctx.submitPublishing.apply(_ctx, args); }) - }, " Verify ")], 32 + }, (0, vue_1.toDisplayString)(_ctx.language.settings_lang.uc_verify), 1 + /* TEXT */ + )], 32 /* HYDRATE_EVENTS */ )]); } @@ -31111,20 +31334,11 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "mr-1" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Logged in as "); - -var _hoisted_5 = { +var _hoisted_4 = { "class": "capitalize" }; -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createTextVNode)(", "); - -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("b", null, "Switch Back", -1 -/* HOISTED */ -); - -var _hoisted_8 = [_hoisted_7]; +var _hoisted_5 = /*#__PURE__*/(0, vue_1.createTextVNode)(", "); function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -31132,16 +31346,20 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "smile", "class": "mt-1 mr-1 text-base text-spring-50" - }), (0, vue_1.createElementVNode)("span", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("b", _hoisted_5, (0, vue_1.toDisplayString)($props.name), 1 + }), (0, vue_1.createElementVNode)("span", _hoisted_3, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)($setup.language.common_lang.logged_in_as) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("b", _hoisted_4, (0, vue_1.toDisplayString)($props.name), 1 /* TEXT */ - ), _hoisted_6, (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($props.organizationName), 1 + ), _hoisted_5, (0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($props.organizationName), 1 /* TEXT */ )]), (0, vue_1.createElementVNode)("span", { "class": "cursor-pointer text-spring-50", onClick: _cache[0] || (_cache[0] = function ($event) { return $setup.switchBack(); }) - }, _hoisted_8)])]); + }, [(0, vue_1.createElementVNode)("b", null, (0, vue_1.toDisplayString)($setup.language.button_lang.switch_back), 1 + /* TEXT */ + )])])]); } exports.render = render; @@ -31178,44 +31396,30 @@ var _hoisted_4 = ["href"]; var _hoisted_5 = { "class": "sorting-indicator" }; - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Organisation Name", -1 -/* HOISTED */ -); - -var _hoisted_7 = { +var _hoisted_6 = { id: "activities", scope: "col", style: { "width": "173px" } }; -var _hoisted_8 = ["href"]; -var _hoisted_9 = { +var _hoisted_7 = ["href"]; +var _hoisted_8 = { "class": "sorting-indicator" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Activities", -1 -/* HOISTED */ -); - -var _hoisted_11 = { +var _hoisted_9 = { id: "updated_on", scope: "col", style: { "width": "173px" } }; -var _hoisted_12 = ["href"]; -var _hoisted_13 = { +var _hoisted_10 = ["href"]; +var _hoisted_11 = { "class": "sorting-indicator" }; -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, "Updated On", -1 -/* HOISTED */ -); - -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { +var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { id: "proxy", scope: "col", style: { @@ -31225,54 +31429,44 @@ var _hoisted_15 = /*#__PURE__*/(0, vue_1.createElementVNode)("th", { /* HOISTED */ ); -var _hoisted_16 = { +var _hoisted_13 = { key: 0 }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", { +var _hoisted_14 = { colspan: "4" -}, "Fetching Data...", -1 -/* HOISTED */ -); - -var _hoisted_18 = [_hoisted_17]; -var _hoisted_19 = { +}; +var _hoisted_15 = { key: 1 }; - -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createElementVNode)("td", { +var _hoisted_16 = { colspan: "4" -}, "No Data Available", -1 -/* HOISTED */ -); - -var _hoisted_21 = [_hoisted_20]; -var _hoisted_22 = { +}; +var _hoisted_17 = { key: 0, "class": "ellipsis relative" }; -var _hoisted_23 = { +var _hoisted_18 = { "class": "ellipsis overflow-hidden" }; -var _hoisted_24 = { +var _hoisted_19 = { "class": "w-52" }; -var _hoisted_25 = { +var _hoisted_20 = { "class": "ellipsis__title--hover" }; -var _hoisted_26 = { +var _hoisted_21 = { key: 1 }; -var _hoisted_27 = { +var _hoisted_22 = { "class": "text-blue-40" }; -var _hoisted_28 = { +var _hoisted_23 = { "class": "text-n-40" }; -var _hoisted_29 = { +var _hoisted_24 = { "class": "text-n-40" }; -var _hoisted_30 = { +var _hoisted_25 = { "class": "mt-6" }; @@ -31286,45 +31480,57 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { icon: "".concat($setup.orderType === 'name' ? $setup.sortingDirection() : $setup.defaultSortDirection, "-arrow") }, null, 8 /* PROPS */ - , ["icon"])]), _hoisted_6], 10 + , ["icon"])]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.organisation_name), 1 + /* TEXT */ + )], 10 /* CLASS, PROPS */ - , _hoisted_4)]), (0, vue_1.createElementVNode)("th", _hoisted_7, [(0, vue_1.createElementVNode)("a", { + , _hoisted_4)]), (0, vue_1.createElementVNode)("th", _hoisted_6, [(0, vue_1.createElementVNode)("a", { "class": (0, vue_1.normalizeClass)(["transition duration-500 text-n-50 hover:text-spring-50", $setup.orderType === 'all_activities_count' ? $setup.sortingDirection() : $setup.defaultSortDirection]), href: $setup.sortBy('all_activities_count') - }, [(0, vue_1.createElementVNode)("span", _hoisted_9, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_8, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "".concat($setup.orderType === 'all_activities_count' ? $setup.sortingDirection() : $setup.defaultSortDirection, "-arrow") }, null, 8 /* PROPS */ - , ["icon"])]), _hoisted_10], 10 + , ["icon"])]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.activities), 1 + /* TEXT */ + )], 10 /* CLASS, PROPS */ - , _hoisted_8)]), (0, vue_1.createElementVNode)("th", _hoisted_11, [(0, vue_1.createElementVNode)("a", { + , _hoisted_7)]), (0, vue_1.createElementVNode)("th", _hoisted_9, [(0, vue_1.createElementVNode)("a", { "class": (0, vue_1.normalizeClass)(["transition duration-500 text-n-50 hover:text-spring-50", $setup.orderType === 'updated_at' ? $setup.sortingDirection() : $setup.defaultSortDirection]), href: $setup.sortBy('updated_at') - }, [(0, vue_1.createElementVNode)("span", _hoisted_13, [(0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createElementVNode)("span", _hoisted_11, [(0, vue_1.createVNode)(_component_svg_vue, { icon: "".concat($setup.orderType === 'updated_at' ? $setup.sortingDirection() : $setup.defaultSortDirection, "-arrow") }, null, 8 /* PROPS */ - , ["icon"])]), _hoisted_14], 10 + , ["icon"])]), (0, vue_1.createElementVNode)("span", null, (0, vue_1.toDisplayString)($setup.language.common_lang.update_on), 1 + /* TEXT */ + )], 10 /* CLASS, PROPS */ - , _hoisted_12)]), _hoisted_15])]), (0, vue_1.createElementVNode)("tbody", null, [$setup.organisationData.status === 'fetching' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_16, _hoisted_18)) : $setup.organisationData.status === 'empty' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_19, _hoisted_21)) : ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, { + , _hoisted_10)]), _hoisted_12])]), (0, vue_1.createElementVNode)("tbody", null, [$setup.organisationData.status === 'fetching' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_13, [(0, vue_1.createElementVNode)("td", _hoisted_14, (0, vue_1.toDisplayString)($setup.language.common_lang.fetching_data), 1 + /* TEXT */ + )])) : $setup.organisationData.status === 'empty' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", _hoisted_15, [(0, vue_1.createElementVNode)("td", _hoisted_16, (0, vue_1.toDisplayString)($setup.language.common_lang.data) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.missing.not_available), 1 + /* TEXT */ + )])) : ((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 2 }, (0, vue_1.renderList)($setup.organisationData.data.data, function (data) { var _a, _b, _c, _d, _e; return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("tr", { key: data.id - }, [(0, vue_1.createElementVNode)("td", null, [data.name ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_22, [(0, vue_1.createElementVNode)("span", _hoisted_23, (0, vue_1.toDisplayString)((_b = (_a = data === null || data === void 0 ? void 0 : data.name[0]) === null || _a === void 0 ? void 0 : _a.narrative) !== null && _b !== void 0 ? _b : 'Name Missing'), 1 + }, [(0, vue_1.createElementVNode)("td", null, [data.name ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_17, [(0, vue_1.createElementVNode)("span", _hoisted_18, (0, vue_1.toDisplayString)((_b = (_a = data === null || data === void 0 ? void 0 : data.name[0]) === null || _a === void 0 ? void 0 : _a.narrative) !== null && _b !== void 0 ? _b : $setup.language.common_lang.missing.name), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("span", _hoisted_20, (0, vue_1.toDisplayString)((_d = (_c = data === null || data === void 0 ? void 0 : data.name[0]) === null || _c === void 0 ? void 0 : _c.narrative) !== null && _d !== void 0 ? _d : $setup.language.common_lang.missing.name), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("span", _hoisted_25, (0, vue_1.toDisplayString)((_d = (_c = data === null || data === void 0 ? void 0 : data.name[0]) === null || _c === void 0 ? void 0 : _c.narrative) !== null && _d !== void 0 ? _d : 'Name Missing'), 1 + )])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_21, (0, vue_1.toDisplayString)($setup.language.common_lang.missing.name), 1 /* TEXT */ - )])])) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_26, "Name Missing")), (0, vue_1.createElementVNode)("div", _hoisted_27, (0, vue_1.toDisplayString)((_e = data === null || data === void 0 ? void 0 : data.user) === null || _e === void 0 ? void 0 : _e.email), 1 + )), (0, vue_1.createElementVNode)("div", _hoisted_22, (0, vue_1.toDisplayString)((_e = data === null || data === void 0 ? void 0 : data.user) === null || _e === void 0 ? void 0 : _e.email), 1 /* TEXT */ - )]), (0, vue_1.createElementVNode)("td", _hoisted_28, (0, vue_1.toDisplayString)(data.all_activities_count) + " activities ", 1 + )]), (0, vue_1.createElementVNode)("td", _hoisted_23, (0, vue_1.toDisplayString)(data.all_activities_count) + " " + (0, vue_1.toDisplayString)($setup.language.common_lang.activities_nocase), 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("td", _hoisted_29, (0, vue_1.toDisplayString)($setup.dateFormat(data.updated_at, 'DD MMMM, YYYY')), 1 + ), (0, vue_1.createElementVNode)("td", _hoisted_24, (0, vue_1.toDisplayString)($setup.dateFormat(data.updated_at, 'DD MMMM, YYYY')), 1 /* TEXT */ ), (0, vue_1.createElementVNode)("td", null, [(0, vue_1.createVNode)($setup["BtnComponent"], { - text: "proxy", + text: $setup.language.button_lang.proxy, type: "outline", icon: "smile", onClick: function onClick($event) { @@ -31334,10 +31540,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { } }, null, 8 /* PROPS */ - , ["onClick"])])]); + , ["text", "onClick"])])]); }), 128 /* KEYED_FRAGMENT */ - ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_30, [$setup.organisationData.data && $setup.organisationData.data.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Pagination"], { + ))])])]), (0, vue_1.createElementVNode)("div", _hoisted_25, [$setup.organisationData.data && $setup.organisationData.data.last_page > 1 ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)($setup["Pagination"], { key: 0, data: $setup.organisationData.data, onFetchActivities: $setup.fetchOrganisation @@ -31377,13 +31583,9 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "space-y-4 sm:space-y-6" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_4 = { "class": "text-center text-xl font-bold text-n-50 sm:text-2xl" -}, " Please verify your account ", -1 -/* HOISTED */ -); - +}; var _hoisted_5 = { "class": "text-sm text-n-40 sm:text-base" }; @@ -31393,25 +31595,26 @@ var _hoisted_6 = /*#__PURE__*/(0, vue_1.createTextVNode)(" A verification email var _hoisted_7 = { "class": "font-bold text-n-50" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createTextVNode)(". Please click on the link in the email to verify and activate your new IATI publisher account. "); - -var _hoisted_9 = { +var _hoisted_8 = { href: "/activities", "class": "btn btn-next get-started-btn" }; -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Get started "); - function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("form", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("p", _hoisted_5, [_hoisted_6, (0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.props.email), 1 + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("form", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("p", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.email_verification.verify_your_account), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_5, [_hoisted_6, (0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.props.email), 1 + /* TEXT */ + ), (0, vue_1.createTextVNode)(". " + (0, vue_1.toDisplayString)(_ctx.language.email_verification.click_and_activate), 1 /* TEXT */ - ), _hoisted_8])]), (0, vue_1.createVNode)(_component_svg_vue, { + )])]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "verification", icon: "ic-verification" - }), (0, vue_1.createElementVNode)("a", _hoisted_9, [_hoisted_10, (0, vue_1.createVNode)(_component_svg_vue, { + }), (0, vue_1.createElementVNode)("a", _hoisted_8, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.button_lang.get_started) + " ", 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "text-2xl", icon: "right-arrow" })])])]); @@ -31445,61 +31648,55 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "section__container" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "section__title" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("h2", { - "class": "md:text-4xl text-2xl" -}, "Create IATI Publisher Account and IATI Registry Account"), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, " Register your organisation to start your IATI publishing journey by creating accounts in IATI publisher and IATI Registry at once. ")], -1 -/* HOISTED */ -); - +}; var _hoisted_4 = { - "class": "section__wrapper flex justify-center" + "class": "md:text-4xl text-2xl" }; var _hoisted_5 = { - "class": "mb-4 block border-b border-b-n-10 pb-4 xl:hidden" + "class": "section__wrapper flex justify-center" }; var _hoisted_6 = { - "class": "text-base font-bold" + "class": "mb-4 block border-b border-b-n-10 pb-4 xl:hidden" }; var _hoisted_7 = { - "class": "relative mt-3 text-sm text-n-40" + "class": "text-base font-bold" }; var _hoisted_8 = { + "class": "relative mt-3 text-sm text-n-40" +}; +var _hoisted_9 = { key: 0, "class": "list__active" }; -var _hoisted_9 = { +var _hoisted_10 = { "class": "flex items-center" }; -var _hoisted_10 = { +var _hoisted_11 = { key: 0, "class": "mr-3" }; -var _hoisted_11 = { +var _hoisted_12 = { key: 1, "class": "detail mt-2 font-normal" }; -var _hoisted_12 = { +var _hoisted_13 = { "class": "form__container" }; -var _hoisted_13 = { +var _hoisted_14 = { "class": "flex items-center space-x-1" }; -var _hoisted_14 = { +var _hoisted_15 = { "class": "text-xl font-bold text-n-50 sm:text-2xl" }; -var _hoisted_15 = { +var _hoisted_16 = { key: 0, "class": "feedback mt-6 border-l-2 border-crimson-50 bg-crimson-10 p-4 text-sm text-n-50" }; -var _hoisted_16 = { +var _hoisted_17 = { "class": "mb-2 flex font-bold" }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Error: "); - var _hoisted_18 = { "class": "ml-8 xl:mr-1" }; @@ -31538,67 +31735,50 @@ var _hoisted_30 = { var _hoisted_31 = { "class": "flex flex-wrap items-center justify-between" }; - -var _hoisted_32 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Go back "); - -var _hoisted_33 = { +var _hoisted_32 = { key: 1, "class": "pb-4 text-sm font-normal text-n-40 sm:pb-0" }; - -var _hoisted_34 = /*#__PURE__*/(0, vue_1.createTextVNode)("Already have an account? "); - -var _hoisted_35 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_33 = { "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", href: "/" -}, "Sign In.", -1 -/* HOISTED */ -); - -var _hoisted_36 = [_hoisted_34, _hoisted_35]; - -var _hoisted_37 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Next Step "); - -var _hoisted_38 = { +}; +var _hoisted_34 = { key: 0, "class": "mt-6 text-center" }; - -var _hoisted_39 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_35 = { "class": "text-sm font-normal text-n-40" -}, [/*#__PURE__*/(0, vue_1.createTextVNode)("Already have an account? "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +}; +var _hoisted_36 = { "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", href: "/" -}, "Sign In.")], -1 -/* HOISTED */ -); - -var _hoisted_40 = [_hoisted_39]; -var _hoisted_41 = { +}; +var _hoisted_37 = { "class": "register__sidebar hidden xl:block" }; -var _hoisted_42 = { +var _hoisted_38 = { "class": "text-base font-bold" }; -var _hoisted_43 = { +var _hoisted_39 = { "class": "relative mt-6 text-sm text-n-40" }; -var _hoisted_44 = { +var _hoisted_40 = { key: 0, "class": "list__active" }; -var _hoisted_45 = { +var _hoisted_41 = { "class": "flex items-center" }; -var _hoisted_46 = { +var _hoisted_42 = { key: 0, "class": "ml-6 mr-3" }; -var _hoisted_47 = { +var _hoisted_43 = { key: 1, "class": "ml-6 mr-3" }; -var _hoisted_48 = { +var _hoisted_44 = { key: 1, "class": "detail mt-2 mb-6 font-normal xl:pr-2" }; @@ -31616,7 +31796,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("section", _hoisted_1, [_ctx.isLoaderVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Loader, { key: 0 - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [_ctx.checkStep('5') ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_EmailVerification, { + })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("h2", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.register_lang.create_iati_publisher_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)(_ctx.language.register_lang.create_iati_publisher_subheader), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_5, [_ctx.checkStep('5') ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_EmailVerification, { key: 0, email: _ctx.formData['email'] }, null, 8 @@ -31634,16 +31818,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.goToNextForm && _ctx.goToNextForm.apply(_ctx, args); }, ["enter"])) - }, [(0, vue_1.createElementVNode)("aside", _hoisted_5, [(0, vue_1.createElementVNode)("span", _hoisted_6, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 5", 1 + }, [(0, vue_1.createElementVNode)("aside", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 5", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("ul", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { + ), (0, vue_1.createElementVNode)("ul", _hoisted_8, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: i, "class": (0, vue_1.normalizeClass)({ 'relative font-bold text-n-50': _ctx.checkStep(key), 'mb-6 hidden': !_ctx.checkStep(key) }) - }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_9, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(i + 1), 1 + }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_10, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(i + 1), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", { "class": (0, vue_1.normalizeClass)(["font-bold", { @@ -31653,26 +31837,28 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, (0, vue_1.toDisplayString)(form["title"]), 3 /* TEXT, CLASS */ - )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_11, (0, vue_1.toDisplayString)(form["description"]), 1 + )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_12, (0, vue_1.toDisplayString)(form["description"]), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [_ctx.registerForm[_ctx.getCurrentStep()]['hover_text'] ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [_ctx.registerForm[_ctx.getCurrentStep()]['hover_text'] ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { key: 0, "hover-text": _ctx.registerForm[_ctx.getCurrentStep()]['hover_text'], name: _ctx.registerForm[_ctx.getCurrentStep()].title, position: "right" }, null, 8 /* PROPS */ - , ["hover-text", "name"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.registerForm[_ctx.getCurrentStep()].title), 1 + , ["hover-text", "name"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.registerForm[_ctx.getCurrentStep()].title), 1 /* TEXT */ - )]), Object.keys(_ctx.iatiError).length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_15, [(0, vue_1.createElementVNode)("p", _hoisted_16, [(0, vue_1.createVNode)(_component_svg_vue, { + )]), Object.keys(_ctx.iatiError).length > 0 ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_16, [(0, vue_1.createElementVNode)("p", _hoisted_17, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-2 text-xl", icon: "warning" - }), _hoisted_17]), (0, vue_1.createElementVNode)("p", _hoisted_18, [(0, vue_1.createElementVNode)("ul", _hoisted_19, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.iatiError, function (error, error_key) { + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.error["default"]) + ": ", 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("p", _hoisted_18, [(0, vue_1.createElementVNode)("ul", _hoisted_19, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.iatiError, function (error, error_key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: error_key }, [_typeof(error) === 'object' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_20, (0, vue_1.toDisplayString)(error[0]), 1 @@ -31781,29 +31967,41 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-3 cursor-pointer", icon: "left-arrow" - }), _hoisted_32])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_33, _hoisted_36)) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.checkStep(5) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.go_back), 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_32, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.already_have_account) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_33, (0, vue_1.toDisplayString)(_ctx.language.button_lang.sign_in) + ".", 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.checkStep(5) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { key: 2, "class": "btn btn-next", onClick: _cache[4] || (_cache[4] = function ($event) { return _ctx.goToNextForm(); }) - }, [_hoisted_37, (0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.button_lang.next_step) + " ", 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "text-2xl", icon: "right-arrow" - })])) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.checkStep(2) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_38, _hoisted_40)) : (0, vue_1.createCommentVNode)("v-if", true)], 32 + })])) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.checkStep(2) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_34, [(0, vue_1.createElementVNode)("span", _hoisted_35, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.already_have_account) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_36, (0, vue_1.toDisplayString)(_ctx.language.button_lang.sign_in) + ".", 1 + /* TEXT */ + )])])) : (0, vue_1.createCommentVNode)("v-if", true)], 32 /* HYDRATE_EVENTS */ - )), (0, vue_1.createElementVNode)("aside", _hoisted_41, [(0, vue_1.createElementVNode)("span", _hoisted_42, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 5", 1 + )), (0, vue_1.createElementVNode)("aside", _hoisted_37, [(0, vue_1.createElementVNode)("span", _hoisted_38, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 5", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("ul", _hoisted_43, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { + ), (0, vue_1.createElementVNode)("ul", _hoisted_39, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: i, "class": (0, vue_1.normalizeClass)({ 'relative font-bold text-n-50': _ctx.checkStep(key), 'mb-6 flex items-center': !_ctx.checkStep(key) }) - }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_44)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_45, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_46, (0, vue_1.toDisplayString)(i + 1), 1 + }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_40)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_41, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, (0, vue_1.toDisplayString)(i + 1), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_47, [(0, vue_1.createVNode)(_component_svg_vue, { + )) : (0, vue_1.createCommentVNode)("v-if", true), form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_43, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-xs", icon: "checked" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", { @@ -31814,7 +32012,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, (0, vue_1.toDisplayString)(form["title"]), 3 /* TEXT, CLASS */ - )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_48, (0, vue_1.toDisplayString)(form["description"]), 1 + )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_44, (0, vue_1.toDisplayString)(form["description"]), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ @@ -31828,6 +32026,289 @@ exports.render = render; /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true": +/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true ***! + \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.render = void 0; + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "smooth -mb-7 bg-[#e5e5e5] px-5 py-7 sm:px-10 sm:py-14 md:-mb-20" +}; +var _hoisted_2 = { + "class": "mx-auto max-w-[700px]" +}; +var _hoisted_3 = { + "class": "rounded bg-white py-4 shadow-textbox sm:py-8" +}; +var _hoisted_4 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_5 = { + "class": "text-base" +}; +var _hoisted_6 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_7 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_8 = { + "class": "text-base" +}; +var _hoisted_9 = { + "class": "mt-4 ml-4 list-disc text-base text-bluecoral" +}; +var _hoisted_10 = { + "class": "text-base" +}; +var _hoisted_11 = { + "class": "text-black" +}; +var _hoisted_12 = { + "class": "text-base" +}; +var _hoisted_13 = { + "class": "text-black" +}; +var _hoisted_14 = { + "class": "text-base" +}; +var _hoisted_15 = { + "class": "text-black" +}; +var _hoisted_16 = { + "class": "text-base" +}; +var _hoisted_17 = { + "class": "text-black" +}; +var _hoisted_18 = { + "class": "text-base" +}; +var _hoisted_19 = { + "class": "text-black" +}; +var _hoisted_20 = { + "class": "mt-4 text-base" +}; +var _hoisted_21 = { + target: "_blank", + rel: "noopener noreferrer", + href: "/organisation" +}; +var _hoisted_22 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_23 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_24 = { + "class": "text-base" +}; +var _hoisted_25 = { + "class": "my-4 ml-4 list-disc text-base text-bluecoral" +}; +var _hoisted_26 = { + "class": "text-base" +}; +var _hoisted_27 = ["innerHTML"]; +var _hoisted_28 = { + "class": "text-base" +}; +var _hoisted_29 = ["innerHTML"]; +var _hoisted_30 = { + "class": "text-base" +}; +var _hoisted_31 = ["innerHTML"]; +var _hoisted_32 = { + "class": "text-base" +}; +var _hoisted_33 = ["innerHTML"]; +var _hoisted_34 = { + "class": "text-base" +}; +var _hoisted_35 = ["innerHTML"]; +var _hoisted_36 = { + "class": "text-base" +}; +var _hoisted_37 = ["innerHTML"]; +var _hoisted_38 = { + "class": "text-base" +}; +var _hoisted_39 = ["innerHTML"]; +var _hoisted_40 = { + "class": "text-lg font-bold text-bluecoral" +}; +var _hoisted_41 = { + "class": "my-4 text-base" +}; +var _hoisted_42 = { + "class": "my-4 text-base" +}; +var _hoisted_43 = { + "class": "my-4 text-base" +}; +var _hoisted_44 = { + "class": "my-4 text-base" +}; +var _hoisted_45 = { + target: "_blank", + rel: "noopener noreferrer", + href: "/organisation" +}; +var _hoisted_46 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_47 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_48 = { + "class": "text-base" +}; +var _hoisted_49 = { + target: "_blank", + rel: "noopener noreferrer", + "class": "my-2" +}; + +var _hoisted_50 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 +/* HOISTED */ +); + +var _hoisted_51 = { + target: "_blank", + rel: "noopener noreferrer", + "class": "my-2" +}; +var _hoisted_52 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_53 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_54 = { + "class": "text-base" +}; +var _hoisted_55 = { + target: "_blank", + rel: "noopener noreferrer", + href: "https://iatistandard.org/en/iati-standard/203/activity-standard/", + "class": "my-2" +}; + +var _hoisted_56 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 +/* HOISTED */ +); + +var _hoisted_57 = { + target: "_blank", + rel: "noopener noreferrer", + href: "https://iatistandard.org/en/iati-standard/203/organisation-standard/", + "class": "my-2" +}; + +function render(_ctx, _cache, $props, $setup, $data, $options) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("section", _hoisted_3, [(0, vue_1.createElementVNode)("article", _hoisted_4, [(0, vue_1.createElementVNode)("p", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.iati_standard.iati_standard_description.one), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_6, [(0, vue_1.createElementVNode)("h3", _hoisted_7, " 1. " + (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_8, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_9, [(0, vue_1.createElementVNode)("li", _hoisted_10, [(0, vue_1.createElementVNode)("span", _hoisted_11, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.one), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_12, [(0, vue_1.createElementVNode)("span", _hoisted_13, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.two), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_14, [(0, vue_1.createElementVNode)("span", _hoisted_15, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.three), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_16, [(0, vue_1.createElementVNode)("span", _hoisted_17, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.four), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_18, [(0, vue_1.createElementVNode)("span", _hoisted_19, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.five), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("p", _hoisted_20, [(0, vue_1.createElementVNode)("a", _hoisted_21, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.two), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("article", _hoisted_22, [(0, vue_1.createElementVNode)("h3", _hoisted_23, " 2. " + (0, vue_1.toDisplayString)($setup.language.iati_standard.activity_data_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_24, (0, vue_1.toDisplayString)($setup.language.iati_standard.organisation_data_description.one.list_items.header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_25, [(0, vue_1.createElementVNode)("li", _hoisted_26, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.one + }, null, 8 + /* PROPS */ + , _hoisted_27)]), (0, vue_1.createElementVNode)("li", _hoisted_28, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.two + }, null, 8 + /* PROPS */ + , _hoisted_29)]), (0, vue_1.createElementVNode)("li", _hoisted_30, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.three + }, null, 8 + /* PROPS */ + , _hoisted_31)]), (0, vue_1.createElementVNode)("li", _hoisted_32, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.four + }, null, 8 + /* PROPS */ + , _hoisted_33)]), (0, vue_1.createElementVNode)("li", _hoisted_34, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.five + }, null, 8 + /* PROPS */ + , _hoisted_35)]), (0, vue_1.createElementVNode)("li", _hoisted_36, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.six + }, null, 8 + /* PROPS */ + , _hoisted_37)]), (0, vue_1.createElementVNode)("li", _hoisted_38, [(0, vue_1.createElementVNode)("span", { + "class": "text-black", + innerHTML: $setup.language.iati_standard.activity_data_description.one.list_items.seven + }, null, 8 + /* PROPS */ + , _hoisted_39)])]), (0, vue_1.createElementVNode)("h6", _hoisted_40, (0, vue_1.toDisplayString)($setup.language.iati_standard.publishing_data_either_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_41, (0, vue_1.toDisplayString)($setup.language.iati_standard.publishing_data_either_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_42, (0, vue_1.toDisplayString)($setup.language.iati_standard.publishing_data_either_description.two), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_43, (0, vue_1.toDisplayString)($setup.language.iati_standard.publishing_data_either_description.three), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_44, [(0, vue_1.createElementVNode)("a", _hoisted_45, (0, vue_1.toDisplayString)($setup.language.iati_standard.publishing_data_either_description.four), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("article", _hoisted_46, [(0, vue_1.createElementVNode)("h3", _hoisted_47, (0, vue_1.toDisplayString)($setup.language.iati_standard.download_pdf_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_48, (0, vue_1.toDisplayString)($setup.language.iati_standard.download_pdf_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_49, (0, vue_1.toDisplayString)($setup.language.iati_standard.download_pdf_description.two), 1 + /* TEXT */ + ), _hoisted_50, (0, vue_1.createElementVNode)("a", _hoisted_51, (0, vue_1.toDisplayString)($setup.language.iati_standard.download_pdf_description.three), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_52, [(0, vue_1.createElementVNode)("h3", _hoisted_53, (0, vue_1.toDisplayString)($setup.language.iati_standard.iati_standard_reference_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_54, (0, vue_1.toDisplayString)($setup.language.iati_standard.iati_standard_reference_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_55, [(0, vue_1.createElementVNode)("u", null, (0, vue_1.toDisplayString)($setup.language.iati_standard.iati_standard_reference_description.two), 1 + /* TEXT */ + )]), _hoisted_56, (0, vue_1.createElementVNode)("a", _hoisted_57, [(0, vue_1.createElementVNode)("u", null, (0, vue_1.toDisplayString)($setup.language.iati_standard.iati_standard_reference_description.three), 1 + /* TEXT */ + )])])])])]); +} + +exports.render = render; + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=template&id=dca69396&ts=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=template&id=dca69396&ts=true ***! @@ -31853,101 +32334,320 @@ var _hoisted_2 = { var _hoisted_3 = { "class": "rounded bg-white px-6 py-4 shadow-textbox sm:px-12 sm:py-8" }; - -var _hoisted_4 = /*#__PURE__*/(0, vue_1.createStaticVNode)("

    Organisations using IATI Publisher need to take the following steps to publish your data:

    1. Register a Publisher Account

    Organisations who publish data to IATI are referred to as 'Publishers'. Before publishing data, organisations need their own 'Publisher Account' on the IATI Registry (iatiregistry.org). If your organisation does not yet have a Publisher Account on the IATI Registry, IATI Publisher will ask you for additional details and create one for you (so you don’t have to visit IATI Registry to do this).

    Create your IATI Registry Publisher Account

    If your organisation has already registered a Publisher Account on the IATI Registry, IATI Publisher will ask you to provide your organisation’s account details.

    Provide your organisations existing IATI Registry Publisher Account details
    ", 2); - -var _hoisted_6 = /*#__PURE__*/(0, vue_1.createElementVNode)("h3", { +var _hoisted_4 = { + "class": "text-lg font-bold text-bluecoral" +}; +var _hoisted_5 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_6 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_7 = { + "class": "my-2 text-base" +}; +var _hoisted_8 = { + target: "_blank", + href: "https://www.iatiregistry.org/register_publisher/" +}; +var _hoisted_9 = { + "class": "my-2 text-base" +}; +var _hoisted_10 = { + target: "_blank", + href: "/register" +}; +var _hoisted_11 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_12 = { "class": "py-2 text-2xl font-bold text-bluecoral" -}, " 2. Publish your Organisation Data ", -1 +}; +var _hoisted_13 = { + "class": "my-2 text-base" +}; +var _hoisted_14 = { + "class": "my-2 text-base" +}; +var _hoisted_15 = { + target: "_blank", + href: "/iati-standard" +}; + +var _hoisted_16 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 /* HOISTED */ ); -var _hoisted_7 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_17 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_18 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_19 = { + "class": "my-2 text-base" +}; +var _hoisted_20 = { + "class": "mt-2 text-base" +}; +var _hoisted_21 = { + "class": "mt-4 ml-4 list-disc text-base text-bluecoral" +}; +var _hoisted_22 = { + "class": "text-base" +}; +var _hoisted_23 = { + "class": "text-black" +}; +var _hoisted_24 = { + "class": "text-base" +}; +var _hoisted_25 = { + "class": "text-black" +}; +var _hoisted_26 = { + "class": "text-base" +}; +var _hoisted_27 = { + "class": "text-black" +}; +var _hoisted_28 = { + "class": "mt-2 text-base" +}; +var _hoisted_29 = { + "class": "mt-4 ml-4 list-disc text-base text-bluecoral" +}; +var _hoisted_30 = { + "class": "text-base" +}; +var _hoisted_31 = { + "class": "text-black" +}; +var _hoisted_32 = { + "class": "text-base" +}; +var _hoisted_33 = { + "class": "text-black" +}; +var _hoisted_34 = { "class": "my-2 text-base" -}, " The IATI Standard requires you to provide data about your entire organisation. For example, basic information about your organisation, such as its name and financial data about your entire organisation’s budgets and expenditure. ", -1 +}; +var _hoisted_35 = { + target: "_blank", + href: "/iati-standard" +}; + +var _hoisted_36 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 /* HOISTED */ ); -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_37 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_38 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_39 = { "class": "my-2 text-base" -}, " The IATI Standard contains a wide range of data fields. Data fields are referred to as ‘elements’ and they represent a basic unit of information in the IATI Standard. For each element you will find its technical definition, which is labelled as “IATI Standard Reference” and helpful guidance on the data you are required to provide. Your organisation is encouraged to (at least) publish data in fields marked as “Core” in IATI Publisher. Core elements include IATI’s \"mandatory and recommended\" elements and it is important to provide this data to ensure your data is usable and useful. ", -1 -/* HOISTED */ -); +}; +var _hoisted_40 = ["innerHTML"]; +var _hoisted_41 = { + "class": "my-2 text-base" +}; +var _hoisted_42 = ["innerHTML"]; +var _hoisted_43 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_44 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_45 = { + "class": "my-2 text-base" +}; +var _hoisted_46 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_47 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_48 = { + "class": "my-2 text-base" +}; +var _hoisted_49 = { + "class": "my-2 text-base" +}; -var _hoisted_9 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - target: "_blank", - href: "/iati-standard" -}, " Discover what Activity Data is required by the IATI Standard ", -1 +var _hoisted_50 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 /* HOISTED */ ); -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("br", null, null, -1 +var _hoisted_51 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { + target: "_blank", + href: "https://iatiregistry.org/publisher/" +}, " https://iatiregistry.org/publisher/ ", -1 /* HOISTED */ ); -var _hoisted_11 = /*#__PURE__*/(0, vue_1.createStaticVNode)("

    3. Publish your Activity Data

    You also need to provide data about your organisation’s development and humanitarian ‘activities’. The unit of work described by an ‘activity’ is determined by the organisation that is publishing the data. For example, an activity could be a donor government providing US$ 50 million to a recipient country’s government to implement basic education over 5 years. Or an activity could be an NGO spending US$ 500,000 to deliver clean drinking water to 1000 households over 6 months.

    Therefore your organisation will need to determine how it will divide its work internally into activities. You could consider one activity to be:

    • a large programme at country or region level
    • a smaller project in a local area
    • the work relating to a particular grant or contract

    You can provide your Activity Data in two ways on IATI Publisher:

    • fill out the data fields in the Activity Data form for each Activity that you create
    • If you have multiple activities, you can use the Bulk Upload feature to upload a spreadsheet of the core fields of your data then you can edit them further using the online Activity Data form.

    When publishing your Activity Data you are encouraged to (at least) publish data in fields marked as “Core” in IATI Publisher. They include IATI’s "mandatory and recommended" elements and it is important to provide this data to ensure your data is usable and useful.

    Discover what Activity Data is required by the IATI Standard
    ", 9); +var _hoisted_52 = /*#__PURE__*/(0, vue_1.createTextVNode)(" . "); -var _hoisted_20 = /*#__PURE__*/(0, vue_1.createStaticVNode)("

    4. Understand further data requirements

    If your organisation receives funding from the UK, Dutch or Belgian governments, you may also need to report IATI data according to their specific requirements. You are advised to understand the specific IATI data requirements of each government if you are receiving a grant from them.See more information.

    You will also need to consider if your organisation needs to exclude data that it publishes. For example an organisation may not be able to publish data because of political sensitivity issues or if information is commercially restricted. See information on creating an Exclusion Policy .

    5. Run automatic checks on your data for errors

    After you have added your data to IATI Publisher, it will run automatic checks for errors. You will receive information about any errors that you need to fix. Make sure you fix these errors before publishing your data.

    6. Publish your data to the IATI Registry

    Once you are happy with the data that you have provided, you can instruct IATI Publisher to publish it.

    IATI Publisher converts your data files into XML, the format that is required by the IATI Standard. IATI Publisher will store your XML data files online, and provide a link to these files on the IATI Registry. The IATI Registry stores links to every IATI data file published and you can search for your organisation’s IATI XML files here:
    https://iatiregistry.org/publisher/ .

    7. Access your data

    IATI data is open data and can be accessed by anyone. It is pulled from the IATI Registry and used for many purposes. For example, IATI data can be used by governments to monitor development resources going into their countries, by donors and civil society to enable coordination, by analysts and academics to inform research and policy, or by organisations who include IATI data in their own online data portals.

    There are many online data tools and platforms that share and visualise IATI data. You can start by looking at your organisation’s data on IATI’s simple platform called d-portal. Within 24 hours of publishing your data, it will be displayed there. Simply search for your organisation in the “Publisher’ drop-down menu. And to see your data in a format that is used by governments and other data users, visit the Country Development Finance Data tool

    See more information on IATI tools and resources.

    ", 4); - -var _hoisted_24 = { +var _hoisted_53 = { "class": "py-4 sm:py-6" }; - -var _hoisted_25 = /*#__PURE__*/(0, vue_1.createElementVNode)("h3", { +var _hoisted_54 = { "class": "py-2 text-2xl font-bold text-bluecoral" -}, " 8. Update and improve your data ", -1 -/* HOISTED */ -); - -var _hoisted_26 = { +}; +var _hoisted_55 = { "class": "my-2 text-base" }; +var _hoisted_56 = ["innerHTML"]; +var _hoisted_57 = { + "class": "my-2 text-base" +}; +var _hoisted_58 = ["innerHTML"]; +var _hoisted_59 = { + "class": "my-2 text-base" +}; +var _hoisted_60 = ["innerHTML"]; +var _hoisted_61 = { + "class": "py-4 sm:py-6" +}; +var _hoisted_62 = { + "class": "py-2 text-2xl font-bold text-bluecoral" +}; -var _hoisted_27 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Once your organisation has published its first dataset, you are encouraged to "); - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createTextVNode)("update and improve"); - -var _hoisted_29 = /*#__PURE__*/(0, vue_1.createTextVNode)(" your data over time. You should update your data at least every quarter. You should also aim to expand the number of data fields that you provide information for. Read more about "); - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - href: "https://iatistandard.org/en/guidance/standard-overview/preparing-your-organisation-data-publication/key-qualities-of-iati-data/" -}, "improving the quality of IATI data", -1 -/* HOISTED */ -); - -var _hoisted_31 = /*#__PURE__*/(0, vue_1.createTextVNode)(". "); +var _hoisted_63 = /*#__PURE__*/(0, vue_1.createTextVNode)(" 8. "); -var _hoisted_32 = /*#__PURE__*/(0, vue_1.createElementVNode)("article", { +var _hoisted_64 = ["innerHTML"]; +var _hoisted_65 = { + "class": "my-2 text-base" +}; +var _hoisted_66 = ["innerHTML"]; +var _hoisted_67 = { "class": "py-4 sm:py-6" -}, [/*#__PURE__*/(0, vue_1.createTextVNode)(" For more information about publishing IATI data please visit IATI’s main website: "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { - href: "https://iatistandard.org/en/guidance/" -}, "iatistandard.org/guidance"), /*#__PURE__*/(0, vue_1.createTextVNode)(". ")], -1 -/* HOISTED */ -); +}; function render(_ctx, _cache, $props, $setup, $data, $options) { - var _component_Strong = (0, vue_1.resolveComponent)("Strong"); + var _component_SimpleSpan = (0, vue_1.resolveComponent)("SimpleSpan"); - return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("section", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("article", { - "class": "py-4 sm:py-6" - }, [_hoisted_6, _hoisted_7, _hoisted_8, _hoisted_9, _hoisted_10, (0, vue_1.createElementVNode)("a", { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("section", _hoisted_3, [(0, vue_1.createElementVNode)("h3", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.organisations_using_iati_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("article", _hoisted_5, [(0, vue_1.createElementVNode)("h3", _hoisted_6, " 1. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.register_a_publisher_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.register_a_publisher_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.register_a_publisher_description.two), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_9, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.register_a_publisher_description.three), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.register_a_publisher_description.four), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_11, [(0, vue_1.createElementVNode)("h3", _hoisted_12, " 2. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_organisation_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_13, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_organisation_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_organisation_description.two), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_organisation_description.three), 1 + /* TEXT */ + ), _hoisted_16, (0, vue_1.createElementVNode)("a", { target: "_blank", href: "/activities", - onClick: $setup.triggerModel - }, " Publish your Activity Data ")]), (0, vue_1.createElementVNode)("article", { - "class": "py-4 sm:py-6" - }, [_hoisted_11, (0, vue_1.createElementVNode)("a", { + onClick: _cache[0] || (_cache[0] = //@ts-ignore + function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + return _ctx.triggerModel && _ctx.triggerModel.apply(_ctx, args); + }) + }, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_organisation_description.four), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_17, [(0, vue_1.createElementVNode)("h3", _hoisted_18, " 3. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_20, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.two.list_items.header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_21, [(0, vue_1.createElementVNode)("li", _hoisted_22, [(0, vue_1.createElementVNode)("span", _hoisted_23, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.two.list_items.one), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_24, [(0, vue_1.createElementVNode)("span", _hoisted_25, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.two.list_items.two), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_26, [(0, vue_1.createElementVNode)("span", _hoisted_27, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.two.list_items.three), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("p", _hoisted_28, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.three.list_items.header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_29, [(0, vue_1.createElementVNode)("li", _hoisted_30, [(0, vue_1.createElementVNode)("span", _hoisted_31, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.three.list_items.one), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", _hoisted_32, [(0, vue_1.createElementVNode)("span", _hoisted_33, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.three.list_items.two), 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("p", _hoisted_34, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.four), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_35, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.five), 1 + /* TEXT */ + ), _hoisted_36, (0, vue_1.createElementVNode)("a", { target: "_blank", href: "/activities", - onClick: $setup.triggerModel - }, " Publish your Activity Data ")]), _hoisted_20, (0, vue_1.createElementVNode)("article", _hoisted_24, [_hoisted_25, (0, vue_1.createElementVNode)("p", _hoisted_26, [_hoisted_27, (0, vue_1.createVNode)(_component_Strong, null, { - "default": (0, vue_1.withCtx)(function () { - return [_hoisted_28]; - }), - _: 1 - /* STABLE */ + onClick: _cache[1] || (_cache[1] = //@ts-ignore + function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - }), _hoisted_29, _hoisted_30, _hoisted_31])]), _hoisted_32])])]); + return _ctx.triggerModel && _ctx.triggerModel.apply(_ctx, args); + }) + }, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_activity_description.six), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_37, [(0, vue_1.createElementVNode)("h3", _hoisted_38, " 4. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.understand_further_data_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_39, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.understand_further_data_description.one + }, null, 8 + /* PROPS */ + , _hoisted_40)]), (0, vue_1.createElementVNode)("p", _hoisted_41, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.understand_further_data_description.two + }, null, 8 + /* PROPS */ + , _hoisted_42)])]), (0, vue_1.createElementVNode)("article", _hoisted_43, [(0, vue_1.createElementVNode)("h3", _hoisted_44, " 5. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.run_automatic_checks_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_45, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.run_automatic_checks_description.one), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("article", _hoisted_46, [(0, vue_1.createElementVNode)("h3", _hoisted_47, " 6. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_data_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_48, (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_data_description.one), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_49, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.publish_your_data_description.two) + " ", 1 + /* TEXT */ + ), _hoisted_50, _hoisted_51, _hoisted_52])]), (0, vue_1.createElementVNode)("article", _hoisted_53, [(0, vue_1.createElementVNode)("h3", _hoisted_54, "7. " + (0, vue_1.toDisplayString)(_ctx.language.publishing_checklist.access_your_data_header), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_55, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.access_your_data_description.one + }, null, 8 + /* PROPS */ + , _hoisted_56)]), (0, vue_1.createElementVNode)("p", _hoisted_57, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.access_your_data_description.two + }, null, 8 + /* PROPS */ + , _hoisted_58)]), (0, vue_1.createElementVNode)("p", _hoisted_59, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.access_your_data_description.three + }, null, 8 + /* PROPS */ + , _hoisted_60)])]), (0, vue_1.createElementVNode)("article", _hoisted_61, [(0, vue_1.createElementVNode)("h3", _hoisted_62, [_hoisted_63, (0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.update_and_improve_header + }, null, 8 + /* PROPS */ + , _hoisted_64)]), (0, vue_1.createElementVNode)("p", _hoisted_65, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.publishing_checklist.update_and_improve_description.one + }, null, 8 + /* PROPS */ + , _hoisted_66)])]), (0, vue_1.createElementVNode)("article", _hoisted_67, [(0, vue_1.createVNode)(_component_SimpleSpan, { + text: _ctx.language.publishing_checklist.update_and_imporve_description.two + }, null, 8 + /* PROPS */ + , ["text"])])])])]); } exports.render = render; @@ -31976,158 +32676,143 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "section__container" }; - -var _hoisted_3 = /*#__PURE__*/(0, vue_1.createElementVNode)("div", { +var _hoisted_3 = { "class": "section__title" -}, [/*#__PURE__*/(0, vue_1.createElementVNode)("h2", null, "Create IATI Publisher Account"), /*#__PURE__*/(0, vue_1.createElementVNode)("p", null, " Register your organisation to start your IATI publishing journey by creating an account in IATI publisher. ")], -1 +}; + +var _hoisted_4 = /*#__PURE__*/(0, vue_1.createElementVNode)("h2", null, null, -1 /* HOISTED */ ); -var _hoisted_4 = { +var _hoisted_5 = { "class": "section__wrapper flex justify-center" }; -var _hoisted_5 = { +var _hoisted_6 = { "class": "mb-4 block border-b border-b-n-10 pb-4 xl:hidden" }; -var _hoisted_6 = { +var _hoisted_7 = { "class": "text-base font-bold" }; -var _hoisted_7 = { +var _hoisted_8 = { "class": "relative mt-3 text-sm text-n-40" }; -var _hoisted_8 = { +var _hoisted_9 = { key: 0, "class": "list__active" }; -var _hoisted_9 = { +var _hoisted_10 = { "class": "flex items-center" }; -var _hoisted_10 = { +var _hoisted_11 = { key: 0, "class": "mr-3" }; -var _hoisted_11 = { +var _hoisted_12 = { key: 1, "class": "detail mt-2 font-normal" }; -var _hoisted_12 = { +var _hoisted_13 = { "class": "form__container" }; -var _hoisted_13 = { +var _hoisted_14 = { "class": "flex items-center space-x-1" }; -var _hoisted_14 = { +var _hoisted_15 = { "class": "text-xl font-bold text-n-50 sm:text-2xl" }; -var _hoisted_15 = { +var _hoisted_16 = { key: 0, "class": "feedback mt-6 border-l-2 border-crimson-50 bg-crimson-10 p-4 text-sm text-n-50 xl:h-32" }; -var _hoisted_16 = { +var _hoisted_17 = { "class": "mb-2 flex font-bold" }; - -var _hoisted_17 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Sorry, the information you provided doesn’t match your IATI Registry information. "); - -var _hoisted_18 = /*#__PURE__*/(0, vue_1.createElementVNode)("p", { +var _hoisted_18 = { "class": "ml-8 xl:mr-1" -}, [/*#__PURE__*/(0, vue_1.createTextVNode)(" Please note that if you’re an account holder in "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { +}; +var _hoisted_19 = { href: "https://iatiregistry.org/" -}, "IATI Registry")]), /*#__PURE__*/(0, vue_1.createTextVNode)(", make sure your "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +}; +var _hoisted_20 = { "class": "font-bold" -}, "Publisher Name, Publisher ID and IATI Organisation ID"), /*#__PURE__*/(0, vue_1.createTextVNode)(" match your IATI Registry Information. Contact "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { +}; + +var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { "class": "text-bluecoral", href: "mailto:support@iatistandard.org" -}, "support@iatistandard.org")]), /*#__PURE__*/(0, vue_1.createTextVNode)(" for more details. ")], -1 +}, "support@iatistandard.org")], -1 /* HOISTED */ ); -var _hoisted_19 = { +var _hoisted_22 = { "class": "form__content" }; -var _hoisted_20 = { +var _hoisted_23 = { "class": "mb-2 flex items-center justify-between" }; -var _hoisted_21 = ["for"]; -var _hoisted_22 = { +var _hoisted_24 = ["for"]; +var _hoisted_25 = { key: 0, "class": "text-salmon-40" }; -var _hoisted_23 = ["id", "onUpdate:modelValue", "placeholder", "type"]; -var _hoisted_24 = ["onUpdate:modelValue", "placeholder", "type", "value"]; -var _hoisted_25 = { +var _hoisted_26 = ["id", "onUpdate:modelValue", "placeholder", "type"]; +var _hoisted_27 = ["onUpdate:modelValue", "placeholder", "type", "value"]; +var _hoisted_28 = { key: 3, "class": "text-xs font-normal text-n-40" }; -var _hoisted_26 = { +var _hoisted_29 = { key: 4, "class": "error", role: "alert" }; -var _hoisted_27 = { +var _hoisted_30 = { "class": "flex flex-wrap items-center justify-between" }; - -var _hoisted_28 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Go back "); - -var _hoisted_29 = { +var _hoisted_31 = { key: 1, "class": "pb-4 text-sm font-normal text-n-40 sm:pb-0" }; - -var _hoisted_30 = /*#__PURE__*/(0, vue_1.createTextVNode)("Already have an account? "); - -var _hoisted_31 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_32 = { "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", href: "/" -}, "Sign In.", -1 -/* HOISTED */ -); - -var _hoisted_32 = [_hoisted_30, _hoisted_31]; - -var _hoisted_33 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Next Step "); - -var _hoisted_34 = { +}; +var _hoisted_33 = { key: 0, "class": "mt-6 text-center" }; - -var _hoisted_35 = /*#__PURE__*/(0, vue_1.createElementVNode)("span", { +var _hoisted_34 = { "class": "text-sm font-normal text-n-40" -}, [/*#__PURE__*/(0, vue_1.createTextVNode)("Already have an account? "), /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +}; +var _hoisted_35 = { "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", href: "/" -}, "Sign In.")], -1 -/* HOISTED */ -); - -var _hoisted_36 = [_hoisted_35]; -var _hoisted_37 = { +}; +var _hoisted_36 = { "class": "register__sidebar hidden xl:block" }; -var _hoisted_38 = { +var _hoisted_37 = { "class": "text-base font-bold" }; -var _hoisted_39 = { +var _hoisted_38 = { "class": "relative mt-6 text-sm text-n-40" }; -var _hoisted_40 = { +var _hoisted_39 = { key: 0, "class": "list__active" }; -var _hoisted_41 = { +var _hoisted_40 = { "class": "flex items-center" }; -var _hoisted_42 = { +var _hoisted_41 = { key: 0, "class": "ml-6 mr-3" }; -var _hoisted_43 = { +var _hoisted_42 = { key: 1, "class": "ml-6 mr-3" }; -var _hoisted_44 = { +var _hoisted_43 = { key: 1, "class": "detail mt-2 mb-6 font-normal xl:pr-2" }; @@ -32145,7 +32830,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("section", _hoisted_1, [_ctx.isLoaderVisible ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Loader, { key: 0 - })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [_hoisted_3, (0, vue_1.createElementVNode)("div", _hoisted_4, [_ctx.checkStep('3') ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_EmailVerification, { + })) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [_hoisted_4, (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)(_ctx.language.register_lang.create_iati_publisher_subheader), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_5, [_ctx.checkStep('3') ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_EmailVerification, { key: 0, email: _ctx.formData['email'] }, null, 8 @@ -32163,16 +32850,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.goToNextForm && _ctx.goToNextForm.apply(_ctx, args); }, ["enter"])) - }, [(0, vue_1.createElementVNode)("aside", _hoisted_5, [(0, vue_1.createElementVNode)("span", _hoisted_6, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 3", 1 + }, [(0, vue_1.createElementVNode)("aside", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 3", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("ul", _hoisted_7, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { + ), (0, vue_1.createElementVNode)("ul", _hoisted_8, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: i, "class": (0, vue_1.normalizeClass)({ 'relative font-bold text-n-50': _ctx.checkStep(key), 'mb-6 hidden': !_ctx.checkStep(key) }) - }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_9, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(i + 1), 1 + }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_9)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_10, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_11, (0, vue_1.toDisplayString)(i + 1), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", { "class": (0, vue_1.normalizeClass)(["font-bold", { @@ -32182,37 +32869,51 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, (0, vue_1.toDisplayString)(form["title"]), 3 /* TEXT, CLASS */ - )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_11, (0, vue_1.toDisplayString)(form["description"]), 1 + )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_12, (0, vue_1.toDisplayString)(form["description"]), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createElementVNode)("div", _hoisted_13, [_ctx.registerForm[_ctx.getCurrentStep()]['hover_text'] ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("div", _hoisted_14, [_ctx.registerForm[_ctx.getCurrentStep()]['hover_text'] ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { key: 0, "hover-text": _ctx.registerForm[_ctx.getCurrentStep()]['hover_text'], name: _ctx.registerForm[_ctx.getCurrentStep()].title, position: "right" }, null, 8 /* PROPS */ - , ["hover-text", "name"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.registerForm[_ctx.getCurrentStep()].title), 1 + , ["hover-text", "name"])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", _hoisted_15, (0, vue_1.toDisplayString)(_ctx.registerForm[_ctx.getCurrentStep()].title), 1 /* TEXT */ - )]), !_ctx.publisherExists ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_15, [(0, vue_1.createElementVNode)("p", _hoisted_16, [(0, vue_1.createVNode)(_component_svg_vue, { + )]), !_ctx.publisherExists ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_16, [(0, vue_1.createElementVNode)("p", _hoisted_17, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-2 text-xl", icon: "warning" - }), _hoisted_17]), _hoisted_18])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_19, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm[_ctx.getCurrentStep()]['fields'], function (field, index, key) { + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.register_lang.information_doesnt_match_registry), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("p", _hoisted_18, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.register_lang.if_you_are_account_holder) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createElementVNode)("a", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.language.common_lang.iati_registry), 1 + /* TEXT */ + )]), (0, vue_1.createTextVNode)(", " + (0, vue_1.toDisplayString)(_ctx.language.register_lang.make_sure_your) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", _hoisted_20, (0, vue_1.toDisplayString)(_ctx.language.register_lang.publisher_name.label) + ", " + (0, vue_1.toDisplayString)(_ctx.language.register_lang.publisher_id.label) + " " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.and) + " IATI " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.organisation_id), 1 + /* TEXT */ + ), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.register_lang.match_your_iati_registry_info) + ". " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.contact) + " ", 1 + /* TEXT */ + ), _hoisted_21, (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.common_lang.for_more_details) + ". ", 1 + /* TEXT */ + )])])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_22, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm[_ctx.getCurrentStep()]['fields'], function (field, index, key) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", { key: key, "class": (0, vue_1.normalizeClass)(field["class"]) - }, [(0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("label", { + }, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("label", { "for": field.id, "class": "label" }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(field["label"]) + " ", 1 /* TEXT */ - ), field.required ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_22, " *")) : (0, vue_1.createCommentVNode)("v-if", true)], 8 + ), field.required ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, " *")) : (0, vue_1.createCommentVNode)("v-if", true)], 8 /* PROPS */ - , _hoisted_21), field.hover_text !== '' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { + , _hoisted_24), field.hover_text !== '' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_HoverText, { key: 0, "hover-text": field.hover_text, name: field.label @@ -32232,7 +32933,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { type: field.type }, null, 10 /* CLASS, PROPS */ - , _hoisted_23)), [[vue_1.vModelDynamic, _ctx.formData[field.name]]]) : (0, vue_1.createCommentVNode)("v-if", true), field.name === 'identifier' ? (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("input", { + , _hoisted_26)), [[vue_1.vModelDynamic, _ctx.formData[field.name]]]) : (0, vue_1.createCommentVNode)("v-if", true), field.name === 'identifier' ? (0, vue_1.withDirectives)(((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("input", { key: 1, "onUpdate:modelValue": function onUpdateModelValue($event) { return _ctx.formData[field.name] = $event; @@ -32247,7 +32948,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { disabled: "true" }, null, 10 /* CLASS, PROPS */ - , _hoisted_24)), [[vue_1.vModelDynamic, _ctx.formData[field.name]]]) : (0, vue_1.createCommentVNode)("v-if", true), field.type === 'select' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Multiselect, { + , _hoisted_27)), [[vue_1.vModelDynamic, _ctx.formData[field.name]]]) : (0, vue_1.createCommentVNode)("v-if", true), field.type === 'select' ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(_component_Multiselect, { key: 2, modelValue: _ctx.formData[field.name], "onUpdate:modelValue": function onUpdateModelValue($event) { @@ -32262,16 +32963,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { searchable: true }, null, 8 /* PROPS */ - , ["modelValue", "onUpdate:modelValue", "class", "options", "placeholder"])) : (0, vue_1.createCommentVNode)("v-if", true), field.help_text && _ctx.errorData[field.name] === '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_25, (0, vue_1.toDisplayString)(field.help_text), 1 + , ["modelValue", "onUpdate:modelValue", "class", "options", "placeholder"])) : (0, vue_1.createCommentVNode)("v-if", true), field.help_text && _ctx.errorData[field.name] === '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_28, (0, vue_1.toDisplayString)(field.help_text), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.errorData[field.name] !== '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_26, (0, vue_1.toDisplayString)(_ctx.errorData[field.name]), 1 + )) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.errorData[field.name] !== '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_29, (0, vue_1.toDisplayString)(_ctx.errorData[field.name]), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ - ))])]), (0, vue_1.createElementVNode)("div", _hoisted_27, [!_ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { + ))])]), (0, vue_1.createElementVNode)("div", _hoisted_30, [!_ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { key: 0, "class": "btn-back", onClick: _cache[0] || (_cache[0] = function ($event) { @@ -32280,29 +32981,41 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "mr-3 cursor-pointer", icon: "left-arrow" - }), _hoisted_28])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_29, _hoisted_32)) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.checkStep(3) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.go_back), 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), _ctx.checkStep(1) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_31, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.already_have_account) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_32, (0, vue_1.toDisplayString)(_ctx.language.button_lang.sign_in) + ".", 1 + /* TEXT */ + )])) : (0, vue_1.createCommentVNode)("v-if", true), !_ctx.checkStep(3) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("button", { key: 2, "class": "btn btn-next", onClick: _cache[1] || (_cache[1] = function ($event) { return _ctx.goToNextForm(); }) - }, [_hoisted_33, (0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.button_lang.next_step) + " ", 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "text-2xl", icon: "right-arrow" - })])) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.checkStep(2) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_34, _hoisted_36)) : (0, vue_1.createCommentVNode)("v-if", true)], 32 + })])) : (0, vue_1.createCommentVNode)("v-if", true)]), _ctx.checkStep(2) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_33, [(0, vue_1.createElementVNode)("span", _hoisted_34, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.common_lang.already_have_account) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_35, (0, vue_1.toDisplayString)(_ctx.language.button_lang.sign_in) + ".", 1 + /* TEXT */ + )])])) : (0, vue_1.createCommentVNode)("v-if", true)], 32 /* HYDRATE_EVENTS */ - )), (0, vue_1.createElementVNode)("aside", _hoisted_37, [(0, vue_1.createElementVNode)("span", _hoisted_38, "Step " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " out of 3", 1 + )), (0, vue_1.createElementVNode)("aside", _hoisted_36, [(0, vue_1.createElementVNode)("span", _hoisted_37, (0, vue_1.toDisplayString)(_ctx.language.button_lang.step) + " " + (0, vue_1.toDisplayString)(_ctx.getCurrentStep()) + " " + (0, vue_1.toDisplayString)(_ctx.language.button_lang.out_of) + " 3", 1 /* TEXT */ - ), (0, vue_1.createElementVNode)("ul", _hoisted_39, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { + ), (0, vue_1.createElementVNode)("ul", _hoisted_38, [((0, vue_1.openBlock)(true), (0, vue_1.createElementBlock)(vue_1.Fragment, null, (0, vue_1.renderList)(_ctx.registerForm, function (form, key, i) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("li", { key: i, "class": (0, vue_1.normalizeClass)({ 'relative font-bold text-n-50': _ctx.checkStep(key), 'mb-6 flex items-center': !_ctx.checkStep(key) }) - }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_40)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_41, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, (0, vue_1.toDisplayString)(i + 1), 1 + }, [_ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_39)) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_40, [!form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_41, (0, vue_1.toDisplayString)(i + 1), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_43, [(0, vue_1.createVNode)(_component_svg_vue, { + )) : (0, vue_1.createCommentVNode)("v-if", true), form['is_complete'] ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_42, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "text-xs", icon: "checked" })])) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("span", { @@ -32313,7 +33026,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }]) }, (0, vue_1.toDisplayString)(form["title"]), 3 /* TEXT, CLASS */ - )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_44, (0, vue_1.toDisplayString)(form["description"]), 1 + )]), _ctx.checkStep(key) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("p", _hoisted_43, (0, vue_1.toDisplayString)(form["description"]), 1 /* TEXT */ )) : (0, vue_1.createCommentVNode)("v-if", true)], 2 /* CLASS */ @@ -32327,6 +33040,335 @@ exports.render = render; /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.render = void 0; + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "smooth -mb-7 bg-[#e5e5e5] px-5 py-7 sm:px-10 sm:py-14 md:-mb-20" +}; +var _hoisted_2 = { + "class": "mx-auto max-w-[700px]" +}; +var _hoisted_3 = { + "class": "rounded bg-white py-4 shadow-textbox sm:py-8" +}; +var _hoisted_4 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_5 = { + "class": "text-2xl font-bold text-bluecoral" +}; +var _hoisted_6 = { + "class": "mt-4 text-base" +}; +var _hoisted_7 = ["innerHTML"]; +var _hoisted_8 = { + "class": "mt-4 text-base" +}; +var _hoisted_9 = ["innerHTML"]; + +function render(_ctx, _cache, $props, $setup, $data, $options) { + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("section", _hoisted_3, [(0, vue_1.createElementVNode)("article", _hoisted_4, [(0, vue_1.createElementVNode)("h3", _hoisted_5, (0, vue_1.toDisplayString)($setup.language.web_lang.support), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_6, [(0, vue_1.createElementVNode)("span", { + innerHTML: $setup.language.support.support_description.one + }, null, 8 + /* PROPS */ + , _hoisted_7)]), (0, vue_1.createElementVNode)("p", _hoisted_8, [(0, vue_1.createElementVNode)("span", { + innerHTML: $setup.language.support.support_description.two + }, null, 8 + /* PROPS */ + , _hoisted_9)])])])])]); +} + +exports.render = render; + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true": +/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true ***! + \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.render = void 0; + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + id: "footer", + "class": "mt-7 bg-bluecoral text-sm leading-6 text-n-20 sm:mt-10 md:mt-20" +}; +var _hoisted_2 = { + "class": "border-b border-white border-opacity-20" +}; +var _hoisted_3 = { + "class": "mx-3 py-10 sm:mx-10 xl:mx-24 xl:px-1" +}; +var _hoisted_4 = { + "class": "footer__container grid grid-flow-row gap-8 sm:gap-y-10 md:grid-cols-2 lg:grid-cols-4 lg:justify-items-center" +}; +var _hoisted_5 = { + href: "/" +}; +var _hoisted_6 = { + "class": "footer__links" +}; +var _hoisted_7 = { + "class": "font-bold text-n-10" +}; +var _hoisted_8 = { + "class": "mt-2 flex flex-col" +}; +var _hoisted_9 = { + href: "/activities" +}; +var _hoisted_10 = { + href: "/about" +}; +var _hoisted_11 = { + "class": "footer__links" +}; +var _hoisted_12 = { + "class": "font-bold text-n-10" +}; +var _hoisted_13 = { + "class": "mt-2 flex flex-col" +}; +var _hoisted_14 = { + href: "/iati-standard" +}; +var _hoisted_15 = { + href: "/publishing-checklist" +}; +var _hoisted_16 = { + href: "/support" +}; +var _hoisted_17 = { + "class": "footer__links lg:justify-self-end" +}; +var _hoisted_18 = { + "class": "text-xs leading-5" +}; +var _hoisted_19 = { + "class": "my-5 flex items-center space-x-2 text-n-10" +}; +var _hoisted_20 = { + "class": "text-xs font-bold uppercase" +}; + +var _hoisted_21 = /*#__PURE__*/(0, vue_1.createElementVNode)("ul", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("li", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { + "class": "text-sm text-n-10", + href: "mailto:support@iatistandard.org" +}, "support@iatistandard.org")])], -1 +/* HOISTED */ +); + +var _hoisted_22 = { + "class": "mx-5 py-7 sm:mx-10 xl:mx-24 xl:px-1" +}; +var _hoisted_23 = { + "class": "footer__container grid gap-3 sm:grid-cols-2" +}; +var _hoisted_24 = { + "class": "flex items-center text-n-30" +}; +var _hoisted_25 = { + "class": "flex sm:justify-end" +}; +var _hoisted_26 = { + href: "https://www.youtube.com/channel/UCAVH1gcgJXElsj8ENC-bDQQ", + target: "_blank" +}; +var _hoisted_27 = { + "class": "ml-4", + href: "https://twitter.com/IATI_aid", + target: "_blank" +}; + +var _hoisted_28 = /*#__PURE__*/(0, vue_1.createTextVNode)("s "); + +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); + + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("footer", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("a", _hoisted_5, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "h-auto w-60 text-6xl sm:w-64", + icon: "footer-logo" + })])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_publisher), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_8, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_9, (0, vue_1.toDisplayString)($setup.language.admin.footer.dashboard), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.web_lang.about), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("div", _hoisted_11, [(0, vue_1.createElementVNode)("span", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_standard), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_13, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_14, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_standard), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_15, (0, vue_1.toDisplayString)($setup.language.web_lang.publishing_checklist), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_16, (0, vue_1.toDisplayString)($setup.language.web_lang.support), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("div", _hoisted_17, [(0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.part_of_iati_unified_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.code_licensed_under_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.documentation_licensed_under_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "text-2xl", + icon: "headphone" + }), (0, vue_1.createElementVNode)("span", _hoisted_20, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.any_questions_contact_label), 1 + /* TEXT */ + )]), _hoisted_21])])])]), (0, vue_1.createElementVNode)("div", _hoisted_22, [(0, vue_1.createElementVNode)("div", _hoisted_23, [(0, vue_1.createElementVNode)("span", _hoisted_24, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mr-1 text-base", + icon: "copyright" + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.language.web_lang.footer.copyright_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("a", _hoisted_26, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mt-1 mr-1 text-4xl", + icon: "youtube" + })]), (0, vue_1.createElementVNode)("a", _hoisted_27, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mt-1 mr-1 text-4xl", + icon: "twitter" + })])]), _hoisted_28])])]); +} + +exports.render = render; + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true": +/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true ***! + \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.render = void 0; + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "right join-now m-auto flex basis-2/4 items-center rounded-l-lg rounded-r-lg bg-white py-5 px-5 sm:py-10 sm:px-7 md:my-0 md:rounded-l-none lg:py-28 xl:px-14" +}; +var _hoisted_2 = { + "class": "right__container flex flex-col" +}; +var _hoisted_3 = { + "class": "mb-2 hidden sm:block" +}; +var _hoisted_4 = { + "class": "mb-8 text-n-40 xl:pr-6" +}; +var _hoisted_5 = { + href: "/iati/register", + "class": "right__content mb-6" +}; +var _hoisted_6 = { + "class": "right__icon" +}; +var _hoisted_7 = { + "class": "details mx-4 xl:px-1" +}; +var _hoisted_8 = { + "class": "text-sm font-bold text-bluecoral" +}; +var _hoisted_9 = { + "class": "text-xs leading-5 text-n-40" +}; +var _hoisted_10 = ["innerHTML"]; +var _hoisted_11 = { + href: "/register", + "class": "right__content mb-4" +}; +var _hoisted_12 = { + "class": "right__icon" +}; +var _hoisted_13 = { + "class": "details mx-4 xl:px-1" +}; +var _hoisted_14 = { + "class": "text-sm font-bold text-bluecoral" +}; +var _hoisted_15 = { + "class": "text-xs leading-5 text-n-40" +}; +var _hoisted_16 = ["innerHTML"]; +var _hoisted_17 = { + "class": "text-sm text-n-40" +}; +var _hoisted_18 = { + "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", + href: "mailto:support@iatistandard.org", + target: "_blank" +}; + +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); + + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("h2", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.web_lang.join_now) + ".", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.language.home.join_now_section.to_begin_text), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_5, [(0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "text-6xl", + icon: "default-1" + })]), (0, vue_1.createElementVNode)("div", _hoisted_7, [(0, vue_1.createElementVNode)("span", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.home.join_now_section.new_to_iati_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_9, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.home.join_now_section.new_to_iati_text + }, null, 8 + /* PROPS */ + , _hoisted_10)])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "right__arrow text-2xl", + icon: "right-arrow" + })])]), (0, vue_1.createElementVNode)("a", _hoisted_11, [(0, vue_1.createElementVNode)("div", _hoisted_12, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "text-6xl", + icon: "default-2" + })]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.home.join_now_section.my_organisation_has_registered_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", _hoisted_15, [(0, vue_1.createElementVNode)("span", { + innerHTML: _ctx.language.home.join_now_section.my_organisation_has_registered_text + }, null, 8 + /* PROPS */ + , _hoisted_16)])]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "right__arrow text-2xl", + icon: "right-arrow" + })])]), (0, vue_1.createElementVNode)("span", _hoisted_17, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.home.join_now_section.not_sure_which_one_label) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("a", _hoisted_18, (0, vue_1.toDisplayString)(_ctx.language.home.join_now_section.contact_support_label), 1 + /* TEXT */ + )])])]); +} + +exports.render = render; + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true ***! @@ -32351,25 +33393,12 @@ var _hoisted_1 = { id: "right", "class": "right m-auto flex basis-2/4 items-center rounded-l-lg rounded-r-lg bg-white py-5 px-5 sm:py-10 sm:px-10 md:my-0 md:rounded-l-none lg:px-14 lg:py-28 xl:px-24" }; - -var _hoisted_2 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("h2", { - "class": "mb-2 hidden sm:block" - }, "Sign In.", -1 - /* HOISTED */ - ); -}); - -var _hoisted_3 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("span", { - "class": "text-n-40" - }, "Welcome back! Please enter your details.", -1 - /* HOISTED */ - ); -}); - +var _hoisted_2 = { + "class": "mb-2 hidden sm:block" +}; +var _hoisted_3 = { + "class": "text-n-40" +}; var _hoisted_4 = { key: 0, "class": "error mt-2 text-xs", @@ -32378,53 +33407,34 @@ var _hoisted_4 = { var _hoisted_5 = { "class": "relative mt-6 mb-4 flex flex-col text-sm text-bluecoral" }; - -var _hoisted_6 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("label", { - "for": "Username" - }, "Username", -1 - /* HOISTED */ - ); -}); - -var _hoisted_7 = { +var _hoisted_6 = { + "for": "Username" +}; +var _hoisted_7 = ["placeholder"]; +var _hoisted_8 = { key: 0, "class": "error text-xs", role: "alert" }; -var _hoisted_8 = { +var _hoisted_9 = { "class": "relative mb-4 flex flex-col text-sm text-bluecoral" }; - -var _hoisted_9 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("label", { - "for": "Password" - }, "Password", -1 - /* HOISTED */ - ); -}); - var _hoisted_10 = { + "for": "Password" +}; +var _hoisted_11 = ["placeholder"]; +var _hoisted_12 = { key: 0, "class": "error", role: "alert" }; - -var _hoisted_11 = /*#__PURE__*/_withScopeId(function () { - /*#__PURE__*/ - return (0, vue_1.createElementVNode)("p", { - "class": "mb-6 text-sm text-n-40" - }, [/*#__PURE__*/(0, vue_1.createTextVNode)(" Forgot your password? "), /*#__PURE__*/(0, vue_1.createElementVNode)("span", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { - "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", - href: "/password/email" - }, "Reset.")])], -1 - /* HOISTED */ - ); -}); - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createTextVNode)(" SIGN IN "); +var _hoisted_13 = { + "class": "mb-6 text-sm text-n-40" +}; +var _hoisted_14 = { + "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", + href: "/password/email" +}; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Loader = (0, vue_1.resolveComponent)("Loader"); @@ -32445,9 +33455,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.login && _ctx.login.apply(_ctx, args); }, ["enter"])) - }, [_hoisted_2, _hoisted_3, _ctx.message != '' && !(_ctx.errorData.username || _ctx.errorData.password) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.message), 1 + }, [(0, vue_1.createElementVNode)("h2", _hoisted_2, (0, vue_1.toDisplayString)(_ctx.language.web_lang.sign_in) + ".", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", _hoisted_3, (0, vue_1.toDisplayString)(_ctx.language.home.sign_in_section.welcome_back_label), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_5, [_hoisted_6, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + ), _ctx.message != '' && !(_ctx.errorData.username || _ctx.errorData.password) ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_4, (0, vue_1.toDisplayString)(_ctx.message), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true), (0, vue_1.createElementVNode)("div", _hoisted_5, [(0, vue_1.createElementVNode)("label", _hoisted_6, (0, vue_1.toDisplayString)(_ctx.language.home.sign_in_section.username_label), 1 + /* TEXT */ + ), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "username", "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.formData.username = $event; @@ -32456,15 +33472,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error_input: _ctx.errorData.username }]), type: "text", - placeholder: "Enter a registered username" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.username]]), (0, vue_1.createVNode)(_component_svg_vue, { + placeholder: _ctx.language.web_lang.sign_in + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_7), [[vue_1.vModelText, _ctx.formData.username]]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "absolute top-12 left-5 text-xl sm:left-6", icon: "user" - }), _ctx.errorData.username != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_7, (0, vue_1.toDisplayString)(_ctx.errorData.username), 1 + }), _ctx.errorData.username != '' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.errorData.username), 1 + /* TEXT */ + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", _hoisted_9, [(0, vue_1.createElementVNode)("label", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.home.sign_in_section.password_label), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { + ), (0, vue_1.withDirectives)((0, vue_1.createElementVNode)("input", { id: "password", "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { return _ctx.formData.password = $event; @@ -32473,15 +33491,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { error__input: _ctx.errorData.password || _ctx.errorData.username }]), type: "password", - placeholder: "Enter a correct password" - }, null, 2 - /* CLASS */ - ), [[vue_1.vModelText, _ctx.formData.password]]), (0, vue_1.createVNode)(_component_svg_vue, { + placeholder: _ctx.language.home.sign_in_section.password_placeholder + }, null, 10 + /* CLASS, PROPS */ + , _hoisted_11), [[vue_1.vModelText, _ctx.formData.password]]), (0, vue_1.createVNode)(_component_svg_vue, { "class": "absolute top-12 left-5 text-xl sm:left-6", icon: "pw-lock" - }), _ctx.errorData.password ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.errorData.password), 1 + }), _ctx.errorData.password ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("span", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.errorData.password), 1 /* TEXT */ - )) : (0, vue_1.createCommentVNode)("v-if", true)]), _hoisted_11, (0, vue_1.createElementVNode)("button", { + )) : (0, vue_1.createCommentVNode)("v-if", true)]), (0, vue_1.createElementVNode)("p", _hoisted_13, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.home.sign_in_section.forgot_password_label) + " ", 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("span", null, [(0, vue_1.createElementVNode)("a", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.button_lang.reset) + ".", 1 + /* TEXT */ + )])]), (0, vue_1.createElementVNode)("button", { id: "btn", type: "submit", "class": "btn", @@ -32495,7 +33517,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.login && _ctx.login.apply(_ctx, args); }) - }, [_hoisted_12, (0, vue_1.createVNode)(_component_svg_vue, { + }, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.button_lang.sign_in) + " ", 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "", icon: "right-arrow" })])], 32 @@ -32507,6 +33531,171 @@ exports.render = render; /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true": +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.render = void 0; + +var vue_1 = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "mt-7 bg-bluecoral text-sm leading-6 text-n-20 sm:mt-10 md:mt-20" +}; +var _hoisted_2 = { + "class": "border-b border-white border-opacity-20" +}; +var _hoisted_3 = { + "class": "mx-3 py-10 sm:mx-10 xl:mx-24 xl:px-1" +}; +var _hoisted_4 = { + "class": "footer__container grid grid-flow-row gap-8 sm:gap-y-10 md:grid-cols-2 lg:grid-cols-4 lg:justify-items-center" +}; +var _hoisted_5 = { + href: "/" +}; +var _hoisted_6 = { + "class": "footer__links" +}; +var _hoisted_7 = { + "class": "font-bold text-n-10" +}; +var _hoisted_8 = { + "class": "mt-2 flex flex-col" +}; +var _hoisted_9 = { + href: "/" +}; +var _hoisted_10 = { + href: "/about" +}; +var _hoisted_11 = { + href: "/" +}; +var _hoisted_12 = { + href: "/register/join" +}; +var _hoisted_13 = { + "class": "footer__links" +}; +var _hoisted_14 = { + "class": "font-bold text-n-10" +}; +var _hoisted_15 = { + "class": "mt-2 flex flex-col" +}; +var _hoisted_16 = { + href: "/iati-standard" +}; +var _hoisted_17 = { + href: "/publishing-checklist" +}; +var _hoisted_18 = { + href: "/support" +}; +var _hoisted_19 = { + "class": "footer__links lg:justify-self-end" +}; +var _hoisted_20 = { + "class": "text-xs leading-5" +}; +var _hoisted_21 = { + "class": "my-5 flex items-center space-x-2 text-n-10" +}; +var _hoisted_22 = { + "class": "text-xs font-bold uppercase" +}; + +var _hoisted_23 = /*#__PURE__*/(0, vue_1.createElementVNode)("ul", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("li", null, [/*#__PURE__*/(0, vue_1.createElementVNode)("a", { + "class": "text-sm text-n-10", + href: "mailto:support@iatistandard.org" +}, "support@iatistandard.org")])], -1 +/* HOISTED */ +); + +var _hoisted_24 = { + "class": "mx-5 py-7 sm:mx-10 xl:mx-24 xl:px-1" +}; +var _hoisted_25 = { + "class": "footer__container grid gap-3 sm:grid-cols-2" +}; +var _hoisted_26 = { + "class": "flex items-center text-n-30" +}; +var _hoisted_27 = { + "class": "flex sm:justify-end" +}; +var _hoisted_28 = { + href: "https://www.youtube.com/channel/UCAVH1gcgJXElsj8ENC-bDQQ", + target: "_blank" +}; +var _hoisted_29 = { + "class": "ml-4", + href: "https://twitter.com/IATI_aid", + target: "_blank" +}; + +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); + + return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("footer", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("div", _hoisted_3, [(0, vue_1.createElementVNode)("div", _hoisted_4, [(0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("a", _hoisted_5, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "h-auto w-60 text-6xl sm:w-64", + icon: "footer-logo" + })])]), (0, vue_1.createElementVNode)("div", _hoisted_6, [(0, vue_1.createElementVNode)("span", _hoisted_7, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_publisher), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_8, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_9, (0, vue_1.toDisplayString)($setup.language.web_lang.home), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_10, (0, vue_1.toDisplayString)($setup.language.web_lang.about), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_11, (0, vue_1.toDisplayString)($setup.language.web_lang.sign_in), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_12, (0, vue_1.toDisplayString)($setup.language.web_lang.join_now), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("div", _hoisted_13, [(0, vue_1.createElementVNode)("span", _hoisted_14, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_standard), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("ul", _hoisted_15, [(0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_16, (0, vue_1.toDisplayString)($setup.language.web_lang.iati_standard), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_17, (0, vue_1.toDisplayString)($setup.language.web_lang.publishing_checklist), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("li", null, [(0, vue_1.createElementVNode)("a", _hoisted_18, (0, vue_1.toDisplayString)($setup.language.web_lang.support), 1 + /* TEXT */ + )])])]), (0, vue_1.createElementVNode)("div", _hoisted_19, [(0, vue_1.createElementVNode)("div", _hoisted_20, [(0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.part_of_iati_unified_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.code_licensed_under_label), 1 + /* TEXT */ + ), (0, vue_1.createElementVNode)("p", null, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.documentation_licensed_under_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_21, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "text-2xl", + icon: "headphone" + }), (0, vue_1.createElementVNode)("span", _hoisted_22, (0, vue_1.toDisplayString)($setup.language.web_lang.footer.any_questions_contact_label), 1 + /* TEXT */ + )]), _hoisted_23])])])]), (0, vue_1.createElementVNode)("div", _hoisted_24, [(0, vue_1.createElementVNode)("div", _hoisted_25, [(0, vue_1.createElementVNode)("span", _hoisted_26, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mr-1 text-base", + icon: "copyright" + }), (0, vue_1.createTextVNode)(" " + (0, vue_1.toDisplayString)($setup.language.web_lang.footer.copyright_label), 1 + /* TEXT */ + )]), (0, vue_1.createElementVNode)("div", _hoisted_27, [(0, vue_1.createElementVNode)("a", _hoisted_28, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mt-1 mr-1 text-4xl", + icon: "youtube" + })]), (0, vue_1.createElementVNode)("a", _hoisted_29, [(0, vue_1.createVNode)(_component_svg_vue, { + "class": "mt-1 mr-1 text-4xl", + icon: "twitter" + })])])])])]); +} + +exports.render = render; + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true ***! @@ -32546,44 +33735,29 @@ var _hoisted_6 = { var _hoisted_7 = { "class": "nav__links active dropdown" }; - -var _hoisted_8 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_8 = { href: "/about" -}, "ABOUT", -1 -/* HOISTED */ -); - +}; var _hoisted_9 = { "class": "nav__links active dropdown" }; - -var _hoisted_10 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_10 = { href: "/publishing-checklist" -}, "PUBLISHING CHECKLIST", -1 -/* HOISTED */ -); - +}; var _hoisted_11 = { "class": "nav__links active dropdown relative" }; - -var _hoisted_12 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_12 = { href: "/iati-standard" -}, "IATI STANDARD", -1 -/* HOISTED */ -); - +}; var _hoisted_13 = { "class": "nav__links active dropdown" }; - -var _hoisted_14 = /*#__PURE__*/(0, vue_1.createElementVNode)("a", { +var _hoisted_14 = { href: "/support" -}, "SUPPORT", -1 -/* HOISTED */ -); +}; -var _hoisted_15 = /*#__PURE__*/(0, vue_1.createStaticVNode)("
    ", 3); +var _hoisted_15 = /*#__PURE__*/(0, vue_1.createStaticVNode)("
    ", 3); var _hoisted_18 = { "class": "header__title mt-6 flex flex-wrap items-center justify-between gap-2 border-l-4 border-l-turquoise py-2 px-4 sm:py-5 sm:px-6" @@ -32597,8 +33771,6 @@ var _hoisted_20 = { "class": "button secondary-btn" }; -var _hoisted_21 = /*#__PURE__*/(0, vue_1.createTextVNode)(" Go to Dashboard "); - function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_svg_vue = (0, vue_1.resolveComponent)("svg-vue"); @@ -32607,29 +33779,47 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("div", _hoisted_1, [(0, vue_1.createElementVNode)("div", _hoisted_2, [(0, vue_1.createElementVNode)("header", _hoisted_3, [(0, vue_1.createElementVNode)("nav", _hoisted_4, [(0, vue_1.createElementVNode)("a", _hoisted_5, [(0, vue_1.createVNode)(_component_svg_vue, { "class": "w-52 text-6xl sm:w-60", icon: "header-logo" - })]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("ul", _hoisted_6, [(0, vue_1.createElementVNode)("li", _hoisted_7, [_hoisted_8, (0, vue_1.createVNode)(_component_NavDropdown, { - name: "About", - text: "IATI Publisher helps small and medium-sized organisations publish IATI data on development and humanitarian financing and activities", - "btn-text": "Learn more", + })]), (0, vue_1.createElementVNode)("div", null, [(0, vue_1.createElementVNode)("ul", _hoisted_6, [(0, vue_1.createElementVNode)("li", _hoisted_7, [(0, vue_1.createElementVNode)("a", _hoisted_8, (0, vue_1.toDisplayString)(_ctx.language.web_lang.about), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_NavDropdown, { + name: _ctx.language.web_lang.about, + text: _ctx.language.web_lang.header.about_hover_text, + "btn-text": _ctx.language.button_lang.learn_more, "btn-link": "/about" - })]), (0, vue_1.createElementVNode)("li", _hoisted_9, [_hoisted_10, (0, vue_1.createVNode)(_component_NavDropdown, { - name: "Publishing checklist", - text: "New to IATI? Use our checklist to track each step required for your organisation to successfully publish IATI data", - "btn-text": "Read more", + }, null, 8 + /* PROPS */ + , ["name", "text", "btn-text"])]), (0, vue_1.createElementVNode)("li", _hoisted_9, [(0, vue_1.createElementVNode)("a", _hoisted_10, (0, vue_1.toDisplayString)(_ctx.language.web_lang.publishing_checklist), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_NavDropdown, { + name: _ctx.language.web_lang.publishing_checklist, + text: _ctx.language.web_lang.header.publishing_checklist_hover_text, + "btn-text": _ctx.language.button_lang.read_more, "btn-link": "/publishing-checklist" - })]), (0, vue_1.createElementVNode)("li", _hoisted_11, [_hoisted_12, (0, vue_1.createVNode)(_component_NavDropdown, { - name: "IATI Standard", - text: "The IATI Standard provides information and guidance on all the data fields that\n your organisation can publish IATI data on", - "btn-text": "See all data fields", + }, null, 8 + /* PROPS */ + , ["name", "text", "btn-text"])]), (0, vue_1.createElementVNode)("li", _hoisted_11, [(0, vue_1.createElementVNode)("a", _hoisted_12, (0, vue_1.toDisplayString)(_ctx.language.web_lang.iati_standard), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_NavDropdown, { + name: _ctx.language.web_lang.iati_standard, + text: _ctx.language.web_lang.header.iati_standard_hover_text, + "btn-text": _ctx.language.button_lang.see_all_data_fields, "btn-link": "/iati-standard" - })]), (0, vue_1.createElementVNode)("li", _hoisted_13, [_hoisted_14, (0, vue_1.createVNode)(_component_NavDropdown, { - name: "Support", - text: " Any questions? Get help to publish your organisation’s data", - "btn-text": "Read more", + }, null, 8 + /* PROPS */ + , ["name", "text", "btn-text"])]), (0, vue_1.createElementVNode)("li", _hoisted_13, [(0, vue_1.createElementVNode)("a", _hoisted_14, (0, vue_1.toDisplayString)(_ctx.language.web_lang.support), 1 + /* TEXT */ + ), (0, vue_1.createVNode)(_component_NavDropdown, { + name: _ctx.language.web_lang.support, + text: _ctx.language.web_lang.header.support_hover_text, + "btn-text": _ctx.language.button_lang.read_more, "btn-link": "/support" - })]), (0, vue_1.createCommentVNode)(" commented to temporarily hide language buttons "), (0, vue_1.createCommentVNode)("
  • \n
    \n Language:\n
      \n
    • \n EN\n
    • \n
    • \n FR\n
    • \n
    • \n ES\n
    • \n
    \n
    \n
  • ")])]), (0, vue_1.createCommentVNode)(" remove width later "), _hoisted_15]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("h1", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.title), 1 + }, null, 8 + /* PROPS */ + , ["name", "text", "btn-text"])]), (0, vue_1.createCommentVNode)(" commented to temporarily hide language buttons "), (0, vue_1.createCommentVNode)("
  • \n
    \n {{ language.web_lang.language }}:\n
      \n
    • \n EN\n
    • \n
    • \n FR\n
    • \n
    • \n ES\n
    • \n
    \n
    \n
  • ")])]), (0, vue_1.createCommentVNode)(" remove width later "), _hoisted_15]), (0, vue_1.createElementVNode)("div", _hoisted_18, [(0, vue_1.createElementVNode)("h1", _hoisted_19, (0, vue_1.toDisplayString)(_ctx.title), 1 + /* TEXT */ + ), _ctx.auth === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", _hoisted_20, [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)(_ctx.language.web_lang.go_to_dashboard) + " ", 1 /* TEXT */ - ), _ctx.auth === '1' ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)("a", _hoisted_20, [_hoisted_21, (0, vue_1.createVNode)(_component_svg_vue, { + ), (0, vue_1.createVNode)(_component_svg_vue, { "class": "text-2xl", icon: "right-arrow" })])) : (0, vue_1.createCommentVNode)("v-if", true)])])])]); @@ -34132,6 +35322,30 @@ Object.defineProperty(exports, "DocumentLink", ({ /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js": +/*!*********************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js ***! + \*********************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({ + setup: function setup() { + var language = window["globalLang"]; + return { + language: language + }; + } +})); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js ***! @@ -34166,6 +35380,7 @@ __webpack_require__.r(__webpack_exports__); }, setup: function setup(props) { var pageContent = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(props.page === 'signin' ? 'Join Now' : 'Sign In'); + var language = window["globalLang"]; function togglePage() { pageContent.value = pageContent.value === 'Join Now' ? 'Sign In' : 'Join Now'; @@ -34173,7 +35388,8 @@ __webpack_require__.r(__webpack_exports__); return { pageContent: pageContent, - togglePage: togglePage + togglePage: togglePage, + language: language }; } })); @@ -34229,21 +35445,17 @@ var _hoisted_1 = { var _hoisted_2 = { "class": "reset text-center" }; - -var _hoisted_3 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h2", null, "Password Recovery", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", { +var _hoisted_3 = { "class": "mb-5" -}, " An email has been sent with further instructions, please check it out when you get it. ", -1 -/* HOISTED */ -); - +}; function render(_ctx, _cache) { var _component_svg_vue = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("svg-vue"); - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [_hoisted_3, _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { + return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h2", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.password_recovery.password_recovery_header), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.password_recovery.your_email_has_been_sent_with_label), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { "class": "verification m-auto", icon: "ic-verification" })])]); @@ -34267,64 +35479,107 @@ __webpack_require__.r(__webpack_exports__); var _hoisted_1 = { "class": "smooth -mb-7 bg-[#e5e5e5] px-5 py-7 sm:px-10 sm:py-14 md:-mb-20" }; - -var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)("

    What is IATI Publisher?

    IATI Publisher enables organisations to publish data on activities and resource flows according to the IATI Standard. The IATI Standard is a set of rules and guidance on how to publish useful development and humanitarian data.

    Use IATI Publisher to:

    • Register your organisation with an IATI Publisher account
    • Understand the data fields in the IATI Standard (with IATI Standard Reference definitions, helpful explanations and links to guidance)
    • Provide your organisation’s data easily by completing online forms. Or upload data on multiple activities on a CSV or .xml file with the Bulk Upload feature
    • Run automatic checks (via the IATI Validator) for errors before publishing your data
    • Publish your data. IATI Publisher will add your data to the IATI Registry (where links to all IATI data is found)

    IATI Publisher has been built to support organisations that publish a limited number of development and humanitarian activities. An ‘activity’ is an individual project or another unit of development and humanitarian work, which is determined by the organisation that is publishing the data. Organisations who publish a limited number of activities tend to represent small and medium sized organisations.

    Large organisations, such as donor governments or UN agencies delivering 100+ activities are advised not to use IATI Publisher. Instead these organisations likely need to use an alternative technical solution that enables the publication of large volumes of data. Please email the IATI Helpdesk for more information: support@iatistandard.org .

    Development of IATI Publisher

    IATI Publisher was first launched in December 2022 by the IATI Secretariat and has been developed by Young Innovations , a software development firm based in Nepal. IATI Publisher is fully aligned with the IATI Standard XML schema and rulesets .

    ", 1); - -var _hoisted_3 = [_hoisted_2]; -function render(_ctx, _cache) { - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, _hoisted_3); -} - -/***/ }), - -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0": -/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0 ***! - \****************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); - -var _hoisted_1 = { - "class": "smooth -mb-7 bg-[#e5e5e5] px-5 py-7 sm:px-10 sm:py-14 md:-mb-20" +var _hoisted_2 = { + "class": "mx-auto max-w-[700px]" }; - -var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)("

    IATI Standard The IATI Standard is a set of rules and guidance on how to publish useful development and humanitarian data. IATI Publisher will take you through all data fields (which are referred to as ‘elements’) of the IATI Standard, offering helpful explanations and links to further information and guidance. The IATI Standard requires organisations to publish two sets of data:

    1. Organisation Data

    IATI Standard You will be asked to publish data about your entire organisation. This includes basic information about your organisation, such as your name and the type of organisation you are. You can also provide data on:

    • Total spend by your organisation over the last year
    • Total annual planned budget for your organisation in each of the next three years, where available
    • Planned budgets broken down by individual recipient countries or regions
    • Run automatic checks (via the IATI Validator) for errors before publishing your data
    • Useful background documents, such as country action plans and annual reports

    Publish your Organisation Data

    2. Activity Data

    The IATI Standard also requires organisations to provide data about their development and humanitarian ‘activities’. For each activity, you can publish a wide range of information, including:

    • Basic information and identification of the activity e.g. providing a title and a description for your activity
    • Participating organisations – information on which other organisations are involved in the activity
    • Participating organisations – information on which other organisations are involved in
    • Financial data – covers the budgets and the transactions for the activity
    • Classifications – helps categorise the activity using various development and humanitarian taxonomies. For example, what sector does the activity target or support (e.g. primary education or agriculture), or what type of aid is used to fund the activity (e.g. a grant or loan)
    • Links to other data that have already been published on the activity elsewhere
    • The results that the activity is aiming to achieve
    Publishing data at either Activity level or Transaction level

    As listed above, you will need to provide data on your activity’s transactions, which shows how the activity is being financed and how the finance is being used.

    There are specific types of information that you can either publish about your entire activity, or about individual transactions (each transaction represents money flowing in or out of the activity). For example, you can publish data on which country/region your entire activity is benefitting, or you can publish data on which country/region each transaction is benefitting. However you must not publish this information at both activity and transaction levels.

    IATI Publisher provides explanations for each element of the IATI Standard and tells you where you have a choice of which level to publish data for.

    Publish your Organisation Data

    Download PDF of IATI Standard data fields

    IATI Standard Whilst gathering and preparing your organisation’s IATI data, you may find it helpful to view the following spreadsheets that provide information on all of the data elements in the IATI Standard. You will also be able to view this information as you work your way through completing the forms for each element on IATI Publisher.

    [IATI Organisation Standard data PDF]
    [IATI Activity Standard data PDF]

    IATI Standard reference

    You can look up detailed and technical information about each element of the IATI Standard on the IATI Reference section of IATI’s main website:

    Activity Standard
    Organisation Standard
    ", 1); - -var _hoisted_3 = [_hoisted_2]; -function render(_ctx, _cache) { - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, _hoisted_3); -} - -/***/ }), - -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980": -/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980 ***! - \***************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); - -var _hoisted_1 = { - "class": "smooth -mb-7 bg-[#e5e5e5] px-5 py-7 sm:px-10 sm:py-14 md:-mb-20" +var _hoisted_3 = { + "class": "rounded bg-white py-4 shadow-textbox sm:py-8" }; - -var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)("
    ", 1); - -var _hoisted_3 = [_hoisted_2]; -function render(_ctx, _cache) { - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, _hoisted_3); +var _hoisted_4 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_5 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_6 = { + "class": "mt-4 text-base" +}; +var _hoisted_7 = { + "class": "py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_8 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_9 = { + "class": "mt-4 ml-4 list-disc text-base text-bluecoral" +}; +var _hoisted_10 = { + "class": "text-base" +}; +var _hoisted_11 = { + "class": "text-black" +}; +var _hoisted_12 = { + "class": "text-base" +}; +var _hoisted_13 = { + "class": "text-black" +}; +var _hoisted_14 = { + "class": "text-base" +}; +var _hoisted_15 = { + "class": "text-black" +}; +var _hoisted_16 = { + "class": "text-base" +}; +var _hoisted_17 = { + "class": "text-black" +}; +var _hoisted_18 = { + "class": "text-base" +}; +var _hoisted_19 = { + "class": "text-black" +}; +var _hoisted_20 = { + "class": "mt-4 text-base" +}; +var _hoisted_21 = { + "class": "mt-4 text-base" +}; +var _hoisted_22 = ["innerHTML"]; +var _hoisted_23 = { + "class": "ounded py-4 px-6 sm:py-6 sm:px-12" +}; +var _hoisted_24 = { + "class": "my-2 text-2xl font-bold text-bluecoral" +}; +var _hoisted_25 = { + "class": "mt-4 text-base" +}; +var _hoisted_26 = ["innerHTML"]; +function render(_ctx, _cache, $props, $setup, $data, $options) { + return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("section", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("article", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.what_is_iati_publisher_header), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.what_is_iati_publisher_description.one), 1 + /* TEXT */ + )]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("article", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_header), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("ul", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_11, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.one.list_items.one), 1 + /* TEXT */ + )]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_13, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.one.list_items.two), 1 + /* TEXT */ + )]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_15, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.one.list_items.three), 1 + /* TEXT */ + )]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_17, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.one.list_items.four), 1 + /* TEXT */ + )]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", _hoisted_18, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_19, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.one.list_items.five), 1 + /* TEXT */ + )])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_20, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.use_iati_publisher_to_description.two), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_21, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { + innerHTML: _ctx.language.about.use_iati_publisher_to_description.three + }, null, 8 + /* PROPS */ + , _hoisted_22)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("article", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", _hoisted_24, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.about.development_of_iati_header), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { + innerHTML: _ctx.language.about.development_of_iati_description.one + }, null, 8 + /* PROPS */ + , _hoisted_26)])])])])]); } /***/ }), @@ -34354,19 +35609,12 @@ var _hoisted_3 = { var _hoisted_4 = { "class": "left__container rounded-lg p-5 sm:p-10" }; - -var _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { +var _hoisted_5 = { "class": "left__title font-bold" -}, "IATI Publishing Tool", -1 -/* HOISTED */ -); - -var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", { +}; +var _hoisted_6 = { "class": "pt-2 sm:pt-6 sm:pb-8" -}, " Welcome to IATI Publisher. Publish IATI data on your organisation’s development and humanitarian financing and activities. Enter your login information if you’re already a user or create a new account if you’re new here. ", -1 -/* HOISTED */ -); - +}; var _hoisted_7 = { "class": "block" }; @@ -34378,7 +35626,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_JoinNow = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("JoinNow"); - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [_hoisted_5, _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.pageContent === 'Join Now' ? "Haven't registered yet?" : 'Already have an account?') + " ", 1 + return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.home.iati_publishing_tool_header), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.language.home.iati_publishing_tool_section.welcome_text), 1 + /* TEXT */ + ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(_ctx.pageContent === "Join Now" ? _ctx.language.home.iati_publishing_tool_section.havent_registered_label : _ctx.language.home.iati_publishing_tool_section.already_have_account_label) + " ", 1 /* TEXT */ ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", { "class": "ml-1 border-b-2 border-b-transparent text-base text-turquoise hover:border-b-2 hover:border-b-turquoise", @@ -34399,318 +35651,6 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /***/ }), -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb": -/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb ***! - \************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); - -var _hoisted_1 = { - id: "footer", - "class": "mt-7 bg-bluecoral text-sm leading-6 text-n-20 sm:mt-10 md:mt-20" -}; -var _hoisted_2 = { - "class": "border-b border-white border-opacity-20" -}; -var _hoisted_3 = { - "class": "mx-3 py-10 sm:mx-10 xl:mx-24 xl:px-1" -}; -var _hoisted_4 = { - "class": "footer__container grid grid-flow-row gap-8 sm:gap-y-10 md:grid-cols-2 lg:grid-cols-4 lg:justify-items-center" -}; -var _hoisted_5 = { - href: "/" -}; - -var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)("
    IATI Publisher
    ", 2); - -var _hoisted_8 = { - "class": "footer__links lg:justify-self-end" -}; - -var _hoisted_9 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { - "class": "text-xs leading-5" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Part of the IATI Unified Platform"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Code licensed under the GNU AGPL."), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Documentation licensed under CC BY 3.0")], -1 -/* HOISTED */ -); - -var _hoisted_10 = { - "class": "my-5 flex items-center space-x-2 text-n-10" -}; - -var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "text-xs font-bold uppercase" -}, "Any questions? Contact Support", -1 -/* HOISTED */ -); - -var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("ul", null, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", null, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { - "class": "text-sm text-n-10", - href: "mailto:support@iatistandard.org" -}, "support@iatistandard.org")])], -1 -/* HOISTED */ -); - -var _hoisted_13 = { - "class": "mx-5 py-7 sm:mx-10 xl:mx-24 xl:px-1" -}; -var _hoisted_14 = { - "class": "footer__container grid gap-3 sm:grid-cols-2" -}; -var _hoisted_15 = { - "class": "flex items-center text-n-30" -}; - -var _hoisted_16 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Copyright IATI 2022. All rights reserved."); - -var _hoisted_17 = { - "class": "flex sm:justify-end" -}; -var _hoisted_18 = { - href: "https://www.youtube.com/channel/UCAVH1gcgJXElsj8ENC-bDQQ", - target: "_blank" -}; -var _hoisted_19 = { - "class": "ml-4", - href: "https://twitter.com/IATI_aid", - target: "_blank" -}; -function render(_ctx, _cache) { - var _component_svg_vue = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("svg-vue"); - - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("footer", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "h-auto w-60 text-6xl sm:w-64", - icon: "footer-logo" - })])]), _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "text-2xl", - icon: "headphone" - }), _hoisted_11]), _hoisted_12])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mr-1 text-base", - icon: "copyright" - }), _hoisted_16]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_18, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mt-1 mr-1 text-4xl", - icon: "youtube" - })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mt-1 mr-1 text-4xl", - icon: "twitter" - })])])])])]); -} - -/***/ }), - -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086": -/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086 ***! - \********************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); - -var _hoisted_1 = { - "class": "right join-now m-auto flex basis-2/4 items-center rounded-l-lg rounded-r-lg bg-white py-5 px-5 sm:py-10 sm:px-7 md:my-0 md:rounded-l-none lg:py-28 xl:px-14" -}; -var _hoisted_2 = { - "class": "right__container flex flex-col" -}; - -var _hoisted_3 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h2", { - "class": "mb-2 hidden sm:block" -}, "Join Now.", -1 -/* HOISTED */ -); - -var _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "mb-8 text-n-40 xl:pr-6" -}, " To begin, your organisation needs to be registered as an IATI publisher. Select an option and we’ll guide you through this process. ", -1 -/* HOISTED */ -); - -var _hoisted_5 = { - href: "/iati/register", - "class": "right__content mb-6" -}; -var _hoisted_6 = { - "class": "right__icon" -}; - -var _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { - "class": "details mx-4 xl:px-1" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "text-sm font-bold text-bluecoral" -}, "I am new to IATI"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", { - "class": "text-xs leading-5 text-n-40" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Use this option if your organization "), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("u", null, "has not"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" registered an account with IATI on the IATI Registry ")])], -1 -/* HOISTED */ -); - -var _hoisted_8 = { - href: "/register", - "class": "right__content mb-4" -}; -var _hoisted_9 = { - "class": "right__icon" -}; - -var _hoisted_10 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { - "class": "details mx-4 xl:px-1" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "text-sm font-bold text-bluecoral" -}, "My organisation has registered with IATI"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", { - "class": "text-xs leading-5 text-n-40" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Use this option if your organisation is already registered as an IATI Publisher on the "), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { - href: "https://www.iatiregistry.org/", - target: "_blank" -}, "IATI Registry")])], -1 -/* HOISTED */ -); - -var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "text-sm text-n-40" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)("Not sure which one to select? "), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { - "class": "border-b-2 border-b-transparent font-bold text-bluecoral hover:border-b-2 hover:border-b-turquoise hover:text-bluecoral", - href: "mailto:support@iatistandard.org", - target: "_blank" -}, "Contact Support.")], -1 -/* HOISTED */ -); - -function render(_ctx, _cache) { - var _component_svg_vue = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("svg-vue"); - - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [_hoisted_3, _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "text-6xl", - icon: "default-1" - })]), _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "right__arrow text-2xl", - icon: "right-arrow" - })])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "text-6xl", - icon: "default-2" - })]), _hoisted_10, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "right__arrow text-2xl", - icon: "right-arrow" - })])]), _hoisted_11])]); -} - -/***/ }), - -/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680 ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* binding */ render) -/* harmony export */ }); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); - -var _hoisted_1 = { - "class": "mt-7 bg-bluecoral text-sm leading-6 text-n-20 sm:mt-10 md:mt-20" -}; -var _hoisted_2 = { - "class": "border-b border-white border-opacity-20" -}; -var _hoisted_3 = { - "class": "mx-3 py-10 sm:mx-10 xl:mx-24 xl:px-1" -}; -var _hoisted_4 = { - "class": "footer__container grid grid-flow-row gap-8 sm:gap-y-10 md:grid-cols-2 lg:grid-cols-4 lg:justify-items-center" -}; -var _hoisted_5 = { - href: "/" -}; - -var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)("", 2); - -var _hoisted_8 = { - "class": "footer__links lg:justify-self-end" -}; - -var _hoisted_9 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { - "class": "text-xs leading-5" -}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Part of the IATI Unified Platform"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Code licensed under the GNU AGPL."), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "Documentation licensed under CC BY 3.0")], -1 -/* HOISTED */ -); - -var _hoisted_10 = { - "class": "my-5 flex items-center space-x-2 text-n-10" -}; - -var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { - "class": "text-xs font-bold uppercase" -}, "Any questions? Contact Support", -1 -/* HOISTED */ -); - -var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("ul", null, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("li", null, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", { - "class": "text-sm text-n-10", - href: "mailto:support@iatistandard.org" -}, "support@iatistandard.org")])], -1 -/* HOISTED */ -); - -var _hoisted_13 = { - "class": "mx-5 py-7 sm:mx-10 xl:mx-24 xl:px-1" -}; -var _hoisted_14 = { - "class": "footer__container grid gap-3 sm:grid-cols-2" -}; -var _hoisted_15 = { - "class": "flex items-center text-n-30" -}; - -var _hoisted_16 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Copyright IATI 2022. All rights reserved."); - -var _hoisted_17 = { - "class": "flex sm:justify-end" -}; -var _hoisted_18 = { - href: "https://www.youtube.com/channel/UCAVH1gcgJXElsj8ENC-bDQQ", - target: "_blank" -}; -var _hoisted_19 = { - "class": "ml-4", - href: "https://twitter.com/IATI_aid", - target: "_blank" -}; -function render(_ctx, _cache) { - var _component_svg_vue = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("svg-vue"); - - return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("footer", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "h-auto w-60 text-6xl sm:w-64", - icon: "footer-logo" - })])]), _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, [_hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "text-2xl", - icon: "headphone" - }), _hoisted_11]), _hoisted_12])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mr-1 text-base", - icon: "copyright" - }), _hoisted_16]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_18, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mt-1 mr-1 text-4xl", - icon: "youtube" - })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_svg_vue, { - "class": "mt-1 mr-1 text-4xl", - icon: "twitter" - })])])])])]); -} - -/***/ }), - /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/components/AdminHeader.vue?vue&type=style&index=1&id=6fe59055&lang=scss&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/components/AdminHeader.vue?vue&type=style&index=1&id=6fe59055&lang=scss&scoped=true ***! @@ -41918,12 +42858,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AboutPage.vue?vue&type=template&id=7d9fa904 */ "./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _AboutPage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AboutPage.vue?vue&type=script&lang=js */ "./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/AboutPage.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_AboutPage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/AboutPage.vue"]]) /* hot reload */ if (false) {} @@ -42006,15 +42948,18 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _IatiStandard_vue_vue_type_template_id_e68494d0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IatiStandard.vue?vue&type=template&id=e68494d0 */ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _IatiStandard_vue_vue_type_template_id_e68494d0_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IatiStandard.vue?vue&type=template&id=e68494d0&ts=true */ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true"); +/* harmony import */ var _IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./IatiStandard.vue?vue&type=script&lang=ts&setup=true */ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_IatiStandard_vue_vue_type_template_id_e68494d0__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/IatiStandard.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_IatiStandard_vue_vue_type_template_id_e68494d0_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/IatiStandard.vue"]]) /* hot reload */ if (false) {} @@ -42032,18 +42977,20 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "__esModule": () => (/* reexport safe */ _PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _PublishingChecklist_vue_vue_type_template_id_dca69396_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PublishingChecklist.vue?vue&type=template&id=dca69396&ts=true */ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=template&id=dca69396&ts=true"); -/* harmony import */ var _PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PublishingChecklist.vue?vue&type=script&lang=ts&setup=true */ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PublishingChecklist.vue?vue&type=script&lang=ts */ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts"); +/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {}; +/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__[__WEBPACK_IMPORT_KEY__] +/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); /* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_PublishingChecklist_vue_vue_type_template_id_dca69396_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/PublishingChecklist.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_PublishingChecklist_vue_vue_type_template_id_dca69396_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/PublishingChecklist.vue"]]) /* hot reload */ if (false) {} @@ -42097,15 +43044,18 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _SupportPage_vue_vue_type_template_id_56fff980__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SupportPage.vue?vue&type=template&id=56fff980 */ "./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _SupportPage_vue_vue_type_template_id_56fff980_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SupportPage.vue?vue&type=template&id=56fff980&ts=true */ "./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true"); +/* harmony import */ var _SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SupportPage.vue?vue&type=script&lang=ts&setup=true */ "./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_SupportPage_vue_vue_type_template_id_56fff980__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/SupportPage.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_SupportPage_vue_vue_type_template_id_56fff980_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/SupportPage.vue"]]) /* hot reload */ if (false) {} @@ -42151,15 +43101,18 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _AdminFooter_vue_vue_type_template_id_55f9b4bb__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AdminFooter.vue?vue&type=template&id=55f9b4bb */ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _AdminFooter_vue_vue_type_template_id_55f9b4bb_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true */ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true"); +/* harmony import */ var _AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AdminFooter.vue?vue&type=script&lang=ts&setup=true */ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_AdminFooter_vue_vue_type_template_id_55f9b4bb__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/AdminFooter.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_AdminFooter_vue_vue_type_template_id_55f9b4bb_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/AdminFooter.vue"]]) /* hot reload */ if (false) {} @@ -42177,15 +43130,18 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _JoinNow_vue_vue_type_template_id_269f5086__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JoinNow.vue?vue&type=template&id=269f5086 */ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _JoinNow_vue_vue_type_template_id_269f5086_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JoinNow.vue?vue&type=template&id=269f5086&ts=true */ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true"); +/* harmony import */ var _JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JoinNow.vue?vue&type=script&lang=ts */ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_JoinNow_vue_vue_type_template_id_269f5086__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/JoinNow.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_JoinNow_vue_vue_type_template_id_269f5086_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/JoinNow.vue"]]) /* hot reload */ if (false) {} @@ -42237,15 +43193,18 @@ if (false) {} "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__.__esModule), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _WebFooter_vue_vue_type_template_id_20d10680__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./WebFooter.vue?vue&type=template&id=20d10680 */ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680"); -/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); +/* harmony import */ var _WebFooter_vue_vue_type_template_id_20d10680_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./WebFooter.vue?vue&type=template&id=20d10680&ts=true */ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true"); +/* harmony import */ var _WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./WebFooter.vue?vue&type=script&lang=ts&setup=true */ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js"); + + -const script = {} ; -const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_1__["default"])(script, [['render',_WebFooter_vue_vue_type_template_id_20d10680__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/WebFooter.vue"]]) +const __exports__ = /*#__PURE__*/(0,_home_momik_YI_iatipublisher_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_WebFooter_vue_vue_type_template_id_20d10680_ts_true__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/assets/js/views/web/partials/WebFooter.vue"]]) /* hot reload */ if (false) {} @@ -44688,19 +45647,39 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/***/ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true": -/*!**************************************************************************************************!*\ - !*** ./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true ***! - \**************************************************************************************************/ +/***/ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true": +/*!*******************************************************************************************!*\ + !*** ./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true ***! + \*******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./IatiStandard.vue?vue&type=script&lang=ts&setup=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=script&lang=ts&setup=true"); + + +/***/ }), + +/***/ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts": +/*!***************************************************************************************!*\ + !*** ./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts ***! + \***************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), -/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ "default": () => (/* reexport default from dynamic */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0___default.a) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./PublishingChecklist.vue?vue&type=script&lang=ts&setup=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts&setup=true"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./PublishingChecklist.vue?vue&type=script&lang=ts */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=script&lang=ts"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {}; +/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PublishingChecklist_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__] +/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); /***/ }), @@ -44723,6 +45702,57 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); +/***/ }), + +/***/ "./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true": +/*!******************************************************************************************!*\ + !*** ./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./SupportPage.vue?vue&type=script&lang=ts&setup=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=script&lang=ts&setup=true"); + + +/***/ }), + +/***/ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true": +/*!***************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true ***! + \***************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AdminFooter.vue?vue&type=script&lang=ts&setup=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=script&lang=ts&setup=true"); + + +/***/ }), + +/***/ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts": +/*!************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts ***! + \************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_script_lang_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./JoinNow.vue?vue&type=script&lang=ts */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=script&lang=ts"); + + /***/ }), /***/ "./resources/assets/js/views/web/partials/SignIn.vue?vue&type=script&lang=ts": @@ -44743,6 +45773,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); +/***/ }), + +/***/ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true": +/*!*************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_script_lang_ts_setup_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WebFooter.vue?vue&type=script&lang=ts&setup=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=script&lang=ts&setup=true"); + + /***/ }), /***/ "./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=script&lang=ts": @@ -46956,6 +48003,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiRegisterPage_vue_vue_type_template_id_17e632a6_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./IatiRegisterPage.vue?vue&type=template&id=17e632a6&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiRegisterPage.vue?vue&type=template&id=17e632a6&ts=true"); +/***/ }), + +/***/ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true": +/*!**********************************************************************************************!*\ + !*** ./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true ***! + \**********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_template_id_e68494d0_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_template_id_e68494d0_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ }); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_template_id_e68494d0_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./IatiStandard.vue?vue&type=template&id=e68494d0&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0&ts=true"); + + /***/ }), /***/ "./resources/assets/js/views/web/PublishingChecklist.vue?vue&type=template&id=dca69396&ts=true": @@ -46992,196 +48056,200 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/***/ "./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true": -/*!*************************************************************************************************************!*\ - !*** ./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true ***! - \*************************************************************************************************************/ +/***/ "./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true": +/*!*********************************************************************************************!*\ + !*** ./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true ***! + \*********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_template_id_56fff980_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_template_id_56fff980_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_template_id_56fff980_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./SupportPage.vue?vue&type=template&id=56fff980&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980&ts=true"); /***/ }), -/***/ "./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true": -/*!****************************************************************************************************!*\ - !*** ./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true ***! - \****************************************************************************************************/ +/***/ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true": +/*!******************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true ***! + \******************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_template_id_55f9b4bb_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_template_id_55f9b4bb_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_template_id_55f9b4bb_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb&ts=true"); /***/ }), -/***/ "./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js": -/*!*******************************************************************************!*\ - !*** ./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js ***! - \*******************************************************************************/ +/***/ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true": +/*!**************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true ***! + \**************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_template_id_269f5086_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_template_id_269f5086_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WelcomePage.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js"); - +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_template_id_269f5086_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./JoinNow.vue?vue&type=template&id=269f5086&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086&ts=true"); + /***/ }), -/***/ "./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true": -/*!*****************************************************************************************************!*\ - !*** ./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true ***! - \*****************************************************************************************************/ +/***/ "./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true": +/*!*************************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true ***! + \*************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ShimmerLoading_vue_vue_type_template_id_74356172_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ShimmerLoading_vue_vue_type_template_id_74356172_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SignIn_vue_vue_type_template_id_a1861f3e_scoped_true_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/SignIn.vue?vue&type=template&id=a1861f3e&scoped=true&ts=true"); /***/ }), -/***/ "./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3": -/*!********************************************************************************************!*\ - !*** ./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3 ***! - \********************************************************************************************/ +/***/ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true": +/*!****************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true ***! + \****************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PasswordRecovery_vue_vue_type_template_id_70385da3__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_template_id_20d10680_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_template_id_20d10680_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PasswordRecovery_vue_vue_type_template_id_70385da3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./PasswordRecovery.vue?vue&type=template&id=70385da3 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_template_id_20d10680_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WebFooter.vue?vue&type=template&id=20d10680&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680&ts=true"); /***/ }), -/***/ "./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904": -/*!***********************************************************************************!*\ - !*** ./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904 ***! - \***********************************************************************************/ +/***/ "./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true": +/*!****************************************************************************************************!*\ + !*** ./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true ***! + \****************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "__esModule": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__.__esModule), +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AboutPage.vue?vue&type=template&id=7d9fa904 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_ts_loader_index_js_clonedRuleSet_6_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebHeader_vue_vue_type_template_id_10c9e0b2_ts_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-6!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/ts-loader/index.js??clonedRuleSet-6!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebHeader.vue?vue&type=template&id=10c9e0b2&ts=true"); /***/ }), -/***/ "./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0": -/*!**************************************************************************************!*\ - !*** ./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0 ***! - \**************************************************************************************/ +/***/ "./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js": +/*!*****************************************************************************!*\ + !*** ./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js ***! + \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_template_id_e68494d0__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_IatiStandard_vue_vue_type_template_id_e68494d0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./IatiStandard.vue?vue&type=template&id=e68494d0 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/IatiStandard.vue?vue&type=template&id=e68494d0"); - +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AboutPage.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/AboutPage.vue?vue&type=script&lang=js"); + /***/ }), -/***/ "./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980": -/*!*************************************************************************************!*\ - !*** ./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980 ***! - \*************************************************************************************/ +/***/ "./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js": +/*!*******************************************************************************!*\ + !*** ./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js ***! + \*******************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_template_id_56fff980__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_SupportPage_vue_vue_type_template_id_56fff980__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./SupportPage.vue?vue&type=template&id=56fff980 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/SupportPage.vue?vue&type=template&id=56fff980"); - +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WelcomePage.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=script&lang=js"); + /***/ }), -/***/ "./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a": -/*!*************************************************************************************!*\ - !*** ./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a ***! - \*************************************************************************************/ +/***/ "./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true": +/*!*****************************************************************************************************!*\ + !*** ./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true ***! + \*****************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_template_id_eae4485a__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ShimmerLoading_vue_vue_type_template_id_74356172_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_template_id_eae4485a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WelcomePage.vue?vue&type=template&id=eae4485a */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_ShimmerLoading_vue_vue_type_template_id_74356172_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/components/ShimmerLoading.vue?vue&type=template&id=74356172&scoped=true"); /***/ }), -/***/ "./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb": -/*!**********************************************************************************************!*\ - !*** ./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb ***! - \**********************************************************************************************/ +/***/ "./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3": +/*!********************************************************************************************!*\ + !*** ./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3 ***! + \********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_template_id_55f9b4bb__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PasswordRecovery_vue_vue_type_template_id_70385da3__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AdminFooter_vue_vue_type_template_id_55f9b4bb__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AdminFooter.vue?vue&type=template&id=55f9b4bb */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/AdminFooter.vue?vue&type=template&id=55f9b4bb"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_PasswordRecovery_vue_vue_type_template_id_70385da3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./PasswordRecovery.vue?vue&type=template&id=70385da3 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/reset/PasswordRecovery.vue?vue&type=template&id=70385da3"); /***/ }), -/***/ "./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086": -/*!******************************************************************************************!*\ - !*** ./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086 ***! - \******************************************************************************************/ +/***/ "./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904": +/*!***********************************************************************************!*\ + !*** ./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904 ***! + \***********************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_template_id_269f5086__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_JoinNow_vue_vue_type_template_id_269f5086__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./JoinNow.vue?vue&type=template&id=269f5086 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/JoinNow.vue?vue&type=template&id=269f5086"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AboutPage_vue_vue_type_template_id_7d9fa904__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AboutPage.vue?vue&type=template&id=7d9fa904 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/AboutPage.vue?vue&type=template&id=7d9fa904"); /***/ }), -/***/ "./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680": -/*!********************************************************************************************!*\ - !*** ./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680 ***! - \********************************************************************************************/ +/***/ "./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a": +/*!*************************************************************************************!*\ + !*** ./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a ***! + \*************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_template_id_20d10680__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_template_id_eae4485a__WEBPACK_IMPORTED_MODULE_0__.render) /* harmony export */ }); -/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WebFooter_vue_vue_type_template_id_20d10680__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WebFooter.vue?vue&type=template&id=20d10680 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/partials/WebFooter.vue?vue&type=template&id=20d10680"); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_WelcomePage_vue_vue_type_template_id_eae4485a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./WelcomePage.vue?vue&type=template&id=eae4485a */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/assets/js/views/web/WelcomePage.vue?vue&type=template&id=eae4485a"); /***/ }), @@ -47606,4 +48674,4 @@ webpackContext.id = "./resources/assets/images/svg sync recursive ^\\.\\/.*$"; /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ } ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RyxPQUFPLCtCQUErQixHQUFHLFFBQVEsMkJBQTJCLEdBQUcsR0FBRywwQ0FBMEMsTUFBTSxnQ0FBZ0MsR0FBRyxPQUFPLGdDQUFnQyxHQUFHLFFBQVEsOEJBQThCLEdBQUcsR0FBRyxrQ0FBa0MsTUFBTSxnQ0FBZ0MsR0FBRyxPQUFPLGdDQUFnQyxHQUFHLFFBQVEsOEJBQThCLEdBQUcsR0FBRyxPQUFPLDZIQUE2SCxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxVQUFVLFVBQVUsS0FBSyxLQUFLLFVBQVUsV0FBVyxXQUFXLFdBQVcsS0FBSyxLQUFLLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLEtBQUssS0FBSyxXQUFXLFdBQVcsS0FBSyxLQUFLLFVBQVUsV0FBVyxXQUFXLEtBQUssS0FBSyxVQUFVLFdBQVcsS0FBSyxLQUFLLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxLQUFLLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssTUFBTSxXQUFXLEtBQUssS0FBSyxNQUFNLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLE1BQU0sV0FBVyxLQUFLLEtBQUssTUFBTSxLQUFLLFdBQVcsS0FBSyxNQUFNLFdBQVcsTUFBTSxNQUFNLFdBQVcsTUFBTSxLQUFLLEtBQUssS0FBSyxX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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNuU0EsaUVBQWUsMmVBQTJlOzs7Ozs7Ozs7Ozs7Ozs7QUNBMWYsaUVBQWUsdVdBQXVXOzs7Ozs7Ozs7Ozs7Ozs7QUNBdFgsaUVBQWUscW1CQUFxbUI7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Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQXVCOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FNOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FGOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBbEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUk7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVg7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ExQjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQU07Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWxCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQTVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNsSkEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CcmVhZENydW1iLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRGVzY3JpcHRpb25Gb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JQb3BVcC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL05hdkRyb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1B1Ymxpc2hCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9TdGlja3lFcnJvcnMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zdGF0dXMvRWxlbWVudFN0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGV0YWlsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQ3JlYXRlTW9kYWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1B1Ymxpc2hTZWxlY3RlZC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUmVmcmVzaFRvYXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0FjdGl2aXR5RGF0ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Db25kaXRpb25zLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xlZ2FjeURhdGEudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTG9jYXRpb24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BhcnRpY2lwYXRpbmdPcmcudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGxhbm5lZERpc2J1cnNlbWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRSZWdpb24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZXN1bHQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1RhZy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UaXRsZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JEZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9CYXNlbGluZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvTWVhc3VyZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1RpdGxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0eUVsZW1lbnQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWRkQWN0aXZpdHlCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9FbGVtZW50c05vdGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRW1wdHlBY3Rpdml0eS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvU2lkZWJhckhlbHBCbG9jay52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9UYWJsZUxheW91dC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzTGlzdC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL2VsZW1lbnRzL0FjdHVhbFZhbHVlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHREZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHRFbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0RvY3VtZW50TGluay52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0luZGljYXRvci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1Jlc3VsdFR5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9UaXRsZURlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkxpc3QudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRmxvd1R5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RpZWRTdGF0dXMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RyYW5zYWN0aW9uRGF0ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9WYWx1ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvQWN0aXZpdHlVcGxvYWQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2ltcG9ydC9MaXN0RWxlbWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ09yZ0J1ZGdldC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1RvdGFsQnVkZ2V0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9yZXNldC9SZXNldFBhc3N3b3JkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9PcmdhbmlzYXRpb25MaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zdXBlcmFkbWluL2NvbXBvbmVudHMvVGFibGVMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9FbWFpbFZlcmlmaWNhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVJlZ2lzdGVyUGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUHVibGlzaGluZ0NoZWNrbGlzdC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9TaWduSW4udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkhlYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9hcHAudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb3NhYmxlL2NvcmVFbGVtZW50cy50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvZGF0ZUZvcm1hdC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvZW5jcnlwdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvdGl0bGUudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb3NhYmxlL3V0aWxzLnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvYWN0aXZpdGllcy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL2FjdGl2aXRpZXMvc2hvdy50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvc2V0dGluZy9hY3Rpb25zLnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvc2V0dGluZy9tdXRhdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL3NldHRpbmcvc3RhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL2VsZW1lbnRzL0luZGV4LnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9XZWxjb21lUGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Bhc3N3b3JkUmVjb3ZlcnkudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0Fib3V0UGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVN0YW5kYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9TdXBwb3J0UGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvQWRtaW5Gb290ZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0pvaW5Ob3cudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkZvb3Rlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZT85OGRiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvck1lc3NhZ2UudnVlPzgwNzUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWU/NDk4MSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZT8yMjBiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZT8wMTgyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9TaGltbWVyTG9hZGluZy52dWU/ZjE5NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRXJyb3JMaXN0cy52dWU/Y2M2ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2UyM2UiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/YmY0ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlPzM1N2IiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/ODAzYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/MjE4YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlP2RkYzgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0aWVzRWxlbWVudHMudnVlP2UyZjUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/OWZkMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWU/M2NmNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT82NmJlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1JlZ2lzdGVyUGFnZS52dWU/ZmU0YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9TaWduSW4udnVlP2EzZTIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2FwcC5zY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlLyBzeW5jIF5cXC5cXC8uKiQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X2RhdGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9zY29wZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3N0YXR1cy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2J1ZGdldC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2J1aWxkaW5nLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY2FwaXRhbF9zcGVuZC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbGxhYm9yYXRpb25fdHlwZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbmRpdGlvbnMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb250YWN0X2luZm8uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb3VudHJ5X2J1ZGdldF9pdGVtcy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Nycy1hZGQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2FpZF90eXBlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZGVmYXVsdF9maW5hbmNlX3R5cGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2Zsb3dfdHlwZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZG9jdW1lbnRfbGluay5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2h1bWFuaXRhcmlhbl9zY29wZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2lhdGlfaWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2luZGljYXRvci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2xlZ2FjeV9kYXRhLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvbG9jYXRpb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9vdGhlcl9pZGVudGlmaWVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcGFydGljaXBhdGluZ19vcmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9wZXJpb2Quc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9wbGFubmVkX2Rpc2J1cnNlbWVudC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BvbGljeV9tYXJrZXIuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZWxhdGVkX2FjdGl2aXR5LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVwb3J0aW5nX29yZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdHMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9zZWN0b3Iuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90YWcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90aXRsZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3RyYW5zYWN0aW9ucy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FkZC1tb3JlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWRkLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWxlcnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1jZW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1yaWdodC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FwcHJvdmVkLWNsb3VkLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXJyb3ctZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LWxlZnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hcnJvdy1yaWdodC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LXNob3J0LWxlZnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hc2NlbmRpbmctYXJyb3cuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9iaWxsLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYm94LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYnVkZ2V0LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYnVpbGRpbmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jYW5jZWwtY2xvdWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVjay1jaXJjbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVja2JveC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NoZWNrZWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGV2cm9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2xvc2Uuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jb3B5cmlnaHQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jb3JlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0xLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0yLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVsZXRlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVzY2VuZGluZy1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RvY3VtZW50LXdyaXRlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG91YmxlLXRpY2suc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kb3dubG9hZC1maWxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG93bmxvYWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kcm9wZG93bi1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2VkaXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9leHRlcm5hbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2V5ZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2ZvbGRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Zvb3Rlci1sb2dvLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZ3JvdXAuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oZWFkZXItbG9nby5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hlYWRwaG9uZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hlbHAuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oaXN0b3J5LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvaWMtdmVyaWZpY2F0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbGVmdC1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2xvZ28td2hpdGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sb2dvLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbG9nb3V0LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbWFpbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL21vb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9ub3RlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2J1aWxkaW5nLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2RvY3VtZW50X2xpbmsuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvbmFtZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdfaWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbmlzYXRpb25faWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbml6YXRpb25faWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeV9idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X29yZ19idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X3JlZ2lvbl9idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVwb3J0aW5nX29yZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZXBvcnRpbmdfb3JnYW5pc2F0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RpdGxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RvdGFsX2J1ZGdldC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy90b3RhbF9leHBlbmRpdHVyZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BhbmVsLXNlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BsdXMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9wdWJsaXNoLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcHctbG9jay5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3F1ZXN0aW9uLW1hcmsuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtY3Jvc3Muc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtZG90LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcmVkby5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3JpZ2h0LWFycm93LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2V0dGluZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NoaWVsZC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NtaWxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc3Rhci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3RpY2suc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90aW1lcy1jaXJjbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90d2l0dGVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdXBsb2FkLWZpbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy91c2VyLXByb2ZpbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy91c2VyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvd2FybmluZy1hY3Rpdml0eS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmctZmlsbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy95b3V0dWJlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlP2E5Y2YiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yTWVzc2FnZS52dWU/NTg4OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZT9hMGMzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Mb2FkZXIudnVlP2VjYzIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BvcHVwTW9kYWwudnVlP2VlMWIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZT85NTBlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT9hYjkzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWU/ZDc4MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvU3RpY2t5RXJyb3JzLnZ1ZT83Mjk1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlJbmRleC52dWU/ODgwZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0NyZWF0ZU1vZGFsLnZ1ZT82ZDM5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZT81NDI3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0Vycm9ySXRlbS52dWU/ZGVlYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/MGE3ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT9jODU2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYWdlLnZ1ZT84MTIzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlPzQ4NDUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZT9jN2E1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWU/NDQ3OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlPzNjMmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0JyZWFkQ3J1bWIudnVlP2FhMWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWU/NmYxMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRGVzY3JpcHRpb25Gb3JtLnZ1ZT8xNDEwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvck1lc3NhZ2UudnVlP2UxZDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yUG9wVXAudnVlPzMyZmEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWU/YTJlNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZT80MmI3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9OYXZEcm9wZG93bi52dWU/YWUwYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWU/ZWQzMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUmFkaWFsUHJvZ3Jlc3NCYXIudnVlPzc0YTciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZT8yNjdiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlPzI3YjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWU/MzkxZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlPzZlNDEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvTGluay52dWU/MjQ3YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9QdWJsaXNoQnV0dG9uLnZ1ZT9hOGQ3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWU/NDFhMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZT84YzkwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT84ODhlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlPzkzNjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlPzkxN2IiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWU/ZTJmMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2ZkYzciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/YWZjYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc3RhdHVzL0VsZW1lbnRTdGF0dXMudnVlP2RhNTQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT9mODczIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP2Q0YTkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURldGFpbC52dWU/OTQ2NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlPzA0NmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/OGU2ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/Nzc0OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlPzAxM2QiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZT8zOWRhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWU/OTFiYSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT8yYmYwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQWN0aXZpdHlEYXRlLnZ1ZT8yZjBiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQ29uZGl0aW9ucy52dWU/YzE4ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZT82MDcyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzZiNWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9IdW1hbml0YXJpYW5TY29wZS52dWU/NTliYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZT8yZDc2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTGVnYWN5RGF0YS52dWU/YjhkYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xvY2F0aW9uLnZ1ZT8yYmJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZT83MjNlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGFydGljaXBhdGluZ09yZy52dWU/ODk4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BsYW5uZWREaXNidXJzZW1lbnQudnVlPzBkYzYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlPzhlYjgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT84MTBmIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZT9iYjg4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZT81ZTk4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT8zYmU5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVzdWx0LnZ1ZT8xOGRlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZT8yMjc5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGFnLnZ1ZT84ZDE3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGl0bGUudnVlP2MzZTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlPzUwMjYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWU/NDkwNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yTGlzdC52dWU/MDk1OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlPzQxYjYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Jhc2VsaW5lLnZ1ZT84MDYwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWU/OTc5ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT80ZDg3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRpY2F0b3JBc2NlbmRpbmcudnVlPzQ2ZDciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL01lYXN1cmUudnVlPzFjNmIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWU/MmU3OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvUmVmZXJlbmNlLnZ1ZT9hYjcxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9UaXRsZS52dWU/MDEzMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/NzVlMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWU/MjE2YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT80NzQzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/MTEyYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWU/NDZhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VtcHR5QWN0aXZpdHkudnVlPzU0MWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlPzIxMWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9TaWRlYmFySGVscEJsb2NrLnZ1ZT8zODg2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvVGFibGVMYXlvdXQudnVlPzcwNDYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlP2U2NGMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZT9jMzJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9lbGVtZW50cy9BY3R1YWxWYWx1ZS52dWU/NGVhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlPzJjOTgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdERldGFpbC52dWU/NDdlZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RWxlbWVudC52dWU/M2VmMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWU/OGIzYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT83ZDE1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRpY2F0b3IudnVlPzg1ZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWU/MjkzMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvUmVzdWx0VHlwZS52dWU/ZjNmNCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvVGl0bGVEZXNjcmlwdGlvbi52dWU/ZTA5YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWU/NThmMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP2RiNWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZT8xNTA4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlPzMyZjgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzE5NWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/ODFkMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWU/NGE4NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GbG93VHlwZS52dWU/NzEzNCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/MzE1MSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/NjJlYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT8wMTUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWU/ZGY2MyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlP2FiM2YiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVGllZFN0YXR1cy52dWU/NzhkMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9UcmFuc2FjdGlvbkRhdGUudnVlP2U4OWQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZT84M2NhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1ZhbHVlLnZ1ZT8xMTg3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0FjdGl2aXR5VXBsb2FkLnZ1ZT9mODc3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlP2ZmOGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvSW1wb3J0UGxhY2Vob2xkZXIudnVlPzFhNTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvTGlzdEVsZW1lbnQudnVlP2U2MTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/ZDJlNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/YWE0YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/Yjg3NSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlPzAwNDQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/MzdlZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdCdWRnZXQudnVlPzllYWIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT85ZWE0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/YjEwOCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEJ1ZGdldC52dWU/ZGQyYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT83YjM3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUGFzc3dvcmRSZWNvdmVyeS52dWU/OWNiZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWU/ZjFhYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFzc3dvcmQudnVlPzQzNjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zZXR0aW5nL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/OTE1YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlPzAxMDMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zZXR0aW5nL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/ZTI0NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vT3JnYW5pc2F0aW9uTGlzdC52dWU/ZTUwNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWU/NjY2MCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9UYWJsZUxpc3QudnVlPzMxMTciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvQWJvdXRQYWdlLnZ1ZT83OGRjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT9jMGE2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlPzIzZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVN0YW5kYXJkLnZ1ZT82NTJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlPzg2OWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZT8xNWU1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1N1cHBvcnRQYWdlLnZ1ZT8wNThjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1dlbGNvbWVQYWdlLnZ1ZT8wZGViIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0FkbWluRm9vdGVyLnZ1ZT80MjJiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0pvaW5Ob3cudnVlPzVhNTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvU2lnbkluLnZ1ZT8wMzVkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkZvb3Rlci52dWU/YTdkMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJIZWFkZXIudnVlP2FlYjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZT9kNDgwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CcmVhZENydW1iLnZ1ZT8xYjI2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlPzUxMjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Rlc2NyaXB0aW9uRm9ybS52dWU/ZGQxZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZT9kN2I3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvclBvcFVwLnZ1ZT80MjgxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Ib3ZlclRleHQudnVlPzEyMGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWU/ZWU4YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTmF2RHJvcGRvd24udnVlP2JjZGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BvcHVwTW9kYWwudnVlPzM5NDciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZT8wMWI5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlPzZkM2MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWU/MzVkNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlPzhiMmIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvTGluay52dWU/ZmE1ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9QdWJsaXNoQnV0dG9uLnZ1ZT9hYmUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWU/MGU4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZT8xMzM1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT8wY2I3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlPzg5NGYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP2NiMmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWU/YjI2YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2Y3ODMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/NmU5NiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc3RhdHVzL0VsZW1lbnRTdGF0dXMudnVlP2Y0M2QiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT8yYWVjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlPzY1YzEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURldGFpbC52dWU/YjFlMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlP2MyNmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/ZjU4OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/ZjA0NSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlPzUwNjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZT83NzQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWU/Zjk2NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT8zYTkyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQWN0aXZpdHlEYXRlLnZ1ZT8zM2I2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQ29uZGl0aW9ucy52dWU/NTlhNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZT85ZGE2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzRiZTIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9IdW1hbml0YXJpYW5TY29wZS52dWU/YzI3MyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZT8yNmUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTGVnYWN5RGF0YS52dWU/NzFhNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xvY2F0aW9uLnZ1ZT8zNDBhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZT9hMmM2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGFydGljaXBhdGluZ09yZy52dWU/NzBjMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BsYW5uZWREaXNidXJzZW1lbnQudnVlP2ZmNGQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlP2RlYjAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT9kODU3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZT9kMzhjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZT8zZGU3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT9kNWNmIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVzdWx0LnZ1ZT83NGY2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZT80OTZjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGFnLnZ1ZT8wMzE0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGl0bGUudnVlPzgxMDgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlPzAxZTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWU/OTcxNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yTGlzdC52dWU/MmNjNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlPzAxOGQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Jhc2VsaW5lLnZ1ZT8wYzJiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWU/ZmY4ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT80NDI0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRpY2F0b3JBc2NlbmRpbmcudnVlPzEzYWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL01lYXN1cmUudnVlP2VhZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWU/MzhmNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvUmVmZXJlbmNlLnZ1ZT85MjQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9UaXRsZS52dWU/OWZmMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/OGM5NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWU/NWM1MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT9jMjBkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/OTQyNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWU/MDYxNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VtcHR5QWN0aXZpdHkudnVlPzI4MWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlPzlkMWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9TaWRlYmFySGVscEJsb2NrLnZ1ZT8wZGY0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvVGFibGVMYXlvdXQudnVlPzYzNDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlPzdhODMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZT82NzQzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9lbGVtZW50cy9BY3R1YWxWYWx1ZS52dWU/MzMwZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlPzE2YjAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdERldGFpbC52dWU/MGE5YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RWxlbWVudC52dWU/ODUxYSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWU/NmE3MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT9hY2NkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRpY2F0b3IudnVlPzBiNzEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWU/NjNhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvUmVzdWx0VHlwZS52dWU/MTYzMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvVGl0bGVEZXNjcmlwdGlvbi52dWU/NWUzMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWU/MmU1MCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkVsZW1lbnQudnVlPzUzYjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZT85MjA3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlPzM0NzkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzgzZjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/MWU1MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWU/NWRjMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GbG93VHlwZS52dWU/YjVkNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/ODgwYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/OWM0NyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT9jNWFhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWU/NGJiNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlPzZmODAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVGllZFN0YXR1cy52dWU/ODI3OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9UcmFuc2FjdGlvbkRhdGUudnVlPzBiOTkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZT80NTRiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1ZhbHVlLnZ1ZT84YmY0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0FjdGl2aXR5VXBsb2FkLnZ1ZT9jZjY1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlPzg1NDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvSW1wb3J0UGxhY2Vob2xkZXIudnVlPzJhYjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvTGlzdEVsZW1lbnQudnVlP2M5NjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/YjMyOSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/ODc4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/YWM0ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlPzUzOTEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/N2EwMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdCdWRnZXQudnVlPzZhZjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT8wOTgzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/YTA3OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEJ1ZGdldC52dWU/NGJhZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT81MWQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYWdlLnZ1ZT9lOGIzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYXNzd29yZC52dWU/ZWU0OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT84NWU5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nUGFnZS52dWU/ZjBlMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZT8zZjM0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9PcmdhbmlzYXRpb25MaXN0LnZ1ZT80NDBhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL0FkbWluQmFyLnZ1ZT80MjRjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL1RhYmxlTGlzdC52dWU/OWYyZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/NWExNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT83Y2IwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlP2Y2M2YiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZT85ODYzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWU/NjNkMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJIZWFkZXIudnVlPzAyZjYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvV2VsY29tZVBhZ2UudnVlP2M2NjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnLyBzeW5jIF5cXC5cXC8uKiQiLCJ3ZWJwYWNrOi8vL2lnbm9yZWR8L2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvY3J5cHRvLWpzfGNyeXB0byJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBDcmVhdGVNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vdmlld3MvYWN0aXZpdHkvQ3JlYXRlTW9kYWwudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnQWRtaW5IZWFkZXInLFxuICAgIHByb3BzOiB7XG4gICAgICAgIHVzZXI6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBvcmdhbml6YXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB2ID09PSBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdXBlckFkbWluOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBzaG93VXNlckRyb3Bkb3duID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIucmVmKSgnJyk7XG4gICAgICAgIHZhciB0b2FzdFR5cGUgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBsYW5ndWFnZU5hdkxpQ2xhc3NlczogJ2ZsZXgnLFxuICAgICAgICAgICAgbGFuZ3VhZ2VOYXZBbmNob3JDbGFzc2VzOiAnZmxleCB0ZXh0LXdoaXRlIGl0ZW1zLWNlbnRlciB1cHBlcmNhc2UgbmF2X19wb2ludGVyLWhvdmVyIHB4LTEuNScsXG4gICAgICAgICAgICBtZW51TmF2TGlDbGFzc2VzOiAnZmxleCBweC00IHJlbGF0aXZlJyxcbiAgICAgICAgICAgIG1lbnVOYXZBbmNob3JDbGFzc2VzOiAnZmxleCB0ZXh0LXdoaXRlIGl0ZW1zLWNlbnRlciB1cHBlcmNhc2UgbmF2X19wb2ludGVyLWhvdmVyJyxcbiAgICAgICAgICAgIGxhbmd1YWdlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6ICdFTicsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJyMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlOiAnRlInLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcjJyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6ICdFUycsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJyMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWVudXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBY3Rpdml0eSBEQVRBJyxcbiAgICAgICAgICAgICAgICAgICAgcGVybWFsaW5rOiAnL2FjdGl2aXRpZXMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdPcmdhbmlzYXRpb24gREFUQScsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJy9vcmdhbmlzYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU2V0dGluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcvc2V0dGluZycsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBZGQgLyBJbXBvcnQgQWN0aXZpdHknLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGxpQ2xhc3MgPSAnYmxvY2sgcC0yLjUgdGV4dC1uLTQwIHRleHQtdGlueSB1cHBlcmNhc2UgbGVhZGluZy1bMS41XSBmb250LWJvbGQgaG92ZXI6IXRleHQtbi01MCBob3ZlcjpiZy1uLTEwJztcbiAgICAgICAgdmFyIF9jID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIG1vZGFsVmFsdWUgPSBfY1swXSwgbW9kYWxUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgZnVuY3Rpb24gdG9hc3QobWVzc2FnZSwgdHlwZSkge1xuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgMTUwMDApO1xuICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnZhbHVlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIHRvYXN0VHlwZS52YWx1ZSA9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzVG91Y2hEZXZpY2UgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIFRvZ2dsZU1vZGVsKCkge1xuICAgICAgICAgICAgbW9kYWxUb2dnbGUoKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb3BlbkFkZE1vZGVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIHZ1ZV8yLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlQWN0aXZlTWVudSgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICAgICAgZGF0YS5tZW51cy5mb3JFYWNoKGZ1bmN0aW9uIChtZW51LCBrZXkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLm1lbnVzW2tleV1bJ2FjdGl2ZSddID0gbWVudS5wZXJtYWxpbmsgPT09IHBhdGggPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdhY3Rpdml0eScpIHx8XG4gICAgICAgICAgICAgICAgcGF0aC5pbmNsdWRlcygncmVzdWx0JykgfHxcbiAgICAgICAgICAgICAgICBwYXRoLmluY2x1ZGVzKCdpbmRpY2F0b3InKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbMF1bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdvcmdhbmlzYXRpb24nKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbMV1bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdpbXBvcnQnKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbM11bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbCBzdG9yYWdlIGZvciBwdWJsaXNoaW5nXG4gICAgICAgIHZhciBwYSA9ICgwLCBjb3JlXzEudXNlU3RvcmFnZSkoJ3Z1ZS11c2UtbG9jYWwtc3RvcmFnZScsIHtcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdBY3Rpdml0aWVzOiAoX2IgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaGluZ0FjdGl2aXRpZXMnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30sXG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBsb2dvdXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGEudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xLmRlZmF1bHQucG9zdCgnL2xvZ291dCcpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZWFyY2ggZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHNlYXJjaFZhbHVlID0gKDAsIHZ1ZV8yLnJlZikoJycpO1xuICAgICAgICB2YXIgY3VycmVudFVSTCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICBpZiAoY3VycmVudFVSTC5pbmNsdWRlcygnPycpKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSwgc2VhcmNoID0gdXJsUGFyYW1zLmdldCgncScpO1xuICAgICAgICAgICAgc2VhcmNoVmFsdWUudmFsdWUgPSBzZWFyY2g7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNwaW5uZXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBzZWFyY2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHNwaW5uZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHBhcmFtID0gKF9hID0gc2VhcmNoVmFsdWUudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgICAgICAgdmFyIHNvcnRpbmdQYXJhbSA9ICcnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSAmJiBjdXJyZW50VVJMLmluY2x1ZGVzKCcmJykpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZ0FyciA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgICAgICAgICAgICAgc29ydGluZ1BhcmFtID0gJyYnICsgcXVlcnlTdHJpbmdBcnIuc2xpY2UoMSkuam9pbignJicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhyZWYgPSBwYXJhbSA/IFwiXCIuY29uY2F0KHVybCwgXCI/cT1cIikuY29uY2F0KHBhcmFtKS5jb25jYXQoc29ydGluZ1BhcmFtKSA6ICcvYWN0aXZpdGllcy8nO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlQWN0aXZlTWVudSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3BlbkFkZE1vZGVsJykgPT09ICd0cnVlJyAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJy9hY3Rpdml0aWVzJykge1xuICAgICAgICAgICAgICAgIG1vZGFsVmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8yLm9uVW5tb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb3BlbkFkZE1vZGVsJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBzaG93VXNlckRyb3Bkb3duOiBzaG93VXNlckRyb3Bkb3duLCB0b2FzdFZpc2liaWxpdHk6IHRvYXN0VmlzaWJpbGl0eSwgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLCB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSwgdG9hc3RUeXBlOiB0b2FzdFR5cGUsIGRhdGE6IGRhdGEsIGxpQ2xhc3M6IGxpQ2xhc3MsIG1vZGFsVmFsdWU6IG1vZGFsVmFsdWUsIG1vZGFsVG9nZ2xlOiBtb2RhbFRvZ2dsZSwgdG9hc3Q6IHRvYXN0LCBpc1RvdWNoRGV2aWNlOiBpc1RvdWNoRGV2aWNlLCBUb2dnbGVNb2RlbDogVG9nZ2xlTW9kZWwsIGNoYW5nZUFjdGl2ZU1lbnU6IGNoYW5nZUFjdGl2ZU1lbnUsIHBhOiBwYSwgbG9nb3V0OiBsb2dvdXQsIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSwgY3VycmVudFVSTDogY3VycmVudFVSTCwgc3Bpbm5lcjogc3Bpbm5lciwgc2VhcmNoRnVuY3Rpb246IHNlYXJjaEZ1bmN0aW9uLCBDcmVhdGVNb2RhbDogQ3JlYXRlTW9kYWxfdnVlXzEuZGVmYXVsdCwgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQnJlYWRDcnVtYicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBicmVhZGNydW1iRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IGdldEFjdGl2aXR5VGl0bGU6IHRpdGxlXzEuZGVmYXVsdCwgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdCdXR0b25Db21wb25lbnQnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGJ0blR5cGUgPSAnJztcbiAgICAgICAgaWYgKHByb3BzLnR5cGUgPT09ICdzZWNvbmRhcnknKSB7XG4gICAgICAgICAgICBidG5UeXBlID0gJ3NlY29uZGFyeS1idG4gZm9udC1ib2xkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9wcy50eXBlID09PSAnb3V0bGluZScpIHtcbiAgICAgICAgICAgIGJ0blR5cGUgPSAncHJpbWFyeS1vdXRsaW5lLWJ0bic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gJ3ByaW1hcnknKSB7XG4gICAgICAgICAgICBidG5UeXBlID0gJ3ByaW1hcnktYnRuIGZvbnQtYm9sZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidG5UeXBlID0gJ2ZvbnQtYm9sZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYnRuVHlwZTogYnRuVHlwZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnRGVzY3JpcHRpb25Gb3JtJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge30sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8zID0gcmVxdWlyZShcIkBoZWFkbGVzc3VpL3Z1ZVwiKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiKSk7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0Vycm9yTWVzc2FnZScsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgaXNFbXB0eToge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgc2hvdyA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGhhc0Vycm9ycyA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGVycm9yQ291bnQgPSAoMCwgdnVlXzIucmVmKSgwKTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKFwidG9hc3REYXRhXCIpO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBhY2NvdW50X3ZlcmlmaWVkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdF9zZXR0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9zZXR0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHRva2VuX3N0YXR1czogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNMb2FkZXJWaXNpYmxlID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICBmdW5jdGlvbiByZXNlbmRWZXJpZmljYXRpb25FbWFpbCgpIHtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi91c2VyL3ZlcmlmaWNhdGlvbi9lbWFpbFwiKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IGVycm9yLmRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9zZXR0aW5nL3N0YXR1c1wiKSxcbiAgICAgICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi91c2VyL3ZlcmlmaWNhdGlvbi9zdGF0dXNcIiksXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvb3JnYW5pc2F0aW9uL3N0YXR1c1wiKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihheGlvc18xLmRlZmF1bHQuc3ByZWFkKGZ1bmN0aW9uIChzZXR0aW5nX3JlcywgdXNlcl9yZXMsIG9yZ19yZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHNldHRpbmdfcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VyX3Jlc3BvbnNlID0gdXNlcl9yZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9yZ19yZXNwb25zZSA9IG9yZ19yZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLmRlZmF1bHRfc2V0dGluZyA9IChfYSA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVmYXVsdF9zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wdWJsaXNoZXJfc2V0dGluZyA9IChfYiA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5kYXRhKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHVibGlzaGVyX3N0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnRva2VuX3N0YXR1cyA9IChfYyA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5kYXRhKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9rZW5fc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEuYWNjb3VudF92ZXJpZmllZCA9IHVzZXJfcmVzcG9uc2UuZGF0YS5hY2NvdW50X3ZlcmlmaWVkO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEucHVibGlzaGVyX2FjdGl2ZSA9IG9yZ19yZXNwb25zZS5kYXRhLnB1Ymxpc2hlcl9hY3RpdmU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBncm91cGVkRXJyb3IgPSBbXCJkZWZhdWx0X3NldHRpbmdcIiwgXCJwdWJsaXNoZXJfc2V0dGluZ1wiLCBcInRva2VuX3N0YXR1c1wiXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZXJyb3IgaW4gZXJyb3JEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yRGF0YVtlcnJvcl0gJiYgZ3JvdXBlZEVycm9yLmluZGV4T2YoZXJyb3IpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQudmFsdWUgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIShlcnJvckRhdGEucHVibGlzaGVyX3NldHRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS50b2tlbl9zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5kZWZhdWx0X3NldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvdW50LnZhbHVlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoZXJyb3JEYXRhKS5pbmRleE9mKGZhbHNlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHNob3c6IHNob3csIGhhc0Vycm9yczogaGFzRXJyb3JzLCBlcnJvckNvdW50OiBlcnJvckNvdW50LCB0b2FzdERhdGE6IHRvYXN0RGF0YSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGlzTG9hZGVyVmlzaWJsZTogaXNMb2FkZXJWaXNpYmxlLCByZXNlbmRWZXJpZmljYXRpb25FbWFpbDogcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwsIFRyYW5zaXRpb25Sb290OiB2dWVfMy5UcmFuc2l0aW9uUm9vdCwgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0Vycm9yUG9wVXAnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogQXJyYXkgfHwgU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBlbWl0czogWydjbG9zZS1wb3B1cCddLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZSwgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbWl0KCdjbG9zZS1wb3B1cCcsICdjbG9zZWQnKTtcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzIub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGVtaXQ6IGVtaXQsIHByb3BzOiBwcm9wcywgY2xvc2U6IGNsb3NlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBwcm9wczoge1xuICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgaG92ZXJUZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICd3LTYwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvblNpemU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBzaG93SWF0aVJlZmVyZW5jZToge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnTG9hZGVyQ21wJyxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIHByb3BzOiB7XG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYnRuVGV4dDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJ0bkxpbms6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUG9wdXBNb2RhbCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kYWxBY3RpdmU6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICc4MDknLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgZW1pdHM6IFsnY2xvc2UnLCAncmVzZXQnXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzLCBfYSkge1xuICAgICAgICB2YXIgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcHMubW9kYWxBY3RpdmU7IH0sIGZ1bmN0aW9uIChtb2RhbEFjdGl2ZSkge1xuICAgICAgICAgICAgaWYgKG1vZGFsQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICBlbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgZW1pdCgncmVzZXQnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgY2xvc2U6IGNsb3NlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZTNfcmFkaWFsX3Byb2dyZXNzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInZ1ZTMtcmFkaWFsLXByb2dyZXNzXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFJhZGlhbFByb2dyZXNzQmFyOiB2dWUzX3JhZGlhbF9wcm9ncmVzc18xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBwZXJjZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgY29tcGxldGVkUGVyY2VudCA9ICgwLCB2dWVfMS5yZWYpKHByb3BzLnBlcmNlbnQpO1xuICAgICAgICB2YXIgdG90YWxQZXJjZW50ID0gKDAsIHZ1ZV8xLnJlZikoMTAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZFBlcmNlbnQ6IGNvbXBsZXRlZFBlcmNlbnQsXG4gICAgICAgICAgICB0b3RhbFBlcmNlbnQ6IHRvdGFsUGVyY2VudCxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1BhZ2luYXRpb25Db21wb25lbnQnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBlbWl0czogWydmZXRjaEFjdGl2aXRpZXMnXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzLCBfYSkge1xuICAgICAgICB2YXIgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgIHZhciBhY3RpdmVfcGFnZSA9ICgwLCB2dWVfMS5yZWYpKDEpO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGFjdGl2ZV9wYWdlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbWl0KCdmZXRjaEFjdGl2aXRpZXMnLCBhY3RpdmVfcGFnZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVQYWdlKHBhZ2UpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID0gcGFnZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VQYWdlKHBhZ2VOdW0pIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gcHJvcHMuZGF0YS5sYXN0X3BhZ2UgPyAxIDogcGFnZU51bTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBuZXh0UGFnZSgpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gcHJvcHMuZGF0YS5sYXN0X3BhZ2UgPyAxIDogYWN0aXZlX3BhZ2UudmFsdWUgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByZXZpb3VzUGFnZSgpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gMSA/IHByb3BzLmRhdGEubGFzdF9wYWdlIDogYWN0aXZlX3BhZ2UudmFsdWUgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBhY3RpdmVfcGFnZTogYWN0aXZlX3BhZ2UsXG4gICAgICAgICAgICB1cGRhdGVBY3RpdmVQYWdlOiB1cGRhdGVBY3RpdmVQYWdlLFxuICAgICAgICAgICAgbmV4dFBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcHJldmlvdXNQYWdlOiBwcmV2aW91c1BhZ2UsXG4gICAgICAgICAgICBjaGFuZ2VQYWdlOiBjaGFuZ2VQYWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVG9hc3RNZXNzYWdlJyxcbiAgICBwcm9wczoge1xuICAgICAgICBtZXNzYWdlOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgdHlwZTogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICgwLCB2dWVfMi5yZWYpKFwiXCIpO1xuICAgICAgICBjbGFzc05hbWUudmFsdWUgPSBwcm9wcy50eXBlXG4gICAgICAgICAgICA/IFwicm91bmRlZC1sZyBiZy1taW50IGJvcmRlciBib3JkZXItc3ByaW5nLTEwIHB5LTMgcHgtNSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIHRleHQtc20gbGVhZGluZy1ub3JtYWwgdGV4dC1uLTUwXCJcbiAgICAgICAgICAgIDogXCJyb3VuZGVkLWxnIGJnLWNyaW1zb24tMTAgYm9yZGVyIGJvcmRlci1jcmltc29uLTIwIHB5LTMgcHgtNSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIHRleHQtc20gbGVhZGluZy1ub3JtYWwgdGV4dC1uLTUwXCI7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHByb3BzOiBwcm9wcywgY2xhc3NOYW1lOiBjbGFzc05hbWUgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vY29tcG9uZW50XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFBvcHVwTW9kYWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG4vLyBWdWV4IFN0b3JlXG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL2luZGV4XCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0RlbGV0ZUJ1dHRvbicsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHN0b3JlID0gKDAsIGluZGV4XzEudXNlU3RvcmUpKCk7XG4gICAgICAgIC8vIHRvZ2dsZSBzdGF0ZSBmb3IgbW9kYWwgcG9wdXBcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGRlbGV0ZVZhbHVlID0gX2JbMF0sIGRlbGV0ZVRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB0ZXh0OiAnUGxlYXNlIFdhaXQnLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHVucHVibGlzaGluZ1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3RvYXN0TWVzc2FnZScpO1xuICAgICAgICB2YXIgZGVsZXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyLnRleHQgPSAnRGVsZXRpbmcnO1xuICAgICAgICAgICAgZGVsZXRlVmFsdWUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBkZWxldGVFbmRQb2ludCA9IFwiL2FjdGl2aXR5L1wiLmNvbmNhdChzdG9yZS5zdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMpO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmRlbGV0ZShkZWxldGVFbmRQb2ludCkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS50eXBlID0gcmVzcG9uc2Uuc3VjY2VzcztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSgnL2FjdGl2aXRpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHN0b3JlOiBzdG9yZSwgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLCBkZWxldGVUb2dnbGU6IGRlbGV0ZVRvZ2dsZSwgbG9hZGVyOiBsb2FkZXIsIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCBkZWxldGVGdW5jdGlvbjogZGVsZXRlRnVuY3Rpb24sIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0xpbmtCdXR0b24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJ2VkaXQnLFxuICAgICAgICB9LFxuICAgICAgICBkZXNpZ246IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdpY29uVGV4dCcsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkZXNpZ24gPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGVzaWduO1xuICAgICAgICB2YXIgc3R5bGVUeXBlID0gZGVzaWduLnZhbHVlO1xuICAgICAgICB2YXIgY2xhc3NlcyA9ICcnO1xuICAgICAgICBzd2l0Y2ggKHN0eWxlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYmdUZXh0JzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gJ2ZsZXggaXRlbXMtY2VudGVyIGJnLW4tMTAgcC0xIHRleHQtdGlueSBmb250LWJvbGQgdXBwZXJjYXNlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9XG4gICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBmb250LWJvbGQgbGVhZGluZy1ub3JtYWwgdXBwZXJjYXNlIHRleHQtdGlueSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY2xhc3NlczogY2xhc3NlcyB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudFxudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIHNob3dfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL3Nob3dcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUHVibGlzaEJ1dHRvbicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdwcmltYXJ5JyB9LFxuICAgICAgICBsaW5rZWRUb0lhdGk6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc3RhdHVzOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgY29yZUNvbXBsZXRlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBhY3Rpdml0eUlkOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBfYiA9ICgwLCB2dWVfMi50b1JlZnMpKHByb3BzKSwgbGlua2VkVG9JYXRpID0gX2IubGlua2VkVG9JYXRpLCBzdGF0dXMgPSBfYi5zdGF0dXMsIGNvcmVDb21wbGV0ZWQgPSBfYi5jb3JlQ29tcGxldGVkLCBhY3Rpdml0eUlkID0gX2IuYWN0aXZpdHlJZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICBHbG9iYWwgU3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzaG93XzEuZGV0YWlsU3RvcmUpKCk7XG4gICAgICAgIC8vYWN0aXZpdHkgaWRcbiAgICAgICAgdmFyIGlkID0gYWN0aXZpdHlJZC52YWx1ZTtcbiAgICAgICAgLy8gdG9nZ2xlIHN0YXRlIGZvciBtb2RhbCBwb3B1cFxuICAgICAgICB2YXIgX2MgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgcHVibGlzaFZhbHVlID0gX2NbMF0sIHB1Ymxpc2hUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgLy8gc3RhdGUgZm9yIHN0ZXAgb2YgdGhlIGZsb3dcbiAgICAgICAgdmFyIHB1Ymxpc2hTdGVwID0gKDAsIHZ1ZV8yLnJlZikoMCk7XG4gICAgICAgIC8vIGRpc3BsYXkvaGlkZSB2YWxpZGF0b3IgbG9hZGVyXG4gICAgICAgIHZhciBsb2FkZXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIC8vIHN0YXRlIGZvciBmaXJzdCBzdGVwXG4gICAgICAgIC8vIGRldGVybWluZSBpZiBjb3JlIGVsZW1lbnQgY29tcGxldGVkIG9yIG5vdFxuICAgICAgICAvLyB0cnVlIGZvciBjb21wbGV0ZWQgYW5kIGZhbHNlIGZvciBub3QgY29tcGxldGVkXG4gICAgICAgIHZhciBjb3JlRWxlbWVudFN0YXR1cyA9IGNvcmVDb21wbGV0ZWQudmFsdWU7XG4gICAgICAgIC8vIER5bmFtaWMgdGV4dCBmb3IgbG9hZGVyXG4gICAgICAgIHZhciBsb2FkZXJUZXh0ID0gKDAsIHZ1ZV8yLnJlZikoJ1BsZWFzZSBXYWl0Jyk7XG4gICAgICAgIC8vIHJlc2V0IHN0ZXAgdG8gemVybyBhZnRlciBjbG9zaW5nIG1vZGFsXG4gICAgICAgIHZhciByZXNldFB1Ymxpc2hTdGVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHVibGlzaFN0ZXAudmFsdWUgPSAwO1xuICAgICAgICAgICAgcHVibGlzaFZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGNvbXB1dGVkIGZ1bmN0aW9uIHRvIGNoYW5nZSBjb250ZW50IG9mIG1vZGFsXG4gICAgICAgIHZhciBwdWJsaXNoU3RhdGVDaGFuZ2UgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwdWJsaXNoU3RhdGUgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICAgIGljb246ICcnLFxuICAgICAgICAgICAgICAgIGFsZXJ0U3RhdGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9ICcnLCBkZXNjcmlwdGlvbiA9ICcnLCBpY29uID0gJ3RpY2snO1xuICAgICAgICAgICAgLy8gZGlmZmVyZW50IGNvbnRlbnQgZm9yIHN0ZXAgMSBiYXNlZCBvbiBjb3JlRWxlbWVudCBzdGF0dXNcbiAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudFN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRpdGxlID0gJ0NvcmUgRWxlbWVudHMgQ29tcGxldGUnO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgJ0NvbmdyYXR1bGF0aW9ucyEgQWxsIHRoZSBjb3JlIGVsZW1lbnRzIGFyZSBjb21wbGV0ZS4gQ29udGludWUgdG8gVmFsaWRhdGUgdGhpcyBhY3Rpdml0eS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgPSAnQ29yZSBFbGVtZW50cyBub3QgY29tcGxldGUnO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgJzxwPlRoZXJlIGlzIG1pc3NpbmcgZGF0YSBpbiBzb21lIG9mIHRoZSBjb3JlIGVsZW1lbnRzLiBXZSBoaWdobHkgcmVjb21tZW5kIHRoYXQgeW91IGNvbXBsZXRlIHRoZXNlIGRhdGEgZmllbGRzIHRvIGhlbHAgZW5zdXJlIHlvdXIgZGF0YSBpcyB1c2VmdWwuPC9wPjxwPkRvIHlvdSB3YW50IHRvIGNvbnRpbnVlIGFueXdheSBhbmQgcnVuIGNoZWNrcyBvbiAodmFsaWRhdGUpIHRoaXMgZGF0YS48L3A+JztcbiAgICAgICAgICAgICAgICBpY29uID0gJ3dhcm5pbmctZmlsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHB1Ymxpc2hTdGVwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuaWNvbiA9IGljb247XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5hbGVydFN0YXRlID0gY29yZUVsZW1lbnRTdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vc2Vjb25kIHN0ZXBcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS50aXRsZSA9IFwiQWN0aXZpdHkgd2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHB1Ymxpc2hpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID0gXCJUaGlzIGFjdGl2aXR5IHdpbGwgYmUgZmlyc3QgdmFsaWRhdGVkIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBhY3Rpdml0eSB0byB0aGUgSUFUSSBSZWdpc3RyeS4gXCI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5pY29uID0gXCJzaGllbGRcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmFsZXJ0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgLy8gY2FzZSAyIGlzIGZvciBzdWNjZXNzIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS50aXRsZSA9IFwiSUFUSSBWYWxpZGF0aW9uXCI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5kZXNjcmlwdGlvbiA9IFwiPHA+Q29uZ3JhdHVsYXRpb25zISBObyBlcnJvcnMgd2VyZSBmb3VuZC4gUHVibGlzaCB5b3VyIGRhdGEgbm93LjwvcD48cD5UaGlzIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUgb24gdGhlIElBVEkgRGF0YXN0b3JlIGFuZCBvdGhlciBkYXRhIHBvcnRhbHMvdG9vbHMvc29mdHdhcmUgdGhhdCB1c2UgSUFUSSBkYXRhLjwvcD5cIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmljb24gPSBcInRpY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmFsZXJ0U3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvL2Nhc2UgMyBpcyBmb3IgdmFsaWRhdGlvbiB3aXRoIGNyaXRpY2FsIGVycm9yc1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLnRpdGxlID0gXCJJQVRJIFZhbGlkYXRpb24gSXNzdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID0gXCI8cD48Yj5cIi5jb25jYXQoZXJyLmNyaXRpY2FsTnVtYmVyLCBcIiBjcml0aWNhbCBlcnJvcnM8L2I+LCA8Yj5cIikuY29uY2F0KGVyci5lcnJvck51bWJlciwgXCIgZXJyb3JzPC9iPiBhbmQgPGI+XCIpLmNvbmNhdChlcnIud2FybmluZ051bWJlciwgXCIgd2FybmluZ3M8L2I+IHdlcmUgZm91bmQuIFZpZXcgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZXJyb3JzL3dhcm5pbmdzIGF0IHRoZSB0b3Agb2YgdGhlIGFjdGl2aXR5IHBhZ2UuPC9wPjxwPkFzIHlvdXIgZGF0YSBoYXMgYXQgbGVhc3Qgb25lIGNyaXRpY2FsIGVycm9yLCBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgb24gdGhlIElBVEkgRGF0YXN0b3JlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBvdGhlciBkYXRhIHBvcnRhbHMvdG9vbHMvc29mdHdhcmUgdGhhdCB1c2UgSUFUSSBkYXRhLjwvcD48cD5XZSBoaWdobHkgcmVjb21tZW5kIHlvdSBmaXggdGhlc2UgaXNzdWUocykgYmVmb3JlIHB1Ymxpc2hpbmcgeW91ciBhY3Rpdml0eSB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IGFuZCB1c2VmdWxuZXNzIG9mIHlvdXIgZGF0YS48L3A+XCIpO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuaWNvbiA9IFwid2FybmluZy1maWxsXCI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5hbGVydFN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vIGNhc2UgNCBpcyBmb3IgdmFsaWRhdGlvbiB3aXRob3V0IGNyaXRpY2FsIGVycm9yc1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLnRpdGxlID0gXCJJQVRJIFZhbGlkYXRpb24gSXNzdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID0gXCI8cD48Yj5cIi5jb25jYXQoZXJyLmVycm9yTnVtYmVyLCBcIiBlcnJvcnM8L2I+IGFuZCA8Yj5cIikuY29uY2F0KGVyci53YXJuaW5nTnVtYmVyLCBcIiB3YXJuaW5nczwvYj4gd2VyZSBmb3VuZC4gVmlldyBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBlcnJvcnMvd2FybmluZ3MgYXQgdGhlIHRvcCBvZiB0aGUgYWN0aXZpdHkgcGFnZS48L3A+PHA+V2UgaGlnaGx5IHJlY29tbWVuZCB5b3UgZml4IHRoZXNlIGlzc3VlKHMpIGJlZm9yZSBwdWJsaXNoaW5nIHlvdXIgYWN0aXZpdHkgdG8gaW1wcm92ZSB0aGUgcXVhbGl0eSBhbmQgdXNlZnVsbmVzcyBvZiB5b3VyIGRhdGEuPC9wPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmljb24gPSBcIndhcm5pbmctZmlsbFwiO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuYWxlcnRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwdWJsaXNoU3RhdGU7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBmdW5jdGlvblxuICAgICAgICB2YXIgc3RlcFBsdXNPbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocHVibGlzaFN0ZXAudmFsdWUgPj0gMCAmJiBwdWJsaXNoU3RlcC52YWx1ZSA8IDQpIHtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RlcC52YWx1ZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RlcE1pbnVzT25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHB1Ymxpc2hTdGVwLnZhbHVlID4gMCAmJiBwdWJsaXNoU3RlcC52YWx1ZSA8PSA0KSB7XG4gICAgICAgICAgICAgICAgcHVibGlzaFN0ZXAudmFsdWUtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gcmVhY3RpdmUgdmFyaWFibGUgZm9yIGVycm9ycyBudW1iZXJcbiAgICAgICAgdmFyIGVyciA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgY3JpdGljYWxOdW1iZXI6IDAsXG4gICAgICAgICAgICBlcnJvck51bWJlcjogMCxcbiAgICAgICAgICAgIHdhcm5pbmdOdW1iZXI6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjYWxsIGFwaSBmb3IgdmFsaWRhdGlvblxuICAgICAgICB2YXIgdmFsaWRhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9ICdWYWxpZGF0aW5nIEFjdGl2aXR5JztcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5wb3N0KFwiL2FjdGl2aXR5L1wiLmNvbmNhdChpZCwgXCIvdmFsaWRhdGVBY3Rpdml0eVwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlUHVibGlzaEVycm9ycycsIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgIC8vaWRlbnRpZnkgZXJyb3IgdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyaXQgPSByZXNwb25zZS5zdW1tYXJ5LmNyaXRpY2FsO1xuICAgICAgICAgICAgICAgICAgICAoZXJyLmNyaXRpY2FsTnVtYmVyID0gY3JpdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyLmVycm9yTnVtYmVyID0gcmVzcG9uc2Uuc3VtbWFyeS5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyLndhcm5pbmdOdW1iZXIgPSByZXNwb25zZS5zdW1tYXJ5Lndhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3JpdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlID0gMztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlID0gNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0ZXAudmFsdWUgPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKCdlcnJvckRhdGEnKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoZWNrIHB1Ymxpc2ggc3RhdHVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY2hlY2tQdWJsaXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0aWVzL2NoZWNrcy1mb3ItYWN0aXZpdHktcHVibGlzaFwiKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoVmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudHlwZSA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHB1Ymxpc2hGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ1B1Ymxpc2hpbmcgQWN0aXZpdHknO1xuICAgICAgICAgICAgcmVzZXRQdWJsaXNoU3RlcCgpO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LnBvc3QoXCIvYWN0aXZpdHkvXCIuY29uY2F0KGlkLCBcIi9wdWJsaXNoXCIpKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlVW5QdWJsaXNoZWQnLCByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlU2hvd1B1Ymxpc2hlZCcsICFyZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gcHVibGlzaC1yZXB1Ymxpc2hcbiAgICAgICAgdmFyIHB1Ymxpc2hTdGF0dXMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGxpbmtlZF90b19pYXRpOiBsaW5rZWRUb0lhdGkudmFsdWUsXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBidG5UZXh0ID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocHVibGlzaFN0YXR1cy5saW5rZWRfdG9faWF0aSAmJiBwdWJsaXNoU3RhdHVzLnN0YXR1cyA9PT0gJ2RyYWZ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnUmVwdWJsaXNoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFwdWJsaXNoU3RhdHVzLmxpbmtlZF90b19pYXRpICYmXG4gICAgICAgICAgICAgICAgcHVibGlzaFN0YXR1cy5zdGF0dXMgPT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1B1Ymxpc2gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcHJvcHM6IHByb3BzLCBsaW5rZWRUb0lhdGk6IGxpbmtlZFRvSWF0aSwgc3RhdHVzOiBzdGF0dXMsIGNvcmVDb21wbGV0ZWQ6IGNvcmVDb21wbGV0ZWQsIGFjdGl2aXR5SWQ6IGFjdGl2aXR5SWQsIHN0b3JlOiBzdG9yZSwgaWQ6IGlkLCBwdWJsaXNoVmFsdWU6IHB1Ymxpc2hWYWx1ZSwgcHVibGlzaFRvZ2dsZTogcHVibGlzaFRvZ2dsZSwgcHVibGlzaFN0ZXA6IHB1Ymxpc2hTdGVwLCBsb2FkZXI6IGxvYWRlciwgY29yZUVsZW1lbnRTdGF0dXM6IGNvcmVFbGVtZW50U3RhdHVzLCBsb2FkZXJUZXh0OiBsb2FkZXJUZXh0LCByZXNldFB1Ymxpc2hTdGVwOiByZXNldFB1Ymxpc2hTdGVwLCBwdWJsaXNoU3RhdGVDaGFuZ2U6IHB1Ymxpc2hTdGF0ZUNoYW5nZSwgc3RlcFBsdXNPbmU6IHN0ZXBQbHVzT25lLCBzdGVwTWludXNPbmU6IHN0ZXBNaW51c09uZSwgZXJyOiBlcnIsIHZhbGlkYXRvckZ1bmN0aW9uOiB2YWxpZGF0b3JGdW5jdGlvbiwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGNoZWNrUHVibGlzaDogY2hlY2tQdWJsaXNoLCBwdWJsaXNoRnVuY3Rpb246IHB1Ymxpc2hGdW5jdGlvbiwgcHVibGlzaFN0YXR1czogcHVibGlzaFN0YXR1cywgYnRuVGV4dDogYnRuVGV4dCwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTW9kYWw6IFBvcHVwTW9kYWxfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudFxudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIHNob3dfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL3Nob3dcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVW5QdWJsaXNoQnV0dG9uJyxcbiAgICBwcm9wczoge1xuICAgICAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3ByaW1hcnknIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSAoMCwgdnVlXzIudG9SZWZzKShwcm9wcykuYWN0aXZpdHlJZDtcbiAgICAgICAgLy8gdG9nZ2xlIHN0YXRlIGZvciBtb2RhbCBwb3B1cFxuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgdW5wdWJsaXNoVmFsdWUgPSBfYlswXSwgdW5wdWJsaXNoVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIC8vR2xvYmFsIFN0YXRlXG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzaG93XzEuZGV0YWlsU3RvcmUpKCk7XG4gICAgICAgIC8vYWN0aXZpdHkgaWRcbiAgICAgICAgdmFyIGlkID0gYWN0aXZpdHlJZC52YWx1ZTtcbiAgICAgICAgLy8gZGlzcGxheS9oaWRlIHZhbGlkYXRvciBsb2FkZXJcbiAgICAgICAgdmFyIGxvYWRlciA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgdGV4dDogJ1BsZWFzZSBXYWl0JyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNhbGwgYXBpIGZvciB1bnB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIHRvYXN0TWVzc2FnZSA9ICgwLCB2dWVfMi5pbmplY3QpKCd0b2FzdE1lc3NhZ2UnKTtcbiAgICAgICAgdmFyIHVuUHVibGlzaEZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlci50ZXh0ID0gJ1VucHVibGlzaGluZyc7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQucG9zdChcIi9hY3Rpdml0eS9cIi5jb25jYXQoaWQsIFwiL3VucHVibGlzaFwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS50eXBlID0gcmVzcG9uc2Uuc3VjY2VzcztcbiAgICAgICAgICAgICAgICB1bnB1Ymxpc2hUb2dnbGUoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVVblB1Ymxpc2hlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTaG93UHVibGlzaGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlUHVibGlzaEVycm9ycycsIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGFjdGl2aXR5SWQ6IGFjdGl2aXR5SWQsIHVucHVibGlzaFZhbHVlOiB1bnB1Ymxpc2hWYWx1ZSwgdW5wdWJsaXNoVG9nZ2xlOiB1bnB1Ymxpc2hUb2dnbGUsIHN0b3JlOiBzdG9yZSwgaWQ6IGlkLCBsb2FkZXI6IGxvYWRlciwgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsIHVuUHVibGlzaEZ1bmN0aW9uOiB1blB1Ymxpc2hGdW5jdGlvbiwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTW9kYWw6IFBvcHVwTW9kYWxfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vY29tcG9uZW50XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFBvcHVwTW9kYWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIikpO1xuLy8gcHJvcHNcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdEZWxldGVBY3Rpb24nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGl0ZW1JZDogeyB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBpdGVtVHlwZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICAvLyB0b2dnbGUgc3RhdGUgZm9yIG1vZGFsIHBvcHVwXG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkZWxldGVWYWx1ZSA9IF9iWzBdLCBkZWxldGVUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgdmFyIGRlbGV0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAncmVzdWx0JyB8fCBwcm9wcy5pdGVtVHlwZSA9PT0gJ3RyYW5zYWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAnaW5kaWNhdG9yJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAncGVyaW9kJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGRlbGV0ZVZhbHVlOiBkZWxldGVWYWx1ZSwgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsIGRlbGV0ZUZ1bmN0aW9uOiBkZWxldGVGdW5jdGlvbiwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTW9kYWw6IFBvcHVwTW9kYWxfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuLy9wcm9wc1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0Vycm9yTGlzdHMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGVycm9yczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBcImVycm9yXCIgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIC8vcHJvcHMgZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgX2IgPSAoMCwgdnVlXzIudG9SZWZzKShwcm9wcyksIHR5cGUgPSBfYi50eXBlLCBlcnJvcnMgPSBfYi5lcnJvcnM7XG4gICAgICAgIHZhciBlcnJvclR5cGUgPSAoMCwgdnVlXzIucmVmKShcIlwiKTtcbiAgICAgICAgLy8gY29sb3JzIGJhc2VkIG9uIHR5cGUgcHJvcHMgdmFsdWVcbiAgICAgICAgdmFyIGJnQ29sb3IgPSBcIlwiLCBpY29uQ29sb3IgPSBcIlwiO1xuICAgICAgICBzd2l0Y2ggKHR5cGUudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjcml0aWNhbFwiOlxuICAgICAgICAgICAgICAgIGJnQ29sb3IgPSBcImJnLWxhdmVuZGVyLTYwIGJvcmRlci1sYXZlbmRlci01MFwiO1xuICAgICAgICAgICAgICAgIGljb25Db2xvciA9IFwidGV4dC1sYXZlbmRlci01MFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIndhcm5pbmdzXCI6XG4gICAgICAgICAgICAgICAgYmdDb2xvciA9IFwiYmctZWdnc2hlbGwgYm9yZGVyLWNhbWVsLTUwXCI7XG4gICAgICAgICAgICAgICAgaWNvbkNvbG9yID0gXCJ0ZXh0LWNhbWVsLTUwXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJnQ29sb3IgPSBcImJnLXJvc2UgYm9yZGVyLWNyaW1zb24tNDBcIjtcbiAgICAgICAgICAgICAgICBpY29uQ29sb3IgPSBcInRleHQtY3JpbXNvbi00MFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2dnbGUgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBhY2NvcmRpb25Ub2dnbGUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZXJyb3JzX19saXN0XCIpO1xuICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gKF9hID0gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIGlmICh0b2dnbGUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogXCIuY29uY2F0KGVsSGVpZ2h0LCBcInB4O1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IGF1dG87XCI7XG4gICAgICAgICAgICAgICAgICAgIH0sIDYwMCk7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdXBkYXRlRXJyb3JDb3VudE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlcnJvclR5cGUudmFsdWUgPVxuICAgICAgICAgICAgICAgIGVycm9ycy52YWx1ZS5sZW5ndGggKyBcIiBcIiArIHR5cGUudmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnZhbHVlLnNsaWNlKDEpO1xuICAgICAgICB9O1xuICAgICAgICB1cGRhdGVFcnJvckNvdW50TWVzc2FnZSgpO1xuICAgICAgICAoMCwgdnVlXzIud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9ycy52YWx1ZTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdXBkYXRlRXJyb3JDb3VudE1lc3NhZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHByb3BzOiBwcm9wcywgdHlwZTogdHlwZSwgZXJyb3JzOiBlcnJvcnMsIGVycm9yVHlwZTogZXJyb3JUeXBlLCBiZ0NvbG9yOiBiZ0NvbG9yLCBpY29uQ29sb3I6IGljb25Db2xvciwgdG9nZ2xlOiB0b2dnbGUsIGFjY29yZGlvblRvZ2dsZTogYWNjb3JkaW9uVG9nZ2xlLCB1cGRhdGVFcnJvckNvdW50TWVzc2FnZTogdXBkYXRlRXJyb3JDb3VudE1lc3NhZ2UgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy8gY29tcG9uZW50c1xudmFyIExpbmtfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9MaW5rLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0hhdmVOb3RBZGRlZFlldCcsXG4gICAgY29tcG9uZW50czogeyBCdG46IExpbmtfdnVlXzEuZGVmYXVsdCB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJ0blRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudFxudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xuLy8gcHVibGlzaC1yZXB1Ymxpc2hcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdPcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uJyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgcHVibGlzaFZhbHVlID0gX2JbMF0sIHB1Ymxpc2hUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgdmFyIF9jID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHVucHVibGlzaFZhbHVlID0gX2NbMF0sIHVucHVibGlzaFRvZ2dsZSA9IF9jWzFdO1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICAvLyBzdGF0ZSBmb3IgZmlyc3Qgc3RlcFxuICAgICAgICAvLyBkZXRlcm1pbmUgaWYgY29yZSBlbGVtZW50IGNvbXBsZXRlZCBvciBub3RcbiAgICAgICAgLy8gdHJ1ZSBmb3IgY29tcGxldGVkIGFuZCBmYWxzZSBmb3Igbm90IGNvbXBsZXRlZFxuICAgICAgICB2YXIgbWFuZGF0b3J5RWxlbWVudFN0YXR1cyA9ICgwLCB2dWVfMi5pbmplY3QpKFwibWFuZGF0b3J5Q29tcGxldGVkXCIpO1xuICAgICAgICAvLyBEeW5hbWljIHRleHQgZm9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyVGV4dCA9ICgwLCB2dWVfMi5yZWYpKFwiUGxlYXNlIFdhaXRcIik7XG4gICAgICAgIC8vIGNvbXB1dGVkIGZ1bmN0aW9uIHRvIGNoYW5nZSBjb250ZW50IG9mIG1vZGFsXG4gICAgICAgIHZhciBwdWJsaXNoU3RhdGVDaGFuZ2UgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwdWJsaXNoU3RhdGUgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxuICAgICAgICAgICAgICAgIGFsZXJ0U3RhdGU6IG1hbmRhdG9yeUVsZW1lbnRTdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50IGZvciBzdGVwIDEgYmFzZWQgb24gY29yZUVsZW1lbnQgc3RhdHVzXG4gICAgICAgICAgICBpZiAobWFuZGF0b3J5RWxlbWVudFN0YXR1cykge1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS50aXRsZSA9IFwiQ29yZSBFbGVtZW50cyBDb21wbGV0ZVwiO1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5kZXNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIFwiQ29uZ3JhdHVsYXRpb25zISBBbGwgdGhlIGNvcmUgZWxlbWVudHMgYXJlIGNvbXBsZXRlLiBDb250aW51ZSB0byBwdWJsaXNoIHRoaXMgb3JnYW5pemF0aW9uLlwiO1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5pY29uID0gXCJ0aWNrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUudGl0bGUgPSBcIkNvcmUgRWxlbWVudHMgbm90IGNvbXBsZXRlXCI7XG4gICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgXCI8cD5UaGVyZSBpcyBtaXNzaW5nIGRhdGEgaW4gc29tZSBvZiB0aGUgY29yZSBlbGVtZW50cy4gV2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSBjb21wbGV0ZSB0aGVzZSBkYXRhIGZpZWxkcyB0byBoZWxwIGVuc3VyZSB5b3VyIGRhdGEgaXMgdXNlZnVsLjwvcD5cIjtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuaWNvbiA9IFwid2FybmluZy1maWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHVibGlzaFN0YXRlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKFwidG9hc3REYXRhXCIpO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJlcnJvckRhdGFcIik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGVjayBwdWJsaXNoIHN0YXR1c1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNoZWNrUHVibGlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvb3JnYW5pc2F0aW9uL2NoZWNrcy1mb3Itb3JnYW5pc2F0aW9uLXB1Ymxpc2hcIikudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFZhbHVlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwdWJsaXNoRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9IFwiUHVibGlzaGluZ1wiO1xuICAgICAgICAgICAgcHVibGlzaFZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQucG9zdChcIi9vcmdhbmlzYXRpb24vcHVibGlzaFwiKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXR1cy5pc19wdWJsaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdHVzLnN0YXR1cyA9IFwicHVibGlzaGVkXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB1blB1Ymxpc2hGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gXCJVbnB1Ymxpc2hpbmdcIjtcbiAgICAgICAgICAgIHVucHVibGlzaFZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQucG9zdChcIi9vcmdhbmlzYXRpb24vdW5wdWJsaXNoXCIpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdHVzLmlzX3B1Ymxpc2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcHVibGlzaFN0YXR1cyA9ICgwLCB2dWVfMi5pbmplY3QpKFwicHVibGlzaFN0YXR1c1wiKTtcbiAgICAgICAgdmFyIGJ0blRleHQgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwdWJsaXNoU3RhdHVzLmlzX3B1Ymxpc2hlZCAmJiBwdWJsaXNoU3RhdHVzLnN0YXR1cyA9PT0gXCJkcmFmdFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUmVwdWJsaXNoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJQdWJsaXNoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwdWJsaXNoVmFsdWU6IHB1Ymxpc2hWYWx1ZSwgcHVibGlzaFRvZ2dsZTogcHVibGlzaFRvZ2dsZSwgdW5wdWJsaXNoVmFsdWU6IHVucHVibGlzaFZhbHVlLCB1bnB1Ymxpc2hUb2dnbGU6IHVucHVibGlzaFRvZ2dsZSwgbG9hZGVyOiBsb2FkZXIsIG1hbmRhdG9yeUVsZW1lbnRTdGF0dXM6IG1hbmRhdG9yeUVsZW1lbnRTdGF0dXMsIGxvYWRlclRleHQ6IGxvYWRlclRleHQsIHB1Ymxpc2hTdGF0ZUNoYW5nZTogcHVibGlzaFN0YXRlQ2hhbmdlLCB0b2FzdERhdGE6IHRvYXN0RGF0YSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGNoZWNrUHVibGlzaDogY2hlY2tQdWJsaXNoLCBwdWJsaXNoRnVuY3Rpb246IHB1Ymxpc2hGdW5jdGlvbiwgdW5QdWJsaXNoRnVuY3Rpb246IHVuUHVibGlzaEZ1bmN0aW9uLCBwdWJsaXNoU3RhdHVzOiBwdWJsaXNoU3RhdHVzLCBidG5UZXh0OiBidG5UZXh0LCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LCBMb2FkZXI6IFByb2dyZXNzTG9hZGVyX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy8gY29tcG9uZW50c1xudmFyIEJyZWFkQ3J1bWJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnJlYWRDcnVtYi52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdQYWdlVGl0bGUnLFxuICAgIGNvbXBvbmVudHM6IHsgQnJlYWRjcnVtYjogQnJlYWRDcnVtYl92dWVfMS5kZWZhdWx0IH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYnJlYWRjcnVtYkRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tMaW5rOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1Byb2dyZXNzTG9hZGVyJyxcbiAgICBwcm9wczoge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlVGV4dDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMi5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0ge307XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbi8vIGNvbXBvbmVudHNcbnZhciBFcnJvckxpc3RzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdTdGlja3lFcnJvcnMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGVycm9yRGF0YTogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIC8vIHRvZ2dsZSBpc3N1ZXNcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGVycm9yVmFsdWUgPSBfYlswXSwgZXJyb3JUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGxpc3Qgb2YgZXJyb3JzXG4gICAgICAgICAqKi9cbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi50b1JlZnMpKHByb3BzKS5lcnJvckRhdGE7XG4gICAgICAgIHZhciB0ZW1wRGF0YSA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICAgIGNyaXRpY2FsOiBbXSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB1cGRhdGVUZW1wTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlcnJvckRhdGFQcm9wcyA9IGVycm9yRGF0YS52YWx1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGRhdGEgaW4gdGVtcERhdGEpIHtcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YVtkYXRhXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBlcnJvckRhdGFQcm9wc18xID0gZXJyb3JEYXRhUHJvcHM7IF9pIDwgZXJyb3JEYXRhUHJvcHNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGVycm9yRGF0YVByb3BzXzFbX2ldO1xuICAgICAgICAgICAgICAgIHZhciBzZXZlcml0eSA9IGRhdGEuc2V2ZXJpdHk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3JpdGljYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNyaXRpY2FsLnB1c2goZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmVycm9ycy5wdXNoKGRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIndhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLndhcm5pbmdzLnB1c2goZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlVGVtcE1lc3NhZ2UoKTtcbiAgICAgICAgKDAsIHZ1ZV8yLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvckRhdGEudmFsdWU7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVwZGF0ZVRlbXBNZXNzYWdlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGVycm9yVmFsdWU6IGVycm9yVmFsdWUsIGVycm9yVG9nZ2xlOiBlcnJvclRvZ2dsZSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIHRlbXBEYXRhOiB0ZW1wRGF0YSwgdXBkYXRlVGVtcE1lc3NhZ2U6IHVwZGF0ZVRlbXBNZXNzYWdlLCBFcnJvckxpc3RzOiBFcnJvckxpc3RzX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdFbGVtZW50U3RhdHVzJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMi50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgY29sb3IgPSBkYXRhLnZhbHVlID8gJ3RleHQtc3ByaW5nLTUwJyA6ICd0ZXh0LWNyaW1zb24tNTAnLCB0ZXh0ID0gZGF0YS52YWx1ZSA/ICdjb21wbGV0ZWQnIDogJ25vdCBjb21wbGV0ZWQnO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGRhdGE6IGRhdGEsIGNvbG9yOiBjb2xvciwgdGV4dDogdGV4dCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUHJldmlvdXNseVB1Ymxpc2hlZCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdQcmV2aW91c2x5IFB1Ymxpc2hlZCBvbiBJQVRJJyB9LFxuICAgICAgICBpY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2FwcHJvdmVkLWNsb3VkJyB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3RcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xuLyoqXG4gKiBQcm9wc1xuICovXG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnQWN0aXZpdHlEZWZhdWx0VmFsdWUnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGN1cnJlbmNpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2VzOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBidWRnZXROb3RQcm92aWRlZDoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBodW1hbml0YXJpYW46IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWFjdGl2ZSB2YXJpYWJsZXNcbiAgICAgICAgICovXG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVzID0gKDAsIHZ1ZV8yLnJlZikoe1xuICAgICAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogJycsXG4gICAgICAgICAgICBkZWZhdWx0X2N1cnJlbmN5OiAnJyxcbiAgICAgICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgaGllcmFyY2h5OiAnJyxcbiAgICAgICAgICAgIGh1bWFuaXRhcmlhbjogJycsXG4gICAgICAgIH0pLCBkZWZhdWx0RXJyb3JzID0gKDAsIHZ1ZV8yLnJlZikoe1xuICAgICAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogW10sXG4gICAgICAgICAgICBkZWZhdWx0X2N1cnJlbmN5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6IFtdLFxuICAgICAgICAgICAgaGllcmFyY2h5OiBbXSxcbiAgICAgICAgICAgIGh1bWFuaXRhcmlhbjogW10sXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JSZXNldCA9IGRlZmF1bHRFcnJvcnMudmFsdWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPbiBNb3VudGVkXG4gICAgICAgICAqL1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSwgZGVmYXVsdERhdGE7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL2RlZmF1bHRfdmFsdWVzL2RhdGFcIikpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IChfYS5zZW50KCkpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXMudmFsdWUgPSBkZWZhdWx0RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVmXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgbG9hZGVyVmlzaWJpbGl0eSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKSwgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpLCB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIucmVmKSgnJyksIHRvYXN0VHlwZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdCBmb3JtXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0RXJyb3JzLnZhbHVlID0gZXJyb3JSZXNldDtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wdXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL2RlZmF1bHRfdmFsdWVzXCIpLCBkZWZhdWx0VmFsdWVzLnZhbHVlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0b2FzdFZpc2liaWxpdHkudmFsdWUgPSBmYWxzZSk7IH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS52YWx1ZSA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0VHlwZS52YWx1ZSA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEVycm9ycy52YWx1ZSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkZWZhdWx0RXJyb3JzLnZhbHVlKSwgKF9hID0gZXJyb3IucmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9ycyk7XG4gICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSAoX2IgPSBlcnJvci5yZXNwb25zZS5kYXRhKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdFR5cGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGRlZmF1bHRWYWx1ZXM6IGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRFcnJvcnM6IGRlZmF1bHRFcnJvcnMsIGVycm9yUmVzZXQ6IGVycm9yUmVzZXQsIGxvYWRlclZpc2liaWxpdHk6IGxvYWRlclZpc2liaWxpdHksIHRvYXN0VmlzaWJpbGl0eTogdG9hc3RWaXNpYmlsaXR5LCB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSwgdG9hc3RUeXBlOiB0b2FzdFR5cGUsIHN1Ym1pdEZvcm06IHN1Ym1pdEZvcm0sIE11bHRpc2VsZWN0OiBtdWx0aXNlbGVjdF8xLmRlZmF1bHQsIExvYWRlcjogTG9hZGVyX3Z1ZV8xLmRlZmF1bHQsIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbi8vIGNvbXBvbmVudHNcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIi4vZWxlbWVudHMvSW5kZXhcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIFJhZGlhbFByb2dyZXNzQmFyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZVwiKSk7XG52YXIgUHVibGlzaEJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL1B1Ymxpc2hCdXR0b24udnVlXCIpKTtcbnZhciBVblB1Ymxpc2hCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9VblB1Ymxpc2hCdXR0b24udnVlXCIpKTtcbnZhciBEZWxldGVCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlXCIpKTtcbnZhciBTdGlja3lFcnJvcnNfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvU3RpY2t5RXJyb3JzLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIEVycm9yUG9wVXBfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvRXJyb3JQb3BVcC52dWVcIikpO1xuLy8gQWN0aXZpdHkgQ29tcG9uZW50c1xudmFyIEFjdGl2aXRpZXNFbGVtZW50c192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQWN0aXZpdHkvcGFydGlhbHMvQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZVwiKSk7XG52YXIgQWN0aXZpdHlFbGVtZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJBY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0eUVsZW1lbnQudnVlXCIpKTtcbnZhciBQcmV2aW91c2x5UHVibGlzaGVkX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZVwiKSk7XG4vLyBWdWV4IFN0b3JlXG52YXIgc2hvd18xID0gcmVxdWlyZShcIlN0b3JlL2FjdGl2aXRpZXMvc2hvd1wiKTtcbnZhciBpbmRleF8xID0gcmVxdWlyZShcIlN0b3JlL2FjdGl2aXRpZXMvaW5kZXhcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQcm9ncmVzc0JhcjogUmFkaWFsUHJvZ3Jlc3NCYXJfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRWxlbWVudHM6IEFjdGl2aXRpZXNFbGVtZW50c192dWVfMS5kZWZhdWx0LFxuICAgICAgICBBY3Rpdml0eUVsZW1lbnQ6IEFjdGl2aXR5RWxlbWVudF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBSZXN1bHQ6IEluZGV4XzEuUmVzdWx0LFxuICAgICAgICBQdWJsaXNoOiBQdWJsaXNoQnV0dG9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEVycm9yczogU3RpY2t5RXJyb3JzX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFVuUHVibGlzaDogVW5QdWJsaXNoQnV0dG9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIERlbGV0ZUJ1dHRvbjogRGVsZXRlQnV0dG9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFByZXZpb3VzbHlQdWJsaXNoZWQ6IFByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRXJyb3JQb3BVcDogRXJyb3JQb3BVcF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBlbGVtZW50czoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb3JlQ29tcGxldGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGlhdGlWYWxpZGF0b3JSZXNwb25zZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgdHlwZXMgPSBfYS50eXBlcywgY29yZUNvbXBsZXRlZCA9IF9hLmNvcmVDb21wbGV0ZWQ7XG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzaG93XzEuZGV0YWlsU3RvcmUpKCk7XG4gICAgICAgIHZhciBpbmRleFN0b3JlID0gKDAsIGluZGV4XzEudXNlU3RvcmUpKCk7XG4gICAgICAgIHZhciBzaG93U2lkZWJhciA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uWSA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgc2NyZWVuV2lkdGggPSAoMCwgdnVlXzEucmVmKSgwKTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNob3dTaWRlYmFyO1xuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIG1vZGFsIHBvcHVwIGNvbXBsZXRlZFxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGRlbGV0ZVZhbHVlID0gX2JbMF0sIGRlbGV0ZVRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICB2YXIgX2MgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZG93bmxvYWRWYWx1ZSA9IF9jWzBdLCBkb3dubG9hZFRvZ2dsZSA9IF9jWzFdO1xuICAgICAgICB2YXIgdG9nZ2xlU2lkZWJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNob3dTaWRlYmFyLnZhbHVlID0gIXNob3dTaWRlYmFyLnZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcG9zaXRpb25ZLnZhbHVlID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBpc3RvcFZpc2libGUgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblkudmFsdWUgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgd2lkdGggPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY1dpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjcmVlbldpZHRoLnZhbHVlID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2FsY1dpZHRoID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBzY3JlZW5XaWR0aC52YWx1ZSA9IGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xuICAgICAgICAgICAgaWYgKHNjcmVlbldpZHRoLnZhbHVlID4gMTAyNCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dTaWRlYmFyLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2hvd1NpZGViYXIudmFsdWU7IH0sIGZ1bmN0aW9uIChzaWRlYmFyKSB7XG4gICAgICAgICAgICBpZiAoc2lkZWJhcikge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gdG9hc3REYXRhLnZpc2liaWxpdHk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWdub3JlVG9hc3RVcGRhdGUoKTtcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHcm91cGluZyBhbGwgdGhlIGRhdGEncyBmb3Igc2Nyb2xsIGZ1bmN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIHRoaXMgZGF0YSBpcyBjcmVhdGVkIHVzaW5nIHByb3BzLmVsZW1lbnRfZ3JvdXAgYW5kIHByb3BzLmFjdGl2aXR5XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX2QgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGdyb3VwcyA9IF9kLmdyb3VwcywgYWN0aXZpdHkgPSBfZC5hY3Rpdml0eSwgZWxlbWVudHMgPSBfZC5lbGVtZW50cywgc3RhdHVzID0gX2Quc3RhdHVzLCB0cmFuc2FjdGlvbnMgPSBfZC50cmFuc2FjdGlvbnMsIGdyb3VwZWREYXRhID0gZ3JvdXBzLnZhbHVlLCBhY3Rpdml0eVByb3BzID0gYWN0aXZpdHkudmFsdWUsIGFjdGl2aXRpZXMgPSBncm91cHMudmFsdWUsIGVsZW1lbnRQcm9wcyA9IGVsZW1lbnRzLnZhbHVlLCBzdGF0dXNQcm9wcyA9IHN0YXR1cy52YWx1ZSwgdHJhbnNhY3Rpb25Qcm9wcyA9IHRyYW5zYWN0aW9ucy52YWx1ZTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykucmVzdWx0cztcbiAgICAgICAgYWN0aXZpdHlQcm9wcy5yZXN1bHQgPSByZXN1bHRzLnZhbHVlO1xuICAgICAgICBhY3Rpdml0eVByb3BzLnRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9uUHJvcHM7XG4gICAgICAgIC8vIGdlbmVyYXRpbmcgYXZhaWxhYmxlIGVsZW1lbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGFjdGl2aXRpZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgZmxhZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYWN0aXZpdGllc1trZXldWydlbGVtZW50cyddKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpdml0eVByb3BzW2tdID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGFjdGl2aXR5UHJvcHNba10gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eVByb3BzW2tdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhY3Rpdml0eVByb3BzW2tdKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXRpZXNba2V5XVsnZWxlbWVudHMnXVtrXVsnY29udGVudCddID0gYWN0aXZpdHlQcm9wc1trXTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdGllc1trZXldWydlbGVtZW50cyddW2tdWydob3Zlcl90ZXh0J10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gZWxlbWVudFByb3BzW2tdWydob3Zlcl90ZXh0J10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhY3Rpdml0aWVzW2tleV1ba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmxhZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgYWN0aXZpdGllc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGluZyBhdmFpbGFibGUgY2F0ZWdvcmllcyBvZiBlbGVtZW50c1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cGVkRGF0YSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aXZpdGllcywga2V5KSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWREYXRhW2tleV1bJ3N0YXR1cyddID0gJ2VuYWJsZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZERhdGFba2V5XVsnc3RhdHVzJ10gPSAnZGlzYWJsZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdyb3VwaW5nIGFsbCBlbGVtZW50cyBhbmQgdGhlaXJzIGNvbXBsZXRlZCBzdGF0dXNcbiAgICAgICAgICpcbiAgICAgICAgICogY29tYmluaW5nIHByb3BzLmVsZW1lbnRzIGFuZCBwcm9wcy5zdGF0dXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50UHJvcHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgZWxlbWVudFByb3BzW2tleV1bJ2NvbXBsZXRlZCddID0gKF9hID0gc3RhdHVzUHJvcHNba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50UHJvcHNba2V5XVsnbm90X2NvbXBsZXRlZCddID0gISgoX2IgPSBzdGF0dXNQcm9wc1trZXldKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSk7XG4gICAgICAgICAgICBlbGVtZW50UHJvcHNba2V5XVsnaGFzX2RhdGEnXSA9IDA7XG4gICAgICAgICAgICBpZiAoa2V5IGluIGFjdGl2aXR5UHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBhY3Rpdml0eVByb3BzW2tleV0gPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhY3Rpdml0eVByb3BzW2tleV0gPT09ICdudW1iZXInKSAmJlxuICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eVByb3BzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGFjdGl2aXR5UHJvcHNba2V5XSkubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlQcm9wc1trZXldLnRvU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trZXldWydoYXNfZGF0YSddID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kaW5nIGN1cnJlbnQgbGFuZ3VhZ2UgLSBhY3Rpdml0eSB0aXRsZVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHBhZ2VUaXRsZSA9ICcnO1xuICAgICAgICB2YXIgZm91bmQgPSBhY3Rpdml0eVByb3BzLnRpdGxlLmZpbmQoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50TGFuZ3VhZ2UgPSAnZW4nO1xuICAgICAgICAgICAgcmV0dXJuIGUubGFuZ3VhZ2UgPT09IGN1cnJlbnRMYW5ndWFnZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNhbGxiYWNrIGlmIGxhbmd1YWdlIG5vdCBhdmFpbGFibGUgaW4gZGF0YVxuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHBhZ2VUaXRsZSA9IGZvdW5kLm5hcnJhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhZ2VUaXRsZSA9IGFjdGl2aXR5UHJvcHMudGl0bGVbMF0ubmFycmF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdFRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGl0bGUucmVwbGFjZSgvXy9naSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlnbm9yZVVwZGF0ZXMgPSAoMCwgY29yZV8xLndhdGNoSWdub3JhYmxlKSh0b2FzdERhdGEsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSwge1xuICAgICAgICAgICAgZmx1c2g6ICdzeW5jJyxcbiAgICAgICAgfSkuaWdub3JlVXBkYXRlcztcbiAgICAgICAgdmFyIGlnbm9yZVRvYXN0VXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWdub3JlVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcHVibGlzaFN0YXR1cyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgbGlua2VkX3RvX2lhdGk6IGFjdGl2aXR5UHJvcHMubGlua2VkX3RvX2lhdGksXG4gICAgICAgICAgICBzdGF0dXM6IGFjdGl2aXR5UHJvcHMuc3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gdnVlIHByb3ZpZGVzXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgndHlwZXMnLCB0eXBlcy52YWx1ZSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgnY29yZUNvbXBsZXRlZCcsIGNvcmVDb21wbGV0ZWQudmFsdWUpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3RvYXN0TWVzc2FnZScsIHRvYXN0TWVzc2FnZSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgndG9hc3REYXRhJywgdG9hc3REYXRhKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdlcnJvckRhdGEnLCBlcnJvckRhdGEpO1xuICAgICAgICBpbmRleFN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTZWxlY3RlZEFjdGl2aXRpZXMnLCBbYWN0aXZpdHkudmFsdWUuaWRdKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnWW91ciBBY3Rpdml0aWVzJyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnL2FjdGl2aXRpZXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcGFnZVRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICBHbG9iYWwgU3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBpYXRpVmFsaWRhdG9yUmVzcG9uc2UgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuaWF0aVZhbGlkYXRvclJlc3BvbnNlO1xuICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdCA9IGlhdGlWYWxpZGF0b3JSZXNwb25zZS52YWx1ZTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQgJiYgdmFsaWRhdGlvblJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVB1Ymxpc2hFcnJvcnMnLCB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHB1Ymxpc2hTdGF0dXMubGlua2VkX3RvX2lhdGkpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVVblB1Ymxpc2hlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVVuUHVibGlzaGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHB1Ymxpc2hTdGF0dXMubGlua2VkX3RvX2lhdGkgJiYgcHVibGlzaFN0YXR1cy5zdGF0dXMgPT09ICdwdWJsaXNoZWQnKSkge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNob3dQdWJsaXNoZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTaG93UHVibGlzaGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm91cGVkRGF0YTogZ3JvdXBlZERhdGEsXG4gICAgICAgICAgICBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzLFxuICAgICAgICAgICAgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLFxuICAgICAgICAgICAgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsXG4gICAgICAgICAgICBkb3dubG9hZFZhbHVlOiBkb3dubG9hZFZhbHVlLFxuICAgICAgICAgICAgZG93bmxvYWRUb2dnbGU6IGRvd25sb2FkVG9nZ2xlLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICBlbGVtZW50UHJvcHM6IGVsZW1lbnRQcm9wcyxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIGZvcm1hdFRpdGxlOiBmb3JtYXRUaXRsZSxcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFnZVRpdGxlLFxuICAgICAgICAgICAgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsXG4gICAgICAgICAgICBwdWJsaXNoU3RhdHVzOiBwdWJsaXNoU3RhdHVzLFxuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZpdHlQcm9wczogYWN0aXZpdHlQcm9wcyxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgdG9nZ2xlU2lkZWJhcjogdG9nZ2xlU2lkZWJhcixcbiAgICAgICAgICAgIGlzdG9wVmlzaWJsZTogaXN0b3BWaXNpYmxlLFxuICAgICAgICAgICAgc2NyZWVuV2lkdGg6IHNjcmVlbldpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgRW1wdHlBY3Rpdml0eV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9wYXJ0aWFscy9FbXB0eUFjdGl2aXR5LnZ1ZVwiKSk7XG52YXIgVGFibGVMYXlvdXRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vcGFydGlhbHMvVGFibGVMYXlvdXQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnRpYWxzL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBFcnJvck1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5Q29tcG9uZW50JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEVtcHR5QWN0aXZpdHk6IEVtcHR5QWN0aXZpdHlfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnaW5hdGlvbjogVGFibGVQYWdpbmF0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRhYmxlTGF5b3V0OiBUYWJsZUxheW91dF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBFcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWN0aXZpdGllcyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNMb2FkaW5nID0gKDAsIHZ1ZV8xLnJlZikodHJ1ZSk7XG4gICAgICAgIHZhciBjdXJyZW50VVJMID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgIHZhciBlbmRwb2ludCA9ICcnO1xuICAgICAgICB2YXIgc2hvd0VtcHR5VGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgIGVuZHBvaW50ID0gXCIvYWN0aXZpdGllcy9wYWdlXCIuY29uY2F0KHF1ZXJ5U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVuZHBvaW50ID0gXCIvYWN0aXZpdGllcy9wYWdlXCI7XG4gICAgICAgICAgICBzaG93RW1wdHlUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy9mb3Igc2Vzc2lvbiBtZXNzYWdlXG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmb3IgcHVibGlzaCBidXR0b25cbiAgICAgICAgdmFyIHRvYXN0TWVzc2FnZSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcHJvcHMudG9hc3QudHlwZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoZW5kcG9pbnQpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpdml0aWVzLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93RW1wdHlUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9ICFyZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiB0b2FzdERhdGEudmlzaWJpbGl0eTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZ25vcmVUb2FzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgfSwgMTAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHN0YXRlID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBzaG93QnV0dG9uczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHNob3dPckhpZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkgeyBkYXRhID0gQXJyYXk7IH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zaG93QnV0dG9ucyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zaG93QnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBmZXRjaEFjdGl2aXRpZXMoYWN0aXZlX3BhZ2UpIHtcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoJy9hY3Rpdml0aWVzL3BhZ2UvJyArIGFjdGl2ZV9wYWdlICsgcXVlcnlTdHJpbmcpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aXZpdGllcywgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9ICFyZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlnbm9yZVVwZGF0ZXMgPSAoMCwgY29yZV8xLndhdGNoSWdub3JhYmxlKSh0b2FzdERhdGEsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSwge1xuICAgICAgICAgICAgZmx1c2g6ICdzeW5jJyxcbiAgICAgICAgfSkuaWdub3JlVXBkYXRlcztcbiAgICAgICAgdmFyIGlnbm9yZVRvYXN0VXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWdub3JlVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBmb3IgcmVmcmVzaCB0b2FzdCBtZXNzYWdlXG4gICAgICAgIC8vIGxldCByZWZyZXNoVG9hc3RNc2cgPSByZWYoZmFsc2UpO1xuICAgICAgICB2YXIgcmVmcmVzaFRvYXN0TXNnID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlZnJlc2hNZXNzYWdlVHlwZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlZnJlc2hNZXNzYWdlOiAnQWN0aXZpdHkgaGFzIGJlZW4gcHVibGlzaGVkIHN1Y2Nlc3NmdWxseSwgcmVmcmVzaCB0byBzZWUgY2hhbmdlcycsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvdmlkZVxuICAgICAgICAgKi9cbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCd0b2FzdE1lc3NhZ2UnLCB0b2FzdE1lc3NhZ2UpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3RvYXN0RGF0YScsIHRvYXN0RGF0YSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgnZXJyb3JEYXRhJywgZXJyb3JEYXRhKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdyZWZyZXNoVG9hc3RNc2cnLCByZWZyZXNoVG9hc3RNc2cpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZpdGllczogYWN0aXZpdGllcyxcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIHNob3dPckhpZGU6IHNob3dPckhpZGUsXG4gICAgICAgICAgICBmZXRjaEFjdGl2aXRpZXM6IGZldGNoQWN0aXZpdGllcyxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsXG4gICAgICAgICAgICByZWZyZXNoVG9hc3RNc2c6IHJlZnJlc2hUb2FzdE1zZyxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIG11bHRpc2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkB2dWVmb3JtL211bHRpc2VsZWN0XCIpKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIE11bHRpc2VsZWN0OiBtdWx0aXNlbGVjdF8xLmRlZmF1bHQsXG4gICAgICAgIExvYWRlcjogTG9hZGVyX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBtb2RhbFZhbHVlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgZW1pdHM6IFsnY2xvc2VNb2RhbCcsICd0b2FzdCddLFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBlbWl0ID0gX2EuZW1pdDtcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBuYXJyYXRpdmU6ICcnLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgYWN0aXZpdHlfaWRlbnRpZmllcjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBuYXJyYXRpdmU6ICcnLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgYWN0aXZpdHlfaWRlbnRpZmllcjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbG9hZGVyVmlzaWJpbGl0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlcyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgb3JnYW5pemF0aW9uID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7fSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KCcvYWN0aXZpdGllcy9jb2RlbGlzdHMnKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obGFuZ3VhZ2VzLCByZXNwb25zZS5kYXRhLmxhbmd1YWdlcyk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3JnYW5pemF0aW9uLCByZXNwb25zZS5kYXRhLm9yZ2FuaXphdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHtcbiAgICAgICAgICAgIGVtaXQoJ2Nsb3NlTW9kYWwnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzdG9yZUFjdGl2aXR5KCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdCgnL2FjdGl2aXR5JywgZm9ybURhdGEpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBlbWl0KCdjbG9zZU1vZGFsJyk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KHJlc3BvbnNlLmRhdGEuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEubmFycmF0aXZlID0gZXJyb3JzLm5hcnJhdGl2ZSA/IGVycm9ycy5uYXJyYXRpdmVbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEubGFuZ3VhZ2UgPSBlcnJvcnMubGFuZ3VhZ2UgPyBlcnJvcnMubGFuZ3VhZ2VbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuYWN0aXZpdHlfaWRlbnRpZmllciA9IGVycm9ycy5hY3Rpdml0eV9pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLmFjdGl2aXR5X2lkZW50aWZpZXJbMF1cbiAgICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5OiBsb2FkZXJWaXNpYmlsaXR5LFxuICAgICAgICAgICAgbGFuZ3VhZ2VzOiBsYW5ndWFnZXMsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGNsb3NlTW9kYWw6IGNsb3NlTW9kYWwsXG4gICAgICAgICAgICBzdG9yZUFjdGl2aXR5OiBzdG9yZUFjdGl2aXR5LFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vaW5qZWN0XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnQnVsa1B1Ymxpc2hpbmcnLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciByZWZyZXNoVG9hc3RNc2cgPSAoMCwgdnVlXzIuaW5qZWN0KShcInJlZnJlc2hUb2FzdE1zZ1wiKTtcbiAgICAgICAgdmFyIHBhU3RvcmFnZSA9ICgwLCB2dWVfMi5pbmplY3QpKFwicGFTdG9yYWdlXCIpO1xuICAgICAgICB2YXIgYWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWYpKHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5hY3Rpdml0aWVzKSwgY29tcGxldGVkID0gKDAsIHZ1ZV8yLnJlZikoXCJwcm9jZXNzaW5nXCIpO1xuICAgICAgICB2YXIgaGFzRmFpbGVkQWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICBpZHM6IFtdLFxuICAgICAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpbnRlcnZhbElEO1xuICAgICAgICAvKipcbiAgICAgICAgICogICBDb21wb25lbnQgbGlmZWN5Y2xlIC0gb25Nb3VudGVkXG4gICAgICAgICAqL1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUgPSAoX2EgPSBwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMuc3RhdHVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcInByb2Nlc3NpbmdcIjtcbiAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RhdHVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB3YXRjaGluZyBjaGFuZ2UgaW4gdmFsdWUgb2YgY29tcGxldGVkXG4gICAgICAgICgwLCB2dWVfMi53YXRjaCkoY29tcGxldGVkLCBmdW5jdGlvbiAobmV3VmFsdWUpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElEKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXR0aW5nIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzID0ge30gYXMgcGFFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGZhaWxlZCBwdWJsaXNoXG4gICAgICAgICAgICAgICAgICAgIGZhaWxlZEFjdGl2aXRpZXMocGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLmFjdGl2aXRpZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnVsayBQdWJsaXNoIEZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnVsa1B1Ymxpc2hTdGF0dXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KFwiYWN0aXZpdGllcy9idWxrLXB1Ymxpc2gtc3RhdHVzP29yZ2FuaXphdGlvbl9pZD1cIi5jb25jYXQocGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLm9yZ2FuaXphdGlvbl9pZCwgXCImJnV1aWQ9XCIpLmNvbmNhdChwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMuam9iX2JhdGNoX3V1aWQpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJkYXRhXCIgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXRpZXMudmFsdWUgPSByZXNwb25zZS5kYXRhLmFjdGl2aXRpZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUgPSByZXNwb25zZS5kYXRhLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmluZyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMuYWN0aXZpdGllcyA9IHJlc3BvbnNlLmRhdGEuYWN0aXZpdGllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5zdGF0dXMgPSByZXNwb25zZS5kYXRhLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5tZXNzYWdlID0gcmVzcG9uc2UuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZC52YWx1ZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZEFjdGl2aXRpZXMocGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLmFjdGl2aXRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hUb2FzdE1zZy52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFRvYXN0TXNnLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUgPSBcImNvbXBsZXRlZFwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1pbmltaXplIG9yIG1heGltaXplIHdpbmRvd1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIG9wZW4gPSAoMCwgdnVlXzIucmVmKSh0cnVlKTtcbiAgICAgICAgdmFyIHRvZ2dsZVdpbmRvdyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IGUuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjdXJyZW50VGFyZ2V0LmNsb3Nlc3QoXCIjcHVibGlzaGluZ19hY3Rpdml0aWVzXCIpLnF1ZXJ5U2VsZWN0b3IoXCIuYnVsay1hY3Rpdml0aWVzXCIpO1xuICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gKF9hID0gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoXCJkaXZcIikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAob3Blbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IDBweDsgb3ZlcmZsb3c6IGhpZGRlbjtcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgb3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7IG92ZXJmbG93OmhpZGRlbjtcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogYXV0bztcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgICAgICAgICAgICAgb3Blbi52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2xvc2luZyB3aW5kb3dcbiAgICAgICAgICovXG4gICAgICAgIHZhciBjbG9zZVdpbmRvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcyA9IHt9O1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRnVuY3Rpb24gdG8gY29sbGVjdCBmYWlsZWQgYWN0aXZpdGllc1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGZhaWxlZEFjdGl2aXRpZXMgPSBmdW5jdGlvbiAobmVzdGVkT2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgZmFpbGVkQWN0aXZpdGllc0lEID0gW107XG4gICAgICAgICAgICB2YXIgYXNBcnJheURhdGEgPSBPYmplY3QuZW50cmllcyhuZXN0ZWRPYmplY3QpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gYXNBcnJheURhdGEuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfYVswXSwgdmFsdWUgPSBfYVsxXTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyh2YWx1ZSkuaW5kZXhPZihcImZhaWxlZFwiKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWxlZEFjdGl2aXRpZXNJRC5wdXNoKHZhbHVlLmFjdGl2aXR5X2lkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBmYWlsZWRBY3Rpdml0aWVzRGF0YSA9IE9iamVjdC5mcm9tRW50cmllcyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICBpZiAoZmFpbGVkQWN0aXZpdGllc0lELmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLnN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaGFzRmFpbGVkQWN0aXZpdGllcy5pZHMgPSBmYWlsZWRBY3Rpdml0aWVzSUQ7XG4gICAgICAgICAgICAgICAgaGFzRmFpbGVkQWN0aXZpdGllcy5kYXRhID0gZmFpbGVkQWN0aXZpdGllc0RhdGE7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFRvYXN0TXNnLnJlZnJlc2hNZXNzYWdlVHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2FzdE1zZy5yZWZyZXNoTWVzc2FnZSA9ICdTb21lIGFjdGl2aXRpZXMgaGF2ZSBmYWlsZWQgdG8gcHVibGlzaC4gUmVmcmVzaCB0byBzZWUgY2hhbmdlcy4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFzRmFpbGVkQWN0aXZpdGllcy5zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLmlkcyA9IFtdO1xuICAgICAgICAgICAgICAgIGhhc0ZhaWxlZEFjdGl2aXRpZXMuZGF0YSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cnkgcHVibGlzaGluZyBmYWlsZWQgYWN0aXZpdGllc1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJldHJ5UHVibGlzaGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vcmVzZXQgcmVxdWlyZWQgc3RhdGVzXG4gICAgICAgICAgICBjb21wbGV0ZWQudmFsdWUgPSBcInByb2Nlc3NpbmdcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBoYXNGYWlsZWRBY3Rpdml0aWVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLmRhdGFba2V5XS5zdGF0dXMgPSBcInByb2Nlc3NpbmdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGl2aXRpZXMudmFsdWUgPSBoYXNGYWlsZWRBY3Rpdml0aWVzLmRhdGE7XG4gICAgICAgICAgICAvLyBhcGkgZW5kcG9pbnQgY2FsbFxuICAgICAgICAgICAgdmFyIGVuZHBvaW50ID0gXCJhY3Rpdml0aWVzL3N0YXJ0LWJ1bGstcHVibGlzaD9hY3Rpdml0aWVzPVtcIi5jb25jYXQoaGFzRmFpbGVkQWN0aXZpdGllcy5pZHMsIFwiXVwiKTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoZW5kcG9pbnQpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcyA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RhdHVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHJlZnJlc2hUb2FzdE1zZzogcmVmcmVzaFRvYXN0TXNnLCBwYVN0b3JhZ2U6IHBhU3RvcmFnZSwgYWN0aXZpdGllczogYWN0aXZpdGllcywgY29tcGxldGVkOiBjb21wbGV0ZWQsIGhhc0ZhaWxlZEFjdGl2aXRpZXM6IGhhc0ZhaWxlZEFjdGl2aXRpZXMsIGludGVydmFsSUQ6IGludGVydmFsSUQsIGJ1bGtQdWJsaXNoU3RhdHVzOiBidWxrUHVibGlzaFN0YXR1cywgb3Blbjogb3BlbiwgdG9nZ2xlV2luZG93OiB0b2dnbGVXaW5kb3csIGNsb3NlV2luZG93OiBjbG9zZVdpbmRvdywgZmFpbGVkQWN0aXZpdGllczogZmFpbGVkQWN0aXZpdGllcywgcmV0cnlQdWJsaXNoaW5nOiByZXRyeVB1Ymxpc2hpbmcgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdFcnJvckl0ZW0nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBtZXNzYWdlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBzZWxlY3RlZEFjdGl2aXRpZXMgPSAoMCwgdnVlXzIuaW5qZWN0KSgnc2VsZWN0ZWRBY3Rpdml0aWVzJyk7XG4gICAgICAgIHZhciB0b2dnbGUgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBhY2NvcmRpb25Ub2dnbGUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gY3VycmVudFRhcmdldC5jbG9zZXN0KCcuYWNjb3JkaW9uJykucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbi1jb250ZW50Jyk7XG4gICAgICAgICAgICB2YXIgZWxIZWlnaHQgPSAoX2EgPSB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQucXVlcnlTZWxlY3RvcignZGl2JykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAodG9nZ2xlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IFwiLmNvbmNhdChlbEhlaWdodCwgXCJweDtcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogXCIuY29uY2F0KGVsSGVpZ2h0LCBcInB4O1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBhdXRvO1wiO1xuICAgICAgICAgICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGVycm9yQ291bnQgPSBmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JDb3VudCA9ICcnO1xuICAgICAgICAgICAgaWYgKGVycm9ycyA9PT0gbnVsbCB8fCBlcnJvcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ycy53YXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JDb3VudCA9IFwiXCIuY29uY2F0KGVycm9ycyA9PT0gbnVsbCB8fCBlcnJvcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ycy5lcnJvciwgXCIgZXJyb3JzIGFuZCBcIikuY29uY2F0KGVycm9ycyA9PT0gbnVsbCB8fCBlcnJvcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ycy53YXJuaW5nLCBcIiB3YXJuaW5nc1xcbiAgICAgd2VyZSBmb3VuZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckNvdW50ID0gXCJcIi5jb25jYXQoZXJyb3JzID09PSBudWxsIHx8IGVycm9ycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JzLmNyaXRpY2FsLCBcIiBjcml0aWNhbCBlcnJvcnMgd2VyZSBmb3VuZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JDb3VudDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgc2VsZWN0ZWRBY3Rpdml0aWVzOiBzZWxlY3RlZEFjdGl2aXRpZXMsIHRvZ2dsZTogdG9nZ2xlLCBhY2NvcmRpb25Ub2dnbGU6IGFjY29yZGlvblRvZ2dsZSwgZXJyb3JDb3VudDogZXJyb3JDb3VudCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy9jb21wb25lbnRcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgUHJvZ3Jlc3NMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlXCIpKTtcbnZhciBWYWxpZGF0aW9uRXJyb3JzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlXCIpKTtcbnZhciBCdWxrUHVibGlzaGluZ192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9CdWxrUHVibGlzaGluZy52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIGluZGV4XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9pbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdQdWJsaXNoU2VsZWN0ZWQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAncHJpbWFyeScgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICBHbG9iYWwgU3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBpbmRleF8xLnVzZVN0b3JlKSgpO1xuICAgICAgICAvLyB0b2dnbGUgc3RhdGUgZm9yIG1vZGFsIHBvcHVwXG4gICAgICAgIHZhciBfYyA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBwdWJsaXNoQWxlcnRWYWx1ZSA9IF9jWzBdLCBwdWJsaXNoQWxlcnRUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgLy8gc3RhdGUgZm9yIHN0ZXAgb2YgdGhlIGZsb3dcbiAgICAgICAgdmFyIGJ1bGtQdWJsaXNoU3RlcCA9ICgwLCB2dWVfMi5yZWYpKDEpO1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICAvLyBEeW5hbWljIHRleHQgZm9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyVGV4dCA9ICgwLCB2dWVfMi5yZWYpKCdQbGVhc2UgV2FpdCcpO1xuICAgICAgICAvLyByZXNldCBzdGVwIHRvIHplcm8gYWZ0ZXIgY2xvc2luZyBtb2RhbFxuICAgICAgICB2YXIgcmVzZXRQdWJsaXNoU3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RlcC52YWx1ZSA9IDE7XG4gICAgICAgICAgICBwdWJsaXNoQWxlcnRWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRBY3Rpdml0aWVzLnZhbHVlID0gW107XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwb3BVcFdpZHRoQ2hhbmdlID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSAoMCwgdnVlXzIucmVmKSgnODI1Jyk7XG4gICAgICAgICAgICBzd2l0Y2ggKGJ1bGtQdWJsaXNoU3RlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgd2lkdGgudmFsdWUgPSAnNTgzJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICB3aWR0aC52YWx1ZSA9ICc4MDknO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdG9hc3QgdmlzaWJpbGl0eVxuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8yLmluamVjdCkoJ2Vycm9yRGF0YScpO1xuICAgICAgICB2YXIgZGlzcGxheVRvYXN0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIHR5cGUpIHtcbiAgICAgICAgICAgIGVycm9yRGF0YS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIGVycm9yRGF0YS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIGVycm9yRGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoZWNrIHB1Ymxpc2ggc3RhdHVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY2hlY2tQdWJsaXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0aWVzL2NoZWNrcy1mb3ItYWN0aXZpdHktcHVibGlzaFwiKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoQWxlcnRWYWx1ZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VG9hc3QocmVzcG9uc2UubWVzc2FnZSwgcmVzcG9uc2Uuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBWZXJpZnkgY29yZSBlbGVtZW50c1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNvcmVDb21wbGV0ZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlZikoW10pLCBjb3JlSW5Db21wbGV0ZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlZikoW10pLCBwZXJtYWxpbmsgPSBcIi9hY3Rpdml0eS9cIjtcbiAgICAgICAgdmFyIHZlcmlmeUNvcmVFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ1ZlcmlmeWluZyBDb3JlIEVsZW1lbnRzJztcbiAgICAgICAgICAgIHZhciBhY3Rpdml0aWVzID0gc3RvcmUuc3RhdGUuc2VsZWN0ZWRBY3Rpdml0aWVzLmpvaW4oJywgJyk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAuZ2V0KFwiL2FjdGl2aXRpZXMvY29yZS1lbGVtZW50cy1jb21wbGV0ZWQ/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29yZUNvbXBsZXRlZEFjdGl2aXRpZXMudmFsdWUgPSByZXNwb25zZS5kYXRhLmNvbXBsZXRlO1xuICAgICAgICAgICAgICAgICAgICBjb3JlSW5Db21wbGV0ZWRBY3Rpdml0aWVzLnZhbHVlID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlO1xuICAgICAgICAgICAgICAgICAgICBidWxrUHVibGlzaFN0ZXAudmFsdWUgPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0UHVibGlzaFN0ZXAoKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVRvYXN0KHJlc3BvbnNlLm1lc3NhZ2UsIHJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFZhbGlkYXRpbmcgQWN0aXZpdGllc1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvcnMgPSAoMCwgdnVlXzIucmVmKSh7fSk7XG4gICAgICAgIHZhciB2YWxpZGF0ZUFjdGl2aXRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9ICdWYWxpZGF0aW5nIEFjdGl2aXR5JztcbiAgICAgICAgICAgIHZhciBhY3Rpdml0aWVzID0gc3RvcmUuc3RhdGUuc2VsZWN0ZWRBY3Rpdml0aWVzLmpvaW4oJywgJyk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi9hY3Rpdml0aWVzL3ZhbGlkYXRlLWFjdGl2aXRpZXM/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVsa1B1Ymxpc2hTdGVwLnZhbHVlID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy52YWx1ZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNldFB1Ymxpc2hTdGVwKCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlUb2FzdChyZXNwb25zZS5tZXNzYWdlLCByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCdWxrIHB1Ymxpc2hpbmcgYWN0aXZpdGllc1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHNlbGVjdGVkQWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWYpKFtdKTtcbiAgICAgICAgKDAsIHZ1ZV8yLnByb3ZpZGUpKCdzZWxlY3RlZEFjdGl2aXRpZXMnLCBzZWxlY3RlZEFjdGl2aXRpZXMpO1xuICAgICAgICAvLyBsb2NhbCBzdG9yYWdlIGZvciBwdWJsaXNoaW5nXG4gICAgICAgIHZhciBwYSA9ICgwLCBjb3JlXzEudXNlU3RvcmFnZSkoJ3Z1ZS11c2UtbG9jYWwtc3RvcmFnZScsIHtcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdBY3Rpdml0aWVzOiAoX2IgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaGluZ0FjdGl2aXRpZXMnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30sXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgc3RhcnRCdWxrUHVibGlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ1N0YXJ0aW5nIHRvIHB1Ymxpc2gnO1xuICAgICAgICAgICAgcGEudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMgPSB7fTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCJhY3Rpdml0aWVzL3N0YXJ0LWJ1bGstcHVibGlzaD9hY3Rpdml0aWVzPVtcIi5jb25jYXQoc2VsZWN0ZWRBY3Rpdml0aWVzLnZhbHVlLCBcIl1cIikpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RlcC52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hBbGVydFZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHBhLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMi5wcm92aWRlKSgncGFTdG9yYWdlJywgcGEpO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBzdG9yZTogc3RvcmUsIHB1Ymxpc2hBbGVydFZhbHVlOiBwdWJsaXNoQWxlcnRWYWx1ZSwgcHVibGlzaEFsZXJ0VG9nZ2xlOiBwdWJsaXNoQWxlcnRUb2dnbGUsIGJ1bGtQdWJsaXNoU3RlcDogYnVsa1B1Ymxpc2hTdGVwLCBsb2FkZXI6IGxvYWRlciwgbG9hZGVyVGV4dDogbG9hZGVyVGV4dCwgcmVzZXRQdWJsaXNoU3RlcDogcmVzZXRQdWJsaXNoU3RlcCwgcG9wVXBXaWR0aENoYW5nZTogcG9wVXBXaWR0aENoYW5nZSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGRpc3BsYXlUb2FzdDogZGlzcGxheVRvYXN0LCBjaGVja1B1Ymxpc2g6IGNoZWNrUHVibGlzaCwgY29yZUNvbXBsZXRlZEFjdGl2aXRpZXM6IGNvcmVDb21wbGV0ZWRBY3Rpdml0aWVzLCBjb3JlSW5Db21wbGV0ZWRBY3Rpdml0aWVzOiBjb3JlSW5Db21wbGV0ZWRBY3Rpdml0aWVzLCBwZXJtYWxpbms6IHBlcm1hbGluaywgdmVyaWZ5Q29yZUVsZW1lbnRzOiB2ZXJpZnlDb3JlRWxlbWVudHMsIHZhbGlkYXRpb25FcnJvcnM6IHZhbGlkYXRpb25FcnJvcnMsIHZhbGlkYXRlQWN0aXZpdGllczogdmFsaWRhdGVBY3Rpdml0aWVzLCBzZWxlY3RlZEFjdGl2aXRpZXM6IHNlbGVjdGVkQWN0aXZpdGllcywgcGE6IHBhLCBzdGFydEJ1bGtQdWJsaXNoOiBzdGFydEJ1bGtQdWJsaXNoLCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LCBMb2FkZXI6IFByb2dyZXNzTG9hZGVyX3Z1ZV8xLmRlZmF1bHQsIFZhbGlkYXRpb25FcnJvcnM6IFZhbGlkYXRpb25FcnJvcnNfdnVlXzEuZGVmYXVsdCwgQnVsa1B1Ymxpc2hpbmc6IEJ1bGtQdWJsaXNoaW5nX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdSZWZyZXNoVG9hc3QnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICB0eXBlOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gKDAsIHZ1ZV8yLnJlZikoJycpO1xuICAgICAgICBjbGFzc05hbWUudmFsdWUgPSBwcm9wcy50eXBlXG4gICAgICAgICAgICA/ICdiZy1taW50IGJvcmRlci1zcHJpbmctMTAnXG4gICAgICAgICAgICA6ICdiZy1jcmltc29uLTEwIGJvcmRlci1jcmltc29uLTIwJztcbiAgICAgICAgdmFyIGNsYXNzTmFtZTIgPSAoMCwgdnVlXzIucmVmKSgnJyk7XG4gICAgICAgIGNsYXNzTmFtZTIudmFsdWUgPSBwcm9wcy50eXBlXG4gICAgICAgICAgICA/ICd0ZXh0LXNwcmluZy01MCBob3Zlcjp0ZXh0LXNwcmluZy01MCdcbiAgICAgICAgICAgIDogJ3RleHQtY3JpbXNvbi01MCBob3Zlcjp0ZXh0LWNyaW1zb24tNTAnO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBjbGFzc05hbWUyOiBjbGFzc05hbWUyIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBFcnJvckl0ZW1fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vRXJyb3JJdGVtLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVmFsaWRhdGlvbkVycm9ycycsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgY3JpdGljYWxNZXNzYWdlID0gXCJEYXRhIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBvbiB0aGUgSUFUSSBEYXRhc3RvcmUgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIG90aGVyIGRhdGEgcG9ydGFscy90b29scy9zb2Z0d2FyZSB0aGF0IHVzZSBJQVRJIGRhdGEuIFdlIGhpZ2hseSByZWNvbW1lbmQgeW91IGZpeCB0aGVzZSBpc3N1ZShzKSBiZWZvcmUgcHVibGlzaGluZy5cIjtcbiAgICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gXCJXZSBoaWdobHkgcmVjb21tZW5kIHlvdSBmaXggdGhlc2UgaXNzdWUocykgYmVmb3JlIHB1Ymxpc2hpbmcgeW91ciBhY3Rpdml0eSB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IGFuZCB1c2VmdWxuZXNzIG9mIHlvdXIgZGF0YS5cIjtcbiAgICAgICAgdmFyIG5vRXJyb3JNZXNzYWdlID0gXCI8Yj5Db25ncmF0dWxhdGlvbnMhIE5vIGVycm9ycyB3ZXJlIGZvdW5kLjwvYj4gUHVibGlzaCB5b3VyIGRhdGEgbm93LiBUaGlzIGRhdGEgd2lsbCBiZSBhdmFpbGFibGUgb24gdGhlIElBVEkgRGF0YXN0b3JlIGFuZCBvdGhlciBkYXRhIHBvcnRhbHMvdG9vbHMvIHNvZnR3YXJlIHRoYXQgdXNlIElBVEkgZGF0YS5cIjtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgY3JpdGljYWxNZXNzYWdlOiBjcml0aWNhbE1lc3NhZ2UsIHdhcm5pbmdNZXNzYWdlOiB3YXJuaW5nTWVzc2FnZSwgbm9FcnJvck1lc3NhZ2U6IG5vRXJyb3JNZXNzYWdlLCBFcnJvckl0ZW06IEVycm9ySXRlbV92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWN0aXZpdHlEYXRlJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KCdMTCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJBY3Rpdml0eUNvbmRpdGlvbnNcIixcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJBY3Rpdml0eUNvbnRhY3RJbmZvXCIsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5RGVzY3JpcHRpb24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcyB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSHVtYW5pdGFyaWFuU2NvcGUnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSWF0aUlkZW50aWZpZXInLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWN0aXZpdHlTZWN0b3InLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWN0aXZpdHlMb2NhdGlvbicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdPdGhlcklkZW50aWZpZXInLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcyB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWN0aXZpdHlQYXJ0aWNpcGF0aW5nT3JnJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1BsYW5uZWREaXNidXJzZW1lbnQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMi5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGZvcm1hdERhdGU6IGZvcm1hdERhdGUsIHR5cGVzOiB0eXBlcyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiUG9saWN5TWFya2VyXCIsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0IH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eVJlY2lwaWVudENvdW50cnknLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIGZ1bmN0aW9uIHJvdW5kRmxvYXQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCByb3VuZEZsb2F0OiByb3VuZEZsb2F0IH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdSZWNpcGllbnRSZWdpb24nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIGZ1bmN0aW9uIHJvdW5kRmxvYXQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzLCByb3VuZEZsb2F0OiByb3VuZEZsb2F0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1JlbGF0ZWRBY3Rpdml0eScsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVwb3J0aW5nT3JnYW5pemF0aW9uJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMi5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHR5cGVzOiB0eXBlcyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG4vL2NvbXBvbmVudHNcbnZhciBMaW5rX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvTGluay52dWVcIikpO1xudmFyIEhhdmVOb3RBZGRlZFlldF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlXCIpKTtcbi8vIGNvbXBvc2FibGVcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5UmVzdWx0JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgICAgICBOb3RZZXQ6IEhhdmVOb3RBZGRlZFlldF92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlZDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gJ01NTU0gREQsIFlZWVknO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgcmVzdWx0RGF0YSA9IGRhdGEudmFsdWUuY29udGVudDtcbiAgICAgICAgdmFyIGN1cnJlbnRMYW5ndWFnZSA9ICdlbic7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb21lbnQ6IG1vbWVudF8xLmRlZmF1bHQsXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgICAgIHJlc3VsdERhdGE6IHJlc3VsdERhdGEsXG4gICAgICAgICAgICBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQsXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2U6IGN1cnJlbnRMYW5ndWFnZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIkFjdGl2aXR5U2VjdG9yXCIsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiByb3VuZEZsb2F0KG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKS50b0ZpeGVkKDIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgcm91bmRGbG9hdDogcm91bmRGbG9hdCB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJBY3Rpdml0eVRhZ1wiLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIkFjdGl2aXR5VGl0bGVcIixcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcyB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIkFjdGl2aXR5VHJhbnNhY3Rpb25zXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBCdG46IExpbmtfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9uZW50XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbi8vY29tcG9zYWJsZVxudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JEZXRhaWwnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgVGl0bGVFbGVtZW50OiBJbmRleF8xLlRpdGxlRWxlbWVudCxcbiAgICAgICAgTWVhc3VyZTogSW5kZXhfMS5NZWFzdXJlLFxuICAgICAgICBBc2NlbmRpbmc6IEluZGV4XzEuQXNjZW5kaW5nLFxuICAgICAgICBBZ2dyZWdhdGlvblN0YXR1czogSW5kZXhfMS5BZ2dyZWdhdGlvblN0YXR1cyxcbiAgICAgICAgRGVzY3JpcHRpb246IEluZGV4XzEuRGVzY3JpcHRpb24sXG4gICAgICAgIFJlZmVyZW5jZTogSW5kZXhfMS5SZWZlcmVuY2UsXG4gICAgICAgIEJhc2VsaW5lOiBJbmRleF8xLkJhc2VsaW5lLFxuICAgICAgICBEb2N1bWVudExpbms6IEluZGV4XzEuRG9jdW1lbnRMaW5rLFxuICAgICAgICBQZXJpb2Q6IEluZGV4XzEuUGVyaW9kLFxuICAgICAgICBCdG46IExpbmtfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHRUaXRsZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGluZGljYXRvcjoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBlcmlvZDoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGlua0NsYXNzZXMgPSAnZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIGJnLXdoaXRlIHJvdW5kZWQgcC0yIHRleHQtc20gdGV4dC1uLTUwIGZvbnQtYm9sZCBsZWFkaW5nLW5vcm1hbCBtYi0yIHNoYWRvdy1kZWZhdWx0JztcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX2EgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGluZGljYXRvciA9IF9hLmluZGljYXRvciwgYWN0aXZpdHkgPSBfYS5hY3Rpdml0eSwgcGVyaW9kID0gX2EucGVyaW9kLCByZXN1bHRUaXRsZSA9IF9hLnJlc3VsdFRpdGxlO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBwb3NpdGlvblkgPSAoMCwgdnVlXzEucmVmKSgwKTtcbiAgICAgICAgdmFyIHNjcmVlbldpZHRoID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIC8vaW5kaWNhdG9yXG4gICAgICAgIHZhciBpbmRpY2F0b3JEYXRhID0gaW5kaWNhdG9yLnZhbHVlLmluZGljYXRvcjtcbiAgICAgICAgdmFyIHBlcmlvZERhdGEgPSBwZXJpb2QudmFsdWU7XG4gICAgICAgIC8vIHZ1ZSBwcm92aWRlc1xuICAgICAgICB2YXIgcGFyZW50RGF0YSA9IHtcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eS52YWx1ZS5pZCxcbiAgICAgICAgICAgIHJlc3VsdDogaW5kaWNhdG9yLnZhbHVlLnJlc3VsdF9pZCxcbiAgICAgICAgICAgIGluZGljYXRvcjogaW5kaWNhdG9yLnZhbHVlLmlkLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3BhcmVudERhdGEnLCBwYXJlbnREYXRhKTtcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9IGFjdGl2aXR5LnZhbHVlLnRpdGxlLCBhY3Rpdml0eUxpbmsgPSBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksIHJlc3VsdElkID0gaW5kaWNhdG9yLnZhbHVlLnJlc3VsdF9pZCwgcmVzdWx0VGl0bGVkID0gKDAsIHRpdGxlXzEuZGVmYXVsdCkocmVzdWx0VGl0bGUudmFsdWVbMF0ubmFycmF0aXZlLCAnZW4nKSwgcmVzdWx0TGluayA9IFwiXCIuY29uY2F0KGFjdGl2aXR5TGluaywgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLCBpbmRpY2F0b3JMaW5rID0gXCIvcmVzdWx0L1wiLmNvbmNhdChyZXN1bHRJZCwgXCIvaW5kaWNhdG9yXCIpLCBpbmRpY2F0b3JUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGluZGljYXRvckRhdGEudGl0bGVbMF0ubmFycmF0aXZlLCAnZW4nKTtcbiAgICAgICAgdmFyIGNhbGNXaWR0aCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgc2NyZWVuV2lkdGgudmFsdWUgPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIGlmIChzY3JlZW5XaWR0aC52YWx1ZSA+IDEwMjQpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93U2lkZWJhci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdZb3VyIEFjdGl2aXRpZXMnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eVRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXN1bHRUaXRsZWQsXG4gICAgICAgICAgICAgICAgbGluazogcmVzdWx0TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGluZGljYXRvclRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdmFyIGhhbmRsZVNjcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uWS52YWx1ZSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY1dpZHRoKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXN0b3BWaXNpYmxlID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25ZLnZhbHVlID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uVW5tb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmtDbGFzc2VzOiBsaW5rQ2xhc3NlcyxcbiAgICAgICAgICAgIGluZGljYXRvclRpdGxlOiBpbmRpY2F0b3JUaXRsZSxcbiAgICAgICAgICAgIGluZGljYXRvckRhdGE6IGluZGljYXRvckRhdGEsXG4gICAgICAgICAgICBhY3Rpdml0eUxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIHJlc3VsdExpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICBpbmRpY2F0b3JMaW5rOiBpbmRpY2F0b3JMaW5rLFxuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICBwZXJpb2REYXRhOiBwZXJpb2REYXRhLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgaXN0b3BWaXNpYmxlOiBpc3RvcFZpc2libGUsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vLyBjb21wb25lbnRzXG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFRhYmxlUGFnaW5hdGlvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIERlbGV0ZUFjdGlvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9EZWxldGVBY3Rpb24udnVlXCIpKTtcbi8vIGNvbXBvc2FibGVcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgdGl0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS90aXRsZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckxpc3QnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQnRuOiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnaW5hdGlvbjogVGFibGVQYWdpbmF0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRGVsZXRlQWN0aW9uOiBEZWxldGVBY3Rpb25fdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50RGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGluZGljYXRvcnM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLCBhY3Rpdml0eSA9IF9hLmFjdGl2aXR5LCBwYXJlbnREYXRhID0gX2EucGFyZW50RGF0YTtcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9IGFjdGl2aXR5LnZhbHVlLnRpdGxlLCBhY3Rpdml0eUxpbmsgPSBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksIHJlc3VsdElkID0gcGFyZW50RGF0YS52YWx1ZS5yZXN1bHQuaWQsIHJlc3VsdFRpdGxlID0gKDAsIHRpdGxlXzEuZGVmYXVsdCkocGFyZW50RGF0YS52YWx1ZS5yZXN1bHQudGl0bGUsICdlbicpLCByZXN1bHRMaW5rID0gXCJcIi5jb25jYXQoYWN0aXZpdHlMaW5rLCBcIi9yZXN1bHQvXCIpLmNvbmNhdChyZXN1bHRJZCksIGluZGljYXRvckxpbmsgPSBcIi9yZXN1bHQvXCIuY29uY2F0KHJlc3VsdElkLCBcIi9pbmRpY2F0b3JcIik7XG4gICAgICAgIHZhciBpbmRpY2F0b3JzRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdZb3VyIEFjdGl2aXRpZXMnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eVRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXN1bHRUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGljYXRvciBMaXN0JyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvcnMvcGFnZS8xXCIpKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaW5kaWNhdG9yc0RhdGEsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlID0gcmVzcG9uc2UuZGF0YS5kYXRhLmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGUocGF0aCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZldGNoTGlzdGluZ3MoYWN0aXZlX3BhZ2UpIHtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCIvcmVzdWx0L1wiLmNvbmNhdChyZXN1bHRJZCwgXCIvaW5kaWNhdG9ycy9wYWdlL1wiKSArIGFjdGl2ZV9wYWdlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGluZGljYXRvcnNEYXRhLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlID0gcmVzcG9uc2UuZGF0YSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByb3ZpZGVcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdwYXJlbnRJdGVtSWQnLCByZXN1bHRJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpdml0eUlkOiBhY3Rpdml0eUlkLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsXG4gICAgICAgICAgICBpbmRpY2F0b3JzRGF0YTogaW5kaWNhdG9yc0RhdGEsXG4gICAgICAgICAgICBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQsXG4gICAgICAgICAgICBmZXRjaExpc3RpbmdzOiBmZXRjaExpc3RpbmdzLFxuICAgICAgICAgICAgcmVzdWx0TGluazogcmVzdWx0TGluayxcbiAgICAgICAgICAgIGluZGljYXRvckxpbms6IGluZGljYXRvckxpbmssXG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIHJlc3VsdElkOiByZXN1bHRJZCxcbiAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRlOiBoYW5kbGVOYXZpZ2F0ZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckFnZ3JlZ2F0aW9uU3RhdHVzJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHN0YXR1c0RhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyBzdGF0dXNEYXRhOiBzdGF0dXNEYXRhIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yQmFzZWxpbmUnLFxuICAgIGNvbXBvbmVudHM6IHsgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJhc2VUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGVsZW1lbnRTcGFjaW5nID0gJ21iLTEnO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIGxvY2F0aW9ucyA9IFtdO1xuICAgICAgICAgICAgbG9jYXRpb25zID0gZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5yZWZlcmVuY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBsYXN0TG9jYXRpb24gPSBsb2NhdGlvbnMuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgbG9jYXRpb25zID0gbG9jYXRpb25zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbnMuam9pbignLCAnKSArICcgJyArICdhbmQnICsgJyAnICsgbGFzdExvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMb2NhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIHJldHVybiBkaW1lbnNpb25zIG9mIGJhc2VsaW5lXG4gICAgICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZGltZW5zaW9ucyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuICAgICAgICAgICAgZGltZW5zaW9ucyA9IGRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IChfYSA9IGl0ZW0ubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ01pc3NpbmcnLCB2YWx1ZSA9IChfYiA9IGl0ZW0udmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdNaXNzaW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2RlIC0gXCIuY29uY2F0KG5hbWUsIFwiLCB2YWx1ZSAtIChcIikuY29uY2F0KHZhbHVlLCBcIilcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBkaW1lbnNpb25zLmpvaW4oJzsgJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGJhc2VsaW5lOiBiYXNlbGluZSwgbG9jYXRpb246IGxvY2F0aW9uLCBkaW1lbnNpb25zOiBkaW1lbnNpb25zLCBlbGVtZW50U3BhY2luZzogZWxlbWVudFNwYWNpbmcgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckRlc2NyaXB0aW9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVzY1R5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgZGVzY3JpcHRpb25EYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgZGVzY3JpcHRpb25EYXRhOiBkZXNjcmlwdGlvbkRhdGEgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vL2NvbXBvc2FibGVcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yRG9jdW1lbnRMaW5rJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWxpZ25tZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnY2VudGVyJyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGRsRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IGRsRGF0YTogZGxEYXRhLCBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckFzY2VuZGluZycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvck1lYXN1cmUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBtZWFzdXJlVHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBtZWFzdXJlRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IG1lYXN1cmVEYXRhOiBtZWFzdXJlRGF0YSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yUGVyaW9kJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaWQgPSAoMCwgdnVlXzEuaW5qZWN0KSgncGFyZW50RGF0YScpO1xuICAgICAgICByZXR1cm4geyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0IH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JSZWZlcmVuY2UnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZWZUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHJlZkRhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyByZWZEYXRhOiByZWZEYXRhIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JUaXRsZScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlVHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0aXRsZURhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyB0aXRsZURhdGE6IHRpdGxlRGF0YSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBjb3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCJDb21wb3NhYmxlL2NvcmVFbGVtZW50c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBY3Rpdml0aWVzRWxlbWVudHMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUlkOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8yLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkcm9wZG93biA9ICgwLCB2dWVfMi5yZWYpKCk7XG4gICAgICAgIHZhciBkcm9wZG93bkJ0biA9ICgwLCB2dWVfMi5yZWYpKCk7XG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBzZWFyY2hCdG5WYWx1ZSA9IF9iWzBdLCBzZWFyY2hCdG5Ub2dnbGUgPSBfYlsxXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZWxlbWVudHMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgICAgICAgIHN0YXR1czogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlbGVtZW50SWNvbnMgPSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQ6IFwiZG91YmxlLXRpY2tcIixcbiAgICAgICAgICAgIG5vdF9jb21wbGV0ZWQ6IFwicmVkLWNyb3NzXCIsXG4gICAgICAgICAgICBjb3JlOiBcImNvcmVcIixcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGFzQXJyYXlEYXRhID0gT2JqZWN0LmVudHJpZXMoZGF0YS52YWx1ZSk7XG4gICAgICAgIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBhc0FycmF5RGF0YS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdLCB2YWx1ZSA9IF9hWzFdO1xuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudHMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZWxlbWVudHMuc2VhcmNoLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIl9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJfXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVtlbGVtZW50cy5zdGF0dXNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZWxlbWVudHMuc2VhcmNoLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIl9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJfXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGp1c3RTdHJpbmdzID0gT2JqZWN0LmZyb21FbnRyaWVzKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIHJldHVybiBqdXN0U3RyaW5ncztcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRpbmcgY29yZSBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnZhbHVlKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCgwLCBjb3JlRWxlbWVudHNfMS5hY3Rpdml0eUNvcmVFbGVtZW50cykoKS5pbmNsdWRlcyhrZXkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlW2tleV1bXCJjb3JlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkcm9wZG93bkZpbHRlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5zdGF0dXMgPSBzO1xuICAgICAgICAgICAgc2VhcmNoQnRuVG9nZ2xlKCk7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRyb3Bkb3duQnRuLnZhbHVlLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhZHJvcGRvd24udmFsdWUuY29udGFpbnMoZS50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0TGluayhoYXNfZGF0YSwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChoYXNfZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiNcIi5jb25jYXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gXCJyZXN1bHRcIiB8fCBpbmRleCA9PSBcInRyYW5zYWN0aW9uc1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBpbmRleCA9PSBcInJlc3VsdFwiID8gXCJyZXN1bHRcIiA6IFwidHJhbnNhY3Rpb25cIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL1wiKS5jb25jYXQoZWxlbWVudCwgXCIvY3JlYXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiL2FjdGl2aXR5L1wiLmNvbmNhdChwcm9wcy5hY3Rpdml0eUlkLCBcIi9cIikuY29uY2F0KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBwcm9wczogcHJvcHMsIGRhdGE6IGRhdGEsIGRyb3Bkb3duOiBkcm9wZG93biwgZHJvcGRvd25CdG46IGRyb3Bkb3duQnRuLCBzZWFyY2hCdG5WYWx1ZTogc2VhcmNoQnRuVmFsdWUsIHNlYXJjaEJ0blRvZ2dsZTogc2VhcmNoQnRuVG9nZ2xlLCBlbGVtZW50czogZWxlbWVudHMsIGVsZW1lbnRJY29uczogZWxlbWVudEljb25zLCBhc0FycmF5RGF0YTogYXNBcnJheURhdGEsIGZpbHRlcmVkRWxlbWVudHM6IGZpbHRlcmVkRWxlbWVudHMsIGRyb3Bkb3duRmlsdGVyOiBkcm9wZG93bkZpbHRlciwgZ2V0TGluazogZ2V0TGluaywgYWN0aXZpdHlDb3JlRWxlbWVudHM6IGNvcmVFbGVtZW50c18xLmFjdGl2aXR5Q29yZUVsZW1lbnRzIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY29yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiQ29tcG9zYWJsZS9jb3JlRWxlbWVudHNcIik7XG4vL2NvbXBvbmVudHNcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIkFjdGl2aXR5L2VsZW1lbnRzL0luZGV4XCIpO1xudmFyIExpbmtfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9MaW5rLnZ1ZVwiKSk7XG52YXIgRWxlbWVudFN0YXR1c192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zdGF0dXMvRWxlbWVudFN0YXR1cy52dWVcIikpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnQWN0aXZpdHlFbGVtZW50JyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZpdHlJZDoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkZWxldGVWYWx1ZSA9IF9iWzBdLCBkZWxldGVUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKCd0b2FzdERhdGEnKTtcbiAgICAgICAgdmFyIGxheW91dCA9ICdiYXNpcy1mdWxsICBsZzpiYXNpcy02LzEyJztcbiAgICAgICAgaWYgKHByb3BzLndpZHRoID09PSAnZnVsbCcpIHtcbiAgICAgICAgICAgIGxheW91dCA9ICdiYXNpcy1mdWxsJztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KCdMTCcpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJvdW5kRmxvYXQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGV0ZUFjdGl2aXR5RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZGVsZXRlRWxlbWVudChpZCwgZWxlbWVudCkge1xuICAgICAgICAgICAgZGVsZXRlVmFsdWUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5kZWxldGUoXCIvYXBpL2FjdGl2aXR5L1wiLmNvbmNhdChpZCwgXCIvXCIpLmNvbmNhdChlbGVtZW50KSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgXCJDb3VsZG4ndCBkZWxldGUgdGhlIGFjdGl2aXR5IHRpdGxlIGR1ZSB0byBzeXN0ZW0gZXJyb3IuXCI7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBkZWxldGVWYWx1ZTogZGVsZXRlVmFsdWUsIGRlbGV0ZVRvZ2dsZTogZGVsZXRlVG9nZ2xlLCBwcm9wczogcHJvcHMsIHRvYXN0RGF0YTogdG9hc3REYXRhLCBsYXlvdXQ6IGxheW91dCwgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSwgcm91bmRGbG9hdDogcm91bmRGbG9hdCwgZGVsZXRlQWN0aXZpdHlFbGVtZW50OiBkZWxldGVBY3Rpdml0eUVsZW1lbnQsIGRlbGV0ZUVsZW1lbnQ6IGRlbGV0ZUVsZW1lbnQsIGFjdGl2aXR5Q29yZUVsZW1lbnRzOiBjb3JlRWxlbWVudHNfMS5hY3Rpdml0eUNvcmVFbGVtZW50cywgQWN0aXZpdHlEYXRlOiBJbmRleF8xLkFjdGl2aXR5RGF0ZSwgQ29uZGl0aW9uczogSW5kZXhfMS5Db25kaXRpb25zLCBDb250YWN0SW5mbzogSW5kZXhfMS5Db250YWN0SW5mbywgRGVzY3JpcHRpb246IEluZGV4XzEuRGVzY3JpcHRpb24sIEh1bWFuaXRhcmlhblNjb3BlOiBJbmRleF8xLkh1bWFuaXRhcmlhblNjb3BlLCBJYXRpSWRlbnRpZmllcjogSW5kZXhfMS5JYXRpSWRlbnRpZmllciwgTGVnYWN5RGF0YTogSW5kZXhfMS5MZWdhY3lEYXRhLCBMb2NhdGlvbjogSW5kZXhfMS5Mb2NhdGlvbiwgT3RoZXJJZGVudGlmaWVyOiBJbmRleF8xLk90aGVySWRlbnRpZmllciwgUGFydGljaXBhdGluZ09yZzogSW5kZXhfMS5QYXJ0aWNpcGF0aW5nT3JnLCBQbGFubmVkRGlzYnVyc2VtZW50OiBJbmRleF8xLlBsYW5uZWREaXNidXJzZW1lbnQsIFBvbGljeU1hcmtlcjogSW5kZXhfMS5Qb2xpY3lNYXJrZXIsIFJlY2lwaWVudENvdW50cnk6IEluZGV4XzEuUmVjaXBpZW50Q291bnRyeSwgUmVjaXBpZW50UmVnaW9uOiBJbmRleF8xLlJlY2lwaWVudFJlZ2lvbiwgUmVsYXRlZEFjdGl2aXR5OiBJbmRleF8xLlJlbGF0ZWRBY3Rpdml0eSwgUmVwb3J0aW5nT3JnYW5pemF0aW9uOiBJbmRleF8xLlJlcG9ydGluZ09yZ2FuaXphdGlvbiwgU2VjdG9yOiBJbmRleF8xLlNlY3RvciwgVGFnOiBJbmRleF8xLlRhZywgVGl0bGVFbGVtZW50OiBJbmRleF8xLlRpdGxlRWxlbWVudCwgVHJhbnNhY3Rpb25zOiBJbmRleF8xLlRyYW5zYWN0aW9ucywgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsIFN0YXR1czogRWxlbWVudFN0YXR1c192dWVfMS5kZWZhdWx0LCBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBDcmVhdGVNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vQ3JlYXRlTW9kYWwudnVlXCIpKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBZGRBY3Rpdml0eUJ1dHRvbicsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBDcmVhdGVNb2RhbDogQ3JlYXRlTW9kYWxfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfYSA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBtb2RhbFZhbHVlID0gX2FbMF0sIG1vZGFsVG9nZ2xlID0gX2FbMV07XG4gICAgICAgIHZhciBtb2RlbFZpc2libGUgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2dnbGVNb2RlbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbW9kZWxWaXNpYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBsaUNsYXNzID0gJ2Jsb2NrIHAtMi41IHRleHQtbi00MCB0ZXh0LXRpbnkgbGVhZGluZy1bMS41XSBmb250LWJvbGQgaG92ZXI6dGV4dC1uLTUwIGhvdmVyOmJnLW4tMTAnO1xuICAgICAgICB2YXIgZHJvcGRvd25CdG4gPSAoMCwgdnVlXzEucmVmKSgpO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghZHJvcGRvd25CdG4udmFsdWUuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlLmlzVmlzaWJsZSA9ICFzdGF0ZS5pc1Zpc2libGU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBsaUNsYXNzOiBsaUNsYXNzLFxuICAgICAgICAgICAgbW9kZWxWaXNpYmxlOiBtb2RlbFZpc2libGUsXG4gICAgICAgICAgICBtb2RhbFZhbHVlOiBtb2RhbFZhbHVlLFxuICAgICAgICAgICAgdG9nZ2xlOiB0b2dnbGUsXG4gICAgICAgICAgICBtb2RhbFRvZ2dsZTogbW9kYWxUb2dnbGUsXG4gICAgICAgICAgICB0b2dnbGVNb2RlbDogdG9nZ2xlTW9kZWwsXG4gICAgICAgICAgICBkcm9wZG93bkJ0bjogZHJvcGRvd25CdG4sXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL2luZGV4XCIpO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBDcmVhdGVNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vQ3JlYXRlTW9kYWwudnVlXCIpKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vY29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vKipcbiAqICBHbG9iYWwgU3RhdGVcbiAqL1xudmFyIHN0b3JlID0gKDAsIGluZGV4XzEudXNlU3RvcmUpKCk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FkZEFjdGl2aXR5QnV0dG9uJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENyZWF0ZU1vZGFsOiBDcmVhdGVNb2RhbF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX2EgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgbW9kYWxWYWx1ZSA9IF9hWzBdLCBtb2RhbFRvZ2dsZSA9IF9hWzFdO1xuICAgICAgICB2YXIgbW9kZWxWaXNpYmxlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8xLnJlZikoJycpO1xuICAgICAgICB2YXIgdG9hc3RtZXNzYWdlVHlwZSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHNob3dFcnJvcnBvcHVwID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICgwLCB2dWVfMS5yZWYpKCcnKTtcbiAgICAgICAgdmFyIHRvZ2dsZU1vZGVsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBtb2RlbFZpc2libGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGxpQ2xhc3MgPSAnYmxvY2sgcC0yLjUgdGV4dC1uLTQwIHRleHQtdGlueSBsZWFkaW5nLVsxLjVdIGZvbnQtYm9sZCBob3Zlcjp0ZXh0LW4tNTAgaG92ZXI6Ymctbi0xMCc7XG4gICAgICAgIHZhciBkcm9wZG93bkJ0biA9ICgwLCB2dWVfMS5yZWYpKCk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkcm9wZG93bkJ0bi52YWx1ZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb3dubG9hZEVycm9yKGZpbGVuYW1lLCB0ZXh0KSB7XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlLmlzVmlzaWJsZSA9ICFzdGF0ZS5pc1Zpc2libGU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkb3dubG9hZEVycm9yeG1sID0gZnVuY3Rpb24gKGNvdW50QWN0aXZpdGllcykge1xuICAgICAgICAgICAgc2hvd0Vycm9ycG9wdXAudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtZXRlcnMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpO1xuICAgICAgICAgICAgdmFyIGFkZFF1ZXJ5UGFyYW1zID0gJyc7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGFkZFF1ZXJ5UGFyYW1zID0gJyYnICsgcXVlcnlQYXJhbWV0ZXJzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGFwaVVybCA9ICcvYWN0aXZpdGllcy9kb3dubG9hZC14bWwvdHJ1ZT9hY3Rpdml0aWVzPWFsbCcgKyBhZGRRdWVyeVBhcmFtcztcbiAgICAgICAgICAgIGlmIChjb3VudEFjdGl2aXRpZXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSBzdG9yZS5zdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMuam9pbignLCcpO1xuICAgICAgICAgICAgICAgIGFwaVVybCA9IFwiL2FjdGl2aXRpZXMvZG93bmxvYWQteG1sL3RydWU/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2VzcyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAodG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2UpOyB9LCAxNTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZG93bmxvYWRYbWwgPSBmdW5jdGlvbiAoY291bnRBY3Rpdml0aWVzKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlQYXJhbWV0ZXJzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIHZhciBhZGRRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBhZGRRdWVyeVBhcmFtcyA9ICcmJyArIHF1ZXJ5UGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcGlVcmwgPSAnL2FjdGl2aXRpZXMvZG93bmxvYWQteG1sP2FjdGl2aXRpZXM9YWxsJyArIGFkZFF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgaWYgKGNvdW50QWN0aXZpdGllcyA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZpdGllcyA9IHN0b3JlLnN0YXRlLnNlbGVjdGVkQWN0aXZpdGllcy5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgYXBpVXJsID0gXCIvYWN0aXZpdGllcy9kb3dubG9hZC14bWw/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdWNjZXNzID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS54bWxfZXJyb3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFcnJvcnBvcHVwLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS52YWx1ZSA9IHJlcy5kYXRhLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgMTUwMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZG93bmxvYWRDc3YgPSBmdW5jdGlvbiAoY291bnRBY3Rpdml0aWVzKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlQYXJhbWV0ZXJzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIHZhciBhZGRRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBhZGRRdWVyeVBhcmFtcyA9ICcmJyArIHF1ZXJ5UGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcGlVcmwgPSAnL2FjdGl2aXRpZXMvZG93bmxvYWQtY3N2P2FjdGl2aXRpZXM9YWxsJyArIGFkZFF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgaWYgKGNvdW50QWN0aXZpdGllcyA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZpdGllcyA9IHN0b3JlLnN0YXRlLnNlbGVjdGVkQWN0aXZpdGllcy5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgYXBpVXJsID0gXCIvYWN0aXZpdGllcy9kb3dubG9hZC1jc3Y/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2VzcyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAodG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2UpOyB9LCAxNTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbGlDbGFzczogbGlDbGFzcyxcbiAgICAgICAgICAgIG1vZGVsVmlzaWJsZTogbW9kZWxWaXNpYmxlLFxuICAgICAgICAgICAgbW9kYWxWYWx1ZTogbW9kYWxWYWx1ZSxcbiAgICAgICAgICAgIHRvZ2dsZTogdG9nZ2xlLFxuICAgICAgICAgICAgbW9kYWxUb2dnbGU6IG1vZGFsVG9nZ2xlLFxuICAgICAgICAgICAgdG9nZ2xlTW9kZWw6IHRvZ2dsZU1vZGVsLFxuICAgICAgICAgICAgZHJvcGRvd25CdG46IGRyb3Bkb3duQnRuLFxuICAgICAgICAgICAgZG93bmxvYWRDc3Y6IGRvd25sb2FkQ3N2LFxuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5OiB0b2FzdFZpc2liaWxpdHksXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSxcbiAgICAgICAgICAgIHRvYXN0bWVzc2FnZVR5cGU6IHRvYXN0bWVzc2FnZVR5cGUsXG4gICAgICAgICAgICBkb3dubG9hZFhtbDogZG93bmxvYWRYbWwsXG4gICAgICAgICAgICBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgc2hvd0Vycm9ycG9wdXA6IHNob3dFcnJvcnBvcHVwLFxuICAgICAgICAgICAgZG93bmxvYWRFcnJvcnhtbDogZG93bmxvYWRFcnJvcnhtbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICBkb3dubG9hZEVycm9yOiBkb3dubG9hZEVycm9yLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0VsZW1lbnROb3RlJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEFkZEFjdGl2aXR5QnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0VtcHR5QWN0aXZpdHknLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQWN0aXZpdHlCdXR0b246IEFkZEFjdGl2aXR5QnV0dG9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGRpc21pc3M6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBzdGF0ZTogc3RhdGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIERvd25sb2FkQWN0aXZpdHlCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWVcIikpO1xudmFyIEFkZEFjdGl2aXR5QnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIFJlZnJlc2hUb2FzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWVcIikpO1xudmFyIFB1Ymxpc2hTZWxlY3RlZF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQWN0aXZpdHkvYnVsay1wdWJsaXNoL1B1Ymxpc2hTZWxlY3RlZC52dWVcIikpO1xudmFyIERlbGV0ZUJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0RlbGV0ZUJ1dHRvbi52dWVcIikpO1xudmFyIEVycm9yUG9wVXBfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvRXJyb3JQb3BVcC52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIGluZGV4XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9pbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdQYWdlVGl0bGUnLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBpbmRleF8xLnVzZVN0b3JlKSgpO1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3RvYXN0RGF0YScpO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8yLmluamVjdCkoJ2Vycm9yRGF0YScpO1xuICAgICAgICB2YXIgcmVmcmVzaFRvYXN0TXNnID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3JlZnJlc2hUb2FzdE1zZycpO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBzdG9yZTogc3RvcmUsIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCBlcnJvckRhdGE6IGVycm9yRGF0YSwgcmVmcmVzaFRvYXN0TXNnOiByZWZyZXNoVG9hc3RNc2csIERvd25sb2FkQWN0aXZpdHlCdXR0b246IERvd25sb2FkQWN0aXZpdHlCdXR0b25fdnVlXzEuZGVmYXVsdCwgQWRkQWN0aXZpdHlCdXR0b246IEFkZEFjdGl2aXR5QnV0dG9uX3Z1ZV8xLmRlZmF1bHQsIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCwgUmVmcmVzaFRvYXN0TWVzc2FnZTogUmVmcmVzaFRvYXN0X3Z1ZV8xLmRlZmF1bHQsIFB1Ymxpc2hTZWxlY3RlZDogUHVibGlzaFNlbGVjdGVkX3Z1ZV8xLmRlZmF1bHQsIERlbGV0ZUJ1dHRvbjogRGVsZXRlQnV0dG9uX3Z1ZV8xLmRlZmF1bHQsIEVycm9yUG9wVXA6IEVycm9yUG9wVXBfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1NpZGViYXJIZWxwQmxvY2snLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbi8vIFZ1ZXggU3RvcmVcbnZhciBpbmRleF8xID0gcmVxdWlyZShcIlN0b3JlL2FjdGl2aXRpZXMvaW5kZXhcIik7XG52YXIgUHJldmlvdXNseVB1Ymxpc2hlZF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zdGF0dXMvUHJldmlvdXNseVB1Ymxpc2hlZC52dWVcIikpO1xudmFyIFB1Ymxpc2hCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9QdWJsaXNoQnV0dG9uLnZ1ZVwiKSk7XG52YXIgVW5QdWJsaXNoQnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvVW5QdWJsaXNoQnV0dG9uLnZ1ZVwiKSk7XG4vLyBpbXBvcnQgU2hpbW1lciBmcm9tIFwiQ29tcG9uZW50cy9TaGltbWVyTG9hZGluZy52dWVcIjtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdUYWJsZUxheW91dCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgc2VsZWN0QWxsVmFsdWUgPSBfYlswXSwgc2VsZWN0QWxsVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBpbmRleF8xLnVzZVN0b3JlKSgpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZnJvbU5vdygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZVNlbGVjdEFsbChhY3Rpdml0aWVzLCBzZWxlY3RBbGxWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RBbGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkYXR1bSBpbiBhY3Rpdml0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKGFjdGl2aXRpZXNbZGF0dW1dLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcycsIGlkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlU2VsZWN0ZWRBY3Rpdml0aWVzJywgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0QWxsVG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9Tb3J0aW5nIGJ5IHVwZGF0ZV9hdFxuICAgICAgICB2YXIgY3VycmVudFVSTCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICB2YXIgcXVlcnkgPSAnJywgZGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICAgIHZhciBzb3J0aW5nRGlyZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJztcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNvcnRCeURhdGVVcmwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY3VycmVudFVSTC5pbmNsdWRlcygnPycpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaCwgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVN0cmluZyk7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSAoX2EgPSB1cmxQYXJhbXMuZ2V0KCdxJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHVybFBhcmFtcy5nZXQoJ2RpcmVjdGlvbicpID09PSAnZGVzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIj9xPVwiLmNvbmNhdChxdWVyeSwgXCImb3JkZXJCeT11cGRhdGVkX2F0JmRpcmVjdGlvbj1cIikuY29uY2F0KGRpcmVjdGlvbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHNlbGVjdEFsbFZhbHVlOiBzZWxlY3RBbGxWYWx1ZSwgc2VsZWN0QWxsVG9nZ2xlOiBzZWxlY3RBbGxUb2dnbGUsIHN0b3JlOiBzdG9yZSwgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSwgdG9nZ2xlU2VsZWN0QWxsOiB0b2dnbGVTZWxlY3RBbGwsIGN1cnJlbnRVUkw6IGN1cnJlbnRVUkwsIHF1ZXJ5OiBxdWVyeSwgZGlyZWN0aW9uOiBkaXJlY3Rpb24sIHNvcnRpbmdEaXJlY3Rpb246IHNvcnRpbmdEaXJlY3Rpb24sIHNvcnRCeURhdGVVcmw6IHNvcnRCeURhdGVVcmwsIFByZXZpb3VzbHlQdWJsaXNoZWQ6IFByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEuZGVmYXVsdCwgUHVibGlzaDogUHVibGlzaEJ1dHRvbl92dWVfMS5kZWZhdWx0LCBVblB1Ymxpc2g6IFVuUHVibGlzaEJ1dHRvbl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9uZW50XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbi8vY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUGVyaW9kRGV0YWlsJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFRhcmdldFZhbHVlOiBJbmRleF8xLlRhcmdldFZhbHVlLFxuICAgICAgICBBY3R1YWxWYWx1ZTogSW5kZXhfMS5BY3R1YWxWYWx1ZSxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50RGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBlcmlvZDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxpbmtDbGFzc2VzID0gJ2ZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBiZy13aGl0ZSByb3VuZGVkIHAtMiB0ZXh0LXNtIHRleHQtbi01MCBmb250LWJvbGQgbGVhZGluZy1ub3JtYWwgbWItMiBzaGFkb3ctZGVmYXVsdCc7XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgcGVyaW9kID0gX2EucGVyaW9kLCBhY3Rpdml0eSA9IF9hLmFjdGl2aXR5LCBwYXJlbnREYXRhID0gX2EucGFyZW50RGF0YSwgdHlwZXMgPSBfYS50eXBlcztcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIC8vIHZ1ZSBwcm92aWRlXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgndHlwZXMnLCB0eXBlcy52YWx1ZSk7XG4gICAgICAgIC8vaW5kaWNhdG9yXG4gICAgICAgIHZhciBwZXJpb2REYXRhID0gcGVyaW9kLnZhbHVlLnBlcmlvZDtcbiAgICAgICAgLy90aXRsZXNcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5LnZhbHVlLnRpdGxlLCAnZW4nKSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRJZCA9IHBhcmVudERhdGEudmFsdWUucmVzdWx0LmlkLCByZXN1bHRUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHBhcmVudERhdGEudmFsdWUucmVzdWx0LnRpdGxlLCAnZW4nKSwgcmVzdWx0TGluayA9IFwiXCIuY29uY2F0KGFjdGl2aXR5TGluaywgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLCBpbmRpY2F0b3JJZCA9IHBhcmVudERhdGEudmFsdWUuaW5kaWNhdG9yLmlkLCBpbmRpY2F0b3JUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHBhcmVudERhdGEudmFsdWUuaW5kaWNhdG9yLnRpdGxlLCAnZW4nKSwgaW5kaWNhdG9yTGluayA9IFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvci9cIikuY29uY2F0KGluZGljYXRvcklkKSwgcGVyaW9kTGluayA9IFwiL2luZGljYXRvci9cIi5jb25jYXQoaW5kaWNhdG9ySWQsIFwiL3BlcmlvZFwiKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnWW91ciBBY3Rpdml0aWVzJyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnL2FjdGl2aXRpZXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogYWN0aXZpdHlUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXN1bHRUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiByZXN1bHRMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogaW5kaWNhdG9yVGl0bGUsXG4gICAgICAgICAgICAgICAgbGluazogaW5kaWNhdG9yTGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdQZXJpb2QnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlua0NsYXNzZXM6IGxpbmtDbGFzc2VzLFxuICAgICAgICAgICAgcGVyaW9kRGF0YTogcGVyaW9kRGF0YSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgYWN0aXZpdHlMaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICByZXN1bHRMaW5rOiByZXN1bHRMaW5rLFxuICAgICAgICAgICAgaW5kaWNhdG9yTGluazogaW5kaWNhdG9yTGluayxcbiAgICAgICAgICAgIHBlcmlvZExpbms6IHBlcmlvZExpbmssXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIHNob3dTaWRlYmFyOiBzaG93U2lkZWJhcixcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vIGNvbXBvbmVudHNcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgVGFibGVQYWdpbmF0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RhYmxlUGFnaW5hdGlvbi52dWVcIikpO1xudmFyIFBhZ2VUaXRsZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgRGVsZXRlQWN0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWVcIikpO1xuLy8gY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUGVyaW9kTGlzdCcsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBCdG46IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdpbmF0aW9uOiBUYWJsZVBhZ2luYXRpb25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBEZWxldGVBY3Rpb246IERlbGV0ZUFjdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBwYXJlbnREYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVyaW9kOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgYWN0aXZpdHkgPSBfYS5hY3Rpdml0eSwgcGFyZW50RGF0YSA9IF9hLnBhcmVudERhdGE7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRUaXRsZSA9IHBhcmVudERhdGEudmFsdWUucmVzdWx0LnRpdGxlLCByZXN1bHRJZCA9IHBhcmVudERhdGEudmFsdWUucmVzdWx0LmlkLCByZXN1bHRMaW5rID0gXCJcIi5jb25jYXQoYWN0aXZpdHlMaW5rLCBcIi9yZXN1bHQvXCIpLmNvbmNhdChyZXN1bHRJZCksIGluZGljYXRvclRpdGxlID0gcGFyZW50RGF0YS52YWx1ZS5pbmRpY2F0b3IudGl0bGUsIGluZGljYXRvcklkID0gcGFyZW50RGF0YS52YWx1ZS5pbmRpY2F0b3IuaWQsIGluZGljYXRvckxpbmsgPSBcIi9yZXN1bHQvXCIuY29uY2F0KHJlc3VsdElkLCBcIi9pbmRpY2F0b3IvXCIpLmNvbmNhdChpbmRpY2F0b3JJZCksIHBlcmlvZExpbmsgPSBcIi9pbmRpY2F0b3IvXCIuY29uY2F0KGluZGljYXRvcklkLCBcIi9wZXJpb2RcIik7XG4gICAgICAgIHZhciBwZXJpb2RzRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdZb3VyIEFjdGl2aXRpZXMnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdHknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogKDAsIHRpdGxlXzEuZGVmYXVsdCkoYWN0aXZpdHlUaXRsZSwgJ2VuJyksXG4gICAgICAgICAgICAgICAgbGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogKDAsIHRpdGxlXzEuZGVmYXVsdCkocmVzdWx0VGl0bGUsICdlbicpLFxuICAgICAgICAgICAgICAgIGxpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShpbmRpY2F0b3JUaXRsZSwgJ2VuJyksXG4gICAgICAgICAgICAgICAgbGluazogaW5kaWNhdG9yTGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdQZXJpb2RzIExpc3QnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvaW5kaWNhdG9yL1wiLmNvbmNhdChpbmRpY2F0b3JJZCwgXCIvcGVyaW9kcy9wYWdlLzFcIikpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwZXJpb2RzRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICBmdW5jdGlvbiBmZXRjaExpc3RpbmdzKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAuZ2V0KFwiL2luZGljYXRvci9cIi5jb25jYXQoaW5kaWNhdG9ySWQsIFwiL3BlcmlvZHMvcGFnZS9cIikgKyBhY3RpdmVfcGFnZSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwZXJpb2RzRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVOYXZpZ2F0ZShwYXRoKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJvdmlkZVxuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3BhcmVudEl0ZW1JZCcsIGluZGljYXRvcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSxcbiAgICAgICAgICAgIGluZGljYXRvckxpbms6IGluZGljYXRvckxpbmssXG4gICAgICAgICAgICBwZXJpb2RMaW5rOiBwZXJpb2RMaW5rLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsXG4gICAgICAgICAgICBwZXJpb2RzRGF0YTogcGVyaW9kc0RhdGEsXG4gICAgICAgICAgICBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQsXG4gICAgICAgICAgICBmZXRjaExpc3RpbmdzOiBmZXRjaExpc3RpbmdzLFxuICAgICAgICAgICAgaW5kaWNhdG9ySWQ6IGluZGljYXRvcklkLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0ZTogaGFuZGxlTmF2aWdhdGUsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy8gY29tcG9uZW50XG52YXIgSW5kZXhfMSA9IHJlcXVpcmUoXCJBY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0luZGV4XCIpO1xuLy9jb21wb3NhYmxlXG52YXIgdXRpbHNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS91dGlsc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdHVhbFZhbHVlJyxcbiAgICBjb21wb25lbnRzOiB7IERvY3VtZW50TGluazogSW5kZXhfMS5Eb2N1bWVudExpbmsgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgLy8gdnVlIGluamVjdFxuICAgICAgICB2YXIgZGxUeXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHZhciBlbGVtZW50U3BhY2luZyA9ICdtYi0xJztcbiAgICAgICAgdmFyIGFjdHVhbFZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdHVhbFZhbHVlOiBhY3R1YWxWYWx1ZSxcbiAgICAgICAgICAgIGVsZW1lbnRTcGFjaW5nOiBlbGVtZW50U3BhY2luZyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICAgIGdldExvY2F0aW9uOiB1dGlsc18xLmRlZmF1bHQsXG4gICAgICAgICAgICBkbFR5cGU6IGRsVHlwZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vLyBjb21wb25lbnRcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIkFjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kZXhcIik7XG4vL2NvbXBvc2FibGVcbnZhciB1dGlsc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3V0aWxzXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIlRhcmdldFZhbHVlXCIsXG4gICAgY29tcG9uZW50czogeyBEb2N1bWVudExpbms6IEluZGV4XzEuRG9jdW1lbnRMaW5rIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIC8vIHZ1ZSBpbmplY3RcbiAgICAgICAgLy8gY29uc3QgbGFuZ3VhZ2VUeXBlID0gaW5qZWN0KCd0eXBlcycpLmxhbmd1YWdlO1xuICAgICAgICB2YXIgZGxUeXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgdmFyIGVsZW1lbnRTcGFjaW5nID0gXCJtYi0xXCI7XG4gICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXJnZXRWYWx1ZTogdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICBlbGVtZW50U3BhY2luZzogZWxlbWVudFNwYWNpbmcsXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgICBnZXRMb2NhdGlvbjogdXRpbHNfMS5kZWZhdWx0LFxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2VUeXBlLFxuICAgICAgICAgICAgZGxUeXBlOiBkbFR5cGUsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy9jb21wb25lbnRcbnZhciBSZXN1bHRFbGVtZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1Jlc3VsdEVsZW1lbnQudnVlXCIpKTtcbnZhciBJbmRpY2F0b3JfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkFjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvSW5kaWNhdG9yLnZ1ZVwiKSk7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xuLy9jb21wb3NhYmxlXG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHREZXRhaWwnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgUmVzdWx0RWxlbWVudDogUmVzdWx0RWxlbWVudF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBJbmRpY2F0b3I6IEluZGljYXRvcl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBCdG46IExpbmtfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsaW5rQ2xhc3NlcyA9ICdmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgYmctd2hpdGUgcm91bmRlZCBwLTIgdGV4dC1zbSB0ZXh0LW4tNTAgZm9udC1ib2xkIGxlYWRpbmctbm9ybWFsIG1iLTIgc2hhZG93LWRlZmF1bHQnO1xuICAgICAgICB2YXIgcG9zaXRpb25ZID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciBzaG93U2lkZWJhciA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHNjcmVlbldpZHRoID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgcmVzdWx0ID0gX2EucmVzdWx0LCBhY3Rpdml0eSA9IF9hLmFjdGl2aXR5O1xuICAgICAgICB2YXIgaGFzSW5kaWNhdG9ycyA9IHJlc3VsdC52YWx1ZS5pbmRpY2F0b3JzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIHZhciByZXN1bHRzRGF0YSA9IHJlc3VsdC52YWx1ZS5yZXN1bHQ7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHJlc3VsdHNEYXRhLnRpdGxlWzBdLm5hcnJhdGl2ZSwgJ2VuJyksIHJlc3VsdExpbmsgPSBcIlwiLmNvbmNhdChhY3Rpdml0eUxpbmssIFwiL3Jlc3VsdC9cIikuY29uY2F0KHJlc3VsdC52YWx1ZS5pZCk7XG4gICAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3NpdGlvblkudmFsdWUgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdZb3VyIEFjdGl2aXRpZXMnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eVRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXN1bHRUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHZhciBpc3RvcFZpc2libGUgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblkudmFsdWUgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2FsY1dpZHRoID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBzY3JlZW5XaWR0aC52YWx1ZSA9IGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xuICAgICAgICAgICAgaWYgKHNjcmVlbldpZHRoLnZhbHVlID4gMTAyNCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dTaWRlYmFyLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2hvd1NpZGViYXIudmFsdWU7IH0sIGZ1bmN0aW9uIChzaWRlYmFyKSB7XG4gICAgICAgICAgICBpZiAoc2lkZWJhcikge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpdml0eUxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIHJlc3VsdFRpdGxlOiByZXN1bHRUaXRsZSxcbiAgICAgICAgICAgIHJlc3VsdExpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICBsaW5rQ2xhc3NlczogbGlua0NsYXNzZXMsXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCxcbiAgICAgICAgICAgIGhhc0luZGljYXRvcnM6IGhhc0luZGljYXRvcnMsXG4gICAgICAgICAgICByZXN1bHRzRGF0YTogcmVzdWx0c0RhdGEsXG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIHNob3dTaWRlYmFyOiBzaG93U2lkZWJhcixcbiAgICAgICAgICAgIGlzdG9wVmlzaWJsZTogaXN0b3BWaXNpYmxlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgSW5kZXhfMSA9IHJlcXVpcmUoXCIuL2VsZW1lbnRzL0luZGV4XCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eUVsZW1lbnQnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVGl0bGVEZXNjcmlwdGlvbjogSW5kZXhfMS5UaXRsZURlc2NyaXB0aW9uLFxuICAgICAgICBEb2N1bWVudExpbms6IEluZGV4XzEuRG9jdW1lbnRMaW5rLFxuICAgICAgICBSZWZlcmVuY2U6IEluZGV4XzEuUmVmZXJlbmNlLFxuICAgICAgICBSZXN1bHRUeXBlOiBJbmRleF8xLlJlc3VsdFR5cGUsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnROYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdFVybDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBob3ZlclRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX2EgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGRhdGEgPSBfYS5kYXRhLCB0eXBlcyA9IF9hLnR5cGVzLCBlbGVtZW50RGF0YSA9IGRhdGEudmFsdWUsIHJlc3VsdFR5cGUgPSB0eXBlcy52YWx1ZS5yZXN1bHRUeXBlLCByZXN1bHRWb2NhYnVsYXJ5ID0gdHlwZXMudmFsdWUucmVzdWx0Vm9jYWJ1bGFyeSwgbGFuZ3VhZ2UgPSB0eXBlcy52YWx1ZS5sYW5ndWFnZTtcbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudERhdGE6IGVsZW1lbnREYXRhLCByZXN1bHRUeXBlOiByZXN1bHRUeXBlLCByZXN1bHRWb2NhYnVsYXJ5OiByZXN1bHRWb2NhYnVsYXJ5LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vIGNvbXBvbmVudHNcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgVGFibGVQYWdpbmF0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RhYmxlUGFnaW5hdGlvbi52dWVcIikpO1xudmFyIFBhZ2VUaXRsZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgRGVsZXRlQWN0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWVcIikpO1xuLy8gY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUmVzdWx0c0xpc3QnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQnRuOiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnaW5hdGlvbjogVGFibGVQYWdpbmF0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRGVsZXRlQWN0aW9uOiBEZWxldGVBY3Rpb25fdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWN0aXZpdHkgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuYWN0aXZpdHk7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpO1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZXN1bHRzRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnWW91ciBBY3Rpdml0aWVzJyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnL2FjdGl2aXRpZXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogKDAsIHRpdGxlXzEuZGVmYXVsdCkoYWN0aXZpdHlUaXRsZSwgJ2VuJyksXG4gICAgICAgICAgICAgICAgbGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1Jlc3VsdCBMaXN0JyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvcmVzdWx0cy9wYWdlLzFcIikpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHRzRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICBmdW5jdGlvbiBmZXRjaExpc3RpbmdzKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAuZ2V0KFwiL2FjdGl2aXR5L1wiLmNvbmNhdChhY3Rpdml0eUlkLCBcIi9yZXN1bHRzL3BhZ2UvXCIpICsgYWN0aXZlX3BhZ2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0c0RhdGEsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlzRW1wdHkudmFsdWUgPSByZXNwb25zZS5kYXRhID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJvdmlkZVxuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3BhcmVudEl0ZW1JZCcsIGFjdGl2aXR5SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgYWN0aXZpdHlMaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgcmVzdWx0c0RhdGE6IHJlc3VsdHNEYXRhLFxuICAgICAgICAgICAgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgZmV0Y2hMaXN0aW5nczogZmV0Y2hMaXN0aW5ncyxcbiAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRlOiBoYW5kbGVOYXZpZ2F0ZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJSZXN1bHREb2N1bWVudExpbmtcIixcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgZGxEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgZGxEYXRhOiBkbERhdGEgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vL2NvbXBvc2FibGVcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgdGl0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS90aXRsZVwiKSk7XG4vL2NvbXBvbmVudHNcbnZhciBIYXZlTm90QWRkZWRZZXRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvSGF2ZU5vdEFkZGVkWWV0LnZ1ZVwiKSk7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUmVzdWx0SW5kaWNhdG9yJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIE5vdFlldDogSGF2ZU5vdEFkZGVkWWV0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xUaXA6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLnJlc3VsdDtcbiAgICAgICAgdmFyIGluZGljYXRvckRhdGEgPSByZXN1bHQudmFsdWUuaW5kaWNhdG9ycy5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiB7IGluZGljYXRvckRhdGE6IGluZGljYXRvckRhdGEsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LCBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1Jlc3VsdFJlZmVyZW5jZScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHJlZmVyZW5jZURhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyByZWZlcmVuY2VEYXRhOiByZWZlcmVuY2VEYXRhIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHRUeXBlJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0eXBlRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IHR5cGVEYXRhOiB0eXBlRGF0YSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUmVzdWx0VEQnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0ZERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyB0ZERhdGE6IHRkRGF0YSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9uZW50c1xudmFyIExpbmtfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9MaW5rLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbi8vY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbnZhciBUcmFuc2FjdGlvbkVsZW1lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uRGV0YWlsJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFRyYW5zYWN0aW9uRWxlbWVudDogVHJhbnNhY3Rpb25FbGVtZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdlVGl0bGU6IFBhZ2VUaXRsZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBhY3Rpdml0eToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX2EgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGFjdGl2aXR5ID0gX2EuYWN0aXZpdHksIHRyYW5zYWN0aW9uID0gX2EudHJhbnNhY3Rpb247XG4gICAgICAgIHZhciBsaW5rQ2xhc3NlcyA9ICdmbGV4IGl0ZW1zLWNlbnRlciB3LWZ1bGwgYmctd2hpdGUgcm91bmRlZCBwLTIgdGV4dC1zbSB0ZXh0LW4tNTAgZm9udC1ib2xkIGxlYWRpbmctcmVsYXhlZCBtYi0yIHNoYWRvdy1kZWZhdWx0JztcbiAgICAgICAgdmFyIHNob3dTaWRlYmFyID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgcG9zaXRpb25ZID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciBzY3JlZW5XaWR0aCA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3NpdGlvblkudmFsdWUgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGlzdG9wVmlzaWJsZSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uWS52YWx1ZSA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRpdGxlc1xuICAgICAgICB2YXIgdHJhbnNhY3Rpb25EYXRhID0gdHJhbnNhY3Rpb24udmFsdWUudHJhbnNhY3Rpb247XG4gICAgICAgIHZhciBjYWxjV2lkdGggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHNjcmVlbldpZHRoLnZhbHVlID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gICAgICAgICAgICBpZiAoc2NyZWVuV2lkdGgudmFsdWUgPiAxMDI0KSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5LnZhbHVlLnRpdGxlLCAnZW4nKSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCB0cmFuc2FjdGlvbkxpbmsgPSBcIlwiLmNvbmNhdChhY3Rpdml0eUxpbmssIFwiL3RyYW5zYWN0aW9uL1wiKS5jb25jYXQodHJhbnNhY3Rpb24udmFsdWUuaWQpO1xuICAgICAgICAoMCwgdnVlXzEub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNob3dTaWRlYmFyLnZhbHVlOyB9LCBmdW5jdGlvbiAoc2lkZWJhcikge1xuICAgICAgICAgICAgaWYgKHNpZGViYXIpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCcmVhZGNydW1iIGRhdGFcbiAgICAgICAgICovXG4gICAgICAgIHZhciBicmVhZGNydW1iRGF0YSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1lvdXIgQWN0aXZpdGllcycsXG4gICAgICAgICAgICAgICAgbGluazogJy9hY3Rpdml0eScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpdml0eVRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdUcmFuc2FjdGlvbicsXG4gICAgICAgICAgICAgICAgbGluazogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNNYW5kYXRvcnlJY29uID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgIHJldHVybiAoci50b1N0cmluZygpID09PSAndmFsdWUnIHx8XG4gICAgICAgICAgICAgICAgci50b1N0cmluZygpID09PSAndHJhbnNhY3Rpb25fdHlwZScgfHxcbiAgICAgICAgICAgICAgICByLnRvU3RyaW5nKCkgPT09ICd0cmFuc2FjdGlvbl9kYXRlJyk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGNvbnN0IGxhbmd1YWdlID0gZ2xvYmFsX2xhbmcgYXMgVHJhbnNsYXRpb247XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbF9sYW5nXCJdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZpdHlUaXRsZTogYWN0aXZpdHlUaXRsZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25EYXRhOiB0cmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgICBsaW5rQ2xhc3NlczogbGlua0NsYXNzZXMsXG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICBhY3Rpdml0eUxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uTGluazogdHJhbnNhY3Rpb25MaW5rLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICBpc01hbmRhdG9yeUljb246IGlzTWFuZGF0b3J5SWNvbixcbiAgICAgICAgICAgIHNob3dTaWRlYmFyOiBzaG93U2lkZWJhcixcbiAgICAgICAgICAgIGlzdG9wVmlzaWJsZTogaXN0b3BWaXNpYmxlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vLi4vLi4vLi4vY29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vLi4vLi4vLi4vY29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIi4vZWxlbWVudHMvSW5kZXhcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJBY3Rpdml0eUVsZW1lbnRcIixcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIERlc2NyaXB0aW9uOiBJbmRleF8xLkRlc2NyaXB0aW9uLFxuICAgICAgICBBaWRUeXBlOiBJbmRleF8xLkFpZFR5cGUsXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZTogSW5kZXhfMS5UcmFuc2FjdGlvblR5cGUsXG4gICAgICAgIFRyYW5zYWN0aW9uRGF0ZTogSW5kZXhfMS5UcmFuc2FjdGlvbkRhdGUsXG4gICAgICAgIFZhbHVlOiBJbmRleF8xLlZhbHVlLFxuICAgICAgICBQcm92aWRlck9yZ2FuaXphdGlvbjogSW5kZXhfMS5Qcm92aWRlck9yZ2FuaXphdGlvbixcbiAgICAgICAgUmVjZWl2ZXJPcmdhbml6YXRpb246IEluZGV4XzEuUmVjZWl2ZXJPcmdhbml6YXRpb24sXG4gICAgICAgIERpc2J1cnNlbWVudENoYW5uZWw6IEluZGV4XzEuRGlzYnVyc2VtZW50Q2hhbm5lbCxcbiAgICAgICAgU2VjdG9yOiBJbmRleF8xLlNlY3RvcixcbiAgICAgICAgUmVjaXBpZW50Q291bnRyeTogSW5kZXhfMS5SZWNpcGllbnRDb3VudHJ5LFxuICAgICAgICBSZWNpcGllbnRSZWdpb246IEluZGV4XzEuUmVjaXBpZW50UmVnaW9uLFxuICAgICAgICBGbG93VHlwZTogSW5kZXhfMS5GbG93VHlwZSxcbiAgICAgICAgRmluYW5jZVR5cGU6IEluZGV4XzEuRmluYW5jZVR5cGUsXG4gICAgICAgIFRpZWRTdGF0dXM6IEluZGV4XzEuVGllZFN0YXR1cyxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZWxlbWVudE5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlZGl0VXJsOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaG92ZXJUZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX2EgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGRhdGEgPSBfYS5kYXRhLCB0eXBlcyA9IF9hLnR5cGVzLCBlbGVtZW50RGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKShcInR5cGVzXCIsIHR5cGVzKTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VzKGxhbmd1YWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2UubWFwKGZ1bmN0aW9uIChlbnRyeSkgeyByZXR1cm4gZW50cnkubGFuZ3VhZ2U7IH0pLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudERhdGE6IGVsZW1lbnREYXRhLFxuICAgICAgICAgICAgZ2V0TGFuZ3VhZ2VzOiBnZXRMYW5ndWFnZXMsXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vY29tcG9uZW50c1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBEZWxldGVBY3Rpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZVwiKSk7XG4vL2NvbXBvc2FibGVcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgdGl0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS90aXRsZVwiKSk7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbi8vIHRvZ2dsZSBzdGF0ZSBmb3IgbW9kYWwgcG9wdXBcbnZhciBfYSA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkZWxldGVWYWx1ZSA9IF9hWzBdLCBkZWxldGVUb2dnbGUgPSBfYVsxXTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25MaXN0JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2luYXRpb246IFRhYmxlUGFnaW5hdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdlVGl0bGU6IFBhZ2VUaXRsZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIERlbGV0ZUFjdGlvbjogRGVsZXRlQWN0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBhY3Rpdml0eToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWN0aXZpdHkgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuYWN0aXZpdHk7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eS52YWx1ZS50aXRsZSwgJ2VuJyksIGFjdGl2aXR5TGluayA9IFwiL2FjdGl2aXR5L1wiLmNvbmNhdChhY3Rpdml0eUlkKTtcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgdHJhbnNhY3Rpb25zRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvdHJhbnNhY3Rpb25zL3BhZ2UvMVwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRyYW5zYWN0aW9uc0RhdGEsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVOYXZpZ2F0ZShwYXRoKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZmV0Y2hMaXN0aW5ncyhhY3RpdmVfcGFnZSkge1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLmdldChcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvdHJhbnNhY3Rpb25zL3BhZ2UvXCIpICsgYWN0aXZlX3BhZ2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odHJhbnNhY3Rpb25zRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcm92aWRlXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgncGFyZW50SXRlbUlkJywgYWN0aXZpdHlJZCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCcmVhZGNydW1iIGRhdGFcbiAgICAgICAgICovXG4gICAgICAgIHZhciBicmVhZGNydW1iRGF0YSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1lvdXIgQWN0aXZpdGllcycsXG4gICAgICAgICAgICAgICAgbGluazogJy9hY3Rpdml0aWVzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGFjdGl2aXR5VGl0bGUsXG4gICAgICAgICAgICAgICAgbGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1RyYW5zYWN0aW9uIExpc3QnLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSxcbiAgICAgICAgICAgIGFjdGl2aXR5TGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbnNEYXRhOiB0cmFuc2FjdGlvbnNEYXRhLFxuICAgICAgICAgICAgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgZmV0Y2hMaXN0aW5nczogZmV0Y2hMaXN0aW5ncyxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLFxuICAgICAgICAgICAgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsXG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0ZTogaGFuZGxlTmF2aWdhdGUsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvbkFpZFR5cGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGF0RGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdERhdGE6IGF0RGF0YSxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvbkRlc2NyaXB0aW9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0ZERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyB0ZERhdGE6IHRkRGF0YSwgdHlwZTogdHlwZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25EaXNidXJzZW1lbnRDaGFubmVsJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBjb2RlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgY29kZTogY29kZSwgdHlwZTogdHlwZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25GaW5hbmNlVHlwZScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgZmluYW5jZURhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyBmaW5hbmNlRGF0YTogZmluYW5jZURhdGEsIHR5cGU6IHR5cGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uRmxvd1R5cGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGZsb3dEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgZmxvd0RhdGE6IGZsb3dEYXRhLCB0eXBlOiB0eXBlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvblByb3ZpZGVyT3JnYW5pc2F0aW9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBQb0RhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyBQb0RhdGE6IFBvRGF0YSwgdHlwZTogdHlwZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25SZWNlaXZlck9yZ2FuaXNhdGlvbicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgUG9EYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgUG9EYXRhOiBQb0RhdGEsIHR5cGU6IHR5cGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uUmVjaXBpZW50Q291bnRyeScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgY291bnRyeSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IGNvdW50cnk6IGNvdW50cnksIHR5cGU6IHR5cGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJUcmFuc2FjdGlvblJlY2lwaWVudFJlZ2lvblwiLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGNvdW50cnkgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHJldHVybiB7IGNvdW50cnk6IGNvdW50cnksIHR5cGU6IHR5cGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJUcmFuc2FjdGlvblNlY3RvclwiLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICB2YXIgc2VjdG9yID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlY3Rvcjogc2VjdG9yLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uVGllZFN0YXR1cycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgdHNEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgdHNEYXRhOiB0c0RhdGEsIHR5cGU6IHR5cGUgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uLy4uLy4uL2NvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uRGF0ZScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgZGF0ZSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IGRhdGU6IGRhdGUsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0IH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvblR5cGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGNvZGUgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyBjb2RlOiBjb2RlLCB0eXBlOiB0eXBlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9jb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiVHJhbnNhY3Rpb25WYWx1ZVwiLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBY3Rpdml0eVVwbG9hZCcsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGZpbGUgPSAoMCwgdnVlXzIucmVmKSgpLCBlcnJvciA9ICgwLCB2dWVfMi5yZWYpKCcnKSwgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpLCBsb2FkZXJUZXh0ID0gKDAsIHZ1ZV8yLnJlZikoJ1BsZWFzZSBXYWl0Jyk7XG4gICAgICAgIGZ1bmN0aW9uIHVwbG9hZEZpbGUoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9ICdVcGxvYWRpbmcgLmNzdi8ueG1sIGZpbGUnO1xuICAgICAgICAgICAgdmFyIGFjdGl2aXR5ID0gZmlsZS52YWx1ZS5maWxlcy5sZW5ndGggPyBmaWxlLnZhbHVlLmZpbGVzWzBdIDogJyc7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBkYXRhLmFwcGVuZCgnYWN0aXZpdHknLCBhY3Rpdml0eSk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoJy9pbXBvcnQnLCBkYXRhLCBjb25maWcpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS52YWx1ZS5maWxlcy5sZW5ndGggJiYgKChfYSA9IHJlcyA9PT0gbnVsbCB8fCByZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlcy5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3VjY2VzcykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvaW1wb3J0L2xpc3QnO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnZhbHVlID0gT2JqZWN0LnZhbHVlcyhyZXMuZGF0YS5lcnJvcnMpLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVycm9yLnZhbHVlID0gJ0Vycm9yIGhhcyBvY2N1cmVkIHdoaWxlIHVwbG9hZGluZyBmaWxlLic7XG4gICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkb3dubG9hZEV4Y2VsKCkge1xuICAgICAgICAgICAgKDAsIGF4aW9zXzEuZGVmYXVsdCkoe1xuICAgICAgICAgICAgICAgIHVybDogJ2ltcG9ydC9kb3dubG9hZC9jc3YnLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXNwb25zZS5kYXRhXSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gJ2Nzdl90ZXN0LmNzdic7XG4gICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgZmlsZTogZmlsZSwgZXJyb3I6IGVycm9yLCBsb2FkZXI6IGxvYWRlciwgbG9hZGVyVGV4dDogbG9hZGVyVGV4dCwgdXBsb2FkRmlsZTogdXBsb2FkRmlsZSwgZG93bmxvYWRFeGNlbDogZG93bmxvYWRFeGNlbCwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG52YXIgSW1wb3J0UGxhY2Vob2xkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSW1wb3J0UGxhY2Vob2xkZXIudnVlXCIpKTtcbnZhciBMaXN0RWxlbWVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9MaXN0RWxlbWVudC52dWVcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdJbXBvcnRMaXN0JyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgYWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgc2VsZWN0ZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKShbXSk7XG4gICAgICAgIHZhciBzZWxlY3RlZENvdW50ID0gKDAsIHZ1ZV8yLnJlZikoMCk7XG4gICAgICAgIHZhciBhY3Rpdml0aWVzTGVuZ3RoID0gKDAsIHZ1ZV8yLnJlZikoMCk7XG4gICAgICAgIHZhciBsb2FkZXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBzZWxlY3RBbGwgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBsb2FkZXJUZXh0ID0gKDAsIHZ1ZV8yLnJlZikoJ1BsZWFzZSBXYWl0Jyk7XG4gICAgICAgIHZhciB0aW1lcjtcbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlclRleHQudmFsdWUgPSAnUGxlYXNlIFdhaXQnO1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCcvaW1wb3J0L2NoZWNrX3N0YXR1cycpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpdml0aWVzLCByZXMuZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdGllc0xlbmd0aC52YWx1ZSA9IHJlcy5kYXRhLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IFwiZXJyb3JcIiB8fCAoIXJlcy5kYXRhLmRhdGEgJiYgY291bnQgPj0gNSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2FjdGl2aXRpZXMnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDMwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRBY3Rpdml0aWVzKGFjdGl2aXR5X2lkKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxlY3RlZEFjdGl2aXRpZXMuaW5kZXhPZihhY3Rpdml0eV9pZCk7XG4gICAgICAgICAgICBpZiAoYWN0aXZpdGllc1thY3Rpdml0eV9pZF1bJ2Vycm9ycyddLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQWN0aXZpdGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50LnZhbHVlID0gc2VsZWN0ZWRDb3VudC52YWx1ZSAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEFjdGl2aXRpZXMucHVzaChhY3Rpdml0eV9pZCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQudmFsdWUgPSBzZWxlY3RlZENvdW50LnZhbHVlICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0QWxsQWN0aXZpdGllcygpIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbC52YWx1ZSA9ICFzZWxlY3RBbGwudmFsdWU7XG4gICAgICAgICAgICBzZWxlY3RlZENvdW50LnZhbHVlID0gMDtcbiAgICAgICAgICAgIHNlbGVjdGVkQWN0aXZpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYWN0aXZpdGllcykuZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZpdHlfaWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxlY3RlZEFjdGl2aXRpZXMuaW5kZXhPZihhY3Rpdml0eV9pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2aXRpZXNbYWN0aXZpdHlfaWRdWydlcnJvcnMnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdEFsbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRBY3Rpdml0aWVzLnB1c2goYWN0aXZpdHlfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudC52YWx1ZSA9IHNlbGVjdGVkQ291bnQudmFsdWUgKyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRBY3Rpdml0aWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0QWxsLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW1wb3J0QWN0aXZpdGllcygpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ0ltcG9ydGluZyAuY3N2Ly54bWwgZmlsZSc7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KCcvaW1wb3J0L2FjdGl2aXR5Jywge1xuICAgICAgICAgICAgICAgIGFjdGl2aXRpZXM6IHNlbGVjdGVkQWN0aXZpdGllcyxcbiAgICAgICAgICAgICAgICBmaWxldHlwZTogJ2NzdicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYWN0aXZpdGllcyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2FjdGl2aXRpZXMnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgYWN0aXZpdGllczogYWN0aXZpdGllcywgc2VsZWN0ZWRBY3Rpdml0aWVzOiBzZWxlY3RlZEFjdGl2aXRpZXMsIHNlbGVjdGVkQ291bnQ6IHNlbGVjdGVkQ291bnQsIGFjdGl2aXRpZXNMZW5ndGg6IGFjdGl2aXRpZXNMZW5ndGgsIGxvYWRlcjogbG9hZGVyLCBzZWxlY3RBbGw6IHNlbGVjdEFsbCwgbG9hZGVyVGV4dDogbG9hZGVyVGV4dCwgdGltZXI6IHRpbWVyLCB1cGRhdGVTZWxlY3RlZEFjdGl2aXRpZXM6IHVwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcywgc2VsZWN0QWxsQWN0aXZpdGllczogc2VsZWN0QWxsQWN0aXZpdGllcywgaW1wb3J0QWN0aXZpdGllczogaW1wb3J0QWN0aXZpdGllcywgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0LCBQbGFjZWhvbGRlcjogSW1wb3J0UGxhY2Vob2xkZXJfdnVlXzEuZGVmYXVsdCwgTGlzdEVsZW1lbnQ6IExpc3RFbGVtZW50X3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIFNoaW1tZXJMb2FkaW5nX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSW1wb3J0UGxhY2Vob2xkZXInLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IFNoaW1tZXI6IFNoaW1tZXJMb2FkaW5nX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdMaXN0RWxlbWVudCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpbmRleDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNlbGVjdGVkQWN0aXZpdGllczoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBlbWl0czogW1wic2VsZWN0RWxlbWVudFwiXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2UsIGVtaXQgPSBfYS5lbWl0O1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGFjdGl2ZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKFtdKTtcbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlRXJyb3IoKSB7XG4gICAgICAgICAgICBhY3RpdmUudmFsdWUgPSAhYWN0aXZlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzZWxlY3RFbGVtZW50ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICBlbWl0KFwic2VsZWN0RWxlbWVudFwiLCBpbmRleCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjb3VudEVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCBpbiBwcm9wcy5hY3Rpdml0eVtcImVycm9yc1wiXSkge1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IE9iamVjdC5rZXlzKHByb3BzLmFjdGl2aXR5W1wiZXJyb3JzXCJdW2luZGV4XSkubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzIud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BzLnNlbGVjdGVkQWN0aXZpdGllczsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YSA9IEpTT04ucGFyc2UocHJvcHMuc2VsZWN0ZWRBY3Rpdml0aWVzKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpdml0aWVzLCBzZWxlY3RlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcHJvcHM6IHByb3BzLCBlbWl0OiBlbWl0LCBhY3RpdmU6IGFjdGl2ZSwgYWN0aXZpdGllczogYWN0aXZpdGllcywgdG9nZ2xlRXJyb3I6IHRvZ2dsZUVycm9yLCBzZWxlY3RFbGVtZW50OiBzZWxlY3RFbGVtZW50LCBjb3VudEVycm9yczogY291bnRFcnJvcnMgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBSYWRpYWxQcm9ncmVzc0Jhcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9SYWRpYWxQcm9ncmVzc0Jhci52dWVcIikpO1xudmFyIE9yZ2FuaXNhdGlvbkVsZW1lbnRzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZVwiKSk7XG52YXIgT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZVwiKSk7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBjb3JlXzIgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIEVycm9yUG9wVXBfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvRXJyb3JQb3BVcC52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdPcmdhbmlzYXRpb25EYXRhJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFJhZGlhbFByb2dyZXNzQmFyOiBSYWRpYWxQcm9ncmVzc0Jhcl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBPcmdhbmlzYXRpb25FbGVtZW50czogT3JnYW5pc2F0aW9uRWxlbWVudHNfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWw6IE9yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUHVibGlzaFVucHVibGlzaDogT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBFcnJvclBvcFVwOiBFcnJvclBvcFVwX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBlbGVtZW50czoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHByb2dyZXNzOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG1hbmRhdG9yeUNvbXBsZXRlZDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHNob3dTaWRlYmFyID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgc2NyZWVuV2lkdGggPSAoMCwgdnVlXzEucmVmKSgwKTtcbiAgICAgICAgdmFyIF9hID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHB1Ymxpc2hWYWx1ZSA9IF9hWzBdLCBwdWJsaXNoVG9nZ2xlID0gX2FbMV07XG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCB1bnB1Ymxpc2hWYWx1ZSA9IF9iWzBdLCB1bnB1Ymxpc2hUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgdmFyIF9jID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGRlbGV0ZVZhbHVlID0gX2NbMF0sIGRlbGV0ZVRvZ2dsZSA9IF9jWzFdO1xuICAgICAgICB2YXIgX2QgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZG93bmxvYWRWYWx1ZSA9IF9kWzBdLCBkb3dubG9hZFRvZ2dsZSA9IF9kWzFdO1xuICAgICAgICB2YXIgcG9zaXRpb25ZID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciB0b2dnbGVTaWRlYmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgPSAhc2hvd1NpZGViYXIudmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMS5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY1dpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGUgPT09ICdzdWNjZXNzJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNhbGNXaWR0aCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgc2NyZWVuV2lkdGgudmFsdWUgPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIGlmIChzY3JlZW5XaWR0aC52YWx1ZSA+IDEwMjQpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93U2lkZWJhci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcG9zaXRpb25ZLnZhbHVlID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBpc3RvcFZpc2libGUgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBvc2l0aW9uWS52YWx1ZSA9PT0gMCk7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25ZLnZhbHVlID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlnbm9yZVVwZGF0ZXMgPSAoMCwgY29yZV8yLndhdGNoSWdub3JhYmxlKSh0b2FzdERhdGEsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSwge1xuICAgICAgICAgICAgZmx1c2g6ICdzeW5jJyxcbiAgICAgICAgfSkuaWdub3JlVXBkYXRlcztcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiB0b2FzdERhdGEudmlzaWJpbGl0eTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZ25vcmVUb2FzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgfSwgMTAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlnbm9yZVRvYXN0VXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWdub3JlVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogR3JvdXBpbmcgYWxsIHRoZSBkYXRhJ3MgZm9yIHNjcm9sbCBmdW5jdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiB0aGlzIGRhdGEgaXMgY3JlYXRlZCB1c2luZyBwcm9wcy5ncm91cHMgYW5kIHByb3BzLmFjdGl2aXR5XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX2UgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIGdyb3VwcyA9IF9lLmdyb3Vwcywgb3JnYW5pemF0aW9uID0gX2Uub3JnYW5pemF0aW9uLCBlbGVtZW50cyA9IF9lLmVsZW1lbnRzLCBncm91cGVkRGF0YSA9IGdyb3Vwcy52YWx1ZSwgb3JnYW5pemF0aW9uUHJvcHMgPSBvcmdhbml6YXRpb24udmFsdWUsIG9yZ2FuaXphdGlvbkRhdGEgPSBncm91cHMudmFsdWUsIGVsZW1lbnRQcm9wcyA9IGVsZW1lbnRzLnZhbHVlO1xuICAgICAgICAvLyBnZW5lcmF0aW5nIGF2YWlsYWJsZSBlbGVtZW50c1xuICAgICAgICBPYmplY3Qua2V5cyhvcmdhbml6YXRpb25EYXRhKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9yZ2FuaXphdGlvbkRhdGFba2V5XVsnZWxlbWVudHMnXSkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9yZ2FuaXphdGlvblByb3BzW2tdIHx8IHR5cGVvZiBvcmdhbml6YXRpb25Qcm9wc1trXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uRGF0YVtrZXldWydlbGVtZW50cyddW2tdWydjb250ZW50J10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uUHJvcHNba107XG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50UHJvcHNba11bJ2hhc19kYXRhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yZ2FuaXphdGlvbkRhdGFba2V5XVtrXTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFByb3BzW2tdWydoYXNfZGF0YSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trXVsnY29yZSddID1cbiAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uRGF0YVtrZXldWydlbGVtZW50cyddW2tdWydtYW5kYXRvcnknXTtcbiAgICAgICAgICAgICAgICBlbGVtZW50UHJvcHNba11bJ2NvbXBsZXRlZCddID1cbiAgICAgICAgICAgICAgICAgICAgayA9PT0gJ29yZ2FuaXNhdGlvbl9pZGVudGlmaWVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBvcmdhbml6YXRpb25Qcm9wc1snZWxlbWVudF9zdGF0dXMnXVsnaWRlbnRpZmllciddXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9yZ2FuaXphdGlvblByb3BzWydlbGVtZW50X3N0YXR1cyddW2tdO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trXVsnbm90X2NvbXBsZXRlZCddID0gIWVsZW1lbnRQcm9wc1trXVsnY29tcGxldGVkJ107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmbGFnID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmdhbml6YXRpb25EYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZW5lcmF0aW5nIGF2YWlsYWJsZSBjYXRlZ29yaWVzIG9mIGVsZW1lbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwZWREYXRhKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcmdhbml6YXRpb25EYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZERhdGFba2V5XVsnc3RhdHVzJ10gPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cGVkRGF0YVtrZXldWydzdGF0dXMnXSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcHVibGlzaE1lc3NhZ2UgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcHVibGlzaFN0YXR1cyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgaXNfcHVibGlzaGVkOiBvcmdhbml6YXRpb25Qcm9wcy5pc19wdWJsaXNoZWQsXG4gICAgICAgICAgICBzdGF0dXM6IG9yZ2FuaXphdGlvblByb3BzLnN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgncHVibGlzaE1lc3NhZ2UnLCBwdWJsaXNoTWVzc2FnZSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgnbWFuZGF0b3J5Q29tcGxldGVkJywgcHJvcHMubWFuZGF0b3J5Q29tcGxldGVkKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCd0b2FzdERhdGEnLCB0b2FzdERhdGEpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3B1Ymxpc2hTdGF0dXMnLCBwdWJsaXNoU3RhdHVzKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdlcnJvckRhdGEnLCBlcnJvckRhdGEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ3JvdXBlZERhdGE6IGdyb3VwZWREYXRhLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uRGF0YTogb3JnYW5pemF0aW9uRGF0YSxcbiAgICAgICAgICAgIHB1Ymxpc2hWYWx1ZTogcHVibGlzaFZhbHVlLFxuICAgICAgICAgICAgcHVibGlzaFRvZ2dsZTogcHVibGlzaFRvZ2dsZSxcbiAgICAgICAgICAgIHVucHVibGlzaFZhbHVlOiB1bnB1Ymxpc2hWYWx1ZSxcbiAgICAgICAgICAgIHVucHVibGlzaFRvZ2dsZTogdW5wdWJsaXNoVG9nZ2xlLFxuICAgICAgICAgICAgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLFxuICAgICAgICAgICAgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsXG4gICAgICAgICAgICBkb3dubG9hZFZhbHVlOiBkb3dubG9hZFZhbHVlLFxuICAgICAgICAgICAgZG93bmxvYWRUb2dnbGU6IGRvd25sb2FkVG9nZ2xlLFxuICAgICAgICAgICAgZWxlbWVudFByb3BzOiBlbGVtZW50UHJvcHMsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIHB1Ymxpc2hTdGF0dXM6IHB1Ymxpc2hTdGF0dXMsXG4gICAgICAgICAgICBlcnJvckRhdGE6IGVycm9yRGF0YSxcbiAgICAgICAgICAgIHRvZ2dsZVNpZGViYXI6IHRvZ2dsZVNpZGViYXIsXG4gICAgICAgICAgICBzaG93U2lkZWJhcjogc2hvd1NpZGViYXIsXG4gICAgICAgICAgICBpc3RvcFZpc2libGU6IGlzdG9wVmlzaWJsZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgY29yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiQ29tcG9zYWJsZS9jb3JlRWxlbWVudHNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnT3JnYW5pc2F0aW9uRWxlbWVudHMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBtYW5kYXRvcnk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHNlYXJjaEJ0blZhbHVlID0gX2JbMF0sIHNlYXJjaEJ0blRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICB2YXIgZHJvcGRvd24gPSAoMCwgdnVlXzIucmVmKSgpO1xuICAgICAgICB2YXIgZHJvcGRvd25CdG4gPSAoMCwgdnVlXzIucmVmKSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2VhcmNoIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICovXG4gICAgICAgIHZhciBlbGVtZW50cyA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgc2VhcmNoOiBcIlwiLFxuICAgICAgICAgICAgc3RhdHVzOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGVsZW1lbnRJY29ucyA9IHtcbiAgICAgICAgICAgIGNvbXBsZXRlZDogXCJkb3VibGUtdGlja1wiLFxuICAgICAgICAgICAgbm90X2NvbXBsZXRlZDogXCJyZWQtY3Jvc3NcIixcbiAgICAgICAgICAgIGNvcmU6IFwiY29yZVwiLFxuICAgICAgICB9O1xuICAgICAgICB2YXIgYXNBcnJheURhdGEgPSBPYmplY3QuZW50cmllcyhwcm9wcy5kYXRhKTtcbiAgICAgICAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGFzQXJyYXlEYXRhLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2FbMF0sIHZhbHVlID0gX2FbMV07XG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50cy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhlbGVtZW50cy5zZWFyY2gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIFwiIFwiKS5yZXBsYWNlKC8tL2csIFwiX1wiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbZWxlbWVudHMuc3RhdHVzXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKGVsZW1lbnRzLnNlYXJjaC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgXCIgXCIpLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGp1c3RTdHJpbmdzID0gT2JqZWN0LmZyb21FbnRyaWVzKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIHJldHVybiBqdXN0U3RyaW5ncztcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRyb3Bkb3duQnRuLnZhbHVlLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhZHJvcGRvd24udmFsdWUuY29udGFpbnMoZS50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGRyb3Bkb3duRmlsdGVyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnN0YXR1cyA9IHM7XG4gICAgICAgICAgICBzZWFyY2hCdG5Ub2dnbGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcHJvcHM6IHByb3BzLCBzZWFyY2hCdG5WYWx1ZTogc2VhcmNoQnRuVmFsdWUsIHNlYXJjaEJ0blRvZ2dsZTogc2VhcmNoQnRuVG9nZ2xlLCBkcm9wZG93bjogZHJvcGRvd24sIGRyb3Bkb3duQnRuOiBkcm9wZG93bkJ0biwgZWxlbWVudHM6IGVsZW1lbnRzLCBlbGVtZW50SWNvbnM6IGVsZW1lbnRJY29ucywgYXNBcnJheURhdGE6IGFzQXJyYXlEYXRhLCBmaWx0ZXJlZEVsZW1lbnRzOiBmaWx0ZXJlZEVsZW1lbnRzLCBkcm9wZG93bkZpbHRlcjogZHJvcGRvd25GaWx0ZXIsIG9yZ01hbmRhdG9yeUVsZW1lbnRzOiBjb3JlRWxlbWVudHNfMS5vcmdNYW5kYXRvcnlFbGVtZW50cyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBjb3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCJDb21wb3NhYmxlL2NvcmVFbGVtZW50c1wiKTtcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIk9yZ2FuaXNhdGlvbi9lbGVtZW50cy9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdPcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCB8fCBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJ2VuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgLy8gY29uc3Qgc3RhdHVzID0gJyc7XG4gICAgICAgIHZhciBsYXlvdXQgPSAnYmFzaXMtNi8xMic7XG4gICAgICAgIGlmIChwcm9wcy53aWR0aCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsYXlvdXQgPSAnYmFzaXMtZnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIHZ1ZV8yLnByb3ZpZGUpKCdvcmdUeXBlcycsIHByb3BzLnR5cGVzKTtcbiAgICAgICAgdmFyIHJlcGxhY2VVbmRlcnNjb3JlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHJlZ2V4ID0gL18vZztcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBzdHJpbmcucmVwbGFjZShyZWdleCwgJy0nKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHByb3BzOiBwcm9wcywgbGF5b3V0OiBsYXlvdXQsIHJlcGxhY2VVbmRlcnNjb3JlOiByZXBsYWNlVW5kZXJzY29yZSwgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCwgb3JnTWFuZGF0b3J5RWxlbWVudHM6IGNvcmVFbGVtZW50c18xLm9yZ01hbmRhdG9yeUVsZW1lbnRzLCBSZXBvcnRpbmdPcmdhbmlzYXRpb246IEluZGV4XzEuUmVwb3J0aW5nT3JnYW5pc2F0aW9uLCBUb3RhbEJ1ZGdldDogSW5kZXhfMS5Ub3RhbEJ1ZGdldCwgUmVwb3J0aW5nT3JnQnVkZ2V0OiBJbmRleF8xLlJlcG9ydGluZ09yZ0J1ZGdldCwgUmVwb3J0aW5nUmVnaW9uQnVkZ2V0OiBJbmRleF8xLlJlcG9ydGluZ1JlZ2lvbkJ1ZGdldCwgUmVjaXBpZW50Q291bnRyeUJ1ZGdldDogSW5kZXhfMS5SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LCBUb3RhbEV4cGVuZGl0dXJlOiBJbmRleF8xLlRvdGFsRXhwZW5kaXR1cmUsIERvY3VtZW50TGluazogSW5kZXhfMS5Eb2N1bWVudExpbmsgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdEb2N1bWVudExpbmsnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJvcmdUeXBlc1wiKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZSA/ICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoXCJMTFwiKSA6IFwiRGF0ZSBNaXNzaW5nXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVjaXBpZW50Q291bnRyeUJ1ZGdldCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogXCJEYXRlIE1pc3NpbmdcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyB0eXBlczogdHlwZXMsIGZvcm1hdERhdGU6IGZvcm1hdERhdGUgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdSZXBvcnRpbmdPcmdCdWRnZXQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJvcmdUeXBlc1wiKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZSA/ICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoXCJMTFwiKSA6IFwiRGF0ZSBNaXNzaW5nXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVwb3J0aW5nT3JnYW5pc2F0aW9uJyxcbiAgICBwcm9wczoge1xuICAgICAgICBjb250ZW50OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMi5pbmplY3QpKCdvcmdUeXBlcycpO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyB0eXBlczogdHlwZXMgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdSZXBvcnRpbmdSZWdpb25CdWRnZXQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJvcmdUeXBlc1wiKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZSA/ICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoXCJMTFwiKSA6IFwiRGF0ZSBNaXNzaW5nXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVG90YWxCdWRnZXQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJvcmdUeXBlc1wiKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZSA/ICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoXCJMTFwiKSA6IFwiRGF0ZSBNaXNzaW5nXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVG90YWxFeHBlbmRpdHVyZScsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogXCJEYXRlIE1pc3NpbmdcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyB0eXBlczogdHlwZXMsIGZvcm1hdERhdGU6IGZvcm1hdERhdGUgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZW1haWxFcnJvciA9ICgwLCB2dWVfMS5yZWYpKCcnKTtcbiAgICAgICAgdmFyIGxvYWRlclZpc2liaWxpdHkgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdCgnL3Bhc3N3b3JkL2VtYWlsJywgZm9ybURhdGEpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcygnYWN0aXZpdGllcycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9ICFyZXNwb25zZS5zdWNjZXNzIHx8ICdlcnJvcnMnIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgZW1haWxFcnJvci52YWx1ZSA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9wYXNzd29yZC9jb25maXJtJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGVtYWlsRXJyb3IudmFsdWUgPSBlcnJvcnMuZW1haWwgPyBlcnJvcnMuZW1haWxbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eTogbG9hZGVyVmlzaWJpbGl0eSxcbiAgICAgICAgICAgIGVtYWlsRXJyb3I6IGVtYWlsRXJyb3IsXG4gICAgICAgICAgICByZXNldDogcmVzZXQsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY3J5cHRvX2pzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNyeXB0by1qc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsb2FkZXJWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgZm9ybURhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGVtYWlsOiBwcm9wcy5lbWFpbCxcbiAgICAgICAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gZW5jcnlwdChzdHJpbmcsIGtleSkge1xuICAgICAgICAgICAgdmFyIGl2ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbSgxNik7IC8vIHRoZSByZWFzb24gdG8gYmUgMTYsIHBsZWFzZSByZWFkIG9uIGBlbmNyeXB0TWV0aG9kYCBwcm9wZXJ0eS5cbiAgICAgICAgICAgIHZhciBzYWx0ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbSgyNTYpO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSA5OTk7XG4gICAgICAgICAgICB2YXIgZW5jcnlwdE1ldGhvZExlbmd0aCA9IDI1NiAvIDQ7IC8vIGV4YW1wbGU6IEFFUyBudW1iZXIgaXMgMjU2IC8gNCA9IDY0XG4gICAgICAgICAgICB2YXIgaGFzaEtleSA9IGNyeXB0b19qc18xLmRlZmF1bHQuUEJLREYyKGtleSwgc2FsdCwge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogY3J5cHRvX2pzXzEuZGVmYXVsdC5hbGdvLlNIQTUxMixcbiAgICAgICAgICAgICAgICBrZXlTaXplOiBlbmNyeXB0TWV0aG9kTGVuZ3RoIC8gOCxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5BRVMuZW5jcnlwdChzdHJpbmcsIGhhc2hLZXksIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBjcnlwdG9fanNfMS5kZWZhdWx0Lm1vZGUuQ0JDLFxuICAgICAgICAgICAgICAgIGl2OiBpdixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGVuY3J5cHRlZFN0cmluZyA9IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkLmNpcGhlcnRleHQpO1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IHtcbiAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRTdHJpbmcsXG4gICAgICAgICAgICAgICAgaXY6IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkhleC5zdHJpbmdpZnkoaXYpLFxuICAgICAgICAgICAgICAgIHNhbHQ6IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkhleC5zdHJpbmdpZnkoc2FsdCksXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuQmFzZTY0LnN0cmluZ2lmeShjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5VdGY4LnBhcnNlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIGVtYWlsOiBmb3JtRGF0YS5lbWFpbCxcbiAgICAgICAgICAgICAgICB0b2tlbjogcHJvcHMudG9rZW4sXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBlbmNyeXB0KGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9hID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGVuY3J5cHQoZm9ybURhdGEucGFzc3dvcmQsIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJycpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KCcvcmVzZXQnLCBmb3JtKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoJ2FjdGl2aXRpZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYWN0aXZpdGllcyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAnZXJyb3JzJyBpbiByZXNwb25zZSA/IHJlc3BvbnNlLmVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9IGVycm9ycy5wYXNzd29yZCA/IGVycm9ycy5wYXNzd29yZFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24gPSBlcnJvcnMucGFzc3dvcmRfY29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblswXVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9IGVycm9ycy5wYXNzd29yZCA/IGVycm9ycy5wYXNzd29yZFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24gPSBlcnJvcnMucGFzc3dvcmRfY29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblswXVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5OiBsb2FkZXJWaXNpYmlsaXR5LFxuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICByZXNldDogcmVzZXQsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG11bHRpc2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkB2dWVmb3JtL211bHRpc2VsZWN0XCIpKTtcbnZhciBzdG9yZV8xID0gcmVxdWlyZShcIi4uLy4uL3N0b3JlXCIpO1xudmFyIGFjdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdG9yZS9zZXR0aW5nL2FjdGlvbnNcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBNdWx0aXNlbGVjdDogbXVsdGlzZWxlY3RfMS5kZWZhdWx0LFxuICAgICAgICBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVuY2llczoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaHVtYW5pdGFyaWFuOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJ1ZGdldE5vdFByb3ZpZGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzdG9yZV8xLnVzZVN0b3JlKSgpO1xuICAgICAgICB2YXIgZGVmYXVsdEZvcm0gPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0Rm9ybTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkZWZhdWx0RXJyb3IgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0RXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZShrZXkpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGFjdGlvbnNfMS5BY3Rpb25UeXBlcy5VUERBVEVfREVGQVVMVF9WQUxVRVMsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVmYXVsdEZvcm0udmFsdWVba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybTogZGVmYXVsdEZvcm0sXG4gICAgICAgICAgICBkZWZhdWx0RXJyb3I6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgIHVwZGF0ZVN0b3JlOiB1cGRhdGVTdG9yZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBzdG9yZV8xID0gcmVxdWlyZShcIi4uLy4uL3N0b3JlXCIpO1xudmFyIGFjdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdG9yZS9zZXR0aW5nL2FjdGlvbnNcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIFNldHRpbmdEZWZhdWx0Rm9ybV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9TZXR0aW5nRGVmYXVsdEZvcm0udnVlXCIpKTtcbnZhciBTZXR0aW5nUHVibGlzaGluZ0Zvcm1fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZVwiKSk7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFNldHRpbmdEZWZhdWx0Rm9ybTogU2V0dGluZ0RlZmF1bHRGb3JtX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFNldHRpbmdQdWJsaXNoaW5nRm9ybTogU2V0dGluZ1B1Ymxpc2hpbmdGb3JtX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIExvYWRlcjogTG9hZGVyX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGN1cnJlbmNpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2VzOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGh1bWFuaXRhcmlhbjoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBvcmdhbml6YXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYnVkZ2V0Tm90UHJvdmlkZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdGFiID0gKDAsIHZ1ZV8xLnJlZikoJ3B1Ymxpc2gnKTtcbiAgICAgICAgdmFyIHN0b3JlID0gKDAsIHN0b3JlXzEudXNlU3RvcmUpKCk7XG4gICAgICAgIHZhciBsb2FkZXJWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8xLnJlZikoJycpO1xuICAgICAgICB2YXIgdG9hc3RUeXBlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgcHVibGlzaGluZ0Zvcm0gPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLnN0YXRlLnB1Ymxpc2hpbmdGb3JtOyB9KTtcbiAgICAgICAgdmFyIHB1Ymxpc2hpbmdJbmZvID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5zdGF0ZS5wdWJsaXNoaW5nSW5mbzsgfSk7XG4gICAgICAgIHZhciBwdWJsaXNoaW5nRXJyb3IgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLnN0YXRlLnB1Ymxpc2hpbmdFcnJvcjsgfSk7XG4gICAgICAgIHZhciBkZWZhdWx0Rm9ybSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUuZGVmYXVsdEZvcm07IH0pO1xuICAgICAgICB2YXIgZGVmYXVsdEVycm9yID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0RXJyb3I7IH0pO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZShuYW1lLCBrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChhY3Rpb25zXzEuQWN0aW9uVHlwZXNbbmFtZV0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSwgc2V0dGluZ0RhdGEsIGRlZmF1bHRWYWx1ZXMsIHB1Ymxpc2hlckluZm8sIGFjdGl2aXR5VmFsdWVzLCBrZXksIGtleSwga2V5O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xLmRlZmF1bHQuZ2V0KCcvc2V0dGluZy9kYXRhJyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gKF9hLnNlbnQoKSkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdEYXRhID0gZGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlcyA9IHNldHRpbmdEYXRhLmRlZmF1bHRfdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0dGluZ0RhdGEuZGVmYXVsdF92YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJJbmZvID0gc2V0dGluZ0RhdGEucHVibGlzaGluZ19pbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0dGluZ0RhdGEucHVibGlzaGluZ19pbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlWYWx1ZXMgPSBzZXR0aW5nRGF0YS5hY3Rpdml0eV9kZWZhdWx0X3ZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldHRpbmdEYXRhLmFjdGl2aXR5X2RlZmF1bHRfdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1Ymxpc2hlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gcHVibGlzaGVySW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUodHlwZW9mIHB1Ymxpc2hlckluZm9ba2V5XSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdVUERBVEVfUFVCTElTSElOR19GT1JNJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VQREFURV9QVUJMSVNIRVJfSU5GTycsIGtleSwgcHVibGlzaGVySW5mb1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVibGlzaGVySW5mby5hcGlfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSEVSX0lORk8nLCAnaXNWZXJpZmljYXRpb25SZXF1ZXN0ZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBkZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX0RFRkFVTFRfVkFMVUVTJywga2V5LCBkZWZhdWx0VmFsdWVzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0eVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhY3Rpdml0eVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUoJ1VQREFURV9ERUZBVUxUX1ZBTFVFUycsIGtleSwgYWN0aXZpdHlWYWx1ZXNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlVGFiKHBhZ2UpIHtcbiAgICAgICAgICAgIHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGFiLnZhbHVlID0gcGFnZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzdWJtaXREZWZhdWx0KCkge1xuICAgICAgICAgICAgZm9yICh2YXIgZGF0YSBpbiBkZWZhdWx0RXJyb3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX0RFRkFVTFRfRVJST1InLCBkYXRhLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KCcvc2V0dGluZy9zdG9yZS9kZWZhdWx0JywgZGVmYXVsdEZvcm0udmFsdWUpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnZhbHVlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdFR5cGUudmFsdWUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSEVSX0lORk8nLCByZXNwb25zZS5kYXRhLmhpZXJhcmNoaWFsLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBlIGluIGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX0RFRkFVTFRfRVJST1InLCBlLCBlcnJvcnNbZV1bMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzdWJtaXRQdWJsaXNoaW5nKHVybCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBkYXRhIGluIHB1Ymxpc2hpbmdFcnJvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSElOR19FUlJPUicsIGRhdGEsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KHVybCwgX19hc3NpZ24oX19hc3NpZ24oe30sIHB1Ymxpc2hpbmdJbmZvLnZhbHVlKSwgcHVibGlzaGluZ0Zvcm0udmFsdWUpKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX1BVQkxJU0hFUl9JTkZPJywgJ3B1Ymxpc2hlcl92ZXJpZmljYXRpb24nLCByZXNwb25zZS5kYXRhLnB1Ymxpc2hlcl92ZXJpZmljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX1BVQkxJU0hFUl9JTkZPJywgJ3Rva2VuX3ZlcmlmaWNhdGlvbicsIHJlc3BvbnNlLmRhdGEudG9rZW5fdmVyaWZpY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUoJ1VQREFURV9QVUJMSVNIRVJfSU5GTycsICdpc1ZlcmlmaWNhdGlvblJlcXVlc3RlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0b2FzdFZpc2liaWxpdHkudmFsdWUgPSBmYWxzZSk7IH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS52YWx1ZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3RUeXBlLnZhbHVlID0gcmVzcG9uc2Uuc3VjY2VzcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBlIGluIGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX1BVQkxJU0hJTkdfRVJST1InLCBlLCBlcnJvcnNbZV1bMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKHVybCkge1xuICAgICAgICAgICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9ICdzZXR0aW5nL3ZlcmlmeSc7IH1cbiAgICAgICAgICAgIGlmICh0YWIudmFsdWUgPT09ICdwdWJsaXNoJylcbiAgICAgICAgICAgICAgICBzdWJtaXRQdWJsaXNoaW5nKHVybCk7XG4gICAgICAgICAgICBpZiAodGFiLnZhbHVlID09PSAnZGVmYXVsdCcpXG4gICAgICAgICAgICAgICAgc3VibWl0RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICB0YWI6IHRhYixcbiAgICAgICAgICAgIGRlZmF1bHRFcnJvcjogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgcHVibGlzaGluZ0Vycm9yOiBwdWJsaXNoaW5nRXJyb3IsXG4gICAgICAgICAgICBzdG9yZTogc3RvcmUsXG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5OiBsb2FkZXJWaXNpYmlsaXR5LFxuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5OiB0b2FzdFZpc2liaWxpdHksXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSxcbiAgICAgICAgICAgIHRvYXN0VHlwZTogdG9hc3RUeXBlLFxuICAgICAgICAgICAgdG9nZ2xlVGFiOiB0b2dnbGVUYWIsXG4gICAgICAgICAgICBzdWJtaXRGb3JtOiBzdWJtaXRGb3JtLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBzdG9yZV8xID0gcmVxdWlyZShcIi4uLy4uL3N0b3JlXCIpO1xudmFyIGFjdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdG9yZS9zZXR0aW5nL2FjdGlvbnNcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgb3JnYW5pemF0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGVtaXRzOiBbJ3N1Ym1pdFB1Ymxpc2hpbmcnXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzLCBfYSkge1xuICAgICAgICB2YXIgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgIHZhciB0YWIgPSAoMCwgdnVlXzEucmVmKSgncHVibGlzaCcpO1xuICAgICAgICB2YXIgc3RvcmUgPSAoMCwgc3RvcmVfMS51c2VTdG9yZSkoKTtcbiAgICAgICAgdmFyIHB1Ymxpc2hpbmdGb3JtID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5zdGF0ZS5wdWJsaXNoaW5nRm9ybTsgfSk7XG4gICAgICAgIHZhciBwdWJsaXNoaW5nSW5mbyA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUucHVibGlzaGluZ0luZm87IH0pO1xuICAgICAgICB2YXIgcHVibGlzaGluZ0Vycm9yID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5zdGF0ZS5wdWJsaXNoaW5nRXJyb3I7IH0pO1xuICAgICAgICBmdW5jdGlvbiBzdWJtaXRQdWJsaXNoaW5nKCkge1xuICAgICAgICAgICAgZW1pdCgnc3VibWl0UHVibGlzaGluZycpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGF1dG9WZXJpZnkoKSB7XG4gICAgICAgICAgICBlbWl0KCdzdWJtaXRQdWJsaXNoaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlU3RvcmUoa2V5KSB7XG4gICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChhY3Rpb25zXzEuQWN0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hJTkdfRk9STSwge1xuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwdWJsaXNoaW5nRm9ybS52YWx1ZVtrZXldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlVGFiKCkge1xuICAgICAgICAgICAgdGFiLnZhbHVlID0gdGFiLnZhbHVlID09PSAncHVibGlzaCcgPyAnZGVmYXVsdCcgOiAncHVibGlzaCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYjogdGFiLFxuICAgICAgICAgICAgcHVibGlzaGluZ0Zvcm06IHB1Ymxpc2hpbmdGb3JtLFxuICAgICAgICAgICAgcHVibGlzaGluZ0luZm86IHB1Ymxpc2hpbmdJbmZvLFxuICAgICAgICAgICAgcHVibGlzaGluZ0Vycm9yOiBwdWJsaXNoaW5nRXJyb3IsXG4gICAgICAgICAgICBzdG9yZTogc3RvcmUsXG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBzdWJtaXRQdWJsaXNoaW5nOiBzdWJtaXRQdWJsaXNoaW5nLFxuICAgICAgICAgICAgdG9nZ2xlVGFiOiB0b2dnbGVUYWIsXG4gICAgICAgICAgICB1cGRhdGVTdG9yZTogdXBkYXRlU3RvcmUsXG4gICAgICAgICAgICBhdXRvVmVyaWZ5OiBhdXRvVmVyaWZ5LFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vLyBDb21wb25lbnRzXG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIFRhYmxlTGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL1RhYmxlTGlzdC52dWVcIikpO1xuLy8gcmVmXG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnT3JnYW5pc2F0aW9uTGlzdCcsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxvYWRlciA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6ICdQbGVhc2UgV2FpdCcsXG4gICAgICAgIH0pO1xuICAgICAgICAvL0JyZWFkY3J1bWIgZGF0YVxuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdPcmdhbmlzYXRpb25zJyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gcHJvdmlkZVxuICAgICAgICAoMCwgdnVlXzIucHJvdmlkZSkoJ2xvYWRlcicsIGxvYWRlcik7XG4gICAgICAgICgwLCB2dWVfMi5wcm92aWRlKSgndG9hc3REYXRhJywgdG9hc3RNZXNzYWdlKTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbG9hZGVyOiBsb2FkZXIsIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSwgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCwgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LCBUYWJsZUxpc3Q6IFRhYmxlTGlzdF92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBZG1pbkJhcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbk5hbWU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN3aXRjaCBCYWNrXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3dpdGNoQmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKFwiL2xpc3Qtb3JnYW5pc2F0aW9uc1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgc3dpdGNoQmFjazogc3dpdGNoQmFjayB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG4vLyByZWFjdGl2aXR5XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVGFibGVMaXN0JyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIuaW5qZWN0KSgndG9hc3REYXRhJyk7XG4gICAgICAgIHZhciBsb2FkZXIgPSAoMCwgdnVlXzIuaW5qZWN0KSgnbG9hZGVyJyk7XG4gICAgICAgIC8vdHlwZWZhY2VcbiAgICAgICAgdmFyIG9yZ2FuaXNhdGlvbkRhdGEgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAnZmV0Y2hpbmcnLFxuICAgICAgICB9KTtcbiAgICAgICAgLy9saWZlY3ljbGVcbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGZldGNoT3JnYW5pc2F0aW9uKDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGZXRjaGluZyBvcmdhbml6YXRpb24gbGlzdFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGN1cnJlbnRVUkwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgdmFyIGZldGNoT3JnYW5pc2F0aW9uID0gZnVuY3Rpb24gKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgIGlmIChjdXJyZW50VVJMLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5kcG9pbnQgPSBcIi9saXN0LW9yZ2FuaXNhdGlvbnMvcGFnZS9cIi5jb25jYXQoYWN0aXZlX3BhZ2UpLmNvbmNhdChxdWVyeVN0cmluZyk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KGVuZHBvaW50KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uRGF0YS5zdGF0dXMgPSAnZW1wdHknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uRGF0YS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25EYXRhLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm94eSBVc2VyXG4gICAgICAgICAqL1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgcHJveHlVc2VyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICBsb2FkZXIuc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlci50ZXh0ID0gJ1Byb3h5IExvZ2luJztcbiAgICAgICAgICAgIHZhciBlbmRwb2ludCA9IFwiL3Byb3h5LW9yZ2FuaXNhdGlvbi9cIi5jb25jYXQoaWQpO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChlbmRwb2ludCkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSgnL2FjdGl2aXRpZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogU29ydGluZyBCeSB1cGRhdGUgb25cbiAgICAgICAgICovXG4gICAgICAgIHZhciBxdWVyeSA9ICcnLCBkZWZhdWx0U29ydERpcmVjdGlvbiA9ICdhc2NlbmRpbmcnLCBzb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgICB2YXIgb3JkZXJUeXBlID0gKDAsIHZ1ZV8yLnJlZikoJycpO1xuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcbiAgICAgICAgb3JkZXJUeXBlLnZhbHVlID0gKF9iID0gdXJsUGFyYW1zLmdldCgnb3JkZXJCeScpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgdmFyIHNvcnRpbmdEaXJlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJztcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNvcnRCeSA9IGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gKF9hID0gdXJsUGFyYW1zLmdldCgncScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uID0gdXJsUGFyYW1zLmdldCgnZGlyZWN0aW9uJykgPT09ICdkZXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiP3E9XCIuY29uY2F0KHF1ZXJ5LCBcIiZvcmRlckJ5PVwiKS5jb25jYXQob3JkZXIsIFwiJmRpcmVjdGlvbj1cIikuY29uY2F0KHNvcnREaXJlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSwgbG9hZGVyOiBsb2FkZXIsIG9yZ2FuaXNhdGlvbkRhdGE6IG9yZ2FuaXNhdGlvbkRhdGEsIGN1cnJlbnRVUkw6IGN1cnJlbnRVUkwsIGZldGNoT3JnYW5pc2F0aW9uOiBmZXRjaE9yZ2FuaXNhdGlvbiwgcHJveHlVc2VyOiBwcm94eVVzZXIsIHF1ZXJ5OiBxdWVyeSwgZGVmYXVsdFNvcnREaXJlY3Rpb246IGRlZmF1bHRTb3J0RGlyZWN0aW9uLCBzb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLCBvcmRlclR5cGU6IG9yZGVyVHlwZSwgcXVlcnlTdHJpbmc6IHF1ZXJ5U3RyaW5nLCB1cmxQYXJhbXM6IHVybFBhcmFtcywgc29ydGluZ0RpcmVjdGlvbjogc29ydGluZ0RpcmVjdGlvbiwgc29ydEJ5OiBzb3J0QnksIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBQYWdpbmF0aW9uOiBUYWJsZVBhZ2luYXRpb25fdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgZW1haWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIEVtYWlsVmVyaWZpY2F0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZVwiKSk7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3RcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBlbmNyeXB0aW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZW5jcnlwdGlvblwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBFbWFpbFZlcmlmaWNhdGlvbjogRW1haWxWZXJpZmljYXRpb25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgTXVsdGlzZWxlY3Q6IG11bHRpc2VsZWN0XzEuZGVmYXVsdCxcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSAoMCwgdnVlXzEucmVmKSgxKTtcbiAgICAgICAgdmFyIHB1Ymxpc2hlckV4aXN0cyA9ICgwLCB2dWVfMS5yZWYpKHRydWUpO1xuICAgICAgICB2YXIgaXNMb2FkZXJWaXNpYmxlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdGV4dGFyZWEgPSAoMCwgdnVlXzEucmVmKShudWxsKTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgcHVibGlzaGVyX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBwdWJsaXNoZXJfaWQ6IFwiXCIsXG4gICAgICAgICAgICBjb3VudHJ5OiBcIlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2FnZW5jeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9udW1iZXI6IFwiXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIlwiLFxuICAgICAgICAgICAgcHVibGlzaGVyX3R5cGU6IFwiXCIsXG4gICAgICAgICAgICBsaWNlbnNlX2lkOiBcIlwiLFxuICAgICAgICAgICAgaW1hZ2VfdXJsOiBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgICAgICBjb250YWN0X2VtYWlsOiBcIlwiLFxuICAgICAgICAgICAgd2Vic2l0ZTogXCJcIixcbiAgICAgICAgICAgIGFkZHJlc3M6IFwiXCIsXG4gICAgICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgICAgICByZWNvcmRfZXhjbHVzaW9uczogXCJcIixcbiAgICAgICAgICAgIHVzZXJuYW1lOiBcIlwiLFxuICAgICAgICAgICAgZnVsbF9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgZW1haWw6IFwiXCIsXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpYXRpRXJyb3IgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHt9KTtcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBwdWJsaXNoZXJfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9pZDogXCJcIixcbiAgICAgICAgICAgIGNvdW50cnk6IFwiXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25fYWdlbmN5OiBcIlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uX251bWJlcjogXCJcIixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiXCIsXG4gICAgICAgICAgICBwdWJsaXNoZXJfdHlwZTogXCJcIixcbiAgICAgICAgICAgIGxpY2Vuc2VfaWQ6IFwiXCIsXG4gICAgICAgICAgICBpbWFnZV91cmw6IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgIGNvbnRhY3RfZW1haWw6IFwiXCIsXG4gICAgICAgICAgICB3ZWJzaXRlOiBcIlwiLFxuICAgICAgICAgICAgYWRkcmVzczogXCJcIixcbiAgICAgICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgICAgICAgIHJlY29yZF9leGNsdXNpb25zOiBcIlwiLFxuICAgICAgICAgICAgdXNlcm5hbWU6IFwiXCIsXG4gICAgICAgICAgICBmdWxsX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBlbWFpbDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBcIlwiLFxuICAgICAgICAgICAgc3RlcDogXCIxXCIsXG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcm1EYXRhLmNvdW50cnk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLnJlZ2lzdHJhdGlvbl9hZ2VuY3kgPSBcIlwiO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gcmVzaXplKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnN0eWxlLmhlaWdodCA9IFwiXCIuY29uY2F0KGV2ZW50LnRhcmdldC5zY3JvbGxIZWlnaHQsIFwicHhcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlZ2lzdHJhdGlvbl9hZ2VuY3kgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhZ2VuY2llcyA9IHByb3BzLnR5cGVzLnJlZ2lzdHJhdGlvbkFnZW5jeTtcbiAgICAgICAgICAgIGlmIChmb3JtRGF0YS5jb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHVuY2F0ZWdvcml6ZWRfMSA9IFtcIlhJXCIsIFwiWFJcIl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhZ2VuY2llcykuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2FbMF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuc3RhcnRzV2l0aChmb3JtRGF0YS5jb3VudHJ5KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5jYXRlZ29yaXplZF8xLnNvbWUoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGtleS5zdGFydHNXaXRoKGspOyB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdlbmNpZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNUZXh0RmllbGQgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZmllbGRUeXBlLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKChmaWVsZFR5cGUgPT09IFwidGV4dFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJwYXNzd29yZFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJlbWFpbFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgIT0gXCJpZGVudGlmaWVyXCIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBjaGVja1N0ZXAgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZm9ybVN0ZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoZm9ybVN0ZXAudG9TdHJpbmcoKSkgPT09IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIG9iamVjdCB3aXRoIG11bHRpLXN0ZXAgZm9ybSBpbmZvcm1hdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlZ2lzdGVyRm9ybSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgMToge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIlB1Ymxpc2hlciBJbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBQdWJsaXNoZXIgaW4gSUFUSSBQdWJsaXNoZXJcIixcbiAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIldlIHJlZmVyIHRvIG9yZ2FuaXNhdGlvbnMgd2hvIHB1Ymxpc2ggSUFUSSBkYXRhIGFzICdQdWJsaXNoZXJzJy4gQmVmb3JlIHB1Ymxpc2hpbmcgZGF0YSwgYWxsIG9yZ2FuaXNhdGlvbnMgbmVlZCB0aGVpciBvd24gJ1B1Ymxpc2hlciBBY2NvdW50JyBvbiB0aGUgSUFUSSBSZWdpc3RyeSAoaWF0aXJlZ2lzdHJ5Lm9yZykuIEVudGVyIHlvdXIgb3JnYW5pc2F0aW9uJ3MgZGF0YSBoZXJlIGFuZCB3ZSdsbCBjcmVhdGUgeW91ciBvcmdhbmlzYXRpb24ncyBQdWJsaXNoZXIgQWNjb3VudCBmb3IgeW91LiBUaGVzZSBkZXRhaWxzIHdpbGwgYWxzbyBiZSBzYXZlZCBoZXJlIGluIElBVEkgUHVibGlzaGVyLiBcIixcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaGVyX25hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlB1Ymxpc2hlciBOYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInB1Ymxpc2hlcl9uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHlvdXIgb3JnYW5pc2F0aW9uIG5hbWUgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGlzaGVyLW5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJUaGUgbmFtZSBvZiB5b3VyIG9yZ2FuaXNhdGlvbiBwdWJsaXNoaW5nIHRoZSBkYXRhLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJjb2wtc3Bhbi0yIG1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJfaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlB1Ymxpc2hlciBJRFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwdWJsaXNoZXJfaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgeW91ciBvcmdhbmlzYXRpb24gSUQgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGlzaGVyLWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiUHJvdmlkZSBhIHVuaXF1ZSBJRCBmb3IgeW91ciBvcmdhbmlzYXRpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgbG9uZyBhbmQgdXNlIGxvd2VyIGNhc2UgbGV0dGVycy4gWW91IGNhbiBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGFsc28gLSAoZGFzaCkgYW5kIF8gKHVuZGVyc2NvcmUpLiBXaGVyZSBwb3NzaWJsZSB1c2UgYSBzaG9ydCBhYmJyZXZpYXRpb24gb2YgeW91ciBvcmdhbmlzYXRpb24ncyBuYW1lLCBmb3IgZXhhbXBsZTogJ25lZl9tYWxpJyBmb3IgTmVhciBFYXN0IEZvdW5kYXRpb24gTWFsaS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkNvdW50cnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VsZWN0IGEgQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiY291bnRyeV9zZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIkFkZCB0aGUgbG9jYXRpb24gb2YgeW91ciBvcmdhbmlzYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy50eXBlcy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9hZ2VuY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9yZ2FuaXNhdGlvbiBSZWdpc3RyYXRpb24gQWdlbmN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlZ2lzdHJhdGlvbl9hZ2VuY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjdCBhbiBPcmdhbmlzYXRpb24gUmVnaXN0cmF0aW9uIEFnZW5jeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicmVnaXN0cmF0aW9uLWFnZW5jeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlNlbGVjdCB0aGUgYWdlbmN5IGluIHlvdXIgY291bnRyeSB3aGVyZSB5b3VyIG9yZ2FuaXNhdGlvbiBpcyByZWdpc3RlcmVkLiBJZiB5b3UgZG8gbm90IGtub3cgdGhpcyBpbmZvcm1hdGlvbiBwbGVhc2UgZW1haWwgPGEgaHJlZj0nbWFpbHRvOnN1cHBvcnRAaWF0aXN0YW5kYXJkLm9yZycgdGFyZ2V0PSdfYmxhbmsnPnN1cHBvcnRAaWF0aXN0YW5kYXJkLm9yZzwvYT5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiByZWdpc3RyYXRpb25fYWdlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9udW1iZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlJlZ2lzdHJhdGlvbiBOdW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVnaXN0cmF0aW9uX251bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSB5b3VyIFJlZ2lzdHJhdGlvbiBOdW1iZXIgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicmVnaXN0cmF0aW9uLW51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlByb3ZpZGUgdGhlIHJlZ2lzdHJhdGlvbiBudW1iZXIgZm9yIHlvdXIgb3JnYW5pc2F0aW9uIHRoYXQgaGFzIGJlZW4gcHJvdmlkZWQgYnkgb3JnYW5pc2F0aW9uIHJlZ2lzdHJhdGlvbiBhZ2VuY3kuIElmIHlvdSBkbyBub3Qga25vdyB0aGlzIHBsZWFzZSBlbWFpbCA8YSBocmVmPSdtYWlsdG86c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnJyB0YXJnZXQ9J19ibGFuayc+c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnPC9hPi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiZm9yIGUuZy4gMTIzNDU2XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIklBVEkgT3JnYW5pc2F0aW9uYWwgSWRlbnRpZmllclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogJ1RoZSBPcmdhbmlzYXRpb24gSWRlbnRpZmllciBpcyBhIHVuaXF1ZSBjb2RlIGZvciB5b3VyIG9yZ2FuaXNhdGlvbi4gVGhpcyBpcyBnZW5lcmVhdGVkIGZyb20gdGhlIE9yZ2FuaXNhdGlvbiBSZWdpc3RyYXRpb24gQWdlbmN5IGFuZCBSZWdpc3RyYXRpb24gTnVtYmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWFkOiAgPGEgaHJlZj1cImh0dHA6Ly9pYXRpc3RhbmRhcmQub3JnL2VuL2d1aWRhbmNlL3ByZXBhcmluZy1vcmdhbmlzYXRpb24vb3JnYW5pc2F0aW9uLWFjY291bnQvaG93LXRvLWNyZWF0ZS15b3VyLWlhdGktb3JnYW5pc2F0aW9uLWlkZW50aWZpZXIvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+SG93IHRvIGNyZWF0ZSB5b3VyIElBVEkgb3JnYW5pc2F0aW9uIGlkZW50aWZpZXIuPC9hPicsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlRoaXMgaXMgYXV0b2dlbmVyYXRlZCwgcGxlYXNlIG1ha2Ugc3VyZSB0byBmaWxsIHRoZSBhYm92ZSBmaWVsZHMgY29ycmVjdGx5LlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJfdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiUHVibGlzaGVyIFR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicHVibGlzaGVyX3R5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjdCBhIHB1Ymxpc2hlciB0eXBlIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGlzaGVyLXR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogJ1NlbGVjdCB0aGUgdHlwZSB0aGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgb3JnYW5pc2F0aW9uLiAgPGEgaHJlZj1cImh0dHBzOi8vaWF0aXN0YW5kYXJkLm9yZy9lbi9pYXRpLXN0YW5kYXJkLzIwMy9jb2RlbGlzdHMvb3JnYW5pc2F0aW9udHlwZS9cIiB0YXJnZXQ9XCJfYmxhbmtcIj4gUmVhZCBtb3JlIG9uIE9yZ2FuaXNhdGlvbiB0eXBlcy48L2E+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy50eXBlcy5wdWJsaXNoZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VfaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkRhdGEgTGljZW5zZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJsaWNlbnNlX2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJTZWxlY3QgYSBEYXRhIExpY2Vuc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImRhdGEtbGljZW5zZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIiBTZWxlY3QgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggeW91ciBkYXRhIGlzIGJlaW5nIHB1Ymxpc2hlZC4gSUFUSSBpcyBhbiBvcGVuIGRhdGEgc3RhbmRhcmQgYW5kIHJlcXVpcmVzIHlvdSB0byBtYWtlIHlvdXIgZGF0YSBhdmFpbGFibGUgdW5kZXIgYW4gb3BlbiBsaWNlbmNlIHNvIGl0IGNhbiBiZSBmcmVlbHkgdXNlZC4gT25lIG9mIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBsaWNlbnNlcyBpcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLiA8YSBocmVmPSdodHRwczovL2lhdGlzdGFuZGFyZC5vcmcvZW4vZ3VpZGFuY2Uvc3RhbmRhcmQtb3ZlcnZpZXcvcHJlcGFyaW5nLXlvdXItb3JnYW5pc2F0aW9uLWRhdGEtcHVibGljYXRpb24vaG93LXRvLWxpY2Vuc2UteW91ci1kYXRhLycgdGFyZ2V0PSdfYmxhbmsnID4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVhZDogSG93IHRvIGxpY2Vuc2UgeW91ciBkYXRhLjwvYT5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy50eXBlcy5kYXRhTGljZW5zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMiByZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpbWFnZV91cmw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlB1Ymxpc2hlciBMb2dvIFVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJpbWFnZV91cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkZvciBlLmcuIGh0dHA6Ly9teWxvZ28uY29tIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGlzaGVyLWxvZ28tdXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIiBQcm92aWRlIGEgbGluayB0byBhbiBpbWFnZSB0byB5b3VyIG9yZ2FuaXNhdGlvbidzIGxvZ28gKE9wdGltdW0gc2l6ZTogMjAwIHggMTIwIHB4KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTIgcmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9yZ2FuaXphdGlvbiBEZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSBEZXNjcmlwdGlvbiBoZXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJvcmdhbml6YXRpb24tZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiIFByb3ZpZGUgYSBzaG9ydCBkZXNjcmlwdGlvbiBhYm91dCB5b3VyIG9yZ2FuaXNhdGlvbi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgY29sLXNwYW4tMiBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQ29udGFjdCBJbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBQdWJsaXNoZXIgaW4gSUFUSSBQdWJsaXNoZXJcIixcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFjdF9lbWFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiQ29udGFjdCBFbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJjb250YWN0X2VtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImNvbnRhY3QtZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJQbGVhc2UgYWRkIGEgY29udGFjdCBlbWFpbCBhZGRyZXNzIGZvciB5b3VyIG9yZ2FuaXNhdGlvbi4gUGxlYXNlIG5vdGUgdGhhdCBJQVRJIGlzIGFuIG9wZW4gZGF0YSBzdGFuZGFyZCBhbmQgdGhlIGVtYWlsIHByb3ZpZGVkIGhlcmUgd2lsbCBiZSB2aXNpYmxlIHRvIG90aGVycyBvbiB0aGUgSUFUSSBSZWdpc3RyeS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCAgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJXZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIndlYnNpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkZvciBlLmcuIGh0dHA6Ly9teXdlYnNpdGUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ3ZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIkFkZCB0aGUgVVJMIHRvIHlvdXIgb3JnYW5pc2F0aW9uJ3Mgd2Vic2l0ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiYWRkcmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSBhZGRyZXNzIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiUHJvdmlkZSBhIGNvbnRhY3QgYWRkcmVzcyBmb3IgeW91ciBvcmdhbmlzYXRpb24uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGNvbC1zcGFuLTIgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMzoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIlB1Ymxpc2hpbmcgQWRpdGlvbmFsIEluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBhZG1pbiBhY2NvdW50IGluIElBVEkgUHVibGlzaGVyXCIsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU291cmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNvdXJjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VsZWN0IGEgU291cmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb250YWN0LWVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiU2VsZWN0IGFuIG9wdGlvbjo8YnI+UHJpbWFyeSAtIHlvdXIgb3JnYW5pc2F0aW9uIGlzIHB1Ymxpc2hpbmcgaXRzIG93biBvciAoYXNzb2NpYXRlZCBvcmdhbmlzYXRpb25zJykgZGF0YSA8YnI+U2Vjb25kYXJ5IC0geW91ciBvcmdhbmlzYXRpb24gaXMgcmVwcm9kdWNpbmcgZGF0YSBvbiB0aGUgYWN0aXZpdGllcyBvZiBhbm90aGVyIG9yZ2FuaXNhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHByb3BzLnR5cGVzLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRfZXhjbHVzaW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiUmVjb3JkIEV4Y2x1c2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVjb3JkX2V4Y2x1c2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgUmVjb3JkIEV4Y2x1c2lvbnMgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicmVjb3JkLWV4Y2x1c2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiRG9lcyB5b3VyIG9yZ2FuaXNhdGlvbiBoYXZlIGFuIGV4Y2x1c2lvbiBwb2xpY3kgdGhhdCBwcm92aWRlIGRldGFpbHMgb24gd2hhdCBkYXRhIHRoYXQgaXQgY2Fubm90IHB1Ymxpc2g/IEZvciBleGFtcGxlIGFuIG9yZ2FuaXNhdGlvbiBtYXkgbm90IGJlIGFibGUgdG8gcHVibGlzaCBkYXRhIGJlY2F1c2Ugb2YgcG9saXRpY2FsIHNlbnNpdGl2aXR5IGlzc3VlcyBvciBpZiBpbmZvcm1hdGlvbiBpcyBjb21tZXJjaWFsbHkgcmVzdHJpY3RlZC4gUGxlYXNlIHByb3ZpZGUgZGV0YWlscyBoZXJlIGFib3V0IHdoYXQgZGF0YSB5b3VyIG9yZ2FuaXNhdGlvbiBuZWVkcyB0byBleGNsdWRlIChpZiBhbnkpLCBhbmQgYSBVUkwgdG8geW91ciBvcmdhbmlzYXRpb24ncyBleGNsdXNpb24gcG9saWN5IChpZiBpdCBoYXMgb25lKS48YSBocmVmPSdodHRwczovL2lhdGlzdGFuZGFyZC5vcmcvZW4vZ3VpZGFuY2Uvc3RhbmRhcmQtb3ZlcnZpZXcvcHJlcGFyaW5nLXlvdXItb3JnYW5pc2F0aW9uLWRhdGEtcHVibGljYXRpb24vaW5mb3JtYXRpb24tYW5kLWRhdGEteW91LWNhbnQtcHVibGlzaC1leGNsdXNpb25zLycgdGFyZ2V0PSdfYmxhbmsnPiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWFkOiBJbmZvcm1hdGlvbiBhbmQgZGF0YSB5b3UgY2FuJ3QgcHVibGlzaCAoZXhjbHVzaW9ucyk8L2E+XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00ICBjb2wtc3Bhbi0yIGxnOm1iLTZcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDQ6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJBZG1pbmlzdHJhdG9yIEluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByb3ZpZGUgeW91ciBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYW4gYWRtaW4gYWNjb3VudCBoZXJlIG9uIElBVEkgUHVibGlzaGVyIGFuZCBJQVRJIFJlZ2lzdHJ5IGF0IG9uY2UuXCIsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJVc2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSB1c2VybmFtZSBoZXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIllvdSB3aWxsIG5lZWQgdGhpcyBsYXRlciB0byBsb2dpbiBpbnRvIElBVEkgUHVibGlzaGVyLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbF9uYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJGdWxsIE5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZnVsbF9uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHlvdXIgZnVsbCBuYW1lIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImZ1bGwtbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJjb2wtc3RhcnQtMSBtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkVtYWlsIEFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgdmFsaWQgZW1haWwgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiUGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgcGFzc3dvcmQgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIk1pbmltdW0gbGVuZ3RoOiA2IGNoYXJhY3RlcnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkNvbmZpcm0gUGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicGFzc3dvcmRfY29uZmlybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHBhc3N3b3JkIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInBhc3N3b3JkLWNvbmZpcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiU2hvdWxkIG1hdGNoIHRoZSBwYXNzd29yZCBhYm92ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA1OiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRW1haWwgVmVyaWZpY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsZWFzZSB2ZXJpZnkgYW5kIGFjdGl2YXRlIHlvdXIgSUFUSSBQdWJsaXNoZXIgYWNjb3VudCB0aHJvdWdoIHlvdXIgcHJvdmlkZWQgZW1haWxcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlIFZhbGlkYXRpb24gZXJyb3JzIGZyb20gYXBpIGludG8gZXJyb3JEYXRhIGFycmF5XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWYWxpZGF0aW9uRXJyb3JzKGVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNsZWFuVmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICAgICAgZm9yICh2YXIgZmllbGQgaW4gZXJyb3JEYXRhKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhW2ZpZWxkXSA9IGVycm9yUmVzcG9uc2VbZmllbGRdID8gZXJyb3JSZXNwb25zZVtmaWVsZF1bMF0gOiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICogVXBkYXRlIFZhbGlkYXRpb24gZXJyb3JzIGZyb20gYXBpIGludG8gZXJyb3JEYXRhIGFycmF5XG4gICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gY2xlYW5WYWxpZGF0aW9uRXJyb3JzKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgZmllbGQgaW4gZXJyb3JEYXRhKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhW2ZpZWxkXSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZSBJQVRJIGFuZCBzeXN0ZW0gRXJyb3JcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVycm9ycyhlcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyhlcnJvckRhdGEpLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT09ICcnOyB9KSB8fCBzdGVwLnZhbHVlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpYXRpRXJyb3IsIHR5cGVvZiAoZXJyb3JSZXNwb25zZSkgPT09ICdzdHJpbmcnID8geyAnZXJyb3InOiBlcnJvclJlc3BvbnNlIH0gOiBlcnJvclJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5JYXRpRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgfSwgMzUwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsZWFuSWF0aUVycm9ycygpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGVyciBpbiBpYXRpRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaWF0aUVycm9yW2Vycl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFZlcmlmaWVzIHB1Ymxpc2hlclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdmVyaWZ5UHVibGlzaGVyKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3JtRGF0YS5pZGVudGlmaWVyID0gXCJcIi5jb25jYXQoZm9ybURhdGEucmVnaXN0cmF0aW9uX2FnZW5jeSwgXCItXCIpLmNvbmNhdChmb3JtRGF0YS5yZWdpc3RyYXRpb25fbnVtYmVyKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLnN0ZXAgPSBcIjFcIjtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvaWF0aS9yZWdpc3Rlci9wdWJsaXNoZXJcIiwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1EYXRhKSwgZm9ybSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcyhcImFjdGl2aXRpZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9hY3Rpdml0aWVzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hlckV4aXN0cy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9ICFyZXNwb25zZS5zdWNjZXNzIHx8IFwiZXJyb3JzXCIgaW4gcmVzcG9uc2UgPyByZXNwb25zZS5lcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIxXCJdLmlzX2NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKFwicHVibGlzaGVyX2Vycm9yXCIgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaGVyRXhpc3RzLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIxXCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RlcCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbGlkYXRpb25FcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnIpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdHMgcmVnaXN0cmF0aW9uIEZvcm1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHZlcmlmeUNvbnRhY3RJbmZvcm1hdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybURhdGEuc3RlcCA9IFwiMlwiO1xuICAgICAgICAgICAgdmFyIGZvcm0gPSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmQsIChfYSA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIiksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9iID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi9pYXRpL3JlZ2lzdGVyL2NvbnRhY3RcIiwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1EYXRhKSwgZm9ybSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcyhcImFjdGl2aXRpZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9hY3Rpdml0aWVzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9ybVtcIjJcIl0uaXNfY29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjbGVhblZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiMlwiXS5pc19jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0ZXAoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdHMgcmVnaXN0cmF0aW9uIEZvcm1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHZlcmlmeUFkZGl0aW9uYWxJbmZvcm1hdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybURhdGEuc3RlcCA9IFwiM1wiO1xuICAgICAgICAgICAgdmFyIGZvcm0gPSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmQsIChfYSA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIiksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9iID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi9pYXRpL3JlZ2lzdGVyL2FkZGl0aW9uYWxcIiwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1EYXRhKSwgZm9ybSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcyhcImFjdGl2aXRpZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9hY3Rpdml0aWVzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9ybVtcIjNcIl0uaXNfY29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjbGVhblZhbGlkYXRpb25FcnJvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiM1wiXS5pc19jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0ZXAoMyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdHMgcmVnaXN0cmF0aW9uIEZvcm1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1EYXRhLnN0ZXAgPSBcIjRcIjtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvaWF0aS9yZWdpc3RlclwiLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZm9ybURhdGEpLCBmb3JtKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXF1ZXN0LnJlc3BvbnNlVVJMLmluY2x1ZGVzKFwiYWN0aXZpdGllc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2FjdGl2aXRpZXNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9ICFyZXNwb25zZS5zdWNjZXNzIHx8IFwiZXJyb3JzXCIgaW4gcmVzcG9uc2UgPyByZXNwb25zZS5lcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZGF0aW9uRXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICAgICAgY2xlYW5JYXRpRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpYXRpRXJyb3IsIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiNFwiXS5pc19jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCI0XCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RlcCg0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudFN0ZXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN0ZXAoY3VycmVudF9zdGVwKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudF9zdGVwID09PSBzdGVwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3RlcC52YWx1ZSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjYWxscyBzdWJtaXQgZnVuY3Rpb24gYmFzZWQgb24gY3VycmVudCBzdGVwIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnb1RvTmV4dEZvcm0oKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0ZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHZlcmlmeVB1Ymxpc2hlcigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHZlcmlmeUNvbnRhY3RJbmZvcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHZlcmlmeUFkZGl0aW9uYWxJbmZvcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdEZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ29Ub1ByZXZpb3VzRm9ybSgpIHtcbiAgICAgICAgICAgIGNsZWFuSWF0aUVycm9ycygpO1xuICAgICAgICAgICAgc3RlcC52YWx1ZSAtPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWdpc3RlckZvcm06IHJlZ2lzdGVyRm9ybSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICAgICAgcHVibGlzaGVyRXhpc3RzOiBwdWJsaXNoZXJFeGlzdHMsXG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGU6IGlzTG9hZGVyVmlzaWJsZSxcbiAgICAgICAgICAgIGdvVG9OZXh0Rm9ybTogZ29Ub05leHRGb3JtLFxuICAgICAgICAgICAgZ29Ub1ByZXZpb3VzRm9ybTogZ29Ub1ByZXZpb3VzRm9ybSxcbiAgICAgICAgICAgIGdldEN1cnJlbnRTdGVwOiBnZXRDdXJyZW50U3RlcCxcbiAgICAgICAgICAgIGNoZWNrU3RlcDogY2hlY2tTdGVwLFxuICAgICAgICAgICAgaWF0aUVycm9yOiBpYXRpRXJyb3IsXG4gICAgICAgICAgICBpc1RleHRGaWVsZDogaXNUZXh0RmllbGQsXG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBzdGVwOiBzdGVwLFxuICAgICAgICAgICAgcmVzaXplOiByZXNpemUsXG4gICAgICAgICAgICB0ZXh0YXJlYTogdGV4dGFyZWEsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1B1Ymxpc2hpbmdDaGVja2xpc3QnLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJNb2RlbCgpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvcGVuQWRkTW9kZWwnLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IHRyaWdnZXJNb2RlbDogdHJpZ2dlck1vZGVsIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIEVtYWlsVmVyaWZpY2F0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZVwiKSk7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3RcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBlbmNyeXB0aW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZW5jcnlwdGlvblwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBFbWFpbFZlcmlmaWNhdGlvbjogRW1haWxWZXJpZmljYXRpb25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgTXVsdGlzZWxlY3Q6IG11bHRpc2VsZWN0XzEuZGVmYXVsdCxcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvdW50cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWdlbmN5OiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBzdGVwID0gKDAsIHZ1ZV8xLnJlZikoMSk7XG4gICAgICAgIHZhciBwdWJsaXNoZXJFeGlzdHMgPSAoMCwgdnVlXzEucmVmKSh0cnVlKTtcbiAgICAgICAgdmFyIGlzTG9hZGVyVmlzaWJsZSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGFnZW5jeSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5hZ2VuY3k7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgcHVibGlzaGVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgY291bnRyeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9hZ2VuY3k6IFwiXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25fbnVtYmVyOiBcIlwiLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCJcIixcbiAgICAgICAgICAgIHVzZXJuYW1lOiBcIlwiLFxuICAgICAgICAgICAgZnVsbF9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgZW1haWw6IFwiXCIsXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmb3JtRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgcHVibGlzaGVyX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBwdWJsaXNoZXJfaWQ6IFwiXCIsXG4gICAgICAgICAgICBjb3VudHJ5OiBcIlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2FnZW5jeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9udW1iZXI6IFwiXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIlwiLFxuICAgICAgICAgICAgdXNlcm5hbWU6IFwiXCIsXG4gICAgICAgICAgICBmdWxsX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBlbWFpbDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBmb3JtRGF0YS5jb3VudHJ5OyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5yZWdpc3RyYXRpb25fYWdlbmN5ID0gXCJcIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZWdpc3RyYXRpb25fYWdlbmN5ID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYWdlbmNpZXMgPSBhZ2VuY3kudmFsdWU7XG4gICAgICAgICAgICBpZiAoZm9ybURhdGEuY291bnRyeSkge1xuICAgICAgICAgICAgICAgIHZhciB1bmNhdGVnb3JpemVkXzEgPSBbXCJYSVwiLCBcIlhSXCJdO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYWdlbmNpZXMpLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoZm9ybURhdGEuY291bnRyeSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuY2F0ZWdvcml6ZWRfMS5zb21lKGZ1bmN0aW9uIChrKSB7IHJldHVybiBrZXkuc3RhcnRzV2l0aChrKTsgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFnZW5jaWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlzVGV4dEZpZWxkID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpZWxkVHlwZSwgZmllbGROYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoZmllbGRUeXBlID09PSBcInRleHRcIiB8fCBmaWVsZFR5cGUgPT09IFwicGFzc3dvcmRcIiB8fCBmaWVsZFR5cGUgPT09IFwiZW1haWxcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lICE9IFwiaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2hlY2tTdGVwID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZvcm1TdGVwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGZvcm1TdGVwLnRvU3RyaW5nKCkpID09PSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZWdpc3RlckZvcm0gPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIDE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJQdWJsaXNoZXIgSW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgICBpc19jb21wbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIGEgUHVibGlzaGVyIGluIElBVEkgUHVibGlzaGVyXCIsXG4gICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgb3JnYW5pc2F0aW9uLiBZb3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24gdGhhdCB5b3UgdXNlZCB0byBjcmVhdGUgeW91ciBQdWJsaXNoZXIgQWNjb3VudCBvbiB0aGUgSUFUSSBSZWdpc3RyeSAoaWF0aXJlZ2lzdHJ5Lm9yZykuXCIsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlcl9uYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJQdWJsaXNoZXIgTmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwdWJsaXNoZXJfbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSB5b3VyIFB1Ymxpc2hlciBOYW1lIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInB1Ymxpc2hlci1uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiUHJvdmlkZSB0aGUgbmFtZSBvZiB5b3VyIG9yZ2FuaXNhdGlvbi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiY29sLXNwYW4tMiBtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaGVyX2lkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJQdWJsaXNoZXIgSURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicHVibGlzaGVyX2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHlvdXIgb3JnYW5pc2F0aW9uIElEIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInB1Ymxpc2hlci1pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlRoaXMgaXMgdGhlIHVuaXF1ZSBJRCBmb3IgeW91ciBvcmdhbmlzYXRpb24gdGhhdCB5b3UgY3JlYXRlZCB3aGVuIHlvdSBzZXQgdXAgeW91ciBJQVRJIFJlZ2lzdHJ5IFB1Ymxpc2hlciBBY2NvdW50LiBJdCBzaG91bGQgYmUgYSBzaG9ydGVyIHZlcnNpb24gb2YgeW91ciBvcmdhbmlzYXRpb24ncyBuYW1lLCB3aGljaCB3aWxsIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMgYW5kIG1heSBpbmNsdWRlIG51bWJlcnMsIC0gKGRhc2gpIG9yIF8gKHVuZGVyc2NvcmUpLiBGb3IgZXhhbXBsZSBuZWZfbWFsaScgZm9yIE5lYXIgRWFzdCBGb3VuZGF0aW9uIE1hbGkuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJDb3VudHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNvdW50cnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjdCBhIENvdW50cnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImNvdW50cnlfc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJBZGQgdGhlIGxvY2F0aW9uIG9mIHlvdXIgb3JnYW5pc2F0aW9uLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcHJvcHMuY291bnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMiByZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fcmVnaXN0cmF0aW9uX2FnZW5jeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiT3JnYW5pc2F0aW9uIFJlZ2lzdHJhdGlvbiBBZ2VuY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVnaXN0cmF0aW9uX2FnZW5jeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VsZWN0IGFuIE9yZ2FuaXNhdGlvbiBSZWdpc3RyYXRpb24gQWdlbmN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJyZWdpc3RyYXRpb24tYWdlbmN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiUHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgYWdlbmN5IGluIHlvdXIgY291bnRyeSB3aGVyZSB5b3Ugb3JnYW5pc2F0aW9uIGlzIHJlZ2lzdGVyZWQuIElmIHlvdSBkbyBub3Qga25vdyB0aGlzIGluZm9ybWF0aW9uIHBsZWFzZSBlbWFpbCBzdXBwb3J0QGlhdGlzdGFuZGFyZC5vcmcuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcmVnaXN0cmF0aW9uX2FnZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMiByZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fcmVnaXN0cmF0aW9uX25vOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJPcmdhbmlzYXRpb24gUmVnaXN0cmF0aW9uIE51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZWdpc3RyYXRpb25fbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHlvdXIgUmVnaXN0cmF0aW9uIE51bWJlciBoZXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJyZWdpc3RyYXRpb24tbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiQWRkIHRoZSByZWdpc3RyYXRpb24gbnVtYmVyIGZvciB5b3VyIG9yZ2FuaXNhdGlvbiB0aGF0IGhhcyBiZWVuIHByb3ZpZGVkIGJ5IHRoZSByZWdpc3RyYXRpb24gYWdlbmN5IG5hbWVkIGFib3ZlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJmb3IgZS5nLiAxMjM0NTZcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaWF0aV9vcmdhbml6YXRpb25hbF9pZGVudGlmaWVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJJQVRJIE9yZ2FuaXNhdGlvbmFsIElkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6ICdUaGUgT3JnYW5pc2F0aW9uIElkZW50aWZpZXIgaXMgYSB1bmlxdWUgY29kZSBmb3IgeW91ciBvcmdhbmlzYXRpb24uIFRoaXMgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIE9yZ2FuaXNhdGlvbiBSZWdpc3RyYXRpb24gQWdlbmN5IGFuZCBSZWdpc3RyYXRpb24gTnVtYmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWFkOiA8YSBocmVmPVwiaHR0cDovL2lhdGlzdGFuZGFyZC5vcmcvZW4vZ3VpZGFuY2UvcHJlcGFyaW5nLW9yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24tYWNjb3VudC9ob3ctdG8tY3JlYXRlLXlvdXItaWF0aS1vcmdhbmlzYXRpb24taWRlbnRpZmllci9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5Ib3cgdG8gY3JlYXRlIHlvdXIgSUFUSSBvcmdhbmlzYXRpb24gaWRlbnRpZmllci48L2E+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiVGhpcyBpcyBhdXRvZ2VuZXJhdGVkLCBwbGVhc2UgbWFrZSBzdXJlIHRvIGZpbGwgdGhlIGFib3ZlIGZpZWxkcyBjb3JyZWN0bHkuXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiQWRtaW5pc3RyYXRvciBJbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYW4gYWRtaW4gYWNjb3VudCBpbiBJQVRJIFB1Ymxpc2hlclwiLFxuICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiUHJvdmlkZSB5b3VyIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhbiBhZG1pbiBhY2NvdW50IGhlcmUgb24gSUFUSSBQdWJsaXNoZXIuXCIsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJVc2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSB1c2VybmFtZSBoZXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIllvdSB3aWxsIG5lZWQgdGhpcyBsYXRlciB0byBsb2dpbiBpbnRvIElBVEkgUHVibGlzaGVyLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbF9uYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJGdWxsIE5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZnVsbF9uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJUeXBlIHlvdXIgZnVsbCBuYW1lIGhlcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImZ1bGwtbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJjb2wtc3RhcnQtMSBtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkVtYWlsIEFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgdmFsaWQgZW1haWwgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiUGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlR5cGUgcGFzc3dvcmQgaGVyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJDb25maXJtIFBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInBhc3N3b3JkX2NvbmZpcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiVHlwZSBwYXNzd29yZCBoZXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwYXNzd29yZC1jb25maXJtYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMzoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVtYWlsIFZlcmlmaWNhdGlvblwiLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQbGVhc2UgdmVyaWZ5IGFuZCBhY3RpdmF0ZSB5b3VyIElBVEkgUHVibGlzaGVyIGFjY291bnQgdGhyb3VnaCB5b3VyIHByb3ZpZGVkIGVtYWlsXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gdmVyaWZ5UHVibGlzaGVyKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3JtRGF0YS5pZGVudGlmaWVyID0gXCJcIi5jb25jYXQoZm9ybURhdGEucmVnaXN0cmF0aW9uX2FnZW5jeSwgXCItXCIpLmNvbmNhdChmb3JtRGF0YS5yZWdpc3RyYXRpb25fbnVtYmVyKTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvdmVyaWZ5UHVibGlzaGVyXCIsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBmb3JtRGF0YSksIGZvcm0pKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoXCJhY3Rpdml0aWVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvYWN0aXZpdGllc1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBwdWJsaXNoZXJFeGlzdHMudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnB1Ymxpc2hlcl9uYW1lID0gZXJyb3JzLnB1Ymxpc2hlcl9uYW1lXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnB1Ymxpc2hlcl9uYW1lWzBdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucHVibGlzaGVyX2lkID0gZXJyb3JzLnB1Ymxpc2hlcl9pZCA/IGVycm9ycy5wdWJsaXNoZXJfaWRbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5yZWdpc3RyYXRpb25fYWdlbmN5ID0gZXJyb3JzLnJlZ2lzdHJhdGlvbl9hZ2VuY3lcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvcnMucmVnaXN0cmF0aW9uX2FnZW5jeVswXVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnJlZ2lzdHJhdGlvbl9udW1iZXIgPSBlcnJvcnMucmVnaXN0cmF0aW9uX251bWJlclxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5yZWdpc3RyYXRpb25fbnVtYmVyWzBdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuaWRlbnRpZmllciA9IGVycm9ycy5pZGVudGlmaWVyID8gZXJyb3JzLmlkZW50aWZpZXJbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChcInB1Ymxpc2hlcl9lcnJvclwiIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlckV4aXN0cy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIxXCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RlcC52YWx1ZSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvcmVnaXN0ZXJcIiwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1EYXRhKSwgZm9ybSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcyhcImFjdGl2aXRpZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9hY3Rpdml0aWVzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnVzZXJuYW1lID0gZXJyb3JzLnVzZXJuYW1lID8gZXJyb3JzLnVzZXJuYW1lWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuZnVsbF9uYW1lID0gZXJyb3JzLmZ1bGxfbmFtZSA/IGVycm9ycy5mdWxsX25hbWVbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnBhc3N3b3JkID0gZXJyb3JzLnBhc3N3b3JkID8gZXJyb3JzLnBhc3N3b3JkWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uID0gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5wYXNzd29yZF9jb25maXJtYXRpb25bMF1cbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvcnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiMlwiXS5pc19jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAudmFsdWUgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcnM7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnVzZXJuYW1lID0gZXJyb3JzLnVzZXJuYW1lID8gZXJyb3JzLnVzZXJuYW1lWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuZnVsbF9uYW1lID0gZXJyb3JzLmZ1bGxfbmFtZSA/IGVycm9ycy5mdWxsX25hbWVbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnBhc3N3b3JkID0gZXJyb3JzLnBhc3N3b3JkID8gZXJyb3JzLnBhc3N3b3JkWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uID0gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5wYXNzd29yZF9jb25maXJtYXRpb25bMF1cbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvcnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRDdXJyZW50U3RlcCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ29Ub05leHRGb3JtKCkge1xuICAgICAgICAgICAgaWYgKHN0ZXAudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgdmVyaWZ5UHVibGlzaGVyKCk7XG4gICAgICAgICAgICBpZiAoc3RlcC52YWx1ZSA9PT0gMilcbiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ29Ub1ByZXZpb3VzRm9ybSgpIHtcbiAgICAgICAgICAgIHN0ZXAudmFsdWUgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJGb3JtOiByZWdpc3RlckZvcm0sXG4gICAgICAgICAgICBmb3JtRGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICBlcnJvckRhdGE6IGVycm9yRGF0YSxcbiAgICAgICAgICAgIHB1Ymxpc2hlckV4aXN0czogcHVibGlzaGVyRXhpc3RzLFxuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlOiBpc0xvYWRlclZpc2libGUsXG4gICAgICAgICAgICBnb1RvTmV4dEZvcm06IGdvVG9OZXh0Rm9ybSxcbiAgICAgICAgICAgIGdvVG9QcmV2aW91c0Zvcm06IGdvVG9QcmV2aW91c0Zvcm0sXG4gICAgICAgICAgICBnZXRDdXJyZW50U3RlcDogZ2V0Q3VycmVudFN0ZXAsXG4gICAgICAgICAgICBjaGVja1N0ZXA6IGNoZWNrU3RlcCxcbiAgICAgICAgICAgIGlzVGV4dEZpZWxkOiBpc1RleHRGaWVsZCxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBjcnlwdG9fanNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvLWpzXCIpKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZm9ybURhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiAnJyxcbiAgICAgICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiAnJyxcbiAgICAgICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpc0xvYWRlclZpc2libGUgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIGZ1bmN0aW9uIGVuY3J5cHQoc3RyaW5nLCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBpdiA9IGNyeXB0b19qc18xLmRlZmF1bHQubGliLldvcmRBcnJheS5yYW5kb20oMTYpOyAvLyB0aGUgcmVhc29uIHRvIGJlIDE2LCBwbGVhc2UgcmVhZCBvbiBgZW5jcnlwdE1ldGhvZGAgcHJvcGVydHkuXG4gICAgICAgICAgICB2YXIgc2FsdCA9IGNyeXB0b19qc18xLmRlZmF1bHQubGliLldvcmRBcnJheS5yYW5kb20oMjU2KTtcbiAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gOTk5O1xuICAgICAgICAgICAgdmFyIGVuY3J5cHRNZXRob2RMZW5ndGggPSAyNTYgLyA0OyAvLyBleGFtcGxlOiBBRVMgbnVtYmVyIGlzIDI1NiAvIDQgPSA2NFxuICAgICAgICAgICAgdmFyIGhhc2hLZXkgPSBjcnlwdG9fanNfMS5kZWZhdWx0LlBCS0RGMihrZXksIHNhbHQsIHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6IGNyeXB0b19qc18xLmRlZmF1bHQuYWxnby5TSEE1MTIsXG4gICAgICAgICAgICAgICAga2V5U2l6ZTogZW5jcnlwdE1ldGhvZExlbmd0aCAvIDgsXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IGNyeXB0b19qc18xLmRlZmF1bHQuQUVTLmVuY3J5cHQoc3RyaW5nLCBoYXNoS2V5LCB7XG4gICAgICAgICAgICAgICAgbW9kZTogY3J5cHRvX2pzXzEuZGVmYXVsdC5tb2RlLkNCQyxcbiAgICAgICAgICAgICAgICBpdjogaXYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBlbmNyeXB0ZWRTdHJpbmcgPSBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZC5jaXBoZXJ0ZXh0KTtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB7XG4gICAgICAgICAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkU3RyaW5nLFxuICAgICAgICAgICAgICAgIGl2OiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5IZXguc3RyaW5naWZ5KGl2KSxcbiAgICAgICAgICAgICAgICBzYWx0OiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5IZXguc3RyaW5naWZ5KHNhbHQpLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkJhc2U2NC5zdHJpbmdpZnkoY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuVXRmOC5wYXJzZShKU09OLnN0cmluZ2lmeShvdXRwdXQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZvcm07XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3JtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IGZvcm1EYXRhLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGVuY3J5cHQoZm9ybURhdGEucGFzc3dvcmQsIChfYSA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wb3N0KCcvbG9naW4nLCBmb3JtKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudXNlcm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdhY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS51c2VybmFtZSA9IGVycm9ycy51c2VybmFtZSA/IGVycm9ycy51c2VybmFtZVswXSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnBhc3N3b3JkID0gZXJyb3JzLnBhc3N3b3JkID8gZXJyb3JzLnBhc3N3b3JkWzBdIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtRGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICBlcnJvckRhdGE6IGVycm9yRGF0YSxcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZTogaXNMb2FkZXJWaXNpYmxlLFxuICAgICAgICAgICAgbG9naW46IGxvZ2luLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBOYXZEcm9wZG93bl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vY29tcG9uZW50cy9OYXZEcm9wZG93bi52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgTmF2RHJvcGRvd246IE5hdkRyb3Bkb3duX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIGF1dGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCduby1uYXYnKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduby1uYXYnKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIEZpcnN0IHdlIHdpbGwgbG9hZCBhbGwgb2YgdGhpcyBwcm9qZWN0J3MgSmF2YVNjcmlwdCBkZXBlbmRlbmNpZXMgd2hpY2hcbiAqIGluY2x1ZGVzIFZ1ZSBhbmQgb3RoZXIgbGlicmFyaWVzLiBJdCBpcyBhIGdyZWF0IHN0YXJ0aW5nIHBvaW50IHdoZW5cbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXG4gKi9cbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlM19zbW9vdGhfc2Nyb2xsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInZ1ZTMtc21vb3RoLXNjcm9sbFwiKSk7XG52YXIgc3ZnX3Z1ZTNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwic3ZnLXZ1ZTNcIikpO1xudmFyIFdlYkhlYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvcGFydGlhbHMvV2ViSGVhZGVyLnZ1ZVwiKSk7XG52YXIgV2ViRm9vdGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJGb290ZXIudnVlXCIpKTtcbnZhciBBZG1pbkZvb3Rlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvcGFydGlhbHMvQWRtaW5Gb290ZXIudnVlXCIpKTtcbnZhciBXZWxjb21lUGFnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvV2VsY29tZVBhZ2UudnVlXCIpKTtcbnZhciBSZWdpc3RlclBhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL1JlZ2lzdGVyUGFnZS52dWVcIikpO1xudmFyIEFib3V0UGFnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvQWJvdXRQYWdlLnZ1ZVwiKSk7XG52YXIgU3VwcG9ydFBhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL1N1cHBvcnRQYWdlLnZ1ZVwiKSk7XG52YXIgSWF0aVN0YW5kYXJkX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3dlYi9JYXRpU3RhbmRhcmQudnVlXCIpKTtcbnZhciBQdWJsaXNoaW5nQ2hlY2tsaXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3dlYi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZVwiKSk7XG52YXIgSWF0aVJlZ2lzdGVyUGFnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvSWF0aVJlZ2lzdGVyUGFnZS52dWVcIikpO1xuLyoqXG4gKiBWdWUgY29tcG9uZW50cyBmb3IgQWN0aXZpdGllcyBMaXN0aW5nXG4gKi9cbnZhciBSZXN1bHREZXRhaWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHREZXRhaWwudnVlXCIpKTtcbnZhciBSZXN1bHRMaXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWVcIikpO1xudmFyIEluZGljYXRvckRldGFpbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWVcIikpO1xudmFyIEluZGljYXRvckxpc3RfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JMaXN0LnZ1ZVwiKSk7XG52YXIgUGVyaW9kc0RldGFpbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlXCIpKTtcbnZhciBQZXJpb2RzTGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZVwiKSk7XG52YXIgVHJhbnNhY3Rpb25MaXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkxpc3QudnVlXCIpKTtcbnZhciBUcmFuc2FjdGlvbkRldGFpbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25EZXRhaWwudnVlXCIpKTtcbnZhciBEZXNjcmlwdGlvbkZvcm1fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9EZXNjcmlwdGlvbkZvcm0udnVlXCIpKTtcbnZhciBFbGVtZW50c05vdGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRWxlbWVudHNOb3RlLnZ1ZVwiKSk7XG52YXIgQWN0aXZpdHlJbmRleF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eUluZGV4LnZ1ZVwiKSk7XG52YXIgQWRtaW5IZWFkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9BZG1pbkhlYWRlci52dWVcIikpO1xudmFyIEFjdGl2aXR5RGV0YWlsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGV0YWlsLnZ1ZVwiKSk7XG52YXIgU2lkZWJhckhlbHBCbG9ja192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9TaWRlYmFySGVscEJsb2NrLnZ1ZVwiKSk7XG52YXIgQWN0aXZpdHlVcGxvYWRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvaW1wb3J0L0FjdGl2aXR5VXBsb2FkLnZ1ZVwiKSk7XG52YXIgSW1wb3J0TGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9pbXBvcnQvSW1wb3J0TGlzdC52dWVcIikpO1xuLyoqXG4gKiBTZXR0aW5nIHBhZ2VcbiAqL1xudmFyIFNldHRpbmdQYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlXCIpKTtcbi8vQWN0aXZpdHkgRGVmYXVsdCBWYWx1ZXNcbnZhciBBY3Rpdml0eURlZmF1bHRWYWx1ZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURlZmF1bHRWYWx1ZS52dWVcIikpO1xuLyoqXG4gKiB2dWUgY29tcG9uZW50IGZvciBwYXNzd29yZCByZXNldFxuICovXG52YXIgUmVzZXRQYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWVcIikpO1xudmFyIFBhc3N3b3JkUmVjb3ZlcnlfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvcmVzZXQvUGFzc3dvcmRSZWNvdmVyeS52dWVcIikpO1xudmFyIFJlc2V0UGFzc3dvcmRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvcmVzZXQvUmVzZXRQYXNzd29yZC52dWVcIikpO1xuLyoqXG4gKiBPcmdhbmlzYXRpb24gZGF0YVxuICovXG52YXIgT3JnYW5pc2F0aW9uRGF0YV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWVcIikpO1xuLyoqXG4gKiBPcmdhbmlzYXRpb24gTGlzdCAvIFByb3h5XG4gKi9cbnZhciBPcmdhbmlzYXRpb25MaXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3N1cGVyYWRtaW4vT3JnYW5pc2F0aW9uTGlzdC52dWVcIikpO1xudmFyIEFkbWluQmFyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWVcIikpO1xuLyoqXG4gKiBBZGRpdGlvbmFsIENvbXBvbmVudHNcbiAqL1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIFBhZ2VUaXRsZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIGFwcCA9ICgwLCB2dWVfMS5jcmVhdGVBcHApKHt9KTtcbi8qKlxuICogR2xvYmFsIENvbXBvbmVudHNcbiAqL1xuYXBwXG4gICAgLmNvbXBvbmVudCgnV2ViSGVhZGVyJywgV2ViSGVhZGVyX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnV2ViRm9vdGVyJywgV2ViRm9vdGVyX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnQWRtaW5Gb290ZXInLCBBZG1pbkZvb3Rlcl92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1dlbGNvbWVTaWduaW4nLCBXZWxjb21lUGFnZV92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1JlZ2lzdGVyRm9ybScsIFJlZ2lzdGVyUGFnZV92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ0lhdGlSZWdpc3RlckZvcm0nLCBJYXRpUmVnaXN0ZXJQYWdlX3Z1ZV8xLmRlZmF1bHQpO1xuLyoqXG4gKiByZWdpc3RlcmluZyB3ZWIgcG9ydGFsIHBhZ2VzXG4gKi9cbmFwcFxuICAgIC5jb21wb25lbnQoJ0Fib3V0UGFnZScsIEFib3V0UGFnZV92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1N1cHBvcnRQYWdlJywgU3VwcG9ydFBhZ2VfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdJYXRpU3RhbmRhcmQnLCBJYXRpU3RhbmRhcmRfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdQdWJsaXNoaW5nQ2hlY2tsaXN0JywgUHVibGlzaGluZ0NoZWNrbGlzdF92dWVfMS5kZWZhdWx0KTtcbi8qKlxuICogUmVnaXN0ZXJpbmcgdnVlIGNvbXBvbmVudCBmb3IgYWN0aXZpdHkgbGlzdGluZ1xuICovXG5hcHBcbiAgICAuY29tcG9uZW50KCdBY3Rpdml0eVRlbXBsYXRlJywgQWN0aXZpdHlJbmRleF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ0xvZ2dlZGluSGVhZGVyJywgQWRtaW5IZWFkZXJfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdBY3Rpdml0aWVzRGV0YWlsJywgQWN0aXZpdHlEZXRhaWxfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdEZXNjcmlwdGlvbkZvcm0nLCBEZXNjcmlwdGlvbkZvcm1fdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdFbGVtZW50c05vdGUnLCBFbGVtZW50c05vdGVfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdSZXN1bHREZXRhaWwnLCBSZXN1bHREZXRhaWxfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdSZXN1bHRMaXN0JywgUmVzdWx0TGlzdF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ0luZGljYXRvckRldGFpbCcsIEluZGljYXRvckRldGFpbF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ0luZGljYXRvckxpc3QnLCBJbmRpY2F0b3JMaXN0X3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUGVyaW9kc0RldGFpbCcsIFBlcmlvZHNEZXRhaWxfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdQZXJpb2RzTGlzdCcsIFBlcmlvZHNMaXN0X3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnVHJhbnNhY3Rpb25MaXN0JywgVHJhbnNhY3Rpb25MaXN0X3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnVHJhbnNhY3Rpb25EZXRhaWwnLCBUcmFuc2FjdGlvbkRldGFpbF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1NpZGViYXJIZWxwQmxvY2snLCBTaWRlYmFySGVscEJsb2NrX3Z1ZV8xLmRlZmF1bHQpO1xuLypcbiAqIEltcG9ydCBwYWdlXG4gKi9cbmFwcFxuICAgIC5jb21wb25lbnQoJ0FjdGl2aXR5VXBsb2FkJywgQWN0aXZpdHlVcGxvYWRfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdJbXBvcnRMaXN0JywgSW1wb3J0TGlzdF92dWVfMS5kZWZhdWx0KTtcbi8qXG4gKiBTZXR0aW5nIHBhZ2VcbiAqL1xuYXBwLmNvbXBvbmVudCgnU2V0dGluZ1BhZ2UnLCBTZXR0aW5nUGFnZV92dWVfMS5kZWZhdWx0KTtcbmFwcC5jb21wb25lbnQoJ0FjdGl2aXR5RGVmYXVsdFZhbHVlcycsIEFjdGl2aXR5RGVmYXVsdFZhbHVlX3Z1ZV8xLmRlZmF1bHQpO1xuLypcblJlZ2lzdGVyaW5nIHZ1ZSBjb21wb25lbnQgZm9yIHBhc3N3b3JkIHJlc2V0XG4qL1xuYXBwXG4gICAgLmNvbXBvbmVudCgnUmVzZXRQYWdlJywgUmVzZXRQYWdlX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUGFzc3dvcmRSZWNvdmVyeScsIFBhc3N3b3JkUmVjb3ZlcnlfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdSZXNldFBhc3N3b3JkJywgUmVzZXRQYXNzd29yZF92dWVfMS5kZWZhdWx0KTtcbi8qKlxuICogUmVnaXN0ZXJpbmcgQWRkaXRpb25hbCBDb21wb25lbnRzXG4gKi9cbmFwcC5jb21wb25lbnQoJ0hvdmVyVGV4dCcsIEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0KTtcbmFwcC5jb21wb25lbnQoJ1BhZ2VUaXRsZScsIFBhZ2VUaXRsZV92dWVfMS5kZWZhdWx0KTtcbmFwcC5jb21wb25lbnQoJ0xvYWRpbmdTdGF0ZScsIExvYWRlcl92dWVfMS5kZWZhdWx0KTtcbi8qKlxuICogT3JnYW5pc2F0aW9uIGRhdGFcbiAqL1xuYXBwLmNvbXBvbmVudCgnT3JnYW5pc2F0aW9uRGF0YScsIE9yZ2FuaXNhdGlvbkRhdGFfdnVlXzEuZGVmYXVsdCk7XG4vKipcbiAqIFByb3h5XG4gKi9cbmFwcC5jb21wb25lbnQoJ09yZ2FuaXNhdGlvbkxpc3QnLCBPcmdhbmlzYXRpb25MaXN0X3Z1ZV8xLmRlZmF1bHQpO1xuYXBwLmNvbXBvbmVudCgnQWRtaW5CYXInLCBBZG1pbkJhcl92dWVfMS5kZWZhdWx0KTtcbi8qKlxuICogRXh0ZW5zaW9uIHRvIGlubGluZSBTVkcgZmlsZXMgd2l0aCBWdWUuanMgYW5kIG9wdGltaXplIHRoZW0gYXV0b21hdGljYWxseSB3aXRoIFNWR09cbiAqL1xuYXBwLnVzZShzdmdfdnVlM18xLmRlZmF1bHQpO1xuYXBwLnVzZSh2dWUzX3Ntb290aF9zY3JvbGxfMS5kZWZhdWx0KTtcbi8vIGRldGVjdCBzY3JvbGwgdXAgb3IgZG93blxudmFyIGxhc3RTY3JvbGxUb3AgPSAwLCBhZmZpeFR5cGUgPSAnc3RpY2t5LW5vbmUnO1xudmFyIHN0aWNreVNpZGViYXIgPSBmdW5jdGlvbiAoZWwsIHBhcmVudFdyYXBwZXIpIHtcbiAgICAvL3N0aWNreSBlbGVtZW50L2NoaWxkIGRhdGFcbiAgICB2YXIgc3RpY2t5RWxlbWVudCA9IGVsLmZpcnN0Q2hpbGQsIGVsSGVpZ2h0ID0gc3RpY2t5RWxlbWVudC5vZmZzZXRIZWlnaHQsIHN0aWNreUN1cnJlbnRUb3AgPSBzdGlja3lFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCwgc3RpY2t5Q3VycmVudEJvdHRvbSA9IHN0aWNreUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIC8vc3RpY2t5IGVsZW1lbnQncyBwYXJlbnQvd3JhcHBlciBkYXRhXG4gICAgdmFyIGVsV2lkdGggPSBlbC5vZmZzZXRXaWR0aCwgZWxTY3JvbGxMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCwgZWxTY3JvbGxUb3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsIGVsU2Nyb2xsQm90dG9tID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAvLyB3aW5kb3cvZG9jdW1lbnQgZGF0YVxuICAgIHZhciBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uID0gd2luZG93LnBhZ2VZT2Zmc2V0LCB0YXJnZXRTY3JvbGxQb3NpdGlvbiA9IGVsU2Nyb2xsQm90dG9tICsgY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgIC8vIHBhcmVudCB3cmFwcGVyIC8gc3RpY2t5IGJvdW5kYXJ5XG4gICAgdmFyIGVsUGFyZW50ID0gc3RpY2t5RWxlbWVudC5jbG9zZXN0KHBhcmVudFdyYXBwZXIpLCBlbFBhcmVudEJvdHRvbSA9IGVsUGFyZW50ID09PSBudWxsIHx8IGVsUGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XG4gICAgLy8gc2Nyb2xsIGJlaGF2aW91clxuICAgIHZhciBpc1Njcm9sbERvd24gPSBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uID4gbGFzdFNjcm9sbFRvcCA/IHRydWUgOiBmYWxzZTtcbiAgICB2YXIgaXNTY3JvbGxVcCA9ICFpc1Njcm9sbERvd247XG4gICAgbGFzdFNjcm9sbFRvcCA9XG4gICAgICAgIGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24gPD0gMCA/IDAgOiBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uO1xuICAgIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbERvd24oKSB7XG4gICAgICAgIHN3aXRjaCAoYWZmaXhUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktdG9wJzpcbiAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCBcIi5jb25jYXQoc3RpY2t5Q3VycmVudFRvcCAtIGVsU2Nyb2xsVG9wLCBcInB4LCAwKTtcIik7XG4gICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS10cmFuc2xhdGUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgaWYgKGVsUGFyZW50Qm90dG9tICYmIGVsUGFyZW50Qm90dG9tIDwgc3RpY2t5Q3VycmVudEJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uIDogYWJzb2x1dGU7ICB3aWR0aDoyODBweDsgYm90dG9tOiAxNnB4XCI7XG4gICAgICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktYm91bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0aWNreS10cmFuc2xhdGUnOlxuICAgICAgICAgICAgICAgIGlmIChzdGlja3lDdXJyZW50Qm90dG9tIDw9IHZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGZpeGVkOyB0b3A6IGF1dG87IGxlZnQ6IFwiLmNvbmNhdChlbFNjcm9sbExlZnQsIFwiOyBib3R0b206IDA7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktYm90dG9tJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXhlZC10b3AnOlxuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgdG9wOjYwcHhcIjtcbiAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LXRyYW5zbGF0ZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktbm9uZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFNjcm9sbFBvc2l0aW9uIDw9IGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdwb3J0SGVpZ2h0ICsgd2luZG93LnNjcm9sbFkgKyA0NTAgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogc3RpY2t5OyB0b3A6NjBweFwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogZml4ZWQ7IHRvcDogYXV0bzsgbGVmdDogXCIuY29uY2F0KGVsU2Nyb2xsTGVmdCwgXCI7IGJvdHRvbTogMDsgd2lkdGg6IFwiKS5jb25jYXQoZWxXaWR0aCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktYm90dG9tJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0aWNreS1ib3VuZCc6XG4gICAgICAgICAgICAgICAgLy8gbm90aGluZyB0byBkbyBoZXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlU2Nyb2xsVXAoKSB7XG4gICAgICAgIHN3aXRjaCAoYWZmaXhUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktdG9wJzpcbiAgICAgICAgICAgICAgICBpZiAoZWxTY3JvbGxUb3AgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTsgIFwiO1xuICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LW5vbmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogZml4ZWQ7IHRvcDogNjBweDtsZWZ0OiBcIi5jb25jYXQoZWxTY3JvbGxMZWZ0LCBcIjsgd2lkdGg6IFwiKS5jb25jYXQoZWxXaWR0aCwgXCJweCBcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogYXV0bzsgIGJvdHRvbTogNjBweDtsZWZ0OiBcIi5jb25jYXQoZWxTY3JvbGxMZWZ0LCBcIjsgd2lkdGg6IFwiKS5jb25jYXQoZWxXaWR0aCwgXCJweCBcIik7XG4gICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS1ib3VuZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXhlZC10b3AnOlxuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgdG9wOjYwcHhcIjtcbiAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LXRyYW5zbGF0ZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktdHJhbnNsYXRlJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q3VycmVudFRvcCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGZpeGVkOyB0b3A6IDYwcHg7IGxlZnQ6IFwiLmNvbmNhdChlbFNjcm9sbExlZnQsIFwiOyB3aWR0aDogXCIpLmNvbmNhdChlbFdpZHRoLCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LXRvcCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LW5vbmUnOlxuICAgICAgICAgICAgICAgIC8vbm90aGluZyB0byBkbyBoZXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktYm91bmQnOlxuICAgICAgICAgICAgICAgIGlmIChzdGlja3lDdXJyZW50VG9wID49IDAgJiYgY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7IHRvcDogMDsgbGVmdDogXCIuY29uY2F0KGVsU2Nyb2xsTGVmdCwgXCI7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktdG9wJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0aWNreUN1cnJlbnRUb3AgPj0gMCAmJiBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCIgdG9wOiAwOyBsZWZ0OiBcIi5jb25jYXQoZWxTY3JvbGxMZWZ0LCBcIjsgd2lkdGg6IFwiKS5jb25jYXQoZWxXaWR0aCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS10b3AnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWxIZWlnaHQgPCB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgICBlbC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogc3RpY2t5OyB0b3A6NjBweFwiO1xuICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7XCIpO1xuICAgICAgICBpZiAoaXNTY3JvbGxEb3duICYmIGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24gIT0gMCkge1xuICAgICAgICAgICAgaGFuZGxlU2Nyb2xsRG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU2Nyb2xsVXAgJiYgY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiAhPSAwKSB7XG4gICAgICAgICAgICBoYW5kbGVTY3JvbGxVcCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IHN0aWNreTsgdG9wOjYwcHhcIjtcbiAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG59O1xudmFyIGZpeFNpZGViYXIgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICB2YXIgZm9vdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvb3RlcicpO1xuICAgIHZhciByZWN0ID0gZm9vdGVyICYmIGZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3MnKTtcbiAgICB2YXIgdG9wID0gcHJvZ3Jlc3MgJiYgcHJvZ3Jlc3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPiAxMDI0KSB7XG4gICAgICAgIGlmIChyZWN0ICYmIHJlY3QudG9wIDw9IDgwMCkge1xuICAgICAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IGF1dG87ICBib3R0b206IDYwcHg7d2lkdGg6MjgwcHggXCI7XG4gICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LWJvdHRvbSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodG9wICYmIHRvcC5ib3R0b20gPiAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDoxOTBweFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGZpeGVkOyB0b3A6NjBweFwiO1xuICAgICAgICAgICAgYWZmaXhUeXBlID0gJ2ZpeGVkLXRvcCc7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLy8gY3VzdG9tIGRpcmVjdGl2ZVxuYXBwLmRpcmVjdGl2ZSgnc3RpY2t5LWNvbXBvbmVudCcsIHtcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcpIHtcbiAgICAgICAgdmFyIGJvdW5kYXJ5ID0gKGJpbmRpbmcudmFsdWUgfHwge30pLmJvdW5kYXJ5O1xuICAgICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5IHx8ICdib2R5JztcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0aWNreVNpZGViYXIoZWwsIGJvdW5kYXJ5KTsgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmaXhTaWRlYmFyKGVsKTsgfSk7XG4gICAgfSxcbiAgICB1bm1vdW50ZWQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZykge1xuICAgICAgICB2YXIgcGFyZW50ID0gYmluZGluZy52YWx1ZS5ib3VuZGFyeTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0aWNreVNpZGViYXIoZWwsIHBhcmVudCk7IH0pO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZml4U2lkZWJhcihlbCk7IH0pO1xuICAgIH0sXG59KTtcbi8qKlxuICogTmV4dCwgd2Ugd2lsbCBjcmVhdGUgYSBmcmVzaCBWdWUgYXBwbGljYXRpb24gaW5zdGFuY2UgYW5kIGF0dGFjaCBpdCB0b1xuICogdGhlIHBhZ2UuIFRoZW4sIHlvdSBtYXkgYmVnaW4gYWRkaW5nIGNvbXBvbmVudHMgdG8gdGhpcyBhcHBsaWNhdGlvblxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cbiAqL1xuYXBwLm1vdW50KCcjYXBwJyk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3JnTWFuZGF0b3J5RWxlbWVudHMgPSBleHBvcnRzLmFjdGl2aXR5Q29yZUVsZW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gYWN0aXZpdHlDb3JlRWxlbWVudHMoKSB7XG4gICAgdmFyIGVsZW1lbnRzID0gW1xuICAgICAgICAncmVwb3J0aW5nX29yZycsXG4gICAgICAgICdpYXRpX2lkZW50aWZpZXInLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAncGFydGljaXBhdGluZ19vcmcnLFxuICAgICAgICAnYWN0aXZpdHlfc3RhdHVzJyxcbiAgICAgICAgJ2FjdGl2aXR5X2RhdGUnLFxuICAgICAgICAncmVjaXBpZW50X2NvdW50cnknLFxuICAgICAgICAncmVjaXBpZW50X3JlZ2lvbicsXG4gICAgICAgICdzZWN0b3InLFxuICAgICAgICAnY29sbGFib3JhdGlvbl90eXBlJyxcbiAgICAgICAgJ2RlZmF1bHRfZmxvd190eXBlJyxcbiAgICAgICAgJ2RlZmF1bHRfZmluYW5jZV90eXBlJyxcbiAgICAgICAgJ2RlZmF1bHRfYWlkX3R5cGUnLFxuICAgICAgICAnYnVkZ2V0JyxcbiAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgXTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG5leHBvcnRzLmFjdGl2aXR5Q29yZUVsZW1lbnRzID0gYWN0aXZpdHlDb3JlRWxlbWVudHM7XG5mdW5jdGlvbiBvcmdNYW5kYXRvcnlFbGVtZW50cygpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbJ3JlcG9ydGluZ19vcmcnLCAnbmFtZSddO1xuICAgIHJldHVybiBlbGVtZW50cztcbn1cbmV4cG9ydHMub3JnTWFuZGF0b3J5RWxlbWVudHMgPSBvcmdNYW5kYXRvcnlFbGVtZW50cztcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZnVuY3Rpb24gZGF0ZUZvcm1hdChkYXRlLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gJ01NTU0gREQsIFlZWVknOyB9XG4gICAgdmFyIGZvcm1hdF9kYXRlO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgJ2Zyb21Ob3cnOlxuICAgICAgICAgICAgZm9ybWF0X2RhdGUgPSBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZyb21Ob3coKSA6ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBmb3JtYXRfZGF0ZSA9IGRhdGUgPyAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KGZvcm1hdCkgOiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdF9kYXRlO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGF0ZUZvcm1hdDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNyeXB0b19qc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjcnlwdG8tanNcIikpO1xuZnVuY3Rpb24gZW5jcnlwdChzdHJpbmcsIGtleSkge1xuICAgIHZhciBpdiA9IGNyeXB0b19qc18xLmRlZmF1bHQubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuICAgIHZhciBzYWx0ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbSgyNTYpO1xuICAgIHZhciBpdGVyYXRpb25zID0gOTk5O1xuICAgIHZhciBlbmNyeXB0TWV0aG9kTGVuZ3RoID0gMjU2IC8gNDtcbiAgICB2YXIgaGFzaEtleSA9IGNyeXB0b19qc18xLmRlZmF1bHQuUEJLREYyKGtleSwgc2FsdCwge1xuICAgICAgICBoYXNoZXI6IGNyeXB0b19qc18xLmRlZmF1bHQuYWxnby5TSEE1MTIsXG4gICAgICAgIGtleVNpemU6IGVuY3J5cHRNZXRob2RMZW5ndGggLyA4LFxuICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgIH0pO1xuICAgIHZhciBlbmNyeXB0ZWQgPSBjcnlwdG9fanNfMS5kZWZhdWx0LkFFUy5lbmNyeXB0KHN0cmluZywgaGFzaEtleSwge1xuICAgICAgICBtb2RlOiBjcnlwdG9fanNfMS5kZWZhdWx0Lm1vZGUuQ0JDLFxuICAgICAgICBpdjogaXYsXG4gICAgfSk7XG4gICAgdmFyIGVuY3J5cHRlZFN0cmluZyA9IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkLmNpcGhlcnRleHQpO1xuICAgIHZhciBvdXRwdXQgPSB7XG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZFN0cmluZyxcbiAgICAgICAgaXY6IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkhleC5zdHJpbmdpZnkoaXYpLFxuICAgICAgICBzYWx0OiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5IZXguc3RyaW5naWZ5KHNhbHQpLFxuICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgIH07XG4gICAgcmV0dXJuIGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkJhc2U2NC5zdHJpbmdpZnkoY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuVXRmOC5wYXJzZShKU09OLnN0cmluZ2lmeShvdXRwdXQpKSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBlbmNyeXB0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEdldCBjdXJyZW50IGFjdGl2aXR5IHRpdGxlXG4gKlxuICogQHJldHVybiB0aXRsZSB0ZXh0XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldEFjdGl2aXR5VGl0bGUoZGF0YSwgbGFuZ3VhZ2UpIHtcbiAgICB2YXIgdGl0bGUgPSAnJztcbiAgICAvLyB0aXRsZSByZXR1cm4gaWYgbGFuZ3VhZ2UgZXhpc3QgaW4gZGF0YVxuICAgIGZvciAodmFyIF9pID0gMCwgZGF0YV8xID0gZGF0YTsgX2kgPCBkYXRhXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciB0ID0gZGF0YV8xW19pXTtcbiAgICAgICAgaWYgKHQubGFuZ3VhZ2UgJiYgdC5sYW5ndWFnZSA9PT0gbGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdC5uYXJyYXRpdmUgJiYgdC5uYXJyYXRpdmUgIT09ICcnID8gdC5uYXJyYXRpdmUgOiAnVW50aXRsZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHRpdGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRlZmF1bHQgdGl0bGUgcmV0dXJuIGlmIGxhbmd1YWdlIGRvZXMgbm90IGV4aXN0cyBpbiBkYXRhXG4gICAgdGl0bGUgPSBkYXRhWycwJ10ubmFycmF0aXZlICYmIGRhdGFbJzAnXS5uYXJyYXRpdmUgIT09ICcnID8gZGF0YVsnMCddLm5hcnJhdGl2ZSA6ICdVbnRpdGxlZCc7XG4gICAgcmV0dXJuIHRpdGxlO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0QWN0aXZpdHlUaXRsZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0TG9jYXRpb24oZGF0YSkge1xuICAgIHZhciBsb2NhdGlvbnMgPSBbXTtcbiAgICBsb2NhdGlvbnMgPSBkYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5yZWZlcmVuY2U7XG4gICAgfSk7XG4gICAgdmFyIGxhc3RMb2NhdGlvbiA9IGxvY2F0aW9ucy5zbGljZSgtMSlbMF07XG4gICAgbG9jYXRpb25zID0gbG9jYXRpb25zLnNsaWNlKDAsIC0xKTtcbiAgICBpZiAobG9jYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9ucy5qb2luKCcsICcpICsgJyAnICsgJ2FuZCcgKyAnICcgKyBsYXN0TG9jYXRpb247XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbGFzdExvY2F0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdldExvY2F0aW9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZVN0b3JlID0gdm9pZCAwO1xudmFyIHZ1ZXhfMSA9IHJlcXVpcmUoXCJ2dWV4XCIpO1xudmFyIHN0YXRlID0ge1xuICAgIHNlbGVjdGVkQWN0aXZpdGllczogW10sXG59O1xudmFyIG11dGF0aW9ucyA9IHtcbiAgICBtdXRhdGVTZWxlY3RlZEFjdGl2aXRpZXM6IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMgPSBwYXlsb2FkO1xuICAgIH0sXG59O1xudmFyIGFjdGlvbnMgPSB7XG4gICAgdXBkYXRlU2VsZWN0ZWRBY3Rpdml0aWVzOiBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KCdtdXRhdGVTZWxlY3RlZEFjdGl2aXRpZXMnLCBwYXlsb2FkKTtcbiAgICB9LFxufTtcbnZhciBhY3Rpdml0eUxpc3RTdG9yZSA9ICgwLCB2dWV4XzEuY3JlYXRlU3RvcmUpKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgbXV0YXRpb25zOiBtdXRhdGlvbnMsXG4gICAgYWN0aW9uczogYWN0aW9ucyxcbn0pO1xuZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIGFjdGl2aXR5TGlzdFN0b3JlO1xufVxuZXhwb3J0cy51c2VTdG9yZSA9IHVzZVN0b3JlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRldGFpbFN0b3JlID0gdm9pZCAwO1xudmFyIHZ1ZXhfMSA9IHJlcXVpcmUoXCJ2dWV4XCIpO1xudmFyIHN0YXRlID0ge1xuICAgIHVuUHVibGlzaGVkOiBmYWxzZSxcbiAgICBzaG93UHVibGlzaGVkOiBmYWxzZSxcbiAgICBwdWJsaXNoRXJyb3JzOiBbXSxcbn07XG52YXIgbXV0YXRpb25zID0ge1xuICAgIG11dGF0ZVVuUHVibGlzaGVkOiBmdW5jdGlvbiAoc3RhdGUsIHBheWxvYWQpIHtcbiAgICAgICAgc3RhdGUudW5QdWJsaXNoZWQgPSBwYXlsb2FkO1xuICAgIH0sXG4gICAgbXV0YXRlU2hvd1B1Ymxpc2hlZDogZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLnNob3dQdWJsaXNoZWQgPSBwYXlsb2FkO1xuICAgIH0sXG4gICAgbXV0YXRlUHVibGlzaEVycm9yczogZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLnB1Ymxpc2hFcnJvcnMgPSBwYXlsb2FkO1xuICAgIH0sXG59O1xudmFyIGFjdGlvbnMgPSB7XG4gICAgdXBkYXRlVW5QdWJsaXNoZWQ6IGZ1bmN0aW9uIChfYSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgY29tbWl0ID0gX2EuY29tbWl0O1xuICAgICAgICBjb21taXQoJ211dGF0ZVVuUHVibGlzaGVkJywgcGF5bG9hZCk7XG4gICAgfSxcbiAgICB1cGRhdGVTaG93UHVibGlzaGVkOiBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KCdtdXRhdGVTaG93UHVibGlzaGVkJywgcGF5bG9hZCk7XG4gICAgfSxcbiAgICB1cGRhdGVQdWJsaXNoRXJyb3JzOiBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KCdtdXRhdGVQdWJsaXNoRXJyb3JzJywgcGF5bG9hZCk7XG4gICAgfSxcbn07XG52YXIgYWN0aXZpdHlEZXRhaWxTdG9yZSA9ICgwLCB2dWV4XzEuY3JlYXRlU3RvcmUpKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgbXV0YXRpb25zOiBtdXRhdGlvbnMsXG4gICAgYWN0aW9uczogYWN0aW9ucyxcbn0pO1xuZnVuY3Rpb24gZGV0YWlsU3RvcmUoKSB7XG4gICAgcmV0dXJuIGFjdGl2aXR5RGV0YWlsU3RvcmU7XG59XG5leHBvcnRzLmRldGFpbFN0b3JlID0gZGV0YWlsU3RvcmU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlU3RvcmUgPSBleHBvcnRzLnN0b3JlID0gdm9pZCAwO1xudmFyIHZ1ZXhfMSA9IHJlcXVpcmUoXCJ2dWV4XCIpO1xudmFyIHN0YXRlXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nL3N0YXRlXCIpO1xudmFyIG11dGF0aW9uXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nL211dGF0aW9uXCIpO1xudmFyIGFjdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3NldHRpbmcvYWN0aW9uc1wiKTtcbmV4cG9ydHMuc3RvcmUgPSAoMCwgdnVleF8xLmNyZWF0ZVN0b3JlKSh7XG4gICAgc3RhdGU6IHN0YXRlXzEuc3RhdGUsXG4gICAgbXV0YXRpb25zOiBtdXRhdGlvbl8xLm11dGF0aW9ucyxcbiAgICBhY3Rpb25zOiBhY3Rpb25zXzEuYWN0aW9ucyxcbn0pO1xuZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuc3RvcmU7XG59XG5leHBvcnRzLnVzZVN0b3JlID0gdXNlU3RvcmU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWN0aW9ucyA9IGV4cG9ydHMuQWN0aW9uVHlwZXMgPSB2b2lkIDA7XG52YXIgbXV0YXRpb25fMSA9IHJlcXVpcmUoXCIuL211dGF0aW9uXCIpO1xudmFyIEFjdGlvblR5cGVzO1xuKGZ1bmN0aW9uIChBY3Rpb25UeXBlcykge1xuICAgIEFjdGlvblR5cGVzW1wiVVBEQVRFX1BVQkxJU0hJTkdfRk9STVwiXSA9IFwiVVBEQVRFX1BVQkxJU0hJTkdfRk9STVwiO1xuICAgIEFjdGlvblR5cGVzW1wiVVBEQVRFX1BVQkxJU0hFUl9JTkZPXCJdID0gXCJVUERBVEVfUFVCTElTSEVSX0lORk9cIjtcbiAgICBBY3Rpb25UeXBlc1tcIlVQREFURV9QVUJMSVNISU5HX0VSUk9SXCJdID0gXCJVUERBVEVfUFVCTElTSElOR19FUlJPUlwiO1xuICAgIEFjdGlvblR5cGVzW1wiVVBEQVRFX0RFRkFVTFRfVkFMVUVTXCJdID0gXCJVUERBVEVfREVGQVVMVF9WQUxVRVNcIjtcbiAgICBBY3Rpb25UeXBlc1tcIlVQREFURV9ERUZBVUxUX0VSUk9SXCJdID0gXCJVUERBVEVfREVGQVVMVF9FUlJPUlwiO1xufSkoQWN0aW9uVHlwZXMgPSBleHBvcnRzLkFjdGlvblR5cGVzIHx8IChleHBvcnRzLkFjdGlvblR5cGVzID0ge30pKTtcbmV4cG9ydHMuYWN0aW9ucyA9IChfYSA9IHt9LFxuICAgIF9hW0FjdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0ZPUk1dID0gZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdChtdXRhdGlvbl8xLk11dGF0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hJTkdfRk9STSwgcGF5bG9hZCk7XG4gICAgfSxcbiAgICBfYVtBY3Rpb25UeXBlcy5VUERBVEVfUFVCTElTSEVSX0lORk9dID0gZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdChtdXRhdGlvbl8xLk11dGF0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hFUl9JTkZPLCBwYXlsb2FkKTtcbiAgICB9LFxuICAgIF9hW0FjdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0VSUk9SXSA9IGZ1bmN0aW9uIChfYSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgY29tbWl0ID0gX2EuY29tbWl0O1xuICAgICAgICBjb21taXQobXV0YXRpb25fMS5NdXRhdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0VSUk9SLCBwYXlsb2FkKTtcbiAgICB9LFxuICAgIF9hW0FjdGlvblR5cGVzLlVQREFURV9ERUZBVUxUX1ZBTFVFU10gPSBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KG11dGF0aW9uXzEuTXV0YXRpb25UeXBlcy5VUERBVEVfREVGQVVMVF9WQUxVRVMsIHBheWxvYWQpO1xuICAgIH0sXG4gICAgX2FbQWN0aW9uVHlwZXMuVVBEQVRFX0RFRkFVTFRfRVJST1JdID0gZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdChtdXRhdGlvbl8xLk11dGF0aW9uVHlwZXMuVVBEQVRFX0RFRkFVTFRfRVJST1IsIHBheWxvYWQpO1xuICAgIH0sXG4gICAgX2EpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11dGF0aW9ucyA9IGV4cG9ydHMuTXV0YXRpb25UeXBlcyA9IHZvaWQgMDtcbnZhciBNdXRhdGlvblR5cGVzO1xuKGZ1bmN0aW9uIChNdXRhdGlvblR5cGVzKSB7XG4gICAgTXV0YXRpb25UeXBlc1tcIlVQREFURV9QVUJMSVNISU5HX0ZPUk1cIl0gPSBcIlVQREFURV9QVUJMSVNISU5HX0ZPUk1cIjtcbiAgICBNdXRhdGlvblR5cGVzW1wiVVBEQVRFX1BVQkxJU0hFUl9JTkZPXCJdID0gXCJVUERBVEVfUFVCTElTSEVSX0lORk9cIjtcbiAgICBNdXRhdGlvblR5cGVzW1wiVVBEQVRFX1BVQkxJU0hJTkdfRVJST1JcIl0gPSBcIlVQREFURV9QVUJMSVNISU5HX0VSUk9SXCI7XG4gICAgTXV0YXRpb25UeXBlc1tcIlVQREFURV9ERUZBVUxUX1ZBTFVFU1wiXSA9IFwiVVBEQVRFX0RFRkFVTFRfVkFMVUVTXCI7XG4gICAgTXV0YXRpb25UeXBlc1tcIlVQREFURV9ERUZBVUxUX0VSUk9SXCJdID0gXCJVUERBVEVfREVGQVVMVF9FUlJPUlwiO1xufSkoTXV0YXRpb25UeXBlcyA9IGV4cG9ydHMuTXV0YXRpb25UeXBlcyB8fCAoZXhwb3J0cy5NdXRhdGlvblR5cGVzID0ge30pKTtcbmV4cG9ydHMubXV0YXRpb25zID0gKF9hID0ge30sXG4gICAgX2FbTXV0YXRpb25UeXBlcy5VUERBVEVfUFVCTElTSElOR19GT1JNXSA9IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5wdWJsaXNoaW5nRm9ybVtwYXlsb2FkLmtleV0gPSBwYXlsb2FkLnZhbHVlO1xuICAgIH0sXG4gICAgX2FbTXV0YXRpb25UeXBlcy5VUERBVEVfUFVCTElTSEVSX0lORk9dID0gZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLnB1Ymxpc2hpbmdJbmZvW3BheWxvYWQua2V5XSA9IHBheWxvYWQudmFsdWU7XG4gICAgfSxcbiAgICBfYVtNdXRhdGlvblR5cGVzLlVQREFURV9ERUZBVUxUX1ZBTFVFU10gPSBmdW5jdGlvbiAoc3RhdGUsIHBheWxvYWQpIHtcbiAgICAgICAgc3RhdGUuZGVmYXVsdEZvcm1bcGF5bG9hZC5rZXldID0gcGF5bG9hZC52YWx1ZTtcbiAgICB9LFxuICAgIF9hW011dGF0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hJTkdfRVJST1JdID0gZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLnB1Ymxpc2hpbmdFcnJvcltwYXlsb2FkLmtleV0gPSBwYXlsb2FkLnZhbHVlO1xuICAgIH0sXG4gICAgX2FbTXV0YXRpb25UeXBlcy5VUERBVEVfREVGQVVMVF9FUlJPUl0gPSBmdW5jdGlvbiAoc3RhdGUsIHBheWxvYWQpIHtcbiAgICAgICAgc3RhdGUuZGVmYXVsdEVycm9yW3BheWxvYWQua2V5XSA9IHBheWxvYWQudmFsdWU7XG4gICAgfSxcbiAgICBfYSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RhdGUgPSB2b2lkIDA7XG5leHBvcnRzLnN0YXRlID0ge1xuICAgIHB1Ymxpc2hpbmdGb3JtOiB7XG4gICAgICAgIHB1Ymxpc2hlcl9pZDogJycsXG4gICAgICAgIGFwaV90b2tlbjogJycsXG4gICAgfSxcbiAgICBwdWJsaXNoaW5nSW5mbzoge1xuICAgICAgICBwdWJsaXNoZXJfdmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgICAgdG9rZW5fdmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgICAgaXNWZXJpZmljYXRpb25SZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgZGVmYXVsdEZvcm06IHtcbiAgICAgICAgZGVmYXVsdF9jdXJyZW5jeTogJycsXG4gICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6ICcnLFxuICAgICAgICBoaWVyYXJjaHk6ICcnLFxuICAgICAgICBodW1hbml0YXJpYW46ICcnLFxuICAgICAgICBidWRnZXRfbm90X3Byb3ZpZGVkOiAnJ1xuICAgIH0sXG4gICAgcHVibGlzaGluZ0Vycm9yOiB7XG4gICAgICAgIGFwaV90b2tlbjogJycsXG4gICAgfSxcbiAgICBkZWZhdWx0RXJyb3I6IHtcbiAgICAgICAgZGVmYXVsdF9jdXJyZW5jeTogJycsXG4gICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6ICcnLFxuICAgICAgICBoaWVyYXJjaHk6ICcnLFxuICAgICAgICBodW1hbml0YXJpYW46ICcnLFxuICAgICAgICBidWRnZXRfbm90X3Byb3ZpZGVkOiAnJ1xuICAgIH0sXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcG9ydGluZ09yZ2FuaXphdGlvbiA9IGV4cG9ydHMuUGxhbm5lZERpc2J1cnNlbWVudCA9IGV4cG9ydHMuSHVtYW5pdGFyaWFuU2NvcGUgPSBleHBvcnRzLlRhZyA9IGV4cG9ydHMuUG9saWN5TWFya2VyID0gZXhwb3J0cy5SZWxhdGVkQWN0aXZpdHkgPSBleHBvcnRzLkNvbmRpdGlvbnMgPSBleHBvcnRzLkxlZ2FjeURhdGEgPSBleHBvcnRzLlNlY3RvciA9IGV4cG9ydHMuTG9jYXRpb24gPSBleHBvcnRzLlRyYW5zYWN0aW9ucyA9IGV4cG9ydHMuUmVjaXBpZW50UmVnaW9uID0gZXhwb3J0cy5SZWNpcGllbnRDb3VudHJ5ID0gZXhwb3J0cy5QYXJ0aWNpcGF0aW5nT3JnID0gZXhwb3J0cy5Db250YWN0SW5mbyA9IGV4cG9ydHMuQWN0aXZpdHlEYXRlID0gZXhwb3J0cy5EZXNjcmlwdGlvbiA9IGV4cG9ydHMuVGl0bGVFbGVtZW50ID0gZXhwb3J0cy5PdGhlcklkZW50aWZpZXIgPSBleHBvcnRzLklhdGlJZGVudGlmaWVyID0gZXhwb3J0cy5SZXN1bHQgPSB2b2lkIDA7XG4vLyBQcm94eSBleHBvcnQgYWxsIHJlbGF0ZWQgY29tcG9uZW50cy5cbnZhciBSZXN1bHRfdnVlXzEgPSByZXF1aXJlKFwiLi9SZXN1bHQudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVzdWx0X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIElhdGlJZGVudGlmaWVyX3Z1ZV8xID0gcmVxdWlyZShcIi4vSWF0aUlkZW50aWZpZXIudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSWF0aUlkZW50aWZpZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChJYXRpSWRlbnRpZmllcl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBPdGhlcklkZW50aWZpZXJfdnVlXzEgPSByZXF1aXJlKFwiLi9PdGhlcklkZW50aWZpZXIudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT3RoZXJJZGVudGlmaWVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoT3RoZXJJZGVudGlmaWVyX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRpdGxlX3Z1ZV8xID0gcmVxdWlyZShcIi4vVGl0bGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGl0bGVFbGVtZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVGl0bGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRGVzY3JpcHRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9EZXNjcmlwdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZXNjcmlwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERlc2NyaXB0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEFjdGl2aXR5RGF0ZV92dWVfMSA9IHJlcXVpcmUoXCIuL0FjdGl2aXR5RGF0ZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY3Rpdml0eURhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChBY3Rpdml0eURhdGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgQ29udGFjdEluZm9fdnVlXzEgPSByZXF1aXJlKFwiLi9Db250YWN0SW5mby52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb250YWN0SW5mb1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KENvbnRhY3RJbmZvX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFBhcnRpY2lwYXRpbmdPcmdfdnVlXzEgPSByZXF1aXJlKFwiLi9QYXJ0aWNpcGF0aW5nT3JnLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnRpY2lwYXRpbmdPcmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChQYXJ0aWNpcGF0aW5nT3JnX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2lwaWVudENvdW50cnlfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlY2lwaWVudENvdW50cnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNpcGllbnRDb3VudHJ5X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2lwaWVudFJlZ2lvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1JlY2lwaWVudFJlZ2lvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWNpcGllbnRSZWdpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNpcGllbnRSZWdpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVHJhbnNhY3Rpb25zX3Z1ZV8xID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25zLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRyYW5zYWN0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRyYW5zYWN0aW9uc192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBMb2NhdGlvbl92dWVfMSA9IHJlcXVpcmUoXCIuL0xvY2F0aW9uLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxvY2F0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoTG9jYXRpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgU2VjdG9yX3Z1ZV8xID0gcmVxdWlyZShcIi4vU2VjdG9yLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFNlY3Rvcl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBMZWdhY3lEYXRhX3Z1ZV8xID0gcmVxdWlyZShcIi4vTGVnYWN5RGF0YS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMZWdhY3lEYXRhXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoTGVnYWN5RGF0YV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBDb25kaXRpb25zX3Z1ZV8xID0gcmVxdWlyZShcIi4vQ29uZGl0aW9ucy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb25kaXRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQ29uZGl0aW9uc192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWxhdGVkQWN0aXZpdHlfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWxhdGVkQWN0aXZpdHkudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVsYXRlZEFjdGl2aXR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVsYXRlZEFjdGl2aXR5X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFBvbGljeU1hcmtlcl92dWVfMSA9IHJlcXVpcmUoXCIuL1BvbGljeU1hcmtlci52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQb2xpY3lNYXJrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChQb2xpY3lNYXJrZXJfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVGFnX3Z1ZV8xID0gcmVxdWlyZShcIi4vVGFnLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRhZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRhZ192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBIdW1hbml0YXJpYW5TY29wZV92dWVfMSA9IHJlcXVpcmUoXCIuL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkh1bWFuaXRhcmlhblNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoSHVtYW5pdGFyaWFuU2NvcGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUGxhbm5lZERpc2J1cnNlbWVudF92dWVfMSA9IHJlcXVpcmUoXCIuL1BsYW5uZWREaXNidXJzZW1lbnQudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGxhbm5lZERpc2J1cnNlbWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFBsYW5uZWREaXNidXJzZW1lbnRfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVwb3J0aW5nT3JnYW5pemF0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlcG9ydGluZ09yZ2FuaXphdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlcG9ydGluZ09yZ2FuaXphdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QZXJpb2QgPSBleHBvcnRzLkJhc2VsaW5lID0gZXhwb3J0cy5Eb2N1bWVudExpbmsgPSBleHBvcnRzLlJlZmVyZW5jZSA9IGV4cG9ydHMuRGVzY3JpcHRpb24gPSBleHBvcnRzLkFnZ3JlZ2F0aW9uU3RhdHVzID0gZXhwb3J0cy5Bc2NlbmRpbmcgPSBleHBvcnRzLk1lYXN1cmUgPSBleHBvcnRzLlRpdGxlRWxlbWVudCA9IHZvaWQgMDtcbi8vIFByb3h5IGV4cG9ydCBhbGwgcmVsYXRlZCBjb21wb25lbnRzLlxudmFyIFRpdGxlX3Z1ZV8xID0gcmVxdWlyZShcIi4vVGl0bGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGl0bGVFbGVtZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVGl0bGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgTWVhc3VyZV92dWVfMSA9IHJlcXVpcmUoXCIuL01lYXN1cmUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWVhc3VyZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KE1lYXN1cmVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgSW5kaWNhdG9yQXNjZW5kaW5nX3Z1ZV8xID0gcmVxdWlyZShcIi4vSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzY2VuZGluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KEluZGljYXRvckFzY2VuZGluZ192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBBZ2dyZWdhdGlvblN0YXR1c192dWVfMSA9IHJlcXVpcmUoXCIuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFnZ3JlZ2F0aW9uU3RhdHVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQWdncmVnYXRpb25TdGF0dXNfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRGVzY3JpcHRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9EZXNjcmlwdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZXNjcmlwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERlc2NyaXB0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlZmVyZW5jZV92dWVfMSA9IHJlcXVpcmUoXCIuL1JlZmVyZW5jZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWZlcmVuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWZlcmVuY2VfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRG9jdW1lbnRMaW5rX3Z1ZV8xID0gcmVxdWlyZShcIi4vRG9jdW1lbnRMaW5rLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRvY3VtZW50TGlua1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERvY3VtZW50TGlua192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBCYXNlbGluZV92dWVfMSA9IHJlcXVpcmUoXCIuL0Jhc2VsaW5lLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhc2VsaW5lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQmFzZWxpbmVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUGVyaW9kX3Z1ZV8xID0gcmVxdWlyZShcIi4vUGVyaW9kLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBlcmlvZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFBlcmlvZF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BY3R1YWxWYWx1ZSA9IGV4cG9ydHMuVGFyZ2V0VmFsdWUgPSB2b2lkIDA7XG52YXIgVGFyZ2V0VmFsdWVfdnVlXzEgPSByZXF1aXJlKFwiLi9UYXJnZXRWYWx1ZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUYXJnZXRWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRhcmdldFZhbHVlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEFjdHVhbFZhbHVlX3Z1ZV8xID0gcmVxdWlyZShcIi4vQWN0dWFsVmFsdWUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWN0dWFsVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChBY3R1YWxWYWx1ZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbmRpY2F0b3IgPSBleHBvcnRzLlJlc3VsdFR5cGUgPSBleHBvcnRzLlJlZmVyZW5jZSA9IGV4cG9ydHMuRG9jdW1lbnRMaW5rID0gZXhwb3J0cy5UaXRsZURlc2NyaXB0aW9uID0gdm9pZCAwO1xuLy8gUHJveHkgZXhwb3J0IGFsbCByZWxhdGVkIGNvbXBvbmVudHMuXG52YXIgVGl0bGVEZXNjcmlwdGlvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1RpdGxlRGVzY3JpcHRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGl0bGVEZXNjcmlwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRpdGxlRGVzY3JpcHRpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRG9jdW1lbnRMaW5rX3Z1ZV8xID0gcmVxdWlyZShcIi4vRG9jdW1lbnRMaW5rLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRvY3VtZW50TGlua1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERvY3VtZW50TGlua192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWZlcmVuY2VfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWZlcmVuY2UudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmZXJlbmNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVmZXJlbmNlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlc3VsdFR5cGVfdnVlXzEgPSByZXF1aXJlKFwiLi9SZXN1bHRUeXBlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZXN1bHRUeXBlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEluZGljYXRvcl92dWVfMSA9IHJlcXVpcmUoXCIuL0luZGljYXRvci52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbmRpY2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChJbmRpY2F0b3JfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGllZFN0YXR1cyA9IGV4cG9ydHMuRmluYW5jZVR5cGUgPSBleHBvcnRzLkZsb3dUeXBlID0gZXhwb3J0cy5SZWNpcGllbnRSZWdpb24gPSBleHBvcnRzLlJlY2lwaWVudENvdW50cnkgPSBleHBvcnRzLlNlY3RvciA9IGV4cG9ydHMuRGlzYnVyc2VtZW50Q2hhbm5lbCA9IGV4cG9ydHMuUmVjZWl2ZXJPcmdhbml6YXRpb24gPSBleHBvcnRzLlByb3ZpZGVyT3JnYW5pemF0aW9uID0gZXhwb3J0cy5WYWx1ZSA9IGV4cG9ydHMuVHJhbnNhY3Rpb25EYXRlID0gZXhwb3J0cy5UcmFuc2FjdGlvblR5cGUgPSBleHBvcnRzLkFpZFR5cGUgPSBleHBvcnRzLkRlc2NyaXB0aW9uID0gdm9pZCAwO1xuLy8gUHJveHkgZXhwb3J0IGFsbCByZWxhdGVkIGNvbXBvbmVudHMuXG52YXIgRGVzY3JpcHRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9EZXNjcmlwdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZXNjcmlwdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERlc2NyaXB0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEFpZFR5cGVfdnVlXzEgPSByZXF1aXJlKFwiLi9BaWRUeXBlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFpZFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChBaWRUeXBlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRyYW5zYWN0aW9uVHlwZV92dWVfMSA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uVHlwZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFuc2FjdGlvblR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUcmFuc2FjdGlvblR5cGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVHJhbnNhY3Rpb25EYXRlX3Z1ZV8xID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25EYXRlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRyYW5zYWN0aW9uRGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRyYW5zYWN0aW9uRGF0ZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBWYWx1ZV92dWVfMSA9IHJlcXVpcmUoXCIuL1ZhbHVlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVmFsdWVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUHJvdmlkZXJPcmdhbml6YXRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm92aWRlck9yZ2FuaXphdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFByb3ZpZGVyT3JnYW5pemF0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2VpdmVyT3JnYW5pemF0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVjZWl2ZXJPcmdhbml6YXRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVjZWl2ZXJPcmdhbml6YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNlaXZlck9yZ2FuaXphdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBEaXNidXJzZW1lbnRDaGFubmVsX3Z1ZV8xID0gcmVxdWlyZShcIi4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaXNidXJzZW1lbnRDaGFubmVsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoRGlzYnVyc2VtZW50Q2hhbm5lbF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBTZWN0b3JfdnVlXzEgPSByZXF1aXJlKFwiLi9TZWN0b3IudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoU2VjdG9yX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2lwaWVudENvdW50cnlfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlY2lwaWVudENvdW50cnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNpcGllbnRDb3VudHJ5X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2lwaWVudFJlZ2lvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1JlY2lwaWVudFJlZ2lvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWNpcGllbnRSZWdpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNpcGllbnRSZWdpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRmxvd1R5cGVfdnVlXzEgPSByZXF1aXJlKFwiLi9GbG93VHlwZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGbG93VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KEZsb3dUeXBlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEZpbmFuY2VUeXBlX3Z1ZV8xID0gcmVxdWlyZShcIi4vRmluYW5jZVR5cGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmluYW5jZVR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChGaW5hbmNlVHlwZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBUaWVkU3RhdHVzX3Z1ZV8xID0gcmVxdWlyZShcIi4vVGllZFN0YXR1cy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaWVkU3RhdHVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVGllZFN0YXR1c192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Eb2N1bWVudExpbmsgPSBleHBvcnRzLlRvdGFsRXhwZW5kaXR1cmUgPSBleHBvcnRzLlJlY2lwaWVudENvdW50cnlCdWRnZXQgPSBleHBvcnRzLlJlcG9ydGluZ1JlZ2lvbkJ1ZGdldCA9IGV4cG9ydHMuUmVwb3J0aW5nT3JnQnVkZ2V0ID0gZXhwb3J0cy5Ub3RhbEJ1ZGdldCA9IGV4cG9ydHMuUmVwb3J0aW5nT3JnYW5pc2F0aW9uID0gdm9pZCAwO1xuLy8gUHJveHkgZXhwb3J0IGFsbCByZWxhdGVkIGNvbXBvbmVudHMuXG52YXIgUmVwb3J0aW5nT3JnYW5pc2F0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlcG9ydGluZ09yZ2FuaXNhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlcG9ydGluZ09yZ2FuaXNhdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBUb3RhbEJ1ZGdldF92dWVfMSA9IHJlcXVpcmUoXCIuL1RvdGFsQnVkZ2V0LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRvdGFsQnVkZ2V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVG90YWxCdWRnZXRfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVwb3J0aW5nT3JnQnVkZ2V0X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlcG9ydGluZ09yZ0J1ZGdldFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlcG9ydGluZ09yZ0J1ZGdldF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZXBvcnRpbmdSZWdpb25CdWRnZXRfdnVlXzEgPSByZXF1aXJlKFwiLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwb3J0aW5nUmVnaW9uQnVkZ2V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVwb3J0aW5nUmVnaW9uQnVkZ2V0X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlY2lwaWVudENvdW50cnlCdWRnZXRfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlY2lwaWVudENvdW50cnlCdWRnZXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZWNpcGllbnRDb3VudHJ5QnVkZ2V0X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRvdGFsRXhwZW5kaXR1cmVfdnVlXzEgPSByZXF1aXJlKFwiLi9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRvdGFsRXhwZW5kaXR1cmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUb3RhbEV4cGVuZGl0dXJlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIERvY3VtZW50TGlua192dWVfMSA9IHJlcXVpcmUoXCIuL0RvY3VtZW50TGluay52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEb2N1bWVudExpbmtcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEb2N1bWVudExpbmtfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCI8dGVtcGxhdGU+XG4gIDxzZWN0aW9uIGNsYXNzPVwibWFpbiBtdC0xMCBzbTpteC0xMCB4bDpteC0yNCB4bDpweC0xXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtYWluX19jb250YWluZXIgcm91bmRlZC1sZyBiZy1ibHVlY29yYWwgcGItOCBzbTptYi0xMCBtZDptYi0yMCBtZDpmbGV4IG1kOmJnLW5vbmUgbWQ6cGItMFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnQgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmx1ZWNvcmFsIHB4LTMgcHQtNSBwYi03MiB0ZXh0LXdoaXRlIHNtOnJvdW5kZWQtci1sZyBzbTpyb3VuZGVkLWwtbGcgc206cHgtNSBzbTpwdC0xMCBtZDpiYXNpcy0yLzQgbWQ6cm91bmRlZC1yLW5vbmUgbWQ6cGItMTYgbGc6cHQtNDQgbGc6cGItNDQgeGw6cHgtMjRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdF9fY29udGFpbmVyIHJvdW5kZWQtbGcgcC01IHNtOnAtMTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZnRfX3RpdGxlIGZvbnQtYm9sZFwiPklBVEkgUHVibGlzaGluZyBUb29sPC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwicHQtMiBzbTpwdC02IHNtOnBiLThcIj5cbiAgICAgICAgICAgIFdlbGNvbWUgdG8gSUFUSSBQdWJsaXNoZXIuIFB1Ymxpc2ggSUFUSSBkYXRhIG9uIHlvdXIgb3JnYW5pc2F0aW9u4oCZc1xuICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYW5kIGh1bWFuaXRhcmlhbiBmaW5hbmNpbmcgYW5kIGFjdGl2aXRpZXMuIEVudGVyIHlvdXJcbiAgICAgICAgICAgIGxvZ2luIGluZm9ybWF0aW9uIGlmIHlvdeKAmXJlIGFscmVhZHkgYSB1c2VyIG9yIGNyZWF0ZSBhIG5ldyBhY2NvdW50XG4gICAgICAgICAgICBpZiB5b3XigJlyZSBuZXcgaGVyZS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQgPT09ICdKb2luIE5vdydcbiAgICAgICAgICAgICAgICAgID8gXCJIYXZlbid0IHJlZ2lzdGVyZWQgeWV0P1wiXG4gICAgICAgICAgICAgICAgICA6ICdBbHJlYWR5IGhhdmUgYW4gYWNjb3VudD8nXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTEgYm9yZGVyLWItMiBib3JkZXItYi10cmFuc3BhcmVudCB0ZXh0LWJhc2UgdGV4dC10dXJxdW9pc2UgaG92ZXI6Ym9yZGVyLWItMiBob3Zlcjpib3JkZXItYi10dXJxdW9pc2VcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInRvZ2dsZVBhZ2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcGFnZUNvbnRlbnQgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxTaWduSW4gdi1pZj1cInBhZ2VDb250ZW50ID09PSAnSm9pbiBOb3cnXCIgOm1lc3NhZ2U9XCJtZXNzYWdlXCIgLz5cbiAgICAgIDxKb2luTm93IHYtZWxzZSAvPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IFNpZ25JbiBmcm9tICcuL3BhcnRpYWxzL1NpZ25Jbi52dWUnO1xuaW1wb3J0IEpvaW5Ob3cgZnJvbSAnLi9wYXJ0aWFscy9Kb2luTm93LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBKb2luTm93LFxuICAgIFNpZ25JbixcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBwYWdlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIHNldHVwKHByb3BzKSB7XG4gICAgY29uc3QgcGFnZUNvbnRlbnQgPSByZWYocHJvcHMucGFnZSA9PT0gJ3NpZ25pbicgPyAnSm9pbiBOb3cnIDogJ1NpZ24gSW4nKTtcblxuICAgIGZ1bmN0aW9uIHRvZ2dsZVBhZ2UoKSB7XG4gICAgICBwYWdlQ29udGVudC52YWx1ZSA9XG4gICAgICAgIHBhZ2VDb250ZW50LnZhbHVlID09PSAnSm9pbiBOb3cnID8gJ1NpZ24gSW4nIDogJ0pvaW4gTm93JztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICB0b2dnbGVQYWdlLFxuICAgIH07XG4gIH0sXG59KTtcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwic2hpbW1lcl9fYmxvY2tcIiBzdHlsZT1cIm1heC13aWR0aDogNTE1cHhcIj48L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbi5zaGltbWVyX19ibG9jayB7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XG4gIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uLW5hbWU6IHBsYWNlSG9sZGVyU2hpbW1lcjtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBhbmltYXRpb24tZGVsYXk6IDAuNXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgI2VkZWRlZCAxNC4zNiUsICNkN2Q2ZDYgNTYuMjklLCAjZWRlZGVkIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDI0NHB4IDEwNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTlweDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogM3B4IDZweCAzcHggMHB4O1xufVxuXG5Aa2V5ZnJhbWVzIHBsYWNlSG9sZGVyU2hpbW1lciB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDAlIC0gMzAwcHgpIDA7XG4gIH1cblxuICAyMCUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcbiAgfVxuXG4gIDgwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlICsgMzAwcHgpIDA7XG4gIH1cblxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgKyAzMDBweCkgMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm10LTE0XCI+XG4gICAgPGRpdiBjbGFzcz1cInJlc2V0IHRleHQtY2VudGVyXCI+XG4gICAgICA8aDI+UGFzc3dvcmQgUmVjb3Zlcnk8L2gyPlxuICAgICAgPHAgY2xhc3M9XCJtYi01XCI+XG4gICAgICAgIEFuIGVtYWlsIGhhcyBiZWVuIHNlbnQgd2l0aCBmdXJ0aGVyIGluc3RydWN0aW9ucywgcGxlYXNlIGNoZWNrIGl0IG91dFxuICAgICAgICB3aGVuIHlvdSBnZXQgaXQuXG4gICAgICA8L3A+XG4gICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInZlcmlmaWNhdGlvbiBtLWF1dG9cIiBpY29uPVwiaWMtdmVyaWZpY2F0aW9uXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwic21vb3RoIC1tYi03IGJnLVsjZTVlNWU1XSBweC01IHB5LTcgc206cHgtMTAgc206cHktMTQgbWQ6LW1iLTIwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gbWF4LXctWzcwMHB4XVwiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJyb3VuZGVkIGJnLXdoaXRlIHB5LTQgc2hhZG93LXRleHRib3ggc206cHktOFwiPlxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInB5LTQgcHgtNiBzbTpweS02IHNtOnB4LTEyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibXktMiB0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlY29yYWxcIj5cbiAgICAgICAgICAgIFdoYXQgaXMgSUFUSSBQdWJsaXNoZXI/XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICBJQVRJIFB1Ymxpc2hlciBlbmFibGVzIG9yZ2FuaXNhdGlvbnMgdG8gcHVibGlzaCBkYXRhIG9uIGFjdGl2aXRpZXNcbiAgICAgICAgICAgIGFuZCByZXNvdXJjZSBmbG93cyBhY2NvcmRpbmcgdG8gdGhlIElBVEkgU3RhbmRhcmQuIFRoZSBJQVRJIFN0YW5kYXJkXG4gICAgICAgICAgICBpcyBhIHNldCBvZiBydWxlcyBhbmQgZ3VpZGFuY2Ugb24gaG93IHRvIHB1Ymxpc2ggdXNlZnVsIGRldmVsb3BtZW50XG4gICAgICAgICAgICBhbmQgaHVtYW5pdGFyaWFuIGRhdGEuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2FydGljbGU+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwicHktNCBweC02IHNtOnB5LTYgc206cHgtMTJcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJteS0yIHRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbFwiPlxuICAgICAgICAgICAgVXNlIElBVEkgUHVibGlzaGVyIHRvOlxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibXQtNCBtbC00IGxpc3QtZGlzYyB0ZXh0LWJhc2UgdGV4dC1ibHVlY29yYWxcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICAgID5SZWdpc3RlciB5b3VyIG9yZ2FuaXNhdGlvbiB3aXRoIGFuIElBVEkgUHVibGlzaGVyIGFjY291bnQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICAgID5VbmRlcnN0YW5kIHRoZSBkYXRhIGZpZWxkcyBpbiB0aGUgSUFUSSBTdGFuZGFyZCAod2l0aCBJQVRJXG4gICAgICAgICAgICAgICAgU3RhbmRhcmQgUmVmZXJlbmNlIGRlZmluaXRpb25zLCBoZWxwZnVsIGV4cGxhbmF0aW9ucyBhbmQgbGlua3NcbiAgICAgICAgICAgICAgICB0byBndWlkYW5jZSk8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICAgID5Qcm92aWRlIHlvdXIgb3JnYW5pc2F0aW9u4oCZcyBkYXRhIGVhc2lseSBieSBjb21wbGV0aW5nIG9ubGluZVxuICAgICAgICAgICAgICAgIGZvcm1zLiBPciB1cGxvYWQgZGF0YSBvbiBtdWx0aXBsZSBhY3Rpdml0aWVzIG9uIGEgQ1NWIG9yIC54bWxcbiAgICAgICAgICAgICAgICBmaWxlIHdpdGggdGhlIEJ1bGsgVXBsb2FkIGZlYXR1cmU8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICAgID5SdW4gYXV0b21hdGljIGNoZWNrcyAodmlhIHRoZSBJQVRJIFZhbGlkYXRvcikgZm9yIGVycm9ycyBiZWZvcmVcbiAgICAgICAgICAgICAgICBwdWJsaXNoaW5nIHlvdXIgZGF0YTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAgICAgPlB1Ymxpc2ggeW91ciBkYXRhLiBJQVRJIFB1Ymxpc2hlciB3aWxsIGFkZCB5b3VyIGRhdGEgdG8gdGhlXG4gICAgICAgICAgICAgICAgSUFUSSBSZWdpc3RyeSAod2hlcmUgbGlua3MgdG8gYWxsIElBVEkgZGF0YSBpcyBmb3VuZCk8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIElBVEkgUHVibGlzaGVyIGhhcyBiZWVuIGJ1aWx0IHRvIHN1cHBvcnQgb3JnYW5pc2F0aW9ucyB0aGF0IHB1Ymxpc2hcbiAgICAgICAgICAgIGEgbGltaXRlZCBudW1iZXIgb2YgZGV2ZWxvcG1lbnQgYW5kIGh1bWFuaXRhcmlhbiBhY3Rpdml0aWVzLiBBblxuICAgICAgICAgICAg4oCYYWN0aXZpdHnigJkgaXMgYW4gaW5kaXZpZHVhbCBwcm9qZWN0IG9yIGFub3RoZXIgdW5pdCBvZiBkZXZlbG9wbWVudFxuICAgICAgICAgICAgYW5kIGh1bWFuaXRhcmlhbiB3b3JrLCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmdhbmlzYXRpb24gdGhhdFxuICAgICAgICAgICAgaXMgcHVibGlzaGluZyB0aGUgZGF0YS4gT3JnYW5pc2F0aW9ucyB3aG8gcHVibGlzaCBhIGxpbWl0ZWQgbnVtYmVyXG4gICAgICAgICAgICBvZiBhY3Rpdml0aWVzIHRlbmQgdG8gcmVwcmVzZW50IHNtYWxsIGFuZCBtZWRpdW0gc2l6ZWRcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbnMuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIExhcmdlIG9yZ2FuaXNhdGlvbnMsIHN1Y2ggYXMgZG9ub3IgZ292ZXJubWVudHMgb3IgVU4gYWdlbmNpZXNcbiAgICAgICAgICAgIGRlbGl2ZXJpbmcgMTAwKyBhY3Rpdml0aWVzIGFyZSBhZHZpc2VkIG5vdCB0byB1c2UgSUFUSSBQdWJsaXNoZXIuXG4gICAgICAgICAgICBJbnN0ZWFkIHRoZXNlIG9yZ2FuaXNhdGlvbnMgbGlrZWx5IG5lZWQgdG8gdXNlIGFuIGFsdGVybmF0aXZlXG4gICAgICAgICAgICB0ZWNobmljYWwgc29sdXRpb24gdGhhdCBlbmFibGVzIHRoZSBwdWJsaWNhdGlvbiBvZiBsYXJnZSB2b2x1bWVzIG9mXG4gICAgICAgICAgICBkYXRhLiBQbGVhc2UgZW1haWwgdGhlIElBVEkgSGVscGRlc2sgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgaHJlZj1cIm1haWx0bzogc3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgc3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnIDwvYVxuICAgICAgICAgICAgPi5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPGFydGljbGUgY2xhc3M9XCJvdW5kZWQgcHktNCBweC02IHNtOnB5LTYgc206cHgtMTJcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJteS0yIHRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbFwiPlxuICAgICAgICAgICAgRGV2ZWxvcG1lbnQgb2YgSUFUSSBQdWJsaXNoZXJcbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIElBVEkgUHVibGlzaGVyIHdhcyBmaXJzdCBsYXVuY2hlZCBpbiBEZWNlbWJlciAyMDIyIGJ5IHRoZSBJQVRJXG4gICAgICAgICAgICBTZWNyZXRhcmlhdCBhbmQgaGFzIGJlZW4gZGV2ZWxvcGVkIGJ5XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8veW91bmdpbm5vdmF0aW9ucy5jb20ubnAvXCJcbiAgICAgICAgICAgICAgPllvdW5nIElubm92YXRpb25zIDwvYVxuICAgICAgICAgICAgPiwgYSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBmaXJtIGJhc2VkIGluIE5lcGFsLiBJQVRJIFB1Ymxpc2hlciBpc1xuICAgICAgICAgICAgZnVsbHkgYWxpZ25lZCB3aXRoIHRoZSBJQVRJIFN0YW5kYXJkIFhNTFxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vaWF0aXN0YW5kYXJkLm9yZy9lbi9pYXRpLXN0YW5kYXJkLzIwMy9zY2hlbWEvXCI+XG4gICAgICAgICAgICAgIHNjaGVtYTwvYVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgYW5kXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vaWF0aXN0YW5kYXJkLm9yZy9lbi9pYXRpLXN0YW5kYXJkLzIwMy9ydWxlc2V0cy9cIlxuICAgICAgICAgICAgICA+cnVsZXNldHMgPC9hXG4gICAgICAgICAgICA+LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0IGxhbmc9XCJ0c1wiPjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwic21vb3RoIC1tYi03IGJnLVsjZTVlNWU1XSBweC01IHB5LTcgc206cHgtMTAgc206cHktMTQgbWQ6LW1iLTIwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gbWF4LXctWzcwMHB4XVwiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJyb3VuZGVkIGJnLXdoaXRlIHB5LTQgc2hhZG93LXRleHRib3ggc206cHktOFwiPlxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInB5LTQgcHgtNiBzbTpweS02IHNtOnB4LTEyXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIElBVEkgU3RhbmRhcmQgVGhlIElBVEkgU3RhbmRhcmQgaXMgYSBzZXQgb2YgcnVsZXMgYW5kIGd1aWRhbmNlIG9uXG4gICAgICAgICAgICBob3cgdG8gcHVibGlzaCB1c2VmdWwgZGV2ZWxvcG1lbnQgYW5kIGh1bWFuaXRhcmlhbiBkYXRhLiBJQVRJXG4gICAgICAgICAgICBQdWJsaXNoZXIgd2lsbCB0YWtlIHlvdSB0aHJvdWdoIGFsbCBkYXRhIGZpZWxkcyAod2hpY2ggYXJlIHJlZmVycmVkXG4gICAgICAgICAgICB0byBhcyDigJhlbGVtZW50c+KAmSkgb2YgdGhlIElBVEkgU3RhbmRhcmQsIG9mZmVyaW5nIGhlbHBmdWxcbiAgICAgICAgICAgIGV4cGxhbmF0aW9ucyBhbmQgbGlua3MgdG8gZnVydGhlciBpbmZvcm1hdGlvbiBhbmQgZ3VpZGFuY2UuIFRoZSBJQVRJXG4gICAgICAgICAgICBTdGFuZGFyZCByZXF1aXJlcyBvcmdhbmlzYXRpb25zIHRvIHB1Ymxpc2ggdHdvIHNldHMgb2YgZGF0YTpcbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPGFydGljbGUgY2xhc3M9XCJweS00IHB4LTYgc206cHktNiBzbTpweC0xMlwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTIgdGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICAxLiBPcmdhbmlzYXRpb24gRGF0YVxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIElBVEkgU3RhbmRhcmQgWW91IHdpbGwgYmUgYXNrZWQgdG8gcHVibGlzaCBkYXRhIGFib3V0IHlvdXIgZW50aXJlXG4gICAgICAgICAgICBvcmdhbmlzYXRpb24uIFRoaXMgaW5jbHVkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgeW91clxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uLCBzdWNoIGFzIHlvdXIgbmFtZSBhbmQgdGhlIHR5cGUgb2Ygb3JnYW5pc2F0aW9uIHlvdVxuICAgICAgICAgICAgYXJlLiBZb3UgY2FuIGFsc28gcHJvdmlkZSBkYXRhIG9uOlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJtdC00IG1sLTQgbGlzdC1kaXNjIHRleHQtYmFzZSB0ZXh0LWJsdWVjb3JhbFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAgICAgPlRvdGFsIHNwZW5kIGJ5IHlvdXIgb3JnYW5pc2F0aW9uIG92ZXIgdGhlIGxhc3QgeWVhclxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAgICAgPlRvdGFsIGFubnVhbCBwbGFubmVkIGJ1ZGdldCBmb3IgeW91ciBvcmdhbmlzYXRpb24gaW4gZWFjaCBvZlxuICAgICAgICAgICAgICAgIHRoZSBuZXh0IHRocmVlIHllYXJzLCB3aGVyZSBhdmFpbGFibGU8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICAgID5QbGFubmVkIGJ1ZGdldHMgYnJva2VuIGRvd24gYnkgaW5kaXZpZHVhbCByZWNpcGllbnQgY291bnRyaWVzXG4gICAgICAgICAgICAgICAgb3IgcmVnaW9uczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAgICAgPlJ1biBhdXRvbWF0aWMgY2hlY2tzICh2aWEgdGhlIElBVEkgVmFsaWRhdG9yKSBmb3IgZXJyb3JzIGJlZm9yZVxuICAgICAgICAgICAgICAgIHB1Ymxpc2hpbmcgeW91ciBkYXRhPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCJcbiAgICAgICAgICAgICAgICA+VXNlZnVsIGJhY2tncm91bmQgZG9jdW1lbnRzLCBzdWNoIGFzIGNvdW50cnkgYWN0aW9uIHBsYW5zIGFuZFxuICAgICAgICAgICAgICAgIGFubnVhbCByZXBvcnRzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgaHJlZj1cIi9vcmdhbmlzYXRpb25cIlxuICAgICAgICAgICAgICA+UHVibGlzaCB5b3VyIE9yZ2FuaXNhdGlvbiBEYXRhPC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2FydGljbGU+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwicHktNCBweC02IHNtOnB5LTYgc206cHgtMTJcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJteS0yIHRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbFwiPlxuICAgICAgICAgICAgMi4gQWN0aXZpdHkgRGF0YVxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIFRoZSBJQVRJIFN0YW5kYXJkIGFsc28gcmVxdWlyZXMgb3JnYW5pc2F0aW9ucyB0byBwcm92aWRlIGRhdGEgYWJvdXRcbiAgICAgICAgICAgIHRoZWlyIGRldmVsb3BtZW50IGFuZCBodW1hbml0YXJpYW4g4oCYYWN0aXZpdGllc+KAmS4gRm9yIGVhY2ggYWN0aXZpdHksXG4gICAgICAgICAgICB5b3UgY2FuIHB1Ymxpc2ggYSB3aWRlIHJhbmdlIG9mIGluZm9ybWF0aW9uLCBpbmNsdWRpbmc6XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx1bCBjbGFzcz1cIm15LTQgbWwtNCBsaXN0LWRpc2MgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+XG4gICAgICAgICAgICAgICAgPHU+QmFzaWMgaW5mb3JtYXRpb24gYW5kIGlkZW50aWZpY2F0aW9uIDwvdT5vZiB0aGUgYWN0aXZpdHkgZS5nLlxuICAgICAgICAgICAgICAgIHByb3ZpZGluZyBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGZvciB5b3VyIGFjdGl2aXR5XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+XG4gICAgICAgICAgICAgICAgPHU+UGFydGljaXBhdGluZyBvcmdhbmlzYXRpb25zPC91PiDigJMgaW5mb3JtYXRpb24gb24gd2hpY2ggb3RoZXJcbiAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25zIGFyZSBpbnZvbHZlZCBpbiB0aGUgYWN0aXZpdHlcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj5cbiAgICAgICAgICAgICAgICA8dT5QYXJ0aWNpcGF0aW5nIG9yZ2FuaXNhdGlvbnM8L3U+IOKAkyBpbmZvcm1hdGlvbiBvbiB3aGljaCBvdGhlclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbnMgYXJlIGludm9sdmVkIGluXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+XG4gICAgICAgICAgICAgICAgPHU+RmluYW5jaWFsIGRhdGE8L3U+IOKAkyBjb3ZlcnMgdGhlIGJ1ZGdldHMgYW5kIHRoZSB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICBmb3IgdGhlIGFjdGl2aXR5XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+XG4gICAgICAgICAgICAgICAgPHU+Q2xhc3NpZmljYXRpb25zPC91PiDigJMgaGVscHMgY2F0ZWdvcmlzZSB0aGUgYWN0aXZpdHkgdXNpbmdcbiAgICAgICAgICAgICAgICB2YXJpb3VzIGRldmVsb3BtZW50IGFuZCBodW1hbml0YXJpYW4gdGF4b25vbWllcy4gRm9yIGV4YW1wbGUsXG4gICAgICAgICAgICAgICAgd2hhdCBzZWN0b3IgZG9lcyB0aGUgYWN0aXZpdHkgdGFyZ2V0IG9yIHN1cHBvcnQgKGUuZy4gcHJpbWFyeVxuICAgICAgICAgICAgICAgIGVkdWNhdGlvbiBvciBhZ3JpY3VsdHVyZSksIG9yIHdoYXQgdHlwZSBvZiBhaWQgaXMgdXNlZCB0byBmdW5kXG4gICAgICAgICAgICAgICAgdGhlIGFjdGl2aXR5IChlLmcuIGEgZ3JhbnQgb3IgbG9hbilcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj5cbiAgICAgICAgICAgICAgICA8dT5MaW5rcyB0byBvdGhlciBkYXRhPC91PiB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZCBvblxuICAgICAgICAgICAgICAgIHRoZSBhY3Rpdml0eSBlbHNld2hlcmVcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj5cbiAgICAgICAgICAgICAgICBUaGUgPHU+cmVzdWx0czwvdT4gdGhhdCB0aGUgYWN0aXZpdHkgaXMgYWltaW5nIHRvIGFjaGlldmVcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtbGcgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICBQdWJsaXNoaW5nIGRhdGEgYXQgZWl0aGVyIEFjdGl2aXR5IGxldmVsIG9yIFRyYW5zYWN0aW9uIGxldmVsXG4gICAgICAgICAgPC9oNj5cblxuICAgICAgICAgIDxwIGNsYXNzPVwibXktNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIEFzIGxpc3RlZCBhYm92ZSwgeW91IHdpbGwgbmVlZCB0byBwcm92aWRlIGRhdGEgb24geW91ciBhY3Rpdml0eeKAmXNcbiAgICAgICAgICAgIHRyYW5zYWN0aW9ucywgd2hpY2ggc2hvd3MgaG93IHRoZSBhY3Rpdml0eSBpcyBiZWluZyBmaW5hbmNlZCBhbmQgaG93XG4gICAgICAgICAgICB0aGUgZmluYW5jZSBpcyBiZWluZyB1c2VkLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cIm15LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICBUaGVyZSBhcmUgc3BlY2lmaWMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdGhhdCB5b3UgY2FuIGVpdGhlciBwdWJsaXNoXG4gICAgICAgICAgICBhYm91dCB5b3VyIGVudGlyZSBhY3Rpdml0eSwgb3IgYWJvdXQgaW5kaXZpZHVhbCB0cmFuc2FjdGlvbnMgKGVhY2hcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uIHJlcHJlc2VudHMgbW9uZXkgZmxvd2luZyBpbiBvciBvdXQgb2YgdGhlIGFjdGl2aXR5KS4gRm9yXG4gICAgICAgICAgICBleGFtcGxlLCB5b3UgY2FuIHB1Ymxpc2ggZGF0YSBvbiB3aGljaCBjb3VudHJ5L3JlZ2lvbiB5b3VyIGVudGlyZVxuICAgICAgICAgICAgYWN0aXZpdHkgaXMgYmVuZWZpdHRpbmcsIG9yIHlvdSBjYW4gcHVibGlzaCBkYXRhIG9uIHdoaWNoXG4gICAgICAgICAgICBjb3VudHJ5L3JlZ2lvbiBlYWNoIHRyYW5zYWN0aW9uIGlzIGJlbmVmaXR0aW5nLiBIb3dldmVyIHlvdSBtdXN0IG5vdFxuICAgICAgICAgICAgcHVibGlzaCB0aGlzIGluZm9ybWF0aW9uIGF0IGJvdGggYWN0aXZpdHkgYW5kIHRyYW5zYWN0aW9uIGxldmVscy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJteS00IHRleHQtYmFzZVwiPlxuICAgICAgICAgICAgSUFUSSBQdWJsaXNoZXIgcHJvdmlkZXMgZXhwbGFuYXRpb25zIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIElBVElcbiAgICAgICAgICAgIFN0YW5kYXJkIGFuZCB0ZWxscyB5b3Ugd2hlcmUgeW91IGhhdmUgYSBjaG9pY2Ugb2Ygd2hpY2ggbGV2ZWwgdG9cbiAgICAgICAgICAgIHB1Ymxpc2ggZGF0YSBmb3IuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXktNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBocmVmPVwiL29yZ2FuaXNhdGlvblwiXG4gICAgICAgICAgICAgID5QdWJsaXNoIHlvdXIgT3JnYW5pc2F0aW9uIERhdGE8L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPGFydGljbGUgY2xhc3M9XCJweS00IHB4LTYgc206cHktNiBzbTpweC0xMlwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTIgdGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICBEb3dubG9hZCBQREYgb2YgSUFUSSBTdGFuZGFyZCBkYXRhIGZpZWxkc1xuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIElBVEkgU3RhbmRhcmQgV2hpbHN0IGdhdGhlcmluZyBhbmQgcHJlcGFyaW5nIHlvdXIgb3JnYW5pc2F0aW9u4oCZc1xuICAgICAgICAgICAgSUFUSSBkYXRhLCB5b3UgbWF5IGZpbmQgaXQgaGVscGZ1bCB0byB2aWV3IHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgIHNwcmVhZHNoZWV0cyB0aGF0IHByb3ZpZGUgaW5mb3JtYXRpb24gb24gYWxsIG9mIHRoZSBkYXRhIGVsZW1lbnRzIGluXG4gICAgICAgICAgICB0aGUgSUFUSSBTdGFuZGFyZC4gWW91IHdpbGwgYWxzbyBiZSBhYmxlIHRvIHZpZXcgdGhpcyBpbmZvcm1hdGlvbiBhc1xuICAgICAgICAgICAgeW91IHdvcmsgeW91ciB3YXkgdGhyb3VnaCBjb21wbGV0aW5nIHRoZSBmb3JtcyBmb3IgZWFjaCBlbGVtZW50IG9uXG4gICAgICAgICAgICBJQVRJIFB1Ymxpc2hlci5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzPVwibXktMlwiPlxuICAgICAgICAgICAgW0lBVEkgT3JnYW5pc2F0aW9uIFN0YW5kYXJkIGRhdGEgUERGXVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3M9XCJteS0yXCI+XG4gICAgICAgICAgICBbSUFUSSBBY3Rpdml0eSBTdGFuZGFyZCBkYXRhIFBERl1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPGFydGljbGUgY2xhc3M9XCJweS00IHB4LTYgc206cHktNiBzbTpweC0xMlwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTIgdGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICBJQVRJIFN0YW5kYXJkIHJlZmVyZW5jZVxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIFlvdSBjYW4gbG9vayB1cCBkZXRhaWxlZCBhbmQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIGFib3V0IGVhY2hcbiAgICAgICAgICAgIGVsZW1lbnQgb2YgdGhlIElBVEkgU3RhbmRhcmQgb24gdGhlIElBVEkgUmVmZXJlbmNlIHNlY3Rpb24gb2YgSUFUSeKAmXNcbiAgICAgICAgICAgIG1haW4gd2Vic2l0ZTpcbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2lhdGlzdGFuZGFyZC5vcmcvZW4vaWF0aS1zdGFuZGFyZC8yMDMvYWN0aXZpdHktc3RhbmRhcmQvXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXktMlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHU+QWN0aXZpdHkgU3RhbmRhcmQ8L3U+IDwvYVxuICAgICAgICAgID48YnIgLz5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vaWF0aXN0YW5kYXJkLm9yZy9lbi9pYXRpLXN0YW5kYXJkLzIwMy9vcmdhbmlzYXRpb24tc3RhbmRhcmQvXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXktMlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHU+IE9yZ2FuaXNhdGlvbiBTdGFuZGFyZDwvdT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInNtb290aCAtbWItNyBiZy1bI2U1ZTVlNV0gcHgtNSBweS03IHNtOnB4LTEwIHNtOnB5LTE0IG1kOi1tYi0yMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvIG1heC13LVs3MDBweF1cIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwicm91bmRlZCBiZy13aGl0ZSBweS00IHNoYWRvdy10ZXh0Ym94IHNtOnB5LThcIj5cbiAgICAgICAgPGFydGljbGUgY2xhc3M9XCJweS00IHB4LTYgc206cHktNiBzbTpweC0xMlwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbFwiPlN1cHBvcnQ8L2gzPlxuXG4gICAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtYmFzZVwiPlxuICAgICAgICAgICAgSWYgeW91ciBvcmdhbmlzYXRpb24gbmVlZHMgc3VwcG9ydCB0byB1c2UgSUFUSSBQdWJsaXNoZXIgb3IgaGFzXG4gICAgICAgICAgICBxdWVzdGlvbnMgYWJvdXQgd2hhdCBkYXRhIHRvIHB1Ymxpc2ggcGxlYXNlIGNvbnRhY3QgSUFUSeKAmXMgSGVscGRlc2s6XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgaHJlZj1cIm1haWx0bzpzdXBwb3J0QGlhdGlzdGFuZGFyZC5vcmdcIlxuICAgICAgICAgICAgICA+c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnLjwvYVxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICBZb3UgbWF5IGFsc28gam9pbiBJQVRJ4oCZcyBvbmxpbmUgY29tbXVuaXR5IGF0XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vaWF0aWNvbm5lY3Qub3JnL1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIElBVEkgQ29ubmVjdFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgLCB3aGVyZSB5b3UgY2FuIHBvc3QgbWVzc2FnZXMgYWJvdXQgSUFUSSBwdWJsaXNoaW5nIGluIHRoZVxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2lhdGljb25uZWN0Lm9yZy9kYXRhLXB1Ymxpc2hpbmctY29wL2Fib3V0XCJcbiAgICAgICAgICAgICAgPkRhdGEgUHVibGlzaGluZyBDb21tdW5pdHkgb2YgUHJhY3RpY2UuPC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2FydGljbGU+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiIsIjx0ZW1wbGF0ZT5cblxuICA8Zm9vdGVyXG4gICAgaWQ9XCJmb290ZXJcIlxuICAgIGNsYXNzPVwibXQtNyBiZy1ibHVlY29yYWwgdGV4dC1zbSBsZWFkaW5nLTYgdGV4dC1uLTIwIHNtOm10LTEwIG1kOm10LTIwXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYiBib3JkZXItd2hpdGUgYm9yZGVyLW9wYWNpdHktMjBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJteC0zIHB5LTEwIHNtOm14LTEwIHhsOm14LTI0IHhsOnB4LTFcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZm9vdGVyX19jb250YWluZXIgZ3JpZCBncmlkLWZsb3ctcm93IGdhcC04IHNtOmdhcC15LTEwIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy00IGxnOmp1c3RpZnktaXRlbXMtY2VudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YSBocmVmPVwiL1wiPlxuICAgICAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cImgtYXV0byB3LTYwIHRleHQtNnhsIHNtOnctNjRcIiBpY29uPVwiZm9vdGVyLWxvZ29cIiAvPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlcl9fbGlua3NcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtbi0xMFwiPklBVEkgUHVibGlzaGVyPC9zcGFuPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibXQtMiBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiL2FjdGl2aXRpZXNcIj5EYXNoYm9hcmQ8L2E+PC9saT5cbiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCIvYWJvdXRcIj5BYm91dDwvYT48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyX19saW5rc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1uLTEwXCI+SUFUSSBTdGFuZGFyZDwvc3Bhbj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm10LTIgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIi9pYXRpLXN0YW5kYXJkXCI+SUFUSSBTdGFuZGFyZDwvYT48L2xpPlxuICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIi9wdWJsaXNoaW5nLWNoZWNrbGlzdFwiPlB1Ymxpc2hpbmcgQ2hlY2tsaXN0PC9hPjwvbGk+XG4gICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiL3N1cHBvcnRcIj5TdXBwb3J0PC9hPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJfX2xpbmtzIGxnOmp1c3RpZnktc2VsZi1lbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGxlYWRpbmctNVwiPlxuICAgICAgICAgICAgICA8cD5QYXJ0IG9mIHRoZSBJQVRJIFVuaWZpZWQgUGxhdGZvcm08L3A+XG4gICAgICAgICAgICAgIDxwPkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBR1BMLjwvcD5cbiAgICAgICAgICAgICAgPHA+RG9jdW1lbnRhdGlvbiBsaWNlbnNlZCB1bmRlciBDQyBCWSAzLjA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS01IGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LW4tMTBcIj5cbiAgICAgICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJ0ZXh0LTJ4bFwiIGljb249XCJoZWFkcGhvbmVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZVwiXG4gICAgICAgICAgICAgICAgPkFueSBxdWVzdGlvbnM/IENvbnRhY3QgU3VwcG9ydDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1zbSB0ZXh0LW4tMTBcIiBocmVmPVwibWFpbHRvOnN1cHBvcnRAaWF0aXN0YW5kYXJkLm9yZ1wiXG4gICAgICAgICAgICAgICAgICA+c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnPC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtNSBweS03IHNtOm14LTEwIHhsOm14LTI0IHhsOnB4LTFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJfX2NvbnRhaW5lciBncmlkIGdhcC0zIHNtOmdyaWQtY29scy0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1uLTMwXCI+XG4gICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJtci0xIHRleHQtYmFzZVwiIGljb249XCJjb3B5cmlnaHRcIiAvPlxuICAgICAgICAgIENvcHlyaWdodCBJQVRJIDIwMjIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc206anVzdGlmeS1lbmRcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUNBVkgxZ2NnSlhFbHNqOEVOQy1iRFFRXCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJtdC0xIG1yLTEgdGV4dC00eGxcIiBpY29uPVwieW91dHViZVwiIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwibWwtNFwiIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL0lBVElfYWlkXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cIm10LTEgbXItMSB0ZXh0LTR4bFwiIGljb249XCJ0d2l0dGVyXCIgLz5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9vdGVyPlxuPC90ZW1wbGF0ZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwicmlnaHQgam9pbi1ub3cgbS1hdXRvIGZsZXggYmFzaXMtMi80IGl0ZW1zLWNlbnRlciByb3VuZGVkLWwtbGcgcm91bmRlZC1yLWxnIGJnLXdoaXRlIHB5LTUgcHgtNSBzbTpweS0xMCBzbTpweC03IG1kOm15LTAgbWQ6cm91bmRlZC1sLW5vbmUgbGc6cHktMjggeGw6cHgtMTRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0X19jb250YWluZXIgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgPGgyIGNsYXNzPVwibWItMiBoaWRkZW4gc206YmxvY2tcIj5Kb2luIE5vdy48L2gyPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYi04IHRleHQtbi00MCB4bDpwci02XCI+XG4gICAgICAgIFRvIGJlZ2luLCB5b3VyIG9yZ2FuaXNhdGlvbiBuZWVkcyB0byBiZSByZWdpc3RlcmVkIGFzIGFuIElBVEkgcHVibGlzaGVyLlxuICAgICAgICBTZWxlY3QgYW4gb3B0aW9uIGFuZCB3ZeKAmWxsIGd1aWRlIHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxhIGhyZWY9XCIvaWF0aS9yZWdpc3RlclwiIGNsYXNzPVwicmlnaHRfX2NvbnRlbnQgbWItNlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRfX2ljb25cIj5cbiAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInRleHQtNnhsXCIgaWNvbj1cImRlZmF1bHQtMVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscyBteC00IHhsOnB4LTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCI+SSBhbSBuZXcgdG8gSUFUSTwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgbGVhZGluZy01IHRleHQtbi00MFwiPlxuICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIGlmIHlvdXIgb3JnYW5pemF0aW9uIDx1PmhhcyBub3Q8L3U+IHJlZ2lzdGVyZWQgYW5cbiAgICAgICAgICAgIGFjY291bnQgd2l0aCBJQVRJIG9uIHRoZSBJQVRJIFJlZ2lzdHJ5XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInJpZ2h0X19hcnJvdyB0ZXh0LTJ4bFwiIGljb249XCJyaWdodC1hcnJvd1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGEgaHJlZj1cIi9yZWdpc3RlclwiIGNsYXNzPVwicmlnaHRfX2NvbnRlbnQgbWItNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRfX2ljb25cIj5cbiAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInRleHQtNnhsXCIgaWNvbj1cImRlZmF1bHQtMlwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscyBteC00IHhsOnB4LTFcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsXCJcbiAgICAgICAgICAgID5NeSBvcmdhbmlzYXRpb24gaGFzIHJlZ2lzdGVyZWQgd2l0aCBJQVRJPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTUgdGV4dC1uLTQwXCI+XG4gICAgICAgICAgICBVc2UgdGhpcyBvcHRpb24gaWYgeW91ciBvcmdhbmlzYXRpb24gaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFzIGFuXG4gICAgICAgICAgICBJQVRJIFB1Ymxpc2hlciBvbiB0aGVcbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy5pYXRpcmVnaXN0cnkub3JnL1wiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgID5JQVRJIFJlZ2lzdHJ5PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInJpZ2h0X19hcnJvdyB0ZXh0LTJ4bFwiIGljb249XCJyaWdodC1hcnJvd1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtbi00MFwiXG4gICAgICAgID5Ob3Qgc3VyZSB3aGljaCBvbmUgdG8gc2VsZWN0P1xuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWItMiBib3JkZXItYi10cmFuc3BhcmVudCBmb250LWJvbGQgdGV4dC1ibHVlY29yYWwgaG92ZXI6Ym9yZGVyLWItMiBob3Zlcjpib3JkZXItYi10dXJxdW9pc2UgaG92ZXI6dGV4dC1ibHVlY29yYWxcIlxuICAgICAgICAgIGhyZWY9XCJtYWlsdG86c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgID5Db250YWN0IFN1cHBvcnQuPC9hXG4gICAgICAgID48L3NwYW5cbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuIiwiPHRlbXBsYXRlPlxuICA8Zm9vdGVyIGNsYXNzPVwibXQtNyBiZy1ibHVlY29yYWwgdGV4dC1zbSBsZWFkaW5nLTYgdGV4dC1uLTIwIHNtOm10LTEwIG1kOm10LTIwXCI+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1iIGJvcmRlci13aGl0ZSBib3JkZXItb3BhY2l0eS0yMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm14LTMgcHktMTAgc206bXgtMTAgeGw6bXgtMjQgeGw6cHgtMVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb290ZXJfX2NvbnRhaW5lciBncmlkIGdyaWQtZmxvdy1yb3cgZ2FwLTggc206Z2FwLXktMTAgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTQgbGc6anVzdGlmeS1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIvXCI+XG4gICAgICAgICAgICAgIDxzdmctdnVlIGNsYXNzPVwiaC1hdXRvIHctNjAgdGV4dC02eGwgc206dy02NFwiIGljb249XCJmb290ZXItbG9nb1wiIC8+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlcl9fbGlua3NcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtbi0xMFwiPklBVEkgUHVibGlzaGVyPC9zcGFuPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibXQtMiBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiL1wiPkhvbWU8L2E+PC9saT5cbiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCIvYWJvdXRcIj5BYm91dDwvYT48L2xpPlxuICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIi9cIj5TaWduIEluPC9hPjwvbGk+XG4gICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiL3JlZ2lzdGVyL2pvaW5cIj5Kb2luIE5vdzwvYT48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyX19saW5rc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1uLTEwXCI+SUFUSSBTdGFuZGFyZDwvc3Bhbj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm10LTIgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIi9pYXRpLXN0YW5kYXJkXCI+SUFUSSBTdGFuZGFyZDwvYT48L2xpPlxuICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIi9wdWJsaXNoaW5nLWNoZWNrbGlzdFwiPlB1Ymxpc2hpbmcgQ2hlY2tsaXN0PC9hPjwvbGk+XG4gICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiL3N1cHBvcnRcIj5TdXBwb3J0PC9hPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJfX2xpbmtzIGxnOmp1c3RpZnktc2VsZi1lbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGxlYWRpbmctNVwiPlxuICAgICAgICAgICAgICA8cD5QYXJ0IG9mIHRoZSBJQVRJIFVuaWZpZWQgUGxhdGZvcm08L3A+XG4gICAgICAgICAgICAgIDxwPkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBR1BMLjwvcD5cbiAgICAgICAgICAgICAgPHA+RG9jdW1lbnRhdGlvbiBsaWNlbnNlZCB1bmRlciBDQyBCWSAzLjA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS01IGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LW4tMTBcIj5cbiAgICAgICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJ0ZXh0LTJ4bFwiIGljb249XCJoZWFkcGhvbmVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHVwcGVyY2FzZVwiXG4gICAgICAgICAgICAgICAgPkFueSBxdWVzdGlvbnM/IENvbnRhY3QgU3VwcG9ydDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1zbSB0ZXh0LW4tMTBcIiBocmVmPVwibWFpbHRvOnN1cHBvcnRAaWF0aXN0YW5kYXJkLm9yZ1wiXG4gICAgICAgICAgICAgICAgICA+c3VwcG9ydEBpYXRpc3RhbmRhcmQub3JnPC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtNSBweS03IHNtOm14LTEwIHhsOm14LTI0IHhsOnB4LTFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJfX2NvbnRhaW5lciBncmlkIGdhcC0zIHNtOmdyaWQtY29scy0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1uLTMwXCI+XG4gICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJtci0xIHRleHQtYmFzZVwiIGljb249XCJjb3B5cmlnaHRcIiAvPlxuICAgICAgICAgIENvcHlyaWdodCBJQVRJIDIwMjIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc206anVzdGlmeS1lbmRcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUNBVkgxZ2NnSlhFbHNqOEVOQy1iRFFRXCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN2Zy12dWUgY2xhc3M9XCJtdC0xIG1yLTEgdGV4dC00eGxcIiBpY29uPVwieW91dHViZVwiIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhIGNsYXNzPVwibWwtNFwiIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL0lBVElfYWlkXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICA8c3ZnLXZ1ZSBjbGFzcz1cIm10LTEgbXItMSB0ZXh0LTR4bFwiIGljb249XCJ0d2l0dGVyXCIgLz5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9vdGVyPlxuPC90ZW1wbGF0ZT5cbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmFjdGl2aXR5X19oZWFkZXJbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMTAwdnc7XFxuICB0b3A6IDBweDtcXG4gIHotaW5kZXg6IDEwMDtcXG59XFxuLmFjdGl2aXR5X19oZWFkZXIgbmF2W2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmFjdGl2aXR5X19oZWFkZXIgbmF2IGFbZGF0YS12LTZmZTU5MDU1XTpob3ZlciB7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5hY3Rpdml0eV9faGVhZGVyIG5hdiB1bFtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDM3NXB4KSB7XFxuLmFjdGl2aXR5X19oZWFkZXIgLmFkZC1idG5bZGF0YS12LTZmZTU5MDU1XSB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxufVxcbn1cXG4uYWN0aXZpdHlfX2hlYWRlciAudXNlci1uYXZbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLnRvYXN0W2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogNTAlO1xcbiAgei1pbmRleDogNTA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDAuNzVyZW07XFxuICB6LWluZGV4OiAyMDtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG4gIG9wYWNpdHk6IDA7XFxuICAtLXR3LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC0tdHctc2hhZG93LWNvbG9yZWQ6IDBweCA0cHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctc2hhZG93KTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4ucHJvZmlsZV9fZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICAgIHJpZ2h0OiAyLjVyZW07XFxufVxcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICB0b3A6IDUwcHg7XFxuICB3aWR0aDogMjY1cHg7XFxuICBib3gtc2hhZG93OiA0cHggNHB4IDQwcHggcmdiYSgwLCA1MCwgNzYsIDAuMik7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSB7XFxuLnByb2ZpbGVfX2Ryb3Bkb3duW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgICB3aWR0aDogMjIwcHg7XFxufVxcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24gbGlbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIGxpW2RhdGEtdi02ZmU1OTA1NV0gPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHtcXG4gIC0tdHctc3BhY2UteC1yZXZlcnNlOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDAuNzVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKDAuNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93biBsaVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHBhZGRpbmc6IDAuNzVyZW07XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5wcm9maWxlX19kcm9wZG93biBsaVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gICAgcGFkZGluZzogMXJlbTtcXG59XFxufVxcbi5wcm9maWxlX19kcm9wZG93biBsaSBhW2RhdGEtdi02ZmU1OTA1NV06aG92ZXIge1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIGxpIC51c2VyLXByb2ZpbGVbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBmb250LXNpemU6IDI2cHg7XFxufVxcbi5wcm9maWxlX19kcm9wZG93biAuZHJvcGRvd25fX2xpc3RbZGF0YS12LTZmZTU5MDU1XSB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93biAuZHJvcGRvd25fX2xpc3RbZGF0YS12LTZmZTU5MDU1XTpob3ZlciB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24gLmRyb3Bkb3duX19saXN0IGFbZGF0YS12LTZmZTU5MDU1XSB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaFtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxLjI1cmVtO1xcbiAgei1pbmRleDogMjA7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxuICAtLXR3LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC0tdHctc2hhZG93LWNvbG9yZWQ6IDBweCA0cHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctc2hhZG93KTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbiAgdG9wOiA1MHB4O1xcbiAgd2lkdGg6IDI2NXB4O1xcbiAgYm94LXNoYWRvdzogNHB4IDRweCA0MHB4IHJnYmEoMCwgNTAsIDc2LCAwLjIpO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCkge1xcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2hbZGF0YS12LTZmZTU5MDU1XSB7XFxuICAgIHdpZHRoOiAyMjBweDtcXG59XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2ggbGlbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCBsaVtkYXRhLXYtNmZlNTkwNTVdID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi1yaWdodDogY2FsYygwLjc1cmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7XFxuICBtYXJnaW4tbGVmdDogY2FsYygwLjc1cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoIGxpW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCBsaVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gICAgcGFkZGluZzogMXJlbTtcXG59XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2ggbGkgYVtkYXRhLXYtNmZlNTkwNTVdOmhvdmVyIHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2ggbGkgLnVzZXItcHJvZmlsZVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGZvbnQtc2l6ZTogMjZweDtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCAuZHJvcGRvd25fX2xpc3RbZGF0YS12LTZmZTU5MDU1XSB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2ggLmRyb3Bkb3duX19saXN0W2RhdGEtdi02ZmU1OTA1NV06aG92ZXIge1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1uLTIwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCAuZHJvcGRvd25fX2xpc3QgYVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xcbn1cXG4uZHJvcGRvd24tYnRuOmhvdmVyIC5wcm9maWxlX19kcm9wZG93bltkYXRhLXYtNmZlNTkwNTVdLCBcXG4uZHJvcGRvd24tYnRuOmFjdGl2ZSAucHJvZmlsZV9fZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcXG59XFxuLmRyb3Bkb3duLWJ0bjpob3ZlciAuZHJvcGRvd25fX2Fycm93W2RhdGEtdi02ZmU1OTA1NV0sXFxuLmRyb3Bkb3duLWJ0bjphY3RpdmUgLmRyb3Bkb3duX19hcnJvd1tkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcbi5hZGQtaW1wb3J0W2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uYWRkLWltcG9ydC1kcm9wZG93bltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5hZGQtaW1wb3J0OmhvdmVyIC5hZGQtaW1wb3J0LWRyb3Bkb3duW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxufVxcbi5zcGlubmVyW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwLjc1cmVtO1xcbiAgcmlnaHQ6IDEuNzVyZW07XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBzcGluLTZmZTU5MDU1IHtcXG50byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxufVxcbn1cXG5Aa2V5ZnJhbWVzIHNwaW4tNmZlNTkwNTUge1xcbnRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG59XFxufVxcbi5zcGlubmVyW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4tNmZlNTkwNTUgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgICAgICAgICBhbmltYXRpb246IHNwaW4tNmZlNTkwNTUgMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAycHg7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAwLjA1O1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBib3JkZXItdG9wLWNvbG9yOiB3aGl0ZTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTtFQUNFLGVBQUE7RUFDQSxZQUFBO0VBQ0EsUUFBQTtFQUNBLFlBQUE7QUFBRjtBQUVFO0VBQ0UsYUFBQTtBQUFKO0FBR007RUFBQSxvQkFBQTtFQUFBLGlEQUFBO0FBQUE7QUFHQTtFQUFBLGFBQUE7QUFBQTtBQUlGO0FBREY7SUFFSSxhQUFBO0FBREo7QUFDRjtBQUlJO0VBQUEsYUFBQTtFQUFBLG1CQUFBO0FBQUE7QUFJRjtFQUFBLGtCQUFBO0VBQUEsU0FBQTtFQUFBLFdBQUE7RUFDQSxnQ0FBQTtBQURBO0FBSUE7RUFBQSxrQkFBQTtFQUFBLGtCQUFBO0VBQUEsY0FBQTtFQUFBLFdBQUE7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0VBQUEsZ0JBQUE7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtFQUFBLFVBQUE7RUFBQSw0Q0FBQTtFQUFBLHdEQUFBO0VBQUEsdUdBQUE7RUFBQSwwQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLGFBQUE7QUFBQTtBQUFBO0FBREY7RUFFRSxTQUFBO0VBQ0EsWUFBQTtFQUNBLDZDQUFBO0FBQUY7QUFFRTtBQU5GO0lBT0ksWUFBQTtBQUNGO0FBQ0Y7QUFFSTtFQUFBLGFBQUE7RUFBQSxtQkFBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLHVEQUFBO0VBQUEsZ0VBQUE7QUFBQTtBQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxhQUFBO0FBQUE7QUFBQTtBQUVFO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtBQUFBO0FBRUY7RUFDRSxlQUFBO0FBRU47QUFFSTtFQUFBLGtCQUFBO0VBQUEseURBQUE7QUFBQTtBQUFBO0VBQUEsa0JBQUE7RUFBQSx5REFBQTtFQUFBLG9CQUFBO0VBQUEscURBQUE7QUFBQTtBQUVFO0VBQUEsMEJBQUE7QUFBQTtBQUtKO0VBQUEsa0JBQUE7RUFBQSxjQUFBO0VBQUEsV0FBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFBQSxnQkFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxvQkFBQTtFQUFBLHFEQUFBO0VBQUEsNENBQUE7RUFBQSx3REFBQTtFQUFBLHVHQUFBO0VBQUEsMEJBQUE7RUFDQSxTQUFBO0VBQ0EsWUFBQTtFQUNBLDZDQUFBO0FBSEE7QUFLQTtBQU5GO0lBT0ksWUFBQTtBQUVGO0FBQ0Y7QUFDSTtFQUFBLGFBQUE7RUFBQSxtQkFBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLHVEQUFBO0VBQUEsZ0VBQUE7QUFBQTtBQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxhQUFBO0FBQUE7QUFBQTtBQUVFO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtBQUFBO0FBRUY7RUFDRSxlQUFBO0FBR047QUFDSTtFQUFBLGtCQUFBO0VBQUEseURBQUE7QUFBQTtBQUFBO0VBQUEsa0JBQUE7RUFBQSx5REFBQTtFQUFBLG9CQUFBO0VBQUEscURBQUE7QUFBQTtBQUVFO0VBQUEsMEJBQUE7QUFBQTtBQU9GOztFQUFBLG1CQUFBO0VBQUEsVUFBQTtFQUNBLDJCQUFBO0FBREE7QUFHRjs7RUFDRSx5QkFBQTtBQUVKO0FBQ0E7RUFDRSxlQUFBO0FBRUY7QUFBQTtFQUNFLGtCQUFBO0VBQ0EsVUFBQTtBQUdGO0FBREE7RUFDRSxtQkFBQTtFQUNBLFVBQUE7RUFDQSx3QkFBQTtBQUlGO0FBQUU7RUFBQSxrQkFBQTtFQUFBLFlBQUE7RUFBQSxjQUFBO0VBQUEscUJBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSx5QkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEseUJBQUE7QUFBQTtBQUFBO0FBQUE7RUFBQSxtREFBQTtVQUFBLDJDQUFBO0VBQUEscUJBQUE7RUFBQSxpQkFBQTtFQUFBLHlEQUFBO0VBQUEseUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHVCQUFBO0FBSEFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmFjdGl2aXR5X19oZWFkZXIge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgdG9wOiAwcHg7XFxuICB6LWluZGV4OiAxMDA7XFxuXFxuICBuYXYge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcblxcbiAgICBhOmhvdmVyIHtcXG4gICAgICBAYXBwbHkgdGV4dC13aGl0ZTtcXG4gICAgfVxcbiAgICB1bCB7XFxuICAgICAgQGFwcGx5IGZsZXg7XFxuICAgIH1cXG4gIH1cXG4gIC5hZGQtYnRuIHtcXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzc1cHgpIHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuICB9XFxuICAudXNlci1uYXYge1xcbiAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXI7XFxuICB9XFxufVxcbi50b2FzdCB7XFxuICBAYXBwbHkgYWJzb2x1dGUgIGxlZnQtMi80IHotNTA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIHtcXG4gIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgcmlnaHQtMyB6LTIwIGJnLXdoaXRlIHRleHQtbGVmdCB0ZXh0LXNtIHRleHQtYmx1ZWNvcmFsIG9wYWNpdHktMCBzaGFkb3ctZHJvcGRvd24gZHVyYXRpb24tMzAwIHNtOnJpZ2h0LTEwO1xcbiAgdG9wOiA1MHB4O1xcbiAgd2lkdGg6IDI2NXB4O1xcbiAgYm94LXNoYWRvdzogNHB4IDRweCA0MHB4IHJnYmEoMCwgNTAsIDc2LCAwLjIpO1xcblxcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpIHtcXG4gICAgd2lkdGg6IDIyMHB4O1xcbiAgfVxcblxcbiAgbGkge1xcbiAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIHAtMyBzbTpwLTQ7XFxuICAgIGE6aG92ZXIge1xcbiAgICAgIEBhcHBseSB0ZXh0LWJsdWVjb3JhbDtcXG4gICAgfVxcbiAgICAudXNlci1wcm9maWxlIHtcXG4gICAgICBmb250LXNpemU6IDI2cHg7XFxuICAgIH1cXG4gIH1cXG4gIC5kcm9wZG93bl9fbGlzdCB7XFxuICAgIEBhcHBseSBiZy1uLTEwIGhvdmVyOmJnLW4tMjAgaG92ZXI6dGV4dC1ibHVlY29yYWw7XFxuICAgIGEge1xcbiAgICAgIEBhcHBseSBjYXBpdGFsaXplO1xcbiAgICB9XFxuICB9XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2gge1xcbiAgQGFwcGx5IGFic29sdXRlICByaWdodC01IHotMjAgYmctd2hpdGUgdGV4dC1sZWZ0IHRleHQtc20gdGV4dC1ibHVlY29yYWwgc2hhZG93LWRyb3Bkb3duICBkdXJhdGlvbi0zMDA7XFxuICB0b3A6IDUwcHg7XFxuICB3aWR0aDogMjY1cHg7XFxuICBib3gtc2hhZG93OiA0cHggNHB4IDQwcHggcmdiYSgwLCA1MCwgNzYsIDAuMik7XFxuXFxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCkge1xcbiAgICB3aWR0aDogMjIwcHg7XFxuICB9XFxuXFxuICBsaSB7XFxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgcC0zIHNtOnAtNDtcXG4gICAgYTpob3ZlciB7XFxuICAgICAgQGFwcGx5IHRleHQtYmx1ZWNvcmFsO1xcbiAgICB9XFxuICAgIC51c2VyLXByb2ZpbGUge1xcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcXG4gICAgfVxcbiAgfVxcbiAgLmRyb3Bkb3duX19saXN0IHtcXG4gICAgQGFwcGx5IGJnLW4tMTAgaG92ZXI6Ymctbi0yMCBob3Zlcjp0ZXh0LWJsdWVjb3JhbDtcXG4gICAgYSB7XFxuICAgICAgQGFwcGx5IGNhcGl0YWxpemU7XFxuICAgIH1cXG4gIH1cXG59XFxuLmRyb3Bkb3duLWJ0bjpob3ZlcixcXG4uZHJvcGRvd24tYnRuOmFjdGl2ZSB7XFxuICAucHJvZmlsZV9fZHJvcGRvd24ge1xcbiAgICBAYXBwbHkgdmlzaWJsZSBvcGFjaXR5LTEwMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xcbiAgfVxcbiAgLmRyb3Bkb3duX19hcnJvdyB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxuICB9XFxufVxcbi5hZGQtaW1wb3J0IHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLmFkZC1pbXBvcnQtZHJvcGRvd24ge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmFkZC1pbXBvcnQ6aG92ZXIgLmFkZC1pbXBvcnQtZHJvcGRvd24ge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxufVxcblxcbi5zcGlubmVyIHtcXG4gIEBhcHBseSBhYnNvbHV0ZSB0b3AtMyByaWdodC03IGlubGluZS1ibG9jayBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1uLTEwIGJvcmRlci1vcGFjaXR5LTU7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuYWxlcnRbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1jYW1lbC0xMCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW07XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS42MjU7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNTApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKVxcbn1cXG4uYWxlcnRfX2NvbnRhaW5lcltkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgbGluZS1oZWlnaHQ6IDEuNXJlbVxcbn1cXG4uYWxlcnRfX2NvbnRlbnRbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlclxcbn1cXG4uYWxlcnRfX2NvbnRlbnRbZGF0YS12LWI3N2IxMWQ0XSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKVxcbn1cXG4uYWxlcnRfX2NvbnRlbnQgc3BhbltkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNTApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKVxcbn1cXG4uYWxlcnRfX21lc3NhZ2VbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlclxcbn1cXG4uYWxlcnRfX21lc3NhZ2VbZGF0YS12LWI3N2IxMWQ0XSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKVxcbn1cXG4udGV4dC1zaG93W2RhdGEtdi1iNzdiMTFkNF0ge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXJcXG59XFxuLnRleHQtc2hvd1tkYXRhLXYtYjc3YjExZDRdID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi1yaWdodDogY2FsYygwLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKDAuNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKVxcbn1cXG4udGV4dC1zaG93W2RhdGEtdi1iNzdiMTFkNF0ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwcHgsIDMwcHgpXFxufVxcbi50ZXh0LWhpZGVbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLS10dy10cmFuc2xhdGUteTogLTBweDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSwgdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tld1godmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlclxcbn1cXG4udGV4dC1oaWRlW2RhdGEtdi1iNzdiMTFkNF0gPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHtcXG4gIC0tdHctc3BhY2UteC1yZXZlcnNlOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDAuNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpXFxufVxcbi50ZXh0LWhpZGVbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtc1xcbn1cXG4uYm9yZGVyLWhpZGVbZGF0YS12LWI3N2IxMWQ0XTo6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDBweDtcXG4gIHRvcDogMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tc2FsbW9uLTUwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XFxuICB3aWR0aDogMnB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpXFxufVxcbi5ib3JkZXItc2hvd1tkYXRhLXYtYjc3YjExZDRdOjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1zYWxtb24tNTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtcztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcXG4gIHdpZHRoOiAycHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSlcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yTWVzc2FnZS52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxzQkFBQTtFQUFBLGtCQUFBO0VBQUEsNkRBQUE7RUFBQSxhQUFBO0VBQUEscUJBQUE7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsa0JBQUE7RUFBQSxvQkFBQTtFQUFBO0FBQUE7QUFHRTtFQUFBLGFBQUE7RUFBQSxzQkFBQTtFQUFBO0FBQUE7QUFHQTtFQUFBLGFBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLG9EQUFBO0VBQUE7QUFBQTtBQUdFO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLGdCQUFBO0VBQUEsb0JBQUE7RUFBQTtBQUFBO0FBSUY7RUFBQSxhQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUEsdUJBQUE7RUFBQSx1REFBQTtFQUFBO0FBQUE7QUFJRjtFQUFBLGtCQUFBO0VBQUEsYUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsc0RBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQSxVQUFBO0VBQUEsMEJBQUE7RUFDQTtBQURBO0FBSUE7RUFBQSxhQUFBO0VBQUEsc0JBQUE7RUFBQSwrTEFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsc0RBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQTtBQUFBO0FBR0E7RUFBQSxrQkFBQTtFQUFBLFNBQUE7RUFBQSxRQUFBO0VBQUEsc0JBQUE7RUFBQSxrQkFBQTtFQUFBLDhEQUFBO0VBQUEsMEJBQUE7RUFBQSxzREFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsV0FBQTtFQUNBO0FBSkE7QUFPQTtFQUFBLGtCQUFBO0VBQUEsU0FBQTtFQUFBLFFBQUE7RUFBQSxzQkFBQTtFQUFBLGtCQUFBO0VBQUEsOERBQUE7RUFBQSwwQkFBQTtFQUFBLHNEQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0E7QUFKQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uYWxlcnQge1xcbiAgQGFwcGx5IHJvdW5kZWQgYmctY2FtZWwtMTAgcC00IHByLTYgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1uLTUwO1xcblxcbiAgJl9fY29udGFpbmVyIHtcXG4gICAgQGFwcGx5IGZsZXggZmxleC1jb2wgbGVhZGluZy02O1xcbiAgfVxcbiAgJl9fY29udGVudCB7XFxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTQ7XFxuXFxuICAgIHNwYW4ge1xcbiAgICAgIEBhcHBseSB0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LW4tNTA7XFxuICAgIH1cXG4gIH1cXG4gICZfX21lc3NhZ2Uge1xcbiAgICBAYXBwbHkgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xO1xcbiAgfVxcbn1cXG4udGV4dC1zaG93IHtcXG4gIEBhcHBseSBpbnZpc2libGUgZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG9wYWNpdHktMCBkdXJhdGlvbi0zMDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTBweCwgMzBweCk7XFxufVxcbi50ZXh0LWhpZGUge1xcbiAgQGFwcGx5IGZsZXggLXRyYW5zbGF0ZS15LTAgaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBkdXJhdGlvbi0zMDA7XFxufVxcbi5ib3JkZXItaGlkZTo6YmVmb3JlIHtcXG4gIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgcm91bmRlZCBiZy1zYWxtb24tNTAgZHVyYXRpb24tMzAwIGVhc2Utb3V0O1xcbiAgd2lkdGg6IDJweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcXG59XFxuLmJvcmRlci1zaG93OjpiZWZvcmUge1xcbiAgQGFwcGx5IGFic29sdXRlIGxlZnQtMCB0b3AtMCByb3VuZGVkIGJnLXNhbG1vbi01MCBkdXJhdGlvbi0zMDAgZWFzZS1vdXQ7XFxuICB3aWR0aDogMnB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuaGVscCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5oZWxwX190ZXh0IHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMXJlbTtcXG4gIHotaW5kZXg6IDIwO1xcbn1cXG4uaGVscF9fdGV4dCA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS15LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tdG9wOiBjYWxjKDAuMzc1cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO1xcbiAgbWFyZ2luLWJvdHRvbTogY2FsYygwLjM3NXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpO1xcbn1cXG4uaGVscF9fdGV4dCB7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1lZ2dzaGVsbCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDFyZW07XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNDApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAyMDBtcztcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG59XFxuLmhlbHBfX3RleHQgcCBhIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcbi5oZWxwOmhvdmVyIC5oZWxwX190ZXh0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNXB4KTtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XFxuLmhlbHA6aG92ZXIgLmhlbHBfX3RleHQge1xcbiAgICB3aWR0aDogMjAwcHg7XFxufVxcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLGtCQUFBO0FBQUE7QUFHRTtFQUFBLGtCQUFBO0VBQUEsa0JBQUE7RUFBQSxTQUFBO0VBQUEsV0FBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLGdFQUFBO0VBQUEseURBQUE7QUFBQTtBQUFBO0VBQUEsc0JBQUE7RUFBQSxrQkFBQTtFQUFBLDZEQUFBO0VBQUEsYUFBQTtFQUFBLGdCQUFBO0VBQUEsa0JBQUE7RUFBQSxpQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7RUFBQSxVQUFBO0VBQUEsMEJBQUE7RUFDQSw2QkFBQTtFQUNBLDJDQUFBO0FBRkE7QUFJQTtFQUNFLGdCQUFBO0FBQU47QUFNRTtFQUNFLDhCQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0FBSEo7QUFJSTtBQUpGO0lBS0ksWUFBQTtBQURKO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmhlbHAge1xcbiAgQGFwcGx5IHJlbGF0aXZlO1xcblxcbiAgJl9fdGV4dCB7XFxuICAgIEBhcHBseSBpbnZpc2libGUgYWJzb2x1dGUgdG9wLTQgei0yMCBzcGFjZS15LTEuNSByb3VuZGVkIGJnLWVnZ3NoZWxsIHAtNCB0ZXh0LWxlZnQgdGV4dC14cyB0ZXh0LW4tNDAgb3BhY2l0eS0wIGR1cmF0aW9uLTIwMDtcXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7XFxuICAgIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2IoMCAwIDAgLyAxMCUpO1xcblxcbiAgICBwIGEge1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLmhlbHA6aG92ZXIge1xcbiAgLmhlbHBfX3RleHQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIDVweCk7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcXG4gICAgICB3aWR0aDogMjAwcHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLm92ZXJsYXkge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tYmxhY2spLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBvcGFjaXR5OiAwLjc7XFxuICB6LWluZGV4OiAxMDBcXG59XFxuLm92ZXJsYXlfX2lubmVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDBweDtcXG4gIHRvcDogMHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCVcXG59XFxuLm92ZXJsYXlfX2NvbnRlbnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogNTAlO1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKVxcbn1cXG4ub3ZlcmxheV9fY29udGVudCAuc3Bpbm5lciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4ge1xcbnRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKVxcbn1cXG59XFxuQGtleWZyYW1lcyBzcGluIHtcXG50byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZylcXG59XFxufVxcbi5vdmVybGF5X19jb250ZW50IC5zcGlubmVyIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcXG4gIGJvcmRlci13aWR0aDogMnB4O1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW4tMTApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMC4wNTtcXG4gIHdpZHRoOiA3NXB4O1xcbiAgaGVpZ2h0OiA3NXB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGVcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxlQUFBO0VBQUEsU0FBQTtFQUFBLFFBQUE7RUFBQSxZQUFBO0VBQUEsV0FBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFDQSxZQUFBO0VBQ0E7QUFGQTtBQUtFO0VBQUEsa0JBQUE7RUFBQSxTQUFBO0VBQUEsUUFBQTtFQUFBLFlBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQSxrQkFBQTtFQUFBLFNBQUE7RUFBQSxRQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7RUFBQSwwQ0FBQTtVQUFBLGtDQUFBO0VBQUEscUJBQUE7RUFBQSxpQkFBQTtFQUFBLHlEQUFBO0VBQUEseUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBO0FBSEFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLm92ZXJsYXkge1xcbiAgQGFwcGx5IGZpeGVkIGxlZnQtMCB0b3AtMCBoLWZ1bGwgdy1mdWxsIGJnLWJsYWNrO1xcbiAgb3BhY2l0eTogMC43O1xcbiAgei1pbmRleDogMTAwO1xcblxcbiAgJl9faW5uZXIge1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGgtZnVsbCB3LWZ1bGw7XFxuICB9XFxuXFxuICAmX19jb250ZW50IHtcXG4gICAgQGFwcGx5IGFic29sdXRlIGxlZnQtMi80IHRvcC0yLzQ7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcblxcbiAgICAuc3Bpbm5lciB7XFxuICAgICAgQGFwcGx5IGlubGluZS1ibG9jayBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1uLTEwIGJvcmRlci1vcGFjaXR5LTU7XFxuICAgICAgd2lkdGg6IDc1cHg7XFxuICAgICAgaGVpZ2h0OiA3NXB4O1xcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xcbiAgICB9XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5tb2RhbC1hbmltYXRpb24tZW50ZXItYWN0aXZlW2RhdGEtdi01YTJiZGE1OF0sXFxuLm1vZGFsLWFuaW1hdGlvbi1sZWF2ZS1hY3RpdmVbZGF0YS12LTVhMmJkYTU4XSB7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgY3ViaWMtYmV6aWVyKDAuNTIsIDAuMDIsIDAuMTksIDEuMDIpO1xcbn1cXG4ubW9kYWwtYW5pbWF0aW9uLWVudGVyLWZyb21bZGF0YS12LTVhMmJkYTU4XSxcXG4ubW9kYWwtYW5pbWF0aW9uLWxlYXZlLXRvW2RhdGEtdi01YTJiZGE1OF0ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLm1vZGFsLWFuaW1hdGlvbi1pbm5lci1lbnRlci1hY3RpdmVbZGF0YS12LTVhMmJkYTU4XSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC41cyBjdWJpYy1iZXppZXIoMC41MiwgMC4wMiwgMC4xOSwgMS4wMikgMC4xNXM7XFxufVxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItbGVhdmUtYWN0aXZlW2RhdGEtdi01YTJiZGE1OF0ge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMXMgY3ViaWMtYmV6aWVyKDAuNTIsIDAuMDIsIDAuMTksIDEuMDIpO1xcbn1cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWVudGVyLWZyb21bZGF0YS12LTVhMmJkYTU4XSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWxlYXZlLXRvW2RhdGEtdi01YTJiZGE1OF0ge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0E7O0VBRUUsNkRBQUE7QUFBRjtBQUdBOztFQUVFLFVBQUE7QUFBRjtBQUdBO0VBQ0UsK0RBQUE7QUFBRjtBQUdBO0VBQ0UseURBQUE7QUFBRjtBQUdBO0VBQ0UsVUFBQTtFQUNBLHFCQUFBO0FBQUY7QUFHQTtFQUNFLHFCQUFBO0FBQUZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLm1vZGFsLWFuaW1hdGlvbi1lbnRlci1hY3RpdmUsXFxuLm1vZGFsLWFuaW1hdGlvbi1sZWF2ZS1hY3RpdmUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGN1YmljLWJlemllcigwLjUyLCAwLjAyLCAwLjE5LCAxLjAyKTtcXG59XFxuXFxuLm1vZGFsLWFuaW1hdGlvbi1lbnRlci1mcm9tLFxcbi5tb2RhbC1hbmltYXRpb24tbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLm1vZGFsLWFuaW1hdGlvbi1pbm5lci1lbnRlci1hY3RpdmUge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgY3ViaWMtYmV6aWVyKDAuNTIsIDAuMDIsIDAuMTksIDEuMDIpIDAuMTVzO1xcbn1cXG5cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWxlYXZlLWFjdGl2ZSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBjdWJpYy1iZXppZXIoMC41MiwgMC4wMiwgMC4xOSwgMS4wMik7XFxufVxcblxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItZW50ZXItZnJvbSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cXG5cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWxlYXZlLXRvIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnNoaW1tZXJfX2Jsb2NrW2RhdGEtdi03NDM1NjE3Ml0ge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDJzO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDJzO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcXG4gICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHBsYWNlSG9sZGVyU2hpbW1lci03NDM1NjE3MjtcXG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHBsYWNlSG9sZGVyU2hpbW1lci03NDM1NjE3MjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC41cztcXG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwLjVzO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgI2VkZWRlZCAxNC4zNiUsICNkN2Q2ZDYgNTYuMjklLCAjZWRlZGVkIDEwMCUpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMjQ0cHggMTA0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IDE5cHg7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDNweCA2cHggM3B4IDBweDtcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHBsYWNlSG9sZGVyU2hpbW1lci03NDM1NjE3MiB7XFxuMCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDAlIC0gMzAwcHgpIDA7XFxufVxcbjIwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcXG59XFxuODAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlICsgMzAwcHgpIDA7XFxufVxcbjEwMCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgKyAzMDBweCkgMDtcXG59XFxufVxcbkBrZXlmcmFtZXMgcGxhY2VIb2xkZXJTaGltbWVyLTc0MzU2MTcyIHtcXG4wJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcXG59XFxuMjAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xcbn1cXG44MCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgKyAzMDBweCkgMDtcXG59XFxuMTAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xcbn1cXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTtFQUNFLDhCQUFBO1VBQUEsc0JBQUE7RUFDQSxxQ0FBQTtVQUFBLDZCQUFBO0VBQ0EsMkNBQUE7VUFBQSxtQ0FBQTtFQUNBLG1EQUFBO1VBQUEsMkNBQUE7RUFDQSx5Q0FBQTtVQUFBLGlDQUFBO0VBQ0EsNkJBQUE7VUFBQSxxQkFBQTtFQUNBLHlCQUFBO0VBQ0Esc0ZBQUE7RUFDQSw0QkFBQTtFQUNBLDRCQUFBO0VBQ0Esa0JBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsdUJBQUE7QUFBRjtBQUdBO0FBQ0U7SUFDRSx1Q0FBQTtBQUFGO0FBR0E7SUFDRSx1Q0FBQTtBQURGO0FBSUE7SUFDRSx5Q0FBQTtBQUZGO0FBS0E7SUFDRSx5Q0FBQTtBQUhGO0FBQ0Y7QUFaQTtBQUNFO0lBQ0UsdUNBQUE7QUFBRjtBQUdBO0lBQ0UsdUNBQUE7QUFERjtBQUlBO0lBQ0UseUNBQUE7QUFGRjtBQUtBO0lBQ0UseUNBQUE7QUFIRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5zaGltbWVyX19ibG9jayB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDJzO1xcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1uYW1lOiBwbGFjZUhvbGRlclNoaW1tZXI7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XFxuICBhbmltYXRpb24tZGVsYXk6IDAuNXM7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZWRlZGVkIDE0LjM2JSwgI2Q3ZDZkNiA1Ni4yOSUsICNlZGVkZWQgMTAwJSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNDRweCAxMDRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogMTlweDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogM3B4IDZweCAzcHggMHB4O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHBsYWNlSG9sZGVyU2hpbW1lciB7XFxuICAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcXG4gIH1cXG5cXG4gIDIwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcXG4gIH1cXG5cXG4gIDgwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZXJyb3JzW2RhdGEtdi1mNjdjN2U3Ml0ge1xcbiAgICBib3JkZXItbGVmdC13aWR0aDogMnB4XFxufVxcbi5lcnJvcnNfX2hlYWRbZGF0YS12LWY2N2M3ZTcyXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgcGFkZGluZzogMXJlbVxcbn1cXG4uZXJyb3JzX19oZWFkLS10aXRsZVtkYXRhLXYtZjY3YzdlNzJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1ncm93OiAxO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNjI1XFxufVxcbi5lcnJvcnNfX2xpc3RbZGF0YS12LWY2N2M3ZTcyXSB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XFxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGFsbDtcXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zXFxufVxcbi5lcnJvcnNfX2xpc3QgdWxbZGF0YS12LWY2N2M3ZTcyXSB7XFxuICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW1cXG59XFxuLmVycm9yc19fbGlzdCBsaVtkYXRhLXYtZjY3YzdlNzJdIHtcXG4gICAgcGFkZGluZy10b3A6IDFyZW07XFxuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNVxcbn1cXG4uZXJyb3JzX19saXN0IGxpW2RhdGEtdi1mNjdjN2U3Ml06bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcXG4gICAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpXFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtJQUFBO0FBQUE7QUFFRTtJQUFBLGFBQUE7SUFBQSw4QkFBQTtJQUFBO0FBQUE7QUFHRTtJQUFBLGFBQUE7SUFBQSxZQUFBO0lBQUEsbUJBQUE7SUFBQSxtQkFBQTtJQUFBLG9CQUFBO0lBQUE7QUFBQTtBQUtGO0lBQUEsV0FBQTtJQUFBLGdCQUFBO0lBQUEsa0JBQUE7SUFBQSxtQkFBQTtJQUFBLHdCQUFBO0lBQUEsd0RBQUE7SUFBQTtBQUFBO0FBRUU7SUFBQSxvQkFBQTtJQUFBO0FBQUE7QUFHQTtJQUFBLGlCQUFBO0lBQUEsb0JBQUE7SUFBQSxtQkFBQTtJQUFBLG9CQUFBO0lBQUE7QUFBQTtBQUdBO0lBQUEsd0JBQUE7SUFBQSxzQkFBQTtJQUFBO0FBQUFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmVycm9ycyB7XFxuICBAYXBwbHkgYm9yZGVyLWwtMjtcXG4gICZfX2hlYWQge1xcbiAgICBAYXBwbHkgZmxleCBqdXN0aWZ5LWJldHdlZW4gcC00O1xcblxcbiAgICAmLS10aXRsZSB7XFxuICAgICAgQGFwcGx5IGZsZXggZ3JvdyBpdGVtcy1jZW50ZXIgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZfX2xpc3Qge1xcbiAgICBAYXBwbHkgaC0wIG92ZXJmbG93LWhpZGRlbiBweC00IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMDtcXG4gICAgdWwge1xcbiAgICAgIEBhcHBseSBweC02O1xcbiAgICB9XFxuICAgIGxpIHtcXG4gICAgICBAYXBwbHkgcHktNCB0ZXh0LXNtIGxlYWRpbmctbm9ybWFsO1xcbiAgICB9XFxuICAgIGxpOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgIEBhcHBseSBib3JkZXItYiBib3JkZXItbi0yMDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIucHJvZ3Jlc3NfYmFyW2RhdGEtdi01YzMyYmYwY10ge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgbGVmdDogMHB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGhlaWdodDogMTAwdmg7XFxufVxcbi5wcm9ncmVzc19iYXJfX3dyYXBwZXJbZGF0YS12LTVjMzJiZjBjXSB7XFxuICB3aWR0aDogMjUwcHg7XFxuICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0YzRjNDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5wcm9ncmVzc19iYXJfX3ZpZXdlcltkYXRhLXYtNWMzMmJmMGNdIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tc3ByaW5nLTUwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgaGVpZ2h0OiA0cHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG59XFxuLnByb2dyZXNzX2Jhci5hbmltYXRlLWxvYWRlciAucHJvZ3Jlc3NfYmFyX192aWV3ZXJbZGF0YS12LTVjMzJiZjBjXSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogRmlsbEFuaW1hdGlvbi01YzMyYmYwYyA2cyBjdWJpYy1iZXppZXIoMC4wMSwgMS4wNiwgMC43MSwgMSkgZm9yd2FyZHM7XFxuICAgICAgICAgIGFuaW1hdGlvbjogRmlsbEFuaW1hdGlvbi01YzMyYmYwYyA2cyBjdWJpYy1iZXppZXIoMC4wMSwgMS4wNiwgMC43MSwgMSkgZm9yd2FyZHM7XFxufVxcbi5wcm9ncmVzc19iYXIuYW5pbWF0ZS1sb2FkZXIgLnByb2dyZXNzX2Jhcl9fc3RhdGVbZGF0YS12LTVjMzJiZjBjXTo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IFRleHRDaGFuZ2UtNWMzMmJmMGMgNnMgY3ViaWMtYmV6aWVyKDAuMDEsIDEuMDYsIDAuNzEsIDEpIGZvcndhcmRzO1xcbiAgICAgICAgICBhbmltYXRpb246IFRleHRDaGFuZ2UtNWMzMmJmMGMgNnMgY3ViaWMtYmV6aWVyKDAuMDEsIDEuMDYsIDAuNzEsIDEpIGZvcndhcmRzO1xcbn1cXG4ucHJvZ3Jlc3NfYmFyX19jb250ZW50W2RhdGEtdi01YzMyYmYwY10ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5wcm9ncmVzc19iYXJfX3N0YXRlW2RhdGEtdi01YzMyYmYwY10ge1xcbiAgbWFyZ2luLXRvcDogMS41cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbC01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgRmlsbEFuaW1hdGlvbi01YzMyYmYwYyB7XFxuMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjAyOCk7XFxufVxcbjEwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG59XFxuMjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbn1cXG4yNSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG59XFxuMzUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxufVxcbjQ1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbn1cXG41MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjYyNCk7XFxufVxcbjYwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG59XFxuNzAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbn1cXG43NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjkyOCk7XFxufVxcbjg1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG59XFxuOTUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbn1cXG4xMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7XFxufVxcbn1cXG5Aa2V5ZnJhbWVzIEZpbGxBbmltYXRpb24tNWMzMmJmMGMge1xcbjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbn1cXG4xMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjAyOCk7XFxufVxcbjIwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG59XFxuMjUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxufVxcbjM1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbn1cXG40NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG59XFxuNTAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbn1cXG42MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjYyNCk7XFxufVxcbjcwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG59XFxuNzUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbn1cXG44NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjkyOCk7XFxufVxcbjk1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG59XFxuMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xcbn1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIFRleHRDaGFuZ2UtNWMzMmJmMGMge1xcbjAlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG59XFxuOTUlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG59XFxuMTAwJSB7XFxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1lbmQpO1xcbn1cXG59XFxuQGtleWZyYW1lcyBUZXh0Q2hhbmdlLTVjMzJiZjBjIHtcXG4wJSB7XFxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdGFydCk7XFxufVxcbjk1JSB7XFxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdGFydCk7XFxufVxcbjEwMCUge1xcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtZW5kKTtcXG59XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxlQUFBO0VBQUEsU0FBQTtFQUFBLGFBQUE7RUFBQSxXQUFBO0VBQUEsbUJBQUE7RUFBQSx1QkFBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFDQSxNQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7QUFIQTtBQU1FO0VBQUEsWUFBQTtFQUFBLG1CQUFBO0VBQ0EseUJBQUE7RUFDQSxnQkFBQTtBQUZBO0FBTUE7RUFBQSxrQkFBQTtFQUFBLDhEQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0VBQ0Esb0JBQUE7RUFDQSxxQkFBQTtBQUpBO0FBT0Y7RUFDRSx1RkFBQTtVQUFBLCtFQUFBO0FBRko7QUFLRTtFQUNFLFdBQUE7RUFDQSxvRkFBQTtVQUFBLDRFQUFBO0FBSEo7QUFPSTtFQUFBLGFBQUE7RUFBQSxzQkFBQTtBQUFBO0FBSUE7RUFBQSxrQkFBQTtFQUFBLGtCQUFBO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLGdCQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBLHdEQUFBO0FBQUE7QUFJSjtBQUNFO0lBQ0Usd0JBQUE7QUFORjtBQVFBO0lBQ0Usd0JBQUE7QUFORjtBQVFBO0lBQ0Usd0JBQUE7QUFORjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVVBO0lBQ0Usd0JBQUE7QUFSRjtBQVdBO0lBQ0Usd0JBQUE7QUFURjtBQVlBO0lBQ0Usd0JBQUE7QUFWRjtBQWFBO0lBQ0Usd0JBQUE7QUFYRjtBQWNBO0lBQ0Usd0JBQUE7QUFaRjtBQWVBO0lBQ0Usd0JBQUE7QUFiRjtBQWdCQTtJQUNFLG9CQUFBO0FBZEY7QUFDRjtBQWpDQTtBQUNFO0lBQ0Usd0JBQUE7QUFORjtBQVFBO0lBQ0Usd0JBQUE7QUFORjtBQVFBO0lBQ0Usd0JBQUE7QUFORjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVNBO0lBQ0UsdUJBQUE7QUFQRjtBQVVBO0lBQ0Usd0JBQUE7QUFSRjtBQVdBO0lBQ0Usd0JBQUE7QUFURjtBQVlBO0lBQ0Usd0JBQUE7QUFWRjtBQWFBO0lBQ0Usd0JBQUE7QUFYRjtBQWNBO0lBQ0Usd0JBQUE7QUFaRjtBQWVBO0lBQ0Usd0JBQUE7QUFiRjtBQWdCQTtJQUNFLG9CQUFBO0FBZEY7QUFDRjtBQWlCQTtBQUNFO0lBQ0UseUJBQUE7QUFmRjtBQWtCQTtJQUNFLHlCQUFBO0FBaEJGO0FBbUJBO0lBQ0UsdUJBQUE7QUFqQkY7QUFDRjtBQU1BO0FBQ0U7SUFDRSx5QkFBQTtBQWZGO0FBa0JBO0lBQ0UseUJBQUE7QUFoQkY7QUFtQkE7SUFDRSx1QkFBQTtBQWpCRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5wcm9ncmVzc19iYXIge1xcbiAgQGFwcGx5IGZpeGVkIGxlZnQtMCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctd2hpdGU7XFxuICB0b3A6IDA7XFxuICB6LWluZGV4OiA5OTk7XFxuICBoZWlnaHQ6IDEwMHZoO1xcblxcbiAgJl9fd3JhcHBlciB7XFxuICAgIEBhcHBseSB3LVsyNTBweF0gb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtMnhsO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRjNGM0O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcblxcbiAgJl9fdmlld2VyIHtcXG4gICAgQGFwcGx5IGJnLXNwcmluZy01MDtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBoZWlnaHQ6IDRweDtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7XFxuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIH1cXG5cXG4gICYuYW5pbWF0ZS1sb2FkZXIgJl9fdmlld2VyIHtcXG4gICAgYW5pbWF0aW9uOiBGaWxsQW5pbWF0aW9uIDZzIGN1YmljLWJlemllcigwLjAxLCAxLjA2LCAwLjcxLCAxKSBmb3J3YXJkcztcXG4gIH1cXG5cXG4gICYuYW5pbWF0ZS1sb2FkZXIgJl9fc3RhdGU6OmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBhbmltYXRpb246IFRleHRDaGFuZ2UgNnMgY3ViaWMtYmV6aWVyKDAuMDEsIDEuMDYsIDAuNzEsIDEpIGZvcndhcmRzO1xcbiAgfVxcblxcbiAgJl9fY29udGVudCB7XFxuICAgIEBhcHBseSBmbGV4IGZsZXgtY29sO1xcbiAgfVxcblxcbiAgJl9fc3RhdGUge1xcbiAgICBAYXBwbHkgbXQtNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtYm9sZCBsZWFkaW5nLW5vcm1hbCB0ZXh0LWJsdWUtNTA7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgRmlsbEFuaW1hdGlvbiB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG4gIH1cXG4gIDEwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG4gIH1cXG4gIDIwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG4gIH1cXG5cXG4gIDI1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbiAgfVxcbiAgMzUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxuICB9XFxuICA0NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG4gIH1cXG5cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG4gIH1cXG5cXG4gIDYwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG4gIH1cXG5cXG4gIDcwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG4gIH1cXG5cXG4gIDc1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG4gIH1cXG5cXG4gIDg1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG4gIH1cXG5cXG4gIDk1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBUZXh0Q2hhbmdlIHtcXG4gIDAlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG4gIH1cXG5cXG4gIDk1JSB7XFxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdGFydCk7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLWVuZCk7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi52YWxpZGF0aW9uW2RhdGEtdi0xZTM4ZDEwZV0ge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC41cmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC41cmVtO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBhbGw7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKVxcbn1cXG4udmFsaWRhdGlvbl9fZXJyb3JIZWFkW2RhdGEtdi0xZTM4ZDEwZV0ge1xcbiAgd2lkdGg6IDIxMnB4O1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1jcmltc29uLTIwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tY3JpbXNvbi0xMCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSlcXG59XFxuLnZhbGlkYXRpb25fX2Vycm9yc1tkYXRhLXYtMWUzOGQxMGVdIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMHB4O1xcbiAgcmlnaHQ6IDBweDtcXG4gIHotaW5kZXg6IDEwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHdpZHRoOiA0MjRweDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZSksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDYwcHgpXFxufVxcbi52YWxpZGF0aW9uX19oZWFkaW5nW2RhdGEtdi0xZTM4ZDEwZV0ge1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcXG4gIHBhZGRpbmctdG9wOiAwLjc1cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cXG59XFxuLnZhbGlkYXRpb25fX2Vycm9ycy1saXN0W2RhdGEtdi0xZTM4ZDEwZV0ge1xcbiAgZmxleC1ncm93OiAxO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIHBhZGRpbmctbGVmdDogMXJlbTtcXG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXFxufVxcbi52YWxpZGF0aW9uX190b2dnbGVbZGF0YS12LTFlMzhkMTBlXSB7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBsaW5lLWhlaWdodDogMXJlbTtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBsaW5lLWhlaWdodDogMS41O1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwtNTApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKVxcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvU3RpY2t5RXJyb3JzLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLDhCQUFBO0VBQUEsaUNBQUE7RUFBQSxpQkFBQTtFQUFBLHdCQUFBO0VBQUEsd0RBQUE7RUFBQSwwQkFBQTtFQUNBO0FBREE7QUFJRTtFQUFBLFlBQUE7RUFBQSxzQkFBQTtFQUFBLCtEQUFBO0VBQUEsa0JBQUE7RUFBQSwrREFBQTtFQUNBO0FBREE7QUFLQTtFQUFBLGtCQUFBO0VBQUEsUUFBQTtFQUFBLFVBQUE7RUFBQSxXQUFBO0VBQUEsYUFBQTtFQUFBLFlBQUE7RUFBQSxzQkFBQTtFQUFBLGdCQUFBO0VBQUEsc0JBQUE7RUFBQSwwREFBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFDQTtBQURBO0FBS0E7RUFBQSxrQkFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQSxZQUFBO0VBQUEsZ0JBQUE7RUFBQSxrQkFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQTtBQUFBO0FBSUE7RUFBQSxrQkFBQTtFQUFBLGlCQUFBO0VBQUEseUJBQUE7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUE7QUFBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4udmFsaWRhdGlvbiB7XFxuICBAYXBwbHkgcm91bmRlZC10bC1sZyByb3VuZGVkLWJsLWxnIGJvcmRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDA7XFxuICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcblxcbiAgJl9fZXJyb3JIZWFkIHtcXG4gICAgQGFwcGx5IHctWzIxMnB4XSBib3JkZXItY3JpbXNvbi0yMCBiZy1jcmltc29uLTEwO1xcbiAgICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgfVxcblxcbiAgJl9fZXJyb3JzIHtcXG4gICAgQGFwcGx5IGFic29sdXRlIHRvcC0wIHJpZ2h0LTAgei0xMCBmbGV4IHctWzQyNHB4XSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLXdoaXRlIGJnLXdoaXRlO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweCk7XFxuICB9XFxuXFxuICAmX19oZWFkaW5nIHtcXG4gICAgQGFwcGx5IHB4LTQgcHktMztcXG4gIH1cXG5cXG4gICZfX2Vycm9ycy1saXN0IHtcXG4gICAgQGFwcGx5IGdyb3cgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMztcXG4gIH1cXG5cXG4gICZfX3RvZ2dsZSB7XFxuICAgIEBhcHBseSB0ZXh0LXhzIHVwcGVyY2FzZSBsZWFkaW5nLW5vcm1hbCB0ZXh0LWJsdWUtNTA7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5wYWdlLWhlaWdodCB7XFxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweCk7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlJbmRleC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0E7RUFDRSw4QkFBQTtBQUFGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5wYWdlLWhlaWdodCB7XFxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweCk7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5mb3JtLWdyb3VwW2RhdGEtdi1jN2NhMjhiOF0ge1xcbiAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogMS4yNXJlbTtcXG59XFxuLmZvcm0tZ3JvdXBbZGF0YS12LWM3Y2EyOGI4XTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcbi5mb3JtLWdyb3VwIC5mb3JtX19jb250ZW50W2RhdGEtdi1jN2NhMjhiOF0ge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIGdhcDogMjVweDtcXG59XFxuLmZvcm0tZ3JvdXAgLmZvcm1fX2NvbnRlbnQgLmxhYmVsLWZpZWxkW2RhdGEtdi1jN2NhMjhiOF0ge1xcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5mb3JtLWdyb3VwLXRpdGxlLWNvbnRhaW5lcltkYXRhLXYtYzdjYTI4YjhdIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuMzc1cmVtO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZvcm0tZ3JvdXAtdGl0bGUtY29udGFpbmVyW2RhdGEtdi1jN2NhMjhiOF0gPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHtcXG4gIC0tdHctc3BhY2UteC1yZXZlcnNlOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDAuMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKDAuMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSk7XFxufVxcbi5mb3JtLWdyb3VwLXRpdGxlW2RhdGEtdi1jN2NhMjhiOF0ge1xcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDFyZW07XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxxQkFBQTtFQUFBLGlCQUFBO0VBQUEsc0JBQUE7RUFBQSx5REFBQTtFQUFBLGdCQUFBO0FBQUE7QUFFQTtFQUNFLGdCQUFBO0FBQUo7QUFHRTtFQUNFLGFBQUE7RUFDQSxTQUFBO0FBREo7QUFJTTtFQUFBLHFCQUFBO0VBQUEsYUFBQTtFQUFBLG1CQUFBO0VBQUEsOEJBQUE7QUFBQTtBQUtKO0VBQUEsdUJBQUE7RUFBQSxhQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsdURBQUE7RUFBQSxnRUFBQTtBQUFBO0FBR0E7RUFBQSxrQkFBQTtFQUFBLGlCQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBLHFEQUFBO0FBQUFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmZvcm0tZ3JvdXAge1xcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1uLTIwIHAtNTtcXG5cXG4gICY6bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuXFxuICAuZm9ybV9fY29udGVudCB7XFxuICAgIG1hcmdpbi10b3A6IDA7XFxuICAgIGdhcDogMjVweDtcXG5cXG4gICAgLmxhYmVsLWZpZWxkIHtcXG4gICAgICBAYXBwbHkgbWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW47XFxuICAgIH1cXG4gIH1cXG59XFxuLmZvcm0tZ3JvdXAtdGl0bGUtY29udGFpbmVyIHtcXG4gIEBhcHBseSBtYi0xLjUgZmxleCBzcGFjZS14LTE7XFxufVxcbi5mb3JtLWdyb3VwLXRpdGxlIHtcXG4gIEBhcHBseSB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLm1pbnVzW2RhdGEtdi1kMGI4MDJkYV0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogMC43NXJlbTtcXG4gIHdpZHRoOiAwLjc1cmVtO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLm1pbnVzW2RhdGEtdi1kMGI4MDJkYV06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDAuMTI1cmVtO1xcbiAgd2lkdGg6IDAuNzVyZW07XFxuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwtNTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbiNwdWJsaXNoaW5nX2FjdGl2aXRpZXNbZGF0YS12LWQwYjgwMmRhXSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBib3R0b206IDBweDtcXG4gIHJpZ2h0OiAwcHg7XFxuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xcbn1cXG4ucm9sbGluZ1tkYXRhLXYtZDBiODAyZGFdIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4tZDBiODAyZGEge1xcbnRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG59XFxufVxcbkBrZXlmcmFtZXMgc3Bpbi1kMGI4MDJkYSB7XFxudG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbn1cXG59XFxuLnJvbGxpbmdbZGF0YS12LWQwYjgwMmRhXSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbi1kMGI4MDJkYSAxcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogc3Bpbi1kMGI4MDJkYSAxcyBsaW5lYXIgaW5maW5pdGU7XFxuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XFxuICBib3JkZXItd2lkdGg6IDJweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0yMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xcbn1cXG4uY3Jvc3NbZGF0YS12LWQwYjgwMmRhXSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW4tbGVmdDogMS4yNXJlbTtcXG4gIGhlaWdodDogMC43NXJlbTtcXG4gIHdpZHRoOiAwLjc1cmVtO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmNyb3NzW2RhdGEtdi1kMGI4MDJkYV06YmVmb3JlLCAuY3Jvc3NbZGF0YS12LWQwYjgwMmRhXTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDAuNzVyZW07XFxuICB3aWR0aDogMC4xMjVyZW07XFxuICAtLXR3LXRyYW5zbGF0ZS14OiAtNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3WCh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSk7XFxuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwtNTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbi5jcm9zc1tkYXRhLXYtZDBiODAyZGFdOmJlZm9yZSB7XFxuICAtLXR3LXJvdGF0ZTogNDVkZWc7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksIHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKTtcXG59XFxuLmNyb3NzW2RhdGEtdi1kMGI4MDJkYV06YWZ0ZXIge1xcbiAgLS10dy1yb3RhdGU6IC00NWRlZztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSwgdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tld1godmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpO1xcbn1cXG4uYWN0aXZpdHktdGl0bGVbZGF0YS12LWQwYjgwMmRhXSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxhQUFBO0VBQUEsZUFBQTtFQUFBLGNBQUE7RUFBQSxtQkFBQTtBQUFBO0FBQ0E7RUFDRSxXQUFBO0VBQ0EsY0FBQTtFQUFBLGdCQUFBO0VBQUEsY0FBQTtFQUFBLHNCQUFBO0VBQUEsa0JBQUE7RUFBQSxpRUFBQTtBQUNKO0FBSUU7RUFBQSxlQUFBO0VBQUEsV0FBQTtFQUFBLFVBQUE7RUFDQSxvREFBQTtBQURBO0FBS0E7RUFBQSxxQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLHlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSx5QkFBQTtBQUFBO0FBQUE7QUFBQTtFQUFBLG1EQUFBO1VBQUEsMkNBQUE7RUFBQSxxQkFBQTtFQUFBLGlCQUFBO0VBQUEsc0JBQUE7RUFBQSx5REFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsdUJBQUE7QUFIQTtBQU9BO0VBQUEsa0JBQUE7RUFBQSxvQkFBQTtFQUFBLGVBQUE7RUFBQSxjQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUVBO0VBRUUsV0FBQTtFQUNBLGtCQUFBO0VBQUEsU0FBQTtFQUFBLFFBQUE7RUFBQSxjQUFBO0VBQUEsZUFBQTtFQUFBLGVBQUE7RUFBQSxzQkFBQTtFQUFBLCtMQUFBO0VBQUEsc0JBQUE7RUFBQSxrQkFBQTtFQUFBLGlFQUFBO0FBREo7QUFLSTtFQUFBLGtCQUFBO0VBQUEsK0xBQUE7QUFBQTtBQUlBO0VBQUEsbUJBQUE7RUFBQSwrTEFBQTtBQUFBO0FBSUo7RUFDRSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUFKRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ubWludXMge1xcbiAgQGFwcGx5IGZsZXggaC0zIHctMyBpdGVtcy1jZW50ZXI7XFxuICAmOmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBAYXBwbHkgYmxvY2sgaC0wLjUgdy0zIHJvdW5kZWQteGwgYmctYmx1ZS01MDtcXG4gIH1cXG59XFxuXFxuI3B1Ymxpc2hpbmdfYWN0aXZpdGllcyB7XFxuICBAYXBwbHkgZml4ZWQgYm90dG9tLTAgcmlnaHQtMDtcXG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKSk7XFxufVxcblxcbi5yb2xsaW5nIHtcXG4gIEBhcHBseSBpbmxpbmUtYmxvY2sgYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItbi0yMDtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XFxufVxcblxcbi5jcm9zcyB7XFxuICBAYXBwbHkgcmVsYXRpdmUgbWwtNSBoLTMgdy0zIG92ZXJmbG93LWhpZGRlbjtcXG5cXG4gICY6YmVmb3JlLFxcbiAgJjphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0xLzIgdG9wLTAgYmxvY2sgaC0zIHctMC41IC10cmFuc2xhdGUteC0xLzIgcm91bmRlZC14bCBiZy1ibHVlLTUwO1xcbiAgfVxcblxcbiAgJjpiZWZvcmUge1xcbiAgICBAYXBwbHkgcm90YXRlLTQ1O1xcbiAgfVxcblxcbiAgJjphZnRlciB7XFxuICAgIEBhcHBseSAtcm90YXRlLTQ1O1xcbiAgfVxcbn1cXG5cXG4uYWN0aXZpdHktdGl0bGUge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmFjY29yZGlvbi1jb250ZW50W2RhdGEtdi0wNjNjYmQ4Nl0ge1xcbiAgaGVpZ2h0OiAwcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYWxsO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcXG59XFxuLmFjY29yZGlvbi1jb250ZW50IGRpdltkYXRhLXYtMDYzY2JkODZdIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbiAgcGFkZGluZy10b3A6IDAuNzVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC43NXJlbTtcXG59XFxuLmFjdGl2aXR5LXRpdGxlW2RhdGEtdi0wNjNjYmQ4Nl0ge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvRXJyb3JJdGVtLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLFdBQUE7RUFBQSxnQkFBQTtFQUFBLHdCQUFBO0VBQUEsd0RBQUE7RUFBQSwwQkFBQTtBQUFBO0FBRUU7RUFBQSxnQkFBQTtFQUFBLHFCQUFBO0VBQUEsc0JBQUE7RUFBQSx5REFBQTtFQUFBLG9CQUFBO0VBQUEsdUJBQUE7QUFBQTtBQUlKO0VBQ0UsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0FBQUZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmFjY29yZGlvbi1jb250ZW50IHtcXG4gIEBhcHBseSBoLTAgb3ZlcmZsb3ctaGlkZGVuIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMDtcXG4gIGRpdiB7XFxuICAgIEBhcHBseSBtdC00IGJvcmRlci10IGJvcmRlci1uLTIwIHB5LTM7XFxuICB9XFxufVxcblxcbi5hY3Rpdml0eS10aXRsZSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuYWN0aXZpdGllcyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5hY3Rpdml0aWVzIC5lbGVtZW50cyB7XFxuICBib3JkZXItcmFkaXVzOiAwcHggOHB4IDhweCAwcHg7XFxuICB3aWR0aDogMTI1cHg7XFxuICBtaW4taGVpZ2h0OiAxNzRweDtcXG59XFxuLmFjdGl2aXRpZXMgLmVsZW1lbnRzX19wYW5lbCB7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICBwYWRkaW5nOiAxcmVtO1xcbiAgLS10dy1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICAtLXR3LXNoYWRvdy1jb2xvcmVkOiAwcHggNHB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksIHZhcigtLXR3LXNoYWRvdyk7XFxufVxcbi5hY3Rpdml0aWVzIC5lbGVtZW50c19fcGFuZWwgLnBhbmVsX19pbnB1dDpmb2N1cywgXFxuLmFjdGl2aXRpZXMgLmVsZW1lbnRzX19wYW5lbCAucGFuZWxfX3NlYXJjaDpmb2N1cyB7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNDApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLmFjdGl2aXRpZXMgLmhvdmVyX190ZXh0IHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjI1cmVtO1xcbn1cXG4uYWN0aXZpdGllcyAuYnV0dG9uX19kcm9wZG93biB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMHB4O1xcbiAgdG9wOiAxMDAlO1xcbiAgei1pbmRleDogMTA7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgLS10dy1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICAtLXR3LXNoYWRvdy1jb2xvcmVkOiAwcHggNHB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksIHZhcigtLXR3LXNoYWRvdyk7XFxuICBtaW4td2lkdGg6IDE1MHB4O1xcbn1cXG4uYWN0aXZpdGllcyAuYnV0dG9uX19kcm9wZG93biBsaSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZy10b3A6IDAuMzc1cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuMzc1cmVtO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjg3NXJlbTtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuODc1cmVtO1xcbn1cXG4uYWN0aXZpdGllcyAuYnV0dG9uX19kcm9wZG93biBsaTpob3ZlciB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbn1cXG4uYWN0aXZpdGllcyAuYnV0dG9uX19kcm9wZG93biBsaSBzdmcge1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0E7RUFDRSxrQkFBQTtBQUFGO0FBQ0U7RUFDRSw4QkFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtBQUNKO0FBR0k7RUFBQSxxQkFBQTtFQUFBLGFBQUE7RUFBQSw0Q0FBQTtFQUFBLHdEQUFBO0VBQUEsdUdBQUE7QUFBQTtBQUlFOztFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQTtBQUtGO0VBQUEsb0JBQUE7QUFBQTtBQUdBO0VBQUEsa0JBQUE7RUFBQSxVQUFBO0VBQUEsU0FBQTtFQUFBLFdBQUE7RUFBQSxnQkFBQTtFQUFBLDRDQUFBO0VBQUEsd0RBQUE7RUFBQSx1R0FBQTtFQUNBLGdCQUFBO0FBREE7QUFJRTtFQUFBLGFBQUE7RUFBQSxxQkFBQTtFQUFBLHdCQUFBO0VBQUEsc0JBQUE7RUFBQSx1QkFBQTtBQUFBO0FBQUE7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0FBQUE7QUFHRTtFQUFBLHFCQUFBO0FBQUFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmFjdGl2aXRpZXMge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLmVsZW1lbnRzIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMHB4IDhweCA4cHggMHB4O1xcbiAgICB3aWR0aDogMTI1cHg7XFxuICAgIG1pbi1oZWlnaHQ6IDE3NHB4O1xcbiAgfVxcblxcbiAgLmVsZW1lbnRzX19wYW5lbCB7XFxuICAgIEBhcHBseSByb3VuZGVkLWxnIHAtNCBzaGFkb3ctZHJvcGRvd247XFxuXFxuICAgIC5wYW5lbF9faW5wdXQ6Zm9jdXMsXFxuICAgIC5wYW5lbF9fc2VhcmNoOmZvY3VzIHtcXG4gICAgICBAYXBwbHkgdGV4dC1uLTQwO1xcbiAgICB9XFxuICB9XFxuXFxuICAuaG92ZXJfX3RleHQge1xcbiAgICBAYXBwbHkgbWwtMTtcXG4gIH1cXG4gIC5idXR0b25fX2Ryb3Bkb3duIHtcXG4gICAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTAgdG9wLWZ1bGwgei0xMCB0ZXh0LWxlZnQgc2hhZG93LWRyb3Bkb3duO1xcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xcblxcbiAgICBsaSB7XFxuICAgICAgQGFwcGx5IGZsZXggcHktMS41IHB4LTMuNSBob3ZlcjpiZy13aGl0ZTtcXG5cXG4gICAgICBzdmcge1xcbiAgICAgICAgQGFwcGx5IG1yLTE7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5tYW5kYXRvcnk6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDAuNXB4O1xcbiAgaGVpZ2h0OiAxNDBweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMC4yNXJlbTtcXG4gIHJpZ2h0OiAtMS41cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1uLTIwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbn1cXG4uZWxlbWVudCB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcXG59XFxuLmVsZW1lbnRfX2lubmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5lbGVtZW50X19pbm5lciA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMC42MjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKDAuNjI1cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpO1xcbn1cXG4uZWxlbWVudF9fbm90ZXMge1xcbiAgaGVpZ2h0OiAxcmVtO1xcbiAgd2lkdGg6IDJyZW07XFxuICBib3JkZXItcmFkaXVzOiAwLjEyNXJlbTtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbn1cXG4uZWxlbWVudF9fc2VhcmNoIHtcXG4gIG1hcmdpbi10b3A6IDFyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgaGVpZ2h0OiAyLjVyZW07XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0zMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZy10b3A6IDAuNzVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC43NXJlbTtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDIuNXJlbTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbiAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgb3V0bGluZS1vZmZzZXQ6IDJweDtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbn1cXG4uZWxlbWVudF9fc2VhcmNoOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi0zMCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG59XFxuLmVsZW1lbnRfX3NlYXJjaDo6cGxhY2Vob2xkZXIge1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTMwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtcztcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xcbn1cXG4uZWxlbWVudF9fc2VhcmNoOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4uZWxlbWVudF9fc2VhcmNoOmZvY3VzOjpwbGFjZWhvbGRlciB7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNDApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnRhYl9fbGlua3Mge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XFxuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtO1xcbn1cXG4udGFiX19saW5rczo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDBweDtcXG4gIGxlZnQ6IDBweDtcXG4gIGhlaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgLS10dy1zY2FsZS14OiAwO1xcbiAgLS10dy1zY2FsZS15OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3WCh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSk7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbn1cXG4udGFiX19saW5rczpob3Zlcjo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgLS10dy1zY2FsZS14OiAxO1xcbiAgLS10dy1zY2FsZS15OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3WCh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSk7XFxufVxcbi50YWJfX2xpbmtzLS1hY3RpdmUge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi50YWJfX2xpbmtzLS1hY3RpdmU6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwcHg7XFxuICBsZWZ0OiAwcHg7XFxuICBoZWlnaHQ6IDAuMjVyZW07XFxuICB3aWR0aDogMTAwJTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxufVxcbi5zZXBhcmF0b3Ige1xcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XFxuICBtYXJnaW4tcmlnaHQ6IDFyZW07XFxufVxcbi5sYXN0IHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi0zMCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25EYXRhLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTtFQUNFLFdBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQUEsWUFBQTtFQUFBLGNBQUE7RUFBQSxrQkFBQTtFQUFBLHlEQUFBO0FBQUY7QUFJRTtFQUFBLHNCQUFBO0VBQUEsbUJBQUE7QUFBQTtBQUdFO0VBQUEsYUFBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLHdEQUFBO0VBQUEsaUVBQUE7QUFBQTtBQUlBO0VBQUEsWUFBQTtFQUFBLFdBQUE7RUFBQSx1QkFBQTtFQUFBLGlCQUFBO0FBQUE7QUFLRjtFQUFBLGdCQUFBO0VBQUEsbUJBQUE7RUFBQSxjQUFBO0VBQUEsV0FBQTtFQUFBLHNCQUFBO0VBQUEsaUJBQUE7RUFBQSxzQkFBQTtFQUFBLHlEQUFBO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUFBLG9CQUFBO0VBQUEsdUJBQUE7RUFBQSxzQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtFQUFBLDhCQUFBO0VBQUEsbUJBQUE7RUFBQSwwQkFBQTtBQUFBO0FBR0U7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtFQUFBLDBCQUFBO0VBQ0EsdUJBQUE7QUFEQTtBQUFBO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7RUFBQSwwQkFBQTtFQUNBLHVCQUFBO0FBREE7QUFLQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQTtBQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBO0FBS0Y7RUFBQSxrQkFBQTtFQUFBLGVBQUE7RUFBQSxvQkFBQTtFQUFBLHFCQUFBO0VBQUEsc0JBQUE7QUFBQTtBQUVBO0VBQ0UsV0FBQTtFQUNBLGtCQUFBO0VBQUEsV0FBQTtFQUFBLFNBQUE7RUFBQSxlQUFBO0VBQUEsV0FBQTtFQUFBLGVBQUE7RUFBQSxlQUFBO0VBQUEsK0xBQUE7RUFBQSxrQkFBQTtFQUFBLDhEQUFBO0VBQUEsMEJBQUE7QUFKSjtBQU9FO0VBQ0UsV0FBQTtFQUNBLG1CQUFBO0VBQUEsZUFBQTtFQUFBLGVBQUE7RUFBQSwrTEFBQTtBQUxKO0FBU0k7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUEscURBQUE7QUFBQTtBQUlKO0VBQ0UsV0FBQTtFQUNBLGtCQUFBO0VBQUEsV0FBQTtFQUFBLFNBQUE7RUFBQSxlQUFBO0VBQUEsV0FBQTtFQUFBLGtCQUFBO0VBQUEsOERBQUE7RUFBQSwwQkFBQTtBQVBGO0FBV0U7RUFBQSxpQkFBQTtFQUFBLGtCQUFBO0FBQUE7QUFJQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ubWFuZGF0b3J5OjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHdpZHRoOiAwLjVweDtcXG4gIGhlaWdodDogMTQwcHg7XFxuICBAYXBwbHkgYWJzb2x1dGUgdG9wLTEgLXJpZ2h0LTYgYmctbi0yMDtcXG59XFxuXFxuLmVsZW1lbnQge1xcbiAgQGFwcGx5IG1iLTMgbWwtMjtcXG5cXG4gICZfX2lubmVyIHtcXG4gICAgQGFwcGx5IGZsZXggc3BhY2UteC0yLjU7XFxuICB9XFxuXFxuICAmX19ub3RlcyB7XFxuICAgIEBhcHBseSBoLTQgdy04IHJvdW5kZWQtc20gYm9yZGVyO1xcbiAgfVxcbn1cXG5cXG4uZWxlbWVudF9fc2VhcmNoIHtcXG4gIEBhcHBseSBteS00IGgtMTAgdy1mdWxsIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1uLTMwIGJnLXdoaXRlIHB5LTMgcHItMyBwbC0xMCB0ZXh0LW4tNDAgb3V0bGluZS1ub25lIGR1cmF0aW9uLTMwMDtcXG5cXG4gICY6OnBsYWNlaG9sZGVyIHtcXG4gICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTMwIGR1cmF0aW9uLTMwMDtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XFxuICB9XFxuXFxuICAmOmZvY3VzOjpwbGFjZWhvbGRlciB7XFxuICAgIEBhcHBseSB0ZXh0LW4tNDA7XFxuICB9XFxufVxcblxcbi50YWJfX2xpbmtzIHtcXG4gIEBhcHBseSByZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciBweC0yIHBiLTY7XFxuXFxuICAmOjphZnRlciB7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIGgtMSB3LWZ1bGwgc2NhbGUtMCBiZy1ibHVlY29yYWwgZHVyYXRpb24tMzAwO1xcbiAgfVxcblxcbiAgJjpob3Zlcjo6YWZ0ZXIge1xcbiAgICBjb250ZW50OiAnJztcXG4gICAgQGFwcGx5IHZpc2libGUgc2NhbGUtMTAwO1xcbiAgfVxcblxcbiAgJi0tYWN0aXZlIHtcXG4gICAgQGFwcGx5IGZvbnQtYm9sZCB0ZXh0LWJsdWVjb3JhbDtcXG4gIH1cXG59XFxuXFxuLnRhYl9fbGlua3MtLWFjdGl2ZTo6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBAYXBwbHkgYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIGgtMSB3LWZ1bGwgYmctYmx1ZWNvcmFsIGR1cmF0aW9uLTMwMDtcXG59XFxuXFxuLnNlcGFyYXRvciB7XFxuICBAYXBwbHkgbXgtNDtcXG59XFxuXFxuLmxhc3Qge1xcbiAgQGFwcGx5IHRleHQtbi0zMDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnJlc2V0IHtcXG4gIGJveC1zaGFkb3c6IDBweCAyMHB4IDQwcHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNzVyZW07XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogMS4yNXJlbTtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4ucmVzZXQge1xcbiAgICBwYWRkaW5nOiAyLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldCB7XFxuICAgIHdpZHRoOiA1ODNweDtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgICBwYWRkaW5nOiA2cmVtO1xcbn1cXG59XFxuLnJlc2V0X19jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4ucmVzZXRfX2NvbnRlbnQgLmlucHV0IHtcXG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIHBhZGRpbmctdG9wOiAxLjI1cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDEuMjVyZW07XFxufVxcbi5yZXNldF9fY29udGVudCAubG9jay1pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMS4xMjVyZW07XFxuICBsaW5lLWhlaWdodDogMS43NXJlbTtcXG4gIHRvcDogNDdweDtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4ucmVzZXRfX2NvbnRlbnQgLmxvY2staWNvbiB7XFxuICAgIHRvcDogNTBweDtcXG4gICAgZm9udC1zaXplOiAyMHB4O1xcbn1cXG59XFxuLnJlc2V0X19jb250ZW50IC5tYWlsLWljb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMS41cmVtO1xcbiAgdG9wOiA0N3B4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldF9fY29udGVudCAubWFpbC1pY29uIHtcXG4gICAgdG9wOiA1MXB4O1xcbn1cXG59XFxuLnJlc2V0IGgyIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNTApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0IGgyIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xcbn1cXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4ucmVzZXQgaDIge1xcbiAgICBmb250LXNpemU6IDQwcHg7XFxuICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xcbn1cXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4ucmVzZXQgaDIge1xcbiAgICBmb250LXNpemU6IDMycHg7XFxuICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xcbn1cXG59XFxuLnJlc2V0IHAge1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTQwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldCBwIHtcXG4gICAgZm9udC1zaXplOiAxcmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xcbn1cXG59XFxuLnJlc2V0IC5yZXNldC1idG4ge1xcbiAgbWFyZ2luLXRvcDogMC43NXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDFyZW07XFxuICBwYWRkaW5nOiAxNHB4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldCAucmVzZXQtYnRuIHtcXG4gICAgcGFkZGluZzogMThweCA5NHB4O1xcbiAgICBmb250LXNpemU6IDE0cHg7XFxufVxcbn1cXG4ucmVzZXQgLnZlcmlmaWNhdGlvbiB7XFxuICBmb250LXNpemU6IDE1MHB4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldCAudmVyaWZpY2F0aW9uIHtcXG4gICAgZm9udC1zaXplOiAxOTBweDtcXG59XFxufVxcbi5yZXNldF9fcGFzc3dvcmQge1xcbiAgaGVpZ2h0OiA2MTBweDtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9yZXNldC9SZXNldFBhZ2UudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNBO0VBV0Usa0RBQUE7RUFDQSxvQkFBQTtFQUFBLHFCQUFBO0VBQUEscUJBQUE7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0VBQUEsZ0JBQUE7QUFWRjtBQURFO0FBQ0U7SUFBQSxlQUFBO0FBQUE7QUFLSjtBQUZFO0FBTEY7SUFNSSxZQUFBO0lBQ0EsWUFBQTtJQUVBLGFBQUE7QUFJRjtBQUNGO0FBQ0k7RUFBQSxrQkFBQTtFQUFBLGFBQUE7RUFBQSxzQkFBQTtBQUFBO0FBR0U7RUFBQSxrQkFBQTtFQUFBLHFCQUFBO0VBQUEsb0JBQUE7RUFBQSx1QkFBQTtBQUFBO0FBSUE7RUFBQSxrQkFBQTtFQUFBLFlBQUE7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQ0EsU0FBQTtBQURBO0FBR0E7QUFKRjtJQUtJLFNBQUE7SUFDQSxlQUFBO0FBRU47QUFDRjtBQUVNO0VBQUEsa0JBQUE7RUFBQSxZQUFBO0VBQ0EsU0FBQTtBQURBO0FBR0E7QUFKRjtJQUtJLFNBQUE7QUFFTjtBQUNGO0FBV0k7RUFBQSxlQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEscUJBQUE7QUFBQTtBQUFBO0FBVEE7QUFDRTtJQUFBLGVBQUE7SUFDQSxpQkFBQTtBQURBO0FBTU47QUFGSTtBQUNFO0lBQUEsZUFBQTtJQUNBLGlCQUFBO0FBREE7QUFPTjtBQURJO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxlQUFBO0lBQUEsbUJBQUE7QUFBQTtBQUFBO0FBR0E7RUFBQSxtQkFBQTtFQUFBLFdBQUE7RUFBQSxrQkFBQTtFQUFBLGlCQUFBO0VBQ0EsYUFBQTtBQURBO0FBR0E7QUFKRjtJQUtJLGtCQUFBO0lBQ0EsZUFBQTtBQUtKO0FBQ0Y7QUFIRTtFQUNFLGdCQUFBO0FBS0o7QUFISTtBQUhGO0lBSUksZ0JBQUE7QUFNSjtBQUNGO0FBSEE7RUFDRSxhQUFBO0FBTUZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLnJlc2V0IHtcXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7XFxuICAgIEBhcHBseSBwLTEwO1xcbiAgfVxcblxcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4gICAgd2lkdGg6IDU4M3B4O1xcbiAgICBtYXJnaW46IGF1dG87XFxuXFxuICAgIEBhcHBseSBwLTI0O1xcbiAgfVxcbiAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBAYXBwbHkgbXgtMyByb3VuZGVkLWxnIGJnLXdoaXRlIHAtNTtcXG5cXG4gICZfX2NvbnRlbnQge1xcbiAgICBAYXBwbHkgcmVsYXRpdmUgZmxleCBmbGV4LWNvbDtcXG5cXG4gICAgLmlucHV0IHtcXG4gICAgICBAYXBwbHkgbXktMiBweS01O1xcbiAgICB9XFxuXFxuICAgIC5sb2NrLWljb24ge1xcbiAgICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTYgdGV4dC1sZztcXG4gICAgICB0b3A6IDQ3cHg7XFxuXFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4gICAgICAgIHRvcDogNTBweDtcXG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLm1haWwtaWNvbiB7XFxuICAgICAgQGFwcGx5IGFic29sdXRlIGxlZnQtNjtcXG4gICAgICB0b3A6IDQ3cHg7XFxuXFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4gICAgICAgIHRvcDogNTFweDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIGgyIHtcXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4gICAgICBAYXBwbHkgdGV4dC1oZWFkaW5nLTM7XFxuICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7XFxuICAgIH1cXG5cXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4gICAgICBAYXBwbHkgdGV4dC1oZWFkaW5nLTQ7XFxuICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7XFxuICAgIH1cXG4gICAgQGFwcGx5IHRleHQtaGVhZGluZy01IGZvbnQtYm9sZCB0ZXh0LW4tNTAgc206bWItMjtcXG4gIH1cXG4gIHAge1xcbiAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDAgc206dGV4dC1iYXNlO1xcbiAgfVxcbiAgLnJlc2V0LWJ0biB7XFxuICAgIEBhcHBseSBtdC0zIHctZnVsbCB0ZXh0LXhzO1xcbiAgICBwYWRkaW5nOiAxNHB4O1xcblxcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICAgIHBhZGRpbmc6IDE4cHggOTRweDtcXG4gICAgICBmb250LXNpemU6IDE0cHg7XFxuICAgIH1cXG4gIH1cXG4gIC52ZXJpZmljYXRpb24ge1xcbiAgICBmb250LXNpemU6IDE1MHB4O1xcblxcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICAgIGZvbnQtc2l6ZTogMTkwcHg7XFxuICAgIH1cXG4gIH1cXG59XFxuLnJlc2V0X19wYXNzd29yZCB7XFxuICBoZWlnaHQ6IDYxMHB4O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIubGFiZWwge1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIHtcXG4gIG1heC13aWR0aDogODY1cHg7XFxuICBtYXJnaW46IGF1dG87XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIge1xcbiAgICBtYXgtd2lkdGg6IDEyMDZweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuZmVlZGJhY2sge1xcbiAgICB3aWR0aDogNzAycHg7XFxufVxcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5mZWVkYmFjayBwIHtcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX193cmFwcGVyIHtcXG4gIGJveC1zaGFkb3c6IDBweCAyMHB4IDQwcHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX193cmFwcGVyIC52ZXJpZmljYXRpb24ge1xcbiAgZm9udC1zaXplOiAxOTBweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUge1xcbiAgbWFyZ2luLXRvcDogMS43NXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDEuNzVyZW07XFxuICBtYXJnaW4tbGVmdDogMC43NXJlbTtcXG4gIG1hcmdpbi1yaWdodDogMC43NXJlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGxpbmUtaGVpZ2h0OiAxLjc1cmVtO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICAgIGxpbmUtaGVpZ2h0OiAyLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUge1xcbiAgICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XFxuICAgIG1hcmdpbi10b3A6IDMuNXJlbTtcXG59XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUge1xcbiAgICBsaW5lLWhlaWdodDogMi4yNXJlbTtcXG59XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHAge1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSBwIHtcXG4gICAgZm9udC1zaXplOiAxcmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xcbn1cXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIge1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1lZ2dzaGVsbCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHBhZGRpbmc6IDk2cHggMzJweCA0MHB4O1xcbiAgd2lkdGg6IDM0NHB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5yZWdpc3Rlcl9fc2lkZWJhciB1bCB7XFxuICB3aWR0aDogMjUzcHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIHVsOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogNHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1uLTIwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIC5kZXRhaWwge1xcbiAgbWFyZ2luLWxlZnQ6IDQ1cHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIC5saXN0X19hY3RpdmU6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IC0xcHg7XFxuICB3aWR0aDogNnB4O1xcbiAgaGVpZ2h0OiA4NXB4O1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS10dXJxdW9pc2UpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIHotaW5kZXg6IDU7XFxufVxcbi5mb3JtIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4uZm9ybSB7XFxuICAgIHBhZGRpbmctbGVmdDogMi41cmVtO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjVyZW07XFxuICAgIHBhZGRpbmctdG9wOiAyLjVyZW07XFxuICAgIHBhZGRpbmctYm90dG9tOiAyLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuLmZvcm0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDVyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDVyZW07XFxufVxcbn1cXG4uZm9ybSB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7XFxuICB3aWR0aDogODYycHg7XFxufVxcbi5mb3JtX19jb250YWluZXIge1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xcbn1cXG4uZm9ybV9fY29udGFpbmVyIC5lcnJvcl9faW5wdXQge1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWNyaW1zb24tNTApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbn1cXG4uZm9ybV9fY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAyNHB4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uZm9ybV9fY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XFxuICAgIGdhcDogMTZweDtcXG59XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVFO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLGdCQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBO0FBSUE7RUFJRSxnQkFBQTtFQUNBLFlBQUE7QUFKSjtBQUFJO0FBREY7SUFFSSxpQkFBQTtBQUdKO0FBRUU7SUFFSSxZQUFBO0FBQ047QUFKRjtBQU1NO0VBQ0UsaUJBQUE7QUFDUjtBQUdJO0VBQ0Usa0RBQUE7QUFETjtBQUdNO0VBQ0UsZ0JBQUE7QUFEUjtBQVVNO0VBQUEsbUJBQUE7RUFBQSxzQkFBQTtFQUFBLG9CQUFBO0VBQUEscUJBQUE7RUFBQSxrQkFBQTtFQUFBLG9CQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEsbUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLHFCQUFBO0lBQUEsa0JBQUE7QUFBQTtBQUFBO0FBSkE7QUFDRTtJQUFBLG9CQUFBO0FBQUE7QUFDUjtBQUlNO0VBQ0UsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0FBRlI7QUFFUTtBQUFBO0lBQUEsZUFBQTtJQUFBLG1CQUFBO0FBQUE7QUFBQTtBQUtGO0VBQUEsa0JBQUE7RUFBQSw2REFBQTtFQUNBLHVCQUFBO0VBQ0EsWUFBQTtBQUZBO0FBSUE7RUFDRSxZQUFBO0FBSlI7QUFPTTtFQUNFLFdBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQUEseURBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsU0FBQTtFQUNBLFFBQUE7QUFMUjtBQVFNO0VBQ0UsaUJBQUE7QUFOUjtBQVNNO0VBQ0Usa0JBQUE7RUFDQSxNQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFBQSw4REFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLFVBQUE7QUFQUjtBQWNFO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUFBLGdCQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEsb0JBQUE7SUFBQSxxQkFBQTtJQUFBLG1CQUFBO0lBQUEsc0JBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLGtCQUFBO0lBQUEsbUJBQUE7QUFBQTtBQUFBO0FBREY7RUFFRSwyQkFBQTtFQUNBLDhCQUFBO0VBQ0EsWUFBQTtBQVZGO0FBYUk7RUFBQSx3QkFBQTtFQUFBLHNCQUFBO0VBQUEsZ0VBQUE7RUFDQSxtQkFBQTtBQURBO0FBSUU7RUFBQSxpQkFBQTtFQUFBLHNCQUFBO0VBQUEsK0RBQUE7QUFBQTtBQUlKO0VBQ0UsZ0JBQUE7QUFaSjtBQWdCQTtBQUNFO0lBQ0UsYUFBQTtJQUNBLHFDQUFBO0lBQ0EsU0FBQTtBQWJGO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLmxhYmVsIHtcXG4gIEBhcHBseSB0ZXh0LXNtIGZvbnQtbm9ybWFsIHRleHQtbi01MDtcXG59XFxuXFxuLnNlY3Rpb24ge1xcbiAgJl9fY29udGFpbmVyIHtcXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XFxuICAgICAgbWF4LXdpZHRoOiAxMjA2cHg7XFxuICAgIH1cXG4gICAgbWF4LXdpZHRoOiA4NjVweDtcXG4gICAgbWFyZ2luOiBhdXRvO1xcblxcbiAgICAuZmVlZGJhY2sge1xcbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkge1xcbiAgICAgICAgd2lkdGg6IDcwMnB4O1xcbiAgICAgIH1cXG5cXG4gICAgICBwIHtcXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAuc2VjdGlvbl9fd3JhcHBlciB7XFxuICAgICAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuXFxuICAgICAgLnZlcmlmaWNhdGlvbiB7XFxuICAgICAgICBmb250LXNpemU6IDE5MHB4O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAuc2VjdGlvbl9fdGl0bGUge1xcbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ0MHB4KSB7XFxuICAgICAgICBAYXBwbHkgbGVhZGluZy05O1xcbiAgICAgIH1cXG5cXG4gICAgICBAYXBwbHkgbXktNyBteC0zIHRleHQtY2VudGVyIGxlYWRpbmctNyBzbTpsZWFkaW5nLTEwIGxnOm1iLTEwIGxnOm10LTE0O1xcblxcbiAgICAgIHAge1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIEBhcHBseSB0ZXh0LXNtIHRleHQtbi00MCBzbTp0ZXh0LWJhc2U7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5yZWdpc3Rlcl9fc2lkZWJhciB7XFxuICAgICAgQGFwcGx5IGJnLWVnZ3NoZWxsO1xcbiAgICAgIHBhZGRpbmc6IDk2cHggMzJweCA0MHB4O1xcbiAgICAgIHdpZHRoOiAzNDRweDtcXG5cXG4gICAgICB1bCB7XFxuICAgICAgICB3aWR0aDogMjUzcHg7XFxuICAgICAgfVxcblxcbiAgICAgIHVsOjpiZWZvcmUge1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgICAgICB3aWR0aDogNHB4O1xcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgQGFwcGx5IGJnLW4tMjA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBsZWZ0OiAwcHg7XFxuICAgICAgICB0b3A6IDBweDtcXG4gICAgICB9XFxuXFxuICAgICAgLmRldGFpbCB7XFxuICAgICAgICBtYXJnaW4tbGVmdDogNDVweDtcXG4gICAgICB9XFxuXFxuICAgICAgLmxpc3RfX2FjdGl2ZTo6YWZ0ZXIge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgbGVmdDogLTFweDtcXG4gICAgICAgIHdpZHRoOiA2cHg7XFxuICAgICAgICBoZWlnaHQ6IDg1cHg7XFxuICAgICAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgICAgICB6LWluZGV4OiA1O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uZm9ybSB7XFxuICBAYXBwbHkgYmctd2hpdGUgcC01IHNtOnB4LTEwIHNtOnB5LTEwIGxnOnB4LTIwO1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xcbiAgd2lkdGg6IDg2MnB4O1xcblxcbiAgJl9fY29udGFpbmVyIHtcXG4gICAgQGFwcGx5IGJvcmRlci1iLTIgYm9yZGVyLWItbi0xMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcXG5cXG4gICAgLmVycm9yX19pbnB1dCB7XFxuICAgICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcXG4gICAgfVxcbiAgfVxcblxcbiAgJl9fY29udGVudCB7XFxuICAgIG1hcmdpbi10b3A6IDI0cHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xcbiAgLmZvcm1fX2NvbnRlbnQge1xcbiAgICBkaXNwbGF5OiBncmlkO1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xcbiAgICBnYXA6IDE2cHg7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5sYWJlbCB7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTUwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIge1xcbiAgbWF4LXdpZHRoOiA4NjVweDtcXG4gIG1hcmdpbjogYXV0bztcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogMTIwNnB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5mZWVkYmFjayB7XFxuICAgIHdpZHRoOiA3MDJweDtcXG59XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLmZlZWRiYWNrIHAge1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3dyYXBwZXIge1xcbiAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3dyYXBwZXIgLnZlcmlmaWNhdGlvbiB7XFxuICBmb250LXNpemU6IDE5MHB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAxLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwLjc1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDEuNzVyZW07XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHtcXG4gICAgbGluZS1oZWlnaHQ6IDIuNXJlbTtcXG59XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDIuNXJlbTtcXG4gICAgbWFyZ2luLXRvcDogMy41cmVtO1xcbn1cXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICAgIGxpbmUtaGVpZ2h0OiAyLjI1cmVtO1xcbn1cXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUgcCB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTQwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHAge1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxufVxcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5yZWdpc3Rlcl9fc2lkZWJhciB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWVnZ3NoZWxsKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogOTZweCAzMnB4IDQwcHg7XFxuICB3aWR0aDogMzQ0cHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIHVsIHtcXG4gIHdpZHRoOiAyNTNweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgdWw6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiA0cHg7XFxuICBoZWlnaHQ6IDE3NXB4O1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1uLTIwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIC5kZXRhaWwge1xcbiAgbWFyZ2luLWxlZnQ6IDQ1cHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIC5saXN0X19hY3RpdmU6OmFmdGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IC0xcHg7XFxuICB3aWR0aDogNnB4O1xcbiAgaGVpZ2h0OiA4NXB4O1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS10dXJxdW9pc2UpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIHotaW5kZXg6IDU7XFxufVxcbi5mb3JtIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4uZm9ybSB7XFxuICAgIHBhZGRpbmctbGVmdDogMi41cmVtO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjVyZW07XFxuICAgIHBhZGRpbmctdG9wOiAyLjVyZW07XFxuICAgIHBhZGRpbmctYm90dG9tOiAyLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuLmZvcm0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDVyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDVyZW07XFxufVxcbn1cXG4uZm9ybSB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7XFxuICB3aWR0aDogODYycHg7XFxufVxcbi5mb3JtX19jb250YWluZXIge1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xcbn1cXG4uZm9ybV9fY29udGFpbmVyIC5lcnJvcl9faW5wdXQge1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWNyaW1zb24tNTApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbn1cXG4uZm9ybV9fY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAyNHB4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uZm9ybV9fY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XFxuICAgIGdhcDogMTZweDtcXG59XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1JlZ2lzdGVyUGFnZS52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0FBQUE7QUFJQTtFQUlFLGdCQUFBO0VBQ0EsWUFBQTtBQUpKO0FBQUk7QUFERjtJQUVJLGlCQUFBO0FBR0o7QUFFRTtJQUVJLFlBQUE7QUFDTjtBQUpGO0FBTU07RUFDRSxpQkFBQTtBQUNSO0FBR0k7RUFDRSxrREFBQTtBQUROO0FBR007RUFDRSxnQkFBQTtBQURSO0FBVU07RUFBQSxtQkFBQTtFQUFBLHNCQUFBO0VBQUEsb0JBQUE7RUFBQSxxQkFBQTtFQUFBLGtCQUFBO0VBQUEsb0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEscUJBQUE7SUFBQSxrQkFBQTtBQUFBO0FBQUE7QUFKQTtBQUNFO0lBQUEsb0JBQUE7QUFBQTtBQUNSO0FBSU07RUFDRSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFGUjtBQUVRO0FBQUE7SUFBQSxlQUFBO0lBQUEsbUJBQUE7QUFBQTtBQUFBO0FBS0Y7RUFBQSxrQkFBQTtFQUFBLDZEQUFBO0VBQ0EsdUJBQUE7RUFDQSxZQUFBO0FBRkE7QUFJQTtFQUNFLFlBQUE7QUFKUjtBQU9NO0VBQ0UsV0FBQTtFQUNBLFVBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFBQSx5REFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSxTQUFBO0VBQ0EsUUFBQTtBQUxSO0FBUU07RUFDRSxpQkFBQTtBQU5SO0FBU007RUFDRSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUFBLDhEQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0VBQ0EsVUFBQTtBQVBSO0FBY0U7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxvQkFBQTtJQUFBLHFCQUFBO0lBQUEsbUJBQUE7SUFBQSxzQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEsa0JBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFERjtFQUVFLDJCQUFBO0VBQ0EsOEJBQUE7RUFDQSxZQUFBO0FBVkY7QUFhSTtFQUFBLHdCQUFBO0VBQUEsc0JBQUE7RUFBQSxnRUFBQTtFQUNBLG1CQUFBO0FBREE7QUFJRTtFQUFBLGlCQUFBO0VBQUEsc0JBQUE7RUFBQSwrREFBQTtBQUFBO0FBSUo7RUFDRSxnQkFBQTtBQVpKO0FBZ0JBO0FBQ0U7SUFDRSxhQUFBO0lBQ0EscUNBQUE7SUFDQSxTQUFBO0FBYkY7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ubGFiZWwge1xcbiAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTUwO1xcbn1cXG5cXG4uc2VjdGlvbiB7XFxuICAmX19jb250YWluZXIge1xcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDEyMDZweDtcXG4gICAgfVxcbiAgICBtYXgtd2lkdGg6IDg2NXB4O1xcbiAgICBtYXJnaW46IGF1dG87XFxuXFxuICAgIC5mZWVkYmFjayB7XFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XFxuICAgICAgICB3aWR0aDogNzAycHg7XFxuICAgICAgfVxcblxcbiAgICAgIHAge1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zZWN0aW9uX193cmFwcGVyIHtcXG4gICAgICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG5cXG4gICAgICAudmVyaWZpY2F0aW9uIHtcXG4gICAgICAgIGZvbnQtc2l6ZTogMTkwcHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zZWN0aW9uX190aXRsZSB7XFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4gICAgICAgIEBhcHBseSBsZWFkaW5nLTk7XFxuICAgICAgfVxcblxcbiAgICAgIEBhcHBseSBteS03IG14LTMgdGV4dC1jZW50ZXIgbGVhZGluZy03IHNtOmxlYWRpbmctMTAgbGc6bWItMTAgbGc6bXQtMTQ7XFxuXFxuICAgICAgcCB7XFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwIHNtOnRleHQtYmFzZTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnJlZ2lzdGVyX19zaWRlYmFyIHtcXG4gICAgICBAYXBwbHkgYmctZWdnc2hlbGw7XFxuICAgICAgcGFkZGluZzogOTZweCAzMnB4IDQwcHg7XFxuICAgICAgd2lkdGg6IDM0NHB4O1xcblxcbiAgICAgIHVsIHtcXG4gICAgICAgIHdpZHRoOiAyNTNweDtcXG4gICAgICB9XFxuXFxuICAgICAgdWw6OmJlZm9yZSB7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgICAgIHdpZHRoOiA0cHg7XFxuICAgICAgICBoZWlnaHQ6IDE3NXB4O1xcbiAgICAgICAgQGFwcGx5IGJnLW4tMjA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBsZWZ0OiAwcHg7XFxuICAgICAgICB0b3A6IDBweDtcXG4gICAgICB9XFxuXFxuICAgICAgLmRldGFpbCB7XFxuICAgICAgICBtYXJnaW4tbGVmdDogNDVweDtcXG4gICAgICB9XFxuXFxuICAgICAgLmxpc3RfX2FjdGl2ZTo6YWZ0ZXIge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgbGVmdDogLTFweDtcXG4gICAgICAgIHdpZHRoOiA2cHg7XFxuICAgICAgICBoZWlnaHQ6IDg1cHg7XFxuICAgICAgICBAYXBwbHkgYmctdHVycXVvaXNlO1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XFxuICAgICAgICB6LWluZGV4OiA1O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uZm9ybSB7XFxuICBAYXBwbHkgYmctd2hpdGUgcC01IHNtOnB4LTEwIHNtOnB5LTEwIGxnOnB4LTIwO1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4O1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xcbiAgd2lkdGg6IDg2MnB4O1xcblxcbiAgJl9fY29udGFpbmVyIHtcXG4gICAgQGFwcGx5IGJvcmRlci1iLTIgYm9yZGVyLWItbi0xMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcXG5cXG4gICAgLmVycm9yX19pbnB1dCB7XFxuICAgICAgQGFwcGx5IGJvcmRlciBib3JkZXItY3JpbXNvbi01MDtcXG4gICAgfVxcbiAgfVxcblxcbiAgJl9fY29udGVudCB7XFxuICAgIG1hcmdpbi10b3A6IDI0cHg7XFxuICB9XFxufVxcblxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xcbiAgLmZvcm1fX2NvbnRlbnQge1xcbiAgICBkaXNwbGF5OiBncmlkO1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xcbiAgICBnYXA6IDE2cHg7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIiNidG5bZGF0YS12LWExODYxZjNlXSB7XFxuICBwYWRkaW5nOiAxM3B4IDA7XFxufVxcbiNidG4gc3ZnW2RhdGEtdi1hMTg2MWYzZV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDEuNzVyZW07XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAycmVtO1xcbiAgdHJhbnNpdGlvbjogMC40cztcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4jYnRuW2RhdGEtdi1hMTg2MWYzZV0ge1xcbiAgICBwYWRkaW5nOiAxOHB4IDA7XFxufVxcbn1cXG4udXNlcm5hbWVbZGF0YS12LWExODYxZjNlXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcbi5wYXNzd29yZFtkYXRhLXYtYTE4NjFmM2VdIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxubGFiZWxbZGF0YS12LWExODYxZjNlXSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9TaWduSW4udnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNBO0VBQ0UsZUFBQTtBQUFGO0FBR0k7RUFBQSxrQkFBQTtFQUFBLGNBQUE7RUFBQSxpQkFBQTtFQUFBLGlCQUFBO0VBQ0EsZ0JBQUE7QUFEQTtBQUlKO0FBQ0U7SUFDRSxlQUFBO0FBQUY7QUFDRjtBQUdFO0VBQUEscUJBQUE7QUFBQTtBQUdBO0VBQUEscUJBQUE7QUFBQTtBQUdBO0VBQUEscUJBQUE7RUFBQSxnQkFBQTtBQUFBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbiNidG4ge1xcbiAgcGFkZGluZzogMTNweCAwO1xcblxcbiAgc3ZnIHtcXG4gICAgQGFwcGx5IGFic29sdXRlIHJpZ2h0LTcgdGV4dC0yeGw7XFxuICAgIHRyYW5zaXRpb246IDAuNHM7XFxuICB9XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuICAjYnRuIHtcXG4gICAgcGFkZGluZzogMThweCAwO1xcbiAgfVxcbn1cXG4udXNlcm5hbWUge1xcbiAgQGFwcGx5IG1iLTI7XFxufVxcbi5wYXNzd29yZCB7XFxuICBAYXBwbHkgbWItMjtcXG59XFxubGFiZWwge1xcbiAgQGFwcGx5IG1iLTIgZm9udC1ib2xkO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwidmFyIG1hcCA9IHtcblx0XCIuL2FmXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYWYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FmLmpzXCIsXG5cdFwiLi9hclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanNcIixcblx0XCIuL2FyLWR6XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXItZHouanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWR6LmpzXCIsXG5cdFwiLi9hci1rd1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanNcIixcblx0XCIuL2FyLWt3LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXItbHlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWx5LmpzXCIsXG5cdFwiLi9hci1seS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanNcIixcblx0XCIuL2FyLW1hXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItbWEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzXCIsXG5cdFwiLi9hci1zYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItc2EuanNcIixcblx0XCIuL2FyLXNhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItdG5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXRuLmpzXCIsXG5cdFwiLi9hci10bi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanNcIixcblx0XCIuL2FyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2F6LmpzXCIsXG5cdFwiLi9hei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanNcIixcblx0XCIuL2JlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzXCIsXG5cdFwiLi9iZ1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanNcIixcblx0XCIuL2JnLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYm1cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JtLmpzXCIsXG5cdFwiLi9ibS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanNcIixcblx0XCIuL2JuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm4tYmRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLWJkLmpzXCIsXG5cdFwiLi9ibi1iZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4tYmQuanNcIixcblx0XCIuL2JuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JvLmpzXCIsXG5cdFwiLi9iby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanNcIixcblx0XCIuL2JyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzXCIsXG5cdFwiLi9ic1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanNcIixcblx0XCIuL2JzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vY2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NhLmpzXCIsXG5cdFwiLi9jYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanNcIixcblx0XCIuL2NzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3MuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzXCIsXG5cdFwiLi9jdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanNcIixcblx0XCIuL2N2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3lcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N5LmpzXCIsXG5cdFwiLi9jeS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanNcIixcblx0XCIuL2RhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RhLmpzXCIsXG5cdFwiLi9kZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanNcIixcblx0XCIuL2RlLWF0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtYXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWF0LmpzXCIsXG5cdFwiLi9kZS1jaFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanNcIixcblx0XCIuL2RlLWNoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzXCIsXG5cdFwiLi9kdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanNcIixcblx0XCIuL2R2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZWxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VsLmpzXCIsXG5cdFwiLi9lbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanNcIixcblx0XCIuL2VuLWF1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tYXUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWF1LmpzXCIsXG5cdFwiLi9lbi1jYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanNcIixcblx0XCIuL2VuLWNhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tZ2JcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzXCIsXG5cdFwiLi9lbi1nYi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanNcIixcblx0XCIuL2VuLWllXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWllLmpzXCIsXG5cdFwiLi9lbi1pbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanNcIixcblx0XCIuL2VuLWlsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taW5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWluLmpzXCIsXG5cdFwiLi9lbi1pbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taW4uanNcIixcblx0XCIuL2VuLW56XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tbnouanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzXCIsXG5cdFwiLi9lbi1zZ1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanNcIixcblx0XCIuL2VuLXNnLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VvLmpzXCIsXG5cdFwiLi9lby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanNcIixcblx0XCIuL2VzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXMtZG9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLWRvLmpzXCIsXG5cdFwiLi9lcy1kby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtZG8uanNcIixcblx0XCIuL2VzLW14XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1teC5qc1wiLFxuXHRcIi4vZXMtbXguanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLW14LmpzXCIsXG5cdFwiLi9lcy11c1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanNcIixcblx0XCIuL2VzLXVzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzXCIsXG5cdFwiLi9ldFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanNcIixcblx0XCIuL2V0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V1LmpzXCIsXG5cdFwiLi9ldS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanNcIixcblx0XCIuL2ZhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzXCIsXG5cdFwiLi9maVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanNcIixcblx0XCIuL2ZpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmlsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanNcIixcblx0XCIuL2ZpbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzXCIsXG5cdFwiLi9mb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qc1wiLFxuXHRcIi4vZnJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzXCIsXG5cdFwiLi9mci1jYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qc1wiLFxuXHRcIi4vZnItY2hcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzXCIsXG5cdFwiLi9mci1jaC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qc1wiLFxuXHRcIi4vZnlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzXCIsXG5cdFwiLi9meS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2dhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qc1wiLFxuXHRcIi4vZ2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dhLmpzXCIsXG5cdFwiLi9nZFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dkLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qc1wiLFxuXHRcIi4vZ2xcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzXCIsXG5cdFwiLi9nbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dvbS1kZXZhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tZGV2YS5qc1wiLFxuXHRcIi4vZ29tLWRldmEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1kZXZhLmpzXCIsXG5cdFwiLi9nb20tbGF0blwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2dvbS1sYXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qc1wiLFxuXHRcIi4vZ3VcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzXCIsXG5cdFwiLi9ndS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2hlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qc1wiLFxuXHRcIi4vaGUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzXCIsXG5cdFwiLi9oaVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qc1wiLFxuXHRcIi4vaHJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzXCIsXG5cdFwiLi9oci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2h1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qc1wiLFxuXHRcIi4vaHUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzXCIsXG5cdFwiLi9oeS1hbVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2h5LWFtLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qc1wiLFxuXHRcIi4vaWRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzXCIsXG5cdFwiLi9pZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qc1wiLFxuXHRcIi4vaXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzXCIsXG5cdFwiLi9pdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2l0LWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qc1wiLFxuXHRcIi4vaXQtY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzXCIsXG5cdFwiLi9pdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2phXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qc1wiLFxuXHRcIi4vamEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzXCIsXG5cdFwiLi9qdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2p2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qc1wiLFxuXHRcIi4va2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzXCIsXG5cdFwiLi9rYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2trXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qc1wiLFxuXHRcIi4va2suanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzXCIsXG5cdFwiLi9rbVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2ttLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qc1wiLFxuXHRcIi4va25cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzXCIsXG5cdFwiLi9rbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qc1wiLFxuXHRcIi4va28uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzXCIsXG5cdFwiLi9rdVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qc1wiLFxuXHRcIi4va3lcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzXCIsXG5cdFwiLi9reS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2xiXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qc1wiLFxuXHRcIi4vbGIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzXCIsXG5cdFwiLi9sb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2xvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qc1wiLFxuXHRcIi4vbHRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzXCIsXG5cdFwiLi9sdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qc1wiLFxuXHRcIi4vbHYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzXCIsXG5cdFwiLi9tZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21lLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qc1wiLFxuXHRcIi4vbWlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzXCIsXG5cdFwiLi9taS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21rXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qc1wiLFxuXHRcIi4vbWsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzXCIsXG5cdFwiLi9tbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21sLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qc1wiLFxuXHRcIi4vbW5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzXCIsXG5cdFwiLi9tbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21yXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qc1wiLFxuXHRcIi4vbXIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21yLmpzXCIsXG5cdFwiLi9tc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL21zLW15XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qc1wiLFxuXHRcIi4vbXMtbXkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLW15LmpzXCIsXG5cdFwiLi9tcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL210XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qc1wiLFxuXHRcIi4vbXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzXCIsXG5cdFwiLi9teVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL215LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qc1wiLFxuXHRcIi4vbmJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzXCIsXG5cdFwiLi9uYi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25lXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qc1wiLFxuXHRcIi4vbmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzXCIsXG5cdFwiLi9ubFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25sLWJlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qc1wiLFxuXHRcIi4vbmwtYmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzXCIsXG5cdFwiLi9ubC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25uXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qc1wiLFxuXHRcIi4vbm4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzXCIsXG5cdFwiLi9vYy1sbmNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qc1wiLFxuXHRcIi4vb2MtbG5jLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9vYy1sbmMuanNcIixcblx0XCIuL3BhLWluXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qc1wiLFxuXHRcIi4vcGEtaW4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanNcIixcblx0XCIuL3BsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qc1wiLFxuXHRcIi4vcHRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9wdC1iclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanNcIixcblx0XCIuL3B0LWJyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qc1wiLFxuXHRcIi4vcHQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9yb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcm8uanNcIixcblx0XCIuL3JvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qc1wiLFxuXHRcIi4vcnVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9ydS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanNcIixcblx0XCIuL3NkXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qc1wiLFxuXHRcIi4vc2QuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanNcIixcblx0XCIuL3NlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qc1wiLFxuXHRcIi4vc2lcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9zaS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanNcIixcblx0XCIuL3NrXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qc1wiLFxuXHRcIi4vc2suanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanNcIixcblx0XCIuL3NsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qc1wiLFxuXHRcIi4vc3FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zcS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanNcIixcblx0XCIuL3NyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qc1wiLFxuXHRcIi4vc3ItY3lybFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qc1wiLFxuXHRcIi4vc3ItY3lybC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qc1wiLFxuXHRcIi4vc3IuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzXCIsXG5cdFwiLi9zc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3NzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qc1wiLFxuXHRcIi4vc3ZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzXCIsXG5cdFwiLi9zdi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N3XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qc1wiLFxuXHRcIi4vc3cuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzXCIsXG5cdFwiLi90YVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qc1wiLFxuXHRcIi4vdGVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzXCIsXG5cdFwiLi90ZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RldFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzXCIsXG5cdFwiLi90ZXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qc1wiLFxuXHRcIi4vdGdcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90Zy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanNcIixcblx0XCIuL3RoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qc1wiLFxuXHRcIi4vdGguanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90a1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGsuanNcIixcblx0XCIuL3RrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ay5qc1wiLFxuXHRcIi4vdGwtcGhcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bC1waC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanNcIixcblx0XCIuL3RsaFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGxoLmpzXCIsXG5cdFwiLi90bGguanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qc1wiLFxuXHRcIi4vdHJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzXCIsXG5cdFwiLi90ci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHIuanNcIixcblx0XCIuL3R6bFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzXCIsXG5cdFwiLi90emwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qc1wiLFxuXHRcIi4vdHptXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanNcIixcblx0XCIuL3R6bS1sYXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLWxhdG4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzXCIsXG5cdFwiLi90em0uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qc1wiLFxuXHRcIi4vdWctY25cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91Zy1jbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWctY24uanNcIixcblx0XCIuL3VrXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qc1wiLFxuXHRcIi4vdWsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91clwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanNcIixcblx0XCIuL3VyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qc1wiLFxuXHRcIi4vdXpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzXCIsXG5cdFwiLi91ei1sYXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzXCIsXG5cdFwiLi91ei1sYXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzXCIsXG5cdFwiLi91ei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanNcIixcblx0XCIuL3ZpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qc1wiLFxuXHRcIi4vdmkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzXCIsXG5cdFwiLi94LXBzZXVkb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3gtcHNldWRvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qc1wiLFxuXHRcIi4veW9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzXCIsXG5cdFwiLi95by5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3poLWNuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qc1wiLFxuXHRcIi4vemgtY24uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzXCIsXG5cdFwiLi96aC1oa1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLWhrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qc1wiLFxuXHRcIi4vemgtbW9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzXCIsXG5cdFwiLi96aC1tby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLXR3XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qc1wiLFxuXHRcIi4vemgtdHcuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKiRcIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi42NjcgMi42NjZoLTEuMzMzVjJBLjY2Ni42NjYgMCAxIDAgMTAgMnYuNjY2SDZWMmEuNjY3LjY2NyAwIDAgMC0xLjMzMyAwdi42NjZIMy4zMzRhMiAyIDAgMCAwLTIgMnY4YTIgMiAwIDAgMCAyIDJoOS4zMzNhMiAyIDAgMCAwIDItMnYtOGEyIDIgMCAwIDAtMi0yWm0uNjY3IDEwYS42NjYuNjY2IDAgMCAxLS42NjcuNjY3SDMuMzMzYS42NjYuNjY2IDAgMCAxLS42NjYtLjY2N1Y4aDEwLjY2NnY0LjY2NlptMC02SDIuNjY3di0yQS42NjcuNjY3IDAgMCAxIDMuMzM0IDRoMS4zMzN2LjY2NmEuNjY3LjY2NyAwIDAgMCAxLjMzMyAwVjRoNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzM0IDBWNGgxLjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2NnYyWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQgMTMuMzMzSDIuNjY3VjEyaDJhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNGgtMlY5LjMzM2g0LjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDIuNjY3VjYuNjY2SDEwYS42NjcuNjY3IDAgMCAwIDAtMS4zMzNIMi42NjdWNGgxMGEuNjY3LjY2NyAwIDEgMCAwLTEuMzM0aC0xMFYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2MTJhLjY2Ny42NjcgMCAwIDAgLjY2Ni42NjZoMTJhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY2LjY2N2EuNjY3LjY2NyAwIDEgMCAxLjMzNCAwVjQuNjY2QS42NjcuNjY3IDAgMCAwIDggNFpNNC42NjcgOEEuNjY3LjY2NyAwIDAgMCA0IDguNjY2djIuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWOC42NjZBLjY2Ny42NjcgMCAwIDAgNC42NjcgOFptNi42NjctMS4zMzRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42Njd2NGEuNjY3LjY2NyAwIDAgMCAxLjMzMyAwdi00YS42NjcuNjY3IDAgMCAwLS42NjYtLjY2N1ptMS4zMzMtNS4zMzNIMy4zMzNhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDkuMzM0YTIgMiAwIDAgMCAyLTJWMy4zMzNhMiAyIDAgMCAwLTItMlptLjY2NyAxMS4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMy4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ni0uNjY3VjMuMzMzYS42NjcuNjY3IDAgMCAxIC42NjctLjY2N2g5LjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2N3Y5LjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTUuMzM0IDcuMzM0aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0wxMC42NjcgMy4yQS42NjcuNjY3IDAgMCAwIDEwIDIuNjY3SDZhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjcuNjY3IDAgMCAwIC41MjcuMjQ3Wk02LjU0NyA0aDIuOTA3bC40IDJINi4xNDdsLjQtMlptOC4xMiA1LjJBLjY2Ny42NjcgMCAwIDAgMTQgOC42NjdoLTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjYuNjY2IDAgMCAwIC41MjcuMjQ3aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0wxNC42NjcgOS4yWm0tNC41MiAyLjguNC0yaDIuOTA2bC40IDJoLTMuNzA2Wk02IDguNjY4SDJhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjYuNjY2IDAgMCAwIC41MjcuMjQ3aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0w2LjY2NyA5LjJBLjY2Ny42NjcgMCAwIDAgNiA4LjY2N1ptLTMuODUzIDMuMzM0LjQtMmgyLjkwN2wuNCAySDIuMTQ3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4zMzQgNS4zMzNIMTBBLjY2Ny42NjcgMCAwIDAgMTAgNGgtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm0wIDIuNjY3SDEwYS42NjcuNjY3IDAgMCAwIDAtMS4zMzRoLS42NjZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNFpNNiA1LjMzM2guNjY3YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINmEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzWk02IDhoLjY2N2EuNjY3LjY2NyAwIDEgMCAwLTEuMzM0SDZBLjY2Ny42NjcgMCAwIDAgNiA4Wm04IDUuMzMzaC0uNjY2VjJhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3SDMuMzMzQS42NjcuNjY3IDAgMCAwIDIuNjY3IDJ2MTEuMzMzSDJhLjY2Ni42NjYgMCAxIDAgMCAxLjMzM2gxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0tNS4zMzMgMEg3LjMzNHYtMi42NjdoMS4zMzN2Mi42NjdabTMuMzMzIDBoLTJWMTBhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3SDYuNjY3QS42NjcuNjY3IDAgMCAwIDYgMTB2My4zMzNINFYyLjY2Nmg4djEwLjY2N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTcuMzM0IDZIMTBhLjY2Ny42NjcgMCAxIDAgMC0xLjMzM0g4LjY2N1Y0YS42NjcuNjY3IDAgMSAwLTEuMzMzIDB2LjY2N2EyIDIgMCAwIDAgMCA0aDEuMzMzYS42NjcuNjY3IDAgMCAxIDAgMS4zMzNINmEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDEuMzM0VjEyYS42NjcuNjY3IDAgMSAwIDEuMzMzIDB2LS42NjZhMiAyIDAgMCAwIDAtNEg3LjMzNGEuNjY3LjY2NyAwIDAgMSAwLTEuMzM0Wk04IC42NjdhNy4zMzMgNy4zMzMgMCAxIDAgMCAxNC42NjdBNy4zMzMgNy4zMzMgMCAwIDAgOCAuNjY3Wk04IDE0QTYgNiAwIDEgMSA4IDJhNiA2IDAgMCAxIDAgMTJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy4xMiA0LjU4N2EyLjkzMyAyLjkzMyAwIDAgMC0yLjIwNi0uMjEzIDIuOTEzIDIuOTEzIDAgMCAwLTUuODIgMCAyLjk4NyAyLjk4NyAwIDAgMC0yLjIwNy4xOTNBMi45MTMgMi45MTMgMCAwIDAgMy4yOTQgOS45YTIuOTMzIDIuOTMzIDAgMCAwLS41MzQgMS42NjdjLjAwMy4xNjguMDE5LjMzNS4wNDcuNWEyLjg5MyAyLjg5MyAwIDAgMCAyLjg2IDIuNDJjLjE0Mi4wMS4yODUuMDEuNDI3IDBBMi45NDcgMi45NDcgMCAwIDAgOCAxMy4zMzRhMi45NDcgMi45NDcgMCAwIDAgMS45MDcgMS4xMjZjLjE0Mi4wMS4yODUuMDEuNDI3IDBhMi45MDcgMi45MDcgMCAwIDAgMi4zNzMtNC41OCAyLjkwNyAyLjkwNyAwIDAgMCAuNDEzLTUuMzMzdi4wNFpNNi44OTQgMy4yOTRhMS42IDEuNiAwIDAgMSAyLjIxMyAwIDEuNjIgMS42MiAwIDAgMSAuMzQ3IDEuNzczbC0uMTc0LjM5My0uNDQuMzg3QTIuNzEzIDIuNzEzIDAgMCAwIDggNS43Yy0uMzcgMC0uNzM1LjA3OC0xLjA3My4yMjdsLS4zNzMtLjg2YTEuNTkzIDEuNTkzIDAgMCAxIC4zNC0xLjc3M1ptLTQuMDY3IDQuNTZBMS41OCAxLjU4IDAgMCAxIDUuMjk0IDZsLjMyNi4yODcuMjM0LjUzM2EyLjYxMyAyLjYxMyAwIDAgMC0uNTIgMS41NDcgMS45IDEuOSAwIDAgMCAwIC4zaC0uMzY3bC0uNTYuMDUzYTEuNTggMS41OCAwIDAgMS0xLjU4LS44NjZabTQuNCA0LjA1M2ExLjU4NyAxLjU4NyAwIDAgMS0zLjEwNy0uMDUzIDIuMDQ3IDIuMDQ3IDAgMCAxIDAtLjI4IDEuNTUzIDEuNTUzIDAgMCAxIC43OC0xLjMzNGwuMzQtLjI0LjYwNy0uMDY2Yy4zODIuNTMyLjk0Ny45MDQgMS41ODcgMS4wNDZsLS4yMDcuOTI3Wk04IDkuN2ExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY2QTEuMzMzIDEuMzMzIDAgMCAxIDggOS43Wm0zLjg4IDIuMTQ3YTEuNTczIDEuNTczIDAgMCAxLTEuNzg2IDEuMjkzIDEuNTkzIDEuNTkzIDAgMCAxLTEuMzM0LTEuMjMzbC0uMDkzLS40LjE0LS42MTNhMi42NjcgMi42NjcgMCAwIDAgMS40NjctMS4xNzRsLjMzMy4yaC4wNmwuNDQuMjZhMS41ODcgMS41ODcgMCAwIDEgLjc3MyAxLjY2N1ptMS4yOTQtNGExLjU5NCAxLjU5NCAwIDAgMS0xLjQyLjg4N2gtLjE2bC0uNDI3LS4wNjctLjUtLjI3M2MwLS42NDktLjIzOC0xLjI3NC0uNjY3LTEuNzZsLjI4Ny0uMjQ3LjQyLS4zODdhMS41OCAxLjU4IDAgMCAxIDIuNDY3IDEuODh2LS4wMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy4zMzQgNS45NmEuODguODggMCAwIDAtLjA0LS4xOHYtLjA2YS43MTYuNzE2IDAgMCAwLS4xMjctLjE4N2wtNC00YS43MTMuNzEzIDAgMCAwLS4xODctLjEyN2gtLjA2YS41ODcuNTg3IDAgMCAwLS4yMi0uMDczSDQuNjY3YTIgMiAwIDAgMC0yIDJ2OS4zMzNhMiAyIDAgMCAwIDIgMmg2LjY2N2EyIDIgMCAwIDAgMi0yVjUuOTZabS00LTIuMzU0IDEuNzI2IDEuNzI3SDEwYS42NjcuNjY3IDAgMCAxLS42NjYtLjY2N3YtMS4wNlpNMTIgMTIuNjY2YS42NjcuNjY3IDAgMCAxLS42NjYuNjY3SDQuNjY3QS42NjYuNjY2IDAgMCAxIDQgMTIuNjY2VjMuMzMzYS42NjcuNjY3IDAgMCAxIC42NjctLjY2N0g4djJhMiAyIDAgMCAwIDIgMmgydjZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi45NiA4LjY2NmMtLjE0NyAwLS4zLS4wNDYtLjQ0Ny0uMDhhNi4yOSA2LjI5IDAgMCAxLS44NzMtLjI2IDEuMzMzIDEuMzMzIDAgMCAwLTEuNjUzLjY2N2wtLjE0Ny4zQTguMTIgOC4xMiAwIDAgMSA4LjA2NyA3Ljk2YTguMTIgOC4xMiAwIDAgMS0xLjMzNC0xLjc3NEw3LjAxMyA2YTEuMzMzIDEuMzMzIDAgMCAwIC42NjctMS42NTQgNi44ODcgNi44ODcgMCAwIDEtLjI2LS44NzNjLS4wMzMtLjE0Ny0uMDYtLjMtLjA4LS40NTNhMiAyIDAgMCAwLTItMS42NmgtMmEyIDIgMCAwIDAtMiAyLjI3MyAxMi42NjcgMTIuNjY3IDAgMCAwIDExLjAxMyAxMC45NzNoLjI1NGEyIDIgMCAwIDAgMS44MjctMS4xODUgMiAyIDAgMCAwIC4xNzMtLjgyMXYtMmEyIDIgMCAwIDAtMS42NDctMS45MzRabS4zMzMgNGEuNjY2LjY2NiAwIDAgMS0uNDgyLjY0MS43MDcuNzA3IDAgMCAxLS4yOS4wMjZBMTEuMzMzIDExLjMzMyAwIDAgMSAyLjcxMiAzLjQ4YS43MjcuNzI3IDAgMCAxIC4xNjctLjU0Ny42NjcuNjY3IDAgMCAxIC41LS4yMjdoMmEuNjY3LjY2NyAwIDAgMSAuNjY3LjUyNyA3LjQxNCA3LjQxNCAwIDAgMCAuNDA3IDEuNTczbC0uOTM0LjQzNGEuNjY3LjY2NyAwIDAgMC0uMzI3Ljg4NiA5LjY2IDkuNjYgMCAwIDAgNC42NjcgNC42NjcuNjY2LjY2NiAwIDAgMCAuNTA3IDAgLjY2NS42NjUgMCAwIDAgLjM4LS4zNDdsLjQxMy0uOTMzYy4zNDUuMTIzLjY5Ny4yMjYgMS4wNTMuMzA3LjE3OC4wNC4zNTguMDczLjU0LjFhLjY2Ny42NjcgMCAwIDEgLjUyNy42NjZsLjAxMyAyLjA4WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuMTQ2IDhhMiAyIDAgMCAwIC41Mi0xLjMzMyAyIDIgMCAwIDAtMi0ySDkuMjEzQTIgMiAwIDAgMCA3LjMzMyAyaC00YTIgMiAwIDAgMC0yIDIgMiAyIDAgMCAwIC41MiAxLjMzMyAyIDIgMCAwIDAgMCAyLjY2NyAyIDIgMCAwIDAgMCAyLjY2N0EyIDIgMCAwIDAgMS4zMzMgMTJhMiAyIDAgMCAwIDIgMmg5LjMzM2EyIDIgMCAwIDAgMS40OC0zLjMzMyAyIDIgMCAwIDAgMC0yLjY2N1ptLTYuODEzIDQuNjY3aC00YS42NjcuNjY3IDAgMCAxIDAtMS4zMzRoNGEuNjY3LjY2NyAwIDAgMSAwIDEuMzM0Wm0wLTIuNjY3aC00YS42NjcuNjY3IDAgMCAxIDAtMS4zMzNoNGEuNjY3LjY2NyAwIDAgMSAwIDEuMzMzWm0wLTIuNjY3aC00YS42NjcuNjY3IDAgMSAxIDAtMS4zMzNoNGEuNjY3LjY2NyAwIDAgMSAwIDEuMzMzWm0wLTIuNjY2aC00YS42NjcuNjY3IDAgMCAxIDAtMS4zMzRoNGEuNjY3LjY2NyAwIDEgMSAwIDEuMzM0Wm01Ljc5MyA3LjgwNmEuNjIuNjIgMCAwIDEtLjQ2LjE5NEg5LjIxM2MuMTYtLjQzLjE2LS45MDQgMC0xLjMzNGgzLjQ1M2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2Ny42NjYuNjY2IDAgMCAxLS4yMDcuNDczWm0wLTIuNjY2YS42Mi42MiAwIDAgMS0uNDYuMTkzSDkuMjEzYy4xNi0uNDMuMTYtLjkwMyAwLTEuMzMzaDMuNDUzYS42NjYuNjY2IDAgMCAxIC42NjcuNjY2LjY2Ni42NjYgMCAwIDEtLjIwNy40NzRabTAtMi42NjdhLjYyLjYyIDAgMCAxLS40Ni4xOTNIOS4yMTNjLjE2LS40My4xNi0uOTAzIDAtMS4zMzNoMy40NTNhLjY2Ni42NjYgMCAwIDEgLjY2Ny42NjcuNjY2LjY2NiAwIDAgMS0uMjA3LjQ3M1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTkuMzMzIDUuMzMzSDEwQS42NjcuNjY3IDAgMSAwIDEwIDRoLS42NjdhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptMCAyLjY2N0gxMGEuNjY3LjY2NyAwIDEgMCAwLTEuMzM0aC0uNjY3YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRaTTYgNS4zMzNoLjY2NmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM1pNNiA4aC42NjZhLjY2Ny42NjcgMCAxIDAgMC0xLjMzNEg2QS42NjcuNjY3IDAgMCAwIDYgOFptOCA1LjMzM2gtLjY2N1YyYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N0gzLjMzM0EuNjY3LjY2NyAwIDAgMCAyLjY2NiAydjExLjMzM0gyYS42NjYuNjY2IDAgMSAwIDAgMS4zMzNoMTJhLjY2Ny42NjcgMCAxIDAgMC0xLjMzM1ptLTUuMzM0IDBINy4zMzN2LTIuNjY3aDEuMzMzdjIuNjY3Wm0zLjMzNCAwaC0yVjEwYS42NjcuNjY3IDAgMCAwLS42NjctLjY2N0g2LjY2NkEuNjY3LjY2NyAwIDAgMCA2IDEwdjMuMzMzSDRWMi42NjZoOHYxMC42NjdaXFxcIiBmaWxsPVxcXCIjQTZCNUJBXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuMzM0LjY2N0gyLjY2N2EyIDIgMCAwIDAtMiAydjEwLjY2N2EyIDIgMCAwIDAgMiAyaDEwLjY2N2EyIDIgMCAwIDAgMi0yVjIuNjY3YTIgMiAwIDAgMC0yLTJaTTUuMzM0IDE0SDIuNjY3QS42NjcuNjY3IDAgMCAxIDIgMTMuMzM0di0uNzg3YTIgMiAwIDAgMCAuNjY3LjEyaDIuNjY3VjE0Wm0wLTIuNjY2SDIuNjY3QS42NjcuNjY3IDAgMCAxIDIgMTAuNjY3VjkuODhhMiAyIDAgMCAwIC42NjcuMTJoMi42Njd2MS4zMzRabTAtMi42NjdIMi42NjdBLjY2Ny42NjcgMCAwIDEgMiA4VjIuNjY3QS42NjcuNjY3IDAgMCAxIDIuNjY3IDJoMi42Njd2Ni42NjdabTQgNS4zMzNINi42Njd2LTRoMi42Njd2NFptMC01LjMzM0g2LjY2N1YyaDIuNjY3djYuNjY3Wk0xNCAxMy4zMzRhLjY2Ny42NjcgMCAwIDEtLjY2Ni42NjZoLTIuNjY3di0xLjMzM2gyLjY2N2EyIDIgMCAwIDAgLjY2Ni0uMTJ2Ljc4N1ptMC0yLjY2N2EuNjY3LjY2NyAwIDAgMS0uNjY2LjY2N2gtMi42NjdWMTBoMi42NjdBMiAyIDAgMCAwIDE0IDkuODh2Ljc4N1pNMTQgOGEuNjY3LjY2NyAwIDAgMS0uNjY2LjY2N2gtMi42NjdWMmgyLjY2N2EuNjY3LjY2NyAwIDAgMSAuNjY2LjY2N1Y4Wm0tMi0zLjMzM2EuNjY3LjY2NyAwIDEgMCAwIDEuMzM0LjY2Ny42NjcgMCAwIDAgMC0xLjMzNFpNNCA2YS42NjcuNjY3IDAgMSAwIDAtMS4zMzNBLjY2Ny42NjcgMCAwIDAgNCA2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNCA3LjMzM2EuNjY3LjY2NyAwIDEgMCAwIDEuMzMzLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptOCAwYS42NjcuNjY3IDAgMSAwIDAgMS4zMzQuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0xLjMzNC00SDIuNjY3YTIgMiAwIDAgMC0yIDJ2NS4zMzNhMiAyIDAgMCAwIDIgMmgxMC42NjdhMiAyIDAgMCAwIDItMlY1LjMzM2EyIDIgMCAwIDAtMi0yWk0xNCAxMC42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ni42NjdIMi42NjdBLjY2Ni42NjYgMCAwIDEgMiAxMC42NjZWNS4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDEwLjY2N2EuNjY3LjY2NyAwIDAgMSAuNjY2LjY2N3Y1LjMzM1pNOCA2YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFptMCAyLjY2NmEuNjY3LjY2NyAwIDEgMSAwLTEuMzMzLjY2Ny42NjcgMCAwIDEgMCAxLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTExLjMzMyA0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djUuMDZMNS4xNCA0LjE5M2EuNjcuNjcgMCAwIDAtLjk0Ny45NDdsNS41MzMgNS41MjZoLTUuMDZhLjY2Ny42NjcgMCAxIDAgMCAxLjMzNGg2LjY2N2EuNjY3LjY2NyAwIDAgMCAuNjY3LS42NjdWNC42NjZBLjY2Ni42NjYgMCAwIDAgMTEuMzMzIDRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk02IDYuNjY2aC42NjdhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNaTTYgOGEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDRBLjY2Ny42NjcgMCAwIDAgMTAgOEg2Wm03LjMzMy0yLjA0YS44OC44OCAwIDAgMC0uMDQtLjE4di0uMDZhLjcxNC43MTQgMCAwIDAtLjEyNy0uMTg3bC00LTRhLjcxMy43MTMgMCAwIDAtLjE4Ni0uMTI3LjIxMy4yMTMgMCAwIDAtLjA2IDAgLjU4Ny41ODcgMCAwIDAtLjIyLS4wNzNINC42NjdhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDYuNjY2YTIgMiAwIDAgMCAyLTJWNS45NlptLTQtMi4zNTQgMS43MjcgMS43MjdIMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny0uNjY3di0xLjA2Wk0xMiAxMi42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINC42NjZBLjY2Ni42NjYgMCAwIDEgNCAxMi42NjZWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3SDh2MmEyIDIgMCAwIDAgMiAyaDJ2NlptLTItMkg2QS42NjcuNjY3IDAgMCAwIDYgMTJoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtNi42NjYgMTEuNy0xLjE4IDEuMTQ3YTEuNjUgMS42NSAwIDAgMS0yLjMzMy0yLjMzM0w2LjE4IDcuNDhhMS42NCAxLjY0IDAgMCAxIDIuMjYtLjA2bC4wOC4wNjdhLjY2Ny42NjcgMCAwIDAgLjkzMy0uOTUzIDEuODM2IDEuODM2IDAgMCAwLS4xMi0uMTQgMi45NzMgMi45NzMgMCAwIDAtNC4wNi4xNDZMMi4yMDYgOS41NzRhMi45ODcgMi45ODcgMCAwIDAgNC4yMiA0LjIybDEuMTU0LTEuMTI3YS42NjcuNjY3IDAgMCAwLS45MTQtLjk2N1ptNy4xMjctOS40OTNhMi45OTMgMi45OTMgMCAwIDAtNC4yMiAwTDguNDIgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjkxMy45NjZsMS4xNTMtMS4xNDZhMS42NSAxLjY1IDAgMCAxIDIuMzM0IDIuMzMzTDkuNzkzIDguNTJhMS42NCAxLjY0IDAgMCAxLTIuMjYuMDZsLS4wOC0uMDY2YS42NjcuNjY3IDAgMCAwLS45MzMuOTUzIDIuOTggMi45OCAwIDAgMCA0LjIxMy0uMDA3bDMuMDMzLTMuMDMzYTIuOTkzIDIuOTkzIDAgMCAwIC4wMjctNC4yMlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTkuMzMzIDcuMzM0aC0uNjY2di0uNjY3YS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2N2gtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaC42NjZ2LjY2N2EuNjY3LjY2NyAwIDAgMCAxLjMzNCAwdi0uNjY3aC42NjZhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptNC4xMDctNEE0LjE5NCA0LjE5NCAwIDAgMCA4IDIuOTRhNC4xOCA0LjE4IDAgMCAwLTUuNDQgNi4zMmw0IDQuMDM0YTIgMiAwIDAgMCAyLjgyNyAwbDQtNC4wMzRhNC4xOCA0LjE4IDAgMCAwIC4wNTMtNS45MjZabS0uOTQgNC45NzMtNCA0YS42NjYuNjY2IDAgMCAxLS45NDcgMGwtNC00YTIuODYgMi44NiAwIDAgMSAwLTQgMi44NDcgMi44NDcgMCAwIDEgNCAwIC42NjcuNjY3IDAgMCAwIC45NDcgMCAyLjg0NyAyLjg0NyAwIDAgMSA0IDAgMi44NiAyLjg2IDAgMCAxIDAgNC4wMTN2LS4wMTNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0zLjMzMyA1LjMzM2g5LjMzNGEuNjY3LjY2NyAwIDEgMCAwLTEuMzMzSDMuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNabTEwLjY2NyAySDJhLjY2Ny42NjcgMCAxIDAgMCAxLjMzNGgxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0tMS4zMzMgMy4zMzRIMy4zMzNhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM2g5LjMzNGEuNjY2LjY2NiAwIDEgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuMDg3IDIuNDMzYS42NjcuNjY3IDAgMCAwLS41Ni0uMTMzIDUuMzMzIDUuMzMzIDAgMCAxLTQuMTQ3LS44NDcuNjY3LjY2NyAwIDAgMC0uNzYgMCA1LjMzMyA1LjMzMyAwIDAgMS00LjE0Ni44NDcuNjY3LjY2NyAwIDAgMC0uODA3LjY1M1Y3LjkyYTYgNiAwIDAgMCAyLjUxMyA0Ljg4NmwyLjQzNCAxLjczNGEuNjY3LjY2NyAwIDAgMCAuNzczIDBsMi40MzMtMS43MzRhNiA2IDAgMCAwIDIuNTE0LTQuODg2VjIuOTUzYS42NjcuNjY3IDAgMCAwLS4yNDctLjUyWk0xMiA3LjkyYTQuNjY2IDQuNjY2IDAgMCAxLTEuOTUzIDMuOEw4IDEzLjE4bC0yLjA0Ni0xLjQ2QTQuNjY3IDQuNjY3IDAgMCAxIDQgNy45MnYtNC4yYTYuNjY3IDYuNjY3IDAgMCAwIDQtLjkyNyA2LjY2NyA2LjY2NyAwIDAgMCA0IC45Mjd2NC4yWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNy4zMzMgNy45MzN2My40YS42NjcuNjY3IDAgMSAwIDEuMzM0IDB2LTMuNGEzLjMzMyAzLjMzMyAwIDEgMC0xLjMzNCAwWk04IDIuNjY3YTIgMiAwIDEgMSAwIDQgMiAyIDAgMCAxIDAtNFptMi44MDcgNi45NDZhLjY4MS42ODEgMCAwIDAtLjI4IDEuMzM0YzEuNTEzLjMgMi4xNC44NCAyLjE0IDEuMDUzIDAgLjM4Ny0xLjYzNCAxLjMzMy00LjY2NyAxLjMzM1MzLjMzMyAxMi4zODcgMy4zMzMgMTJjMC0uMjEzLjYyNy0uNzUzIDIuMTQtMS4wOGEuNjgxLjY4MSAwIDAgMC0uMjgtMS4zMzNDMy4xNjcgMTAuMDUzIDIgMTAuOTI3IDIgMTJjMCAxLjc1MyAzLjAyIDIuNjY3IDYgMi42NjdzNi0uOTE0IDYtMi42NjdjMC0xLjA3My0xLjE2Ny0xLjk0Ny0zLjE5My0yLjM4N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTIgMy4zMzNoMTJjLjQgMCAuNjY3LS4yNjYuNjY3LS42NjZTMTQuNCAyIDE0IDJIMmMtLjQgMC0uNjY3LjI2Ny0uNjY3LjY2N3MuMjY3LjY2Ni42NjcuNjY2Wm0xMiA5LjMzNEg3LjMzM2MtLjQgMC0uNjY2LjI2Ni0uNjY2LjY2NnMuMjY3LjY2Ny42NjcuNjY3SDE0Yy40IDAgLjY2Ny0uMjY3LjY2Ny0uNjY3cy0uMjY3LS42NjYtLjY2Ny0uNjY2Wm0wLTUuMzM0SDJjLS40IDAtLjY2Ny4yNjctLjY2Ny42NjdzLjI2Ny42NjcuNjY3LjY2N2gxMmMuNCAwIC42NjctLjI2Ny42NjctLjY2N1MxNC40IDcuMzMzIDE0IDcuMzMzWk0xNCAxMEgyYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3cy4yNjcuNjY2LjY2Ny42NjZoMTJjLjQgMCAuNjY3LS4yNjYuNjY3LS42NjZTMTQuNCAxMCAxNCAxMFptMC01LjMzM0gyYy0uNCAwLS42NjcuMjY2LS42NjcuNjY2UzEuNiA2IDIgNmgxMmMuNCAwIC42NjctLjI2Ny42NjctLjY2N1MxNC40IDQuNjY3IDE0IDQuNjY3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtMTMuMzMzIDUuMzMzLTQtMy41MDZhMiAyIDAgMCAwLTIuNjY2IDBsLTQgMy41MDZBMiAyIDAgMCAwIDIgNi44NHY1LjgyN2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY2LjgzM2EyIDIgMCAwIDAtLjY2Ny0xLjVabS00IDhINi42NjdWMTBhLjY2Ny42NjcgMCAwIDEgLjY2Ni0uNjY3aDEuMzM0YS42NjcuNjY3IDAgMCAxIC42NjYuNjY3djMuMzMzWm0zLjMzNC0uNjY2YS42NjcuNjY3IDAgMCAxLS42NjcuNjY2aC0xLjMzM1YxMGEyIDIgMCAwIDAtMi0ySDcuMzMzYTIgMiAwIDAgMC0yIDJ2My4zMzNINGEuNjY3LjY2NyAwIDAgMS0uNjY3LS42NjZWNi44MzNhLjY2Ny42NjcgMCAwIDEgLjIyNy0uNWw0LTMuNWEuNjY3LjY2NyAwIDAgMSAuODggMGw0IDMuNWEuNjY3LjY2NyAwIDAgMSAuMjI3LjV2NS44MzRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMC42NjcgOS4zMzNINS4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM2g1LjMzNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0wLTIuNjY3aC00YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0yLjY2Ni00aC0yVjJBLjY2Ny42NjcgMCAxIDAgMTAgMnYuNjY2SDguNjY3VjJhLjY2Ny42NjcgMCAxIDAtMS4zMzQgMHYuNjY2SDZWMmEuNjY3LjY2NyAwIDAgMC0xLjMzMyAwdi42NjZoLTJBLjY2Ny42NjcgMCAwIDAgMiAzLjMzM3Y5LjMzM2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzLjMzM2EuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdabS0uNjY2IDEwYS42NjcuNjY3IDAgMCAxLS42NjcuNjY3SDRhLjY2Ni42NjYgMCAwIDEtLjY2Ny0uNjY3VjRoMS4zMzR2LjY2NmEuNjY3LjY2NyAwIDEgMCAxLjMzMyAwVjRoMS4zMzN2LjY2NmEuNjY3LjY2NyAwIDAgMCAxLjMzNCAwVjRIMTB2LjY2NmEuNjY2LjY2NiAwIDEgMCAxLjMzMyAwVjRoMS4zMzR2OC42NjZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE3XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk04IDguNWEyIDIgMCAxIDAgMCA0IDIgMiAwIDAgMCAwLTRabTAgMi42NjZhLjY2Ny42NjcgMCAxIDEgMC0xLjMzNC42NjcuNjY3IDAgMCAxIDAgMS4zMzRabS0uNDczLTQuMTkzYy4wNjMuMDYuMTM4LjEwOC4yMi4xNGEuNjI3LjYyNyAwIDAgMCAuNTA3IDAgLjY2Ny42NjcgMCAwIDAgLjIyLS4xNEwxMCA1LjQ3M2EuNjg4LjY4OCAwIDEgMC0uOTczLS45NzNsLS4zNi4zOTNWMi41YS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2Mi4zOTNsLS4zNi0uMzkzQS42ODguNjg4IDAgMCAwIDYgNS40NzNsMS41MjcgMS41Wm01LjE0IDMuNTI3YS42NjYuNjY2IDAgMSAwLTEuMzMyIDAgLjY2Ni42NjYgMCAwIDAgMS4zMzIgMFptLjY2Ny00LjY2N2gtMmEuNjY2LjY2NiAwIDEgMCAwIDEuMzMzaDJhLjY2Ny42NjcgMCAwIDEgLjY2Ni42Njd2NS4zMzNhLjY2Ny42NjcgMCAwIDEtLjY2Ni42NjdIMi42NjdBLjY2Ni42NjYgMCAwIDEgMiAxMy4xNjZWNy44MzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDJhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM2gtMmEyIDIgMCAwIDAtMiAydjUuMzMzYTIgMiAwIDAgMCAyIDJoMTAuNjY3YTIgMiAwIDAgMCAyLTJWNy44MzNhMiAyIDAgMCAwLTItMlptLTEwIDQuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzM0IDAgLjY2Ny42NjcgMCAwIDAtMS4zMzQgMFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTYgNi42NjZoLjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1pNMTAgOEg2YS42NjcuNjY3IDAgMSAwIDAgMS4zMzNoNEEuNjY3LjY2NyAwIDEgMCAxMCA4Wm0wIDIuNjY2SDZBLjY2Ny42NjcgMCAwIDAgNiAxMmg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTMuMTQgMi44NmExLjA4NSAxLjA4NSAwIDAgMC0uMS0uMDguNTA3LjUwNyAwIDAgMC0uMTItLjA2bC0uMTItLjA1M2EuNjY3LjY2NyAwIDAgMC0uMzg2LjA0LjU5OS41OTkgMCAwIDAtLjM2LjM2QS41Ni41NiAwIDAgMCAxMiAxNGEuNjY4LjY2OCAwIDEgMCAxLjI4LS4yNTQuNzY2Ljc2NiAwIDAgMC0uMTQtLjIyWm0uMTk0LTcuNTY2YS44OC44OCAwIDAgMC0uMDQtLjE4di0uMDZhLjcxNi43MTYgMCAwIDAtLjEyNy0uMTg3bC00LTRhLjcxMy43MTMgMCAwIDAtLjE4Ny0uMTI3LjIxMy4yMTMgMCAwIDAtLjA2IDAgLjU4Ny41ODcgMCAwIDAtLjIyLS4wNzNINC42NjdhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAySDEwYS42NjcuNjY3IDAgMSAwIDAtMS4zMzNINC42NjdBLjY2Ni42NjYgMCAwIDEgNCAxMi42NjZWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3SDh2MmEyIDIgMCAwIDAgMiAyaDJWOGEuNjY3LjY2NyAwIDAgMCAxLjMzNCAwVjUuOTZaTTEwIDUuMzMzYS42NjcuNjY3IDAgMCAxLS42NjYtLjY2N3YtMS4wNmwxLjcyNiAxLjcyN0gxMFpNMTIuNjY3IDEwYS42NjcuNjY3IDAgMCAwLS42NjcuNjY2VjEyYS42NjcuNjY3IDAgMCAwIDEuMzM0IDB2LTEuMzM0YS42NjcuNjY3IDAgMCAwLS42NjctLjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwibTE0LjIxMyAzLjM2Ny00LTEuMzMzaC0uMDQ2YS40NjYuNDY2IDAgMCAwLS4wOTQgMGgtLjI4Nkw2IDMuMzM0bC0zLjc4Ny0xLjNhLjY2Ny42NjcgMCAwIDAtLjYuMDkzLjY2Ny42NjcgMCAwIDAtLjI4LjU0VjEyYS42NjYuNjY2IDAgMCAwIC40NTQuNjMzbDQgMS4zMzRhLjY2Ny42NjcgMCAwIDAgLjQxMyAwTDEwIDEyLjdsMy43ODcgMS4zYy4wNy4wMS4xNDIuMDEuMjEzIDBhLjYyNi42MjYgMCAwIDAgLjM4Ny0uMTI3LjY2Ni42NjYgMCAwIDAgLjI4LS41NFY0YS42NjcuNjY3IDAgMCAwLS40NTQtLjYzM1ptLTguODggOS4wNC0yLjY2Ni0uODg3VjMuNTk0bDIuNjY3Ljg4NnY3LjkyN1ptNC0uODg3LTIuNjY2Ljg4N1Y0LjQ4bDIuNjY3LS44ODZ2Ny45MjZabTQgLjg4Ny0yLjY2Ni0uODg3VjMuNTk0bDIuNjY3Ljg4NnY3LjkyN1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEzLjY0IDYuNDJhNS42NjYgNS42NjYgMCAwIDAtOC43NzMtNC4xOEE1LjcwNyA1LjcwNyAwIDAgMCAyLjM2IDYuNDIgNS42NCA1LjY0IDAgMCAwIDQgMTAuOTczbDMuNTMzIDMuNTRhLjY2Ni42NjYgMCAwIDAgLjk0NyAwbDMuNTItMy41NGE1LjYzOCA1LjYzOCAwIDAgMCAxLjY0LTQuNTUzWm0tMi41NzMgMy42MTNMOCAxMy4xbC0zLjA2Ny0zLjA2N2E0LjMyNyA0LjMyNyAwIDAgMS0xLjI0Ni0zLjQ4IDQuMzggNC4zOCAwIDAgMSAxLjkyNi0zLjIyQTQuMzEzIDQuMzEzIDAgMCAxIDExLjcxIDQuNzJjLjMzNC41NTUuNTQgMS4xNzYuNjA0IDEuODJhNC4zMjYgNC4zMjYgMCAwIDEtMS4yNDYgMy40OTNaTTggNGEzIDMgMCAxIDAgMyAzIDMuMDA3IDMuMDA3IDAgMCAwLTMtM1ptMCA0LjY2NmExLjY2NyAxLjY2NyAwIDEgMSAwLTMuMzMzIDEuNjY3IDEuNjY3IDAgMCAxIDAgMy4zMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk00LjY2NyAxMC42NjZhMSAxIDAgMCAwIDEtMSAuNTE0LjUxNCAwIDAgMCAwLS4xbDEuODYtMS44NmguMzA2TDguOTA3IDguNzh2LjA1M2ExIDEgMCAxIDAgMiAwVjguNzhsMi40MjYtMi40NDdhMSAxIDAgMSAwLTEtMSAuNTIyLjUyMiAwIDAgMCAwIC4xTDkuOTI3IDcuODRIOS44Mkw4LjY2NyA2LjY2NmExIDEgMCAwIDAtMiAwbC0yIDJhMSAxIDAgMCAwIDAgMlptOSAyLjY2N0gyLjMzM1YyQS42NjcuNjY3IDAgMSAwIDEgMnYxMmEuNjY3LjY2NyAwIDAgMCAuNjY3LjY2NmgxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEyIDE1XFxcIj48cGF0aCBkPVxcXCJtNi4xNCAxMC43NDIuMDIuMDU4LjAwNy4wMXYuMDM2YS4wNi4wNiAwIDAgMS0uMDA2LjAyN2wtLjAxLjAyMi0uMDA4LjAyMWEuMS4xIDAgMCAxLS4wNi4wNmwtLjAyMi4wMDgtLjAyMS4wMWEuMDYuMDYgMCAwIDEtLjAyNy4wMDZoLS4wMDZhLjE2Ni4xNjYgMCAwIDEtLjEwNi0uMDQuMjY2LjI2NiAwIDAgMS0uMDQtLjA2NmwtLjAwNC0uMDEtLjAwNS0uMDFhLjA2LjA2IDAgMCAxLS4wMDUtLjAyOHYtLjAyM2wtLjAwMS0uMDIzLS4wMDEtLjAxOC4wMDMtLjAwNy4wMTItLjAzM2EuNTc2LjU3NiAwIDAgMSAuMDIzLS4wMy4xNjYuMTY2IDAgMCAxIC4wNDQtLjAyNmwuMDE0LS4wMDVhLjE2Ny4xNjcgMCAwIDEgLjA5Ni0uMDFsLjA5NC0uNDkxLS4wOTQuNDlhLjE2Ni4xNjYgMCAwIDEgLjA3Ny4wMzhjLjAwOS4wMS4wMTguMDIyLjAyNi4wMzRabS42OTMtOS4zMzUgMy45NjMgMy45NjMuMDIzLjA3YS4zNy4zNyAwIDAgMSAuMDE0LjA1NHY2LjY3M2ExLjUgMS41IDAgMCAxLTEuNSAxLjVIMi42NjdhMS41IDEuNSAwIDAgMS0xLjA2MS0uNDRsLS4zNDguMzQ4LjM0OC0uMzQ4YTEuNSAxLjUgMCAwIDEtLjQ0LTEuMDZWMi44MzNhMS41IDEuNSAwIDAgMSAxLjUtMS41aDMuOTlsLjAxNS4wMDcuMTE2LjA2N2guMDQ2Wm0uODU0IDEuMzQ2TDYuODMzIDEuOXYyLjI2N0ExLjE2NyAxLjE2NyAwIDAgMCA4IDUuMzMzaDIuMjY3bC0uODUzLS44NTMtMS43MjctMS43MjdaTTYuNSAyLjE2N3YtLjVIMi42NjdBMS4xNjcgMS4xNjcgMCAwIDAgMS41IDIuODMzdjkuMzM0YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3IDEuMTY2aDYuNjY2YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3LTEuMTY2di02LjVIOGExLjUgMS41IDAgMCAxLTEuNS0xLjV2LTJabS0uNjE4IDUuMjE1YS4xNjcuMTY3IDAgMCAxIC4yODUuMTE4djEuMzMzYS4xNjcuMTY3IDAgMCAxLS4zMzQgMFY3LjVjMC0uMDQ0LjAxOC0uMDg3LjA1LS4xMThaXFxcIiBmaWxsPVxcXCJDdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiQ3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuMDg3IDIuNDMzYS42NjcuNjY3IDAgMCAwLS41Ni0uMTMzIDUuMzMzIDUuMzMzIDAgMCAxLTQuMTQ3LS44NDcuNjY3LjY2NyAwIDAgMC0uNzYgMCA1LjMzMyA1LjMzMyAwIDAgMS00LjE0Ni44NDcuNjY3LjY2NyAwIDAgMC0uODA3LjY1M1Y3LjkyYTYgNiAwIDAgMCAyLjUxMyA0Ljg4NmwyLjQzNCAxLjczNGEuNjY3LjY2NyAwIDAgMCAuNzczIDBsMi40MzMtMS43MzRhNiA2IDAgMCAwIDIuNTE0LTQuODg2VjIuOTUzYS42NjcuNjY3IDAgMCAwLS4yNDctLjUyWk0xMiA3LjkyYTQuNjY2IDQuNjY2IDAgMCAxLTEuOTUzIDMuOEw4IDEzLjE4bC0yLjA0Ni0xLjQ2QTQuNjY3IDQuNjY3IDAgMCAxIDQgNy45MnYtNC4yYTYuNjY3IDYuNjY3IDAgMCAwIDQtLjkyNyA2LjY2NyA2LjY2NyAwIDAgMCA0IC45Mjd2NC4yWk05LjAyNyA2LjM5M2wtMS43OTMgMS44LS41OTQtLjZhLjY3LjY3IDAgMCAwLS45NDYuOTQ3TDYuNzYgOS42MDZhLjY2Ny42NjcgMCAwIDAgLjk0NyAwTDEwIDcuMzMzYS42Ny42NyAwIDEgMC0uOTQ2LS45NDdsLS4wMjcuMDA3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyMCAyMFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMy42MzQgMTcuOWEuNS41IDAgMCAxLS41MjQuMDQ3bC0uMTQ5LjI5Ny4xNDktLjI5N2EuNS41IDAgMCAxLS4yMDItLjE4NGwtLjI4My4xNzQuMjgzLS4xNzRhLjUuNSAwIDAgMS0uMDc1LS4yNjN2LTE1YS41LjUgMCAwIDEgLjUtLjVoMTMuMzM0YS41LjUgMCAwIDEgLjUuNXYxNC45OTlhLjUuNSAwIDAgMS0uMjc1LjQ0NWgtLjAwMWEuNS41IDAgMCAxLS41MjUtLjA0NWwtMS43MjQtMS4yOS0uMi0uMTUtLjIuMTUtMS43MTcgMS4yOTFhLjUuNSAwIDAgMS0uNiAwTDEwLjIgMTYuNjA4bC0uMi0uMTUtLjIuMTVMOC4wNzUgMTcuOWEuNS41IDAgMCAxLS42IDBsLTEuNzE2LTEuMjkxLS4yLS4xNS0uMi4xNS0xLjcyNSAxLjI5Wm0xMi0xLjguNTMzLjM5OVYzSDMuODMzdjEzLjQ5OWwuNTMzLS4zOTkuODkyLS42NjZhLjUuNSAwIDAgMSAuNiAwbDEuNzE3IDEuMjkuMi4xNTEuMi0uMTVMOS43IDE1LjQzM2EuNS41IDAgMCAxIC42IDBsMS43MjUgMS4yOTIuMi4xNS4yLS4xNSAxLjcxNy0xLjI5MmEuNS41IDAgMCAxIC42IDBsLjg5Mi42NjdabS0yLjMtOS43NjdoLTVhLjUuNSAwIDAgMSAwLTFoNWEuNS41IDAgMCAxIDAgMVptMCAzLjMzNEg2LjY2NmEuNS41IDAgMCAxIDAtMWg2LjY2NmEuNS41IDAgMCAxIDAgMVptMCAzLjMzM0g2LjY2NmEuNS41IDAgMCAxIDAtMWg2LjY2NmEuNS41IDAgMSAxIDAgMVpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggNy4yYTEuMzMzIDEuMzMzIDAgMSAwIDAtMi42NjdBMS4zMzMgMS4zMzMgMCAwIDAgOCA3LjJabS0uNDczIDQuNjA2YS42NjYuNjY2IDAgMCAwIC45NDYgMEwxMS4yIDkuMDczYTQuNTI3IDQuNTI3IDAgMSAwLTYuNCAwbDIuNzI3IDIuNzMzWk00LjgyIDUuNTZhMy4yMDcgMy4yMDcgMCAwIDEgMS40Mi0yLjM2NyAzLjIwNyAzLjIwNyAwIDAgMSAzLjUyIDAgMy4yMTMgMy4yMTMgMCAwIDEgLjUgNC45NEw4IDEwLjM5M2wtMi4yNi0yLjI2YTMuMTggMy4xOCAwIDAgMS0uOTItMi41NzNabTcuODQ2IDcuNzczSDMuMzMzYS42NjcuNjY3IDAgMSAwIDAgMS4zMzNoOS4zMzRhLjY2Ni42NjYgMCAxIDAgMC0xLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTQuNjY2IDRhLjY2Ny42NjcgMCAxIDAgMCAxLjMzMy42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTkuODA3IDMuODUzLTYuMzItNi4zMDdhLjY2Ny42NjcgMCAwIDAtLjQ4Ny0uMjEzaC00YS42NjcuNjY3IDAgMCAwLS40NzMuMTkzbC0xLjY2NyAxLjY2YS42NjcuNjY3IDAgMCAwLS4xOTMuNDc0djRhLjcuNyAwIDAgMCAuMTkzLjQ3M2w2LjMyNyA2LjMzM2EuNy43IDAgMCAwIC40NzMuMTk0LjY2Ni42NjYgMCAwIDAgLjQ3NC0uMTk0bDUuNjczLTUuNjczYS42NjcuNjY3IDAgMCAwIDAtLjk0Wk04LjMyNiAxMy4wNmwtNS42Ni01LjY2N3YtMy40NmwxLjI2Ny0xLjI2N2gzLjQ1M2w1LjY2NyA1LjY2LTQuNzI3IDQuNzM0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNi42NjcgNS4zMzNoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzaC00YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNaTTUuMzMzIDhoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNEg1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzM0Wm0wIDIuNjY2aDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINS4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptOC05LjMzM0gyLjY2N0EuNjY3LjY2NyAwIDAgMCAyIDJ2MTJhLjY2Ny42NjcgMCAwIDAgMS4wNjcuNTMzbDEuMzgtMS4wMzMgMS4zNzMgMS4wMzNhLjY2Ni42NjYgMCAwIDAgLjggMEw4IDEzLjVsMS4zOCAxLjAzM2EuNjY2LjY2NiAwIDAgMCAuOCAwbDEuMzczLTEuMDMzIDEuMzggMS4wMzNBLjY2Ny42NjcgMCAwIDAgMTQgMTRWMmEuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdabS0uNjY2IDExLjMzMy0uNzE0LS41MzNhLjY2Ny42NjcgMCAwIDAtLjggMEw5Ljc4IDEzLjE2NiA4LjQgMTIuMTMzYS42NjcuNjY3IDAgMCAwLS44IDBsLTEuMzggMS4wMzMtMS4zNzMtMS4wMzNhLjY2Ny42NjcgMCAwIDAtLjggMGwtLjcxNC41MzN2LTEwaDkuMzM0djEwWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxOCAxOFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cmVjdCB3aWR0aD1cXFwiMThcXFwiIGhlaWdodD1cXFwiMThcXFwiIHJ4PVxcXCI5XFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48cGF0aCBkPVxcXCJNMiA5YTcgNyAwIDEgMSAxNCAwQTcgNyAwIDEgMSAyIDlaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48cGF0aCBkPVxcXCJNMTMuMDgzIDguNDE2aC0zLjV2LTMuNWEuNTgzLjU4MyAwIDAgMC0xLjE2NyAwdjMuNWgtMy41YS41ODMuNTgzIDAgMCAwIDAgMS4xNjdoMy41djMuNWEuNTgzLjU4MyAwIDAgMCAxLjE2NyAwdi0zLjVoMy41YS41ODMuNTgzIDAgMCAwIDAtMS4xNjdaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIuOTM1IDcuMzMzaC00di00YS42NjcuNjY3IDAgMSAwLTEuMzMzIDB2NGgtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDR2NGEuNjY3LjY2NyAwIDEgMCAxLjMzNCAwdi00aDRhLjY2Ny42NjcgMCAxIDAgMC0xLjMzNFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjEgMjBcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjQ2NCAxLjY2N0M1Ljg4IDEuNjY3IDIuMTMgNS40MTcgMi4xMyAxMGMwIDQuNTg0IDMuNzUgOC4zMzQgOC4zMzMgOC4zMzRzOC4zMzMtMy43NSA4LjMzMy04LjMzNGMwLTQuNTgzLTMuNzUtOC4zMzMtOC4zMzMtOC4zMzNabTAgMTIuNWMtLjUgMC0uODMzLS4zMzMtLjgzMy0uODMzIDAtLjUuMzMzLS44MzQuODMzLS44MzQuNSAwIC44MzMuMzM0LjgzMy44MzQgMCAuNS0uMzMzLjgzMy0uODMzLjgzM1pNMTEuMjk3IDEwYzAgLjUtLjMzMy44MzQtLjgzMy44MzQtLjUgMC0uODMzLS4zMzQtLjgzMy0uODM0VjYuNjY3YzAtLjUuMzMzLS44MzMuODMzLS44MzMuNSAwIC44MzMuMzMzLjgzMy44MzNWMTBaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0zLjMzMyA1LjMzM2g5LjMzNGEuNjY3LjY2NyAwIDEgMCAwLTEuMzMzSDMuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNabTEwLjY2NyAySDJhLjY2Ny42NjcgMCAxIDAgMCAxLjMzNGgxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0tMS4zMzMgMy4zMzRIMy4zMzNhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM2g5LjMzNGEuNjY2LjY2NiAwIDEgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMiAzLjMzM2gxMmMuNCAwIC42NjctLjI2Ni42NjctLjY2NlMxNC40IDIgMTQgMkgyYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3cy4yNjcuNjY2LjY2Ny42NjZabTEyIDkuMzM0SDcuMzMzYy0uNCAwLS42NjYuMjY2LS42NjYuNjY2cy4yNjcuNjY3LjY2Ny42NjdIMTRjLjQgMCAuNjY3LS4yNjcuNjY3LS42NjdzLS4yNjctLjY2Ni0uNjY3LS42NjZabTAtNS4zMzRIMmMtLjQgMC0uNjY3LjI2Ny0uNjY3LjY2N3MuMjY3LjY2Ny42NjcuNjY3aDEyYy40IDAgLjY2Ny0uMjY3LjY2Ny0uNjY3UzE0LjQgNy4zMzMgMTQgNy4zMzNaTTE0IDEwSDJjLS40IDAtLjY2Ny4yNjctLjY2Ny42NjdzLjI2Ny42NjYuNjY3LjY2NmgxMmMuNCAwIC42NjctLjI2Ni42NjctLjY2NlMxNC40IDEwIDE0IDEwWm0wLTUuMzMzSDJjLS40IDAtLjY2Ny4yNjYtLjY2Ny42NjZTMS42IDYgMiA2aDEyYy40IDAgLjY2Ny0uMjY3LjY2Ny0uNjY3UzE0LjQgNC42NjcgMTQgNC42NjdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwibTkuNTI3IDkuNDYtMi4xOTQgMi4xOTQtLjg2LS44NmEuNjY4LjY2OCAwIDEgMC0uOTQ2Ljk0bDEuMzMzIDEuMzMzYS42NjYuNjY2IDAgMCAwIC45NDcgMGwyLjY2Ni0yLjY2N2EuNjY3LjY2NyAwIDEgMC0uOTQ2LS45NFptMi43NTMtMy45MTNhNC42NjcgNC42NjcgMCAwIDAtOC45MDcgMS4yNjcgMi42NjcgMi42NjcgMCAwIDAtLjI1MyA1LjEuNjY4LjY2OCAwIDEgMCAuNDI3LTEuMjQ3IDEuMzMzIDEuMzMzIDAgMCAxLS44OC0xLjI2N0ExLjMzMyAxLjMzMyAwIDAgMSA0IDguMDY3YS42NjcuNjY3IDAgMCAwIC42NjctLjY2NyAzLjMzMyAzLjMzMyAwIDAgMSA2LjQ4Ni0xLjA2Ni42NjguNjY4IDAgMCAwIC41Mi40NCAyIDIgMCAwIDEgLjE2IDMuODkzQS42NzIuNjcyIDAgMSAwIDEyIDEyaC4xNjdhMy4zMzMgMy4zMzMgMCAwIDAgLjExMy02LjQxM3YtLjA0WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTE0LjE2NyA3LjY0YS44MzQuODM0IDAgMCAwLTEuMTc1IDBMMTAgMTAuNTkgNy4wNSA3LjY0YS44MzMuODMzIDAgMSAwLTEuMTc1IDEuMTg0bDMuNTM0IDMuNTMzYS44MzMuODMzIDAgMCAwIDEuMTgzIDBsMy41NzUtMy41MzNhLjgzMy44MzMgMCAwIDAgMC0xLjE4M1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgOCAxMlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCAxLjA1NCA2LjgwNSAwIDAgNmw2LjgwNSA2TDggMTAuOTQ3IDIuMzkgNiA4IDEuMDU0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCA4IDEyXFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0wIDEuMDU0IDEuMTk1IDAgOCA2bC02LjgwNSA2TDAgMTAuOTQ3IDUuNjEgNiAwIDEuMDU0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE4XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiIGQ9XFxcIk00LjMxMSA3LjQzIDMuNzQgOGgxMC45MjZhMSAxIDAgMCAxIDAgMkgzLjc0bC41NzEuNTY5IDQuNCA0LjM4N2EuOTk5Ljk5OSAwIDAgMSAwIDEuNDJsLS4wMDEuMDAyYTEuMDAxIDEuMDAxIDAgMCAxLTEuNDIgMGgtLjAwMUwuNjI1IDkuNzEyYTEgMSAwIDAgMS0uMjA4LS4zMjdMLjQxNSA5LjM4YTEgMSAwIDAgMSAwLS43NmwuMDAyLS4wMDdhMSAxIDAgMCAxIC4yMDgtLjMyN2w2LjY2NC02LjY2NEExLjAwNSAxLjAwNSAwIDEgMSA4LjcxIDMuMDQ0TDQuMzEgNy40M1pcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTcgMTZcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwiTTUuOTU1IDEwLjMzM2g0LjY3bC0yLjMzNiAyLjI1My0yLjMzNC0yLjI1M1ptMS44NDQgMy4xOTRjLjI3LjI2LjcwNC4yNi45NzQgMGwzLjE3LTMuMDZjLjQzNi0uNDE0LjEzMi0xLjEzNC0uNDgzLTEuMTM0SDUuMTI2Yy0uNjE1IDAtLjkyNi43Mi0uNDkgMS4xNGwzLjE2MyAzLjA1M1ptLTIuNjgtNi44Nmg2LjM0MWMuNjE1IDAgLjkyNi0uNzIuNDktMS4xNGwtMy4xNy0zLjA2YS43MDYuNzA2IDAgMCAwLS45NzQgMGwtMy4xNyAzLjA2Yy0uNDM2LjQyLS4xMzIgMS4xNC40ODMgMS4xNFpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0zLjYzNCAxNy45YS41LjUgMCAwIDEtLjUyNC4wNDdsLS4xNDkuMjk3LjE0OS0uMjk3YS41LjUgMCAwIDEtLjIwMi0uMTg0bC0uMjgzLjE3NC4yODMtLjE3NGEuNS41IDAgMCAxLS4wNzUtLjI2M3YtMTVhLjUuNSAwIDAgMSAuNS0uNWgxMy4zMzRhLjUuNSAwIDAgMSAuNS41djE0Ljk5OWEuNS41IDAgMCAxLS4yNzUuNDQ1aC0uMDAxYS41LjUgMCAwIDEtLjUyNS0uMDQ1bC0xLjcyNC0xLjI5LS4yLS4xNS0uMi4xNS0xLjcxNyAxLjI5MWEuNS41IDAgMCAxLS42IDBMMTAuMiAxNi42MDhsLS4yLS4xNS0uMi4xNUw4LjA3NSAxNy45YS41LjUgMCAwIDEtLjYgMGwtMS43MTYtMS4yOTEtLjItLjE1LS4yLjE1LTEuNzI1IDEuMjlabTEyLTEuOC41MzMuMzk5VjNIMy44MzN2MTMuNDk5bC41MzMtLjM5OS44OTItLjY2NmEuNS41IDAgMCAxIC42IDBsMS43MTcgMS4yOS4yLjE1MS4yLS4xNUw5LjcgMTUuNDMzYS41LjUgMCAwIDEgLjYgMGwxLjcyNSAxLjI5Mi4yLjE1LjItLjE1IDEuNzE3LTEuMjkyYS41LjUgMCAwIDEgLjYgMGwuODkyLjY2N1ptLTIuMy05Ljc2N2gtNWEuNS41IDAgMCAxIDAtMWg1YS41LjUgMCAwIDEgMCAxWm0wIDMuMzM0SDYuNjY2YS41LjUgMCAwIDEgMC0xaDYuNjY2YS41LjUgMCAwIDEgMCAxWm0wIDMuMzMzSDYuNjY2YS41LjUgMCAwIDEgMC0xaDYuNjY2YS41LjUgMCAxIDEgMCAxWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuNjQ3IDQuOTEzVjQuODZsLS4wNC0uMWEuNDY2LjQ2NiAwIDAgMC0uMDQ3LS4wNi42MjMuNjIzIDAgMCAwLS4wNi0uMDhsLS4wNi0uMDQ3LS4xMDctLjA1My01LTMuMDg3YS42NjcuNjY3IDAgMCAwLS43MDYgMEwyLjY2NyA0LjUybC0uMDYuMDUzLS4wNi4wNDdhLjYyNy42MjcgMCAwIDAtLjA2LjA4LjQ3My40NzMgMCAwIDAtLjA0Ny4wNmwtLjA0LjF2LjA1M2EuNzY3Ljc2NyAwIDAgMCAwIC4xNzR2NS44MjZhLjY2Ny42NjcgMCAwIDAgLjMxMy41NjdsNSAzLjA4N2MuMDMxLjAxOS4wNjUuMDMyLjEuMDRoLjA1NGEuNTc0LjU3NCAwIDAgMCAuMzQ2IDBoLjA1NGEuMzE0LjMxNCAwIDAgMCAuMS0uMDRsNC45NjYtMy4wODdhLjY2OC42NjggMCAwIDAgLjMxNC0uNTY3VjUuMDg3YS43NjEuNzYxIDAgMCAwIDAtLjE3NFptLTYuMzE0IDcuODk0TDMuNjY3IDEwLjU0VjYuMjg3bDMuNjY2IDIuMjZ2NC4yNlpNOCA3LjM5MyA0LjI2NyA1LjA4NyA4IDIuNzg3bDMuNzMzIDIuM0w4IDcuMzkzWm00LjMzMyAzLjE0Ny0zLjY2NiAyLjI2N3YtNC4yNmwzLjY2Ni0yLjI2djQuMjUzWlxcXCIgZmlsbD1cXFwiI0E2NkVFOVxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTUuMzM0IDcuMzM0aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0wxMC42NjcgMy4yQS42NjcuNjY3IDAgMCAwIDEwIDIuNjY3SDZhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjcuNjY3IDAgMCAwIC41MjcuMjQ3Wk02LjU0NyA0aDIuOTA3bC40IDJINi4xNDdsLjQtMlptOC4xMiA1LjJBLjY2Ny42NjcgMCAwIDAgMTQgOC42NjdoLTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjYuNjY2IDAgMCAwIC41MjcuMjQ3aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0wxNC42NjcgOS4yWm0tNC41MiAyLjguNC0yaDIuOTA2bC40IDJoLTMuNzA2Wk02IDguNjY4SDJhLjY2Ny42NjcgMCAwIDAtLjY2Ni41MzNsLS42NjcgMy4zMzRhLjY2Ny42NjcgMCAwIDAgLjE0LjU1My42NjYuNjY2IDAgMCAwIC41MjcuMjQ3aDUuMzMzYS42NjcuNjY3IDAgMCAwIC41MTMtLjI0Ny42NjYuNjY2IDAgMCAwIC4xNTQtLjU1M0w2LjY2NyA5LjJBLjY2Ny42NjcgMCAwIDAgNiA4LjY2N1ptLTMuODUzIDMuMzM0LjQtMmgyLjkwN2wuNCAySDIuMTQ3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4zMzQgNS4zMzNIMTBBLjY2Ny42NjcgMCAwIDAgMTAgNGgtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm0wIDIuNjY3SDEwYS42NjcuNjY3IDAgMCAwIDAtMS4zMzRoLS42NjZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNFpNNiA1LjMzM2guNjY3YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINmEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzWk02IDhoLjY2N2EuNjY3LjY2NyAwIDEgMCAwLTEuMzM0SDZBLjY2Ny42NjcgMCAwIDAgNiA4Wm04IDUuMzMzaC0uNjY2VjJhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3SDMuMzMzQS42NjcuNjY3IDAgMCAwIDIuNjY3IDJ2MTEuMzMzSDJhLjY2Ni42NjYgMCAxIDAgMCAxLjMzM2gxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0tNS4zMzMgMEg3LjMzNHYtMi42NjdoMS4zMzN2Mi42NjdabTMuMzMzIDBoLTJWMTBhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3SDYuNjY3QS42NjcuNjY3IDAgMCAwIDYgMTB2My4zMzNINFYyLjY2Nmg4djEwLjY2N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwibTEyLjMyMiA1LjY4LjA5Mi4yMTIuMjIxLjA2N2EyLjgzNCAyLjgzNCAwIDAgMS0uMDk0IDUuNDUuMTY4LjE2OCAwIDAgMS0uMDgzLS4zMjVsLjAwOC0uMDAyYTIuNSAyLjUgMCAwIDAtLjItNC44NjZsLS4wMDgtLjAwMmEuMTY3LjE2NyAwIDAgMS0uMTMtLjExMmwtLjAwMi0uMDA0YTMuODM0IDMuODM0IDAgMCAwLTcuNDYgMS4yMzUuMTY3LjE2NyAwIDAgMS0uMTY2LjE2NyAxLjgzMyAxLjgzMyAwIDEgMCAwIDMuNjY3LjE2Ny4xNjcgMCAwIDEgMCAuMzMzaC0uMDAxYTIuMTY3IDIuMTY3IDAgMCAxLS41MS00LjI3M2wuMzM2LS4wOC4wNDQtLjM0MmE0LjE2NyA0LjE2NyAwIDAgMSA3Ljk1My0xLjEyNVptLTIuMzcgNC4xOTkuMDAyLjAwM2EuMTY3LjE2NyAwIDAgMSAwIC4yMzdsLS44NjYuODYtLjM1OC4zNTUuMzU4LjM1NC44NjYuODZhLjE2Ny4xNjcgMCAwIDEgMCAuMjM3bC0uMDAyLjAwM2EuMTY2LjE2NiAwIDAgMS0uMTgzLjAzNy4xNjYuMTY2IDAgMCAxLS4wNTQtLjAzN2wtLjg2LS44NjctLjM1NS0uMzU3LS4zNTUuMzU3LS44Ni44NjdhLjE2Ni4xNjYgMCAwIDEtLjE4My4wMzcuMTY2LjE2NiAwIDAgMS0uMDU0LS4wMzdsLS4wMDMtLjAwM2EuMTY3LjE2NyAwIDAgMSAwLS4yMzZsLjg2Ny0uODYuMzU4LS4zNTUtLjM1OC0uMzU1LS44NjUtLjg1OWEuMTcuMTcgMCAwIDEgLjI0LS4yNGwuODU4Ljg2Ni4zNTUuMzU3LjM1NS0uMzU3Ljg2LS44NjdhLjE2Ny4xNjcgMCAwIDEgLjIzNyAwWlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNCAxNFxcXCI+PHBhdGggZD1cXFwiTTcgLjMzMmMtMy42NjcgMC02LjY2NyAzLTYuNjY3IDYuNjY3IDAgMy42NjYgMyA2LjY2NiA2LjY2NyA2LjY2NiAzLjY2NiAwIDYuNjY2LTMgNi42NjYtNi42NjYgMC0zLjY2Ny0zLTYuNjY3LTYuNjY2LTYuNjY3Wm0yLjggNS41MzMtMy4yIDMuMmEuNjQ0LjY0NCAwIDAgMS0uOTM0IDBMNC4yIDcuNmEuNjQ0LjY0NCAwIDAgMSAwLS45MzQuNjQ0LjY0NCAwIDAgMSAuOTMzIDBsMSAxIDIuNzMzLTIuNzMzYS42NDQuNjQ0IDAgMCAxIC45MzQgMCAuNjQ1LjY0NSAwIDAgMSAwIC45MzNaXFxcIiBmaWxsPVxcXCIjMTc5OTdCXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNMTcuMTY3IDMuMzM0di0uNWgtMTF2MTFoMTF2LTEwLjVaTTguMjA0IDguNzVsLjQ2My0uNDY2IDEuMzcgMS4zNzYuMzU1LjM1Ny4zNTQtLjM1NyAzLjkyLTMuOTUuNDYzLjQ2NS00LjczNyA0Ljc4TDguMjA0IDguNzVabS01LjM3IDcuOTE2di41SDE0LjV2LjY2N0gzLjMzM2MtLjY0IDAtMS4xNjYtLjUyNi0xLjE2Ni0xLjE2N1Y1LjVoLjY2NnYxMS4xNjdabTMuODMzLTE0LjVoMTBjLjY0IDAgMS4xNjYuNTI2IDEuMTY2IDEuMTY3djEwYzAgLjY0LS41MjYgMS4xNjYtMS4xNjYgMS4xNjZoLTEwYy0uNjQgMC0xLjE2Ny0uNTI2LTEuMTY3LTEuMTY2di0xMGMwLS42NC41MjYtMS4xNjcgMS4xNjctMS4xNjdaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEyIDEwXFxcIj48cGF0aCBkPVxcXCJtLjc1IDUuMjUgMy41IDMuNSA3LTcuNVxcXCIgc3Ryb2tlPVxcXCIjMTU1MzY2XFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuNVxcXCIgc3Ryb2tlLWxpbmVjYXA9XFxcInJvdW5kXFxcIiBzdHJva2UtbGluZWpvaW49XFxcInJvdW5kXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS1saW5lY2FwPVxcXCJyb3VuZFxcXCIgc3Ryb2tlLWxpbmVqb2luPVxcXCJyb3VuZFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIyXFxcIiBjbGFzcz1cXFwiY2hldnJvbl9zdmdfX2ZlYXRoZXIgY2hldnJvbl9zdmdfX2ZlYXRoZXItY2hldnJvbnMtcmlnaHRcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwibTEzIDE3IDUtNS01LTVNNiAxN2w1LTUtNS01XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxOCAxOVxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOSAyLjQzNGMtNC4xMjUgMC03LjUgMy4zNzUtNy41IDcuNXMzLjM3NSA3LjUgNy41IDcuNSA3LjUtMy4zNzUgNy41LTcuNS0zLjM3NS03LjUtNy41LTcuNVptMi43NzUgOS4yMjVjLjMuMy4zLjc1IDAgMS4wNS0uMy4zLS43NS4zLTEuMDUgMEw5IDEwLjk4NGwtMS43MjUgMS43MjVjLS4zLjMtLjc1LjMtMS4wNSAwLS4zLS4zLS4zLS43NSAwLTEuMDVMNy45NSA5LjkzNCA2LjIyNSA4LjIwOWMtLjMtLjMtLjMtLjc1IDAtMS4wNS4zLS4zLjc1LS4zIDEuMDUgMEw5IDguODg0bDEuNzI1LTEuNzI1Yy4zLS4zLjc1LS4zIDEuMDUgMCAuMy4zLjMuNzUgMCAxLjA1TDEwLjA1IDkuOTM0bDEuNzI1IDEuNzI1WlxcXCIgZmlsbD1cXFwiI0UzNEQ1QlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZD1cXFwiTTguNzUgNS40NTdoLTEuNUExLjA4MyAxLjA4MyAwIDAgMCA2LjE2NyA2LjU0djNhMS4wODMgMS4wODMgMCAwIDAgMS4wODMgMS4wODNoMS41QTEuMDg0IDEuMDg0IDAgMCAwIDkuODMzIDkuNTRhLjQxNy40MTcgMCAwIDEgLjgzNCAwIDEuOTE3IDEuOTE3IDAgMCAxLTEuOTE3IDEuOTE3aC0xLjVBMS45MTYgMS45MTYgMCAwIDEgNS4zMzMgOS41NHYtM0ExLjkxNyAxLjkxNyAwIDAgMSA3LjI1IDQuNjIzaDEuNWExLjkxNyAxLjkxNyAwIDAgMSAxLjkxNyAxLjkxNy40MTYuNDE2IDAgMSAxLS44MzQgMEExLjA4MyAxLjA4MyAwIDAgMCA4Ljc1IDUuNDU3Wk00LjAxOCAyLjA4QTcuMTY3IDcuMTY3IDAgMSAxIDExLjk4MiAxNCA3LjE2NyA3LjE2NyAwIDAgMSA0LjAxOCAyLjA4Wm0uNDYzIDExLjIyNUE2LjMzNCA2LjMzNCAwIDEgMCAxMS41MiAyLjc3NGE2LjMzNCA2LjMzNCAwIDAgMC03LjA0IDEwLjUzMlpcXFwiIGZpbGw9XFxcIiNBNkI1QkFcXFwiIHN0cm9rZT1cXFwiI0E2QjVCQVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNCAxNFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS45MTcgNC4wODNhNC41MTUgNC41MTUgMCAxIDAtNS44MzQgNS44MzQgNC41MTUgNC41MTUgMCAxIDAgNS44MzQtNS44MzRabS0uOTM0LjkzNGEzLjQ1MyAzLjQ1MyAwIDAgMS0uMDMgMS40NDdMNy41MzIgNS4wNTFjLjI1Ni0uMDYxLjUxOC0uMDkzLjc4MS0uMDk0LjIyNCAwIC40NDYuMDIyLjY2NS4wNjRsLjAwNi0uMDA1Wm0tLjU0OCAyLjU2NmEzLjUgMy41IDAgMCAxLS44NTIuODUyTDUuNTY1IDYuNDE3YTMuNSAzLjUgMCAwIDEgLjg1Mi0uODUybDIuMDE4IDIuMDE4Wm0tNC42NjcuODUyYTMuMzU0IDMuMzU0IDAgMSAxIDQuNjY3LTQuNjY3aC0uMTQ2YTQuNTI3IDQuNTI3IDAgMCAwLTQuNDk3IDQuNTQ0YzAgLjA0Ny4wMDUuMS4wMDUuMTQ2bC0uMDI5LS4wMjNabTEuMjI1LjUxOWEzLjU3IDMuNTcgMCAwIDEtLjA2NC0uNjY1Yy4wMDEtLjI2My4wMzMtLjUyNi4wOTMtLjc4Mkw2LjQ0IDguOTI1Yy0uMjU2LjA2LS41MTkuMDkyLS43ODIuMDkzYTMuNTcgMy41NyAwIDAgMS0uNjM2LS4wNGwtLjAyOS0uMDI0Wm0zLjMyIDIuNzEyYTMuMzY1IDMuMzY1IDAgMCAxLTIuNzcxLTEuNDY0aC4xNDVhNC41MjcgNC41MjcgMCAwIDAgNC41MjEtNC41MTV2LS4xNDVhMy4zNTQgMy4zNTQgMCAwIDEtMS44OTYgNi4xMjRaXFxcIiBmaWxsPVxcXCIjRjRCNzg0XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDUyIDUyXFxcIj48Y2lyY2xlIGN4PVxcXCIyNlxcXCIgY3k9XFxcIjI2XFxcIiByPVxcXCIyNS4yNVxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS41XFxcIi8+PHBhdGggZD1cXFwiTTM3LjQgMzcuODJjLS4wNTEtLjYwOS0uMDUtNS4zODMtLjAzNi04LjMxOGEuNi42IDAgMCAwLS41OTgtLjYwNGgtLjAwM2EuNi42IDAgMCAwLS42LjU5OGMwIC4wMjItLjAxIDIuMTItLjAxIDQuMjA0LjAwMiAyLjExMi4wMDQgMy4yMjQuMDI5IDMuODM0bC05Ljg0OSAyLjk2M2EuNTk3LjU5NyAwIDAgMCAuMDU0LS4yNDh2LTcuODk3YS42LjYgMCAxIDAtMS4yMDIgMHY3Ljg5N2MwIC4wNTUuMDA5LjEwOC4wMjIuMTU5bC05LjU2LTIuOTA4LS4wMDgtNy45YS42LjYgMCAwIDAtLjYtLjYwMWgtLjAwMWEuNi42IDAgMCAwLS42LjZsLjAwNyA4LjM0N2EuNi42IDAgMCAwIC40MjUuNTc0bDEwLjg2OCAzLjMwNGEuNTkyLjU5MiAwIDAgMCAuMzQ4IDBsMTAuOTAzLTMuMjhhLjYuNiAwIDAgMCAuNDEtLjcyNFptLS40NzItLjQ0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIiMxOEFDQjJcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjNcXFwiLz48cGF0aCBkPVxcXCJtNDAuMDQgMjMuNzQ2LTMuMzY1LTEuOTAyLS4wMTMtLjAwNmExMi4wMDQgMTIuMDA0IDAgMCAwLTIuMzMxLTMuMjU5LjYuNiAwIDEgMC0uODQ3Ljg1MiAxMC43NzggMTAuNzc4IDAgMCAxIDIuNjI0IDQuMjE3bC0xLjU4Mi40MzNjLTEuMjU4LTMuNjMzLTQuNzMzLTYuMTMyLTguNjEzLTYuMTMyYTkuMTE1IDkuMTE1IDAgMCAwLTQuNTcyIDEuMjI4LjYwMS42MDEgMCAwIDAgLjYwMyAxLjAzOSA3LjkwOCA3LjkwOCAwIDAgMSAzLjk2OS0xLjA2NiA3Ljk1IDcuOTUgMCAwIDEgNy40NSA1LjI1bC0xLjU4My40MzNhNi4zMTIgNi4zMTIgMCAwIDAtNS44NjctNC4wNDcgNi4yOTUgNi4yOTUgMCAwIDAtNS44NzkgNC4wNzVsLTEuNTg2LS40MjVhNy45NCA3Ljk0IDAgMCAxIDEuODcxLTIuOTcuNi42IDAgMSAwLS44NS0uODQ5IDkuMTQ4IDkuMTQ4IDAgMCAwLTIuMTg0IDMuNTA2bC0xLjU4My0uNDI1Yy4xMDItLjMxLjIxOC0uNjEzLjM0Ni0uOTA5YS42MDcuNjA3IDAgMCAwIC4xNzItLjM3NiAxMC43NzYgMTAuNzc2IDAgMCAxIDkuNjkzLTYuMWMxLjg5IDAgMy43NDkuNDk3IDUuMzc1IDEuNDM5YS42MDEuNjAxIDAgMCAwIC42MDItMS4wNCAxMS45NDkgMTEuOTQ5IDAgMCAwLTUuOTc3LTEuNiAxMS45OCAxMS45OCAwIDAgMC0xMC44MTQgNi44NmwtMy4xMzkgMS43NzRhLjYuNiAwIDAgMCAuMzU4IDEuMTJsMS4zMi0uMTM2LTEuNDczIDEuODdhLjU5OS41OTkgMCAwIDAgLjMwMS45NDdsMTEuMzYxIDMuMzc4YS42MDEuNjAxIDAgMCAwIC42OTEtLjI3NGwxLjQwOS0yLjQxOCAxLjMxIDIuMTc3YS42LjYgMCAwIDAgLjY3My4yN2wxMS40NDctMy4xMjlhLjYwMi42MDIgMCAwIDAgLjMxMy0uOTUxbC0xLjQ4Ny0xLjg4OSAxLjQ5OS4xNTZhLjYuNiAwIDAgMCAuMzU4LTEuMTJabS0xNC4xMjctMS43NThhNS4xMDQgNS4xMDQgMCAwIDEgNC43MDIgMy4xNjVsLTQuNzAzIDEuMjg4LTQuNzEtMS4yNjVhNS4wOSA1LjA5IDAgMCAxIDQuNzExLTMuMTg4Wm0tMi4xOTYgNy42NTItMTAuMDYxLTIuOTkyIDEuNDYtMS44NTVMMjUgMjcuNDM5bC0xLjI4MiAyLjIwMVptNC4zMTUtLjI0LTEuMTg0LTEuOTY0IDkuODctMi42NDMgMS40NDggMS44MzgtMTAuMTM0IDIuNzdabS02LjQ0Ny0xNS45N2EuNjAxLjYwMSAwIDAgMCAxLjE1NS0uMzNsLS44LTIuODAzYS42MDEuNjAxIDAgMCAwLTEuMTU2LjMzbC44MDEgMi44MDRabTcuNzU1LjQ3OWEuNjAxLjYwMSAwIDAgMCAuNzQyLS40MTJsLjgtMi44MDRhLjYuNiAwIDEgMC0xLjE1NS0uMzNsLS44IDIuODA0YS42LjYgMCAwIDAgLjQxMi43NDJabTYuNTcgMy42NzdhLjYwMS42MDEgMCAwIDAgLjQyLS4xN2wyLjA1My0yLjAwM2EuNi42IDAgMSAwLS44MzktLjg2bC0yLjA1MiAyLjAwMmEuNi42IDAgMCAwIC40MTkgMS4wM1ptLTIwLjU0LS4yMjFhLjYwMi42MDIgMCAwIDAgLjg0LS44NmwtMi4wMDMtMS45NTJhLjYuNiAwIDEgMC0uODM4Ljg2bDIuMDAxIDEuOTUyWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIiMxOEFDQjJcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjNcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgNTIgNTJcXFwiPjxjaXJjbGUgY3g9XFxcIjI2XFxcIiBjeT1cXFwiMjZcXFwiIHI9XFxcIjI1LjI1XFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjVcXFwiLz48cGF0aCBkPVxcXCJNMjAuODcxIDE3LjIwOEExMC4xNjcgMTAuMTY3IDAgMCAxIDI2IDE1LjgyM2ExMC4xMSAxMC4xMSAwIDAgMSA3LjE5NiAyLjk4LjU2Ni41NjYgMCAwIDAgLjgwNCAwQS41Ny41NyAwIDAgMCAzNCAxOGExMS4yNCAxMS4yNCAwIDAgMC04LTMuMzEzYy0yLjAwOCAwLTMuOTguNTMyLTUuNzAzIDEuNTRhLjU2OC41NjggMCAxIDAgLjU3NC45ODJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiIzE4QUNCMlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuM1xcXCIvPjxwYXRoIGQ9XFxcIk0yNiAxMmMtMy43OCAwLTcuMzIxIDEuNDgyLTkuOTc0IDQuMTc1YS41Ny41NyAwIDAgMCAuODEuNzk4QTEyLjc3IDEyLjc3IDAgMCAxIDI2IDEzLjEzN2M3LjA5MiAwIDEyLjg2MyA1Ljc3IDEyLjg2MyAxMi44NjMgMCAyLjE4NC0uNTQ4IDQuMjQ0LTEuNTEzIDYuMDQ3bC0xLjc3LTIuNzA3YTQuMzgxIDQuMzgxIDAgMCAwIDEuNzM0LTMuNDkgNC4zOTIgNC4zOTIgMCAwIDAtNC4zODgtNC4zODggNC4zNCA0LjM0IDAgMCAwLTIuMzg5LjcwNyA1LjkzIDUuOTMgMCAwIDAtOS4xMjMuMDYgNC4zNzcgNC4zNzcgMCAwIDAtMi40NzktLjc2NyA0LjM5MiA0LjM5MiAwIDAgMC00LjM4NyA0LjM4N2MwIDEuNDE1LjY3NCAyLjY3NCAxLjcxNiAzLjQ3N2wtMS42MzUgMi42ODFhMTIuODYgMTIuODYgMCAwIDEgLjIwNC0xMi4zOTMuNTY5LjU2OSAwIDEgMC0uOTg3LS41NjVBMTQgMTQgMCAwIDAgMTIgMjZjMCA1LjA5NSAyLjczNiA5LjU2NCA2LjgxNyAxMi4wMTNhLjU2Ni41NjYgMCAwIDAgLjMyNS4xODlBMTMuOTExIDEzLjkxMSAwIDAgMCAyNiA0MGM3LjcxOSAwIDE0LTYuMjggMTQtMTRzLTYuMjgxLTE0LTE0LTE0Wm02LjkyNSAxMC41OTlhMy4yNTMgMy4yNTMgMCAwIDEgMy4yNSAzLjI1IDMuMjUzIDMuMjUzIDAgMCAxLTMuMjUgMy4yNWMtLjU3NiAwLTEuMTI3LS4xNS0xLjYxOC0uNDM0QTUuOTA2IDUuOTA2IDAgMCAwIDMxLjk0IDI2YTUuOTAzIDUuOTAzIDAgMCAwLS43NTctMi44OTYgMy4yMTcgMy4yMTcgMCAwIDEgMS43NC0uNTA1Wk0yNiAyMS4xOTZBNC44MSA0LjgxIDAgMCAxIDMwLjgwMyAyNiA0LjgxIDQuODEgMCAwIDEgMjYgMzAuODA0IDQuODEgNC44MSAwIDAgMSAyMS4xOTUgMjYgNC44MSA0LjgxIDAgMCAxIDI2IDIxLjE5NlptLTEwLjMxNiA0LjY1M2EzLjI1MyAzLjI1MyAwIDAgMSA1LjA5Mi0yLjY3OEE1LjkwNSA1LjkwNSAwIDAgMCAyMC4wNTggMjZjMCAuOTMzLjIxNyAxLjgxNi42MDEgMi42MDNhMy4yNTMgMy4yNTMgMCAwIDEtNC45NzYtMi43NTRabTMuMzgxIDEwLjk4MWExMi45NjIgMTIuOTYyIDAgMCAxLTMuNzc5LTMuNzE5bDEuOTU5LTMuMjEzYy41Mi4yMTggMS4wOS4zMzkgMS42ODkuMzM5LjgzMiAwIDEuNjI3LS4yMyAyLjMyMS0uNjY1YTYgNiAwIDAgMCAxLjMgMS4yNjVsLTMuNDkgNS45OTNaTTI2IDM4Ljg2NGMtMi4xNDYgMC00LjE3LS41My01Ljk1MS0xLjQ2M2wzLjQ5LTUuOTk1YTUuOSA1LjkgMCAwIDAgMi40Ni41MzVjLjg2MSAwIDEuNjgtLjE4NSAyLjQxOC0uNTE2bDMuNDk1IDUuOTk3QTEyLjc4NCAxMi43ODQgMCAwIDEgMjYgMzguODY0Wm02Ljg5Ny0yLjAxLTMuNDktNS45OWMuNDktLjM0NS45MjYtLjc2MiAxLjI5Mi0xLjIzNWE0LjM0OSA0LjM0OSAwIDAgMCAyLjIyNi42MDdjLjU5IDAgMS4xNTItLjExOCAxLjY2Ni0uMzNsMi4xMSAzLjIyNGExMi45NzMgMTIuOTczIDAgMCAxLTMuODA0IDMuNzIzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIiMxOEFDQjJcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjNcXFwiLz48cGF0aCBkPVxcXCJNMjYgMjkuODAzYTMuODIzIDMuODIzIDAgMCAwIDMuMDQ4LTEuNTI4LjU2OS41NjkgMCAwIDAtLjkxLS42OCAyLjY2OCAyLjY2OCAwIDAgMS00LjMzNy0uMDg2LjU2OS41NjkgMCAwIDAtLjkzOC42NDNBMy44MDQgMy44MDQgMCAwIDAgMjYgMjkuODAzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIiMxOEFDQjJcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjNcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTIgMTRcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIk04LjE2NyAzdi41aDMuMTY2YS4xNjcuMTY3IDAgMCAxIDAgLjMzM2gtMS4xNjZ2Ny44MzNhMS41IDEuNSAwIDAgMS0xLjUgMS41SDMuMzMzYTEuNSAxLjUgMCAwIDEtMS4wNi0uNDM5bC0uMzU0LjM1NC4zNTQtLjM1NGExLjUgMS41IDAgMCAxLS40NC0xLjA2VjMuODMySC42NjdhLjE2Ny4xNjcgMCAxIDEgMC0uMzMzaDMuMTY2VjIuMzMzYTEuNSAxLjUgMCAwIDEgMS41LTEuNWgxLjMzNGExLjUgMS41IDAgMCAxIDEuNSAxLjVWM1ptLS44MzQuNWguNVYyLjMzM2ExLjE2NyAxLjE2NyAwIDAgMC0xLjE2Ni0xLjE2N0g1LjMzM2ExLjE2NyAxLjE2NyAwIDAgMC0xLjE2NiAxLjE2N1YzLjVoMy4xNjZabS00LjY2Ni4zMzNoLS41djcuODMzYTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY2IDEuMTY3aDUuMzM0YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY2LTEuMTY3VjMuODMzSDIuNjY3Wm0yLjExOCA2LjYxOGEuMTY3LjE2NyAwIDAgMS0uMjg1LS4xMTh2LTRhLjE2Ny4xNjcgMCAxIDEgLjMzMyAwdjRhLjE2Ny4xNjcgMCAwIDEtLjA0OC4xMThabTIuNjY2IDBhLjE2Ny4xNjcgMCAwIDEtLjI4NC0uMTE4di00YS4xNjcuMTY3IDAgMCAxIC4zMzMgMHY0YS4xNjcuMTY3IDAgMCAxLS4wNDkuMTE4WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNMTAuNjI0IDUuNjY3aC00LjY3TDguMjkgMy40MTRsMi4zMzUgMi4yNTNaTTguNzggMi40NzRhLjcwNi43MDYgMCAwIDAtLjk3NCAwbC0zLjE3IDMuMDZjLS40MzYuNDEzLS4xMzIgMS4xMzMuNDgzIDEuMTMzaDYuMzM0Yy42MTUgMCAuOTI2LS43Mi40OS0xLjE0TDguNzggMi40NzRabTIuNjggNi44Nkg1LjExOWMtLjYxNSAwLS45MjYuNzItLjQ5IDEuMTRsMy4xNyAzLjA2Yy4yNy4yNi43MDQuMjYuOTc0IDBsMy4xNy0zLjA2Yy40MzYtLjQyLjEzMi0xLjE0LS40ODMtMS4xNFpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwibTEzLjgwNyAxMS4xNC0xLjYxNC0xLjYxNGEuNjY2LjY2NiAwIDAgMC0uOTQ2IDBMOC44NiAxMS45MTNhLjY2Ny42NjcgMCAwIDAtLjE5My40NzNWMTRhLjY2Ny42NjcgMCAwIDAgLjY2Ni42NjZoMS42MTRhLjY2OC42NjggMCAwIDAgLjQ3My0uMTkzbDIuMzg3LTIuMzg3YS42NjcuNjY3IDAgMCAwIDAtLjk0NlptLTMuMTQgMi4xOTNIMTB2LS42NjdsMS43Mi0xLjcyLjY2Ny42NjctMS43MiAxLjcyWm0tNCAwSDRhLjY2Ni42NjYgMCAwIDEtLjY2Ny0uNjY3VjMuMzMzQS42NjcuNjY3IDAgMCAxIDQgMi42NjZoMy4zMzN2MmEyIDIgMCAwIDAgMiAyaDJ2LjY2N2EuNjY3LjY2NyAwIDAgMCAxLjMzNCAwVjUuOTZhLjg4Ljg4IDAgMCAwLS4wNC0uMTh2LS4wNmEuNzE0LjcxNCAwIDAgMC0uMTI3LS4xODdsLTQtNGEuNzEzLjcxMyAwIDAgMC0uMTg3LS4xMjcuMjEzLjIxMyAwIDAgMC0uMDYgMGwtLjIxMy0uMDczSDRhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDIuNjY3YS42NjcuNjY3IDAgMSAwIDAtMS4zMzNabTItOS43MjcgMS43MjYgMS43MjdoLTEuMDZhLjY2Ny42NjcgMCAwIDEtLjY2Ni0uNjY3di0xLjA2Wk01LjMzMyA5LjMzM2g0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNoLTRhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM1ptMC0yLjY2N0g2YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNoLS42NjdhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptMS4zMzQgNEg1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDEuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNCAxNFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48ZyBjbGlwLXBhdGg9XFxcInVybCgjZG91YmxlLXRpY2tfc3ZnX19hKVxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIj48cGF0aCBkPVxcXCJNOS44NDUgMy43MDZhLjY0Ny42NDcgMCAwIDAtLjk0NyAwbC01LjA3IDUuMTRMMS43MzMgNi43MmEuNjQ3LjY0NyAwIDAgMC0uOTQ3IDAgLjY2OS42NjkgMCAwIDAgMCAuOTZsMi41NyAyLjYwNGEuNjEuNjEgMCAwIDAgLjQ3Mi4yMDYuNjEuNjEgMCAwIDAgLjQ3NC0uMjA2bDUuNTQzLTUuNjJhLjY2OS42NjkgMCAwIDAgMC0uOTZaXFxcIi8+PHBhdGggZD1cXFwiTTEzLjYzMiAzLjM2YTEuMjM0IDEuMjM0IDAgMCAwLTEuNzgzIDBMNy4xOTcgOC4wNzhsLTEuNjc3LTEuN2ExLjIzNCAxLjIzNCAwIDAgMC0xLjc4MyAwIDEuMjU2IDEuMjU2IDAgMCAwIDAgMS43ODRsMi41NyAyLjYwNGMuMTAxLjEwMy4yMjcuMjA1LjM4Ny4yNzcuMTY0LjA3NC4zMzMuMTA0LjUwMy4xMDQuMTcxIDAgLjM0LS4wMy41MDQtLjEwNC4xNi0uMDcyLjI4Ni0uMTc0LjM4OC0uMjc3bDUuNTQzLTUuNjJhMS4yNTYgMS4yNTYgMCAwIDAgMC0xLjc4NFpcXFwiIHN0cm9rZT1cXFwiI2ZmZlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjE3NVxcXCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XFxcImRvdWJsZS10aWNrX3N2Z19fYVxcXCI+PHBhdGggZmlsbD1cXFwiI2ZmZlxcXCIgZD1cXFwiTTAgMGgxNHYxNEgwelxcXCIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwibTEyLjc5NiA1Ljg3LjAyMy4wN2EuMzA1LjMwNSAwIDAgMSAuMDE0LjA1NHY2LjY3MmExLjUgMS41IDAgMCAxLTEuNSAxLjVINC42NjdhMS41IDEuNSAwIDAgMS0xLjUtMS41VjMuMzMzYTEuNSAxLjUgMCAwIDEgMS41LTEuNWgzLjk3OGEuMjMzLjIzMyAwIDAgMSAuMDMzLjAxNGwuMTEuMDZoLjA0NWwzLjk2MyAzLjk2MlptLTMuMTEtMi42MTctLjg1My0uODU0djIuMjY3QTEuMTY3IDEuMTY3IDAgMCAwIDEwIDUuODMzaDIuMjY3bC0uODUzLS44NTQtMS43MjctMS43MjZaTTguNSAyLjY2NnYtLjVINC42NjdBMS4xNjcgMS4xNjcgMCAwIDAgMy41IDMuMzMzdjkuMzMzYTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3IDEuMTY3aDYuNjY2YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3LTEuMTY3di02LjVIMTBhMS41IDEuNSAwIDAgMS0xLjUtMS41di0yWm0tLjMzMyA3LjA2djEuMjM3bC44Ni0uODkuMTg5LS4xOTVhLjE3LjE3IDAgMCAxIC4yMzcuMjQybC0xLjMyOCAxLjMyOGEuMTY3LjE2NyAwIDAgMS0uMDUyLjAzMmwtLjAxMS4wMDQtLjAxLjAwNWEuMTI3LjEyNyAwIDAgMS0uMTAzIDBsLS4wMS0uMDA1LS4wMTItLjAwNGEuMTY3LjE2NyAwIDAgMS0uMDUyLS4wMzJsLTEuMzI4LTEuMzI5YS4xNy4xNyAwIDAgMSAuMjM3LS4yNDFsLjE5LjE5Ni44Ni44ODlWOGEuMTY3LjE2NyAwIDAgMSAuMzMzIDB2MS43MjZaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtMi42MjYgMTMuMzc0LjIzNi0uMjM2LS4yMzYuMjM2YTEgMSAwIDAgMCAuNzA3LjI5M2g5LjMzNGExIDEgMCAwIDAgLjcwNy0uMjkzbC0uMjM2LS4yMzYuMjM2LjIzNmExIDEgMCAwIDAgLjI5My0uNzA3VjEwYS4zMzMuMzMzIDAgMCAxIC41NjktLjIzNmwuMjM1LS4yMzUtLjIzNS4yMzVhLjMzMy4zMzMgMCAwIDEgLjA5Ny4yMzZ2Mi42NjdhMS42NjcgMS42NjcgMCAwIDEtMS42NjYgMS42NjZIMy4zMzNhMS42NjcgMS42NjcgMCAwIDEtMS42NjYtMS42NjZWMTBjMC0uMDg4LjAzNS0uMTczLjA5Ny0uMjM2TDEuNTMgOS41M2wuMjM1LjIzNWEuMzMzLjMzMyAwIDAgMSAuNDcyIDBsLjIzNS0uMjM1LS4yMzUuMjM1YS4zMzMuMzMzIDAgMCAxIC4wOTcuMjM2djIuNjY3YTEgMSAwIDAgMCAuMjkzLjcwN1ptNS4yNTUtMy4wNjYtLjAwNy0uMDAzLS4wMDctLjAwMmEuMzMzLjMzMyAwIDAgMS0uMTA4LS4wNjhMNS4wOTYgNy41N2EuMzM2LjMzNiAwIDAgMSAuMzY2LS41NDhsLjEyOC0uMzA4LS4xMjguMzA4Yy4wNC4wMTcuMDc4LjA0MS4xMDkuMDcyTDcuMDk3IDguNjNsLjU3LjU3MlYyYS4zMzMuMzMzIDAgMSAxIC42NjYgMHY3LjIwMWwuNTctLjU3MiAxLjUyNi0xLjUzM2EuMzM2LjMzNiAwIDAgMSAuNDc1LjQ3NWwtMi42NjMgMi42NjRhLjMzMy4zMzMgMCAwIDEtLjEwOC4wNjhsLS4wMDcuMDAyLS4wMDcuMDAzYS4yOTIuMjkyIDAgMCAxLS4yMzggMFpcXFwiIGZpbGw9XFxcImN1cnJlbnRjb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Y29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMCA2XFxcIj48cGF0aCBkPVxcXCJNOC45MzIuODc4YS41LjUgMCAwIDEgMCAuNzFMNS4zNTcgNS4xMjFsLS4wMDIuMDAzYS41LjUgMCAwIDEtLjcxIDB2LS4wMDFMMS4xMSAxLjU4OWEuNS41IDAgMCAxIDAtLjcxVi44NzdhLjUuNSAwIDAgMSAuNzA1IDBsMi45NSAyLjk1LjIzMy4yMzMuMjM2LS4yMzJMOC4yMjYuODc5Vi44NzhhLjUuNSAwIDAgMSAuNzA2IDBaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE3IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0zLjcxOCAxMmgyLjgyN2EuNjY2LjY2NiAwIDAgMCAuNDczLS4xOTRsNC42MTQtNC42MiAxLjg5My0xLjg1M2EuNjY4LjY2OCAwIDAgMCAwLS45NDdsLTIuODI3LTIuODZhLjY2Ny42NjcgMCAwIDAtLjk0NiAwbC0xLjg4IDEuODg3LTQuNjI3IDQuNjJhLjY2Ny42NjcgMCAwIDAtLjE5My40NzN2Mi44MjdhLjY2Ny42NjcgMCAwIDAgLjY2Ni42NjdabTYuNTA3LTkuMDYgMS44ODcgMS44ODYtLjk0Ny45NDctMS44ODctMS44ODcuOTQ3LS45NDZabS01Ljg0IDUuODQgMy45NTMtMy45NTQgMS44ODcgMS44ODctMy45NTMgMy45NTNINC4zODVWOC43OFptMTAgNC41NTNoLTEyYS42NjcuNjY3IDAgMSAwIDAgMS4zMzNoMTJhLjY2Ni42NjYgMCAxIDAgMC0xLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTcgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEyLjc1MSA3LjIxM2EuNzMyLjczMiAwIDAgMC0uNS4xOTUuNjQ3LjY0NyAwIDAgMC0uMjA4LjQ3MnY0Ljc4NmEuNjQ3LjY0NyAwIDAgMS0uMjA3LjQ3Mi43MzEuNzMxIDAgMCAxLS41MDEuMTk1SDMuNTQzYS43MzEuNzMxIDAgMCAxLS41LS4xOTUuNjQ3LjY0NyAwIDAgMS0uMjA4LS40NzJWNS4zMzNjMC0uMTc3LjA3NC0uMzQ2LjIwNy0uNDcxYS43MzEuNzMxIDAgMCAxIC41MDEtLjE5Nmg1LjA4NmMuMTg4IDAgLjM2OC0uMDcuNS0uMTk1QS42NDcuNjQ3IDAgMCAwIDkuMzM4IDRhLjY0Ny42NDcgMCAwIDAtLjIwNy0uNDcyLjczMS43MzEgMCAwIDAtLjUwMS0uMTk1SDMuNTQzYy0uNTY0IDAtMS4xMDQuMjEtMS41MDMuNTg2YTEuOTQyIDEuOTQyIDAgMCAwLS42MjIgMS40MTR2Ny4zMzNjMCAuNTMuMjI0IDEuMDQuNjIyIDEuNDE1LjM5OS4zNzUuOTQuNTg1IDEuNTAzLjU4NWg3Ljc5MmMuNTYzIDAgMS4xMDQtLjIxIDEuNTAyLS41ODUuMzk5LS4zNzUuNjIzLS44ODQuNjIzLTEuNDE1VjcuODhhLjY0Ny42NDcgMCAwIDAtLjIwOC0uNDcyLjczMi43MzIgMCAwIDAtLjUtLjE5NVptMi43NzctNS40NjdhLjY5LjY5IDAgMCAwLS4zODMtLjM2Ljc0Ny43NDcgMCAwIDAtLjI2OS0uMDUzaC00LjI1YS43MzIuNzMyIDAgMCAwLS41LjE5NS42NDcuNjQ3IDAgMCAwLS4yMDguNDcyYzAgLjE3Ni4wNzUuMzQ2LjIwNy40NzFhLjczMi43MzIgMCAwIDAgLjUwMS4xOTVoMi41NDNsLTcuMjk2IDYuODZhLjY2Ni42NjYgMCAwIDAtLjE1NS4yMTcuNjMzLjYzMyAwIDAgMCAuMTU1LjczLjc0Ni43NDYgMCAwIDAgMS4wMDYgMGw3LjI4OS02Ljg2N1Y2YzAgLjE3Ni4wNzUuMzQ2LjIwNy40NzFhLjczMi43MzIgMCAwIDAgLjUwMS4xOTVjLjE4OCAwIC4zNjgtLjA3LjUwMS0uMTk1QS42NDcuNjQ3IDAgMCAwIDE1LjU4NSA2VjJhLjYzMy42MzMgMCAwIDAtLjA1Ny0uMjU0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxN1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuNjEzIDcuOThDMTMuMjY3IDQuODUzIDEwLjczMyAyLjkxMyA4IDIuOTEzYy0yLjczMyAwLTUuMjY3IDEuOTQtNi42MTMgNS4wNjdhLjY2Ny42NjcgMCAwIDAgMCAuNTMzQzIuNzMzIDExLjY0IDUuMjY3IDEzLjU4IDggMTMuNThjMi43MzMgMCA1LjI2Ny0xLjk0IDYuNjEzLTUuMDY3YS42NjcuNjY3IDAgMCAwIDAtLjUzM1pNOCAxMi4yNDZjLTIuMTEzIDAtNC4xMTMtMS41MjYtNS4yNjctNCAxLjE1NC0yLjQ3MyAzLjE1NC00IDUuMjY3LTQgMi4xMTMgMCA0LjExMyAxLjUyNyA1LjI2NyA0LTEuMTU0IDIuNDc0LTMuMTU0IDQtNS4yNjcgNFpNOCA1LjU4YTIuNjY3IDIuNjY3IDAgMSAwIDAgNS4zMzNBMi42NjcgMi42NjcgMCAwIDAgOCA1LjU4Wm0wIDRhMS4zMzMgMS4zMzMgMCAxIDEgMC0yLjY2N0ExLjMzMyAxLjMzMyAwIDAgMSA4IDkuNThaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE1MCAxNTBcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGNpcmNsZSBjeD1cXFwiNzVcXFwiIGN5PVxcXCI3NVxcXCIgcj1cXFwiNzVcXFwiIGZpbGw9XFxcInVybCgjZm9sZGVyX3N2Z19fYSlcXFwiLz48cGF0aCBkPVxcXCJNNDUuNTQ4IDU0LjIyYzAtMi4zOCAwLTMuNTcuNDctNC40NzVhNC4xNzggNC4xNzggMCAwIDEgMS43ODItMS43ODFjLjkwNi0uNDcgMi4wOTUtLjQ3IDQuNDc1LS40N2gxNy41NTdjMS4wMTIgMCAxLjUxOCAwIDEuOTk1LjExMy40MDYuMDk2Ljc5NS4yNTMgMS4xNTQuNDY1LjQyMy4yNS43ODguNiAxLjUxNyAxLjMwMmwuNDMuNDE2Yy43My43MDIgMS4wOTQgMS4wNTMgMS41MTcgMS4zMDIuMzYuMjEyLjc0OC4zNjkgMS4xNTQuNDY1LjQ3Ny4xMTQuOTgzLjExNCAxLjk5Ni4xMTRoMTcuNzE4YzIuMzc5IDAgMy41NjggMCA0LjQ3NC40N2E0LjE4MiA0LjE4MiAwIDAgMSAxLjc4MiAxLjc4MmMuNDcuOTA2LjQ3IDIuMDk1LjQ3IDQuNDc0djQwLjA0NmMwIDEuMTkgMCAxLjc4NC0uMjM1IDIuMjM3YTIuMDgzIDIuMDgzIDAgMCAxLS44OTEuODkxYy0uNDUzLjIzNS0xLjA0OC4yMzUtMi4yMzcuMjM1SDUxLjYwMmMtMi4xNDEgMC0zLjIxMiAwLTQuMDI3LS40MjNhMy43NjMgMy43NjMgMCAwIDEtMS42MDQtMS42MDRjLS40MjMtLjgxNS0uNDIzLTEuODg1LS40MjMtNC4wMjdWNTQuMjJaXFxcIiBmaWxsPVxcXCJ1cmwoI2ZvbGRlcl9zdmdfX2IpXFxcIi8+PHBhdGggZD1cXFwiTTY2LjY1NiA2Mi4zMTFoMzguNTMxYzEuNjcyIDAgMi45MDQgMCAzLjgzLjEzMy45Mi4xMzMgMS40OTkuMzkgMS44OTQuODc3LjM5NC40ODYuNTI4IDEuMTA2LjQ2NyAyLjAzNC0uMDYxLjkzMy0uMzE0IDIuMTQtLjY1OCAzLjc3NWwtNS44OTQgMjcuOTkyYy0uMjM1IDEuMTE3LS40MDggMS45MzgtLjYyMSAyLjU2Mi0uMjExLjYxOS0uNDU1IDEuMDIzLS44MTkgMS4zMTgtLjM2My4yOTUtLjgwOC40NS0xLjQ1OC41MjktLjY1NC4wOC0xLjQ5My4wODEtMi42MzQuMDgxSDUwLjE1N2MuOTItMS4xMDEgMS40MjItMi4yNDUgMS45MTctMy44NjEuMjI1LS43MzQuNDUtMS41NjguNzEyLTIuNTQybC4xNjgtLjYyMmMuMzM3LTEuMjQ4Ljc0Mi0yLjcxNCAxLjI4LTQuNDc0IDEuNTUyLTUuMDYgNS4xMDUtMTcuMjQzIDYuOTg4LTIzLjcyMi4yOTctMS4wMjEuNTE1LTEuNzcuNzU1LTIuMzM5LjIzOC0uNTYzLjQ5LS45My44NDItMS4xOTQuMzUyLS4yNjUuNzc0LS40MDQgMS4zODItLjQ3NS42MTItLjA3MiAxLjM5Mi0uMDcyIDIuNDU1LS4wNzJaXFxcIiBmaWxsPVxcXCIjQjlEREZGXFxcIiBzdHJva2U9XFxcInVybCgjZm9sZGVyX3N2Z19fYylcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjM5XFxcIi8+PHBhdGggZD1cXFwiTTY2LjY1NiA2Mi4zMTFoMzguNTMxYzEuNjcyIDAgMi45MDQgMCAzLjgzLjEzMy45Mi4xMzMgMS40OTkuMzkgMS44OTQuODc3LjM5NC40ODYuNTI4IDEuMTA2LjQ2NyAyLjAzNC0uMDYxLjkzMy0uMzE0IDIuMTQtLjY1OCAzLjc3NWwtNS44OTQgMjcuOTkyYy0uMjM1IDEuMTE3LS40MDggMS45MzgtLjYyMSAyLjU2Mi0uMjExLjYxOS0uNDU1IDEuMDIzLS44MTkgMS4zMTgtLjM2My4yOTUtLjgwOC40NS0xLjQ1OC41MjktLjY1NC4wOC0xLjQ5My4wODEtMi42MzQuMDgxSDUwLjE1N2MuOTItMS4xMDEgMS40MjItMi4yNDUgMS45MTctMy44NjEuMjI1LS43MzQuNDUtMS41NjguNzEyLTIuNTQybC4xNjgtLjYyMmMuMzM3LTEuMjQ4Ljc0Mi0yLjcxNCAxLjI4LTQuNDc0IDEuNTUyLTUuMDYgNS4xMDUtMTcuMjQzIDYuOTg4LTIzLjcyMi4yOTctMS4wMjEuNTE1LTEuNzcuNzU1LTIuMzM5LjIzOC0uNTYzLjQ5LS45My44NDItMS4xOTQuMzUyLS4yNjUuNzc0LS40MDQgMS4zODItLjQ3NS42MTItLjA3MiAxLjM5Mi0uMDcyIDIuNDU1LS4wNzJaXFxcIiBmaWxsPVxcXCJ1cmwoI2ZvbGRlcl9zdmdfX2QpXFxcIiBmaWxsLW9wYWNpdHk9XFxcIi44XFxcIiBzdHJva2U9XFxcInVybCgjZm9sZGVyX3N2Z19fZSlcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjM5XFxcIi8+PHBhdGggZD1cXFwiTTU1Ljk5MyA1MS44MjhoOC4zNTZhMS45MzMgMS45MzMgMCAwIDEgMCAzLjg2NmgtOC4zNTZhMS45MzMgMS45MzMgMCAxIDEgMC0zLjg2NlpcXFwiIGZpbGw9XFxcInVybCgjZm9sZGVyX3N2Z19fZilcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjlcXFwiIHN0cm9rZT1cXFwidXJsKCNmb2xkZXJfc3ZnX19nKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuMzEyXFxcIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmb2xkZXJfc3ZnX19hXFxcIiB4MT1cXFwiNzVcXFwiIHkxPVxcXCIwXFxcIiB4Mj1cXFwiNzVcXFwiIHkyPVxcXCIxNTBcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjRTNFQ0ZBXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjREFFN0ZGXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2JcXFwiIHgxPVxcXCI2Mi40MlxcXCIgeTE9XFxcIjU5LjM3NFxcXCIgeDI9XFxcIjEwNi41NTRcXFwiIHkyPVxcXCI3NS43MTlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjN0ZDMEZCXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNDA4OEY0XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2NcXFwiIHgxPVxcXCI0Ni41OTNcXFwiIHkxPVxcXCI2NC45NTFcXFwiIHgyPVxcXCI2OC43NDZcXFwiIHkyPVxcXCIxMTguMzcyXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2RcXFwiIHgxPVxcXCIxMDguNVxcXCIgeTE9XFxcIjk4XFxcIiB4Mj1cXFwiNDFcXFwiIHkyPVxcXCI5OS41XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI0I0RDRGN1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjEyOFxcXCIgc3RvcC1jb2xvcj1cXFwiIzhCQkRGQlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjI2MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzkxQzJGQlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc1OVxcXCIgc3RvcC1jb2xvcj1cXFwiIzlGQ0ZGRFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzlFQ0VGRFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmb2xkZXJfc3ZnX19lXFxcIiB4MT1cXFwiNDYuNTkzXFxcIiB5MT1cXFwiNjQuOTUxXFxcIiB4Mj1cXFwiNjguNzQ2XFxcIiB5Mj1cXFwiMTE4LjM3MlxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIi43NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmb2xkZXJfc3ZnX19mXFxcIiB4MT1cXFwiNTIuOTUyXFxcIiB5MT1cXFwiNTEuMzkzXFxcIiB4Mj1cXFwiNzAuMTA2XFxcIiB5Mj1cXFwiNTYuNDYxXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2dcXFwiIHgxPVxcXCI1MS43ODJcXFwiIHkxPVxcXCI1Mi41NjJcXFwiIHgyPVxcXCI2MC4xNzFcXFwiIHkyPVxcXCI1NS44NVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNjYgNjNcXFwiPjxwYXRoIGQ9XFxcIk0uODMgNTguOTFWMjguN2g4LjcyNXYzMC4yMUguODNabTM1LjAxNy0yLjkzYy0xLjk4MyAyLjQxNi00LjgzNSAzLjc3Ny04LjYxNSAzLjc3Ny02LjA3NiAwLTEwLjk3MS0zLjc3OC0xMC45NzEtOS42MDMgMC01Ljc2MyA0Ljg5OC04LjYxIDExLjc3Ny04Ljk4NSA1LjI3LS4zMSA2Ljk0My0uODY4IDYuOTQzLTIuNjYzIDAtMS43MzYtMS42MTEtMi45MTMtNC40NjMtMi45MTMtMy40NyAwLTQuOTYgMS43MzYtNS4xNDUgMy41OTRoLTguNDk0Yy40MzQtNi42MjggNS4zOTItMTEuMjE0IDEzLjcwMS0xMS4yMTQgOC4xMjIgMCAxMy4zMyA0LjM5OCAxMy4zMyAxMi42Mzd2MTguNDYzaC03LjI1NGwtLjgwOS0zLjA5NFptLTEwLjc4Ni02LjE5NWMwIDEuNzM2IDEuNTUgMi43ODggNC4wMyAyLjc4OCAzLjM0OCAwIDYuMDEyLTEuODU4IDYuMDEyLTUuNjM4VjQ1Ljgycy0xLjYxMS43NDMtNC45Ni45M2MtMy42NTguMTg1LTUuMDgyIDEuMzYyLTUuMDgyIDMuMDM1Wm0zOC4zMDcgOS40MTZjLTYuNjMyIDAtMTAuNDc3LTMuODQtMTAuNDc3LTEwLjUzM1YzNi44MzZoLTUuMDgzdi04LjExN2g1LjA4M3YtNC40NjFsOC44MDItNy40MzRWMjguNzJoNy42MjZ2OC4xMTdoLTcuNjI2VjQ3LjQzYzAgMi45MTIgMS45MjIgMy41OTMgMy43MiAzLjU5M2E5LjUzOSA5LjUzOSAwIDAgMCAzLjcyMS0uODA1djcuOTkyYzAgLjAwMi0yLjM1NS45OTItNS43NjYuOTkyWk0uMDggMTkuNjM0YzAtMi44NSAyLjIzLTUuMTQyIDUuMDgyLTUuMTQyYTUuMTMgNS4xMyAwIDAgMSA1LjE0NSA1LjE0MmMwIDIuNzg4LTIuMjkzIDUuMDgtNS4xNDUgNS4wOGE1LjA2MyA1LjA2MyAwIDAgMS01LjA4Mi01LjA4Wk03NS44MDkgNTguOTFWMjguN2g4LjcyNnYzMC4yMWgtOC43MjZabTIwLjE1NC0zOS4yMDJjMC0xLjQtLjE5LTIuNzYtLjUzNy00LjA1M2ExNS41MSAxNS41MSAwIDAgMC0xLjU2OS0zLjc3MiAxNS42NjUgMTUuNjY1IDAgMCAwLTIuNDg5LTMuMjQxIDE1LjczMiAxNS43MzIgMCAwIDAtNy4wMTgtNC4wNSAxNS42NTggMTUuNjU4IDAgMCAwLTQuMDUyLS41MzNoLS4wMDZhMTUuNzUgMTUuNzUgMCAwIDAtNC4wNDkuNTNjLTEuMzQuMzU3LTIuNjA1Ljg4OC0zLjc3NyAxLjU2NUExNS42NyAxNS42NyAwIDAgMCA2OS4yMiA4LjY0YTE1Ljc3IDE1Ljc3IDAgMCAwLTIuNDkyIDMuMjQyIDE1LjY0OCAxNS42NDggMCAwIDAtMS41NzIgMy43NzRsMi4yNDIuNjAyYTEzLjQyNyAxMy40MjcgMCAwIDEgMy40NjItNS45NzggMTMuNDI2IDEzLjQyNiAwIDAgMSA1Ljk4NC0zLjQ1IDEzLjQyNiAxMy40MjYgMCAwIDEgMy40NDgtLjQ1aC4wMDZjMS4xOTUgMCAyLjM1LjE1OCAzLjQ1NC40NTNhMTMuNDEyIDEzLjQxMiAwIDAgMSA1Ljk4IDMuNDQ5Yy44MTkuODIgMS41MzEgMS43NSAyLjExOSAyLjc2YTEzLjMgMTMuMyAwIDAgMSAxLjc5MyA2LjY2NHYuMDEyYTEzLjM4IDEzLjM4IDAgMCAxLS40NTEgMy40NDMgMTMuMjE3IDEzLjIxNyAwIDAgMS0xLjMzNCAzLjIxOWwyLjAxIDEuMTZhMTUuNTM5IDE1LjUzOSAwIDAgMCAxLjU2Ni0zLjc3OCAxNS43IDE1LjcgMCAwIDAgLjUzLTQuMDQxbC0uMDAyLS4wMTJaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTEwMC4wMjMgMTkuNzA4YTE5LjY1NSAxOS42NTUgMCAwIDAtMi42NDQtOS44NTUgMTkuODEgMTkuODEgMCAwIDAtNy4yMi03LjIxM0ExOS42MTIgMTkuNjEyIDAgMCAwIDg1LjQwMy42NyAxOS44MSAxOS44MSAwIDAgMCA4MC4yOTggMGgtLjAwNmMtMS43NjUgMC0zLjQ3My4yMzMtNS4xMDIuNjY2YTE5LjUxMyAxOS41MTMgMCAwIDAtNC43NTkgMS45NjkgMTkuODI0IDE5LjgyNCAwIDAgMC00LjA4NiAzLjEzNGwxLjIzMSAxLjIzYTE4LjEwNiAxOC4xMDYgMCAwIDEgMy43MjYtMi44NTUgMTcuODAzIDE3LjgwMyAwIDAgMSA0LjM0LTEuNzkzIDE4LjA4NCAxOC4wODQgMCAwIDEgNC42NDgtLjYwN2guMDA1YTE3Ljk1IDE3Ljk1IDAgMCAxIDEyLjcxMyA1LjI2MSAxNy45MzMgMTcuOTMzIDAgMCAxIDUuMjczIDEyLjcwM3YuMDExYTE4LjAzIDE4LjAzIDAgMCAxLS42MDcgNC42NDMgMTcuNjc1IDE3LjY3NSAwIDAgMS0xLjc5NyA0LjMzNyAxOC4wMjMgMTguMDIzIDAgMCAxLTIuODU3IDMuNzIzbDEuMjMxIDEuMjMxYTE5Ljc0MyAxOS43NDMgMCAwIDAgMy4xMzYtNC4wODQgMTkuNiAxOS42IDAgMCAwIDEuOTctNC43NTZjLjQzNC0xLjYyNS42NjYtMy4zMzIuNjY2LTUuMDk0di0uMDFaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTkwLjk0NSAxNi44NTVhMTAuOTQ4IDEwLjk0OCAwIDAgMC0xLjEwNC0yLjY1NSAxMS4xNTUgMTEuMTU1IDAgMCAwLTEuNzUtMi4yOCAxMS4wNDggMTEuMDQ4IDAgMCAwLTIuMjgyLTEuNzQ3QTEwLjk2NCAxMC45NjQgMCAwIDAgODAuMyA4LjY5NWgtLjAwNmMtLjk4NyAwLTEuOTQuMTMtMi44NDkuMzcyYTEwLjkxIDEwLjkxIDAgMCAwLTIuNjYgMS4xIDEwLjk5NCAxMC45OTQgMCAwIDAtNC4wMzcgNC4wMjcgMTEgMTEgMCAwIDAtMS40ODQgNS41MXYuMDEyYTEwLjkyNCAxMC45MjQgMCAwIDAgMS40NzYgNS41MDVsMy4wMTMtMS43MzhhNy41MzUgNy41MzUgMCAwIDEtMS4wMS0zLjc3di0uMDFhNy41NTMgNy41NTMgMCAwIDEgNy41NDgtNy41MzNoLjAwNmE3LjUyNCA3LjUyNCAwIDAgMSAzLjc2OSAxLjAxMiA3LjU1IDcuNTUgMCAwIDEgMy41MTMgNC41NzJjLjE2Ny42Mi4yNTggMS4yNzYuMjU4IDEuOTUxaDMuNDc5Yy4wMDMtLjk4NC0uMTI4LTEuOTQtLjM3Mi0yLjg1WlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk04Ny41ODUgMTcuNzY1YTcuNTQyIDcuNTQyIDAgMCAwLTEuOTU1LTMuMzhsLTEuNjQgMS42MzlhNS4yNjQgNS4yNjQgMCAwIDEgMS4zNTQgMi4zNDMgNS4xODQgNS4xODQgMCAwIDEgMCAyLjcwNSA1LjIzOSA1LjIzOSAwIDAgMS0zLjY5OCAzLjY5NSA1LjE5NSA1LjE5NSAwIDAgMS0yLjcwNyAwIDUuMjk2IDUuMjk2IDAgMCAxLTEuMjYtLjUyMWwtMS4xNiAyLjAwOGE3LjUyOCA3LjUyOCAwIDAgMCAzLjc3NCAxLjAxYy42NzcgMCAxLjMzLS4wOTEgMS45NTQtLjI1NmE3LjU1MyA3LjU1MyAwIDAgMCA0LjU4NC0zLjUxNyA3LjU0NCA3LjU0NCAwIDAgMCAxLjAxMy0zLjc3MSA3LjUgNy41IDAgMCAwLS4yNTktMS45NTVaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIi8+PHBhdGggZD1cXFwiTTkxLjg1MyAxMy4wNDZhMTMuNDM1IDEzLjQzNSAwIDAgMC0yLjEyLTIuNzY1IDEzLjM0MyAxMy4zNDMgMCAwIDAtMi43NjYtMi4xMTggMTMuMjg3IDEzLjI4NyAwIDAgMC02LjY3NS0xLjc5Yy0xLjE5NyAwLTIuMzUyLjE1OS0zLjQ1Ni40NTQtMS4xNDEuMzAzLTIuMjIuNzU3LTMuMjE4IDEuMzM2YTEzLjQzNiAxMy40MzYgMCAwIDAtMi43NjcgMi4xMTggMTMuMzM0IDEzLjMzNCAwIDAgMC0yLjEyIDIuNzY1IDEzLjI3MiAxMy4yNzIgMCAwIDAtMS43OSA2LjY3aDIuMzJjMC0uOTg2LjEzMS0xLjk0Mi4zNzUtMi44NTJhMTEuMDg4IDExLjA4OCAwIDAgMSAyLjg1NS00Ljk0IDExLjAwMiAxMS4wMDIgMCAwIDEgMi4yODQtMS43NSAxMS4wMyAxMS4wMyAwIDAgMSAyLjY2LTEuMTA0IDExLjAyIDExLjAyIDAgMCAxIDIuODU0LS4zNzRjLjk4OCAwIDEuOTQ0LjEzIDIuODU1LjM3NGExMS4wOTkgMTEuMDk5IDAgMCAxIDQuOTQzIDIuODUzIDEwLjk5IDEwLjk5IDAgMCAxIDEuNzUxIDIuMjgzYy40NzcuODI2Ljg1MiAxLjcxNiAxLjEwNCAyLjY1OGwyLjI0Mi0uNjAyYTEzLjE5NCAxMy4xOTQgMCAwIDAtMS4zMy0zLjIxNlpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiLz48cGF0aCBkPVxcXCJNOTcuNjc0IDE1LjA2M2ExNy43OTEgMTcuNzkxIDAgMCAwLTEuOC00LjMzNiAxOC4wNDMgMTguMDQzIDAgMCAwLTYuNTg2LTYuNTgzIDE3LjkzIDE3LjkzIDAgMCAwLTguOTk2LTIuNDA4Yy0xLjYxMiAwLTMuMTcyLjIxMy00LjY1Ny42MWExNy44MTcgMTcuODE3IDAgMCAwLTQuMzM5IDEuNzk4IDE4LjAzMiAxOC4wMzIgMCAwIDAtNi41ODYgNi41ODNsMi4wMTIgMS4xNjNhMTUuNjc2IDE1LjY3NiAwIDAgMSAyLjQ4OS0zLjI0NWMuOTY1LS45NjQgMi4wNTctMS44IDMuMjQ2LTIuNDg3YTE1LjcwNiAxNS43MDYgMCAwIDEgMy43NzctMS41NjkgMTUuNjggMTUuNjggMCAwIDEgOC4xMSAwYzEuMzQuMzU4IDIuNjA2Ljg5MSAzLjc3OCAxLjU2OWExNS42ODUgMTUuNjg1IDAgMCAxIDMuMjQ2IDIuNDg3IDE1LjY3NiAxNS42NzYgMCAwIDEgMi40ODkgMy4yNDUgMTUuNjg0IDE1LjY4NCAwIDAgMSAxLjU2OSAzLjc3NCAxNS42NTQgMTUuNjU0IDAgMCAxIDAgOC4xMDZsMi4yNDUuNjAxYy4zOTctMS40ODMuNjEtMy4wNDMuNjEtNC42NTRhMTcuODc1IDE3Ljg3NSAwIDAgMC0uNjA4LTQuNjU0WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIvPjxwYXRoIGQ9XFxcIk04MC4yOTMgMjQuOTQ0YzIuODg4IDAgNS4yMy0yLjM0IDUuMjMtNS4yMjdhNS4yMjkgNS4yMjkgMCAwIDAtNS4yMy01LjIyNyA1LjIyOCA1LjIyOCAwIDAgMC01LjIzIDUuMjI3IDUuMjI4IDUuMjI4IDAgMCAwIDUuMjMgNS4yMjdabTIwLjYxNSAxNS40MzZWMjkuNTQzaDIuMzA0VjQwLjM4aC0yLjMwNFptNi42MTgtMy43ODd2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTM5IDIuNTM5IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDMzLjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTkuNjY2IDMuODE3Yy0xLjY1NSAwLTIuNjE0LS45NTgtMi42MTQtMi42Mjh2LTIuOTUzaC0xLjI2OHYtMi4wMjVoMS4yNjh2LTEuMTExbDIuMTk2LTEuODU1djIuOTdoMS45MDJ2Mi4wMjRoLTEuOTAydjIuNjQzYzAgLjcyNy40OC44OTcuOTI4Ljg5Ny41MTEgMCAuOTI4LS4yMDIuOTI4LS4yMDJ2MS45OTRzLS41ODcuMjQ3LTEuNDM4LjI0N1ptMTAuMTkzLTMuMjNoLTUuMzUyYy4xMjUuNzc1Ljc1NyAxLjM2MiAxLjcgMS4zNjIuNjM1IDAgMS4wMDQtLjI2NCAxLjIzNy0uNjVoMi4zNjdjLS41MTEgMS42NC0xLjY4NiAyLjY2LTMuNTczIDIuNjYtMi4xOTcgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYwOS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OSAwIDMuNzU3IDEuOTYzIDMuNzU3IDMuOTg4IDAgLjE5OC0uMDE0LjU3LS4wMTQuNTdabS0zLjcxNS0yLjYyOGMtLjgzNCAwLTEuMzkzLjUxLTEuNTMyIDEuMTZoMi45NGMtLjA0Ni0uNjY0LS42MTktMS4xNi0xLjQwOC0xLjE2Wm0xMC4yMzktMS4zMTV2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5N3YtNy41NzVoMi4xNjV2LjYzNWMtLjAxNCAwIC40MzUtLjc0MyAxLjUxNi0uNzQzLjkyOCAwIDEuMzYyLjU0MiAxLjM2Mi41NDJabTMuNDAzIDMuMzU2djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjV2LjUyNWEyLjU0MyAyLjU0MyAwIDAgMSAxLjc5NC0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDYgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk3di00LjIzNWMwLS44MDItLjM3MS0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzNi4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptMTEuMTY2IDMuMDE1Yy0uNDk2LjYwNC0xLjIwNi45NDUtMi4xNTEuOTQ1LTEuNTE1IDAtMi43MzgtLjk0NS0yLjczOC0yLjM5NyAwLTEuNDM4IDEuMjItMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTMtLjcyNi0uODY1IDAtMS4yMzcuNDM0LTEuMjg1Ljg5NmgtMi4xMmMuMTA4LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDItMi43OTkgMi4wMjYgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNmgtMS44MTFsLS4xOTktLjc3NVptLTIuNjkzLTEuNTQ1YzAgLjQzNC4zODYuNjk0IDEuMDA1LjY5NC44MzQgMCAxLjUwMS0uNDYyIDEuNTAxLTEuNDA2di0uMjc4cy0uNDAzLjE4NC0xLjIzNy4yMzJjLS45MTQuMDQ2LTEuMjY5LjM0LTEuMjY5Ljc1OFptOS41NTggMi4zNDdjLTEuNjU1IDAtMi42MTQtLjk1OC0yLjYxNC0yLjYyOHYtMi45NTNoLTEuMjY5di0yLjAyNWgxLjI2OXYtMS4xMTFsMi4xOTYtMS44NTV2Mi45N2gxLjkwMnYyLjAyNGgtMS45MDJ2Mi42NDNjMCAuNzI3LjQ4Ljg5Ny45MjguODk3LjUxMSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU5LjI0Ny0xLjQzOC4yNDdabTIuOTUxLTkuNzUzYzAtLjcxMi41NTYtMS4yODIgMS4yNjgtMS4yODIuNzEzIDAgMS4yODYuNTczIDEuMjg2IDEuMjgyIDAgLjY5NS0uNTczIDEuMjY4LTEuMjg2IDEuMjY4YTEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjJ2LTcuNTc1aDIuMTk3djcuNTc1aC0yLjE5N1ptMy43ODktMy43ODZjMC0yLjI3MiAxLjc0OC0zLjk3NCA0LjAzOC0zLjk3NHM0LjAzNSAxLjcwMiA0LjAzNSAzLjk3NGMwIDIuMjcxLTEuNzQ4IDMuOTU2LTQuMDM1IDMuOTU2LTIuMjkgMC00LjAzOC0xLjY4NS00LjAzOC0zLjk1NlptMi4yNDUgMGMwIDEuMTExLjc1NyAxLjkxNyAxLjc5MyAxLjkxN3MxLjc5NC0uODAzIDEuNzk0LTEuOTE3YzAtMS4xMTItLjc1OC0xLjkxOC0xLjc5NC0xLjkxOHMtMS43OTMuODAzLTEuNzkzIDEuOTE4Wm05LjU0IDB2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTQgMi41NCAwIDAgMSAxLjc5My0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDYgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk2di00LjIzNWMwLS44MDItLjM3Mi0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzNi4wMDMtMS4zOTEuNzc0LTEuMzkxIDEuOTM0Wm0xMS4xNjcgMy4wMTVjLS40OTcuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTYgMC0yLjczOS0uOTQ1LTIuNzM5LTIuMzk3IDAtMS40MzggMS4yMjEtMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTItLjcyNi0uODY2IDAtMS4yMzcuNDM0LTEuMjg2Ljg5NmgtMi4xMTljLjEwNy0xLjY1MyAxLjM0NS0yLjc5OSAzLjQxOS0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA2aC0xLjgxbC0uMTk5LS43NzVabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NCAxLjAwNC42OTQuODM1IDAgMS41MDItLjQ2MiAxLjUwMi0xLjQwNnYtLjI3OHMtLjQwMy4xODQtMS4yMzguMjMyYy0uOTExLjA0Ni0xLjI2OC4zNC0xLjI2OC43NThabTYuNTI0IDIuMzE3VjI5LjU0M2gyLjE5NlY0MC4zOGgtMi4xOTZabTE0LjA4OS0xMC44MzcgNC4yNCAxMC44MzdoLTIuMzgxbC0uODY2LTIuMTMzaC00LjE5MWwtLjg1MSAyLjEzM2gtMi4zODFsNC4yMzktMTAuODM3aDIuMTkxWm0tMS4wOTggMy4xMjMtMS4zNDUgMy41MzloMi42OWwtMS4zNDUtMy41NFptNi4zODUtMi4wMDljMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OS0xLjI4Mi43MTIgMCAxLjI4NS41NzMgMS4yODUgMS4yODIgMCAuNjk1LS41NzMgMS4yNjgtMS4yODUgMS4yNjhhMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjktMS4yNjhabS4xNyA5LjcyMnYtNy41NzVoMi4xOTd2Ny41NzVoLTIuMTk3Wm0zLjc4OS0zLjc4NmMwLTIuMzk2IDEuNzE2LTMuOTczIDMuODE5LTMuOTczLjg2NiAwIDEuNTkyLjMyMyAxLjk4MS42NjR2LTMuNzQxaDIuMTk2VjQwLjM4aC0yLjE2NXYtLjU0MmMtLjQuMzg2LTEuMTYuNzEyLTIuMDA5LjcxMi0yLjEwNiAwLTMuODIyLTEuNTE1LTMuODIyLTMuOTU2Wm01LjgzMSAwYzAtMS4xNzQtLjc3Mi0xLjk4LTEuNzkzLTEuOTgtMS4wMjIgMC0xLjc5NC44MDMtMS43OTQgMS45OCAwIDEuMTc1Ljc3MiAxLjk4IDEuNzk0IDEuOTggMS4wMjEgMCAxLjc5My0uODA1IDEuNzkzLTEuOThaTTEwMC4xOTYgNDguMDloOC41MjJ2Mi4xMThoLTMuMTF2OC43MTloLTIuMzA0di04LjcxOWgtMy4xMTFWNDguMDloLjAwM1ptMTMuODg4IDMuNjkydjIuMTY0cy0uNTczLS41ODctMS40MzktLjU4N2MtLjY2NCAwLTEuNDA3LjM1NC0xLjQwNyAxLjQ2OXY0LjA5NWgtMi4xOTZ2LTcuNTc1aDIuMTY1di42MzVjLS4wMTQgMCAuNDM0LS43NDMgMS41MTUtLjc0My45MzEuMDAzIDEuMzYyLjU0MiAxLjM2Mi41NDJabTUuODkxIDYuMzcxYy0uNDk2LjYwNC0xLjIwNi45NDUtMi4xNTEuOTQ1LTEuNTE1IDAtMi43MzgtLjk0NS0yLjczOC0yLjM5NyAwLTEuNDM4IDEuMjItMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTItLjcyNi0uODY2IDAtMS4yMzguNDM0LTEuMjg2Ljg5NmgtMi4xMmMuMTA4LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDItMi43OTkgMi4wMjYgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNWgtMS44MTFsLS4xOTktLjc3NFptLTIuNjktMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDUuNjk1LjgzNCAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm04LjcyMS0xLjQ3djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjV2LjUyNWEyLjU0IDIuNTQgMCAwIDEgMS43OTQtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA1IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5N3YtNC4yMzVjMC0uODAyLS4zNzEtMS40ODMtMS4yNTQtMS40ODMtMS4wMzMuMDAzLTEuMzkuNzc0LTEuMzkgMS45MzRabTEwLjc5NSAxLjYwN2MwLS4yMzItLjEzOS0uNDE2LS43NDQtLjU0MWwtMS4xNDMtLjIzM2MtMS43MTctLjM0LTIuNDQ0LTEuMTYtMi40NDQtMi4yODggMC0xLjMzIDEuMDA1LTIuNTE5IDMuMDk0LTIuNTE5IDIuMTAyIDAgMy4wNDcgMS4xNzQgMy4yMDEgMi40OWgtMi4wODljLS4xMjUtLjQxNy0uNDgtLjY2NC0xLjEyOS0uNjY0LS42MTkgMC0uOTYuMjE2LS45Ni41MjUgMCAuMjMzLjE4NS4zNzIuNzU4LjQ4bDEuMTQ0LjIzMmMxLjYyMy4zMjMgMi40MjkgMS4wODMgMi40MjkgMi4zOCAwIDEuNDY5LTEuMDY3IDIuNDktMy4xODcgMi40OS0yLjE2NSAwLTMuMzI2LTEuMDIxLTMuNTQyLTIuNTk4aDIuMjE0Yy4xMjUuNTI0LjUxMS44MDIgMS4zMjguODAyLjc0NiAwIDEuMDctLjIxNSAxLjA3LS41NTZabTExLjU1Mi0xLjYwOGMwIDIuMzk3LTEuNzE3IDMuOTU3LTMuODE5IDMuOTU3LS44NjYgMC0xLjU5Mi0uMzEtMS45ODEtLjY1djMuNDc3aC0yLjE5N1Y1MS4zNDhoMi4xNjZ2LjU0MmMuNDAzLS4zODYgMS4xNi0uNzI2IDIuMDEyLS43MjYgMi4xMDIgMCAzLjgxOSAxLjUxNyAzLjgxOSAzLjk3M1ptLTUuODMxIDBjMCAxLjE3NS43NzQgMS45OCAxLjc5MyAxLjk4IDEuMDIyIDAgMS43OTQtLjgwMyAxLjc5NC0xLjk4IDAtMS4xNzQtLjc3Mi0xLjk4LTEuNzk0LTEuOTgtMS4wMTkuMDA0LTEuNzkzLjgwNi0xLjc5MyAxLjk4Wm0xMS44NzkgMy4wMTZjLS40OTcuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTYgMC0yLjczOS0uOTQ1LTIuNzM5LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzNy40MzQtMS4yODYuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDYtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxMWwtLjE5OC0uNzc0Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDQuNjk1LjgzNSAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxMS4wNDYtMS4yNjguMzQtMS4yNjguNzU4Wm0xMS41NjYtNC44MjZ2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5N3YtNy41NzVoMi4xNjZ2LjYzNWMtLjAxNSAwIC40MzQtLjc0MyAxLjUxNS0uNzQzLjkyOC4wMDMgMS4zNjIuNTQyIDEuMzYyLjU0MlptOC40MjggMy45NDRoLTUuMzUyYy4xMjUuNzc0Ljc1OCAxLjM2IDEuNzAzIDEuMzYuNjM2IDAgMS4wMDUtLjI2MyAxLjIzNy0uNjQ5aDIuMzY3Yy0uNTExIDEuNjQtMS42ODYgMi42Ni0zLjU3MyAyLjY2LTIuMTk2IDAtMy45NTktMS41My0zLjk1OS0zLjkxIDAtMi4yODkgMS42MS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OSAwIDMuNzU3IDEuOTYzIDMuNzU3IDMuOTg4IDAgLjItLjAxNy41Ny0uMDE3LjU3Wm0tMy43MTEtMi42MjdjLS44MzUgMC0xLjM5NC41MS0xLjUzMyAxLjE2aDIuOTRjLS4wNDUtLjY2Ni0uNjE5LTEuMTYtMS40MDctMS4xNlptNy4zOTIgMi4wMzl2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTM4IDIuNTM4IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNSAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTExLjU2Ny44MzdoMi40MTJjLS4zNTcgMS44NC0xLjc0OCAzLjEyMy0zLjc5MSAzLjEyMy0yLjI5IDAtMy45OS0xLjY4NS0zLjk5LTMuOTU3IDAtMi4yNzEgMS43MDMtMy45NzMgMy45OS0zLjk3MyAxLjk5NSAwIDMuMzg4IDEuMjM2IDMuNjY2IDMuMDI5aC0yLjQxNWMtLjE3LS41NzMtLjY2NC0uOTU5LTEuMzI4LS45NTktLjkyOCAwLTEuNjcxLjc4OS0xLjY3MSAxLjkgMCAxLjExMi43NDMgMS45IDEuNzAzIDEuOS43MTIuMDA0IDEuMjQtLjQxNiAxLjQyNC0xLjA2M1ptNS4xMDIgNi4wMjdjLS45OSAwLTEuNDg0LS4yNjQtMS40ODQtLjI2NHYtMi4wMXMuNDQ4LjIzMi45MjguMjMyYy40OTYgMCAxLjE0My0uMTg0IDEuMjk5LTEuMDM1bC0yLjk1NC03LjU3NWgyLjQ0NGwxLjcxNyA0LjY5OSAxLjc0OC00LjdoMi4zNDlsLTMuMDc5IDcuN2MtLjgwMyAyLjAyNi0xLjQ1MyAyLjk1My0yLjk2OCAyLjk1M1ptMTEuNTk4LTMuMDc1VjQ4LjA5aDIuMzA1djEwLjgzN2gtMi4zMDVabTYuNjE4LTMuNzg5djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjZ2LjUyNWEyLjUzOCAyLjUzOCAwIDAgMSAxLjc5My0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDUgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk2di00LjIzNWMwLS44MDItLjM3Mi0xLjQ4My0xLjI1NS0xLjQ4My0xLjAzMy4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptNi41NDEtNS45MzZjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4MnMxLjI4Ni41NzMgMS4yODYgMS4yODJhMS4yOCAxLjI4IDAgMCAxLTEuMjg2IDEuMjY4IDEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk2djcuNTc1aC0yLjE5NlptNy4yNTQuMDI5Yy0xLjY1NSAwLTIuNjE0LS45NTktMi42MTQtMi42M3YtMi45NTJoLTEuMjY4VjUxLjM1aDEuMjY4di0xLjExMWwyLjE5Ni0xLjg1NXYyLjk3aDEuOTAydjIuMDI0aC0xLjkwMnYyLjY0M2MwIC43MjYuNDguODk3LjkyOC44OTcuNTExIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTg3LjI0Ny0xLjQzOC4yNDdabTIuOTU0LTkuNzU0YzAtLjcxMi41NTYtMS4yODIgMS4yNjgtMS4yODJzMS4yODYuNTczIDEuMjg2IDEuMjgyYTEuMjggMS4yOCAwIDAgMS0xLjI4NiAxLjI2OCAxLjI2NCAxLjI2NCAwIDAgMS0xLjI2OC0xLjI2OFptLjE3IDkuNzI1di03LjU3NWgyLjE5NnY3LjU3NWgtMi4xOTZabTguNzU0LS43NzRjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMy0uNzI2LS44NjUgMC0xLjIzNy40MzQtMS4yODUuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40MTktMi43OTkgMi4wMjcgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNWgtMS44MWwtLjE5OS0uNzc0Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDUuNjk1LjgzNCAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm05LjU1OCAyLjM0OGMtMS42NTUgMC0yLjYxNC0uOTU5LTIuNjE0LTIuNjN2LTIuOTUyaC0xLjI2OFY1MS4zNWgxLjI2OHYtMS4xMTFsMi4xOTctMS44NTV2Mi45N2gxLjkwMXYyLjAyNGgtMS45MDF2Mi42NDNjMCAuNzI2LjQ3OS44OTcuOTI4Ljg5Ny41MSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU4OC4yNDctMS40MzkuMjQ3Wm0yLjk1MS05Ljc1NGMwLS43MTIuNTU2LTEuMjgyIDEuMjY5LTEuMjgyLjcxMiAwIDEuMjg1LjU3MyAxLjI4NSAxLjI4MiAwIC42OTUtLjU3MyAxLjI2OC0xLjI4NSAxLjI2OGExLjI2NCAxLjI2NCAwIDAgMS0xLjI2OS0xLjI2OFptLjE3IDkuNzI1di03LjU3NWgyLjE5N3Y3LjU3NWgtMi4xOTdabTEwLjk4My03LjU3NS0yLjY5MSA3LjU3NWgtMi4yNThsLTIuNjkxLTcuNTc1aDIuMzM2bDEuNDg0IDQuNjg1IDEuNDg0LTQuNjg1aDIuMzM2Wm03Ljk4IDQuMzc0aC01LjM1MmMuMTI1Ljc3NC43NTcgMS4zNiAxLjcwMiAxLjM2LjYzNiAwIDEuMDA1LS4yNjMgMS4yMzgtLjY0OWgyLjM2NmMtLjUxIDEuNjQtMS42ODUgMi42Ni0zLjU3MiAyLjY2LTIuMTk3IDAtMy45NTktMS41My0zLjk1OS0zLjkxIDAtMi4yODkgMS42MDktNC4wMTkgMy44MzctNC4wMTkgMi40ODggMCAzLjc2IDEuOTYzIDMuNzYgMy45ODgtLjAwNi4yLS4wMi41Ny0uMDIuNTdabS0zLjcxMi0yLjYyN2MtLjgzNCAwLTEuMzkzLjUxLTEuNTMyIDEuMTZoMi45NGMtLjA0OS0uNjY2LS42MTktMS4xNi0xLjQwOC0xLjE2WlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCA5NTAgMjkyXFxcIj48ZyBvcGFjaXR5PVxcXCIuM1xcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjRcXFwiIGQ9XFxcIk0zOTMuMzgzIDUzNy41OTJhMjEzLjA1OCAyMTMuMDU4IDAgMCAxLTU1LjEzMy03LjI0OGMtMTguMTk2LTQuODYtMzUuNDE5LTEyLjA5LTUxLjM0Ny0yMS4zMTYtMTYuMTY2LTkuMzQ1LTMxLjAwMy0yMC43MDMtNDQuMTE3LTMzLjgxNy0xMy4xMTMtMTMuMTEzLTI0LjQ3MS0yNy45NjctMzMuODE2LTQ0LjExNmEyMTEuODI2IDIxMS44MjYgMCAwIDEtMjEuMzE3LTUxLjM0NyAyMTIuOTA2IDIxMi45MDYgMCAwIDEtNy4yNDctNTUuMTMzIDIxMy4wOSAyMTMuMDkgMCAwIDEgNy4yNDctNTUuMTMzYzQuODYxLTE4LjE5NiAxMi4wOTEtMzUuNDIgMjEuMzE3LTUxLjM0OGw1Ni42ODUgMzIuNzI1YTE0Ny4yMDMgMTQ3LjIwMyAwIDAgMC0xNC43NjggMzUuNTczIDE0Ny41MzEgMTQ3LjUzMSAwIDAgMC01LjAxNCAzOC4xODMgMTQ3LjUzIDE0Ny41MyAwIDAgMCA1LjAxNCAzOC4xODIgMTQ2LjUyNyAxNDYuNTI3IDAgMCAwIDE0Ljc2OCAzNS41NzNjNi40OCAxMS4xODcgMTQuMzQxIDIxLjQ3IDIzLjQzMSAzMC41NTkgOS4wODkgOS4wODkgMTkuMzcyIDE2Ljk1MSAzMC41NTkgMjMuNDMxYTE0Ny4yMDMgMTQ3LjIwMyAwIDAgMCAzNS41NzMgMTQuNzY4IDE0Ny42MjcgMTQ3LjYyNyAwIDAgMCAzOC4xODIgNS4wMTRjMTMuMiAwIDI2LjAwNi0xLjc1NyAzOC4xODItNS4wMTRhMTQ2LjQ5NCAxNDYuNDk0IDAgMCAwIDM1LjU3My0xNC43NjhjMTEuMTg3LTYuNDggMjEuNDctMTQuMzQyIDMwLjU2LTIzLjQzMWw0Ni4yODIgNDYuMjgyYy0xMy4xMTQgMTMuMTE0LTI3Ljk2NyAyNC40NzItNDQuMTE3IDMzLjgxN2EyMTEuNzUgMjExLjc1IDAgMCAxLTUxLjM0NyAyMS4zMTYgMjEzLjI4IDIxMy4yOCAwIDAgMS01NS4xNSA3LjI0OFpNNTgxLjY2OCA2NTAuNzRjMjguNTgxLTE2LjUyNCA1NC44MjYtMzYuNjEzIDc4LjAxOC01OS44MDUgMjMuMTkyLTIzLjE5MyA0My4yODEtNDkuNDU1IDU5LjgwNi03OC4wMTkgMTYuMzAzLTI4LjE3MiAyOS4wNzUtNTguNjI5IDM3LjY4Ny05MC44MDhhMzc2LjU5MiAzNzYuNTkyIDAgMCAwIDEyLjgwNy05Ny40NzYgMzc3LjIzIDM3Ny4yMyAwIDAgMC0xMi44MDctOTcuNDc3Yy04LjU5NS0zMi4xNzktMjEuMzg0LTYyLjYzNi0zNy42ODctOTAuODA4LTE2LjU0Mi0yOC41ODEtMzYuNjE0LTU0LjgyNi01OS44MDYtNzguMDE4LTIzLjE5Mi0yMy4xOTMtNDkuNDU0LTQzLjI4MS03OC4wMTgtNTkuODA2LTI4LjE3Mi0xNi4zMDMtNTguNjI5LTI5LjA5My05MC44MDktMzcuNjg3YTM3Ni41OTIgMzc2LjU5MiAwIDAgMC05Ny40NzYtMTIuODA3djY1LjQ1YzI3Ljg2NSAwIDU0Ljg0MyAzLjcxNyA4MC41NDMgMTAuNTkgMjYuNTg1IDcuMTExIDUxLjczOSAxNy42NjcgNzUuMDE3IDMxLjEzOSAyMy42MDEgMTMuNjYgNDUuMzEgMzAuMjUyIDY0LjQ2MSA0OS40MiAxOS4xNjcgMTkuMTY4IDM1Ljc2IDQwLjg2IDQ5LjQyIDY0LjQ2MSAxMy40NzIgMjMuMjc4IDI0LjAyOCA0OC40MzEgMzEuMTM5IDc1LjAxN2EzMTEuMjY2IDMxMS4yNjYgMCAwIDEgMTAuNTkgODAuNTQzYzAgMjcuODY1LTMuNzE3IDU0Ljg0My0xMC41OSA4MC41NDItNy4xMTEgMjYuNTg2LTE3LjY2NyA1MS43MzktMzEuMTM5IDc1LjAxNy0xMy42NiAyMy42MDItMzAuMjUzIDQ1LjMxLTQ5LjQyIDY0LjQ2MS0xOS4xNTEgMTkuMTUxLTQwLjg2IDM1Ljc2MS02NC40NjEgNDkuNDItMjMuMjc4IDEzLjQ3Mi00OC40MzIgMjQuMDI4LTc1LjAxNyAzMS4xMzlsMTYuOTMzIDYzLjIzNGMzMi4xOTctOC42NDYgNjIuNjM3LTIxLjQxOSA5MC44MDktMzcuNzIyWm0tNTYuOTA3IDE2NC4xODhhNTA0LjMxMiA1MDQuMzEyIDAgMCAwIDEyMi40MjUtNTAuNzMzIDUxMC40IDUxMC40IDAgMCAwIDEwNS4wODItODAuNzEzQTUwOS4yMjYgNTA5LjIyNiAwIDAgMCA4MzIuOTgxIDU3OC40YTUwNC43MyA1MDQuNzMgMCAwIDAgNTAuNzMzLTEyMi40MjVjMTEuMjA0LTQxLjkxNiAxNy4yMDctODUuOTQ4IDE3LjIwNy0xMzEuMzc3IDAtNDUuNDQ3LTYuMDAzLTg5LjQ3OS0xNy4yMDctMTMxLjM3OGE1MDQuMzQzIDUwNC4zNDMgMCAwIDAtNTAuNzMzLTEyMi40MjVDODEwLjcwOSAzMi4yODggNzgzLjUwOS0zLjAzIDc1Mi4yNjgtMzQuMjg3QTUwOS4yMTcgNTA5LjIxNyAwIDAgMCA2NDcuMTg2LTExNWwtMzIuNzkzIDU2Ljc4N2MzMy41NDMgMTkuNDA3IDY0LjM1OSA0Mi45OTEgOTEuNTkyIDcwLjIwOCAyNy4yMTcgMjcuMjE3IDUwLjgwMiA1OC4wNSA3MC4yMDkgOTEuNTc2IDE5LjEzMyAzMy4wNjYgMzQuMTQgNjguODEgNDQuMjM2IDEwNi41ODIgOS43NTQgMzYuNTExIDE1LjA0MSA3NC44NDcgMTUuMDQxIDExNC40MjggMCAzOS41OC01LjI3IDc3LjkxNi0xNS4wNDEgMTE0LjQyNi0xMC4wOTYgMzcuNzczLTI1LjEwMyA3My41MTctNDQuMjM2IDEwNi41ODMtMTkuNDA3IDMzLjU0NC00Mi45OTIgNjQuMzU5LTcwLjIwOSA5MS41NzYtMjcuMjE2IDI3LjIxNy01OC4wNDkgNTAuODAxLTkxLjU5MiA3MC4yMDgtMzMuMDY2IDE5LjEzNC02OC44MSAzNC4xNC0xMDYuNTgzIDQ0LjIzNi0zNi41MTEgOS43NTQtNzQuODQ2IDE1LjA0MS0xMTQuNDI3IDE1LjA0MS0zOS41OCAwLTc3LjkxNi01LjI4Ny0xMTQuNDI3LTE1LjA0MWwtMTYuOTUxIDYzLjI4NGM0MS45IDExLjIwNCA4NS45MzEgMTcuMjA3IDEzMS4zNzggMTcuMjA3IDQ1LjQ0Ny4wMzQgODkuNDc4LTUuOTY5IDEzMS4zNzgtMTcuMTczWlxcXCIgZmlsbD1cXFwidXJsKCNncm91cF9zdmdfX2EpXFxcIi8+PHBhdGggZD1cXFwiTTM5My4zODMgNzY2LjY4NmE0NDIuNDg5IDQ0Mi40ODkgMCAwIDEtMTE0LjEwMy0xNC45MzhjLTM3Ljc3My0xMC4wNjItNzMuNTE2LTI1LjA1Mi0xMDYuNTk5LTQ0LjE1MWwzMi43MjUtNTYuNjg1YzI4LjE4OSAxNi4yNjkgNTguNjQ2IDI5LjAyNCA5MC44MjUgMzcuNjAyYTM3Ny4xMjYgMzc3LjEyNiAwIDAgMCA5Ny4xNTIgMTIuNzIyaC4zMDdhMzc2Ljk1OCAzNzYuOTU4IDAgMCAwIDk3LjQyNS0xMi44NzVjMzIuMTQ2LTguNjEyIDYyLjU2OC0yMS40MDIgOTAuNzIzLTM3LjcwNSAyOC41NDctMTYuNTI0IDU0Ljc3NS0zNi42MTMgNzcuOTMzLTU5Ljc4OCAyMy4xNTktMjMuMTc2IDQzLjIzLTQ5LjQwNCA1OS43NTUtNzcuOTUxIDE2LjI4Ni0yOC4xNTQgMjkuMDU5LTU4LjU2IDM3LjY3LTkwLjcyM2EzNzYuNTc1IDM3Ni41NzUgMCAwIDAgMTIuODI0LTk3LjM5di0uMTg4YzAtMzMuNjI5LTQuNDY3LTY2LjIwMS0xMi43MzgtOTcuMjM3LTguNTc4LTMyLjE2My0yMS4zMzQtNjIuNjAzLTM3LjYwMy05MC43NzUtMTYuNTA3LTI4LjU4MS0zNi41NjItNTQuODQzLTU5LjcyLTc4LjAzNS0yMy4xNzUtMjMuMjEtNDkuNDAzLTQzLjMzMi03Ny45NS01OS44OTEtMjguMTcyLTE2LjMzNy01OC42MTItMjkuMTQ0LTkwLjc3NC0zNy43NzNsMTYuOTMzLTYzLjIzM2MzNy43NzMgMTAuMTMgNzMuNSAyNS4xNTMgMTA2LjU2NiA0NC4zMjEgMzMuNTI3IDE5LjQyNCA2NC4zMDggNDMuMDQyIDkxLjUwNyA3MC4yNzYgMjcuMTgzIDI3LjIzNCA1MC43NTEgNTguMDY3IDcwLjEyMyA5MS42MSAxOS4xIDMzLjA2NiAzNC4wNzIgNjguNzkzIDQ0LjE1MSAxMDYuNTY2YTQ0Mi4yOCA0NDIuMjggMCAwIDEgMTQuOTczIDExNC4xNzF2LjE4OGE0NDIuNzg0IDQ0Mi43ODQgMCAwIDEtMTUuMDU4IDExNC4zNDFjLTEwLjA5NiAzNy43MzktMjUuMDg2IDczLjQ0OC00NC4yMTkgMTA2LjQ5Ny0xOS4zOSAzMy41MS00Mi45NTcgNjQuMzA4LTcwLjE0IDkxLjUyNS0yNy4yIDI3LjItNTcuOTgxIDUwLjc4NC05MS40OTEgNzAuMTkxLTMzLjAzMiAxOS4xMzQtNjguNzU4IDM0LjE0MS0xMDYuNDk3IDQ0LjI1M2E0NDIuMDUyIDQ0Mi4wNTIgMCAwIDEtMTE0LjM1OSAxNS4wOTJjLS4xMzYtLjAxNy0uMjM4LS4wMTctLjM0MS0uMDE3Wm0uMzA3IDExNC41NDdjNDkuODEzLS4wMzUgOTguMDktNi42MzQgMTQ0LjAzMi0xOC45MjlhNTUzLjMxNiA1NTMuMzE2IDAgMCAwIDEzNC4xNzQtNTUuNjYyIDU1Ny44ODcgNTU3Ljg4NyAwIDAgMCAxMTUuMTQzLTg4LjUwNiA1NTguOTM4IDU1OC45MzggMCAwIDAgODguNDU1LTExNS4xNzggNTUyLjg2MyA1NTIuODYzIDAgMCAwIDU1LjYxMS0xMzQuMTc0Qzk0My40IDQyMi44NDIgOTQ5Ljk4MyAzNzQuNTgyIDk1MCAzMjQuNzg2di0uMTg3YzAtNDkuNzQ0LTYuNTY2LTk3Ljk1NC0xOC44MS0xNDMuODQ0YTU1My40NTQgNTUzLjQ1NCAwIDAgMC01NS41NDItMTM0LjI0M0M4NTEuMjQ1IDQuMjcyIDgyMS40NTMtMzQuNDU2IDc4Ny4yMS02OC43NWwtMzQuNzIgMzQuNzJhNTA4LjkwOCA1MDguOTA4IDAgMCAxIDgwLjYyNyAxMDUuMDk5IDUwNC40NjUgNTA0LjQ2NSAwIDAgMSA1MC42MzEgMTIyLjM5MWMxMS4xNTMgNDEuODMxIDE3LjEzOSA4NS43NzcgMTcuMTM5IDEzMS4xMzl2LjE4N2MtLjAxNyA0NS40MTMtNi4wMiA4OS40MS0xNy4yMjQgMTMxLjI5M2E1MDQuOTAyIDUwNC45MDIgMCAwIDEtNTAuNjk5IDEyMi4zMjMgNTA5LjcxNSA1MDkuNzE1IDAgMCAxLTgwLjY2MiAxMDUuMDEzIDUwOS4yNzggNTA5LjI3OCAwIDAgMS0xMDQuOTk2IDgwLjY5NiA1MDQuMzIgNTA0LjMyIDAgMCAxLTEyMi4zMjMgNTAuNzVjLTQxLjg4MyAxMS4yMjEtODUuODk3IDE3LjI0MS0xMzEuMzI3IDE3LjI3NWgtLjMwN2MtNDUuMzI3IDAtODkuMjM5LTUuOTY4LTEzMS4wNTQtMTcuMTIxYTUwNC44OTkgNTA0Ljg5OSAwIDAgMS0xMjIuNDQyLTUwLjYzMUE1MDkuMjg0IDUwOS4yODQgMCAwIDEgMzQuNzIgNjgzLjcyMkwwIDcxOC40NDNhNTU5LjIyMiA1NTkuMjIyIDAgMCAwIDExNS4yOTcgODguNDcyIDU1My41NjMgNTUzLjU2MyAwIDAgMCAxMzQuMjk0IDU1LjU0MmM0NS44NTYgMTIuMjI3IDk0LjAzMSAxOC43NzYgMTQzLjc1OCAxOC43NzZoLjM0MVptODAuNDc0LTI1Ni4xMDZhMzA5LjI4IDMwOS4yOCAwIDAgMCA3NC45MzItMzEuMTU2YzIzLjU2OC0xMy42NTkgNDUuMjQyLTMwLjI1MiA2NC4zNzYtNDkuMzg2IDE5LjEzNC0xOS4xNTEgMzUuNzA5LTQwLjgwOCA0OS4zNTItNjQuMzkzIDEzLjQ1NS0yMy4yNDMgMjQuMDExLTQ4LjM4IDMxLjEwNS03NC45MzFhMzExLjM5NiAzMTEuMzk2IDAgMCAwIDEwLjYwNy04MC40NTd2LS4xODhjMC0yNy43OC0zLjY4My01NC42NzMtMTAuNTA1LTgwLjI4Ny03LjA3Ny0yNi41NjgtMTcuNjE2LTUxLjcyMi0zMS4wNTQtNzUtMTMuNjI1LTIzLjYxOC0zMC4yMDEtNDUuMzEtNDkuMzM0LTY0LjQ3OC0xOS4xMzQtMTkuMTg1LTQwLjgwOS0zNS44MTEtNjQuMzkzLTQ5LjQ4OC0yMy4yNjEtMTMuNDktNDguNDE0LTI0LjA4LTc1LTMxLjIyNWEzMTEuNDUxIDMxMS40NTEgMCAwIDAtODAuNTYtMTAuNjc1aC0uMzA3YTMxMC45OTcgMzEwLjk5NyAwIDAgMC04MC4zMDMgMTAuNTIyYy0yNi42MiA3LjA5NC01MS44MDggMTcuNjUtNzUuMTIgMzEuMTIybDQ5LjA5NyA4NS4wMjdhMjExLjY3OCAyMTEuNjc4IDAgMCAxIDUxLjQzMi0yMS4yOTkgMjEzLjMxNCAyMTMuMzE0IDAgMCAxIDU0Ljg5NC03LjE4aC4zMDdhMjEzLjIgMjEzLjIgMCAwIDEgNTUuMTUgNy4zMzMgMjExLjI0NSAyMTEuMjQ1IDAgMCAxIDUxLjMzMSAyMS40MDJjMTYuMTMyIDkuMzc5IDMwLjk1MSAyMC43NzEgNDQuMDQ4IDMzLjkwMiAxMy4wOCAxMy4xMzEgMjQuNDIgMjcuOTg0IDMzLjc0OCA0NC4xMzRhMjExLjQwOCAyMTEuNDA4IDAgMCAxIDIxLjIzMSA1MS4zMyAyMTMuMjc2IDIxMy4yNzYgMCAwIDEgNy4xOCA1NC44Nzd2LjE4OGEyMTIuOTExIDIxMi45MTEgMCAwIDEtNy4yNjUgNTUuMDNjLTQuODYgMTguMTYyLTEyLjA5MSAzNS4zNTItMjEuMjgyIDUxLjI2Mi05LjMyOCAxNi4xMzMtMjAuNjY5IDMwLjk1Mi0zMy43NjYgNDQuMDQ5LTEzLjA3OSAxMy4wOTYtMjcuODk5IDI0LjQ1NC00NC4wMzEgMzMuNzk5LTE1LjkxMSA5LjIyNi0zMy4xIDE2LjQ1Ni01MS4yNjIgMjEuMzM0YTIxMi40OTUgMjEyLjQ5NSAwIDAgMS01NS4wNjUgNy4yOTh2OTguMTc2YTMxMi4wOSAzMTIuMDkgMCAwIDAgODAuNDU3LTEwLjY0MlptNjYuNzQ3LTMwMC41MTFjMC04MS40OC02Ni4wNDctMTQ3LjUyNy0xNDcuNTI4LTE0Ny41MjctODEuNDggMC0xNDcuNTI3IDY2LjA0Ny0xNDcuNTI3IDE0Ny41MjcgMCA4MS40OCA2Ni4wNDcgMTQ3LjUyNyAxNDcuNTI3IDE0Ny41MjcgODEuNDgxIDAgMTQ3LjUyOC02Ni4wNjQgMTQ3LjUyOC0xNDcuNTI3WlxcXCIgZmlsbD1cXFwidXJsKCNncm91cF9zdmdfX2IpXFxcIi8+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZ3JvdXBfc3ZnX19hXFxcIiB4MT1cXFwiMTI3Ljg5NVxcXCIgeTE9XFxcIjU4Mi42NDdcXFwiIHgyPVxcXCI4NzguMzQyXFxcIiB5Mj1cXFwiMTQ5LjM3N1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJncm91cF9zdmdfX2JcXFwiIHgxPVxcXCItMTEuMDcxXFxcIiB5MT1cXFwiNjk5LjE5M1xcXCIgeDI9XFxcIjkzNi41ODlcXFwiIHkyPVxcXCIxNTIuMDYxXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuNlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDkzNCAyMjBcXFwiPjxnIGZpbGw9XFxcIm5vbmVcXFwiPjxwYXRoIGZpbGw9XFxcIiMxODU1NjhcXFwiIGQ9XFxcIk0yLjYgMjA4LjdWMTAyLjJoMzAuOHYxMDYuNXpNMTI2IDE5OC40Yy03IDguNS0xNyAxMy4zLTMwLjQgMTMuMy0yMS40IDAtMzguNy0xMy4zLTM4LjctMzMuOSAwLTIwLjMgMTcuMy0zMC40IDQxLjUtMzEuNyAxOC42LTEuMSAyNC41LTMuMSAyNC41LTkuNCAwLTYuMS01LjctMTAuMy0xNS43LTEwLjMtMTIuMiAwLTE3LjUgNi4xLTE4LjEgMTIuN0g1OS4yYzEuNS0yMy40IDE5LTM5LjUgNDguMy0zOS41IDI4LjYgMCA0NyAxNS41IDQ3IDQ0LjZ2NjUuMWgtMjUuNmwtMi45LTEwLjl6bS0zOC0yMS45YzAgNi4xIDUuNSA5LjggMTQuMiA5LjggMTEuOCAwIDIxLjItNi42IDIxLjItMTkuOXYtMy45cy01LjcgMi42LTE3LjUgMy4zYy0xMi44LjctMTcuOSA0LjgtMTcuOSAxMC43em0xMzUgMzMuMmMtMjMuNCAwLTM2LjktMTMuNS0zNi45LTM3LjF2LTQxLjdoLTE3Ljl2LTI4LjZoMTcuOVY4Ni41bDMxLTI2LjJ2NDEuOUgyNDR2MjguNmgtMjYuOXYzNy40YzAgMTAuMyA2LjggMTIuNyAxMy4xIDEyLjcgNy4yIDAgMTMuMS0yLjggMTMuMS0yLjh2MjguMnMtOC4zIDMuNC0yMC4zIDMuNHpNMCA3MC4yYzAtMTAgNy45LTE4LjEgMTcuOS0xOC4xIDEwIDAgMTguMSA4LjEgMTguMSAxOC4xIDAgOS44LTguMSAxNy45LTE4LjEgMTcuOS0xMCAwLTE3LjktOC0xNy45LTE3Ljl6bTI2Ni45IDEzOC41VjEwMi4yaDMwLjh2MTA2LjV6XFxcIi8+PGcgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMjI3KVxcXCI+PHBhdGggZmlsbD1cXFwiIzE4NTU2OFxcXCIgZD1cXFwiTTExMC45IDcwLjVjMC00LjktLjctOS43LTEuOS0xNC4zLTEuMy00LjctMy4xLTkuMi01LjUtMTMuMy0yLjQtNC4yLTUuNC04LTguOC0xMS40LTMuNC0zLjQtNy4yLTYuMy0xMS40LTguOC00LjEtMi40LTguNi00LjMtMTMuMy01LjUtNC42LTEuMi05LjMtMS45LTE0LjMtMS45LTQuOSAwLTkuNy43LTE0LjMgMS45LTQuNyAxLjMtOS4yIDMuMS0xMy4zIDUuNS00LjIgMi40LTggNS40LTExLjQgOC44LTMuNCAzLjQtNi40IDcuMi04LjggMTEuNC0yLjQgNC4xLTQuMyA4LjYtNS41IDEzLjNsNy45IDIuMWMxLjEtNCAyLjctNy44IDQuNy0xMS4zIDIuMS0zLjYgNC42LTYuOCA3LjUtOS43IDIuOS0yLjkgNi4yLTUuNCA5LjctNy41IDMuNS0yIDcuMy0zLjYgMTEuMy00LjcgMy45LTEgNy45LTEuNiAxMi4xLTEuNiA0LjIgMCA4LjMuNiAxMi4yIDEuNiA0IDEuMSA3LjggMi43IDExLjMgNC43IDMuNiAyLjEgNi44IDQuNiA5LjcgNy41IDIuOSAyLjkgNS40IDYuMiA3LjUgOS43IDIgMy41IDMuNiA3LjMgNC43IDExLjMgMSAzLjkgMS42IDggMS42IDEyLjIgMCA0LjItLjYgOC4zLTEuNiAxMi4xLTEuMSA0LTIuNyA3LjgtNC43IDExLjNsNy4xIDQuMWMyLjQtNC4xIDQuMy04LjYgNS41LTEzLjMgMS4zLTQuNSAyLTkuMiAyLTE0LjJaXFxcIi8+PHBhdGggZmlsbD1cXFwiIzE4NTU2OFxcXCIgZD1cXFwiTTEyNS4yIDcwLjVjMC02LjItLjgtMTIuMy0yLjQtMTgtMS42LTUuOS0zLjktMTEuNi03LTE2LjgtMy4xLTUuMy02LjgtMTAuMS0xMS4xLTE0LjQtNC4zLTQuMy05LjEtOC0xNC40LTExLjEtNS4yLTMtMTAuOC01LjQtMTYuOC02LjlDNjcuOCAxLjggNjEuNy45IDU1LjUuOWMtNi4yIDAtMTIuMi44LTE4IDIuMy01LjkgMS42LTExLjYgMy45LTE2LjggNi45LTUuMyAzLTEwLjEgNi44LTE0LjQgMTFsNC4zIDQuM2MzLjktMy45IDguMy03LjMgMTMuMS0xMC4xIDQuNy0yLjcgOS45LTQuOSAxNS4zLTYuMyA1LjItMS40IDEwLjctMi4xIDE2LjQtMi4xIDUuNyAwIDExLjIuOCAxNi40IDIuMiA1LjQgMS40IDEwLjUgMy42IDE1LjMgNi4zYTY0LjQ2NiA2NC40NjYgMCAwIDEgMjMuMiAyMy4yYzIuNyA0LjcgNC45IDkuOSA2LjMgMTUuMyAxLjQgNS4yIDIuMiAxMC43IDIuMiAxNi40IDAgNS43LS43IDExLjEtMi4xIDE2LjQtMS40IDUuNC0zLjYgMTAuNi02LjMgMTUuMy0yLjggNC44LTYuMiA5LjItMTAuMSAxMy4xbDQuMyA0LjNjNC4zLTQuMyA4LTkuMSAxMS4xLTE0LjQgMy01LjIgNS40LTEwLjggNi45LTE2LjggMS44LTUuNCAyLjYtMTEuNSAyLjYtMTcuN1pcXFwiLz48cGF0aCBmaWxsPVxcXCIjMTg1NTY4XFxcIiBkPVxcXCJNOTMuMiA2MC40Yy0uOS0zLjMtMi4yLTYuNS0zLjktOS40LTEuNy0yLjktMy44LTUuNy02LjItOC0yLjQtMi40LTUuMS00LjUtOC02LjItMi45LTEuNy02LTMtOS40LTMuOS0zLjItLjktNi42LTEuMy0xMC0xLjMtMy41IDAtNi44LjUtMTAgMS4zLTMuMy45LTYuNSAyLjItOS40IDMuOS0yLjkgMS43LTUuNyAzLjgtOC4xIDYuMi0yLjQgMi40LTQuNSA1LjEtNi4yIDgtMS43IDIuOS0zIDYtMy45IDkuNC0uOSAzLjItMS4zIDYuNi0xLjMgMTAuMXMuNSA2LjggMS4zIDEwYy45IDMuMyAyLjIgNi41IDMuOSA5LjRsMTAuNi02LjFjLTEuMi0yLTIuMS00LjEtMi43LTYuNC0uNi0yLjItLjktNC41LS45LTYuOSAwLTIuNC4zLTQuNy45LTYuOS42LTIuMyAxLjUtNC40IDIuNy02LjQgMS4yLTIgMi42LTMuOSA0LjItNS41czMuNS0zLjEgNS41LTQuMiA0LjEtMiA2LjQtMi43YzIuMi0uNiA0LjUtLjkgNi45LS45IDIuNCAwIDQuNy4zIDYuOS45IDIuMy42IDQuNCAxLjUgNi40IDIuNyAyIDEuMiAzLjkgMi42IDUuNSA0LjJzMy4xIDMuNSA0LjIgNS41YzEuMiAyIDIuMSA0LjEgMi43IDYuNC42IDIuMi45IDQuNS45IDYuOWgxMi4zYzAtMy41LS40LTYuOS0xLjMtMTAuMVpcXFwiLz48ZyBmaWxsPVxcXCIjQTdFQkVGXFxcIj48cGF0aCBkPVxcXCJNODEuNCA2My42Yy0uNi0yLjMtMS41LTQuNC0yLjctNi40LTEuMi0yLTIuNi0zLjktNC4yLTUuNWwtNS44IDUuOGMxLjEgMS4xIDIuMSAyLjQgMi45IDMuOC44IDEuNCAxLjQgMi45IDEuOCA0LjQuNCAxLjUuNiAzLjEuNiA0LjggMCAxLjctLjIgMy4yLS42IDQuOC0uNCAxLjYtMSAzLjEtMS44IDQuNC0uOCAxLjQtMS44IDIuNy0yLjkgMy44LTEuMSAxLjEtMi40IDIuMS0zLjggMi45LTEuNC44LTIuOSAxLjQtNC40IDEuOC0xLjUuNC0zLjEuNi00LjguNi0xLjcgMC0zLjItLjItNC44LS42LTEuNi0uNC0zLjEtMS00LjQtMS44bC00LjEgNy4xYzIgMS4yIDQuMSAyLjEgNi40IDIuNyAyLjIuNiA0LjUuOSA2LjkuOSAyLjQgMCA0LjctLjMgNi45LS45IDIuMy0uNiA0LjQtMS41IDYuNC0yLjcgMi0xLjIgMy45LTIuNiA1LjUtNC4yczMuMS0zLjUgNC4yLTUuNWMxLjItMiAyLjEtNC4xIDIuNy02LjQuNi0yLjIuOS00LjUuOS02LjkgMC0yLjQtLjMtNC43LS45LTYuOVpcXFwiLz48cGF0aCBkPVxcXCJNOTYuNCA0N2MtMi4xLTMuNi00LjYtNi44LTcuNS05LjctMi45LTIuOS02LjItNS40LTkuNy03LjUtMy41LTItNy4zLTMuNi0xMS4zLTQuNy0zLjktMS04LTEuNi0xMi4yLTEuNi00LjIgMC04LjMuNi0xMi4yIDEuNi00IDEuMS03LjggMi43LTExLjMgNC43LTMuNiAyLjEtNi44IDQuNi05LjcgNy41LTIuOSAyLjktNS40IDYuMi03LjUgOS43LTIgMy41LTMuNiA3LjMtNC43IDExLjMtMSAzLjktMS42IDgtMS42IDEyLjJoOC4yYzAtMy41LjUtNi45IDEuMy0xMC4xLjktMy4zIDIuMi02LjUgMy45LTkuNCAxLjctMi45IDMuOC01LjcgNi4yLTguMSAyLjQtMi40IDUuMS00LjUgOC4xLTYuMiAyLjktMS43IDYuMS0zIDkuNC0zLjkgMy4yLS45IDYuNi0xLjMgMTAuMS0xLjNzNi45LjUgMTAuMSAxLjNjMy4zLjkgNi41IDIuMiA5LjQgMy45IDIuOSAxLjcgNS43IDMuOCA4LjEgNi4yIDIuNCAyLjQgNC41IDUuMSA2LjIgOC4xIDEuNyAyLjkgMyA2LjEgMy45IDkuNGw3LjktMi4xYy0xLjUtNC0zLjEtNy44LTUuMS0xMS4zWlxcXCIvPjxwYXRoIGQ9XFxcIk0xMTYuOSA1NC4xYy0xLjQtNS40LTMuNi0xMC41LTYuMy0xNS4zYTY0LjQ2NiA2NC40NjYgMCAwIDAtMjMuMi0yMy4yYy00LjctMi43LTkuOS00LjktMTUuMy02LjMtNS4yLTEuNC0xMC43LTIuMS0xNi40LTIuMS01LjcgMC0xMS4yLjgtMTYuNCAyLjEtNS40IDEuNC0xMC41IDMuNi0xNS4zIDYuM0E2NC40NjYgNjQuNDY2IDAgMCAwIC44IDM4LjhsNy4xIDQuMWMyLjQtNC4yIDUuNC04IDguOC0xMS40IDMuNC0zLjQgNy4zLTYuMyAxMS40LTguOCA0LjEtMi40IDguNi00LjMgMTMuMy01LjUgNC42LTEuMiA5LjMtMS45IDE0LjMtMS45czkuNy43IDE0LjMgMS45YzQuNyAxLjMgOS4yIDMuMSAxMy4zIDUuNSA0LjIgMi40IDggNS40IDExLjQgOC44IDMuNCAzLjQgNi4zIDcuMyA4LjggMTEuNCAyLjQgNC4xIDQuMyA4LjYgNS41IDEzLjMgMS4yIDQuNiAxLjkgOS4zIDEuOSAxNC4zIDAgNC45LS43IDkuNy0xLjkgMTQuM2w3LjkgMi4xYzEuNC01LjIgMi4xLTEwLjcgMi4xLTE2LjQuMS01LjYtLjctMTEuMS0yLjEtMTYuNFpcXFwiLz48L2c+PGNpcmNsZSBjeD1cXFwiNTUuN1xcXCIgY3k9XFxcIjcwLjVcXFwiIHI9XFxcIjE4LjRcXFwiIGZpbGw9XFxcIiMxODU1NjhcXFwiLz48L2c+PHBhdGggZD1cXFwiTTM1NS4zIDE0My40di0zOC4yaDguMXYzOC4yem0yMy4zLTEzLjR2MTMuNGgtNy43di0yNi43aDcuNnYxLjljMS41LTEuNCAzLjYtMi41IDYuMy0yLjUgNi41IDAgMTAuOCA0LjMgMTAuOCAxMS44djE1LjVIMzg4di0xNC45YzAtMi44LTEuMy01LjItNC40LTUuMi0zLjctLjEtNSAyLjYtNSA2Ljd6bTM0LjEgMTMuNWMtNS44IDAtOS4yLTMuNC05LjItOS4zdi0xMC40SDM5OXYtNy4xaDQuNXYtMy45bDcuNy02LjV2MTAuNWg2Ljd2Ny4xaC02Ljd2OS4zYzAgMi42IDEuNyAzLjIgMy4zIDMuMiAxLjggMCAzLjMtLjcgMy4zLS43djdjMC0uMS0yLjEuOC01LjEuOHptMzUuOS0xMS40aC0xOC45Yy40IDIuNyAyLjcgNC44IDYgNC44IDIuMiAwIDMuNS0uOSA0LjQtMi4zaDguM2MtMS44IDUuOC01LjkgOS40LTEyLjYgOS40LTcuNyAwLTE0LTUuNC0xNC0xMy44IDAtOC4xIDUuNy0xNC4yIDEzLjUtMTQuMiA4LjggMCAxMy4yIDYuOSAxMy4yIDE0LjEuMi43LjEgMiAuMSAyem0tMTMuMS05LjNjLTIuOSAwLTQuOSAxLjgtNS40IDQuMWgxMC40Yy0uMi0yLjMtMi4yLTQuMS01LTQuMXptMzYuMS00LjZ2Ny42cy0yLTIuMS01LjEtMi4xYy0yLjMgMC01IDEuMy01IDUuMnYxNC40aC03Ljd2LTI2LjdoNy42djIuMmMtLjEgMCAxLjUtMi42IDUuMy0yLjYgMy40LjEgNC45IDIgNC45IDJ6bTEyIDExLjh2MTMuNGgtNy43di0yNi43aDcuNnYxLjljMS41LTEuNCAzLjYtMi41IDYuMy0yLjUgNi41IDAgMTAuOCA0LjMgMTAuOCAxMS44djE1LjVoLTcuN3YtMTQuOWMwLTIuOC0xLjMtNS4yLTQuNC01LjItMy43LS4xLTQuOSAyLjYtNC45IDYuN3ptMzkuMyAxMC43Yy0xLjcgMi4xLTQuMyAzLjMtNy42IDMuMy01LjMgMC05LjYtMy4zLTkuNi04LjQgMC01LjEgNC4zLTcuNiAxMC40LTcuOSA0LjYtLjMgNi4xLS44IDYuMS0yLjMgMC0xLjUtMS40LTIuNi0zLjktMi42LTMuMSAwLTQuNCAxLjUtNC41IDMuMmgtNy41Yy40LTUuOCA0LjctOS45IDEyLTkuOSA3LjEgMCAxMS43IDMuOSAxMS43IDExLjF2MTYuMmgtNi40bC0uNy0yLjd6bS05LjQtNS41YzAgMS41IDEuNCAyLjUgMy41IDIuNSAyLjkgMCA1LjMtMS42IDUuMy01di0xcy0xLjQuNy00LjQuOGMtMy4yLjItNC40IDEuMi00LjQgMi43em0zMy42IDguM2MtNS44IDAtOS4yLTMuNC05LjItOS4zdi0xMC40aC00LjV2LTcuMWg0LjV2LTMuOWw3LjctNi41djEwLjVoNi43djcuMWgtNi43djkuM2MwIDIuNiAxLjcgMy4yIDMuMyAzLjIgMS44IDAgMy4zLS43IDMuMy0uN3Y3YzAtLjEtMi4xLjgtNS4xLjh6bTEwLjQtMzQuNGMwLTIuNSAyLTQuNSA0LjUtNC41czQuNSAyIDQuNSA0LjUtMiA0LjUtNC41IDQuNS00LjUtMi4xLTQuNS00LjV6bS42IDM0LjN2LTI2LjdoNy43djI2LjdoLTcuN3ptMTMuNC0xMy40YzAtOCA2LjItMTQgMTQuMi0xNCA4LjEgMCAxNC4yIDYgMTQuMiAxNHMtNi4yIDE0LTE0LjIgMTRjLTguMSAwLTE0LjItNi0xNC4yLTE0em03LjkgMGMwIDMuOSAyLjcgNi44IDYuMyA2LjggMy43IDAgNi4zLTIuOCA2LjMtNi44IDAtMy45LTIuNy02LjgtNi4zLTYuOC0zLjYuMS02LjMgMi45LTYuMyA2Ljh6bTMzLjYgMHYxMy40aC03Ljd2LTI2LjdoNy42djEuOWMxLjUtMS40IDMuNi0yLjUgNi4zLTIuNSA2LjUgMCAxMC44IDQuMyAxMC44IDExLjh2MTUuNWgtNy43di0xNC45YzAtMi44LTEuMy01LjItNC40LTUuMi0zLjYtLjEtNC45IDIuNi00LjkgNi43em0zOS40IDEwLjdjLTEuNyAyLjEtNC4zIDMuMy03LjYgMy4zLTUuMyAwLTkuNi0zLjMtOS42LTguNCAwLTUuMSA0LjMtNy42IDEwLjQtNy45IDQuNi0uMyA2LjEtLjggNi4xLTIuMyAwLTEuNS0xLjQtMi42LTMuOS0yLjYtMy4xIDAtNC40IDEuNS00LjUgMy4yaC03LjVjLjQtNS44IDQuNy05LjkgMTItOS45IDcuMSAwIDExLjcgMy45IDExLjcgMTEuMXYxNi4yaC02LjRsLS43LTIuN3ptLTkuNS01LjVjMCAxLjUgMS40IDIuNSAzLjUgMi41IDIuOSAwIDUuMy0xLjYgNS4zLTV2LTFzLTEuNC43LTQuNC44Yy0zLjIuMi00LjQgMS4yLTQuNCAyLjd6bTIzIDguMnYtMzguMmg3Ljd2MzguMnptNDkuNi0zOC4yIDE0LjkgMzguMkg3MjJsLTMuMS03LjVoLTE0LjhsLTMgNy41aC04LjRsMTQuOS0zOC4yaDcuOXptLTMuOSAxMS00LjcgMTIuNWg5LjVsLTQuOC0xMi41em0yMi41LTcuMWMwLTIuNSAyLTQuNSA0LjUtNC41czQuNSAyIDQuNSA0LjUtMiA0LjUtNC41IDQuNS00LjUtMi4xLTQuNS00LjV6bS42IDM0LjN2LTI2LjdoNy43djI2LjdoLTcuN3ptMTMuNC0xMy40YzAtOC40IDYuMS0xNCAxMy41LTE0IDMuMSAwIDUuNiAxLjEgNyAyLjN2LTEzLjJoNy43djM4LjJoLTcuNnYtMS45Yy0xLjQgMS40LTQuMSAyLjUtNy4xIDIuNS03LjUuMS0xMy41LTUuMy0xMy41LTEzLjl6bTIwLjUgMGMwLTQuMS0yLjctNy02LjMtNy0zLjYgMC02LjMgMi44LTYuMyA3IDAgNC4xIDIuNyA3IDYuMyA3IDMuNiAwIDYuMy0yLjggNi4zLTd6bS00MTUuOCA0MC42aDMwdjcuNWgtMTF2MzAuN2gtOC4xVjE3OGgtMTF2LTcuNHptNDguOSAxM3Y3LjZzLTItMi4xLTUuMS0yLjFjLTIuMyAwLTUgMS4zLTUgNS4ydjE0LjRIMzg0VjE4Mmg3LjZ2Mi4yYy0uMSAwIDEuNS0yLjYgNS4zLTIuNiAzLjMuMSA0LjggMiA0LjggMnptMjAuOCAyMi40Yy0xLjcgMi4xLTQuMyAzLjMtNy42IDMuMy01LjMgMC05LjYtMy4zLTkuNi04LjQgMC01LjEgNC4zLTcuNiAxMC40LTcuOSA0LjYtLjMgNi4xLS44IDYuMS0yLjMgMC0xLjUtMS40LTIuNi0zLjktMi42LTMuMSAwLTQuNCAxLjUtNC41IDMuMmgtNy41Yy40LTUuOCA0LjctOS45IDEyLTkuOSA3LjEgMCAxMS43IDMuOSAxMS43IDExLjF2MTYuMmgtNi40bC0uNy0yLjd6bS05LjUtNS40YzAgMS41IDEuNCAyLjUgMy41IDIuNSAyLjkgMCA1LjMtMS42IDUuMy01di0xcy0xLjQuNy00LjQuOGMtMy4xLjItNC40IDEuMi00LjQgMi43em0zMC44LTUuMnYxMy40SDQzNnYtMjYuN2g3LjZ2MS45YzEuNS0xLjQgMy42LTIuNSA2LjMtMi41IDYuNSAwIDEwLjggNC4zIDEwLjggMTEuOHYxNS41SDQ1M3YtMTQuOWMwLTIuOC0xLjMtNS4yLTQuNC01LjItMy42LS4xLTQuOCAyLjYtNC44IDYuN3ptMzggNS43YzAtLjgtLjUtMS41LTIuNi0xLjlsLTQtLjhjLTYuMS0xLjItOC42LTQuMS04LjYtOC4xIDAtNC43IDMuNS04LjkgMTAuOS04LjlzMTAuNyA0LjEgMTEuMyA4LjhoLTcuNGMtLjQtMS41LTEuNy0yLjMtNC0yLjMtMi4yIDAtMy40LjgtMy40IDEuOSAwIC44LjcgMS4zIDIuNyAxLjdsNCAuOGM1LjcgMS4xIDguNiAzLjggOC42IDguNCAwIDUuMi0zLjggOC44LTExLjIgOC44LTcuNiAwLTExLjctMy42LTEyLjUtOS4yaDcuOGMuNCAxLjkgMS44IDIuOCA0LjcgMi44IDIuNS0uMSAzLjctLjggMy43LTJ6bTQwLjctNS43YzAgOC40LTYuMSAxNC0xMy41IDE0LTMuMSAwLTUuNi0xLjEtNy0yLjN2MTIuM2gtNy43di0zNy4zaDcuNnYxLjljMS40LTEuNCA0LjEtMi42IDcuMS0yLjYgNy41IDAgMTMuNSA1LjQgMTMuNSAxNHptLTIwLjUgMGMwIDQuMSAyLjcgNyA2LjMgNyAzLjYgMCA2LjMtMi44IDYuMy03IDAtNC4xLTIuNy03LTYuMy03LTMuNiAwLTYuMyAyLjktNi4zIDd6bTQxLjggMTAuNmMtMS43IDIuMS00LjMgMy4zLTcuNiAzLjMtNS4zIDAtOS42LTMuMy05LjYtOC40IDAtNS4xIDQuMy03LjYgMTAuNC03LjkgNC42LS4zIDYuMS0uOCA2LjEtMi4zIDAtMS41LTEuNC0yLjYtMy45LTIuNi0zLjEgMC00LjQgMS41LTQuNSAzLjJoLTcuNWMuNC01LjggNC43LTkuOSAxMi05LjkgNy4xIDAgMTEuNyAzLjkgMTEuNyAxMS4xdjE2LjJoLTYuNGwtLjctMi43em0tOS41LTUuNGMwIDEuNSAxLjQgMi41IDMuNSAyLjUgMi45IDAgNS4zLTEuNiA1LjMtNXYtMXMtMS40LjctNC40LjhjLTMuMS4yLTQuNCAxLjItNC40IDIuN3ptNDAuOC0xN3Y3LjZzLTItMi4xLTUuMS0yLjFjLTIuMyAwLTUgMS4zLTUgNS4ydjE0LjRoLTcuN1YxODJoNy42djIuMmMtLjEgMCAxLjUtMi42IDUuMy0yLjYgMy40LjEgNC45IDIgNC45IDJ6bTI5LjcgMTMuOWgtMTguOWMuNCAyLjcgMi43IDQuOCA2IDQuOCAyLjIgMCAzLjUtLjkgNC40LTIuM2g4LjNjLTEuOCA1LjgtNS45IDkuNC0xMi42IDkuNC03LjcgMC0xNC01LjQtMTQtMTMuOCAwLTguMSA1LjctMTQuMiAxMy41LTE0LjIgOC44IDAgMTMuMiA2LjkgMTMuMiAxNC4xLjEuNy4xIDIgLjEgMnptLTEzLjEtOS4zYy0yLjkgMC00LjkgMS44LTUuNCA0LjFoMTAuNGMtLjItMi4zLTIuMi00LjEtNS00LjF6bTI2LjEgNy4ydjEzLjRINjEwdi0yNi43aDcuNnYxLjljMS41LTEuNCAzLjYtMi41IDYuMy0yLjUgNi41IDAgMTAuOCA0LjMgMTAuOCAxMS44djE1LjVINjI3di0xNC45YzAtMi44LTEuMy01LjItNC40LTUuMi0zLjYtLjEtNC44IDIuNi00LjggNi43em00MC43IDNoOC41Yy0xLjMgNi41LTYuMiAxMS0xMy40IDExLTguMSAwLTE0LjEtNS45LTE0LjEtMTQgMC04IDYtMTQgMTQuMS0xNCA3IDAgMTEuOSA0LjQgMTIuOSAxMC43SDY1OGMtLjYtMi0yLjMtMy40LTQuNy0zLjQtMy4zIDAtNS45IDIuOC01LjkgNi43IDAgMy45IDIuNiA2LjcgNiA2LjcgMi42IDAgNC41LTEuNCA1LjEtMy43em0xOCAyMS4yYy0zLjUgMC01LjItLjktNS4yLS45di03LjFzMS42LjggMy4zLjhjMS43IDAgNC0uNyA0LjYtMy43TDY2OC44IDE4Mmg4LjZsNi4xIDE2LjYgNi4yLTE2LjZoOC4zbC0xMSAyNy4yYy0yLjkgNy4xLTUuMiAxMC40LTEwLjUgMTAuNHptNDAuOS0xMC44di0zOC4yaDguMXYzOC4yem0yMy4zLTEzLjR2MTMuNEg3MzN2LTI2LjdoNy42djEuOWMxLjUtMS40IDMuNi0yLjUgNi4zLTIuNSA2LjUgMCAxMC44IDQuMyAxMC44IDExLjh2MTUuNUg3NTB2LTE0LjljMC0yLjgtMS4zLTUuMi00LjQtNS4yLTMuNy0uMS00LjkgMi42LTQuOSA2Ljd6bTIzLTIwLjljMC0yLjUgMi00LjUgNC41LTQuNXM0LjUgMiA0LjUgNC41LTIgNC41LTQuNSA0LjUtNC41LTIuMS00LjUtNC41em0uNiAzNC4zdi0yNi43aDcuN3YyNi43aC03Ljd6bTI1LjYuMWMtNS44IDAtOS4yLTMuNC05LjItOS4zdi0xMC40aC00LjV2LTcuMWg0LjV2LTMuOWw3LjctNi41djEwLjVoNi43djcuMWgtNi43djkuM2MwIDIuNiAxLjcgMy4yIDMuMyAzLjIgMS44IDAgMy4zLS43IDMuMy0uN3Y3YzAtLjEtMi4xLjgtNS4xLjh6bTEwLjQtMzQuNGMwLTIuNSAyLTQuNSA0LjUtNC41czQuNSAyIDQuNSA0LjUtMiA0LjUtNC41IDQuNS00LjUtMi4xLTQuNS00LjV6bS42IDM0LjN2LTI2LjdoNy43djI2LjdoLTcuN3ptMzAuOC0yLjhjLTEuNyAyLjEtNC4zIDMuMy03LjYgMy4zLTUuMyAwLTkuNi0zLjMtOS42LTguNCAwLTUuMSA0LjMtNy42IDEwLjQtNy45IDQuNi0uMyA2LjEtLjggNi4xLTIuMyAwLTEuNS0xLjQtMi42LTMuOS0yLjYtMy4xIDAtNC40IDEuNS00LjUgMy4yaC03LjVjLjQtNS44IDQuNy05LjkgMTItOS45IDcuMSAwIDExLjcgMy45IDExLjcgMTEuMXYxNi4yaC02LjRsLS43LTIuN3ptLTkuNC01LjRjMCAxLjUgMS40IDIuNSAzLjUgMi41IDIuOSAwIDUuMy0xLjYgNS4zLTV2LTFzLTEuNC43LTQuNC44Yy0zLjIuMi00LjQgMS4yLTQuNCAyLjd6bTMzLjYgOC4zYy01LjggMC05LjItMy40LTkuMi05LjN2LTEwLjRoLTQuNXYtNy4xaDQuNXYtMy45bDcuNy02LjV2MTAuNWg2Ljd2Ny4xaC02Ljd2OS4zYzAgMi42IDEuNyAzLjIgMy4zIDMuMiAxLjggMCAzLjMtLjcgMy4zLS43djdjMC0uMS0yLjEuOC01LjEuOHptMTAuNC0zNC40YzAtMi41IDItNC41IDQuNS00LjVzNC41IDIgNC41IDQuNS0yIDQuNS00LjUgNC41LTQuNS0yLjEtNC41LTQuNXptLjYgMzQuM3YtMjYuN2g3Ljd2MjYuN2gtNy43em0zOC43LTI2LjctOS41IDI2LjdoLThsLTkuNS0yNi43aDguMmw1LjIgMTYuNSA1LjItMTYuNXptMjguMiAxNS40aC0xOC45Yy40IDIuNyAyLjcgNC44IDYgNC44IDIuMiAwIDMuNS0uOSA0LjQtMi4zaDguM2MtMS44IDUuOC01LjkgOS40LTEyLjYgOS40LTcuNyAwLTE0LTUuNC0xNC0xMy44IDAtOC4xIDUuNy0xNC4yIDEzLjUtMTQuMiA4LjggMCAxMy4yIDYuOSAxMy4yIDE0LjEuMS43LjEgMiAuMSAyWm0tMTMuMS05LjNjLTIuOSAwLTQuOSAxLjgtNS40IDQuMWgxMC40Yy0uMi0yLjMtMi4yLTQuMS01LTQuMVpcXFwiIGZpbGw9XFxcIiMxODU1NjhcXFwiLz48L2c+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI1IDI0XFxcIj48cGF0aCBkPVxcXCJNMjAuODM0IDExLjIzVjguOTU3YTguMzMzIDguMzMzIDAgMCAwLTE2LjY2NyAwdjIuMjcxYTMuMTI1IDMuMTI1IDAgMCAwLTIuMDgzIDIuOTM4djIuMDgzYTMuMTI1IDMuMTI1IDAgMCAwIDMuMTI0IDMuMTI1aDMuMTI2YTEuMDQxIDEuMDQxIDAgMCAwIDEuMDQxLTEuMDQydi02LjI1YTEuMDQyIDEuMDQyIDAgMCAwLTEuMDQxLTEuMDQxSDYuMjVWOC45NThhNi4yNSA2LjI1IDAgMSAxIDEyLjUgMHYyLjA4NGgtMi4wODNhMS4wNDEgMS4wNDEgMCAwIDAtMS4wNDIgMS4wNDF2Ni4yNWExLjA0MSAxLjA0MSAwIDAgMCAxLjA0MiAxLjA0MmgzLjEyNWEzLjEyNSAzLjEyNSAwIDAgMCAzLjEyNS0zLjEyNXYtMi4wODNhMy4xMjUgMy4xMjUgMCAwIDAtMi4wODQtMi45MzhaTTcuMjkyIDEzLjEyNHY0LjE2N0g1LjIwOWExLjA0MiAxLjA0MiAwIDAgMS0xLjA0Mi0xLjA0MnYtMi4wODNhMS4wNDIgMS4wNDIgMCAwIDEgMS4wNDItMS4wNDJoMi4wODNabTEzLjU0MiAzLjEyNWExLjA0MiAxLjA0MiAwIDAgMS0xLjA0MiAxLjA0MmgtMi4wODR2LTQuMTY3aDIuMDg0YTEuMDQyIDEuMDQyIDAgMCAxIDEuMDQxIDEuMDQydjIuMDgzWlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOC4zODQgMjEuNjE2QTQuNjMgNC42MyAwIDAgMSAxNS4xMiAyM2wtLjAxLTEuMTU4YTMuNDcyIDMuNDcyIDAgMCAwIDMuNDQ1LTMuNWwxLjE1Ny0uMDA5YTQuNjMgNC42MyAwIDAgMS0xLjMzIDMuMjg0WlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIgc3Ryb2tlPVxcXCIjZmZmXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMDQyXFxcIi8+PHJlY3QgeD1cXFwiMTEuMjVcXFwiIHk9XFxcIjIwLjQxNlxcXCIgd2lkdGg9XFxcIjQuNjg4XFxcIiBoZWlnaHQ9XFxcIjMuMTI1XFxcIiByeD1cXFwiMS41NjNcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTUgMTRcXFwiPjxwYXRoIGQ9XFxcIk03LjM4NSA0LjY2N2ExLjEgMS4xIDAgMCAwLS41MTguMTI4Yy0uMTYuMDg1LS4yOTUuMjA5LS4zOS4zNjJsLS4wMDQuMDA2LS4wMDMuMDA3YS4zNDYuMzQ2IDAgMCAxLS4wOTMuMTA1LjQzOC40MzggMCAwIDEtLjQ1NS4wMzMuMzcuMzcgMCAwIDEtLjExMy0uMDkzLjMxMy4zMTMgMCAwIDEtLjA2LS4xMTcuMjg3LjI4NyAwIDAgMS0uMDA1LS4xMjRsLS4zMjktLjA1OC4zMjkuMDU4YS4zMDUuMzA1IDAgMCAxIC4wNDktLjEybC4wMDQtLjAwNS4wMDQtLjAwNmExLjc1IDEuNzUgMCAwIDEgLjY2My0uNjE1IDEuOTIgMS45MiAwIDAgMSAyLjA5Mi4xNzZjLjMyNC4yNTYuNTM3LjYwNS42MDcuOTg1LjA3LjM3OC0uMDA1Ljc3LS4yMTUgMS4xMDUtLjIxMS4zMzctLjU0Ni42LS45NTIuNzM3bC0uMjI3LjA3NnYuMzZhLjMxLjMxIDAgMCAxLS4xMDQuMjI3LjQxNC40MTQgMCAwIDEtLjI4LjEwNmMtLjExIDAtLjIxLS4wNC0uMjgxLS4xMDZBLjMxLjMxIDAgMCAxIDcgNy42NjdWN2EuMzEuMzEgMCAwIDEgLjEwNC0uMjI3LjQxNC40MTQgMCAwIDEgLjI4LS4xMDZjLjI3MiAwIC41MzYtLjEuNzM1LS4yODVhLjk3Ny45NzcgMCAwIDAgLjMxNy0uNzE1Ljk3Ny45NzcgMCAwIDAtLjMxNy0uNzE2IDEuMDggMS4wOCAwIDAgMC0uNzM0LS4yODRabTAgMFY1di0uMzMzWm0tLjM2OSA0LjkwNi4wMTItLjAyMS4wMDktLjAyM2EuMTYuMTYgMCAwIDEgLjAyLS4wMzcuNzM2LjczNiAwIDAgMSAuMDUtLjA2LjM5MS4zOTEgMCAwIDEgLjEyMi0uMDc0LjQzMy40MzMgMCAwIDEgLjMxMSAwbC4xMi0uMzEtLjEyLjMxYS4zOS4zOSAwIDAgMSAuMTI3LjA3OWMuMDM0LjAzMi4wNi4wNy4wNzcuMTA4YS4zLjMgMCAwIDEgLjAyNS4xMnYuMDE1YS4yOS4yOSAwIDAgMS0uMDIuMTE4LjI2My4yNjMgMCAwIDEtLjA2Ny4wOThsLjIyNy4yNDQtLjIyNy0uMjQ0YS4zMjEuMzIxIDAgMCAxLS4xMTYuMDY4bC0uMDEuMDAzLS4wMS4wMDVhLjM4Ni4zODYgMCAwIDEtLjI5MyAwbC0uMDEtLjAwNS0uMDEtLjAwM2EuMzIxLjMyMSAwIDAgMS0uMTE3LS4wNjhsLS4yMjcuMjQ0LjIyNy0uMjQ0YS4yNjMuMjYzIDAgMCAxLS4wNjctLjA5N2wtLjAwNi0uMDE1LS4wMDctLjAxNWEuMTkzLjE5MyAwIDAgMS0uMDIyLS4wOTNWOS42NGEuNTEuNTEgMCAwIDEtLjAwMi0uMDU3LjA3OC4wNzggMCAwIDEgLjAwNC0uMDFaTTMuNTcyIDEuNzRBNy4yNDUgNy4yNDUgMCAwIDEgNy4zODUuNjY3Yy45MDIgMCAxLjc5NS4xNjUgMi42MjcuNDg1LjgzMy4zMiAxLjU4OC43ODkgMi4yMjIgMS4zNzhhNi4zMjMgNi4zMjMgMCAwIDEgMS40OCAyLjA1NWMuMzQxLjc2Ni41MTcgMS41ODcuNTE3IDIuNDE1YTYgNiAwIDAgMS0xLjE0NyAzLjUxIDYuNzYgNi43NiAwIDAgMS0zLjA3MiAyLjMzOCA3LjM2MiA3LjM2MiAwIDAgMS0zLjk2OC4zNjMgNy4wMzMgNy4wMzMgMCAwIDEtMy41MS0xLjc0MUE2LjIwMSA2LjIwMSAwIDAgMSAuNjcgOC4yM2E1Ljg5MiA1Ljg5MiAwIDAgMSAuMzg3LTMuNjQ1QTYuNDY3IDYuNDY3IDAgMCAxIDMuNTcyIDEuNzRabS40NDYgOS45NzhhNi4zOSA2LjM5IDAgMCAwIDMuMzY3Ljk0OWMxLjYwNCAwIDMuMTQ2LS41OTIgNC4yODgtMS42NTJDMTIuODE1IDkuOTU1IDEzLjQ2IDguNTExIDEzLjQ2IDdhNS40IDUuNCAwIDAgMC0xLjAzLTMuMTU4IDYuMDA3IDYuMDA3IDAgMCAwLTIuNzI5LTIuMDggNi40ODggNi40ODggMCAwIDAtMy40OTgtLjMyIDYuMjI2IDYuMjI2IDAgMCAwLTMuMTA4IDEuNTQyIDUuNTYgNS41NiAwIDAgMC0xLjY3IDIuOTA2IDUuMzE0IDUuMzE0IDAgMCAwIC4zNDggMy4yODcgNS43NzMgNS43NzMgMCAwIDAgMi4yNDQgMi41NFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNMTEuMzMzIDIuMmMtMi42LTEuNDY3LTUuOC0xLTcuOTMzIDFWMmMwLS40LS4yNjctLjY2Ny0uNjY3LS42NjdTMi4wNjcgMS42IDIuMDY3IDJ2M2MwIC40LjI2Ni42NjYuNjY2LjY2NmgzYy40IDAgLjY2Ny0uMjY2LjY2Ny0uNjY2cy0uMjY3LS42NjctLjY2Ny0uNjY3aC0xLjZjMS0xLjA2NyAyLjQtMS42NjcgMy44NjctMS42NjcgMi45MzMgMCA1LjMzMyAyLjQgNS4zMzMgNS4zMzQgMCAyLjkzMy0yLjQgNS4zMzMtNS4zMzMgNS4zMzMtMi45MzMgMC01LjMzMy0yLjQtNS4zMzMtNS4zMzMgMC0uNC0uMjY3LS42NjctLjY2Ny0uNjY3UzEuMzMzIDcuNiAxLjMzMyA4YzAgMy42NjYgMyA2LjY2NiA2LjY2NyA2LjY2NiAyLjQgMCA0LjYtMS4yNjYgNS44LTMuMzMzIDEuOC0zLjIuNzMzLTcuMjY3LTIuNDY3LTkuMTMzWk04IDUuMzMzYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3djJjMCAuNC4yNjcuNjY2LjY2Ny42NjZoMS4zMzNjLjQgMCAuNjY3LS4yNjYuNjY3LS42NjZzLS4yNjctLjY2Ny0uNjY3LS42NjdoLS42NjZWNmMwLS40LS4yNjctLjY2Ny0uNjY3LS42NjdaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxOTAgMTkwXFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxjaXJjbGUgY3g9XFxcIjk1XFxcIiBjeT1cXFwiOTVcXFwiIHI9XFxcIjg1XFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PGNpcmNsZSBjeD1cXFwiOTVcXFwiIGN5PVxcXCI5NVxcXCIgcj1cXFwiOTVcXFwiIGZpbGw9XFxcIiNDREY4RkFcXFwiLz48cGF0aCBkPVxcXCJNNTEuMTcyIDc5LjYzNmMwLTEuODQ4IDAtMi43NzIuMjQyLTMuNjIyYTYuMzMxIDYuMzMxIDAgMCAxIC45ODEtMi4wMDdjLjUyMy0uNzEzIDEuMjUyLTEuMjggMi43MS0yLjQxNmwzNC4xMTYtMjYuNTM3Yy45MjgtLjcyMyAxLjM5Mi0xLjA4NCAxLjktMS4zNDlhNi4zMjkgNi4zMjkgMCAwIDEgMi4wNDctLjY1NWMuNTY3LS4wOCAxLjE1NS0uMDU2IDIuMzMtLjAwOCAxLjAyNy4wNDIgMS41NC4wNjMgMi4wMzMuMTYzLjYyMi4xMjYgMS4yMi4zNDQgMS43NzcuNjQ4LjQ0Mi4yNDEuODQ4LjU1NSAxLjY2MSAxLjE4NGwzNC42ODggMjYuODI0YzEuNDY3IDEuMTM0IDIuMiAxLjcwMiAyLjcyNiAyLjQxNi40NDYuNjA2Ljc4IDEuMjg4Ljk4NyAyLjAxMi4yNDQuODUyLjI0NCAxLjc4LjI0NCAzLjYzNHY1Mi4xMDFjMCAxLjgwMiAwIDIuNzA0LS4zNTYgMy4zOWEzLjE2NyAzLjE2NyAwIDAgMS0xLjM1IDEuMzQ5Yy0uNjg2LjM1Ny0xLjU4Ny4zNTctMy4zOS4zNTdINjAuMzQ1Yy0zLjI0NSAwLTQuODY3IDAtNi4xMDItLjY0MmE1LjY5NyA1LjY5NyAwIDAgMS0yLjQzLTIuNDI5Yy0uNjQxLTEuMjM1LS42NDEtMi44NTctLjY0MS02LjEwMlY3OS42MzZaXFxcIiBmaWxsPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2EpXFxcIi8+PHBhdGggZD1cXFwiTTU5Ljc3NSA3MS45MjRjMS4yODYgMCAxLjg5LjAwMiAyLjQ2LjExNC43NC4xNDYgMS40NDYuNDI5IDIuMDgxLjgzNC40OS4zMTMuOTI4LjczIDEuODU4IDEuNjE4bDI2Ljc2IDI1LjU2MmE1LjM2IDUuMzYgMCAwIDEgLjAxMiA3LjczOGwtMjYuMTM0IDI1LjExM2MtMS44MzIgMS43Ni0yLjY5MyAyLjU4MS0zLjc2NiAzLjAxMy0xLjA3Mi40MzEtMi4yNjIuNDM2LTQuODAyLjQzNmgtLjc0MmMtMS41IDAtMi41OTYgMC0zLjQzNC0uMTEzLS44MjktLjExMS0xLjM2MS0uMzI4LTEuNzYtLjcyNy0uNC0uNC0uNjE2LS45MzItLjcyOC0xLjc2MS0uMTEyLS44MzgtLjExMy0xLjkzMy0uMTEzLTMuNDM0VjgwLjIzMmMwLTEuMzU4IDAtMi4zNjIuMDU2LTMuMTYuMDU1LS43OTQuMTY0LTEuMzYzLjM3Mi0xLjg1M2E1LjQwMiA1LjQwMiAwIDAgMSAyLjg2Ny0yLjg2N2MuNDktLjIwOCAxLjA1OC0uMzE3IDEuODUzLS4zNzIuNzk4LS4wNTYgMS44MDItLjA1NiAzLjE2LS4wNTZaXFxcIiBmaWxsPVxcXCIjQjlEREZGXFxcIiBmaWxsLW9wYWNpdHk9XFxcIi42XFxcIiBzdHJva2U9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fYilcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjU5MVxcXCIvPjxwYXRoIGQ9XFxcIk0xMzEuNzggNzEuOTI0Yy0xLjI4NiAwLTEuODkuMDAyLTIuNDYxLjExNGE2LjA0MSA2LjA0MSAwIDAgMC0yLjA4MS44MzRjLS40OS4zMTMtLjkyNy43My0xLjg1NyAxLjYxOGwtMjYuNzYgMjUuNTYyYTUuMzYgNS4zNiAwIDAgMC0uMDEyIDcuNzM4bDI2LjEzNCAyNS4xMTNjMS44MzIgMS43NiAyLjY5MyAyLjU4MSAzLjc2NSAzLjAxMyAxLjA3My40MzEgMi4yNjMuNDM2IDQuODAzLjQzNmguNzQyYzEuNSAwIDIuNTk2IDAgMy40MzMtLjExMy44My0uMTExIDEuMzYyLS4zMjggMS43NjEtLjcyNy40LS40LjYxNi0uOTMyLjcyNy0xLjc2MS4xMTMtLjgzOC4xMTQtMS45MzMuMTE0LTMuNDM0VjgwLjIzMmMwLTEuMzU4IDAtMi4zNjItLjA1Ni0zLjE2LS4wNTUtLjc5NC0uMTY1LTEuMzYzLS4zNzItMS44NTNhNS40MDIgNS40MDIgMCAwIDAtMi44NjgtMi44NjdjLS40ODktLjIwOC0xLjA1OC0uMzE3LTEuODUzLS4zNzItLjc5Ny0uMDU2LTEuODAxLS4wNTYtMy4xNTktLjA1NlpcXFwiIGZpbGw9XFxcIiNCOURERkZcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjZcXFwiIHN0cm9rZT1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19jKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNTkxXFxcIi8+PHBhdGggZD1cXFwiTTUwLjcxIDEyOS40NjVjMC0xLjMxLjAwMi0xLjkyNS4xMTUtMi40OTdhNi4wMzYgNi4wMzYgMCAwIDEgMS4zODItMi44MDhjLjM4NC0uNDM5Ljg3LS44MTUgMS45MDktMS42MTVsMzUuMjczLTI3LjE2OGMuOTU2LS43MzYgMS40MDQtMS4wOCAxLjg5My0xLjMzYTYuMDM0IDYuMDM0IDAgMCAxIDEuODkyLS42MDJjLjU0My0uMDc3IDEuMTA5LS4wNTUgMi4zMTQtLjAwNiAxLjA1LjA0MyAxLjU0NC4wNjQgMi4wMTYuMTZhNi4wMzQgNi4wMzQgMCAwIDEgMS42NC41OTVjLjQyNS4yMjcuODE3LjUyNyAxLjY1MyAxLjE2NmwzNC41NTMgMjYuNDUxYzIuMzQ5IDEuNzk4IDMuNDQ1IDIuNjQ1IDQuMDU4IDMuODI0LjAzOC4wNzMuMDc1LjE0Ny4xMS4yMjIuNTYzIDEuMjAzLjU3IDIuNTg5LjU3IDUuNTQ3IDAgMS40MzEtLjAwMSAyLjQ3Ni0uMTA0IDMuMjc4LS4xMDIuNzk1LS4zIDEuMzA5LS42NjYgMS43MDJhMi43MzUgMi43MzUgMCAwIDEtLjE0My4xNDJjLS4zOTMuMzY2LS45MDcuNTY1LTEuNzAyLjY2Ny0uODAyLjEwMy0xLjg0Ny4xMDQtMy4yNzguMTA0SDU4LjU0MmMtMi4yODYgMC0zLjM1NC0uMDA0LTQuMjA1LS4zYTUuNDAzIDUuNDAzIDAgMCAxLTMuMzI2LTMuMzI3Yy0uMjk2LS44NS0uMy0xLjkxOC0uMy00LjIwNVpcXFwiIGZpbGw9XFxcIiNCOURERkZcXFwiIHN0cm9rZT1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19kKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNTkxXFxcIi8+PHBhdGggZD1cXFwiTTUwLjcxIDEyOS40NjVjMC0xLjMxLjAwMi0xLjkyNS4xMTUtMi40OTdhNi4wMzYgNi4wMzYgMCAwIDEgMS4zODItMi44MDhjLjM4NC0uNDM5Ljg3LS44MTUgMS45MDktMS42MTVsMzUuMjczLTI3LjE2OGMuOTU2LS43MzYgMS40MDQtMS4wOCAxLjg5My0xLjMzYTYuMDM0IDYuMDM0IDAgMCAxIDEuODkyLS42MDJjLjU0My0uMDc3IDEuMTA5LS4wNTUgMi4zMTQtLjAwNiAxLjA1LjA0MyAxLjU0NC4wNjQgMi4wMTYuMTZhNi4wMzQgNi4wMzQgMCAwIDEgMS42NC41OTVjLjQyNS4yMjcuODE3LjUyNyAxLjY1MyAxLjE2NmwzNC41NTMgMjYuNDUxYzIuMzQ5IDEuNzk4IDMuNDQ1IDIuNjQ1IDQuMDU4IDMuODI0bC4yNjItLjEzNy0uMjYyLjEzN2MuMDM4LjA3My4wNzUuMTQ3LjExLjIyMmwuMjY3LS4xMjUtLjI2Ny4xMjVjLjU2MyAxLjIwMy41NyAyLjU4OS41NyA1LjU0NyAwIDEuNDMxLS4wMDEgMi40NzYtLjEwNCAzLjI3OC0uMTAyLjc5NS0uMyAxLjMwOS0uNjY2IDEuNzAyYTMuMjE0IDMuMjE0IDAgMCAxLS4xNDMuMTQzYy0uMzkzLjM2NS0uOTA3LjU2NC0xLjcwMi42NjYtLjgwMi4xMDMtMS44NDcuMTA0LTMuMjc4LjEwNEg1OC41NDJjLTIuMjg2IDAtMy4zNTQtLjAwNC00LjIwNS0uM2E1LjQwMyA1LjQwMyAwIDAgMS0zLjMyNi0zLjMyN2MtLjI5Ni0uODUtLjMtMS45MTgtLjMtNC4yMDVaXFxcIiBmaWxsPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2UpXFxcIiBzdHJva2U9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fZilcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjU5MVxcXCIvPjxjaXJjbGUgY3g9XFxcIjEzMy43MzNcXFwiIGN5PVxcXCIxMzIuMjEzXFxcIiByPVxcXCIyMS4yMTNcXFwiIGZpbGw9XFxcIiNGMUY3RjlcXFwiLz48bWFzayBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19faVxcXCIgZmlsbD1cXFwiI2ZmZlxcXCI+PHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGQ9XFxcIk0xNDYuNTQxIDEyNy4zNjRhMy4wMDEgMy4wMDEgMCAwIDAtNC4yNDMtNC4yNDNsLTEyLjEzMSAxMi4xMzEtNC4yODMtNC4yODNhMyAzIDAgMSAwLTQuMjQzIDQuMjQzbDYuMzY0IDYuMzY0YTMuMDAxIDMuMDAxIDAgMCAwIDMuNDYuNTY0Yy4zMzktLjE0Ni42NTctLjM1Ny45MzQtLjYzNGwxNC4xNDItMTQuMTQyWlxcXCIvPjwvbWFzaz48cGF0aCBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGNsaXAtcnVsZT1cXFwiZXZlbm9kZFxcXCIgZD1cXFwiTTE0Ni41NDEgMTI3LjM2NGEzLjAwMSAzLjAwMSAwIDAgMC00LjI0My00LjI0M2wtMTIuMTMxIDEyLjEzMS00LjI4My00LjI4M2EzIDMgMCAxIDAtNC4yNDMgNC4yNDNsNi4zNjQgNi4zNjRhMy4wMDEgMy4wMDEgMCAwIDAgMy40Ni41NjRjLjMzOS0uMTQ2LjY1Ny0uMzU3LjkzNC0uNjM0bDE0LjE0Mi0xNC4xNDJaXFxcIiBmaWxsPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2cpXFxcIiBmaWxsLW9wYWNpdHk9XFxcIi45XFxcIi8+PHBhdGggZD1cXFwibTE0Ni41NDEgMTIzLjEyMS0uMTczLjE3My4xNzMtLjE3M1ptMCA0LjI0My0uMTczLS4xNzQuMTczLjE3NFptLTQuMjQzLTQuMjQzLS4xNzMtLjE3My4xNzMuMTczWm0tMTIuMTMxIDEyLjEzMS0uMTczLjE3My4xNzMuMTc0LjE3My0uMTc0LS4xNzMtLjE3M1ptLTQuMjgzLTQuMjgzLjE3My0uMTczLS4xNzMuMTczWm0tNC4yNDMgNC4yNDMuMTc0LS4xNzQtLjE3NC4xNzRabTYuMzY0IDYuMzY0LS4xNzMuMTczLjE3My0uMTczWm0zLjQ2LjU2NC0uMDk3LS4yMjUtLjAxMi4wMDYuMTA5LjIxOVptLjkzNC0uNjM0LS4xNzQtLjE3NC4xNzQuMTc0Wm0xMy45NjktMTguMjEyYTIuNzU2IDIuNzU2IDAgMCAxIDAgMy44OTZsLjM0Ni4zNDdhMy4yNDUgMy4yNDUgMCAwIDAgMC00LjU4OWwtLjM0Ni4zNDZabS0zLjg5NyAwYTIuNzU2IDIuNzU2IDAgMCAxIDMuODk3IDBsLjM0Ni0uMzQ2YTMuMjQzIDMuMjQzIDAgMCAwLTQuNTg5IDBsLjM0Ni4zNDZabS0xMi4xMzEgMTIuMTMxIDEyLjEzMS0xMi4xMzEtLjM0Ni0uMzQ2LTEyLjEzMSAxMi4xMzEuMzQ2LjM0NlptLTQuNjI5LTQuMjgzIDQuMjgzIDQuMjgzLjM0Ni0uMzQ2LTQuMjgzLTQuMjgzLS4zNDYuMzQ2Wm0tMy44OTYgMGEyLjc1NSAyLjc1NSAwIDAgMSAzLjg5NiAwbC4zNDYtLjM0NmEzLjI0MyAzLjI0MyAwIDAgMC00LjU4OSAwbC4zNDcuMzQ2Wm0wIDMuODk2YTIuNzU1IDIuNzU1IDAgMCAxIDAtMy44OTZsLS4zNDctLjM0NmEzLjI0NSAzLjI0NSAwIDAgMCAwIDQuNTg5bC4zNDctLjM0N1ptNi4zNjQgNi4zNjQtNi4zNjQtNi4zNjQtLjM0Ny4zNDcgNi4zNjQgNi4zNjQuMzQ3LS4zNDdabTMuMTc3LjUxOWEyLjc1NSAyLjc1NSAwIDAgMS0zLjE3Ny0uNTE5bC0uMzQ3LjM0N2EzLjI0NCAzLjI0NCAwIDAgMCAzLjc0Mi42MWwtLjIxOC0uNDM4Wm0uODY5LS41ODlhMi43MzUgMi43MzUgMCAwIDEtLjg1Ny41ODNsLjE5NC40NWEzLjIzNyAzLjIzNyAwIDAgMCAxLjAxLS42ODZsLS4zNDctLjM0N1ptMTQuMTQzLTE0LjE0Mi0xNC4xNDMgMTQuMTQyLjM0Ny4zNDcgMTQuMTQyLTE0LjE0Mi0uMzQ2LS4zNDdaXFxcIiBmaWxsPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2gpXFxcIiBtYXNrPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2kpXFxcIi8+PG1hc2sgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2xcXFwiIGZpbGw9XFxcIiNmZmZcXFwiPjxwYXRoIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgY2xpcC1ydWxlPVxcXCJldmVub2RkXFxcIiBkPVxcXCJNMTQ2LjU0MSAxMjcuMzY0YTMuMDAxIDMuMDAxIDAgMCAwLTQuMjQzLTQuMjQzbC0xMi4xMzEgMTIuMTMxLTQuMjgzLTQuMjgzYTMgMyAwIDEgMC00LjI0MyA0LjI0M2w2LjM2NCA2LjM2NGEzLjAwMSAzLjAwMSAwIDAgMCAzLjQ2LjU2NGMuMzM5LS4xNDYuNjU3LS4zNTcuOTM0LS42MzRsMTQuMTQyLTE0LjE0MlpcXFwiLz48L21hc2s+PHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGQ9XFxcIk0xNDYuNTQxIDEyNy4zNjRhMy4wMDEgMy4wMDEgMCAwIDAtNC4yNDMtNC4yNDNsLTEyLjEzMSAxMi4xMzEtNC4yODMtNC4yODNhMyAzIDAgMSAwLTQuMjQzIDQuMjQzbDYuMzY0IDYuMzY0YTMuMDAxIDMuMDAxIDAgMCAwIDMuNDYuNTY0Yy4zMzktLjE0Ni42NTctLjM1Ny45MzQtLjYzNGwxNC4xNDItMTQuMTQyWlxcXCIgZmlsbD1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19qKVxcXCIgZmlsbC1vcGFjaXR5PVxcXCIuNzVcXFwiLz48cGF0aCBkPVxcXCJtMTQ2LjU0MSAxMjMuMTIxLS4xNzMuMTczLjE3My0uMTczWm0wIDQuMjQzLS4xNzMtLjE3NC4xNzMuMTc0Wm0tNC4yNDMtNC4yNDMtLjE3My0uMTczLjE3My4xNzNabS0xMi4xMzEgMTIuMTMxLS4xNzMuMTczLjE3My4xNzQuMTczLS4xNzQtLjE3My0uMTczWm0tNC4yODMtNC4yODMuMTczLS4xNzMtLjE3My4xNzNabS00LjI0MyA0LjI0My4xNzQtLjE3NC0uMTc0LjE3NFptNi4zNjQgNi4zNjQtLjE3My4xNzMuMTczLS4xNzNabTMuNDYuNTY0LS4wOTctLjIyNS0uMDEyLjAwNi4xMDkuMjE5Wm0uOTM0LS42MzQtLjE3NC0uMTc0LjE3NC4xNzRabTEzLjk2OS0xOC4yMTJhMi43NTYgMi43NTYgMCAwIDEgMCAzLjg5NmwuMzQ2LjM0N2EzLjI0NSAzLjI0NSAwIDAgMCAwLTQuNTg5bC0uMzQ2LjM0NlptLTMuODk3IDBhMi43NTYgMi43NTYgMCAwIDEgMy44OTcgMGwuMzQ2LS4zNDZhMy4yNDMgMy4yNDMgMCAwIDAtNC41ODkgMGwuMzQ2LjM0NlptLTEyLjEzMSAxMi4xMzEgMTIuMTMxLTEyLjEzMS0uMzQ2LS4zNDYtMTIuMTMxIDEyLjEzMS4zNDYuMzQ2Wm0tNC42MjktNC4yODMgNC4yODMgNC4yODMuMzQ2LS4zNDYtNC4yODMtNC4yODMtLjM0Ni4zNDZabS0zLjg5NiAwYTIuNzU1IDIuNzU1IDAgMCAxIDMuODk2IDBsLjM0Ni0uMzQ2YTMuMjQzIDMuMjQzIDAgMCAwLTQuNTg5IDBsLjM0Ny4zNDZabTAgMy44OTZhMi43NTUgMi43NTUgMCAwIDEgMC0zLjg5NmwtLjM0Ny0uMzQ2YTMuMjQ1IDMuMjQ1IDAgMCAwIDAgNC41ODlsLjM0Ny0uMzQ3Wm02LjM2NCA2LjM2NC02LjM2NC02LjM2NC0uMzQ3LjM0NyA2LjM2NCA2LjM2NC4zNDctLjM0N1ptMy4xNzcuNTE5YTIuNzU1IDIuNzU1IDAgMCAxLTMuMTc3LS41MTlsLS4zNDcuMzQ3YTMuMjQ0IDMuMjQ0IDAgMCAwIDMuNzQyLjYxbC0uMjE4LS40MzhabS44NjktLjU4OWEyLjczNSAyLjczNSAwIDAgMS0uODU3LjU4M2wuMTk0LjQ1YTMuMjM3IDMuMjM3IDAgMCAwIDEuMDEtLjY4NmwtLjM0Ny0uMzQ3Wm0xNC4xNDMtMTQuMTQyLTE0LjE0MyAxNC4xNDIuMzQ3LjM0NyAxNC4xNDItMTQuMTQyLS4zNDYtLjM0N1pcXFwiIGZpbGw9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19faylcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjFcXFwiIG1hc2s9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fbClcXFwiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2FcXFwiIHgxPVxcXCI3Ni42ODRcXFwiIHkxPVxcXCI4Ni41NjhcXFwiIHgyPVxcXCIxNDMuNDE3XFxcIiB5Mj1cXFwiMTExLjI4M1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiM3RkMwRkJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM0MDg4RjRcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19fYlxcXCIgeDE9XFxcIjkxLjg4OVxcXCIgeTE9XFxcIjY4LjM3OFxcXCIgeDI9XFxcIjM0LjAwOFxcXCIgeTI9XFxcIjkzLjkzN1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIi43NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19jXFxcIiB4MT1cXFwiOTkuNjY1XFxcIiB5MT1cXFwiNjguMzc4XFxcIiB4Mj1cXFwiMTU3LjU0N1xcXCIgeTI9XFxcIjkzLjkzN1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIi43NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19kXFxcIiB4MT1cXFwiNDUuOTE3XFxcIiB5MT1cXFwiOTYuMTg1XFxcIiB4Mj1cXFwiNjYuNTY5XFxcIiB5Mj1cXFwiMTU5LjgyMlxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIi43NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19lXFxcIiB4MT1cXFwiOTUuNFxcXCIgeTE9XFxcIjkzXFxcIiB4Mj1cXFwiOTUuNFxcXCIgeTI9XFxcIjEzNy41OTJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjQTdEMkZEXFxcIiBzdG9wLW9wYWNpdHk9XFxcIi4yNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzk3QzhGQ1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19mXFxcIiB4MT1cXFwiNDUuOTE3XFxcIiB5MT1cXFwiOTYuMTg1XFxcIiB4Mj1cXFwiNjYuNTY5XFxcIiB5Mj1cXFwiMTU5LjgyMlxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIi43NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19nXFxcIiB4MT1cXFwiMTUwLjM0M1xcXCIgeTE9XFxcIjEyNC4xMjhcXFwiIHgyPVxcXCIxMTcuMzIyXFxcIiB5Mj1cXFwiMTM3LjM5NVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiMxNzk5N0JcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxNzk5N0JcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19oXFxcIiB4MT1cXFwiMTUwLjg3MVxcXCIgeTE9XFxcIjEyMS4yMjVcXFwiIHgyPVxcXCIxMzQuMDM1XFxcIiB5Mj1cXFwiMTI1Ljg5XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2pcXFwiIHgxPVxcXCIxNTAuMzQzXFxcIiB5MT1cXFwiMTI0LjEyOFxcXCIgeDI9XFxcIjExNy4zMjJcXFwiIHkyPVxcXCIxMzcuMzk1XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMTc5OTdCXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2tcXFwiIHgxPVxcXCIxNTAuODcxXFxcIiB5MT1cXFwiMTIxLjIyNVxcXCIgeDI9XFxcIjEzNC4wMzVcXFwiIHkyPVxcXCIxMjUuODlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjMTc5OTdCXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxNzk5N0JcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMThcXFwiPjxwYXRoIGQ9XFxcIk00LjMxMSA3LjQzIDMuNzQgOGgxMC45MjZhMSAxIDAgMSAxIDAgMkgzLjc0bC41NzEuNTcgNC40IDQuMzg2YTEgMSAwIDAgMSAwIDEuNDJsLS4wMDEuMDAzYTEgMSAwIDAgMS0xLjQyIDBsLS4wMDEtLjAwMUwuNjI1IDkuNzE0YTEgMSAwIDAgMS0uMjA4LS4zMjhMLjQxNSA5LjM4YTEgMSAwIDAgMSAwLS43NmwuMDAyLS4wMDZhMSAxIDAgMCAxIC4yMDgtLjMyOGw2LjY2NC02LjY2NC0uMjM2LS4yMzUuMjM2LjIzNUExLjAwNSAxLjAwNSAwIDEgMSA4LjcxIDMuMDQ0bC00LjQgNC4zODdaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIiBzdHJva2U9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNjYgNjNcXFwiPjxwYXRoIGQ9XFxcIk0uODMgNTguOTFWMjguN2g4LjcyNXYzMC4yMUguODNabTM1LjAxNy0yLjkzYy0xLjk4MyAyLjQxNi00LjgzNSAzLjc3Ny04LjYxNSAzLjc3Ny02LjA3NiAwLTEwLjk3MS0zLjc3OC0xMC45NzEtOS42MDMgMC01Ljc2MyA0Ljg5OC04LjYxIDExLjc3Ny04Ljk4NSA1LjI3LS4zMSA2Ljk0My0uODY4IDYuOTQzLTIuNjYzIDAtMS43MzYtMS42MTEtMi45MTMtNC40NjMtMi45MTMtMy40NyAwLTQuOTYgMS43MzYtNS4xNDUgMy41OTRoLTguNDk0Yy40MzQtNi42MjggNS4zOTItMTEuMjE0IDEzLjcwMS0xMS4yMTQgOC4xMjIgMCAxMy4zMyA0LjM5OCAxMy4zMyAxMi42Mzd2MTguNDYzaC03LjI1NGwtLjgwOS0zLjA5NFptLTEwLjc4Ni02LjE5NWMwIDEuNzM2IDEuNTUgMi43ODggNC4wMyAyLjc4OCAzLjM0OCAwIDYuMDEyLTEuODU4IDYuMDEyLTUuNjM4VjQ1Ljgycy0xLjYxMS43NDMtNC45Ni45M2MtMy42NTguMTg1LTUuMDgyIDEuMzYyLTUuMDgyIDMuMDM1Wm0zOC4zMDcgOS40MTZjLTYuNjMyIDAtMTAuNDc3LTMuODQtMTAuNDc3LTEwLjUzM1YzNi44MzZoLTUuMDgzdi04LjExN2g1LjA4M3YtNC40NjFsOC44MDItNy40MzRWMjguNzJoNy42MjZ2OC4xMTdoLTcuNjI2VjQ3LjQzYzAgMi45MTIgMS45MjIgMy41OTMgMy43MiAzLjU5M2E5LjUzOSA5LjUzOSAwIDAgMCAzLjcyMS0uODA1djcuOTkyYzAgLjAwMi0yLjM1NS45OTItNS43NjYuOTkyWk0uMDggMTkuNjM0YzAtMi44NSAyLjIzLTUuMTQyIDUuMDgyLTUuMTQyYTUuMTMgNS4xMyAwIDAgMSA1LjE0NSA1LjE0MmMwIDIuNzg4LTIuMjkzIDUuMDgtNS4xNDUgNS4wOGE1LjA2MyA1LjA2MyAwIDAgMS01LjA4Mi01LjA4Wk03NS44MDkgNTguOTFWMjguN2g4LjcyNnYzMC4yMWgtOC43MjZabTIwLjE1NC0zOS4yMDJjMC0xLjQtLjE5LTIuNzYtLjUzNy00LjA1M2ExNS41MSAxNS41MSAwIDAgMC0xLjU2OS0zLjc3MiAxNS42NjUgMTUuNjY1IDAgMCAwLTIuNDg5LTMuMjQxIDE1LjczMiAxNS43MzIgMCAwIDAtNy4wMTgtNC4wNSAxNS42NTggMTUuNjU4IDAgMCAwLTQuMDUyLS41MzNoLS4wMDZhMTUuNzUgMTUuNzUgMCAwIDAtNC4wNDkuNTNjLTEuMzQuMzU3LTIuNjA1Ljg4OC0zLjc3NyAxLjU2NUExNS42NyAxNS42NyAwIDAgMCA2OS4yMiA4LjY0YTE1Ljc3IDE1Ljc3IDAgMCAwLTIuNDkyIDMuMjQyIDE1LjY0OCAxNS42NDggMCAwIDAtMS41NzIgMy43NzRsMi4yNDIuNjAyYTEzLjQyNyAxMy40MjcgMCAwIDEgMy40NjItNS45NzggMTMuNDI2IDEzLjQyNiAwIDAgMSA1Ljk4NC0zLjQ1IDEzLjQyNiAxMy40MjYgMCAwIDEgMy40NDgtLjQ1aC4wMDZjMS4xOTUgMCAyLjM1LjE1OCAzLjQ1NC40NTNhMTMuNDEyIDEzLjQxMiAwIDAgMSA1Ljk4IDMuNDQ5Yy44MTkuODIgMS41MzEgMS43NSAyLjExOSAyLjc2YTEzLjMgMTMuMyAwIDAgMSAxLjc5MyA2LjY2NHYuMDEyYTEzLjM4IDEzLjM4IDAgMCAxLS40NTEgMy40NDMgMTMuMjE3IDEzLjIxNyAwIDAgMS0xLjMzNCAzLjIxOWwyLjAxIDEuMTZhMTUuNTM5IDE1LjUzOSAwIDAgMCAxLjU2Ni0zLjc3OCAxNS43IDE1LjcgMCAwIDAgLjUzLTQuMDQxbC0uMDAyLS4wMTJaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTEwMC4wMjMgMTkuNzA4YTE5LjY1NSAxOS42NTUgMCAwIDAtMi42NDQtOS44NTUgMTkuODEgMTkuODEgMCAwIDAtNy4yMi03LjIxM0ExOS42MTIgMTkuNjEyIDAgMCAwIDg1LjQwMy42NyAxOS44MSAxOS44MSAwIDAgMCA4MC4yOTggMGgtLjAwNmMtMS43NjUgMC0zLjQ3My4yMzMtNS4xMDIuNjY2YTE5LjUxMyAxOS41MTMgMCAwIDAtNC43NTkgMS45NjkgMTkuODI0IDE5LjgyNCAwIDAgMC00LjA4NiAzLjEzNGwxLjIzMSAxLjIzYTE4LjEwNiAxOC4xMDYgMCAwIDEgMy43MjYtMi44NTUgMTcuODAzIDE3LjgwMyAwIDAgMSA0LjM0LTEuNzkzIDE4LjA4NCAxOC4wODQgMCAwIDEgNC42NDgtLjYwN2guMDA1YTE3Ljk1IDE3Ljk1IDAgMCAxIDEyLjcxMyA1LjI2MSAxNy45MzMgMTcuOTMzIDAgMCAxIDUuMjczIDEyLjcwM3YuMDExYTE4LjAzIDE4LjAzIDAgMCAxLS42MDcgNC42NDMgMTcuNjc1IDE3LjY3NSAwIDAgMS0xLjc5NyA0LjMzNyAxOC4wMjMgMTguMDIzIDAgMCAxLTIuODU3IDMuNzIzbDEuMjMxIDEuMjMxYTE5Ljc0MyAxOS43NDMgMCAwIDAgMy4xMzYtNC4wODQgMTkuNiAxOS42IDAgMCAwIDEuOTctNC43NTZjLjQzNC0xLjYyNS42NjYtMy4zMzIuNjY2LTUuMDk0di0uMDFaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTkwLjk0NSAxNi44NTVhMTAuOTQ4IDEwLjk0OCAwIDAgMC0xLjEwNC0yLjY1NSAxMS4xNTUgMTEuMTU1IDAgMCAwLTEuNzUtMi4yOCAxMS4wNDggMTEuMDQ4IDAgMCAwLTIuMjgyLTEuNzQ3QTEwLjk2NCAxMC45NjQgMCAwIDAgODAuMyA4LjY5NWgtLjAwNmMtLjk4NyAwLTEuOTQuMTMtMi44NDkuMzcyYTEwLjkxIDEwLjkxIDAgMCAwLTIuNjYgMS4xIDEwLjk5NCAxMC45OTQgMCAwIDAtNC4wMzcgNC4wMjcgMTEgMTEgMCAwIDAtMS40ODQgNS41MXYuMDEyYTEwLjkyNCAxMC45MjQgMCAwIDAgMS40NzYgNS41MDVsMy4wMTMtMS43MzhhNy41MzUgNy41MzUgMCAwIDEtMS4wMS0zLjc3di0uMDFhNy41NTMgNy41NTMgMCAwIDEgNy41NDgtNy41MzNoLjAwNmE3LjUyNCA3LjUyNCAwIDAgMSAzLjc2OSAxLjAxMiA3LjU1IDcuNTUgMCAwIDEgMy41MTMgNC41NzJjLjE2Ny42Mi4yNTggMS4yNzYuMjU4IDEuOTUxaDMuNDc5Yy4wMDMtLjk4NC0uMTI4LTEuOTQtLjM3Mi0yLjg1WlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk04Ny41ODUgMTcuNzY1YTcuNTQyIDcuNTQyIDAgMCAwLTEuOTU1LTMuMzhsLTEuNjQgMS42MzlhNS4yNjQgNS4yNjQgMCAwIDEgMS4zNTQgMi4zNDMgNS4xODQgNS4xODQgMCAwIDEgMCAyLjcwNSA1LjIzOSA1LjIzOSAwIDAgMS0zLjY5OCAzLjY5NSA1LjE5NSA1LjE5NSAwIDAgMS0yLjcwNyAwIDUuMjk2IDUuMjk2IDAgMCAxLTEuMjYtLjUyMWwtMS4xNiAyLjAwOGE3LjUyOCA3LjUyOCAwIDAgMCAzLjc3NCAxLjAxYy42NzcgMCAxLjMzLS4wOTEgMS45NTQtLjI1NmE3LjU1MyA3LjU1MyAwIDAgMCA0LjU4NC0zLjUxNyA3LjU0NCA3LjU0NCAwIDAgMCAxLjAxMy0zLjc3MSA3LjUgNy41IDAgMCAwLS4yNTktMS45NTVaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIi8+PHBhdGggZD1cXFwiTTkxLjg1MyAxMy4wNDZhMTMuNDM1IDEzLjQzNSAwIDAgMC0yLjEyLTIuNzY1IDEzLjM0MyAxMy4zNDMgMCAwIDAtMi43NjYtMi4xMTggMTMuMjg3IDEzLjI4NyAwIDAgMC02LjY3NS0xLjc5Yy0xLjE5NyAwLTIuMzUyLjE1OS0zLjQ1Ni40NTQtMS4xNDEuMzAzLTIuMjIuNzU3LTMuMjE4IDEuMzM2YTEzLjQzNiAxMy40MzYgMCAwIDAtMi43NjcgMi4xMTggMTMuMzM0IDEzLjMzNCAwIDAgMC0yLjEyIDIuNzY1IDEzLjI3MiAxMy4yNzIgMCAwIDAtMS43OSA2LjY3aDIuMzJjMC0uOTg2LjEzMS0xLjk0Mi4zNzUtMi44NTJhMTEuMDg4IDExLjA4OCAwIDAgMSAyLjg1NS00Ljk0IDExLjAwMiAxMS4wMDIgMCAwIDEgMi4yODQtMS43NSAxMS4wMyAxMS4wMyAwIDAgMSAyLjY2LTEuMTA0IDExLjAyIDExLjAyIDAgMCAxIDIuODU0LS4zNzRjLjk4OCAwIDEuOTQ0LjEzIDIuODU1LjM3NGExMS4wOTkgMTEuMDk5IDAgMCAxIDQuOTQzIDIuODUzIDEwLjk5IDEwLjk5IDAgMCAxIDEuNzUxIDIuMjgzYy40NzcuODI2Ljg1MiAxLjcxNiAxLjEwNCAyLjY1OGwyLjI0Mi0uNjAyYTEzLjE5NCAxMy4xOTQgMCAwIDAtMS4zMy0zLjIxNlpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiLz48cGF0aCBkPVxcXCJNOTcuNjc0IDE1LjA2M2ExNy43OTEgMTcuNzkxIDAgMCAwLTEuOC00LjMzNiAxOC4wNDMgMTguMDQzIDAgMCAwLTYuNTg2LTYuNTgzIDE3LjkzIDE3LjkzIDAgMCAwLTguOTk2LTIuNDA4Yy0xLjYxMiAwLTMuMTcyLjIxMy00LjY1Ny42MWExNy44MTcgMTcuODE3IDAgMCAwLTQuMzM5IDEuNzk4IDE4LjAzMiAxOC4wMzIgMCAwIDAtNi41ODYgNi41ODNsMi4wMTIgMS4xNjNhMTUuNjc2IDE1LjY3NiAwIDAgMSAyLjQ4OS0zLjI0NWMuOTY1LS45NjQgMi4wNTctMS44IDMuMjQ2LTIuNDg3YTE1LjcwNiAxNS43MDYgMCAwIDEgMy43NzctMS41NjkgMTUuNjggMTUuNjggMCAwIDEgOC4xMSAwYzEuMzQuMzU4IDIuNjA2Ljg5MSAzLjc3OCAxLjU2OWExNS42ODUgMTUuNjg1IDAgMCAxIDMuMjQ2IDIuNDg3IDE1LjY3NiAxNS42NzYgMCAwIDEgMi40ODkgMy4yNDUgMTUuNjg0IDE1LjY4NCAwIDAgMSAxLjU2OSAzLjc3NCAxNS42NTQgMTUuNjU0IDAgMCAxIDAgOC4xMDZsMi4yNDUuNjAxYy4zOTctMS40ODMuNjEtMy4wNDMuNjEtNC42NTRhMTcuODc1IDE3Ljg3NSAwIDAgMC0uNjA4LTQuNjU0WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIvPjxwYXRoIGQ9XFxcIk04MC4yOTMgMjQuOTQ0YzIuODg4IDAgNS4yMy0yLjM0IDUuMjMtNS4yMjdhNS4yMjkgNS4yMjkgMCAwIDAtNS4yMy01LjIyNyA1LjIyOCA1LjIyOCAwIDAgMC01LjIzIDUuMjI3IDUuMjI4IDUuMjI4IDAgMCAwIDUuMjMgNS4yMjdabTIwLjYxNSAxNS40MzZWMjkuNTQzaDIuMzA0VjQwLjM4aC0yLjMwNFptNi42MTgtMy43ODd2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTM5IDIuNTM5IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDMzLjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTkuNjY2IDMuODE3Yy0xLjY1NSAwLTIuNjE0LS45NTgtMi42MTQtMi42Mjh2LTIuOTUzaC0xLjI2OHYtMi4wMjVoMS4yNjh2LTEuMTExbDIuMTk2LTEuODU1djIuOTdoMS45MDJ2Mi4wMjRoLTEuOTAydjIuNjQzYzAgLjcyNy40OC44OTcuOTI4Ljg5Ny41MTEgMCAuOTI4LS4yMDIuOTI4LS4yMDJ2MS45OTRzLS41ODcuMjQ3LTEuNDM4LjI0N1ptMTAuMTkzLTMuMjNoLTUuMzUyYy4xMjUuNzc1Ljc1NyAxLjM2MiAxLjcgMS4zNjIuNjM1IDAgMS4wMDQtLjI2NCAxLjIzNy0uNjVoMi4zNjdjLS41MTEgMS42NC0xLjY4NiAyLjY2LTMuNTczIDIuNjYtMi4xOTcgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYwOS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OSAwIDMuNzU3IDEuOTYzIDMuNzU3IDMuOTg4IDAgLjE5OC0uMDE0LjU3LS4wMTQuNTdabS0zLjcxNS0yLjYyOGMtLjgzNCAwLTEuMzkzLjUxLTEuNTMyIDEuMTZoMi45NGMtLjA0Ni0uNjY0LS42MTktMS4xNi0xLjQwOC0xLjE2Wm0xMC4yMzktMS4zMTV2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5N3YtNy41NzVoMi4xNjV2LjYzNWMtLjAxNCAwIC40MzUtLjc0MyAxLjUxNi0uNzQzLjkyOCAwIDEuMzYyLjU0MiAxLjM2Mi41NDJabTMuNDAzIDMuMzU2djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjV2LjUyNWEyLjU0MyAyLjU0MyAwIDAgMSAxLjc5NC0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDYgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk3di00LjIzNWMwLS44MDItLjM3MS0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzNi4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptMTEuMTY2IDMuMDE1Yy0uNDk2LjYwNC0xLjIwNi45NDUtMi4xNTEuOTQ1LTEuNTE1IDAtMi43MzgtLjk0NS0yLjczOC0yLjM5NyAwLTEuNDM4IDEuMjItMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTMtLjcyNi0uODY1IDAtMS4yMzcuNDM0LTEuMjg1Ljg5NmgtMi4xMmMuMTA4LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDItMi43OTkgMi4wMjYgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNmgtMS44MTFsLS4xOTktLjc3NVptLTIuNjkzLTEuNTQ1YzAgLjQzNC4zODYuNjk0IDEuMDA1LjY5NC44MzQgMCAxLjUwMS0uNDYyIDEuNTAxLTEuNDA2di0uMjc4cy0uNDAzLjE4NC0xLjIzNy4yMzJjLS45MTQuMDQ2LTEuMjY5LjM0LTEuMjY5Ljc1OFptOS41NTggMi4zNDdjLTEuNjU1IDAtMi42MTQtLjk1OC0yLjYxNC0yLjYyOHYtMi45NTNoLTEuMjY5di0yLjAyNWgxLjI2OXYtMS4xMTFsMi4xOTYtMS44NTV2Mi45N2gxLjkwMnYyLjAyNGgtMS45MDJ2Mi42NDNjMCAuNzI3LjQ4Ljg5Ny45MjguODk3LjUxMSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU5LjI0Ny0xLjQzOC4yNDdabTIuOTUxLTkuNzUzYzAtLjcxMi41NTYtMS4yODIgMS4yNjgtMS4yODIuNzEzIDAgMS4yODYuNTczIDEuMjg2IDEuMjgyIDAgLjY5NS0uNTczIDEuMjY4LTEuMjg2IDEuMjY4YTEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjJ2LTcuNTc1aDIuMTk3djcuNTc1aC0yLjE5N1ptMy43ODktMy43ODZjMC0yLjI3MiAxLjc0OC0zLjk3NCA0LjAzOC0zLjk3NHM0LjAzNSAxLjcwMiA0LjAzNSAzLjk3NGMwIDIuMjcxLTEuNzQ4IDMuOTU2LTQuMDM1IDMuOTU2LTIuMjkgMC00LjAzOC0xLjY4NS00LjAzOC0zLjk1NlptMi4yNDUgMGMwIDEuMTExLjc1NyAxLjkxNyAxLjc5MyAxLjkxN3MxLjc5NC0uODAzIDEuNzk0LTEuOTE3YzAtMS4xMTItLjc1OC0xLjkxOC0xLjc5NC0xLjkxOHMtMS43OTMuODAzLTEuNzkzIDEuOTE4Wm05LjU0IDB2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTQgMi41NCAwIDAgMSAxLjc5My0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDYgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk2di00LjIzNWMwLS44MDItLjM3Mi0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzNi4wMDMtMS4zOTEuNzc0LTEuMzkxIDEuOTM0Wm0xMS4xNjcgMy4wMTVjLS40OTcuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTYgMC0yLjczOS0uOTQ1LTIuNzM5LTIuMzk3IDAtMS40MzggMS4yMjEtMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTItLjcyNi0uODY2IDAtMS4yMzcuNDM0LTEuMjg2Ljg5NmgtMi4xMTljLjEwNy0xLjY1MyAxLjM0NS0yLjc5OSAzLjQxOS0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA2aC0xLjgxbC0uMTk5LS43NzVabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NCAxLjAwNC42OTQuODM1IDAgMS41MDItLjQ2MiAxLjUwMi0xLjQwNnYtLjI3OHMtLjQwMy4xODQtMS4yMzguMjMyYy0uOTExLjA0Ni0xLjI2OC4zNC0xLjI2OC43NThabTYuNTI0IDIuMzE3VjI5LjU0M2gyLjE5NlY0MC4zOGgtMi4xOTZabTE0LjA4OS0xMC44MzcgNC4yNCAxMC44MzdoLTIuMzgxbC0uODY2LTIuMTMzaC00LjE5MWwtLjg1MSAyLjEzM2gtMi4zODFsNC4yMzktMTAuODM3aDIuMTkxWm0tMS4wOTggMy4xMjMtMS4zNDUgMy41MzloMi42OWwtMS4zNDUtMy41NFptNi4zODUtMi4wMDljMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OS0xLjI4Mi43MTIgMCAxLjI4NS41NzMgMS4yODUgMS4yODIgMCAuNjk1LS41NzMgMS4yNjgtMS4yODUgMS4yNjhhMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjktMS4yNjhabS4xNyA5LjcyMnYtNy41NzVoMi4xOTd2Ny41NzVoLTIuMTk3Wm0zLjc4OS0zLjc4NmMwLTIuMzk2IDEuNzE2LTMuOTczIDMuODE5LTMuOTczLjg2NiAwIDEuNTkyLjMyMyAxLjk4MS42NjR2LTMuNzQxaDIuMTk2VjQwLjM4aC0yLjE2NXYtLjU0MmMtLjQuMzg2LTEuMTYuNzEyLTIuMDA5LjcxMi0yLjEwNiAwLTMuODIyLTEuNTE1LTMuODIyLTMuOTU2Wm01LjgzMSAwYzAtMS4xNzQtLjc3Mi0xLjk4LTEuNzkzLTEuOTgtMS4wMjIgMC0xLjc5NC44MDMtMS43OTQgMS45OCAwIDEuMTc1Ljc3MiAxLjk4IDEuNzk0IDEuOTggMS4wMjEgMCAxLjc5My0uODA1IDEuNzkzLTEuOThaTTEwMC4xOTYgNDguMDloOC41MjJ2Mi4xMThoLTMuMTF2OC43MTloLTIuMzA0di04LjcxOWgtMy4xMTFWNDguMDloLjAwM1ptMTMuODg4IDMuNjkydjIuMTY0cy0uNTczLS41ODctMS40MzktLjU4N2MtLjY2NCAwLTEuNDA3LjM1NC0xLjQwNyAxLjQ2OXY0LjA5NWgtMi4xOTZ2LTcuNTc1aDIuMTY1di42MzVjLS4wMTQgMCAuNDM0LS43NDMgMS41MTUtLjc0My45MzEuMDAzIDEuMzYyLjU0MiAxLjM2Mi41NDJabTUuODkxIDYuMzcxYy0uNDk2LjYwNC0xLjIwNi45NDUtMi4xNTEuOTQ1LTEuNTE1IDAtMi43MzgtLjk0NS0yLjczOC0yLjM5NyAwLTEuNDM4IDEuMjItMi4xNSAyLjkzNy0yLjI0IDEuMzE0LS4wNzcgMS43MzQtLjIxNiAxLjczNC0uNjY0IDAtLjQzNC0uNDAzLS43MjYtMS4xMTItLjcyNi0uODY2IDAtMS4yMzguNDM0LTEuMjg2Ljg5NmgtMi4xMmMuMTA4LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDItMi43OTkgMi4wMjYgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNWgtMS44MTFsLS4xOTktLjc3NFptLTIuNjktMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDUuNjk1LjgzNCAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm04LjcyMS0xLjQ3djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjV2LjUyNWEyLjU0IDIuNTQgMCAwIDEgMS43OTQtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA1IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5N3YtNC4yMzVjMC0uODAyLS4zNzEtMS40ODMtMS4yNTQtMS40ODMtMS4wMzMuMDAzLTEuMzkuNzc0LTEuMzkgMS45MzRabTEwLjc5NSAxLjYwN2MwLS4yMzItLjEzOS0uNDE2LS43NDQtLjU0MWwtMS4xNDMtLjIzM2MtMS43MTctLjM0LTIuNDQ0LTEuMTYtMi40NDQtMi4yODggMC0xLjMzIDEuMDA1LTIuNTE5IDMuMDk0LTIuNTE5IDIuMTAyIDAgMy4wNDcgMS4xNzQgMy4yMDEgMi40OWgtMi4wODljLS4xMjUtLjQxNy0uNDgtLjY2NC0xLjEyOS0uNjY0LS42MTkgMC0uOTYuMjE2LS45Ni41MjUgMCAuMjMzLjE4NS4zNzIuNzU4LjQ4bDEuMTQ0LjIzMmMxLjYyMy4zMjMgMi40MjkgMS4wODMgMi40MjkgMi4zOCAwIDEuNDY5LTEuMDY3IDIuNDktMy4xODcgMi40OS0yLjE2NSAwLTMuMzI2LTEuMDIxLTMuNTQyLTIuNTk4aDIuMjE0Yy4xMjUuNTI0LjUxMS44MDIgMS4zMjguODAyLjc0NiAwIDEuMDctLjIxNSAxLjA3LS41NTZabTExLjU1Mi0xLjYwOGMwIDIuMzk3LTEuNzE3IDMuOTU3LTMuODE5IDMuOTU3LS44NjYgMC0xLjU5Mi0uMzEtMS45ODEtLjY1djMuNDc3aC0yLjE5N1Y1MS4zNDhoMi4xNjZ2LjU0MmMuNDAzLS4zODYgMS4xNi0uNzI2IDIuMDEyLS43MjYgMi4xMDIgMCAzLjgxOSAxLjUxNyAzLjgxOSAzLjk3M1ptLTUuODMxIDBjMCAxLjE3NS43NzQgMS45OCAxLjc5MyAxLjk4IDEuMDIyIDAgMS43OTQtLjgwMyAxLjc5NC0xLjk4IDAtMS4xNzQtLjc3Mi0xLjk4LTEuNzk0LTEuOTgtMS4wMTkuMDA0LTEuNzkzLjgwNi0xLjc5MyAxLjk4Wm0xMS44NzkgMy4wMTZjLS40OTcuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTYgMC0yLjczOS0uOTQ1LTIuNzM5LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzNy40MzQtMS4yODYuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDYtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxMWwtLjE5OC0uNzc0Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDQuNjk1LjgzNSAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxMS4wNDYtMS4yNjguMzQtMS4yNjguNzU4Wm0xMS41NjYtNC44MjZ2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5N3YtNy41NzVoMi4xNjZ2LjYzNWMtLjAxNSAwIC40MzQtLjc0MyAxLjUxNS0uNzQzLjkyOC4wMDMgMS4zNjIuNTQyIDEuMzYyLjU0MlptOC40MjggMy45NDRoLTUuMzUyYy4xMjUuNzc0Ljc1OCAxLjM2IDEuNzAzIDEuMzYuNjM2IDAgMS4wMDUtLjI2MyAxLjIzNy0uNjQ5aDIuMzY3Yy0uNTExIDEuNjQtMS42ODYgMi42Ni0zLjU3MyAyLjY2LTIuMTk2IDAtMy45NTktMS41My0zLjk1OS0zLjkxIDAtMi4yODkgMS42MS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OSAwIDMuNzU3IDEuOTYzIDMuNzU3IDMuOTg4IDAgLjItLjAxNy41Ny0uMDE3LjU3Wm0tMy43MTEtMi42MjdjLS44MzUgMC0xLjM5NC41MS0xLjUzMyAxLjE2aDIuOTRjLS4wNDUtLjY2Ni0uNjE5LTEuMTYtMS40MDctMS4xNlptNy4zOTIgMi4wMzl2My43ODdoLTIuMTk2di03LjU3NmgyLjE2NXYuNTI1YTIuNTM4IDIuNTM4IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNSAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTExLjU2Ny44MzdoMi40MTJjLS4zNTcgMS44NC0xLjc0OCAzLjEyMy0zLjc5MSAzLjEyMy0yLjI5IDAtMy45OS0xLjY4NS0zLjk5LTMuOTU3IDAtMi4yNzEgMS43MDMtMy45NzMgMy45OS0zLjk3MyAxLjk5NSAwIDMuMzg4IDEuMjM2IDMuNjY2IDMuMDI5aC0yLjQxNWMtLjE3LS41NzMtLjY2NC0uOTU5LTEuMzI4LS45NTktLjkyOCAwLTEuNjcxLjc4OS0xLjY3MSAxLjkgMCAxLjExMi43NDMgMS45IDEuNzAzIDEuOS43MTIuMDA0IDEuMjQtLjQxNiAxLjQyNC0xLjA2M1ptNS4xMDIgNi4wMjdjLS45OSAwLTEuNDg0LS4yNjQtMS40ODQtLjI2NHYtMi4wMXMuNDQ4LjIzMi45MjguMjMyYy40OTYgMCAxLjE0My0uMTg0IDEuMjk5LTEuMDM1bC0yLjk1NC03LjU3NWgyLjQ0NGwxLjcxNyA0LjY5OSAxLjc0OC00LjdoMi4zNDlsLTMuMDc5IDcuN2MtLjgwMyAyLjAyNi0xLjQ1MyAyLjk1My0yLjk2OCAyLjk1M1ptMTEuNTk4LTMuMDc1VjQ4LjA5aDIuMzA1djEwLjgzN2gtMi4zMDVabTYuNjE4LTMuNzg5djMuNzg3aC0yLjE5N3YtNy41NzZoMi4xNjZ2LjUyNWEyLjUzOCAyLjUzOCAwIDAgMSAxLjc5My0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDUgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk2di00LjIzNWMwLS44MDItLjM3Mi0xLjQ4My0xLjI1NS0xLjQ4My0xLjAzMy4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptNi41NDEtNS45MzZjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4MnMxLjI4Ni41NzMgMS4yODYgMS4yODJhMS4yOCAxLjI4IDAgMCAxLTEuMjg2IDEuMjY4IDEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk2djcuNTc1aC0yLjE5NlptNy4yNTQuMDI5Yy0xLjY1NSAwLTIuNjE0LS45NTktMi42MTQtMi42M3YtMi45NTJoLTEuMjY4VjUxLjM1aDEuMjY4di0xLjExMWwyLjE5Ni0xLjg1NXYyLjk3aDEuOTAydjIuMDI0aC0xLjkwMnYyLjY0M2MwIC43MjYuNDguODk3LjkyOC44OTcuNTExIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTg3LjI0Ny0xLjQzOC4yNDdabTIuOTU0LTkuNzU0YzAtLjcxMi41NTYtMS4yODIgMS4yNjgtMS4yODJzMS4yODYuNTczIDEuMjg2IDEuMjgyYTEuMjggMS4yOCAwIDAgMS0xLjI4NiAxLjI2OCAxLjI2NCAxLjI2NCAwIDAgMS0xLjI2OC0xLjI2OFptLjE3IDkuNzI1di03LjU3NWgyLjE5NnY3LjU3NWgtMi4xOTZabTguNzU0LS43NzRjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMy0uNzI2LS44NjUgMC0xLjIzNy40MzQtMS4yODUuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40MTktMi43OTkgMi4wMjcgMCAzLjMyNiAxLjA5OCAzLjMyNiAzLjE1NHY0LjYwNWgtMS44MWwtLjE5OS0uNzc0Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTUgMS4wMDUuNjk1LjgzNCAwIDEuNTAxLS40NjMgMS41MDEtMS40MDd2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm05LjU1OCAyLjM0OGMtMS42NTUgMC0yLjYxNC0uOTU5LTIuNjE0LTIuNjN2LTIuOTUyaC0xLjI2OFY1MS4zNWgxLjI2OHYtMS4xMTFsMi4xOTctMS44NTV2Mi45N2gxLjkwMXYyLjAyNGgtMS45MDF2Mi42NDNjMCAuNzI2LjQ3OS44OTcuOTI4Ljg5Ny41MSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU4OC4yNDctMS40MzkuMjQ3Wm0yLjk1MS05Ljc1NGMwLS43MTIuNTU2LTEuMjgyIDEuMjY5LTEuMjgyLjcxMiAwIDEuMjg1LjU3MyAxLjI4NSAxLjI4MiAwIC42OTUtLjU3MyAxLjI2OC0xLjI4NSAxLjI2OGExLjI2NCAxLjI2NCAwIDAgMS0xLjI2OS0xLjI2OFptLjE3IDkuNzI1di03LjU3NWgyLjE5N3Y3LjU3NWgtMi4xOTdabTEwLjk4My03LjU3NS0yLjY5MSA3LjU3NWgtMi4yNThsLTIuNjkxLTcuNTc1aDIuMzM2bDEuNDg0IDQuNjg1IDEuNDg0LTQuNjg1aDIuMzM2Wm03Ljk4IDQuMzc0aC01LjM1MmMuMTI1Ljc3NC43NTcgMS4zNiAxLjcwMiAxLjM2LjYzNiAwIDEuMDA1LS4yNjMgMS4yMzgtLjY0OWgyLjM2NmMtLjUxIDEuNjQtMS42ODUgMi42Ni0zLjU3MiAyLjY2LTIuMTk3IDAtMy45NTktMS41My0zLjk1OS0zLjkxIDAtMi4yODkgMS42MDktNC4wMTkgMy44MzctNC4wMTkgMi40ODggMCAzLjc2IDEuOTYzIDMuNzYgMy45ODgtLjAwNi4yLS4wMi41Ny0uMDIuNTdabS0zLjcxMi0yLjYyN2MtLjgzNCAwLTEuMzkzLjUxLTEuNTMyIDEuMTZoMi45NGMtLjA0OS0uNjY2LS42MTktMS4xNi0xLjQwOC0xLjE2WlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTIyIDM2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIj48cGF0aCBkPVxcXCJNNDQuMDE5IDI3VjE2Ljk3OWgzLjI0N2MxLjIzIDAgMi4wMzIuMDUgMi40MDYuMTUuNTc0LjE1IDEuMDU1LjQ3OCAxLjQ0Mi45ODQuMzg4LjUwMi41ODEgMS4xNTEuNTgxIDEuOTQ4IDAgLjYxNi0uMTExIDEuMTMzLS4zMzUgMS41NTItLjIyMy40Mi0uNTA4Ljc1LS44NTQuOTkyLS4zNDIuMjM2LS42OS4zOTQtMS4wNDYuNDcxLS40ODMuMDk2LTEuMTgzLjE0NC0yLjA5OS4xNDRoLTEuMzE5VjI3aC0yLjAyM1ptMi4wMjMtOC4zMjZ2Mi44NDRoMS4xMDdjLjc5OCAwIDEuMzMxLS4wNTMgMS42LS4xNThhMS4zMzMgMS4zMzMgMCAwIDAgLjg2MS0xLjI3MWMwLS4zNjUtLjEwNy0uNjY1LS4zMi0uOTAyYTEuMzk5IDEuMzk5IDAgMCAwLS44MTQtLjQ0NWMtLjI0Mi0uMDQ1LS43MjctLjA2OC0xLjQ1Ni0uMDY4aC0uOTc4Wm03LjAyLTEuNjk1aDIuMDI0djUuNDI3YzAgLjg2Mi4wMjUgMS40Mi4wNzUgMS42NzUuMDg3LjQxLjI5Mi43NC42MTYuOTkxLjMyOC4yNDYuNzc0LjM3IDEuMzQuMzcuNTc0IDAgMS4wMDctLjExNyAxLjI5OC0uMzUuMjkyLS4yMzYuNDY3LS41MjYuNTI3LS44NjcuMDU5LS4zNDIuMDg5LS45MS4wODktMS43MDNWMTYuOThoMi4wMjN2NS4yNjNjMCAxLjIwMy0uMDU1IDIuMDUzLS4xNjQgMi41NS0uMTEuNDk3LS4zMTIuOTE2LS42MDggMS4yNTgtLjI5Mi4zNDItLjY4NC42MTUtMS4xNzYuODItLjQ5Mi4yLTEuMTM1LjMtMS45MjguMy0uOTU3IDAtMS42ODQtLjEwOS0yLjE4LS4zMjctLjQ5My0uMjI0LS44ODMtLjUxLTEuMTctLjg2MmEyLjc4OCAyLjc4OCAwIDAgMS0uNTY3LTEuMTE0Yy0uMTMyLS41NzQtLjE5OC0xLjQyMi0uMTk4LTIuNTQzdi01LjM0NlptOS44NTggMGg0LjAwNmMuNzkzIDAgMS4zODMuMDM0IDEuNzcuMTAyLjM5My4wNjQuNzQxLjIgMS4wNDcuNDEuMzEuMjEuNTY3LjQ5Ljc3Mi44NDEuMjA1LjM0Ni4zMDguNzM2LjMwOCAxLjE2OSAwIC40Ny0uMTI4LjktLjM4MyAxLjI5MmEyLjMzIDIuMzMgMCAwIDEtMS4wMjUuODgyYy42MS4xNzcgMS4wOC40OCAxLjQwOC45MDkuMzI4LjQyOC40OTIuOTMyLjQ5MiAxLjUxIDAgLjQ1Ni0uMTA3LjktLjMyMSAxLjMzNC0uMjEuNDI4LS41Ljc3Mi0uODY4IDEuMDMyLS4zNjUuMjU1LS44MTYuNDEyLTEuMzU0LjQ3Mi0uMzM3LjAzNi0xLjE1LjA1OS0yLjQ0LjA2OEg2Mi45MlYxNi45NzlabTIuMDI0IDEuNjY4djIuMzE3aDEuMzI2Yy43ODggMCAxLjI3OC0uMDExIDEuNDctLjAzNC4zNDYtLjA0MS42MTctLjE2LjgxMy0uMzU2LjItLjIuMzAxLS40NjIuMzAxLS43ODYgMC0uMzEtLjA4Ny0uNTYtLjI2LS43NTItLjE2OC0uMTk2LS40MjEtLjMxNC0uNzU4LS4zNTUtLjIwMS0uMDIzLS43NzgtLjAzNS0xLjczLS4wMzVoLTEuMTYyWm0wIDMuOTg1djIuNjhoMS44NzNjLjczIDAgMS4xOTItLjAyMSAxLjM4OC0uMDYyLjMtLjA1NS41NDQtLjE4Ny43MzEtLjM5Ni4xOTEtLjIxNS4yODctLjUuMjg3LS44NTUgMC0uMy0uMDczLS41NTYtLjIxOS0uNzY2YTEuMjM3IDEuMjM3IDAgMCAwLS42MzUtLjQ1OGMtLjI3NC0uMDk1LS44Ny0uMTQzLTEuNzkxLS4xNDNoLTEuNjM0Wk03Mi44MDUgMjd2LTkuOTRoMi4wMjR2OC4yNTJoNS4wMzFWMjdoLTcuMDU1Wm04LjE2MyAwVjE2Ljk3OWgyLjAyM1YyN2gtMi4wMjNabTMuMTY1LTMuMjYgMS45NjktLjE5MmMuMTE4LjY2LjM1OCAxLjE0Ni43MTggMS40NTYuMzY0LjMxLjg1NC40NjUgMS40Ny40NjUuNjUxIDAgMS4xNDEtLjEzNyAxLjQ3LS40MS4zMzItLjI3OC40OTgtLjYwMi40OTgtLjk3MWEuODkuODkgMCAwIDAtLjIxMi0uNjAyYy0uMTM2LS4xNjgtLjM3OC0uMzE0LS43MjQtLjQzNy0uMjM3LS4wODItLjc3Ny0uMjI4LTEuNjItLjQzOC0xLjA4NS0uMjY5LTEuODQ2LS41OTktMi4yODQtLjk5LS42MTUtLjU1Mi0uOTIyLTEuMjI0LS45MjItMi4wMTcgMC0uNTEuMTQzLS45ODcuNDMtMS40My4yOTItLjQ0Ni43MDktLjc4NSAxLjI1MS0xLjAxOC41NDctLjIzMiAxLjIwNi0uMzQ4IDEuOTc2LS4zNDggMS4yNTcgMCAyLjIwMy4yNzUgMi44MzcuODI3LjYzOC41NTEuOTczIDEuMjg3IDEuMDA1IDIuMjA4bC0yLjAyNC4wODljLS4wODctLjUxNS0uMjczLS44ODQtLjU2LTEuMTA4LS4yODMtLjIyOC0uNzEtLjM0Mi0xLjI3OS0uMzQyLS41ODggMC0xLjA0OC4xMjEtMS4zOC4zNjNhLjczLjczIDAgMCAwLS4zMjIuNjIyYzAgLjIzNy4xLjQ0LjMuNjA4LjI1Ni4yMTQuODc2LjQzOCAxLjg2LjY3Ljk4NS4yMzIgMS43MTIuNDc0IDIuMTguNzI1LjQ3NS4yNDYuODQ0LjU4NSAxLjEwOCAxLjAxOC4yNy40MjkuNDA0Ljk2LjQwNCAxLjU5MyAwIC41NzQtLjE2IDEuMTEyLS40NzkgMS42MTMtLjMxOS41MDItLjc3Ljg3NS0xLjM1MyAxLjEyMS0uNTg0LjI0Mi0xLjMxLjM2My0yLjE4MS4zNjMtMS4yNjcgMC0yLjI0LS4yOTItMi45MTktLjg3NS0uNjc5LS41ODgtMS4wODUtMS40NDMtMS4yMTctMi41NjRaTTkzLjcxMSAyN1YxNi45NzloMi4wMjN2My45NDRIOTkuN3YtMy45NDRoMi4wMjNWMjdoLTIuMDIzdi00LjM4MmgtMy45NjVWMjdoLTIuMDIzWm05LjgzIDBWMTYuOTc5aDcuNDMxdjEuNjk1aC01LjQwOHYyLjIyMWg1LjAzMnYxLjY4OWgtNS4wMzJ2Mi43MjdoNS41OTlWMjdoLTcuNjIyWm05LjA2NSAwVjE2Ljk3OWg0LjI1OGMxLjA3MSAwIDEuODQ4LjA5IDIuMzMyLjI3M2EyLjI4IDIuMjggMCAwIDEgMS4xNjguOTU3Yy4yOTIuNDYuNDM4Ljk4Ny40MzggMS41OCAwIC43NTEtLjIyMSAxLjM3My0uNjYzIDEuODY1LS40NDIuNDg4LTEuMTAzLjc5Ni0xLjk4My45MjMuNDM4LjI1NS43OTguNTM2IDEuMDgxLjg0MS4yODcuMzA1LjY3Mi44NDggMS4xNTUgMS42MjdMMTIxLjYxNSAyN2gtMi40MTlsLTEuNDYzLTIuMThjLS41Mi0uNzgtLjg3NS0xLjI3LTEuMDY3LTEuNDdhMS41MDMgMS41MDMgMCAwIDAtLjYwOC0uNDE3Yy0uMjE0LS4wNzgtLjU1NC0uMTE3LTEuMDE5LS4xMTdoLS40MVYyN2gtMi4wMjNabTIuMDIzLTUuNzgzaDEuNDk3Yy45NzEgMCAxLjU3Ny0uMDQxIDEuODE5LS4xMjMuMjQxLS4wODIuNDMtLjIyNC41NjctLjQyNC4xMzctLjIuMjA1LS40NTEuMjA1LS43NTIgMC0uMzM3LS4wOTEtLjYwOC0uMjczLS44MTMtLjE3OC0uMjEtLjQzMS0uMzQyLS43NTktLjM5Ny0uMTY0LS4wMjMtLjY1Ni0uMDM0LTEuNDc3LS4wMzRoLTEuNTc5djIuNTQzWlxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGZpbGw9XFxcInVybCgjbG9nb19zdmdfX2EpXFxcIiBkPVxcXCJNMCAwaDQxdjM2SDB6XFxcIi8+PGRlZnM+PHBhdHRlcm4gaWQ9XFxcImxvZ29fc3ZnX19hXFxcIiBwYXR0ZXJuQ29udGVudFVuaXRzPVxcXCJvYmplY3RCb3VuZGluZ0JveFxcXCIgd2lkdGg9XFxcIjFcXFwiIGhlaWdodD1cXFwiMVxcXCI+PHVzZSB4bGluazpocmVmPVxcXCIjbG9nb19zdmdfX2JcXFwiIHRyYW5zZm9ybT1cXFwibWF0cml4KC4wMDA5MyAwIDAgLjAwMTA2IC0uMTIyIC0uMDA3KVxcXCIvPjwvcGF0dGVybj48aW1hZ2UgaWQ9XFxcImxvZ29fc3ZnX19iXFxcIiB3aWR0aD1cXFwiMjIzNVxcXCIgaGVpZ2h0PVxcXCI5NTlcXFwiIHhsaW5rOmhyZWY9XFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFDTHNBQUFPL0NBWUFBQUF0S2xha0FBQUFDWEJJV1hNQUFDRTNBQUFoTndFeldKOTZBQUFnQUVsRVFWUjQydXpkUFloZDZaMG04T2NkT2pEc0RXcGhZQ293YkRXdW9JT0J2ZzNPWEdBcHNwTEYzYlNTaVZSaWNhVEFyVWhSMDJvY0tlcWVRSkdETGtXVHFMSE1KdFdSTlNEREJBdHpHeWFZb0l4cllZSmFHSmdhcUlVSkJ0NE4zbHVyc3R3ZityajNQZWZjKy90QmNVdHErNTZ2OTFTcGRCNDkvd1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRG9vRGdGQUFBQU1FNjExcDBrOHovN1liNlVwODRPQUFBQUFOdEsyQVVBQUFCV3JOYTZsMlJ2K2N0NWtwM2w1Ly90eXU5bitmdnpOZXpDMHhkK3ZVank3OHZQVDVjZlNiSW9wWnk3WWdBQUFBQk1pYkFMQUFBQXZLSmE2MldBNWRyeXQzNjZmTDBhYkptUzArWEhlWkt2bDYrTEpLZWxsRk5YSEFBQUFJQXhFWFlCQUFDQWIzQmxoTkE4clpGbG50YktzcmVGcDJPUkZvRDUreXlETVVZcEFRQUFBREFVWVJjQUFBQzIzcktwWlM4dDBQTFRUTGVocGJmVHRDRE0xMm1qa3pUQkFBQUFBTEIyd2k0QUFBQnNsV1ZqeTdVSXRxekxlVnJ3NVRJQXN5aWxuRHN0QUFBQUFLeUtzQXNBQUFBYmJkbmFjaGxzdVpidEhFTTB0RVd1QkdDMHZ3QUFBQUR3Sm9SZEFBQUEyQ2kxMXIyMFVNdlBsNjlhVzhibk5DMzg4dHUwOEl2bUZ3QUFBQUJlbXJBTEFBQUFrM1psTE5GbHVHWFBXWm1jeSthWDM1WlNuam9kQUFBQUFId1hZUmNBQUFBbVo5bmU4bjZlQjF6WUhPZDUzdnJ5Uk9zTEFBQUFBQzhTZGdFQUFHQVNhcTN6SkxmU1FpNTd6c2pXV0NSNWxCWjhPWFU2QUFBQUFCQjJBUUFBWUxRRVhIaUI0QXNBQUFBQXdpNEFBQUNNaTRBTEwwbndCUUFBQUdCTENic0FBQUF3dUZyclhscTQ1WmNSY09IVlBjM3o0TXU1MHdFQUFBQ3cyWVJkQUFBQUdFeXQ5VERKejlPQ0xyQUtSMGtlbFZLZU9oVUFBQUFBbTBuWUJRQUFnSzZXTFM2L1RIS1laTWNaWVUxTzA5cGVqb3c1QWdBQUFOZ3N3aTRBQUFCMHNXeHh1WlhrbXJOQlowZlI5Z0lBQUFDd01ZUmRBQUFBV0p0bGk4dGhXcE9MRmhlR2RwcmsweVJQU2lublRnY0FBQURBTkFtN0FBQUFzSEsxMW10cExTNkh6Z1lqZEo3Vzl2SzNSaHdCQUFBQVRJK3dDd0FBQUN0VGEzMC9yY1hsbXJQeFVoYmY4SHNuU2Y3dks3ekhqNUxNWHZpOVdaSjlwL2VsSE1XSUl3QUFBSUJKRVhZQkFBRGdqZFZhRDVOOGttUnZ5MC9GUlZwWUpVbStYcjZlTFQreS9HOFhBK3pYN3ZJamFTR1lXWkwva3VlQm1MbFZuS2RKUGhWNkFRQUFBQmcvWVJjQUFBQmUyNWFHWEM3REs1Y05MSXY4YWNobHl1WjUzZ3J6VjJrQm1jdHd6TFo0bXRiMGN1UU9Cd0FBQUJnbllSY0FBQUJlU2ExMUo4bEhhZU9LZGpiNFVDOERMQ2RKL3BBV2NGbHM2V1cvRE1Ec3A0MU4yczNtdDhHY3BqVzlITG5yQVFBQUFNWkYyQVVBQUlDWFZtdTluODBOdVN6U1JnOWRCbHpPWFBIdmRUVUFNOC96c1VpYjVEUkNMd0FBQUFDakl1d0NBQURBOTlyQWNVV1hMUzEvV0w2ZXVNb3JNMTkrWEFaZ05tVUUwaUxKM1ZMS1U1Y1lBQUFBWUZqQ0xnQUFBSHlyRFFxNVhDUjVsdGJjc29qV2xwNzIwMEl2NzJZendpOVAwNXBlbnJxMEFBQUFBTU1RZGdFQUFPRFAxRnF2cFlWY3JrMzRNQlpKZmgvTkxXTnoyZnp5azB4NzdOR1R0S2FYVTVjVUFBQUFvQzloRndBQUFQNi9XdXRla2k4eXpaREw1V2lpeTRETGhTczZlck1rQjJuQmw2bTJ2bnllMXZSeTduSUNBQUFBOUNIc0FnQUFRR3F0TzJsTkxoOU5iTmZQMHNZVGZSWHRMWnZnTXZoeWtHa0ZYODdUQWkrZnU0UUFBQUFBNnlmc0FnQUFzT1ZxclIrbEJWMTJKckxMQWk3YllZckJsOU1rdDBzcFQxMCtBQUFBZ1BVUmRnRUFBTmhTdGRaclNUNUxHeDh6ZGhkSmppUGdzcTJtRm54NWt1UnVLZVhVcFFNQUFBQllQV0VYQUFDQUxiTWNXZlJaa3NNSjdPNXhrdCtuTmJuQUxDM3c4ck9NUDZSMW51UnZTeW4zWFRZQUFBQ0ExUkoyQVFBQTJDSzExc08wb011WVJ4YWRwRFc0SEtjMXVzQTMyVTF5SXkzNHNqdmkvVnlrdGJ3OGRja0FBQUFBVmtQWUJRQUFZQXZVV3ZlU2ZKSGsyb2gzOHpqSmx6R21pRmQzMmZaeU1PSjkvRHpKcDZXVWM1Y0xBQUFBNE0wSXV3QUFBR3k0V3V0SFNUN0pPTnRjenRJQ0xscGNXSVhkSkIrbU5iN01ScmgvNTBsdWwxS2V1RlFBQUFBQXIwL1lCUUFBWUVQVld1ZHBiUzd6RWU3ZUlpM2s4c3lWWWcxbWFTMHZ0ekxPRVVkUDBrSXZXbDRBQUFBQVhvT3dDd0FBd0FhcXRkNVBhM01aRzZPSzZPMGdyZTFsYktFdkxTOEFBQUFBcjBuWUJRQUFZSVBVV3ZmUzJseXVqV3pYanBNOFNodGJCRU9ZcDRWZURrYTJYMXBlQUFBQUFGNlJzQXNBQU1DR3FMVitsTmJtc2pPU1hicElhM0Y1dlB3Y3htQTNiYnpSalJIdDAybGE0T1dweXdNQUFBRHcvWVJkQUFBQUpxN1d1cFBXNXZMK1NIWkp5SVVwR0dQbzVmTlN5bDJYQmdBQUFPQzdDYnNBQUFCTVdLMzFXcExmWkJ4dExrSXVUTkhZUWkrTEpCK1VVazVkR2dBQUFJQnZKdXdDQUFBd1ViWFcrMmxqaThiZ09NbkRDTGt3WGJ0SjdpV1pqMkJmenBQY0xhVWN1U3dBQUFBQWYwN1lCUUFBWUdKcXJYdHBiUzVqZUNoL25PUlJrak5YaGcweFQydDZHY1A5ZFpRV2VqbDNXUUFBQUFDZUUzWUJBQUNZa0JHTkxWcWtoVndXcnNyYXpKTHNmODgxWUgwT2t0eEphM3daK2w2N1hVcHh2UUVBQUFDV2hGMEFBQUFtWWlSamk4N1N4aFU5YzBWZXl0WEF5dFdta0hldmZMNmIxUVlxVHZLbjQ2UytYcjVlTFA5YklpanpLZzZUZkxpOGxrTTVUd3U4UEhFNUFBQUFBSVJkQUFBQVJxL1d1cFBXNW5KdHdOMjRTUEpsMmxnVi90UitXaEJpbnVTL0xIKzk2Z0RMdWx3R1k3N084ekRNV1l5bGV0RXNyZVhseHNENzhYa3A1YTdMQVFBQUFHdzdZUmNBQUlBUnE3WE8wNEl1ZXdQdXhyTzBOcGR0RDBCY0Jsam1TWDYwL0h4L2c0OTNzYnptZjBnTHdiellHTE9ONW1taGx5R3YrOU1rSDVSU3puMkZCQUFBQUxhVnNBc0FBTUJJMVZvUGszeVdaR2VnWFRoTDhpRGJPZkxtY3Z6UVpiQmxubUhIMkl6RldWcm81ZXZsNjdhT1E3cVo1TmFBYStJMExmQmlIQlVBQUFDd2xZUmRBQUFBUnFqV2VqL0pKd1B1d3FOczE4aWl5ekZFN3k1Zjk2M0NsN1pJQzc4c3NsM3RMN01rOTVJY0RMVDk4eVIzU3lsSGxpQUFBQUN3YllSZEFBQUFScVRXdXBQVzVuSTQwQzRzMGtZV25XejRxUlp1V2U4YXVneS9iRVB6eUR3dDlMSTcwUFkvTGFYY3Qrd0FBQUNBYlNMc0FnQUFNQkxMb012djBoNmU5M2FSMXVieWVJTlA4VzVhQzhkUEJqckgyK2dpTGZEeSt5VFBzcm10TDdPMHNVWTNCOXIrVVNubHR1VUdBQUFBYkF0aEZ3QUFnQkdvdGM3VGdpNDdBMngra2VSQmtyTU5QTFg3U1g2V0ZuTFp0ZElHZDVMa3E3VGd5eWF1dHlGYlhoWkpycGRTemkwekFBQUFZTk1KdXdBQUFBeXMxbm90eVcvU1AraXlxVzB1QWk3VHNLbkJseUZiWGhaSmJwZFNGcFlYQUFBQXNNbUVYUUFBQUFaVWF6MU04c1VBbXo1SjhuRTJKMlN3bStURENMaE0xV1h3NVRpYk0rcG9udVJYYWVHWG5zN1RHbDRFWGdBQUFJQ05KZXdDQUFBd2tGcnJSMGsrRzJEVGo1SWNiY0FwbktXRld6NU1hM05oTXp4TDh2dTA0TXNtck5GN3kzWGEwM2xhdzhzVHl3a0FBQURZUk1JdUFBQUFBNmkxZnBIa3NQTm16NUk4U0J0MU1tWHp0REZGTjZ5a2pYYVJGbmo1TXROdklMcVI1RTc2dDd6Y0xxVWNXVW9BQUFEQXBoRjJBUUFBNkd5Z29NdXp0S0RMVkVmRVhMYTQzSW94UmR0b2tlZGpqcVpxUDYzbHBYY0xrY0FMQUFBQXNIR0VYUUFBQURxcHRlNmtqUzA2N0x6cGgwa2VUL1MwN2FhTkticVIvcTBZak05Wld1amxjYVlaM0pxbE5iejBiaVg2dEpSeTMvSUJBQUFBTm9Xd0N3QUFRQWZMb012djBrYnc5SEtXNU9Na0p4TThaZk8wa011QjFjTTN1RWhySzNxVWFZNDRHbUtzMFZFcDViYWxBd0FBQUd3Q1lSY0FBSUExR3lqb010V3hSUWRwSVplNWxjTkxPazVyZTFsTWJMK0hHR3NrOEFJQUFBQnNCR0VYQUFDQU5Sb282UElveWRIRVR0V05KTGZTeGhiQjYxZ3MxLzZVUWkrenRNQkx6d1lqZ1JjQUFBQmc4b1JkQUFBQTFtU0FvTXRGV3B2THN3bWRKaUVYVm0yS29aZkQ1WDNRaThBTEFBQUFNR25DTGdBQUFHdlNPZXh5a2haME9abkk2VGxJY2lkQ0xxelAxRUl2QjJrdEw3Tk8yeE40QVFBQUFDWkwyQVVBQUdDTk9nVmVGa2srVG10MkdidDVXb1BGM09xZ2srTzAwTXZaQlBaMVA4bXYwaThFSnZBQ0FBQUFUSkt3Q3dBQXdKcXRPZkJ5bk5ib01uYTdhYTBWUWk0TTVYRmE2R1hzb2JCWmtzL1NnaTg5Q0x3QUFBQUFreVBzQWdBQTBNR2FBaThQMHg3Z2o5a3NyY25scGxYQUNGd2srVExKMFFUMjlWNlNHNTIySmZBQ0FBQUFUSXF3Q3dBQVFDY3JETHhjcEFWZGprZCt5RGZUZ2k0elY1K1JPVnZlUTg5R3ZwK0h5M3VvaDg5TEtYY3REUUFBQUdBS2hGMEFBQUE2V2tIZzVTTEozU1FuSXo3TWVaSTc2VGVHQlY3WEltME0yTm1JOS9GR1dzdExEN2RMS1VlV0JRQUFBREIyd2k0QUFBQ2R2VUhnNVN6Snh4bHYwR1dXRm5LNTRTcS9scE8wTU5QcjJvOFduZGYxS09NZWJYU1FGbmpwY1gwRlhnQUFBSURSRTNZQkFBQVl3R3NFWGs3U0dsMHVSbnBJTjlLQ0xzSVdmK29pejBNc2YxaiszdUtGLzdZdWwydHJsdWN0TysrKzhOOTQ3aXl0NVdVeDB2M2JUL0paQkY0QUFBQUFoRjBBQUFDRzhncUJsekVIWFhiVEdpZTJQVHh4dHZ6NCtzcm5pNUh2ODJVSVpqL0pYMTM1Zk5zRFM0L1RtbDdHZUwvMUNyeWNKN2xlU2xrRUFBQUFZSVNFWFFBQUFBYjBFb0dYTVFkZGJpYTVsZTBMUjF3R1dmNnd2RDZiRmdpNERNSE1rL3hvK2JxTjEzaXNMUy83YVFHei9UVnZSK0FGQUFBQUdDMWhGd0FBZ0lGOVIrRGxPTW5EakMvb3NtMXRMcGVCbHErWHJ4ZGJ1RXgzbDlmNzNlWHI3cFljOTFoYlhtWnBEUy9yRHJ5Y0pubXZsSEx1S3pVQUFBQXdKc0l1QUFBQUkvQU5nWmZqdEdhSnNkbUdOaGZobHUrM1RlR1hzYmE4OUFxOExOSWFYZ1JlQUFBQWdORVFkZ0VBQUJpSks0R1h5NGZyWXpKTGEzTTUyTkRUL3l3dDNQSnNlZjU1TlpkamozNlc5WWN2aHZJNHJXbHBiUGRsajhETFVTbmx0bVVPQUFBQWpJV3dDd0FBd0VqVVd0L0tPTU1rOHlTL3ltYTF1VnprVHdNdTJsdFc1N0wxNVNmWnZIRFVTWktQTTY1QVZLL0F5K2VsbEx1V053QUFBREFHd2k0QUFBQWpzQXk2ekRPK1FNbGgydGlpVGZFc3lWZkxWOVp2bGhaNCtUQ2IwL2h5a2Rid2NqeXk4OXdqOEhLN2xISmtXUU1BQUFCREUzWUJBQUFZMkVpRExyMGVudmR3a3VUTGFIQVoybTZTRzJtampuWTM0SGlPMDBJdkYxdDB6NTRudVY1S1dWak9BQUFBd0pDRVhRQUFBQVpXYS8zckpIODVvbDNhaExGRkYybGhoQzh6cnBFelBGOWpQMHNMdjB6WjJNWWE5UXE4dkYxS09iZU1BUUFBZ0tFSXV3QUFBQXlvMXZwT3h0VnljVFBKblFtZjBzc1dsMk9yYXhKbWFZR1hEelBkdHBlTEpBOHludEZZKzJtQmwzV0cxUmFsbFBjc1h3QUFBR0Fvd2k0QUFBQURHVm5RWlpia1hwS0RpWjdPNHlSZkpURmVaYm9PMGtJdjg0bnUvNk1rUnlQWmx4NkJsNk5TeW0zTEZnQUFBQmlDc0FzQUFNQUFhcTM3U1g0NGt0M1pUUnRidEQreDAyaFUwV2JhVHd1OVRISEUwYk8wbHBlTGtaekhkUWRlYnBkU2ppeFpBQUFBb0RkaEZ3QUFnTTVxcmJ0SjNobko3dlI0SUw1cUYya0JsOGNaUjZpQTlkaE5jaXZUQzcyY0pQazQ0d2hnelpmMzk3cWNKN2xlU3RHb0JBQUFBSFFsN0FJQUFORFJ5SUl1TjlKR0YwMkZrTXQybW1MbzVTTEozYlRneTZiZjU2ZEozaXVsbkZ1cUFBQUFRQy9DTGdBQUFKM1VXbWRKZmp5UzNUbE1DeEJNZ1pBTHlmUkNMeGRKSHFhTjJocmF6U1IzMXZqK1Qwb3BIMWlpQUFBQVFDL0NMZ0FBQUIwc2d5N3pKRytOWUhmdVpUcUJnY2RKSGtYSWhlZDIwNEliQnhQWjN3Y1pSK0JsM2ZmOTNWTEs1NVluQUFBQTBJT3dDd0FBd0pyVld0OUtDN3JNQnQ2VldaSmZMZmRsN0k3VFFpNW5WaERmWXA3VzlES1Y5ZnhnQlB2eDJSclAxM21TNjZXVWhhVUpBQUFBckp1d0N3QUF3SnJWV24rY2NRUmRQa3V5UC9MVGRaSTIrc1VEYzE3V2piVFF5KzdJOTNNTWdaZDFmeDFZcEFWZXppMUxBQUFBWUoyRVhRQUFBTmFvMXZwT2huOElQNFdneTBWYXlPWFlxdUUxMS9qTnRORExtQjB2MS9tUVk3bjJsMThQMWhYQSs3eVVjdGVTQkFBQUFOWkoyQVVBQUdCTmFxMjdTZDRaZURmMjAwWVhqYm4xNG5IYXlLSUxxNFkzdEp2a1hzWTkydWdreWQyQjEvczhMZkN5TGgrVVVwNVlqZ0FBQU1DNkNMc0FBQUNzUWExMUo4TS9jRjkzZzhPYk1yS0lkYm1SNU03STEvN1FnWmVieTNPMER1ZEozamJPQ0FBQUFGaVh2M0FLQUFBQVZxdlcrb01rZnozd2Jvdzk2UElveVM4aTZNSjZIQ2Y1bXlUUFJycC9ZN2cvSDJkOVk4TjJrbnhoR1FJQUFBRHJvdGtGQUFCZ3hXcXRQODZ3RDdISEhIUTVTZkpnK1FvOUhLU05OaHJyL1RCa3c4dHMrYlZpZjAzdmY3dVVjbVFKQWdBQUFLc203QUlBQUxCQ3RkWjNrdXdPdUF0akRybzhTbkswNVV0a2Qva3h5L09Bd1krdVhLK3J2Lzhxcmpia25DWDVQeS84L2ttR0haa3p0RmxhNE9WZ2hQczJkT0JsTjhtdjEvUTE0enpKZTZXVVU5OGRBQUFBZ0ZVU2RnRUFBRmlSV3V0dWtuY0czSVd4QmwzT2tueWM3V3B6bWVkNXNPWGR2SDZJWmRVV2FhR0tQeXl2eDltV1haZXh0cndNSFhnNVNQS3JOYjMzMDFMS2RkOGhBQUFBZ0ZVU2RnRUFBRmlCV3Vzc0xlRHcxa0M3c001MmhqZHhuT1JoTnJ0VlpILzU4ZTZWejZkbWtSYTQrTVB5ODdNTnZsNjdhWUdYK2NqMmErakF5NTBrTjlmMDNzWVpBUUFBQUNzbDdBSUFBUENHYXExdnBUMDRIeXBvTWt0cmRCbFR5T0lpTGVSeXZJR1hmSDk1dmQ4ZCtMcXYwMWxhNk9YcmJHNzQ1VERKclpIdDA3TzBGcVNoL0hwTlgwZk9rN3hkU2puM0hRTUFBQUJZQldFWEFBQ0FOMVJyM1UveXc0RTJQOGFneTBtU0I5bWM4VGl6dERFdjd5NWZaMXU0ekMvREw3OVBDMlJzaW5uYStKNHhYZFBqNWYwemhIVTJSRDBwcFh6Z093WUFBQUN3Q3NJdUFBQUFiNkRXK3BkSi9ucWd6WTh4NkxJcFk0dDIwNEl0UDhzMHh4S3QyN004RDc1TS9WcVA5VDRhS3ZCeWtCWUFXb2NQU2lsUDNENEFBQURBbXhKMkFRQUFlRTIxMWg4aytYR1N0d2JhaFh0SmJvem9sRHpJdE1jV3paYm5VOERsMVd4SzhHVnM5OVBESkk4MzdGeWNKbm5QT0NNQUFBRGdUUW03QUFBQXZLWmE2enpKemtDYkg5T0QrWXNrZHpQZHNVVTNrdndrcmRHQ04xc0h6NUo4bFRieWFLcHI0ZDZJOW1lb0FOa3NiWnpSN2hyZSs5TlN5bjIzQ3dBQUFQQW1oRjBBQUFCZVE2MzFoeG11L1dOTUQrUlBrbnljNUd4aWwzQTN5WWZMY3ptem9sZnVMTW1YYVVHTnFiVzk3S2VOTlJyTHV2aEZoZ21TN2FjRlh0Ymh2VkxLd20wQ0FBQUF2QzVoRndBQWdGZFVhNTBsbVdlWThVVUhTWDQxa2xQeExLMTVZa3BoaG5sYXlFV0xTei9IU1I1bFdvR28zZVY5Tm9aeFZrTTJKeDBtdWJXRzkzMWFTcm51MWdBQUFBQmVsN0FMQUFEQUs2cTEvampEdEQ2TXFYSGlPQzNvTWhVMzBoN2E3MXJCZzFta2hWNm0wdWd4Vzk1dll3aThuS1FGWG9ZSWx2MTZUZWZnZGlubHlHMEJBQUFBdkE1aEZ3QUFnRmRRYTkxTHNqZkFwbWRwRDUzSEVOWjRtT1R4QkM3WExLM0JSY2hsWEJaSnZrb0xURTNCdmJTdzFOQ2VwWTBNNjIxZDQ0eE8wOFlabmJzbEFBQUFnRmNsN0FJQUFQQ1NsdU9MZmp6UTVqOUxHOEV6dEFlWlJramhNRzFjMGN6S0hhMnp0S2FYS2F5bnNRUmVIcWVGellhNG45WXh6dWpUVXNwOXR3SUFBQUR3cW9SZEFBQUFYbEt0ZFo1a1o0Qk4zMGx5YytERHYwaDd5RDcyWUlKeFJkTXpsZkZHTjVmMzR0Q0dDcHl0YTV6UjI2V1VVN2NCQUFBQThDcUVYUUFBQUY1Q3JmV0hXYytEM3U5ekk2MVZZa2dYU2U0bU9SbnhKVHBJQ3lJSXVVelhJaTFRTmVaMXRzMzM0enl0WVdyVmprb3B0eTEvQUFBQTRGVUl1d0FBQUh5UFd1c1Awc1lYdmRWNTAvdHBENWVISE1VejlxRExmbHJJWlc2bGJvemp0TkRMeFVqM2J3eUJsNVBsZmRuN0hLMnJaZXA2S2VXcHBROEFBQUM4TEdFWEFBQ0E3MUZyL2Vza2Y5bDVzN08wb012K2dJYys1cURMTEcxYzBVMHJkQ05kcEkwMmVqelMvUnRENE9WWmtvOEh1TzkrbmRVM0tEMHRwVnkzN0FFQUFJQ1g5UmRPQVFBQXdMZXJ0ZTZrZjlBbGFRMEtnaTdmN0NESjMwWFFaWlBObHZmQXJ6UE8xcDdqSkE5R2NCL2NIT0Ryd3NNMXZPKzFXdXY3bGowQUFBRHdzalM3QUFBQWZJdGE2MXRwNDR0KzBIblRRN2RHakRYb3NyczhMMFlXYlovSGFVMHZZeHR0TklhR2wxOE1jSzkrdG9iNzhMU1U4cmFsRGdBQUFMd016UzRBQUFEZjdvZnBIM1RaVFd1MEdNcFlneTQzTTk2V0Q3YjMrbytoNGVWZVdoTk9UK3M0NXIxYTY2R2xEZ0FBQUx3TXpTNEFBQURmb05iNmc3UldsN2M2Yi9yWEdYWjgwZDBraXhGZENtMHV2R2lNTFM5RE43dzh6bnJHQzMyWHd5UzNWdnllMmwwQUFBQ0FsNkxaQlFBQTRKdjlNUDJETG9jWk51anlJT01LdWh4RW13dC83ckxsWlg5RSszUzgvQmp5bkJ4MDN1YmpKR2NyZmsvdExnQUFBTUJMMGV3Q0FBRHdMV3F0dTJrUDFIdUVYdVpKUGh2d2NCOWsySWYxVjgzU1JqbmRzQXI1SG8rU0hJMW9mKzROdUc0dmt2eE4ramJlcktQUlJyc0xBQUFBOEwwMHV3QUFBSHlMVXNwWmtuOUljcnJtVGMweS9BaVVzUVJkOXROQ1A0SXV2SXhieS9VeUc4bitETm1PTk1UWGtlTTFISzkyRndBQUFPQjdDYnNBQUFCOGgxTEtmNVpTVHROQ0wvKzZwczNjU3JJNzBDRWVKM2s0a3ROOUl5MjRzRy9sOFFybVNmNXVST3ZtNHlRbkEyMzdJUDNIR1QxYXczdCtZbGtEQUFBQTMwWFlCUUFBNENXVVV2NmpsUEpQYVMwRy83SEN0NTRudVRuUVlaMWtQRUdYZTh1UG1kWEdhNWdsK1hYRzBRaDBrUlo0dVJqd1h1cDVIeTJTUEZ2eGUycDNBUUFBQUw1VGNRb0FBQUJlWGEzMWgwbjJrcnoxQm05eitZQitpRmFYc3lTL3lIQVA1SytlQTIwdXJOSngyamlob2UwdjcrOGhQRXNMM1BTeW05YXVzMHFucFpTM0xXY0FBQURnbTJoMkFRQUFlQTJsbEg5SkcyMzBMMi93TmpjelROQmw2T2FKUzVkaEFFRVhWdW5HY2wwTjNSSjBrdUZDTjczSEdaMmxoWXhXU2JzTEFBQUE4SzJFWFFBQUFGNVRLZVUvU3lrblNmNVhrdk5YL0wvdko3azEwSzQvVEhzUVA2UjVXcVBMcnBYRUd1eG5ISTFCeDBrZUQ3VHRPK2tiK0htMGh2Zjh4RklHQUFBQXZvbXdDd0FBd0JzcXBWeVVVaFpKL2luSmY3emsvKzNPUUx2N09LdHZZSGhWTjlLQ0NET3JoelVhUytEbFlaTEZBTnZkVGQ5QTNWbFdIM2pacTdXK2J5a0RBQUFBTHhKMkFRQUFXSkZTeXIrV1V2NGh5V21TLy95Ty8rbk50R2FUM2hacEQ5NkhkRFBKUGF1RlRtWnBnWmVEZ2ZkanFMRmhOOU0zN1BONERjZjVTOHNZQUFBQWVKR3dDd0FBd0lxVlVrNlQvRU5hMDhHTFpobG1mTkZGMmdQM0lkM0xjSTAyYks5WmtsK2xOUW9ONVNMSjNZRzJmYWZ6Y1g2NTR2ZThWbXU5WmhrREFBQUFWd203QUFBQXJFRXA1VDlMS2YrYzFxWnlmdVUvM2NrdzQzdUdhcGE0ZEMvRGhnMWc2RFY0a21HYWxlYWRqM3NkN1M2M0xGOEFBQURnS21FWEFBQ0FOU3FsbkpkU0ZrbitPV1NHOXNBQUFDQUFTVVJCVk1rUE04ekQ5a2Rwb1p1aENMb3dGa092eGNjRDNZczlRM2JyYUhjNXJMWHVXYjRBQUFEQUpXRVhBQUNBRGtvcFowbit4d0NiWGlRNUd2RFFCVjBZbTZIWDVCQXRTN01rTnp0dTcvRWEzdlBRMGdVQUFBQXVDYnNBQUFCMFVHczlUSEt0ODJZdmtqd1k4TEFGWFJpcklkZm1VUGZsclNTN0hZL3hlTVh2K1V2TEZnQUFBTGdrN0FJQUFOREhKd05zODJHU3M0R09WOUNGc1J0eWpUN0xldHBQdnMrZGp0dDZ0T0wzMjFtR0JnRUFBQUR5bGxNQUFBQ3dYclhXKzBuMk9tLzJXVmJmclBDeURpUG84cktlSmpsUDh2V1ZYMTg2TDZVc3ZtTmRYYnZ5eTUwazgrWG5QMzNoMTN5N2U4dlhJZTZWUjBrTzBxOXRKY3Z0emRQR202M2IyZks4cnZKcndTOHo3RmcyQUFBQVlDU0tVd0FBQUxBK3RkYWRKSDlNQ3gvMGNwSGtiNWF2dmQzSTh3QUJ6NTJtQlF5K1RndTBMRW9wNXgzVzMxNWF1R0dlNU4yMFVWbzdMc2VmM1M5M2s1d01zTzE1a3M4NmIzT3hQTjRlOXBQOGVzWHYrZDUzaGNBQUFBQ0E3U0RzQWdBQXNFYkxWcGZlSTR3K1RtdDI2VTNRNWJsRldxamw3NU04N1JGc2VZVTF1WmNXZXZucDhuWFA1Um8wOEhJbnljM08yN3liUHUwdVNRdnpyTEpsNktpVWN0dVNCUUFBZ08wbTdBSUFBTEFtQTdXNlBFc0x1L1Mybi9aUWU3YkZsL3hKa3QrbWhWdE9KN1JPNTJtaGwxdlo3dEZIWjBsK2tmNk5TTE8wOXBPZTQ0eE9sc2ZhdzBHU1g2M3cvYzZUdkQybUFCa0FBQURRMzE4NEJRQUFBR3Z6VWZxUEwzbzR3SEh1Wm51RExrK1MzRTd5WDBzcEg1UlNqcVlVZEVtU1VzcWlsUEo1S2VXOUpHK25iK3ZIbUZ5dTQ5NHVranpvdk0zOXRDYW1IcDZsQllsV1pTZkorNzY5QUFBQXdIWVRkZ0VBQUZpRFphdkxMenR2OWxGVysxRDVaY3pTV2h1MktlaHltdVRUdEhhSnk0RExSclJNbEZKT3J3UmYza3Z5ZVZxVHhyYll6ekNqdUJicFAzcnNWc2R0ZlRuaGZRY0FBQUJHU05nRkFBQmdQWHEzdXB3a2VUekFjZDVKQ3doc2c2ZEpQaWlsdkYxS3VUKzFCcGRYdFd4OHVadlc5bkk3TGVTekRXNGt1VG5BZGgrbTd3aWwzZlJyZHpsZThiRmRxN1h1K1RZREFBQUEyMHZZQlFBQVlNVUdhblVaWW56UnpmUjdXRDZrbzdRV2wrdWxsQ2ZidHA1TEtlZkw5cHEzazF4UEMvMXN1anRKNXAyM2VaYld6dFJUcjRhVWk2eSt1ZWJRZHhzQUFBRFlYc0l1QUFBQXE5ZTcxZVU0YlF4S1QvTzBRTUFtTzBvTHVkemU5QmFYbDFWS2VWcEt1Wjd0Q0wwTU1aN3JjZnFPSXR0TnYxQ1BVVVlBQUFEQXlnaTdBQUFBck5BQXJTNFg2ZC9xTWtzTEFteXFvd2k1ZktjdENiME10YzRmZE41ZXI5REl5ZkpqVmZacXJYTjNJd0FBQUd3bllSY0FBSURWNnQzcThtVmE0S1duSVJvdmVuaWE1THFReTh1N0VucTVuV1FUejlrOC9jZmxMTkszcVdtZTZiYTcvTkpkQ0FBQUFOdEoyQVVBQUdDMWVvN1dPRXRySWVucE1QMGVqUGR5bnVSMktlVjZLZVdwSmZ6cVNpbEhTZDVMOHVtRzN0TzkxM3p2ZHBjUE8yM25XVlliem52ZjNRY0FBQURiU2RnRkFBQmdSV3F0aDBuMk9tN3lVZWREM0UvZk1FOFBSMmtqaTQ2czREZFRTamt2cGR4UDhuWTJiN1RSdmZSdE16cExjdHh4ZXdkSmRqdHM1eUl0OExJcU83VldnUmNBQUFEWVFzSXVBQUFBcTlOenBFYnZoK0d6dEFmK20rSTB6MGNXblZ1NnExTktPVjJPTnJxYjFwcXpDWFlIV1A4UDAzZEVXYThnMjFjcmZyK2Z1K3NBQUFCZyt3aTdBQUFBckVDdDlWcjZqanJwUGVia1ZscXp5eVk0U3ZLZWtVWHJWVXI1UEcyMDBhYWM1NFBsUnk4WFNiN3NmSHc5Mm1zV2FXRzlWZEhzQWdBQUFGdEkyQVVBQUdBMWVvNzNXU3cvZXBrbnVia0IxK2c4eVFmYVhQcTUwdkx5NllZY1V1OXhSby9UcjkxbGx1UkdwMjBaWlFRQUFBQzhFV0VYQUFDQU4xUnIzVXR5MkhHVGp6b2Y0aWFNTDFxa3RiazhzV0w3SzZYY1QzSTkweDlyMUh1Y1YrOTJsdzg3YldmVngyU1VFUUFBQUd3WllSY0FBSUEzZDloeFc3MWJYUTZUN0U3OCtod2x1VjVLT2JWVWg3TWNHL1YyNS9XN0RnZnBPN0tzWjd2TGJxZGpPMHR5c3NMM3UrWU9Bd0FBZ08waTdBSUFBUERtZW80dzZ0bnFzdHY1Mk5iaHJyRkY0MUZLT1MrbHZKY1dRSnF5bnVPTWVyZTcvS3pUZHI1YTRYdnQxVnJuN2pBQUFBRFlIc0l1QUFBQWI2RFcrbjZTdlU2YjY5M3FNdVh4UmVkSlBpaWxmRzZWams4cDVYYVN1eE0raE4wa056dHVyMmU3eTQzMENmSThXL0g3M1hKbkFRQUF3UFlRZGdFQUFIZ3pQUit3ZnRWeFc3MUh0YXpTZWRyWW9pZVc1M2d0ZzBpM0ozN3Y5eHJ4ZFpIa3VPT3gzZWl3RGFPTUFBQUFnTmNtN0FJQUFQQ2FhcTA3U2Q3dnRMbXo5SHZZUFV0eVo2S1g1VExvc3JCQ3g2K1VjcFRrZytWMW02S2U3VWM5UnhsOTJHazdxd3p3eld1dGUrNHFBQUFBMkE3Q0xnQUFBSy92c09PMkhuWGMxczMwYTZ4WXBVV1N0d1ZkcG1YWndITTkwd3k4ek5PdkFhbG40RzAzeVg2SDdheDZsTkUxZHhRQUFBQnNCMkVYQUFDQTE5ZHJoTkZGVnY5UStOdk0wcS9WWVpVV2FZMHU1NWJsOUN3RFNyZVhhMzFxZXJZZzlXeDMrVm1IYlp3dFAxYmw1KzRtQUFBQTJBNXZPUVh3YXBhMXlGYy9McjJiWk9mS3J4ZEovdjNLcjU4bVNTbmxxYk1JQUxBeGZ5N3MxZWh3bkg0aGdEdHBnWmNwMllpZ3k1V2ZOWFplV0Zzdi9xeHhtdVIvdjNEODUwa1dVejBIdGRaM2xzZHdOOGxuRTF1RCswbHVwRS9yeXNueWV2ZjQybk1qeWNNTzIzbVcxaWExQ3RkOGR3SUFBSUR0VUp3QytIYTExbm5hWDVhOW05WFdVNStuL1FYbDN5OWZuL29YcUFBQWsvdXo0djBrbjNUYTNOOWt0ZTBIMzJZM3lkOU43RktjcHdWZEZoTmJQMWQvMXRqTDZoN1NYLzZzc1VqeTlmSm5qZE9SbjR0MzhxZGpzK1pwZ1pjcE9WdmVwejNjU0hLdjA3WSt6dnBicFZaOXZkOHp5Z3dBQUFBMm43QUxYRkZyM1VueWZscjE4Ylg4NmIrZVhMZEZXdnZMYjdXL0FBQk00cytPZjh5Zk52MnR5N08wQjg0OTNFdDdrRDRWa3dtNkRQeXp4dW1WbnpXZWpPeTh2QmgwdWRRejBMRXFEOUtuM1NWSi9tZjZ0TjhjTDQ5clNzZnphU25sdnU5U0FBQUFzTm1FWGRoNkwveWw4L3NqMmEzekpFK1MvSzEva1FZQU1Nby9RODZUL0dPbnpmVm9Wa2ltMmVveTZnYUhrZjZza2VYUEdvK0dEcjU4UjlEbDBzMjBzVnBUMGJQZDVVNVdOL3JudTF3aytlOGR0clBLb04zVFVzcDEzNmtBQUFCZ3MvMkZVOEMycXJYT2E2MWZKUGxqa2k4eXJyOTgza2x5bU9RZmE2MS9yTFYrdFB5TGNnQUF4cUhYbngzUDBpZm9raVMzSm5ZTmJvODE2SExsWjQxL0crSFBHcGZyOXplMTFuK3J0WDVXYTkwYjRCeDlYOUFsU1I2blgxUEtLdXltWHpQU2w1MjJNMHR5MEdFN1g2L3d2YTc1RmdVQUFBQ2JUOWlGclZOcnZWWnIvVjNhdjhROVROLzY4TmV4bHphLy9JKzExdnREL0VVMEFBQi81dWVkdHRNcjZOTHpJZjBxZkY1S09Scmh6eHJ2di9Denh0anRKUGxvK2JQR0Y3WFdhNTNPMDhzRVhTNDlTQnY1T2hXOVFtTm5IYy9MVHpwc1k3SGlOWFl0QUFBQXdFWVRkbUZyWEFtNS9DN1QvSmRlTzBrK1NmdUw2TTgwdlFBQURQYm55cjBrODA2YjY5WGVNS1ZXbDZlbGxMc2ovRm5qajBsK2srbTJTaHdtK1YydDlYZkxNVjNyT2xldkVuUzU5SEZhdUdNS2VnYkh2dXEwblI3TkxtZEpUbGI0ZmxPOUR3RUFBSUNYSk96Q3hxdTE3dFZhZjVQcGhseSt5ZVcvdnJ6dkNnTUFkTmRySk0xSitqemduMlU2clM3blNUNFkwYzhhVndQMWV4dXl2cStsalZQOVl0V3RrcThaZEVtU2k3VEF5MVQwQ284OVc1NmJIbDhqOWp0c1o1WHRMai8xclFvQUFBQTJtN0FMRzIwWkJ2bkg5SHNnMGROT2trOXFyWDlVMFF3QS80Kzl1d2VSNU16VFJmKzhnNHlCSTlnY1dEZ3lGaWFibFhFOGxlQjZaMEhaMW82bmFzNDYxMUsyY2ExcnFOdGFhK2x1anJWV3Q0eTFxOXE2MTloRGwrQWFjNnpPQmkyTXNkQWxHR09NWHBRRFkvUUJ3ZVpDSDVBaGVLOFJVZXBTVFg5VVZVWkVSbWIrZnREMGpLVEt5UGhIdkZIeDhjVC9oVUVOTllYUlVGMWQvbTZMYW4rcmxMSWF3WFhHcE5aNmxOMEsxRjgwVHhONnVkOVJ6YTRiZERueklzay9iVW50UHNvdzNaOWVaYmlwenY1MmdHVjgyK0ZudVVZR0FBQ0FIU2Zzd2s2cXRSN1VXcCtubWZabjE2ZjdtYVpwTjI1cUl3Q0Evczh6SnhudUllcFFEN0gvMjVhVS8wRXBaVEdDZmVBd3lYZHB3aUM3N2l4Zy8zeWRxWTA2Q0xxYytlZDAyLzJqVDBOMWQvbVhnWll6UkhqbnRPT3hlaEFBQUFCZ1p3bTdzSE5xclhmU2RIUFp0eHRiZDlLOGVUbXpGd0FBOUdhb2M2MmhwaWY1VFpvcFNzYnV0SlJ5ZjhQWEdaTjJldFFuMmYxQS9VVUh1V2FYbHc2RExtZitZYUN4MFVYTlB0cWhZOFhIQTZ6UHF6UWRmTGJ0ZUEwQUFBQnNnTEFMTytQY3plZUhlMXlHYVpvdUwvZnRFUUFBdlJocUNxT2h1alZzUTFlWFZaSmJHNzdXT01qdVRvOTZGZmRxclU4djIxR3loNkJMMGdRaS9uRkw2alhVK0JxcUM5UzJkWGY1eEs4c0FBQUEyRjNDTHV5RTl1YnowN2o1Zk9aZXJmV0phWTBBQURvM0cyZzVRenk4L3JqOU0zWmZsVktXRzd6V21LY0p1a3p0L2orTmdlL2VOMFZNVDBHWDgrUGpteTJvMVc4R1dzNVE0Ymdod2lQZmJ1SHhHZ0FBQU5nQVlSZTIzcm1naS9tNGYrNHdUWmNYZ1JjQWdJNlVVbTRrdVpua1VicnRRSERlVU5PU2JFTlhsNDFPWDFScmZaamt5SjcvWnlacHBqV2F2NlZ1ZlFaZHp2eFR4aitkMFljWkp2QXkxREhqYjRZWTh4MSsxdFQxTUFBQUFPd3VZUmUyMnJtM0xOM0Flck9EWE9LdFN3QUFMcStVc2lpbDNDMmxmSnJrVjJtbTJEbE9zdXhvRWQ4T3RDcC9zd1hsdnJ2QmE0MmpKSGZzOGU5MFZHdTljNkZ1UXdSZGt1Umxrc2RiVUtPL0hXZzVRM1M2K1REOWQ0TjYxVzdiTHErSkFRQUFnQjBrN01MV2FvTXUzcko4djBtYURpOXU4Z0VBZEt5VXNpcWxuSlJTYnJkZFgyNGt1WjNrSk1ucW1oODd4RVByMzZSNWNEMW14NldVeFFhdU15YTExdWRKNXZid1MzbllCb09HRExxYytlY2tMMFplbjRPQmF2THRnT3ZUdHk2N3U4d01VUUFBQU5oTndpNXNKVUdYS3hONEFRQVlRQ2xsV1VvNUxxWGNLcVg4S3NtblNSNGtXVnp5STE2azI2NEdiL05mUjE3S1ZUYlExYVdkOHNRVXFWYzNyN1UreWJCQmx6UC90QVgxR2FLTDBqY0RyY3NuQXl6ajM3YnMrd0lBQUFBYklPekMxaEYwdVRhQkZ3Q0FnWlZTVGtzcDkwc3BOMHNwSmMyVVI0L3k5czRGcHdOOHJROHovaW1NdmlxbHJJWmNvS0RMMmc2VC9QMEdsbnM2MExoWngzOGJZQm12QnFyREVPT2p5MjQ5VTBNVEFBQUFkcE93QzF1bERXbzhWSWxyT3d1OFRKVUNBR0I0N1pSSGQwc3BueWI1VlpvcGo0NlRMTnYvNUY4RytCcGpEN29zMHdTQ2huWVVRWmQxL1NhYm1mN3BIMGRlbDQrU2ZEekFjb2FZeXVqRDlOL0JwOHZRampFTkFBQUFPMHJZaGEzUkJqU2VwZ2xzY0gyVEpFL2FOMWNCQU5pUVVzcXFuZkxvZGlubFJwb3BqNGJvekREMktZd2ViS0NyeTFHYXppU3M3NHMwb1pjaHZVenkyNUhYNVc5Ny92eFZrdjkzb0hYWnF1NHV0ZGFaWVFrQUFBQzdSOWlGcmRBR001NUUwS1VyQjIwOUFRQVlqMWNETEdQc1V4Z3RTeW5IQTE5cjNNbG11cEhzc3IvUDhCMDFIbS9CTlZqWHg0cy9KZmw5a20vYUtkTitteWIwMHJlL0htQVpwaklDQUFBQTNrblloVzN4TU5vUGQyMVdhNzJ2REFBQW96RkVzSHZzVXhnOUdISmhiY2NIMDZUMjQ3K24vK2x1emh0N2Q1ZVAxNnpIaiswNi9pSEo3MG9wLzFwS2VWRksrYjZVOHVPNS8yNHh3TG9NY1czK3Z6cjhyS25oQ0FBQUFMdEgySVhScTdYTzQwM0x2dHpUMGhrQVlCVG52QitrNmJyU3R6RlBZYlFhc3F0TE8wMnFib2Y5K1RCTjRHVklZKy91Y3RXdzJmZHBPcHo4YXlubG0xTEtIMG9wTDBzcFA3empaNTROc0I0ZkQ3Q01McWQwKzh4d0JBQUFnTjBqN01Lb3RUZWd2V25acnlmdE5GRUFBR3pPVU9kalkrNlcrTlhBeXp1S2FWTDc5bkdTLzN2QTViMU10eUdKcm4zeW5uLy9Lc2t5eVdrcFpWRksrWDBwNVUrbGxLdE1jYmJZa1dPSmFZd0FBQUNBZHhKMlllemNnTzdmcEswekFBQ2JQU2ZyMjBHRzZSNXpYWStHV2xBN25lZk1iamVJdjh1d0lhc3hkM2U1Mk5ubGh5Ui9Tdkw3Sk4rMFV4TXRTeW1yNnk2Z2xESlUyS2Z2N2k2djJqOWRtQnFHQUFBQXNIdUVYUml0ZHZxaW1Vb000ckRXZXFnTUFNQ0l6Z1VQYXEzN05NWE1FQ0dVTVhkMU9WN25BZjhWOTYxcGtudEcyYUQrUHNNRnJVN1RkSGdacTRNa2Ywanl1MUxLNzBvcEwwb3AzNWRTZnV4d0dZc0IxdU0vRDdDTUZ4Mk8rd1BERUFBQUFIYUxzQXVqMUU2clkvcWlZVDAwblJFQU1KSnp3WG1TcDltdkRuOURyT3NuSTE3L0lidHg2R280dkkvU2RIZ1p5djhZY1MxK1hVcDVXVXI1b2NkbFBCdGdQVDRlWUJsZFRtWGtXaGNBQUFCMmpMQUxZM1V2YmtZTmJacmtqaklBQUp0VWE3MlRQWnZLc3RZNlZNZUxzWFkyV0paU0ZnUFZlaDdkSXpmbGl6U2hseUg4ZHNSMUdHTC9HMklxb3lHT0ovOTd5K29PQUFBQURFalloZEZwMjRvTFhXekd2YmIrQUFDYk9BODh5bjUyOTl2M0tZeStHbWovMGoxeTgvNStvT1c4U3ZMTlNHdHdNRUJIemRPQjF1V2pMVnFQdnpEOEFBQUFZTGNJdXpCRzk1UkEvUUdBL1ZGcm5kUmFueWVaNzJrSjlqM3NjakxRY3U1RTk4aE5PeGh3WC95Zkk2OURiMG9weXlTckFkYWo3N0RMcXowNUJnSUFBQURYSU96Q3FMUmRSZVlxc1ZGejNWMEFnQUhQL3c2U1BNMStQNGdjSXV6eXlValgvYlI5TU4vM2ZqWko4cVVSTndwZkRMU2NiOUp0V0tKTHN5SEcxZ0RMNlB1NC9jSndBUUFBQU41RzJJV3gwVlhFZGdBQTlrU3RkUlpCbDJTWWJpTWZqM1RkSHcrMEhGMWR4bVBJN2k1am5jcm9zd0dXTVVUWTVUOE5zSXlYSFgzT3pOQURBQUNBM1NMc3dtam82aklxdXJzQUFIMmYrODNUQkYwbWUxNkhYdzZ3bUk4elRQZVk2emdab01hNnVvelBVTjFkdmgzcCtnOFI5dm5qUU1lV3ZyMDBYQUFBQUlBM0VYWmhUT1pLWUhzQUFMdXYxdm93eVpGS0pFbUdDTHQ4Tk5KMUgyUUtvL2E4VmxlWGNSbXF1OHRZTzd0TUJuaTVZSWpPTGtNY1d6cWJpcXJ0SmdZQUFBRHNDR0VYeHVRTEpSZ1ZiNzhDQUoycXRVNXFyVS9TVENsRFk1K25NRm80cjkxcmZ6dkFNbDVsbU5ESGRmUWQ5dG1Wc011L0dTb0FBQURBbXdpN01BcTExc01rVTVVWWxVazd2UUFBUUJmbmU1TTAweFlkcXNiUGZEREFNajRaNmJwLzdUcGpyLzBtdzB5dnRaZFRHWlZTVmtsV0E2ekhSMXUwenprV0FBQUF3QTRSZG1Fc1BsY0Myd1VBMkUyMTFvTWszMldZYVV1MnpSQVArMGY1TUxxVXNuQSt1L2QrTThBeXh0clo1Wk1kV2ZlUHRtZ2Rwb1ljQUFBQTdBNWhGOGJDRzc0ajNTN3RXOWdBQU5mU2RvcDdtbUdtNjlsR1EzUjJHV1BZWlRIQXZqZEpNcmVMamRvUVV4bU5OZXd5SFdBWk9yc0FBQUFBTzB2WWhZMXJXNHQ3K0RGZWdrZ0F3SFhQOCs0a09YS3U5MDU5ZDNZWmF6ZWRaODVqU2ZKeGhnbExqREh3TXNUWUhHSUtwNzYzMzhzT1Arc1RRdzRBQUFCMmg3QUxZL0NaRXRnK0FNQnVxYlVlSlhtb0V1K3MwUkJkWFQ0YzZlb1BFVDR3aGRGMitKc0Jsdkh0U0k4QjA1NFhzZHFCL2FQTHNJdmdKUUFBQU93UVlSZkd3QnVYdGc4QXNDTnFyWk5hNi9PWVB1WXloZ2lpZkR6U2RSOGk3REt6aTIyRi96ckFNbDZNZE4ybk96RE9kRXNCQUFBQU5rTFloWTFxMzJTYnFzU29UV3F0QjhvQUFGemkzTzRneWZPTWQrcWNmZlNmUnZpZFZxV1VaYy83NGl5Nk9HeUxJWTRYTDBlNjdxNkZoOTEramdrQUFBQ3dRNFJkMkRRUFFyYkRUQWtBZ0hkcHd3VlA0K0h0VlF6eDRIV01uVjEwZFdIbzY4Szk3T3hTU2xuc3lQN3hja3YyTXdBQUFHQkF3aTVzMm1kS1lEc0JBTnV0MWpwUEUzVHgxanlYTVVUWXhmbnJkam5Za2YzdXF2N0N0Z01BQUFDNG5nK1VnQTF6WTh4MkFnQzJXSzMxS01sY0paekhYY0YvT0gvbGdrOEdXTVlyNHhNQUFBQmdkK2pzd3FhNXViY2Rwa29BQUp4WGE1M1VXcDlFMEdVZCs5b0paOUh6dmptTkxrUGJab2pwdHY3TmVOdGFMd3dSQUFBQTRDSmhGemFtMWpxSm05RGJ0TDFtcWdBQXRPY0YwelRURmgycXhxaDl1S2ZyTFZDL25mdHEzL3Vyemk3YmU2ejUzeDMrL25KOEFBQUFnQjBoN01JbXVjbTBYUVNUQUlDekI0WFBuY3R0aFkvSCtLVktLUXZYR1d4Z2Z4MWpkNUNKYmFmbUFBQUF3UFVJdTdCSmJqSnRGdzhOQUdEUDFWcm5hVHE2T0k5anpINnRCRnZwWXlYb3hVb0pBQUFBZ0YwazdNSW1DVThBQUd5Sld1djlKRWNSZE9uU1B0WnlPY0F5cG5hdHJkVDNWRGd2OXJTdTM5cTFBQUFBZ0YwazdBSmMxaWRLQUFEN3FkWjZsT1NlU3RDQjVRRExFTWphVHYrNTU4OS9OZExqcTVkQUFBQUFBSzdoQXlVQUxzbERBd0RZTTdYV1NacHBpenlNM1U0SDFwc3Q4cEhyTE43aWxSSUFBQUFBRituc3dpYnBGQUlBTUZKdHQ0SG5FUndBWUxOZUtBRUFBQUJ3a2JBTG0rUU5OZ0NBRWFxMXp0SjBkSm1xQnJCRFhpb0JBQUFBd0c0UWRnRUFBSDVTYTUybkNib0lKdE9IbFJLd1FjSXVBQUFBQUR2aUF5VUFBQUNTcE5aNmxHU3VFdlRvV3lWZ2czNmY4UVd1Qk1BQUFBQUFya0hZQlFBQTlseXRkWkxrU1pLWmFneW5sTExvZWJ2YW52QnovMUJLV1NvREFBQUF3UFl6alJHYjVBMDJBSUFOcTdWTzAweGJORk1OQnZDSkVnQUFBQUFBNnhKMllaTzBNQWNBMktCYTYwR1M1MGtPVklPQlRKU0FEZnBCQ1FBQUFBQjJnN0FMY0ZsTEpRQ0EzVkZybmFjSnVnZ2ZBUHRDMkFVQUFBQmdSd2k3QUpmMVJ5VUFnTjFRYTcyZjVFZ2xkdDdLZWdNN1FQY3hBQUFBNE04SXU3QkpDeVVBQUJoT3JYVlNhejFLY2s4MTlzS3A5V2FMbU9ZV0FBQUFnRXY3UUFuWUlHOWNicGVGRWdEQTlxcTFUcEk4alRmazJTejdINXYwb3hJQUFBQUE3QWFkWGRpWVVvbzNMcmVMY0JJQWJLbGE2MEdTNXhFMFlQTW1BeXpqbVRKdnBSY0RYSU8rMnNPNmZtYlhBZ0FBQUhhUnNBdWJ0bFNDN1NDY0JBRGJxZFo2bUthankxUTFHTWsrMlhmZ1JVaDdPNzFTQXRzT0FBQUE0TEtFWGRnMEFZcnRzRkFDQU5nK3RkWjVraWNacHBzR0kxTktHZXM1WE44ZGhseGp1RFo4RTRHTS9yellvdSs2dExrQUFBQmdOd2k3c0duZktzRlc4TUFBQUxaTXJmVW95WkZLTUVKOWg2K2N1MjZmbHdNczQwZmpiV3Y5ZFZjZlZFcFpHbTRBQUFDd0c0UmQyTFNGRW15Rlowb0FBTnVoMWpxcHRUNU5NbGNOTXM0cGZYcnQ3RkpLV1VYM2htMHpSRUJwWHp1N0hPekFPbnhvaUFBQUFBQVhDYnV3VVNOdXJjN1AyVTRBc0FWcXJkTWtUNVBNVklQV0dMdWMvTnI1S3hmODJ3REwrRUdaZTJGNktBQUFBR0FqaEYwWWc0VVNqTnBwKzNZc0FEQml0ZGFESk0rekcyL3hzOXVHMkVkTmw3cGwxeHdETEdQdlFobHRBTEp2TCt5K0FBQUF3Q1lJdXpBR1h5dkJxQzJVQUFER3JkWTZUeE4wbWFnR0Y0eHhPc29od2k0bk52M1dlSlZoQWhQNzJJRmt1aVByOGJGcld3QUFBT0FpWVJmR3dJM29jWHVzQkFBd1hyWFdoMG1PVklJdDIyOTdEYnlVVXBaSmxpcTlGYjRaWUJrL2xGSitWT3BldkJ4Z0dSOHFNd0FBQUhDUnNBc2IxOTZJUGxXSlVWcVdVbXdiQUJpaFd1dWsxbnFVNUk1cThBNkxrWDR2M1YwNE04U1VVNi8ydExhekFaYnh2K3pDQUFBQXdDWUl1ekFXdW9mWUxnREFKZFZhSjBtZUpwbXJCdSt4R3VuMytzeTVMSzBoT3J1OFV1YXQ5WEdIbitWRkRnQUFBTmdod2k2TWhiY3V4K2xZQ1FCZ1hOcnBYNzdMTUoweDJISWo3dEkzRzJqZGwvYUNVZnR0aGdtaXJQYTB2a09FeXZvK3huUTVoZEYvR0hJQUFBQ3dPNFJkR0lWMktpT0JsM0ZadE5zRkFCaUpXdXRobW80dUU5WGdDc1lZZUpuV1dxY0RMTWMxeHJqOXkwRFhtL3NhZHRtRjN4VWZHaVlBQUFEQW13aTdNQ1pmS1lIdEFRQzhXYTMxVHBJbkVYVGg2cFlqL1Y0ejU3Ujc3V1dHbWNKb3RjYzFIcUlEMkl1ZVA3L0xhWXdXaGgwQUFBRHNEbUVYUnFPVXNvZzI0Mk94TEtWNEN4WUFScUxXZXBUa29VcHdUZCtPOUh2MVBzVksyNmx3WVJjWXBmODUwSEsrMzlQZkc5T0JGdlhLcmd3QUFBQnNnckFMWS9OQUNXd0hBS0JSYTUzVVdwOG1tYXNHYTFpTTlIc2RPcmZkYS84ODBITDJ0YlBMZElCbHZCaGdHWjkwK0ZsTHd3NEFBQUIyaDdBTG8xSktPWTRiVUp1MmJMY0RBTEJCdGRhREpFOHp6RlF2N0xiVGtYNnZTYnVmOTMyTnNYQ05NVHEvelRBZFFYNG9wZXhyNTVFaGZuZHNWVzNiVGs4QUFBREFqaEIyWVl5OGVibFpkNVVBQURiclhORGxRRFZZVnlsbGxmR0dQYjV3amJHWEhnKzBuTy8zdU1hL0htQVpRMHlSMXRYdndaVmhCd0FBQUx0RjJJWFJhYnVLTEZSaUl4YWxsQk5sQUlETnFiWE9renhQTWxFTnVqelBHK24zR21RcUl4MGtSK1czU1Y0T3RLeVhlMXpuQS9YOW1WTkREd0FBQUhhTHNBdGo1YzNMemREVkJRQTJxTmI2TU1tUlN0Q0RiMGY2dmFaRFRHWFV1bTAzMkxoWEdhNnJ5ejVQWVpUc1J0aWx5M1hRMlFVQUFBQjJqTEFMbzFSS1dTUTVWb2xCUFNxbGVOc05BRGFnMWpxcHRSNGx1YU1hOUdReDR1LzI1WURYR0F1N3drYjlqd3pYRFdSdnB6Q3F0YzRHV3RTTG5qLy93dzQvNjF2RER3QUFBSGFMc0F0amRqZmV2aHJLTXJycEFNQkcxRm9uU1o0bW1hc0dmV2xEeldNOXR6NXN4OEZRMXhoc3hzc2svenpnOHY2MHg3VWVxcXRMMzUxelB1N3dzOXhiQUFBQWdCMGo3TUpvbFZKVzBXcDhLTGZiZWdNQUEycW5iL2t1d3p5WWhNVkl2OWNreWVGQTF4aW5FZkxlbEg5Sy8rR0lNNnRTeWc5N1hPdFBCbGpHRUIxNi9yckR6OUxGRkFBQUFIYU1zQXVqVmtvNWllbU0rdmFnYmVrT0FBeW8xanBQMDlGbG9ob001Tm1Jdjl1WEF5N3JVWnJPaGd6bm0vYlBVRjd1ZWIySENGQU9NUzNRUngxK2xqRVBBQUFBTzBiWWhXMXdOOTdDNnN1aWxISmZHUUJnV0xYV08wbU9JdWpDc0U1Ry9OME9hcTJ6SVJiVWRqUzhaWGNZektzay96amc4bjRvcGV4dDJLV2RFbXlJc011TEFaYnhjWWZqZm1rb0FnQUF3RzRSZG1IMHprMW5aSnFkYnJuSkR3QWJVR3M5U3ZKUUpkakFlZlV5NCs1dThNV0F0VENkMFhEK0ljTk5YNVRvNmpJYmFEbDloMTArN3ZDekZvWWhBQUFBN0I1aEY3WkNlelA2dGtwMFpwWGtaaHNrQWdBR1VHdWQxRnFmSjVtckJoczA1dTR1ODFycmRNQnJqUHZ4RUx4dmp6TnNsODRmay94cHoydisyUURMZUpYK1EwV21NQUlBQUFEZVNkaUZyVkZLT1luQVMxZHV0d0VpQUdBQXRkYURKRTh6ek5RUzhDNWZqL3o3M1J0NGViZmlRWGhmVHBNY0Q3ek1QNVZTZnR6enVzOEdXTVpXVFdHVTVJK0dJd0FBQU93ZVlSZTJTaW5sT01QZk1OMDF0OXZnRUFBd2dGcnJMSUl1ak9kOGVwRnhUdzg2ZEhlWHM2azlkVHpzMW9zMDB4Y05hZSs3dXRSYUp3UDlydmwyZ0dWODB1Rm5lZEVEQUFBQWRwQ3dDMXVubEhJN0FpL1hkYnNOREFFQUE2aTF6dE1FWFNhcXdZaU1QZmc4YUhjWFU2WjI3bFdTZjJ6L0hwS3VMc04wZFVtRzZlelM1VFJHd2k0QUFBQ3dnNFJkMkVvQ0w5Y2k2QUlBQTZxMVBreHlwQktNME5pbk1ocTB1MHQ3ZldISzFHNjhTbkkzdzRRaHp0djdyaTZ0endaYVR0L2hrUS9UWWRpbGxMSzBhd0FBQU1EdUVYWmhhd204WEltZ0N3QU1wTlk2cWJVK1NYSkhOUmpwZWZSSitzeGJ2Z0FBSUFCSlJFRlV4ajl0ejhNTjFPVTRBaS9yMkZUUUpkSFY1Y3poQU10NGtmNjc5blE1RmRQQ2JnRUFBQUM3U2RpRnJkWUdYdTZxeEZ1dGt0d1VkQUdBWWRSYUoybW1MVHBVRFVadTdPZUhoN1hXZzZFWEt2QnliWnNNdXZ3UVhWM1Nka09hRHJDb0lhWUUrbmpMdmk4QUFBQ3dBY0l1YkwxU3lxTTBONlJYcXZFenl6UkJsNFZTQUVELzJnZnozNlhiTjlLaEw0KzM0RHgySXcrcEJWNnViSk5CbHlSNW9hdExrdUZDbHQ4T3NJeFB0dXo3QWdBQUFCc2c3TUpPYUc5STMweHpZNXprSk1tbm0zcEFBQUQ3cHRZNlQ5UFJaYUlhYk1uNTgra0l6NTFYU2U2V1VtNXNPckI5THZBaVVQOXVtdzY2ckVvcDM5c01TWkl2QmxxT3ppNEFBQURBS0FpN3NEUGFHL2FmcGdsNjdMTzdwWlJicFJRMzVnRmdBTFhXTzBtT0l1akM5dmxxUk4vbFVaSWJiZGZHc1Z4ZkhLY0oxRHV2ZnJNWFNmN1BiQzdva2lSL3NCbCtta0x2WUtCdC9xcm5aWHljNU1PTzd4TUFBQUFBTzBqWWhaMVNTbG1WVW01bFA5L0NQRTNUemVXUlBRRUFobEZyUFVyeVVDWFlVc2NqK0E2TDloejI3aGpEMnUyRDhodlJIZUtpMzZicDZQSnFnOTloV1VyNXdhWklNdHdVUnY5Zmt0K2xDUmw5bjZTUDZhTzZETzBzN0JvQUFBQ3d1NFJkMkVudFc1ajcwdVZsbGVSQktjVzBSUUF3a0ZycnBOYjZQTWxjTmRqaWMrWlZOaGQ0V1NhNVZVcTVPZlp6MkRaUS8ybWE3alA3N2xXU2Yyei9iRExvOHFxVXNyUTVmdkw1UU10NVZrcjVvWlR5c3BUeSsxTEtOMG4rdFIzUFhZWFYvcnJENyt2NkdBQUFBSFpZVVFKMlhhMzFNTTBiMTlNZFhMMlROTk1XTFcxcEFCanMzT0lneVpNZFBiY1ltMFVwNWFZeTlMNC9QeDl3a2Fza1g1VlM3bTlwdldacHBpM2J4L0gvSXNrL0pIazVndS95cjZXVVYwYndUMU1ZL2ZzUXl5cWxsRXQ4bjc5TU02M2ZKTmVianVqL1NmSlJSMS81VmlubHhGNENBQUFBdTBsbkYzWmVLZVdrbEhJalRadnRYWm5hYUpIa1ppbmxscUFMQUF5bmZkRDlOSUl1N002NThtbUdtK3JqT00yVVJmZTN1RjZMTkIwazk2bkx5NnNrajVQOFh4bEgwT1dGb012UEREV0YwY2tseDhqM3BaUVhwWlIvVGZKTm1pbVBYaWE1ekpSVEg2VzdvRXVpc3dzQUFBRHNOR0VYOWtZcDVWR1NHMGtlWkh0REw0czBJWmViN1kxMkFHQWd0ZFo1bXFETFJEWFlNWThIT29lOXZRdEI3WFphbzd0SmJtYjNINlova3lia2NqeVM3L045S2VWUGh1elBmRG5RY3I2K3hsajVzWjN5NkErbGxOOGwrVjJhRGtIZkovbnhEVDl5ME9IM1hYb3hCQUFBQUhhYmFZellXKzBEcXkvVDdRMjF2aHluYWZmdXpUUUEyTnk1dzlNa001VVlsR21NaHR1L3YwdjNIWXVXU1I2VVVvNTN0R1lmSlBrLzBuVFcrQ0xkZHFUWXRCZEovaW5qQ3ZQOGtHYjZvaCtOMkovMndXbVM3d1phM0kydXd5UHRGRXpuLy96M0pIL1QxVFYwS2VXMnZRUUFBQUIyMXdkS3dMNXFiN29mMTFvUDBvUmVEak91TjdWUGszeVY1S1NVc3JMRkFBRG8wWU1rUngxLzNxTWRQNC85cXlTL1RQTGJOQjFRL2k3SjMyYTdReTh2MDNUNitlMEl2OXZ2QlYzK3pIeW9hOU0rdXFTMHg0ZFY4bE40ck1zWFVaN1pQUUFBQUdDMzZld0M1OVJhRDVOOGxpYjRNdDNBVjFpa2FROTlvdVV5QUl6dVBFRm5sdzJjRytuc010aitQVW5USVdMZDhQZEprcnU3Zmk1YmEvMWxtcTR1YjNxQjVEZlp2azR2cDJsQ0xtUHRKUG1IVXNwTEkvWFA5c00rT2pLOXlkMTJXdUErMStVZ3lmTU9QL0pUblZFQkFBQmd0K25zQXVlVVVrN1MzcUJ2VzBMUDBvUmZEdEw5ZEVlck5EZVRuNlY1a0xPd0JRQUEyTkI1OEtyVytsV1NlOWY4aU5NMEQ4VDM1WngyK283cjZkKzJmdzdTZEhyNXpValg0Vlg3UGY5SG1vNHVZL1VuUVpjLzE3Nm9NUjFvY1NjRExHUFc1Ylcyb0FzQUFBRHNQcDFkNEFyYXQ4MG1lWDBqN3BOYzd1M1gweVQva1dUWi9qazFOUkVBYk4xNWdNNHV3OVBaWmRoOS9EcmRYVlpwUWk3SGUxYW5xd1RoUDB6eU4wbithL3YzSnIxS00rWFN2N1IvajkzTFVzb2ZqTTQzN29kUDBuUWs3ZHRwS2VYVExmc2RlMXhLdVcwdkFRQUFnTjJtc3d0Y3dibTN3eGFxQVFEQWpwM3JYclc3eTZNa0QvWXd4UDN4RmYvN3N3NHF2MjMvLzkra0NjMGZYT096cnVNMHliZHB3aTB2dHFqT3I3YnMrdzZtN1VKNk9ORGlIZyt3UHVkZktPbkNNM3NKQUFBQTdENWhGd0FBQUpJa3BaVDd0ZFl2OHU3cFVSWkpicGRTbHZ0V24xcnJSMms2dGF6am0veThxOHBaNk9VL3QzOS8xUDY1cWhkcEFpTGZwcG1XNkVXMk55enlLazFIa1IrTnlqZWFEN2lzSWFZdzZqcTRzN0NMQUFBQXdPNFRkZ0VBQU9DOEIwbU8zdkRQbDJsQ0xvdDlMRXF0OVlQMDA0bmx0UDN6SnUrYkxta1h1NThJdXJ6Zmx3TXQ1M1NnVU50bkhYN1djaCtEZUFBQUFMQ1BoRjBBQUFENFNTbmx1Tlo2TDYrN3U2eVNmRlZLdWIvbnBmbXJEVnhEbis1WmpRVmQzcVBXT2s4eUdXaHhqd2RhVHBlZFhVN3NKUUFBQUxBZmZxRUVBQUFBWEhDNy9mczR5WTE5RDdyVVduK1pkMC90eFBvRVhTN255d0dYZFR6QTJEcE10K0dkWjNZUkFBQUEyQTg2dXdBQUFQQXpwWlJGcmZXRzZVQis4ckVTOUVyUTVSSnFyYk84ZjJxcnJweVVVbFlETE9mempvOWRPcnNBQUFEQW5oQjJBUUFBNE04SXVqUnFyWk1rZjZrU3ZWa2wrYjJneTZYY0czQlpwakFDQUFBQVJrM1lCUUFBQU43dXZ5aEJiMTZXVXY2Z0RPL1hkbldaRGJTNDVSQWRVbnFZd3VocmV3b0FBQURzRDJFWEFBQUFlSU5hNjE4bCthVks5T0pGS2VWUHluQnBYdzY0cktHNnVuemU4ZWN0N0NZQUFBQ3dQNFJkQUFBQTRJSmE2d2RKcGlyUnVSL1RURnUwVW9wTDc0dlRkRHZkei9zY0Q3U2NMdGZwMU5SckFBQUFzRitFWFFBQUFPRFBUVjB6ZCs1Vm1xRExEMHB4SlE4SFhOYkpFS0dSSHFZd2VtdzNBUUFBZ1AzaXhoMEFBQUNjVTJ2OVpaSy9Vb2xPL2FtVThrSVpycnd2empKc1Y1ZXZCbHBPMTFNWW5kaGJBQUFBWUw4SXV3QUFBTURQL1JjbDZNd1BTZjVnMnFKcnV6ZmdzcGFsbEVYZkM2bTFUcExNTy94SVV4Z0JBQURBSGhKMkFRQUFnRmF0OVMvVDdmUXErK3hsa2hlbGxCK1Y0bHI3NGl6SmJNQkZQaGhvT1YxM3FqR0ZFUUFBQU93aFlSY0FBQUI0N1dNbFdKdHVMdDBZc3F2TEtzTk5CZlJseDU5bkNpTUFBQURZUThJdUFBQUFrS1RXT2szeVM1Vll5ekxKbjNSeldYdGZuR2ZZcmk1ZkRSRk9hc2ZZUVljZmFRb2pBQUFBMkZQQ0xnQUFBTkJZdFg5TVkzUjEzNmVac3VnSHBWaFByWFdTWWJ1NkpNbWpnWmJUZFZjWFV4Z0JBQURBbmhKMkFRQUFnQ1J0WjR2VFd1dEhTYWJSNWVVeVZrbVdwaXpxMU5CaHErTUJ0OSs4NDg4emhSRUFBQURzcVY4b0FRQUFBTHhXU25sWlN2bGRrajhrMGFua3pWWnBwcEE1RlhUcGZQOWJKdmsweVlPMnpuMTdNTVI2dFZNemRSbmtXWmpDQ0FBQUFQYVhzQXNBQUFDOHdZWFF5eXNWU1NMa010Uyt0eXFsM0U4VGV1bXplOG54Z0lHUkx6citQRk1ZQVFBQXdCNHJTZ0FBQU85WGEzMmFaS1lTZzFxVVVtNHFBeU02RGt5U2ZOVCsyU2MvSnZrK3pYUkZPdDFzWnQrYkpYbVk1S0Rqajc0eFJOaWwxanBOOGwySEg3bHF2N3ZBRlFBQUFPeXBENVFBQUFBQTNxOTlzTDZxdFM3ek92VHl5eDFlNVZkSi9wVGsrMUxLai9hQWplNTdpeVNmdGxNQlBVdzMwd0VOMmRYbFhzZWZkeUxvQWdBQUFQdE5aeGNBQUxnRW5WMDJRbWNYdHVIWThHR2EwTXRmWmplQ0x6OGtlWm5rcFM0dW85M25Ka251WlAwQXlWQmRYU1pwdXJwTU92elltMjBBQ0FBQUFOaFRPcnNBQUFEQU5aVlNYaVY1a2VURnVlRExKTW1IVzdRYXF6VFRGSDB2NExJVis5d3F5ZjFhNjNHU28xd3ZpRGxrVjVjNzZUYm9zaFIwQVFBQUFJUmRBQUFBb0FQbmdpK3B0ZjR5elFQK3MrRExtTUl2cXpSVEZLMlNyRXhSdExYNzJ6TEp6VnJyTEUzb1pYcUZIMzh3NEZmOW91UFArOHJXQndBQUFJUmRBQUFBb0dOdGg1U1g3Wi9VV2o5SUUzaVpwSm51NkN3TTA3ZFZtcW1KWGlWNTFYWUZZYmYydFVXU0c3WFdzNm1OM3JkZlBSaXFxMHV0ZFo2cmhYQXU0OWhXQndBQUFJb1NBQURBKzlWYW4rWjZVMFZ3Zll0U3lrMWxZTWVQTFdmQmw3TXdUUEk2REhOWnI1S2NkV2M1QzdPODByRmxML2VuU1pLSFNlWnYrVTlXU1c0TUZYcXF0WDZYYnNNdXg2V1UyN1kwQUFBQW9MTUxBQUFBYkVqYkFlYUg5djkrcnlLc3VUK3RrdHl1dFg2Vkp2UXl1L0NmZkRWZzBHV1c3cnU2UExhVkFRQUFnQ1Q1aFJJQUFBQUE3STVTeW1uYkdldFdrbVg3ajVlbGxQc0RmbzE3SFgvZWFUdGxFd0FBQUlET0xnQUFBQUM3cUpSeWt1U2sxbm8veWVsUXkyMjd1c3c2L3RpdmJGRUFBQURnakxBTEFBQUF3QTRidUtOTDBuMVhsMVVwNWRpV0JBQUFBTTZZeGdnQUFBQ0FUdWpxQWdBQUFBeEIyQVVBQUFDQXJ0enI0VE1mS1NzQUFBQnduckFMQUFBQUFHdnJxYXZMY1NsbHBib0FBQURBZVI4b0FRQmNYWHNqLzh4QmtzbUYvK1N6amhlNVRQTEhDLzlzY2Y3ZmwxS1d0Z3dBQUJ2VVIxZVhCOG9LQUFBQVhDVHNBZ0RuMUZxblNjNy8rWXMwWVphays3ZFUxM1h2d25jLys1K25TVmJ0bjIvYnYwK1RyRW9wcDdZeUFBQTluRWZQMGs5WGw2WHFBZ0FBQUJjSnV3Q3dkMnF0a3pRQmxvTWt2MjcvbnJaL2RzSEJ1Zjk5ZUdIZGs5ZmhsMldhYmpHTDZBd0RBTUI2K3VqcThsaFpBUUFBZ0RjUmRnRmdwOVZhejBJdG4rUjF3R1d5NTJXWjVPZHYzZDVyYTVXMHdaYzBIV0ZPU3lrTGV4RUFBTzg1NTU2bis2NHVDK2VpQUFBQXdOc0l1d0N3TTlvcGlHWjVIV3lacWNxVnpTN1VOR202d0p3bWVaWW1BR01xSkFBQXp1dWpxOHNEWlFVQUFBRGVSdGdGZ0szVmRtMlpKZm1zL1h1aUtyMDQ2NGd6Yit1K1N0TUI1bG1hTjI2Rlh3QUE5dmVjL0g2Nm53NVVWeGNBQUFEZ25ZUmRBTmdhNXpxM2ZCN2hsazJhSkRscy81eUZYMDd5T3Z5eVZDSUFnTDA0UDU4aytiS0hqOWJWQllCTi80NmJwZ2x6enRKTTk3d1V4QVFBR0JkaEY4WjhRWEVRRDdLSHROS2RnWkVlQzJacHdpMkg2ZjZOVWJveFNkUDFaZDV1czlNMG5WOGVPNjRBTUxMemlrbWFibVVNWnlrSXU5UHU5WERkdnJHdUxoMGNJMDVMS1N1N0JjQldueThldHIvZkR0N3c3ODVlOXJucmVNOGVqNUhaZFg5V1lBeUFyaFVsWU1RblRVL1RKT2NaeHFLVWNsTVpHTW40UDh6cmdJdlEyM1picHUzNlVrbzVVWTY5R2NQMzA5d2NCRGJ2UVNubHZqTDhkSHlhSlhtcUV2WkJPaGxQQjBtZTkvRFJOemNZZGxuM0dISFRReHlBcmYyOU5rbHlsTGFMN1h1c2t0eDJuNE05SFN2MXVqOWJTdkZNRW9CTy9VSUpBQmpKaGRKaHJmVkplOEgwSkUyWEVFR1g3VGROY2lmSmsxcnJ2OWRhSDdZUFJnQUEyRzRQZS9qTWhiQUlsN2gybktvQ0dQYzllSkxMQlYyUzVuN1ZrL1psTFFBQU5rVFlCWUNOcWJYT2FxMUh0ZFovejlWdUtyQ2RKbW1DTDg5cnJkL1ZXdSs3VVEwQXNKWG44WWZwcHhQclhkWGxQZnZlL1RTZEY0RDkrcDN6dk9kbDNML203N1VqOXpVQUFEWkgyQVdBUWRWYXAyM0k0YnMwTGNMbjBjRmxIMDNUVEhQelhhMzFhYTExcmlRQUFGdHhQajlKUDExZGprc3BweXJNMi9hN1d1dFJUSlVKK3piMjc2UjVPV3JTNHpJbVNiNjg1bzlQSEpjQUFEWkgyQVdBUVp4TlU1VGt1L1pHd0ZSVmFNM1N2QTMxNzdxOUFBQ01YbC9uOGcrVWxyZGNTMDd5K2tVSllIL0cvbEg2Q1ZkZU5NOTZZUnBkaWdFQU5rVFlCWURldEcvZm5YVnhNVTBSNzNQMlJ0UjM3ZlJXTXlVQkFCalYrZjFCbW1rcHUvYW9sTEpVWWQ2eXp6MVBjcUFhc0RmamZsSnJIVExnOXRtYVB6OXgvd0lBWURPRVhRRG9YRHRWMFZGMGNlSDY1a21ldGxNY0NVa0JBSXpEVVErZnVZcXVMcno1dXZJd1RVY1gxNU93UCtQK29CMzNzd0VYMjhVVVNRSjVBQUFiSU93Q1FHZHFyYk56SVpkNWVweFRtYjB4Uy9LazF2cGRyWFd1SEFBQUd6dlh2NU4rSHVaOVZVcFpxVEJ2Mk4rZXVLYUV2UnIzc3pSQmwyME1qamhXQVFCc2dMQUxBR3RyUXk1UFl4NTErak5OY2lUMEFnQ3drZlA5YVpxT2pWMWJsbEx1cXpBWDlyZWpKQTlWQXZacTNNL1QzRlBhMXRESXFhMElBREE4WVJjQXJ1MUN5R1dtSWd4Z210ZWhGL3NjQU1Bd2p0TFBBOGk3U3N1NTY4dEplMzA1VnczWXE3SC9NUDFNazNkWnB5UDVEQUFBcmtqWUJZQXJxN1ZPaFZ6WXNHbVNwN1hXcDBJdkFBQzludnZmNmVtY2YxRktPVkZoMnYzc3dQVWw3TjI0bjlSYW55UzVzK0d2OHZXYVAzOWFTbG5hb2dBQXd4TjJBZURTMnBETFVaTHY0aVlrNHpCTEUzbzVhdHZyQXdEUTRmbC8rcG0rS0VsdXF6RHRmbllXZERsUURkaWJjVDlweC8zaHByOUxLV1dSWkxIR1J6eXdSUUVBTmtQWUJZRDNhdCsydVova2ViU1VacHptU1o2Myt5a0FBTjNvYS9xaUI5NkNwNzNXbkxmWG1SUFZnTDBaOXdkcFhxSWFVOER0YnBMVk5YN3VXSmN5QUlETkVYWUI0SjFxcllkcGJqN2VpeHVRak5za3liMWE2M2VtTmdJQVdQczY0SDc2NmVhNFRQSkloYW0xUGt3VHFBTDJaOXpQMDNSMEdkWDlwVkxLYWE0ZWVGbTBQd01Bd0lZSXV3RHdSdTJVUlUrVFBFa3lWUkcyeURTdnB6WVMwQUlBdVBxMXdFSDZtNzdvYmlsbHBjcDd2NC9Oa3R4UkNkZzdmWFVNVzFzcDVUakp6YngvU3FOVm1nNWxOLzArQXdEWXJBK1VBSUNMMnJjNHY0eE9MbXkzZVpMRFd1dHRiWVVCQUM1OUxUQkpmOTAyVHB5WEFUQldiWWVYbTIwZzcvUDhmS3FsVlpKbmFhWXVFbklCQUJnQllSY0FmdEsrd1htVWNjMmJET3VZSkhsU2F6MUpjdHNOS1FDQTkzclkwL1hBS3FaN0FHQUxsRklXZVgrSEZ3QUFOc3cwUmdBaythbWJ5L01JdXJDYkRwTThiOS9PQWdEZ3pkY0VoMm02NC9YaFFTbGxxY29BQUFCQUY0UmRBUFpjcmZXZzF2bzh5VDNWWU1kTmt6eHRnMTBBQVB6OHVtQ2EvcVl2V3BSU0hxa3lBQUFBMEJWaEY0QTlWbXVkSjNrYTNWellML2RxcmMvYkJ6b0FBRFNlcEprQ3NnK21Md0lBQUFBNjlZRVNBT3lmV3Vza3pWdWJoNnJCbmpwSU02M1JyWFl1YmdDQWZiNCtPRXAvQWZnSHBaUlRWZDdJTmQrczNhNmY1TStEVE1za2YweHltdVRVRkZPZDF2NmdyZnMweWEvYnZ5ODZUZklmdTFiL2RyODdmeXhaalczOHQ5dG4xbTZiTngzM25pVlp0ZHRsc1FVMW43YnJjWkRrTDk1eExEKy96eTBkbDNmcWVITzJEN3p0ZUhOMnZGKzIrL1hwanRWZ2RtNU1YMXovVlpKdnQybmRML3dPZWRlWWZ0Yit2V2pIdE4vakFPd2xZUmVBL2J3UWZ2S1dDMkRZSjVNMDB4cmQxVllmQU5qajY0TjVrbmxQSDM5YVNybXZ5cGZhQnRlNVBsdVdVbzR2Zk5aaGtpOXl4UmNiYXEzTEpDZEp2dXJpZ2RrbDF1blhhM3o4OUJwVGt4NzMrU0N3cmZ2bmJkMHYweUZwOW9iNkw1SThIaUpnc2NiVXJtL2I1OTY2N3JYV3RPdjJkYnNkVnBmOGp0TTFqazAvMjk3blB1dUxTNHkxMllYdmZwTGs2NHZyUFlKanhtZFgyTi9ldE0rdHptMlhrOHR1bC9kOHI5bkY1V3g0djExY2RqeXRjUnp1L2ZoeTRYdE8ydTMrZVZ2cnlUVStvL050My9mK2NmRmNvcjIzK2VVbHg4RGhoWFUvR2VwWWU0MXRlcFhmM1dlMXZIZmg5OGpYcFpRVFoxY0E3SXVpQkl4VnJmVnBueGRJdlBFQzhLWXk3UHk0bWlkNW1QN2FrOE8yT2s1eWQ2aWJQSHR3ckxtZjlvWUxzSEVQUEdqKzJmRnBsbVlLUit5RDVLZUhSVTk3dWo1WUpmbDBtOTQwN3VBWWNmTTZEOC9XdVAveDAzVjgrOTJQMHMxTERZdDI3QzdXcU9YWTd1bmM3UHJCWnZ1QThrNmFCNjVkanFGbGtxOXloV0RJTmI1N3ZlNitzZVkrdDJyWDdkSDcxbTNOOFhpemxMSm90OUc5ZGp0MWNVeTcxSGZ2YVp0TjIzMXQzc014ZTlWZUU2OFZkaHZoZGVDbHowSFdQR2JkN0RzNGNTN2NNZS9oNDgrQ2puMnZ3N1gzajFKS09UY09IcWFiVHRYTGRoODUzdUE1eHhjOWJkTmxrc2Q5SGEvVytCM3kwN1lFZ0s3OFFna0E5a090OVdHYUcxR0NMdkRuNW1tNnZCZ2ZBTUMrWEI5TTBuUjg3T3Y4NTRHVytzTnN4L1phNzJtNjY5NDVhOCtOSHpvL2Ztdk43eWY1THMyRDI2NXJORTN6TVBkNSs4TEtXTzh2WEdlZk93dWZQRzBmM3ZmNUhXZEpucWVib012NTcvNjgvZXloeC9oMzdicjBNU2JQZ2x2ZnJkSDFoMzYyLzdRTjRqeFBmMTNZRHRzeCtYVElmZnNhdFppM2RlaHFTdlpwa3FOMnZhY0RiOU1uN1RHMHIyMDZiWTlYMzQzMTl3Z0FkRVhZQldEM0w0d243WVh4SGRXQWR6cEljK1B5UUNrQWdEM1E1OVNtQzlORURtS1M1bUZaWDlkNmR6SkFLR0hMcnE5bmFSNjI5aEZ5dVdpYTF3OWlKeU9xd1ZFSCs5eFpWNm0rZkpGdUEyQVh0OHZUSVVJaFBRUjJMdU5lcmRWMThlYkgyZm1RMDJ5Z3hjN2FmZnRvYkVISDlyalQxd3Q4c3d3VUxxeTEza20zZ1ozTG5DY2MxVnFmQ0s4Q3NLdUVYUUIyKytMNDdBYlNURFhnVXFaeFF4OEEyUDNyaEljOVhpT3NrdHhTNVVFY3RILzZYb2J6NC93MEJVZGZBWXAzbWFWNU8zOE0yMkNXN2pvUjlQbmdkVDVBTGU2MUQrRDcydC9tRzlyZmpQdk5IMnZPN3VWdDZxVzFlWHZNbVkyb0xIMlA2Yk5ReUx6SDdYcVV6VTB0ZjlhOVoycUVBYkJyaEYwQWR2L2kyTTBKdUpwSmV4TmdyaFFBd0E1ZUo4elQ3d08wMjZXVWxVcnY1UG54d1I2UG02TTAzVncydVEyZXUwWVpuWGtmZ1pkMk94K05ZTnpyOExLWjM5Rmp1SmUzci9kRmVnbTh0TWVKVGRmeXJKdXhEaThBN0JSaEY0RGR2amgyQVFQWDAvdGJQUUFBRzdoT21LWGZCNmlQU2lrbktyMno1OGQ3T1EzQ1NCNVNubkdOTWo3ekxyZkpTSUl1NStud010eXg1bXpiaitrNGU5Um5CNk9ST3VweW54L1o3NUN6RUpQN3hRRHNER0VYQUJmSHdOdTVtUXdBN01wMXdrR1NKejB1NGpUSkE1WGVhZE0wVXpEczA3Z1owMFBLODljb3dnZmo4ckNMNlVIYTdUcTJZTUZraE45cEY0ODE4eEhYZWI2SGdaZE93cDIxMWpzai9CMXlrTTEyS2dPQVRnbTdBTGc0QnQ1TjRBVUEyUGJyaExPSGxYMEY0bGN4ZmRHK21MY2RndlpoM056UCtCNVNudkZtL3JoMEZRaDVNdEwxTzJqSEEvMGNhdzR6L250NTh6MjdMekxObWxNK3RnRzRzUVpFNyt6TDczSUFkcCt3QzhEdVhCelBJK2dDZlJGNEFRQzI5VHBoa21hSzB6NDdRZHd0cFp5cTl0NjR0d2ZqWmpieTlaeGt2TUdJZlRWYjUrRnhHeWFaam5qOXZoU3c2dVZZTThadVBtOXp0R2NCaVhYMytiRnZWOTFkQU5nSndpNEF1M0Z4L0RDQ0x0QTNnUmNBWUJzOVRMOUJsK05TeXJFeTc1WFpMai93YkI5dVB0bVM3ZUQ2WkZ6dXJiSFBmVG55ZFp0a3pVNFh2TkcyVFVQK1pJOUNUOWZlNTl2ZmtXUC9QVG5UM1FXQVhTRHNBckRsMnB0YmJqakFNSTdhRnNNQUFOdHdyWENVZnFkaE9VMXlWNlgzMGhjN3ZHNzNzajBQbngvcXRqRXFzM2Jxa3FzNjNKSjk3Z3VidU5QZjBmZlRieGkxRDVPTWQycWVNZTN6MnpKV3ZqUVNBZGgySHlnQndGWmZHTStqb3dzTTdhald1dFNxSHdBWStiWEN3L1FiZEZrbHVWVktXYW4yWGpwTWNuc0h4ODAwM2I1TWNwcms2L1ovTDlOTVUvTVhhZDc0NytJaDkxbm5nZnQyeVZHTmpVZFgvSmt1SGppdmtwd2tlZGJ1YStjZEpQa2s2NGRxcHJYV1dTbGxZVE4zY3F6WjFxREJ2TmI2ZUUvMmd5dnY4MjBBc1l2enIrVzVNWDN4WEd0MmJreXZkYnlxdFU2Y3l3R3d6WVJkQUxiM3duZ2VRUmZZaEVtU3A3WFdtd0l2QU1DSXJ4WDY3djU0dTVTeVZPMVJPazN5dVAxN1dVcFp0bE1WVE5POGJUN3I0cHk0MW5wWVNqblpzZHJkNitoekhxU1o0bXY1am5FNmJaYzNYM05aWDBiWTVUTE93aUJmSjFtVlVoYnROcGdtK2J6ZERsMTBWL2tpVndpN3RBL0dEenJZM3g2OTQ0SDFvbDNXM1RSZE9kYlo1ejQvK3p6V1B0WjAyYzFuMlc2WGkyR25hVjZISXFZZGYvOU43d2ZMQzJQNnROWjZjR0ZNZCtHcSsveTZ2Mk5YU2U2K1o0ckl4Ym5mSTAvV1BJYk0yam9Dd0ZZU2RnSFlRb0l1c0hHVE5ITlZmK29OR0FCZ0Q2OFZIdXhneUdFWG5IWGJXVno4RitmKzJYRWJmRG5LK2c4K1A4dmJINURkemJzZjVCN2srbE5oWEdmNnJOTkxqSjFwMW44NGVwb21DUGJlNWJWQm1OdTExc2RwSGxaZTk4SDNwTlk2ZjgrRDBiNmREMWdscjd2WVROdjlaSlp1SDdSZjFYR2FoOGVyTjJ5RFpaSkZyZlZCbWdmNDZ3WUZENjdZS1dHMjV2SSt2ZXhMR08xM3VsMXJ6UnI3K3NGNzZyeDR6ODgvWFdOZGIxN3h2MStPOVBkMEY4ZWE4K3Y0NEJMai8yNTc3TCtYYmdLUHN3MTMrYmxiU25uMGhuMzh0RDBPbmJSaitxaUQ5YjNxejMrMjV2YThlZGt3Y1J0bXZkbU9xK3NHWHQ3MXV4d0FSay9ZQldETHRHOHBDTHJBNWszVDNGRDRWQ2tBZ0pGY0s4d0h1Rlk0S2FYY1YrM1JXU1c1Y1prSDdHMUhpMCtUUE05NkFZU0RkeXpqOUQzNzZscnIydE1EMW5Xbmd6aE44NUR5U21INGRudWNQYXk4YnVEbDh6UkJnNkdkcG5uby9LYnRzV3ovUG02MytXR2FMalN6Z2Ivakd4K0t2MkU3ck5JRUF2Nlk2d2V4em8rTnhicmo2SkxyZHAxdW8zZHovYkRGN0IwMVhPWTlBWk4xeHY0T1Rac3o3K2h6SHBWUzdsNnhmb3RhNjUwTzl2R2s2V0swaVcxeTZ6S0IyM1ovdkZscmZiTG04ZjJnNS8vKzRyb3Ryemd1Vm0zWHBxY0RyUjhBak1vdmxBQmdlN1JCbDZjcUFhTnhVR3NWUGdNQXhuQ3RNRS8vUVpmVEpMZFZlNVN1RkxJNDYvQ3c1akpuTzFiREw5ZjQyVld1RVhRNXR6MnUwNjNtdk1OMk9wd2hIWmRTUHIxc0FLR1VjbEpLdWRtdTUxRGRNVTh1RTNTNThEMGZaZjBIK0ZkNWVIemRMaENycTY3YmhmRi83WFZzTzVOd2ZWOTA4Qm0zcnhKMGVjTSszc1h2OHZrR2pqdlg2U3gzTzJ0MitXbTc0dlF4L2k4ZXIwNnZ1VTNYT1dZWnp3QnNOV0VYZ0MzUlhrQ3UwOW9ZNk1lOGZUTUtBR0JUMXdyejlCOTBPWnNpeHhTTzQzTjhuUWRrN2NPeFkrWDc2ZUg5ZEkyUHVMdnUyR2luSVZtdThSR0hBNVpzVVVxNWZjMzFmSlNtTyticEFOL3p1Z0dpZFlNQVE5eTNPZG5nZDV3NmFsejdXSFBRUWYwZXJEdHRXZnZ6WFFSZWhqenVMSy9UV2E0OU5qOFljTHhjZDJ3OTI5QnVhVHdEc05WTVl3U3dQWjY2QUlIUmVsaHJYVnozTFJ3QWdEVjlPY0F5Ymw2MXRUNkQrV3FObi8wNmEweXBVV3VkN2NqVUl1czhzRjJ0KytENW5NZEo3bDN6WnovTGNPR2x0UjZTdDhlU3ZxZURQYjd1TWF1VXNxeTFudWI2SFJxdTBxM2xicTczY0h5NXhyZzlpS2xMdHZGWWt5U25YVTBsV0VvNXJyVit2dVozR3ZLNHM4N3Z1cE0wVXpkZE40aHlrTXNIekc1ZWQ5dXVNYWE5Z0FYQTNoSjJBZGdDN1RRcGJrVEF1RDJ0dGQ3d3RqTUFzQUUzMDRUais3cG11QzNVTzFyTGRiWk5LZVdrMXFxSzE1OUtKa2xPcnpqRnhidXNjeTB4RzZoV3gxc1NmUHU2ZzUvdi9UN01rTWZXdG1Qd1BOY1BWTEhaWTAyeTNuUm5iL3U4ZGNJdXN3RnJkN0xHT0Z2VldoY1pvQlBOa0FIUXRpdVpNUTNBWGhOMkFSaTV0aVg1WENWZzlNNm1HcnVwRkFEQWtOcUhPSDBGWGg1MDJMV0M3cDEwOEJtTERQdkFjb3pXR1RlemtkUnZPdEJ5dnQ2U2Jicm80T2UzOWdGeUcydzVhSzlURDlLRUxQWjluSS9CT3R0ZzBYV1FvdTFpZEp6cjMzZWMxbHFuQXdUZ1RqdFl4cmNaZHRxbHJzZjB0RDNPbi8zcGJFenZVSmMyQVBhUXNBdkF1QzlrRHBJY3FRUnNqVm10OVg1WGJZVUJBQzZycDhETHNmT2EwZnUyZzg5WUt1TnVUQmxZeUlTUUFBQWdBRWxFUVZRODBBUExiZWp5dE95ZzQrWnF4TnY1YkJxaWFaSmZuOXQvSjlFVk9DUGZidXQ0M05OWFcyczZ1M2IvNi92M3lISWtuOUhic1R1dncybWY1UFYwUzlPWTBoNEEza25ZQldDOEZ6cG5YU0tBN1hLdjFucWkxVDhBTUxTT0F5K0xVc3B0VlIyOVpRZWY4Y2M5di9ZV0RyamFjV2E1RCtPaWxISTZsaW0rMm80T2gwaytqKzRzMjJ5eTd1L2xuc2IwdXRQWkhmVDEzYzdacVdCbiszdm5pM1k4K3gwRUFHdjRoUklBak5aUnBQZGhXejFwQTJzQUFJTnF1eG5jekhyZEYwNlQzRkxOcmJCU2dyWHQwbm43ek9iY25YRlJhNTNYV3A4bStTN0pROXQzNjAzWDJhZDdEcG90SEVON0g4K1RXdXVkV3V0M1NaNG51Uk5CRndCWW03QUx3RGd2Z081a2krZVJCVExORnMvdkRnQnN0elVETDZkSmJuWXdCUWpEYkd2ZEJPSFBmYnZOWDc3V09tc2ZpQjlGd0dYWDdoTmMxNzRmNnhkYlBxYm5lUjFhbXhvS0FOQWRZUmVBOFYwQUhiUVhQOEIydTlQT3V3d0FNTGhyQmw1V1NXNEp1Z0JzUnEzMVlacXA2S2Fxd1lBRUovc1p6NU8yTzlOUmRNQUJnRjRJdXdDTXo1RVN3TzZNWjlNWkFRQ2Jjc1hBeXlwTlI1ZWx5Z0VNcTMwb2ZqYTFDUXpOZll2dXgvUkJtbTR1TTlVQWdQNEl1d0NNNjBMb2ZzelhDcnRrR2pjckFZQU51bVRnNVN6bzRzMXVnTTE0R3ZlRGVMdSt3eWhUSmU1T3JYWGFqbWtoSWdEb21iQUx3SGd1aEE2UzNGTUoyRG4zMnZFTkFMQVI3d204Q0xvQWJGQTdkWkZyeHQyM3p1L1p2dmVQcWMzVHFTY1JkQUdBUVFpN0FJeUg2WXRnZHoxVUFnQmdrOTRTZUJGMEFkaWdXdXNzdzNZRFhTWTVUbktpK29OYnJibXZIUFMwRDA2eVh0aGxhZFArcko3M00yeDQ3VFRKbzZ3WHBnS0FyZldCRWdEczVZVVFNS3haclhWZVNqbFdDZ0JnVTBvcHExcnJ6YnllTHVPdW9BdkdSVm5VV3EvNzQ4dFN5ZzFWWkExZGQvaGQ1blg0WUpYazIvWi9MNUtjdHNISHMvdFFoOG8vcUhWLzMzNlJmZ0lOaHgzc2M3ejJaUS83emVwY3JmL1kvdi9UQzJQNnFkSURzSStFWFFBMnJKM0g5VXVWZ0oxM3I5WjZjbllqQWdCZ0U4NEZYbWFsRkcvMlEyT1Y2MDA1TWEyMUhnaU5jUjN0L2FCWkIvdnVjWkt2U3lrTFZSMzk3OS9ySG11U0pwUnl0NGV2OXNXYTYyVy9lejJtNTFsLytxSmxtczVMai8xdUFZRDNNNDBSd09ZOWpIbGNZUjlNTTJ4N2FnQ0FOeXFsckFSZDRHZldlYURvNVJXdWE5Mk9HaWRKYnBSUzdsNGpjUENKOG0vRVlvMmZuYlpoaXM2MDAyak5OblRzM0VXZnJmbnpEMG9wWjJQNnFyV2RLajhBKzBqWUJXQ0Qyb3RLYldOaGYzelp6b2NOQUFCY3o3U0h6M3kyeHMvTzJ3NGRjRlhyQkU0V3BaUmJhM1FPM2JwOWRrZkcyYk0xZi81aFYvY1Uyczg1V3ZOakZvYnh6OHpXK05rSHBaVDdhMnhMdjRjQTJFdW1NUUxZckNNbGdMMHlTZFBONmJaU0FBREF0VXhycmJPT3A4NDRTWEp2alo5L2t1VFRkYjVBKzdCeXJVNlExMzFReXViMjVUVis5dTRhKzlvMHljRVcxbXVlWk52MzhaUDJuc0IxVFpJOFhmZDQwM3FZOVFNU3p3emp6c2Iwb3pWKzFvdVVBT3d0WVJlQURhbTEzb25VUGV5amVhMzFRU2xscVJRQUFPeXAxWm8vZnk4ZGRoUW9wWnpXV3BkclhLTWYxRnFQU2lucmhOcVBzdDREeTlOc2Z4Q0FLK3l6YTQ2ZmJmUmxyZlhSR3Qxc3hyRGRsclhXMDZ3WE5qcW90UjRsdVh2ZFdyUS9QMTl6ZFphbVJPek1ZczM5K3A0U0FyQ3ZUR01Fc0FIdEcxc3VSR0IvR2Y4QUFPeXROUi9VSjhtczF2cmtmZE9hMUZvUDI0ZTZsL0Y0emU4MHI3VSt2YzVVSysxM1hQZk4vTWYyclAxeDNTbDkydW0wNXh2ODZvczFmbmFTNUdtN0R1OWF4NE5hNjhOYTYxaTcxM3pWd1dmTTIxb2NYSFcvcWJVKzdXZ2ZjTXpwenNFYXh3SXZVd0t3MTNSMkFkaU1PKzFGT3JDZmRIY0JBSUQxSENZNXJMVXU4dWRUYVh5VzV1SGgyWFgzWlRxdUhHZjlVUG9zeWZOYTYxZEozdHVCb24xby96RGRUQ2x6YkpmWXIydktYTEdUVHh1TWVMTGw2MzJRSnVSeG1pWTQ4eC9uL3QwbjdiK2Z0di8vNjVHdXc5bFVScE1PYXZHODFucWM1S3QzaFFqYmJmOWx1ZzA2T2VaMFozS2Q2ZmxxcmZPc055MFdBR3c5WVJlQWdiVmRYYjVVQ2RoNzkzSzVtKzRBQUxDTEZtbkNJZXVhZGZFNTdmUWl4MW4vWWZCWko5ZDc1NEk0eS9aUDBqeWcvbldhc002MG8xb2ViL1BVTGx6dmVyTFd1aXlsSEYvbVAyNjdQOXpMNWwrOGV0YlJ1RDlJTnlHeHdaVlNWbTBncnF1T3IvTTBMOVFzMDB4bjl1MjVmM2N4QU5TVll5L3ZkTzVKcmZYbVpUcWZuZXNZZmtmWkFOaDN3aTRBd3h2RHpRVmc4M1IzQVFCZ241Mm1tNGZlWFhxUWJqc2Z6QVpheHdkMnA2MjBidkRqcU5iNlJacXVIaWNYLzJYYnpXT1c1b1dyNllqRy9kNHJwZHh2dDEyWDIyWGEvam5zK2V1dmt0eTFGZDlvc2NhWW51UjFwNTdIYityeTBuWUQrN3o5UGVYZU1nQWsrWVVTQUF5bm5WTlo2aDQ0YzA4SkFBRFlVOC9HOW9YYUlQcTJCVWQwV05oZVhRUS9abWs2UXRSYTY3L1hXcCsyZjlja3o5Tk1jVElkMFRvdmJQYWZiR3VuMXdjNlNmVTZwdWRwcHVwNjA1aCttdWErc3FBTEFMU0VYUUNHTlZjQzRKekR0djBzQUFEc2xiWVR4UmdmbUQ3SzluU2YwR0ZodXkwNi9yeEptdkRMWk1UamZwWGt4S1pQMnM0ZGo3WnRueTJsUExMMTN1cnh2bzFwQU5nMFlSZUFnYlFQdEw5VUNlQ2NTWFI3QWdCZ2Z4MlA3UXUxRCtOdlo1eEJuSXR1NjdDd3ZkcHRkN3lIcS83WTF2L0pnMnhYdU82V1RmYk9NWDJhWktrU0FEQWNZUmVBNFdnekNiekpGMG9BQU1DZStpb2pESlcwRHl6SDNqSGx1TzJPdzNaN3NHOHIzTzYzcHpiOVQ0R25teGwvdUc2VjVLWnduVEVOQUdNajdBSXdIRjFkZ0RlWjFscm55Z0FBd0w0cHBTelRCRjdHK04yTzAzUjRHYU50Q09OdytUR3dqOVBDMkg5Zjd3TmpEN3ljQlYwRWxDNy91ME90QUdBZ3dpNEFBMmdmWk92cUFyeU43aTRBQU95bFVzcjlqUFRCNEVnREw2ZlJZV0hYYk5OVU5sMk5yVVgyTStUenRucWNwZ204TEVmMjFRUmRybWRicHNJRGdLMG43QUl3akh0S0FMekRyTlk2VlFZQUFQYlV6WXc3OEhJcjQzaHdLZWl5ZzlydHVZbUg0NHNOci9mZEpNZjJnSi9xY1pyazB4RWRDOCtPTjRJdTE5dVdtK2hldEZCOUFQYU5zQXRBejJxdHN5UlRsUURldzFSbkFBRHNwWFBUZUl3MThIS1N6VCtFUG9tZ3l5NlBnYlBPSGtOdDMrTlN5c2FuemltbDNJN0F5OCtPaGFXVVQ5TjArOW1rUnhGMFdYZGJIbWZZem1DM005NnA5d0NnTjhJdUFQMHpQUWx3R1hNbEFBQmdYNTBMdkR3YTZmZGJ0ZytoNzJiWWdNQXF5ZDFTeWkxQmw1MGZBNmRKYnFUL1VOV0RObVNTTkNHcVRhLzM3UTJNcTdIdkMvZlRCT3dXQXk5Nm1TYmtjdGZ4cHBQdGVOeHV4MlhQdnlOdWwxS09TeW5Makc4cUxBRG9sYkFMUUk5cXJaTjRnQTFjenFUV2VxZ01BQURzcTdhcndkMDBEd2U3ZWdpLzZ2ZzdQa29UU0hpUS9oL09IeWU1MFM2VC9Sa0RuL2EwZnkzVEJCbnVuL3RuejBheTNtZmo2cmpEOVY1dCtiNXcybmJmdVpYK0ExRExOSUdKRzZXVWhaSFk3WFpzZjZmMWNSeGZKUG0wRGRXYy8yY0FzRGVFWFFENk5WY0M0QW8rVndJQUFQWmQrNUQzVnBxSDMzZHo5WWQzcDJrZUxONHFwZnlxaCsrM2FnTURaOSt2eXdmUnl6UkJoeHVsbE51NksrenRHRGpidjdvSXZTelRkSE41VTVCaE1hSjFYclZkWG02a21ZN2w1SXJydmt3VGxybWQ1RmU3TWdWUEtlV2tEVURkVExkaG9MUTF2dFh1RzhkR1hxLzc5dDI4RG5TdDZ6Uk5PT2xtMjgzbHZHY3FEc0JlL1o1VkFzYXExdm8weVV3bEJyTm8zeGFnMi8zNHV5UlRsUUN1NEZmYmZrTzcxbm8veVQyYkVrYmh3WVczZC9mOTNHeVc1S2xLMkFmaExjZUlTWktETlQ3aTlEcm5jYlhXZ3lTVDZ5eXdpemZ3YTYzVE5hNWJUNGM4ZHoxWHE0dmYrVFROQStEVnBoNXd0M1djSmZtcy9mdXlOVjIxMy85WmtwTWh2bi83K3pDYjJ1Y0dHSS9MTnp3QUhySk9uZStIYlJmUXo5dWFYS1l1cCsyZnIwc3BKeDJ2NTlEai9teThYOXdubHUyZnRmZkxkWTdEUTlmajNQN3dXVnVQcTJ5L3hibmp6V0pEMjNFak5SN0RNZVhDZHptODR1K0wwM2I3UFg3WDhlV2E2M21sK203RDd4QUE5b2V3QzZNbDdESTRZWmZ1OStHREpNOVZZcStjM1dBOVRmSWY1MjRrdlBjaThpMFhpbWYvN0MvYUM5VjFiNzZ6SFc1dit4dFZ3aTR3S29JR2YvNzdWdGpGUGdndzVIMkJkejFBUDlXNWhUWE9hZDdJdytTOTNCL2VkNytvMDdBR2cyNi8xYTUwS1FLQVBueWdCQUM5K1VJSmR0WXlUYURsMnpSaGxyVnZHcnpsWnRUaUxSZkIwelJ2ZmN5Uy9EcFhlMnVROGZzODNiUzFCUUFBTnNnRFNucmN0eGFxd0xuOVlaVVJUVW1GN1FjQVF4RjJBZWpQb1JMc2pMTldvWU8zZVgzTFJmQXlUZURtcHd2aDlpMlFXWm9XcUljUmZ0bnFZMGV0ZGVJTlR3QUFBQUFBZ0RjVGRnSG9RVHQzN2xRbHR0cEpYcytadmh6N2wyMkRFU2Z0bjd0dDk1ZkROQjJHVEgyMGZRNmp1d3NBQUFBQUFNQWIvVUlKQUhyeHVSSnNwV1dTdTBsdWxGSnVsVkllYmV1Y3hxV1VaZnY5UDAxeUk4bWpKRHFGT0lZQUFBQUFBQUJzUFdFWGdIN01sR0NySENlNVdVcTVzYzBCbDdkcGd5OTNTeW0vU25JN1RhZ0h4eEFBQUFBQUFJQ3RKT3dDMExGYTYwRk1ZYlF0anROMGNibGRTbG5zd3dxWFVvNUxLVGNpOURKMmsxcnJUQmtBQUFBQUFBRCtuTEFMUVBlK1VJTFJPOG5ya010eUh3dHdMdlJ5TjZZM0dpdFRHUUVBQUFBQUFMeUJzQXRBOTJaS01GcW5hYVlydXJXdklaZUxTaW1Qa255YUpnQ0VZd2tBQUFBQUFNRG9DYnNBZEtqV09rMXlvQktqOUtDVTh1bStURmQwRmFXVVpTbmxWcG91TDR6SFFYdE1BUUFBQUFBQTRCeGhGNEJ1elpSZ2RKWkpQaTJsM0ZlS2R6dlg1Y1cwUm80cEFBQUFBQUFBb3lYc0F0Q3R6NVJnVkU3U0JGMU9sZUp5MmxyZFNEUGxFNDRwQUFBQUFBQUFveVBzQXRDdFF5VVlqUWVsbEZ1bEZGMUtycWl0MmMwSXZJekJUQWtBQUFBQUFBQis3Z01sQU9oR3JmVWd5VVFsUnVGMktlVllHYTZ2bExLcXRkNU04alRKZ1lwc3pMVFdPaTJsTExmc2V4OG5XZXpnOW5ob1BBenVOTWxkWlZqTFVna0FBQUFBZ0YwajdBTFFuWmtTaklLZ1MwZmF3TXZ0TklFWFFhN05PY2lXUGF4dXd6bkxYZHNRdFZhZG9vYTNLcVVzbEFFQUFBQUFnUE5NWXdUUW5VK1VZT01FWFRwV1NqbE5jbHNsTnVvekpRQUFBQUFBQUhoTjJBV2dPek1sMktpN2dpNzlLS1djSkhta0VodGoyaHdBQUFBQUFJQnpoRjBBT2xCcm5TU1pxc1RHSEpmeS83TjNyMWRPSk1rQ2dDUDM3UC9WV3JBYUM2YXhBR0VCalFXb0xZQzJnTVlDR0F0YVdFQmpBUm9MUm1NQldndFcxNEs0UDVSYU5DelFrcklrbGFUdk82Y1BUejBxTWl2cmtWR1JSVExHZnIyTkNFdTRITWRJQ0FBQUFBQUFBTDZTN0FMUWpaRVFITTJzbEdLWm5UMHJwU3dpNGxZa2ppTXpWWGNCQUFBQUFBQ29KTHNBZE1ORTlIRXNJdUtGTUJ4R1hTWnFMaExHR0FBQUFBQUFnR09TN0FMUWpWK0Y0Q2plbGxMbXduRFltQXVCTVFZQUFBQUFBT0NZSkxzQWRFUFZoY09ibGxMZUM4UEJQY1N5b2c3R0dBQUFBQUFBZ0tPUTdBTFFLRE1IRVRFVWlZTzdGWUxESzZVc1lwbnd3bUZKZGdFQUFBQUFBS2drdXdDME13bDllSk5TeWt3WWp1YVRFQnpjb0NiV0FRQUFBQUFBWER6SkxnRHRKTHNjM2xzaE9LcXBFQmhyQUFBQUFBQUFqa1d5QzBBNzFSWU9hMUpLbVF2RDhkU2xqRlRXT1R6SkxnQUFBQUFBQUNIWkJhQUxUNFhnb0g0VGdsNllDOEhCU2F3REFBQUFBQUFJeVM0QVhUQUJmVGl6VW9xS0l2M3dweEFjbk1RNkFBQUFBQUNBa093QzBBVkxpeHlPcWk1Y01vbDFBQUFBQUFBQUlka0ZvRWxtbW53K3JBY2g2QTBWZGc1UFloMEFBQUFBQUVCSWRnRm9aZkw1Y0thbGxJVXc5SWEyT0FJSmRnQUFBQUFBQUpKZEFGcVplRDZjVDBJQUV1d0FBQUFBQUFBa3V3QzBNZkY4T0ZNaDZKV2hFQUFBQUFBQUFIQU1rbDBBT0FtbGxKa285TXBRQ0k1aUpBUUFBQUFBQU1DbGsrd0MwT1pmUW5BUVV5SG9uWDhJQVFBQUFBQUFBTWNnMlFXZ3pWQUlEa0pWbC82eGhOZHhTTEFEQUFBQUFBQXVubVFYQUU3Qi93bEI3NHlFNENpR1FnQUFBQUFBQUZ3NnlTNEFiWVpDY0JCVEllaVB6THdXQlFBQUFBQUFBSTdsNzBJQTBPUkdDQTdDTWtiOThsd0lqbVlvQkFBQUFBQUF3S1dUN0FMUW9KUXlGUVV1U1dZT0ltSXNFa2N6RkFJQUFBQUFBT0RTV2NZSUFOakdheUVBQUFBQUFBRGdtQ1M3QUFBYnljeXJpSGdqRWdBQUFBQUFBQnlUWkJjQTRGRjErYUo3a2VoRld3eEZBUUFBQUFBQXVHU1NYUUNBVGJ5TGlDdGg2SVdoRUFBQUFBQUFBSmRNc2dzQThGT1plUjhSWTVFQUFBQUFBQUNnRHlTN0FBRGZsWmtEaVM0QUFBQUFBQUQwemQrRkFBRDRWbVplUmNSOVdMb0lBQUFBQUFDQW5sSFpCUUQ0aTh5OGk0Zy9RcUlMQUFBQUFBQUFQYVN5Q3dBUUVSR1pPWTZJTnhFeEZBMEFBQUFBQUFENlNySUxBRnc0U1M0blJ6c0JBTkNYYTRsaFJGeEh4SzlyNTZtemlQZ3pJaDVLS1F0UkFnQUFZQjhrdXdEQUJjck1xNGg0R1JIamlCaUl5RWtaQ2dFQXdFbWRlNDhienVHbXBaUnBEN2RwRU11RStkZmYrZWRSL2ZWZFp2NVdTcm5UbGhFUk1TbWx6TTlzbTA1RkwyTVBBQUMwa2V3Q0FCZWlKcmlNWXBua2NpVWlBQUN3OTNQd1FVUzhpOTBUeko5R3hMU0gyL1I1ZzJ1S1FVUzh5Y3luRWZIaVRLcTh2SXl2eVR6Ym1rYkUvTXkyNlZUME5mWUFBRUFEeVM0QWNLYnFUZWhSTEcrUVg0ZUtJQUFBY0dqWDBWWkpjWlNadzc1VXBkZ2kwZVV2MnhBUkh5UGltZTRBQUFCQVZ5UzdBTUNaeU14aExHOGsvMXAvVmIwRkFBQ082MlVINy9FcUltNTdzajJ2ZDd6T0dHWG11SlF5MFNVQUFBRG9nbVFYQURoQm1UbUtaYVdXWVN3cnQxeEYyeE9qQUFCQXQrZnN3K2htZVpoeDlDRFpwVloxZWRYd0ZtOGlZcUpuQUFBQTBBWEpMZ0RRVS9YbStEQytKckk4amE4SkxnQUFRTCs5NnVoOUJwbDVYVXA1T1BMMnRDN0pOTXpNVVNsbHFtc0FBQURRU3JJTEFCeEpyYzRTOFRXQjVWOXJ2eCtLRUFBQW5MUnhoKy8xTWlLT25lelN4VFhLS0NLbXVnWUFBQUN0SkxzQVFJY3ljMzA1b2ZYZlA2Mi9EbUszTmU0QkFJRFR1UzRZUjdmTGpGNW41ckNVTWovaVpqM1ZzZ0FBQVBTRlpCY0ErTWJhOGtFcjMvNzVYOS84ZVNScUFBREFtdWQ3ZU05eFJOd0pMUUFBQUVoMkFlRE1mWk80TWxyN3AvV25FdGYvRHdBQVFPczF5UFVlM3ZwbEhEZlo1ZmVRNkE4QUFFQlBTSFlCNEtSbDVpait1alRRS29sbEpEb0FBTUFSalBmMHZzUE12QzZsUEJ4cHUyWWR2TWVEN2dFQUFFQVhKTHNBMEh1WmVSWEx5aXRYOFhVSm9hdFlKcmtBQUFEMHljczl2dmZ6T0ZMQ1NDbmxJVE1YRGRkaDgxTEtUUGNBQUFDZ0M1SmRBT2lOekZ4VmFCbkZNcW5sS3I1V2JBRUFBT2o3TmMxMTdIZUoxSEZtM3BaU0ZrZmF4TGNSOFc3SDE5N3FJUUFBQUhSRnNnc0FSL0ZOWXN1djlmZERrUUVBQUU3WXl3Tjh4amdpM2g5ajQwb3A3elB6YVVSY2IvblN5UkdYWHdJQUFPQU1TWFlCNENBeWN4akx4SmFub1dJTEFBQndmdGM4ZzlnK0NXUVhyK0pJeVM3VlRmMTEwMjE5WDBwUjFhVy91bDVhYXRCNHZUK3ZQMTFhYUdZQUFEZy9rbDBBMkl0dmtsdEdvV29MQUFCdzNzWUgrcHhoWmw2VlVtYkgyTWk2aE5LTHpCeEh4SnVmWE90TkkrSnRLV1dxYS9SWDE0bEltVG1LaU04TmIvR2hsSEtuWlFBQWdNZElkZ0dnTTNWOStsVko2NkdJQUFBQUYrVFZnVC9yNXBnYlcwcVpSTVFrTTFmTDB3N3FQeTBpWW5xc1pCd0FBQUF1ZzJRWEFIWldxN2VzSjdnQUFBQmM0clhSS0E2YjhIK2RtYmUxeXNwUjFhUVdpUzBBQUFBY2xHUVhBTGF5bHVEeU10clc0UVlBQURnWEx3LzhlWU42WFRZUmVnQUFBQzZSWkJjQUhpWEJCUUFBNElmWFM2dkVrME43RlpKZEFBQUF1RkNTWFFENHJyVWJ0aTlqdWY0NkFBQUEvK3M2bHBWV0R1MHFNNi9xTWtJQUFBQndVU1M3QVBBWGRhMzVseEV4RmcwQUFJQkh2V3A0N1NMYUVtVmVSb1JrbDU5ZjM0NGk0dGVJR01hUEs1WE82OC92RVRFdHBVeEZqeTM2Mk5WMzl1TlpSTXhLS2ZNRGZwZXI3L1QzbjQwdnN6b0cvVjUvUHkybExFNjBIYTRqNG1uZDV0RUcrL21zbFBMUTh6RnJFSTgvZkRhdDIvUm5iYi9aQ2JiZFZTeVRSbit0N1RmY29MK2V4RGhkSHlSY2pSRlBhNXRlUFhKT01EdjFObDNiOWgvdGo5TzZEeTRPL0oyR2EvdlgxU05qNUdxOG1LMzF1Wk1jSDlmMnM1ZVBiSGZ2eDhnTjlySGhUOGFRVmQ5YkgwZWNROE1aa093Q3dPckVjQnpMbTdSREVRRUFBTmpvV21vMWFiQ3JoMWplcE4vMU9td2NFYmNIM041eExDZExkbkY3aUVtRk91bjlQTGFydURPc1A2T0llSk9aaTlvMnY1a0lPYXY5OWZPT0w1MlZVbTdYM21jWUVXODI2V09aT2F2OWFMTEhNZWpWanVQSWF1d2FyYjNmTkNJK1JNVER2aVoydXhwSDZyMnMxL1c5aGx2dTU5R1gvWHp0b2JOZHFvU052bm12MVRaOTZEb1pwUGExZHp1Ky9NUDZQbEQzb2ZFV2JmZHRmMzJUbWF0ajZLZDk3Vjg3eG1td3RtM2JuaDhNdnRPbTg3VitPdS9oK1BodDI0N3FtUFN6NVIzZnJJODMrMnkvaHZaWUh5OWVyNC9uK3h3ZmV6WkdSaXlYeS96UXArU3l4bjFzdFg5ZDcyUE1yUDMvVGVQYjdPVjh1WEVNLzU5eklRQTJQTUZLRHVtelhuZVIrOWt3TSs4ejh6OTJBVGdaZDBZdjV5Yk9UMkQzbTA5Mks4Y3Q2SGhjdVcvY1IwYVorYnJ4UGNZSDNONjdsbTNkODNjYlorYVhmWnlQMUFtQzF2UEIwWVhzRTZPK0hqZGF6MGt6YzVDWjczWjhqeTlkOW9FYTUzMWVuL3luN3UrRFBvNGpkWC8vVDhmNytmQUkrOG8rMi9Eekh2cGMwMzVkOTZIN1UrcXZPOXhqelZOcDA0N0d4L1cyL2RoNm5EMlI5dGhyZit0b2pMemV3eGg1ZGVUemkzM3ZZMTlhejZucmZ0QWE5L3M5eGU5ZDQvY2FCL1RVMzRRQTRDSnZ5STR5ODJORWZJbGxKdlJBVkFBQUFMWjIzZkRhZVgyS3RMVk0vTXRMYm9CNmZmc2xJdTVqUDVWS1J4SHhoK1M5eTFZbk5UOUhmY0ovQjhPSStOekJSTnF3SnQ5OGpzZVh1R2t4aU9YVDZWOXF0YVMrR05UN1dmZlI3YjJzVWQzV3UwUDBwYm9OKzI3RFVlMXpINCtaQkxLMjNkZng5VDdrUHZ2citBamJkcmZIYmZ0ZW03N3JRNXV1YmY5VjNmN3J4dTI2Nm1qLzJuZDdyUGUzMTlFdmc1b3M4WEVQWStSUnpvVldTWElIMk1lR0VYR2ZtWC9zbWxSV0svNjBudGZ2NjVqYkVyc3V0Z3YyUnJJTHdBVlpQVFZTTDZpdlJRUUFBR0RuNjZ0eHRFMGsvQllSVVpjbGFMbUJQRHAwUllLZXhIK1FtZS9xOWUwaHR2OU43SGRpbXY1YUpicDA4VlQ3ZlVPZkgwZkVId2Z1aDRPSStMaXZKODEzak44KzcyZTkyV2R5U0FkSkFidTRqdVdrL0RHck1yeU03aWZmZjlSZjcyc1ZpcjBuZzlUa3N6K2lmZG1TYmIyT1plTEJWUS8yeVgvVjhYSFFRZHU5NjJEL09tUjdEQ0xpM2FINjJ4Wmo1SGpQWStUQnRuZlBTWEkvY2hYTDVLdTdsdlA3bG43VmRaSnBmYitXTnR2cjBsM1FTcklMd0FYNEpzbGxKQ0lBQUFETldpdXFyQ2U0ZkdwOHIxY1hkbzE3RlcxVk5tQWJWOUZOb2t0TG43K1A3cXVaYkdOY24zWS85b1R1SVQ3L09wWVRuWU9PMjNBMWJnMk9GTGRqTGtNeVBQRG5qV0xQQ1Q1cmlSWEhqT25uSGlTOGpLTUhGY1BYa2dHSFIvajR2ZmUzbm8yUm8zMk1rZCswNTc0cTFHeGpwOFNlVXNvc0l1Wkh2c2JvK3YxK0MrZ3h5UzRBWjB5U0N3QUF3RjZ1dFlhTjExZ1B0YUpMUkVTVVVpYXhMQkcrcStzTGl2MXF3dmhLVCtSQyt2eStuOVRmMUZVc0p4NHZ3VlUwVk9INXliaDF6S1NBWXllOEhHTjcvOWpIc2tZOWFjOUxiTk1mdGNlN0x2ZFhiYkh4R1BsNVQrMjVxcWJXaCtQZUtIWkw3R2xORHJudUtwbW92ay9MZGNLc0p2QkFiMGwyQVRqUGsvd3JTUzRBQUFCNzAxcEo1WHVWWENZTjd6ZnN1dVI1WDY5MW94OFRqSENvUHY4NitqSGh0ektxRTh1WDRMcGhHWXYxTmh6RWNhc1RyRnN0UzNWSlkraDlsd2t2TmRtMVQ4ZWhWWkxGUlI0WGF6TGc2NTYxeGNVa3ZIUjlQRmhMZE9sVERLOTIyTWNtSFh4dVYrZjFyZU9mcWk3MG5tUVhnUE02d1YrVitEdjBHczRBQUFDWFpOencya1d0NVBLdEQ0M2Y2ZVU1Qjd5SEU0eXc3ejQvaW9nK0pwYThydC90RXJ6cFlPTDZUUnhuYVpVZkdjYnhxMkFjMm4ySENRaDlTVnhhTjdqQU5sMHRYVFR1WVZ0Y1V2SlJaOGVEbmlhNnJHeFZ5YWFVc29qMmhKZXVsaWh0dVQ1WXhGK1hYWVZla3V3Q2NENG4rSGNSOGFXSEova0FBQURuZE8xMUhXMFRYZCs5YVZ4TGhMZVVDYit1Q1NIbkdQTStWVWFBUTduMzNYcGg1NFNqT2lhLzd1RTJYVjlRd3RKS2N3SkN2ZmZhMTZvZDE1ZFE0VzJ0TFVZOUhvZFc1eXpHeU8yUEszMnVpck50Slp0UEhYemVzSEUvdVdxTTZVTk4zSUZlayt3Q2NBWW45NW41Unl5ZkZISGpEd0FBWUw5YUs2ajhyQng0YTNXWDhabkcvRTMwZXdJRU9sVXJGZ3g3L0JXSFhTNE4wM09qaHNTUU56MGZWeTlKVXdKQ1RaUjUxZk50dklnbHh0WVNZUHMrYnR4ZHlMNTExWG84cUxFNmhXU3RqU3ZabEZJZUltSis1UFA2ZlY2elFHOUlkZ0U0NFJQN21rM2MxL0orQUFBQTUzWWROb3kybS9HeldzSGxSeWFOWC9IbEdjWjhGUDJzakFENzlNWjM3SlZka3h6NlBIazdPdGRxWUk5czgzakgxNzZPL2o5a09MeVFpajN2NGpRZStIeDFRZnZZenVlZnRmcklteFByZjVzNjloS2wrN3htZ2Q2UTdBSndndXFGeXgvaGhoOEFBTUFoalJ0Zi85T2IzclZVK0tUaC9jOXhvdXRldCtPUzFLVkloaDIvN1N3aXBoSFI1WElFd3d0YUNtZnJaZUpxYkFZZHROdmJpTGlOaUdmMTUyMDlUc3c3Mks1WEY3aUx2ZHR4T2FPdWswa1hkWitjZC95K0w4KzU4ZXArTlQ2UnJ6dUl5MGtLYkVtZU83V0tSTnRVc3BrMGZ0Yk94OWtPemlWVWRlRmsvRjBJQUU3cWhINTFraXpKQlFBQTRQQmFKNUVtRy95ZlQ5RTJrZk15bGhObzUzQU5QSTd1Si8xWEU0eC9ydjNkUHlKaUZLcW1jaDdqVE5RKy9pRWlwcVdVK1hmMnJldUllQjd0azhiUGV6YmVySCtYVWNmdmZSMFI3N2Y0L3kyZlA0dUlGOTlydS9WdHJHTmtTNVdMVVkvYWJsWi8vcjMyZDcvVzc5aGxGWTlCTE8rcjNtMXhMQnAxY0N4YUpiTisrRjYxaEZyZFloVExCS1NXenhwSHhNMFpqNDlkSlk4c0l1S2hublBOVjIxUzIyRll4N2JyRHZyZU9EUGYvbUJmdnZReGNqV0dqVTYwSHo1NlRsOUttV2ZtUTdSVldObjF2UDU1Qi9zSG5BU1ZYUUJPUkQzWlZzMEZBQURnT05ka3JVOUlQdFRLTFQ5VlNubUl0aWU5eHpzK3RkNUhYVDRSUFkySVo2V1VmNVpTWHBSUzd0Witia3NwVHlMaWwxaFdUVmpvOGV6UXY2YlJUWldHVWNOckY3Rk1rbmhXU3BuOGFJSzFsUEpRU3JtSmlDZXhURERZVlIrVzZabEV4Sk95OUd6dHAwVEVpK2d1R2VmcGx2Ly8xeDAvWjE3SHFrZjdVaWxsVXNldFhjZXNxeU1mTHhaMXpQMmxsUEtrbEhMenpkajhvcFR5ejFoV3RKbDIrTG5iVnJSNTNrRWYvYVVlYTJZL2FNdFpLZVY5S2VXWGFLd0cwYk9LUzR1MThYSFJ3WFoxc1cyclBuZFR4OExaTisyd0doOVg1d1I5T3BmWnh4alpWVkxEOHlQSFpoN0xaSnRuWlUxdHg1dU94NUJ0S3E1OGF2eXM2eDMybFVHMEpiTnVkTTBDZlNIWkJmZmYxUmdBQUNBQVNVUkJWT0FFWk9icldDYTZERVVEQUFEZ0tGb251ejVzOFg5Ykp4N0daM0FkUE9yb0duZ1J5NG1QWjZXVTZjLytZeWxsWGtxNWkrWEVpQ2RhK1psNUxKZVcrZVdiQ2NSZjZ1VGFzMWhPdWkyMjdQZFhzWHNsZ1ZWZjM3anYxa25lbGlvUXd5TW1TOHhqT1lGNzg1TUVnb2RTeXJQb3B0TEZhTXYvdjJ0Y3RwcGtyUC8zUmNOMkhhdWkxVVBkZis0ZVMrd3BwVXhyT3o2TGJwSVJCMXNzUTlJYW8wbnRvOXUwYWV2RS9DaU9hMTczdVY5cWd1bHFmUHhuUlB5ejl0ZkpEdS9idXV6V29vNFpkeHNtSHkvcU9VRnJ2enRXRXZMcW1QRFlHUG1pdGxmcnZyVlZ2K3R3eWI1RlJOelc0Ky90dCtkNjlkeHVzamFHekR1Szc4c045K2RKWTJ5M0hhOGkyaE5STFdIRVNaSHNBdEJqbVRuSXpJOXhlbXRYQWdBQW5OVzFXYlFsa0N5Mm1ZQ085cHZNcjg0ZzdGMHM1VEtMNVdUYmRKc1gxUW11RjdGTVpvQnZ2YTJUYXU5L1VqbGxXa3E1amUyckJiVk1xdi8yb3duTlIvcjdMTnFTdTQ2UkxMR2F4SjF0dUkyVGFFOTRHV1RtOEFEYk50cWhEYWUxRGFjNy9BeU90QSs5MkxaeVFOM09YNkt0R3RISzgzMjJTVFd2aVNzNzdjOE4yL1pySE1kNjBzRjNLMHZWNCt1cWNzby9ZOFBLS2ZVODdQcFFZOFozK2wzcitIRjloTFo0dHVuNVR4MGptODk1dHF3cTFNVjUzcnh1NS9zdDJ2SkpSMlBJTm0wNk9lQjQxWG9kTU50bFA0RmprdXdDMEZQMWFaN1AwWStTc0FBQUFKZHMzUGo2eVRiL3VVNFF0ZHhvSHRacnlsUFdlaTI4bXVqWitXbmFPbm55WHZkbnpVMTkwbi9UUHJUWXNsclFzT0c3dGZUVlAxdkdteU8xdzN6TC9Ya1M3UldiRHJHdFY1bjVjZHZFbXBvODhteUhuME5Yc1hxL3pUNzB2WDBxdXFud2NyMUp0WTNHaWh3dENTdlRodGNlczRySSsyM2FzdmFGVFpJUHhoMk1HYk9HZnZjUWJRa0x6dy9jSHJmYmJtOGRJeWVObjd2UnVOVkI4dEtxenozWllUdFhZOGk4OGZNSFd5VDN0Q2F4WDI4NkZ0VmpSMVBpckZNOVRzM2ZoUUNnZitxSjBzY2pYWndBQUFEd1Y2MlZVbjdiOFRYM2pkLzU1aFNEWGErSlc2K0hYN1FrdXF5VVVtNXI0dERJYm5EeDN0Zkp3RjM2MFNJaVhtVG1ZNVY3NTdIYkpQZThzYi8vcStHMXd3TzN3N1FoUWVOdHRFMndqcUl0Q1dGVDE3R2MzSHlJWlNMU05KWlAyeTlPZkI5YVZUeHFIWmNYbWZraWxnOEpSbU43UG16UXYzZHQ4Mm5qZDl2Vk1aSmQzKzZhVEZKS21XWG1zMGYyemFkSEdqTytQUzhiTit6VGh6TGY5VmhWeDhoeHcyY1BEeGlQblJPYTZ4aHlHOHY1bDlZeFpMckI1ODB6YzlxNFg0OWpzNlRXbG11V1JWakdreE1rMlFXZ1orb2FqUGNpQVFBQTBJdHJ0S3RvbTh5ZGJWdUJvSHFJNVpLMnV5WjlYR2ZtN1lsT2pvNGFYei9aZHVtaVI5eEV4QmQ3dzBWYnhJYkxiZnpNWXhQOUhUMVp2KzBZTjRyMnFnbUg5S0VoL3JQTW5NVmhrZ0ZtSFl4bDEvWG5UVzJyV1gzZlArdXhaWHBpKzFGblM4T1ZVcWFaT1duc3UwL2prWW5kbXNEeDdNRDc1R0RWNWpzNjlNT1Q4MjBxdXZ3Z3pvdEh4cjdyWTR3WjN4ay81cnVlRTJibTZFRDc3RzhOMnpodkhDUC9zY1crMStKdDYxSTdwWlNIbHZhc2Z0MnlIN1ljRTE3R1pza3VMZnZLd3hra1ZYS0JKTHNBOUVoOXd1ZTFTQUFBQVBUR01hcTZySjQ2ZllqZEovSldKZUluSnhqejVrbVFMcjlNbmZ5WnhHa2xCTkN0czVzQXFra3VMMCt3WDdjK2RUNk53eVM3L0xtSDk3eGEvKzZaR2JGTWZsa2x3RXhiSjREM2FMS0g3OVphaGVLcVovdmtzQjYzWDhWeGxnZnJ4VEgzQjJOVmkxOHo4NjRIY1JyRllTcER0WTZSbnhyMmphc3RZckdyUlhTM3hPU3p4bjF0c1dXN3RDU3hYMlhtOEdjSjlIVmZhZGtlU3hoeGtpUzdBUFRuZ3VZKzNEZ0RBQURvMDNYYUttR2tSY3VrdzRmRzY4UlhjWnJKTGkwVGtBODdWdEo1ekNmWDdCZnQwd21PWFZmZjdGT0RXQzVYTkl6VFhaYXJpNlY4L3QzdzJtMldlNW9lY0x4Y1Q0Q1oxOC8rMExQS0w1M3ZRelVSOGFIaE9EMDY4SDY1Mmcrai9ub1Z5MG9ZcXdweXd4UGRML2ZkejFyajBwY0hTLzkxZ005WWRIQU9kSWlFdVpZMjdTejV0TVpxZm9qRzd5Q0pmWFZlLzdNS1dTOGJqNjk5VFphRW41THNBdENQbXhBU1hRQUFBUHJuT3RxV0E1aTAzSkN2eXpUTVkvZEpnVWVmQXUycGxwai92bzh2Vk12ZEwrTHd5MFBRRDlNK2ZxbjZGUGNvbGtzcERPSjBrMWcyMWNWWTFqS1p0L0ZZWEJNeHBrZG9rMkVzN3pHTzYvSGp0OVpqVVZkajZKN2UrdmRvVDBydGNwOWNKUi85R3FlZnhMSnhYejlBbno0SGg5aU9McElWRm52ZVIxckh4RThuM0FkK2k3WTVvT3Y0UWJKTEJ3bjZxcnB3c2lTN0FCei9Ja2lpQ3dBQVFEKzFMbUgwN3c1dTZzK2liWUxrc2FkQSszYU5mTlZCdlBabEZ1ZWZUTUIzOUdVSm83WEpyT2ZSb3duK0Evcnp4TDd2MnlPUEdjTllMcHZ4SmpOdlN5bVRJMzJQYVYvZk96TkhyUlZ3Nm5IclZXM3I0WVh0azlNRGZNYlRNNG5WSWZyRzJWZm0yR1BpM0NHKyt5d3paN0Y3QmNQaFQ4YXNsZ1Q5UmJRdmZ3VkhJOWtGNElna3VnQUFBUFQyZXUwdlMwUHM2RTM5T2FaeG5GQ3lTelJXVHRuenNoMlNYVGpXZURTSTVWSWNyMEoxb1pOUnEzTzFMTFBUNWJoNm41a3ZJK0xGRVpLM1pudU04U3d6ajdWZmp1c3hmcWkzczRGRDlKUC9PNEU0dEp4SHpjK2dIM3hvdkw1NEdkOVBNbXRad3VpaEwwbTlzSXUvQ1FIQWNVaDBBUUFBNkxXWFo3SWRnem9oUjd2L0V3SU9MVE5mUjhTWFdFNnFTM1E1UFRmUm4yb0xvNGo0MGtFRnJZc2VPelB6S2pQL2lJajdrT2dDaHpRL2cyMllOTDcrK2p0ajBqRGFrb2dzWWNSSmsrd0NjSnlMSW9rdUFBQUEvWFpPMTJ3dk5TZWNsc3djWk9ibldDNURJOG5sUk5XbjVaOUZmeEplQmhIeCtRZ0pMK2V5WDQ0ajRvOW9yL3dHWE80eFlkSXlobjhuaWIzbG1tVldTcGxwR1U2WlpCZUF3MThVdlF1SkxnQUFBSDIrYmh2SGVVMHVqK3BUbjhCcGpFR0RpUGdjbHMwNkN6MU5lTG12L1l6Tjk4djdXRlp6QVdqeG9mSDF6Ny81YzB0U3U2b3VuRHpKTGdDSHZTZ2F4M0tOWlFBQUFQcnJIQ3VoakRVcjlOOWFvb3ZLRVdla2xMSW9wVHlKaUxjOStVcFhjYmg3bFA4NGcvMXk3RGdLUnpjOGsrUEJOTnFXWkxwZUpiSFhLbDI3eG1VUkVRKzZGYWRPc2d2QTRTNktSaUg3SHdBQW9PL1hic000ejJvS0x5K2svZmFaSVBEVUhzSUJ2QW1KTG1lcmxISVhFYjlFMnpJV1hYbDFvT291ZSt2UGgxaU9xWDZHZTdyUWpXbkRhNGRuRklmVzZpN1hxM0c4NFQwZWF1VXhPR2wvRndLQS9hczNTeitLQkFBQVFPKzlPdFB0R21ibWRTbWwxMDl3bGxLbW1kbnlGcVBZMzFJaEVoRFlxM3IvNkZEVk5tYjE1L2RZUHQzdHZ0WGh4cmw1Uk54azV0dFlWZ3Q1R2NlWnhCM1V6MysvNTgrNTZ1dDcxd29MajNsM29QYVlyKzJUMDRqNHc5N3kzN2pzYWhJUi94YkNzenBPOXY1Y2RvdSsrYWJoOVMvcjJIM2Q4QjZXTU9Jc1NIWUIyUDhKMktEZU1MQU9MZ0FBUVA5ZG4vRzJ2WXpUS0ZlK2FMaUdmaHA3bUxqTnpHdlg5UnpBbXc3ZmF4ckxpZlAvVy90elJNUzhKbHVzOSsrUjBCOWViWWU3aUxpcjFVT3U2eGgyeVBaNEdmdFBkaG5zY1lMNmVlT3g1ckd4LzZyRDlwalhmZkxQK3VmWjZqdDhMK21tTWZIem5MUWtxeXhxTlNYNlk5YkJQbi95eVM2bGxIbG1QalJjZDF4bDVydUdjOU5aS1dXbU8zSU9KTHNBN04rNzhQUVhBQUJBNzlXRWh1RVpiK0oxWmc2L25lanVvVm5zUHJtNHIyMThiZy9oRVB0b0Ivdk9iNldVeVphdms4aDFaSFhTY2JaMlBCckY4bjdpci9YWGZkMWJ2TXJNd1FHV3N1aDhncnBXUXJwdTNGOGUwMXJ0YlJITDZnbVRFemoyOXZtY29HVk12UlhDWG8xMWk4eWNONXh2WDJmbWJWZGpWbVorYVR6M2Y5dVFVUFdoY1F4cnFRU25xZ3RuNDI5Q0FMQS85VWJwV0NRQUFBQk93c3NMMk1aVHFGelQrcVJwbDlVeFZoT3FydTNacTVyYzBKSjBNaW1sUE5raDBTWENRMXE5VTBxWmxsTGVsMUp1YXJ1V2lIZ1d5NG43U1hTN1hOc2gybjljeDlJdXRZNzFtOFJ3MVBqK1Qwb3BkOXNtdXRSSzRiU2ZFd3hWcnVxbGFjTnJCOUhSY24rMWJ3eVAxVDlydGF2RkVlSy9pRE9vamdNcmtsMEE5cVJld04yTEJBQUF3TWxjdzExZndLYStPb0h2K0h2ajY4ZDE2WW11dUxibkVFWU5yNTJXVW00YVh2K3I4UGZmdHdrd0VmRkxSTnpFY25tY0ZvZEtyT2hzTEsxai9QZ0F4NXBody92Zk5GUnpHZW54LyszMzg4WSsvazRVeis0ODcwMUg1M2xkSkVkUEcxOC9PVUw4SHc1UXpRc094akpHQVB1OWdKT0ZEd0FBY0JyR0Y3S2R3OHdjbFZLbVBmNk9YWHkzajVuNXBQVm1mbWJlaFVsSCt1OURReDhmeEdVaytoMUVyZks4NnlUc2RKdXh1U1lCVENKaWtwbjNEY2V4cXpqTVUvNmp6THhyV1BKanZjOStiUDB5dGFyQ3p6Nm5aZXlmMXFXcGRtWHB2TDk2aU4ycmVWeGw1bjFqUW1CazVzZkdzZkp0YTk4L3MvWnNUWDVyT3MvcjZQeHUxa0hTeUcvUlVhV2FMVDhUem9aa0Y0RDlYTmkrRGpmREFBQUFUc25MQzl2V2FWKy9YQ2xsa1prUDBUYXBOSXlJejVuNXJHRWlaQndkTDRrRVAvR3ZodGZPRzE2cmozZnJxaUdtLzJvWW0yL2pOSkkyMzJUbWZNZmx0bGFKTHAramZlbVIzaTdoWWVtODcvb1FiUWtCNDh5TVhSTmU2cjMrNjNQdGN5ZCtubmV6YldKWmgrZDNIenFJeFR3enAzRzR1YVJaWXlJZTlJNWtGNEQ5WEpDNFVjQWxtTGo0QmdEZ1RLN2pSdEUrY1RZOTRGY2V4TzZWQXlLV2t6NjNQUzloL2luYUo1YXVJdUtQT2hFeTNhSS9ER0s1N0lIckhVN0YxUzVqVUIzN1hndGZwMW9tRWNlWitYYVhwVy9xNVBHcHhPZytNNTlHeEZiSG9kcGY3enM0WGtkME1FbjlpSjIrWTFkVmE4NU5LV1dXbWZQR3RoL1grL1piTFM5Vks0QzAzdXVmU3pENDdqN1l4WG5lNXpwdXZ0OXcvM3JUNFhGdjBtRXNSZ2VLdTZvdW5CM0pMZ0RkZXhlV0wrSjh6ZW9KK0tUZVNCa0xDUUFBWjZDMXFzdWt0VHorTnVyTitpK04xNTdqaUhqZjF3WXBwVXd5ODAyMFQyb09ZemtSTW9tSTMzNDIyVlRqT283bFJJanJlZzd0M3cydmZaV1preDBTQjB5cWQyL2ErUHFQdTFTa2FsMXk1d2h4R2tmRWRXYStyY2ZReFUrMjdTb2lYa1YzQ1lqeng1WXdxbG9TUW9lWitYcVRDZmh2amtHZm95Mlo5Wnk5amZhbGIwWVI4YVdlRTN6NFdTTHNXdldQWVFmZlhZTEIvNTduUFhTUXdCVDFmTzFkWnI2S1pmV2NUOSsyYXgwZm45Y3hwS3Z6dTBsWFNlUDFuUGNRYzBxTFVHR0lNeVRaQmFCRDljVEpPc2VjbTFXQ3k4TXVUeGNCQUVEUHIrTldDUTR0UGh6eU82K1ZmMi81M2krang4a3VhM0h0cW5McU9KWlBkYzlqT2JIN2JXTEIwN0FjTWFkckdNdWtyaGVQWGJldlZTUWVDOXZleHVkWjdKNndzSFZGcWc0U2w0NVY1V3RWUmV0ZFhjYmo5Mi8rL1Y5MVhCNTIvTGx2TjJ6TFdXTzFuSGQxNlp4TktrNk13d09VajNub01FYXJjNEtJcjhsZTg3VysxdVg1d0NLNnF3QnlicnBJWUZvL0RyNk9pTmNIcW5MMWRnLzllOS9INVllZVYzV0VuVWgyQWVqV3ZSQndCaGIxUXU5VFJFd2x1QUFBY09iR2phK2ZiN05FVG9kK2EvenVWNWw1MWZPeSt1OWptWlF6N1BBOWgyR1NuMzZhUmx0eTExVXNLeFk4eERKcDROdDlleFFSdjRhSHRBN2hRN1JWNXhqR01ubHBIc3NKMEQ5ak9SRy9icldjM2ZQR3o0cWVIQWRHY1ppRXcza3BaYkxOLzI4OEJxMHFUbnlJLzYyZ000eGxvdVYxU0hMWnBKOHVNdk0ydXIvL3Z1OSs5NXNFZ3grMjZhVHVINmRXeldpeWgvdmxyZWYxbTM0R25CM0pMZ0FkeWN6WDBmMlRCbkFvMDFqZURIdXdoaXdBQUJmbVZlUHJqM0xqdUQ1eFBvMjJTWnBYRVhIVDE0WlptOWl5MUFwbnI1UXk3ZWhwOU91UTBISnNrK2htT2JSaExDc1Y3Tk9sTFdteDdURnZHdTBUME1QYUg5N1lOWnJIeVVsbXZvelRxY1Eyai81WDBldkRQdm5IQ1gzZlJYUmYxV1YxWHQ5U0Zld3hNL2Y4T1ZkL0V3S0FkclhzdFFzV1RzVThsamN6YmlQaVNWbDZWa3E1YzlJTEFNQ0ZYY3RkUmZ0REM1TWpia0xyOGtuWDlYcTJ0MG9wRDNGNWs3RmNMbjM5RE5RcURwTVQrYnFmTHFocDN1OVFpZTJESHQwN3QzRzhwYmUyL3E2cXVqdzZYczVpRDhramUvUjJqMVhROTVsQXI2b0xaMHV5QzBBM1hvZHlrL1RUUEpZM3k5NUd4TE9JK0djcDVaZFN5b3RTeW52SkxRQUFYTGpXcWk2VFkwNWkxS1VZV2o1L0VLZFJBZUltVG1kaUMxcVlqRG9mYjA5ZzNGcHN1YVRQS2R0cFFyMG14OHgxNS82bzl6SnZUK0NyUHRTRVhSNXYwN3M0aldUUGgxTEtQaXYxN0NzR2k1Qk15eG1UN0FMUXFENEY5MG9rT0xKNUxFdXJ2cThYZk05cXhaWlZZc3RkS1dYcWFRSUFBUGpMdFZ4cm9rY2Zub2lmTkw3K1pkL2JxbDdIUEFzSkw1eTVPckUrRlltemFNdEY5SGladU9ydGhUVEhJaUp1R3U2SnZkV2plN2QvVGFMZnl3UE5UbUQvNzV1YkdyZUxiZE05VmdWN01DZkFPWlBzQXRCT1ZSY09lVkk5clJkenEwb3RUOWFTV3A2VlVtNXJ4WmFwY0FFQXdFOWROMTdMelh2eXhHNXJKWWhSWmc3NzNsajFTVzRUUjF5Q1d5RTREL1VZTWVucDE1dnR1VUpCWHl4aStVRFlyS0VkSnlFSnJZLzcxMjFQOTYvVzVLcExiYzlWWXZPc3AyMzY0a0J0dW8rbDAxU040Nno5WFFnQW1xbnFRdXZKOG16dDkzL1czOC9yVDBoY0FRQ0FYbDdMZmVqRFJwUlM1cGs1alloUll5eDZQOEZlU25uSXpHY1I4VEU4ZE1LWktxWE1Ndk1tSXU1RjR5emE4eVl6SXlMR1BmcGFpNGg0Y1FIaGIwNTBXZk1pSXI0NDl2UnkvMXJFOG1IVWMrdHpsOWllaTNxZTl6a2lybnJ5dGVheFRIU1pIeWdHMDh5Y1I4U3dvN2VjNlkrY084a3VBQTB5Yyt3aWg3V0xtZG5hU2ZDL3YvUDMvejFwRlM0QUFEanF0ZHd3Mm0raVQzcTBTUitpTGRsbEhDZFNUYUpPQXF3U1hvWjZNK2VvbERMSnpLZHgyQVNKOTdHc2VHVy82cjQ5KzVUd3NwcU1uNTk1MkdmUjRRVDFONVB3Z3dOdXc2ZUllR012K21uYjNHYm1ueEh4TG81N24xNmlTMGY3V2tROHljejdIb3laczlxbWg2N1M4MXZ0ejEyOUY1dzF5UzRBYlZ4c1hKWlpMQk5aL295dmxWZm1GM0NEQUFBQXprMXJWWmVIUGwwSDFJbnhsa21lUVdhTzYxSU52VmNyWHp5SlplV0w2d04rOUNJODhNTGgrdmxOWnY0N0RuUHY2WDJkTUI1RXZ5cVFhTTl1eldLNXZNcTVUOGEvajRpM1hVOVExMlBQb1JKZVpyRmMwbVVZN2o5dmVoNDBpMldDd09nSVgyRWFoMXZtNXBMR3pFLzFYTzhZNTE1dlN5bDNSOXI4aCtnbTJXVlIzd3ZPMnQrRUFHQTNtVGtLVDd1Y3MybEV2STNsbXZCUHl0S1RVc3FMVXNwZEtXVlNTcGxLZEFFQWdKTTBibno5aHg1dTA2VHg5YzlQcVFGTEtZdFN5b3RZTGkyeDcrdXlSYjAyOUhRc2grN25kN1dQTC9iWnQwc3BxOHBPdjR2NjN0dnpTU3p2T1IzYSt6aGUxWWxwL2Z4OW05ZHR2TjFYMGtHTjN5OTdic09IdWgyTCtua1NLRFpzbTFMS3MzcThQbFRNRmhGeFcwcDVKdEZsTDIzNlVQZTM5d2Y4MkdrczV3THVqcmpkOCtnbVNlVkJ2K1FTU0hZQjJOMUxJVGdicXl6bjIvaWEyUEpzTGFsRitVa0FBRGdUSFN4SE82ODMzL3VtTlJIanVpN3ZkRkpLS1ErbGxGOWlPYmsxMzhOSFRDTGlsMU9wZXNQNTJlTmszelNXOTBEVys3WW53UGZmbnFzSitXZHhtS1NYMVJoMmU4eEp6NXBRdGE5RW4za3NrN1orT2NUUzRUVUo1ZGtlamp2eldGWUgrYlpDeU5TZXMxWDdUT3FZZVJ2N1M0WmR4UEloeVY5S0tlOUZmZS83MjIxdDAwbnNMNUZwVmZtcUwwdFJkWkZZTDBtYml5RFpCV0FIeXJxZWhWa3NieFE5S2FYOHMxNUl2cGZZQWdBQVo2KzFna2tmcTdwMDlSVG85YWsyYW4xUTRaZFlWc0dZUk50a3lEeStUbUxkZUNxV0h2VHY5Y20rdDlFMmdUdUpaZFdJWjk5V3E2MTkzWDJSdzdUcHRDWk1QSW5sL2FrdTR6Nkw1VVQvYWd5YjkyU2JaMnZiM0RwT0w5YjY4bEVTRXRlT096ZlJscEF5aTYrVnBiOTNIRmR4YWJjeDgzMkg1d1VyMDlwV3Y5U0hKSjBmSFBBOHQ1UnlVNCtETjlGTmN1WTh2czRQUE9sVFluTWRDMXJHN3BsNURpNW1mQkFDK2lvelA4ZHgxbGU4VktzTExEYnJuK05ZcmhmSmFabkg4c2IweFBKRG5lMExLUW9IZDh3MVk1MmJPRGR4ZnNLcDc4ZWppUGdzRW81YndFV04rNk9JK0RXVzFYeXU0dnRWZmFheG5BVDd2WjUvbUJ6Z0ZQcjNWZTNmVDJ1Ly90NjF5aXA1WmJiV3YwM085cmROaDNXY3V0cGczRnB2MzBWRS9GbC92NWMyYmp5UC91RjEzVGZqOUdyN2Y3U2Q4N3FkdlJ5bjY4T1IxM1Zicmh4emVqMXVydnJiNmlkKzBFNVIyMmx2K3hiTis5elZOK2Q2b3gvODkzbjltVVhFdjA5aDM4dk0vOFR1MVNodlZDWGtVdnhkQ0FCMllnbWowektKaUErSEtHVjZnUmVJQUFBQXZWU3ZBVjBIY3E3OWU1WEVZZ21OODJuVGVTd25ZeDh1YUp2UFpweXVpUkFUUGZra3hrM09aNTg3eTNPOXpMeU8zUk5kRm1GWlFpNklaQmVBN1U4MGh1SEovbE93aU9XNmxLcTQ3TTlBQ0FBQUFBQUFvRE92R2w3N29Bb1JsMFN5QzhEMnJvV2cxMVpKTHUrZDFBRUFBQUFBQUtjZ004ZlI5ckQxYjZMSUpaSHNBckM5cDBMUVc1T0llS3VTeThFTWhRQUFBQUFBQU5yVVJKZjdocmVZMXVXNjRHTDhUUWdBdGpyWkdJVEtMbjAwajRobnBaUWJpUzRITlJRQ0FBQUFBQUQ0cTh5OHk4ejd6THg2NVA4Tk0vTSsyaEpkSWlJK2lEcVhSbVVYZ08yTWhLQjNKaEZ4YThtaW8vaUhFQUFBQUFBQXdIZU5JMktjbVl1SW1FYkVuMnYvOW85WXpqbGRkZkE1ODFMS1JMaTVOSkpkQUxaakNhTit1WEVDZDFSWFFnQVlad0FBQUFEZ3AxYXJCdXhyNVlDM1Fzd2xrdXdDc0oyUkVQVENJaUplbEZLbVFuRlVReUVBRG5BakFBQUFBQUQ0UGxWZHVGaC9Fd0tBeldUbUlEeGgzZ2VMaUhnbTBhVVhoa0lBSE9qNEN3QUFBQUQ4TDFWZHVGaVNYUUEyTnhLQ1huaFdTcGtKdzNGbHB2MEJPQlNKcGdBQUFBRHd2MVIxNGFKSmRnSFluTW0yNDd1UjZOSWJReUVBakRjQUFBQUFjRFEzUXNBbGsrd0NzTG1uUW5CVTcyVW8yeCtBaS9TckVBQUFBQURBWHp5VVVxYkN3Q1dUN0FLd09aVmRqbWNlMXAyMFB3REdHd0FBQUFCZ0hxcTZnR1FYZ0UxazVpQWlCaUp4TkRlbGxJVXc5R3AvTVBrTUhNcElDQUFBQUFEZ3YxNllNd0hKTGdDYk1yRi9QRk9sK0hwbkpBVEFJV1dtY1FjQUFBQUFsZzhIejRRQkpMc0FiRXF5eS9GWXZxaC9uZ3NCY0dBaklRQUFBQURnd3QyVVVpYkNBRXVTWFFBMll3bWo0NWlwNnRKTEl5RUFEa3lTSFFBQUFBQ1hhaEVSenlTNndGOUpkZ0hZekZNaE9JcmZoS0JmTXZNcUlvWWlBUnpZVldZYWV3QUFBQUE0RmZPTzN1ZDlSUHppd1dENFg1SmRBT2l6QnlIb25aZENBQnpKV0FnQUFBQUFPQVcxQ3NzdkVYRWJ5N21PK1JZdm45WFgvVkpLdVMybExFUVUvdGZmaFFCZ0kxZENjSEF6SjNDOU5CWUM0RWhlUnNTZE1BQUFBQnhXclNaUVJBSmc2L0Z6SHN2S0xPOVhmNWVabzdYL3N2cjlJcFlKTHFHQ0MyeE9zZ3ZBWmdaQ2NIQk82SG9tTTYvdEMxdzRDWGpITmN6TXNiV0pBUUFBQURoVjN5U3pURVVFZG1jWkk0QkhaS2JKL2VQNFV3aDZ4eEpHR0pjd0RnRUFBQUFBY0hTU1hRQWVad21qNDVnTFFYOWs1akFpcmtVQ09MSlJabzZGQVFBQUFBRGdza2wyQWFDdlprTFFLMitFQURBZUFRQUFBQURRQjVKZEFPaWxVc3BDRlBxaEx1VTFGZ21nSjRhWmVTY01BQUFBQUFDWFM3SUxBUENZMTBJQUVSRWhDYTgvM21TbVpRWUJBQUFBQUM2VVpCZUF4NDJFZ0V1Vm1jT3daQWlzV0Y2dFh6N1d5bE1BQUFBQUFGd1l5UzRBd005SWRBSDZhaGdSSDRVQkFBQUFBT0R5U0hZQkFMNHJNMGNSTVJZSm9NZEdtWGt2REFBQUFBQUFsMFd5Q3dDOWxKbFhvbkIwNzRRQXZpcWxURVdobDhZU1hnQUFBQUFBTG90a0Z3RDZhaUFFeDVPWmR4RWg0UWc0RmVQTXZNOU14NDdsR0Q3SXpLRklBQUFBQUFEblNySUxBSDAxRW9ManFGVjEzb2dFZk5kQ0NIcHJIQkdmTHpuSkl6T0h0Y3JObDdBTUhRQUFBQUJ3eGlTN0FOQlh2d3JCNGRXcUNKWURnUitiQ1VHdlhVWEVINWw1ZlVuamRtYU9NL056ZkUxeVVlRUdBQUFBQURocmZ4Y0NBSHBxSkFSSDhTNHNYd1NjdGtGRWZNek1oNGk0TGFYTXozRWphMExQODRpNERza3RBQUFBQU1DRlVka0Y0SEZ6SVRpS1FWMU9od1BKek5kaDJRdDR6TzlDY0RLdUkrSkxadDdWcWxXblBrWVBNdk02TSs4ejh6OFI4VEZVY1FFQUFBQUFMcFJrRjRESHpZWGdhRjRKd1dIVUNnSHZSQUk0UTI5aW1mUnluNW5ERXh1YnJ6THpkVjJpU0lJTEFBQUFBRUFsMlFXQVBycytoNmZ4KzY1VzBMa1hDZGpJVkFoTzBpQ1dTU0pmTXZOelpvNzdlSHhaUzI3NVdLdTMvQkhMUk1TUkpnUUFBQUFBK09ydlFnQkFqdzBpNG5WRTNBbkZmdFJFbDgraFNnQnNhaUVFSjI5VWYrNHpjeFlSbnlKaVdrcVpIbmo4SFVYRU1DSitqWWlya05BQ0FBQUFBTEF4eVM0QWp6T3hlVnl2TXZOOUtVVTdkRXlpQzJ5dmxETExUSUU0SDFmMTUwMXQxMW45K1hmOWRSRVJzMTJPUVhXTUhkU2ZxNGo0Ui8xMVdIOEFBQUFBQU5pUlpCZUFSNWpZUERyVlhmWkFvZ3MwbVlka2hYTzFTbjc1ZHN4Y2IvdjVEMTQ3MUM4QUFBQUFBQTVEc2dzQXArQk5aajZVVW1aQzBTNHpyeVBpUGlTNndLN21JYW5oVWcyMVBRQUFBQURBOGYxTkNBQTJNaGVDbzd2UFRNa1pqVEp6SEJFZlE2SUx0UGhkQ0FBQUFBQUE0SGdrdXdCc1ppNEVSM2NWRWUrRVlUZVpPY2pNKzFoV2RBRWNFd0FBQUFBQTRHUlp4Z2hnTTNNaDZJVnhaa1lwNVVZb05wZVpWN0ZNY3JrU0RlaUVKZFVBQUFBQUFPQ0lWSFlCMk15L2hhQTN4cG41V2hnMlUyUDFPU1M2UUdkS0taSmRBQUFBQUFEZ2lDUzdBR3htTGdTOThxNHV5Y01QWk9aVlpuNk81ZEpQQXhHQnprMkZBQUFBQUFBQWprT3lDOEJtNWtMUU8rUE0vSmlaRWpuV1pPWWdNKzhpNG8rSUdJa0k3STNxTGdBQUFBQUFjQ1NTWFFBMlVFcVppa0l2WFVmRUg1azVFb3FJekJ4SHhKZUllQ01hc0hkL0NnRUFBQUFBQUJ5SFpCZUF6YzJGb0plR0VmRTVNOTlkYXBXWHpCeG41cGVJdUE5TEZzR2hUSVVBQUFBQUFBQ09RN0lMd09Zc1dkRnZyeVBpUzYxdWN2Wld5eFd0SmJrTWRRRTRuRkxLUENJV0lnRUEwSFJkczFxZWR0MS82dCtOTHpRbW83cjkvL2ttTHA5cnZEemdjTDc3d2JkdGZySDdBUUFBYkVLeUM4RG1MRm5SZjRPSXVNL01zMDE2cVRjKzd5UGlQN0Zjcm1pbzJlRm9wa0lBQUdkM3J0MWlKSW9ieC9vcU0vK0laZUwrOVhldTY2N3J0ZDBmbVhsMUlURVpaT2JuaVBoY3QvL2JwSlpSalplbGZNOTNQL2kyelZmN3daZEwyUThBQUdBYmtsMEFOamNWZ3BNeGpLODNoTzR5YzNqS0cxTnZnTDJyVlZ3K1I4UllFME12L0M0RUFBRGJYOS9VNjVwTkp1K3ZZcmxzN2RVRnhPUkxMQk5hTnJuZS9heml4MFh0QjhOWUpqbGRpeHdBQUh3bDJRVmdjNVl4T2ozRFdGWS8rYklxLzNzcUpaL3JVNldyQkpjL1lybE0wMUNUUXE5TWhRQUFZS3ZybkVFc0ovaTN1UzRieERLNVkzaWs3L3o2QUpWVTdyZU1TY1R5QVEvVlB2YlQ1dS8yMmVaMVAvaTRZNXU3THdBQUFKVmtGNEFObFZJV0llSGxsRjNIOGdiaWYyb3A3THUrbEg2dTVhcEg5VHQ5enN5TTVRMWdDUzdRNytQQ0xDTG1JZ0VBc0xGM3NmMEVmOVRYdkRuQ3RkcDkvYzc3L0l5NzJLeTZ4L2Zja25IYjJRQUFIa3BKUkVGVTYxS2RYNXQvck5maSs3VHJrc1FEYlE0QUFGLzlYUWdBdGpLTDNXOUMwUjlYOWVmTk1xOGtadlhuei9ycnZKUXkzOGNIMXdTYlFmMzhYK3V2UTAwQ0oyc2FsaFlEQU5qa1dtalFlTjQwenN5Mys3cFcrODUzM1hTSm1WWXZXNjV0TTNOVVNwbnFZYWZSNWgzc0I2UE12S3FKOXdBQWNORWt1d0JzNS9jd3FYbU9Wc2t2LzFXVFlPYnh0V3JETENMK2I4djNmVnAvSFlRa0tUaFhueHdYQUFBMmN0M1JlN3pmNTVlc1N3UGRIK0lhcm43V3NQRnRub2ZsTmJ0b2gyMlgxOXJWcUlQUHVRNlZod0VBUUxJTHdKWWVRc25ZU3pLTXJ6Y2VSOElCZk1kVUNBQUFOcjYrYXZXdmZYN0JXb256WXh3bTZTR2ltNFFhRDFhMHRmazRkbDllNjFqdDlhdVdBd0NBaUw4SkFjRG1TaW1MOFBRTUFIODlManlJQkFEQVFld3RzYU1tUFJ5cXVzZktVSk1lVDJhK2p1VURUWU1UKytvRHJRY0FBSkpkQUhZeEZRSUExbndTQWdDQWc1anY0MDB6ODEwY3A0cnJRcE1lUjJiZXg3S2lDd0FBY0tJa3V3QnM3NE1RQUxCbUtnUUFBSS9xSXJIajMxMStvY3djWk9iSGlIaDlwSmgwVVRsMnJtdHQzZVovUk1UNFNGK2hpL2I2WFVzQ0FJQmtGNEN0bFZKbTRla3JBTDRlRitZaDRRVUE0REVQUFhtUGlGZ21QY1J5MmFMckk1NUhUcVA5L29MRWg4M2IvS3EyK2RXSjd3ZXVQUUFBSUNTN0FPenFRUWdBV0tQcUZ3REFUM1NRSUR5dEQ1ODBxMGtQWCtLNFNROHJMZmNYNXFXVWlkNjFVWnVQNHZpSkxsRktXVVRFcExITnAxb1VBQUFrdXdEczZwTVFBTEJHRWlRQXdPTnVqL1RhLzhyTWNTeVRIZ1k5aXNuaW1ERTVkejFzODdjTmJYNmpSUUVBWUVteUM4QU9TaWtQWVNrakFMNGVGeFloNFFVQTRMRnpwbG5zTmxsLzAwVlZsOHg4SFJIMzBaK2toOVY1NUxQWS9oN0QrM3B2Z3ArMytidmE1bjNhRCtZTis4RlVxd0lBd0pKa0Y0RGRUWVFBZ0RXV01nSUFlRVJkZHVkRmJKYmNzWWlJRjEwczFWTVRYZDcxTkNheldDYTh6RGVNeVUwcFJWV1h4OXY4WFVTODdtbWJQOFRtU1U2ck5wOW9WUUFBK0VxeUM4RHVUR29DOEYvMWh2VmNKQUFBTmpwditpV1d5N2w4Ny94cFh2L3RsdzZybHd4NkhwTlpSRHlKNWRKRXN4L0U1SDFFUEpIMHNMR3JucmY1ZEl2OVFKc0RBTUEzL2k0RUFMc3BwY3d5Y3hZOXYza0N3RUY5aUlnM3dnQUE4T2cxOVNJaTdpTGlMak1IYTlmV3MvcHZseHFUOXhIeC9wdVl6T3ZTTjlnUEFBQ0FTcklMUUp2Zm9tZHJQd053VkpPUTdBSUFzSlU2cVQ4VkNUSFI1dG9jQUFBMlpSa2pnRFlQc2RuNnlnQmNnUHJFN1VRa0FBQUFBQUJnZnlTN0FEU29UOTFNUkFLQU5SK0VBQUFBQUFBQTlzY3lSZ0R0Zm91STE4SUFRRVJFS1dXYW1kT0lHSWtHQUhCTW1Ya1ZFWU9JR05hZmlJaFpMQ3VVTGtvcE0xRmloMzQxaUlpcitzZjEzMGVzTGNOVFNwbUtGajN1eDZ2cnRmWHhjVkhIeUlpSWVhM2NDUUJBVDBsMkFXaFVTcGxuNWlRaXhxSUJRUFUySkxzQUFCdFlTMGpaMW5lVFZUSnpIQkhQNjduSTRKSFBqbGdtSi93ZUVRLzdUbjdKekdGOG5WVGUxazhubnRjbXJuL2tYdzFmL2FyR2FwdDdCZE1OWS9KdHNraG5NZW00ajE1SHhOUDZYWC9Xcjk1ODA3L21zVXdlK0JRUjB5Ni83d1p0UHVocG0rOWxQMmpzU3o4Y1U0NHd0bTBWenkzMnMxVWZIbTBhLzh4Y0piOGNaSXdFQUdBN2tsMEF1dkVoSkxzQVVOWHFMdlBZL1NZMkFIQTUzc1Z1U2JMVGlIZ1c4ZCtKM05jUjhTcTJuMXdlMVo4M21UbUxpTjlLS1pNOWJlczQxcElodHZRMkl1NSs4dStmOTl4R1c1OFNidmovcmhxKysyTXgyVmxOeUJoSHhNdkdjOXBoL2JtdTd6dU5pQThkOWJGVGJmTzk3QWVsbEVWbWZvemRFMHptRWZGTGh6SDhvK0cxblh5WG1oRDFNbmEvWnpmNFpveWN4N0xDODZRdWJRNEF3Qkg5VFFnQTJ0V25UYVlpQWNDYXQwSUFBT3hibmN6OUk1YVQ1NFBHdDd1S2lQdk0vTEpCMVF6T3N6OE5Ndk0rSXI3VVBqWHMrQ05HYTMzc1dzUTc5OUR3Mm1HdHh0SkZQN28rNG5aRVpvNHk4M01zRTZMR0hjWjNHTXRFcUMrWmVWY1REUUVBT0JMSkxnRGRNYWtKd0gvVnAxV1Z1UVlBOWlZelg4ZHlNbmZZOFZzUEkrSnpacjRUNVl2cVQrTllKcm1NRC9CeHc0ajRtSm1mSlF4MDZsUGo2MTkyOUQyZU43Nyt0eDM3OEtCV3Qva2MrMTFXZGhETFpMQS9KQVlDQUJ5UFpCZUFqcWp1QXNCMzNBb0JBTEFubzlodHFaVnR2SmFNY1A3V3FybmNSM3Qxb0YzNjhaZXVLb3BjdWxMS1EwUzBMSy9UVmJXZGx2ZVpsVkxtTy9UajYxZ21heDJ5WXRBd0pBWUNBQnlOWkJlQWJ0MElBUUFyRWlFQmdETXdpdVZrcm9TWE0xVGJ0ZXVsWHJZMXFIMU13a3MzSmcydkhXYm1zTEZQWFVkYjB0U0hIVDd6ZFVSOGpNTW5hNjI4enN5UHhra0FnTU9TN0FMUW9mcmt5VVFrQUZoam1Uc0E0TlJkeGY2cnlIQmdhNGt1ZlVneWtmRFNuUStOcjIrdGpOSzZoTkhEbHYzNHZpZmowM1ZJREFRQU9DakpMZ0RkZXh0dEpXTUJPQ08xdXN0RUpBQ0FFemV1MVJNNEgrK2lINGt1SzRPSVVCMmovZnBqRmhIemhyZDQyZmdWUmcydmZkaG1DYU9hNkRMdVVmaXZZcmtjR0FBQUJ5RFpCYUJqOWFMOE41RUFZTTF0U0lRRUFFN2ZHNGtJNTZFdU5UUHU0VmNiUnNRYkxkU3NwYnJMMWE1TEdkWEtQTU9Hei82MHhXZU5lOXFIcnpOVEpTd0FnQU9RN0FLd0I2V1V1Mmg3aWdhQTh6b3VMTUp5UmdEQTZSdUU1WXhPWGsxWTZuUDFpZGU3Smx2d1g1UEcxKys2bEZGclZaaUhEZnZ3MVFuMDRXdmRFQUJndnlTN0FPelBqUkFBc0ZKS2VSOFJNNUVBQUU3Y1dDTEN5WHNkeThTbFBsUGRwZTNhWTk1NDdmRjB4OWUxSkhnODFJY0VmcW9tYTMwOGdXYTRWd2tMQUdDL0pMc0E3RWtwWlJvYlBwRUN3TVdRQ0FrQW5JT3hFSnkwVjZmUXh5UlZOV3RaeXVoNjIwU05EcFl3MnZUN3ZtbjhuRU1aaEtRdEFJQzlrdXdDc0Y4M0ViRVFCZ0FpSWtvcHM3Q2NFUUJ3K2w0S3dXbkt6SEYwVjlWbEZzdmxjdDZ1L1V5anUvc2dsb0ZwTXpsdy9FY05uN1VvcFR4czBIK0hzYXhNMUtWNTdiZlRqdnR2aENXNUFBRDI2dTlDQUxBL3BaUkZadDdFYVpSWEJlQXd4NGE3ekh3ZUVWZWlBUURzeVN5V2s3Yi90L1ozVDZOdE1ucmRNRE92YWlJdnArVjU0K3NYRWZGYlJMei8yWkl6bVRtS1pWV0xVZU4zZmEvSmRyN3VXR1RtUSt5ZU5QUTh0a3VZYVVtQzI3UXljbGVWVXFheHJDVHozYVdUYXBXYWw3R3NZdFdhSFBZbVZQZ0VBTmdMeVM0QWUxWktlV2k4dVFEQStibUppRCtFQVFEbzJDUWkzcFpTNXQvN3g3b3N5WnZvcGpMQ0tKWkpOWDN4V1BXOGxtU2ZTVVQ4KzB6NnlLamh0Yk9JZVBhekpKZVZ1clR6TkRQdlkvZGxyMGFOYmY0eWRsL3U1bHphL0ZQc2ZqOXE0OWZWNmlVdHlmd2ZOdnlNY1dNOEZoRng4MWdWbVpySU44dk10eEZ4SDIzMzlNYVplYnZKZmdNQXdIWWt1d0FjeGsyOTZCOEtCUUNsbEZsbTNrYkVPOUVBQUxxNjdpeWxUQjQ1QjFsRXhHMW0vaG5MQ2R3V1Q2TkhWVGRLS1hjLysvZk12SXZkRXowKzFPU05rMWFyVmV4YXBXSVJHeWE2Zk5NdU43WEt5M0RIN3p6NlVldzNhUE9uc2Z0OW1MTm84MWhXVExsdjZEUFhteXd2RkczSklQTU5ZLzJxTVJhclBqemJvdjh1SXVKRlk5SlcxTmVxVWdRQTBMRy9DUUhBL3RXTFl5VkxBVmcvTnJ5UHpjdDFBd0Q4ek8xamlTN2ZuSWRNSXVLMjhUTXR5WGg2aG8xOWJOZktGQitPOUoxZGN5emJiTkx3RnBzdWUzV0lKWXhhRW1xMlRuVDVKbzQzMFZiSjZxWGVDQURRUGNrdUFBZFNuMUo1S3hJQXJMbUppTGt3QUFBTnBqV0pkdHRyMVBlTjV5RkRvVDg1TFFsS3gwclMxcy9hZldwNDdhTUpKblY1dEgwdllkUmFMZm50cm9rdWExb1NCSzlxbkFBQTZKQmxqQUFPcUpSeWw1bS9SdHZUS0FDY3ozRmhrWmt2SXVKejdGNVNIZ0M0Ykw4MXZQWnR0QzF4Y3RYQkJES0hNOTN4ZFl1R3FpNFJ5eVd2T040MXgwTm1MbmE4M2hoc3NKUlI2eEpHbTR3aEx4cy80MzBIY1p4bTVpeDJUK3k1anJZcU93QUFmRU95QzhEaDNjVHlhUlFsbndHSVVzb3NNMitqWWFJSkFMaFlpMGNtb1IvejBIZ09JbG4zdE00N3A3Rjd3c3RPTXZNdUlrWU5ieUZScGhzUEVUSGU4YlhQNCtlVmZaNDNmSzlOay9YNlVwWG9VOE4zK1ZVM0JBRG9sbVFYZ0FPclQvSGZoS2Y0QWZoNmJKalV5bCt2UlFNQTJNSzBnK3ZUbGtvRjhCZDFxWlpSTEpOVXJzTXlSSDN4Vyt5ZTdESjZwTDFiS3JzOHRINkhUVjZibVo4N2ltTkxmemJPQWdCMFRMSUx3QkhVcC9odkl1S2phSERHSnJIN3pUUzR4R1BEYmIxWmJMOEJBRGIxWndmdnNSQkdIcE9adzFoTzlBL2lyNVAyLzRxdkNRQWprZXJ0dGNZc00rZXhXN0xHOENkTGxyVWt1c3hLS2ZNTitsNXJra2hma2t6c0h3QUFIWlBzQW5Ba2RjM2ttN0JzQmVkcEZoRzNzYnlSTmhJTzJOaHRMRy9HZXVvUEFOakV0SVAzK04wNU8rdStxYzV5cFgrY2pZZll2WkxreTNxZC82MldaYVkyWGNKb2NFNzdWaWxGZ2lFQVFFZitKZ1FBeDFOS21VVEVlNUhnek13ajRsbTlnZk5KT0dDcjQ4SWlJcDdGOTI4a0F3REEzbVRtZFdaK2pJai94TElTN2V1UTZISk9QalM4OW5yTHY5L0VJWll3NmhzUE5RQUFkRWl5QzhDUmxWSnVZN25jQzV5RFJVUzhXSHRTYVNva3NQVnhRY0lMQUxBcDV3czBxMGt1WDJLWjRISXRJbWQ3blRGckdET0czeTRubEpuWHNYdlZsUWNWVGdBQWFDWFpCYUFIU2lrM0llR0YwN2VJWlVXWDJWcmZudFcvQjdZN0xraDRBUUEyUFdlQW5XVG1JRE0veHpMSlpTZ2lGNkdsdXN2b216OC9iM2d2VldBQkFHZ20yUVdnSjJyQ3k0TkljTUplckNlNnJKa0tEZXgwWEpEd0FnREFYdFFxSFYvQ01rV1hwdVcrMDh0di9yeHJGYUJGdVA4RkFFQUhKTHNBOU10Tm1OVGtSUHR1S1dYNmczLzdYWGhnTnhKZUFBRG9XazEwK1J5N0wwSEQ2VjVmekdQM0IxS3VNbk80MW9jc1lRUUF3RkZKZGdIb2tiVkp6WWxvY0VKdVNpay82N05USVlKT2pnMFNYZ0FBYUpLWmc1RG9jdWxhbGpKYVZYTjUyZkFlbGpBQ0FLQVRrbDBBZXFhVXNxaExHazFFZ3hQd1dLSkwxS1dOUExVRmpjZUdXQ2E4VEVVREFJQUc5M0g0UkJkSjIvM1N4VkpHT3k5aFZFcXhoQkVBQUozNHV4QUE5Rk1wNVNZekl5TEdva0ZQUFpyb3N1WkJYNGJtNDhJaUlwNWw1cjM5Q1FDQWJXWG1LSFpQVXRqVU5KWVBPL3daeXlTWGFVU3NsazJpSjljVm1mbXdZMSs0cXYxb3VPUEhUM2JzVTI4YSt1UGJIb1ZmNGhjQVFJY2t1d0QwV0UxNFdVVEVhOUdnUnhheFRIVFo1bW1zMzhQa1BIUjViUGd6SXQ2SkJnQUFXM2pWMGZzOHhES1paUnJMU2gwL25jQ3ZEL0xRTDU5aTk4U24rNGJQM1dVSnBaWktzY05TeWxSekF3Q2NKOHNZQWZSY0tlVTJJbTVFZ3A1WVJNU3pIY29PVDRVT09qMDJ2SS9sc2thV0NBTUEyTC9CbVd4SGExV1h0eEh4ejFMS2kxTEtYU2xsK2xpaUM3MjlucGcwWEVzTWQzemRmSmYrMHRqSGhyVVNEUUFBWjBpeUM4QUpxRGNoVEdweWJLdEVsMTF1VHMwallpNkUwT214WVJvUlQwSXBiQUNBZmJzNjlRM29ZTUwvcGlhNDdISmZZblNDSVJ0ZVFMOStPUERuZldoNDdiVGh0VzhDQUlDelpCa2pnQk5SU3BsbTVyTllsb3U5RWhFT2JCYkxSSmVXaEt0cFdNb0l1ajQyekNQaVNXYStDMHZlQVFEc3k2OW5zQTB0OXhFbTlTR2NTNHJmMDRpWW5IbS8vblRnYS9TV2VQNGV1eWROalRKejNOaUhJek1IamZ0UldGSUpBS0Jia2wwQVRrZ3BaYmFXOEhJdEloeklReXlmNG11dExQUjdTSGFCZlIwZmJqUHo5M3A4R0lnSUFFQ25yalB6NnNTWDdHazVSL3g5MXhkbTVqQ09kLytpSlVGaW5KbHZhM0w1dVY1RFBHVG1QQTVUeFdiV0dNdUhhS3ZROGk0elo0MzdjT3U5dUlld3hETUFRS2NzWXdSd1lrb3BpMUxLaTRpNEZRME80RzFkajcyTEpiUWVoQlAyZW54NGlJaGY3R3NBQUh2eE9UTWZyZXFRbVlQTTlIREtWKzlPK0x0L3JNazZtN1Q1cVZiZ1BkUzFROHNTUmxHVFZPWU5iekdvKy9Cb2x4ZG41bDIwSjIxOU1od0FBSFJMc2d2QWlTcWx2SStJSjQwWCsvQWppNGg0VVVxNTY3RFBMbUs1SEJLd3YyUERLaUh5UmQyUEFRQllhcjBXR1VURUg1bDVuNW5YcXlTSXpCeG01aWd6WDJmbXg0ajRUMFM4T3JQWVBkM2xSWms1anRPdVNudFYyL3hkYmVOVm0xL1ZQOTlsNXVmYTVxZTZuUjhPOURsZEpOWDgxc0UrL0xudXc4TU4rL0FnTSsranJhcE0xR3N6RHlVQUFIUk1zZ3ZBQ2F0UHRqeHh3VXpIWmhIeHJGYUo2TnBVZU9FZ3g0ZFZsWmVKYUFBQVJFUjNpY0RqaVBnWUVWOHlNeVBpUzBSOGptVUZrM090NkRLdWlTc2J5OHgzc1Z6MjVaaTZ1UDRjUk1UcjJzYXJOditqL3ZsTjdMNU1VbCt1RzFvcnBtemlvYVBsb0NZZDdjZmoycGIzbVRuK052R2xKcmlNYWgvK0V0MHN4L3pRVWNWY0FBRFdTSFlCT0hHZTRxZGprMWdtdXV5ckFzdnZRZ3dIUFQ3Y1JNU3pVRlVKQUhCdU5MM3dFTFJ1LzMydFpETDQwWCtvU1FManpQd1N5d1NSWTNNT3ZKbDlWM2Y1MU5FK3ZJajI2aTdyeHJGTXlQcVNhMkpacWVkejdjT0Rqajdyclc0R0FOQTl5UzRBWjZJK3hmOGtWTTVnTjZ0bGkyNzIvTFNSL2dtSFB6NU1TeWxQSXVJMkpFVUNBSmZ0a3E5SDVoMjh4NXVJK0U5bWZxNUwrOXpWbjNkcnkvbmNSOFN3SitmQmk3RDA4eVltZTM3L0xxdkd2ai9CTnAxMFZOa0dBSUJ2U0hZQk9DT2xsSGtwNVZtbzhzSjJwaEh4eTU2V0xmcTJqeTdDMDNWd3JHUEUrMWd1YmZUV01RSUF1RkNmTG5YRDYyUjdWOWRpbzFoV3ZYaFRmMTVIZjVmenNlenpZZnZHdHlaZFBsQlQzK3YyaE1KN2F0OFhBT0NrU0hZQk9FTTFhZUdYMlAvVE9aeTJSVVRjbGxLZUhYanQ2S25RdzlHT0Q0dFN5bDA5UnJ3WEVRRGd3bHo2TmZLSEM5em0zM1Q3by9hTnpoUE02ajJ2VTdtV2VYdmcreTBBQUJkRnNndkFtYW9UbWpjUjhTeFUwdUIvUGNTeW1zc3hiaEI5RW43b3hUSGlObFI2QVFBdTdCd29ManZoWlhKcDUzMjFhc2xVNzkrb2IzUnRzYThLc3ZWYXB1LzN1aDZPZE04RkFPQmlTSFlCT0hPbGxHa3A1VWxFM0lUSlRKWnJXNzhvcGJ3NDF0TkZwWlNwWm9EZUhDUG1hNVZlM3RZeGd0Tm55VGdBK0xHTFRmU3QxNENYV09ua1JyZmZxRzkwblppeTd5V2srdnh3MTF5L0F3RFlQOGt1QUJlaWxESUpUL0Jmc2tWdCt5ZjdlckpxUzFOTkFyMDZSaXhLS1hlbGxGOWllVk5Xb3NScG1zUXlvZkdmUFJuckFhQ1A1ejN6aUxpOTRPMi91N1J6dmRybWIvWCtSM1ZkaGZYRG50dDFFZjFNZUZuVWMzTDMzZ0FBOWt5eUM4QUZXVTFteGpMcFJTblZ5ekdKWlpMTFhZOXV0dnl1V2FDM3g0cEpyUWoySkM2dzFQMEplb2hsZ3RJL1N5azNrbHdBWUxQem5ianM1WXhlSE9rY2IzSEVOcis3OERiZjlMeXlxemFhSDZLcWF3OFRYaFlSOGF5VTR1RUJBSUFEa093QzhQL3QzZEZ4R2tjQUJ1RC9adkllcDRMSUZWaXVRRklGamlwd3FDQkRCM1lGY1Ftb0E2V0Rjd2ZuRGxBRndSVmNIbmJQTUxGa0dZSGdUbnpmREFNampSRHNMdHplM3IrN0o2aUdYdVlwb1plRkVubXgycFNReTZ6T1pCdmJhd1BHZmF6bzZ2ZkhieWxoQ2lHS2NWalZZL2QxU3NEbHVnYVVoSklBWUx1K3p1eFV6NGZyK2VGVkRocyttWTNnUEhDdVQvdkRkckhQcll4dUQvbTZhMWovMkpPNnVwUXhHRUVYQUlBREVYWUJPR0ZOMHl6ckFKL3RqVjZXTm1VbTBXaG5FOVVaWHRvYlRPZDRzV2lhNWpxSjRNdnh2dGVIcmVpK3JlQWk0QUlBTy9keFpqblI3VzNxdWVKVmt1VXovNnRoUzVkRmpyekNadzFGWE1kS3R6K3lyNjJNYm81UXYvTUR0ZW43ZkVvWmgxbHFRZ0FBaHlQc0FzQVFldm1RZGVqRnlmazB0Vm1IWE5xSnZGNWdXc2VMMVQzQmwwV0UxL2F0U3hrd0gxWnZ1YXBiMFprbENnRDc3OTk4U05tK3NUM0I5OTdWOS81YzRZK3VucVBlanVrY2NDTVU0WnowKzdMWngxWkczYkg2clhVczVHME9ONkZyV2R2NFhCQWRBT0R3aEYwQTJCd1VXTldMYWE4emppV0crVG1MSks4bkZISVpmRloxTVBsanhtSmpxNk5oVU5teFl6dXJyRmR1dVVvSnQ3eXRBK1pXYndHQXcvUnJ1cVpwcm1wL1pwR25YeVJmcGdSSDVoUHIwKzA3L0xGS01xOTltbTZ6bkRPU2tIVFRORzJ0ODZzZDYzd0lLUzllMEVkaTExVWNiMGJRcGora1RPaWE1M2ttZEhWSlprM1R2SjdZT0F3QXdJdnlpeUlBNElIQmdVV1NSZC8zNTBuK1N2SkhrbGRLWmpTV0tRTklueVo4SWJSVmpmQ2lqaHRkeXFCdmtxVHYrOHNrbDBrdWtwdzdoaVFwRjFHR2N2cVNJODU2QmVEQlB2YkhIZi8rS1c1eTNDQjRlOEQzM0I3cGRXN1RuNWtsbWRWejRjdmFoN2w0NEUrNkpGL3JhK3VlZUc2MlM3dHI5L2plMnlSdDMvZG5HMk1BWjFzK3pXMlNmK3A0d2tQbVd6N3Y4cG5ydkszbE9LdjkxL05INnZ6elJ0ay90YzVIL1RtbzdmRnVoNzhmeFphbnRXNCtKZmxVUDgvdjYyZjYvSWxQMmFWczgzU3JEdzhBTUE2TklnRGdaL1Y5LzJlU2R5bURYaHpIYlpLYmpXV2dwOTZtL28wTDROdjZXR2Vwd2RRKzcyY3BBOHZuS1JjUHpyTDlCWlFwYVZNdXp0d05qNXVtV1dvSkFNQkUrMisvNXZ1UXdMZmdoOVV0bUZqYnZzdzYyUFQ3UGVjbFF6OStsUkpxMHI0QkFFWkkyQVdBcHd3S25LVUVYdDduNlROaStIbGR5bXpQMjVkMm9iVHYrNysxb2EzZFBESlRFcWIyUFhDWmRmRGxUY3FBOHhSV2dsbHUzTzQySG5lMkhnSUFBQUFBZUY3Q0xnRHNaQ1A0OGk1bE9WajJZNW4xS2k2V3h3Vk85Umd6aEY2R0FFeHkvNnppWFk4L3cvWkNtNFp0Q1lidjVPWHdjMkVXQUFBQUFJRGpFbllCWUcvNnZuK1ZFbnk1cVBlMnA5bE9tL1grejB2RkFRQUFBQUFBQU44VGRnSGcyZFFaK1pleDZzdERsbGtIWEZvckJRQUFBQUFBQU1EamhGMEFPSmlOOE10RnloWVVaeWRXQkYxS3VPVkxTcmhscVZVQUFBQUFBQURBZG9SZEFEaWF1dTNSRUlCNWt4SitPWDhoYjY5TldibmxTNUt1YVpwV2pRTUFBQUFBQU1EdWhGMEFHSjI2QXN4WlN2RGw5L3A0dUkxSmwyUlY3NyttQmx5czJBSUFBQUFBQUFEUFI5Z0ZnRW5aV0EwbTlmNVZmVHlFWWpadC92NHh5M3I3LzgvdTd2bDkxelROU20wQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0hyK0EzTEJkNGF3OFV5TEFBQUFBRWxGVGtTdVFtQ0NcXFwiLz48L2RlZnM+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEyIDE0XFxcIj48cGF0aCBkPVxcXCJNLjY2NyA3YS42NjcuNjY3IDAgMCAwIC42NjYuNjY2aDUuMDZMNC44NiA5LjE5M2EuNjY3LjY2NyAwIDAgMCAuMjE3IDEuMDkzLjY2OC42NjggMCAwIDAgLjczLS4xNDZsMi42NjYtMi42NjdhLjY2Ny42NjcgMCAwIDAgLjE0LS4yMi42NjcuNjY3IDAgMCAwIDAtLjUwNy42NjcuNjY3IDAgMCAwLS4xNC0uMjJMNS44MDcgMy44NmEuNjcuNjcgMCAwIDAtLjk0Ny45NDZsMS41MzMgMS41MjdoLTUuMDZBLjY2Ny42NjcgMCAwIDAgLjY2NyA3Wk05LjMzMy4zMzNIMi42NjdhMiAyIDAgMCAwLTIgMnYyYS42NjcuNjY3IDAgMSAwIDEuMzMzIDB2LTJhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDYuNjY2YS42NjcuNjY3IDAgMCAxIC42NjcuNjY3djkuMzMzYS42NjYuNjY2IDAgMCAxLS42NjcuNjY3SDIuNjY3QS42NjYuNjY2IDAgMCAxIDIgMTEuNjY2di0yYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2MmEyIDIgMCAwIDAgMiAyaDYuNjY2YTIgMiAwIDAgMCAyLTJWMi4zMzNhMiAyIDAgMCAwLTItMlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyMCAxNlxcXCI+PHBhdGggZD1cXFwiTTE3IDBIM2EzIDMgMCAwIDAtMyAzdjEwYTMgMyAwIDAgMCAzIDNoMTRhMyAzIDAgMCAwIDMtM1YzYTMgMyAwIDAgMC0zLTNabS0uNDEgMi01Ljg4IDUuODhhMSAxIDAgMCAxLTEuNDIgMEwzLjQxIDJoMTMuMThaTTE4IDEzYTEgMSAwIDAgMS0xIDFIM2ExIDEgMCAwIDEtMS0xVjMuNDFsNS44OCA1Ljg4YTMgMyAwIDAgMCA0LjI0IDBMMTggMy40MVYxM1pcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE1IDE0XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi44NDYgNy41ODNhLjU4My41ODMgMCAwIDAtLjYxMi0uMDgyIDQuNjk2IDQuNjk2IDAgMCAxLTEuOTY2LjQyNkE0Ljc1NCA0Ljc1NCAwIDAgMSA1LjUyIDMuMjAyYTUuMDEgNS4wMSAwIDAgMSAuMTQ1LTEuMTY2LjU4My41ODMgMCAwIDAtLjc3NS0uNjYgNS45MTUgNS45MTUgMCAxIDAgOC4xNjYgNi44Mi41ODMuNTgzIDAgMCAwLS4yMS0uNjEzWm0tNS41NDEgMy45MDNhNC43NDggNC43NDggMCAwIDEtMi45NTItOC40NDF2LjE1N2E1LjkyIDUuOTIgMCAwIDAgNy4xNCA1Ljc4NyA0LjczMSA0LjczMSAwIDAgMS00LjE4OCAyLjUydi0uMDIzWlxcXCIgZmlsbD1cXFwiI0E2NkVFOVxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjY2NyA5LjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNGg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTIuNjY2LTRoLTJWMkEuNjY3LjY2NyAwIDEgMCAxMCAydi42NjZIOC42NjdWMmEuNjY3LjY2NyAwIDEgMC0xLjMzNCAwdi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NmgtMkEuNjY3LjY2NyAwIDAgMCAyIDMuMzMzdjkuMzMzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMuMzMzYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWNGgxLjMzNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNEgxMHYuNjY2YS42NjYuNjY2IDAgMSAwIDEuMzMzIDBWNGgxLjMzNHY4LjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTkuMzM0IDUuMzMzSDEwQS42NjcuNjY3IDAgMCAwIDEwIDRoLS42NjZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptMCAyLjY2N0gxMGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0aC0uNjY2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRaTTYgNS4zMzNoLjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM1pNNiA4aC42NjdhLjY2Ny42NjcgMCAxIDAgMC0xLjMzNEg2QS42NjcuNjY3IDAgMCAwIDYgOFptOCA1LjMzM2gtLjY2NlYyYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N0gzLjMzM0EuNjY3LjY2NyAwIDAgMCAyLjY2NyAydjExLjMzM0gyYS42NjYuNjY2IDAgMSAwIDAgMS4zMzNoMTJhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptLTUuMzMzIDBINy4zMzR2LTIuNjY3aDEuMzMzdjIuNjY3Wm0zLjMzMyAwaC0yVjEwYS42NjcuNjY3IDAgMCAwLS42NjYtLjY2N0g2LjY2N0EuNjY3LjY2NyAwIDAgMCA2IDEwdjMuMzMzSDRWMi42NjZoOHYxMC42NjdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk02IDYuNjY2aC42NjdhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNaTTYgOGEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDRBLjY2Ny42NjcgMCAwIDAgMTAgOEg2Wm03LjMzMy0yLjA0YS44OC44OCAwIDAgMC0uMDQtLjE4di0uMDZhLjcxNC43MTQgMCAwIDAtLjEyNy0uMTg3bC00LTRhLjcxMy43MTMgMCAwIDAtLjE4Ni0uMTI3LjIxMy4yMTMgMCAwIDAtLjA2IDAgLjU4Ny41ODcgMCAwIDAtLjIyLS4wNzNINC42NjdhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDYuNjY2YTIgMiAwIDAgMCAyLTJWNS45NlptLTQtMi4zNTQgMS43MjcgMS43MjdIMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny0uNjY3di0xLjA2Wk0xMiAxMi42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINC42NjZBLjY2Ni42NjYgMCAwIDEgNCAxMi42NjZWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3SDh2MmEyIDIgMCAwIDAgMiAyaDJ2NlptLTItMkg2QS42NjcuNjY3IDAgMCAwIDYgMTJoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDE0IDE1XFxcIj48cGF0aCBkPVxcXCJtMTEuNzkgNi44OTYuMDU2LjQzN0gxM2EuMTY2LjE2NiAwIDAgMSAuMTE4LjI4NWwuMzUzLjM1My0uMzUzLS4zNTNhLjE2Ni4xNjYgMCAwIDEtLjExOC4wNDloLTEuMTU0bC0uMDU1LjQzN2E0LjgzMyA0LjgzMyAwIDAgMS00LjE4NyA0LjE4N2wtLjQzNy4wNTVWMTMuNWEuMTY3LjE2NyAwIDAgMS0uMDUuMTE4bC4zNTQuMzUzLS4zNTMtLjM1M2EuMTY3LjE2NyAwIDAgMS0uMjg1LS4xMTh2LTEuMTUzbC0uNDM3LS4wNTZBNC44MzMgNC44MzMgMCAwIDEgMi4yMSA4LjEwNGwtLjA1NS0uNDM3SDFhLjE2Ny4xNjcgMCAxIDEgMC0uMzM0aDEuMTUzbC4wNTYtLjQzN0E0LjgzMyA0LjgzMyAwIDAgMSA2LjM5NiAyLjcxbC40MzctLjA1NVYxLjVhLjE2Ny4xNjcgMCAwIDEgLjMzNCAwdjEuMTUzbC40MzcuMDU2YTQuODM0IDQuODM0IDAgMCAxIDQuMTg3IDQuMTg3Wm0tLjM1NyAxLjM1NC4xLS41ODNoLTEuMmEuMTY2LjE2NiAwIDEgMSAwLS4zMzRoMS4xOTlsLS4xLS41ODNBNC41IDQuNSAwIDAgMCA3Ljc1IDMuMDY3bC0uNTgzLS4xdjEuMmEuMTY3LjE2NyAwIDAgMS0uMDUuMTE4bC4zMDQuMzAzLS4zMDMtLjMwM2EuMTY3LjE2NyAwIDAgMS0uMjg1LS4xMThWMi45NjhsLS41ODMuMUE0LjUgNC41IDAgMCAwIDIuNTY3IDYuNzVsLS4xLjU4M2gxLjJhLjE2Ny4xNjcgMCAwIDEgLjExOC4yODVsLjMwMy4zMDMtLjMwNC0uMzAzYS4xNjcuMTY3IDAgMCAxLS4xMTcuMDQ5SDIuNDY4bC4xLjU4M2E0LjUgNC41IDAgMCAwIDMuNjgyIDMuNjgzbC41ODMuMXYtMS4yYS4xNjYuMTY2IDAgMSAxIC4zMzQgMHYxLjE5OWwuNTgzLS4xYTQuNSA0LjUgMCAwIDAgMy42ODMtMy42ODJabS00LjUyNi0uODg5YS4xNjcuMTY3IDAgMSAxIC4xODYuMjc4LjE2Ny4xNjcgMCAwIDEtLjE4Ni0uMjc4WlxcXCIgZmlsbD1cXFwiQ3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIkN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjY2NyA5LjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNGg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTIuNjY2LTRoLTJWMkEuNjY3LjY2NyAwIDEgMCAxMCAydi42NjZIOC42NjdWMmEuNjY3LjY2NyAwIDEgMC0xLjMzNCAwdi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NmgtMkEuNjY3LjY2NyAwIDAgMCAyIDMuMzMzdjkuMzMzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMuMzMzYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWNGgxLjMzNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNEgxMHYuNjY2YS42NjYuNjY2IDAgMSAwIDEuMzMzIDBWNGgxLjMzNHY4LjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY2LjY2N2EuNjY3LjY2NyAwIDEgMCAxLjMzNCAwVjQuNjY2QS42NjcuNjY3IDAgMCAwIDggNFpNNC42NjcgOEEuNjY3LjY2NyAwIDAgMCA0IDguNjY2djIuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWOC42NjZBLjY2Ny42NjcgMCAwIDAgNC42NjcgOFptNi42NjctMS4zMzRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42Njd2NGEuNjY3LjY2NyAwIDAgMCAxLjMzMyAwdi00YS42NjcuNjY3IDAgMCAwLS42NjYtLjY2N1ptMS4zMzMtNS4zMzNIMy4zMzNhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDkuMzM0YTIgMiAwIDAgMCAyLTJWMy4zMzNhMiAyIDAgMCAwLTItMlptLjY2NyAxMS4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMy4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ni0uNjY3VjMuMzMzYS42NjcuNjY3IDAgMCAxIC42NjctLjY2N2g5LjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2N3Y5LjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY2LjY2N2EuNjY3LjY2NyAwIDEgMCAxLjMzNCAwVjQuNjY2QS42NjcuNjY3IDAgMCAwIDggNFpNNC42NjcgOEEuNjY3LjY2NyAwIDAgMCA0IDguNjY2djIuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWOC42NjZBLjY2Ny42NjcgMCAwIDAgNC42NjcgOFptNi42NjctMS4zMzRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42Njd2NGEuNjY3LjY2NyAwIDAgMCAxLjMzMyAwdi00YS42NjcuNjY3IDAgMCAwLS42NjYtLjY2N1ptMS4zMzMtNS4zMzNIMy4zMzNhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDkuMzM0YTIgMiAwIDAgMCAyLTJWMy4zMzNhMiAyIDAgMCAwLTItMlptLjY2NyAxMS4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMy4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ni0uNjY3VjMuMzMzYS42NjcuNjY3IDAgMCAxIC42NjctLjY2N2g5LjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2N3Y5LjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2NnY2LjY2N2EuNjY3LjY2NyAwIDEgMCAxLjMzNCAwVjQuNjY2QS42NjcuNjY3IDAgMCAwIDggNFpNNC42NjcgOEEuNjY3LjY2NyAwIDAgMCA0IDguNjY2djIuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWOC42NjZBLjY2Ny42NjcgMCAwIDAgNC42NjcgOFptNi42NjctMS4zMzRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42Njd2NGEuNjY3LjY2NyAwIDAgMCAxLjMzMyAwdi00YS42NjcuNjY3IDAgMCAwLS42NjYtLjY2N1ptMS4zMzMtNS4zMzNIMy4zMzNhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDkuMzM0YTIgMiAwIDAgMCAyLTJWMy4zMzNhMiAyIDAgMCAwLTItMlptLjY2NyAxMS4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMy4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ni0uNjY3VjMuMzMzYS42NjcuNjY3IDAgMCAxIC42NjctLjY2N2g5LjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LjY2N3Y5LjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTQuNjY3IDEwLjY2NmExIDEgMCAwIDAgMS0xIC41MTQuNTE0IDAgMCAwIDAtLjFsMS44Ni0xLjg2aC4zMDZMOC45MDcgOC43OHYuMDUzYTEgMSAwIDEgMCAyIDBWOC43OGwyLjQyNi0yLjQ0N2ExIDEgMCAxIDAtMS0xIC41MjIuNTIyIDAgMCAwIDAgLjFMOS45MjcgNy44NEg5LjgyTDguNjY3IDYuNjY2YTEgMSAwIDAgMC0yIDBsLTIgMmExIDEgMCAwIDAgMCAyWm05IDIuNjY3SDIuMzMzVjJBLjY2Ny42NjcgMCAxIDAgMSAydjEyYS42NjcuNjY3IDAgMCAwIC42NjcuNjY2aDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk02IDYuNjY2aC42NjdhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNaTTYgOGEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDRBLjY2Ny42NjcgMCAwIDAgMTAgOEg2Wm03LjMzMy0yLjA0YS44OC44OCAwIDAgMC0uMDQtLjE4di0uMDZhLjcxNC43MTQgMCAwIDAtLjEyNy0uMTg3bC00LTRhLjcxMy43MTMgMCAwIDAtLjE4Ni0uMTI3LjIxMy4yMTMgMCAwIDAtLjA2IDAgLjU4Ny41ODcgMCAwIDAtLjIyLS4wNzNINC42NjdhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDYuNjY2YTIgMiAwIDAgMCAyLTJWNS45NlptLTQtMi4zNTQgMS43MjcgMS43MjdIMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny0uNjY3di0xLjA2Wk0xMiAxMi42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINC42NjZBLjY2Ni42NjYgMCAwIDEgNCAxMi42NjZWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3SDh2MmEyIDIgMCAwIDAgMiAyaDJ2NlptLTItMkg2QS42NjcuNjY3IDAgMCAwIDYgMTJoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIgMTRhMSAxIDAgMSAwLTEtMSAxIDEgMCAwIDAgMSAxWm01IDBhMSAxIDAgMSAwLTEtMSAxIDEgMCAwIDAgMSAxWm0tNSA0YTEgMSAwIDEgMC0xLTEgMSAxIDAgMCAwIDEgMVptNSAwYTEgMSAwIDEgMC0xLTEgMSAxIDAgMCAwIDEgMVpNNyAxNGExIDEgMCAxIDAtMS0xIDEgMSAwIDAgMCAxIDFaTTE5IDRoLTFWM2ExIDEgMCAwIDAtMiAwdjFIOFYzYTEgMSAwIDAgMC0yIDB2MUg1YTMgMyAwIDAgMC0zIDN2MTJhMyAzIDAgMCAwIDMgM2gxNGEzIDMgMCAwIDAgMy0zVjdhMyAzIDAgMCAwLTMtM1ptMSAxNWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXYtOWgxNlptMC0xMUg0VjdhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxWk03IDE4YTEgMSAwIDEgMC0xLTEgMSAxIDAgMCAwIDEgMVpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMiAxNVxcXCI+PHBhdGggZD1cXFwibTYuMTQgMTAuNzQyLjAyLjA1OC4wMDcuMDF2LjAzNmEuMDYuMDYgMCAwIDEtLjAwNi4wMjdsLS4wMS4wMjItLjAwOC4wMjFhLjEuMSAwIDAgMS0uMDYuMDZsLS4wMjIuMDA4LS4wMjEuMDFhLjA2LjA2IDAgMCAxLS4wMjcuMDA2aC0uMDA2YS4xNjYuMTY2IDAgMCAxLS4xMDYtLjA0LjI2Ni4yNjYgMCAwIDEtLjA0LS4wNjZsLS4wMDQtLjAxLS4wMDUtLjAxYS4wNi4wNiAwIDAgMS0uMDA1LS4wMjh2LS4wMjNsLS4wMDEtLjAyMy0uMDAxLS4wMTguMDAzLS4wMDcuMDEyLS4wMzNhLjU3Ni41NzYgMCAwIDEgLjAyMy0uMDMuMTY2LjE2NiAwIDAgMSAuMDQ0LS4wMjZsLjAxNC0uMDA1YS4xNjcuMTY3IDAgMCAxIC4wOTYtLjAxbC4wOTQtLjQ5MS0uMDk0LjQ5YS4xNjYuMTY2IDAgMCAxIC4wNzcuMDM4Yy4wMDkuMDEuMDE4LjAyMi4wMjYuMDM0Wm0uNjkzLTkuMzM1IDMuOTYzIDMuOTYzLjAyMy4wN2EuMzcuMzcgMCAwIDEgLjAxNC4wNTR2Ni42NzNhMS41IDEuNSAwIDAgMS0xLjUgMS41SDIuNjY3YTEuNSAxLjUgMCAwIDEtMS4wNjEtLjQ0bC0uMzQ4LjM0OC4zNDgtLjM0OGExLjUgMS41IDAgMCAxLS40NC0xLjA2VjIuODMzYTEuNSAxLjUgMCAwIDEgMS41LTEuNWgzLjk5bC4wMTUuMDA3LjExNi4wNjdoLjA0NlptLjg1NCAxLjM0Nkw2LjgzMyAxLjl2Mi4yNjdBMS4xNjcgMS4xNjcgMCAwIDAgOCA1LjMzM2gyLjI2N2wtLjg1My0uODUzLTEuNzI3LTEuNzI3Wk02LjUgMi4xNjd2LS41SDIuNjY3QTEuMTY3IDEuMTY3IDAgMCAwIDEuNSAyLjgzM3Y5LjMzNGExLjE2NyAxLjE2NyAwIDAgMCAxLjE2NyAxLjE2Nmg2LjY2NmExLjE2NyAxLjE2NyAwIDAgMCAxLjE2Ny0xLjE2NnYtNi41SDhhMS41IDEuNSAwIDAgMS0xLjUtMS41di0yWm0tLjYxOCA1LjIxNWEuMTY3LjE2NyAwIDAgMSAuMjg1LjExOHYxLjMzM2EuMTY3LjE2NyAwIDAgMS0uMzM0IDBWNy41YzAtLjA0NC4wMTgtLjA4Ny4wNS0uMTE4WlxcXCIgZmlsbD1cXFwiQ3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIkN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMiAxNVxcXCI+PHBhdGggZD1cXFwibTYuMTQgMTAuNzQyLjAyLjA1OC4wMDcuMDF2LjAzNmEuMDYuMDYgMCAwIDEtLjAwNi4wMjdsLS4wMS4wMjItLjAwOC4wMjFhLjEuMSAwIDAgMS0uMDYuMDZsLS4wMjIuMDA4LS4wMjEuMDFhLjA2LjA2IDAgMCAxLS4wMjcuMDA2aC0uMDA2YS4xNjYuMTY2IDAgMCAxLS4xMDYtLjA0LjI2Ni4yNjYgMCAwIDEtLjA0LS4wNjZsLS4wMDQtLjAxLS4wMDUtLjAxYS4wNi4wNiAwIDAgMS0uMDA1LS4wMjh2LS4wMjNsLS4wMDEtLjAyMy0uMDAxLS4wMTguMDAzLS4wMDcuMDEyLS4wMzNhLjU3Ni41NzYgMCAwIDEgLjAyMy0uMDMuMTY2LjE2NiAwIDAgMSAuMDQ0LS4wMjZsLjAxNC0uMDA1YS4xNjcuMTY3IDAgMCAxIC4wOTYtLjAxbC4wOTQtLjQ5MS0uMDk0LjQ5YS4xNjYuMTY2IDAgMCAxIC4wNzcuMDM4Yy4wMDkuMDEuMDE4LjAyMi4wMjYuMDM0Wm0uNjkzLTkuMzM1IDMuOTYzIDMuOTYzLjAyMy4wN2EuMzcuMzcgMCAwIDEgLjAxNC4wNTR2Ni42NzNhMS41IDEuNSAwIDAgMS0xLjUgMS41SDIuNjY3YTEuNSAxLjUgMCAwIDEtMS4wNjEtLjQ0bC0uMzQ4LjM0OC4zNDgtLjM0OGExLjUgMS41IDAgMCAxLS40NC0xLjA2VjIuODMzYTEuNSAxLjUgMCAwIDEgMS41LTEuNWgzLjk5bC4wMTUuMDA3LjExNi4wNjdoLjA0NlptLjg1NCAxLjM0Nkw2LjgzMyAxLjl2Mi4yNjdBMS4xNjcgMS4xNjcgMCAwIDAgOCA1LjMzM2gyLjI2N2wtLjg1My0uODUzLTEuNzI3LTEuNzI3Wk02LjUgMi4xNjd2LS41SDIuNjY3QTEuMTY3IDEuMTY3IDAgMCAwIDEuNSAyLjgzM3Y5LjMzNGExLjE2NyAxLjE2NyAwIDAgMCAxLjE2NyAxLjE2Nmg2LjY2NmExLjE2NyAxLjE2NyAwIDAgMCAxLjE2Ny0xLjE2NnYtNi41SDhhMS41IDEuNSAwIDAgMS0xLjUtMS41di0yWm0tLjYxOCA1LjIxNWEuMTY3LjE2NyAwIDAgMSAuMjg1LjExOHYxLjMzM2EuMTY3LjE2NyAwIDAgMS0uMzM0IDBWNy41YzAtLjA0NC4wMTgtLjA4Ny4wNS0uMTE4WlxcXCIgZmlsbD1cXFwiQ3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcIkN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjY2NyA5LjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNGg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTIuNjY2LTRoLTJWMkEuNjY3LjY2NyAwIDEgMCAxMCAydi42NjZIOC42NjdWMmEuNjY3LjY2NyAwIDEgMC0xLjMzNCAwdi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NmgtMkEuNjY3LjY2NyAwIDAgMCAyIDMuMzMzdjkuMzMzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMuMzMzYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWNGgxLjMzNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNEgxMHYuNjY2YS42NjYuNjY2IDAgMSAwIDEuMzMzIDBWNGgxLjMzNHY4LjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjY2NyA5LjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNGg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTIuNjY2LTRoLTJWMkEuNjY3LjY2NyAwIDEgMCAxMCAydi42NjZIOC42NjdWMmEuNjY3LjY2NyAwIDEgMC0xLjMzNCAwdi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NmgtMkEuNjY3LjY2NyAwIDAgMCAyIDMuMzMzdjkuMzMzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMuMzMzYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWNGgxLjMzNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNEgxMHYuNjY2YS42NjYuNjY2IDAgMSAwIDEuMzMzIDBWNGgxLjMzNHY4LjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEyLjk2IDguNjY2Yy0uMTQ3IDAtLjMtLjA0Ni0uNDQ3LS4wOGE2LjI5IDYuMjkgMCAwIDEtLjg3My0uMjYgMS4zMzMgMS4zMzMgMCAwIDAtMS42NTMuNjY3bC0uMTQ3LjNBOC4xMiA4LjEyIDAgMCAxIDguMDY3IDcuOTZhOC4xMiA4LjEyIDAgMCAxLTEuMzM0LTEuNzc0TDcuMDEzIDZhMS4zMzMgMS4zMzMgMCAwIDAgLjY2Ny0xLjY1NCA2Ljg4NyA2Ljg4NyAwIDAgMS0uMjYtLjg3M2MtLjAzMy0uMTQ3LS4wNi0uMy0uMDgtLjQ1M2EyIDIgMCAwIDAtMi0xLjY2aC0yYTIgMiAwIDAgMC0yIDIuMjczIDEyLjY2NyAxMi42NjcgMCAwIDAgMTEuMDEzIDEwLjk3M2guMjU0YTIgMiAwIDAgMCAxLjgyNy0xLjE4NSAyIDIgMCAwIDAgLjE3My0uODIxdi0yYTIgMiAwIDAgMC0xLjY0Ny0xLjkzNFptLjMzMyA0YS42NjYuNjY2IDAgMCAxLS40ODIuNjQxLjcwNy43MDcgMCAwIDEtLjI5LjAyNkExMS4zMzMgMTEuMzMzIDAgMCAxIDIuNzEyIDMuNDhhLjcyNy43MjcgMCAwIDEgLjE2Ny0uNTQ3LjY2Ny42NjcgMCAwIDEgLjUtLjIyN2gyYS42NjcuNjY3IDAgMCAxIC42NjcuNTI3IDcuNDE0IDcuNDE0IDAgMCAwIC40MDcgMS41NzNsLS45MzQuNDM0YS42NjcuNjY3IDAgMCAwLS4zMjcuODg2IDkuNjYgOS42NiAwIDAgMCA0LjY2NyA0LjY2Ny42NjYuNjY2IDAgMCAwIC41MDcgMCAuNjY1LjY2NSAwIDAgMCAuMzgtLjM0N2wuNDEzLS45MzNjLjM0NS4xMjMuNjk3LjIyNiAxLjA1My4zMDcuMTc4LjA0LjM1OC4wNzMuNTQuMWEuNjY3LjY2NyAwIDAgMSAuNTI3LjY2NmwuMDEzIDIuMDhaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTUgMTVcXFwiPjxwYXRoIGQ9XFxcIk0xMC45MTcgOS42NjZoLS42NTlsLS4yMzMtLjIyNWE1LjQxNyA1LjQxNyAwIDAgMCAxLjIzMy00LjQ1QzEwLjg2NyAyLjY3NSA4LjkzMy44MjUgNi42LjU0MUE1LjQyIDUuNDIgMCAwIDAgLjU0MiA2LjZjLjI4MyAyLjMzMyAyLjEzMyA0LjI2NiA0LjQ1IDQuNjU4YTUuNDE3IDUuNDE3IDAgMCAwIDQuNDUtMS4yMzNsLjIyNS4yMzN2LjY1OGwzLjU0MSAzLjU0MmEuODguODggMCAwIDAgMS4yNDIgMCAuODguODggMCAwIDAgMC0xLjI0MmwtMy41MzMtMy41NVptLTUgMGEzLjc0NSAzLjc0NSAwIDAgMS0zLjc1LTMuNzUgMy43NDUgMy43NDUgMCAwIDEgMy43NS0zLjc1IDMuNzQ1IDMuNzQ1IDAgMCAxIDMuNzUgMy43NSAzLjc0NSAzLjc0NSAwIDAgMS0zLjc1IDMuNzVaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGZpbGw9XFxcIiNmZmZcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNOC4xNjcgNy4zMzR2LjVoNC41YS4xNjcuMTY3IDAgMSAxIDAgLjMzM2gtNC41djQuNWEuMTY2LjE2NiAwIDEgMS0uMzM0IDB2LTQuNWgtNC41YS4xNjcuMTY3IDAgMCAxIDAtLjMzM2g0LjV2LTQuNWEuMTY3LjE2NyAwIDEgMSAuMzM0IDB2NFpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTcgMTZcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIgZD1cXFwiTTguMTY3IDMuNnYtLjgwNWwtLjU3LjU2OS0uODY2Ljg2N2EuMzEyLjMxMiAwIDAgMS0uNDYyIDAgLjMxMi4zMTIgMCAwIDEgMC0uNDYybDItMi0uMjM0LS4yMzUuMjM0LjIzNWEuMzEyLjMxMiAwIDAgMSAuNDYyIDBsLjIzMy0uMjM0LS4yMzMuMjM0IDIgMmEuMzEyLjMxMiAwIDAgMSAwIC40NjIuMzY4LjM2OCAwIDAgMS0uMTA4LjA4LjI5Mi4yOTIgMCAwIDEtLjEyMy4wMjIuMjkyLjI5MiAwIDAgMS0uMTIzLS4wMjEuMzY4LjM2OCAwIDAgMS0uMTA4LS4wODFsLS44NjctLjg2Ny0uNTY5LS41N3Y4LjUzOWMwIC4xMjQtLjA0LjIwMi0uMDg1LjI0OC0uMDQ2LjA0NS0uMTI0LjA4NS0uMjQ4LjA4NXMtLjIwMi0uMDQtLjI0OC0uMDg1Yy0uMDQ1LS4wNDYtLjA4NS0uMTI0LS4wODUtLjI0OFYzLjZabTMgMi43MzNIMTIuNWMuOTUgMCAxLjY2Ny43MTcgMS42NjcgMS42Njd2NC42NjZjMCAuOTUtLjcxOCAxLjY2Ny0xLjY2NyAxLjY2N2gtOGMtLjk1IDAtMS42NjctLjcxNy0xLjY2Ny0xLjY2N1Y4YzAtLjk1LjcxOC0xLjY2NyAxLjY2Ny0xLjY2N2gxLjMzM2MuMTI1IDAgLjIwMi4wNC4yNDguMDg2LjA0Ni4wNDUuMDg2LjEyMy4wODYuMjQ3IDAgLjEyNS0uMDQuMjAyLS4wODYuMjQ4LS4wNDYuMDQ2LS4xMjMuMDg2LS4yNDguMDg2SDQuNWExIDEgMCAwIDAtLjcxOS4yOEExIDEgMCAwIDAgMy41IDh2NC42NjZhMSAxIDAgMCAwIC4yODEuNzIgMSAxIDAgMCAwIC43MTkuMjhoOGExIDEgMCAwIDAgLjcxOS0uMjggMSAxIDAgMCAwIC4yODEtLjcyVjhhMSAxIDAgMCAwLS4yODEtLjcyQTEgMSAwIDAgMCAxMi41IDdoLTEuMzMzYy0uMTI1IDAtLjIwMi0uMDQtLjI0OC0uMDg2LS4wNDYtLjA0Ni0uMDg2LS4xMjMtLjA4Ni0uMjQ4IDAtLjEyNC4wNC0uMjAyLjA4Ni0uMjQ3LjA0Ni0uMDQ2LjEyMy0uMDg2LjI0OC0uMDg2WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAyMFxcXCI+PHBhdGggZD1cXFwiTTEyLjY2NyA3di4zMzNIMTNBMi42NjcgMi42NjcgMCAwIDEgMTUuNjY3IDEwdjdBMi42NjcgMi42NjcgMCAwIDEgMTMgMTkuNjY3SDNBMi42NjcgMi42NjcgMCAwIDEgLjMzMyAxN3YtN0EyLjY2NyAyLjY2NyAwIDAgMSAzIDcuMzMzaC4zMzNWNWE0LjY2NyA0LjY2NyAwIDAgMSA5LjMzNCAwdjJaTTExIDcuMzMzaC4zMzNWNWEzLjMzMyAzLjMzMyAwIDAgMC02LjY2NiAwdjIuMzMzSDExWm0yLjk0MyAxMC42MWMuMjUtLjI1LjM5LS41OS4zOS0uOTQzdi03QTEuMzMzIDEuMzMzIDAgMCAwIDEzIDguNjY3SDNBMS4zMzMgMS4zMzMgMCAwIDAgMS42NjcgMTB2N0ExLjMzMyAxLjMzMyAwIDAgMCAzIDE4LjMzM2gxMGMuMzU0IDAgLjY5My0uMTQuOTQzLS4zOVpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZT1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE1IDE0XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiIGQ9XFxcIk03LjUgNC42NjZhMSAxIDAgMCAwLS44NjkuNWwtLjAwNi4wMTJhLjMzMy4zMzMgMCAwIDEtLjIwMy4xNjZsLjA5My4zMi0uMDkzLS4zMmEuMzMzLjMzMyAwIDAgMS0uMzYtLjEybC0uMjY2LjIuMjY3LS4yYS4zMzMuMzMzIDAgMCAxLS4wMTUtLjM3OWwuMDA0LS4wMDYuMDAzLS4wMDZBMS42NjcgMS42NjcgMCAwIDEgNy41IDRhMS42NjcgMS42NjcgMCAwIDEgLjU1NCAzLjIzM2wtLjIyLjA4di4zNTNhLjMzMy4zMzMgMCAxIDEtLjY2NiAwVjdhLjMzMy4zMzMgMCAwIDEgLjMzMy0uMzM0IDEgMSAwIDAgMCAwLTJabTAgMFY1bC4wMDEtLjMzNFptLS4zMTYgNC44OTguMDEtLjAyLjAwOC0uMDIzYS4xNzMuMTczIDAgMCAxIC4wMi0uMDM5IDEuMiAxLjIgMCAwIDEgLjA0Ni0uMDYuMzMzLjMzMyAwIDAgMSAuMTA0LS4wNjdsLS4xMjgtLjMwOC4xMjguMzA4YS4zMzMuMzMzIDAgMCAxIC4zNjUuMDczLjMzMy4zMzMgMCAwIDEgLjA5Ni4yMzZ2LjAxNWEuMzMzLjMzMyAwIDAgMS0uMDIuMTI2di4wMDFhLjI2Ny4yNjcgMCAwIDEtLjA2Mi4wOThsLjIzNi4yMzYtLjIzNi0uMjM2YS4yNjcuMjY3IDAgMCAxLS4wOTguMDYybC0uMDEuMDA0LS4wMTEuMDA1YS4yOTMuMjkzIDAgMCAxLS4yMzcgMGwtLjAxLS4wMDUtLjAxMi0uMDA0YS4yNjcuMjY3IDAgMCAxLS4wOTctLjA2MmwtLjIzNi4yMzYuMjM2LS4yMzZhLjI2Ny4yNjcgMCAwIDEtLjA2My0uMDk4bC0uMDA1LS4wMTQtLjAwNy0uMDE1YS4yMjcuMjI3IDAgMCAxLS4wMjEtLjEwMnYtLjAzM2EuNTczLjU3MyAwIDAgMS0uMDAyLS4wNjQuMDk0LjA5NCAwIDAgMSAuMDA2LS4wMTRaTTMuOTggMS43MzRhNi4zMzMgNi4zMzMgMCAxIDEgNy4wMzggMTAuNTMyQTYuMzMzIDYuMzMzIDAgMCAxIDMuOTggMS43MzRabS4zNyA5Ljk3N2E1LjY2NiA1LjY2NiAwIDEgMCA2LjI5Ny05LjQyMiA1LjY2NiA1LjY2NiAwIDAgMC02LjI5NiA5LjQyMlpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTQgMTRcXFwiPjxwYXRoIGZpbGw9XFxcInJlZFxcXCIgZD1cXFwibTguNDEgNyA0LjMtNC4yOWExLjAwNCAxLjAwNCAwIDAgMC0xLjQyLTEuNDJMNyA1LjU5bC00LjI5LTQuM2ExLjAwNCAxLjAwNCAwIDEgMC0xLjQyIDEuNDJMNS41OSA3bC00LjMgNC4yOWEuOTk5Ljk5OSAwIDAgMCAwIDEuNDIgMSAxIDAgMCAwIDEuNDIgMEw3IDguNDFsNC4yOSA0LjNhMS4wMDEgMS4wMDEgMCAwIDAgMS42MzktLjMyNSAxIDEgMCAwIDAtLjIyLTEuMDk1TDguNDEgN1pcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgNiA2XFxcIj48Y2lyY2xlIGN4PVxcXCIzXFxcIiBjeT1cXFwiM1xcXCIgcj1cXFwiM1xcXCIgZmlsbD1cXFwiI0ZGNzI2NFxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEzLjk5OSA3LjMzM2MtLjQgMC0uNjY3LjI2Ny0uNjY3LjY2NyAwIDEuOTMzLTEgMy42NjYtMi42NjcgNC42LTIuNTMzIDEuNDY2LTUuOC42LTcuMjY2LTEuOTM0LTEuNDY3LTIuNTMzLS42LTUuOCAxLjkzMy03LjI2NmE1LjMzOCA1LjMzOCAwIDAgMSA2LjUzMy45MzNoLTEuNmMtLjQgMC0uNjY2LjI2Ny0uNjY2LjY2N3MuMjY2LjY2Ni42NjYuNjY2aDNjLjQgMCAuNjY3LS4yNjYuNjY3LS42NjZWMmMwLS40LS4yNjctLjY2Ny0uNjY3LS42NjdTMTIuNiAxLjYgMTIuNiAydjEuMmMtMS4yNjctMS4yLTIuODY3LTEuODY3LTQuNi0xLjg2Ny0zLjY2NyAwLTYuNjY3IDMtNi42NjcgNi42NjcgMCAzLjY2NiAzIDYuNjY2IDYuNjY3IDYuNjY2IDMuNjY2IDAgNi42NjYtMyA2LjY2Ni02LjY2NiAwLS40LS4yNjYtLjY2Ny0uNjY2LS42NjdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0zIDEyaDE4bS01LTUgNSA1LTUgNVxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiMlxcXCIgc3Ryb2tlLWxpbmVjYXA9XFxcInJvdW5kXFxcIiBzdHJva2UtbGluZWpvaW49XFxcInJvdW5kXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJtMTAuMTY1IDkuNjYyLjE2My4xNjQuMjEtLjA5NmExLjcyIDEuNzIgMCAwIDEgMS44OTUuMzE0bDEuMzc2IDEuNDA5LjIzOC0uMjMzLS4yMzMuMjM4YTEuNjY1IDEuNjY1IDAgMCAxIDAgMi4zODRsLS4wMDMuMDAyYTEuNjY3IDEuNjY3IDAgMCAxLTIuMzU1IDBsLTEuNDEyLTEuNDEyYTEuNjY3IDEuNjY3IDAgMCAxLS4yOTMtMS45MmwuMTEtLjIxNi0uMTcyLS4xNzItLjU5My0uNTkzLS4yMDQtLjIwNC0uMjMxLjE3M2E0LjMzMyA0LjMzMyAwIDEgMSAuODcyLS44NzNsLS4xNzMuMjMxLjIwNS4yMDQuNi42Wm0yLjg1MyAzLjg5OGExIDEgMCAwIDAgLjU0My0uNTQyLjk5OS45OTkgMCAwIDAtLjIxOS0xLjA5NGwtMS40MTItMS40MTJhMSAxIDAgMCAwLTEuNjM3LjMyMyAxIDEgMCAwIDAgLjIxOSAxLjA5NWwxLjQxMiAxLjQxMXYuMDAxYS45OTkuOTk5IDAgMCAwIDEuMDk0LjIxOFpNNi43NTIgOS42M2EzLjY2NyAzLjY2NyAwIDEgMC0xLjQyNC03LjE5NEEzLjY2NyAzLjY2NyAwIDAgMCA2Ljc1MiA5LjYzWlxcXCIgZmlsbD1cXFwiI0E2QjVCQVxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwibTE0LjIxMiA2LjM2Ni0xLjI2LS40Mi41OTMtMS4xODZBLjY2Ny42NjcgMCAwIDAgMTMuNDIgNGwtMS40Mi0xLjQyYS42NjcuNjY3IDAgMCAwLS43NjctLjEyN2wtMS4xODcuNTkzLS40Mi0xLjI2QS42NjcuNjY3IDAgMCAwIDkgMS4zMzNoLTJhLjY2Ny42NjcgMCAwIDAtLjYzNC40NTNsLS40MiAxLjI2LTEuMTg2LS41OTNhLjY2Ny42NjcgMCAwIDAtLjc2LjEyN0wyLjU3OSA0YS42NjcuNjY3IDAgMCAwLS4xMjcuNzY2bC41OTMgMS4xODctMS4yNi40MkEuNjY3LjY2NyAwIDAgMCAxLjMzMiA3djJhLjY2Ny42NjcgMCAwIDAgLjQ1My42MzNsMS4yNi40Mi0uNTkzIDEuMTg3YS42NjcuNjY3IDAgMCAwIC4xMjcuNzZsMS40MiAxLjQyYS42NjcuNjY3IDAgMCAwIC43NjYuMTI2bDEuMTg3LS41OTMuNDIgMS4yNmEuNjY3LjY2NyAwIDAgMCAuNjMzLjQ1M2gyYS42NjcuNjY3IDAgMCAwIC42MzQtLjQ1M2wuNDItMS4yNiAxLjE4Ni41OTNBLjY2Ni42NjYgMCAwIDAgMTIgMTMuNDJsMS40Mi0xLjQyYS42NjcuNjY3IDAgMCAwIC4xMjYtLjc2N2wtLjU5My0xLjE4NyAxLjI2LS40MkEuNjY3LjY2NyAwIDAgMCAxNC42NjUgOVY3YS42NjcuNjY3IDAgMCAwLS40NTMtLjYzNFptLS44OCAyLjE1NC0uOC4yNjZhMS4zMzQgMS4zMzQgMCAwIDAtLjc3MyAxLjg4bC4zOC43Ni0uNzM0LjczNC0uNzQtLjRhMS4zMzUgMS4zMzUgMCAwIDAtMS44Ni43NzNsLS4yNjYuOGgtMS4wNmwtLjI2Ny0uOGExLjMzMyAxLjMzMyAwIDAgMC0xLjg4LS43NzNsLS43Ni4zOC0uNzMzLS43MzQuNC0uNzRhMS4zMzMgMS4zMzMgMCAwIDAtLjc3NC0xLjg4bC0uOC0uMjY2VjcuNDhsLjgtLjI2N2ExLjMzMyAxLjMzMyAwIDAgMCAuNzc0LTEuODhsLS4zOC0uNzQuNzMzLS43MzMuNzQuMzhhMS4zMzMgMS4zMzMgMCAwIDAgMS44OC0uNzc0bC4yNjctLjhoMS4wNGwuMjY2LjhhMS4zMzMgMS4zMzMgMCAwIDAgMS44OC43NzRsLjc2LS4zOC43MzQuNzMzLS40Ljc0YTEuMzMzIDEuMzMzIDAgMCAwIC43NzMgMS44NmwuOC4yNjd2MS4wNlpNNy45OTkgNS4zMzNhMi42NjcgMi42NjcgMCAxIDAgMCA1LjMzMyAyLjY2NyAyLjY2NyAwIDAgMCAwLTUuMzMzWm0wIDRhMS4zMzMgMS4zMzMgMCAxIDEgMC0yLjY2NyAxLjMzMyAxLjMzMyAwIDAgMSAwIDIuNjY3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxOCAxOFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuNzIzIDIuNzM4YS43NS43NSAwIDAgMC0uNjMtLjE1IDYgNiAwIDAgMS00LjY2NS0uOTUzLjc1Ljc1IDAgMCAwLS44NTYgMCA2IDYgMCAwIDEtNC42NjQuOTUzLjc1Ljc1IDAgMCAwLS45MDguNzM1VjguOTFhNi43NSA2Ljc1IDAgMCAwIDIuODI3IDUuNDk4bDIuNzM4IDEuOTVhLjc1Ljc1IDAgMCAwIC44NyAwbDIuNzM3LTEuOTVBNi43NSA2Ljc1IDAgMCAwIDE1IDguOTFWMy4zMjNhLjc0OS43NDkgMCAwIDAtLjI3Ny0uNTg1Wk0xMy41IDguOTFhNS4yNDkgNS4yNDkgMCAwIDEtMi4xOTcgNC4yNzVMOSAxNC44MjhsLTIuMzAzLTEuNjQzQTUuMjUgNS4yNSAwIDAgMSA0LjUgOC45MVY0LjE4NUE3LjUgNy41IDAgMCAwIDkgMy4xNDNhNy41IDcuNSAwIDAgMCA0LjUgMS4wNDJWOC45MVptLTMuMzQ1LTEuNzE3TDguMTM3IDkuMjE4bC0uNjY3LS42NzVhLjc1My43NTMgMCAxIDAtMS4wNjUgMS4wNjVsMS4yIDEuMmEuNzUuNzUgMCAwIDAgMS4wNjUgMGwyLjU4LTIuNTU4YS43NTMuNzUzIDAgMCAwLTEuMDY1LTEuMDY1bC0uMDMuMDA4WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuMjczIDUuNzY3di0uMDRhNi42NjcgNi42NjcgMCAwIDAtMTIuNTItLjA0LjU2Ny41NjcgMCAwIDAtLjA1My4xNiA2LjY2NyA2LjY2NyAwIDEgMCAxMi41NzMtLjA4Wk04IDIuNjY3YTUuMzMzIDUuMzMzIDAgMCAxIDQuNjEzIDIuNjY2aC0uOGEyIDIgMCAwIDAtMy4wOC4xNDdBMi4xMTMgMi4xMTMgMCAwIDAgOCA1LjMzM2MtLjI1MS4wMDUtLjUuMDU1LS43MzMuMTQ3YTIgMiAwIDAgMC0zLjA4LS4xNDdoLS44QTUuMzMzIDUuMzMzIDAgMCAxIDggMi42NjdabTMgNGEuNjY3LjY2NyAwIDEgMS0xLjMzNCAwIC42NjcuNjY3IDAgMCAxIDEuMzM0IDBabS00LjY2NyAwYS42NjcuNjY3IDAgMSAxLTEuMzMzIDAgLjY2Ny42NjcgMCAwIDEgMS4zMzMgMFpNOCAxMy4zMzNBNS4zMzMgNS4zMzMgMCAwIDEgMi42NjcgOGMuMDAzLS40NS4wNi0uODk4LjE3My0xLjMzM2guODI3YTIgMiAwIDAgMCA0IC4xMi42NjcuNjY3IDAgMCAxIC42NjYgMCAyIDIgMCAxIDAgNC0uMTJoLjgyN2MuMTEyLjQzNS4xNy44ODMuMTczIDEuMzMzQTUuMzM0IDUuMzM0IDAgMCAxIDggMTMuMzMzWm0xLjU3My0zLjg0NmEyLjUwNyAyLjUwNyAwIDAgMS0zLjE0NiAwIC42NjcuNjY3IDAgMCAwLS44NTQgMS4wMjYgMy43ODcgMy43ODcgMCAwIDAgNC44NTQgMCAuNjY4LjY2OCAwIDAgMC0uODU0LTEuMDI2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuODkgNi40NDdBLjY2Ni42NjYgMCAwIDAgMTQuMzE2IDZsLTMuNzkzLS41NTNMOC44MjMgMmEuNjY3LjY2NyAwIDAgMC0xLjIgMGwtMS43IDMuNDRMMi4xMyA2YS42NjcuNjY3IDAgMCAwLS41NC40NTMuNjY3LjY2NyAwIDAgMCAuMTY2LjY2N0w0LjUxIDkuNzg3bC0uNjY3IDMuNzg2YS42NjcuNjY3IDAgMCAwIC45NjcuNzE0bDMuNDEzLTEuNzggMy40IDEuNzg2Yy4wOTQuMDUzLjIuMDguMzA3LjA4YS42NjcuNjY3IDAgMCAwIC42MjQtLjQyLjY2Ni42NjYgMCAwIDAgLjAzNi0uMzczbC0uNjY3LTMuNzg3IDIuNzUzLTIuNjY2YS42NjcuNjY3IDAgMCAwIC4yMTQtLjY4Wm0tNC4xIDIuNjY2YS42NjYuNjY2IDAgMCAwLS4xOTQuNTk0bC40OCAyLjc5My0yLjUwNi0xLjMzM2EuNjY2LjY2NiAwIDAgMC0uNjI3IDBMNS40MzYgMTIuNWwuNDgtMi43OTNhLjY2Ny42NjcgMCAwIDAtLjE5My0uNTk0bC0yLTIgMi44MDctLjQwNmEuNjY3LjY2NyAwIDAgMCAuNTA2LS4zNjdMOC4yMjMgMy44bDEuMjUzIDIuNTQ3YS42NjcuNjY3IDAgMCAwIC41MDcuMzY2bDIuODA3LjQwNy0yIDEuOTkzWlxcXCIgZmlsbD1cXFwiIzA2REJFNFxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiI2ZmZlxcXCIgZD1cXFwiTTYuODc1IDEwLjcyOWEuNjY1LjY2NSAwIDAgMS0uNDcxLS4xOTZMNC41MjkgOC42NThhLjY2Ny42NjcgMCAwIDEgLjk0Mi0uOTQybDEuNDA0IDEuNDAzIDMuNjU0LTMuNjUzYS42NjcuNjY3IDAgMCAxIC45NDIuOTQybC00LjEyNSA0LjEyNWEuNjY0LjY2NCAwIDAgMS0uNDcxLjE5NlpcXFwiIG9wYWNpdHk9XFxcIi45OVxcXCIvPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwiTTggMS4zMzNBNi42NjcgNi42NjcgMCAxIDAgMTQuNjY3IDggNi42NzQgNi42NzQgMCAwIDAgOCAxLjMzM1ptMy40NzEgNS4wNzYtNC4xMjUgNC4xMjVhLjY2Ny42NjcgMCAwIDEtLjk0MiAwTDQuNTI5IDguNjU5YS42NjcuNjY3IDAgMCAxIC45NDItLjk0M2wxLjQwNCAxLjQwMyAzLjY1NC0zLjY1M2EuNjY3LjY2NyAwIDAgMSAuOTQyLjk0M1pcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTQgMTRcXFwiPjxwYXRoIGQ9XFxcIk03IC4zMzJjLTMuNjY3IDAtNi42NjcgMy02LjY2NyA2LjY2NyAwIDMuNjY2IDMgNi42NjYgNi42NjcgNi42NjYgMy42NjYgMCA2LjY2Ni0zIDYuNjY2LTYuNjY2IDAtMy42NjctMy02LjY2Ny02LjY2Ni02LjY2N1ptMi40NjYgOC4yYS42NDQuNjQ0IDAgMCAxIDAgLjkzMy42NDQuNjQ0IDAgMCAxLS45MzMgMEw3IDcuOTMyIDUuNDY2IDkuNDY1YS42NDQuNjQ0IDAgMCAxLS45MzMgMCAuNjQ0LjY0NCAwIDAgMSAwLS45MzNsMS41MzMtMS41MzMtMS41MzMtMS41MzRhLjY0NC42NDQgMCAwIDEgMC0uOTMzLjY0NC42NDQgMCAwIDEgLjkzMyAwTDcgNi4wNjVsMS41MzMtMS41MzNhLjY0NC42NDQgMCAwIDEgLjkzMyAwIC42NDQuNjQ0IDAgMCAxIDAgLjkzM0w3LjkzMyA3bDEuNTMzIDEuNTMzWlxcXCIgZmlsbD1cXFwiI0QxMDAxRVxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAzMiAzMlxcXCI+PGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcj1cXFwiMTZcXFwiIGZpbGw9XFxcIiNGMUY3RjlcXFwiLz48cGF0aCBkPVxcXCJNMTAuNzAyIDE3LjY5YTIuNzQ5IDIuNzQ5IDAgMCAwIDIuMzUgMS40MTFsLjkzMy4wMTgtLjczNC41NzhhNi40OTggNi40OTggMCAwIDEtMy40MDEgMS4zNjIgOC4zNDIgOC4zNDIgMCAwIDAgMy4zNjcuNzA1aC4wMDRhOC4zNTggOC4zNTggMCAwIDAgOC40NDYtOC40MjR2LS41NjhsLjEzNC0uMWMuMjYzLS4xOTYuNTEtLjQxNC43MzctLjY1TDEwLjcwMiAxNy42OVptMCAwaC4wNTJjLjMxMS0uMDAzLjYyLS4wNS45MTgtLjE0MWwtLjAzMi0uNjQ2YTIuNzQxIDIuNzQxIDAgMCAxLTIuMTU4LTIuMTc3Yy4zMjIuMTEuNjYuMTcyIDEuMDA0LjE4MmwxLjE1Ni4wMzEtLjk2Mi0uNjQyYTIuNzM0IDIuNzM0IDAgMCAxLTEuMjE3LTIuMjhjMC0uMzIzLjA1Ni0uNjQyLjE2NC0uOTQzYTkuMDY0IDkuMDY0IDAgMCAwIDYuMjM2IDIuOTQxbC40NDUuMDIzLS4xMDQtLjQzNGEyLjc0MiAyLjc0MiAwIDAgMSA0LjY4LTIuNWwuMTI4LjEzNi4xODMtLjAzNmMuMzg0LS4wNzYuNzYtLjE4NiAxLjEyMi0uMzI5YTIuNzYzIDIuNzYzIDAgMCAxLS43NTguNjY4TDEwLjcwMiAxNy42OVpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZT1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4yNyA5LjQ5MWEuMTY3LjE2NyAwIDAgMS0uMDU0LS4wMzVsLS4xOS0uMTk3LS44Ni0uODg5djIuOTYzYS4xNjcuMTY3IDAgMCAxLS4zMzMgMFY4LjM3bC0uODYuODktLjE4OS4xOTVhLjE3LjE3IDAgMCAxLS4yMzctLjI0MWwxLjMyOC0xLjMyOWEuMTY2LjE2NiAwIDAgMSAuMDUyLS4wMzJsLjAxLS4wMDRhLjE2Ny4xNjcgMCAwIDEgLjEyNiAwbC4wMS4wMDRhLjE1Ni4xNTYgMCAwIDEgLjA1Mi4wMzJsMS4zMjggMS4zMjkuMDAyLjAwMWEuMTY3LjE2NyAwIDAgMSAuMDM2LjE4MmwuNDYyLjE5My0uNDYyLS4xOTNhLjE2Ny4xNjcgMCAwIDEtLjAzNi4wNTVsLS4wMDMuMDAzYS4xNjcuMTY3IDAgMCAxLS4xODMuMDM2Wm0tLjQzNy03LjU4NCAzLjk2MyAzLjk2My4wMjMuMDdhLjMzLjMzIDAgMCAxIC4wMTQuMDU0djYuNjczYTEuNSAxLjUgMCAwIDEtMS41IDEuNUg0LjY2N2ExLjUgMS41IDAgMCAxLTEuMDYxLS40NGwtLjM0OC4zNDguMzQ4LS4zNDhhMS41IDEuNSAwIDAgMS0uNDQtMS4wNlYzLjMzM2ExLjUgMS41IDAgMCAxIDEuNS0xLjVoMy45OGEuMjMzLjIzMyAwIDAgMSAuMDMyLjAxNWwuMTEuMDU5aC4wNDVabS44NTQgMS4zNDZMOC44MzMgMi40djIuMjY3QTEuMTY3IDEuMTY3IDAgMCAwIDEwIDUuODMzaDIuMjY3bC0uODUzLS44NTMtMS43MjctMS43MjdaTTguNSAyLjY2N3YtLjVINC42NjdBMS4xNjcgMS4xNjcgMCAwIDAgMy41IDMuMzMzdjkuMzM0YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3IDEuMTY2aDYuNjY2YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3LTEuMTY2di02LjVIMTBhMS41IDEuNSAwIDAgMS0xLjUtMS41di0yWlxcXCIgZmlsbD1cXFwiY3VycmVudGNvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRjb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwibTMuODM3IDExLjY0My0uMTI4LjMxNC4yNDMuMjM1QTUuODMzIDUuODMzIDAgMCAwIDggMTMuODMzaC4wMDJhNS44MzMgNS44MzMgMCAwIDAgNC4wNDctMS42NGwuMjQzLS4yMzYtLjEyOS0uMzE0YTQuNSA0LjUgMCAwIDAtOC4zMjUgMFptOC4zMzgtLjcyNC40My43MzYuNDMzLS43MzZBNS43OCA1Ljc4IDAgMCAwIDEzLjgzMyA4IDUuODMzIDUuODMzIDAgMCAwIDIuMTY3IDhhNS43OCA1Ljc4IDAgMCAwIC43OTUgMi45MmwuNDMyLjczNi40My0uNzM3YTQuODMzIDQuODMzIDAgMCAxIDIuMzYzLTIuMDQybC42NTUtLjI2NS0uNDY3LS41M2EyLjE2NyAyLjE2NyAwIDEgMSAzLjI1IDBsLS40NjcuNTMuNjU1LjI2NWE0LjgzMyA0LjgzMyAwIDAgMSAyLjM2MiAyLjA0MlpNNC42MzUgMi44NGMxLS42NTUgMi4xNy0xLjAwNSAzLjM2NS0xLjAwN2E2LjE2NiA2LjE2NiAwIDAgMSA0LjUzMiAxMC4zMzUgNi4xNjcgNi4xNjcgMCAwIDEtOS4wNjQgMEE2LjE2NyA2LjE2NyAwIDAgMSA0LjYzNSAyLjg0Wm0xLjg0IDIuODA4YTEuODMzIDEuODMzIDAgMSAwIDMuMDUgMi4wMzcgMS44MzMgMS44MzMgMCAwIDAtMy4wNS0yLjAzN1pcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyMCAyMlxcXCI+PHBhdGggZD1cXFwibTEzLjUwNCAxMS40NDgtLjQ1NS4zNTguNTM4LjIxNGE5LjY2NyA5LjY2NyAwIDAgMSA2LjA0MiA3LjkxNi42NjcuNjY3IDAgMCAxLS41Ny43M2gtLjA5MWEuNjY3LjY2NyAwIDAgMS0uNjY3LS41OTMgOC4zMzMgOC4zMzMgMCAwIDAtMTYuNTYyIDBBLjY3My42NzMgMCAwIDEgLjQgMTkuOTI2YTkuNjY3IDkuNjY3IDAgMCAxIDYuMDEzLTcuOTA3bC41MzYtLjIxNC0uNDU0LS4zNTdhNS42NjcgNS42NjcgMCAxIDEgNy4wMDggMFptLTUuOTExLS44NDVhNC4zMzQgNC4zMzQgMCAxIDAgNC44MTUtNy4yMDcgNC4zMzQgNC4zMzQgMCAwIDAtNC44MTUgNy4yMDdaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIiBzdHJva2U9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyMCAxOFxcXCI+PHBhdGggZD1cXFwibTE4LjkxNyAxMy41ODMtNi43NS0xMS42NjZDMTEuNS43NSA5LjkxNy4zMzMgOC43NSAxYy0uNDE3LjI1LS43NS41ODMtLjkxNy45MTdsLTYuNzUgMTEuNjY2Qy40MTcgMTQuNzUuODMzIDE2LjMzMyAyIDE3Yy40MTcuMjUuODMzLjMzMyAxLjI1LjMzM2gxMy40MTdjMS40MTYgMCAyLjUtMS4xNjYgMi41LTIuNS4wODMtLjUtLjA4NC0uOTE2LS4yNS0xLjI1Wk0xMCAxNGMtLjUgMC0uODMzLS4zMzMtLjgzMy0uODMzIDAtLjUuMzMzLS44MzQuODMzLS44MzQuNSAwIC44MzMuMzM0LjgzMy44MzQgMCAuNS0uMzMzLjgzMy0uODMzLjgzM1ptLjgzMy00LjE2N2MwIC41LS4zMzMuODM0LS44MzMuODM0LS41IDAtLjgzMy0uMzM0LS44MzMtLjgzNFY2LjVjMC0uNS4zMzMtLjgzMy44MzMtLjgzMy41IDAgLjgzMy4zMzMuODMzLjgzM3YzLjMzM1pcXFwiIGZpbGw9XFxcIiNGRjcyNjRcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTggMTlcXFwiPjxnIGNsaXAtcGF0aD1cXFwidXJsKCN3YXJuaW5nLWZpbGxfc3ZnX19hKVxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJtMTcuMDIgMTMuOTkyLTYuMDczLTEwLjVjLS42LTEuMDUtMi4wMjUtMS40MjUtMy4wNzQtLjgyNS0uMzc1LjIyNS0uNjc1LjUyNS0uODI1LjgyNWwtNi4wNzMgMTAuNWMtLjYgMS4wNS0uMjI1IDIuNDc1LjgyNCAzLjA3NS4zNzUuMjI1Ljc1LjMgMS4xMjUuM2gxMi4wNzFjMS4yNzUgMCAyLjI1LTEuMDUgMi4yNS0yLjI1LjA3NS0uNDUtLjA3NS0uODI1LS4yMjUtMS4xMjVabS04LjAyMy4zNzVjLS40NSAwLS43NS0uMy0uNzUtLjc1cy4zLS43NS43NS0uNzUuNzUuMy43NS43NS0uMy43NS0uNzUuNzVabS43NS0zLjc1YzAgLjQ1LS4zLjc1LS43NS43NXMtLjc1LS4zLS43NS0uNzV2LTNjMC0uNDUuMy0uNzUuNzUtLjc1cy43NS4zLjc1Ljc1djNaXFxcIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwid2FybmluZy1maWxsX3N2Z19fYVxcXCI+PHBhdGggZmlsbD1cXFwiI2ZmZlxcXCIgZD1cXFwiTTAgMGgxNy45OTV2MThIMHpcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDAgLjg2NylcXFwiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjMgMjFcXFwiPjxwYXRoIGQ9XFxcIk0xMS44ODcgMTVhMSAxIDAgMSAwIDAgMiAxIDEgMCAwIDAgMC0yWm0xMC42NyAxLjQ3LTguMDUtMTRhMyAzIDAgMCAwLTUuMjQgMGwtOCAxNEEzIDMgMCAwIDAgMy44MjcgMjFoMTYuMTJhMyAzIDAgMCAwIDIuNjEtNC41M1ptLTEuNzMgMmExIDEgMCAwIDEtLjg4LjUxSDMuODI3YTEgMSAwIDAgMS0uODgtLjUxIDEgMSAwIDAgMSAwLTFsOC0xNGExIDEgMCAwIDEgMS43OCAwbDguMDUgMTRhMSAxIDAgMCAxIC4wNSAxLjAydi0uMDJaTTExLjg4NyA3YTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMiAwVjhhMSAxIDAgMCAwLTEtMVpcXFwiIGZpbGw9XFxcIiNEMTAwMUVcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMzIgMzJcXFwiPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE2XFxcIiBmaWxsPVxcXCIjRjFGN0Y5XFxcIi8+PHBhdGggZD1cXFwiTTIzLjkxNyAxNC4yN3YuMDEyYzAgLjQ2MiAwIDIuOTc3LS4wMyAzLjM4MXYuMDI4YTcuNiA3LjYgMCAwIDEtLjM3NCAyLjQ0M3YuMDAxYTEuNTM1IDEuNTM1IDAgMCAxLS4zNzUuNjE1IDEuODI3IDEuODI3IDAgMCAxLS45NTUuNDkxYy0yLjcwMi4yMDgtNC45OS4yNDUtNy42MDMuMjA4aC0uMDEyYTMzLjU2MiAzMy41NjIgMCAwIDEtNC44MTctLjI0NCAxLjgxMSAxLjgxMSAwIDAgMS0uOTI3LS40ODUgMi4wMjIgMi4wMjIgMCAwIDEtLjQ1LS44NjhsLS4wMDEtLjAwNmE2LjgyOCA2LjgyOCAwIDAgMS0uMjE1LTEuNDN2LS4wMDlhMzUuODg3IDM1Ljg4NyAwIDAgMSAuMDAzLTQuODU3Yy4wMzctLjQ0Mi4wNzQtLjg4OC4xNzUtMS4yOTguMTA0LS40MjQuMjctLjc3NS41NC0xLjAyNWwuMDAzLS4wMDNjLjI1My0uMjQuNTctLjQwMS45MTEtLjQ2NmE1OC41MjcgNTguNTI3IDAgMCAxIDYuMjA0LS4yMjNoLjAxMmE1OC40MjYgNTguNDI2IDAgMCAxIDYuMjI2LjIzYy40MS4wNzguNzgyLjI5IDEuMDU2LjYwNS40NDcuOS42NjQgMS44OTYuNjI5IDIuOVptLTkuOTQ1IDMuODY3di41NmwuNDkyLS4yNjdhOTguOTcgOTguOTcgMCAwIDEgMi4yNjQtMS4xNzVsLjA2My0uMDMyYTcwLjQ1IDcwLjQ1IDAgMCAwIDIuMTE2LTEuMTA0bC41NC0uMy0uNTQ3LS4yODctNC40NC0yLjMzMi0uNDg4LS4yNTd2NS4xOTRaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIiBzdHJva2U9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MSZpZD02ZmU1OTA1NSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JNZXNzYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWI3N2IxMWQ0Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NTUzOGQ3ZTImbGFuZz1zY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0xvYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD04ZTM2ZjhlYyZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTJiZGE1OCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2hpbW1lckxvYWRpbmcudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NzQzNTYxNzImbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Vycm9yTGlzdHMudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3YzdlNzImbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVjMzJiZjBjJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TdGlja3lFcnJvcnMudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWUzOGQxMGUmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGE1NzFmZDYmbGFuZz1zY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0NyZWF0ZU1vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWM3Y2EyOGI4Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CdWxrUHVibGlzaGluZy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kMGI4MDJkYSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTA2M2NiZDg2Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0aWVzRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWE0MGZjZjQmbGFuZz1zY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGFkYTVmMzYmbGFuZz1zY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zNmI3NjRiYiZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MSZpZD0xN2U2MzJhNiZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0xJmlkPTUyMjY2MjAwJmxhbmc9c2Nzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9YTE4NjFmM2UmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWRtaW5IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmZTU5MDU1JnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIkB2dWVmb3JtL211bHRpc2VsZWN0L3RoZW1lcy9kZWZhdWx0LmNzcz92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9Y3NzXCJcbmltcG9ydCBcIi4vQWRtaW5IZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTEmaWQ9NmZlNTkwNTUmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LTZmZTU5MDU1XCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9BZG1pbkhlYWRlci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNmZlNTkwNTVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2ZmU1OTA1NScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzZmZTU5MDU1JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZlNTkwNTUmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2ZmU1OTA1NScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjVkMGUzZGEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0JyZWFkQ3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0JyZWFkQ3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0JyZWFkQ3J1bWIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjY1ZDBlM2RhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNjVkMGUzZGEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2NWQwZTNkYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjVkMGUzZGEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2NWQwZTNkYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQnV0dG9uQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZmY1YThmOCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQnV0dG9uQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9CdXR0b25Db21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOWZmNWE4ZjhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc5ZmY1YThmOCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzlmZjVhOGY4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9CdXR0b25Db21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlmZjVhOGY4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOWZmNWE4ZjgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uRm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmViZjQxZjkmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rlc2NyaXB0aW9uRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRGVzY3JpcHRpb25Gb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9EZXNjcmlwdGlvbkZvcm0udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjZlYmY0MWY5XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNmViZjQxZjknLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2ZWJmNDFmOScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRGVzY3JpcHRpb25Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZWJmNDFmOSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzZlYmY0MWY5JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3N2IxMWQ0JnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRXJyb3JNZXNzYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9Yjc3YjExZDQmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LWI3N2IxMWQ0XCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvck1lc3NhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImI3N2IxMWQ0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnYjc3YjExZDQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdiNzdiMTFkNCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRXJyb3JNZXNzYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNzdiMTFkNCZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2I3N2IxMWQ0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZjFkOGIxYiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRXJyb3JQb3BVcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yUG9wVXAudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBmMWQ4YjFiXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGYxZDhiMWInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwZjFkOGIxYicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRXJyb3JQb3BVcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGYxZDhiMWImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwZjFkOGIxYicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSG92ZXJUZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NTM4ZDdlMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSG92ZXJUZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NTUzOGQ3ZTImbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNTUzOGQ3ZTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1NTM4ZDdlMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzU1MzhkN2UyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1MzhkN2UyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNTUzOGQ3ZTInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0xvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGUzNmY4ZWMmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0xvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vTG9hZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPThlMzZmOGVjJmxhbmc9c2Nzc1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Mb2FkZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjhlMzZmOGVjXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnOGUzNmY4ZWMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc4ZTM2ZjhlYycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04ZTM2ZjhlYyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzhlMzZmOGVjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9OYXZEcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjYxOWE3ZWQmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL05hdkRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9OYXZEcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTmF2RHJvcGRvd24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI2MTlhN2VkXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjYxOWE3ZWQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyNjE5YTdlZCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTmF2RHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2MTlhN2VkJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMjYxOWE3ZWQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BvcHVwTW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVhMmJkYTU4JnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Qb3B1cE1vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Qb3B1cE1vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTJiZGE1OCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtNWEyYmRhNThcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjVhMmJkYTU4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNWEyYmRhNTgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1YTJiZGE1OCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWEyYmRhNTgmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1YTJiZGE1OCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmFkaWFsUHJvZ3Jlc3NCYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1NzM4ZTYwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SYWRpYWxQcm9ncmVzc0Jhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmFkaWFsUHJvZ3Jlc3NCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxNTczOGU2MFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzE1NzM4ZTYwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMTU3MzhlNjAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTczOGU2MCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzE1NzM4ZTYwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TaGltbWVyTG9hZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQzNTYxNzImc2NvcGVkPXRydWVcIlxuY29uc3Qgc2NyaXB0ID0ge31cblxuaW1wb3J0IFwiLi9TaGltbWVyTG9hZGluZy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD03NDM1NjE3MiZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtNzQzNTYxNzJcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3NDM1NjE3MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzc0MzU2MTcyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNzQzNTYxNzInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1NoaW1tZXJMb2FkaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDM1NjE3MiZzY29wZWQ9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3NDM1NjE3MicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04Yzk3YTViZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UYWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1RhYmxlUGFnaW5hdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOGM5N2E1YmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4Yzk3YTViZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzhjOTdhNWJlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPThjOTdhNWJlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOGM5N2E1YmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDAxZDhjZDImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Ub2FzdE1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkMDFkOGNkMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2QwMWQ4Y2QyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDAxZDhjZDInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDAxZDhjZDImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkMDFkOGNkMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRGVsZXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hOTNkODQ3YyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVsZXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0RlbGV0ZUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL0RlbGV0ZUJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYTkzZDg0N2NcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdhOTNkODQ3YycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2E5M2Q4NDdjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EZWxldGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5M2Q4NDdjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYTkzZDg0N2MnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0xpbmsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWJmZTY1MTAyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9MaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9MaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImJmZTY1MTAyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnYmZlNjUxMDInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdiZmU2NTEwMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmZlNjUxMDImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdiZmU2NTEwMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWNjNTA4MjgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1B1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1B1Ymxpc2hCdXR0b24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImVjYzUwODI4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZWNjNTA4MjgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdlY2M1MDgyOCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWNjNTA4MjgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdlY2M1MDgyOCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVW5QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTljMzE5MyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVW5QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1VuUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDU5YzMxOTNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NTljMzE5MycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ1OWMzMTkzJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9VblB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1OWMzMTkzJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDU5YzMxOTMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0RlbGV0ZUFjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTZiY2U4Y2EmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0RlbGV0ZUFjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9EZWxldGVBY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1NmJjZThjYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzU2YmNlOGNhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTZiY2U4Y2EnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0RlbGV0ZUFjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTZiY2U4Y2EmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1NmJjZThjYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3YzdlNzImc2NvcGVkPXRydWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Vycm9yTGlzdHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1mNjdjN2U3MiZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtZjY3YzdlNzJcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImY2N2M3ZTcyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZjY3YzdlNzInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdmNjdjN2U3MicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3YzdlNzImc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdmNjdjN2U3MicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSGF2ZU5vdEFkZGVkWWV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zOTI1ZWY0OSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSGF2ZU5vdEFkZGVkWWV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9IYXZlTm90QWRkZWRZZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0hhdmVOb3RBZGRlZFlldC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMzkyNWVmNDlcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCczOTI1ZWY0OScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzM5MjVlZjQ5JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9IYXZlTm90QWRkZWRZZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM5MjVlZjQ5JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMzkyNWVmNDknLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYjhmNDA2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMmZiOGY0MDZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyZmI4ZjQwNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzJmYjhmNDA2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmI4ZjQwNiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzJmYjhmNDA2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiNTRlMDlmJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxYjU0ZTA5ZlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzFiNTRlMDlmJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMWI1NGUwOWYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWI1NGUwOWYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxYjU0ZTA5ZicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUHJvZ3Jlc3NMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjMzJiZjBjJnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Qcm9ncmVzc0xvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Qcm9ncmVzc0xvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vUHJvZ3Jlc3NMb2FkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWMzMmJmMGMmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LTVjMzJiZjBjXCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWMzMmJmMGNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1YzMyYmYwYycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVjMzJiZjBjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Qcm9ncmVzc0xvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWMzMmJmMGMmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1YzMyYmYwYycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTM4ZDEwZSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1N0aWNreUVycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFlMzhkMTBlJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi0xZTM4ZDEwZVwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvU3RpY2t5RXJyb3JzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxZTM4ZDEwZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzFlMzhkMTBlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMWUzOGQxMGUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1N0aWNreUVycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWUzOGQxMGUmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxZTM4ZDEwZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRWxlbWVudFN0YXR1cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWViOGRlYjAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0VsZW1lbnRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRWxlbWVudFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zdGF0dXMvRWxlbWVudFN0YXR1cy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMWViOGRlYjBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcxZWI4ZGViMCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzFlYjhkZWIwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbGVtZW50U3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZWI4ZGViMCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzFlYjhkZWIwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZjJmOWFiOCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUHJldmlvdXNseVB1Ymxpc2hlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxZjJmOWFiOFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzFmMmY5YWI4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMWYyZjlhYjgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFmMmY5YWI4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMWYyZjlhYjgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yM2VlMzc1YyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyM2VlMzc1Y1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzIzZWUzNzVjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjNlZTM3NWMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yM2VlMzc1YyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzIzZWUzNzVjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BY3Rpdml0eURldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU0MDJiMDYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdGl2aXR5RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0eURldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGV0YWlsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0ZTQwMmIwNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzRlNDAyYjA2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNGU0MDJiMDYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXR5RGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTQwMmIwNiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzRlNDAyYjA2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BY3Rpdml0eUluZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYTU3MWZkNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGE1NzFmZDYmbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eUluZGV4LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwYTU3MWZkNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzBhNTcxZmQ2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMGE1NzFmZDYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBhNTcxZmQ2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMGE1NzFmZDYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0NyZWF0ZU1vZGFsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jN2NhMjhiOCZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0NyZWF0ZU1vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9YzdjYTI4YjgmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LWM3Y2EyOGI4XCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQ3JlYXRlTW9kYWwudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImM3Y2EyOGI4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnYzdjYTI4YjgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjN2NhMjhiOCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3Y2EyOGI4JnNjb3BlZD10cnVlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYzdjYTI4YjgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMGI4MDJkYSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWQwYjgwMmRhJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi1kMGI4MDJkYVwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZDBiODAyZGFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkMGI4MDJkYScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2QwYjgwMmRhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9CdWxrUHVibGlzaGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDBiODAyZGEmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkMGI4MDJkYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNjNjYmQ4NiZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Vycm9ySXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTA2M2NiZDg2Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi0wNjNjYmQ4NlwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjA2M2NiZDg2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMDYzY2JkODYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwNjNjYmQ4NicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNjNjYmQ4NiZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzA2M2NiZDg2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QdWJsaXNoU2VsZWN0ZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNmYjFlMWNjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QdWJsaXNoU2VsZWN0ZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUHVibGlzaFNlbGVjdGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIzZmIxZTFjY1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzNmYjFlMWNjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnM2ZiMWUxY2MnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1B1Ymxpc2hTZWxlY3RlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2ZiMWUxY2MmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCczZmIxZTFjYycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVmcmVzaFRvYXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MDExODk3YSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVmcmVzaFRvYXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlZnJlc2hUb2FzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDAxMTg5N2FcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0MDExODk3YScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQwMTE4OTdhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWZyZXNoVG9hc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwMTE4OTdhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDAxMTg5N2EnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1NzVkM2IyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyNTc1ZDNiMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzI1NzVkM2IyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjU3NWQzYjInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1NzVkM2IyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMjU3NWQzYjInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5RGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDEzOGVhODgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdGl2aXR5RGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWN0aXZpdHlEYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQWN0aXZpdHlEYXRlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwMTM4ZWE4OFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzAxMzhlYTg4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMDEzOGVhODgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXR5RGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDEzOGVhODgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwMTM4ZWE4OCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmFmYjI1YmEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0NvbmRpdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0NvbmRpdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Db25kaXRpb25zLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJiYWZiMjViYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2JhZmIyNWJhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYmFmYjI1YmEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0NvbmRpdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWJhZmIyNWJhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYmFmYjI1YmEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0NvbnRhY3RJbmZvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yOWE3ZDMxMyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQ29udGFjdEluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0NvbnRhY3RJbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQ29udGFjdEluZm8udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI5YTdkMzEzXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjlhN2QzMTMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyOWE3ZDMxMycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ29udGFjdEluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5YTdkMzEzJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMjlhN2QzMTMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jN2Q3OTliZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImM3ZDc5OWJlXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnYzdkNzk5YmUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjN2Q3OTliZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3ZDc5OWJlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYzdkNzk5YmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZGZiNzQ2OCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJjZGZiNzQ2OFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2NkZmI3NDY4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnY2RmYjc0NjgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZGZiNzQ2OCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2NkZmI3NDY4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JYXRpSWRlbnRpZmllci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTI2MWFmZmUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0lhdGlJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JYXRpSWRlbnRpZmllci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1MjYxYWZmZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzUyNjFhZmZlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTI2MWFmZmUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0lhdGlJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjYxYWZmZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzUyNjFhZmZlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9MZWdhY3lEYXRhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjNlNDgwNCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTGVnYWN5RGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vTGVnYWN5RGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xlZ2FjeURhdGEudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImNiM2U0ODA0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnY2IzZTQ4MDQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjYjNlNDgwNCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTGVnYWN5RGF0YS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2IzZTQ4MDQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdjYjNlNDgwNCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vTG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEyYzJlODYwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Mb2NhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vTG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Mb2NhdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMTJjMmU4NjBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcxMmMyZTg2MCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzEyYzJlODYwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Mb2NhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTJjMmU4NjAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxMmMyZTg2MCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vT3RoZXJJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OGI2NDQwNCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3RoZXJJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9PdGhlcklkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9PdGhlcklkZW50aWZpZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc4YjY0NDA0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzhiNjQ0MDQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3OGI2NDQwNCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vT3RoZXJJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OGI2NDQwNCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzc4YjY0NDA0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QYXJ0aWNpcGF0aW5nT3JnLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDRkYWI3NCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUGFydGljaXBhdGluZ09yZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUGFydGljaXBhdGluZ09yZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BhcnRpY2lwYXRpbmdPcmcudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjdkNGRhYjc0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnN2Q0ZGFiNzQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3ZDRkYWI3NCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGFydGljaXBhdGluZ09yZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q0ZGFiNzQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3ZDRkYWI3NCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUGxhbm5lZERpc2J1cnNlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDE3MmMyYWMmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BsYW5uZWREaXNidXJzZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUGxhbm5lZERpc2J1cnNlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGxhbm5lZERpc2J1cnNlbWVudC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDE3MmMyYWNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwMTcyYzJhYycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzAxNzJjMmFjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMTcyYzJhYyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzAxNzJjMmFjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Qb2xpY3lNYXJrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWJkOTg4ODkyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Qb2xpY3lNYXJrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BvbGljeU1hcmtlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BvbGljeU1hcmtlci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYmQ5ODg4OTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdiZDk4ODg5MicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2JkOTg4ODkyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Qb2xpY3lNYXJrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWJkOTg4ODkyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYmQ5ODg4OTInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmMThiZTMwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2YxOGJlMzBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3ZjE4YmUzMCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdmMThiZTMwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjE4YmUzMCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzdmMThiZTMwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWViZDY2MmRjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRSZWdpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImViZDY2MmRjXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZWJkNjYyZGMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdlYmQ2NjJkYycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lYmQ2NjJkYyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2ViZDY2MmRjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWxhdGVkQWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJjYTA0YzAyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWxhdGVkQWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlbGF0ZWRBY3Rpdml0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1JlbGF0ZWRBY3Rpdml0eS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMmNhMDRjMDJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyY2EwNGMwMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzJjYTA0YzAyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWxhdGVkQWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJjYTA0YzAyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMmNhMDRjMDInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDM4YjBhZTYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvcnRpbmdPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDM4YjBhZTZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0MzhiMGFlNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQzOGIwYWU2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXBvcnRpbmdPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQzOGIwYWU2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDM4YjBhZTYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc3VsdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mjc3Y2I0ZjAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Jlc3VsdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzdWx0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVzdWx0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyNzdjYjRmMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzI3N2NiNGYwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjc3Y2I0ZjAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc3VsdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mjc3Y2I0ZjAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyNzdjYjRmMCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vU2VjdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMjk0Njg1MSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vU2VjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9TZWN0b3IudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjMyOTQ2ODUxXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMzI5NDY4NTEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCczMjk0Njg1MScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2VjdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMjk0Njg1MSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzMyOTQ2ODUxJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UYWcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxMTk2NjgyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1RhZy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDExOTY2ODJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwMTE5NjY4MicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzAxMTk2NjgyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYWcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxMTk2NjgyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMDExOTY2ODInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NzRhNzEzZCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGl0bGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjQ3NGE3MTNkXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNDc0YTcxM2QnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0NzRhNzEzZCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3NGE3MTNkJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDc0YTcxM2QnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RyYW5zYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmI4YWZmMDAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RyYW5zYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVHJhbnNhY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVHJhbnNhY3Rpb25zLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyYjhhZmYwMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzJiOGFmZjAwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMmI4YWZmMDAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmI4YWZmMDAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyYjhhZmYwMCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSW5kaWNhdG9yRGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZmYxNzc3MiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kaWNhdG9yRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRpY2F0b3JEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWZmMTc3NzJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1ZmYxNzc3MicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVmZjE3NzcyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JbmRpY2F0b3JEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVmZjE3NzcyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNWZmMTc3NzInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmNzhjZjdmJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRpY2F0b3JMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRpY2F0b3JMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JMaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2Zjc4Y2Y3ZlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzZmNzhjZjdmJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNmY3OGNmN2YnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmNzhjZjdmJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNmY3OGNmN2YnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kZDc2M2U0YyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWdncmVnYXRpb25TdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9BZ2dyZWdhdGlvblN0YXR1cy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZGQ3NjNlNGNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkZDc2M2U0YycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2RkNzYzZTRjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BZ2dyZWdhdGlvblN0YXR1cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGQ3NjNlNGMmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkZDc2M2U0YycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQmFzZWxpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZhYTZkMDYyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9CYXNlbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQmFzZWxpbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Jhc2VsaW5lLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2YWE2ZDA2MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzZhYTZkMDYyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNmFhNmQwNjInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Jhc2VsaW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YWE2ZDA2MiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzZhYTZkMDYyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzc1YjYxZTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc3NWI2MWUyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzc1YjYxZTInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3NzViNjFlMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc3NWI2MWUyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzc1YjYxZTInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NiMjYwM2YmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjNjYjI2MDNmXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnM2NiMjYwM2YnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCczY2IyNjAzZicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2IyNjAzZiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzNjYjI2MDNmJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JbmRpY2F0b3JBc2NlbmRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWY3ZWQ2YWRhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRpY2F0b3JBc2NlbmRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGljYXRvckFzY2VuZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJmN2VkNmFkYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2Y3ZWQ2YWRhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZjdlZDZhZGEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0luZGljYXRvckFzY2VuZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjdlZDZhZGEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdmN2VkNmFkYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vTWVhc3VyZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E2NGQ5NDQmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL01lYXN1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL01lYXN1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL01lYXN1cmUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjdhNjRkOTQ0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnN2E2NGQ5NDQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3YTY0ZDk0NCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTWVhc3VyZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E2NGQ5NDQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3YTY0ZDk0NCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUGVyaW9kLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ODE2ODQ2YSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUGVyaW9kLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNTgxNjg0NmFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1ODE2ODQ2YScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzU4MTY4NDZhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU4MTY4NDZhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNTgxNjg0NmEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDg1YTRkOWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9SZWZlcmVuY2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjQ4NWE0ZDllXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNDg1YTRkOWUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0ODVhNGQ5ZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ODVhNGQ5ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzQ4NWE0ZDllJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGY2ZmY2ODQmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvVGl0bGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjhmNmZmNjg0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnOGY2ZmY2ODQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc4ZjZmZjY4NCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPThmNmZmNjg0JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOGY2ZmY2ODQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE0MGZjZjQmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0aWVzRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTQwZmNmNCZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWE0MGZjZjRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1YTQwZmNmNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVhNDBmY2Y0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BY3Rpdml0aWVzRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVhNDBmY2Y0JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNWE0MGZjZjQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5RWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y1ZDYwYTYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdGl2aXR5RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0eUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2Y1ZDYwYTZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3ZjVkNjBhNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdmNWQ2MGE2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BY3Rpdml0eUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmNWQ2MGE2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignN2Y1ZDYwYTYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTBlMTczYyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWRkQWN0aXZpdHlCdXR0b24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjA1MGUxNzNjXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMDUwZTE3M2MnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwNTBlMTczYycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MGUxNzNjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMDUwZTE3M2MnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY2MWU2ZjhlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Eb3dubG9hZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Eb3dubG9hZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNjYxZTZmOGVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2NjFlNmY4ZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzY2MWU2ZjhlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Eb3dubG9hZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NjFlNmY4ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzY2MWU2ZjhlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FbGVtZW50c05vdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYzA0MWY5JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FbGVtZW50c05vdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0VsZW1lbnRzTm90ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWJjMDQxZjlcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1YmMwNDFmOScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzViYzA0MWY5JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbGVtZW50c05vdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYzA0MWY5JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNWJjMDQxZjknLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0VtcHR5QWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhZWY5Njg4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FbXB0eUFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FbXB0eUFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRW1wdHlBY3Rpdml0eS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOWFlZjk2ODhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc5YWVmOTY4OCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzlhZWY5Njg4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbXB0eUFjdGl2aXR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YWVmOTY4OCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzlhZWY5Njg4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ODllODZlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc1ODllODZlXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzU4OWU4NmUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3NTg5ZTg2ZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NTg5ZTg2ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzc1ODllODZlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mZWYyNmE4MCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vU2lkZWJhckhlbHBCbG9jay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU2lkZWJhckhlbHBCbG9jay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL1NpZGViYXJIZWxwQmxvY2sudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImZlZjI2YTgwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZmVmMjZhODAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdmZWYyNmE4MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2lkZWJhckhlbHBCbG9jay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmVmMjZhODAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdmZWYyNmE4MCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVGFibGVMYXlvdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkODRhMWQ4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvVGFibGVMYXlvdXQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjVkODRhMWQ4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNWQ4NGExZDgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1ZDg0YTFkOCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVGFibGVMYXlvdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkODRhMWQ4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNWQ4NGExZDgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyZTNiNTk5JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QZXJpb2RzRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QZXJpb2RzRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzRGV0YWlsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3MmUzYjU5OVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzcyZTNiNTk5JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNzJlM2I1OTknLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyZTNiNTk5JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzJlM2I1OTknLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BlcmlvZHNMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMzNiMjkzNCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUGVyaW9kc0xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BlcmlvZHNMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzTGlzdC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZDMzYjI5MzRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkMzNiMjkzNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2QzM2IyOTM0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QZXJpb2RzTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDMzYjI5MzQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkMzNiMjkzNCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWN0dWFsVmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5YTg4ZmM1JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BY3R1YWxWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWN0dWFsVmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL2VsZW1lbnRzL0FjdHVhbFZhbHVlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3OWE4OGZjNVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzc5YTg4ZmM1JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNzlhODhmYzUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdHVhbFZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWE4OGZjNSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzc5YTg4ZmM1JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UYXJnZXRWYWx1ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU1NzFiMjImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RhcmdldFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UYXJnZXRWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBlNTcxYjIyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGU1NzFiMjInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwZTU3MWIyMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVGFyZ2V0VmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNTcxYjIyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMGU1NzFiMjInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc3VsdERldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmMyMGYxNzgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Jlc3VsdERldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzdWx0RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHREZXRhaWwudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjZjMjBmMTc4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNmMyMGYxNzgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2YzIwZjE3OCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVzdWx0RGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YzIwZjE3OCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzZjMjBmMTc4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOGZlNDIxOSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVzdWx0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzdWx0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RWxlbWVudC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMThmZTQyMTlcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcxOGZlNDIxOScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzE4ZmU0MjE5JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOGZlNDIxOSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzE4ZmU0MjE5JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hYTA2YTg1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVzdWx0TGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzdWx0TGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYWEwNmE4NWVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdhYTA2YTg1ZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2FhMDZhODVlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hYTA2YTg1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2FhMDZhODVlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlMmU4MzA3JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwZTJlODMwN1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzBlMmU4MzA3JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMGUyZTgzMDcnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGUyZTgzMDcmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwZTJlODMwNycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YzJlNjgyZCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0luZGljYXRvci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNGMyZTY4MmRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0YzJlNjgyZCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzRjMmU2ODJkJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjMmU2ODJkJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNGMyZTY4MmQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODFjMjI5MmUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9SZWZlcmVuY2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjgxYzIyOTJlXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnODFjMjI5MmUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc4MWMyMjkyZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MWMyMjkyZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzgxYzIyOTJlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXN1bHRUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYzIxYzQ2ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVzdWx0VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzdWx0VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvUmVzdWx0VHlwZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiM2MyMWM0NmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCczYzIxYzQ2ZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzNjMjFjNDZlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXN1bHRUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYzIxYzQ2ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzNjMjFjNDZlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTJmZWQ1NCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGl0bGVEZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGl0bGVEZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvVGl0bGVEZXNjcmlwdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZDEyZmVkNTRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkMTJmZWQ1NCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2QxMmZlZDU0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTJmZWQ1NCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2QxMmZlZDU0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkRldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDdjMDZjMTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvbkRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDdjMDZjMTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwN2MwNmMxMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzA3YzA2YzEyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UcmFuc2FjdGlvbkRldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDdjMDZjMTImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwN2MwNmMxMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNTZjMTFlYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkNTZjMTFlYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2Q1NmMxMWVhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDU2YzExZWEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9uRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDU2YzExZWEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkNTZjMTFlYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25MaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzg3MjdjMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25MaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJjYzg3MjdjMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2NjODcyN2MyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnY2M4NzI3YzInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9uTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2M4NzI3YzImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdjYzg3MjdjMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWlkVHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGY5NmM5NmEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FpZFR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FpZFR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvQWlkVHlwZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZGY5NmM5NmFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkZjk2Yzk2YScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2RmOTZjOTZhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BaWRUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kZjk2Yzk2YSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2RmOTZjOTZhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjJhOGE3MzEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMjJhOGE3MzFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyMmE4YTczMScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzIyYThhNzMxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjJhOGE3MzEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyMmE4YTczMScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Yzc4NTMwNTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rpc2J1cnNlbWVudENoYW5uZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rpc2J1cnNlbWVudENoYW5uZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGlzYnVyc2VtZW50Q2hhbm5lbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYzc4NTMwNTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdjNzg1MzA1MicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2M3ODUzMDUyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNzg1MzA1MiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2M3ODUzMDUyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9GaW5hbmNlVHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTVjN2M1MmUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0ZpbmFuY2VUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9GaW5hbmNlVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZTVjN2M1MmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlNWM3YzUyZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2U1YzdjNTJlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9GaW5hbmNlVHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTVjN2M1MmUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdlNWM3YzUyZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRmxvd1R5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNDA2YWEzJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9GbG93VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRmxvd1R5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRmxvd1R5cGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBlNDA2YWEzXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGU0MDZhYTMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwZTQwNmFhMycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRmxvd1R5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlNDA2YWEzJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMGU0MDZhYTMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNWVmNjg1ZiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIzNWVmNjg1ZlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzM1ZWY2ODVmJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMzVlZjY4NWYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNWVmNjg1ZiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzM1ZWY2ODVmJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGEwOGRmNDYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOGEwOGRmNDZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4YTA4ZGY0NicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzhhMDhkZjQ2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGEwOGRmNDYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc4YTA4ZGY0NicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDNkNTM2ZDgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDNkNTM2ZDhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0M2Q1MzZkOCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQzZDUzNmQ4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00M2Q1MzZkOCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzQzZDUzNmQ4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBhMzBiYWEyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRSZWdpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBhMzBiYWEyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGEzMGJhYTInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwYTMwYmFhMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYTMwYmFhMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzBhMzBiYWEyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlZWJhYTQxJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjRlZWJhYTQxXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNGVlYmFhNDEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0ZWViYWE0MScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2VjdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZWViYWE0MSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzRlZWJhYTQxJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UaWVkU3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NzA4OTg0MSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGllZFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGllZFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9UaWVkU3RhdHVzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1NzA4OTg0MVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzU3MDg5ODQxJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTcwODk4NDEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RpZWRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU3MDg5ODQxJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNTcwODk4NDEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RyYW5zYWN0aW9uRGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjEyZmNjNjEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RyYW5zYWN0aW9uRGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVHJhbnNhY3Rpb25EYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RyYW5zYWN0aW9uRGF0ZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNjEyZmNjNjFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2MTJmY2M2MScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzYxMmZjYzYxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UcmFuc2FjdGlvbkRhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYxMmZjYzYxJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNjEyZmNjNjEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RyYW5zYWN0aW9uVHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjNmNjc0MjYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RyYW5zYWN0aW9uVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVHJhbnNhY3Rpb25UeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RyYW5zYWN0aW9uVHlwZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNjNmNjc0MjZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2M2Y2NzQyNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzYzZjY3NDI2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UcmFuc2FjdGlvblR5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzZjY3NDI2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNjNmNjc0MjYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1ZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNjk3MjgzNCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1ZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1ZhbHVlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxNjk3MjgzNFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzE2OTcyODM0JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMTY5NzI4MzQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1ZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNjk3MjgzNCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzE2OTcyODM0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BY3Rpdml0eVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGVkNWZkZDImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdGl2aXR5VXBsb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FjdGl2aXR5VXBsb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvQWN0aXZpdHlVcGxvYWQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBlZDVmZGQyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGVkNWZkZDInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwZWQ1ZmRkMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0aXZpdHlVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBlZDVmZGQyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMGVkNWZkZDInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0ltcG9ydExpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZDc4NzBhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbXBvcnRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ltcG9ydExpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2ltcG9ydC9JbXBvcnRMaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0MGQ3ODcwYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQwZDc4NzBhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDBkNzg3MGEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0ltcG9ydExpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZDc4NzBhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDBkNzg3MGEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDE0OGQzNyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW1wb3J0UGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW1wb3J0UGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2ltcG9ydC9JbXBvcnRQbGFjZWhvbGRlci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWQxNDhkMzdcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1ZDE0OGQzNycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVkMTQ4ZDM3JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JbXBvcnRQbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQxNDhkMzcmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1ZDE0OGQzNycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vTGlzdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhNjA4NDMyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9MaXN0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9MaXN0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0xpc3RFbGVtZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI5YTYwODQzMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzlhNjA4NDMyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnOWE2MDg0MzInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0xpc3RFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTYwODQzMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzlhNjA4NDMyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWRhNWYzNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3JnYW5pc2F0aW9uRGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vT3JnYW5pc2F0aW9uRGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGFkYTVmMzYmbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNGFkYTVmMzZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0YWRhNWYzNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzRhZGE1ZjM2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWRhNWYzNiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzRhZGE1ZjM2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDU0ZWE4MDMmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjQ1NGVhODAzXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNDU0ZWE4MDMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0NTRlYTgwMycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1NGVhODAzJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDU0ZWE4MDMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yODM5ZTA5OCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMjgzOWUwOThcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyODM5ZTA5OCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzI4MzllMDk4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjgzOWUwOTgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyODM5ZTA5OCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjZkMzEyYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL0RvY3VtZW50TGluay52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZWY2ZDMxMmFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlZjZkMzEyYScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2VmNmQzMTJhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmNmQzMTJhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignZWY2ZDMxMmEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNiZTg3NmQwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJjYmU4NzZkMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2NiZTg3NmQwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnY2JlODc2ZDAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNiZTg3NmQwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignY2JlODc2ZDAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlcG9ydGluZ09yZ0J1ZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjQ2N2QyZjEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlcG9ydGluZ09yZ0J1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvcnRpbmdPcmdCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdCdWRnZXQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI0NjdkMmYxXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjQ2N2QyZjEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyNDY3ZDJmMScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDY3ZDJmMSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzI0NjdkMmYxJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXBvcnRpbmdPcmdhbmlzYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5OTlhZWUyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXBvcnRpbmdPcmdhbmlzYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2OTk5YWVlMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzY5OTlhZWUyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNjk5OWFlZTInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njk5OWFlZTImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2OTk5YWVlMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04NWM5ZGMzZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiODVjOWRjM2VcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4NWM5ZGMzZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzg1YzlkYzNlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTg1YzlkYzNlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignODVjOWRjM2UnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RvdGFsQnVkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2MwZDMzYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVG90YWxCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVG90YWxCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEJ1ZGdldC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZDNjMGQzM2FcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkM2MwZDMzYScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2QzYzBkMzNhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Ub3RhbEJ1ZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNjMGQzM2EmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkM2MwZDMzYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVG90YWxFeHBlbmRpdHVyZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDY1NWY5NTEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RvdGFsRXhwZW5kaXR1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVG90YWxFeHBlbmRpdHVyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1RvdGFsRXhwZW5kaXR1cmUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjQ2NTVmOTUxXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNDY1NWY5NTEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0NjU1Zjk1MScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVG90YWxFeHBlbmRpdHVyZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDY1NWY5NTEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0NjU1Zjk1MScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUGFzc3dvcmRSZWNvdmVyeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzAzODVkYTNcIlxuY29uc3Qgc2NyaXB0ID0ge31cblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9yZXNldC9QYXNzd29yZFJlY292ZXJ5LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3MDM4NWRhM1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzcwMzg1ZGEzJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNzAzODVkYTMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Bhc3N3b3JkUmVjb3ZlcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwMzg1ZGEzXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzcwMzg1ZGEzJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXNldFBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2Yjc2NGJiJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXNldFBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zNmI3NjRiYiZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMzZiNzY0YmJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCczNmI3NjRiYicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzM2Yjc2NGJiJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXNldFBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM2Yjc2NGJiJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMzZiNzY0YmInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1YjQyY2M3JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXNldFBhc3N3b3JkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXNldFBhc3N3b3JkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYXNzd29yZC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDViNDJjYzdcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NWI0MmNjNycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ1YjQyY2M3JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXNldFBhc3N3b3JkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NWI0MmNjNyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzQ1YjQyY2M3JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TZXR0aW5nRGVmYXVsdEZvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRkODY0NjY3JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TZXR0aW5nRGVmYXVsdEZvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0ZDg2NDY2N1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzRkODY0NjY3JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNGQ4NjQ2NjcnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGQ4NjQ2NjcmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0ZDg2NDY2NycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vU2V0dGluZ1BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxYTdmZDg2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TZXR0aW5nUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU2V0dGluZ1BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zZXR0aW5nL1NldHRpbmdQYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI4MWE3ZmQ4NlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzgxYTdmZDg2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnODFhN2ZkODYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1NldHRpbmdQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MWE3ZmQ4NiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzgxYTdmZDg2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzMDc3MzA1JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2MzA3NzMwNVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzYzMDc3MzA1JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNjMwNzczMDUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjMwNzczMDUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2MzA3NzMwNScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vT3JnYW5pc2F0aW9uTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzViOTkwNjAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL09yZ2FuaXNhdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vT3JnYW5pc2F0aW9uTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9PcmdhbmlzYXRpb25MaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3NWI5OTA2MFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzc1Yjk5MDYwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNzViOTkwNjAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL09yZ2FuaXNhdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1Yjk5MDYwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzViOTkwNjAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FkbWluQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTk0YWNkNSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWRtaW5CYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWRtaW5CYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDU5NGFjZDVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NTk0YWNkNScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ1OTRhY2Q1JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BZG1pbkJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDU5NGFjZDUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0NTk0YWNkNScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVGFibGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNWIyNjM0YiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGFibGVMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhYmxlTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL1RhYmxlTGlzdC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDViMjYzNGJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwNWIyNjM0YicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzA1YjI2MzRiJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYWJsZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1YjI2MzRiJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMDViMjYzNGInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Fib3V0UGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5ZmE5MDRcIlxuY29uc3Qgc2NyaXB0ID0ge31cblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvQWJvdXRQYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3ZDlmYTkwNFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzdkOWZhOTA0JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnN2Q5ZmE5MDQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Fib3V0UGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5ZmE5MDRcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignN2Q5ZmE5MDQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2RhNWMxOSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRW1haWxWZXJpZmljYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3Y2RhNWMxOVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzdjZGE1YzE5JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnN2NkYTVjMTknLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2RhNWMxOSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzdjZGE1YzE5JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xN2U2MzJhNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCJAdnVlZm9ybS9tdWx0aXNlbGVjdC90aGVtZXMvZGVmYXVsdC5jc3M/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzc1wiXG5pbXBvcnQgXCIuL0lhdGlSZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTEmaWQ9MTdlNjMyYTYmbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVJlZ2lzdGVyUGFnZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMTdlNjMyYTZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcxN2U2MzJhNicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzE3ZTYzMmE2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xN2U2MzJhNiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzE3ZTYzMmE2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JYXRpU3RhbmRhcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU2ODQ5NGQwXCJcbmNvbnN0IHNjcmlwdCA9IHt9XG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlTdGFuZGFyZC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZTY4NDk0ZDBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlNjg0OTRkMCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2U2ODQ5NGQwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JYXRpU3RhbmRhcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU2ODQ5NGQwXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2U2ODQ5NGQwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kY2E2OTM5NiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUHVibGlzaGluZ0NoZWNrbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUHVibGlzaGluZ0NoZWNrbGlzdC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZGNhNjkzOTZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdkY2E2OTM5NicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2RjYTY5Mzk2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kY2E2OTM5NiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2RjYTY5Mzk2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyMjY2MjAwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCJAdnVlZm9ybS9tdWx0aXNlbGVjdC90aGVtZXMvZGVmYXVsdC5jc3M/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzc1wiXG5pbXBvcnQgXCIuL1JlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MSZpZD01MjI2NjIwMCZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9SZWdpc3RlclBhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjUyMjY2MjAwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTIyNjYyMDAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1MjI2NjIwMCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjI2NjIwMCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzUyMjY2MjAwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TdXBwb3J0UGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTZmZmY5ODBcIlxuY29uc3Qgc2NyaXB0ID0ge31cblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvU3VwcG9ydFBhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjU2ZmZmOTgwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTZmZmY5ODAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1NmZmZjk4MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU3VwcG9ydFBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ZmZmOTgwXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzU2ZmZmOTgwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWFlNDQ4NWFcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vV2VsY29tZVBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvV2VsY29tZVBhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImVhZTQ0ODVhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZWFlNDQ4NWEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdlYWU0NDg1YScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vV2VsY29tZVBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVhZTQ0ODVhXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2VhZTQ0ODVhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BZG1pbkZvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTVmOWI0YmJcIlxuY29uc3Qgc2NyaXB0ID0ge31cblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvQWRtaW5Gb290ZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjU1ZjliNGJiXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTVmOWI0YmInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1NWY5YjRiYicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWRtaW5Gb290ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1ZjliNGJiXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzU1ZjliNGJiJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Kb2luTm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjlmNTA4NlwiXG5jb25zdCBzY3JpcHQgPSB7fVxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9Kb2luTm93LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyNjlmNTA4NlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzI2OWY1MDg2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjY5ZjUwODYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0pvaW5Ob3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2OWY1MDg2XCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzI2OWY1MDg2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWExODYxZjNlJnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1NpZ25Jbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL1NpZ25Jbi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1hMTg2MWYzZSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtYTE4NjFmM2VcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvU2lnbkluLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJhMTg2MWYzZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2ExODYxZjNlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYTE4NjFmM2UnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1NpZ25Jbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTE4NjFmM2Umc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdhMTg2MWYzZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vV2ViRm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGQxMDY4MFwiXG5jb25zdCBzY3JpcHQgPSB7fVxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJGb290ZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjIwZDEwNjgwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjBkMTA2ODAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyMGQxMDY4MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vV2ViRm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGQxMDY4MFwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyMGQxMDY4MCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vV2ViSGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMGM5ZTBiMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vV2ViSGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9XZWJIZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvV2ViSGVhZGVyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxMGM5ZTBiMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzEwYzllMGIyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMTBjOWUwYjInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1dlYkhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTBjOWUwYjImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxMGM5ZTBiMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CdXR0b25Db21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0J1dHRvbkNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZXNjcmlwdGlvbkZvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rlc2NyaXB0aW9uRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JNZXNzYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JQb3BVcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSG92ZXJUZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Mb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTmF2RHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL05hdkRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BvcHVwTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BvcHVwTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmFkaWFsUHJvZ3Jlc3NCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ub2FzdE1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZWxldGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVsZXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1B1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9VblB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVW5QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVsZXRlQWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0RlbGV0ZUFjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Vycm9yTGlzdHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0hhdmVOb3RBZGRlZFlldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSGF2ZU5vdEFkZGVkWWV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1N0aWNreUVycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0VsZW1lbnRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRWxlbWVudFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJldmlvdXNseVB1Ymxpc2hlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0NyZWF0ZU1vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Vycm9ySXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1B1Ymxpc2hTZWxlY3RlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QdWJsaXNoU2VsZWN0ZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWZyZXNoVG9hc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVmcmVzaFRvYXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVmFsaWRhdGlvbkVycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlEYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eURhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Db250YWN0SW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ29udGFjdEluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSWF0aUlkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0lhdGlJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0xlZ2FjeURhdGEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0xlZ2FjeURhdGEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0xvY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL090aGVySWRlbnRpZmllci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3RoZXJJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BhcnRpY2lwYXRpbmdPcmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BhcnRpY2lwYXRpbmdPcmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGxhbm5lZERpc2J1cnNlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUG9saWN5TWFya2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Qb2xpY3lNYXJrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVsYXRlZEFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWxhdGVkQWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2VjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbmRpY2F0b3JEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvckRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbmRpY2F0b3JMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbmRpY2F0b3JMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BZ2dyZWdhdGlvblN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CYXNlbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQmFzZWxpbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvckFzY2VuZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL01lYXN1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL01lYXN1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGVyaW9kLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0aWVzRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRWxlbWVudHNOb3RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbGVtZW50c05vdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRW1wdHlBY3Rpdml0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRW1wdHlBY3Rpdml0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2lkZWJhckhlbHBCbG9jay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2lkZWJhckhlbHBCbG9jay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGVyaW9kc0xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BlcmlvZHNMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdHVhbFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3R1YWxWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYXJnZXRWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFyZ2V0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHREZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdFR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdFR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGl0bGVEZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGl0bGVEZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25EZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25MaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWlkVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWlkVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9GaW5hbmNlVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRmluYW5jZVR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRmxvd1R5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Zsb3dUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjZWl2ZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaWVkU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaWVkU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9uRGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25EYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9uVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25UeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1ZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9WYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eVVwbG9hZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eVVwbG9hZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0ltcG9ydExpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW1wb3J0TGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGlzdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGlzdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlcG9ydGluZ09yZ0J1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXBvcnRpbmdPcmdhbmlzYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVG90YWxCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVG90YWxCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RvdGFsRXhwZW5kaXR1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXNldFBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXNldFBhc3N3b3JkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXNldFBhc3N3b3JkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NldHRpbmdQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TZXR0aW5nUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PcmdhbmlzYXRpb25MaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BZG1pbkJhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BZG1pbkJhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhYmxlTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYWJsZUxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRW1haWxWZXJpZmljYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NpZ25Jbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9XZWJIZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1dlYkhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1dlbGNvbWVQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1dlbGNvbWVQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwidmFyIG1hcCA9IHtcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X2RhdGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvYWN0aXZpdHlfZGF0ZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3Njb3BlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3Njb3BlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvYWN0aXZpdHlfc3RhdHVzLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3N0YXR1cy5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2J1ZGdldC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9idWRnZXQuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9idWlsZGluZy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9idWlsZGluZy5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2NhcGl0YWxfc3BlbmQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY2FwaXRhbF9zcGVuZC5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2NvbGxhYm9yYXRpb25fdHlwZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb2xsYWJvcmF0aW9uX3R5cGUuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9jb25kaXRpb25zLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbmRpdGlvbnMuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9jb250YWN0X2luZm8uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY29udGFjdF9pbmZvLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvY291bnRyeV9idWRnZXRfaXRlbXMuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY291bnRyeV9idWRnZXRfaXRlbXMuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9jcnMtYWRkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Nycy1hZGQuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2FpZF90eXBlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2RlZmF1bHRfYWlkX3R5cGUuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2ZpbmFuY2VfdHlwZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2ZpbmFuY2VfdHlwZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2RlZmF1bHRfZmxvd190eXBlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2RlZmF1bHRfZmxvd190eXBlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvZGVzY3JpcHRpb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZGVzY3JpcHRpb24uc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9kb2N1bWVudF9saW5rLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2RvY3VtZW50X2xpbmsuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9odW1hbml0YXJpYW5fc2NvcGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvaHVtYW5pdGFyaWFuX3Njb3BlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvaWF0aV9pZGVudGlmaWVyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2lhdGlfaWRlbnRpZmllci5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2luZGljYXRvci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9pbmRpY2F0b3Iuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9sZWdhY3lfZGF0YS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9sZWdhY3lfZGF0YS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2xvY2F0aW9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2xvY2F0aW9uLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvb3RoZXJfaWRlbnRpZmllci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9vdGhlcl9pZGVudGlmaWVyLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcGFydGljaXBhdGluZ19vcmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcGFydGljaXBhdGluZ19vcmcuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9wZXJpb2Quc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcGVyaW9kLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcGxhbm5lZF9kaXNidXJzZW1lbnQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcGxhbm5lZF9kaXNidXJzZW1lbnQuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9wb2xpY3lfbWFya2VyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BvbGljeV9tYXJrZXIuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVjaXBpZW50X3JlZ2lvbi5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3JlbGF0ZWRfYWN0aXZpdHkuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVsYXRlZF9hY3Rpdml0eS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3JlcG9ydGluZ19vcmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVwb3J0aW5nX29yZy5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZXN1bHQuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZXN1bHRzLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdHMuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9zZWN0b3Iuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvc2VjdG9yLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvdGFnLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3RhZy5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3RpdGxlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3RpdGxlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvdHJhbnNhY3Rpb25zLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3RyYW5zYWN0aW9ucy5zdmdcIixcblx0XCIuL2FkZC1tb3JlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FkZC1tb3JlLnN2Z1wiLFxuXHRcIi4vYWRkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FkZC5zdmdcIixcblx0XCIuL2FsZXJ0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FsZXJ0LnN2Z1wiLFxuXHRcIi4vYWxpZ24tY2VudGVyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FsaWduLWNlbnRlci5zdmdcIixcblx0XCIuL2FsaWduLXJpZ2h0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FsaWduLXJpZ2h0LnN2Z1wiLFxuXHRcIi4vYXBwcm92ZWQtY2xvdWQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXBwcm92ZWQtY2xvdWQuc3ZnXCIsXG5cdFwiLi9hcnJvdy1kb3duLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LWRvd24uc3ZnXCIsXG5cdFwiLi9hcnJvdy1sZWZ0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LWxlZnQuc3ZnXCIsXG5cdFwiLi9hcnJvdy1yaWdodC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hcnJvdy1yaWdodC5zdmdcIixcblx0XCIuL2Fycm93LXNob3J0LWxlZnQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXJyb3ctc2hvcnQtbGVmdC5zdmdcIixcblx0XCIuL2FzY2VuZGluZy1hcnJvdy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hc2NlbmRpbmctYXJyb3cuc3ZnXCIsXG5cdFwiLi9iaWxsLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2JpbGwuc3ZnXCIsXG5cdFwiLi9ib3guc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYm94LnN2Z1wiLFxuXHRcIi4vYnVkZ2V0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2J1ZGdldC5zdmdcIixcblx0XCIuL2J1aWxkaW5nLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2J1aWxkaW5nLnN2Z1wiLFxuXHRcIi4vY2FuY2VsLWNsb3VkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NhbmNlbC1jbG91ZC5zdmdcIixcblx0XCIuL2NoZWNrLWNpcmNsZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVjay1jaXJjbGUuc3ZnXCIsXG5cdFwiLi9jaGVja2JveC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVja2JveC5zdmdcIixcblx0XCIuL2NoZWNrZWQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2hlY2tlZC5zdmdcIixcblx0XCIuL2NoZXZyb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2hldnJvbi5zdmdcIixcblx0XCIuL2Nsb3NlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Nsb3NlLnN2Z1wiLFxuXHRcIi4vY29weXJpZ2h0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NvcHlyaWdodC5zdmdcIixcblx0XCIuL2NvcmUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY29yZS5zdmdcIixcblx0XCIuL2RlZmF1bHQtMS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kZWZhdWx0LTEuc3ZnXCIsXG5cdFwiLi9kZWZhdWx0LTIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0yLnN2Z1wiLFxuXHRcIi4vZGVsZXRlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RlbGV0ZS5zdmdcIixcblx0XCIuL2Rlc2NlbmRpbmctYXJyb3cuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVzY2VuZGluZy1hcnJvdy5zdmdcIixcblx0XCIuL2RvY3VtZW50LXdyaXRlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RvY3VtZW50LXdyaXRlLnN2Z1wiLFxuXHRcIi4vZG91YmxlLXRpY2suc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG91YmxlLXRpY2suc3ZnXCIsXG5cdFwiLi9kb3dubG9hZC1maWxlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Rvd25sb2FkLWZpbGUuc3ZnXCIsXG5cdFwiLi9kb3dubG9hZC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kb3dubG9hZC5zdmdcIixcblx0XCIuL2Ryb3Bkb3duLWFycm93LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Ryb3Bkb3duLWFycm93LnN2Z1wiLFxuXHRcIi4vZWRpdC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9lZGl0LnN2Z1wiLFxuXHRcIi4vZXh0ZXJuYWwuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZXh0ZXJuYWwuc3ZnXCIsXG5cdFwiLi9leWUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZXllLnN2Z1wiLFxuXHRcIi4vZm9sZGVyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2ZvbGRlci5zdmdcIixcblx0XCIuL2Zvb3Rlci1sb2dvLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Zvb3Rlci1sb2dvLnN2Z1wiLFxuXHRcIi4vZ3JvdXAuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZ3JvdXAuc3ZnXCIsXG5cdFwiLi9oZWFkZXItbG9nby5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oZWFkZXItbG9nby5zdmdcIixcblx0XCIuL2hlYWRwaG9uZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oZWFkcGhvbmUuc3ZnXCIsXG5cdFwiLi9oZWxwLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hlbHAuc3ZnXCIsXG5cdFwiLi9oaXN0b3J5LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hpc3Rvcnkuc3ZnXCIsXG5cdFwiLi9pYy12ZXJpZmljYXRpb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvaWMtdmVyaWZpY2F0aW9uLnN2Z1wiLFxuXHRcIi4vbGVmdC1hcnJvdy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sZWZ0LWFycm93LnN2Z1wiLFxuXHRcIi4vbG9nby13aGl0ZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sb2dvLXdoaXRlLnN2Z1wiLFxuXHRcIi4vbG9nby5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sb2dvLnN2Z1wiLFxuXHRcIi4vbG9nb3V0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2xvZ291dC5zdmdcIixcblx0XCIuL21haWwuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbWFpbC5zdmdcIixcblx0XCIuL21vb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbW9vbi5zdmdcIixcblx0XCIuL25vdGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbm90ZS5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9idWlsZGluZy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvYnVpbGRpbmcuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvZGVzY3JpcHRpb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2RvY3VtZW50X2xpbmsuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2RvY3VtZW50X2xpbmsuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvbmFtZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvbmFtZS5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdfaWRlbnRpZmllci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvb3JnX2lkZW50aWZpZXIuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvb3JnYW5pc2F0aW9uX2lkZW50aWZpZXIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL29yZ2FuaXNhdGlvbl9pZGVudGlmaWVyLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL29yZ2FuaXphdGlvbl9pZGVudGlmaWVyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbml6YXRpb25faWRlbnRpZmllci5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeV9idWRnZXQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlY2lwaWVudF9jb3VudHJ5X2J1ZGdldC5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfb3JnX2J1ZGdldC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X29yZ19idWRnZXQuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X3JlZ2lvbl9idWRnZXQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb25fYnVkZ2V0LnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlcG9ydGluZ19vcmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlcG9ydGluZ19vcmcuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVwb3J0aW5nX29yZ2FuaXNhdGlvbi5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVwb3J0aW5nX29yZ2FuaXNhdGlvbi5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy90aXRsZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvdGl0bGUuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvdG90YWxfYnVkZ2V0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy90b3RhbF9idWRnZXQuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvdG90YWxfZXhwZW5kaXR1cmUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RvdGFsX2V4cGVuZGl0dXJlLnN2Z1wiLFxuXHRcIi4vcGFuZWwtc2VhcmNoLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BhbmVsLXNlYXJjaC5zdmdcIixcblx0XCIuL3BsdXMuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcGx1cy5zdmdcIixcblx0XCIuL3B1Ymxpc2guc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcHVibGlzaC5zdmdcIixcblx0XCIuL3B3LWxvY2suc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcHctbG9jay5zdmdcIixcblx0XCIuL3F1ZXN0aW9uLW1hcmsuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcXVlc3Rpb24tbWFyay5zdmdcIixcblx0XCIuL3JlZC1jcm9zcy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtY3Jvc3Muc3ZnXCIsXG5cdFwiLi9yZWQtZG90LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3JlZC1kb3Quc3ZnXCIsXG5cdFwiLi9yZWRvLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3JlZG8uc3ZnXCIsXG5cdFwiLi9yaWdodC1hcnJvdy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yaWdodC1hcnJvdy5zdmdcIixcblx0XCIuL3NlYXJjaC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9zZWFyY2guc3ZnXCIsXG5cdFwiLi9zZXR0aW5nLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NldHRpbmcuc3ZnXCIsXG5cdFwiLi9zaGllbGQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2hpZWxkLnN2Z1wiLFxuXHRcIi4vc21pbGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc21pbGUuc3ZnXCIsXG5cdFwiLi9zdGFyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3N0YXIuc3ZnXCIsXG5cdFwiLi90aWNrLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3RpY2suc3ZnXCIsXG5cdFwiLi90aW1lcy1jaXJjbGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdGltZXMtY2lyY2xlLnN2Z1wiLFxuXHRcIi4vdHdpdHRlci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90d2l0dGVyLnN2Z1wiLFxuXHRcIi4vdXBsb2FkLWZpbGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdXBsb2FkLWZpbGUuc3ZnXCIsXG5cdFwiLi91c2VyLXByb2ZpbGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdXNlci1wcm9maWxlLnN2Z1wiLFxuXHRcIi4vdXNlci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy91c2VyLnN2Z1wiLFxuXHRcIi4vd2FybmluZy1hY3Rpdml0eS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy93YXJuaW5nLWFjdGl2aXR5LnN2Z1wiLFxuXHRcIi4vd2FybmluZy1maWxsLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmctZmlsbC5zdmdcIixcblx0XCIuL3dhcm5pbmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvd2FybmluZy5zdmdcIixcblx0XCIuL3lvdXR1YmUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcveW91dHViZS5zdmdcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKiRcIjsiLCIvKiAoaWdub3JlZCkgKi8iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwiXyIsImxhYmVsIiwic2VudCIsInQiLCJ0cnlzIiwib3BzIiwiZiIsInkiLCJnIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsInYiLCJvcCIsIlR5cGVFcnJvciIsImNhbGwiLCJwb3AiLCJsZW5ndGgiLCJwdXNoIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZ1ZV8xIiwicmVxdWlyZSIsInZ1ZV8yIiwiYXhpb3NfMSIsImNvcmVfMSIsIkNyZWF0ZU1vZGFsX3Z1ZV8xIiwiVG9hc3RNZXNzYWdlX3Z1ZV8xIiwiZGVmaW5lQ29tcG9uZW50IiwiX19uYW1lIiwicHJvcHMiLCJ1c2VyIiwidHlwZSIsInJlcXVpcmVkIiwib3JnYW5pemF0aW9uIiwidmFsaWRhdG9yIiwic3VwZXJBZG1pbiIsIkJvb2xlYW4iLCJzZXR1cCIsIl9fcHJvcHMiLCJfYSIsIl90aGlzIiwiX2IiLCJleHBvc2UiLCJzaG93VXNlckRyb3Bkb3duIiwicmVmIiwidG9hc3RWaXNpYmlsaXR5Iiwic2hvd1NpZGViYXIiLCJ0b2FzdE1lc3NhZ2UiLCJ0b2FzdFR5cGUiLCJkYXRhIiwicmVhY3RpdmUiLCJsYW5ndWFnZU5hdkxpQ2xhc3NlcyIsImxhbmd1YWdlTmF2QW5jaG9yQ2xhc3NlcyIsIm1lbnVOYXZMaUNsYXNzZXMiLCJtZW51TmF2QW5jaG9yQ2xhc3NlcyIsImxhbmd1YWdlcyIsImxhbmd1YWdlIiwicGVybWFsaW5rIiwiYWN0aXZlIiwibWVudXMiLCJuYW1lIiwibGlDbGFzcyIsIl9jIiwidXNlVG9nZ2xlIiwibW9kYWxWYWx1ZSIsIm1vZGFsVG9nZ2xlIiwidG9hc3QiLCJtZXNzYWdlIiwic2V0VGltZW91dCIsImlzVG91Y2hEZXZpY2UiLCJjb21wdXRlZCIsIndpbmRvdyIsIm5hdmlnYXRvciIsIm1heFRvdWNoUG9pbnRzIiwiVG9nZ2xlTW9kZWwiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwid2F0Y2giLCJzaWRlYmFyIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzdHlsZSIsIm92ZXJmbG93IiwiY2hhbmdlQWN0aXZlTWVudSIsInBhdGgiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiZm9yRWFjaCIsIm1lbnUiLCJrZXkiLCJpbmNsdWRlcyIsInBhIiwidXNlU3RvcmFnZSIsInB1Ymxpc2hpbmdBY3Rpdml0aWVzIiwiZ2V0SXRlbSIsImxvZ291dCIsInBvc3QiLCJyZXMiLCJzdGF0dXMiLCJocmVmIiwic2VhcmNoVmFsdWUiLCJjdXJyZW50VVJMIiwicXVlcnlTdHJpbmciLCJzZWFyY2giLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJnZXQiLCJzcGlubmVyIiwic2VhcmNoRnVuY3Rpb24iLCJ1cmwiLCJwYXJhbSIsInJlcGxhY2UiLCJzb3J0aW5nUGFyYW0iLCJxdWVyeVN0cmluZ0FyciIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwiY29uY2F0Iiwib25Nb3VudGVkIiwib25Vbm1vdW50ZWQiLCJfX3JldHVybmVkX18iLCJDcmVhdGVNb2RhbCIsIlRvYXN0IiwiZW51bWVyYWJsZSIsInRpdGxlXzEiLCJjb21wb25lbnRzIiwidG9SZWZzIiwiYnJlYWRjcnVtYkRhdGEiLCJnZXRBY3Rpdml0eVRpdGxlIiwidGV4dCIsIlN0cmluZyIsImljb24iLCJsaW5rIiwiYnRuVHlwZSIsInZ1ZV8zIiwiTG9hZGVyX3Z1ZV8xIiwiaXNFbXB0eSIsInNob3ciLCJoYXNFcnJvcnMiLCJlcnJvckNvdW50IiwidG9hc3REYXRhIiwiaW5qZWN0IiwiZXJyb3JEYXRhIiwiYWNjb3VudF92ZXJpZmllZCIsInB1Ymxpc2hlcl9hY3RpdmUiLCJkZWZhdWx0X3NldHRpbmciLCJwdWJsaXNoZXJfc2V0dGluZyIsInRva2VuX3N0YXR1cyIsImlzTG9hZGVyVmlzaWJsZSIsInJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwidmlzaWJpbGl0eSIsInN1Y2Nlc3MiLCJlcnJvciIsImFsbCIsInNwcmVhZCIsInNldHRpbmdfcmVzIiwidXNlcl9yZXMiLCJvcmdfcmVzIiwicmVzcG9uc2UiLCJ1c2VyX3Jlc3BvbnNlIiwib3JnX3Jlc3BvbnNlIiwiZGVmYXVsdF9zdGF0dXMiLCJwdWJsaXNoZXJfc3RhdHVzIiwiZ3JvdXBlZEVycm9yIiwiaW5kZXhPZiIsInZhbHVlcyIsIlRyYW5zaXRpb25Sb290IiwiTG9hZGVyIiwiQXJyYXkiLCJ0aXRsZSIsImVtaXRzIiwiZW1pdCIsImNsb3NlIiwiaG92ZXJUZXh0Iiwid2lkdGgiLCJwb3NpdGlvbiIsImljb25TaXplIiwic2hvd0lhdGlSZWZlcmVuY2UiLCJidG5UZXh0IiwiYnRuTGluayIsIm1vZGFsQWN0aXZlIiwidnVlM19yYWRpYWxfcHJvZ3Jlc3NfMSIsIlJhZGlhbFByb2dyZXNzQmFyIiwicGVyY2VudCIsIk51bWJlciIsImNvbXBsZXRlZFBlcmNlbnQiLCJ0b3RhbFBlcmNlbnQiLCJhY3RpdmVfcGFnZSIsInVwZGF0ZUFjdGl2ZVBhZ2UiLCJwYWdlIiwiY2hhbmdlUGFnZSIsInBhZ2VOdW0iLCJsYXN0X3BhZ2UiLCJuZXh0UGFnZSIsInByZXZpb3VzUGFnZSIsImNsYXNzTmFtZSIsIkJ1dHRvbkNvbXBvbmVudF92dWVfMSIsIlBvcHVwTW9kYWxfdnVlXzEiLCJQcm9ncmVzc0xvYWRlcl92dWVfMSIsImluZGV4XzEiLCJzdG9yZSIsInVzZVN0b3JlIiwiZGVsZXRlVmFsdWUiLCJkZWxldGVUb2dnbGUiLCJsb2FkZXIiLCJkZWxldGVGdW5jdGlvbiIsImRlbGV0ZUVuZFBvaW50Iiwic3RhdGUiLCJzZWxlY3RlZEFjdGl2aXRpZXMiLCJyZWxvYWQiLCJCdG5Db21wb25lbnQiLCJNb2RhbCIsImRlc2lnbiIsInN0eWxlVHlwZSIsImNsYXNzZXMiLCJzaG93XzEiLCJsaW5rZWRUb0lhdGkiLCJjb3JlQ29tcGxldGVkIiwiYWN0aXZpdHlJZCIsImRldGFpbFN0b3JlIiwiaWQiLCJwdWJsaXNoVmFsdWUiLCJwdWJsaXNoVG9nZ2xlIiwicHVibGlzaFN0ZXAiLCJjb3JlRWxlbWVudFN0YXR1cyIsImxvYWRlclRleHQiLCJyZXNldFB1Ymxpc2hTdGVwIiwicHVibGlzaFN0YXRlQ2hhbmdlIiwicHVibGlzaFN0YXRlIiwiZGVzY3JpcHRpb24iLCJhbGVydFN0YXRlIiwiZXJyIiwiY3JpdGljYWxOdW1iZXIiLCJlcnJvck51bWJlciIsIndhcm5pbmdOdW1iZXIiLCJzdGVwUGx1c09uZSIsInN0ZXBNaW51c09uZSIsInZhbGlkYXRvckZ1bmN0aW9uIiwiZXJyb3JzIiwiZGlzcGF0Y2giLCJjcml0Iiwic3VtbWFyeSIsImNyaXRpY2FsIiwid2FybmluZyIsImNoZWNrUHVibGlzaCIsInB1Ymxpc2hGdW5jdGlvbiIsInB1Ymxpc2hTdGF0dXMiLCJsaW5rZWRfdG9faWF0aSIsInVucHVibGlzaFZhbHVlIiwidW5wdWJsaXNoVG9nZ2xlIiwidW5QdWJsaXNoRnVuY3Rpb24iLCJpdGVtSWQiLCJpdGVtVHlwZSIsImVycm9yVHlwZSIsImJnQ29sb3IiLCJpY29uQ29sb3IiLCJ0b2dnbGUiLCJhY2NvcmRpb25Ub2dnbGUiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwicGFyZW50RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJlbEhlaWdodCIsImNsaWVudEhlaWdodCIsImNzc1RleHQiLCJ1cGRhdGVFcnJvckNvdW50TWVzc2FnZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwiTGlua192dWVfMSIsIkJ0biIsIm1hbmRhdG9yeUVsZW1lbnRTdGF0dXMiLCJpc19wdWJsaXNoZWQiLCJCcmVhZENydW1iX3Z1ZV8xIiwiQnJlYWRjcnVtYiIsImJhY2tMaW5rIiwiY2hhbmdlVGV4dCIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsIkVycm9yTGlzdHNfdnVlXzEiLCJlcnJvclZhbHVlIiwiZXJyb3JUb2dnbGUiLCJ0ZW1wRGF0YSIsIndhcm5pbmdzIiwidXBkYXRlVGVtcE1lc3NhZ2UiLCJlcnJvckRhdGFQcm9wcyIsIl9pIiwiZXJyb3JEYXRhUHJvcHNfMSIsInNldmVyaXR5IiwiRXJyb3JMaXN0cyIsImNvbG9yIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwiaSIsImFyZ3VtZW50cyIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsIm11bHRpc2VsZWN0XzEiLCJjdXJyZW5jaWVzIiwiYnVkZ2V0Tm90UHJvdmlkZWQiLCJodW1hbml0YXJpYW4iLCJkZWZhdWx0VmFsdWVzIiwiYnVkZ2V0X25vdF9wcm92aWRlZCIsImRlZmF1bHRfY3VycmVuY3kiLCJkZWZhdWx0X2xhbmd1YWdlIiwiaGllcmFyY2h5IiwiZGVmYXVsdEVycm9ycyIsImVycm9yUmVzZXQiLCJkZWZhdWx0RGF0YSIsImxvYWRlclZpc2liaWxpdHkiLCJzdWJtaXRGb3JtIiwicHV0IiwiTXVsdGlzZWxlY3QiLCJJbmRleF8xIiwiSG92ZXJUZXh0X3Z1ZV8xIiwiUmFkaWFsUHJvZ3Jlc3NCYXJfdnVlXzEiLCJQdWJsaXNoQnV0dG9uX3Z1ZV8xIiwiVW5QdWJsaXNoQnV0dG9uX3Z1ZV8xIiwiRGVsZXRlQnV0dG9uX3Z1ZV8xIiwiU3RpY2t5RXJyb3JzX3Z1ZV8xIiwiRXJyb3JQb3BVcF92dWVfMSIsIkFjdGl2aXRpZXNFbGVtZW50c192dWVfMSIsIkFjdGl2aXR5RWxlbWVudF92dWVfMSIsIlByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEiLCJIb3ZlclRleHQiLCJQcm9ncmVzc0JhciIsIkVsZW1lbnRzIiwiQWN0aXZpdHlFbGVtZW50IiwiUmVzdWx0IiwiUHVibGlzaCIsIkVycm9ycyIsIlVuUHVibGlzaCIsIkRlbGV0ZUJ1dHRvbiIsIlByZXZpb3VzbHlQdWJsaXNoZWQiLCJFcnJvclBvcFVwIiwiZWxlbWVudHMiLCJncm91cHMiLCJhY3Rpdml0eSIsInByb2dyZXNzIiwidHlwZXMiLCJyZXN1bHRzIiwidHJhbnNhY3Rpb25zIiwiaWF0aVZhbGlkYXRvclJlc3BvbnNlIiwiaW5kZXhTdG9yZSIsInBvc2l0aW9uWSIsInNjcmVlbldpZHRoIiwiZG93bmxvYWRWYWx1ZSIsImRvd25sb2FkVG9nZ2xlIiwidG9nZ2xlU2lkZWJhciIsImhhbmRsZVNjcm9sbCIsInNjcm9sbFkiLCJpc3RvcFZpc2libGUiLCJpbm5lcldpZHRoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNhbGNXaWR0aCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsImlnbm9yZVRvYXN0VXBkYXRlIiwiX2QiLCJncm91cGVkRGF0YSIsImFjdGl2aXR5UHJvcHMiLCJhY3Rpdml0aWVzIiwiZWxlbWVudFByb3BzIiwic3RhdHVzUHJvcHMiLCJ0cmFuc2FjdGlvblByb3BzIiwia2V5cyIsIm1hcCIsImZsYWciLCJrIiwidG9TdHJpbmciLCJwYWdlVGl0bGUiLCJmb3VuZCIsImZpbmQiLCJjdXJyZW50TGFuZ3VhZ2UiLCJuYXJyYXRpdmUiLCJmb3JtYXRUaXRsZSIsImlnbm9yZVVwZGF0ZXMiLCJ3YXRjaElnbm9yYWJsZSIsInVuZGVmaW5lZCIsImZsdXNoIiwicHJvdmlkZSIsInZhbGlkYXRpb25SZXN1bHQiLCJFbXB0eUFjdGl2aXR5X3Z1ZV8xIiwiVGFibGVMYXlvdXRfdnVlXzEiLCJUYWJsZVBhZ2luYXRpb25fdnVlXzEiLCJQYWdlVGl0bGVfdnVlXzEiLCJFcnJvck1lc3NhZ2VfdnVlXzEiLCJFbXB0eUFjdGl2aXR5IiwiUGFnZVRpdGxlIiwiUGFnaW5hdGlvbiIsIlRhYmxlTGF5b3V0IiwiRXJyb3JNZXNzYWdlIiwiaXNMb2FkaW5nIiwiZW5kcG9pbnQiLCJzaG93RW1wdHlUZW1wbGF0ZSIsInNob3dCdXR0b25zIiwic2hvd09ySGlkZSIsImZldGNoQWN0aXZpdGllcyIsInJlZnJlc2hUb2FzdE1zZyIsInJlZnJlc2hNZXNzYWdlVHlwZSIsInJlZnJlc2hNZXNzYWdlIiwiZm9ybURhdGEiLCJhY3Rpdml0eV9pZGVudGlmaWVyIiwiY2xvc2VNb2RhbCIsInN0b3JlQWN0aXZpdHkiLCJwYVN0b3JhZ2UiLCJjb21wbGV0ZWQiLCJoYXNGYWlsZWRBY3Rpdml0aWVzIiwiaWRzIiwiaW50ZXJ2YWxJRCIsImJ1bGtQdWJsaXNoU3RhdHVzIiwibmV3VmFsdWUiLCJjbGVhckludGVydmFsIiwiZmFpbGVkQWN0aXZpdGllcyIsInNldEludGVydmFsIiwib3JnYW5pemF0aW9uX2lkIiwiam9iX2JhdGNoX3V1aWQiLCJvcGVuIiwidG9nZ2xlV2luZG93IiwiY2xvc2VzdCIsImNsb3NlV2luZG93IiwibmVzdGVkT2JqZWN0IiwiZmFpbGVkQWN0aXZpdGllc0lEIiwiYXNBcnJheURhdGEiLCJlbnRyaWVzIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJhY3Rpdml0eV9pZCIsImZhaWxlZEFjdGl2aXRpZXNEYXRhIiwiZnJvbUVudHJpZXMiLCJyZXRyeVB1Ymxpc2hpbmciLCJWYWxpZGF0aW9uRXJyb3JzX3Z1ZV8xIiwiQnVsa1B1Ymxpc2hpbmdfdnVlXzEiLCJwdWJsaXNoQWxlcnRWYWx1ZSIsInB1Ymxpc2hBbGVydFRvZ2dsZSIsImJ1bGtQdWJsaXNoU3RlcCIsInBvcFVwV2lkdGhDaGFuZ2UiLCJkaXNwbGF5VG9hc3QiLCJjb3JlQ29tcGxldGVkQWN0aXZpdGllcyIsImNvcmVJbkNvbXBsZXRlZEFjdGl2aXRpZXMiLCJ2ZXJpZnlDb3JlRWxlbWVudHMiLCJjb21wbGV0ZSIsImluY29tcGxldGUiLCJ2YWxpZGF0aW9uRXJyb3JzIiwidmFsaWRhdGVBY3Rpdml0aWVzIiwic3RhcnRCdWxrUHVibGlzaCIsIlZhbGlkYXRpb25FcnJvcnMiLCJCdWxrUHVibGlzaGluZyIsImNsYXNzTmFtZTIiLCJFcnJvckl0ZW1fdnVlXzEiLCJjcml0aWNhbE1lc3NhZ2UiLCJ3YXJuaW5nTWVzc2FnZSIsIm5vRXJyb3JNZXNzYWdlIiwiRXJyb3JJdGVtIiwibW9tZW50XzEiLCJmb3JtYXREYXRlIiwiZGF0ZSIsImZvcm1hdCIsImRhdGVGb3JtYXRfMSIsImRhdGVGb3JtYXQiLCJyb3VuZEZsb2F0IiwibnVtIiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJIYXZlTm90QWRkZWRZZXRfdnVlXzEiLCJOb3RZZXQiLCJ0b29sdGlwIiwicmVzdWx0RGF0YSIsImNvbnRlbnQiLCJtb21lbnQiLCJUaXRsZUVsZW1lbnQiLCJNZWFzdXJlIiwiQXNjZW5kaW5nIiwiQWdncmVnYXRpb25TdGF0dXMiLCJEZXNjcmlwdGlvbiIsIlJlZmVyZW5jZSIsIkJhc2VsaW5lIiwiRG9jdW1lbnRMaW5rIiwiUGVyaW9kIiwicmVzdWx0VGl0bGUiLCJpbmRpY2F0b3IiLCJwZXJpb2QiLCJlbGVtZW50IiwibGlua0NsYXNzZXMiLCJpbmRpY2F0b3JEYXRhIiwicGVyaW9kRGF0YSIsInBhcmVudERhdGEiLCJyZXN1bHRfaWQiLCJhY3Rpdml0eVRpdGxlIiwiYWN0aXZpdHlMaW5rIiwicmVzdWx0SWQiLCJyZXN1bHRUaXRsZWQiLCJyZXN1bHRMaW5rIiwiaW5kaWNhdG9yTGluayIsImluZGljYXRvclRpdGxlIiwiRGVsZXRlQWN0aW9uX3Z1ZV8xIiwiRGVsZXRlQWN0aW9uIiwiaW5kaWNhdG9ycyIsImluZGljYXRvcnNEYXRhIiwiaGFuZGxlTmF2aWdhdGUiLCJmZXRjaExpc3RpbmdzIiwic3RhdHVzRGF0YSIsImJhc2VUeXBlIiwiZWxlbWVudFNwYWNpbmciLCJiYXNlbGluZSIsImxvY2F0aW9ucyIsIml0ZW0iLCJyZWZlcmVuY2UiLCJsYXN0TG9jYXRpb24iLCJkaW1lbnNpb25zIiwiZGVzY1R5cGUiLCJkZXNjcmlwdGlvbkRhdGEiLCJhbGlnbm1lbnQiLCJkbERhdGEiLCJtZWFzdXJlVHlwZSIsIm1lYXN1cmVEYXRhIiwicmVmVHlwZSIsInJlZkRhdGEiLCJ0aXRsZVR5cGUiLCJ0aXRsZURhdGEiLCJjb3JlRWxlbWVudHNfMSIsImRyb3Bkb3duIiwiZHJvcGRvd25CdG4iLCJzZWFyY2hCdG5WYWx1ZSIsInNlYXJjaEJ0blRvZ2dsZSIsImVsZW1lbnRJY29ucyIsIm5vdF9jb21wbGV0ZWQiLCJjb3JlIiwiZmlsdGVyZWRFbGVtZW50cyIsInRvTG93ZXJDYXNlIiwianVzdFN0cmluZ3MiLCJhY3Rpdml0eUNvcmVFbGVtZW50cyIsImRyb3Bkb3duRmlsdGVyIiwiY29udGFpbnMiLCJnZXRMaW5rIiwiaGFzX2RhdGEiLCJpbmRleCIsIkVsZW1lbnRTdGF0dXNfdnVlXzEiLCJsYXlvdXQiLCJkZWxldGVBY3Rpdml0eUVsZW1lbnQiLCJkZWxldGVFbGVtZW50Iiwic2Nyb2xsVG8iLCJBY3Rpdml0eURhdGUiLCJDb25kaXRpb25zIiwiQ29udGFjdEluZm8iLCJIdW1hbml0YXJpYW5TY29wZSIsIklhdGlJZGVudGlmaWVyIiwiTGVnYWN5RGF0YSIsIkxvY2F0aW9uIiwiT3RoZXJJZGVudGlmaWVyIiwiUGFydGljaXBhdGluZ09yZyIsIlBsYW5uZWREaXNidXJzZW1lbnQiLCJQb2xpY3lNYXJrZXIiLCJSZWNpcGllbnRDb3VudHJ5IiwiUmVjaXBpZW50UmVnaW9uIiwiUmVsYXRlZEFjdGl2aXR5IiwiUmVwb3J0aW5nT3JnYW5pemF0aW9uIiwiU2VjdG9yIiwiVGFnIiwiVHJhbnNhY3Rpb25zIiwiU3RhdHVzIiwiaXNWaXNpYmxlIiwibW9kZWxWaXNpYmxlIiwidG9nZ2xlTW9kZWwiLCJ0b2FzdG1lc3NhZ2VUeXBlIiwic2hvd0Vycm9ycG9wdXAiLCJkb3dubG9hZEVycm9yIiwiZmlsZW5hbWUiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImRvd25sb2FkRXJyb3J4bWwiLCJjb3VudEFjdGl2aXRpZXMiLCJxdWVyeVBhcmFtZXRlcnMiLCJhZGRRdWVyeVBhcmFtcyIsImFwaVVybCIsImJsb2IiLCJCbG9iIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJoZWFkZXJzIiwiZG93bmxvYWRYbWwiLCJjb25zb2xlIiwibG9nIiwieG1sX2Vycm9yIiwiZG93bmxvYWRDc3YiLCJBZGRBY3Rpdml0eUJ1dHRvbl92dWVfMSIsIkFjdGl2aXR5QnV0dG9uIiwiZGlzbWlzcyIsIkRvd25sb2FkQWN0aXZpdHlCdXR0b25fdnVlXzEiLCJSZWZyZXNoVG9hc3RfdnVlXzEiLCJQdWJsaXNoU2VsZWN0ZWRfdnVlXzEiLCJEb3dubG9hZEFjdGl2aXR5QnV0dG9uIiwiQWRkQWN0aXZpdHlCdXR0b24iLCJSZWZyZXNoVG9hc3RNZXNzYWdlIiwiUHVibGlzaFNlbGVjdGVkIiwic2VsZWN0QWxsVmFsdWUiLCJzZWxlY3RBbGxUb2dnbGUiLCJmcm9tTm93IiwidG9nZ2xlU2VsZWN0QWxsIiwiZGF0dW0iLCJxdWVyeSIsImRpcmVjdGlvbiIsInNvcnRpbmdEaXJlY3Rpb24iLCJzb3J0QnlEYXRlVXJsIiwiVGFyZ2V0VmFsdWUiLCJBY3R1YWxWYWx1ZSIsImluZGljYXRvcklkIiwicGVyaW9kTGluayIsInBlcmlvZHNEYXRhIiwidXRpbHNfMSIsImRsVHlwZSIsImFjdHVhbFZhbHVlIiwiZ2V0TG9jYXRpb24iLCJ0YXJnZXRWYWx1ZSIsIlJlc3VsdEVsZW1lbnRfdnVlXzEiLCJJbmRpY2F0b3JfdnVlXzEiLCJSZXN1bHRFbGVtZW50IiwiSW5kaWNhdG9yIiwiaGFzSW5kaWNhdG9ycyIsInJlc3VsdHNEYXRhIiwiVGl0bGVEZXNjcmlwdGlvbiIsIlJlc3VsdFR5cGUiLCJlbGVtZW50TmFtZSIsImVkaXRVcmwiLCJlbGVtZW50RGF0YSIsInJlc3VsdFR5cGUiLCJyZXN1bHRWb2NhYnVsYXJ5IiwidG9vbFRpcCIsInJldmVyc2UiLCJyZWZlcmVuY2VEYXRhIiwidHlwZURhdGEiLCJ0ZERhdGEiLCJUcmFuc2FjdGlvbkVsZW1lbnRfdnVlXzEiLCJUcmFuc2FjdGlvbkVsZW1lbnQiLCJ0cmFuc2FjdGlvbiIsInRyYW5zYWN0aW9uRGF0YSIsInRyYW5zYWN0aW9uTGluayIsImlzTWFuZGF0b3J5SWNvbiIsInIiLCJBaWRUeXBlIiwiVHJhbnNhY3Rpb25UeXBlIiwiVHJhbnNhY3Rpb25EYXRlIiwiVmFsdWUiLCJQcm92aWRlck9yZ2FuaXphdGlvbiIsIlJlY2VpdmVyT3JnYW5pemF0aW9uIiwiRGlzYnVyc2VtZW50Q2hhbm5lbCIsIkZsb3dUeXBlIiwiRmluYW5jZVR5cGUiLCJUaWVkU3RhdHVzIiwiZ2V0TGFuZ3VhZ2VzIiwiZW50cnkiLCJ0cmFuc2FjdGlvbnNEYXRhIiwiYXREYXRhIiwiY29kZSIsImZpbmFuY2VEYXRhIiwiZmxvd0RhdGEiLCJQb0RhdGEiLCJjb3VudHJ5Iiwic2VjdG9yIiwidHNEYXRhIiwiZmlsZSIsInVwbG9hZEZpbGUiLCJmaWxlcyIsImNvbmZpZyIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiZG93bmxvYWRFeGNlbCIsIm1ldGhvZCIsInJlc3BvbnNlVHlwZSIsIkltcG9ydFBsYWNlaG9sZGVyX3Z1ZV8xIiwiTGlzdEVsZW1lbnRfdnVlXzEiLCJzZWxlY3RlZENvdW50IiwiYWN0aXZpdGllc0xlbmd0aCIsInNlbGVjdEFsbCIsInRpbWVyIiwiY291bnQiLCJ1cGRhdGVTZWxlY3RlZEFjdGl2aXRpZXMiLCJzcGxpY2UiLCJzZWxlY3RBbGxBY3Rpdml0aWVzIiwiaW1wb3J0QWN0aXZpdGllcyIsImZpbGV0eXBlIiwiUGxhY2Vob2xkZXIiLCJMaXN0RWxlbWVudCIsIlNoaW1tZXJMb2FkaW5nX3Z1ZV8xIiwiU2hpbW1lciIsInRvZ2dsZUVycm9yIiwic2VsZWN0RWxlbWVudCIsImNvdW50RXJyb3JzIiwic2VsZWN0ZWREYXRhIiwiSlNPTiIsInBhcnNlIiwiT3JnYW5pc2F0aW9uRWxlbWVudHNfdnVlXzEiLCJPcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbF92dWVfMSIsIk9yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b25fdnVlXzEiLCJjb3JlXzIiLCJPcmdhbmlzYXRpb25FbGVtZW50cyIsIk9yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsIiwiUHVibGlzaFVucHVibGlzaCIsIm1hbmRhdG9yeUNvbXBsZXRlZCIsIl9lIiwib3JnYW5pemF0aW9uUHJvcHMiLCJvcmdhbml6YXRpb25EYXRhIiwicHVibGlzaE1lc3NhZ2UiLCJtYW5kYXRvcnkiLCJvcmdNYW5kYXRvcnlFbGVtZW50cyIsInJlcGxhY2VVbmRlcnNjb3JlIiwic3RyaW5nIiwicmVnZXgiLCJSZXBvcnRpbmdPcmdhbmlzYXRpb24iLCJUb3RhbEJ1ZGdldCIsIlJlcG9ydGluZ09yZ0J1ZGdldCIsIlJlcG9ydGluZ1JlZ2lvbkJ1ZGdldCIsIlJlY2lwaWVudENvdW50cnlCdWRnZXQiLCJUb3RhbEV4cGVuZGl0dXJlIiwiZW1haWwiLCJlbWFpbEVycm9yIiwicmVzZXQiLCJyZXF1ZXN0IiwicmVzcG9uc2VVUkwiLCJjcnlwdG9fanNfMSIsInRva2VuIiwicGFzc3dvcmQiLCJwYXNzd29yZF9jb25maXJtYXRpb24iLCJlbmNyeXB0IiwiaXYiLCJsaWIiLCJXb3JkQXJyYXkiLCJyYW5kb20iLCJzYWx0IiwiaXRlcmF0aW9ucyIsImVuY3J5cHRNZXRob2RMZW5ndGgiLCJoYXNoS2V5IiwiUEJLREYyIiwiaGFzaGVyIiwiYWxnbyIsIlNIQTUxMiIsImtleVNpemUiLCJlbmNyeXB0ZWQiLCJBRVMiLCJtb2RlIiwiQ0JDIiwiZW5jcnlwdGVkU3RyaW5nIiwiZW5jIiwiQmFzZTY0Iiwic3RyaW5naWZ5IiwiY2lwaGVydGV4dCIsIm91dHB1dCIsIkhleCIsIlV0ZjgiLCJmb3JtIiwicHJvY2VzcyIsImVudiIsIk1JWF9FTkNSWVBUSU9OX0tFWSIsInN0b3JlXzEiLCJhY3Rpb25zXzEiLCJkZWZhdWx0Rm9ybSIsImRlZmF1bHRFcnJvciIsInVwZGF0ZVN0b3JlIiwiQWN0aW9uVHlwZXMiLCJVUERBVEVfREVGQVVMVF9WQUxVRVMiLCJTZXR0aW5nRGVmYXVsdEZvcm1fdnVlXzEiLCJTZXR0aW5nUHVibGlzaGluZ0Zvcm1fdnVlXzEiLCJTZXR0aW5nRGVmYXVsdEZvcm0iLCJTZXR0aW5nUHVibGlzaGluZ0Zvcm0iLCJ0YWIiLCJwdWJsaXNoaW5nRm9ybSIsInB1Ymxpc2hpbmdJbmZvIiwicHVibGlzaGluZ0Vycm9yIiwic2V0dGluZ0RhdGEiLCJwdWJsaXNoZXJJbmZvIiwiYWN0aXZpdHlWYWx1ZXMiLCJkZWZhdWx0X3ZhbHVlcyIsInB1Ymxpc2hpbmdfaW5mbyIsImFjdGl2aXR5X2RlZmF1bHRfdmFsdWVzIiwiYXBpX3Rva2VuIiwidG9nZ2xlVGFiIiwic3VibWl0RGVmYXVsdCIsImhpZXJhcmNoaWFsIiwic3VibWl0UHVibGlzaGluZyIsInB1Ymxpc2hlcl92ZXJpZmljYXRpb24iLCJ0b2tlbl92ZXJpZmljYXRpb24iLCJhdXRvVmVyaWZ5IiwiVVBEQVRFX1BVQkxJU0hJTkdfRk9STSIsIlRhYmxlTGlzdF92dWVfMSIsIlRhYmxlTGlzdCIsIm9yZ2FuaXphdGlvbk5hbWUiLCJzd2l0Y2hCYWNrIiwib3JnYW5pc2F0aW9uRGF0YSIsImZldGNoT3JnYW5pc2F0aW9uIiwicHJveHlVc2VyIiwiZGVmYXVsdFNvcnREaXJlY3Rpb24iLCJzb3J0RGlyZWN0aW9uIiwib3JkZXJUeXBlIiwic29ydEJ5Iiwib3JkZXIiLCJFbWFpbFZlcmlmaWNhdGlvbl92dWVfMSIsImVuY3J5cHRpb25fMSIsIkVtYWlsVmVyaWZpY2F0aW9uIiwicHVibGlzaGVyRXhpc3RzIiwidGV4dGFyZWEiLCJwdWJsaXNoZXJfbmFtZSIsInB1Ymxpc2hlcl9pZCIsInJlZ2lzdHJhdGlvbl9hZ2VuY3kiLCJyZWdpc3RyYXRpb25fbnVtYmVyIiwiaWRlbnRpZmllciIsInB1Ymxpc2hlcl90eXBlIiwibGljZW5zZV9pZCIsImltYWdlX3VybCIsImNvbnRhY3RfZW1haWwiLCJ3ZWJzaXRlIiwiYWRkcmVzcyIsInNvdXJjZSIsInJlY29yZF9leGNsdXNpb25zIiwidXNlcm5hbWUiLCJmdWxsX25hbWUiLCJpYXRpRXJyb3IiLCJyZXNpemUiLCJoZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJhZ2VuY2llcyIsInJlZ2lzdHJhdGlvbkFnZW5jeSIsInVuY2F0ZWdvcml6ZWRfMSIsInN0YXJ0c1dpdGgiLCJzb21lIiwiaXNUZXh0RmllbGQiLCJmaWVsZFR5cGUiLCJmaWVsZE5hbWUiLCJjaGVja1N0ZXAiLCJmb3JtU3RlcCIsInBhcnNlSW50IiwicmVnaXN0ZXJGb3JtIiwiaXNfY29tcGxldGUiLCJob3Zlcl90ZXh0IiwiZmllbGRzIiwicGxhY2Vob2xkZXIiLCJoZWxwX3RleHQiLCJvcHRpb25zIiwicHVibGlzaGVyVHlwZSIsImRhdGFMaWNlbnNlIiwidXBkYXRlVmFsaWRhdGlvbkVycm9ycyIsImVycm9yUmVzcG9uc2UiLCJjbGVhblZhbGlkYXRpb25FcnJvcnMiLCJmaWVsZCIsInVwZGF0ZUVycm9ycyIsImV2ZXJ5IiwiY2xlYW5JYXRpRXJyb3JzIiwidmVyaWZ5UHVibGlzaGVyIiwidXBkYXRlU3RlcCIsInZlcmlmeUNvbnRhY3RJbmZvcm1hdGlvbiIsInZlcmlmeUFkZGl0aW9uYWxJbmZvcm1hdGlvbiIsImdldEN1cnJlbnRTdGVwIiwiY3VycmVudF9zdGVwIiwiZ29Ub05leHRGb3JtIiwiZ29Ub1ByZXZpb3VzRm9ybSIsInRyaWdnZXJNb2RlbCIsInNldEl0ZW0iLCJhZ2VuY3kiLCJvcmdhbml6YXRpb25fcmVnaXN0cmF0aW9uX2FnZW5jeSIsIm9yZ2FuaXphdGlvbl9yZWdpc3RyYXRpb25fbm8iLCJpYXRpX29yZ2FuaXphdGlvbmFsX2lkZW50aWZpZXIiLCJjb25maXJtX3Bhc3N3b3JkIiwibG9naW4iLCJOYXZEcm9wZG93bl92dWVfMSIsIk5hdkRyb3Bkb3duIiwiYXV0aCIsInJlbmRlciIsIl93aXRoU2NvcGVJZCIsInB1c2hTY29wZUlkIiwicG9wU2NvcGVJZCIsIl9ob2lzdGVkXzEiLCJfaG9pc3RlZF8yIiwiX2hvaXN0ZWRfMyIsImNyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfaG9pc3RlZF81IiwiX2hvaXN0ZWRfNiIsIl9ob2lzdGVkXzciLCJfaG9pc3RlZF84IiwiX2hvaXN0ZWRfOSIsIl9ob2lzdGVkXzEwIiwiX2hvaXN0ZWRfMTEiLCJfaG9pc3RlZF8xMiIsIl9ob2lzdGVkXzEzIiwiX2hvaXN0ZWRfMTQiLCJfaG9pc3RlZF8xNSIsIl9ob2lzdGVkXzE2IiwiX2hvaXN0ZWRfMTciLCJfaG9pc3RlZF8xOCIsIl9ob2lzdGVkXzE5IiwiX2hvaXN0ZWRfMjAiLCJfaG9pc3RlZF8yMSIsIl9ob2lzdGVkXzIyIiwiX2hvaXN0ZWRfMjMiLCJfaG9pc3RlZF8yNCIsIl9ob2lzdGVkXzI1IiwiX2hvaXN0ZWRfMjYiLCJfaG9pc3RlZF8yNyIsIl9ob2lzdGVkXzI4IiwiX2hvaXN0ZWRfMjkiLCJfaG9pc3RlZF8zMCIsIl9ob2lzdGVkXzMxIiwiX2hvaXN0ZWRfMzIiLCJfY3R4IiwiX2NhY2hlIiwiJHByb3BzIiwiJHNldHVwIiwiJGRhdGEiLCIkb3B0aW9ucyIsIl9jb21wb25lbnRfc3ZnX3Z1ZSIsInJlc29sdmVDb21wb25lbnQiLCJvcGVuQmxvY2siLCJjcmVhdGVFbGVtZW50QmxvY2siLCJjcmVhdGVCbG9jayIsImNyZWF0ZUNvbW1lbnRWTm9kZSIsIm9uQ2xpY2siLCJjcmVhdGVWTm9kZSIsIkZyYWdtZW50IiwicmVuZGVyTGlzdCIsIm5vcm1hbGl6ZUNsYXNzIiwibmF2X19wb2ludGVyIiwidG9EaXNwbGF5U3RyaW5nIiwiY3JlYXRlVGV4dFZOb2RlIiwiJGV2ZW50Iiwid2l0aERpcmVjdGl2ZXMiLCJvbktleXVwIiwid2l0aEtleXMiLCJ2TW9kZWxUZXh0Iiwib25DbG9zZSIsIm9uQ2xvc2VNb2RhbCIsIm9uVG9hc3QiLCJiYyIsImQiLCJhY3Rpb24iLCJjcmVhdGVTdGF0aWNWTm9kZSIsIl9ob2lzdGVkXzMzIiwiX2hvaXN0ZWRfMzQiLCJfaG9pc3RlZF8zNSIsIl9ob2lzdGVkXzM2IiwiYXMiLCJlbnRlciIsImxlYXZlIiwid2l0aEN0eCIsImlubmVySFRNTCIsIlRlbGVwb3J0IiwidG8iLCJUcmFuc2l0aW9uIiwiYXJncyIsIm5vcm1hbGl6ZVN0eWxlIiwicmVuZGVyU2xvdCIsIiRzbG90cyIsIl9jb21wb25lbnRfcmFkaWFsX3Byb2dyZXNzX2JhciIsImRpYW1ldGVyIiwibSIsIm9uUmVzZXQiLCJzdG9wUHJvcGFnYXRpb24iLCJfY29tcG9uZW50X0J0biIsIl9jb21wb25lbnRfQnJlYWRjcnVtYiIsIl9ob2lzdGVkXzM3IiwiX2NvbXBvbmVudF9Ib3ZlclRleHQiLCJtb2RlbFZhbHVlIiwic2VhcmNoYWJsZSIsInJvbGUiLCJfaG9pc3RlZF8zOCIsIl9ob2lzdGVkXzM5IiwiX2hvaXN0ZWRfNDAiLCJfaG9pc3RlZF80MSIsIl9ob2lzdGVkXzQyIiwiX2hvaXN0ZWRfNDMiLCJfaG9pc3RlZF80NCIsIl9ob2lzdGVkXzQ1IiwiX2hvaXN0ZWRfNDYiLCJfaG9pc3RlZF80NyIsIl9ob2lzdGVkXzQ4IiwiX2hvaXN0ZWRfNDkiLCJfaG9pc3RlZF81MCIsIl9ob2lzdGVkXzUxIiwiX2hvaXN0ZWRfNTIiLCJfaG9pc3RlZF81MyIsIl9ob2lzdGVkXzU0IiwiX2hvaXN0ZWRfNTUiLCJfaG9pc3RlZF81NiIsIl9ob2lzdGVkXzU3IiwiX2hvaXN0ZWRfNTgiLCJfaG9pc3RlZF81OSIsIl9ob2lzdGVkXzYwIiwiX2hvaXN0ZWRfNjEiLCJfaG9pc3RlZF82MiIsIl9ob2lzdGVkXzYzIiwiX2hvaXN0ZWRfNjQiLCJfaG9pc3RlZF82NSIsIl9jb21wb25lbnRfVG9hc3QiLCJfY29tcG9uZW50X0Vycm9yUG9wVXAiLCJfY29tcG9uZW50X0RlbGV0ZUJ1dHRvbiIsIl9jb21wb25lbnRfVW5QdWJsaXNoIiwiX2NvbXBvbmVudF9QdWJsaXNoIiwiX2NvbXBvbmVudF9FcnJvcnMiLCJfY29tcG9uZW50X1ByZXZpb3VzbHlQdWJsaXNoZWQiLCJfY29tcG9uZW50X1Byb2dyZXNzQmFyIiwiX2NvbXBvbmVudF9FbGVtZW50cyIsIl9jb21wb25lbnRfQWN0aXZpdHlFbGVtZW50IiwiX2NvbXBvbmVudF9SZXN1bHQiLCJfZGlyZWN0aXZlX3N0aWNreV9jb21wb25lbnQiLCJyZXNvbHZlRGlyZWN0aXZlIiwiX2RpcmVjdGl2ZV9zbW9vdGhfc2Nyb2xsIiwib25DbG9zZVBvcHVwIiwidW5QdWJsaXNoZWQiLCJzaG93UHVibGlzaGVkIiwicHVibGlzaEVycm9ycyIsImJvdW5kYXJ5IiwiZGlzYWJsZWQiLCJpY29uX3NpemUiLCJfY29tcG9uZW50X0xvYWRlciIsIl9jb21wb25lbnRfUGFnZVRpdGxlIiwiX2NvbXBvbmVudF9FcnJvck1lc3NhZ2UiLCJfY29tcG9uZW50X0VtcHR5QWN0aXZpdHkiLCJfY29tcG9uZW50X1RhYmxlTGF5b3V0IiwiX2NvbXBvbmVudF9QYWdpbmF0aW9uIiwib25TaG93T3JIaWRlIiwib25GZXRjaEFjdGl2aXRpZXMiLCJfY29tcG9uZW50X011bHRpc2VsZWN0IiwiX2NvbXBvbmVudF9CdG5Db21wb25lbnQiLCJfY29tcG9uZW50X01vZGFsIiwiZXJyb3JfX2lucHV0IiwiaWF0aV9pZGVudGlmaWVyX3RleHQiLCJjIiwidk1vZGVsQ2hlY2tib3giLCJhY3QiLCJub19lcnJvcnMiLCJhY3Rpdml0eURhdGUiLCJjb25kaXRpb25fYXR0YWNoZWQiLCJjb25kaXRpb24iLCJjb25kaXRpb25fdHlwZSIsImNvbmRpdGlvblR5cGUiLCJjb250YWN0VHlwZSIsIm9yZ2FuaXNhdGlvbiIsInBlcnNvbl9uYW1lIiwiZGVwYXJ0bWVudCIsImpvYl90aXRsZSIsImVtYWlsX3ZhbHVlIiwidGVsZXBob25lIiwidGVsIiwidyIsIm1haWxpbmdfYWRkcmVzcyIsImFkZHJlc3NfaW5kZXgiLCJkZXNjcmlwdGlvblR5cGUiLCJodW1hbml0YXJpYW5TY29wZVR5cGUiLCJodW1hbml0YXJpYW5TY29wZVZvY2FidWxhcnkiLCJ2b2NhYnVsYXJ5Iiwidm9jYWJ1bGFyeV91cmkiLCJsZWdhY3lfbmFtZSIsImlhdGlfZXF1aXZhbGVudCIsImxvY2F0aW9uX3JlYWNoIiwiZ2VvZ3JhcGhpY0xvY2F0aW9uUmVhY2giLCJqIiwibG9jYXRpb25faWQiLCJnZW9ncmFwaGljVm9jYWJ1bGFyeSIsImFjdGl2aXR5X2Rlc2NyaXB0aW9uIiwiYWRtaW5pc3RyYXRpdmUiLCJsZXZlbCIsInBvaW50Iiwic3JzX25hbWUiLCJwb3MiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImV4YWN0bmVzcyIsImdlb2dyYXBoaWNFeGFjdG5lc3MiLCJsb2NhdGlvbl9jbGFzcyIsImdlb2dyYXBoaWNMb2NhdGlvbkNsYXNzIiwiZmVhdHVyZV9kZXNpZ25hdGlvbiIsImxvY2F0aW9uVHlwZSIsInJlZmVyZW5jZV90eXBlIiwib3RoZXJJZGVudGlmaWVyVHlwZSIsIm93bmVyX29yZyIsInBhcnRpY2lwYXRpbmdfb3JnIiwib3JnYW5pemF0aW9uX3JvbGUiLCJvcmdhbmlzYXRpb25Sb2xlIiwib3JnYW5pemF0aW9uVHlwZSIsImNyc19jaGFubmVsX2NvZGUiLCJjcnNDaGFubmVsQ29kZSIsImJ1ZGdldFR5cGUiLCJwbGFubmVkX2Rpc2J1cnNlbWVudF90eXBlIiwiYW1vdW50IiwidG9Mb2NhbGVTdHJpbmciLCJjdXJyZW5jeSIsInZhbHVlX2RhdGUiLCJwZXJpb2Rfc3RhcnQiLCJwZXJpb2RfZW5kIiwicHJvdmlkZXJfb3JnIiwicHJvdmlkZXJfYWN0aXZpdHlfaWQiLCJyZWNlaXZlcl9vcmciLCJyZWNlaXZlcl9hY3Rpdml0eV9pZCIsInBvbGljeV9tYXJrZXJfdm9jYWJ1bGFyeSIsInBvbGljeU1hcmtlclZvY2FidWxhcnkiLCJwb2xpY3lfbWFya2VyIiwicG9saWN5TWFya2VyIiwicG9saWN5X21hcmtlcl90ZXh0Iiwic2lnbmlmaWNhbmNlIiwicG9saWN5U2lnbmlmaWNhbmNlIiwiY291bnRyeV9jb2RlIiwicGVyY2VudGFnZSIsInJlZ2lvbl92b2NhYnVsYXJ5IiwicmVnaW9uVm9jYWJ1bGFyeSIsInJlZ2lvbl9jb2RlIiwicmVnaW9uIiwiY3VzdG9tX2NvZGUiLCJyZWxhdGlvbnNoaXBfdHlwZSIsInJlbGF0ZWRBY3Rpdml0eVR5cGUiLCJyZXBvcnRpbmdfb3JnIiwic2Vjb25kYXJ5X3JlcG9ydGVyIiwiX2NvbXBvbmVudF9Ob3RZZXQiLCJiIiwicGVyaW9kcyIsInNlY3Rvcl92b2NhYnVsYXJ5Iiwic2VjdG9yVm9jYWJ1bGFyeSIsInNlY3RvckNvZGUiLCJjYXRlZ29yeV9jb2RlIiwic2VjdG9yQ2F0ZWdvcnkiLCJzZGdfZ29hbCIsInNkZ0dvYWxzIiwic2RnX3RhcmdldCIsInNkZ1RhcmdldCIsInRhZ192b2NhYnVsYXJ5IiwidGFnVm9jYWJ1bGFyeSIsInRhZ190ZXh0IiwiZ29hbHNfdGFnX2NvZGUiLCJ0YXJnZXRzX3RhZ19jb2RlIiwidHJhbnMiLCJ0cmFuc2FjdGlvblR5cGUiLCJ0cmFuc2FjdGlvbl90eXBlIiwidHJhbnNhY3Rpb25fdHlwZV9jb2RlIiwidmFsIiwiX2NvbXBvbmVudF9UaXRsZUVsZW1lbnQiLCJfY29tcG9uZW50X0FzY2VuZGluZyIsIl9jb21wb25lbnRfTWVhc3VyZSIsIl9jb21wb25lbnRfQWdncmVnYXRpb25TdGF0dXMiLCJfY29tcG9uZW50X0Rlc2NyaXB0aW9uIiwiX2NvbXBvbmVudF9SZWZlcmVuY2UiLCJfY29tcG9uZW50X0Jhc2VsaW5lIiwiX2NvbXBvbmVudF9QZXJpb2QiLCJfY29tcG9uZW50X0RvY3VtZW50TGluayIsInJEYXRhIiwicmkiLCJkb2N1bWVudF9saW5rIiwiYXNjZW5kaW5nIiwibWVhc3VyZSIsImluZGljYXRvck1lYXN1cmUiLCJhZ2dyZWdhdGlvbl9zdGF0dXMiLCJzY29wZSIsIl9jb21wb25lbnRfRGVsZXRlQWN0aW9uIiwiYmFzZSIsInllYXIiLCJkaW1lbnNpb24iLCJjb21tZW50IiwiY29tIiwibmEiLCJjYXRlZ29yeSIsImNhdCIsImRvY3VtZW50Q2F0ZWdvcnkiLCJkb2N1bWVudF9kYXRlIiwiaW5kaWNhdG9yVm9jYWJ1bGFyeSIsImluZGljYXRvcl91cmkiLCJ2U2hvdyIsIl9ob2lzdGVkXzY2IiwiX2hvaXN0ZWRfNjciLCJfaG9pc3RlZF82OCIsIl9ob2lzdGVkXzY5IiwiX2hvaXN0ZWRfNzAiLCJfaG9pc3RlZF83MSIsIl9ob2lzdGVkXzcyIiwiX2hvaXN0ZWRfNzMiLCJfaG9pc3RlZF83NCIsIl9ob2lzdGVkXzc1IiwiX2hvaXN0ZWRfNzYiLCJfaG9pc3RlZF83NyIsIl9ob2lzdGVkXzc4IiwiX2hvaXN0ZWRfNzkiLCJfaG9pc3RlZF84MCIsIl9ob2lzdGVkXzgxIiwiX2hvaXN0ZWRfODIiLCJfaG9pc3RlZF84MyIsIl9ob2lzdGVkXzg0IiwiX2hvaXN0ZWRfODUiLCJfaG9pc3RlZF84NiIsIl9ob2lzdGVkXzg3IiwiX2hvaXN0ZWRfODgiLCJfaG9pc3RlZF84OSIsIl9ob2lzdGVkXzkwIiwiX2hvaXN0ZWRfOTEiLCJfaG9pc3RlZF85MiIsIl9ob2lzdGVkXzkzIiwiX2hvaXN0ZWRfOTQiLCJfaG9pc3RlZF85NSIsIl9ob2lzdGVkXzk2IiwiX2hvaXN0ZWRfOTciLCJfaG9pc3RlZF85OCIsIl9ob2lzdGVkXzk5IiwiX2hvaXN0ZWRfMTAwIiwiX2hvaXN0ZWRfMTAxIiwiX2hvaXN0ZWRfMTAyIiwiX2hvaXN0ZWRfMTAzIiwiX2hvaXN0ZWRfMTA0IiwiX2hvaXN0ZWRfMTA1IiwiX2hvaXN0ZWRfMTA2IiwiZGVmYXVsdF9haWRfdHlwZV92b2NhYnVsYXJ5IiwiYWlkVHlwZVZvY2FidWxhcnkiLCJlYXJtYXJraW5nX2NhdGVnb3J5IiwiZWFybWFya2luZ0NhdGVnb3J5IiwiZWFybWFya2luZ19tb2RhbGl0eSIsImVhcm1hcmtpbmdNb2RhbGl0eSIsImNhc2hfYW5kX3ZvdWNoZXJfbW9kYWxpdGllcyIsImNhc2hhbmRWb3VjaGVyTW9kYWxpdGllcyIsImRlZmF1bHRfYWlkX3R5cGUiLCJhaWRUeXBlIiwiY291bnRyeV9idWRnZXRfdm9jYWJ1bGFyeSIsImJ1ZGdldElkZW50aWZpZXJWb2NhYnVsYXJ5IiwiYnVkZ2V0X2l0ZW0iLCJidWRnZXRJZGVudGlmaWVyIiwiYnVkZ2V0X3R5cGUiLCJidWRnZXRfdmFsdWUiLCJidWRnZXRfc3RhdHVzIiwiYnVkZ2V0U3RhdHVzIiwiYWN0aXZpdHlTdGF0dXMiLCJhY3Rpdml0eVNjb3BlIiwiY29sbGFib3JhdGlvblR5cGUiLCJmbG93VHlwZSIsInRpZWRTdGF0dXMiLCJmaW5hbmNlVHlwZSIsIl9jb21wb25lbnRfQ3JlYXRlTW9kYWwiLCJfY29tcG9uZW50X0FjdGl2aXR5QnV0dG9uIiwicmVsIiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsInN0cm9rZSIsImNvbHNwYW4iLCJ0b3RhbCIsInVwZGF0ZWRfYXQiLCJfY29tcG9uZW50X1RhcmdldFZhbHVlIiwiX2NvbXBvbmVudF9BY3R1YWxWYWx1ZSIsImFjdHVhbCIsInBlIiwidFZhbHVlIiwiZGltIiwiX2NvbXBvbmVudF9SZXN1bHRFbGVtZW50IiwiX2NvbXBvbmVudF9JbmRpY2F0b3IiLCJfY29tcG9uZW50X1RpdGxlRGVzY3JpcHRpb24iLCJfY29tcG9uZW50X1Jlc3VsdFR5cGUiLCJsb2MiLCJsIiwidGFyIiwiX2NvbXBvbmVudF9UcmFuc2FjdGlvbkVsZW1lbnQiLCJfY29tcG9uZW50X0FpZFR5cGUiLCJfY29tcG9uZW50X1RyYW5zYWN0aW9uVHlwZSIsIl9jb21wb25lbnRfVHJhbnNhY3Rpb25EYXRlIiwiX2NvbXBvbmVudF9WYWx1ZSIsIl9jb21wb25lbnRfUHJvdmlkZXJPcmdhbml6YXRpb24iLCJfY29tcG9uZW50X1JlY2VpdmVyT3JnYW5pemF0aW9uIiwiX2NvbXBvbmVudF9EaXNidXJzZW1lbnRDaGFubmVsIiwiX2NvbXBvbmVudF9TZWN0b3IiLCJfY29tcG9uZW50X1JlY2lwaWVudENvdW50cnkiLCJfY29tcG9uZW50X1JlY2lwaWVudFJlZ2lvbiIsIl9jb21wb25lbnRfRmxvd1R5cGUiLCJfY29tcG9uZW50X0ZpbmFuY2VUeXBlIiwiX2NvbXBvbmVudF9UaWVkU3RhdHVzIiwidHJhbnNhY3Rpb25fZGF0ZSIsImNsYXMiLCJhdCIsImFpZF90eXBlX3ZvY2FidWxhcnkiLCJhaWRfdHlwZV9jb2RlIiwiY2FzaEFuZFZvdWNoZXJNb2RhbGl0aWVzIiwiZWFyTWFya2luZ0NhdGVnb3J5IiwiZWFyTWFya2luZ01vZGFsaXR5IiwiZGlzYnVyc2VtZW50X2NoYW5uZWxfY29kZSIsImRpc2J1cnNlbWVudENoYW5uZWwiLCJmaW5hbmNlX3R5cGUiLCJmbG93X3R5cGUiLCJvcmdhbml6YXRpb25faWRlbnRpZmllcl9jb2RlIiwicG8iLCJjb3UiLCJjb3VudHJ5Q29kZSIsInNkIiwicmVnaW9uQ29kZSIsInNlYyIsInVuc2RnR29hbHMiLCJ1bnNkZ1RhcmdldHMiLCJ0aWVkX3N0YXR1c19jb2RlIiwidGllZFN0YXR1c1R5cGUiLCJvblNlbGVjdEVsZW1lbnQiLCJlbGVfZXJyIiwiX2NvbXBvbmVudF9QdWJsaXNoVW5wdWJsaXNoIiwiX2NvbXBvbmVudF9SYWRpYWxQcm9ncmVzc0JhciIsIl9jb21wb25lbnRfT3JnYW5pc2F0aW9uRWxlbWVudHMiLCJfY29tcG9uZW50X09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsIiwicmVjaXBpZW50X2NvdW50cnkiLCJyZWNpcGllbnRfY291bnRyeV9idWRnZXQiLCJidWRnZXRfbGluZSIsInJlY2lwaWVudF9vcmdfYnVkZ2V0IiwicmVjaXBpZW50X29yZyIsInJlY2lwaWVudF9vcmdfaW5kZXgiLCJuYXJyYXRpdmVfaW5kZXgiLCJyZWNpcGllbnRfcmVnaW9uX2J1ZGdldCIsInJlY2lwaWVudF9yZWdpb24iLCJ0b3RhbF9idWRnZXQiLCJ0b3RhbF9idWRnZXRfc3RhdHVzIiwidG90YWxfZXhwZW5kaXR1cmUiLCJleHBlbnNlX2xpbmUiLCJvbklucHV0IiwiX2NvbXBvbmVudF9TZXR0aW5nUHVibGlzaGluZ0Zvcm0iLCJfY29tcG9uZW50X1NldHRpbmdEZWZhdWx0Rm9ybSIsImFjdGl2ZV9fdGFiIiwib25TdWJtaXRQdWJsaXNoaW5nIiwiaXNWZXJpZmljYXRpb25SZXF1ZXN0ZWQiLCJ0YWdfX2NvcnJlY3QiLCJ0YWdfX2luY29ycmVjdCIsImFsbF9hY3Rpdml0aWVzX2NvdW50IiwiX2NvbXBvbmVudF9FbWFpbFZlcmlmaWNhdGlvbiIsImVycm9yX2tleSIsImZvcm1fX2lucHV0Iiwidk1vZGVsRHluYW1pYyIsInJlZl9mb3IiLCJvbkZvY3VzIiwid2l0aE1vZGlmaWVycyIsInZ1ZV9fc2VsZWN0IiwiX2NvbXBvbmVudF9TdHJvbmciLCJlcnJvcl9pbnB1dCIsIl9jb21wb25lbnRfTmF2RHJvcGRvd24iLCJ2dWUzX3Ntb290aF9zY3JvbGxfMSIsInN2Z192dWUzXzEiLCJXZWJIZWFkZXJfdnVlXzEiLCJXZWJGb290ZXJfdnVlXzEiLCJBZG1pbkZvb3Rlcl92dWVfMSIsIldlbGNvbWVQYWdlX3Z1ZV8xIiwiUmVnaXN0ZXJQYWdlX3Z1ZV8xIiwiQWJvdXRQYWdlX3Z1ZV8xIiwiU3VwcG9ydFBhZ2VfdnVlXzEiLCJJYXRpU3RhbmRhcmRfdnVlXzEiLCJQdWJsaXNoaW5nQ2hlY2tsaXN0X3Z1ZV8xIiwiSWF0aVJlZ2lzdGVyUGFnZV92dWVfMSIsIlJlc3VsdERldGFpbF92dWVfMSIsIlJlc3VsdExpc3RfdnVlXzEiLCJJbmRpY2F0b3JEZXRhaWxfdnVlXzEiLCJJbmRpY2F0b3JMaXN0X3Z1ZV8xIiwiUGVyaW9kc0RldGFpbF92dWVfMSIsIlBlcmlvZHNMaXN0X3Z1ZV8xIiwiVHJhbnNhY3Rpb25MaXN0X3Z1ZV8xIiwiVHJhbnNhY3Rpb25EZXRhaWxfdnVlXzEiLCJEZXNjcmlwdGlvbkZvcm1fdnVlXzEiLCJFbGVtZW50c05vdGVfdnVlXzEiLCJBY3Rpdml0eUluZGV4X3Z1ZV8xIiwiQWRtaW5IZWFkZXJfdnVlXzEiLCJBY3Rpdml0eURldGFpbF92dWVfMSIsIlNpZGViYXJIZWxwQmxvY2tfdnVlXzEiLCJBY3Rpdml0eVVwbG9hZF92dWVfMSIsIkltcG9ydExpc3RfdnVlXzEiLCJTZXR0aW5nUGFnZV92dWVfMSIsIkFjdGl2aXR5RGVmYXVsdFZhbHVlX3Z1ZV8xIiwiUmVzZXRQYWdlX3Z1ZV8xIiwiUGFzc3dvcmRSZWNvdmVyeV92dWVfMSIsIlJlc2V0UGFzc3dvcmRfdnVlXzEiLCJPcmdhbmlzYXRpb25EYXRhX3Z1ZV8xIiwiT3JnYW5pc2F0aW9uTGlzdF92dWVfMSIsIkFkbWluQmFyX3Z1ZV8xIiwiYXBwIiwiY3JlYXRlQXBwIiwiY29tcG9uZW50IiwidXNlIiwibGFzdFNjcm9sbFRvcCIsImFmZml4VHlwZSIsInN0aWNreVNpZGViYXIiLCJlbCIsInBhcmVudFdyYXBwZXIiLCJzdGlja3lFbGVtZW50IiwiZmlyc3RDaGlsZCIsIm9mZnNldEhlaWdodCIsInN0aWNreUN1cnJlbnRUb3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJzdGlja3lDdXJyZW50Qm90dG9tIiwiYm90dG9tIiwiZWxXaWR0aCIsIm9mZnNldFdpZHRoIiwiZWxTY3JvbGxMZWZ0IiwibGVmdCIsImVsU2Nyb2xsVG9wIiwiZWxTY3JvbGxCb3R0b20iLCJ2aWV3cG9ydEhlaWdodCIsImlubmVySGVpZ2h0IiwiY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiIsInBhZ2VZT2Zmc2V0IiwidGFyZ2V0U2Nyb2xsUG9zaXRpb24iLCJlbFBhcmVudCIsImVsUGFyZW50Qm90dG9tIiwiaXNTY3JvbGxEb3duIiwiaXNTY3JvbGxVcCIsImhhbmRsZVNjcm9sbERvd24iLCJoYW5kbGVTY3JvbGxVcCIsImZpeFNpZGViYXIiLCJmb290ZXIiLCJnZXRFbGVtZW50QnlJZCIsInJlY3QiLCJjbGllbnRXaWR0aCIsImRpcmVjdGl2ZSIsIm1vdW50ZWQiLCJiaW5kaW5nIiwidW5tb3VudGVkIiwicGFyZW50IiwibW91bnQiLCJmb3JtYXRfZGF0ZSIsImRhdGFfMSIsInZ1ZXhfMSIsIm11dGF0aW9ucyIsIm11dGF0ZVNlbGVjdGVkQWN0aXZpdGllcyIsInBheWxvYWQiLCJhY3Rpb25zIiwiY29tbWl0IiwiYWN0aXZpdHlMaXN0U3RvcmUiLCJjcmVhdGVTdG9yZSIsIm11dGF0ZVVuUHVibGlzaGVkIiwibXV0YXRlU2hvd1B1Ymxpc2hlZCIsIm11dGF0ZVB1Ymxpc2hFcnJvcnMiLCJ1cGRhdGVVblB1Ymxpc2hlZCIsInVwZGF0ZVNob3dQdWJsaXNoZWQiLCJ1cGRhdGVQdWJsaXNoRXJyb3JzIiwiYWN0aXZpdHlEZXRhaWxTdG9yZSIsInN0YXRlXzEiLCJtdXRhdGlvbl8xIiwiTXV0YXRpb25UeXBlcyIsIlVQREFURV9QVUJMSVNIRVJfSU5GTyIsIlVQREFURV9QVUJMSVNISU5HX0VSUk9SIiwiVVBEQVRFX0RFRkFVTFRfRVJST1IiLCJSZXN1bHRfdnVlXzEiLCJJYXRpSWRlbnRpZmllcl92dWVfMSIsIk90aGVySWRlbnRpZmllcl92dWVfMSIsIlRpdGxlX3Z1ZV8xIiwiRGVzY3JpcHRpb25fdnVlXzEiLCJBY3Rpdml0eURhdGVfdnVlXzEiLCJDb250YWN0SW5mb192dWVfMSIsIlBhcnRpY2lwYXRpbmdPcmdfdnVlXzEiLCJSZWNpcGllbnRDb3VudHJ5X3Z1ZV8xIiwiUmVjaXBpZW50UmVnaW9uX3Z1ZV8xIiwiVHJhbnNhY3Rpb25zX3Z1ZV8xIiwiTG9jYXRpb25fdnVlXzEiLCJTZWN0b3JfdnVlXzEiLCJMZWdhY3lEYXRhX3Z1ZV8xIiwiQ29uZGl0aW9uc192dWVfMSIsIlJlbGF0ZWRBY3Rpdml0eV92dWVfMSIsIlBvbGljeU1hcmtlcl92dWVfMSIsIlRhZ192dWVfMSIsIkh1bWFuaXRhcmlhblNjb3BlX3Z1ZV8xIiwiUGxhbm5lZERpc2J1cnNlbWVudF92dWVfMSIsIlJlcG9ydGluZ09yZ2FuaXphdGlvbl92dWVfMSIsIk1lYXN1cmVfdnVlXzEiLCJJbmRpY2F0b3JBc2NlbmRpbmdfdnVlXzEiLCJBZ2dyZWdhdGlvblN0YXR1c192dWVfMSIsIlJlZmVyZW5jZV92dWVfMSIsIkRvY3VtZW50TGlua192dWVfMSIsIkJhc2VsaW5lX3Z1ZV8xIiwiUGVyaW9kX3Z1ZV8xIiwiVGFyZ2V0VmFsdWVfdnVlXzEiLCJBY3R1YWxWYWx1ZV92dWVfMSIsIlRpdGxlRGVzY3JpcHRpb25fdnVlXzEiLCJSZXN1bHRUeXBlX3Z1ZV8xIiwiQWlkVHlwZV92dWVfMSIsIlRyYW5zYWN0aW9uVHlwZV92dWVfMSIsIlRyYW5zYWN0aW9uRGF0ZV92dWVfMSIsIlZhbHVlX3Z1ZV8xIiwiUHJvdmlkZXJPcmdhbml6YXRpb25fdnVlXzEiLCJSZWNlaXZlck9yZ2FuaXphdGlvbl92dWVfMSIsIkRpc2J1cnNlbWVudENoYW5uZWxfdnVlXzEiLCJGbG93VHlwZV92dWVfMSIsIkZpbmFuY2VUeXBlX3Z1ZV8xIiwiVGllZFN0YXR1c192dWVfMSIsIlJlcG9ydGluZ09yZ2FuaXNhdGlvbl92dWVfMSIsIlRvdGFsQnVkZ2V0X3Z1ZV8xIiwiUmVwb3J0aW5nT3JnQnVkZ2V0X3Z1ZV8xIiwiUmVwb3J0aW5nUmVnaW9uQnVkZ2V0X3Z1ZV8xIiwiUmVjaXBpZW50Q291bnRyeUJ1ZGdldF92dWVfMSIsIlRvdGFsRXhwZW5kaXR1cmVfdnVlXzEiLCJTaWduSW4iLCJKb2luTm93IiwicGFnZUNvbnRlbnQiLCJ0b2dnbGVQYWdlIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfY3JlYXRlVk5vZGUiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X1NpZ25JbiIsIl9jb21wb25lbnRfSm9pbk5vdyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRXIxQixJQUFJLEVBQUU7QUFBUixDQUFsQjtBQUNBLElBQUlzMUIsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHO0VBQUUsU0FBTztBQUFULENBQWxCO0FBQ0EsSUFBSUMsV0FBVyxH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QSxJQUFJQyxVQUFVLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBakI7QUFDQSxJQUFJQyxVQUFVLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBakI7QUFDQSxJQUFJQyxVQUFVLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBakI7QUFDQSxJQUFJQyxVQUFVLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBakI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFDZGxxQixNQUFNLEVBQUUsUUFETTtFQUVkeXlDLEdBQUcsRUFBRSxxQkFGUztFQUdkbCtDLElBQUksRUFBRTtBQUhRLENBQWxCO0FBS0EsSUFBSTQxQixXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUc7RUFBRSxTQUFPO0FBQVQsQ0FBbEI7QUFDQSxJ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QUFDaG9DO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUM7Ozs7Ozs7Ozs7Ozs7QUNQdkM7Ozs7Ozs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QWUsQ0FBQyx5RkFBTSxhQUFhLHdGQUFNO0FBQzFFO0FBQ0EsSUFBSSxLQUFVLEVBQUUsRUFZZjs7O0FBR0QsaUVBQWU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCK0Q7QUFDbEI7QUFDTDs7QUFFdkQsQ0FBdUc7QUFDdkcsaUNBQWlDLHFIQUFlLENBQUMsOEVBQU0sYUFBYSx3RkFBTTtBQUMxRTtBQUNBLElBQUksS0FBVSxFQUFFLEVBWWY7OztBQUdELGlFQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCK1E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVo7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUY7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVo7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQU87Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUY7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQW5COzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBOEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQXBDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQXVCOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FNOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FGOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBbEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUk7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVg7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ExQjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBUjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQU07Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVA7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVU7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQVg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBekU7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQTVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNsSkEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CcmVhZENydW1iLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRGVzY3JpcHRpb25Gb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JQb3BVcC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL05hdkRyb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1B1Ymxpc2hCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9TdGlja3lFcnJvcnMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zdGF0dXMvRWxlbWVudFN0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGVmYXVsdFZhbHVlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5RGV0YWlsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQ3JlYXRlTW9kYWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1B1Ymxpc2hTZWxlY3RlZC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUmVmcmVzaFRvYXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0FjdGl2aXR5RGF0ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Db25kaXRpb25zLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0h1bWFuaXRhcmlhblNjb3BlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xlZ2FjeURhdGEudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTG9jYXRpb24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BhcnRpY2lwYXRpbmdPcmcudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGxhbm5lZERpc2J1cnNlbWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRSZWdpb24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZXN1bHQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1RhZy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UaXRsZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JEZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9CYXNlbGluZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvTWVhc3VyZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1RpdGxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0eUVsZW1lbnQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWRkQWN0aXZpdHlCdXR0b24udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9FbGVtZW50c05vdGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRW1wdHlBY3Rpdml0eS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvU2lkZWJhckhlbHBCbG9jay52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9UYWJsZUxheW91dC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzTGlzdC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL2VsZW1lbnRzL0FjdHVhbFZhbHVlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHREZXRhaWwudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHRFbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0RvY3VtZW50TGluay52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0luZGljYXRvci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1Jlc3VsdFR5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9UaXRsZURlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkxpc3QudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRmxvd1R5cGUudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RpZWRTdGF0dXMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RyYW5zYWN0aW9uRGF0ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9WYWx1ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvQWN0aXZpdHlVcGxvYWQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2ltcG9ydC9MaXN0RWxlbWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ09yZ0J1ZGdldC52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1RvdGFsQnVkZ2V0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9yZXNldC9SZXNldFBhc3N3b3JkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9PcmdhbmlzYXRpb25MaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zdXBlcmFkbWluL2NvbXBvbmVudHMvVGFibGVMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9FbWFpbFZlcmlmaWNhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVJlZ2lzdGVyUGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVN0YW5kYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9SZWdpc3RlclBhZ2UudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1N1cHBvcnRQYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9BZG1pbkZvb3Rlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvSm9pbk5vdy52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvU2lnbkluLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJGb290ZXIudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkhlYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9hcHAudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb3NhYmxlL2NvcmVFbGVtZW50cy50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvZGF0ZUZvcm1hdC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvZW5jcnlwdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvc2FibGUvdGl0bGUudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb3NhYmxlL3V0aWxzLnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvYWN0aXZpdGllcy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL2FjdGl2aXRpZXMvc2hvdy50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvc2V0dGluZy9hY3Rpb25zLnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvc3RvcmUvc2V0dGluZy9tdXRhdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3N0b3JlL3NldHRpbmcvc3RhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvSW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL2VsZW1lbnRzL0luZGV4LnRzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9JbmRleC50cyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9BYm91dFBhZ2UudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1dlbGNvbWVQYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvU2hpbW1lckxvYWRpbmcudnVlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUGFzc3dvcmRSZWNvdmVyeS52dWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZT85OGRiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvck1lc3NhZ2UudnVlPzgwNzUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWU/NDk4MSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZT8yMjBiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZT8wMTgyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9TaGltbWVyTG9hZGluZy52dWU/ZjE5NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRXJyb3JMaXN0cy52dWU/Y2M2ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2UyM2UiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/YmY0ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlPzM1N2IiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/ODAzYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/MjE4YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlP2RkYzgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0aWVzRWxlbWVudHMudnVlP2UyZjUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/OWZkMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWU/M2NmNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT82NmJlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1JlZ2lzdGVyUGFnZS52dWU/ZmU0YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9TaWduSW4udnVlP2EzZTIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9zYXNzL2FwcC5zY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlLyBzeW5jIF5cXC5cXC8uKiQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X2RhdGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9zY29wZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3N0YXR1cy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2J1ZGdldC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2J1aWxkaW5nLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY2FwaXRhbF9zcGVuZC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbGxhYm9yYXRpb25fdHlwZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbmRpdGlvbnMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb250YWN0X2luZm8uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb3VudHJ5X2J1ZGdldF9pdGVtcy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Nycy1hZGQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2FpZF90eXBlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZGVmYXVsdF9maW5hbmNlX3R5cGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2Zsb3dfdHlwZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZG9jdW1lbnRfbGluay5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2h1bWFuaXRhcmlhbl9zY29wZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2lhdGlfaWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2luZGljYXRvci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2xlZ2FjeV9kYXRhLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvbG9jYXRpb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9vdGhlcl9pZGVudGlmaWVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcGFydGljaXBhdGluZ19vcmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9wZXJpb2Quc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9wbGFubmVkX2Rpc2J1cnNlbWVudC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BvbGljeV9tYXJrZXIuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZWxhdGVkX2FjdGl2aXR5LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVwb3J0aW5nX29yZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3Jlc3VsdHMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9zZWN0b3Iuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90YWcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90aXRsZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3RyYW5zYWN0aW9ucy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FkZC1tb3JlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWRkLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWxlcnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1jZW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1yaWdodC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FwcHJvdmVkLWNsb3VkLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXJyb3ctZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LWxlZnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hcnJvdy1yaWdodC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LXNob3J0LWxlZnQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hc2NlbmRpbmctYXJyb3cuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9iaWxsLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYm94LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYnVkZ2V0LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYnVpbGRpbmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jYW5jZWwtY2xvdWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVjay1jaXJjbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGVja2JveC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NoZWNrZWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jaGV2cm9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2xvc2Uuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jb3B5cmlnaHQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jb3JlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0xLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0yLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVsZXRlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVzY2VuZGluZy1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RvY3VtZW50LXdyaXRlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG91YmxlLXRpY2suc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kb3dubG9hZC1maWxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG93bmxvYWQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kcm9wZG93bi1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2VkaXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9leHRlcm5hbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2V5ZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2ZvbGRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Zvb3Rlci1sb2dvLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZ3JvdXAuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oZWFkZXItbG9nby5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hlYWRwaG9uZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2hlbHAuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oaXN0b3J5LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvaWMtdmVyaWZpY2F0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbGVmdC1hcnJvdy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2xvZ28td2hpdGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sb2dvLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbG9nb3V0LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbWFpbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL21vb24uc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9ub3RlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2J1aWxkaW5nLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2RvY3VtZW50X2xpbmsuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvbmFtZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdfaWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbmlzYXRpb25faWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbml6YXRpb25faWRlbnRpZmllci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeV9idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X29yZ19idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X3JlZ2lvbl9idWRnZXQuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVwb3J0aW5nX29yZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZXBvcnRpbmdfb3JnYW5pc2F0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RpdGxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RvdGFsX2J1ZGdldC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy90b3RhbF9leHBlbmRpdHVyZS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BhbmVsLXNlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BsdXMuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9wdWJsaXNoLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcHctbG9jay5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3F1ZXN0aW9uLW1hcmsuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtY3Jvc3Muc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtZG90LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcmVkby5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3JpZ2h0LWFycm93LnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2V0dGluZy5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NoaWVsZC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NtaWxlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc3Rhci5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3RpY2suc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90aW1lcy1jaXJjbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90d2l0dGVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdXBsb2FkLWZpbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy91c2VyLXByb2ZpbGUuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy91c2VyLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvd2FybmluZy1hY3Rpdml0eS5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmctZmlsbC5zdmciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmcuc3ZnIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy95b3V0dWJlLnN2ZyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlP2E5Y2YiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yTWVzc2FnZS52dWU/NTg4OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZT9hMGMzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Mb2FkZXIudnVlP2VjYzIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BvcHVwTW9kYWwudnVlP2VlMWIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZT85NTBlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT9hYjkzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWU/ZDc4MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvU3RpY2t5RXJyb3JzLnZ1ZT83Mjk1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlJbmRleC52dWU/ODgwZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0NyZWF0ZU1vZGFsLnZ1ZT82ZDM5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZT81NDI3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0Vycm9ySXRlbS52dWU/ZGVlYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/MGE3ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT9jODU2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYWdlLnZ1ZT84MTIzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlPzQ4NDUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZT9jN2E1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWU/NDQ3OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlPzNjMmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0JyZWFkQ3J1bWIudnVlP2FhMWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWU/NmYxMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRGVzY3JpcHRpb25Gb3JtLnZ1ZT8xNDEwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvck1lc3NhZ2UudnVlP2UxZDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yUG9wVXAudnVlPzMyZmEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0hvdmVyVGV4dC52dWU/YTJlNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZT80MmI3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9OYXZEcm9wZG93bi52dWU/YWUwYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWU/ZWQzMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUmFkaWFsUHJvZ3Jlc3NCYXIudnVlPzc0YTciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZT8yNjdiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlPzI3YjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWU/MzkxZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlPzZlNDEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvTGluay52dWU/MjQ3YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9QdWJsaXNoQnV0dG9uLnZ1ZT9hOGQ3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWU/NDFhMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZT84YzkwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT84ODhlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlPzkzNjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlPzkxN2IiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWU/ZTJmMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2ZkYzciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/YWZjYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc3RhdHVzL0VsZW1lbnRTdGF0dXMudnVlP2RhNTQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT9mODczIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP2Q0YTkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURldGFpbC52dWU/OTQ2NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlPzA0NmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/OGU2ZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/Nzc0OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlPzAxM2QiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZT8zOWRhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWU/OTFiYSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT8yYmYwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQWN0aXZpdHlEYXRlLnZ1ZT8yZjBiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQ29uZGl0aW9ucy52dWU/YzE4ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZT82MDcyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzZiNWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9IdW1hbml0YXJpYW5TY29wZS52dWU/NTliYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZT8yZDc2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTGVnYWN5RGF0YS52dWU/YjhkYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xvY2F0aW9uLnZ1ZT8yYmJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZT83MjNlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGFydGljaXBhdGluZ09yZy52dWU/ODk4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BsYW5uZWREaXNidXJzZW1lbnQudnVlPzBkYzYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlPzhlYjgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT84MTBmIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZT9iYjg4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZT81ZTk4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT8zYmU5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVzdWx0LnZ1ZT8xOGRlIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZT8yMjc5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGFnLnZ1ZT84ZDE3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGl0bGUudnVlP2MzZTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlPzUwMjYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWU/NDkwNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yTGlzdC52dWU/MDk1OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlPzQxYjYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Jhc2VsaW5lLnZ1ZT84MDYwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWU/OTc5ZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT80ZDg3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRpY2F0b3JBc2NlbmRpbmcudnVlPzQ2ZDciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL01lYXN1cmUudnVlPzFjNmIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWU/MmU3OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvUmVmZXJlbmNlLnZ1ZT9hYjcxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9UaXRsZS52dWU/MDEzMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/NzVlMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWU/MjE2YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT80NzQzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/MTEyYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWU/NDZhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VtcHR5QWN0aXZpdHkudnVlPzU0MWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlPzIxMWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9TaWRlYmFySGVscEJsb2NrLnZ1ZT8zODg2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvVGFibGVMYXlvdXQudnVlPzcwNDYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlP2U2NGMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZT9jMzJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9lbGVtZW50cy9BY3R1YWxWYWx1ZS52dWU/NGVhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlPzJjOTgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdERldGFpbC52dWU/NDdlZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RWxlbWVudC52dWU/M2VmMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWU/OGIzYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT83ZDE1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRpY2F0b3IudnVlPzg1ZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWU/MjkzMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvUmVzdWx0VHlwZS52dWU/ZjNmNCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvVGl0bGVEZXNjcmlwdGlvbi52dWU/ZTA5YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWU/NThmMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP2RiNWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZT8xNTA4Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlPzMyZjgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzE5NWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/ODFkMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWU/NGE4NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GbG93VHlwZS52dWU/NzEzNCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/MzE1MSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/NjJlYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT8wMTUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWU/ZGY2MyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlP2FiM2YiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVGllZFN0YXR1cy52dWU/NzhkMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9UcmFuc2FjdGlvbkRhdGUudnVlP2U4OWQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZT84M2NhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1ZhbHVlLnZ1ZT8xMTg3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0FjdGl2aXR5VXBsb2FkLnZ1ZT9mODc3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlP2ZmOGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvSW1wb3J0UGxhY2Vob2xkZXIudnVlPzFhNTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvTGlzdEVsZW1lbnQudnVlP2U2MTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/ZDJlNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/YWE0YSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/Yjg3NSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlPzAwNDQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/MzdlZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdCdWRnZXQudnVlPzllYWIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT85ZWE0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/YjEwOCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEJ1ZGdldC52dWU/ZGQyYiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT83YjM3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUGFzc3dvcmRSZWNvdmVyeS52dWU/OWNiZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWU/ZjFhYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFzc3dvcmQudnVlPzQzNjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zZXR0aW5nL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/OTE1YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlPzAxMDMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zZXR0aW5nL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/ZTI0NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vT3JnYW5pc2F0aW9uTGlzdC52dWU/ZTUwNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9BZG1pbkJhci52dWU/NjY2MCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3N1cGVyYWRtaW4vY29tcG9uZW50cy9UYWJsZUxpc3QudnVlPzMxMTciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvQWJvdXRQYWdlLnZ1ZT83OGRjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT9jMGE2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlPzIzZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVN0YW5kYXJkLnZ1ZT82NTJjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlPzg2OWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZT8xNWU1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1N1cHBvcnRQYWdlLnZ1ZT8wNThjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1dlbGNvbWVQYWdlLnZ1ZT8wZGViIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0FkbWluRm9vdGVyLnZ1ZT80MjJiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0pvaW5Ob3cudnVlPzVhNTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvU2lnbkluLnZ1ZT8wMzVkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkZvb3Rlci52dWU/YTdkMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJIZWFkZXIudnVlP2FlYjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZT9kNDgwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CcmVhZENydW1iLnZ1ZT8xYjI2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlPzUxMjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Rlc2NyaXB0aW9uRm9ybS52dWU/ZGQxZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZT9kN2I3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvclBvcFVwLnZ1ZT80MjgxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Ib3ZlclRleHQudnVlPzEyMGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWU/ZWU4YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTmF2RHJvcGRvd24udnVlP2JjZGUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BvcHVwTW9kYWwudnVlPzM5NDciLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZT8wMWI5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlPzZkM2MiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWU/MzVkNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9EZWxldGVCdXR0b24udnVlPzhiMmIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvTGluay52dWU/ZmE1ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvYnV0dG9ucy9QdWJsaXNoQnV0dG9uLnZ1ZT9hYmUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWU/MGU4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZT8xMzM1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9FcnJvckxpc3RzLnZ1ZT8wY2I3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlPzg5NGYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP2NiMmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWU/YjI2YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlP2Y3ODMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1N0aWNreUVycm9ycy52dWU/NmU5NiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc3RhdHVzL0VsZW1lbnRTdGF0dXMudnVlP2Y0M2QiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT8yYWVjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlPzY1YzEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURldGFpbC52dWU/YjFlMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlP2MyNmQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWU/ZjU4OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9CdWxrUHVibGlzaGluZy52dWU/ZjA0NSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlPzUwNjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZT83NzQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1JlZnJlc2hUb2FzdC52dWU/Zjk2NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT8zYTkyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQWN0aXZpdHlEYXRlLnZ1ZT8zM2I2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvQ29uZGl0aW9ucy52dWU/NTlhNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbnRhY3RJbmZvLnZ1ZT85ZGE2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzRiZTIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9IdW1hbml0YXJpYW5TY29wZS52dWU/YzI3MyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0lhdGlJZGVudGlmaWVyLnZ1ZT8yNmUwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTGVnYWN5RGF0YS52dWU/NzFhNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xvY2F0aW9uLnZ1ZT8zNDBhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvT3RoZXJJZGVudGlmaWVyLnZ1ZT9hMmM2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGFydGljaXBhdGluZ09yZy52dWU/NzBjMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1BsYW5uZWREaXNidXJzZW1lbnQudnVlP2ZmNGQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Qb2xpY3lNYXJrZXIudnVlP2RlYjAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT9kODU3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVjaXBpZW50UmVnaW9uLnZ1ZT9kMzhjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZT8zZGU3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT9kNWNmIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVzdWx0LnZ1ZT83NGY2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvU2VjdG9yLnZ1ZT80OTZjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGFnLnZ1ZT8wMzE0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGl0bGUudnVlPzgxMDgiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlPzAxZTAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckRldGFpbC52dWU/OTcxNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yTGlzdC52dWU/MmNjNyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQWdncmVnYXRpb25TdGF0dXMudnVlPzAxOGQiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0Jhc2VsaW5lLnZ1ZT8wYzJiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWU/ZmY4ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT80NDI0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRpY2F0b3JBc2NlbmRpbmcudnVlPzEzYWEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL01lYXN1cmUudnVlP2VhZTYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1BlcmlvZC52dWU/MzhmNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvUmVmZXJlbmNlLnZ1ZT85MjQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9UaXRsZS52dWU/OWZmMCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/OGM5NCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWU/NWM1MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0FkZEFjdGl2aXR5QnV0dG9uLnZ1ZT9jMjBkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/OTQyNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWU/MDYxNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VtcHR5QWN0aXZpdHkudnVlPzI4MWUiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9QYWdlVGl0bGUudnVlPzlkMWYiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9TaWRlYmFySGVscEJsb2NrLnZ1ZT8wZGY0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvVGFibGVMYXlvdXQudnVlPzYzNDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlPzdhODMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZT82NzQzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9lbGVtZW50cy9BY3R1YWxWYWx1ZS52dWU/MzMwZSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvVGFyZ2V0VmFsdWUudnVlPzE2YjAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdERldGFpbC52dWU/MGE5YyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RWxlbWVudC52dWU/ODUxYSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0TGlzdC52dWU/NmE3MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZT9hY2NkIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9JbmRpY2F0b3IudnVlPzBiNzEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWU/NjNhNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvUmVzdWx0VHlwZS52dWU/MTYzMSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvVGl0bGVEZXNjcmlwdGlvbi52dWU/NWUzMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkRldGFpbC52dWU/MmU1MCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkVsZW1lbnQudnVlPzUzYjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZT85MjA3Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0FpZFR5cGUudnVlPzM0NzkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGVzY3JpcHRpb24udnVlPzgzZjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/MWU1MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GaW5hbmNlVHlwZS52dWU/NWRjMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GbG93VHlwZS52dWU/YjVkNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/ODgwYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/OWM0NyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZT9jNWFhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWU/NGJiNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9TZWN0b3IudnVlPzZmODAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVGllZFN0YXR1cy52dWU/ODI3OCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9UcmFuc2FjdGlvbkRhdGUudnVlPzBiOTkiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZT80NTRiIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1ZhbHVlLnZ1ZT84YmY0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0FjdGl2aXR5VXBsb2FkLnZ1ZT9jZjY1Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlPzg1NDAiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvSW1wb3J0UGxhY2Vob2xkZXIudnVlPzJhYjIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvTGlzdEVsZW1lbnQudnVlP2M5NjEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vT3JnYW5pc2F0aW9uRGF0YS52dWU/YjMyOSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/ODc4YiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/YWM0ZiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlPzUzOTEiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/N2EwMiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdCdWRnZXQudnVlPzZhZjMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT8wOTgzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/YTA3OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEJ1ZGdldC52dWU/NGJhZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT81MWQyIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYWdlLnZ1ZT9lOGIzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYXNzd29yZC52dWU/ZWU0OSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT84NWU5Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nUGFnZS52dWU/ZjBlMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZT8zZjM0Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9PcmdhbmlzYXRpb25MaXN0LnZ1ZT80NDBhIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL0FkbWluQmFyLnZ1ZT80MjRjIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL1RhYmxlTGlzdC52dWU/OWYyZCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/NWExNiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT83Y2IwIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlTdGFuZGFyZC52dWU/MDZhNCIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT84OGMxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1JlZ2lzdGVyUGFnZS52dWU/OTg2MyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9TdXBwb3J0UGFnZS52dWU/Y2ZkYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9BZG1pbkZvb3Rlci52dWU/NjhiNSIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9Kb2luTm93LnZ1ZT82NjAxIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWU/NjNkMyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJGb290ZXIudnVlPzZkZWIiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvV2ViSGVhZGVyLnZ1ZT8wMmY2Iiwid2VicGFjazovLy8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0Fib3V0UGFnZS52dWU/ZDYzYyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9XZWxjb21lUGFnZS52dWU/YzY2MiIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvIHN5bmMgXlxcLlxcLy4qJCIsIndlYnBhY2s6Ly8vaWdub3JlZHwvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy9jcnlwdG8tanN8Y3J5cHRvIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIENyZWF0ZU1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBZG1pbkhlYWRlcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdXNlcjogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHYgPT09IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHN1cGVyQWRtaW46IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHRyYW5zbGF0aW9uID0gd2luZG93WydnbG9iYWxMYW5nJ107XG4gICAgICAgIHZhciBzaG93VXNlckRyb3Bkb3duID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIucmVmKSgnJyk7XG4gICAgICAgIHZhciB0b2FzdFR5cGUgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBsYW5ndWFnZU5hdkxpQ2xhc3NlczogJ2ZsZXgnLFxuICAgICAgICAgICAgbGFuZ3VhZ2VOYXZBbmNob3JDbGFzc2VzOiAnZmxleCB0ZXh0LXdoaXRlIGl0ZW1zLWNlbnRlciB1cHBlcmNhc2UgbmF2X19wb2ludGVyLWhvdmVyIHB4LTEuNScsXG4gICAgICAgICAgICBtZW51TmF2TGlDbGFzc2VzOiAnZmxleCBweC00IHJlbGF0aXZlJyxcbiAgICAgICAgICAgIG1lbnVOYXZBbmNob3JDbGFzc2VzOiAnZmxleCB0ZXh0LXdoaXRlIGl0ZW1zLWNlbnRlciB1cHBlcmNhc2UgbmF2X19wb2ludGVyLWhvdmVyJyxcbiAgICAgICAgICAgIGxhbmd1YWdlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6ICdFTicsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJyMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlOiAnRlInLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcjJyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6ICdFUycsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJyMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWVudXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRyYW5zbGF0aW9uLmFkbWluLmhlYWRlci5hY3Rpdml0eV9kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdHJhbnNsYXRpb24uYWRtaW4uaGVhZGVyLm9yZ2FuaXNhdGlvbl9kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcvb3JnYW5pc2F0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdHJhbnNsYXRpb24uYWRtaW4uaGVhZGVyLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICBwZXJtYWxpbms6ICcvc2V0dGluZycsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRyYW5zbGF0aW9uLmNvbW1vbl9sYW5nLmFkZF9pbXBvcnRfYWN0aXZpdHksXG4gICAgICAgICAgICAgICAgICAgIHBlcm1hbGluazogJyMnLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGxpQ2xhc3MgPSAnYmxvY2sgcC0yLjUgdGV4dC1uLTQwIHRleHQtdGlueSB1cHBlcmNhc2UgbGVhZGluZy1bMS41XSBmb250LWJvbGQgaG92ZXI6IXRleHQtbi01MCBob3ZlcjpiZy1uLTEwJztcbiAgICAgICAgdmFyIF9jID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIG1vZGFsVmFsdWUgPSBfY1swXSwgbW9kYWxUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgZnVuY3Rpb24gdG9hc3QobWVzc2FnZSwgdHlwZSkge1xuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgMTUwMDApO1xuICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnZhbHVlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIHRvYXN0VHlwZS52YWx1ZSA9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzVG91Y2hEZXZpY2UgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIFRvZ2dsZU1vZGVsKCkge1xuICAgICAgICAgICAgbW9kYWxUb2dnbGUoKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb3BlbkFkZE1vZGVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIHZ1ZV8yLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlQWN0aXZlTWVudSgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICAgICAgZGF0YS5tZW51cy5mb3JFYWNoKGZ1bmN0aW9uIChtZW51LCBrZXkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLm1lbnVzW2tleV1bJ2FjdGl2ZSddID0gbWVudS5wZXJtYWxpbmsgPT09IHBhdGggPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdhY3Rpdml0eScpIHx8XG4gICAgICAgICAgICAgICAgcGF0aC5pbmNsdWRlcygncmVzdWx0JykgfHxcbiAgICAgICAgICAgICAgICBwYXRoLmluY2x1ZGVzKCdpbmRpY2F0b3InKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbMF1bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdvcmdhbmlzYXRpb24nKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbMV1bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdpbXBvcnQnKSkge1xuICAgICAgICAgICAgICAgIGRhdGEubWVudXNbM11bJ2FjdGl2ZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbCBzdG9yYWdlIGZvciBwdWJsaXNoaW5nXG4gICAgICAgIHZhciBwYSA9ICgwLCBjb3JlXzEudXNlU3RvcmFnZSkoJ3Z1ZS11c2UtbG9jYWwtc3RvcmFnZScsIHtcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdBY3Rpdml0aWVzOiAoX2IgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaGluZ0FjdGl2aXRpZXMnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30sXG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBsb2dvdXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGEudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xLmRlZmF1bHQucG9zdCgnL2xvZ291dCcpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZWFyY2ggZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHNlYXJjaFZhbHVlID0gKDAsIHZ1ZV8yLnJlZikoJycpO1xuICAgICAgICB2YXIgY3VycmVudFVSTCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICBpZiAoY3VycmVudFVSTC5pbmNsdWRlcygnPycpKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSwgc2VhcmNoID0gdXJsUGFyYW1zLmdldCgncScpO1xuICAgICAgICAgICAgc2VhcmNoVmFsdWUudmFsdWUgPSBzZWFyY2g7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNwaW5uZXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBzZWFyY2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHNwaW5uZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHBhcmFtID0gKF9hID0gc2VhcmNoVmFsdWUudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgICAgICAgdmFyIHNvcnRpbmdQYXJhbSA9ICcnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSAmJiBjdXJyZW50VVJMLmluY2x1ZGVzKCcmJykpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZ0FyciA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgICAgICAgICAgICAgc29ydGluZ1BhcmFtID0gJyYnICsgcXVlcnlTdHJpbmdBcnIuc2xpY2UoMSkuam9pbignJicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhyZWYgPSBwYXJhbSA/IFwiXCIuY29uY2F0KHVybCwgXCI/cT1cIikuY29uY2F0KHBhcmFtKS5jb25jYXQoc29ydGluZ1BhcmFtKSA6ICcvYWN0aXZpdGllcy8nO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlQWN0aXZlTWVudSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3BlbkFkZE1vZGVsJykgPT09ICd0cnVlJyAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJy9hY3Rpdml0aWVzJykge1xuICAgICAgICAgICAgICAgIG1vZGFsVmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8yLm9uVW5tb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb3BlbkFkZE1vZGVsJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyB0cmFuc2xhdGlvbjogdHJhbnNsYXRpb24sIHNob3dVc2VyRHJvcGRvd246IHNob3dVc2VyRHJvcGRvd24sIHRvYXN0VmlzaWJpbGl0eTogdG9hc3RWaXNpYmlsaXR5LCBzaG93U2lkZWJhcjogc2hvd1NpZGViYXIsIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCB0b2FzdFR5cGU6IHRvYXN0VHlwZSwgZGF0YTogZGF0YSwgbGlDbGFzczogbGlDbGFzcywgbW9kYWxWYWx1ZTogbW9kYWxWYWx1ZSwgbW9kYWxUb2dnbGU6IG1vZGFsVG9nZ2xlLCB0b2FzdDogdG9hc3QsIGlzVG91Y2hEZXZpY2U6IGlzVG91Y2hEZXZpY2UsIFRvZ2dsZU1vZGVsOiBUb2dnbGVNb2RlbCwgY2hhbmdlQWN0aXZlTWVudTogY2hhbmdlQWN0aXZlTWVudSwgcGE6IHBhLCBsb2dvdXQ6IGxvZ291dCwgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLCBjdXJyZW50VVJMOiBjdXJyZW50VVJMLCBzcGlubmVyOiBzcGlubmVyLCBzZWFyY2hGdW5jdGlvbjogc2VhcmNoRnVuY3Rpb24sIENyZWF0ZU1vZGFsOiBDcmVhdGVNb2RhbF92dWVfMS5kZWZhdWx0LCBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdCcmVhZENydW1iJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LCBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0J1dHRvbkNvbXBvbmVudCcsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgYnRuVHlwZSA9ICcnO1xuICAgICAgICBpZiAocHJvcHMudHlwZSA9PT0gJ3NlY29uZGFyeScpIHtcbiAgICAgICAgICAgIGJ0blR5cGUgPSAnc2Vjb25kYXJ5LWJ0biBmb250LWJvbGQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BzLnR5cGUgPT09ICdvdXRsaW5lJykge1xuICAgICAgICAgICAgYnRuVHlwZSA9ICdwcmltYXJ5LW91dGxpbmUtYnRuJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9wcy50eXBlID09PSAncHJpbWFyeScpIHtcbiAgICAgICAgICAgIGJ0blR5cGUgPSAncHJpbWFyeS1idG4gZm9udC1ib2xkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJ0blR5cGUgPSAnZm9udC1ib2xkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBidG5UeXBlOiBidG5UeXBlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdEZXNjcmlwdGlvbkZvcm0nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7fSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICByZXR1cm4geyBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMyA9IHJlcXVpcmUoXCJAaGVhZGxlc3N1aS92dWVcIik7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdFcnJvck1lc3NhZ2UnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGlzRW1wdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHNob3cgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBoYXNFcnJvcnMgPSAoMCwgdnVlXzIucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBlcnJvckNvdW50ID0gKDAsIHZ1ZV8yLnJlZikoMCk7XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzIuaW5qZWN0KShcInRvYXN0RGF0YVwiKTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgYWNjb3VudF92ZXJpZmllZDogZmFsc2UsXG4gICAgICAgICAgICBwdWJsaXNoZXJfYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHRfc2V0dGluZzogZmFsc2UsXG4gICAgICAgICAgICBwdWJsaXNoZXJfc2V0dGluZzogZmFsc2UsXG4gICAgICAgICAgICB0b2tlbl9zdGF0dXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlzTG9hZGVyVmlzaWJsZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgZnVuY3Rpb24gcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwoKSB7XG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvdXNlci92ZXJpZmljYXRpb24vZW1haWxcIilcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcmVzLmRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHJlcy5kYXRhLnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBlcnJvci5kYXRhLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvc2V0dGluZy9zdGF0dXNcIiksXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvdXNlci92ZXJpZmljYXRpb24vc3RhdHVzXCIpLFxuICAgICAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KFwiL29yZ2FuaXNhdGlvbi9zdGF0dXNcIiksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXhpb3NfMS5kZWZhdWx0LnNwcmVhZChmdW5jdGlvbiAoc2V0dGluZ19yZXMsIHVzZXJfcmVzLCBvcmdfcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBzZXR0aW5nX3Jlcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdXNlcl9yZXNwb25zZSA9IHVzZXJfcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcmdfcmVzcG9uc2UgPSBvcmdfcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5kZWZhdWx0X3NldHRpbmcgPSAoX2EgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRfc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEucHVibGlzaGVyX3NldHRpbmcgPSAoX2IgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnB1Ymxpc2hlcl9zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS50b2tlbl9zdGF0dXMgPSAoX2MgPSByZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnRva2VuX3N0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLmFjY291bnRfdmVyaWZpZWQgPSB1c2VyX3Jlc3BvbnNlLmRhdGEuYWNjb3VudF92ZXJpZmllZDtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnB1Ymxpc2hlcl9hY3RpdmUgPSBvcmdfcmVzcG9uc2UuZGF0YS5wdWJsaXNoZXJfYWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBlZEVycm9yID0gW1wiZGVmYXVsdF9zZXR0aW5nXCIsIFwicHVibGlzaGVyX3NldHRpbmdcIiwgXCJ0b2tlbl9zdGF0dXNcIl07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGVycm9yIGluIGVycm9yRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvckRhdGFbZXJyb3JdICYmIGdyb3VwZWRFcnJvci5pbmRleE9mKGVycm9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvdW50LnZhbHVlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXJyb3JEYXRhLnB1Ymxpc2hlcl9zZXR0aW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudG9rZW5fc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEuZGVmYXVsdF9zZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudC52YWx1ZSArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGVycm9yRGF0YSkuaW5kZXhPZihmYWxzZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHNob3c6IHNob3csIGhhc0Vycm9yczogaGFzRXJyb3JzLCBlcnJvckNvdW50OiBlcnJvckNvdW50LCB0b2FzdERhdGE6IHRvYXN0RGF0YSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGlzTG9hZGVyVmlzaWJsZTogaXNMb2FkZXJWaXNpYmxlLCByZXNlbmRWZXJpZmljYXRpb25FbWFpbDogcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwsIFRyYW5zaXRpb25Sb290OiB2dWVfMy5UcmFuc2l0aW9uUm9vdCwgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0Vycm9yUG9wVXAnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogQXJyYXkgfHwgU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBlbWl0czogWydjbG9zZS1wb3B1cCddLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZSwgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbWl0KCdjbG9zZS1wb3B1cCcsICdjbG9zZWQnKTtcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzIub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgZW1pdDogZW1pdCwgcHJvcHM6IHByb3BzLCBjbG9zZTogY2xvc2UgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIHByb3BzOiB7XG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBob3ZlclRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJ3ctNjAnLFxuICAgICAgICB9LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBpY29uU2l6ZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dJYXRpUmVmZXJlbmNlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICByZXR1cm4geyBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnTG9hZGVyQ21wJyxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIHByb3BzOiB7XG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYnRuVGV4dDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJ0bkxpbms6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUG9wdXBNb2RhbCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kYWxBY3RpdmU6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICc4MDknLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgZW1pdHM6IFsnY2xvc2UnLCAncmVzZXQnXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzLCBfYSkge1xuICAgICAgICB2YXIgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcHMubW9kYWxBY3RpdmU7IH0sIGZ1bmN0aW9uIChtb2RhbEFjdGl2ZSkge1xuICAgICAgICAgICAgaWYgKG1vZGFsQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICBlbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgZW1pdCgncmVzZXQnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgY2xvc2U6IGNsb3NlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZTNfcmFkaWFsX3Byb2dyZXNzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInZ1ZTMtcmFkaWFsLXByb2dyZXNzXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFJhZGlhbFByb2dyZXNzQmFyOiB2dWUzX3JhZGlhbF9wcm9ncmVzc18xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBwZXJjZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgY29tcGxldGVkUGVyY2VudCA9ICgwLCB2dWVfMS5yZWYpKHByb3BzLnBlcmNlbnQpO1xuICAgICAgICB2YXIgdG90YWxQZXJjZW50ID0gKDAsIHZ1ZV8xLnJlZikoMTAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZFBlcmNlbnQ6IGNvbXBsZXRlZFBlcmNlbnQsXG4gICAgICAgICAgICB0b3RhbFBlcmNlbnQ6IHRvdGFsUGVyY2VudCxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1BhZ2luYXRpb25Db21wb25lbnQnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBlbWl0czogWydmZXRjaEFjdGl2aXRpZXMnXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzLCBfYSkge1xuICAgICAgICB2YXIgZW1pdCA9IF9hLmVtaXQ7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBhY3RpdmVfcGFnZSA9ICgwLCB2dWVfMS5yZWYpKDEpO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGFjdGl2ZV9wYWdlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbWl0KCdmZXRjaEFjdGl2aXRpZXMnLCBhY3RpdmVfcGFnZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVQYWdlKHBhZ2UpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID0gcGFnZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VQYWdlKHBhZ2VOdW0pIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gcHJvcHMuZGF0YS5sYXN0X3BhZ2UgPyAxIDogcGFnZU51bTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBuZXh0UGFnZSgpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gcHJvcHMuZGF0YS5sYXN0X3BhZ2UgPyAxIDogYWN0aXZlX3BhZ2UudmFsdWUgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByZXZpb3VzUGFnZSgpIHtcbiAgICAgICAgICAgIGFjdGl2ZV9wYWdlLnZhbHVlID1cbiAgICAgICAgICAgICAgICBhY3RpdmVfcGFnZS52YWx1ZSA9PT0gMSA/IHByb3BzLmRhdGEubGFzdF9wYWdlIDogYWN0aXZlX3BhZ2UudmFsdWUgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBhY3RpdmVfcGFnZTogYWN0aXZlX3BhZ2UsXG4gICAgICAgICAgICB1cGRhdGVBY3RpdmVQYWdlOiB1cGRhdGVBY3RpdmVQYWdlLFxuICAgICAgICAgICAgbmV4dFBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcHJldmlvdXNQYWdlOiBwcmV2aW91c1BhZ2UsXG4gICAgICAgICAgICBjaGFuZ2VQYWdlOiBjaGFuZ2VQYWdlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdUb2FzdE1lc3NhZ2UnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICB0eXBlOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gKDAsIHZ1ZV8yLnJlZikoXCJcIik7XG4gICAgICAgIGNsYXNzTmFtZS52YWx1ZSA9IHByb3BzLnR5cGVcbiAgICAgICAgICAgID8gXCJyb3VuZGVkLWxnIGJnLW1pbnQgYm9yZGVyIGJvcmRlci1zcHJpbmctMTAgcHktMyBweC01IGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbCB0ZXh0LW4tNTBcIlxuICAgICAgICAgICAgOiBcInJvdW5kZWQtbGcgYmctY3JpbXNvbi0xMCBib3JkZXIgYm9yZGVyLWNyaW1zb24tMjAgcHktMyBweC01IGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEgdGV4dC1zbSBsZWFkaW5nLW5vcm1hbCB0ZXh0LW4tNTBcIjtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcHJvcHM6IHByb3BzLCBjbGFzc05hbWU6IGNsYXNzTmFtZSB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy9jb21wb25lbnRcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgUHJvZ3Jlc3NMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlXCIpKTtcbi8vIFZ1ZXggU3RvcmVcbnZhciBpbmRleF8xID0gcmVxdWlyZShcIlN0b3JlL2FjdGl2aXRpZXMvaW5kZXhcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnRGVsZXRlQnV0dG9uJyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgc3RvcmUgPSAoMCwgaW5kZXhfMS51c2VTdG9yZSkoKTtcbiAgICAgICAgLy8gdG9nZ2xlIHN0YXRlIGZvciBtb2RhbCBwb3B1cFxuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZGVsZXRlVmFsdWUgPSBfYlswXSwgZGVsZXRlVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIC8vIGRpc3BsYXkvaGlkZSB2YWxpZGF0b3IgbG9hZGVyXG4gICAgICAgIHZhciBsb2FkZXIgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6ICdQbGVhc2UgV2FpdCcsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjYWxsIGFwaSBmb3IgdW5wdWJsaXNoaW5nXG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIuaW5qZWN0KSgndG9hc3RNZXNzYWdlJyk7XG4gICAgICAgIHZhciBkZWxldGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXIudGV4dCA9ICdEZWxldGluZyc7XG4gICAgICAgICAgICBkZWxldGVWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGRlbGV0ZUVuZFBvaW50ID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KHN0b3JlLnN0YXRlLnNlbGVjdGVkQWN0aXZpdGllcyk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZGVsZXRlKGRlbGV0ZUVuZFBvaW50KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCcvYWN0aXZpdGllcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgc3RvcmU6IHN0b3JlLCBkZWxldGVWYWx1ZTogZGVsZXRlVmFsdWUsIGRlbGV0ZVRvZ2dsZTogZGVsZXRlVG9nZ2xlLCBsb2FkZXI6IGxvYWRlciwgbGFuZ3VhZ2U6IGxhbmd1YWdlLCB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSwgZGVsZXRlRnVuY3Rpb246IGRlbGV0ZUZ1bmN0aW9uLCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LCBMb2FkZXI6IFByb2dyZXNzTG9hZGVyX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdMaW5rQnV0dG9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdlZGl0JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVzaWduOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnaWNvblRleHQnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgZGVzaWduID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRlc2lnbjtcbiAgICAgICAgdmFyIHN0eWxlVHlwZSA9IGRlc2lnbi52YWx1ZTtcbiAgICAgICAgdmFyIGNsYXNzZXMgPSAnJztcbiAgICAgICAgc3dpdGNoIChzdHlsZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2JnVGV4dCc6XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9ICdmbGV4IGl0ZW1zLWNlbnRlciBiZy1uLTEwIHAtMSB0ZXh0LXRpbnkgZm9udC1ib2xkIHVwcGVyY2FzZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNsYXNzZXMgPVxuICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgZm9udC1ib2xkIGxlYWRpbmctbm9ybWFsIHVwcGVyY2FzZSB0ZXh0LXRpbnknO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNsYXNzZXM6IGNsYXNzZXMgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy9jb21wb25lbnRcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgUHJvZ3Jlc3NMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlXCIpKTtcbi8vIFZ1ZXggU3RvcmVcbnZhciBzaG93XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9zaG93XCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1B1Ymxpc2hCdXR0b24nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAncHJpbWFyeScgfSxcbiAgICAgICAgbGlua2VkVG9JYXRpOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHN0YXR1czogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIGNvcmVDb21wbGV0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgYWN0aXZpdHlJZDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgX2IgPSAoMCwgdnVlXzIudG9SZWZzKShwcm9wcyksIGxpbmtlZFRvSWF0aSA9IF9iLmxpbmtlZFRvSWF0aSwgc3RhdHVzID0gX2Iuc3RhdHVzLCBjb3JlQ29tcGxldGVkID0gX2IuY29yZUNvbXBsZXRlZCwgYWN0aXZpdHlJZCA9IF9iLmFjdGl2aXR5SWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgR2xvYmFsIFN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3RvcmUgPSAoMCwgc2hvd18xLmRldGFpbFN0b3JlKSgpO1xuICAgICAgICAvL2FjdGl2aXR5IGlkXG4gICAgICAgIHZhciBpZCA9IGFjdGl2aXR5SWQudmFsdWU7XG4gICAgICAgIC8vIHRvZ2dsZSBzdGF0ZSBmb3IgbW9kYWwgcG9wdXBcbiAgICAgICAgdmFyIF9jID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHB1Ymxpc2hWYWx1ZSA9IF9jWzBdLCBwdWJsaXNoVG9nZ2xlID0gX2NbMV07XG4gICAgICAgIC8vIHN0YXRlIGZvciBzdGVwIG9mIHRoZSBmbG93XG4gICAgICAgIHZhciBwdWJsaXNoU3RlcCA9ICgwLCB2dWVfMi5yZWYpKDApO1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICAvLyBzdGF0ZSBmb3IgZmlyc3Qgc3RlcFxuICAgICAgICAvLyBkZXRlcm1pbmUgaWYgY29yZSBlbGVtZW50IGNvbXBsZXRlZCBvciBub3RcbiAgICAgICAgLy8gdHJ1ZSBmb3IgY29tcGxldGVkIGFuZCBmYWxzZSBmb3Igbm90IGNvbXBsZXRlZFxuICAgICAgICB2YXIgY29yZUVsZW1lbnRTdGF0dXMgPSBjb3JlQ29tcGxldGVkLnZhbHVlO1xuICAgICAgICAvLyBEeW5hbWljIHRleHQgZm9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyVGV4dCA9ICgwLCB2dWVfMi5yZWYpKCdQbGVhc2UgV2FpdCcpO1xuICAgICAgICAvLyByZXNldCBzdGVwIHRvIHplcm8gYWZ0ZXIgY2xvc2luZyBtb2RhbFxuICAgICAgICB2YXIgcmVzZXRQdWJsaXNoU3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlID0gMDtcbiAgICAgICAgICAgIHB1Ymxpc2hWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICAvLyBjb21wdXRlZCBmdW5jdGlvbiB0byBjaGFuZ2UgY29udGVudCBvZiBtb2RhbFxuICAgICAgICB2YXIgcHVibGlzaFN0YXRlQ2hhbmdlID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHVibGlzaFN0YXRlID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgICAgICAgICBhbGVydFN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAnJywgZGVzY3JpcHRpb24gPSAnJywgaWNvbiA9ICd0aWNrJztcbiAgICAgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50IGZvciBzdGVwIDEgYmFzZWQgb24gY29yZUVsZW1lbnQgc3RhdHVzXG4gICAgICAgICAgICBpZiAoY29yZUVsZW1lbnRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLmNvcmVfY29tcGxldGVkX3RpdGxlO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcuY29yZV9jb21wbGV0ZWRfZGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLmNvcmVfbm90X2NvbXBsZXRlZF90aXRsZTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLmNvcmVfbm90X2NvbXBsZXRlZF9kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICBpY29uID0gJ3dhcm5pbmctZmlsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NyZWF0aW5nIGEgc2hvcnRlciB2YXJpYWJsZSBzbyB0aGF0IGJ1aWxkaW5nIGVycm9yIGRlc2NyaXB0aW9uIGZvciBjYXNlIDMgYW5kIDQgYmVjb21lcyBlYXNpcmVcbiAgICAgICAgICAgIHZhciBzID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcuc3RpY2t5LmNvbW1vbjtcbiAgICAgICAgICAgIHN3aXRjaCAocHVibGlzaFN0ZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5pY29uID0gaWNvbjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmFsZXJ0U3RhdGUgPSBjb3JlRWxlbWVudFN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgLy9zZWNvbmQgc3RlcFxuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLnRpdGxlID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcuc3RpY2t5LnRpdGxlXzE7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5kZXNjcmlwdGlvbiA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnN0aWNreS5kZXNjcmlwdGlvbl8xO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuaWNvbiA9IFwic2hpZWxkXCI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5hbGVydFN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vIGNhc2UgMiBpcyBmb3Igc3VjY2VzcyB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUudGl0bGUgPSBsYW5ndWFnZS5jb21tb25fbGFuZy5zdGlja3kudGl0bGVfMjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmRlc2NyaXB0aW9uID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcuc3RpY2t5LmRlc2NyaXB0aW9uXzI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5pY29uID0gXCJ0aWNrXCI7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5hbGVydFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgLy9jYXNlIDMgaXMgZm9yIHZhbGlkYXRpb24gd2l0aCBjcml0aWNhbCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS50aXRsZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnN0aWNreS50aXRsZV8zO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuZGVzY3JpcHRpb24gPSBcIjxwPjxiPlwiLmNvbmNhdChlcnIuY3JpdGljYWxOdW1iZXIsIFwiIFwiKS5jb25jYXQocy5jcml0aWNhbCwgXCIgXCIpLmNvbmNhdChzLmVycm9ycywgXCI8L2I+LCA8Yj5cIikuY29uY2F0KGVyci5lcnJvck51bWJlciwgXCIgXCIpLmNvbmNhdChzLmVycm9ycywgXCI8L2I+IFwiKS5jb25jYXQocy5hbmQsIFwiIDxiPlwiKS5jb25jYXQoZXJyLndhcm5pbmdOdW1iZXIsIFwiIFwiKS5jb25jYXQocy53YXJuaW5ncywgXCI8L2I+IFwiKS5jb25jYXQocy53YXJuaW5ncywgXCIuIFwiKS5jb25jYXQocy5jcml0aWNhbCwgXCI8L3A+PHA+XCIpLmNvbmNhdChzLmhhc19hdGxlYXN0X29uZV9jcml0aWNhbF9lcnJvciwgXCI8L3A+PHA+XCIpLmNvbmNhdChzLndlX2hpZ2hseV9yZWNvbW1lbmQsIFwiPC9wPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmljb24gPSBcIndhcm5pbmctZmlsbFwiO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuYWxlcnRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyBjYXNlIDQgaXMgZm9yIHZhbGlkYXRpb24gd2l0aG91dCBjcml0aWNhbCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS50aXRsZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnN0aWNreS50aXRsZV8zO1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuZGVzY3JpcHRpb24gPSBcIjxwPjxiPlwiLmNvbmNhdChlcnIuZXJyb3JOdW1iZXIsIFwiICBcIikuY29uY2F0KHMuZXJyb3JzLCBcIjwvYj4gIFwiKS5jb25jYXQocy5hbmQsIFwiIDxiPlwiKS5jb25jYXQoZXJyLndhcm5pbmdOdW1iZXIsIFwiICBcIikuY29uY2F0KHMud2FybmluZ3MsIFwiPC9iPiAgXCIpLmNvbmNhdChzLndlcmVfZm91bmQsIFwiLiAgXCIpLmNvbmNhdChzLnZpZXdfaW5mb3JtYXRpb24sIFwiPC9wPjxwPlwiKS5jb25jYXQocy53ZV9oaWdobHlfcmVjb21tZW5kLCBcIjwvcD5cIik7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5pY29uID0gXCJ3YXJuaW5nLWZpbGxcIjtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmFsZXJ0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHVibGlzaFN0YXRlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgZnVuY3Rpb25cbiAgICAgICAgdmFyIHN0ZXBQbHVzT25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHB1Ymxpc2hTdGVwLnZhbHVlID49IDAgJiYgcHVibGlzaFN0ZXAudmFsdWUgPCA0KSB7XG4gICAgICAgICAgICAgICAgcHVibGlzaFN0ZXAudmFsdWUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN0ZXBNaW51c09uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwdWJsaXNoU3RlcC52YWx1ZSA+IDAgJiYgcHVibGlzaFN0ZXAudmFsdWUgPD0gNCkge1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIHJlYWN0aXZlIHZhcmlhYmxlIGZvciBlcnJvcnMgbnVtYmVyXG4gICAgICAgIHZhciBlcnIgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGNyaXRpY2FsTnVtYmVyOiAwLFxuICAgICAgICAgICAgZXJyb3JOdW1iZXI6IDAsXG4gICAgICAgICAgICB3YXJuaW5nTnVtYmVyOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgdmFyIHZhbGlkYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlclRleHQudmFsdWUgPSBcIlwiLmNvbmNhdChsYW5ndWFnZS5jb21tb25fbGFuZy52YWxpZGF0aW5nLCBcIiBcIikuY29uY2F0KGxhbmd1YWdlLmNvbW1vbl9sYW5nLmFjdGl2aXR5KTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5wb3N0KFwiL2FjdGl2aXR5L1wiLmNvbmNhdChpZCwgXCIvdmFsaWRhdGVBY3Rpdml0eVwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaCgndXBkYXRlUHVibGlzaEVycm9ycycsIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgIC8vaWRlbnRpZnkgZXJyb3IgdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyaXQgPSByZXNwb25zZS5zdW1tYXJ5LmNyaXRpY2FsO1xuICAgICAgICAgICAgICAgICAgICAoZXJyLmNyaXRpY2FsTnVtYmVyID0gY3JpdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyLmVycm9yTnVtYmVyID0gcmVzcG9uc2Uuc3VtbWFyeS5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyLndhcm5pbmdOdW1iZXIgPSByZXNwb25zZS5zdW1tYXJ5Lndhcm5pbmcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3JpdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlID0gMztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGVwLnZhbHVlID0gNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0ZXAudmFsdWUgPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gY2FsbCBhcGkgZm9yIHB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKCdlcnJvckRhdGEnKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoZWNrIHB1Ymxpc2ggc3RhdHVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY2hlY2tQdWJsaXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0aWVzL2NoZWNrcy1mb3ItYWN0aXZpdHktcHVibGlzaFwiKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoVmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudHlwZSA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHB1Ymxpc2hGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gXCJcIi5jb25jYXQobGFuZ3VhZ2UuY29tbW9uX2xhbmcucHVibGlzaGluZywgXCIgXCIpLmNvbmNhdChsYW5ndWFnZS5jb21tb25fbGFuZy5hY3Rpdml0eSk7XG4gICAgICAgICAgICByZXNldFB1Ymxpc2hTdGVwKCk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQucG9zdChcIi9hY3Rpdml0eS9cIi5jb25jYXQoaWQsIFwiL3B1Ymxpc2hcIikpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVVblB1Ymxpc2hlZCcsIHJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTaG93UHVibGlzaGVkJywgIXJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBwdWJsaXNoLXJlcHVibGlzaFxuICAgICAgICB2YXIgcHVibGlzaFN0YXR1cyA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgbGlua2VkX3RvX2lhdGk6IGxpbmtlZFRvSWF0aS52YWx1ZSxcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGJ0blRleHQgPSAoMCwgdnVlXzIuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwdWJsaXNoU3RhdHVzLmxpbmtlZF90b19pYXRpICYmIHB1Ymxpc2hTdGF0dXMuc3RhdHVzID09PSAnZHJhZnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmJ1dHRvbl9sYW5nLnJlcHVibGlzaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFwdWJsaXNoU3RhdHVzLmxpbmtlZF90b19pYXRpICYmXG4gICAgICAgICAgICAgICAgcHVibGlzaFN0YXR1cy5zdGF0dXMgPT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2UuYnV0dG9uX2xhbmcucHVibGlzaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgcHJvcHM6IHByb3BzLCBsaW5rZWRUb0lhdGk6IGxpbmtlZFRvSWF0aSwgc3RhdHVzOiBzdGF0dXMsIGNvcmVDb21wbGV0ZWQ6IGNvcmVDb21wbGV0ZWQsIGFjdGl2aXR5SWQ6IGFjdGl2aXR5SWQsIHN0b3JlOiBzdG9yZSwgaWQ6IGlkLCBwdWJsaXNoVmFsdWU6IHB1Ymxpc2hWYWx1ZSwgcHVibGlzaFRvZ2dsZTogcHVibGlzaFRvZ2dsZSwgcHVibGlzaFN0ZXA6IHB1Ymxpc2hTdGVwLCBsb2FkZXI6IGxvYWRlciwgY29yZUVsZW1lbnRTdGF0dXM6IGNvcmVFbGVtZW50U3RhdHVzLCBsb2FkZXJUZXh0OiBsb2FkZXJUZXh0LCByZXNldFB1Ymxpc2hTdGVwOiByZXNldFB1Ymxpc2hTdGVwLCBwdWJsaXNoU3RhdGVDaGFuZ2U6IHB1Ymxpc2hTdGF0ZUNoYW5nZSwgc3RlcFBsdXNPbmU6IHN0ZXBQbHVzT25lLCBzdGVwTWludXNPbmU6IHN0ZXBNaW51c09uZSwgZXJyOiBlcnIsIHZhbGlkYXRvckZ1bmN0aW9uOiB2YWxpZGF0b3JGdW5jdGlvbiwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGNoZWNrUHVibGlzaDogY2hlY2tQdWJsaXNoLCBwdWJsaXNoRnVuY3Rpb246IHB1Ymxpc2hGdW5jdGlvbiwgcHVibGlzaFN0YXR1czogcHVibGlzaFN0YXR1cywgYnRuVGV4dDogYnRuVGV4dCwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTW9kYWw6IFBvcHVwTW9kYWxfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudFxudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIHNob3dfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL3Nob3dcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVW5QdWJsaXNoQnV0dG9uJyxcbiAgICBwcm9wczoge1xuICAgICAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3ByaW1hcnknIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSAoMCwgdnVlXzIudG9SZWZzKShwcm9wcykuYWN0aXZpdHlJZDtcbiAgICAgICAgLy8gdG9nZ2xlIHN0YXRlIGZvciBtb2RhbCBwb3B1cFxuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgdW5wdWJsaXNoVmFsdWUgPSBfYlswXSwgdW5wdWJsaXNoVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIC8vR2xvYmFsIFN0YXRlXG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzaG93XzEuZGV0YWlsU3RvcmUpKCk7XG4gICAgICAgIC8vYWN0aXZpdHkgaWRcbiAgICAgICAgdmFyIGlkID0gYWN0aXZpdHlJZC52YWx1ZTtcbiAgICAgICAgLy8gZGlzcGxheS9oaWRlIHZhbGlkYXRvciBsb2FkZXJcbiAgICAgICAgdmFyIGxvYWRlciA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgdGV4dDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcucGxlYXNlX3dhaXQsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjYWxsIGFwaSBmb3IgdW5wdWJsaXNoaW5nXG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIuaW5qZWN0KSgndG9hc3RNZXNzYWdlJyk7XG4gICAgICAgIHZhciB1blB1Ymxpc2hGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXIudGV4dCA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnVucHVibGlzaGluZztcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5wb3N0KFwiL2FjdGl2aXR5L1wiLmNvbmNhdChpZCwgXCIvdW5wdWJsaXNoXCIpKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIHVucHVibGlzaFRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVVuUHVibGlzaGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNob3dQdWJsaXNoZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVQdWJsaXNoRXJyb3JzJywgW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgcHJvcHM6IHByb3BzLCBhY3Rpdml0eUlkOiBhY3Rpdml0eUlkLCB1bnB1Ymxpc2hWYWx1ZTogdW5wdWJsaXNoVmFsdWUsIHVucHVibGlzaFRvZ2dsZTogdW5wdWJsaXNoVG9nZ2xlLCBzdG9yZTogc3RvcmUsIGlkOiBpZCwgbG9hZGVyOiBsb2FkZXIsIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCB1blB1Ymxpc2hGdW5jdGlvbjogdW5QdWJsaXNoRnVuY3Rpb24sIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudFxudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdEZWxldGVBY3Rpb24nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGl0ZW1JZDogeyB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBpdGVtVHlwZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgcHJvcHMgPSBfX3Byb3BzO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICAvLyBwcm9wc1xuICAgICAgICAvLyB0b2dnbGUgc3RhdGUgZm9yIG1vZGFsIHBvcHVwXG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkZWxldGVWYWx1ZSA9IF9iWzBdLCBkZWxldGVUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgdmFyIGRlbGV0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAncmVzdWx0JyB8fCBwcm9wcy5pdGVtVHlwZSA9PT0gJ3RyYW5zYWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAnaW5kaWNhdG9yJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLml0ZW1UeXBlID09PSAncGVyaW9kJykge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5kZWxldGUoXCJcIi5jb25jYXQocHJvcHMuaXRlbVR5cGUsIFwiL1wiKS5jb25jYXQocHJvcHMuaXRlbUlkKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHByb3BzOiBwcm9wcywgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLCBkZWxldGVUb2dnbGU6IGRlbGV0ZVRvZ2dsZSwgZGVsZXRlRnVuY3Rpb246IGRlbGV0ZUZ1bmN0aW9uLCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vL3Byb3BzXG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnRXJyb3JMaXN0cycsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZXJyb3JzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IFwiZXJyb3JcIiB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgLy9wcm9wcyBkZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBfYiA9ICgwLCB2dWVfMi50b1JlZnMpKHByb3BzKSwgdHlwZSA9IF9iLnR5cGUsIGVycm9ycyA9IF9iLmVycm9ycztcbiAgICAgICAgdmFyIGVycm9yVHlwZSA9ICgwLCB2dWVfMi5yZWYpKFwiXCIpO1xuICAgICAgICAvLyBjb2xvcnMgYmFzZWQgb24gdHlwZSBwcm9wcyB2YWx1ZVxuICAgICAgICB2YXIgYmdDb2xvciA9IFwiXCIsIGljb25Db2xvciA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZS52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImNyaXRpY2FsXCI6XG4gICAgICAgICAgICAgICAgYmdDb2xvciA9IFwiYmctbGF2ZW5kZXItNjAgYm9yZGVyLWxhdmVuZGVyLTUwXCI7XG4gICAgICAgICAgICAgICAgaWNvbkNvbG9yID0gXCJ0ZXh0LWxhdmVuZGVyLTUwXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwid2FybmluZ3NcIjpcbiAgICAgICAgICAgICAgICBiZ0NvbG9yID0gXCJiZy1lZ2dzaGVsbCBib3JkZXItY2FtZWwtNTBcIjtcbiAgICAgICAgICAgICAgICBpY29uQ29sb3IgPSBcInRleHQtY2FtZWwtNTBcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYmdDb2xvciA9IFwiYmctcm9zZSBib3JkZXItY3JpbXNvbi00MFwiO1xuICAgICAgICAgICAgICAgIGljb25Db2xvciA9IFwidGV4dC1jcmltc29uLTQwXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRvZ2dsZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGFjY29yZGlvblRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IGUuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5lcnJvcnNfX2xpc3RcIik7XG4gICAgICAgICAgICB2YXIgZWxIZWlnaHQgPSAoX2EgPSB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQucXVlcnlTZWxlY3RvcihcInVsXCIpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgaWYgKHRvZ2dsZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IFwiLmNvbmNhdChlbEhlaWdodCwgXCJweDtcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogYXV0bztcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB1cGRhdGVFcnJvckNvdW50TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVycm9yVHlwZS52YWx1ZSA9XG4gICAgICAgICAgICAgICAgZXJyb3JzLnZhbHVlLmxlbmd0aCArIFwiIFwiICsgdHlwZS52YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR5cGUudmFsdWUuc2xpY2UoMSk7XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZUVycm9yQ291bnRNZXNzYWdlKCk7XG4gICAgICAgICgwLCB2dWVfMi53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JzLnZhbHVlOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1cGRhdGVFcnJvckNvdW50TWVzc2FnZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcHJvcHM6IHByb3BzLCB0eXBlOiB0eXBlLCBlcnJvcnM6IGVycm9ycywgZXJyb3JUeXBlOiBlcnJvclR5cGUsIGJnQ29sb3I6IGJnQ29sb3IsIGljb25Db2xvcjogaWNvbkNvbG9yLCB0b2dnbGU6IHRvZ2dsZSwgYWNjb3JkaW9uVG9nZ2xlOiBhY2NvcmRpb25Ub2dnbGUsIHVwZGF0ZUVycm9yQ291bnRNZXNzYWdlOiB1cGRhdGVFcnJvckNvdW50TWVzc2FnZSB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vLyBjb21wb25lbnRzXG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSGF2ZU5vdEFkZGVkWWV0JyxcbiAgICBjb21wb25lbnRzOiB7IEJ0bjogTGlua192dWVfMS5kZWZhdWx0IH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbGluazoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYnRuVGV4dDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vY29tcG9uZW50XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFBvcHVwTW9kYWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG4vLyBwdWJsaXNoLXJlcHVibGlzaFxuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24nLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIC8vIHRvZ2dsZSBzdGF0ZSBmb3IgbW9kYWwgcG9wdXBcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHB1Ymxpc2hWYWx1ZSA9IF9iWzBdLCBwdWJsaXNoVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIHZhciBfYyA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCB1bnB1Ymxpc2hWYWx1ZSA9IF9jWzBdLCB1bnB1Ymxpc2hUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgLy8gZGlzcGxheS9oaWRlIHZhbGlkYXRvciBsb2FkZXJcbiAgICAgICAgdmFyIGxvYWRlciA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgLy8gc3RhdGUgZm9yIGZpcnN0IHN0ZXBcbiAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGNvcmUgZWxlbWVudCBjb21wbGV0ZWQgb3Igbm90XG4gICAgICAgIC8vIHRydWUgZm9yIGNvbXBsZXRlZCBhbmQgZmFsc2UgZm9yIG5vdCBjb21wbGV0ZWRcbiAgICAgICAgdmFyIG1hbmRhdG9yeUVsZW1lbnRTdGF0dXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm1hbmRhdG9yeUNvbXBsZXRlZFwiKTtcbiAgICAgICAgLy8gRHluYW1pYyB0ZXh0IGZvciBsb2FkZXJcbiAgICAgICAgdmFyIGxvYWRlclRleHQgPSAoMCwgdnVlXzIucmVmKShcIlBsZWFzZSBXYWl0XCIpO1xuICAgICAgICAvLyBjb21wdXRlZCBmdW5jdGlvbiB0byBjaGFuZ2UgY29udGVudCBvZiBtb2RhbFxuICAgICAgICB2YXIgcHVibGlzaFN0YXRlQ2hhbmdlID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHVibGlzaFN0YXRlID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJcIixcbiAgICAgICAgICAgICAgICBhbGVydFN0YXRlOiBtYW5kYXRvcnlFbGVtZW50U3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkaWZmZXJlbnQgY29udGVudCBmb3Igc3RlcCAxIGJhc2VkIG9uIGNvcmVFbGVtZW50IHN0YXR1c1xuICAgICAgICAgICAgaWYgKG1hbmRhdG9yeUVsZW1lbnRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUudGl0bGUgPSBcIkNvcmUgRWxlbWVudHMgQ29tcGxldGVcIjtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuZGVzY3JpcHRpb24gPVxuICAgICAgICAgICAgICAgICAgICBcIkNvbmdyYXR1bGF0aW9ucyEgQWxsIHRoZSBjb3JlIGVsZW1lbnRzIGFyZSBjb21wbGV0ZS4gQ29udGludWUgdG8gcHVibGlzaCB0aGlzIG9yZ2FuaXphdGlvbi5cIjtcbiAgICAgICAgICAgICAgICBwdWJsaXNoU3RhdGUuaWNvbiA9IFwidGlja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLnRpdGxlID0gXCJDb3JlIEVsZW1lbnRzIG5vdCBjb21wbGV0ZVwiO1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0ZS5kZXNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIFwiPHA+VGhlcmUgaXMgbWlzc2luZyBkYXRhIGluIHNvbWUgb2YgdGhlIGNvcmUgZWxlbWVudHMuIFdlIGhpZ2hseSByZWNvbW1lbmQgdGhhdCB5b3UgY29tcGxldGUgdGhlc2UgZGF0YSBmaWVsZHMgdG8gaGVscCBlbnN1cmUgeW91ciBkYXRhIGlzIHVzZWZ1bC48L3A+XCI7XG4gICAgICAgICAgICAgICAgcHVibGlzaFN0YXRlLmljb24gPSBcIndhcm5pbmctZmlsbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHB1Ymxpc2hTdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNhbGwgYXBpIGZvciBwdWJsaXNoaW5nXG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzIuaW5qZWN0KShcInRvYXN0RGF0YVwiKTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKFwiZXJyb3JEYXRhXCIpO1xuICAgICAgICAvKipcbiAgICAgICAgICogY2hlY2sgcHVibGlzaCBzdGF0dXNcbiAgICAgICAgICovXG4gICAgICAgIHZhciBjaGVja1B1Ymxpc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KFwiL29yZ2FuaXNhdGlvbi9jaGVja3MtZm9yLW9yZ2FuaXNhdGlvbi1wdWJsaXNoXCIpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hWYWx1ZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS50eXBlID0gcmVzcG9uc2Uuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcHVibGlzaEZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlclRleHQudmFsdWUgPSBcIlB1Ymxpc2hpbmdcIjtcbiAgICAgICAgICAgIHB1Ymxpc2hWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LnBvc3QoXCIvb3JnYW5pc2F0aW9uL3B1Ymxpc2hcIikudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcmVzcG9uc2Uuc3VjY2VzcztcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hTdGF0dXMuaXNfcHVibGlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXR1cy5zdGF0dXMgPSBcInB1Ymxpc2hlZFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdW5QdWJsaXNoRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9IFwiVW5wdWJsaXNoaW5nXCI7XG4gICAgICAgICAgICB1bnB1Ymxpc2hWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LnBvc3QoXCIvb3JnYW5pc2F0aW9uL3VucHVibGlzaFwiKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaFN0YXR1cy5pc19wdWJsaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHB1Ymxpc2hTdGF0dXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcInB1Ymxpc2hTdGF0dXNcIik7XG4gICAgICAgIHZhciBidG5UZXh0ID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocHVibGlzaFN0YXR1cy5pc19wdWJsaXNoZWQgJiYgcHVibGlzaFN0YXR1cy5zdGF0dXMgPT09IFwiZHJhZnRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlJlcHVibGlzaFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUHVibGlzaFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCBwdWJsaXNoVmFsdWU6IHB1Ymxpc2hWYWx1ZSwgcHVibGlzaFRvZ2dsZTogcHVibGlzaFRvZ2dsZSwgdW5wdWJsaXNoVmFsdWU6IHVucHVibGlzaFZhbHVlLCB1bnB1Ymxpc2hUb2dnbGU6IHVucHVibGlzaFRvZ2dsZSwgbG9hZGVyOiBsb2FkZXIsIG1hbmRhdG9yeUVsZW1lbnRTdGF0dXM6IG1hbmRhdG9yeUVsZW1lbnRTdGF0dXMsIGxvYWRlclRleHQ6IGxvYWRlclRleHQsIHB1Ymxpc2hTdGF0ZUNoYW5nZTogcHVibGlzaFN0YXRlQ2hhbmdlLCB0b2FzdERhdGE6IHRvYXN0RGF0YSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIGNoZWNrUHVibGlzaDogY2hlY2tQdWJsaXNoLCBwdWJsaXNoRnVuY3Rpb246IHB1Ymxpc2hGdW5jdGlvbiwgdW5QdWJsaXNoRnVuY3Rpb246IHVuUHVibGlzaEZ1bmN0aW9uLCBwdWJsaXNoU3RhdHVzOiBwdWJsaXNoU3RhdHVzLCBidG5UZXh0OiBidG5UZXh0LCBCdG5Db21wb25lbnQ6IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LCBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LCBMb2FkZXI6IFByb2dyZXNzTG9hZGVyX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy8gY29tcG9uZW50c1xudmFyIEJyZWFkQ3J1bWJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnJlYWRDcnVtYi52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdQYWdlVGl0bGUnLFxuICAgIGNvbXBvbmVudHM6IHsgQnJlYWRjcnVtYjogQnJlYWRDcnVtYl92dWVfMS5kZWZhdWx0IH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYnJlYWRjcnVtYkRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tMaW5rOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1Byb2dyZXNzTG9hZGVyJyxcbiAgICBwcm9wczoge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlVGV4dDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMi5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0ge307XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbi8vIGNvbXBvbmVudHNcbnZhciBFcnJvckxpc3RzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdTdGlja3lFcnJvcnMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGVycm9yRGF0YTogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIC8vIHRvZ2dsZSBpc3N1ZXNcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGVycm9yVmFsdWUgPSBfYlswXSwgZXJyb3JUb2dnbGUgPSBfYlsxXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGxpc3Qgb2YgZXJyb3JzXG4gICAgICAgICAqKi9cbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi50b1JlZnMpKHByb3BzKS5lcnJvckRhdGE7XG4gICAgICAgIHZhciB0ZW1wRGF0YSA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICAgIGNyaXRpY2FsOiBbXSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB1cGRhdGVUZW1wTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlcnJvckRhdGFQcm9wcyA9IGVycm9yRGF0YS52YWx1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGRhdGEgaW4gdGVtcERhdGEpIHtcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YVtkYXRhXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBlcnJvckRhdGFQcm9wc18xID0gZXJyb3JEYXRhUHJvcHM7IF9pIDwgZXJyb3JEYXRhUHJvcHNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGVycm9yRGF0YVByb3BzXzFbX2ldO1xuICAgICAgICAgICAgICAgIHZhciBzZXZlcml0eSA9IGRhdGEuc2V2ZXJpdHk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3JpdGljYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNyaXRpY2FsLnB1c2goZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmVycm9ycy5wdXNoKGRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIndhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLndhcm5pbmdzLnB1c2goZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlVGVtcE1lc3NhZ2UoKTtcbiAgICAgICAgKDAsIHZ1ZV8yLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvckRhdGEudmFsdWU7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVwZGF0ZVRlbXBNZXNzYWdlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHByb3BzOiBwcm9wcywgZXJyb3JWYWx1ZTogZXJyb3JWYWx1ZSwgZXJyb3JUb2dnbGU6IGVycm9yVG9nZ2xlLCBlcnJvckRhdGE6IGVycm9yRGF0YSwgdGVtcERhdGE6IHRlbXBEYXRhLCB1cGRhdGVUZW1wTWVzc2FnZTogdXBkYXRlVGVtcE1lc3NhZ2UsIEVycm9yTGlzdHM6IEVycm9yTGlzdHNfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0VsZW1lbnRTdGF0dXMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8yLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBjb2xvciA9IGRhdGEudmFsdWUgPyAndGV4dC1zcHJpbmctNTAnIDogJ3RleHQtY3JpbXNvbi01MCcsIHRleHQgPSBkYXRhLnZhbHVlID8gbGFuZ3VhZ2UuY29tbW9uX2xhbmcuY29tcGxldGVkIDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcubm90X2NvbXBsZXRlZDtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCBwcm9wczogcHJvcHMsIGRhdGE6IGRhdGEsIGNvbG9yOiBjb2xvciwgdGV4dDogdGV4dCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUHJldmlvdXNseVB1Ymxpc2hlZCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IHdpbmRvd1tcImdsb2JhbExhbmdcIl0uY29tbW9uX2xhbmcucHJldmlvdXNseV9wdWJsaXNoZWRfb25faWF0aSB9LFxuICAgICAgICBpY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2FwcHJvdmVkLWNsb3VkJyB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0ge307XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtdWx0aXNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJAdnVlZm9ybS9tdWx0aXNlbGVjdFwiKSk7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnQWN0aXZpdHlEZWZhdWx0VmFsdWUnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGN1cnJlbmNpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2VzOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBidWRnZXROb3RQcm92aWRlZDoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBodW1hbml0YXJpYW46IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1snZ2xvYmFsTGFuZyddO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvcHNcbiAgICAgICAgICovXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWFjdGl2ZSB2YXJpYWJsZXNcbiAgICAgICAgICovXG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVzID0gKDAsIHZ1ZV8yLnJlZikoe1xuICAgICAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogJycsXG4gICAgICAgICAgICBkZWZhdWx0X2N1cnJlbmN5OiAnJyxcbiAgICAgICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgaGllcmFyY2h5OiAnJyxcbiAgICAgICAgICAgIGh1bWFuaXRhcmlhbjogJycsXG4gICAgICAgIH0pLCBkZWZhdWx0RXJyb3JzID0gKDAsIHZ1ZV8yLnJlZikoe1xuICAgICAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogW10sXG4gICAgICAgICAgICBkZWZhdWx0X2N1cnJlbmN5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHRfbGFuZ3VhZ2U6IFtdLFxuICAgICAgICAgICAgaGllcmFyY2h5OiBbXSxcbiAgICAgICAgICAgIGh1bWFuaXRhcmlhbjogW10sXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JSZXNldCA9IGRlZmF1bHRFcnJvcnMudmFsdWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPbiBNb3VudGVkXG4gICAgICAgICAqL1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSwgZGVmYXVsdERhdGE7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL2RlZmF1bHRfdmFsdWVzL2RhdGFcIikpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IChfYS5zZW50KCkpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXMudmFsdWUgPSBkZWZhdWx0RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVmXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgbG9hZGVyVmlzaWJpbGl0eSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKSwgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpLCB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIucmVmKSgnJyksIHRvYXN0VHlwZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdCBmb3JtXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0RXJyb3JzLnZhbHVlID0gZXJyb3JSZXNldDtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wdXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL2RlZmF1bHRfdmFsdWVzXCIpLCBkZWZhdWx0VmFsdWVzLnZhbHVlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0b2FzdFZpc2liaWxpdHkudmFsdWUgPSBmYWxzZSk7IH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS52YWx1ZSA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0VHlwZS52YWx1ZSA9IHJlc3BvbnNlID09PSBudWxsIHx8IHJlc3BvbnNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEVycm9ycy52YWx1ZSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkZWZhdWx0RXJyb3JzLnZhbHVlKSwgKF9hID0gZXJyb3IucmVzcG9uc2UuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9ycyk7XG4gICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSAoX2IgPSBlcnJvci5yZXNwb25zZS5kYXRhKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdFR5cGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHByb3BzOiBwcm9wcywgZGVmYXVsdFZhbHVlczogZGVmYXVsdFZhbHVlcywgZGVmYXVsdEVycm9yczogZGVmYXVsdEVycm9ycywgZXJyb3JSZXNldDogZXJyb3JSZXNldCwgbG9hZGVyVmlzaWJpbGl0eTogbG9hZGVyVmlzaWJpbGl0eSwgdG9hc3RWaXNpYmlsaXR5OiB0b2FzdFZpc2liaWxpdHksIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCB0b2FzdFR5cGU6IHRvYXN0VHlwZSwgc3VibWl0Rm9ybTogc3VibWl0Rm9ybSwgTXVsdGlzZWxlY3Q6IG11bHRpc2VsZWN0XzEuZGVmYXVsdCwgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCwgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xuLy8gY29tcG9uZW50c1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgUmFkaWFsUHJvZ3Jlc3NCYXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvUmFkaWFsUHJvZ3Jlc3NCYXIudnVlXCIpKTtcbnZhciBQdWJsaXNoQnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvUHVibGlzaEJ1dHRvbi52dWVcIikpO1xudmFyIFVuUHVibGlzaEJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWVcIikpO1xudmFyIERlbGV0ZUJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0RlbGV0ZUJ1dHRvbi52dWVcIikpO1xudmFyIFN0aWNreUVycm9yc192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9TdGlja3lFcnJvcnMudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgRXJyb3JQb3BVcF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9FcnJvclBvcFVwLnZ1ZVwiKSk7XG4vLyBBY3Rpdml0eSBDb21wb25lbnRzXG52YXIgQWN0aXZpdGllc0VsZW1lbnRzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJBY3Rpdml0eS9wYXJ0aWFscy9BY3Rpdml0aWVzRWxlbWVudHMudnVlXCIpKTtcbnZhciBBY3Rpdml0eUVsZW1lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkFjdGl2aXR5L3BhcnRpYWxzL0FjdGl2aXR5RWxlbWVudC52dWVcIikpO1xudmFyIFByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc3RhdHVzL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlXCIpKTtcbi8vIFZ1ZXggU3RvcmVcbnZhciBzaG93XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9zaG93XCIpO1xudmFyIGluZGV4XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9pbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFByb2dyZXNzQmFyOiBSYWRpYWxQcm9ncmVzc0Jhcl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBFbGVtZW50czogQWN0aXZpdGllc0VsZW1lbnRzX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEFjdGl2aXR5RWxlbWVudDogQWN0aXZpdHlFbGVtZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFJlc3VsdDogSW5kZXhfMS5SZXN1bHQsXG4gICAgICAgIFB1Ymxpc2g6IFB1Ymxpc2hCdXR0b25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRXJyb3JzOiBTdGlja3lFcnJvcnNfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVW5QdWJsaXNoOiBVblB1Ymxpc2hCdXR0b25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRGVsZXRlQnV0dG9uOiBEZWxldGVCdXR0b25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUHJldmlvdXNseVB1Ymxpc2hlZDogUHJldmlvdXNseVB1Ymxpc2hlZF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBFcnJvclBvcFVwOiBFcnJvclBvcFVwX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBwcm9ncmVzczoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHRzOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2FjdGlvbnM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvcmVDb21wbGV0ZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaWF0aVZhbGlkYXRvclJlc3BvbnNlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIF9hID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLCB0eXBlcyA9IF9hLnR5cGVzLCBjb3JlQ29tcGxldGVkID0gX2EuY29yZUNvbXBsZXRlZDtcbiAgICAgICAgdmFyIHN0b3JlID0gKDAsIHNob3dfMS5kZXRhaWxTdG9yZSkoKTtcbiAgICAgICAgdmFyIGluZGV4U3RvcmUgPSAoMCwgaW5kZXhfMS51c2VTdG9yZSkoKTtcbiAgICAgICAgdmFyIHNob3dTaWRlYmFyID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgcG9zaXRpb25ZID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciBzY3JlZW5XaWR0aCA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgc2hvd1NpZGViYXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgbW9kYWwgcG9wdXAgY29tcGxldGVkXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX2IgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZGVsZXRlVmFsdWUgPSBfYlswXSwgZGVsZXRlVG9nZ2xlID0gX2JbMV07XG4gICAgICAgIHZhciBfYyA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkb3dubG9hZFZhbHVlID0gX2NbMF0sIGRvd25sb2FkVG9nZ2xlID0gX2NbMV07XG4gICAgICAgIHZhciB0b2dnbGVTaWRlYmFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgPSAhc2hvd1NpZGViYXIudmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3NpdGlvblkudmFsdWUgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGlzdG9wVmlzaWJsZSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uWS52YWx1ZSA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB3aWR0aCA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uVW5tb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NyZWVuV2lkdGgudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBjYWxjV2lkdGggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHNjcmVlbldpZHRoLnZhbHVlID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gICAgICAgICAgICBpZiAoc2NyZWVuV2lkdGgudmFsdWUgPiAxMDI0KSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiB0b2FzdERhdGEudmlzaWJpbGl0eTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZ25vcmVUb2FzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgfSwgMTAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdyb3VwaW5nIGFsbCB0aGUgZGF0YSdzIGZvciBzY3JvbGwgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogdGhpcyBkYXRhIGlzIGNyZWF0ZWQgdXNpbmcgcHJvcHMuZWxlbWVudF9ncm91cCBhbmQgcHJvcHMuYWN0aXZpdHlcbiAgICAgICAgICovXG4gICAgICAgIHZhciBfZCA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgZ3JvdXBzID0gX2QuZ3JvdXBzLCBhY3Rpdml0eSA9IF9kLmFjdGl2aXR5LCBlbGVtZW50cyA9IF9kLmVsZW1lbnRzLCBzdGF0dXMgPSBfZC5zdGF0dXMsIHRyYW5zYWN0aW9ucyA9IF9kLnRyYW5zYWN0aW9ucywgZ3JvdXBlZERhdGEgPSBncm91cHMudmFsdWUsIGFjdGl2aXR5UHJvcHMgPSBhY3Rpdml0eS52YWx1ZSwgYWN0aXZpdGllcyA9IGdyb3Vwcy52YWx1ZSwgZWxlbWVudFByb3BzID0gZWxlbWVudHMudmFsdWUsIHN0YXR1c1Byb3BzID0gc3RhdHVzLnZhbHVlLCB0cmFuc2FjdGlvblByb3BzID0gdHJhbnNhY3Rpb25zLnZhbHVlO1xuICAgICAgICB2YXIgcmVzdWx0cyA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5yZXN1bHRzO1xuICAgICAgICBhY3Rpdml0eVByb3BzLnJlc3VsdCA9IHJlc3VsdHMudmFsdWU7XG4gICAgICAgIGFjdGl2aXR5UHJvcHMudHJhbnNhY3Rpb25zID0gdHJhbnNhY3Rpb25Qcm9wcztcbiAgICAgICAgLy8gZ2VuZXJhdGluZyBhdmFpbGFibGUgZWxlbWVudHNcbiAgICAgICAgT2JqZWN0LmtleXMoYWN0aXZpdGllcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBmbGFnID0gZmFsc2U7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhY3Rpdml0aWVzW2tleV1bJ2VsZW1lbnRzJ10pLm1hcChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGl2aXR5UHJvcHNba10gPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgYWN0aXZpdHlQcm9wc1trXSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5UHJvcHNba10gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGFjdGl2aXR5UHJvcHNba10pLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdGllc1trZXldWydlbGVtZW50cyddW2tdWydjb250ZW50J10gPSBhY3Rpdml0eVByb3BzW2tdO1xuICAgICAgICAgICAgICAgICAgICBhY3Rpdml0aWVzW2tleV1bJ2VsZW1lbnRzJ11ba11bJ2hvdmVyX3RleHQnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBlbGVtZW50UHJvcHNba11bJ2hvdmVyX3RleHQnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFjdGl2aXRpZXNba2V5XVtrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmbGFnID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhY3Rpdml0aWVzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZW5lcmF0aW5nIGF2YWlsYWJsZSBjYXRlZ29yaWVzIG9mIGVsZW1lbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwZWREYXRhKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpdml0aWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZERhdGFba2V5XVsnc3RhdHVzJ10gPSAnZW5hYmxlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cGVkRGF0YVtrZXldWydzdGF0dXMnXSA9ICdkaXNhYmxlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogR3JvdXBpbmcgYWxsIGVsZW1lbnRzIGFuZCB0aGVpcnMgY29tcGxldGVkIHN0YXR1c1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb21iaW5pbmcgcHJvcHMuZWxlbWVudHMgYW5kIHByb3BzLnN0YXR1c1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBvYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnRQcm9wcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBlbGVtZW50UHJvcHNba2V5XVsnY29tcGxldGVkJ10gPSAoX2EgPSBzdGF0dXNQcm9wc1trZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trZXldWydub3RfY29tcGxldGVkJ10gPSAhKChfYiA9IHN0YXR1c1Byb3BzW2tleV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlKTtcbiAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trZXldWydoYXNfZGF0YSddID0gMDtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gYWN0aXZpdHlQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIGFjdGl2aXR5UHJvcHNba2V5XSA9PT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFjdGl2aXR5UHJvcHNba2V5XSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5UHJvcHNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYWN0aXZpdHlQcm9wc1trZXldKS5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eVByb3BzW2tleV0udG9TdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFByb3BzW2tleV1bJ2hhc19kYXRhJ10gPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmRpbmcgY3VycmVudCBsYW5ndWFnZSAtIGFjdGl2aXR5IHRpdGxlXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcGFnZVRpdGxlID0gJyc7XG4gICAgICAgIHZhciBmb3VuZCA9IGFjdGl2aXR5UHJvcHMudGl0bGUuZmluZChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRMYW5ndWFnZSA9ICdlbic7XG4gICAgICAgICAgICByZXR1cm4gZS5sYW5ndWFnZSA9PT0gY3VycmVudExhbmd1YWdlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2FsbGJhY2sgaWYgbGFuZ3VhZ2Ugbm90IGF2YWlsYWJsZSBpbiBkYXRhXG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgcGFnZVRpdGxlID0gZm91bmQubmFycmF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFnZVRpdGxlID0gYWN0aXZpdHlQcm9wcy50aXRsZVswXS5uYXJyYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0VGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aXRsZS5yZXBsYWNlKC9fL2dpLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaWdub3JlVXBkYXRlcyA9ICgwLCBjb3JlXzEud2F0Y2hJZ25vcmFibGUpKHRvYXN0RGF0YSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9LCB7XG4gICAgICAgICAgICBmbHVzaDogJ3N5bmMnLFxuICAgICAgICB9KS5pZ25vcmVVcGRhdGVzO1xuICAgICAgICB2YXIgaWdub3JlVG9hc3RVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZ25vcmVVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBwdWJsaXNoU3RhdHVzID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBsaW5rZWRfdG9faWF0aTogYWN0aXZpdHlQcm9wcy5saW5rZWRfdG9faWF0aSxcbiAgICAgICAgICAgIHN0YXR1czogYWN0aXZpdHlQcm9wcy5zdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB2dWUgcHJvdmlkZXNcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCd0eXBlcycsIHR5cGVzLnZhbHVlKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdjb3JlQ29tcGxldGVkJywgY29yZUNvbXBsZXRlZC52YWx1ZSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgndG9hc3RNZXNzYWdlJywgdG9hc3RNZXNzYWdlKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCd0b2FzdERhdGEnLCB0b2FzdERhdGEpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ2Vycm9yRGF0YScsIGVycm9yRGF0YSk7XG4gICAgICAgIGluZGV4U3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcycsIFthY3Rpdml0eS52YWx1ZS5pZF0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLmFjdGl2aXRpZXNfbGFuZy55b3VyX2FjdGl2aXRpZXMsXG4gICAgICAgICAgICAgICAgbGluazogXCIvYWN0aXZpdGllc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcGFnZVRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICBHbG9iYWwgU3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBpYXRpVmFsaWRhdG9yUmVzcG9uc2UgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuaWF0aVZhbGlkYXRvclJlc3BvbnNlO1xuICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdCA9IGlhdGlWYWxpZGF0b3JSZXNwb25zZS52YWx1ZTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQgJiYgdmFsaWRhdGlvblJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVB1Ymxpc2hFcnJvcnMnLCB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHB1Ymxpc2hTdGF0dXMubGlua2VkX3RvX2lhdGkpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVVblB1Ymxpc2hlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVVuUHVibGlzaGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHB1Ymxpc2hTdGF0dXMubGlua2VkX3RvX2lhdGkgJiYgcHVibGlzaFN0YXR1cy5zdGF0dXMgPT09ICdwdWJsaXNoZWQnKSkge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNob3dQdWJsaXNoZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTaG93UHVibGlzaGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm91cGVkRGF0YTogZ3JvdXBlZERhdGEsXG4gICAgICAgICAgICBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzLFxuICAgICAgICAgICAgZGVsZXRlVmFsdWU6IGRlbGV0ZVZhbHVlLFxuICAgICAgICAgICAgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsXG4gICAgICAgICAgICBkb3dubG9hZFZhbHVlOiBkb3dubG9hZFZhbHVlLFxuICAgICAgICAgICAgZG93bmxvYWRUb2dnbGU6IGRvd25sb2FkVG9nZ2xlLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICBlbGVtZW50UHJvcHM6IGVsZW1lbnRQcm9wcyxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIGZvcm1hdFRpdGxlOiBmb3JtYXRUaXRsZSxcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFnZVRpdGxlLFxuICAgICAgICAgICAgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsXG4gICAgICAgICAgICBwdWJsaXNoU3RhdHVzOiBwdWJsaXNoU3RhdHVzLFxuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZpdHlQcm9wczogYWN0aXZpdHlQcm9wcyxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgdG9nZ2xlU2lkZWJhcjogdG9nZ2xlU2lkZWJhcixcbiAgICAgICAgICAgIGlzdG9wVmlzaWJsZTogaXN0b3BWaXNpYmxlLFxuICAgICAgICAgICAgc2NyZWVuV2lkdGg6IHNjcmVlbldpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgRW1wdHlBY3Rpdml0eV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9wYXJ0aWFscy9FbXB0eUFjdGl2aXR5LnZ1ZVwiKSk7XG52YXIgVGFibGVMYXlvdXRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vcGFydGlhbHMvVGFibGVMYXlvdXQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnRpYWxzL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBFcnJvck1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5Q29tcG9uZW50JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEVtcHR5QWN0aXZpdHk6IEVtcHR5QWN0aXZpdHlfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnaW5hdGlvbjogVGFibGVQYWdpbmF0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRhYmxlTGF5b3V0OiBUYWJsZUxheW91dF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBFcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWN0aXZpdGllcyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNMb2FkaW5nID0gKDAsIHZ1ZV8xLnJlZikodHJ1ZSk7XG4gICAgICAgIHZhciBjdXJyZW50VVJMID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgIHZhciBlbmRwb2ludCA9ICcnO1xuICAgICAgICB2YXIgc2hvd0VtcHR5VGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgIGVuZHBvaW50ID0gXCIvYWN0aXZpdGllcy9wYWdlXCIuY29uY2F0KHF1ZXJ5U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVuZHBvaW50ID0gXCIvYWN0aXZpdGllcy9wYWdlXCI7XG4gICAgICAgICAgICBzaG93RW1wdHlUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy9mb3Igc2Vzc2lvbiBtZXNzYWdlXG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmb3IgcHVibGlzaCBidXR0b25cbiAgICAgICAgdmFyIHRvYXN0TWVzc2FnZSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcHJvcHMudG9hc3QudHlwZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoZW5kcG9pbnQpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpdml0aWVzLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93RW1wdHlUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9ICFyZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiB0b2FzdERhdGEudmlzaWJpbGl0eTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZ25vcmVUb2FzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgfSwgMTAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHN0YXRlID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBzaG93QnV0dG9uczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHNob3dPckhpZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkgeyBkYXRhID0gQXJyYXk7IH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zaG93QnV0dG9ucyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zaG93QnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBmZXRjaEFjdGl2aXRpZXMoYWN0aXZlX3BhZ2UpIHtcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoJy9hY3Rpdml0aWVzL3BhZ2UvJyArIGFjdGl2ZV9wYWdlICsgcXVlcnlTdHJpbmcpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aXZpdGllcywgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9ICFyZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlnbm9yZVVwZGF0ZXMgPSAoMCwgY29yZV8xLndhdGNoSWdub3JhYmxlKSh0b2FzdERhdGEsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSwge1xuICAgICAgICAgICAgZmx1c2g6ICdzeW5jJyxcbiAgICAgICAgfSkuaWdub3JlVXBkYXRlcztcbiAgICAgICAgdmFyIGlnbm9yZVRvYXN0VXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWdub3JlVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBmb3IgcmVmcmVzaCB0b2FzdCBtZXNzYWdlXG4gICAgICAgIC8vIGxldCByZWZyZXNoVG9hc3RNc2cgPSByZWYoZmFsc2UpO1xuICAgICAgICB2YXIgcmVmcmVzaFRvYXN0TXNnID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlZnJlc2hNZXNzYWdlVHlwZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlZnJlc2hNZXNzYWdlOiAnQWN0aXZpdHkgaGFzIGJlZW4gcHVibGlzaGVkIHN1Y2Nlc3NmdWxseSwgcmVmcmVzaCB0byBzZWUgY2hhbmdlcycsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvdmlkZVxuICAgICAgICAgKi9cbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCd0b2FzdE1lc3NhZ2UnLCB0b2FzdE1lc3NhZ2UpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3RvYXN0RGF0YScsIHRvYXN0RGF0YSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgnZXJyb3JEYXRhJywgZXJyb3JEYXRhKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdyZWZyZXNoVG9hc3RNc2cnLCByZWZyZXNoVG9hc3RNc2cpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZpdGllczogYWN0aXZpdGllcyxcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIHNob3dPckhpZGU6IHNob3dPckhpZGUsXG4gICAgICAgICAgICBmZXRjaEFjdGl2aXRpZXM6IGZldGNoQWN0aXZpdGllcyxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsXG4gICAgICAgICAgICByZWZyZXNoVG9hc3RNc2c6IHJlZnJlc2hUb2FzdE1zZyxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIG11bHRpc2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkB2dWVmb3JtL211bHRpc2VsZWN0XCIpKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIE11bHRpc2VsZWN0OiBtdWx0aXNlbGVjdF8xLmRlZmF1bHQsXG4gICAgICAgIExvYWRlcjogTG9hZGVyX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBtb2RhbFZhbHVlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgZW1pdHM6IFsnY2xvc2VNb2RhbCcsICd0b2FzdCddLFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBlbWl0ID0gX2EuZW1pdDtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBuYXJyYXRpdmU6ICcnLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgYWN0aXZpdHlfaWRlbnRpZmllcjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBuYXJyYXRpdmU6ICcnLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICcnLFxuICAgICAgICAgICAgYWN0aXZpdHlfaWRlbnRpZmllcjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbG9hZGVyVmlzaWJpbGl0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlcyA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgb3JnYW5pemF0aW9uID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7fSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KCcvYWN0aXZpdGllcy9jb2RlbGlzdHMnKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obGFuZ3VhZ2VzLCByZXNwb25zZS5kYXRhLmxhbmd1YWdlcyk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3JnYW5pemF0aW9uLCByZXNwb25zZS5kYXRhLm9yZ2FuaXphdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHtcbiAgICAgICAgICAgIGVtaXQoJ2Nsb3NlTW9kYWwnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzdG9yZUFjdGl2aXR5KCkge1xuICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdCgnL2FjdGl2aXR5JywgZm9ybURhdGEpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBlbWl0KCdjbG9zZU1vZGFsJyk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KHJlc3BvbnNlLmRhdGEuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEubmFycmF0aXZlID0gZXJyb3JzLm5hcnJhdGl2ZSA/IGVycm9ycy5uYXJyYXRpdmVbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEubGFuZ3VhZ2UgPSBlcnJvcnMubGFuZ3VhZ2UgPyBlcnJvcnMubGFuZ3VhZ2VbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuYWN0aXZpdHlfaWRlbnRpZmllciA9IGVycm9ycy5hY3Rpdml0eV9pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLmFjdGl2aXR5X2lkZW50aWZpZXJbMF1cbiAgICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5OiBsb2FkZXJWaXNpYmlsaXR5LFxuICAgICAgICAgICAgbGFuZ3VhZ2VzOiBsYW5ndWFnZXMsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGNsb3NlTW9kYWw6IGNsb3NlTW9kYWwsXG4gICAgICAgICAgICBzdG9yZUFjdGl2aXR5OiBzdG9yZUFjdGl2aXR5LFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdCdWxrUHVibGlzaGluZycsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHJlZnJlc2hUb2FzdE1zZyA9ICgwLCB2dWVfMi5pbmplY3QpKFwicmVmcmVzaFRvYXN0TXNnXCIpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICAvL2luamVjdFxuICAgICAgICB2YXIgcGFTdG9yYWdlID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJwYVN0b3JhZ2VcIik7XG4gICAgICAgIHZhciBhY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlZikocGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLmFjdGl2aXRpZXMpLCBjb21wbGV0ZWQgPSAoMCwgdnVlXzIucmVmKShcInByb2Nlc3NpbmdcIik7XG4gICAgICAgIHZhciBoYXNGYWlsZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgIGlkczogW10sXG4gICAgICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGludGVydmFsSUQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgIENvbXBvbmVudCBsaWZlY3ljbGUgLSBvbk1vdW50ZWRcbiAgICAgICAgICovXG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbXBsZXRlZC52YWx1ZSA9IChfYSA9IHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5zdGF0dXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwicHJvY2Vzc2luZ1wiO1xuICAgICAgICAgICAgYnVsa1B1Ymxpc2hTdGF0dXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHdhdGNoaW5nIGNoYW5nZSBpbiB2YWx1ZSBvZiBjb21wbGV0ZWRcbiAgICAgICAgKDAsIHZ1ZV8yLndhdGNoKShjb21wbGV0ZWQsIGZ1bmN0aW9uIChuZXdWYWx1ZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSUQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXNldHRpbmcgbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMgPSB7fSBhcyBwYUVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgZmFpbGVkIHB1Ymxpc2hcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkQWN0aXZpdGllcyhwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMuYWN0aXZpdGllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCdWxrIFB1Ymxpc2ggRnVuY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHZhciBidWxrUHVibGlzaFN0YXR1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGludGVydmFsSUQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC5nZXQoXCJhY3Rpdml0aWVzL2J1bGstcHVibGlzaC1zdGF0dXM/b3JnYW5pemF0aW9uX2lkPVwiLmNvbmNhdChwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMub3JnYW5pemF0aW9uX2lkLCBcIiYmdXVpZD1cIikuY29uY2F0KHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5qb2JfYmF0Y2hfdXVpZCkpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcImRhdGFcIiBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdGllcy52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuYWN0aXZpdGllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2F2aW5nIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhU3RvcmFnZS52YWx1ZS5wdWJsaXNoaW5nQWN0aXZpdGllcy5hY3Rpdml0aWVzID0gcmVzcG9uc2UuZGF0YS5hY3Rpdml0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLnN0YXR1cyA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzLm1lc3NhZ2UgPSByZXNwb25zZS5kYXRhLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkLnZhbHVlID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkQWN0aXZpdGllcyhwYVN0b3JhZ2UudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMuYWN0aXZpdGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFRvYXN0TXNnLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoVG9hc3RNc2cudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC52YWx1ZSA9IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW1pemUgb3IgbWF4aW1pemUgd2luZG93XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgb3BlbiA9ICgwLCB2dWVfMi5yZWYpKHRydWUpO1xuICAgICAgICB2YXIgdG9nZ2xlV2luZG93ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGN1cnJlbnRUYXJnZXQuY2xvc2VzdChcIiNwdWJsaXNoaW5nX2FjdGl2aXRpZXNcIikucXVlcnlTZWxlY3RvcihcIi5idWxrLWFjdGl2aXRpZXNcIik7XG4gICAgICAgICAgICB2YXIgZWxIZWlnaHQgPSAoX2EgPSB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQucXVlcnlTZWxlY3RvcihcImRpdlwiKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIGlmIChvcGVuLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IFwiLmNvbmNhdChlbEhlaWdodCwgXCJweDtcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogMHB4OyBvdmVyZmxvdzogaGlkZGVuO1wiO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICBvcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IFwiLmNvbmNhdChlbEhlaWdodCwgXCJweDsgb3ZlcmZsb3c6aGlkZGVuO1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBhdXRvO1wiO1xuICAgICAgICAgICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICAgICAgICAgICAgICBvcGVuLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDbG9zaW5nIHdpbmRvd1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNsb3NlV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzID0ge307XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGdW5jdGlvbiB0byBjb2xsZWN0IGZhaWxlZCBhY3Rpdml0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZmFpbGVkQWN0aXZpdGllcyA9IGZ1bmN0aW9uIChuZXN0ZWRPYmplY3QpIHtcbiAgICAgICAgICAgIHZhciBmYWlsZWRBY3Rpdml0aWVzSUQgPSBbXTtcbiAgICAgICAgICAgIHZhciBhc0FycmF5RGF0YSA9IE9iamVjdC5lbnRyaWVzKG5lc3RlZE9iamVjdCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBhc0FycmF5RGF0YS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdLCB2YWx1ZSA9IF9hWzFdO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKHZhbHVlKS5pbmRleE9mKFwiZmFpbGVkXCIpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkQWN0aXZpdGllc0lELnB1c2godmFsdWUuYWN0aXZpdHlfaWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGZhaWxlZEFjdGl2aXRpZXNEYXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIGlmIChmYWlsZWRBY3Rpdml0aWVzSUQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGhhc0ZhaWxlZEFjdGl2aXRpZXMuc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLmlkcyA9IGZhaWxlZEFjdGl2aXRpZXNJRDtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLmRhdGEgPSBmYWlsZWRBY3Rpdml0aWVzRGF0YTtcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9hc3RNc2cucmVmcmVzaE1lc3NhZ2VUeXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFRvYXN0TXNnLnJlZnJlc2hNZXNzYWdlID0gJ1NvbWUgYWN0aXZpdGllcyBoYXZlIGZhaWxlZCB0byBwdWJsaXNoLiBSZWZyZXNoIHRvIHNlZSBjaGFuZ2VzLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYXNGYWlsZWRBY3Rpdml0aWVzLnN0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGhhc0ZhaWxlZEFjdGl2aXRpZXMuaWRzID0gW107XG4gICAgICAgICAgICAgICAgaGFzRmFpbGVkQWN0aXZpdGllcy5kYXRhID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyeSBwdWJsaXNoaW5nIGZhaWxlZCBhY3Rpdml0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmV0cnlQdWJsaXNoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy9yZXNldCByZXF1aXJlZCBzdGF0ZXNcbiAgICAgICAgICAgIGNvbXBsZXRlZC52YWx1ZSA9IFwicHJvY2Vzc2luZ1wiO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGhhc0ZhaWxlZEFjdGl2aXRpZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIGhhc0ZhaWxlZEFjdGl2aXRpZXMuZGF0YVtrZXldLnN0YXR1cyA9IFwicHJvY2Vzc2luZ1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZpdGllcy52YWx1ZSA9IGhhc0ZhaWxlZEFjdGl2aXRpZXMuZGF0YTtcbiAgICAgICAgICAgIC8vIGFwaSBlbmRwb2ludCBjYWxsXG4gICAgICAgICAgICB2YXIgZW5kcG9pbnQgPSBcImFjdGl2aXRpZXMvc3RhcnQtYnVsay1wdWJsaXNoP2FjdGl2aXRpZXM9W1wiLmNvbmNhdChoYXNGYWlsZWRBY3Rpdml0aWVzLmlkcywgXCJdXCIpO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChlbmRwb2ludCkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFTdG9yYWdlLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYnVsa1B1Ymxpc2hTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgcmVmcmVzaFRvYXN0TXNnOiByZWZyZXNoVG9hc3RNc2csIGxhbmd1YWdlOiBsYW5ndWFnZSwgcGFTdG9yYWdlOiBwYVN0b3JhZ2UsIGFjdGl2aXRpZXM6IGFjdGl2aXRpZXMsIGNvbXBsZXRlZDogY29tcGxldGVkLCBoYXNGYWlsZWRBY3Rpdml0aWVzOiBoYXNGYWlsZWRBY3Rpdml0aWVzLCBpbnRlcnZhbElEOiBpbnRlcnZhbElELCBidWxrUHVibGlzaFN0YXR1czogYnVsa1B1Ymxpc2hTdGF0dXMsIG9wZW46IG9wZW4sIHRvZ2dsZVdpbmRvdzogdG9nZ2xlV2luZG93LCBjbG9zZVdpbmRvdzogY2xvc2VXaW5kb3csIGZhaWxlZEFjdGl2aXRpZXM6IGZhaWxlZEFjdGl2aXRpZXMsIHJldHJ5UHVibGlzaGluZzogcmV0cnlQdWJsaXNoaW5nIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnRXJyb3JJdGVtJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgbWVzc2FnZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgc2VsZWN0ZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3NlbGVjdGVkQWN0aXZpdGllcycpO1xuICAgICAgICB2YXIgdG9nZ2xlID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgYWNjb3JkaW9uVG9nZ2xlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnLmFjY29yZGlvbicpLnF1ZXJ5U2VsZWN0b3IoJy5hY2NvcmRpb24tY29udGVudCcpO1xuICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gKF9hID0gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2RpdicpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgaWYgKHRvZ2dsZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OiBcIi5jb25jYXQoZWxIZWlnaHQsIFwicHg7XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jc3NUZXh0ID0gXCJoZWlnaHQ6IFwiLmNvbmNhdChlbEhlaWdodCwgXCJweDtcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogYXV0bztcIjtcbiAgICAgICAgICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBlcnJvckNvdW50ID0gZnVuY3Rpb24gKGVycm9ycykge1xuICAgICAgICAgICAgdmFyIGVycm9yQ291bnQgPSAnJztcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IG51bGwgfHwgZXJyb3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvcnMud2FybmluZykge1xuICAgICAgICAgICAgICAgIGVycm9yQ291bnQgPSBcIlwiLmNvbmNhdChlcnJvcnMgPT09IG51bGwgfHwgZXJyb3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvcnMuZXJyb3IsIFwiIGVycm9ycyBhbmQgXCIpLmNvbmNhdChlcnJvcnMgPT09IG51bGwgfHwgZXJyb3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvcnMud2FybmluZywgXCIgd2FybmluZ3NcXG4gICAgIHdlcmUgZm91bmQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JDb3VudCA9IFwiXCIuY29uY2F0KGVycm9ycyA9PT0gbnVsbCB8fCBlcnJvcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ycy5jcml0aWNhbCwgXCIgY3JpdGljYWwgZXJyb3JzIHdlcmUgZm91bmQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVycm9yQ291bnQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgc2VsZWN0ZWRBY3Rpdml0aWVzOiBzZWxlY3RlZEFjdGl2aXRpZXMsIHRvZ2dsZTogdG9nZ2xlLCBhY2NvcmRpb25Ub2dnbGU6IGFjY29yZGlvblRvZ2dsZSwgZXJyb3JDb3VudDogZXJyb3JDb3VudCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy9jb21wb25lbnRcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgUG9wdXBNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiKSk7XG52YXIgUHJvZ3Jlc3NMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUHJvZ3Jlc3NMb2FkZXIudnVlXCIpKTtcbnZhciBWYWxpZGF0aW9uRXJyb3JzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlXCIpKTtcbnZhciBCdWxrUHVibGlzaGluZ192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9CdWxrUHVibGlzaGluZy52dWVcIikpO1xuLy8gVnVleCBTdG9yZVxudmFyIGluZGV4XzEgPSByZXF1aXJlKFwiU3RvcmUvYWN0aXZpdGllcy9pbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdQdWJsaXNoU2VsZWN0ZWQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAncHJpbWFyeScgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICBHbG9iYWwgU3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBpbmRleF8xLnVzZVN0b3JlKSgpO1xuICAgICAgICAvLyB0b2dnbGUgc3RhdGUgZm9yIG1vZGFsIHBvcHVwXG4gICAgICAgIHZhciBfYyA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBwdWJsaXNoQWxlcnRWYWx1ZSA9IF9jWzBdLCBwdWJsaXNoQWxlcnRUb2dnbGUgPSBfY1sxXTtcbiAgICAgICAgLy8gc3RhdGUgZm9yIHN0ZXAgb2YgdGhlIGZsb3dcbiAgICAgICAgdmFyIGJ1bGtQdWJsaXNoU3RlcCA9ICgwLCB2dWVfMi5yZWYpKDEpO1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICAvLyBEeW5hbWljIHRleHQgZm9yIGxvYWRlclxuICAgICAgICB2YXIgbG9hZGVyVGV4dCA9ICgwLCB2dWVfMi5yZWYpKGxhbmd1YWdlLmNvbW1vbl9sYW5nLnBsZWFzZV93YWl0KTtcbiAgICAgICAgLy8gcmVzZXQgc3RlcCB0byB6ZXJvIGFmdGVyIGNsb3NpbmcgbW9kYWxcbiAgICAgICAgdmFyIHJlc2V0UHVibGlzaFN0ZXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBidWxrUHVibGlzaFN0ZXAudmFsdWUgPSAxO1xuICAgICAgICAgICAgcHVibGlzaEFsZXJ0VmFsdWUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdGVkQWN0aXZpdGllcy52YWx1ZSA9IFtdO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcG9wVXBXaWR0aENoYW5nZSA9ICgwLCB2dWVfMi5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gKDAsIHZ1ZV8yLnJlZikoJzgyNScpO1xuICAgICAgICAgICAgc3dpdGNoIChidWxrUHVibGlzaFN0ZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoLnZhbHVlID0gJzU4Myc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgd2lkdGgudmFsdWUgPSAnODA5JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aWR0aC52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRvYXN0IHZpc2liaWxpdHlcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMi5pbmplY3QpKCdlcnJvckRhdGEnKTtcbiAgICAgICAgdmFyIGRpc3BsYXlUb2FzdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0eXBlKSB7XG4gICAgICAgICAgICBlcnJvckRhdGEubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICBlcnJvckRhdGEudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICBlcnJvckRhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGVjayBwdWJsaXNoIHN0YXR1c1xuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGNoZWNrUHVibGlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvYWN0aXZpdGllcy9jaGVja3MtZm9yLWFjdGl2aXR5LXB1Ymxpc2hcIikudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaEFsZXJ0VmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVRvYXN0KHJlc3BvbnNlLm1lc3NhZ2UsIHJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogVmVyaWZ5IGNvcmUgZWxlbWVudHNcbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb3JlQ29tcGxldGVkQWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWYpKFtdKSwgY29yZUluQ29tcGxldGVkQWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWYpKFtdKSwgcGVybWFsaW5rID0gXCIvYWN0aXZpdHkvXCI7XG4gICAgICAgIHZhciB2ZXJpZnlDb3JlRWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnZlcmlmeWluZ19jb3JlX2VsZW1lbnRzO1xuICAgICAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSBzdG9yZS5zdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMuam9pbignLCAnKTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCIvYWN0aXZpdGllcy9jb3JlLWVsZW1lbnRzLWNvbXBsZXRlZD9hY3Rpdml0aWVzPVtcIi5jb25jYXQoYWN0aXZpdGllcywgXCJdXCIpKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjb3JlQ29tcGxldGVkQWN0aXZpdGllcy52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIGNvcmVJbkNvbXBsZXRlZEFjdGl2aXRpZXMudmFsdWUgPSByZXNwb25zZS5kYXRhLmluY29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RlcC52YWx1ZSA9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRQdWJsaXNoU3RlcCgpO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VG9hc3QocmVzcG9uc2UubWVzc2FnZSwgcmVzcG9uc2Uuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogVmFsaWRhdGluZyBBY3Rpdml0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9ycyA9ICgwLCB2dWVfMi5yZWYpKHt9KTtcbiAgICAgICAgdmFyIHZhbGlkYXRlQWN0aXZpdGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcudmFsaWRhdGluZ19hY3Rpdml0aWVzO1xuICAgICAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSBzdG9yZS5zdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMuam9pbignLCAnKTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KFwiL2FjdGl2aXRpZXMvdmFsaWRhdGUtYWN0aXZpdGllcz9hY3Rpdml0aWVzPVtcIi5jb25jYXQoYWN0aXZpdGllcywgXCJdXCIpKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBidWxrUHVibGlzaFN0ZXAudmFsdWUgPSAzO1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnZhbHVlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0UHVibGlzaFN0ZXAoKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVRvYXN0KHJlc3BvbnNlLm1lc3NhZ2UsIHJlc3BvbnNlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJ1bGsgcHVibGlzaGluZyBhY3Rpdml0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc2VsZWN0ZWRBY3Rpdml0aWVzID0gKDAsIHZ1ZV8yLnJlZikoW10pO1xuICAgICAgICAoMCwgdnVlXzIucHJvdmlkZSkoJ3NlbGVjdGVkQWN0aXZpdGllcycsIHNlbGVjdGVkQWN0aXZpdGllcyk7XG4gICAgICAgIC8vIGxvY2FsIHN0b3JhZ2UgZm9yIHB1Ymxpc2hpbmdcbiAgICAgICAgdmFyIHBhID0gKDAsIGNvcmVfMS51c2VTdG9yYWdlKSgndnVlLXVzZS1sb2NhbC1zdG9yYWdlJywge1xuICAgICAgICAgICAgcHVibGlzaGluZ0FjdGl2aXRpZXM6IChfYiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdWJsaXNoaW5nQWN0aXZpdGllcycpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzdGFydEJ1bGtQdWJsaXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlclRleHQudmFsdWUgPSBsYW5ndWFnZS5jb21tb25fbGFuZy5zdGFydGluZ190b19wdWJsaXNoO1xuICAgICAgICAgICAgcGEudmFsdWUucHVibGlzaGluZ0FjdGl2aXRpZXMgPSB7fTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCJhY3Rpdml0aWVzL3N0YXJ0LWJ1bGstcHVibGlzaD9hY3Rpdml0aWVzPVtcIi5jb25jYXQoc2VsZWN0ZWRBY3Rpdml0aWVzLnZhbHVlLCBcIl1cIikpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1bGtQdWJsaXNoU3RlcC52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hBbGVydFZhbHVlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHBhLnZhbHVlLnB1Ymxpc2hpbmdBY3Rpdml0aWVzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMi5wcm92aWRlKSgncGFTdG9yYWdlJywgcGEpO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHN0b3JlOiBzdG9yZSwgcHVibGlzaEFsZXJ0VmFsdWU6IHB1Ymxpc2hBbGVydFZhbHVlLCBwdWJsaXNoQWxlcnRUb2dnbGU6IHB1Ymxpc2hBbGVydFRvZ2dsZSwgYnVsa1B1Ymxpc2hTdGVwOiBidWxrUHVibGlzaFN0ZXAsIGxvYWRlcjogbG9hZGVyLCBsb2FkZXJUZXh0OiBsb2FkZXJUZXh0LCByZXNldFB1Ymxpc2hTdGVwOiByZXNldFB1Ymxpc2hTdGVwLCBwb3BVcFdpZHRoQ2hhbmdlOiBwb3BVcFdpZHRoQ2hhbmdlLCBlcnJvckRhdGE6IGVycm9yRGF0YSwgZGlzcGxheVRvYXN0OiBkaXNwbGF5VG9hc3QsIGNoZWNrUHVibGlzaDogY2hlY2tQdWJsaXNoLCBjb3JlQ29tcGxldGVkQWN0aXZpdGllczogY29yZUNvbXBsZXRlZEFjdGl2aXRpZXMsIGNvcmVJbkNvbXBsZXRlZEFjdGl2aXRpZXM6IGNvcmVJbkNvbXBsZXRlZEFjdGl2aXRpZXMsIHBlcm1hbGluazogcGVybWFsaW5rLCB2ZXJpZnlDb3JlRWxlbWVudHM6IHZlcmlmeUNvcmVFbGVtZW50cywgdmFsaWRhdGlvbkVycm9yczogdmFsaWRhdGlvbkVycm9ycywgdmFsaWRhdGVBY3Rpdml0aWVzOiB2YWxpZGF0ZUFjdGl2aXRpZXMsIHNlbGVjdGVkQWN0aXZpdGllczogc2VsZWN0ZWRBY3Rpdml0aWVzLCBwYTogcGEsIHN0YXJ0QnVsa1B1Ymxpc2g6IHN0YXJ0QnVsa1B1Ymxpc2gsIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCwgVmFsaWRhdGlvbkVycm9yczogVmFsaWRhdGlvbkVycm9yc192dWVfMS5kZWZhdWx0LCBCdWxrUHVibGlzaGluZzogQnVsa1B1Ymxpc2hpbmdfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1JlZnJlc2hUb2FzdCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbWVzc2FnZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHR5cGU6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBjbGFzc05hbWUgPSAoMCwgdnVlXzIucmVmKSgnJyk7XG4gICAgICAgIGNsYXNzTmFtZS52YWx1ZSA9IHByb3BzLnR5cGVcbiAgICAgICAgICAgID8gJ2JnLW1pbnQgYm9yZGVyLXNwcmluZy0xMCdcbiAgICAgICAgICAgIDogJ2JnLWNyaW1zb24tMTAgYm9yZGVyLWNyaW1zb24tMjAnO1xuICAgICAgICB2YXIgY2xhc3NOYW1lMiA9ICgwLCB2dWVfMi5yZWYpKCcnKTtcbiAgICAgICAgY2xhc3NOYW1lMi52YWx1ZSA9IHByb3BzLnR5cGVcbiAgICAgICAgICAgID8gJ3RleHQtc3ByaW5nLTUwIGhvdmVyOnRleHQtc3ByaW5nLTUwJ1xuICAgICAgICAgICAgOiAndGV4dC1jcmltc29uLTUwIGhvdmVyOnRleHQtY3JpbXNvbi01MCc7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgcHJvcHM6IHByb3BzLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgY2xhc3NOYW1lMjogY2xhc3NOYW1lMiB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgRXJyb3JJdGVtX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0Vycm9ySXRlbS52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1ZhbGlkYXRpb25FcnJvcnMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGNyaXRpY2FsTWVzc2FnZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLm1lc3NhZ2UuY3JpdGljYWw7XG4gICAgICAgIHZhciB3YXJuaW5nTWVzc2FnZSA9IGxhbmd1YWdlLmNvbW1vbl9sYW5nLm1lc3NhZ2Uud2FybmluZztcbiAgICAgICAgdmFyIG5vRXJyb3JNZXNzYWdlID0gbGFuZ3VhZ2UuY29tbW9uX2xhbmcubWVzc2FnZS5ub19lcnJvcjtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCBjcml0aWNhbE1lc3NhZ2U6IGNyaXRpY2FsTWVzc2FnZSwgd2FybmluZ01lc3NhZ2U6IHdhcm5pbmdNZXNzYWdlLCBub0Vycm9yTWVzc2FnZTogbm9FcnJvck1lc3NhZ2UsIEVycm9ySXRlbTogRXJyb3JJdGVtX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eURhdGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoJ0xMJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiQWN0aXZpdHlDb25kaXRpb25zXCIsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJBY3Rpdml0eUNvbnRhY3RJbmZvXCIsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbJ2dsb2JhbExhbmcnXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5RGVzY3JpcHRpb24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93WydnbG9iYWxMYW5nJ107XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSHVtYW5pdGFyaWFuU2NvcGUnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCB0eXBlczogdHlwZXMgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJYXRpSWRlbnRpZmllcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eVNlY3RvcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbJ2dsb2JhbExhbmcnXTtcbiAgICAgICAgcmV0dXJuIHsgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eUxvY2F0aW9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1snZ2xvYmFsTGFuZyddO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ090aGVySWRlbnRpZmllcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93WydnbG9iYWxMYW5nJ107XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eVBhcnRpY2lwYXRpbmdPcmcnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93WydnbG9iYWxMYW5nJ107XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUGxhbm5lZERpc2J1cnNlbWVudCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KFwiTExcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSwgbGFuZ3VhZ2U6IGxhbmd1YWdlLCB0eXBlczogdHlwZXMgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIlBvbGljeU1hcmtlclwiLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3Rpdml0eVJlY2lwaWVudENvdW50cnknLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIGZ1bmN0aW9uIHJvdW5kRmxvYXQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCByb3VuZEZsb2F0OiByb3VuZEZsb2F0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1JlY2lwaWVudFJlZ2lvbicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgZnVuY3Rpb24gcm91bmRGbG9hdChudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSkudG9GaXhlZCgyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHR5cGVzOiB0eXBlcywgcm91bmRGbG9hdDogcm91bmRGbG9hdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZWxhdGVkQWN0aXZpdHknLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1JlcG9ydGluZ09yZ2FuaXphdGlvbicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHR5cGVzOiB0eXBlcyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG4vL2NvbXBvbmVudHNcbnZhciBMaW5rX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvTGluay52dWVcIikpO1xudmFyIEhhdmVOb3RBZGRlZFlldF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlXCIpKTtcbi8vIGNvbXBvc2FibGVcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FjdGl2aXR5UmVzdWx0JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgICAgICBOb3RZZXQ6IEhhdmVOb3RBZGRlZFlldF92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlZDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZm9ybWF0ID0gJ01NTU0gREQsIFlZWVknO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgcmVzdWx0RGF0YSA9IGRhdGEudmFsdWUuY29udGVudDtcbiAgICAgICAgdmFyIGN1cnJlbnRMYW5ndWFnZSA9ICdlbic7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb21lbnQ6IG1vbWVudF8xLmRlZmF1bHQsXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgICAgIHJlc3VsdERhdGE6IHJlc3VsdERhdGEsXG4gICAgICAgICAgICBnZXRBY3Rpdml0eVRpdGxlOiB0aXRsZV8xLmRlZmF1bHQsXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2U6IGN1cnJlbnRMYW5ndWFnZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiQWN0aXZpdHlTZWN0b3JcIixcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIGZ1bmN0aW9uIHJvdW5kRmxvYXQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZXM6IHR5cGVzLCByb3VuZEZsb2F0OiByb3VuZEZsb2F0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiQWN0aXZpdHlUYWdcIixcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIkFjdGl2aXR5VGl0bGVcIixcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHJldHVybiB7IHR5cGVzOiB0eXBlcywgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciBMaW5rX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvTGluay52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiQWN0aXZpdHlUcmFuc2FjdGlvbnNcIixcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzEuaW5qZWN0KShcInR5cGVzXCIpO1xuICAgICAgICByZXR1cm4geyB0eXBlczogdHlwZXMsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vL2NvbXBvbmVudFxudmFyIExpbmtfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9MaW5rLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIi4vZWxlbWVudHMvSW5kZXhcIik7XG4vL2NvbXBvc2FibGVcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yRGV0YWlsJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFRpdGxlRWxlbWVudDogSW5kZXhfMS5UaXRsZUVsZW1lbnQsXG4gICAgICAgIE1lYXN1cmU6IEluZGV4XzEuTWVhc3VyZSxcbiAgICAgICAgQXNjZW5kaW5nOiBJbmRleF8xLkFzY2VuZGluZyxcbiAgICAgICAgQWdncmVnYXRpb25TdGF0dXM6IEluZGV4XzEuQWdncmVnYXRpb25TdGF0dXMsXG4gICAgICAgIERlc2NyaXB0aW9uOiBJbmRleF8xLkRlc2NyaXB0aW9uLFxuICAgICAgICBSZWZlcmVuY2U6IEluZGV4XzEuUmVmZXJlbmNlLFxuICAgICAgICBCYXNlbGluZTogSW5kZXhfMS5CYXNlbGluZSxcbiAgICAgICAgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayxcbiAgICAgICAgUGVyaW9kOiBJbmRleF8xLlBlcmlvZCxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0VGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpbmRpY2F0b3I6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBwZXJpb2Q6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGxpbmtDbGFzc2VzID0gJ2ZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBiZy13aGl0ZSByb3VuZGVkIHAtMiB0ZXh0LXNtIHRleHQtbi01MCBmb250LWJvbGQgbGVhZGluZy1ub3JtYWwgbWItMiBzaGFkb3ctZGVmYXVsdCc7XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9hID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLCBpbmRpY2F0b3IgPSBfYS5pbmRpY2F0b3IsIGFjdGl2aXR5ID0gX2EuYWN0aXZpdHksIHBlcmlvZCA9IF9hLnBlcmlvZCwgcmVzdWx0VGl0bGUgPSBfYS5yZXN1bHRUaXRsZTtcbiAgICAgICAgdmFyIHNob3dTaWRlYmFyID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgcG9zaXRpb25ZID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciBzY3JlZW5XaWR0aCA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICAvL2luZGljYXRvclxuICAgICAgICB2YXIgaW5kaWNhdG9yRGF0YSA9IGluZGljYXRvci52YWx1ZS5pbmRpY2F0b3I7XG4gICAgICAgIHZhciBwZXJpb2REYXRhID0gcGVyaW9kLnZhbHVlO1xuICAgICAgICAvLyB2dWUgcHJvdmlkZXNcbiAgICAgICAgdmFyIHBhcmVudERhdGEgPSB7XG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHkudmFsdWUuaWQsXG4gICAgICAgICAgICByZXN1bHQ6IGluZGljYXRvci52YWx1ZS5yZXN1bHRfaWQsXG4gICAgICAgICAgICBpbmRpY2F0b3I6IGluZGljYXRvci52YWx1ZS5pZCxcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdwYXJlbnREYXRhJywgcGFyZW50RGF0YSk7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRJZCA9IGluZGljYXRvci52YWx1ZS5yZXN1bHRfaWQsIHJlc3VsdFRpdGxlZCA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHJlc3VsdFRpdGxlLnZhbHVlWzBdLm5hcnJhdGl2ZSwgJ2VuJyksIHJlc3VsdExpbmsgPSBcIlwiLmNvbmNhdChhY3Rpdml0eUxpbmssIFwiL3Jlc3VsdC9cIikuY29uY2F0KHJlc3VsdElkKSwgaW5kaWNhdG9yTGluayA9IFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvclwiKSwgaW5kaWNhdG9yVGl0bGUgPSAoMCwgdGl0bGVfMS5kZWZhdWx0KShpbmRpY2F0b3JEYXRhLnRpdGxlWzBdLm5hcnJhdGl2ZSwgJ2VuJyk7XG4gICAgICAgIHZhciBjYWxjV2lkdGggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHNjcmVlbldpZHRoLnZhbHVlID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gICAgICAgICAgICBpZiAoc2NyZWVuV2lkdGgudmFsdWUgPiAxMDI0KSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3Rpdml0aWVzX2xhbmcueW91cl9hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGxpbms6IFwiL2FjdGl2aXRpZXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5VGl0bGUsICdlbicpLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHJlc3VsdFRpdGxlZCxcbiAgICAgICAgICAgICAgICBsaW5rOiByZXN1bHRMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogaW5kaWNhdG9yVGl0bGUsXG4gICAgICAgICAgICAgICAgbGluazogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcG9zaXRpb25ZLnZhbHVlID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpc3RvcFZpc2libGUgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblkudmFsdWUgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNob3dTaWRlYmFyLnZhbHVlOyB9LCBmdW5jdGlvbiAoc2lkZWJhcikge1xuICAgICAgICAgICAgaWYgKHNpZGViYXIpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlua0NsYXNzZXM6IGxpbmtDbGFzc2VzLFxuICAgICAgICAgICAgaW5kaWNhdG9yVGl0bGU6IGluZGljYXRvclRpdGxlLFxuICAgICAgICAgICAgaW5kaWNhdG9yRGF0YTogaW5kaWNhdG9yRGF0YSxcbiAgICAgICAgICAgIGFjdGl2aXR5TGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgcmVzdWx0TGluazogcmVzdWx0TGluayxcbiAgICAgICAgICAgIGluZGljYXRvckxpbms6IGluZGljYXRvckxpbmssXG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIHBlcmlvZERhdGE6IHBlcmlvZERhdGEsXG4gICAgICAgICAgICBzaG93U2lkZWJhcjogc2hvd1NpZGViYXIsXG4gICAgICAgICAgICBpc3RvcFZpc2libGU6IGlzdG9wVmlzaWJsZSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy8gY29tcG9uZW50c1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBEZWxldGVBY3Rpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZVwiKSk7XG4vLyBjb21wb3NhYmxlXG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JMaXN0JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2luYXRpb246IFRhYmxlUGFnaW5hdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdlVGl0bGU6IFBhZ2VUaXRsZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIERlbGV0ZUFjdGlvbjogRGVsZXRlQWN0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBhY3Rpdml0eToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBhcmVudERhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpbmRpY2F0b3JzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgYWN0aXZpdHkgPSBfYS5hY3Rpdml0eSwgcGFyZW50RGF0YSA9IF9hLnBhcmVudERhdGE7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRJZCA9IHBhcmVudERhdGEudmFsdWUucmVzdWx0LmlkLCByZXN1bHRUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHBhcmVudERhdGEudmFsdWUucmVzdWx0LnRpdGxlLCAnZW4nKSwgcmVzdWx0TGluayA9IFwiXCIuY29uY2F0KGFjdGl2aXR5TGluaywgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLCBpbmRpY2F0b3JMaW5rID0gXCIvcmVzdWx0L1wiLmNvbmNhdChyZXN1bHRJZCwgXCIvaW5kaWNhdG9yXCIpO1xuICAgICAgICB2YXIgaW5kaWNhdG9yc0RhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHt9KTtcbiAgICAgICAgdmFyIGlzRW1wdHkgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3Rpdml0aWVzX2xhbmcueW91cl9hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eVRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiByZXN1bHRUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UuY29tbW9uX2xhbmcuaW5kaWNhdG9yX2xpc3QsXG4gICAgICAgICAgICAgICAgbGluazogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9yZXN1bHQvXCIuY29uY2F0KHJlc3VsdElkLCBcIi9pbmRpY2F0b3JzL3BhZ2UvMVwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGluZGljYXRvcnNEYXRhLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuZGF0YS5sZW5ndGggPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcHJvcHMudG9hc3QudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmZXRjaExpc3RpbmdzKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAuZ2V0KFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvcnMvcGFnZS9cIikgKyBhY3RpdmVfcGFnZSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpbmRpY2F0b3JzRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcm92aWRlXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgncGFyZW50SXRlbUlkJywgcmVzdWx0SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHlJZCxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgaW5kaWNhdG9yc0RhdGE6IGluZGljYXRvcnNEYXRhLFxuICAgICAgICAgICAgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgZmV0Y2hMaXN0aW5nczogZmV0Y2hMaXN0aW5ncyxcbiAgICAgICAgICAgIHJlc3VsdExpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICBpbmRpY2F0b3JMaW5rOiBpbmRpY2F0b3JMaW5rLFxuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgdG9hc3REYXRhOiB0b2FzdERhdGEsXG4gICAgICAgICAgICByZXN1bHRJZDogcmVzdWx0SWQsXG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0ZTogaGFuZGxlTmF2aWdhdGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JBZ2dyZWdhdGlvblN0YXR1cycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBzdGF0dXNEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzRGF0YTogc3RhdHVzRGF0YSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yQmFzZWxpbmUnLFxuICAgIGNvbXBvbmVudHM6IHsgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJhc2VUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGVsZW1lbnRTcGFjaW5nID0gJ21iLTEnO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgYmFzZWxpbmUgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIGxvY2F0aW9ucyA9IFtdO1xuICAgICAgICAgICAgbG9jYXRpb25zID0gZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5yZWZlcmVuY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBsYXN0TG9jYXRpb24gPSBsb2NhdGlvbnMuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgbG9jYXRpb25zID0gbG9jYXRpb25zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbnMuam9pbignLCAnKSArICcgJyArICdhbmQnICsgJyAnICsgbGFzdExvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMb2NhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIHJldHVybiBkaW1lbnNpb25zIG9mIGJhc2VsaW5lXG4gICAgICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZGltZW5zaW9ucyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuICAgICAgICAgICAgZGltZW5zaW9ucyA9IGRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IChfYSA9IGl0ZW0ubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ01pc3NpbmcnLCB2YWx1ZSA9IChfYiA9IGl0ZW0udmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdNaXNzaW5nJztcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2RlIC0gXCIuY29uY2F0KG5hbWUsIFwiLCB2YWx1ZSAtIChcIikuY29uY2F0KHZhbHVlLCBcIilcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBkaW1lbnNpb25zLmpvaW4oJzsgJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGJhc2VsaW5lOiBiYXNlbGluZSwgbG9jYXRpb246IGxvY2F0aW9uLCBkaW1lbnNpb25zOiBkaW1lbnNpb25zLCBlbGVtZW50U3BhY2luZzogZWxlbWVudFNwYWNpbmcsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yRGVzY3JpcHRpb24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZXNjVHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkZXNjcmlwdGlvbkRhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyBkZXNjcmlwdGlvbkRhdGE6IGRlc2NyaXB0aW9uRGF0YSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy9jb21wb3NhYmxlXG52YXIgdGl0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS90aXRsZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckRvY3VtZW50TGluaycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFsaWdubWVudDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJ2NlbnRlcicsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkbERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyBkbERhdGE6IGRsRGF0YSwgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvckFzY2VuZGluZycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHJldHVybiB7IGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdJbmRpY2F0b3JNZWFzdXJlJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbWVhc3VyZVR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgbWVhc3VyZURhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyBtZWFzdXJlRGF0YTogbWVhc3VyZURhdGEsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yUGVyaW9kJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgaWQgPSAoMCwgdnVlXzEuaW5qZWN0KSgncGFyZW50RGF0YScpO1xuICAgICAgICByZXR1cm4geyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0luZGljYXRvclJlZmVyZW5jZScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlZlR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgcmVmRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IHJlZkRhdGE6IHJlZkRhdGEsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnSW5kaWNhdG9yVGl0bGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZVR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgdGl0bGVEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgdGl0bGVEYXRhOiB0aXRsZURhdGEsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbnZhciBjb3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCJDb21wb3NhYmxlL2NvcmVFbGVtZW50c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBY3Rpdml0aWVzRWxlbWVudHMnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUlkOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8yLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkcm9wZG93biA9ICgwLCB2dWVfMi5yZWYpKCk7XG4gICAgICAgIHZhciBkcm9wZG93bkJ0biA9ICgwLCB2dWVfMi5yZWYpKCk7XG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBzZWFyY2hCdG5WYWx1ZSA9IF9iWzBdLCBzZWFyY2hCdG5Ub2dnbGUgPSBfYlsxXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZWxlbWVudHMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgICAgICAgIHN0YXR1czogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlbGVtZW50SWNvbnMgPSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQ6IFwiZG91YmxlLXRpY2tcIixcbiAgICAgICAgICAgIG5vdF9jb21wbGV0ZWQ6IFwicmVkLWNyb3NzXCIsXG4gICAgICAgICAgICBjb3JlOiBcImNvcmVcIixcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGFzQXJyYXlEYXRhID0gT2JqZWN0LmVudHJpZXMoZGF0YS52YWx1ZSk7XG4gICAgICAgIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBhc0FycmF5RGF0YS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdLCB2YWx1ZSA9IF9hWzFdO1xuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudHMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZWxlbWVudHMuc2VhcmNoLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIl9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJfXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVtlbGVtZW50cy5zdGF0dXNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZWxlbWVudHMuc2VhcmNoLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIl9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJfXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGp1c3RTdHJpbmdzID0gT2JqZWN0LmZyb21FbnRyaWVzKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIHJldHVybiBqdXN0U3RyaW5ncztcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRpbmcgY29yZSBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnZhbHVlKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCgwLCBjb3JlRWxlbWVudHNfMS5hY3Rpdml0eUNvcmVFbGVtZW50cykoKS5pbmNsdWRlcyhrZXkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlW2tleV1bXCJjb3JlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkcm9wZG93bkZpbHRlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5zdGF0dXMgPSBzO1xuICAgICAgICAgICAgc2VhcmNoQnRuVG9nZ2xlKCk7XG4gICAgICAgIH07XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRyb3Bkb3duQnRuLnZhbHVlLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhZHJvcGRvd24udmFsdWUuY29udGFpbnMoZS50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ0blRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0TGluayhoYXNfZGF0YSwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChoYXNfZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiNcIi5jb25jYXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gXCJyZXN1bHRcIiB8fCBpbmRleCA9PSBcInRyYW5zYWN0aW9uc1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBpbmRleCA9PSBcInJlc3VsdFwiID8gXCJyZXN1bHRcIiA6IFwidHJhbnNhY3Rpb25cIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIvYWN0aXZpdHkvXCIuY29uY2F0KHByb3BzLmFjdGl2aXR5SWQsIFwiL1wiKS5jb25jYXQoZWxlbWVudCwgXCIvY3JlYXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiL2FjdGl2aXR5L1wiLmNvbmNhdChwcm9wcy5hY3Rpdml0eUlkLCBcIi9cIikuY29uY2F0KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHByb3BzOiBwcm9wcywgZGF0YTogZGF0YSwgZHJvcGRvd246IGRyb3Bkb3duLCBkcm9wZG93bkJ0bjogZHJvcGRvd25CdG4sIHNlYXJjaEJ0blZhbHVlOiBzZWFyY2hCdG5WYWx1ZSwgc2VhcmNoQnRuVG9nZ2xlOiBzZWFyY2hCdG5Ub2dnbGUsIGVsZW1lbnRzOiBlbGVtZW50cywgZWxlbWVudEljb25zOiBlbGVtZW50SWNvbnMsIGFzQXJyYXlEYXRhOiBhc0FycmF5RGF0YSwgZmlsdGVyZWRFbGVtZW50czogZmlsdGVyZWRFbGVtZW50cywgZHJvcGRvd25GaWx0ZXI6IGRyb3Bkb3duRmlsdGVyLCBnZXRMaW5rOiBnZXRMaW5rLCBhY3Rpdml0eUNvcmVFbGVtZW50czogY29yZUVsZW1lbnRzXzEuYWN0aXZpdHlDb3JlRWxlbWVudHMgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBjb3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCJDb21wb3NhYmxlL2NvcmVFbGVtZW50c1wiKTtcbi8vY29tcG9uZW50c1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiQWN0aXZpdHkvZWxlbWVudHMvSW5kZXhcIik7XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBFbGVtZW50U3RhdHVzX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3N0YXR1cy9FbGVtZW50U3RhdHVzLnZ1ZVwiKSk7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIFBvcHVwTW9kYWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIikpO1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBY3Rpdml0eUVsZW1lbnQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUlkOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlZDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIGRlbGV0ZVZhbHVlID0gX2JbMF0sIGRlbGV0ZVRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICB2YXIgdHJhbnNsYXRpb24gPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICAvLyBjYWxsIGFwaSBmb3IgcHVibGlzaGluZ1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8yLmluamVjdCkoJ3RvYXN0RGF0YScpO1xuICAgICAgICB2YXIgbGF5b3V0ID0gJ2Jhc2lzLWZ1bGwgIGxnOmJhc2lzLTYvMTInO1xuICAgICAgICBpZiAocHJvcHMud2lkdGggPT09ICdmdWxsJykge1xuICAgICAgICAgICAgbGF5b3V0ID0gJ2Jhc2lzLWZ1bGwnO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mb3JtYXQoJ0xMJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcm91bmRGbG9hdChudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSkudG9GaXhlZCgyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZXRlQWN0aXZpdHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVsZXRlVmFsdWUudmFsdWUgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBkZWxldGVFbGVtZW50KGlkLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBkZWxldGVWYWx1ZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLmRlbGV0ZShcIi9hcGkvYWN0aXZpdHkvXCIuY29uY2F0KGlkLCBcIi9cIikuY29uY2F0KGVsZW1lbnQpKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBcIkNvdWxkbid0IGRlbGV0ZSB0aGUgYWN0aXZpdHkgdGl0bGUgZHVlIHRvIHN5c3RlbSBlcnJvci5cIjtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGRlbGV0ZVZhbHVlOiBkZWxldGVWYWx1ZSwgZGVsZXRlVG9nZ2xlOiBkZWxldGVUb2dnbGUsIHRyYW5zbGF0aW9uOiB0cmFuc2xhdGlvbiwgcHJvcHM6IHByb3BzLCB0b2FzdERhdGE6IHRvYXN0RGF0YSwgbGF5b3V0OiBsYXlvdXQsIGZvcm1hdERhdGU6IGZvcm1hdERhdGUsIHJvdW5kRmxvYXQ6IHJvdW5kRmxvYXQsIGRlbGV0ZUFjdGl2aXR5RWxlbWVudDogZGVsZXRlQWN0aXZpdHlFbGVtZW50LCBkZWxldGVFbGVtZW50OiBkZWxldGVFbGVtZW50LCBhY3Rpdml0eUNvcmVFbGVtZW50czogY29yZUVsZW1lbnRzXzEuYWN0aXZpdHlDb3JlRWxlbWVudHMsIEFjdGl2aXR5RGF0ZTogSW5kZXhfMS5BY3Rpdml0eURhdGUsIENvbmRpdGlvbnM6IEluZGV4XzEuQ29uZGl0aW9ucywgQ29udGFjdEluZm86IEluZGV4XzEuQ29udGFjdEluZm8sIERlc2NyaXB0aW9uOiBJbmRleF8xLkRlc2NyaXB0aW9uLCBIdW1hbml0YXJpYW5TY29wZTogSW5kZXhfMS5IdW1hbml0YXJpYW5TY29wZSwgSWF0aUlkZW50aWZpZXI6IEluZGV4XzEuSWF0aUlkZW50aWZpZXIsIExlZ2FjeURhdGE6IEluZGV4XzEuTGVnYWN5RGF0YSwgTG9jYXRpb246IEluZGV4XzEuTG9jYXRpb24sIE90aGVySWRlbnRpZmllcjogSW5kZXhfMS5PdGhlcklkZW50aWZpZXIsIFBhcnRpY2lwYXRpbmdPcmc6IEluZGV4XzEuUGFydGljaXBhdGluZ09yZywgUGxhbm5lZERpc2J1cnNlbWVudDogSW5kZXhfMS5QbGFubmVkRGlzYnVyc2VtZW50LCBQb2xpY3lNYXJrZXI6IEluZGV4XzEuUG9saWN5TWFya2VyLCBSZWNpcGllbnRDb3VudHJ5OiBJbmRleF8xLlJlY2lwaWVudENvdW50cnksIFJlY2lwaWVudFJlZ2lvbjogSW5kZXhfMS5SZWNpcGllbnRSZWdpb24sIFJlbGF0ZWRBY3Rpdml0eTogSW5kZXhfMS5SZWxhdGVkQWN0aXZpdHksIFJlcG9ydGluZ09yZ2FuaXphdGlvbjogSW5kZXhfMS5SZXBvcnRpbmdPcmdhbml6YXRpb24sIFNlY3RvcjogSW5kZXhfMS5TZWN0b3IsIFRhZzogSW5kZXhfMS5UYWcsIFRpdGxlRWxlbWVudDogSW5kZXhfMS5UaXRsZUVsZW1lbnQsIFRyYW5zYWN0aW9uczogSW5kZXhfMS5UcmFuc2FjdGlvbnMsIEJ0bjogTGlua192dWVfMS5kZWZhdWx0LCBTdGF0dXM6IEVsZW1lbnRTdGF0dXNfdnVlXzEuZGVmYXVsdCwgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCwgTW9kYWw6IFBvcHVwTW9kYWxfdnVlXzEuZGVmYXVsdCwgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQ3JlYXRlTW9kYWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL0NyZWF0ZU1vZGFsLnZ1ZVwiKSk7XG52YXIgY29yZV8xID0gcmVxdWlyZShcIkB2dWV1c2UvY29yZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWRkQWN0aXZpdHlCdXR0b24nLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQ3JlYXRlTW9kYWw6IENyZWF0ZU1vZGFsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgc3RhdGUgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX2EgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgbW9kYWxWYWx1ZSA9IF9hWzBdLCBtb2RhbFRvZ2dsZSA9IF9hWzFdO1xuICAgICAgICB2YXIgbW9kZWxWaXNpYmxlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9nZ2xlTW9kZWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIG1vZGVsVmlzaWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbGlDbGFzcyA9ICdibG9jayBwLTIuNSB0ZXh0LW4tNDAgdGV4dC10aW55IGxlYWRpbmctWzEuNV0gZm9udC1ib2xkIGhvdmVyOnRleHQtbi01MCBob3ZlcjpiZy1uLTEwJztcbiAgICAgICAgdmFyIGRyb3Bkb3duQnRuID0gKDAsIHZ1ZV8xLnJlZikoKTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRyb3Bkb3duQnRuLnZhbHVlLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0b2dnbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdGF0ZS5pc1Zpc2libGUgPSAhc3RhdGUuaXNWaXNpYmxlO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbGlDbGFzczogbGlDbGFzcyxcbiAgICAgICAgICAgIG1vZGVsVmlzaWJsZTogbW9kZWxWaXNpYmxlLFxuICAgICAgICAgICAgbW9kYWxWYWx1ZTogbW9kYWxWYWx1ZSxcbiAgICAgICAgICAgIHRvZ2dsZTogdG9nZ2xlLFxuICAgICAgICAgICAgbW9kYWxUb2dnbGU6IG1vZGFsVG9nZ2xlLFxuICAgICAgICAgICAgdG9nZ2xlTW9kZWw6IHRvZ2dsZU1vZGVsLFxuICAgICAgICAgICAgZHJvcGRvd25CdG46IGRyb3Bkb3duQnRuLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL2luZGV4XCIpO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBDcmVhdGVNb2RhbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vQ3JlYXRlTW9kYWwudnVlXCIpKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vY29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBQb3B1cE1vZGFsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1BvcHVwTW9kYWwudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vKipcbiAqICBHbG9iYWwgU3RhdGVcbiAqL1xudmFyIHN0b3JlID0gKDAsIGluZGV4XzEudXNlU3RvcmUpKCk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0FkZEFjdGl2aXR5QnV0dG9uJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENyZWF0ZU1vZGFsOiBDcmVhdGVNb2RhbF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIE1vZGFsOiBQb3B1cE1vZGFsX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgc3RhdGUgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX2EgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgbW9kYWxWYWx1ZSA9IF9hWzBdLCBtb2RhbFRvZ2dsZSA9IF9hWzFdO1xuICAgICAgICB2YXIgbW9kZWxWaXNpYmxlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8xLnJlZikoJycpO1xuICAgICAgICB2YXIgdG9hc3RtZXNzYWdlVHlwZSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIHNob3dFcnJvcnBvcHVwID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICgwLCB2dWVfMS5yZWYpKCcnKTtcbiAgICAgICAgdmFyIHRvZ2dsZU1vZGVsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBtb2RlbFZpc2libGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGxpQ2xhc3MgPSAnYmxvY2sgcC0yLjUgdGV4dC1uLTQwIHRleHQtdGlueSBsZWFkaW5nLVsxLjVdIGZvbnQtYm9sZCBob3Zlcjp0ZXh0LW4tNTAgaG92ZXI6Ymctbi0xMCc7XG4gICAgICAgIHZhciBkcm9wZG93bkJ0biA9ICgwLCB2dWVfMS5yZWYpKCk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkcm9wZG93bkJ0bi52YWx1ZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb3dubG9hZEVycm9yKGZpbGVuYW1lLCB0ZXh0KSB7XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlLmlzVmlzaWJsZSA9ICFzdGF0ZS5pc1Zpc2libGU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkb3dubG9hZEVycm9yeG1sID0gZnVuY3Rpb24gKGNvdW50QWN0aXZpdGllcykge1xuICAgICAgICAgICAgc2hvd0Vycm9ycG9wdXAudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtZXRlcnMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpO1xuICAgICAgICAgICAgdmFyIGFkZFF1ZXJ5UGFyYW1zID0gJyc7XG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGFkZFF1ZXJ5UGFyYW1zID0gJyYnICsgcXVlcnlQYXJhbWV0ZXJzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGFwaVVybCA9ICcvYWN0aXZpdGllcy9kb3dubG9hZC14bWwvdHJ1ZT9hY3Rpdml0aWVzPWFsbCcgKyBhZGRRdWVyeVBhcmFtcztcbiAgICAgICAgICAgIGlmIChjb3VudEFjdGl2aXRpZXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSBzdG9yZS5zdGF0ZS5zZWxlY3RlZEFjdGl2aXRpZXMuam9pbignLCcpO1xuICAgICAgICAgICAgICAgIGFwaVVybCA9IFwiL2FjdGl2aXRpZXMvZG93bmxvYWQteG1sL3RydWU/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2VzcyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAodG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2UpOyB9LCAxNTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZG93bmxvYWRYbWwgPSBmdW5jdGlvbiAoY291bnRBY3Rpdml0aWVzKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlQYXJhbWV0ZXJzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIHZhciBhZGRRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBhZGRRdWVyeVBhcmFtcyA9ICcmJyArIHF1ZXJ5UGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcGlVcmwgPSAnL2FjdGl2aXRpZXMvZG93bmxvYWQteG1sP2FjdGl2aXRpZXM9YWxsJyArIGFkZFF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgaWYgKGNvdW50QWN0aXZpdGllcyA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZpdGllcyA9IHN0b3JlLnN0YXRlLnNlbGVjdGVkQWN0aXZpdGllcy5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgYXBpVXJsID0gXCIvYWN0aXZpdGllcy9kb3dubG9hZC14bWw/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdWNjZXNzID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS54bWxfZXJyb3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFcnJvcnBvcHVwLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS52YWx1ZSA9IHJlcy5kYXRhLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgMTUwMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZG93bmxvYWRDc3YgPSBmdW5jdGlvbiAoY291bnRBY3Rpdml0aWVzKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlQYXJhbWV0ZXJzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIHZhciBhZGRRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1ldGVycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBhZGRRdWVyeVBhcmFtcyA9ICcmJyArIHF1ZXJ5UGFyYW1ldGVyc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcGlVcmwgPSAnL2FjdGl2aXRpZXMvZG93bmxvYWQtY3N2P2FjdGl2aXRpZXM9YWxsJyArIGFkZFF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgaWYgKGNvdW50QWN0aXZpdGllcyA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZpdGllcyA9IHN0b3JlLnN0YXRlLnNlbGVjdGVkQWN0aXZpdGllcy5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgYXBpVXJsID0gXCIvYWN0aXZpdGllcy9kb3dubG9hZC1jc3Y/YWN0aXZpdGllcz1bXCIuY29uY2F0KGFjdGl2aXRpZXMsIFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoYXBpVXJsKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2VzcyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSByZXMuZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdG1lc3NhZ2VUeXBlLnZhbHVlID0gcmVzLmRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAodG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2UpOyB9LCAxNTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IHJlcy5oZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbGlDbGFzczogbGlDbGFzcyxcbiAgICAgICAgICAgIG1vZGVsVmlzaWJsZTogbW9kZWxWaXNpYmxlLFxuICAgICAgICAgICAgbW9kYWxWYWx1ZTogbW9kYWxWYWx1ZSxcbiAgICAgICAgICAgIHRvZ2dsZTogdG9nZ2xlLFxuICAgICAgICAgICAgbW9kYWxUb2dnbGU6IG1vZGFsVG9nZ2xlLFxuICAgICAgICAgICAgdG9nZ2xlTW9kZWw6IHRvZ2dsZU1vZGVsLFxuICAgICAgICAgICAgZHJvcGRvd25CdG46IGRyb3Bkb3duQnRuLFxuICAgICAgICAgICAgZG93bmxvYWRDc3Y6IGRvd25sb2FkQ3N2LFxuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5OiB0b2FzdFZpc2liaWxpdHksXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSxcbiAgICAgICAgICAgIHRvYXN0bWVzc2FnZVR5cGU6IHRvYXN0bWVzc2FnZVR5cGUsXG4gICAgICAgICAgICBkb3dubG9hZFhtbDogZG93bmxvYWRYbWwsXG4gICAgICAgICAgICBNb2RhbDogUG9wdXBNb2RhbF92dWVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgc2hvd0Vycm9ycG9wdXA6IHNob3dFcnJvcnBvcHVwLFxuICAgICAgICAgICAgZG93bmxvYWRFcnJvcnhtbDogZG93bmxvYWRFcnJvcnhtbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICBkb3dubG9hZEVycm9yOiBkb3dubG9hZEVycm9yLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ0VsZW1lbnROb3RlJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICByZXR1cm4geyBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQWRkQWN0aXZpdHlCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnRW1wdHlBY3Rpdml0eScsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBBY3Rpdml0eUJ1dHRvbjogQWRkQWN0aXZpdHlCdXR0b25fdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1snZ2xvYmFsTGFuZyddO1xuICAgICAgICB2YXIgc3RhdGUgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGRpc21pc3M6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBzdGF0ZTogc3RhdGUsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgRG93bmxvYWRBY3Rpdml0eUJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9Eb3dubG9hZEFjdGl2aXR5QnV0dG9uLnZ1ZVwiKSk7XG52YXIgQWRkQWN0aXZpdHlCdXR0b25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgUmVmcmVzaFRvYXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJBY3Rpdml0eS9idWxrLXB1Ymxpc2gvUmVmcmVzaFRvYXN0LnZ1ZVwiKSk7XG52YXIgUHVibGlzaFNlbGVjdGVkX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJBY3Rpdml0eS9idWxrLXB1Ymxpc2gvUHVibGlzaFNlbGVjdGVkLnZ1ZVwiKSk7XG52YXIgRGVsZXRlQnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvRGVsZXRlQnV0dG9uLnZ1ZVwiKSk7XG52YXIgRXJyb3JQb3BVcF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9FcnJvclBvcFVwLnZ1ZVwiKSk7XG4vLyBWdWV4IFN0b3JlXG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL2luZGV4XCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ1BhZ2VUaXRsZScsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHN0b3JlID0gKDAsIGluZGV4XzEudXNlU3RvcmUpKCk7XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIuaW5qZWN0KSgndG9hc3REYXRhJyk7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzIuaW5qZWN0KSgnZXJyb3JEYXRhJyk7XG4gICAgICAgIHZhciByZWZyZXNoVG9hc3RNc2cgPSAoMCwgdnVlXzIuaW5qZWN0KSgncmVmcmVzaFRvYXN0TXNnJyk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgc3RvcmU6IHN0b3JlLCB0b2FzdE1lc3NhZ2U6IHRvYXN0TWVzc2FnZSwgZXJyb3JEYXRhOiBlcnJvckRhdGEsIHJlZnJlc2hUb2FzdE1zZzogcmVmcmVzaFRvYXN0TXNnLCBEb3dubG9hZEFjdGl2aXR5QnV0dG9uOiBEb3dubG9hZEFjdGl2aXR5QnV0dG9uX3Z1ZV8xLmRlZmF1bHQsIEFkZEFjdGl2aXR5QnV0dG9uOiBBZGRBY3Rpdml0eUJ1dHRvbl92dWVfMS5kZWZhdWx0LCBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsIFJlZnJlc2hUb2FzdE1lc3NhZ2U6IFJlZnJlc2hUb2FzdF92dWVfMS5kZWZhdWx0LCBQdWJsaXNoU2VsZWN0ZWQ6IFB1Ymxpc2hTZWxlY3RlZF92dWVfMS5kZWZhdWx0LCBEZWxldGVCdXR0b246IERlbGV0ZUJ1dHRvbl92dWVfMS5kZWZhdWx0LCBFcnJvclBvcFVwOiBFcnJvclBvcFVwX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdTaWRlYmFySGVscEJsb2NrJyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG4vLyBWdWV4IFN0b3JlXG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCJTdG9yZS9hY3Rpdml0aWVzL2luZGV4XCIpO1xudmFyIFByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc3RhdHVzL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlXCIpKTtcbnZhciBQdWJsaXNoQnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvUHVibGlzaEJ1dHRvbi52dWVcIikpO1xudmFyIFVuUHVibGlzaEJ1dHRvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL1VuUHVibGlzaEJ1dHRvbi52dWVcIikpO1xuLy8gaW1wb3J0IFNoaW1tZXIgZnJvbSBcIkNvbXBvbmVudHMvU2hpbW1lckxvYWRpbmcudnVlXCI7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVGFibGVMYXlvdXQnLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHNlbGVjdEFsbFZhbHVlID0gX2JbMF0sIHNlbGVjdEFsbFRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICB2YXIgc3RvcmUgPSAoMCwgaW5kZXhfMS51c2VTdG9yZSkoKTtcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZyb21Ob3coKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b2dnbGVTZWxlY3RBbGwoYWN0aXZpdGllcywgc2VsZWN0QWxsVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc2VsZWN0QWxsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZGF0dW0gaW4gYWN0aXZpdGllcykge1xuICAgICAgICAgICAgICAgICAgICBpZHMucHVzaChhY3Rpdml0aWVzW2RhdHVtXS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKCd1cGRhdGVTZWxlY3RlZEFjdGl2aXRpZXMnLCBpZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcycsIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdEFsbFRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vU29ydGluZyBieSB1cGRhdGVfYXRcbiAgICAgICAgdmFyIGN1cnJlbnRVUkwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gJycsIGRpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICB2YXIgc29ydGluZ0RpcmVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZyc7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzb3J0QnlEYXRlVXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsIHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gKF9hID0gdXJsUGFyYW1zLmdldCgncScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB1cmxQYXJhbXMuZ2V0KCdkaXJlY3Rpb24nKSA9PT0gJ2Rlc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCI/cT1cIi5jb25jYXQocXVlcnksIFwiJm9yZGVyQnk9dXBkYXRlZF9hdCZkaXJlY3Rpb249XCIpLmNvbmNhdChkaXJlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHNlbGVjdEFsbFZhbHVlOiBzZWxlY3RBbGxWYWx1ZSwgc2VsZWN0QWxsVG9nZ2xlOiBzZWxlY3RBbGxUb2dnbGUsIHN0b3JlOiBzdG9yZSwgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSwgdG9nZ2xlU2VsZWN0QWxsOiB0b2dnbGVTZWxlY3RBbGwsIGN1cnJlbnRVUkw6IGN1cnJlbnRVUkwsIHF1ZXJ5OiBxdWVyeSwgZGlyZWN0aW9uOiBkaXJlY3Rpb24sIHNvcnRpbmdEaXJlY3Rpb246IHNvcnRpbmdEaXJlY3Rpb24sIHNvcnRCeURhdGVVcmw6IHNvcnRCeURhdGVVcmwsIFByZXZpb3VzbHlQdWJsaXNoZWQ6IFByZXZpb3VzbHlQdWJsaXNoZWRfdnVlXzEuZGVmYXVsdCwgUHVibGlzaDogUHVibGlzaEJ1dHRvbl92dWVfMS5kZWZhdWx0LCBVblB1Ymxpc2g6IFVuUHVibGlzaEJ1dHRvbl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9uZW50XG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbi8vY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUGVyaW9kRGV0YWlsJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFRhcmdldFZhbHVlOiBJbmRleF8xLlRhcmdldFZhbHVlLFxuICAgICAgICBBY3R1YWxWYWx1ZTogSW5kZXhfMS5BY3R1YWxWYWx1ZSxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50RGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBlcmlvZDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGxpbmtDbGFzc2VzID0gJ2ZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBiZy13aGl0ZSByb3VuZGVkIHAtMiB0ZXh0LXNtIHRleHQtbi01MCBmb250LWJvbGQgbGVhZGluZy1ub3JtYWwgbWItMiBzaGFkb3ctZGVmYXVsdCc7XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgcGVyaW9kID0gX2EucGVyaW9kLCBhY3Rpdml0eSA9IF9hLmFjdGl2aXR5LCBwYXJlbnREYXRhID0gX2EucGFyZW50RGF0YSwgdHlwZXMgPSBfYS50eXBlcztcbiAgICAgICAgdmFyIHRvYXN0RGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIC8vIHZ1ZSBwcm92aWRlXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgndHlwZXMnLCB0eXBlcy52YWx1ZSk7XG4gICAgICAgIC8vaW5kaWNhdG9yXG4gICAgICAgIHZhciBwZXJpb2REYXRhID0gcGVyaW9kLnZhbHVlLnBlcmlvZDtcbiAgICAgICAgLy90aXRsZXNcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5LnZhbHVlLnRpdGxlLCAnZW4nKSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpLCByZXN1bHRJZCA9IHBhcmVudERhdGEudmFsdWUucmVzdWx0LmlkLCByZXN1bHRUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHBhcmVudERhdGEudmFsdWUucmVzdWx0LnRpdGxlLCAnZW4nKSwgcmVzdWx0TGluayA9IFwiXCIuY29uY2F0KGFjdGl2aXR5TGluaywgXCIvcmVzdWx0L1wiKS5jb25jYXQocmVzdWx0SWQpLCBpbmRpY2F0b3JJZCA9IHBhcmVudERhdGEudmFsdWUuaW5kaWNhdG9yLmlkLCBpbmRpY2F0b3JUaXRsZSA9ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHBhcmVudERhdGEudmFsdWUuaW5kaWNhdG9yLnRpdGxlLCAnZW4nKSwgaW5kaWNhdG9yTGluayA9IFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvci9cIikuY29uY2F0KGluZGljYXRvcklkKSwgcGVyaW9kTGluayA9IFwiL2luZGljYXRvci9cIi5jb25jYXQoaW5kaWNhdG9ySWQsIFwiL3BlcmlvZFwiKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3R0aXZpdGllc19sYW5nLnlvdXJfYWN0aXZpdGllcyxcbiAgICAgICAgICAgICAgICBsaW5rOiBcIi9hY3Rpdml0aWVzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpdml0eVRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHJlc3VsdFRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBpbmRpY2F0b3JUaXRsZSxcbiAgICAgICAgICAgICAgICBsaW5rOiBpbmRpY2F0b3JMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UuY29tbW9uX2xhbmcucGVyaW9kLFxuICAgICAgICAgICAgICAgIGxpbms6IFwiXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rQ2xhc3NlczogbGlua0NsYXNzZXMsXG4gICAgICAgICAgICBwZXJpb2REYXRhOiBwZXJpb2REYXRhLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsXG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICBhY3Rpdml0eUxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIHJlc3VsdExpbms6IHJlc3VsdExpbmssXG4gICAgICAgICAgICBpbmRpY2F0b3JMaW5rOiBpbmRpY2F0b3JMaW5rLFxuICAgICAgICAgICAgcGVyaW9kTGluazogcGVyaW9kTGluayxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuLy8gY29tcG9uZW50c1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBUYWJsZVBhZ2luYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBEZWxldGVBY3Rpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvRGVsZXRlQWN0aW9uLnZ1ZVwiKSk7XG4vLyBjb21wb3NhYmxlXG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdQZXJpb2RMaXN0JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEJ0bjogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2luYXRpb246IFRhYmxlUGFnaW5hdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdlVGl0bGU6IFBhZ2VUaXRsZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBUb2FzdDogVG9hc3RNZXNzYWdlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIERlbGV0ZUFjdGlvbjogRGVsZXRlQWN0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBhY3Rpdml0eToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBhcmVudERhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBwZXJpb2Q6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIF9hID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLCBhY3Rpdml0eSA9IF9hLmFjdGl2aXR5LCBwYXJlbnREYXRhID0gX2EucGFyZW50RGF0YTtcbiAgICAgICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS52YWx1ZS5pZCwgYWN0aXZpdHlUaXRsZSA9IGFjdGl2aXR5LnZhbHVlLnRpdGxlLCBhY3Rpdml0eUxpbmsgPSBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksIHJlc3VsdFRpdGxlID0gcGFyZW50RGF0YS52YWx1ZS5yZXN1bHQudGl0bGUsIHJlc3VsdElkID0gcGFyZW50RGF0YS52YWx1ZS5yZXN1bHQuaWQsIHJlc3VsdExpbmsgPSBcIlwiLmNvbmNhdChhY3Rpdml0eUxpbmssIFwiL3Jlc3VsdC9cIikuY29uY2F0KHJlc3VsdElkKSwgaW5kaWNhdG9yVGl0bGUgPSBwYXJlbnREYXRhLnZhbHVlLmluZGljYXRvci50aXRsZSwgaW5kaWNhdG9ySWQgPSBwYXJlbnREYXRhLnZhbHVlLmluZGljYXRvci5pZCwgaW5kaWNhdG9yTGluayA9IFwiL3Jlc3VsdC9cIi5jb25jYXQocmVzdWx0SWQsIFwiL2luZGljYXRvci9cIikuY29uY2F0KGluZGljYXRvcklkKSwgcGVyaW9kTGluayA9IFwiL2luZGljYXRvci9cIi5jb25jYXQoaW5kaWNhdG9ySWQsIFwiL3BlcmlvZFwiKTtcbiAgICAgICAgdmFyIHBlcmlvZHNEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7fSk7XG4gICAgICAgIHZhciBpc0VtcHR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCcmVhZGNydW1iIGRhdGFcbiAgICAgICAgICovXG4gICAgICAgIHZhciBicmVhZGNydW1iRGF0YSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UuYWN0aXZpdGllc19sYW5nLnlvdXJfYWN0aXZpdGllcyxcbiAgICAgICAgICAgICAgICBsaW5rOiAnL2FjdGl2aXR5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5VGl0bGUsICdlbicpLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICgwLCB0aXRsZV8xLmRlZmF1bHQpKHJlc3VsdFRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiByZXN1bHRMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogKDAsIHRpdGxlXzEuZGVmYXVsdCkoaW5kaWNhdG9yVGl0bGUsICdlbicpLFxuICAgICAgICAgICAgICAgIGxpbms6IGluZGljYXRvckxpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5jb21tb25fbGFuZy5wZXJpb2RzX2xpc3QsXG4gICAgICAgICAgICAgICAgbGluazogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9pbmRpY2F0b3IvXCIuY29uY2F0KGluZGljYXRvcklkLCBcIi9wZXJpb2RzL3BhZ2UvMVwiKSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBlcmlvZHNEYXRhLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuZGF0YS5sZW5ndGggPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcHJvcHMudG9hc3QudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGZldGNoTGlzdGluZ3MoYWN0aXZlX3BhZ2UpIHtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCIvaW5kaWNhdG9yL1wiLmNvbmNhdChpbmRpY2F0b3JJZCwgXCIvcGVyaW9kcy9wYWdlL1wiKSArIGFjdGl2ZV9wYWdlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBlcmlvZHNEYXRhLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlID0gcmVzcG9uc2UuZGF0YSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcm92aWRlXG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgncGFyZW50SXRlbUlkJywgaW5kaWNhdG9ySWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgaW5kaWNhdG9yTGluazogaW5kaWNhdG9yTGluayxcbiAgICAgICAgICAgIHBlcmlvZExpbms6IHBlcmlvZExpbmssXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCxcbiAgICAgICAgICAgIHBlcmlvZHNEYXRhOiBwZXJpb2RzRGF0YSxcbiAgICAgICAgICAgIGdldEFjdGl2aXR5VGl0bGU6IHRpdGxlXzEuZGVmYXVsdCxcbiAgICAgICAgICAgIGZldGNoTGlzdGluZ3M6IGZldGNoTGlzdGluZ3MsXG4gICAgICAgICAgICBpbmRpY2F0b3JJZDogaW5kaWNhdG9ySWQsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRlOiBoYW5kbGVOYXZpZ2F0ZSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vIGNvbXBvbmVudFxudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiQWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRleFwiKTtcbi8vY29tcG9zYWJsZVxudmFyIHV0aWxzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdXRpbHNcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdBY3R1YWxWYWx1ZScsXG4gICAgY29tcG9uZW50czogeyBEb2N1bWVudExpbms6IEluZGV4XzEuRG9jdW1lbnRMaW5rIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIC8vIHZ1ZSBpbmplY3RcbiAgICAgICAgdmFyIGRsVHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICB2YXIgZWxlbWVudFNwYWNpbmcgPSAnbWItMSc7XG4gICAgICAgIHZhciBhY3R1YWxWYWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3R1YWxWYWx1ZTogYWN0dWFsVmFsdWUsXG4gICAgICAgICAgICBlbGVtZW50U3BhY2luZzogZWxlbWVudFNwYWNpbmcsXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgICBnZXRMb2NhdGlvbjogdXRpbHNfMS5kZWZhdWx0LFxuICAgICAgICAgICAgZGxUeXBlOiBkbFR5cGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy8gY29tcG9uZW50XG52YXIgSW5kZXhfMSA9IHJlcXVpcmUoXCJBY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0luZGV4XCIpO1xuLy9jb21wb3NhYmxlXG52YXIgdXRpbHNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS91dGlsc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogXCJUYXJnZXRWYWx1ZVwiLFxuICAgIGNvbXBvbmVudHM6IHsgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICAvLyB2dWUgaW5qZWN0XG4gICAgICAgIC8vIGNvbnN0IGxhbmd1YWdlVHlwZSA9IGluamVjdCgndHlwZXMnKS5sYW5ndWFnZTtcbiAgICAgICAgdmFyIGRsVHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKFwidHlwZXNcIik7XG4gICAgICAgIHZhciBlbGVtZW50U3BhY2luZyA9IFwibWItMVwiO1xuICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0VmFsdWU6IHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgZWxlbWVudFNwYWNpbmc6IGVsZW1lbnRTcGFjaW5nLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICAgICAgZ2V0TG9jYXRpb246IHV0aWxzXzEuZGVmYXVsdCxcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlVHlwZSxcbiAgICAgICAgICAgIGRsVHlwZTogZGxUeXBlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9uZW50XG52YXIgUmVzdWx0RWxlbWVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9SZXN1bHRFbGVtZW50LnZ1ZVwiKSk7XG52YXIgSW5kaWNhdG9yX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJBY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL0luZGljYXRvci52dWVcIikpO1xudmFyIExpbmtfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvYnV0dG9ucy9MaW5rLnZ1ZVwiKSk7XG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbi8vY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUmVzdWx0RGV0YWlsJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFJlc3VsdEVsZW1lbnQ6IFJlc3VsdEVsZW1lbnRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgSW5kaWNhdG9yOiBJbmRpY2F0b3JfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgbGlua0NsYXNzZXMgPSAnZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIGJnLXdoaXRlIHJvdW5kZWQgcC0yIHRleHQtc20gdGV4dC1uLTUwIGZvbnQtYm9sZCBsZWFkaW5nLW5vcm1hbCBtYi0yIHNoYWRvdy1kZWZhdWx0JztcbiAgICAgICAgdmFyIHBvc2l0aW9uWSA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBzY3JlZW5XaWR0aCA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgX2EgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcyksIHJlc3VsdCA9IF9hLnJlc3VsdCwgYWN0aXZpdHkgPSBfYS5hY3Rpdml0eTtcbiAgICAgICAgdmFyIGhhc0luZGljYXRvcnMgPSByZXN1bHQudmFsdWUuaW5kaWNhdG9ycy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB2YXIgcmVzdWx0c0RhdGEgPSByZXN1bHQudmFsdWUucmVzdWx0O1xuICAgICAgICB2YXIgYWN0aXZpdHlJZCA9IGFjdGl2aXR5LnZhbHVlLmlkLCBhY3Rpdml0eVRpdGxlID0gYWN0aXZpdHkudmFsdWUudGl0bGUsIGFjdGl2aXR5TGluayA9IFwiL2FjdGl2aXR5L1wiLmNvbmNhdChhY3Rpdml0eUlkKSwgcmVzdWx0VGl0bGUgPSAoMCwgdGl0bGVfMS5kZWZhdWx0KShyZXN1bHRzRGF0YS50aXRsZVswXS5uYXJyYXRpdmUsICdlbicpLCByZXN1bHRMaW5rID0gXCJcIi5jb25jYXQoYWN0aXZpdHlMaW5rLCBcIi9yZXN1bHQvXCIpLmNvbmNhdChyZXN1bHQudmFsdWUuaWQpO1xuICAgICAgICB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcG9zaXRpb25ZLnZhbHVlID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3Rpdml0aWVzX2xhbmcueW91cl9hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGxpbms6IFwiL2FjdGl2aXRpZXNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICgwLCB0aXRsZV8xLmRlZmF1bHQpKGFjdGl2aXR5VGl0bGUsICdlbicpLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHJlc3VsdFRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdmFyIGlzdG9wVmlzaWJsZSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uWS52YWx1ZSA9PT0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY1dpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBjYWxjV2lkdGggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHNjcmVlbldpZHRoLnZhbHVlID0gZXZlbnQudGFyZ2V0LmlubmVyV2lkdGg7XG4gICAgICAgICAgICBpZiAoc2NyZWVuV2lkdGgudmFsdWUgPiAxMDI0KSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd1NpZGViYXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBzaG93U2lkZWJhci52YWx1ZTsgfSwgZnVuY3Rpb24gKHNpZGViYXIpIHtcbiAgICAgICAgICAgIGlmIChzaWRlYmFyKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGl2aXR5TGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgcmVzdWx0VGl0bGU6IHJlc3VsdFRpdGxlLFxuICAgICAgICAgICAgcmVzdWx0TGluazogcmVzdWx0TGluayxcbiAgICAgICAgICAgIGxpbmtDbGFzc2VzOiBsaW5rQ2xhc3NlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgaGFzSW5kaWNhdG9yczogaGFzSW5kaWNhdG9ycyxcbiAgICAgICAgICAgIHJlc3VsdHNEYXRhOiByZXN1bHRzRGF0YSxcbiAgICAgICAgICAgIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgaXN0b3BWaXNpYmxlOiBpc3RvcFZpc2libGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnQWN0aXZpdHlFbGVtZW50JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRpdGxlRGVzY3JpcHRpb246IEluZGV4XzEuVGl0bGVEZXNjcmlwdGlvbixcbiAgICAgICAgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayxcbiAgICAgICAgUmVmZXJlbmNlOiBJbmRleF8xLlJlZmVyZW5jZSxcbiAgICAgICAgUmVzdWx0VHlwZTogSW5kZXhfMS5SZXN1bHRUeXBlLFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50TmFtZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVkaXRVcmw6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaG92ZXJUZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIF9hID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLCBkYXRhID0gX2EuZGF0YSwgdHlwZXMgPSBfYS50eXBlcywgZWxlbWVudERhdGEgPSBkYXRhLnZhbHVlLCByZXN1bHRUeXBlID0gdHlwZXMudmFsdWUucmVzdWx0VHlwZSwgcmVzdWx0Vm9jYWJ1bGFyeSA9IHR5cGVzLnZhbHVlLnJlc3VsdFZvY2FidWxhcnksIGxhbmd1YWdlID0gdHlwZXMudmFsdWUubGFuZ3VhZ2U7XG4gICAgICAgIHZhciB0cmFuc2xhdGlvbkxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudERhdGE6IGVsZW1lbnREYXRhLCByZXN1bHRUeXBlOiByZXN1bHRUeXBlLCByZXN1bHRWb2NhYnVsYXJ5OiByZXN1bHRWb2NhYnVsYXJ5LCBsYW5ndWFnZTogbGFuZ3VhZ2UsIHRyYW5zbGF0aW9uTGFuZ3VhZ2U6IHRyYW5zbGF0aW9uTGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbi8vIGNvbXBvbmVudHNcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgVGFibGVQYWdpbmF0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RhYmxlUGFnaW5hdGlvbi52dWVcIikpO1xudmFyIFBhZ2VUaXRsZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgRGVsZXRlQWN0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWVcIikpO1xuLy8gY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnUmVzdWx0c0xpc3QnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQnRuOiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnaW5hdGlvbjogVGFibGVQYWdpbmF0aW9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRGVsZXRlQWN0aW9uOiBEZWxldGVBY3Rpb25fdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9hc3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgYWN0aXZpdHkgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuYWN0aXZpdHk7XG4gICAgICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkudmFsdWUuaWQsIGFjdGl2aXR5VGl0bGUgPSBhY3Rpdml0eS52YWx1ZS50aXRsZSwgYWN0aXZpdHlMaW5rID0gXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQpO1xuICAgICAgICB2YXIgdG9hc3REYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZXN1bHRzRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgaXNFbXB0eSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3Rpdml0aWVzX2xhbmcueW91cl9hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGxpbms6ICcvYWN0aXZpdGllcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgdGl0bGVfMS5kZWZhdWx0KShhY3Rpdml0eVRpdGxlLCAnZW4nKSxcbiAgICAgICAgICAgICAgICBsaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5jb21tb25fbGFuZy5yZXN1bHRfbGlzdCxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCwgXCIvcmVzdWx0cy9wYWdlLzFcIikpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHRzRGF0YSwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudHlwZSA9IHByb3BzLnRvYXN0LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLm1lc3NhZ2UgPSBwcm9wcy50b2FzdC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICBmdW5jdGlvbiBmZXRjaExpc3RpbmdzKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAuZ2V0KFwiL2FjdGl2aXR5L1wiLmNvbmNhdChhY3Rpdml0eUlkLCBcIi9yZXN1bHRzL3BhZ2UvXCIpICsgYWN0aXZlX3BhZ2UpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0c0RhdGEsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlzRW1wdHkudmFsdWUgPSByZXNwb25zZS5kYXRhID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJvdmlkZVxuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3BhcmVudEl0ZW1JZCcsIGFjdGl2aXR5SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJlYWRjcnVtYkRhdGE6IGJyZWFkY3J1bWJEYXRhLFxuICAgICAgICAgICAgYWN0aXZpdHlMaW5rOiBhY3Rpdml0eUxpbmssXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgcmVzdWx0c0RhdGE6IHJlc3VsdHNEYXRhLFxuICAgICAgICAgICAgZ2V0QWN0aXZpdHlUaXRsZTogdGl0bGVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgZmV0Y2hMaXN0aW5nczogZmV0Y2hMaXN0aW5ncyxcbiAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRlOiBoYW5kbGVOYXZpZ2F0ZSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIlJlc3VsdERvY3VtZW50TGlua1wiLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkbERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICByZXR1cm4geyBkbERhdGE6IGRsRGF0YSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbi8vY29tcG9zYWJsZVxudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbnZhciB0aXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL3RpdGxlXCIpKTtcbi8vY29tcG9uZW50c1xudmFyIEhhdmVOb3RBZGRlZFlldF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9IYXZlTm90QWRkZWRZZXQudnVlXCIpKTtcbnZhciBMaW5rX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL2J1dHRvbnMvTGluay52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHRJbmRpY2F0b3InLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgTm90WWV0OiBIYXZlTm90QWRkZWRZZXRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbFRpcDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykucmVzdWx0O1xuICAgICAgICB2YXIgaW5kaWNhdG9yRGF0YSA9IHJlc3VsdC52YWx1ZS5pbmRpY2F0b3JzLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIHsgaW5kaWNhdG9yRGF0YTogaW5kaWNhdG9yRGF0YSwgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsIGdldEFjdGl2aXR5VGl0bGU6IHRpdGxlXzEuZGVmYXVsdCwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHRSZWZlcmVuY2UnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciByZWZlcmVuY2VEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgcmVmZXJlbmNlRGF0YTogcmVmZXJlbmNlRGF0YSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHRUeXBlJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0eXBlRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IHR5cGVEYXRhOiB0eXBlRGF0YSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdSZXN1bHRURCcsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHRkRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7IHRkRGF0YTogdGREYXRhIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuLy9jb21wb25lbnRzXG52YXIgTGlua192dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9idXR0b25zL0xpbmsudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvc2VjdGlvbnMvUGFnZVRpdGxlLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xuLy9jb21wb3NhYmxlXG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xudmFyIFRyYW5zYWN0aW9uRWxlbWVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25EZXRhaWwnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgVHJhbnNhY3Rpb25FbGVtZW50OiBUcmFuc2FjdGlvbkVsZW1lbnRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgQnRuOiBMaW5rX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIFRvYXN0OiBUb2FzdE1lc3NhZ2VfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGFjdGl2aXR5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgYWN0aXZpdHkgPSBfYS5hY3Rpdml0eSwgdHJhbnNhY3Rpb24gPSBfYS50cmFuc2FjdGlvbjtcbiAgICAgICAgdmFyIGxpbmtDbGFzc2VzID0gJ2ZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBiZy13aGl0ZSByb3VuZGVkIHAtMiB0ZXh0LXNtIHRleHQtbi01MCBmb250LWJvbGQgbGVhZGluZy1yZWxheGVkIG1iLTIgc2hhZG93LWRlZmF1bHQnO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBwb3NpdGlvblkgPSAoMCwgdnVlXzEucmVmKSgwKTtcbiAgICAgICAgdmFyIHNjcmVlbldpZHRoID0gKDAsIHZ1ZV8xLnJlZikoMCk7XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGhhbmRsZVNjcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uWS52YWx1ZSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaXN0b3BWaXNpYmxlID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25ZLnZhbHVlID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGl0bGVzXG4gICAgICAgIHZhciB0cmFuc2FjdGlvbkRhdGEgPSB0cmFuc2FjdGlvbi52YWx1ZS50cmFuc2FjdGlvbjtcbiAgICAgICAgdmFyIGNhbGNXaWR0aCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgc2NyZWVuV2lkdGgudmFsdWUgPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIGlmIChzY3JlZW5XaWR0aC52YWx1ZSA+IDEwMjQpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93U2lkZWJhci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgYWN0aXZpdHlJZCA9IGFjdGl2aXR5LnZhbHVlLmlkLCBhY3Rpdml0eVRpdGxlID0gKDAsIHRpdGxlXzEuZGVmYXVsdCkoYWN0aXZpdHkudmFsdWUudGl0bGUsICdlbicpLCBhY3Rpdml0eUxpbmsgPSBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCksIHRyYW5zYWN0aW9uTGluayA9IFwiXCIuY29uY2F0KGFjdGl2aXR5TGluaywgXCIvdHJhbnNhY3Rpb24vXCIpLmNvbmNhdCh0cmFuc2FjdGlvbi52YWx1ZS5pZCk7XG4gICAgICAgICgwLCB2dWVfMS5vblVubW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY1dpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2hvd1NpZGViYXIudmFsdWU7IH0sIGZ1bmN0aW9uIChzaWRlYmFyKSB7XG4gICAgICAgICAgICBpZiAoc2lkZWJhcikge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyZWFkY3J1bWIgZGF0YVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJyZWFkY3J1bWJEYXRhID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5hY3Rpdml0aWVzX2xhbmcueW91cl9hY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgIGxpbms6IFwiL2FjdGl2aXR5XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpdml0eVRpdGxlLFxuICAgICAgICAgICAgICAgIGxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLmNvbW1vbl9sYW5nLnRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbms6IFwiXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICAoMCwgdnVlXzEub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHByb3BzLnRvYXN0Lm1lc3NhZ2UgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNNYW5kYXRvcnlJY29uID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgIHJldHVybiAoci50b1N0cmluZygpID09PSAndmFsdWUnIHx8XG4gICAgICAgICAgICAgICAgci50b1N0cmluZygpID09PSAndHJhbnNhY3Rpb25fdHlwZScgfHxcbiAgICAgICAgICAgICAgICByLnRvU3RyaW5nKCkgPT09ICd0cmFuc2FjdGlvbl9kYXRlJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3Rpdml0eVRpdGxlOiBhY3Rpdml0eVRpdGxlLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkRhdGE6IHRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICAgIGxpbmtDbGFzc2VzOiBsaW5rQ2xhc3NlcyxcbiAgICAgICAgICAgIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSxcbiAgICAgICAgICAgIGFjdGl2aXR5TGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25MaW5rOiB0cmFuc2FjdGlvbkxpbmssXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIGlzTWFuZGF0b3J5SWNvbjogaXNNYW5kYXRvcnlJY29uLFxuICAgICAgICAgICAgc2hvd1NpZGViYXI6IHNob3dTaWRlYmFyLFxuICAgICAgICAgICAgaXN0b3BWaXNpYmxlOiBpc3RvcFZpc2libGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi8uLi8uLi8uLi9jb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi8uLi8uLi8uLi9jb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIEluZGV4XzEgPSByZXF1aXJlKFwiLi9lbGVtZW50cy9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIkFjdGl2aXR5RWxlbWVudFwiLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgRGVzY3JpcHRpb246IEluZGV4XzEuRGVzY3JpcHRpb24sXG4gICAgICAgIEFpZFR5cGU6IEluZGV4XzEuQWlkVHlwZSxcbiAgICAgICAgVHJhbnNhY3Rpb25UeXBlOiBJbmRleF8xLlRyYW5zYWN0aW9uVHlwZSxcbiAgICAgICAgVHJhbnNhY3Rpb25EYXRlOiBJbmRleF8xLlRyYW5zYWN0aW9uRGF0ZSxcbiAgICAgICAgVmFsdWU6IEluZGV4XzEuVmFsdWUsXG4gICAgICAgIFByb3ZpZGVyT3JnYW5pemF0aW9uOiBJbmRleF8xLlByb3ZpZGVyT3JnYW5pemF0aW9uLFxuICAgICAgICBSZWNlaXZlck9yZ2FuaXphdGlvbjogSW5kZXhfMS5SZWNlaXZlck9yZ2FuaXphdGlvbixcbiAgICAgICAgRGlzYnVyc2VtZW50Q2hhbm5lbDogSW5kZXhfMS5EaXNidXJzZW1lbnRDaGFubmVsLFxuICAgICAgICBTZWN0b3I6IEluZGV4XzEuU2VjdG9yLFxuICAgICAgICBSZWNpcGllbnRDb3VudHJ5OiBJbmRleF8xLlJlY2lwaWVudENvdW50cnksXG4gICAgICAgIFJlY2lwaWVudFJlZ2lvbjogSW5kZXhfMS5SZWNpcGllbnRSZWdpb24sXG4gICAgICAgIEZsb3dUeXBlOiBJbmRleF8xLkZsb3dUeXBlLFxuICAgICAgICBGaW5hbmNlVHlwZTogSW5kZXhfMS5GaW5hbmNlVHlwZSxcbiAgICAgICAgVGllZFN0YXR1czogSW5kZXhfMS5UaWVkU3RhdHVzLFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50TmFtZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGVkaXRVcmw6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBob3ZlclRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBfYSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgZGF0YSA9IF9hLmRhdGEsIHR5cGVzID0gX2EudHlwZXMsIGVsZW1lbnREYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKFwidHlwZXNcIiwgdHlwZXMpO1xuICAgICAgICBmdW5jdGlvbiBnZXRMYW5ndWFnZXMobGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZS5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7IHJldHVybiBlbnRyeS5sYW5ndWFnZTsgfSkuam9pbihcIiwgXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50RGF0YTogZWxlbWVudERhdGEsXG4gICAgICAgICAgICBnZXRMYW5ndWFnZXM6IGdldExhbmd1YWdlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG4vL2NvbXBvbmVudHNcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgVGFibGVQYWdpbmF0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RhYmxlUGFnaW5hdGlvbi52dWVcIikpO1xudmFyIFBhZ2VUaXRsZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCIpKTtcbnZhciBUb2FzdE1lc3NhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvVG9hc3RNZXNzYWdlLnZ1ZVwiKSk7XG52YXIgRGVsZXRlQWN0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL0RlbGV0ZUFjdGlvbi52dWVcIikpO1xuLy9jb21wb3NhYmxlXG52YXIgZGF0ZUZvcm1hdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xudmFyIHRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvdGl0bGVcIikpO1xudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG4vLyB0b2dnbGUgc3RhdGUgZm9yIG1vZGFsIHBvcHVwXG52YXIgX2EgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZGVsZXRlVmFsdWUgPSBfYVswXSwgZGVsZXRlVG9nZ2xlID0gX2FbMV07XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uTGlzdCcsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBCdG46IEJ1dHRvbkNvbXBvbmVudF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQYWdpbmF0aW9uOiBUYWJsZVBhZ2luYXRpb25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUGFnZVRpdGxlOiBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBEZWxldGVBY3Rpb246IERlbGV0ZUFjdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2FjdGlvbnM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRvYXN0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGFjdGl2aXR5ID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmFjdGl2aXR5O1xuICAgICAgICB2YXIgYWN0aXZpdHlJZCA9IGFjdGl2aXR5LnZhbHVlLmlkLCBhY3Rpdml0eVRpdGxlID0gKDAsIHRpdGxlXzEuZGVmYXVsdCkoYWN0aXZpdHkudmFsdWUudGl0bGUsICdlbicpLCBhY3Rpdml0eUxpbmsgPSBcIi9hY3Rpdml0eS9cIi5jb25jYXQoYWN0aXZpdHlJZCk7XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRyYW5zYWN0aW9uc0RhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHt9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdC5nZXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQsIFwiL3RyYW5zYWN0aW9ucy9wYWdlLzFcIikpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0cmFuc2FjdGlvbnNEYXRhLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMudG9hc3QubWVzc2FnZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3REYXRhLnR5cGUgPSBwcm9wcy50b2FzdC50eXBlO1xuICAgICAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS5tZXNzYWdlID0gcHJvcHMudG9hc3QubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGUocGF0aCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZldGNoTGlzdGluZ3MoYWN0aXZlX3BhZ2UpIHtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5nZXQoXCIvYWN0aXZpdHkvXCIuY29uY2F0KGFjdGl2aXR5SWQsIFwiL3RyYW5zYWN0aW9ucy9wYWdlL1wiKSArIGFjdGl2ZV9wYWdlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRyYW5zYWN0aW9uc0RhdGEsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJvdmlkZVxuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3BhcmVudEl0ZW1JZCcsIGFjdGl2aXR5SWQpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJlYWRjcnVtYiBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLmFjdGl2aXRpZXNfbGFuZy55b3VyX2FjdGl2aXRpZXMsXG4gICAgICAgICAgICAgICAgbGluazogJy9hY3Rpdml0aWVzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGFjdGl2aXR5VGl0bGUsXG4gICAgICAgICAgICAgICAgbGluazogYWN0aXZpdHlMaW5rLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UuY29tbW9uX2xhbmcudHJhbnNhY3Rpb25fbGlzdCxcbiAgICAgICAgICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmVhZGNydW1iRGF0YTogYnJlYWRjcnVtYkRhdGEsXG4gICAgICAgICAgICBhY3Rpdml0eUxpbms6IGFjdGl2aXR5TGluayxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRfMS5kZWZhdWx0LFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25zRGF0YTogdHJhbnNhY3Rpb25zRGF0YSxcbiAgICAgICAgICAgIGdldEFjdGl2aXR5VGl0bGU6IHRpdGxlXzEuZGVmYXVsdCxcbiAgICAgICAgICAgIGZldGNoTGlzdGluZ3M6IGZldGNoTGlzdGluZ3MsXG4gICAgICAgICAgICB0b2FzdERhdGE6IHRvYXN0RGF0YSxcbiAgICAgICAgICAgIGRlbGV0ZVZhbHVlOiBkZWxldGVWYWx1ZSxcbiAgICAgICAgICAgIGRlbGV0ZVRvZ2dsZTogZGVsZXRlVG9nZ2xlLFxuICAgICAgICAgICAgaGFuZGxlTmF2aWdhdGU6IGhhbmRsZU5hdmlnYXRlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25BaWRUeXBlJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBhdERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXREYXRhOiBhdERhdGEsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvbkRlc2NyaXB0aW9uJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0ZERhdGEgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyB0ZERhdGE6IHRkRGF0YSwgdHlwZTogdHlwZSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6ICdUcmFuc2FjdGlvbkRpc2J1cnNlbWVudENoYW5uZWwnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGNvZGUgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgdHlwZSA9ICgwLCB2dWVfMS5pbmplY3QpKCd0eXBlcycpO1xuICAgICAgICByZXR1cm4geyBjb2RlOiBjb2RlLCB0eXBlOiB0eXBlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uRmluYW5jZVR5cGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGZpbmFuY2VEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgZmluYW5jZURhdGE6IGZpbmFuY2VEYXRhLCB0eXBlOiB0eXBlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uRmxvd1R5cGUnLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIGZsb3dEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgZmxvd0RhdGE6IGZsb3dEYXRhLCB0eXBlOiB0eXBlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uUHJvdmlkZXJPcmdhbmlzYXRpb24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIFBvRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IFBvRGF0YTogUG9EYXRhLCB0eXBlOiB0eXBlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uUmVjZWl2ZXJPcmdhbmlzYXRpb24nLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIFBvRGF0YSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IFBvRGF0YTogUG9EYXRhLCB0eXBlOiB0eXBlLCBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uUmVjaXBpZW50Q291bnRyeScsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgY291bnRyeSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoJ3R5cGVzJyk7XG4gICAgICAgIHJldHVybiB7IGNvdW50cnk6IGNvdW50cnksIHR5cGU6IHR5cGUsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiBcIlRyYW5zYWN0aW9uUmVjaXBpZW50UmVnaW9uXCIsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgY291bnRyeSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgcmV0dXJuIHsgY291bnRyeTogY291bnRyeSwgdHlwZTogdHlwZSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiVHJhbnNhY3Rpb25TZWN0b3JcIixcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciB0eXBlID0gKDAsIHZ1ZV8xLmluamVjdCkoXCJ0eXBlc1wiKTtcbiAgICAgICAgdmFyIHNlY3RvciA9IGRhdGEudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWN0b3I6IHNlY3RvcixcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ1RyYW5zYWN0aW9uVGllZFN0YXR1cycsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogW09iamVjdCwgU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZGF0YSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5kYXRhO1xuICAgICAgICB2YXIgdHNEYXRhID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgdHNEYXRhOiB0c0RhdGEsIHR5cGU6IHR5cGUsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vLi4vLi4vLi4vLi4vY29tcG9zYWJsZS9kYXRlRm9ybWF0XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25EYXRlJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBkYXRlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgZGF0ZTogZGF0ZSwgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsIGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBuYW1lOiAnVHJhbnNhY3Rpb25UeXBlJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBkYXRhID0gKDAsIHZ1ZV8xLnRvUmVmcykocHJvcHMpLmRhdGE7XG4gICAgICAgIHZhciBjb2RlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgdmFyIHR5cGUgPSAoMCwgdnVlXzEuaW5qZWN0KSgndHlwZXMnKTtcbiAgICAgICAgcmV0dXJuIHsgY29kZTogY29kZSwgdHlwZTogdHlwZSwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGRhdGVGb3JtYXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9jb21wb3NhYmxlL2RhdGVGb3JtYXRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIG5hbWU6IFwiVHJhbnNhY3Rpb25WYWx1ZVwiLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGRhdGEgPSAoMCwgdnVlXzEudG9SZWZzKShwcm9wcykuZGF0YTtcbiAgICAgICAgdmFyIHZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0XzEuZGVmYXVsdCwgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBCdXR0b25Db21wb25lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiKSk7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0FjdGl2aXR5VXBsb2FkJyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgZmlsZSA9ICgwLCB2dWVfMi5yZWYpKCksIGVycm9yID0gKDAsIHZ1ZV8yLnJlZikoJycpLCBsb2FkZXIgPSAoMCwgdnVlXzIucmVmKShmYWxzZSksIGxvYWRlclRleHQgPSAoMCwgdnVlXzIucmVmKSgnUGxlYXNlIFdhaXQnKTtcbiAgICAgICAgZnVuY3Rpb24gdXBsb2FkRmlsZSgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ1VwbG9hZGluZyAuY3N2Ly54bWwgZmlsZSc7XG4gICAgICAgICAgICB2YXIgYWN0aXZpdHkgPSBmaWxlLnZhbHVlLmZpbGVzLmxlbmd0aCA/IGZpbGUudmFsdWUuZmlsZXNbMF0gOiAnJztcbiAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdhY3Rpdml0eScsIGFjdGl2aXR5KTtcbiAgICAgICAgICAgIGVycm9yLnZhbHVlID0gJyc7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdCgnL2ltcG9ydCcsIGRhdGEsIGNvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnZhbHVlLmZpbGVzLmxlbmd0aCAmJiAoKF9hID0gcmVzID09PSBudWxsIHx8IHJlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzLmRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWNjZXNzKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9pbXBvcnQvbGlzdCc7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IudmFsdWUgPSBPYmplY3QudmFsdWVzKHJlcy5kYXRhLmVycm9ycykuam9pbignICcpO1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IudmFsdWUgPSAnRXJyb3IgaGFzIG9jY3VyZWQgd2hpbGUgdXBsb2FkaW5nIGZpbGUuJztcbiAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRvd25sb2FkRXhjZWwoKSB7XG4gICAgICAgICAgICAoMCwgYXhpb3NfMS5kZWZhdWx0KSh7XG4gICAgICAgICAgICAgICAgdXJsOiAnaW1wb3J0L2Rvd25sb2FkL2NzdicsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3Jlc3BvbnNlLmRhdGFdLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9jc3YnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSAnY3N2X3Rlc3QuY3N2JztcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIGZpbGU6IGZpbGUsIGVycm9yOiBlcnJvciwgbG9hZGVyOiBsb2FkZXIsIGxvYWRlclRleHQ6IGxvYWRlclRleHQsIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGUsIGRvd25sb2FkRXhjZWw6IGRvd25sb2FkRXhjZWwsIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsIEhvdmVyVGV4dDogSG92ZXJUZXh0X3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEJ1dHRvbkNvbXBvbmVudF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9CdXR0b25Db21wb25lbnQudnVlXCIpKTtcbnZhciBQcm9ncmVzc0xvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9zZWN0aW9ucy9Qcm9ncmVzc0xvYWRlci52dWVcIikpO1xudmFyIEltcG9ydFBsYWNlaG9sZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZVwiKSk7XG52YXIgTGlzdEVsZW1lbnRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vTGlzdEVsZW1lbnQudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSW1wb3J0TGlzdCcsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHt9KTtcbiAgICAgICAgdmFyIHNlbGVjdGVkQWN0aXZpdGllcyA9ICgwLCB2dWVfMi5yZWFjdGl2ZSkoW10pO1xuICAgICAgICB2YXIgc2VsZWN0ZWRDb3VudCA9ICgwLCB2dWVfMi5yZWYpKDApO1xuICAgICAgICB2YXIgYWN0aXZpdGllc0xlbmd0aCA9ICgwLCB2dWVfMi5yZWYpKDApO1xuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgc2VsZWN0QWxsID0gKDAsIHZ1ZV8yLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgbG9hZGVyVGV4dCA9ICgwLCB2dWVfMi5yZWYpKCdQbGVhc2UgV2FpdCcpO1xuICAgICAgICB2YXIgdGltZXI7XG4gICAgICAgICgwLCB2dWVfMi5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsb2FkZXJUZXh0LnZhbHVlID0gJ1BsZWFzZSBXYWl0JztcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICB0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgLmdldCgnL2ltcG9ydC9jaGVja19zdGF0dXMnKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aXZpdGllcywgcmVzLmRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXRpZXNMZW5ndGgudmFsdWUgPSByZXMuZGF0YS5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSBcImVycm9yXCIgfHwgKCFyZXMuZGF0YS5kYXRhICYmIGNvdW50ID49IDUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYWN0aXZpdGllcyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcyhhY3Rpdml0eV9pZCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZWN0ZWRBY3Rpdml0aWVzLmluZGV4T2YoYWN0aXZpdHlfaWQpO1xuICAgICAgICAgICAgaWYgKGFjdGl2aXRpZXNbYWN0aXZpdHlfaWRdWydlcnJvcnMnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEFjdGl2aXRpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudC52YWx1ZSA9IHNlbGVjdGVkQ291bnQudmFsdWUgLSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRBY3Rpdml0aWVzLnB1c2goYWN0aXZpdHlfaWQpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50LnZhbHVlID0gc2VsZWN0ZWRDb3VudC52YWx1ZSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNlbGVjdEFsbEFjdGl2aXRpZXMoKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGwudmFsdWUgPSAhc2VsZWN0QWxsLnZhbHVlO1xuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgICAgICBzZWxlY3RlZEFjdGl2aXRpZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFjdGl2aXRpZXMpLmZvckVhY2goZnVuY3Rpb24gKGFjdGl2aXR5X2lkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZWN0ZWRBY3Rpdml0aWVzLmluZGV4T2YoYWN0aXZpdHlfaWQpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0aWVzW2FjdGl2aXR5X2lkXVsnZXJyb3JzJ10ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RBbGwudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQWN0aXZpdGllcy5wdXNoKGFjdGl2aXR5X2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQudmFsdWUgPSBzZWxlY3RlZENvdW50LnZhbHVlICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQWN0aXZpdGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdEFsbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQudmFsdWUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGltcG9ydEFjdGl2aXRpZXMoKSB7XG4gICAgICAgICAgICBsb2FkZXIudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZGVyVGV4dC52YWx1ZSA9ICdJbXBvcnRpbmcgLmNzdi8ueG1sIGZpbGUnO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdCgnL2ltcG9ydC9hY3Rpdml0eScsIHtcbiAgICAgICAgICAgICAgICBhY3Rpdml0aWVzOiBzZWxlY3RlZEFjdGl2aXRpZXMsXG4gICAgICAgICAgICAgICAgZmlsZXR5cGU6ICdjc3YnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2FjdGl2aXRpZXMnO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgYWN0aXZpdGllczogYWN0aXZpdGllcywgc2VsZWN0ZWRBY3Rpdml0aWVzOiBzZWxlY3RlZEFjdGl2aXRpZXMsIHNlbGVjdGVkQ291bnQ6IHNlbGVjdGVkQ291bnQsIGFjdGl2aXRpZXNMZW5ndGg6IGFjdGl2aXRpZXNMZW5ndGgsIGxvYWRlcjogbG9hZGVyLCBzZWxlY3RBbGw6IHNlbGVjdEFsbCwgbG9hZGVyVGV4dDogbG9hZGVyVGV4dCwgdGltZXI6IHRpbWVyLCB1cGRhdGVTZWxlY3RlZEFjdGl2aXRpZXM6IHVwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcywgc2VsZWN0QWxsQWN0aXZpdGllczogc2VsZWN0QWxsQWN0aXZpdGllcywgaW1wb3J0QWN0aXZpdGllczogaW1wb3J0QWN0aXZpdGllcywgQnRuQ29tcG9uZW50OiBCdXR0b25Db21wb25lbnRfdnVlXzEuZGVmYXVsdCwgTG9hZGVyOiBQcm9ncmVzc0xvYWRlcl92dWVfMS5kZWZhdWx0LCBQbGFjZWhvbGRlcjogSW1wb3J0UGxhY2Vob2xkZXJfdnVlXzEuZGVmYXVsdCwgTGlzdEVsZW1lbnQ6IExpc3RFbGVtZW50X3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIFNoaW1tZXJMb2FkaW5nX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1NoaW1tZXJMb2FkaW5nLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSW1wb3J0UGxhY2Vob2xkZXInLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IFNoaW1tZXI6IFNoaW1tZXJMb2FkaW5nX3Z1ZV8xLmRlZmF1bHQgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdMaXN0RWxlbWVudCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aXZpdHk6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpbmRleDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNlbGVjdGVkQWN0aXZpdGllczoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBlbWl0czogW1wic2VsZWN0RWxlbWVudFwiXSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2UsIGVtaXQgPSBfYS5lbWl0O1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGFjdGl2ZSA9ICgwLCB2dWVfMi5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGFjdGl2aXRpZXMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKFtdKTtcbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlRXJyb3IoKSB7XG4gICAgICAgICAgICBhY3RpdmUudmFsdWUgPSAhYWN0aXZlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzZWxlY3RFbGVtZW50ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICBlbWl0KFwic2VsZWN0RWxlbWVudFwiLCBpbmRleCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjb3VudEVycm9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCBpbiBwcm9wcy5hY3Rpdml0eVtcImVycm9yc1wiXSkge1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IE9iamVjdC5rZXlzKHByb3BzLmFjdGl2aXR5W1wiZXJyb3JzXCJdW2luZGV4XSkubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9O1xuICAgICAgICAoMCwgdnVlXzIud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BzLnNlbGVjdGVkQWN0aXZpdGllczsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YSA9IEpTT04ucGFyc2UocHJvcHMuc2VsZWN0ZWRBY3Rpdml0aWVzKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpdml0aWVzLCBzZWxlY3RlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCBwcm9wczogcHJvcHMsIGVtaXQ6IGVtaXQsIGFjdGl2ZTogYWN0aXZlLCBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzLCB0b2dnbGVFcnJvcjogdG9nZ2xlRXJyb3IsIHNlbGVjdEVsZW1lbnQ6IHNlbGVjdEVsZW1lbnQsIGNvdW50RXJyb3JzOiBjb3VudEVycm9ycyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xudmFyIFJhZGlhbFByb2dyZXNzQmFyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZVwiKSk7XG52YXIgT3JnYW5pc2F0aW9uRWxlbWVudHNfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlXCIpKTtcbnZhciBPcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWVcIikpO1xudmFyIFRvYXN0TWVzc2FnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCIpKTtcbnZhciBPcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlXCIpKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIGNvcmVfMiA9IHJlcXVpcmUoXCJAdnVldXNlL2NvcmVcIik7XG52YXIgRXJyb3JQb3BVcF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9FcnJvclBvcFVwLnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgbmFtZTogJ09yZ2FuaXNhdGlvbkRhdGEnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgUmFkaWFsUHJvZ3Jlc3NCYXI6IFJhZGlhbFByb2dyZXNzQmFyX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIE9yZ2FuaXNhdGlvbkVsZW1lbnRzOiBPcmdhbmlzYXRpb25FbGVtZW50c192dWVfMS5kZWZhdWx0LFxuICAgICAgICBPcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbDogT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWxfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgICAgICBQdWJsaXNoVW5wdWJsaXNoOiBPcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uX3Z1ZV8xLmRlZmF1bHQsXG4gICAgICAgIEVycm9yUG9wVXA6IEVycm9yUG9wVXBfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgb3JnYW5pemF0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2FzdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFuZGF0b3J5Q29tcGxldGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0b2FzdERhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGVycm9yRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICAgIHR5cGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgc2hvd1NpZGViYXIgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBzY3JlZW5XaWR0aCA9ICgwLCB2dWVfMS5yZWYpKDApO1xuICAgICAgICB2YXIgX2EgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgcHVibGlzaFZhbHVlID0gX2FbMF0sIHB1Ymxpc2hUb2dnbGUgPSBfYVsxXTtcbiAgICAgICAgdmFyIF9iID0gKDAsIGNvcmVfMS51c2VUb2dnbGUpKCksIHVucHVibGlzaFZhbHVlID0gX2JbMF0sIHVucHVibGlzaFRvZ2dsZSA9IF9iWzFdO1xuICAgICAgICB2YXIgX2MgPSAoMCwgY29yZV8xLnVzZVRvZ2dsZSkoKSwgZGVsZXRlVmFsdWUgPSBfY1swXSwgZGVsZXRlVG9nZ2xlID0gX2NbMV07XG4gICAgICAgIHZhciBfZCA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBkb3dubG9hZFZhbHVlID0gX2RbMF0sIGRvd25sb2FkVG9nZ2xlID0gX2RbMV07XG4gICAgICAgIHZhciBwb3NpdGlvblkgPSAoMCwgdnVlXzEucmVmKSgwKTtcbiAgICAgICAgdmFyIHRvZ2dsZVNpZGViYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG93U2lkZWJhci52YWx1ZSA9ICFzaG93U2lkZWJhci52YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uVW5tb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxjV2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNhbGNXaWR0aCk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy50b2FzdC5tZXNzYWdlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS50eXBlID0gcHJvcHMudG9hc3QudHlwZSA9PT0gJ3N1Y2Nlc3MnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRvYXN0RGF0YS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9IHByb3BzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2FsY1dpZHRoID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBzY3JlZW5XaWR0aC52YWx1ZSA9IGV2ZW50LnRhcmdldC5pbm5lcldpZHRoO1xuICAgICAgICAgICAgaWYgKHNjcmVlbldpZHRoLnZhbHVlID4gMTAyNCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dTaWRlYmFyLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3NpdGlvblkudmFsdWUgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGlzdG9wVmlzaWJsZSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocG9zaXRpb25ZLnZhbHVlID09PSAwKTtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblkudmFsdWUgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaWdub3JlVXBkYXRlcyA9ICgwLCBjb3JlXzIud2F0Y2hJZ25vcmFibGUpKHRvYXN0RGF0YSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9LCB7XG4gICAgICAgICAgICBmbHVzaDogJ3N5bmMnLFxuICAgICAgICB9KS5pZ25vcmVVcGRhdGVzO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNob3dTaWRlYmFyLnZhbHVlOyB9LCBmdW5jdGlvbiAoc2lkZWJhcikge1xuICAgICAgICAgICAgaWYgKHNpZGViYXIpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEud2F0Y2gpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRvYXN0RGF0YS52aXNpYmlsaXR5OyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlnbm9yZVRvYXN0VXBkYXRlKCk7XG4gICAgICAgICAgICB9LCAxMDAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaWdub3JlVG9hc3RVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZ25vcmVVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0b2FzdERhdGEubWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHcm91cGluZyBhbGwgdGhlIGRhdGEncyBmb3Igc2Nyb2xsIGZ1bmN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIHRoaXMgZGF0YSBpcyBjcmVhdGVkIHVzaW5nIHByb3BzLmdyb3VwcyBhbmQgcHJvcHMuYWN0aXZpdHlcbiAgICAgICAgICovXG4gICAgICAgIHZhciBfZSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKSwgZ3JvdXBzID0gX2UuZ3JvdXBzLCBvcmdhbml6YXRpb24gPSBfZS5vcmdhbml6YXRpb24sIGVsZW1lbnRzID0gX2UuZWxlbWVudHMsIGdyb3VwZWREYXRhID0gZ3JvdXBzLnZhbHVlLCBvcmdhbml6YXRpb25Qcm9wcyA9IG9yZ2FuaXphdGlvbi52YWx1ZSwgb3JnYW5pemF0aW9uRGF0YSA9IGdyb3Vwcy52YWx1ZSwgZWxlbWVudFByb3BzID0gZWxlbWVudHMudmFsdWU7XG4gICAgICAgIC8vIGdlbmVyYXRpbmcgYXZhaWxhYmxlIGVsZW1lbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKG9yZ2FuaXphdGlvbkRhdGEpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgZmxhZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob3JnYW5pemF0aW9uRGF0YVtrZXldWydlbGVtZW50cyddKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICBpZiAob3JnYW5pemF0aW9uUHJvcHNba10gfHwgdHlwZW9mIG9yZ2FuaXphdGlvblByb3BzW2tdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25EYXRhW2tleV1bJ2VsZW1lbnRzJ11ba11bJ2NvbnRlbnQnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25Qcm9wc1trXTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trXVsnaGFzX2RhdGEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb3JnYW5pemF0aW9uRGF0YVtrZXldW2tdO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50UHJvcHNba11bJ2hhc19kYXRhJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudFByb3BzW2tdWydjb3JlJ10gPVxuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25EYXRhW2tleV1bJ2VsZW1lbnRzJ11ba11bJ21hbmRhdG9yeSddO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9wc1trXVsnY29tcGxldGVkJ10gPVxuICAgICAgICAgICAgICAgICAgICBrID09PSAnb3JnYW5pc2F0aW9uX2lkZW50aWZpZXInXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG9yZ2FuaXphdGlvblByb3BzWydlbGVtZW50X3N0YXR1cyddWydpZGVudGlmaWVyJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIDogb3JnYW5pemF0aW9uUHJvcHNbJ2VsZW1lbnRfc3RhdHVzJ11ba107XG4gICAgICAgICAgICAgICAgZWxlbWVudFByb3BzW2tdWydub3RfY29tcGxldGVkJ10gPSAhZWxlbWVudFByb3BzW2tdWydjb21wbGV0ZWQnXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZsYWcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9yZ2FuaXphdGlvbkRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGdlbmVyYXRpbmcgYXZhaWxhYmxlIGNhdGVnb3JpZXMgb2YgZWxlbWVudHNcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBlZERhdGEpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9yZ2FuaXphdGlvbkRhdGEsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkRGF0YVtrZXldWydzdGF0dXMnXSA9ICdlbmFibGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwZWREYXRhW2tleV1bJ3N0YXR1cyddID0gJ2Rpc2FibGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwdWJsaXNoTWVzc2FnZSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwdWJsaXNoU3RhdHVzID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBpc19wdWJsaXNoZWQ6IG9yZ2FuaXphdGlvblByb3BzLmlzX3B1Ymxpc2hlZCxcbiAgICAgICAgICAgIHN0YXR1czogb3JnYW5pemF0aW9uUHJvcHMuc3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdwdWJsaXNoTWVzc2FnZScsIHB1Ymxpc2hNZXNzYWdlKTtcbiAgICAgICAgKDAsIHZ1ZV8xLnByb3ZpZGUpKCdtYW5kYXRvcnlDb21wbGV0ZWQnLCBwcm9wcy5tYW5kYXRvcnlDb21wbGV0ZWQpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ3RvYXN0RGF0YScsIHRvYXN0RGF0YSk7XG4gICAgICAgICgwLCB2dWVfMS5wcm92aWRlKSgncHVibGlzaFN0YXR1cycsIHB1Ymxpc2hTdGF0dXMpO1xuICAgICAgICAoMCwgdnVlXzEucHJvdmlkZSkoJ2Vycm9yRGF0YScsIGVycm9yRGF0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm91cGVkRGF0YTogZ3JvdXBlZERhdGEsXG4gICAgICAgICAgICBvcmdhbml6YXRpb25EYXRhOiBvcmdhbml6YXRpb25EYXRhLFxuICAgICAgICAgICAgcHVibGlzaFZhbHVlOiBwdWJsaXNoVmFsdWUsXG4gICAgICAgICAgICBwdWJsaXNoVG9nZ2xlOiBwdWJsaXNoVG9nZ2xlLFxuICAgICAgICAgICAgdW5wdWJsaXNoVmFsdWU6IHVucHVibGlzaFZhbHVlLFxuICAgICAgICAgICAgdW5wdWJsaXNoVG9nZ2xlOiB1bnB1Ymxpc2hUb2dnbGUsXG4gICAgICAgICAgICBkZWxldGVWYWx1ZTogZGVsZXRlVmFsdWUsXG4gICAgICAgICAgICBkZWxldGVUb2dnbGU6IGRlbGV0ZVRvZ2dsZSxcbiAgICAgICAgICAgIGRvd25sb2FkVmFsdWU6IGRvd25sb2FkVmFsdWUsXG4gICAgICAgICAgICBkb3dubG9hZFRvZ2dsZTogZG93bmxvYWRUb2dnbGUsXG4gICAgICAgICAgICBlbGVtZW50UHJvcHM6IGVsZW1lbnRQcm9wcyxcbiAgICAgICAgICAgIHRvYXN0RGF0YTogdG9hc3REYXRhLFxuICAgICAgICAgICAgcHVibGlzaFN0YXR1czogcHVibGlzaFN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yRGF0YTogZXJyb3JEYXRhLFxuICAgICAgICAgICAgdG9nZ2xlU2lkZWJhcjogdG9nZ2xlU2lkZWJhcixcbiAgICAgICAgICAgIHNob3dTaWRlYmFyOiBzaG93U2lkZWJhcixcbiAgICAgICAgICAgIGlzdG9wVmlzaWJsZTogaXN0b3BWaXNpYmxlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBjb3JlXzEgPSByZXF1aXJlKFwiQHZ1ZXVzZS9jb3JlXCIpO1xudmFyIGNvcmVFbGVtZW50c18xID0gcmVxdWlyZShcIkNvbXBvc2FibGUvY29yZUVsZW1lbnRzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ09yZ2FuaXNhdGlvbkVsZW1lbnRzJyxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFuZGF0b3J5OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBwcm9wcyA9IF9fcHJvcHM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBfYiA9ICgwLCBjb3JlXzEudXNlVG9nZ2xlKSgpLCBzZWFyY2hCdG5WYWx1ZSA9IF9iWzBdLCBzZWFyY2hCdG5Ub2dnbGUgPSBfYlsxXTtcbiAgICAgICAgdmFyIGRyb3Bkb3duID0gKDAsIHZ1ZV8yLnJlZikoKTtcbiAgICAgICAgdmFyIGRyb3Bkb3duQnRuID0gKDAsIHZ1ZV8yLnJlZikoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgZWxlbWVudHMgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHNlYXJjaDogXCJcIixcbiAgICAgICAgICAgIHN0YXR1czogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBlbGVtZW50SWNvbnMgPSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQ6IFwiZG91YmxlLXRpY2tcIixcbiAgICAgICAgICAgIG5vdF9jb21wbGV0ZWQ6IFwicmVkLWNyb3NzXCIsXG4gICAgICAgICAgICBjb3JlOiBcImNvcmVcIixcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGFzQXJyYXlEYXRhID0gT2JqZWN0LmVudHJpZXMocHJvcHMuZGF0YSk7XG4gICAgICAgIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gKDAsIHZ1ZV8yLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBhc0FycmF5RGF0YS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdLCB2YWx1ZSA9IF9hWzFdO1xuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudHMuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoZWxlbWVudHMuc2VhcmNoLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikucmVwbGFjZSgvLS9nLCBcIl9cIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlW2VsZW1lbnRzLnN0YXR1c10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhlbGVtZW50cy5zZWFyY2gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIFwiIFwiKS5yZXBsYWNlKC8tL2csIFwiX1wiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBqdXN0U3RyaW5ncyA9IE9iamVjdC5mcm9tRW50cmllcyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICByZXR1cm4ganVzdFN0cmluZ3M7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzIub25Nb3VudGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkcm9wZG93bkJ0bi52YWx1ZS5jb250YWlucyhlLnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWRyb3Bkb3duLnZhbHVlLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hCdG5WYWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hCdG5Ub2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkcm9wZG93bkZpbHRlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5zdGF0dXMgPSBzO1xuICAgICAgICAgICAgc2VhcmNoQnRuVG9nZ2xlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgcHJvcHM6IHByb3BzLCBzZWFyY2hCdG5WYWx1ZTogc2VhcmNoQnRuVmFsdWUsIHNlYXJjaEJ0blRvZ2dsZTogc2VhcmNoQnRuVG9nZ2xlLCBkcm9wZG93bjogZHJvcGRvd24sIGRyb3Bkb3duQnRuOiBkcm9wZG93bkJ0biwgZWxlbWVudHM6IGVsZW1lbnRzLCBlbGVtZW50SWNvbnM6IGVsZW1lbnRJY29ucywgYXNBcnJheURhdGE6IGFzQXJyYXlEYXRhLCBmaWx0ZXJlZEVsZW1lbnRzOiBmaWx0ZXJlZEVsZW1lbnRzLCBkcm9wZG93bkZpbHRlcjogZHJvcGRvd25GaWx0ZXIsIG9yZ01hbmRhdG9yeUVsZW1lbnRzOiBjb3JlRWxlbWVudHNfMS5vcmdNYW5kYXRvcnlFbGVtZW50cyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBjb3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoXCJDb21wb3NhYmxlL2NvcmVFbGVtZW50c1wiKTtcbnZhciBJbmRleF8xID0gcmVxdWlyZShcIk9yZ2FuaXNhdGlvbi9lbGVtZW50cy9JbmRleFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdPcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCB8fCBBcnJheSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogJ2VuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIHByb3BzID0gX19wcm9wcztcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgLy8gY29uc3Qgc3RhdHVzID0gJyc7XG4gICAgICAgIHZhciBsYXlvdXQgPSAnYmFzaXMtNi8xMic7XG4gICAgICAgIGlmIChwcm9wcy53aWR0aCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsYXlvdXQgPSAnYmFzaXMtZnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIHZ1ZV8yLnByb3ZpZGUpKCdvcmdUeXBlcycsIHByb3BzLnR5cGVzKTtcbiAgICAgICAgdmFyIHJlcGxhY2VVbmRlcnNjb3JlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHJlZ2V4ID0gL18vZztcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBzdHJpbmcucmVwbGFjZShyZWdleCwgJy0nKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgcHJvcHM6IHByb3BzLCBsYXlvdXQ6IGxheW91dCwgcmVwbGFjZVVuZGVyc2NvcmU6IHJlcGxhY2VVbmRlcnNjb3JlLCBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LCBvcmdNYW5kYXRvcnlFbGVtZW50czogY29yZUVsZW1lbnRzXzEub3JnTWFuZGF0b3J5RWxlbWVudHMsIFJlcG9ydGluZ09yZ2FuaXNhdGlvbjogSW5kZXhfMS5SZXBvcnRpbmdPcmdhbmlzYXRpb24sIFRvdGFsQnVkZ2V0OiBJbmRleF8xLlRvdGFsQnVkZ2V0LCBSZXBvcnRpbmdPcmdCdWRnZXQ6IEluZGV4XzEuUmVwb3J0aW5nT3JnQnVkZ2V0LCBSZXBvcnRpbmdSZWdpb25CdWRnZXQ6IEluZGV4XzEuUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LCBSZWNpcGllbnRDb3VudHJ5QnVkZ2V0OiBJbmRleF8xLlJlY2lwaWVudENvdW50cnlCdWRnZXQsIFRvdGFsRXhwZW5kaXR1cmU6IEluZGV4XzEuVG90YWxFeHBlbmRpdHVyZSwgRG9jdW1lbnRMaW5rOiBJbmRleF8xLkRvY3VtZW50TGluayB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG1vbWVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ0RvY3VtZW50TGluaycsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcubWlzc2luZy5kYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVjaXBpZW50Q291bnRyeUJ1ZGdldCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcubWlzc2luZy5kYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVwb3J0aW5nT3JnQnVkZ2V0JyxcbiAgICBwcm9wczoge1xuICAgICAgICBjb250ZW50OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMi5pbmplY3QpKFwib3JnVHlwZXNcIik7XG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUgPyAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KFwiTExcIikgOiBsYW5ndWFnZS5jb21tb25fbGFuZy5taXNzaW5nLmRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCB0eXBlczogdHlwZXMsIGZvcm1hdERhdGU6IGZvcm1hdERhdGUgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdSZXBvcnRpbmdPcmdhbmlzYXRpb24nLFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIHR5cGVzID0gKDAsIHZ1ZV8yLmluamVjdCkoJ29yZ1R5cGVzJyk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgdHlwZXM6IHR5cGVzIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnUmVwb3J0aW5nUmVnaW9uQnVkZ2V0JyxcbiAgICBwcm9wczoge1xuICAgICAgICBjb250ZW50OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0eXBlcyA9ICgwLCB2dWVfMi5pbmplY3QpKFwib3JnVHlwZXNcIik7XG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUgPyAoMCwgbW9tZW50XzEuZGVmYXVsdCkoZGF0ZSkuZm9ybWF0KFwiTExcIikgOiBsYW5ndWFnZS5jb21tb25fbGFuZy5taXNzaW5nLmRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCB0eXBlczogdHlwZXMsIGZvcm1hdERhdGU6IGZvcm1hdERhdGUgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZV8yID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdUb3RhbEJ1ZGdldCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcubWlzc2luZy5kYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgbW9tZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnVG90YWxFeHBlbmRpdHVyZScsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdHlwZXMgPSAoMCwgdnVlXzIuaW5qZWN0KShcIm9yZ1R5cGVzXCIpO1xuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChcIkxMXCIpIDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcubWlzc2luZy5kYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgdHlwZXM6IHR5cGVzLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiKSk7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBmb3JtRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgZW1haWw6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGVtYWlsRXJyb3IgPSAoMCwgdnVlXzEucmVmKSgnJyk7XG4gICAgICAgIHZhciBsb2FkZXJWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoJy9wYXNzd29yZC9lbWFpbCcsIGZvcm1EYXRhKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoJ2FjdGl2aXRpZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYWN0aXZpdGllcyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCAnZXJyb3JzJyBpbiByZXNwb25zZSA/IHJlc3BvbnNlLmVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgIGVtYWlsRXJyb3IudmFsdWUgPSBlcnJvcnMuZW1haWwgPyBlcnJvcnMuZW1haWxbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvcGFzc3dvcmQvY29uZmlybSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9ycztcbiAgICAgICAgICAgICAgICBlbWFpbEVycm9yLnZhbHVlID0gZXJyb3JzLmVtYWlsID8gZXJyb3JzLmVtYWlsWzBdIDogJyc7XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHk6IGxvYWRlclZpc2liaWxpdHksXG4gICAgICAgICAgICBlbWFpbEVycm9yOiBlbWFpbEVycm9yLFxuICAgICAgICAgICAgcmVzZXQ6IHJlc2V0LFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY3J5cHRvX2pzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNyeXB0by1qc1wiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBsb2FkZXJWaXNpYmlsaXR5ID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICB2YXIgZm9ybURhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGVtYWlsOiBwcm9wcy5lbWFpbCxcbiAgICAgICAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gZW5jcnlwdChzdHJpbmcsIGtleSkge1xuICAgICAgICAgICAgdmFyIGl2ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbSgxNik7IC8vIHRoZSByZWFzb24gdG8gYmUgMTYsIHBsZWFzZSByZWFkIG9uIGBlbmNyeXB0TWV0aG9kYCBwcm9wZXJ0eS5cbiAgICAgICAgICAgIHZhciBzYWx0ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5saWIuV29yZEFycmF5LnJhbmRvbSgyNTYpO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSA5OTk7XG4gICAgICAgICAgICB2YXIgZW5jcnlwdE1ldGhvZExlbmd0aCA9IDI1NiAvIDQ7IC8vIGV4YW1wbGU6IEFFUyBudW1iZXIgaXMgMjU2IC8gNCA9IDY0XG4gICAgICAgICAgICB2YXIgaGFzaEtleSA9IGNyeXB0b19qc18xLmRlZmF1bHQuUEJLREYyKGtleSwgc2FsdCwge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogY3J5cHRvX2pzXzEuZGVmYXVsdC5hbGdvLlNIQTUxMixcbiAgICAgICAgICAgICAgICBrZXlTaXplOiBlbmNyeXB0TWV0aG9kTGVuZ3RoIC8gOCxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5BRVMuZW5jcnlwdChzdHJpbmcsIGhhc2hLZXksIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBjcnlwdG9fanNfMS5kZWZhdWx0Lm1vZGUuQ0JDLFxuICAgICAgICAgICAgICAgIGl2OiBpdixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGVuY3J5cHRlZFN0cmluZyA9IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkLmNpcGhlcnRleHQpO1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IHtcbiAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRTdHJpbmcsXG4gICAgICAgICAgICAgICAgaXY6IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkhleC5zdHJpbmdpZnkoaXYpLFxuICAgICAgICAgICAgICAgIHNhbHQ6IGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLkhleC5zdHJpbmdpZnkoc2FsdCksXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuQmFzZTY0LnN0cmluZ2lmeShjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5VdGY4LnBhcnNlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIGVtYWlsOiBmb3JtRGF0YS5lbWFpbCxcbiAgICAgICAgICAgICAgICB0b2tlbjogcHJvcHMudG9rZW4sXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBlbmNyeXB0KGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9hID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGVuY3J5cHQoZm9ybURhdGEucGFzc3dvcmQsIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJycpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KCcvcmVzZXQnLCBmb3JtKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoJ2FjdGl2aXRpZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYWN0aXZpdGllcyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAnZXJyb3JzJyBpbiByZXNwb25zZSA/IHJlc3BvbnNlLmVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9IGVycm9ycy5wYXNzd29yZCA/IGVycm9ycy5wYXNzd29yZFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24gPSBlcnJvcnMucGFzc3dvcmRfY29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblswXVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hY3Rpdml0aWVzJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9IGVycm9ycy5wYXNzd29yZCA/IGVycm9ycy5wYXNzd29yZFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6ICcnO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24gPSBlcnJvcnMucGFzc3dvcmRfY29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblswXVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5OiBsb2FkZXJWaXNpYmlsaXR5LFxuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICByZXNldDogcmVzZXQsXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIG11bHRpc2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkB2dWVmb3JtL211bHRpc2VsZWN0XCIpKTtcbnZhciBzdG9yZV8xID0gcmVxdWlyZShcIi4uLy4uL3N0b3JlXCIpO1xudmFyIGFjdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdG9yZS9zZXR0aW5nL2FjdGlvbnNcIik7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBNdWx0aXNlbGVjdDogbXVsdGlzZWxlY3RfMS5kZWZhdWx0LFxuICAgICAgICBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVuY2llczoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaHVtYW5pdGFyaWFuOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGJ1ZGdldE5vdFByb3ZpZGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBzdG9yZSA9ICgwLCBzdG9yZV8xLnVzZVN0b3JlKSgpO1xuICAgICAgICB2YXIgZGVmYXVsdEZvcm0gPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0Rm9ybTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkZWZhdWx0RXJyb3IgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0RXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZShrZXkpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGFjdGlvbnNfMS5BY3Rpb25UeXBlcy5VUERBVEVfREVGQVVMVF9WQUxVRVMsIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVmYXVsdEZvcm0udmFsdWVba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybTogZGVmYXVsdEZvcm0sXG4gICAgICAgICAgICBkZWZhdWx0RXJyb3I6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgIHVwZGF0ZVN0b3JlOiB1cGRhdGVTdG9yZSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHN0b3JlXzEgPSByZXF1aXJlKFwiLi4vLi4vc3RvcmVcIik7XG52YXIgYWN0aW9uc18xID0gcmVxdWlyZShcIi4uLy4uL3N0b3JlL3NldHRpbmcvYWN0aW9uc1wiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgU2V0dGluZ0RlZmF1bHRGb3JtX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWVcIikpO1xudmFyIFNldHRpbmdQdWJsaXNoaW5nRm9ybV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlXCIpKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgU2V0dGluZ0RlZmF1bHRGb3JtOiBTZXR0aW5nRGVmYXVsdEZvcm1fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgU2V0dGluZ1B1Ymxpc2hpbmdGb3JtOiBTZXR0aW5nUHVibGlzaGluZ0Zvcm1fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVuY2llczoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaHVtYW5pdGFyaWFuOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBidWRnZXROb3RQcm92aWRlZDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciB0YWIgPSAoMCwgdnVlXzEucmVmKSgncHVibGlzaCcpO1xuICAgICAgICB2YXIgc3RvcmUgPSAoMCwgc3RvcmVfMS51c2VTdG9yZSkoKTtcbiAgICAgICAgdmFyIGxvYWRlclZpc2liaWxpdHkgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2FzdFZpc2liaWxpdHkgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzEucmVmKSgnJyk7XG4gICAgICAgIHZhciB0b2FzdFR5cGUgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciBwdWJsaXNoaW5nRm9ybSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUucHVibGlzaGluZ0Zvcm07IH0pO1xuICAgICAgICB2YXIgcHVibGlzaGluZ0luZm8gPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLnN0YXRlLnB1Ymxpc2hpbmdJbmZvOyB9KTtcbiAgICAgICAgdmFyIHB1Ymxpc2hpbmdFcnJvciA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUucHVibGlzaGluZ0Vycm9yOyB9KTtcbiAgICAgICAgdmFyIGRlZmF1bHRGb3JtID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5zdGF0ZS5kZWZhdWx0Rm9ybTsgfSk7XG4gICAgICAgIHZhciBkZWZhdWx0RXJyb3IgPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLnN0YXRlLmRlZmF1bHRFcnJvcjsgfSk7XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN0b3JlKG5hbWUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGFjdGlvbnNfMS5BY3Rpb25UeXBlc1tuYW1lXSwge1xuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYXRhLCBzZXR0aW5nRGF0YSwgZGVmYXVsdFZhbHVlcywgcHVibGlzaGVySW5mbywgYWN0aXZpdHlWYWx1ZXMsIGtleSwga2V5LCBrZXk7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzEuZGVmYXVsdC5nZXQoJy9zZXR0aW5nL2RhdGEnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAoX2Euc2VudCgpKS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ0RhdGEgPSBkYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzID0gc2V0dGluZ0RhdGEuZGVmYXVsdF92YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXR0aW5nRGF0YS5kZWZhdWx0X3ZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlckluZm8gPSBzZXR0aW5nRGF0YS5wdWJsaXNoaW5nX2luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXR0aW5nRGF0YS5wdWJsaXNoaW5nX2luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eVZhbHVlcyA9IHNldHRpbmdEYXRhLmFjdGl2aXR5X2RlZmF1bHRfdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0dGluZ0RhdGEuYWN0aXZpdHlfZGVmYXVsdF92YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVibGlzaGVySW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBwdWJsaXNoZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSh0eXBlb2YgcHVibGlzaGVySW5mb1trZXldID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1VQREFURV9QVUJMSVNISU5HX0ZPUk0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVBEQVRFX1BVQkxJU0hFUl9JTkZPJywga2V5LCBwdWJsaXNoZXJJbmZvW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWJsaXNoZXJJbmZvLmFwaV90b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUoJ1VQREFURV9QVUJMSVNIRVJfSU5GTycsICdpc1ZlcmlmaWNhdGlvblJlcXVlc3RlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfREVGQVVMVF9WQUxVRVMnLCBrZXksIGRlZmF1bHRWYWx1ZXNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFjdGl2aXR5VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX0RFRkFVTFRfVkFMVUVTJywga2V5LCBhY3Rpdml0eVZhbHVlc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IH0pO1xuICAgICAgICBmdW5jdGlvbiB0b2dnbGVUYWIocGFnZSkge1xuICAgICAgICAgICAgdG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0YWIudmFsdWUgPSBwYWdlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdERlZmF1bHQoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBkYXRhIGluIGRlZmF1bHRFcnJvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfREVGQVVMVF9FUlJPUicsIGRhdGEsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoJy9zZXR0aW5nL3N0b3JlL2RlZmF1bHQnLCBkZWZhdWx0Rm9ybS52YWx1ZSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiAodG9hc3RWaXNpYmlsaXR5LnZhbHVlID0gZmFsc2UpOyB9LCA1MDAwKTtcbiAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UudmFsdWUgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRvYXN0VHlwZS52YWx1ZSA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUoJ1VQREFURV9QVUJMSVNIRVJfSU5GTycsIHJlc3BvbnNlLmRhdGEuaGllcmFyY2hpYWwsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9hZGVyVmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfREVGQVVMVF9FUlJPUicsIGUsIGVycm9yc1tlXVswXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdFB1Ymxpc2hpbmcodXJsKSB7XG4gICAgICAgICAgICBsb2FkZXJWaXNpYmlsaXR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGRhdGEgaW4gcHVibGlzaGluZ0Vycm9yLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RvcmUoJ1VQREFURV9QVUJMSVNISU5HX0VSUk9SJywgZGF0YSwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QodXJsLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHVibGlzaGluZ0luZm8udmFsdWUpLCBwdWJsaXNoaW5nRm9ybS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSEVSX0lORk8nLCAncHVibGlzaGVyX3ZlcmlmaWNhdGlvbicsIHJlc3BvbnNlLmRhdGEucHVibGlzaGVyX3ZlcmlmaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSEVSX0lORk8nLCAndG9rZW5fdmVyaWZpY2F0aW9uJywgcmVzcG9uc2UuZGF0YS50b2tlbl92ZXJpZmljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdG9yZSgnVVBEQVRFX1BVQkxJU0hFUl9JTkZPJywgJ2lzVmVyaWZpY2F0aW9uUmVxdWVzdGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0b2FzdFZpc2liaWxpdHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRvYXN0VmlzaWJpbGl0eS52YWx1ZSA9IGZhbHNlKTsgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnZhbHVlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0b2FzdFR5cGUudmFsdWUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0b3JlKCdVUERBVEVfUFVCTElTSElOR19FUlJPUicsIGUsIGVycm9yc1tlXVswXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0odXJsKSB7XG4gICAgICAgICAgICBpZiAodXJsID09PSB2b2lkIDApIHsgdXJsID0gJ3NldHRpbmcvdmVyaWZ5JzsgfVxuICAgICAgICAgICAgaWYgKHRhYi52YWx1ZSA9PT0gJ3B1Ymxpc2gnKVxuICAgICAgICAgICAgICAgIHN1Ym1pdFB1Ymxpc2hpbmcodXJsKTtcbiAgICAgICAgICAgIGlmICh0YWIudmFsdWUgPT09ICdkZWZhdWx0JylcbiAgICAgICAgICAgICAgICBzdWJtaXREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIHRhYjogdGFiLFxuICAgICAgICAgICAgZGVmYXVsdEVycm9yOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICBwdWJsaXNoaW5nRXJyb3I6IHB1Ymxpc2hpbmdFcnJvcixcbiAgICAgICAgICAgIHN0b3JlOiBzdG9yZSxcbiAgICAgICAgICAgIGxvYWRlclZpc2liaWxpdHk6IGxvYWRlclZpc2liaWxpdHksXG4gICAgICAgICAgICB0b2FzdFZpc2liaWxpdHk6IHRvYXN0VmlzaWJpbGl0eSxcbiAgICAgICAgICAgIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLFxuICAgICAgICAgICAgdG9hc3RUeXBlOiB0b2FzdFR5cGUsXG4gICAgICAgICAgICB0b2dnbGVUYWI6IHRvZ2dsZVRhYixcbiAgICAgICAgICAgIHN1Ym1pdEZvcm06IHN1Ym1pdEZvcm0sXG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgc3RvcmVfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdG9yZVwiKTtcbnZhciBhY3Rpb25zXzEgPSByZXF1aXJlKFwiLi4vLi4vc3RvcmUvc2V0dGluZy9hY3Rpb25zXCIpO1xudmFyIEhvdmVyVGV4dF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi8uLi8uLi9jb21wb25lbnRzL0hvdmVyVGV4dC52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIG9yZ2FuaXphdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBlbWl0czogWydzdWJtaXRQdWJsaXNoaW5nJ10sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGVtaXQgPSBfYS5lbWl0O1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgdGFiID0gKDAsIHZ1ZV8xLnJlZikoJ3B1Ymxpc2gnKTtcbiAgICAgICAgdmFyIHN0b3JlID0gKDAsIHN0b3JlXzEudXNlU3RvcmUpKCk7XG4gICAgICAgIHZhciBwdWJsaXNoaW5nRm9ybSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUucHVibGlzaGluZ0Zvcm07IH0pO1xuICAgICAgICB2YXIgcHVibGlzaGluZ0luZm8gPSAoMCwgdnVlXzEuY29tcHV0ZWQpKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLnN0YXRlLnB1Ymxpc2hpbmdJbmZvOyB9KTtcbiAgICAgICAgdmFyIHB1Ymxpc2hpbmdFcnJvciA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuc3RhdGUucHVibGlzaGluZ0Vycm9yOyB9KTtcbiAgICAgICAgZnVuY3Rpb24gc3VibWl0UHVibGlzaGluZygpIHtcbiAgICAgICAgICAgIGVtaXQoJ3N1Ym1pdFB1Ymxpc2hpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhdXRvVmVyaWZ5KCkge1xuICAgICAgICAgICAgZW1pdCgnc3VibWl0UHVibGlzaGluZycpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN0b3JlKGtleSkge1xuICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goYWN0aW9uc18xLkFjdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0ZPUk0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHVibGlzaGluZ0Zvcm0udmFsdWVba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZVRhYigpIHtcbiAgICAgICAgICAgIHRhYi52YWx1ZSA9IHRhYi52YWx1ZSA9PT0gJ3B1Ymxpc2gnID8gJ2RlZmF1bHQnIDogJ3B1Ymxpc2gnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWI6IHRhYixcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdGb3JtOiBwdWJsaXNoaW5nRm9ybSxcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdJbmZvOiBwdWJsaXNoaW5nSW5mbyxcbiAgICAgICAgICAgIHB1Ymxpc2hpbmdFcnJvcjogcHVibGlzaGluZ0Vycm9yLFxuICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgc3VibWl0UHVibGlzaGluZzogc3VibWl0UHVibGlzaGluZyxcbiAgICAgICAgICAgIHRvZ2dsZVRhYjogdG9nZ2xlVGFiLFxuICAgICAgICAgICAgdXBkYXRlU3RvcmU6IHVwZGF0ZVN0b3JlLFxuICAgICAgICAgICAgYXV0b1ZlcmlmeTogYXV0b1ZlcmlmeSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciB2dWVfMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG4vLyBDb21wb25lbnRzXG52YXIgUGFnZVRpdGxlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1BhZ2VUaXRsZS52dWVcIikpO1xudmFyIFByb2dyZXNzTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiKSk7XG52YXIgVG9hc3RNZXNzYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL1RvYXN0TWVzc2FnZS52dWVcIikpO1xudmFyIFRhYmxlTGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRzL1RhYmxlTGlzdC52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIF9fbmFtZTogJ09yZ2FuaXNhdGlvbkxpc3QnLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIC8vIHJlZlxuICAgICAgICB2YXIgbG9hZGVyID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICAgICAgdGV4dDogbGFuZ3VhZ2UuY29tbW9uX2xhbmcucGxlYXNlX3dhaXQsXG4gICAgICAgIH0pO1xuICAgICAgICAvL0JyZWFkY3J1bWIgZGF0YVxuICAgICAgICB2YXIgYnJlYWRjcnVtYkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLmNvbW1vbl9sYW5nLm9yZ2FuaXNhdGlvbnMsXG4gICAgICAgICAgICAgICAgbGluazogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICB2YXIgdG9hc3RNZXNzYWdlID0gKDAsIHZ1ZV8yLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHByb3ZpZGVcbiAgICAgICAgKDAsIHZ1ZV8yLnByb3ZpZGUpKCdsb2FkZXInLCBsb2FkZXIpO1xuICAgICAgICAoMCwgdnVlXzIucHJvdmlkZSkoJ3RvYXN0RGF0YScsIHRvYXN0TWVzc2FnZSk7XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSwgbG9hZGVyOiBsb2FkZXIsIGJyZWFkY3J1bWJEYXRhOiBicmVhZGNydW1iRGF0YSwgdG9hc3RNZXNzYWdlOiB0b2FzdE1lc3NhZ2UsIFBhZ2VUaXRsZTogUGFnZVRpdGxlX3Z1ZV8xLmRlZmF1bHQsIExvYWRlcjogUHJvZ3Jlc3NMb2FkZXJfdnVlXzEuZGVmYXVsdCwgVG9hc3Q6IFRvYXN0TWVzc2FnZV92dWVfMS5kZWZhdWx0LCBUYWJsZUxpc3Q6IFRhYmxlTGlzdF92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBZG1pbkJhcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIG9yZ2FuaXphdGlvbk5hbWU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN3aXRjaCBCYWNrXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3dpdGNoQmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKFwiL2xpc3Qtb3JnYW5pc2F0aW9uc1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlLCBzd2l0Y2hCYWNrOiBzd2l0Y2hCYWNrIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgdnVlXzIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBkYXRlRm9ybWF0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZGF0ZUZvcm1hdFwiKSk7XG52YXIgQnV0dG9uQ29tcG9uZW50X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJDb21wb25lbnRzL0J1dHRvbkNvbXBvbmVudC52dWVcIikpO1xudmFyIFRhYmxlUGFnaW5hdGlvbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9UYWJsZVBhZ2luYXRpb24udnVlXCIpKTtcbi8vIHJlYWN0aXZpdHlcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdUYWJsZUxpc3QnLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgLy8gaW5qZWN0XG4gICAgICAgIHZhciB0b2FzdE1lc3NhZ2UgPSAoMCwgdnVlXzIuaW5qZWN0KSgndG9hc3REYXRhJyk7XG4gICAgICAgIHZhciBsb2FkZXIgPSAoMCwgdnVlXzIuaW5qZWN0KSgnbG9hZGVyJyk7XG4gICAgICAgIC8vdHlwZWZhY2VcbiAgICAgICAgdmFyIG9yZ2FuaXNhdGlvbkRhdGEgPSAoMCwgdnVlXzIucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAnZmV0Y2hpbmcnLFxuICAgICAgICB9KTtcbiAgICAgICAgLy9saWZlY3ljbGVcbiAgICAgICAgKDAsIHZ1ZV8yLm9uTW91bnRlZCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGZldGNoT3JnYW5pc2F0aW9uKDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGZXRjaGluZyBvcmdhbml6YXRpb24gbGlzdFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGN1cnJlbnRVUkwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgdmFyIGZldGNoT3JnYW5pc2F0aW9uID0gZnVuY3Rpb24gKGFjdGl2ZV9wYWdlKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgIGlmIChjdXJyZW50VVJMLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5kcG9pbnQgPSBcIi9saXN0LW9yZ2FuaXNhdGlvbnMvcGFnZS9cIi5jb25jYXQoYWN0aXZlX3BhZ2UpLmNvbmNhdChxdWVyeVN0cmluZyk7XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHQuZ2V0KGVuZHBvaW50KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uRGF0YS5zdGF0dXMgPSAnZW1wdHknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uRGF0YS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25EYXRhLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm94eSBVc2VyXG4gICAgICAgICAqL1xuICAgICAgICAvLyBkaXNwbGF5L2hpZGUgdmFsaWRhdG9yIGxvYWRlclxuICAgICAgICB2YXIgcHJveHlVc2VyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICBsb2FkZXIuc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvYWRlci50ZXh0ID0gJ1Byb3h5IExvZ2luJztcbiAgICAgICAgICAgIHZhciBlbmRwb2ludCA9IFwiL3Byb3h5LW9yZ2FuaXNhdGlvbi9cIi5jb25jYXQoaWQpO1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0LmdldChlbmRwb2ludCkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSgnL2FjdGl2aXRpZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlLnR5cGUgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogU29ydGluZyBCeSB1cGRhdGUgb25cbiAgICAgICAgICovXG4gICAgICAgIHZhciBxdWVyeSA9ICcnLCBkZWZhdWx0U29ydERpcmVjdGlvbiA9ICdhc2NlbmRpbmcnLCBzb3J0RGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgICB2YXIgb3JkZXJUeXBlID0gKDAsIHZ1ZV8yLnJlZikoJycpO1xuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcbiAgICAgICAgb3JkZXJUeXBlLnZhbHVlID0gKF9iID0gdXJsUGFyYW1zLmdldCgnb3JkZXJCeScpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgdmFyIHNvcnRpbmdEaXJlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJztcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNvcnRCeSA9IGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gKF9hID0gdXJsUGFyYW1zLmdldCgncScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uID0gdXJsUGFyYW1zLmdldCgnZGlyZWN0aW9uJykgPT09ICdkZXNjJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiP3E9XCIuY29uY2F0KHF1ZXJ5LCBcIiZvcmRlckJ5PVwiKS5jb25jYXQob3JkZXIsIFwiJmRpcmVjdGlvbj1cIikuY29uY2F0KHNvcnREaXJlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UsIHRvYXN0TWVzc2FnZTogdG9hc3RNZXNzYWdlLCBsb2FkZXI6IGxvYWRlciwgb3JnYW5pc2F0aW9uRGF0YTogb3JnYW5pc2F0aW9uRGF0YSwgY3VycmVudFVSTDogY3VycmVudFVSTCwgZmV0Y2hPcmdhbmlzYXRpb246IGZldGNoT3JnYW5pc2F0aW9uLCBwcm94eVVzZXI6IHByb3h5VXNlciwgcXVlcnk6IHF1ZXJ5LCBkZWZhdWx0U29ydERpcmVjdGlvbjogZGVmYXVsdFNvcnREaXJlY3Rpb24sIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sIG9yZGVyVHlwZTogb3JkZXJUeXBlLCBxdWVyeVN0cmluZzogcXVlcnlTdHJpbmcsIHVybFBhcmFtczogdXJsUGFyYW1zLCBzb3J0aW5nRGlyZWN0aW9uOiBzb3J0aW5nRGlyZWN0aW9uLCBzb3J0Qnk6IHNvcnRCeSwgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdF8xLmRlZmF1bHQsIEJ0bkNvbXBvbmVudDogQnV0dG9uQ29tcG9uZW50X3Z1ZV8xLmRlZmF1bHQsIFBhZ2luYXRpb246IFRhYmxlUGFnaW5hdGlvbl92dWVfMS5kZWZhdWx0IH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBwcm9wczoge1xuICAgICAgICBlbWFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgRW1haWxWZXJpZmljYXRpb25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vRW1haWxWZXJpZmljYXRpb24udnVlXCIpKTtcbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vLi4vLi4vY29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBtdWx0aXNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJAdnVlZm9ybS9tdWx0aXNlbGVjdFwiKSk7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xudmFyIGVuY3J5cHRpb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9zYWJsZS9lbmNyeXB0aW9uXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEVtYWlsVmVyaWZpY2F0aW9uOiBFbWFpbFZlcmlmaWNhdGlvbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICBIb3ZlclRleHQ6IEhvdmVyVGV4dF92dWVfMS5kZWZhdWx0LFxuICAgICAgICBNdWx0aXNlbGVjdDogbXVsdGlzZWxlY3RfMS5kZWZhdWx0LFxuICAgICAgICBMb2FkZXI6IExvYWRlcl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgc3RlcCA9ICgwLCB2dWVfMS5yZWYpKDEpO1xuICAgICAgICB2YXIgcHVibGlzaGVyRXhpc3RzID0gKDAsIHZ1ZV8xLnJlZikodHJ1ZSk7XG4gICAgICAgIHZhciBpc0xvYWRlclZpc2libGUgPSAoMCwgdnVlXzEucmVmKShmYWxzZSk7XG4gICAgICAgIHZhciB0ZXh0YXJlYSA9ICgwLCB2dWVfMS5yZWYpKG51bGwpO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICBwdWJsaXNoZXJfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9pZDogXCJcIixcbiAgICAgICAgICAgIGNvdW50cnk6IFwiXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25fYWdlbmN5OiBcIlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uX251bWJlcjogXCJcIixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiXCIsXG4gICAgICAgICAgICBwdWJsaXNoZXJfdHlwZTogXCJcIixcbiAgICAgICAgICAgIGxpY2Vuc2VfaWQ6IFwiXCIsXG4gICAgICAgICAgICBpbWFnZV91cmw6IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgIGNvbnRhY3RfZW1haWw6IFwiXCIsXG4gICAgICAgICAgICB3ZWJzaXRlOiBcIlwiLFxuICAgICAgICAgICAgYWRkcmVzczogXCJcIixcbiAgICAgICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgICAgICAgIHJlY29yZF9leGNsdXNpb25zOiBcIlwiLFxuICAgICAgICAgICAgdXNlcm5hbWU6IFwiXCIsXG4gICAgICAgICAgICBmdWxsX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBlbWFpbDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlhdGlFcnJvciA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe30pO1xuICAgICAgICB2YXIgZm9ybURhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgcHVibGlzaGVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgY291bnRyeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9hZ2VuY3k6IFwiXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25fbnVtYmVyOiBcIlwiLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCJcIixcbiAgICAgICAgICAgIHB1Ymxpc2hlcl90eXBlOiBcIlwiLFxuICAgICAgICAgICAgbGljZW5zZV9pZDogXCJcIixcbiAgICAgICAgICAgIGltYWdlX3VybDogXCJcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICAgICAgY29udGFjdF9lbWFpbDogXCJcIixcbiAgICAgICAgICAgIHdlYnNpdGU6IFwiXCIsXG4gICAgICAgICAgICBhZGRyZXNzOiBcIlwiLFxuICAgICAgICAgICAgc291cmNlOiBcIlwiLFxuICAgICAgICAgICAgcmVjb3JkX2V4Y2x1c2lvbnM6IFwiXCIsXG4gICAgICAgICAgICB1c2VybmFtZTogXCJcIixcbiAgICAgICAgICAgIGZ1bGxfbmFtZTogXCJcIixcbiAgICAgICAgICAgIGVtYWlsOiBcIlwiLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IFwiXCIsXG4gICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246IFwiXCIsXG4gICAgICAgICAgICBzdGVwOiBcIjFcIixcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCB2dWVfMS53YXRjaCkoZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9ybURhdGEuY291bnRyeTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9ybURhdGEucmVnaXN0cmF0aW9uX2FnZW5jeSA9IFwiXCI7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiByZXNpemUoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuc3R5bGUuaGVpZ2h0ID0gXCJcIi5jb25jYXQoZXZlbnQudGFyZ2V0LnNjcm9sbEhlaWdodCwgXCJweFwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVnaXN0cmF0aW9uX2FnZW5jeSA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFnZW5jaWVzID0gcHJvcHMudHlwZXMucmVnaXN0cmF0aW9uQWdlbmN5O1xuICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmNvdW50cnkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdW5jYXRlZ29yaXplZF8xID0gW1wiWElcIiwgXCJYUlwiXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGFnZW5jaWVzKS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfYVswXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKGZvcm1EYXRhLmNvdW50cnkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNhdGVnb3JpemVkXzEuc29tZShmdW5jdGlvbiAoaykgeyByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoayk7IH0pO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2VuY2llcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBpc1RleHRGaWVsZCA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWVsZFR5cGUsIGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKGZpZWxkVHlwZSA9PT0gXCJ0ZXh0XCIgfHwgZmllbGRUeXBlID09PSBcInBhc3N3b3JkXCIgfHwgZmllbGRUeXBlID09PSBcImVtYWlsXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSAhPSBcImlkZW50aWZpZXJcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrU3RlcCA9ICgwLCB2dWVfMS5jb21wdXRlZCkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtU3RlcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChmb3JtU3RlcC50b1N0cmluZygpKSA9PT0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogb2JqZWN0IHdpdGggbXVsdGktc3RlcCBmb3JtIGluZm9ybWF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmVnaXN0ZXJGb3JtID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICAxOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX2luZm9ybWF0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsaXNoZXJfaW5mb3JtYXRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsaXNoZXJfaW5mb3JtYXRpb24uaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaGVyX25hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9uYW1lLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwdWJsaXNoZXJfbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX25hbWUucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwdWJsaXNoZXItbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9uYW1lLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImNvbC1zcGFuLTIgbWItNCBsZzptYi0yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlcl9pZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX2lkLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwdWJsaXNoZXJfaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pZC5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInB1Ymxpc2hlci1pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pZC5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY291bnRyeS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY291bnRyeS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImNvdW50cnlfc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5jb3VudHJ5LmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy50eXBlcy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9hZ2VuY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLm9yZ19yZWdpc3RyYXRpb25fYWdlbmN5LmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZWdpc3RyYXRpb25fYWdlbmN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5vcmdfcmVnaXN0cmF0aW9uX2FnZW5jeS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInJlZ2lzdHJhdGlvbi1hZ2VuY3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5vcmdfcmVnaXN0cmF0aW9uX2FnZW5jeS5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHJlZ2lzdHJhdGlvbl9hZ2VuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTIgcmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX251bWJlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucmVnaXN0cmF0aW9uX251bWJlci5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVnaXN0cmF0aW9uX251bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucmVnaXN0cmF0aW9uX251bWJlci5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInJlZ2lzdHJhdGlvbi1udW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5yZWdpc3RyYXRpb25fbnVtYmVyLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLmNvbmNhdChsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmZvcl9lZywgXCIgMTIzNDU2XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5pYXRpX29yZ19pZGVudGlmaWVyLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5pYXRpX29yZ19pZGVudGlmaWVyLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmlhdGlfb3JnX2lkZW50aWZpZXIuaGVscF90ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJfdHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX3R5cGUubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInB1Ymxpc2hlcl90eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsaXNoZXJfdHlwZS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInB1Ymxpc2hlci10eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX3R5cGUuaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy50eXBlcy5wdWJsaXNoZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VfaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmRhdGFfbGljZW5zZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibGljZW5zZV9pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZGF0YV9saWNlbnNlLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZGF0YS1saWNlbnNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZGF0YV9saWNlbnNlLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcHJvcHMudHlwZXMuZGF0YUxpY2Vuc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTIgcmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsaXNoZXJfbG9nb191cmwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImltYWdlX3VybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIuY29uY2F0KGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZm9yX2VnLCBcIiBodHRwOi8vbXlsb2dvLmNvbSBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwdWJsaXNoZXItbG9nby11cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX2xvZ29fdXJsLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMiByZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcub3JnYW5pc2F0aW9uX2Rlc2MubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5vcmdhbmlzYXRpb25fZGVzYy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIm9yZ2FuaXphdGlvbi1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5vcmdhbmlzYXRpb25fZGVzYy5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBjb2wtc3Bhbi0yIGxnOm1iLTIgcmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDI6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5jb250YWN0X2luZm8udGl0bGUsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pbmZvcm1hdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFjdF9lbWFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY29udGFjdC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY29udGFjdF9lbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb250YWN0LWVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY29udGFjdC5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00ICBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHdlYnNpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLndlYnNpdGUubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIndlYnNpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLmNvbmNhdChsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmZvcl9lZywgXCIgaHR0cDovL215d2Vic2l0ZS5jb21cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ3ZWJzaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLndlYnNpdGUuaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkZHJlc3MubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkZHJlc3MucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJhZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkZHJlc3MuaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgY29sLXNwYW4tMiBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAzOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGluZ19hZGRpdGlvbmFsX2luZm8udGl0bGUsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hpbmdfYWRkaXRpb25hbF9pbmZvLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnNvdXJjZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic291cmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5zb3VyY2UucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb250YWN0LWVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuc291cmNlLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcHJvcHMudHlwZXMuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZF9leGNsdXNpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5yZWNvcmRfZXhjbHVzaW9ucy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVjb3JkX2V4Y2x1c2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnJlY29yZF9leGNsdXNpb25zLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicmVjb3JkLWV4Y2x1c2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucmVjb3JkX2V4Y2x1c2lvbnMuaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgIGNvbC1zcGFuLTIgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNDoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkbWluaXN0cmF0b3JfaW5mb3JtYXRpb24udGl0bGUsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkbWluaXN0cmF0b3JfaW5mb3JtYXRpb24uaWF0aV9yZWdpc3Rlcl9kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnVzZXJuYW1lLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcudXNlcm5hbWUucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnVzZXJuYW1lLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmdWxsX25hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmZ1bGxuYW1lLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJmdWxsX25hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmZ1bGxuYW1lLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZnVsbC1uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImNvbC1zdGFydC0xIG1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZW1haWxfYWRkcmVzcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmVtYWlsX2FkZHJlc3MucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wYXNzd29yZC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnBhc3N3b3JkLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnBhc3N3b3JkLmhlbHBfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnBhc3N3b3JkLmNvbmZpcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInBhc3N3b3JkX2NvbmZpcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucGFzc3dvcmQucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwYXNzd29yZC1jb25maXJtYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnBhc3N3b3JkLmNvbmZpcm1faGVscCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNToge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmVtYWlsX3ZlcmlmaWNhdGlvbi50aXRsZSxcbiAgICAgICAgICAgICAgICBpc19jb21wbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZW1haWxfdmVyaWZpY2F0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGUgVmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhcGkgaW50byBlcnJvckRhdGEgYXJyYXlcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbGlkYXRpb25FcnJvcnMoZXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgY2xlYW5WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBmaWVsZCBpbiBlcnJvckRhdGEpIHtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGFbZmllbGRdID0gZXJyb3JSZXNwb25zZVtmaWVsZF0gPyBlcnJvclJlc3BvbnNlW2ZpZWxkXVswXSA6IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGUgVmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhcGkgaW50byBlcnJvckRhdGEgYXJyYXlcbiAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjbGVhblZhbGlkYXRpb25FcnJvcnMoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBmaWVsZCBpbiBlcnJvckRhdGEpIHtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGFbZmllbGRdID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlIElBVEkgYW5kIHN5c3RlbSBFcnJvclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRXJyb3JzKGVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGVycm9yRGF0YSkuZXZlcnkoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PT0gJyc7IH0pIHx8IHN0ZXAudmFsdWUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGlhdGlFcnJvciwgdHlwZW9mIChlcnJvclJlc3BvbnNlKSA9PT0gJ3N0cmluZycgPyB7ICdlcnJvcic6IGVycm9yUmVzcG9uc2UgfSA6IGVycm9yUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhbklhdGlFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICB9LCAzNTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYW5JYXRpRXJyb3JzKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgZXJyIGluIGlhdGlFcnJvcikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpYXRpRXJyb3JbZXJyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVmVyaWZpZXMgcHVibGlzaGVyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB2ZXJpZnlQdWJsaXNoZXIoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChmb3JtRGF0YS5yZWdpc3RyYXRpb25fYWdlbmN5LCBcIi1cIikuY29uY2F0KGZvcm1EYXRhLnJlZ2lzdHJhdGlvbl9udW1iZXIpO1xuICAgICAgICAgICAgZm9ybURhdGEuc3RlcCA9IFwiMVwiO1xuICAgICAgICAgICAgdmFyIGZvcm0gPSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmQsIChfYSA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIiksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9iID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi9pYXRpL3JlZ2lzdGVyL3B1Ymxpc2hlclwiLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZm9ybURhdGEpLCBmb3JtKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXF1ZXN0LnJlc3BvbnNlVVJMLmluY2x1ZGVzKFwiYWN0aXZpdGllc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2FjdGl2aXRpZXNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgcHVibGlzaGVyRXhpc3RzLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gIXJlc3BvbnNlLnN1Y2Nlc3MgfHwgXCJlcnJvcnNcIiBpbiByZXNwb25zZSA/IHJlc3BvbnNlLmVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9ybVtcIjFcIl0uaXNfY29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoXCJwdWJsaXNoZXJfZXJyb3JcIiBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJFeGlzdHMudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9ybVtcIjFcIl0uaXNfY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGVwKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRXJyb3JzKGVycik7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3VibWl0cyByZWdpc3RyYXRpb24gRm9ybVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdmVyaWZ5Q29udGFjdEluZm9ybWF0aW9uKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3JtRGF0YS5zdGVwID0gXCIyXCI7XG4gICAgICAgICAgICB2YXIgZm9ybSA9IHtcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZCwgKF9hID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uLCAoX2IgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KFwiL2lhdGkvcmVnaXN0ZXIvY29udGFjdFwiLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZm9ybURhdGEpLCBmb3JtKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXF1ZXN0LnJlc3BvbnNlVVJMLmluY2x1ZGVzKFwiYWN0aXZpdGllc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2FjdGl2aXRpZXNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9ICFyZXNwb25zZS5zdWNjZXNzIHx8IFwiZXJyb3JzXCIgaW4gcmVzcG9uc2UgPyByZXNwb25zZS5lcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZGF0aW9uRXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiMlwiXS5pc19jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIyXCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RlcCgyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnJvcik7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3VibWl0cyByZWdpc3RyYXRpb24gRm9ybVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdmVyaWZ5QWRkaXRpb25hbEluZm9ybWF0aW9uKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3JtRGF0YS5zdGVwID0gXCIzXCI7XG4gICAgICAgICAgICB2YXIgZm9ybSA9IHtcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZCwgKF9hID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICBwYXNzd29yZF9jb25maXJtYXRpb246ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uLCAoX2IgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiXCIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF4aW9zXzEuZGVmYXVsdFxuICAgICAgICAgICAgICAgIC5wb3N0KFwiL2lhdGkvcmVnaXN0ZXIvYWRkaXRpb25hbFwiLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZm9ybURhdGEpLCBmb3JtKSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXF1ZXN0LnJlc3BvbnNlVVJMLmluY2x1ZGVzKFwiYWN0aXZpdGllc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2FjdGl2aXRpZXNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9ycyA9ICFyZXNwb25zZS5zdWNjZXNzIHx8IFwiZXJyb3JzXCIgaW4gcmVzcG9uc2UgPyByZXNwb25zZS5lcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZGF0aW9uRXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiM1wiXS5pc19jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFuVmFsaWRhdGlvbkVycm9ycygpO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIzXCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RlcCgzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnJvcik7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3VibWl0cyByZWdpc3RyYXRpb24gRm9ybVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybURhdGEuc3RlcCA9IFwiNFwiO1xuICAgICAgICAgICAgdmFyIGZvcm0gPSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6ICgwLCBlbmNyeXB0aW9uXzEuZGVmYXVsdCkoZm9ybURhdGEucGFzc3dvcmQsIChfYSA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIiksXG4gICAgICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkX2NvbmZpcm1hdGlvbiwgKF9iID0gcHJvY2Vzcy5lbnYuTUlYX0VOQ1JZUFRJT05fS0VZKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBheGlvc18xLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAucG9zdChcIi9pYXRpL3JlZ2lzdGVyXCIsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBmb3JtRGF0YSksIGZvcm0pKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoXCJhY3Rpdml0aWVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvYWN0aXZpdGllc1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gIXJlc3BvbnNlLnN1Y2Nlc3MgfHwgXCJlcnJvcnNcIiBpbiByZXNwb25zZSA/IHJlc3BvbnNlLmVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVZhbGlkYXRpb25FcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBjbGVhbklhdGlFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGlhdGlFcnJvciwgZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCI0XCJdLmlzX2NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRm9ybVtcIjRcIl0uaXNfY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGVwKDQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUVycm9ycyhlcnJvcik7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRDdXJyZW50U3RlcCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlU3RlcChjdXJyZW50X3N0ZXApIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50X3N0ZXAgPT09IHN0ZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdGVwLnZhbHVlICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNhbGxzIHN1Ym1pdCBmdW5jdGlvbiBiYXNlZCBvbiBjdXJyZW50IHN0ZXAgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdvVG9OZXh0Rm9ybSgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5UHVibGlzaGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5Q29udGFjdEluZm9ybWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5QWRkaXRpb25hbEluZm9ybWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnb1RvUHJldmlvdXNGb3JtKCkge1xuICAgICAgICAgICAgY2xlYW5JYXRpRXJyb3JzKCk7XG4gICAgICAgICAgICBzdGVwLnZhbHVlIC09IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlZ2lzdGVyRm9ybTogcmVnaXN0ZXJGb3JtLFxuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICBwdWJsaXNoZXJFeGlzdHM6IHB1Ymxpc2hlckV4aXN0cyxcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZTogaXNMb2FkZXJWaXNpYmxlLFxuICAgICAgICAgICAgZ29Ub05leHRGb3JtOiBnb1RvTmV4dEZvcm0sXG4gICAgICAgICAgICBnb1RvUHJldmlvdXNGb3JtOiBnb1RvUHJldmlvdXNGb3JtLFxuICAgICAgICAgICAgZ2V0Q3VycmVudFN0ZXA6IGdldEN1cnJlbnRTdGVwLFxuICAgICAgICAgICAgY2hlY2tTdGVwOiBjaGVja1N0ZXAsXG4gICAgICAgICAgICBpYXRpRXJyb3I6IGlhdGlFcnJvcixcbiAgICAgICAgICAgIGlzVGV4dEZpZWxkOiBpc1RleHRGaWVsZCxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXG4gICAgICAgICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgICAgICAgIHRleHRhcmVhOiB0ZXh0YXJlYSxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgX19uYW1lOiAnSWF0aVN0YW5kYXJkJyxcbiAgICBzZXR1cDogZnVuY3Rpb24gKF9fcHJvcHMsIF9hKSB7XG4gICAgICAgIHZhciBleHBvc2UgPSBfYS5leHBvc2U7XG4gICAgICAgIGV4cG9zZSgpO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICB2YXIgX19yZXR1cm5lZF9fID0geyBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gX19yZXR1cm5lZF9fO1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgU2ltcGxlU3Bhbl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQ29tcG9uZW50cy9TaW1wbGVTcGFuLnZ1ZVwiKSk7XG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgU2ltcGxlU3BhbjogU2ltcGxlU3Bhbl92dWVfMS5kZWZhdWx0XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBlbGVtZW50czoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgU2ltcGxlU3BhbjogU2ltcGxlU3Bhbl92dWVfMS5kZWZhdWx0LFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbmZ1bmN0aW9uIHRyaWdnZXJNb2RlbCgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3BlbkFkZE1vZGVsJywgJ3RydWUnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIEVtYWlsVmVyaWZpY2F0aW9uX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZVwiKSk7XG52YXIgSG92ZXJUZXh0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLy4uLy4uL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiKSk7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3RcIikpO1xudmFyIExvYWRlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBlbmNyeXB0aW9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkNvbXBvc2FibGUvZW5jcnlwdGlvblwiKSk7XG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgdnVlXzEuZGVmaW5lQ29tcG9uZW50KSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBFbWFpbFZlcmlmaWNhdGlvbjogRW1haWxWZXJpZmljYXRpb25fdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgSG92ZXJUZXh0OiBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCxcbiAgICAgICAgTXVsdGlzZWxlY3Q6IG11bHRpc2VsZWN0XzEuZGVmYXVsdCxcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNvdW50cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWdlbmN5OiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBzdGVwID0gKDAsIHZ1ZV8xLnJlZikoMSk7XG4gICAgICAgIHZhciBwdWJsaXNoZXJFeGlzdHMgPSAoMCwgdnVlXzEucmVmKSh0cnVlKTtcbiAgICAgICAgdmFyIGlzTG9hZGVyVmlzaWJsZSA9ICgwLCB2dWVfMS5yZWYpKGZhbHNlKTtcbiAgICAgICAgdmFyIGFnZW5jeSA9ICgwLCB2dWVfMS50b1JlZnMpKHByb3BzKS5hZ2VuY3k7XG4gICAgICAgIHZhciBlcnJvckRhdGEgPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIHB1Ymxpc2hlcl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgcHVibGlzaGVyX2lkOiBcIlwiLFxuICAgICAgICAgICAgY291bnRyeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9hZ2VuY3k6IFwiXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25fbnVtYmVyOiBcIlwiLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCJcIixcbiAgICAgICAgICAgIHVzZXJuYW1lOiBcIlwiLFxuICAgICAgICAgICAgZnVsbF9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgZW1haWw6IFwiXCIsXG4gICAgICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmb3JtRGF0YSA9ICgwLCB2dWVfMS5yZWFjdGl2ZSkoe1xuICAgICAgICAgICAgcHVibGlzaGVyX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBwdWJsaXNoZXJfaWQ6IFwiXCIsXG4gICAgICAgICAgICBjb3VudHJ5OiBcIlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2FnZW5jeTogXCJcIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9udW1iZXI6IFwiXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIlwiLFxuICAgICAgICAgICAgdXNlcm5hbWU6IFwiXCIsXG4gICAgICAgICAgICBmdWxsX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBlbWFpbDogXCJcIixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBcIlwiLFxuICAgICAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgKDAsIHZ1ZV8xLndhdGNoKShmdW5jdGlvbiAoKSB7IHJldHVybiBmb3JtRGF0YS5jb3VudHJ5OyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5yZWdpc3RyYXRpb25fYWdlbmN5ID0gXCJcIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZWdpc3RyYXRpb25fYWdlbmN5ID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYWdlbmNpZXMgPSBhZ2VuY3kudmFsdWU7XG4gICAgICAgICAgICBpZiAoZm9ybURhdGEuY291bnRyeSkge1xuICAgICAgICAgICAgICAgIHZhciB1bmNhdGVnb3JpemVkXzEgPSBbXCJYSVwiLCBcIlhSXCJdO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYWdlbmNpZXMpLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LnN0YXJ0c1dpdGgoZm9ybURhdGEuY291bnRyeSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuY2F0ZWdvcml6ZWRfMS5zb21lKGZ1bmN0aW9uIChrKSB7IHJldHVybiBrZXkuc3RhcnRzV2l0aChrKTsgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFnZW5jaWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGlzVGV4dEZpZWxkID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpZWxkVHlwZSwgZmllbGROYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoZmllbGRUeXBlID09PSBcInRleHRcIiB8fCBmaWVsZFR5cGUgPT09IFwicGFzc3dvcmRcIiB8fCBmaWVsZFR5cGUgPT09IFwiZW1haWxcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lICE9IFwiaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY2hlY2tTdGVwID0gKDAsIHZ1ZV8xLmNvbXB1dGVkKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZvcm1TdGVwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGZvcm1TdGVwLnRvU3RyaW5nKCkpID09PSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZWdpc3RlckZvcm0gPSAoMCwgdnVlXzEucmVhY3RpdmUpKHtcbiAgICAgICAgICAgIDE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsaXNoZXJfaW5mb3JtYXRpb24ubGFiZWwsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pbmZvcm1hdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pbmZvcm1hdGlvbi5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoZXJfbmFtZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInB1Ymxpc2hlcl9uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsc2hlcl9uYW1lLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGlzaGVyLW5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wdWJsc2hlcl9uYW1lLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImNvbC1zcGFuLTIgbWItNCBsZzptYi0yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlcl9pZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucHVibGlzaGVyX2lkLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwdWJsaXNoZXJfaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pZC5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInB1Ymxpc2hlci1pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnB1Ymxpc2hlcl9pZC5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY291bnRyeS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuY291bnRyeS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImNvdW50cnlfc2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5jb3VudHJ5LmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBwcm9wcy5jb3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbl9yZWdpc3RyYXRpb25fYWdlbmN5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5vcmdfcmVnaXN0cmF0aW9uX2FnZW5jeS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVnaXN0cmF0aW9uX2FnZW5jeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcub3JnX3JlZ2lzdHJhdGlvbl9hZ2VuY3kucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJyZWdpc3RyYXRpb24tYWdlbmN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcub3JnX3JlZ2lzdHJhdGlvbl9hZ2VuY3kuaG92ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiByZWdpc3RyYXRpb25fYWdlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi0yIHJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbl9yZWdpc3RyYXRpb25fbm86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLm9yZ19yZWdpc3RyYXRpb25fbm8ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlZ2lzdHJhdGlvbl9udW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLm9yZ19yZWdpc3RyYXRpb25fbm8ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJyZWdpc3RyYXRpb24tbnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcub3JnX3JlZ2lzdHJhdGlvbl9uby5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIi5jb25jYXQobGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5mb3JfZWcsIFwiIDEyMzQ1NlwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaWF0aV9vcmdhbml6YXRpb25hbF9pZGVudGlmaWVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5pYXRpX29yZ19pZGVudGlmaWVyLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5pYXRpX29yZ19pZGVudGlmaWVyLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0OiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmlhdGlfb3JnX2lkZW50aWZpZXIuaGVscF90ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMjoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkbWluaXN0cmF0b3JfaW5mb3JtYXRpb24ubGFiZWwsXG4gICAgICAgICAgICAgICAgaXNfY29tcGxldGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmFkbWluaXN0cmF0b3JfaW5mb3JtYXRpb24ucmVnaXN0ZXJfZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5hZG1pbmlzdHJhdG9yX2luZm9ybWF0aW9uLmhvdmVyX3RleHQsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy51c2VybmFtZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidXNlcm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLnVzZXJuYW1lLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwidXNlcm5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy51c2VybmFtZS5ob3Zlcl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbF9uYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5mdWxsbmFtZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZnVsbF9uYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5mdWxsbmFtZS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImZ1bGwtbmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJjb2wtc3RhcnQtMSBtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsYW5ndWFnZS5yZWdpc3Rlcl9sYW5nLmVtYWlsX2FkZHJlc3MubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5lbWFpbF9hZGRyZXNzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJfdGV4dDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIm1iLTQgbGc6bWItMlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucGFzc3dvcmQubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wYXNzd29yZC5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyX3RleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtYi00IGxnOm1iLTJcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybV9wYXNzd29yZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcucGFzc3dvcmQuY29uZmlybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicGFzc3dvcmRfY29uZmlybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5wYXNzd29yZC5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInBhc3N3b3JkLWNvbmZpcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Zlcl90ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwibWItNCBsZzptYi02XCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAzOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxhbmd1YWdlLnJlZ2lzdGVyX2xhbmcuZW1haWxfdmVyaWZpY2F0aW9uLnRpdGxlLFxuICAgICAgICAgICAgICAgIGlzX2NvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbGFuZ3VhZ2UucmVnaXN0ZXJfbGFuZy5lbWFpbF92ZXJpZmljYXRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gdmVyaWZ5UHVibGlzaGVyKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGlzTG9hZGVyVmlzaWJsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBmb3JtRGF0YS5pZGVudGlmaWVyID0gXCJcIi5jb25jYXQoZm9ybURhdGEucmVnaXN0cmF0aW9uX2FnZW5jeSwgXCItXCIpLmNvbmNhdChmb3JtRGF0YS5yZWdpc3RyYXRpb25fbnVtYmVyKTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvdmVyaWZ5UHVibGlzaGVyXCIsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBmb3JtRGF0YSksIGZvcm0pKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnJlcXVlc3QucmVzcG9uc2VVUkwuaW5jbHVkZXMoXCJhY3Rpdml0aWVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvYWN0aXZpdGllc1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBwdWJsaXNoZXJFeGlzdHMudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnB1Ymxpc2hlcl9uYW1lID0gZXJyb3JzLnB1Ymxpc2hlcl9uYW1lXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnB1Ymxpc2hlcl9uYW1lWzBdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucHVibGlzaGVyX2lkID0gZXJyb3JzLnB1Ymxpc2hlcl9pZCA/IGVycm9ycy5wdWJsaXNoZXJfaWRbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5yZWdpc3RyYXRpb25fYWdlbmN5ID0gZXJyb3JzLnJlZ2lzdHJhdGlvbl9hZ2VuY3lcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvcnMucmVnaXN0cmF0aW9uX2FnZW5jeVswXVxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnJlZ2lzdHJhdGlvbl9udW1iZXIgPSBlcnJvcnMucmVnaXN0cmF0aW9uX251bWJlclxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5yZWdpc3RyYXRpb25fbnVtYmVyWzBdXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuaWRlbnRpZmllciA9IGVycm9ycy5pZGVudGlmaWVyID8gZXJyb3JzLmlkZW50aWZpZXJbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChcInB1Ymxpc2hlcl9lcnJvclwiIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hlckV4aXN0cy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvcm1bXCIxXCJdLmlzX2NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RlcC52YWx1ZSArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpc0xvYWRlclZpc2libGUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBmb3JtID0ge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAoMCwgZW5jcnlwdGlvbl8xLmRlZmF1bHQpKGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogKDAsIGVuY3J5cHRpb25fMS5kZWZhdWx0KShmb3JtRGF0YS5wYXNzd29yZF9jb25maXJtYXRpb24sIChfYiA9IHByb2Nlc3MuZW52Lk1JWF9FTkNSWVBUSU9OX0tFWSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgLnBvc3QoXCIvcmVnaXN0ZXJcIiwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1EYXRhKSwgZm9ybSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMucmVxdWVzdC5yZXNwb25zZVVSTC5pbmNsdWRlcyhcImFjdGl2aXRpZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9hY3Rpdml0aWVzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcnMgPSAhcmVzcG9uc2Uuc3VjY2VzcyB8fCBcImVycm9yc1wiIGluIHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnVzZXJuYW1lID0gZXJyb3JzLnVzZXJuYW1lID8gZXJyb3JzLnVzZXJuYW1lWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuZnVsbF9uYW1lID0gZXJyb3JzLmZ1bGxfbmFtZSA/IGVycm9ycy5mdWxsX25hbWVbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnBhc3N3b3JkID0gZXJyb3JzLnBhc3N3b3JkID8gZXJyb3JzLnBhc3N3b3JkWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uID0gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5wYXNzd29yZF9jb25maXJtYXRpb25bMF1cbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvcnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JtW1wiMlwiXS5pc19jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAudmFsdWUgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcnM7XG4gICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnVzZXJuYW1lID0gZXJyb3JzLnVzZXJuYW1lID8gZXJyb3JzLnVzZXJuYW1lWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEuZnVsbF9uYW1lID0gZXJyb3JzLmZ1bGxfbmFtZSA/IGVycm9ycy5mdWxsX25hbWVbMF0gOiBcIlwiO1xuICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lbWFpbCA9IGVycm9ycy5lbWFpbCA/IGVycm9ycy5lbWFpbFswXSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZXJyb3JEYXRhLnBhc3N3b3JkID0gZXJyb3JzLnBhc3N3b3JkID8gZXJyb3JzLnBhc3N3b3JkWzBdIDogXCJcIjtcbiAgICAgICAgICAgICAgICBlcnJvckRhdGEucGFzc3dvcmRfY29uZmlybWF0aW9uID0gZXJyb3JzLnBhc3N3b3JkX2NvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICA/IGVycm9ycy5wYXNzd29yZF9jb25maXJtYXRpb25bMF1cbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvcnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JzLnBhc3N3b3JkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRDdXJyZW50U3RlcCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ29Ub05leHRGb3JtKCkge1xuICAgICAgICAgICAgaWYgKHN0ZXAudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgdmVyaWZ5UHVibGlzaGVyKCk7XG4gICAgICAgICAgICBpZiAoc3RlcC52YWx1ZSA9PT0gMilcbiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ29Ub1ByZXZpb3VzRm9ybSgpIHtcbiAgICAgICAgICAgIHN0ZXAudmFsdWUgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVnaXN0ZXJGb3JtOiByZWdpc3RlckZvcm0sXG4gICAgICAgICAgICBmb3JtRGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICBlcnJvckRhdGE6IGVycm9yRGF0YSxcbiAgICAgICAgICAgIHB1Ymxpc2hlckV4aXN0czogcHVibGlzaGVyRXhpc3RzLFxuICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlOiBpc0xvYWRlclZpc2libGUsXG4gICAgICAgICAgICBnb1RvTmV4dEZvcm06IGdvVG9OZXh0Rm9ybSxcbiAgICAgICAgICAgIGdvVG9QcmV2aW91c0Zvcm06IGdvVG9QcmV2aW91c0Zvcm0sXG4gICAgICAgICAgICBnZXRDdXJyZW50U3RlcDogZ2V0Q3VycmVudFN0ZXAsXG4gICAgICAgICAgICBjaGVja1N0ZXA6IGNoZWNrU3RlcCxcbiAgICAgICAgICAgIGlzVGV4dEZpZWxkOiBpc1RleHRGaWVsZCxcbiAgICAgICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdTdXBwb3J0UGFnZScsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdBZG1pbkZvb3RlcicsXG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfX3Byb3BzLCBfYSkge1xuICAgICAgICB2YXIgZXhwb3NlID0gX2EuZXhwb3NlO1xuICAgICAgICBleHBvc2UoKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIF9fcmV0dXJuZWRfXyA9IHsgbGFuZ3VhZ2U6IGxhbmd1YWdlIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIF9fcmV0dXJuZWRfXztcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBwcm9wczoge1xuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY3J5cHRvX2pzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNyeXB0by1qc1wiKSk7XG52YXIgTG9hZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi8uLi9jb21wb25lbnRzL0xvYWRlci52dWVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIHZ1ZV8xLmRlZmluZUNvbXBvbmVudCkoe1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgTG9hZGVyOiBMb2FkZXJfdnVlXzEuZGVmYXVsdCxcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB1c2VybmFtZTogJycsXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZXJyb3JEYXRhID0gKDAsIHZ1ZV8xLnJlYWN0aXZlKSh7XG4gICAgICAgICAgICB1c2VybmFtZTogJycsXG4gICAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaXNMb2FkZXJWaXNpYmxlID0gKDAsIHZ1ZV8xLnJlZikoZmFsc2UpO1xuICAgICAgICBmdW5jdGlvbiBlbmNyeXB0KHN0cmluZywga2V5KSB7XG4gICAgICAgICAgICB2YXIgaXYgPSBjcnlwdG9fanNfMS5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTsgLy8gdGhlIHJlYXNvbiB0byBiZSAxNiwgcGxlYXNlIHJlYWQgb24gYGVuY3J5cHRNZXRob2RgIHByb3BlcnR5LlxuICAgICAgICAgICAgdmFyIHNhbHQgPSBjcnlwdG9fanNfMS5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkucmFuZG9tKDI1Nik7XG4gICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IDk5OTtcbiAgICAgICAgICAgIHZhciBlbmNyeXB0TWV0aG9kTGVuZ3RoID0gMjU2IC8gNDsgLy8gZXhhbXBsZTogQUVTIG51bWJlciBpcyAyNTYgLyA0ID0gNjRcbiAgICAgICAgICAgIHZhciBoYXNoS2V5ID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5QQktERjIoa2V5LCBzYWx0LCB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiBjcnlwdG9fanNfMS5kZWZhdWx0LmFsZ28uU0hBNTEyLFxuICAgICAgICAgICAgICAgIGtleVNpemU6IGVuY3J5cHRNZXRob2RMZW5ndGggLyA4LFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBlbmNyeXB0ZWQgPSBjcnlwdG9fanNfMS5kZWZhdWx0LkFFUy5lbmNyeXB0KHN0cmluZywgaGFzaEtleSwge1xuICAgICAgICAgICAgICAgIG1vZGU6IGNyeXB0b19qc18xLmRlZmF1bHQubW9kZS5DQkMsXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgZW5jcnlwdGVkU3RyaW5nID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuQmFzZTY0LnN0cmluZ2lmeShlbmNyeXB0ZWQuY2lwaGVydGV4dCk7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0ge1xuICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZFN0cmluZyxcbiAgICAgICAgICAgICAgICBpdjogY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuSGV4LnN0cmluZ2lmeShpdiksXG4gICAgICAgICAgICAgICAgc2FsdDogY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuSGV4LnN0cmluZ2lmeShzYWx0KSxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5CYXNlNjQuc3RyaW5naWZ5KGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLlV0ZjgucGFyc2UoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvZ2luKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBmb3JtO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBmb3JtRGF0YS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBlbmNyeXB0KGZvcm1EYXRhLnBhc3N3b3JkLCAoX2EgPSBwcm9jZXNzLmVudi5NSVhfRU5DUllQVElPTl9LRVkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgYXhpb3NfMS5kZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAucG9zdCgnL2xvZ2luJywgZm9ybSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhLnVzZXJuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEucGFzc3dvcmQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnYWN0aXZpdGllcyc7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JzID0gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckRhdGEudXNlcm5hbWUgPSBlcnJvcnMudXNlcm5hbWUgPyBlcnJvcnMudXNlcm5hbWVbMF0gOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5wYXNzd29yZCA9IGVycm9ycy5wYXNzd29yZCA/IGVycm9ycy5wYXNzd29yZFswXSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkZXJWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybURhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgICAgZXJyb3JEYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgICBpc0xvYWRlclZpc2libGU6IGlzTG9hZGVyVmlzaWJsZSxcbiAgICAgICAgICAgIGxvZ2luOiBsb2dpbixcbiAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgICB9O1xuICAgIH0sXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZ1ZV8xID0gcmVxdWlyZShcInZ1ZVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBfX25hbWU6ICdXZWJGb290ZXInLFxuICAgIHNldHVwOiBmdW5jdGlvbiAoX19wcm9wcywgX2EpIHtcbiAgICAgICAgdmFyIGV4cG9zZSA9IF9hLmV4cG9zZTtcbiAgICAgICAgZXhwb3NlKCk7XG4gICAgICAgIHZhciBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG4gICAgICAgIHZhciBfX3JldHVybmVkX18gPSB7IGxhbmd1YWdlOiBsYW5ndWFnZSB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBfX3JldHVybmVkX187XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB2dWVfMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgTmF2RHJvcGRvd25fdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL2NvbXBvbmVudHMvTmF2RHJvcGRvd24udnVlXCIpKTtcbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCB2dWVfMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIE5hdkRyb3Bkb3duOiBOYXZEcm9wZG93bl92dWVfMS5kZWZhdWx0LFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBhdXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB9LFxuICAgIHNldHVwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgwLCB2dWVfMS5vbk1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbm8tbmF2Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdnVlXzEub25Vbm1vdW50ZWQpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbm8tbmF2Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3dbXCJnbG9iYWxMYW5nXCJdO1xuICAgICAgICByZXR1cm4geyBsYW5ndWFnZTogbGFuZ3VhZ2UgfTtcbiAgICB9XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBGaXJzdCB3ZSB3aWxsIGxvYWQgYWxsIG9mIHRoaXMgcHJvamVjdCdzIEphdmFTY3JpcHQgZGVwZW5kZW5jaWVzIHdoaWNoXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXG4gKiBidWlsZGluZyByb2J1c3QsIHBvd2VyZnVsIHdlYiBhcHBsaWNhdGlvbnMgdXNpbmcgVnVlIGFuZCBMYXJhdmVsLlxuICovXG52YXIgdnVlXzEgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIHZ1ZTNfc21vb3RoX3Njcm9sbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJ2dWUzLXNtb290aC1zY3JvbGxcIikpO1xudmFyIHN2Z192dWUzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInN2Zy12dWUzXCIpKTtcbnZhciBXZWJIZWFkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL3BhcnRpYWxzL1dlYkhlYWRlci52dWVcIikpO1xudmFyIFdlYkZvb3Rlcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvcGFydGlhbHMvV2ViRm9vdGVyLnZ1ZVwiKSk7XG52YXIgQWRtaW5Gb290ZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL3BhcnRpYWxzL0FkbWluRm9vdGVyLnZ1ZVwiKSk7XG52YXIgV2VsY29tZVBhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL1dlbGNvbWVQYWdlLnZ1ZVwiKSk7XG52YXIgUmVnaXN0ZXJQYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3dlYi9SZWdpc3RlclBhZ2UudnVlXCIpKTtcbnZhciBBYm91dFBhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL0Fib3V0UGFnZS52dWVcIikpO1xudmFyIFN1cHBvcnRQYWdlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3dlYi9TdXBwb3J0UGFnZS52dWVcIikpO1xudmFyIElhdGlTdGFuZGFyZF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvSWF0aVN0YW5kYXJkLnZ1ZVwiKSk7XG52YXIgUHVibGlzaGluZ0NoZWNrbGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy93ZWIvUHVibGlzaGluZ0NoZWNrbGlzdC52dWVcIikpO1xudmFyIElhdGlSZWdpc3RlclBhZ2VfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlXCIpKTtcbi8qKlxuICogVnVlIGNvbXBvbmVudHMgZm9yIEFjdGl2aXRpZXMgTGlzdGluZ1xuICovXG52YXIgUmVzdWx0RGV0YWlsX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvUmVzdWx0RGV0YWlsLnZ1ZVwiKSk7XG52YXIgUmVzdWx0TGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdExpc3QudnVlXCIpKTtcbnZhciBJbmRpY2F0b3JEZXRhaWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9JbmRpY2F0b3JEZXRhaWwudnVlXCIpKTtcbnZhciBJbmRpY2F0b3JMaXN0X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yTGlzdC52dWVcIikpO1xudmFyIFBlcmlvZHNEZXRhaWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzRGV0YWlsLnZ1ZVwiKSk7XG52YXIgUGVyaW9kc0xpc3RfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9QZXJpb2RzTGlzdC52dWVcIikpO1xudmFyIFRyYW5zYWN0aW9uTGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvVHJhbnNhY3Rpb25MaXN0LnZ1ZVwiKSk7XG52YXIgVHJhbnNhY3Rpb25EZXRhaWxfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZVwiKSk7XG52YXIgRGVzY3JpcHRpb25Gb3JtX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvRGVzY3JpcHRpb25Gb3JtLnZ1ZVwiKSk7XG52YXIgRWxlbWVudHNOb3RlX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL0VsZW1lbnRzTm90ZS52dWVcIikpO1xudmFyIEFjdGl2aXR5SW5kZXhfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlJbmRleC52dWVcIikpO1xudmFyIEFkbWluSGVhZGVyX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlXCIpKTtcbnZhciBBY3Rpdml0eURldGFpbF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eURldGFpbC52dWVcIikpO1xudmFyIFNpZGViYXJIZWxwQmxvY2tfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvU2lkZWJhckhlbHBCbG9jay52dWVcIikpO1xudmFyIEFjdGl2aXR5VXBsb2FkX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL2ltcG9ydC9BY3Rpdml0eVVwbG9hZC52dWVcIikpO1xudmFyIEltcG9ydExpc3RfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlXCIpKTtcbi8qKlxuICogU2V0dGluZyBwYWdlXG4gKi9cbnZhciBTZXR0aW5nUGFnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9zZXR0aW5nL1NldHRpbmdQYWdlLnZ1ZVwiKSk7XG4vL0FjdGl2aXR5IERlZmF1bHQgVmFsdWVzXG52YXIgQWN0aXZpdHlEZWZhdWx0VmFsdWVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlXCIpKTtcbi8qKlxuICogdnVlIGNvbXBvbmVudCBmb3IgcGFzc3dvcmQgcmVzZXRcbiAqL1xudmFyIFJlc2V0UGFnZV92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9yZXNldC9SZXNldFBhZ2UudnVlXCIpKTtcbnZhciBQYXNzd29yZFJlY292ZXJ5X3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3Jlc2V0L1Bhc3N3b3JkUmVjb3ZlcnkudnVlXCIpKTtcbnZhciBSZXNldFBhc3N3b3JkX3Z1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFzc3dvcmQudnVlXCIpKTtcbi8qKlxuICogT3JnYW5pc2F0aW9uIGRhdGFcbiAqL1xudmFyIE9yZ2FuaXNhdGlvbkRhdGFfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdmlld3Mvb3JnYW5pc2F0aW9uL09yZ2FuaXNhdGlvbkRhdGEudnVlXCIpKTtcbi8qKlxuICogT3JnYW5pc2F0aW9uIExpc3QgLyBQcm94eVxuICovXG52YXIgT3JnYW5pc2F0aW9uTGlzdF92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9zdXBlcmFkbWluL09yZ2FuaXNhdGlvbkxpc3QudnVlXCIpKTtcbnZhciBBZG1pbkJhcl92dWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi92aWV3cy9zdXBlcmFkbWluL2NvbXBvbmVudHMvQWRtaW5CYXIudnVlXCIpKTtcbi8qKlxuICogQWRkaXRpb25hbCBDb21wb25lbnRzXG4gKi9cbnZhciBIb3ZlclRleHRfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCIpKTtcbnZhciBQYWdlVGl0bGVfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCIpKTtcbnZhciBMb2FkZXJfdnVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9Mb2FkZXIudnVlXCIpKTtcbnZhciBhcHAgPSAoMCwgdnVlXzEuY3JlYXRlQXBwKSh7fSk7XG4vKipcbiAqIEdsb2JhbCBDb21wb25lbnRzXG4gKi9cbmFwcFxuICAgIC5jb21wb25lbnQoJ1dlYkhlYWRlcicsIFdlYkhlYWRlcl92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1dlYkZvb3RlcicsIFdlYkZvb3Rlcl92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ0FkbWluRm9vdGVyJywgQWRtaW5Gb290ZXJfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdXZWxjb21lU2lnbmluJywgV2VsY29tZVBhZ2VfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdSZWdpc3RlckZvcm0nLCBSZWdpc3RlclBhZ2VfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdJYXRpUmVnaXN0ZXJGb3JtJywgSWF0aVJlZ2lzdGVyUGFnZV92dWVfMS5kZWZhdWx0KTtcbi8qKlxuICogcmVnaXN0ZXJpbmcgd2ViIHBvcnRhbCBwYWdlc1xuICovXG5hcHBcbiAgICAuY29tcG9uZW50KCdBYm91dFBhZ2UnLCBBYm91dFBhZ2VfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdTdXBwb3J0UGFnZScsIFN1cHBvcnRQYWdlX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnSWF0aVN0YW5kYXJkJywgSWF0aVN0YW5kYXJkX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUHVibGlzaGluZ0NoZWNrbGlzdCcsIFB1Ymxpc2hpbmdDaGVja2xpc3RfdnVlXzEuZGVmYXVsdCk7XG4vKipcbiAqIFJlZ2lzdGVyaW5nIHZ1ZSBjb21wb25lbnQgZm9yIGFjdGl2aXR5IGxpc3RpbmdcbiAqL1xuYXBwXG4gICAgLmNvbXBvbmVudCgnQWN0aXZpdHlUZW1wbGF0ZScsIEFjdGl2aXR5SW5kZXhfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdMb2dnZWRpbkhlYWRlcicsIEFkbWluSGVhZGVyX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnQWN0aXZpdGllc0RldGFpbCcsIEFjdGl2aXR5RGV0YWlsX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnRGVzY3JpcHRpb25Gb3JtJywgRGVzY3JpcHRpb25Gb3JtX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnRWxlbWVudHNOb3RlJywgRWxlbWVudHNOb3RlX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUmVzdWx0RGV0YWlsJywgUmVzdWx0RGV0YWlsX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUmVzdWx0TGlzdCcsIFJlc3VsdExpc3RfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdJbmRpY2F0b3JEZXRhaWwnLCBJbmRpY2F0b3JEZXRhaWxfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdJbmRpY2F0b3JMaXN0JywgSW5kaWNhdG9yTGlzdF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1BlcmlvZHNEZXRhaWwnLCBQZXJpb2RzRGV0YWlsX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUGVyaW9kc0xpc3QnLCBQZXJpb2RzTGlzdF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1RyYW5zYWN0aW9uTGlzdCcsIFRyYW5zYWN0aW9uTGlzdF92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1RyYW5zYWN0aW9uRGV0YWlsJywgVHJhbnNhY3Rpb25EZXRhaWxfdnVlXzEuZGVmYXVsdClcbiAgICAuY29tcG9uZW50KCdTaWRlYmFySGVscEJsb2NrJywgU2lkZWJhckhlbHBCbG9ja192dWVfMS5kZWZhdWx0KTtcbi8qXG4gKiBJbXBvcnQgcGFnZVxuICovXG5hcHBcbiAgICAuY29tcG9uZW50KCdBY3Rpdml0eVVwbG9hZCcsIEFjdGl2aXR5VXBsb2FkX3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnSW1wb3J0TGlzdCcsIEltcG9ydExpc3RfdnVlXzEuZGVmYXVsdCk7XG4vKlxuICogU2V0dGluZyBwYWdlXG4gKi9cbmFwcC5jb21wb25lbnQoJ1NldHRpbmdQYWdlJywgU2V0dGluZ1BhZ2VfdnVlXzEuZGVmYXVsdCk7XG5hcHAuY29tcG9uZW50KCdBY3Rpdml0eURlZmF1bHRWYWx1ZXMnLCBBY3Rpdml0eURlZmF1bHRWYWx1ZV92dWVfMS5kZWZhdWx0KTtcbi8qXG5SZWdpc3RlcmluZyB2dWUgY29tcG9uZW50IGZvciBwYXNzd29yZCByZXNldFxuKi9cbmFwcFxuICAgIC5jb21wb25lbnQoJ1Jlc2V0UGFnZScsIFJlc2V0UGFnZV92dWVfMS5kZWZhdWx0KVxuICAgIC5jb21wb25lbnQoJ1Bhc3N3b3JkUmVjb3ZlcnknLCBQYXNzd29yZFJlY292ZXJ5X3Z1ZV8xLmRlZmF1bHQpXG4gICAgLmNvbXBvbmVudCgnUmVzZXRQYXNzd29yZCcsIFJlc2V0UGFzc3dvcmRfdnVlXzEuZGVmYXVsdCk7XG4vKipcbiAqIFJlZ2lzdGVyaW5nIEFkZGl0aW9uYWwgQ29tcG9uZW50c1xuICovXG5hcHAuY29tcG9uZW50KCdIb3ZlclRleHQnLCBIb3ZlclRleHRfdnVlXzEuZGVmYXVsdCk7XG5hcHAuY29tcG9uZW50KCdQYWdlVGl0bGUnLCBQYWdlVGl0bGVfdnVlXzEuZGVmYXVsdCk7XG5hcHAuY29tcG9uZW50KCdMb2FkaW5nU3RhdGUnLCBMb2FkZXJfdnVlXzEuZGVmYXVsdCk7XG4vKipcbiAqIE9yZ2FuaXNhdGlvbiBkYXRhXG4gKi9cbmFwcC5jb21wb25lbnQoJ09yZ2FuaXNhdGlvbkRhdGEnLCBPcmdhbmlzYXRpb25EYXRhX3Z1ZV8xLmRlZmF1bHQpO1xuLyoqXG4gKiBQcm94eVxuICovXG5hcHAuY29tcG9uZW50KCdPcmdhbmlzYXRpb25MaXN0JywgT3JnYW5pc2F0aW9uTGlzdF92dWVfMS5kZWZhdWx0KTtcbmFwcC5jb21wb25lbnQoJ0FkbWluQmFyJywgQWRtaW5CYXJfdnVlXzEuZGVmYXVsdCk7XG4vKipcbiAqIEV4dGVuc2lvbiB0byBpbmxpbmUgU1ZHIGZpbGVzIHdpdGggVnVlLmpzIGFuZCBvcHRpbWl6ZSB0aGVtIGF1dG9tYXRpY2FsbHkgd2l0aCBTVkdPXG4gKi9cbmFwcC51c2Uoc3ZnX3Z1ZTNfMS5kZWZhdWx0KTtcbmFwcC51c2UodnVlM19zbW9vdGhfc2Nyb2xsXzEuZGVmYXVsdCk7XG4vLyBkZXRlY3Qgc2Nyb2xsIHVwIG9yIGRvd25cbnZhciBsYXN0U2Nyb2xsVG9wID0gMCwgYWZmaXhUeXBlID0gJ3N0aWNreS1ub25lJztcbnZhciBzdGlja3lTaWRlYmFyID0gZnVuY3Rpb24gKGVsLCBwYXJlbnRXcmFwcGVyKSB7XG4gICAgLy9zdGlja3kgZWxlbWVudC9jaGlsZCBkYXRhXG4gICAgdmFyIHN0aWNreUVsZW1lbnQgPSBlbC5maXJzdENoaWxkLCBlbEhlaWdodCA9IHN0aWNreUVsZW1lbnQub2Zmc2V0SGVpZ2h0LCBzdGlja3lDdXJyZW50VG9wID0gc3RpY2t5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsIHN0aWNreUN1cnJlbnRCb3R0b20gPSBzdGlja3lFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAvL3N0aWNreSBlbGVtZW50J3MgcGFyZW50L3dyYXBwZXIgZGF0YVxuICAgIHZhciBlbFdpZHRoID0gZWwub2Zmc2V0V2lkdGgsIGVsU2Nyb2xsTGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsIGVsU2Nyb2xsVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLCBlbFNjcm9sbEJvdHRvbSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSwgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgLy8gd2luZG93L2RvY3VtZW50IGRhdGFcbiAgICB2YXIgY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5wYWdlWU9mZnNldCwgdGFyZ2V0U2Nyb2xsUG9zaXRpb24gPSBlbFNjcm9sbEJvdHRvbSArIGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24gLSB2aWV3cG9ydEhlaWdodDtcbiAgICAvLyBwYXJlbnQgd3JhcHBlciAvIHN0aWNreSBib3VuZGFyeVxuICAgIHZhciBlbFBhcmVudCA9IHN0aWNreUVsZW1lbnQuY2xvc2VzdChwYXJlbnRXcmFwcGVyKSwgZWxQYXJlbnRCb3R0b20gPSBlbFBhcmVudCA9PT0gbnVsbCB8fCBlbFBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWxQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIC8vIHNjcm9sbCBiZWhhdmlvdXJcbiAgICB2YXIgaXNTY3JvbGxEb3duID0gY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiA+IGxhc3RTY3JvbGxUb3AgPyB0cnVlIDogZmFsc2U7XG4gICAgdmFyIGlzU2Nyb2xsVXAgPSAhaXNTY3JvbGxEb3duO1xuICAgIGxhc3RTY3JvbGxUb3AgPVxuICAgICAgICBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uIDw9IDAgPyAwIDogY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbjtcbiAgICBmdW5jdGlvbiBoYW5kbGVTY3JvbGxEb3duKCkge1xuICAgICAgICBzd2l0Y2ggKGFmZml4VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LXRvcCc6XG4gICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogcmVsYXRpdmU7IHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgXCIuY29uY2F0KHN0aWNreUN1cnJlbnRUb3AgLSBlbFNjcm9sbFRvcCwgXCJweCwgMCk7XCIpO1xuICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktdHJhbnNsYXRlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0aWNreS1ib3R0b20nOlxuICAgICAgICAgICAgICAgIGlmIChlbFBhcmVudEJvdHRvbSAmJiBlbFBhcmVudEJvdHRvbSA8IHN0aWNreUN1cnJlbnRCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbiA6IGFic29sdXRlOyAgd2lkdGg6MjgwcHg7IGJvdHRvbTogMTZweFwiO1xuICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LWJvdW5kJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktdHJhbnNsYXRlJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q3VycmVudEJvdHRvbSA8PSB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgdG9wOiBhdXRvOyBsZWZ0OiBcIi5jb25jYXQoZWxTY3JvbGxMZWZ0LCBcIjsgYm90dG9tOiAwOyB3aWR0aDogXCIpLmNvbmNhdChlbFdpZHRoLCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LWJvdHRvbSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZml4ZWQtdG9wJzpcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogZml4ZWQ7IHRvcDo2MHB4XCI7XG4gICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS10cmFuc2xhdGUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LW5vbmUnOlxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTY3JvbGxQb3NpdGlvbiA8PSBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3cG9ydEhlaWdodCArIHdpbmRvdy5zY3JvbGxZICsgNDUwID49XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IHN0aWNreTsgdG9wOjYwcHhcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGZpeGVkOyB0b3A6IGF1dG87IGxlZnQ6IFwiLmNvbmNhdChlbFNjcm9sbExlZnQsIFwiOyBib3R0b206IDA7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LWJvdHRvbSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdGlja3ktYm91bmQnOlxuICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbFVwKCkge1xuICAgICAgICBzd2l0Y2ggKGFmZml4VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LXRvcCc6XG4gICAgICAgICAgICAgICAgaWYgKGVsU2Nyb2xsVG9wID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogcmVsYXRpdmU7ICBcIjtcbiAgICAgICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS1ub25lJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGZpeGVkOyB0b3A6IDYwcHg7bGVmdDogXCIuY29uY2F0KGVsU2Nyb2xsTGVmdCwgXCI7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHggXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0aWNreS1ib3R0b20nOlxuICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IGF1dG87ICBib3R0b206IDYwcHg7bGVmdDogXCIuY29uY2F0KGVsU2Nyb2xsTGVmdCwgXCI7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHggXCIpO1xuICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktYm91bmQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZml4ZWQtdG9wJzpcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogZml4ZWQ7IHRvcDo2MHB4XCI7XG4gICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS10cmFuc2xhdGUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LXRyYW5zbGF0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHN0aWNreUN1cnJlbnRUb3AgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgdG9wOiA2MHB4OyBsZWZ0OiBcIi5jb25jYXQoZWxTY3JvbGxMZWZ0LCBcIjsgd2lkdGg6IFwiKS5jb25jYXQoZWxXaWR0aCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS10b3AnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0aWNreS1ub25lJzpcbiAgICAgICAgICAgICAgICAvL25vdGhpbmcgdG8gZG8gaGVyZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RpY2t5LWJvdW5kJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q3VycmVudFRvcCA+PSAwICYmIGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24gIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkOyB0b3A6IDA7IGxlZnQ6IFwiLmNvbmNhdChlbFNjcm9sbExlZnQsIFwiOyB3aWR0aDogXCIpLmNvbmNhdChlbFdpZHRoLCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICBhZmZpeFR5cGUgPSAnc3RpY2t5LXRvcCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGlja3lDdXJyZW50VG9wID49IDAgJiYgY3VycmVudFdpbmRvd3NTY3JvbGxQb3NpdGlvbiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiIHRvcDogMDsgbGVmdDogXCIuY29uY2F0KGVsU2Nyb2xsTGVmdCwgXCI7IHdpZHRoOiBcIikuY29uY2F0KGVsV2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgIGFmZml4VHlwZSA9ICdzdGlja3ktdG9wJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsSGVpZ2h0IDwgdmlld3BvcnRIZWlnaHQpIHtcbiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IHN0aWNreTsgdG9wOjYwcHhcIjtcbiAgICAgICAgc3RpY2t5RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcImhlaWdodDogXCIuY29uY2F0KGVsSGVpZ2h0LCBcInB4O1wiKTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsRG93biAmJiBjdXJyZW50V2luZG93c1Njcm9sbFBvc2l0aW9uICE9IDApIHtcbiAgICAgICAgICAgIGhhbmRsZVNjcm9sbERvd24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1Njcm9sbFVwICYmIGN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24gIT0gMCkge1xuICAgICAgICAgICAgaGFuZGxlU2Nyb2xsVXAoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBzdGlja3k7IHRvcDo2MHB4XCI7XG4gICAgICAgICAgICBzdGlja3lFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuICAgICAgICB9XG4gICAgfVxufTtcbnZhciBmaXhTaWRlYmFyID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIGZvb3RlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb290ZXInKTtcbiAgICB2YXIgcmVjdCA9IGZvb3RlciAmJiBmb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdmFyIHByb2dyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzJyk7XG4gICAgdmFyIHRvcCA9IHByb2dyZXNzICYmIHByb2dyZXNzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoID4gMTAyNCkge1xuICAgICAgICBpZiAocmVjdCAmJiByZWN0LnRvcCA8PSA4MDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiBhdXRvOyAgYm90dG9tOiA2MHB4O3dpZHRoOjI4MHB4IFwiO1xuICAgICAgICAgICAgYWZmaXhUeXBlID0gJ3N0aWNreS1ib3R0b20nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRvcCAmJiB0b3AuYm90dG9tID4gMCkge1xuICAgICAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB0b3A6MTkwcHhcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgdG9wOjYwcHhcIjtcbiAgICAgICAgICAgIGFmZml4VHlwZSA9ICdmaXhlZC10b3AnO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vIGN1c3RvbSBkaXJlY3RpdmVcbmFwcC5kaXJlY3RpdmUoJ3N0aWNreS1jb21wb25lbnQnLCB7XG4gICAgbW91bnRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nKSB7XG4gICAgICAgIHZhciBib3VuZGFyeSA9IChiaW5kaW5nLnZhbHVlIHx8IHt9KS5ib3VuZGFyeTtcbiAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeSB8fCAnYm9keSc7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdGlja3lTaWRlYmFyKGVsLCBib3VuZGFyeSk7IH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZml4U2lkZWJhcihlbCk7IH0pO1xuICAgIH0sXG4gICAgdW5tb3VudGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IGJpbmRpbmcudmFsdWUuYm91bmRhcnk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdGlja3lTaWRlYmFyKGVsLCBwYXJlbnQpOyB9KTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpeFNpZGViYXIoZWwpOyB9KTtcbiAgICB9LFxufSk7XG4vKipcbiAqIE5leHQsIHdlIHdpbGwgY3JlYXRlIGEgZnJlc2ggVnVlIGFwcGxpY2F0aW9uIGluc3RhbmNlIGFuZCBhdHRhY2ggaXQgdG9cbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cbiAqIG9yIGN1c3RvbWl6ZSB0aGUgSmF2YVNjcmlwdCBzY2FmZm9sZGluZyB0byBmaXQgeW91ciB1bmlxdWUgbmVlZHMuXG4gKi9cbmFwcC5tb3VudCgnI2FwcCcpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yZ01hbmRhdG9yeUVsZW1lbnRzID0gZXhwb3J0cy5hY3Rpdml0eUNvcmVFbGVtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGFjdGl2aXR5Q29yZUVsZW1lbnRzKCkge1xuICAgIHZhciBlbGVtZW50cyA9IFtcbiAgICAgICAgJ3JlcG9ydGluZ19vcmcnLFxuICAgICAgICAnaWF0aV9pZGVudGlmaWVyJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ3BhcnRpY2lwYXRpbmdfb3JnJyxcbiAgICAgICAgJ2FjdGl2aXR5X3N0YXR1cycsXG4gICAgICAgICdhY3Rpdml0eV9kYXRlJyxcbiAgICAgICAgJ3JlY2lwaWVudF9jb3VudHJ5JyxcbiAgICAgICAgJ3JlY2lwaWVudF9yZWdpb24nLFxuICAgICAgICAnc2VjdG9yJyxcbiAgICAgICAgJ2NvbGxhYm9yYXRpb25fdHlwZScsXG4gICAgICAgICdkZWZhdWx0X2Zsb3dfdHlwZScsXG4gICAgICAgICdkZWZhdWx0X2ZpbmFuY2VfdHlwZScsXG4gICAgICAgICdkZWZhdWx0X2FpZF90eXBlJyxcbiAgICAgICAgJ2J1ZGdldCcsXG4gICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgIF07XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xufVxuZXhwb3J0cy5hY3Rpdml0eUNvcmVFbGVtZW50cyA9IGFjdGl2aXR5Q29yZUVsZW1lbnRzO1xuZnVuY3Rpb24gb3JnTWFuZGF0b3J5RWxlbWVudHMoKSB7XG4gICAgdmFyIGVsZW1lbnRzID0gWydyZXBvcnRpbmdfb3JnJywgJ25hbWUnXTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG5leHBvcnRzLm9yZ01hbmRhdG9yeUVsZW1lbnRzID0gb3JnTWFuZGF0b3J5RWxlbWVudHM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBtb21lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbmZ1bmN0aW9uIGRhdGVGb3JtYXQoZGF0ZSwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9ICdNTU1NIERELCBZWVlZJzsgfVxuICAgIHZhciBmb3JtYXRfZGF0ZTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdmcm9tTm93JzpcbiAgICAgICAgICAgIGZvcm1hdF9kYXRlID0gZGF0ZSA/ICgwLCBtb21lbnRfMS5kZWZhdWx0KShkYXRlKS5mcm9tTm93KCkgOiAnJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZm9ybWF0X2RhdGUgPSBkYXRlID8gKDAsIG1vbWVudF8xLmRlZmF1bHQpKGRhdGUpLmZvcm1hdChmb3JtYXQpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRfZGF0ZTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRhdGVGb3JtYXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjcnlwdG9fanNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvLWpzXCIpKTtcbmZ1bmN0aW9uIGVuY3J5cHQoc3RyaW5nLCBrZXkpIHtcbiAgICB2YXIgaXYgPSBjcnlwdG9fanNfMS5kZWZhdWx0LmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcbiAgICB2YXIgc2FsdCA9IGNyeXB0b19qc18xLmRlZmF1bHQubGliLldvcmRBcnJheS5yYW5kb20oMjU2KTtcbiAgICB2YXIgaXRlcmF0aW9ucyA9IDk5OTtcbiAgICB2YXIgZW5jcnlwdE1ldGhvZExlbmd0aCA9IDI1NiAvIDQ7XG4gICAgdmFyIGhhc2hLZXkgPSBjcnlwdG9fanNfMS5kZWZhdWx0LlBCS0RGMihrZXksIHNhbHQsIHtcbiAgICAgICAgaGFzaGVyOiBjcnlwdG9fanNfMS5kZWZhdWx0LmFsZ28uU0hBNTEyLFxuICAgICAgICBrZXlTaXplOiBlbmNyeXB0TWV0aG9kTGVuZ3RoIC8gOCxcbiAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICB9KTtcbiAgICB2YXIgZW5jcnlwdGVkID0gY3J5cHRvX2pzXzEuZGVmYXVsdC5BRVMuZW5jcnlwdChzdHJpbmcsIGhhc2hLZXksIHtcbiAgICAgICAgbW9kZTogY3J5cHRvX2pzXzEuZGVmYXVsdC5tb2RlLkNCQyxcbiAgICAgICAgaXY6IGl2LFxuICAgIH0pO1xuICAgIHZhciBlbmNyeXB0ZWRTdHJpbmcgPSBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZC5jaXBoZXJ0ZXh0KTtcbiAgICB2YXIgb3V0cHV0ID0ge1xuICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRTdHJpbmcsXG4gICAgICAgIGl2OiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5IZXguc3RyaW5naWZ5KGl2KSxcbiAgICAgICAgc2FsdDogY3J5cHRvX2pzXzEuZGVmYXVsdC5lbmMuSGV4LnN0cmluZ2lmeShzYWx0KSxcbiAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICB9O1xuICAgIHJldHVybiBjcnlwdG9fanNfMS5kZWZhdWx0LmVuYy5CYXNlNjQuc3RyaW5naWZ5KGNyeXB0b19qc18xLmRlZmF1bHQuZW5jLlV0ZjgucGFyc2UoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSkpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gZW5jcnlwdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBHZXQgY3VycmVudCBhY3Rpdml0eSB0aXRsZVxuICpcbiAqIEByZXR1cm4gdGl0bGUgdGV4dFxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBnZXRBY3Rpdml0eVRpdGxlKGRhdGEsIGxhbmd1YWdlKSB7XG4gICAgdmFyIHRpdGxlID0gJyc7XG4gICAgLy8gdGl0bGUgcmV0dXJuIGlmIGxhbmd1YWdlIGV4aXN0IGluIGRhdGFcbiAgICBmb3IgKHZhciBfaSA9IDAsIGRhdGFfMSA9IGRhdGE7IF9pIDwgZGF0YV8xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgdCA9IGRhdGFfMVtfaV07XG4gICAgICAgIGlmICh0Lmxhbmd1YWdlICYmIHQubGFuZ3VhZ2UgPT09IGxhbmd1YWdlKSB7XG4gICAgICAgICAgICB0aXRsZSA9IHQubmFycmF0aXZlICYmIHQubmFycmF0aXZlICE9PSAnJyA/IHQubmFycmF0aXZlIDogJ1VudGl0bGVkJztcbiAgICAgICAgICAgIHJldHVybiB0aXRsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkZWZhdWx0IHRpdGxlIHJldHVybiBpZiBsYW5ndWFnZSBkb2VzIG5vdCBleGlzdHMgaW4gZGF0YVxuICAgIHRpdGxlID0gZGF0YVsnMCddLm5hcnJhdGl2ZSAmJiBkYXRhWycwJ10ubmFycmF0aXZlICE9PSAnJyA/IGRhdGFbJzAnXS5uYXJyYXRpdmUgOiAnVW50aXRsZWQnO1xuICAgIHJldHVybiB0aXRsZTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdldEFjdGl2aXR5VGl0bGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldExvY2F0aW9uKGRhdGEpIHtcbiAgICB2YXIgbG9jYXRpb25zID0gW107XG4gICAgbG9jYXRpb25zID0gZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucmVmZXJlbmNlO1xuICAgIH0pO1xuICAgIHZhciBsYXN0TG9jYXRpb24gPSBsb2NhdGlvbnMuc2xpY2UoLTEpWzBdO1xuICAgIGxvY2F0aW9ucyA9IGxvY2F0aW9ucy5zbGljZSgwLCAtMSk7XG4gICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbnMuam9pbignLCAnKSArICcgJyArICdhbmQnICsgJyAnICsgbGFzdExvY2F0aW9uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxhc3RMb2NhdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBnZXRMb2NhdGlvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2VTdG9yZSA9IHZvaWQgMDtcbnZhciB2dWV4XzEgPSByZXF1aXJlKFwidnVleFwiKTtcbnZhciBzdGF0ZSA9IHtcbiAgICBzZWxlY3RlZEFjdGl2aXRpZXM6IFtdLFxufTtcbnZhciBtdXRhdGlvbnMgPSB7XG4gICAgbXV0YXRlU2VsZWN0ZWRBY3Rpdml0aWVzOiBmdW5jdGlvbiAoc3RhdGUsIHBheWxvYWQpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0ZWRBY3Rpdml0aWVzID0gcGF5bG9hZDtcbiAgICB9LFxufTtcbnZhciBhY3Rpb25zID0ge1xuICAgIHVwZGF0ZVNlbGVjdGVkQWN0aXZpdGllczogZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdCgnbXV0YXRlU2VsZWN0ZWRBY3Rpdml0aWVzJywgcGF5bG9hZCk7XG4gICAgfSxcbn07XG52YXIgYWN0aXZpdHlMaXN0U3RvcmUgPSAoMCwgdnVleF8xLmNyZWF0ZVN0b3JlKSh7XG4gICAgc3RhdGU6IHN0YXRlLFxuICAgIG11dGF0aW9uczogbXV0YXRpb25zLFxuICAgIGFjdGlvbnM6IGFjdGlvbnMsXG59KTtcbmZ1bmN0aW9uIHVzZVN0b3JlKCkge1xuICAgIHJldHVybiBhY3Rpdml0eUxpc3RTdG9yZTtcbn1cbmV4cG9ydHMudXNlU3RvcmUgPSB1c2VTdG9yZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZXRhaWxTdG9yZSA9IHZvaWQgMDtcbnZhciB2dWV4XzEgPSByZXF1aXJlKFwidnVleFwiKTtcbnZhciBzdGF0ZSA9IHtcbiAgICB1blB1Ymxpc2hlZDogZmFsc2UsXG4gICAgc2hvd1B1Ymxpc2hlZDogZmFsc2UsXG4gICAgcHVibGlzaEVycm9yczogW10sXG59O1xudmFyIG11dGF0aW9ucyA9IHtcbiAgICBtdXRhdGVVblB1Ymxpc2hlZDogZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLnVuUHVibGlzaGVkID0gcGF5bG9hZDtcbiAgICB9LFxuICAgIG11dGF0ZVNob3dQdWJsaXNoZWQ6IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5zaG93UHVibGlzaGVkID0gcGF5bG9hZDtcbiAgICB9LFxuICAgIG11dGF0ZVB1Ymxpc2hFcnJvcnM6IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5wdWJsaXNoRXJyb3JzID0gcGF5bG9hZDtcbiAgICB9LFxufTtcbnZhciBhY3Rpb25zID0ge1xuICAgIHVwZGF0ZVVuUHVibGlzaGVkOiBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KCdtdXRhdGVVblB1Ymxpc2hlZCcsIHBheWxvYWQpO1xuICAgIH0sXG4gICAgdXBkYXRlU2hvd1B1Ymxpc2hlZDogZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdCgnbXV0YXRlU2hvd1B1Ymxpc2hlZCcsIHBheWxvYWQpO1xuICAgIH0sXG4gICAgdXBkYXRlUHVibGlzaEVycm9yczogZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdCgnbXV0YXRlUHVibGlzaEVycm9ycycsIHBheWxvYWQpO1xuICAgIH0sXG59O1xudmFyIGFjdGl2aXR5RGV0YWlsU3RvcmUgPSAoMCwgdnVleF8xLmNyZWF0ZVN0b3JlKSh7XG4gICAgc3RhdGU6IHN0YXRlLFxuICAgIG11dGF0aW9uczogbXV0YXRpb25zLFxuICAgIGFjdGlvbnM6IGFjdGlvbnMsXG59KTtcbmZ1bmN0aW9uIGRldGFpbFN0b3JlKCkge1xuICAgIHJldHVybiBhY3Rpdml0eURldGFpbFN0b3JlO1xufVxuZXhwb3J0cy5kZXRhaWxTdG9yZSA9IGRldGFpbFN0b3JlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZVN0b3JlID0gZXhwb3J0cy5zdG9yZSA9IHZvaWQgMDtcbnZhciB2dWV4XzEgPSByZXF1aXJlKFwidnVleFwiKTtcbnZhciBzdGF0ZV8xID0gcmVxdWlyZShcIi4vc2V0dGluZy9zdGF0ZVwiKTtcbnZhciBtdXRhdGlvbl8xID0gcmVxdWlyZShcIi4vc2V0dGluZy9tdXRhdGlvblwiKTtcbnZhciBhY3Rpb25zXzEgPSByZXF1aXJlKFwiLi9zZXR0aW5nL2FjdGlvbnNcIik7XG5leHBvcnRzLnN0b3JlID0gKDAsIHZ1ZXhfMS5jcmVhdGVTdG9yZSkoe1xuICAgIHN0YXRlOiBzdGF0ZV8xLnN0YXRlLFxuICAgIG11dGF0aW9uczogbXV0YXRpb25fMS5tdXRhdGlvbnMsXG4gICAgYWN0aW9uczogYWN0aW9uc18xLmFjdGlvbnMsXG59KTtcbmZ1bmN0aW9uIHVzZVN0b3JlKCkge1xuICAgIHJldHVybiBleHBvcnRzLnN0b3JlO1xufVxuZXhwb3J0cy51c2VTdG9yZSA9IHVzZVN0b3JlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFjdGlvbnMgPSBleHBvcnRzLkFjdGlvblR5cGVzID0gdm9pZCAwO1xudmFyIG11dGF0aW9uXzEgPSByZXF1aXJlKFwiLi9tdXRhdGlvblwiKTtcbnZhciBBY3Rpb25UeXBlcztcbihmdW5jdGlvbiAoQWN0aW9uVHlwZXMpIHtcbiAgICBBY3Rpb25UeXBlc1tcIlVQREFURV9QVUJMSVNISU5HX0ZPUk1cIl0gPSBcIlVQREFURV9QVUJMSVNISU5HX0ZPUk1cIjtcbiAgICBBY3Rpb25UeXBlc1tcIlVQREFURV9QVUJMSVNIRVJfSU5GT1wiXSA9IFwiVVBEQVRFX1BVQkxJU0hFUl9JTkZPXCI7XG4gICAgQWN0aW9uVHlwZXNbXCJVUERBVEVfUFVCTElTSElOR19FUlJPUlwiXSA9IFwiVVBEQVRFX1BVQkxJU0hJTkdfRVJST1JcIjtcbiAgICBBY3Rpb25UeXBlc1tcIlVQREFURV9ERUZBVUxUX1ZBTFVFU1wiXSA9IFwiVVBEQVRFX0RFRkFVTFRfVkFMVUVTXCI7XG4gICAgQWN0aW9uVHlwZXNbXCJVUERBVEVfREVGQVVMVF9FUlJPUlwiXSA9IFwiVVBEQVRFX0RFRkFVTFRfRVJST1JcIjtcbn0pKEFjdGlvblR5cGVzID0gZXhwb3J0cy5BY3Rpb25UeXBlcyB8fCAoZXhwb3J0cy5BY3Rpb25UeXBlcyA9IHt9KSk7XG5leHBvcnRzLmFjdGlvbnMgPSAoX2EgPSB7fSxcbiAgICBfYVtBY3Rpb25UeXBlcy5VUERBVEVfUFVCTElTSElOR19GT1JNXSA9IGZ1bmN0aW9uIChfYSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgY29tbWl0ID0gX2EuY29tbWl0O1xuICAgICAgICBjb21taXQobXV0YXRpb25fMS5NdXRhdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0ZPUk0sIHBheWxvYWQpO1xuICAgIH0sXG4gICAgX2FbQWN0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hFUl9JTkZPXSA9IGZ1bmN0aW9uIChfYSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgY29tbWl0ID0gX2EuY29tbWl0O1xuICAgICAgICBjb21taXQobXV0YXRpb25fMS5NdXRhdGlvblR5cGVzLlVQREFURV9QVUJMSVNIRVJfSU5GTywgcGF5bG9hZCk7XG4gICAgfSxcbiAgICBfYVtBY3Rpb25UeXBlcy5VUERBVEVfUFVCTElTSElOR19FUlJPUl0gPSBmdW5jdGlvbiAoX2EsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIGNvbW1pdCA9IF9hLmNvbW1pdDtcbiAgICAgICAgY29tbWl0KG11dGF0aW9uXzEuTXV0YXRpb25UeXBlcy5VUERBVEVfUFVCTElTSElOR19FUlJPUiwgcGF5bG9hZCk7XG4gICAgfSxcbiAgICBfYVtBY3Rpb25UeXBlcy5VUERBVEVfREVGQVVMVF9WQUxVRVNdID0gZnVuY3Rpb24gKF9hLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBjb21taXQgPSBfYS5jb21taXQ7XG4gICAgICAgIGNvbW1pdChtdXRhdGlvbl8xLk11dGF0aW9uVHlwZXMuVVBEQVRFX0RFRkFVTFRfVkFMVUVTLCBwYXlsb2FkKTtcbiAgICB9LFxuICAgIF9hW0FjdGlvblR5cGVzLlVQREFURV9ERUZBVUxUX0VSUk9SXSA9IGZ1bmN0aW9uIChfYSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgY29tbWl0ID0gX2EuY29tbWl0O1xuICAgICAgICBjb21taXQobXV0YXRpb25fMS5NdXRhdGlvblR5cGVzLlVQREFURV9ERUZBVUxUX0VSUk9SLCBwYXlsb2FkKTtcbiAgICB9LFxuICAgIF9hKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9hO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tdXRhdGlvbnMgPSBleHBvcnRzLk11dGF0aW9uVHlwZXMgPSB2b2lkIDA7XG52YXIgTXV0YXRpb25UeXBlcztcbihmdW5jdGlvbiAoTXV0YXRpb25UeXBlcykge1xuICAgIE11dGF0aW9uVHlwZXNbXCJVUERBVEVfUFVCTElTSElOR19GT1JNXCJdID0gXCJVUERBVEVfUFVCTElTSElOR19GT1JNXCI7XG4gICAgTXV0YXRpb25UeXBlc1tcIlVQREFURV9QVUJMSVNIRVJfSU5GT1wiXSA9IFwiVVBEQVRFX1BVQkxJU0hFUl9JTkZPXCI7XG4gICAgTXV0YXRpb25UeXBlc1tcIlVQREFURV9QVUJMSVNISU5HX0VSUk9SXCJdID0gXCJVUERBVEVfUFVCTElTSElOR19FUlJPUlwiO1xuICAgIE11dGF0aW9uVHlwZXNbXCJVUERBVEVfREVGQVVMVF9WQUxVRVNcIl0gPSBcIlVQREFURV9ERUZBVUxUX1ZBTFVFU1wiO1xuICAgIE11dGF0aW9uVHlwZXNbXCJVUERBVEVfREVGQVVMVF9FUlJPUlwiXSA9IFwiVVBEQVRFX0RFRkFVTFRfRVJST1JcIjtcbn0pKE11dGF0aW9uVHlwZXMgPSBleHBvcnRzLk11dGF0aW9uVHlwZXMgfHwgKGV4cG9ydHMuTXV0YXRpb25UeXBlcyA9IHt9KSk7XG5leHBvcnRzLm11dGF0aW9ucyA9IChfYSA9IHt9LFxuICAgIF9hW011dGF0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hJTkdfRk9STV0gPSBmdW5jdGlvbiAoc3RhdGUsIHBheWxvYWQpIHtcbiAgICAgICAgc3RhdGUucHVibGlzaGluZ0Zvcm1bcGF5bG9hZC5rZXldID0gcGF5bG9hZC52YWx1ZTtcbiAgICB9LFxuICAgIF9hW011dGF0aW9uVHlwZXMuVVBEQVRFX1BVQkxJU0hFUl9JTkZPXSA9IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5wdWJsaXNoaW5nSW5mb1twYXlsb2FkLmtleV0gPSBwYXlsb2FkLnZhbHVlO1xuICAgIH0sXG4gICAgX2FbTXV0YXRpb25UeXBlcy5VUERBVEVfREVGQVVMVF9WQUxVRVNdID0gZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLmRlZmF1bHRGb3JtW3BheWxvYWQua2V5XSA9IHBheWxvYWQudmFsdWU7XG4gICAgfSxcbiAgICBfYVtNdXRhdGlvblR5cGVzLlVQREFURV9QVUJMSVNISU5HX0VSUk9SXSA9IGZ1bmN0aW9uIChzdGF0ZSwgcGF5bG9hZCkge1xuICAgICAgICBzdGF0ZS5wdWJsaXNoaW5nRXJyb3JbcGF5bG9hZC5rZXldID0gcGF5bG9hZC52YWx1ZTtcbiAgICB9LFxuICAgIF9hW011dGF0aW9uVHlwZXMuVVBEQVRFX0RFRkFVTFRfRVJST1JdID0gZnVuY3Rpb24gKHN0YXRlLCBwYXlsb2FkKSB7XG4gICAgICAgIHN0YXRlLmRlZmF1bHRFcnJvcltwYXlsb2FkLmtleV0gPSBwYXlsb2FkLnZhbHVlO1xuICAgIH0sXG4gICAgX2EpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0YXRlID0gdm9pZCAwO1xuZXhwb3J0cy5zdGF0ZSA9IHtcbiAgICBwdWJsaXNoaW5nRm9ybToge1xuICAgICAgICBwdWJsaXNoZXJfaWQ6ICcnLFxuICAgICAgICBhcGlfdG9rZW46ICcnLFxuICAgIH0sXG4gICAgcHVibGlzaGluZ0luZm86IHtcbiAgICAgICAgcHVibGlzaGVyX3ZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgICAgIHRva2VuX3ZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzVmVyaWZpY2F0aW9uUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9LFxuICAgIGRlZmF1bHRGb3JtOiB7XG4gICAgICAgIGRlZmF1bHRfY3VycmVuY3k6ICcnLFxuICAgICAgICBkZWZhdWx0X2xhbmd1YWdlOiAnJyxcbiAgICAgICAgaGllcmFyY2h5OiAnJyxcbiAgICAgICAgaHVtYW5pdGFyaWFuOiAnJyxcbiAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogJydcbiAgICB9LFxuICAgIHB1Ymxpc2hpbmdFcnJvcjoge1xuICAgICAgICBhcGlfdG9rZW46ICcnLFxuICAgIH0sXG4gICAgZGVmYXVsdEVycm9yOiB7XG4gICAgICAgIGRlZmF1bHRfY3VycmVuY3k6ICcnLFxuICAgICAgICBkZWZhdWx0X2xhbmd1YWdlOiAnJyxcbiAgICAgICAgaGllcmFyY2h5OiAnJyxcbiAgICAgICAgaHVtYW5pdGFyaWFuOiAnJyxcbiAgICAgICAgYnVkZ2V0X25vdF9wcm92aWRlZDogJydcbiAgICB9LFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXBvcnRpbmdPcmdhbml6YXRpb24gPSBleHBvcnRzLlBsYW5uZWREaXNidXJzZW1lbnQgPSBleHBvcnRzLkh1bWFuaXRhcmlhblNjb3BlID0gZXhwb3J0cy5UYWcgPSBleHBvcnRzLlBvbGljeU1hcmtlciA9IGV4cG9ydHMuUmVsYXRlZEFjdGl2aXR5ID0gZXhwb3J0cy5Db25kaXRpb25zID0gZXhwb3J0cy5MZWdhY3lEYXRhID0gZXhwb3J0cy5TZWN0b3IgPSBleHBvcnRzLkxvY2F0aW9uID0gZXhwb3J0cy5UcmFuc2FjdGlvbnMgPSBleHBvcnRzLlJlY2lwaWVudFJlZ2lvbiA9IGV4cG9ydHMuUmVjaXBpZW50Q291bnRyeSA9IGV4cG9ydHMuUGFydGljaXBhdGluZ09yZyA9IGV4cG9ydHMuQ29udGFjdEluZm8gPSBleHBvcnRzLkFjdGl2aXR5RGF0ZSA9IGV4cG9ydHMuRGVzY3JpcHRpb24gPSBleHBvcnRzLlRpdGxlRWxlbWVudCA9IGV4cG9ydHMuT3RoZXJJZGVudGlmaWVyID0gZXhwb3J0cy5JYXRpSWRlbnRpZmllciA9IGV4cG9ydHMuUmVzdWx0ID0gdm9pZCAwO1xuLy8gUHJveHkgZXhwb3J0IGFsbCByZWxhdGVkIGNvbXBvbmVudHMuXG52YXIgUmVzdWx0X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVzdWx0LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlc3VsdF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBJYXRpSWRlbnRpZmllcl92dWVfMSA9IHJlcXVpcmUoXCIuL0lhdGlJZGVudGlmaWVyLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklhdGlJZGVudGlmaWVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoSWF0aUlkZW50aWZpZXJfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgT3RoZXJJZGVudGlmaWVyX3Z1ZV8xID0gcmVxdWlyZShcIi4vT3RoZXJJZGVudGlmaWVyLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk90aGVySWRlbnRpZmllclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KE90aGVySWRlbnRpZmllcl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBUaXRsZV92dWVfMSA9IHJlcXVpcmUoXCIuL1RpdGxlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpdGxlRWxlbWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRpdGxlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIERlc2NyaXB0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vRGVzY3JpcHRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEZXNjcmlwdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBBY3Rpdml0eURhdGVfdnVlXzEgPSByZXF1aXJlKFwiLi9BY3Rpdml0eURhdGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWN0aXZpdHlEYXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQWN0aXZpdHlEYXRlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIENvbnRhY3RJbmZvX3Z1ZV8xID0gcmVxdWlyZShcIi4vQ29udGFjdEluZm8udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29udGFjdEluZm9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChDb250YWN0SW5mb192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBQYXJ0aWNpcGF0aW5nT3JnX3Z1ZV8xID0gcmVxdWlyZShcIi4vUGFydGljaXBhdGluZ09yZy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQYXJ0aWNpcGF0aW5nT3JnXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUGFydGljaXBhdGluZ09yZ192dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNpcGllbnRDb3VudHJ5X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVjaXBpZW50Q291bnRyeS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWNpcGllbnRDb3VudHJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjaXBpZW50Q291bnRyeV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNpcGllbnRSZWdpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9SZWNpcGllbnRSZWdpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVjaXBpZW50UmVnaW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjaXBpZW50UmVnaW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRyYW5zYWN0aW9uc192dWVfMSA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9ucy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFuc2FjdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUcmFuc2FjdGlvbnNfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgTG9jYXRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9Mb2NhdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb2NhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KExvY2F0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFNlY3Rvcl92dWVfMSA9IHJlcXVpcmUoXCIuL1NlY3Rvci52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChTZWN0b3JfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgTGVnYWN5RGF0YV92dWVfMSA9IHJlcXVpcmUoXCIuL0xlZ2FjeURhdGEudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTGVnYWN5RGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KExlZ2FjeURhdGFfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgQ29uZGl0aW9uc192dWVfMSA9IHJlcXVpcmUoXCIuL0NvbmRpdGlvbnMudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KENvbmRpdGlvbnNfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVsYXRlZEFjdGl2aXR5X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVsYXRlZEFjdGl2aXR5LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlbGF0ZWRBY3Rpdml0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlbGF0ZWRBY3Rpdml0eV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBQb2xpY3lNYXJrZXJfdnVlXzEgPSByZXF1aXJlKFwiLi9Qb2xpY3lNYXJrZXIudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUG9saWN5TWFya2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUG9saWN5TWFya2VyX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRhZ192dWVfMSA9IHJlcXVpcmUoXCIuL1RhZy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUYWdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUYWdfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgSHVtYW5pdGFyaWFuU2NvcGVfdnVlXzEgPSByZXF1aXJlKFwiLi9IdW1hbml0YXJpYW5TY29wZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJIdW1hbml0YXJpYW5TY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KEh1bWFuaXRhcmlhblNjb3BlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFBsYW5uZWREaXNidXJzZW1lbnRfdnVlXzEgPSByZXF1aXJlKFwiLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBsYW5uZWREaXNidXJzZW1lbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChQbGFubmVkRGlzYnVyc2VtZW50X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlcG9ydGluZ09yZ2FuaXphdGlvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBvcnRpbmdPcmdhbml6YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZXBvcnRpbmdPcmdhbml6YXRpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGVyaW9kID0gZXhwb3J0cy5CYXNlbGluZSA9IGV4cG9ydHMuRG9jdW1lbnRMaW5rID0gZXhwb3J0cy5SZWZlcmVuY2UgPSBleHBvcnRzLkRlc2NyaXB0aW9uID0gZXhwb3J0cy5BZ2dyZWdhdGlvblN0YXR1cyA9IGV4cG9ydHMuQXNjZW5kaW5nID0gZXhwb3J0cy5NZWFzdXJlID0gZXhwb3J0cy5UaXRsZUVsZW1lbnQgPSB2b2lkIDA7XG4vLyBQcm94eSBleHBvcnQgYWxsIHJlbGF0ZWQgY29tcG9uZW50cy5cbnZhciBUaXRsZV92dWVfMSA9IHJlcXVpcmUoXCIuL1RpdGxlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpdGxlRWxlbWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRpdGxlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIE1lYXN1cmVfdnVlXzEgPSByZXF1aXJlKFwiLi9NZWFzdXJlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1lYXN1cmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChNZWFzdXJlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEluZGljYXRvckFzY2VuZGluZ192dWVfMSA9IHJlcXVpcmUoXCIuL0luZGljYXRvckFzY2VuZGluZy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc2NlbmRpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChJbmRpY2F0b3JBc2NlbmRpbmdfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgQWdncmVnYXRpb25TdGF0dXNfdnVlXzEgPSByZXF1aXJlKFwiLi9BZ2dyZWdhdGlvblN0YXR1cy52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBZ2dyZWdhdGlvblN0YXR1c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KEFnZ3JlZ2F0aW9uU3RhdHVzX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIERlc2NyaXB0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vRGVzY3JpcHRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEZXNjcmlwdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWZlcmVuY2VfdnVlXzEgPSByZXF1aXJlKFwiLi9SZWZlcmVuY2UudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmZXJlbmNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVmZXJlbmNlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIERvY3VtZW50TGlua192dWVfMSA9IHJlcXVpcmUoXCIuL0RvY3VtZW50TGluay52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEb2N1bWVudExpbmtcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEb2N1bWVudExpbmtfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgQmFzZWxpbmVfdnVlXzEgPSByZXF1aXJlKFwiLi9CYXNlbGluZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNlbGluZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KEJhc2VsaW5lX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFBlcmlvZF92dWVfMSA9IHJlcXVpcmUoXCIuL1BlcmlvZC52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZXJpb2RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChQZXJpb2RfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWN0dWFsVmFsdWUgPSBleHBvcnRzLlRhcmdldFZhbHVlID0gdm9pZCAwO1xudmFyIFRhcmdldFZhbHVlX3Z1ZV8xID0gcmVxdWlyZShcIi4vVGFyZ2V0VmFsdWUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGFyZ2V0VmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUYXJnZXRWYWx1ZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBBY3R1YWxWYWx1ZV92dWVfMSA9IHJlcXVpcmUoXCIuL0FjdHVhbFZhbHVlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFjdHVhbFZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQWN0dWFsVmFsdWVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5kaWNhdG9yID0gZXhwb3J0cy5SZXN1bHRUeXBlID0gZXhwb3J0cy5SZWZlcmVuY2UgPSBleHBvcnRzLkRvY3VtZW50TGluayA9IGV4cG9ydHMuVGl0bGVEZXNjcmlwdGlvbiA9IHZvaWQgMDtcbi8vIFByb3h5IGV4cG9ydCBhbGwgcmVsYXRlZCBjb21wb25lbnRzLlxudmFyIFRpdGxlRGVzY3JpcHRpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpdGxlRGVzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUaXRsZURlc2NyaXB0aW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIERvY3VtZW50TGlua192dWVfMSA9IHJlcXVpcmUoXCIuL0RvY3VtZW50TGluay52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEb2N1bWVudExpbmtcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEb2N1bWVudExpbmtfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVmZXJlbmNlX3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVmZXJlbmNlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZmVyZW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlZmVyZW5jZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZXN1bHRUeXBlX3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVzdWx0VHlwZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXN1bHRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVzdWx0VHlwZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBJbmRpY2F0b3JfdnVlXzEgPSByZXF1aXJlKFwiLi9JbmRpY2F0b3IudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kaWNhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoSW5kaWNhdG9yX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRpZWRTdGF0dXMgPSBleHBvcnRzLkZpbmFuY2VUeXBlID0gZXhwb3J0cy5GbG93VHlwZSA9IGV4cG9ydHMuUmVjaXBpZW50UmVnaW9uID0gZXhwb3J0cy5SZWNpcGllbnRDb3VudHJ5ID0gZXhwb3J0cy5TZWN0b3IgPSBleHBvcnRzLkRpc2J1cnNlbWVudENoYW5uZWwgPSBleHBvcnRzLlJlY2VpdmVyT3JnYW5pemF0aW9uID0gZXhwb3J0cy5Qcm92aWRlck9yZ2FuaXphdGlvbiA9IGV4cG9ydHMuVmFsdWUgPSBleHBvcnRzLlRyYW5zYWN0aW9uRGF0ZSA9IGV4cG9ydHMuVHJhbnNhY3Rpb25UeXBlID0gZXhwb3J0cy5BaWRUeXBlID0gZXhwb3J0cy5EZXNjcmlwdGlvbiA9IHZvaWQgMDtcbi8vIFByb3h5IGV4cG9ydCBhbGwgcmVsYXRlZCBjb21wb25lbnRzLlxudmFyIERlc2NyaXB0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vRGVzY3JpcHRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChEZXNjcmlwdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBBaWRUeXBlX3Z1ZV8xID0gcmVxdWlyZShcIi4vQWlkVHlwZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBaWRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoQWlkVHlwZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBUcmFuc2FjdGlvblR5cGVfdnVlXzEgPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblR5cGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHJhbnNhY3Rpb25UeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVHJhbnNhY3Rpb25UeXBlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFRyYW5zYWN0aW9uRGF0ZV92dWVfMSA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uRGF0ZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFuc2FjdGlvbkRhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChUcmFuc2FjdGlvbkRhdGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVmFsdWVfdnVlXzEgPSByZXF1aXJlKFwiLi9WYWx1ZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFZhbHVlX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFByb3ZpZGVyT3JnYW5pemF0aW9uX3Z1ZV8xID0gcmVxdWlyZShcIi4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdmlkZXJPcmdhbml6YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChQcm92aWRlck9yZ2FuaXphdGlvbl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNlaXZlck9yZ2FuaXphdGlvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlY2VpdmVyT3JnYW5pemF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjZWl2ZXJPcmdhbml6YXRpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgRGlzYnVyc2VtZW50Q2hhbm5lbF92dWVfMSA9IHJlcXVpcmUoXCIuL0Rpc2J1cnNlbWVudENoYW5uZWwudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGlzYnVyc2VtZW50Q2hhbm5lbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KERpc2J1cnNlbWVudENoYW5uZWxfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgU2VjdG9yX3Z1ZV8xID0gcmVxdWlyZShcIi4vU2VjdG9yLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFNlY3Rvcl92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNpcGllbnRDb3VudHJ5X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVjaXBpZW50Q291bnRyeS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWNpcGllbnRDb3VudHJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjaXBpZW50Q291bnRyeV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNpcGllbnRSZWdpb25fdnVlXzEgPSByZXF1aXJlKFwiLi9SZWNpcGllbnRSZWdpb24udnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVjaXBpZW50UmVnaW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjaXBpZW50UmVnaW9uX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIEZsb3dUeXBlX3Z1ZV8xID0gcmVxdWlyZShcIi4vRmxvd1R5cGUudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmxvd1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChGbG93VHlwZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBGaW5hbmNlVHlwZV92dWVfMSA9IHJlcXVpcmUoXCIuL0ZpbmFuY2VUeXBlLnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZpbmFuY2VUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoRmluYW5jZVR5cGVfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVGllZFN0YXR1c192dWVfMSA9IHJlcXVpcmUoXCIuL1RpZWRTdGF0dXMudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGllZFN0YXR1c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRpZWRTdGF0dXNfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRG9jdW1lbnRMaW5rID0gZXhwb3J0cy5Ub3RhbEV4cGVuZGl0dXJlID0gZXhwb3J0cy5SZWNpcGllbnRDb3VudHJ5QnVkZ2V0ID0gZXhwb3J0cy5SZXBvcnRpbmdSZWdpb25CdWRnZXQgPSBleHBvcnRzLlJlcG9ydGluZ09yZ0J1ZGdldCA9IGV4cG9ydHMuVG90YWxCdWRnZXQgPSBleHBvcnRzLlJlcG9ydGluZ09yZ2FuaXNhdGlvbiA9IHZvaWQgMDtcbi8vIFByb3h5IGV4cG9ydCBhbGwgcmVsYXRlZCBjb21wb25lbnRzLlxudmFyIFJlcG9ydGluZ09yZ2FuaXNhdGlvbl92dWVfMSA9IHJlcXVpcmUoXCIuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBvcnRpbmdPcmdhbmlzYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZXBvcnRpbmdPcmdhbmlzYXRpb25fdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgVG90YWxCdWRnZXRfdnVlXzEgPSByZXF1aXJlKFwiLi9Ub3RhbEJ1ZGdldC52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUb3RhbEJ1ZGdldFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFRvdGFsQnVkZ2V0X3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xudmFyIFJlcG9ydGluZ09yZ0J1ZGdldF92dWVfMSA9IHJlcXVpcmUoXCIuL1JlcG9ydGluZ09yZ0J1ZGdldC52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXBvcnRpbmdPcmdCdWRnZXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9faW1wb3J0RGVmYXVsdChSZXBvcnRpbmdPcmdCdWRnZXRfdnVlXzEpLmRlZmF1bHQ7IH0gfSk7XG52YXIgUmVwb3J0aW5nUmVnaW9uQnVkZ2V0X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlcG9ydGluZ1JlZ2lvbkJ1ZGdldFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX19pbXBvcnREZWZhdWx0KFJlcG9ydGluZ1JlZ2lvbkJ1ZGdldF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBSZWNpcGllbnRDb3VudHJ5QnVkZ2V0X3Z1ZV8xID0gcmVxdWlyZShcIi4vUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWNpcGllbnRDb3VudHJ5QnVkZ2V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoUmVjaXBpZW50Q291bnRyeUJ1ZGdldF92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBUb3RhbEV4cGVuZGl0dXJlX3Z1ZV8xID0gcmVxdWlyZShcIi4vVG90YWxFeHBlbmRpdHVyZS52dWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUb3RhbEV4cGVuZGl0dXJlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoVG90YWxFeHBlbmRpdHVyZV92dWVfMSkuZGVmYXVsdDsgfSB9KTtcbnZhciBEb2N1bWVudExpbmtfdnVlXzEgPSByZXF1aXJlKFwiLi9Eb2N1bWVudExpbmsudnVlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRG9jdW1lbnRMaW5rXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2ltcG9ydERlZmF1bHQoRG9jdW1lbnRMaW5rX3Z1ZV8xKS5kZWZhdWx0OyB9IH0pO1xuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwic21vb3RoIC1tYi03IGJnLVsjZTVlNWU1XSBweC01IHB5LTcgc206cHgtMTAgc206cHktMTQgbWQ6LW1iLTIwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gbWF4LXctWzcwMHB4XVwiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJyb3VuZGVkIGJnLXdoaXRlIHB5LTQgc2hhZG93LXRleHRib3ggc206cHktOFwiPlxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInB5LTQgcHgtNiBzbTpweS02IHNtOnB4LTEyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibXktMiB0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlY29yYWxcIj5cbiAgICAgICAgICAgIHt7IGxhbmd1YWdlLmFib3V0LndoYXRfaXNfaWF0aV9wdWJsaXNoZXJfaGVhZGVyIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICB7eyBsYW5ndWFnZS5hYm91dC53aGF0X2lzX2lhdGlfcHVibGlzaGVyX2Rlc2NyaXB0aW9uLm9uZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInB5LTQgcHgtNiBzbTpweS02IHNtOnB4LTEyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibXktMiB0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlY29yYWxcIj5cbiAgICAgICAgICAgIHt7IGxhbmd1YWdlLmFib3V0LnVzZV9pYXRpX3B1Ymxpc2hlcl90b19oZWFkZXIgfX1cbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDx1bCBjbGFzcz1cIm10LTQgbWwtNCBsaXN0LWRpc2MgdGV4dC1iYXNlIHRleHQtYmx1ZWNvcmFsXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCJcbiAgICAgICAgICAgICAgPnt7IGxhbmd1YWdlLmFib3V0LnVzZV9pYXRpX3B1Ymxpc2hlcl90b19kZXNjcmlwdGlvbi5vbmUubGlzdF9pdGVtcy5vbmUgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICA+e3sgbGFuZ3VhZ2UuYWJvdXQudXNlX2lhdGlfcHVibGlzaGVyX3RvX2Rlc2NyaXB0aW9uLm9uZS5saXN0X2l0ZW1zLnR3byB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1iYXNlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiXG4gICAgICAgICAgICAgID57eyBsYW5ndWFnZS5hYm91dC51c2VfaWF0aV9wdWJsaXNoZXJfdG9fZGVzY3JpcHRpb24ub25lLmxpc3RfaXRlbXMudGhyZWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICA+e3sgbGFuZ3VhZ2UuYWJvdXQudXNlX2lhdGlfcHVibGlzaGVyX3RvX2Rlc2NyaXB0aW9uLm9uZS5saXN0X2l0ZW1zLmZvdXIgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtYmFzZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIlxuICAgICAgICAgICAgICA+e3sgbGFuZ3VhZ2UuYWJvdXQudXNlX2lhdGlfcHVibGlzaGVyX3RvX2Rlc2NyaXB0aW9uLm9uZS5saXN0X2l0ZW1zLmZpdmUgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtNCB0ZXh0LWJhc2VcIj5cbiAgICAgICAgICAgIHt7IGxhbmd1YWdlLmFib3V0LnVzZV9pYXRpX3B1Ymxpc2hlcl90b19kZXNjcmlwdGlvbi50d28gfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtdC00IHRleHQtYmFzZVwiPlxuICAgICAgICAgICAgPHNwYW4gdi1odG1sPWxhbmd1YWdlLmFib3V0LnVzZV9pYXRpX3B1Ymxpc2hlcl90b19kZXNjcmlwdGlvbi50aHJlZT48L3NwYW4+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2FydGljbGU+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwib3VuZGVkIHB5LTQgcHgtNiBzbTpweS02IHNtOnB4LTEyXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibXktMiB0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlY29yYWxcIj5cbiAgICAgICAgICAgIHt7IGxhbmd1YWdlLmFib3V0LmRldmVsb3BtZW50X29mX2lhdGlfaGVhZGVyIH19XG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8cCBjbGFzcz1cIm10LTQgdGV4dC1iYXNlXCI+XG4gICAgICAgICAgICA8c3BhbiB2LWh0bWw9bGFuZ3VhZ2UuYWJvdXQuZGV2ZWxvcG1lbnRfb2ZfaWF0aV9kZXNjcmlwdGlvbi5vbmU+PC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0IGxhbmc9XCJ0c1wiPjwvc2NyaXB0PlxuPHNjcmlwdD5cbmltcG9ydCB7ZGVmaW5lQ29tcG9uZW50fSBmcm9tIFwidnVlXCI7XG5cbiAgZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29tcG9uZW50KHtcbiAgICBzZXR1cCgpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gd2luZG93W1wiZ2xvYmFsTGFuZ1wiXTtcbiAgICAgIHJldHVybiB7bGFuZ3VhZ2V9O1xuICAgIH1cbn0pO1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxzZWN0aW9uIGNsYXNzPVwibWFpbiBtdC0xMCBzbTpteC0xMCB4bDpteC0yNCB4bDpweC0xXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtYWluX19jb250YWluZXIgcm91bmRlZC1sZyBiZy1ibHVlY29yYWwgcGItOCBzbTptYi0xMCBtZDptYi0yMCBtZDpmbGV4IG1kOmJnLW5vbmUgbWQ6cGItMFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnQgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmx1ZWNvcmFsIHB4LTMgcHQtNSBwYi03MiB0ZXh0LXdoaXRlIHNtOnJvdW5kZWQtci1sZyBzbTpyb3VuZGVkLWwtbGcgc206cHgtNSBzbTpwdC0xMCBtZDpiYXNpcy0yLzQgbWQ6cm91bmRlZC1yLW5vbmUgbWQ6cGItMTYgbGc6cHQtNDQgbGc6cGItNDQgeGw6cHgtMjRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdF9fY29udGFpbmVyIHJvdW5kZWQtbGcgcC01IHNtOnAtMTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZnRfX3RpdGxlIGZvbnQtYm9sZFwiPnt7IGxhbmd1YWdlLmhvbWUuaWF0aV9wdWJsaXNoaW5nX3Rvb2xfaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwicHQtMiBzbTpwdC02IHNtOnBiLThcIj5cbiAgICAgICAgICAgIHt7IGxhbmd1YWdlLmhvbWUuaWF0aV9wdWJsaXNoaW5nX3Rvb2xfc2VjdGlvbi53ZWxjb21lX3RleHQgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQgPT09IFwiSm9pbiBOb3dcIlxuICAgICAgICAgICAgICAgICAgPyBsYW5ndWFnZS5ob21lLmlhdGlfcHVibGlzaGluZ190b29sX3NlY3Rpb24uaGF2ZW50X3JlZ2lzdGVyZWRfbGFiZWxcbiAgICAgICAgICAgICAgICAgIDogbGFuZ3VhZ2UuaG9tZS5pYXRpX3B1Ymxpc2hpbmdfdG9vbF9zZWN0aW9uLmFscmVhZHlfaGF2ZV9hY2NvdW50X2xhYmVsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTEgYm9yZGVyLWItMiBib3JkZXItYi10cmFuc3BhcmVudCB0ZXh0LWJhc2UgdGV4dC10dXJxdW9pc2UgaG92ZXI6Ym9yZGVyLWItMiBob3Zlcjpib3JkZXItYi10dXJxdW9pc2VcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInRvZ2dsZVBhZ2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcGFnZUNvbnRlbnQgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxTaWduSW4gdi1pZj1cInBhZ2VDb250ZW50ID09PSAnSm9pbiBOb3cnXCIgOm1lc3NhZ2U9XCJtZXNzYWdlXCIgLz5cbiAgICAgIDxKb2luTm93IHYtZWxzZSAvPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IFNpZ25JbiBmcm9tICcuL3BhcnRpYWxzL1NpZ25Jbi52dWUnO1xuaW1wb3J0IEpvaW5Ob3cgZnJvbSAnLi9wYXJ0aWFscy9Kb2luTm93LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBKb2luTm93LFxuICAgIFNpZ25JbixcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBwYWdlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIHNldHVwKHByb3BzKSB7XG4gICAgY29uc3QgcGFnZUNvbnRlbnQgPSByZWYocHJvcHMucGFnZSA9PT0gJ3NpZ25pbicgPyAnSm9pbiBOb3cnIDogJ1NpZ24gSW4nKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHdpbmRvd1tcImdsb2JhbExhbmdcIl07XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVQYWdlKCkge1xuICAgICAgcGFnZUNvbnRlbnQudmFsdWUgPVxuICAgICAgICBwYWdlQ29udGVudC52YWx1ZSA9PT0gJ0pvaW4gTm93JyA/ICdTaWduIEluJyA6ICdKb2luIE5vdyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgdG9nZ2xlUGFnZSxcbiAgICAgIGxhbmd1YWdlXG4gICAgfTtcbiAgfSxcbn0pO1xuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJzaGltbWVyX19ibG9ja1wiIHN0eWxlPVwibWF4LXdpZHRoOiA1MTVweFwiPjwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuLnNoaW1tZXJfX2Jsb2NrIHtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAycztcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICBhbmltYXRpb24tbmFtZTogcGxhY2VIb2xkZXJTaGltbWVyO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIGFuaW1hdGlvbi1kZWxheTogMC41cztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZWRlZGVkIDE0LjM2JSwgI2Q3ZDZkNiA1Ni4yOSUsICNlZGVkZWQgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMjQ0cHggMTA0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxOXB4O1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAzcHggNnB4IDNweCAwcHg7XG59XG5cbkBrZXlmcmFtZXMgcGxhY2VIb2xkZXJTaGltbWVyIHtcbiAgMCUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcbiAgfVxuXG4gIDIwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xuICB9XG5cbiAgODAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgKyAzMDBweCkgMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwibXQtMTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVzZXQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDxoMj57eyBsYW5ndWFnZS5wYXNzd29yZF9yZWNvdmVyeS5wYXNzd29yZF9yZWNvdmVyeV9oZWFkZXIgfX08L2gyPlxuICAgICAgPHAgY2xhc3M9XCJtYi01XCI+XG4gICAgICAgIHt7IGxhbmd1YWdlLnBhc3N3b3JkX3JlY292ZXJ5LnlvdXJfZW1haWxfaGFzX2JlZW5fc2VudF93aXRoX2xhYmVsIH19XG4gICAgICA8L3A+XG4gICAgICA8c3ZnLXZ1ZSBjbGFzcz1cInZlcmlmaWNhdGlvbiBtLWF1dG9cIiBpY29uPVwiaWMtdmVyaWZpY2F0aW9uXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuYWN0aXZpdHlfX2hlYWRlcltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIHRvcDogMHB4O1xcbiAgei1pbmRleDogMTAwO1xcbn1cXG4uYWN0aXZpdHlfX2hlYWRlciBuYXZbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uYWN0aXZpdHlfX2hlYWRlciBuYXYgYVtkYXRhLXYtNmZlNTkwNTVdOmhvdmVyIHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLmFjdGl2aXR5X19oZWFkZXIgbmF2IHVsW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzc1cHgpIHtcXG4uYWN0aXZpdHlfX2hlYWRlciAuYWRkLWJ0bltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxufVxcbi5hY3Rpdml0eV9faGVhZGVyIC51c2VyLW5hdltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4udG9hc3RbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICB6LWluZGV4OiA1MDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMC43NXJlbTtcXG4gIHotaW5kZXg6IDIwO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbiAgb3BhY2l0eTogMDtcXG4gIC0tdHctc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgLS10dy1zaGFkb3ctY29sb3JlZDogMHB4IDRweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7XFxuICBib3gtc2hhZG93OiB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksIHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1zaGFkb3cpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5wcm9maWxlX19kcm9wZG93bltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gICAgcmlnaHQ6IDIuNXJlbTtcXG59XFxufVxcbi5wcm9maWxlX19kcm9wZG93bltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHRvcDogNTBweDtcXG4gIHdpZHRoOiAyNjVweDtcXG4gIGJveC1zaGFkb3c6IDRweCA0cHggNDBweCByZ2JhKDAsIDUwLCA3NiwgMC4yKTtcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpIHtcXG4ucHJvZmlsZV9fZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICAgIHdpZHRoOiAyMjBweDtcXG59XFxufVxcbi5wcm9maWxlX19kcm9wZG93biBsaVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24gbGlbZGF0YS12LTZmZTU5MDU1XSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMC43NXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC43NXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIGxpW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgcGFkZGluZzogMC43NXJlbTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIGxpW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgICBwYWRkaW5nOiAxcmVtO1xcbn1cXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIGxpIGFbZGF0YS12LTZmZTU5MDU1XTpob3ZlciB7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24gbGkgLnVzZXItcHJvZmlsZVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGZvbnQtc2l6ZTogMjZweDtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIC5kcm9wZG93bl9fbGlzdFtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duIC5kcm9wZG93bl9fbGlzdFtkYXRhLXYtNmZlNTkwNTVdOmhvdmVyIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbi0yMCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93biAuZHJvcGRvd25fX2xpc3QgYVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDEuMjVyZW07XFxuICB6LWluZGV4OiAyMDtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG4gIC0tdHctc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgLS10dy1zaGFkb3ctY29sb3JlZDogMHB4IDRweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7XFxuICBib3gtc2hhZG93OiB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksIHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1zaGFkb3cpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxuICB0b3A6IDUwcHg7XFxuICB3aWR0aDogMjY1cHg7XFxuICBib3gtc2hhZG93OiA0cHggNHB4IDQwcHggcmdiYSgwLCA1MCwgNzYsIDAuMik7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSB7XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaFtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gICAgd2lkdGg6IDIyMHB4O1xcbn1cXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCBsaVtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoIGxpW2RhdGEtdi02ZmU1OTA1NV0gPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHtcXG4gIC0tdHctc3BhY2UteC1yZXZlcnNlOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDAuNzVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTtcXG4gIG1hcmdpbi1sZWZ0OiBjYWxjKDAuNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSk7XFxufVxcbi5wcm9maWxlX19kcm9wZG93bi0tdG91Y2ggbGlbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBwYWRkaW5nOiAwLjc1cmVtO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoIGxpW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgICBwYWRkaW5nOiAxcmVtO1xcbn1cXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCBsaSBhW2RhdGEtdi02ZmU1OTA1NV06aG92ZXIge1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCBsaSAudXNlci1wcm9maWxlW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgZm9udC1zaXplOiAyNnB4O1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoIC5kcm9wZG93bl9fbGlzdFtkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCAuZHJvcGRvd25fX2xpc3RbZGF0YS12LTZmZTU5MDU1XTpob3ZlciB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24tLXRvdWNoIC5kcm9wZG93bl9fbGlzdCBhW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XFxufVxcbi5kcm9wZG93bi1idG46aG92ZXIgLnByb2ZpbGVfX2Ryb3Bkb3duW2RhdGEtdi02ZmU1OTA1NV0sIFxcbi5kcm9wZG93bi1idG46YWN0aXZlIC5wcm9maWxlX19kcm9wZG93bltkYXRhLXYtNmZlNTkwNTVdIHtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICBvcGFjaXR5OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xcbn1cXG4uZHJvcGRvd24tYnRuOmhvdmVyIC5kcm9wZG93bl9fYXJyb3dbZGF0YS12LTZmZTU5MDU1XSxcXG4uZHJvcGRvd24tYnRuOmFjdGl2ZSAuZHJvcGRvd25fX2Fycm93W2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuLmFkZC1pbXBvcnRbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5hZGQtaW1wb3J0LWRyb3Bkb3duW2RhdGEtdi02ZmU1OTA1NV0ge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLmFkZC1pbXBvcnQ6aG92ZXIgLmFkZC1pbXBvcnQtZHJvcGRvd25bZGF0YS12LTZmZTU5MDU1XSB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuLnNwaW5uZXJbZGF0YS12LTZmZTU5MDU1XSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDAuNzVyZW07XFxuICByaWdodDogMS43NXJlbTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4tNmZlNTkwNTUge1xcbnRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG59XFxufVxcbkBrZXlmcmFtZXMgc3Bpbi02ZmU1OTA1NSB7XFxudG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbn1cXG59XFxuLnNwaW5uZXJbZGF0YS12LTZmZTU5MDU1XSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3Bpbi02ZmU1OTA1NSAxcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogc3Bpbi02ZmU1OTA1NSAxcyBsaW5lYXIgaW5maW5pdGU7XFxuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XFxuICBib3JkZXItd2lkdGg6IDJweDtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1uLTEwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDAuMDU7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIGJvcmRlci10b3AtY29sb3I6IHdoaXRlO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQWRtaW5IZWFkZXIudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNBO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxRQUFBO0VBQ0EsWUFBQTtBQUFGO0FBRUU7RUFDRSxhQUFBO0FBQUo7QUFHTTtFQUFBLG9CQUFBO0VBQUEsaURBQUE7QUFBQTtBQUdBO0VBQUEsYUFBQTtBQUFBO0FBSUY7QUFERjtJQUVJLGFBQUE7QUFESjtBQUNGO0FBSUk7RUFBQSxhQUFBO0VBQUEsbUJBQUE7QUFBQTtBQUlGO0VBQUEsa0JBQUE7RUFBQSxTQUFBO0VBQUEsV0FBQTtFQUNBLGdDQUFBO0FBREE7QUFJQTtFQUFBLGtCQUFBO0VBQUEsa0JBQUE7RUFBQSxjQUFBO0VBQUEsV0FBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFBQSxnQkFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxvQkFBQTtFQUFBLHFEQUFBO0VBQUEsVUFBQTtFQUFBLDRDQUFBO0VBQUEsd0RBQUE7RUFBQSx1R0FBQTtFQUFBLDBCQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEsYUFBQTtBQUFBO0FBQUE7QUFERjtFQUVFLFNBQUE7RUFDQSxZQUFBO0VBQ0EsNkNBQUE7QUFBRjtBQUVFO0FBTkY7SUFPSSxZQUFBO0FBQ0Y7QUFDRjtBQUVJO0VBQUEsYUFBQTtFQUFBLG1CQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsdURBQUE7RUFBQSxnRUFBQTtBQUFBO0FBQUE7RUFBQSxnQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLGFBQUE7QUFBQTtBQUFBO0FBRUU7RUFBQSxvQkFBQTtFQUFBLHFEQUFBO0FBQUE7QUFFRjtFQUNFLGVBQUE7QUFFTjtBQUVJO0VBQUEsa0JBQUE7RUFBQSx5REFBQTtBQUFBO0FBQUE7RUFBQSxrQkFBQTtFQUFBLHlEQUFBO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtBQUFBO0FBRUU7RUFBQSwwQkFBQTtBQUFBO0FBS0o7RUFBQSxrQkFBQTtFQUFBLGNBQUE7RUFBQSxXQUFBO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUFBLGdCQUFBO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEscURBQUE7RUFBQSw0Q0FBQTtFQUFBLHdEQUFBO0VBQUEsdUdBQUE7RUFBQSwwQkFBQTtFQUNBLFNBQUE7RUFDQSxZQUFBO0VBQ0EsNkNBQUE7QUFIQTtBQUtBO0FBTkY7SUFPSSxZQUFBO0FBRUY7QUFDRjtBQUNJO0VBQUEsYUFBQTtFQUFBLG1CQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsdURBQUE7RUFBQSxnRUFBQTtBQUFBO0FBQUE7RUFBQSxnQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLGFBQUE7QUFBQTtBQUFBO0FBRUU7RUFBQSxvQkFBQTtFQUFBLHFEQUFBO0FBQUE7QUFFRjtFQUNFLGVBQUE7QUFHTjtBQUNJO0VBQUEsa0JBQUE7RUFBQSx5REFBQTtBQUFBO0FBQUE7RUFBQSxrQkFBQTtFQUFBLHlEQUFBO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtBQUFBO0FBRUU7RUFBQSwwQkFBQTtBQUFBO0FBT0Y7O0VBQUEsbUJBQUE7RUFBQSxVQUFBO0VBQ0EsMkJBQUE7QUFEQTtBQUdGOztFQUNFLHlCQUFBO0FBRUo7QUFDQTtFQUNFLGVBQUE7QUFFRjtBQUFBO0VBQ0Usa0JBQUE7RUFDQSxVQUFBO0FBR0Y7QUFEQTtFQUNFLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLHdCQUFBO0FBSUY7QUFBRTtFQUFBLGtCQUFBO0VBQUEsWUFBQTtFQUFBLGNBQUE7RUFBQSxxQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLHlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSx5QkFBQTtBQUFBO0FBQUE7QUFBQTtFQUFBLG1EQUFBO1VBQUEsMkNBQUE7RUFBQSxxQkFBQTtFQUFBLGlCQUFBO0VBQUEseURBQUE7RUFBQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsdUJBQUE7QUFIQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uYWN0aXZpdHlfX2hlYWRlciB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMTAwdnc7XFxuICB0b3A6IDBweDtcXG4gIHotaW5kZXg6IDEwMDtcXG5cXG4gIG5hdiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuXFxuICAgIGE6aG92ZXIge1xcbiAgICAgIEBhcHBseSB0ZXh0LXdoaXRlO1xcbiAgICB9XFxuICAgIHVsIHtcXG4gICAgICBAYXBwbHkgZmxleDtcXG4gICAgfVxcbiAgfVxcbiAgLmFkZC1idG4ge1xcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzNzVweCkge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG4gIC51c2VyLW5hdiB7XFxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlcjtcXG4gIH1cXG59XFxuLnRvYXN0IHtcXG4gIEBhcHBseSBhYnNvbHV0ZSAgbGVmdC0yLzQgei01MDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG4ucHJvZmlsZV9fZHJvcGRvd24ge1xcbiAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSByaWdodC0zIHotMjAgYmctd2hpdGUgdGV4dC1sZWZ0IHRleHQtc20gdGV4dC1ibHVlY29yYWwgb3BhY2l0eS0wIHNoYWRvdy1kcm9wZG93biBkdXJhdGlvbi0zMDAgc206cmlnaHQtMTA7XFxuICB0b3A6IDUwcHg7XFxuICB3aWR0aDogMjY1cHg7XFxuICBib3gtc2hhZG93OiA0cHggNHB4IDQwcHggcmdiYSgwLCA1MCwgNzYsIDAuMik7XFxuXFxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCkge1xcbiAgICB3aWR0aDogMjIwcHg7XFxuICB9XFxuXFxuICBsaSB7XFxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMgcC0zIHNtOnAtNDtcXG4gICAgYTpob3ZlciB7XFxuICAgICAgQGFwcGx5IHRleHQtYmx1ZWNvcmFsO1xcbiAgICB9XFxuICAgIC51c2VyLXByb2ZpbGUge1xcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcXG4gICAgfVxcbiAgfVxcbiAgLmRyb3Bkb3duX19saXN0IHtcXG4gICAgQGFwcGx5IGJnLW4tMTAgaG92ZXI6Ymctbi0yMCBob3Zlcjp0ZXh0LWJsdWVjb3JhbDtcXG4gICAgYSB7XFxuICAgICAgQGFwcGx5IGNhcGl0YWxpemU7XFxuICAgIH1cXG4gIH1cXG59XFxuLnByb2ZpbGVfX2Ryb3Bkb3duLS10b3VjaCB7XFxuICBAYXBwbHkgYWJzb2x1dGUgIHJpZ2h0LTUgei0yMCBiZy13aGl0ZSB0ZXh0LWxlZnQgdGV4dC1zbSB0ZXh0LWJsdWVjb3JhbCBzaGFkb3ctZHJvcGRvd24gIGR1cmF0aW9uLTMwMDtcXG4gIHRvcDogNTBweDtcXG4gIHdpZHRoOiAyNjVweDtcXG4gIGJveC1zaGFkb3c6IDRweCA0cHggNDBweCByZ2JhKDAsIDUwLCA3NiwgMC4yKTtcXG5cXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSB7XFxuICAgIHdpZHRoOiAyMjBweDtcXG4gIH1cXG5cXG4gIGxpIHtcXG4gICAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBwLTMgc206cC00O1xcbiAgICBhOmhvdmVyIHtcXG4gICAgICBAYXBwbHkgdGV4dC1ibHVlY29yYWw7XFxuICAgIH1cXG4gICAgLnVzZXItcHJvZmlsZSB7XFxuICAgICAgZm9udC1zaXplOiAyNnB4O1xcbiAgICB9XFxuICB9XFxuICAuZHJvcGRvd25fX2xpc3Qge1xcbiAgICBAYXBwbHkgYmctbi0xMCBob3ZlcjpiZy1uLTIwIGhvdmVyOnRleHQtYmx1ZWNvcmFsO1xcbiAgICBhIHtcXG4gICAgICBAYXBwbHkgY2FwaXRhbGl6ZTtcXG4gICAgfVxcbiAgfVxcbn1cXG4uZHJvcGRvd24tYnRuOmhvdmVyLFxcbi5kcm9wZG93bi1idG46YWN0aXZlIHtcXG4gIC5wcm9maWxlX19kcm9wZG93biB7XFxuICAgIEBhcHBseSB2aXNpYmxlIG9wYWNpdHktMTAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XFxuICB9XFxuICAuZHJvcGRvd25fX2Fycm93IHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG4gIH1cXG59XFxuLmFkZC1pbXBvcnQge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uYWRkLWltcG9ydC1kcm9wZG93biB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4uYWRkLWltcG9ydDpob3ZlciAuYWRkLWltcG9ydC1kcm9wZG93biB7XFxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuXFxuLnNwaW5uZXIge1xcbiAgQGFwcGx5IGFic29sdXRlIHRvcC0zIHJpZ2h0LTcgaW5saW5lLWJsb2NrIGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLW4tMTAgYm9yZGVyLW9wYWNpdHktNTtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgaGVpZ2h0OiAxNXB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5hbGVydFtkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWNhbWVsLTEwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogMXJlbTtcXG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjYyNTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpXFxufVxcbi5hbGVydF9fY29udGFpbmVyW2RhdGEtdi1iNzdiMTFkNF0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBsaW5lLWhlaWdodDogMS41cmVtXFxufVxcbi5hbGVydF9fY29udGVudFtkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyXFxufVxcbi5hbGVydF9fY29udGVudFtkYXRhLXYtYjc3YjExZDRdID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi1yaWdodDogY2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7XFxuICBtYXJnaW4tbGVmdDogY2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpXFxufVxcbi5hbGVydF9fY29udGVudCBzcGFuW2RhdGEtdi1iNzdiMTFkNF0ge1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpXFxufVxcbi5hbGVydF9fbWVzc2FnZVtkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyXFxufVxcbi5hbGVydF9fbWVzc2FnZVtkYXRhLXYtYjc3YjExZDRdID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi1yaWdodDogY2FsYygwLjI1cmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7XFxuICBtYXJnaW4tbGVmdDogY2FsYygwLjI1cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpXFxufVxcbi50ZXh0LXNob3dbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlclxcbn1cXG4udGV4dC1zaG93W2RhdGEtdi1iNzdiMTFkNF0gPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIHtcXG4gIC0tdHctc3BhY2UteC1yZXZlcnNlOiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDAuNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpXFxufVxcbi50ZXh0LXNob3dbZGF0YS12LWI3N2IxMWQ0XSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTBweCwgMzBweClcXG59XFxuLnRleHQtaGlkZVtkYXRhLXYtYjc3YjExZDRdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtLXR3LXRyYW5zbGF0ZS15OiAtMHB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3WCh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSk7XFxuICBhbGlnbi1pdGVtczogY2VudGVyXFxufVxcbi50ZXh0LWhpZGVbZGF0YS12LWI3N2IxMWQ0XSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMC41cmVtICogdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSk7XFxuICBtYXJnaW4tbGVmdDogY2FsYygwLjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSlcXG59XFxuLnRleHQtaGlkZVtkYXRhLXYtYjc3YjExZDRdIHtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zXFxufVxcbi5ib3JkZXItaGlkZVtkYXRhLXYtYjc3YjExZDRdOjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1zYWxtb24tNTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtcztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcXG4gIHdpZHRoOiAycHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSlcXG59XFxuLmJvcmRlci1zaG93W2RhdGEtdi1iNzdiMTFkNF06OmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwcHg7XFxuICB0b3A6IDBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXNhbG1vbi01MCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xcbiAgd2lkdGg6IDJweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKVxcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JNZXNzYWdlLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLHNCQUFBO0VBQUEsa0JBQUE7RUFBQSw2REFBQTtFQUFBLGFBQUE7RUFBQSxxQkFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxrQkFBQTtFQUFBLG9CQUFBO0VBQUE7QUFBQTtBQUdFO0VBQUEsYUFBQTtFQUFBLHNCQUFBO0VBQUE7QUFBQTtBQUdBO0VBQUEsYUFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsb0RBQUE7RUFBQTtBQUFBO0FBR0U7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBO0FBQUE7QUFJRjtFQUFBLGFBQUE7RUFBQTtBQUFBO0FBQUE7RUFBQSx1QkFBQTtFQUFBLHVEQUFBO0VBQUE7QUFBQTtBQUlGO0VBQUEsa0JBQUE7RUFBQSxhQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUEsdUJBQUE7RUFBQSxzREFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBLFVBQUE7RUFBQSwwQkFBQTtFQUNBO0FBREE7QUFJQTtFQUFBLGFBQUE7RUFBQSxzQkFBQTtFQUFBLCtMQUFBO0VBQUE7QUFBQTtBQUFBO0VBQUEsdUJBQUE7RUFBQSxzREFBQTtFQUFBO0FBQUE7QUFBQTtFQUFBO0FBQUE7QUFHQTtFQUFBLGtCQUFBO0VBQUEsU0FBQTtFQUFBLFFBQUE7RUFBQSxzQkFBQTtFQUFBLGtCQUFBO0VBQUEsOERBQUE7RUFBQSwwQkFBQTtFQUFBLHNEQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0E7QUFKQTtBQU9BO0VBQUEsa0JBQUE7RUFBQSxTQUFBO0VBQUEsUUFBQTtFQUFBLHNCQUFBO0VBQUEsa0JBQUE7RUFBQSw4REFBQTtFQUFBLDBCQUFBO0VBQUEsc0RBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQTtBQUpBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5hbGVydCB7XFxuICBAYXBwbHkgcm91bmRlZCBiZy1jYW1lbC0xMCBwLTQgcHItNiB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW4tNTA7XFxuXFxuICAmX19jb250YWluZXIge1xcbiAgICBAYXBwbHkgZmxleCBmbGV4LWNvbCBsZWFkaW5nLTY7XFxuICB9XFxuICAmX19jb250ZW50IHtcXG4gICAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNDtcXG5cXG4gICAgc3BhbiB7XFxuICAgICAgQGFwcGx5IHRleHQtc20gZm9udC1ib2xkIHRleHQtbi01MDtcXG4gICAgfVxcbiAgfVxcbiAgJl9fbWVzc2FnZSB7XFxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTE7XFxuICB9XFxufVxcbi50ZXh0LXNob3cge1xcbiAgQGFwcGx5IGludmlzaWJsZSBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgb3BhY2l0eS0wIGR1cmF0aW9uLTMwMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MHB4LCAzMHB4KTtcXG59XFxuLnRleHQtaGlkZSB7XFxuICBAYXBwbHkgZmxleCAtdHJhbnNsYXRlLXktMCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIGR1cmF0aW9uLTMwMDtcXG59XFxuLmJvcmRlci1oaWRlOjpiZWZvcmUge1xcbiAgQGFwcGx5IGFic29sdXRlIGxlZnQtMCB0b3AtMCByb3VuZGVkIGJnLXNhbG1vbi01MCBkdXJhdGlvbi0zMDAgZWFzZS1vdXQ7XFxuICB3aWR0aDogMnB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xcbn1cXG4uYm9yZGVyLXNob3c6OmJlZm9yZSB7XFxuICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0wIHRvcC0wIHJvdW5kZWQgYmctc2FsbW9uLTUwIGR1cmF0aW9uLTMwMCBlYXNlLW91dDtcXG4gIHdpZHRoOiAycHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5oZWxwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmhlbHBfX3RleHQge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxcmVtO1xcbiAgei1pbmRleDogMjA7XFxufVxcbi5oZWxwX190ZXh0ID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXktcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi10b3A6IGNhbGMoMC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7XFxuICBtYXJnaW4tYm90dG9tOiBjYWxjKDAuMzc1cmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSk7XFxufVxcbi5oZWxwX190ZXh0IHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWVnZ3NoZWxsKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogMXJlbTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBsaW5lLWhlaWdodDogMXJlbTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDIwMG1zO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7XFxuICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG4uaGVscF9fdGV4dCBwIGEge1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuLmhlbHA6aG92ZXIgLmhlbHBfX3RleHQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1cHgpO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcXG4uaGVscDpob3ZlciAuaGVscF9fdGV4dCB7XFxuICAgIHdpZHRoOiAyMDBweDtcXG59XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Ib3ZlclRleHQudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVFO0VBQUEsa0JBQUE7QUFBQTtBQUdFO0VBQUEsa0JBQUE7RUFBQSxrQkFBQTtFQUFBLFNBQUE7RUFBQSxXQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsZ0VBQUE7RUFBQSx5REFBQTtBQUFBO0FBQUE7RUFBQSxzQkFBQTtFQUFBLGtCQUFBO0VBQUEsNkRBQUE7RUFBQSxhQUFBO0VBQUEsZ0JBQUE7RUFBQSxrQkFBQTtFQUFBLGlCQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtFQUFBLFVBQUE7RUFBQSwwQkFBQTtFQUNBLDZCQUFBO0VBQ0EsMkNBQUE7QUFGQTtBQUlBO0VBQ0UsZ0JBQUE7QUFBTjtBQU1FO0VBQ0UsOEJBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7QUFISjtBQUlJO0FBSkY7SUFLSSxZQUFBO0FBREo7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uaGVscCB7XFxuICBAYXBwbHkgcmVsYXRpdmU7XFxuXFxuICAmX190ZXh0IHtcXG4gICAgQGFwcGx5IGludmlzaWJsZSBhYnNvbHV0ZSB0b3AtNCB6LTIwIHNwYWNlLXktMS41IHJvdW5kZWQgYmctZWdnc2hlbGwgcC00IHRleHQtbGVmdCB0ZXh0LXhzIHRleHQtbi00MCBvcGFjaXR5LTAgZHVyYXRpb24tMjAwO1xcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDtcXG4gICAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYigwIDAgMCAvIDEwJSk7XFxuXFxuICAgIHAgYSB7XFxuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uaGVscDpob3ZlciB7XFxuICAuaGVscF9fdGV4dCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNXB4KTtcXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xcbiAgICAgIHdpZHRoOiAyMDBweDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIub3ZlcmxheSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBsZWZ0OiAwcHg7XFxuICB0b3A6IDBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ibGFjayksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIG9wYWNpdHk6IDAuNztcXG4gIHotaW5kZXg6IDEwMFxcbn1cXG4ub3ZlcmxheV9faW5uZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMHB4O1xcbiAgdG9wOiAwcHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJVxcbn1cXG4ub3ZlcmxheV9fY29udGVudCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpXFxufVxcbi5vdmVybGF5X19jb250ZW50IC5zcGlubmVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9ja1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7XFxudG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpXFxufVxcbn1cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbnRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKVxcbn1cXG59XFxuLm92ZXJsYXlfX2NvbnRlbnQgLnNwaW5uZXIge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlO1xcbiAgICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlO1xcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xcbiAgYm9yZGVyLXdpZHRoOiAycHg7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0xMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAwLjA1O1xcbiAgd2lkdGg6IDc1cHg7XFxuICBoZWlnaHQ6IDc1cHg7XFxuICBib3JkZXItdG9wLWNvbG9yOiB3aGl0ZVxcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvTG9hZGVyLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLGVBQUE7RUFBQSxTQUFBO0VBQUEsUUFBQTtFQUFBLFlBQUE7RUFBQSxXQUFBO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUNBLFlBQUE7RUFDQTtBQUZBO0FBS0U7RUFBQSxrQkFBQTtFQUFBLFNBQUE7RUFBQSxRQUFBO0VBQUEsWUFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBLGtCQUFBO0VBQUEsU0FBQTtFQUFBLFFBQUE7RUFDQTtBQURBO0FBSUU7RUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtFQUFBLDBDQUFBO1VBQUEsa0NBQUE7RUFBQSxxQkFBQTtFQUFBLGlCQUFBO0VBQUEseURBQUE7RUFBQSx5QkFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0E7QUFIQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ub3ZlcmxheSB7XFxuICBAYXBwbHkgZml4ZWQgbGVmdC0wIHRvcC0wIGgtZnVsbCB3LWZ1bGwgYmctYmxhY2s7XFxuICBvcGFjaXR5OiAwLjc7XFxuICB6LWluZGV4OiAxMDA7XFxuXFxuICAmX19pbm5lciB7XFxuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgaC1mdWxsIHctZnVsbDtcXG4gIH1cXG5cXG4gICZfX2NvbnRlbnQge1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC0yLzQgdG9wLTIvNDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuXFxuICAgIC5zcGlubmVyIHtcXG4gICAgICBAYXBwbHkgaW5saW5lLWJsb2NrIGFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLW4tMTAgYm9yZGVyLW9wYWNpdHktNTtcXG4gICAgICB3aWR0aDogNzVweDtcXG4gICAgICBoZWlnaHQ6IDc1cHg7XFxuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLm1vZGFsLWFuaW1hdGlvbi1lbnRlci1hY3RpdmVbZGF0YS12LTVhMmJkYTU4XSxcXG4ubW9kYWwtYW5pbWF0aW9uLWxlYXZlLWFjdGl2ZVtkYXRhLXYtNWEyYmRhNThdIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBjdWJpYy1iZXppZXIoMC41MiwgMC4wMiwgMC4xOSwgMS4wMik7XFxufVxcbi5tb2RhbC1hbmltYXRpb24tZW50ZXItZnJvbVtkYXRhLXYtNWEyYmRhNThdLFxcbi5tb2RhbC1hbmltYXRpb24tbGVhdmUtdG9bZGF0YS12LTVhMmJkYTU4XSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWVudGVyLWFjdGl2ZVtkYXRhLXYtNWEyYmRhNThdIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjVzIGN1YmljLWJlemllcigwLjUyLCAwLjAyLCAwLjE5LCAxLjAyKSAwLjE1cztcXG59XFxuLm1vZGFsLWFuaW1hdGlvbi1pbm5lci1sZWF2ZS1hY3RpdmVbZGF0YS12LTVhMmJkYTU4XSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBjdWJpYy1iZXppZXIoMC41MiwgMC4wMiwgMC4xOSwgMS4wMik7XFxufVxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItZW50ZXItZnJvbVtkYXRhLXYtNWEyYmRhNThdIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxufVxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItbGVhdmUtdG9bZGF0YS12LTVhMmJkYTU4XSB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Qb3B1cE1vZGFsLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTs7RUFFRSw2REFBQTtBQUFGO0FBR0E7O0VBRUUsVUFBQTtBQUFGO0FBR0E7RUFDRSwrREFBQTtBQUFGO0FBR0E7RUFDRSx5REFBQTtBQUFGO0FBR0E7RUFDRSxVQUFBO0VBQ0EscUJBQUE7QUFBRjtBQUdBO0VBQ0UscUJBQUE7QUFBRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ubW9kYWwtYW5pbWF0aW9uLWVudGVyLWFjdGl2ZSxcXG4ubW9kYWwtYW5pbWF0aW9uLWxlYXZlLWFjdGl2ZSB7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgY3ViaWMtYmV6aWVyKDAuNTIsIDAuMDIsIDAuMTksIDEuMDIpO1xcbn1cXG5cXG4ubW9kYWwtYW5pbWF0aW9uLWVudGVyLWZyb20sXFxuLm1vZGFsLWFuaW1hdGlvbi1sZWF2ZS10byB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4ubW9kYWwtYW5pbWF0aW9uLWlubmVyLWVudGVyLWFjdGl2ZSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC41cyBjdWJpYy1iZXppZXIoMC41MiwgMC4wMiwgMC4xOSwgMS4wMikgMC4xNXM7XFxufVxcblxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItbGVhdmUtYWN0aXZlIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGN1YmljLWJlemllcigwLjUyLCAwLjAyLCAwLjE5LCAxLjAyKTtcXG59XFxuXFxuLm1vZGFsLWFuaW1hdGlvbi1pbm5lci1lbnRlci1mcm9tIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxufVxcblxcbi5tb2RhbC1hbmltYXRpb24taW5uZXItbGVhdmUtdG8ge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2hpbW1lcl9fYmxvY2tbZGF0YS12LTc0MzU2MTcyXSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogcGxhY2VIb2xkZXJTaGltbWVyLTc0MzU2MTcyO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogcGxhY2VIb2xkZXJTaGltbWVyLTc0MzU2MTcyO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XFxuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjVzO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuNXM7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZWRlZGVkIDE0LjM2JSwgI2Q3ZDZkNiA1Ni4yOSUsICNlZGVkZWQgMTAwJSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAyNDRweCAxMDRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogMTlweDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogM3B4IDZweCAzcHggMHB4O1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgcGxhY2VIb2xkZXJTaGltbWVyLTc0MzU2MTcyIHtcXG4wJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMCUgLSAzMDBweCkgMDtcXG59XFxuMjAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xcbn1cXG44MCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDEwMCUgKyAzMDBweCkgMDtcXG59XFxuMTAwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xcbn1cXG59XFxuQGtleWZyYW1lcyBwbGFjZUhvbGRlclNoaW1tZXItNzQzNTYxNzIge1xcbjAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xcbn1cXG4yMCUge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDAlIC0gMzAwcHgpIDA7XFxufVxcbjgwJSB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNhbGMoMTAwJSArIDMwMHB4KSAwO1xcbn1cXG4xMDAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlICsgMzAwcHgpIDA7XFxufVxcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvU2hpbW1lckxvYWRpbmcudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNBO0VBQ0UsOEJBQUE7VUFBQSxzQkFBQTtFQUNBLHFDQUFBO1VBQUEsNkJBQUE7RUFDQSwyQ0FBQTtVQUFBLG1DQUFBO0VBQ0EsbURBQUE7VUFBQSwyQ0FBQTtFQUNBLHlDQUFBO1VBQUEsaUNBQUE7RUFDQSw2QkFBQTtVQUFBLHFCQUFBO0VBQ0EseUJBQUE7RUFDQSxzRkFBQTtFQUNBLDRCQUFBO0VBQ0EsNEJBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7RUFDQSx1QkFBQTtBQUFGO0FBR0E7QUFDRTtJQUNFLHVDQUFBO0FBQUY7QUFHQTtJQUNFLHVDQUFBO0FBREY7QUFJQTtJQUNFLHlDQUFBO0FBRkY7QUFLQTtJQUNFLHlDQUFBO0FBSEY7QUFDRjtBQVpBO0FBQ0U7SUFDRSx1Q0FBQTtBQUFGO0FBR0E7SUFDRSx1Q0FBQTtBQURGO0FBSUE7SUFDRSx5Q0FBQTtBQUZGO0FBS0E7SUFDRSx5Q0FBQTtBQUhGO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLnNoaW1tZXJfX2Jsb2NrIHtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XFxuICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbiAgYW5pbWF0aW9uLW5hbWU6IHBsYWNlSG9sZGVyU2hpbW1lcjtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcXG4gIGFuaW1hdGlvbi1kZWxheTogMC41cztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlZGVkZWQgMTQuMzYlLCAjZDdkNmQ2IDU2LjI5JSwgI2VkZWRlZCAxMDAlKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDI0NHB4IDEwNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxOXB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAzcHggNnB4IDNweCAwcHg7XFxufVxcblxcbkBrZXlmcmFtZXMgcGxhY2VIb2xkZXJTaGltbWVyIHtcXG4gIDAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xcbiAgfVxcblxcbiAgMjAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygwJSAtIDMwMHB4KSAwO1xcbiAgfVxcblxcbiAgODAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlICsgMzAwcHgpIDA7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlICsgMzAwcHgpIDA7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5lcnJvcnNbZGF0YS12LWY2N2M3ZTcyXSB7XFxuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAycHhcXG59XFxuLmVycm9yc19faGVhZFtkYXRhLXYtZjY3YzdlNzJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBwYWRkaW5nOiAxcmVtXFxufVxcbi5lcnJvcnNfX2hlYWQtLXRpdGxlW2RhdGEtdi1mNjdjN2U3Ml0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWdyb3c6IDE7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS42MjVcXG59XFxuLmVycm9yc19fbGlzdFtkYXRhLXYtZjY3YzdlNzJdIHtcXG4gICAgaGVpZ2h0OiAwcHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYWxsO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXNcXG59XFxuLmVycm9yc19fbGlzdCB1bFtkYXRhLXYtZjY3YzdlNzJdIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxLjVyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbVxcbn1cXG4uZXJyb3JzX19saXN0IGxpW2RhdGEtdi1mNjdjN2U3Ml0ge1xcbiAgICBwYWRkaW5nLXRvcDogMXJlbTtcXG4gICAgcGFkZGluZy1ib3R0b206IDFyZW07XFxuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgICBsaW5lLWhlaWdodDogMS41XFxufVxcbi5lcnJvcnNfX2xpc3QgbGlbZGF0YS12LWY2N2M3ZTcyXTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xcbiAgICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0yMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSlcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL0Vycm9yTGlzdHMudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVFO0lBQUE7QUFBQTtBQUVFO0lBQUEsYUFBQTtJQUFBLDhCQUFBO0lBQUE7QUFBQTtBQUdFO0lBQUEsYUFBQTtJQUFBLFlBQUE7SUFBQSxtQkFBQTtJQUFBLG1CQUFBO0lBQUEsb0JBQUE7SUFBQTtBQUFBO0FBS0Y7SUFBQSxXQUFBO0lBQUEsZ0JBQUE7SUFBQSxrQkFBQTtJQUFBLG1CQUFBO0lBQUEsd0JBQUE7SUFBQSx3REFBQTtJQUFBO0FBQUE7QUFFRTtJQUFBLG9CQUFBO0lBQUE7QUFBQTtBQUdBO0lBQUEsaUJBQUE7SUFBQSxvQkFBQTtJQUFBLG1CQUFBO0lBQUEsb0JBQUE7SUFBQTtBQUFBO0FBR0E7SUFBQSx3QkFBQTtJQUFBLHNCQUFBO0lBQUE7QUFBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uZXJyb3JzIHtcXG4gIEBhcHBseSBib3JkZXItbC0yO1xcbiAgJl9faGVhZCB7XFxuICAgIEBhcHBseSBmbGV4IGp1c3RpZnktYmV0d2VlbiBwLTQ7XFxuXFxuICAgICYtLXRpdGxlIHtcXG4gICAgICBAYXBwbHkgZmxleCBncm93IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgJl9fbGlzdCB7XFxuICAgIEBhcHBseSBoLTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwO1xcbiAgICB1bCB7XFxuICAgICAgQGFwcGx5IHB4LTY7XFxuICAgIH1cXG4gICAgbGkge1xcbiAgICAgIEBhcHBseSBweS00IHRleHQtc20gbGVhZGluZy1ub3JtYWw7XFxuICAgIH1cXG4gICAgbGk6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgQGFwcGx5IGJvcmRlci1iIGJvcmRlci1uLTIwO1xcbiAgICB9XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5wcm9ncmVzc19iYXJbZGF0YS12LTVjMzJiZjBjXSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICBsZWZ0OiAwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogOTk5O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG59XFxuLnByb2dyZXNzX2Jhcl9fd3JhcHBlcltkYXRhLXYtNWMzMmJmMGNdIHtcXG4gIHdpZHRoOiAyNTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRjNGM0O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnByb2dyZXNzX2Jhcl9fdmlld2VyW2RhdGEtdi01YzMyYmYwY10ge1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1zcHJpbmctNTApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBoZWlnaHQ6IDRweDtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbn1cXG4ucHJvZ3Jlc3NfYmFyLmFuaW1hdGUtbG9hZGVyIC5wcm9ncmVzc19iYXJfX3ZpZXdlcltkYXRhLXYtNWMzMmJmMGNdIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBGaWxsQW5pbWF0aW9uLTVjMzJiZjBjIDZzIGN1YmljLWJlemllcigwLjAxLCAxLjA2LCAwLjcxLCAxKSBmb3J3YXJkcztcXG4gICAgICAgICAgYW5pbWF0aW9uOiBGaWxsQW5pbWF0aW9uLTVjMzJiZjBjIDZzIGN1YmljLWJlemllcigwLjAxLCAxLjA2LCAwLjcxLCAxKSBmb3J3YXJkcztcXG59XFxuLnByb2dyZXNzX2Jhci5hbmltYXRlLWxvYWRlciAucHJvZ3Jlc3NfYmFyX19zdGF0ZVtkYXRhLXYtNWMzMmJmMGNdOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogVGV4dENoYW5nZS01YzMyYmYwYyA2cyBjdWJpYy1iZXppZXIoMC4wMSwgMS4wNiwgMC43MSwgMSkgZm9yd2FyZHM7XFxuICAgICAgICAgIGFuaW1hdGlvbjogVGV4dENoYW5nZS01YzMyYmYwYyA2cyBjdWJpYy1iZXppZXIoMC4wMSwgMS4wNiwgMC43MSwgMSkgZm9yd2FyZHM7XFxufVxcbi5wcm9ncmVzc19iYXJfX2NvbnRlbnRbZGF0YS12LTVjMzJiZjBjXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnByb2dyZXNzX2Jhcl9fc3RhdGVbZGF0YS12LTVjMzJiZjBjXSB7XFxuICBtYXJnaW4tdG9wOiAxLjVyZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsLTUwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBGaWxsQW5pbWF0aW9uLTVjMzJiZjBjIHtcXG4wJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG59XFxuMTAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbn1cXG4yMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjAyOCk7XFxufVxcbjI1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbn1cXG4zNSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG59XFxuNDUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxufVxcbjUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG59XFxuNjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbn1cXG43MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjYyNCk7XFxufVxcbjc1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG59XFxuODUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbn1cXG45NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjkyOCk7XFxufVxcbjEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTtcXG59XFxufVxcbkBrZXlmcmFtZXMgRmlsbEFuaW1hdGlvbi01YzMyYmYwYyB7XFxuMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjAyOCk7XFxufVxcbjEwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMDI4KTtcXG59XFxuMjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbn1cXG4yNSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG59XFxuMzUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxufVxcbjQ1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbn1cXG41MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjYyNCk7XFxufVxcbjYwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNjI0KTtcXG59XFxuNzAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbn1cXG43NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjkyOCk7XFxufVxcbjg1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOTI4KTtcXG59XFxuOTUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbn1cXG4xMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7XFxufVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgVGV4dENoYW5nZS01YzMyYmYwYyB7XFxuMCUge1xcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtc3RhcnQpO1xcbn1cXG45NSUge1xcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtc3RhcnQpO1xcbn1cXG4xMDAlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLWVuZCk7XFxufVxcbn1cXG5Aa2V5ZnJhbWVzIFRleHRDaGFuZ2UtNWMzMmJmMGMge1xcbjAlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG59XFxuOTUlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG59XFxuMTAwJSB7XFxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1lbmQpO1xcbn1cXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLGVBQUE7RUFBQSxTQUFBO0VBQUEsYUFBQTtFQUFBLFdBQUE7RUFBQSxtQkFBQTtFQUFBLHVCQUFBO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUNBLE1BQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtBQUhBO0FBTUU7RUFBQSxZQUFBO0VBQUEsbUJBQUE7RUFDQSx5QkFBQTtFQUNBLGdCQUFBO0FBRkE7QUFNQTtFQUFBLGtCQUFBO0VBQUEsOERBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxvQkFBQTtFQUNBLHFCQUFBO0FBSkE7QUFPRjtFQUNFLHVGQUFBO1VBQUEsK0VBQUE7QUFGSjtBQUtFO0VBQ0UsV0FBQTtFQUNBLG9GQUFBO1VBQUEsNEVBQUE7QUFISjtBQU9JO0VBQUEsYUFBQTtFQUFBLHNCQUFBO0FBQUE7QUFJQTtFQUFBLGtCQUFBO0VBQUEsa0JBQUE7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0JBQUE7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUEsd0RBQUE7QUFBQTtBQUlKO0FBQ0U7SUFDRSx3QkFBQTtBQU5GO0FBUUE7SUFDRSx3QkFBQTtBQU5GO0FBUUE7SUFDRSx3QkFBQTtBQU5GO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBVUE7SUFDRSx3QkFBQTtBQVJGO0FBV0E7SUFDRSx3QkFBQTtBQVRGO0FBWUE7SUFDRSx3QkFBQTtBQVZGO0FBYUE7SUFDRSx3QkFBQTtBQVhGO0FBY0E7SUFDRSx3QkFBQTtBQVpGO0FBZUE7SUFDRSx3QkFBQTtBQWJGO0FBZ0JBO0lBQ0Usb0JBQUE7QUFkRjtBQUNGO0FBakNBO0FBQ0U7SUFDRSx3QkFBQTtBQU5GO0FBUUE7SUFDRSx3QkFBQTtBQU5GO0FBUUE7SUFDRSx3QkFBQTtBQU5GO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBU0E7SUFDRSx1QkFBQTtBQVBGO0FBVUE7SUFDRSx3QkFBQTtBQVJGO0FBV0E7SUFDRSx3QkFBQTtBQVRGO0FBWUE7SUFDRSx3QkFBQTtBQVZGO0FBYUE7SUFDRSx3QkFBQTtBQVhGO0FBY0E7SUFDRSx3QkFBQTtBQVpGO0FBZUE7SUFDRSx3QkFBQTtBQWJGO0FBZ0JBO0lBQ0Usb0JBQUE7QUFkRjtBQUNGO0FBaUJBO0FBQ0U7SUFDRSx5QkFBQTtBQWZGO0FBa0JBO0lBQ0UseUJBQUE7QUFoQkY7QUFtQkE7SUFDRSx1QkFBQTtBQWpCRjtBQUNGO0FBTUE7QUFDRTtJQUNFLHlCQUFBO0FBZkY7QUFrQkE7SUFDRSx5QkFBQTtBQWhCRjtBQW1CQTtJQUNFLHVCQUFBO0FBakJGO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLnByb2dyZXNzX2JhciB7XFxuICBAYXBwbHkgZml4ZWQgbGVmdC0wIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZTtcXG4gIHRvcDogMDtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGhlaWdodDogMTAwdmg7XFxuXFxuICAmX193cmFwcGVyIHtcXG4gICAgQGFwcGx5IHctWzI1MHB4XSBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC0yeGw7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNjNGM0YzQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuXFxuICAmX192aWV3ZXIge1xcbiAgICBAYXBwbHkgYmctc3ByaW5nLTUwO1xcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgIGhlaWdodDogNHB4O1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKTtcXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbiAgfVxcblxcbiAgJi5hbmltYXRlLWxvYWRlciAmX192aWV3ZXIge1xcbiAgICBhbmltYXRpb246IEZpbGxBbmltYXRpb24gNnMgY3ViaWMtYmV6aWVyKDAuMDEsIDEuMDYsIDAuNzEsIDEpIGZvcndhcmRzO1xcbiAgfVxcblxcbiAgJi5hbmltYXRlLWxvYWRlciAmX19zdGF0ZTo6YmVmb3JlIHtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIGFuaW1hdGlvbjogVGV4dENoYW5nZSA2cyBjdWJpYy1iZXppZXIoMC4wMSwgMS4wNiwgMC43MSwgMSkgZm9yd2FyZHM7XFxuICB9XFxuXFxuICAmX19jb250ZW50IHtcXG4gICAgQGFwcGx5IGZsZXggZmxleC1jb2w7XFxuICB9XFxuXFxuICAmX19zdGF0ZSB7XFxuICAgIEBhcHBseSBtdC02IHRleHQtY2VudGVyIHRleHQtc20gZm9udC1ib2xkIGxlYWRpbmctbm9ybWFsIHRleHQtYmx1ZS01MDtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyBGaWxsQW5pbWF0aW9uIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbiAgfVxcbiAgMTAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbiAgfVxcbiAgMjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4wMjgpO1xcbiAgfVxcblxcbiAgMjUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC4yNCk7XFxuICB9XFxuICAzNSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjI0KTtcXG4gIH1cXG4gIDQ1JSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuMjQpO1xcbiAgfVxcblxcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbiAgfVxcblxcbiAgNjAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbiAgfVxcblxcbiAgNzAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC42MjQpO1xcbiAgfVxcblxcbiAgNzUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbiAgfVxcblxcbiAgODUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbiAgfVxcblxcbiAgOTUlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC45MjgpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xcbiAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIFRleHRDaGFuZ2Uge1xcbiAgMCUge1xcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtc3RhcnQpO1xcbiAgfVxcblxcbiAgOTUlIHtcXG4gICAgY29udGVudDogYXR0cihkYXRhLXN0YXJ0KTtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtZW5kKTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnZhbGlkYXRpb25bZGF0YS12LTFlMzhkMTBlXSB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjVyZW07XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjVyZW07XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IGFsbDtcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XFxuICBib3gtc2hhZG93OiAwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpXFxufVxcbi52YWxpZGF0aW9uX19lcnJvckhlYWRbZGF0YS12LTFlMzhkMTBlXSB7XFxuICB3aWR0aDogMjEycHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWNyaW1zb24tMjApLCB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1jcmltc29uLTEwKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKVxcbn1cXG4udmFsaWRhdGlvbl9fZXJyb3JzW2RhdGEtdi0xZTM4ZDEwZV0ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwcHg7XFxuICByaWdodDogMHB4O1xcbiAgei1pbmRleDogMTA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgd2lkdGg6IDQyNHB4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLXdoaXRlKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweClcXG59XFxuLnZhbGlkYXRpb25fX2hlYWRpbmdbZGF0YS12LTFlMzhkMTBlXSB7XFxuICBwYWRkaW5nLWxlZnQ6IDFyZW07XFxuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xcbiAgcGFkZGluZy10b3A6IDAuNzVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVxcbn1cXG4udmFsaWRhdGlvbl9fZXJyb3JzLWxpc3RbZGF0YS12LTFlMzhkMTBlXSB7XFxuICBmbGV4LWdyb3c6IDE7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcXG4gIHBhZGRpbmctdG9wOiAwLjc1cmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cXG59XFxuLnZhbGlkYXRpb25fX3RvZ2dsZVtkYXRhLXYtMWUzOGQxMGVdIHtcXG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxcmVtO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbC01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpXFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9TdGlja3lFcnJvcnMudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVFO0VBQUEsOEJBQUE7RUFBQSxpQ0FBQTtFQUFBLGlCQUFBO0VBQUEsd0JBQUE7RUFBQSx3REFBQTtFQUFBLDBCQUFBO0VBQ0E7QUFEQTtBQUlFO0VBQUEsWUFBQTtFQUFBLHNCQUFBO0VBQUEsK0RBQUE7RUFBQSxrQkFBQTtFQUFBLCtEQUFBO0VBQ0E7QUFEQTtBQUtBO0VBQUEsa0JBQUE7RUFBQSxRQUFBO0VBQUEsVUFBQTtFQUFBLFdBQUE7RUFBQSxhQUFBO0VBQUEsWUFBQTtFQUFBLHNCQUFBO0VBQUEsZ0JBQUE7RUFBQSxzQkFBQTtFQUFBLDBEQUFBO0VBQUEsa0JBQUE7RUFBQSwwREFBQTtFQUNBO0FBREE7QUFLQTtFQUFBLGtCQUFBO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBLFlBQUE7RUFBQSxnQkFBQTtFQUFBLGtCQUFBO0VBQUEsbUJBQUE7RUFBQSxvQkFBQTtFQUFBO0FBQUE7QUFJQTtFQUFBLGtCQUFBO0VBQUEsaUJBQUE7RUFBQSx5QkFBQTtFQUFBLGdCQUFBO0VBQUEsb0JBQUE7RUFBQTtBQUFBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi52YWxpZGF0aW9uIHtcXG4gIEBhcHBseSByb3VuZGVkLXRsLWxnIHJvdW5kZWQtYmwtbGcgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMDtcXG4gIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuXFxuICAmX19lcnJvckhlYWQge1xcbiAgICBAYXBwbHkgdy1bMjEycHhdIGJvcmRlci1jcmltc29uLTIwIGJnLWNyaW1zb24tMTA7XFxuICAgIGJveC1zaGFkb3c6IDBweCA0cHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICB9XFxuXFxuICAmX19lcnJvcnMge1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCB6LTEwIGZsZXggdy1bNDI0cHhdIGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBib3JkZXItd2hpdGUgYmctd2hpdGU7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KTtcXG4gIH1cXG5cXG4gICZfX2hlYWRpbmcge1xcbiAgICBAYXBwbHkgcHgtNCBweS0zO1xcbiAgfVxcblxcbiAgJl9fZXJyb3JzLWxpc3Qge1xcbiAgICBAYXBwbHkgZ3JvdyBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0zO1xcbiAgfVxcblxcbiAgJl9fdG9nZ2xlIHtcXG4gICAgQGFwcGx5IHRleHQteHMgdXBwZXJjYXNlIGxlYWRpbmctbm9ybWFsIHRleHQtYmx1ZS01MDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnBhZ2UtaGVpZ2h0IHtcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9BY3Rpdml0eUluZGV4LnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTtFQUNFLDhCQUFBO0FBQUZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuLnBhZ2UtaGVpZ2h0IHtcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmZvcm0tZ3JvdXBbZGF0YS12LWM3Y2EyOGI4XSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjVyZW07XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0yMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG4uZm9ybS1ncm91cFtkYXRhLXYtYzdjYTI4YjhdOmxhc3QtY2hpbGQge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuLmZvcm0tZ3JvdXAgLmZvcm1fX2NvbnRlbnRbZGF0YS12LWM3Y2EyOGI4XSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgZ2FwOiAyNXB4O1xcbn1cXG4uZm9ybS1ncm91cCAuZm9ybV9fY29udGVudCAubGFiZWwtZmllbGRbZGF0YS12LWM3Y2EyOGI4XSB7XFxuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLmZvcm0tZ3JvdXAtdGl0bGUtY29udGFpbmVyW2RhdGEtdi1jN2NhMjhiOF0ge1xcbiAgbWFyZ2luLWJvdHRvbTogMC4zNzVyZW07XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZm9ybS1ncm91cC10aXRsZS1jb250YWluZXJbZGF0YS12LWM3Y2EyOGI4XSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkge1xcbiAgLS10dy1zcGFjZS14LXJldmVyc2U6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoMC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKTtcXG59XFxuLmZvcm0tZ3JvdXAtdGl0bGVbZGF0YS12LWM3Y2EyOGI4XSB7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBsaW5lLWhlaWdodDogMXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0NyZWF0ZU1vZGFsLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLHFCQUFBO0VBQUEsaUJBQUE7RUFBQSxzQkFBQTtFQUFBLHlEQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUVBO0VBQ0UsZ0JBQUE7QUFBSjtBQUdFO0VBQ0UsYUFBQTtFQUNBLFNBQUE7QUFESjtBQUlNO0VBQUEscUJBQUE7RUFBQSxhQUFBO0VBQUEsbUJBQUE7RUFBQSw4QkFBQTtBQUFBO0FBS0o7RUFBQSx1QkFBQTtFQUFBLGFBQUE7QUFBQTtBQUFBO0VBQUEsdUJBQUE7RUFBQSx1REFBQTtFQUFBLGdFQUFBO0FBQUE7QUFHQTtFQUFBLGtCQUFBO0VBQUEsaUJBQUE7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUEscURBQUE7QUFBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uZm9ybS1ncm91cCB7XFxuICBAYXBwbHkgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLW4tMjAgcC01O1xcblxcbiAgJjpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG5cXG4gIC5mb3JtX19jb250ZW50IHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgZ2FwOiAyNXB4O1xcblxcbiAgICAubGFiZWwtZmllbGQge1xcbiAgICAgIEBhcHBseSBtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbjtcXG4gICAgfVxcbiAgfVxcbn1cXG4uZm9ybS1ncm91cC10aXRsZS1jb250YWluZXIge1xcbiAgQGFwcGx5IG1iLTEuNSBmbGV4IHNwYWNlLXgtMTtcXG59XFxuLmZvcm0tZ3JvdXAtdGl0bGUge1xcbiAgQGFwcGx5IHRleHQteHMgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIubWludXNbZGF0YS12LWQwYjgwMmRhXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiAwLjc1cmVtO1xcbiAgd2lkdGg6IDAuNzVyZW07XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4ubWludXNbZGF0YS12LWQwYjgwMmRhXTpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMC4xMjVyZW07XFxuICB3aWR0aDogMC43NXJlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbC01MCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG59XFxuI3B1Ymxpc2hpbmdfYWN0aXZpdGllc1tkYXRhLXYtZDBiODAyZGFdIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGJvdHRvbTogMHB4O1xcbiAgcmlnaHQ6IDBweDtcXG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKSk7XFxufVxcbi5yb2xsaW5nW2RhdGEtdi1kMGI4MDJkYV0ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbi1kMGI4MDJkYSB7XFxudG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbn1cXG59XFxuQGtleWZyYW1lcyBzcGluLWQwYjgwMmRhIHtcXG50byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxufVxcbn1cXG4ucm9sbGluZ1tkYXRhLXYtZDBiODAyZGFdIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzcGluLWQwYjgwMmRhIDFzIGxpbmVhciBpbmZpbml0ZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBzcGluLWQwYjgwMmRhIDFzIGxpbmVhciBpbmZpbml0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcXG4gIGJvcmRlci13aWR0aDogMnB4O1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1uLTIwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XFxufVxcbi5jcm9zc1tkYXRhLXYtZDBiODAyZGFdIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xcbiAgaGVpZ2h0OiAwLjc1cmVtO1xcbiAgd2lkdGg6IDAuNzVyZW07XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uY3Jvc3NbZGF0YS12LWQwYjgwMmRhXTpiZWZvcmUsIC5jcm9zc1tkYXRhLXYtZDBiODAyZGFdOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogNTAlO1xcbiAgdG9wOiAwcHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMC43NXJlbTtcXG4gIHdpZHRoOiAwLjEyNXJlbTtcXG4gIC0tdHctdHJhbnNsYXRlLXg6IC01MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksIHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWJsdWVjb3JhbC01MCksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG59XFxuLmNyb3NzW2RhdGEtdi1kMGI4MDJkYV06YmVmb3JlIHtcXG4gIC0tdHctcm90YXRlOiA0NWRlZztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSwgdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tld1godmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpO1xcbn1cXG4uY3Jvc3NbZGF0YS12LWQwYjgwMmRhXTphZnRlciB7XFxuICAtLXR3LXJvdGF0ZTogLTQ1ZGVnO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3WCh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSk7XFxufVxcbi5hY3Rpdml0eS10aXRsZVtkYXRhLXYtZDBiODAyZGFdIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLGFBQUE7RUFBQSxlQUFBO0VBQUEsY0FBQTtFQUFBLG1CQUFBO0FBQUE7QUFDQTtFQUNFLFdBQUE7RUFDQSxjQUFBO0VBQUEsZ0JBQUE7RUFBQSxjQUFBO0VBQUEsc0JBQUE7RUFBQSxrQkFBQTtFQUFBLGlFQUFBO0FBQ0o7QUFJRTtFQUFBLGVBQUE7RUFBQSxXQUFBO0VBQUEsVUFBQTtFQUNBLG9EQUFBO0FBREE7QUFLQTtFQUFBLHFCQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEseUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLHlCQUFBO0FBQUE7QUFBQTtBQUFBO0VBQUEsbURBQUE7VUFBQSwyQ0FBQTtFQUFBLHFCQUFBO0VBQUEsaUJBQUE7RUFBQSxzQkFBQTtFQUFBLHlEQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSx1QkFBQTtBQUhBO0FBT0E7RUFBQSxrQkFBQTtFQUFBLG9CQUFBO0VBQUEsZUFBQTtFQUFBLGNBQUE7RUFBQSxnQkFBQTtBQUFBO0FBRUE7RUFFRSxXQUFBO0VBQ0Esa0JBQUE7RUFBQSxTQUFBO0VBQUEsUUFBQTtFQUFBLGNBQUE7RUFBQSxlQUFBO0VBQUEsZUFBQTtFQUFBLHNCQUFBO0VBQUEsK0xBQUE7RUFBQSxzQkFBQTtFQUFBLGtCQUFBO0VBQUEsaUVBQUE7QUFESjtBQUtJO0VBQUEsa0JBQUE7RUFBQSwrTEFBQTtBQUFBO0FBSUE7RUFBQSxtQkFBQTtFQUFBLCtMQUFBO0FBQUE7QUFJSjtFQUNFLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtBQUpGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5taW51cyB7XFxuICBAYXBwbHkgZmxleCBoLTMgdy0zIGl0ZW1zLWNlbnRlcjtcXG4gICY6YmVmb3JlIHtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIEBhcHBseSBibG9jayBoLTAuNSB3LTMgcm91bmRlZC14bCBiZy1ibHVlLTUwO1xcbiAgfVxcbn1cXG5cXG4jcHVibGlzaGluZ19hY3Rpdml0aWVzIHtcXG4gIEBhcHBseSBmaXhlZCBib3R0b20tMCByaWdodC0wO1xcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwcHggNHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjEpKTtcXG59XFxuXFxuLnJvbGxpbmcge1xcbiAgQGFwcGx5IGlubGluZS1ibG9jayBhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1uLTIwO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXItdG9wLWNvbG9yOiB3aGl0ZTtcXG59XFxuXFxuLmNyb3NzIHtcXG4gIEBhcHBseSByZWxhdGl2ZSBtbC01IGgtMyB3LTMgb3ZlcmZsb3ctaGlkZGVuO1xcblxcbiAgJjpiZWZvcmUsXFxuICAmOmFmdGVyIHtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIEBhcHBseSBhYnNvbHV0ZSBsZWZ0LTEvMiB0b3AtMCBibG9jayBoLTMgdy0wLjUgLXRyYW5zbGF0ZS14LTEvMiByb3VuZGVkLXhsIGJnLWJsdWUtNTA7XFxuICB9XFxuXFxuICAmOmJlZm9yZSB7XFxuICAgIEBhcHBseSByb3RhdGUtNDU7XFxuICB9XFxuXFxuICAmOmFmdGVyIHtcXG4gICAgQGFwcGx5IC1yb3RhdGUtNDU7XFxuICB9XFxufVxcblxcbi5hY3Rpdml0eS10aXRsZSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuYWNjb3JkaW9uLWNvbnRlbnRbZGF0YS12LTA2M2NiZDg2XSB7XFxuICBoZWlnaHQ6IDBweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBhbGw7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xcbn1cXG4uYWNjb3JkaW9uLWNvbnRlbnQgZGl2W2RhdGEtdi0wNjNjYmQ4Nl0ge1xcbiAgbWFyZ2luLXRvcDogMXJlbTtcXG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbi0yMCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbn1cXG4uYWN0aXZpdHktdGl0bGVbZGF0YS12LTA2M2NiZDg2XSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9FcnJvckl0ZW0udnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVFO0VBQUEsV0FBQTtFQUFBLGdCQUFBO0VBQUEsd0JBQUE7RUFBQSx3REFBQTtFQUFBLDBCQUFBO0FBQUE7QUFFRTtFQUFBLGdCQUFBO0VBQUEscUJBQUE7RUFBQSxzQkFBQTtFQUFBLHlEQUFBO0VBQUEsb0JBQUE7RUFBQSx1QkFBQTtBQUFBO0FBSUo7RUFDRSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUFBRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uYWNjb3JkaW9uLWNvbnRlbnQge1xcbiAgQGFwcGx5IGgtMCBvdmVyZmxvdy1oaWRkZW4gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwO1xcbiAgZGl2IHtcXG4gICAgQGFwcGx5IG10LTQgYm9yZGVyLXQgYm9yZGVyLW4tMjAgcHktMztcXG4gIH1cXG59XFxuXFxuLmFjdGl2aXR5LXRpdGxlIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5hY3Rpdml0aWVzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLmFjdGl2aXRpZXMgLmVsZW1lbnRzIHtcXG4gIGJvcmRlci1yYWRpdXM6IDBweCA4cHggOHB4IDBweDtcXG4gIHdpZHRoOiAxMjVweDtcXG4gIG1pbi1oZWlnaHQ6IDE3NHB4O1xcbn1cXG4uYWN0aXZpdGllcyAuZWxlbWVudHNfX3BhbmVsIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcXG4gIHBhZGRpbmc6IDFyZW07XFxuICAtLXR3LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC0tdHctc2hhZG93LWNvbG9yZWQ6IDBweCA0cHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctc2hhZG93KTtcXG59XFxuLmFjdGl2aXRpZXMgLmVsZW1lbnRzX19wYW5lbCAucGFuZWxfX2lucHV0OmZvY3VzLCBcXG4uYWN0aXZpdGllcyAuZWxlbWVudHNfX3BhbmVsIC5wYW5lbF9fc2VhcmNoOmZvY3VzIHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4uYWN0aXZpdGllcyAuaG92ZXJfX3RleHQge1xcbiAgbWFyZ2luLWxlZnQ6IDAuMjVyZW07XFxufVxcbi5hY3Rpdml0aWVzIC5idXR0b25fX2Ryb3Bkb3duIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwcHg7XFxuICB0b3A6IDEwMCU7XFxuICB6LWluZGV4OiAxMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICAtLXR3LXNoYWRvdzogMHB4IDRweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIC0tdHctc2hhZG93LWNvbG9yZWQ6IDBweCA0cHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSwgdmFyKC0tdHctc2hhZG93KTtcXG4gIG1pbi13aWR0aDogMTUwcHg7XFxufVxcbi5hY3Rpdml0aWVzIC5idXR0b25fX2Ryb3Bkb3duIGxpIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwYWRkaW5nLXRvcDogMC4zNzVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMC4zNzVyZW07XFxuICBwYWRkaW5nLWxlZnQ6IDAuODc1cmVtO1xcbiAgcGFkZGluZy1yaWdodDogMC44NzVyZW07XFxufVxcbi5hY3Rpdml0aWVzIC5idXR0b25fX2Ryb3Bkb3duIGxpOmhvdmVyIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbi5hY3Rpdml0aWVzIC5idXR0b25fX2Ryb3Bkb3duIGxpIHN2ZyB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQTtFQUNFLGtCQUFBO0FBQUY7QUFDRTtFQUNFLDhCQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0FBQ0o7QUFHSTtFQUFBLHFCQUFBO0VBQUEsYUFBQTtFQUFBLDRDQUFBO0VBQUEsd0RBQUE7RUFBQSx1R0FBQTtBQUFBO0FBSUU7O0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBO0FBS0Y7RUFBQSxvQkFBQTtBQUFBO0FBR0E7RUFBQSxrQkFBQTtFQUFBLFVBQUE7RUFBQSxTQUFBO0VBQUEsV0FBQTtFQUFBLGdCQUFBO0VBQUEsNENBQUE7RUFBQSx3REFBQTtFQUFBLHVHQUFBO0VBQ0EsZ0JBQUE7QUFEQTtBQUlFO0VBQUEsYUFBQTtFQUFBLHFCQUFBO0VBQUEsd0JBQUE7RUFBQSxzQkFBQTtFQUFBLHVCQUFBO0FBQUE7QUFBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7QUFBQTtBQUdFO0VBQUEscUJBQUE7QUFBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4uYWN0aXZpdGllcyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAuZWxlbWVudHMge1xcbiAgICBib3JkZXItcmFkaXVzOiAwcHggOHB4IDhweCAwcHg7XFxuICAgIHdpZHRoOiAxMjVweDtcXG4gICAgbWluLWhlaWdodDogMTc0cHg7XFxuICB9XFxuXFxuICAuZWxlbWVudHNfX3BhbmVsIHtcXG4gICAgQGFwcGx5IHJvdW5kZWQtbGcgcC00IHNoYWRvdy1kcm9wZG93bjtcXG5cXG4gICAgLnBhbmVsX19pbnB1dDpmb2N1cyxcXG4gICAgLnBhbmVsX19zZWFyY2g6Zm9jdXMge1xcbiAgICAgIEBhcHBseSB0ZXh0LW4tNDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5ob3Zlcl9fdGV4dCB7XFxuICAgIEBhcHBseSBtbC0xO1xcbiAgfVxcbiAgLmJ1dHRvbl9fZHJvcGRvd24ge1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgcmlnaHQtMCB0b3AtZnVsbCB6LTEwIHRleHQtbGVmdCBzaGFkb3ctZHJvcGRvd247XFxuICAgIG1pbi13aWR0aDogMTUwcHg7XFxuXFxuICAgIGxpIHtcXG4gICAgICBAYXBwbHkgZmxleCBweS0xLjUgcHgtMy41IGhvdmVyOmJnLXdoaXRlO1xcblxcbiAgICAgIHN2ZyB7XFxuICAgICAgICBAYXBwbHkgbXItMTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLm1hbmRhdG9yeTo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMC41cHg7XFxuICBoZWlnaHQ6IDE0MHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwLjI1cmVtO1xcbiAgcmlnaHQ6IC0xLjVyZW07XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxufVxcbi5lbGVtZW50IHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XFxuICBtYXJnaW4tbGVmdDogMC41cmVtO1xcbn1cXG4uZWxlbWVudF9faW5uZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmVsZW1lbnRfX2lubmVyID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSB7XFxuICAtLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDtcXG4gIG1hcmdpbi1yaWdodDogY2FsYygwLjYyNXJlbSAqIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpO1xcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoMC42MjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSk7XFxufVxcbi5lbGVtZW50X19ub3RlcyB7XFxuICBoZWlnaHQ6IDFyZW07XFxuICB3aWR0aDogMnJlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuMTI1cmVtO1xcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XFxufVxcbi5lbGVtZW50X19zZWFyY2gge1xcbiAgbWFyZ2luLXRvcDogMXJlbTtcXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XFxuICBoZWlnaHQ6IDIuNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgLS10dy1ib3JkZXItb3BhY2l0eTogMTtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1uLTMwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtO1xcbiAgcGFkZGluZy1yaWdodDogMC43NXJlbTtcXG4gIHBhZGRpbmctbGVmdDogMi41cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTQwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBvdXRsaW5lLW9mZnNldDogMnB4O1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxufVxcbi5lbGVtZW50X19zZWFyY2g6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTMwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtcztcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xcbn1cXG4uZWxlbWVudF9fc2VhcmNoOjpwbGFjZWhvbGRlciB7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tMzApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDMwMG1zO1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XFxufVxcbi5lbGVtZW50X19zZWFyY2g6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTQwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5lbGVtZW50X19zZWFyY2g6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi00MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG4udGFiX19saW5rcyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcXG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcXG4gIHBhZGRpbmctYm90dG9tOiAxLjVyZW07XFxufVxcbi50YWJfX2xpbmtzOjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMHB4O1xcbiAgbGVmdDogMHB4O1xcbiAgaGVpZ2h0OiAwLjI1cmVtO1xcbiAgd2lkdGg6IDEwMCU7XFxuICAtLXR3LXNjYWxlLXg6IDA7XFxuICAtLXR3LXNjYWxlLXk6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksIHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tYmx1ZWNvcmFsKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMzAwbXM7XFxufVxcbi50YWJfX2xpbmtzOmhvdmVyOjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICAtLXR3LXNjYWxlLXg6IDE7XFxuICAtLXR3LXNjYWxlLXk6IDE7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksIHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKTtcXG59XFxuLnRhYl9fbGlua3MtLWFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnRhYl9fbGlua3MtLWFjdGl2ZTo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDBweDtcXG4gIGxlZnQ6IDBweDtcXG4gIGhlaWdodDogMC4yNXJlbTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1ibHVlY29yYWwpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAzMDBtcztcXG59XFxuLnNlcGFyYXRvciB7XFxuICBtYXJnaW4tbGVmdDogMXJlbTtcXG4gIG1hcmdpbi1yaWdodDogMXJlbTtcXG59XFxuLmxhc3Qge1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTMwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL09yZ2FuaXNhdGlvbkRhdGEudnVlXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNBO0VBQ0UsV0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFBQSxZQUFBO0VBQUEsY0FBQTtFQUFBLGtCQUFBO0VBQUEseURBQUE7QUFBRjtBQUlFO0VBQUEsc0JBQUE7RUFBQSxtQkFBQTtBQUFBO0FBR0U7RUFBQSxhQUFBO0FBQUE7QUFBQTtFQUFBLHVCQUFBO0VBQUEsd0RBQUE7RUFBQSxpRUFBQTtBQUFBO0FBSUE7RUFBQSxZQUFBO0VBQUEsV0FBQTtFQUFBLHVCQUFBO0VBQUEsaUJBQUE7QUFBQTtBQUtGO0VBQUEsZ0JBQUE7RUFBQSxtQkFBQTtFQUFBLGNBQUE7RUFBQSxXQUFBO0VBQUEsc0JBQUE7RUFBQSxpQkFBQTtFQUFBLHNCQUFBO0VBQUEseURBQUE7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0VBQUEsb0JBQUE7RUFBQSx1QkFBQTtFQUFBLHNCQUFBO0VBQUEsb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0VBQUEsOEJBQUE7RUFBQSxtQkFBQTtFQUFBLDBCQUFBO0FBQUE7QUFHRTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0VBQUEsMEJBQUE7RUFDQSx1QkFBQTtBQURBO0FBQUE7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtFQUFBLDBCQUFBO0VBQ0EsdUJBQUE7QUFEQTtBQUtBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBO0FBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0FBQUE7QUFLRjtFQUFBLGtCQUFBO0VBQUEsZUFBQTtFQUFBLG9CQUFBO0VBQUEscUJBQUE7RUFBQSxzQkFBQTtBQUFBO0FBRUE7RUFDRSxXQUFBO0VBQ0Esa0JBQUE7RUFBQSxXQUFBO0VBQUEsU0FBQTtFQUFBLGVBQUE7RUFBQSxXQUFBO0VBQUEsZUFBQTtFQUFBLGVBQUE7RUFBQSwrTEFBQTtFQUFBLGtCQUFBO0VBQUEsOERBQUE7RUFBQSwwQkFBQTtBQUpKO0FBT0U7RUFDRSxXQUFBO0VBQ0EsbUJBQUE7RUFBQSxlQUFBO0VBQUEsZUFBQTtFQUFBLCtMQUFBO0FBTEo7QUFTSTtFQUFBLGdCQUFBO0VBQUEsb0JBQUE7RUFBQSxxREFBQTtBQUFBO0FBSUo7RUFDRSxXQUFBO0VBQ0Esa0JBQUE7RUFBQSxXQUFBO0VBQUEsU0FBQTtFQUFBLGVBQUE7RUFBQSxXQUFBO0VBQUEsa0JBQUE7RUFBQSw4REFBQTtFQUFBLDBCQUFBO0FBUEY7QUFXRTtFQUFBLGlCQUFBO0VBQUEsa0JBQUE7QUFBQTtBQUlBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5tYW5kYXRvcnk6OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDAuNXB4O1xcbiAgaGVpZ2h0OiAxNDBweDtcXG4gIEBhcHBseSBhYnNvbHV0ZSB0b3AtMSAtcmlnaHQtNiBiZy1uLTIwO1xcbn1cXG5cXG4uZWxlbWVudCB7XFxuICBAYXBwbHkgbWItMyBtbC0yO1xcblxcbiAgJl9faW5uZXIge1xcbiAgICBAYXBwbHkgZmxleCBzcGFjZS14LTIuNTtcXG4gIH1cXG5cXG4gICZfX25vdGVzIHtcXG4gICAgQGFwcGx5IGgtNCB3LTggcm91bmRlZC1zbSBib3JkZXI7XFxuICB9XFxufVxcblxcbi5lbGVtZW50X19zZWFyY2gge1xcbiAgQGFwcGx5IG15LTQgaC0xMCB3LWZ1bGwgcm91bmRlZCBib3JkZXIgYm9yZGVyLW4tMzAgYmctd2hpdGUgcHktMyBwci0zIHBsLTEwIHRleHQtbi00MCBvdXRsaW5lLW5vbmUgZHVyYXRpb24tMzAwO1xcblxcbiAgJjo6cGxhY2Vob2xkZXIge1xcbiAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tMzAgZHVyYXRpb24tMzAwO1xcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG4gIH1cXG5cXG4gICY6Zm9jdXM6OnBsYWNlaG9sZGVyIHtcXG4gICAgQGFwcGx5IHRleHQtbi00MDtcXG4gIH1cXG59XFxuXFxuLnRhYl9fbGlua3Mge1xcbiAgQGFwcGx5IHJlbGF0aXZlIGN1cnNvci1wb2ludGVyIHB4LTIgcGItNjtcXG5cXG4gICY6OmFmdGVyIHtcXG4gICAgY29udGVudDogJyc7XFxuICAgIEBhcHBseSBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgaC0xIHctZnVsbCBzY2FsZS0wIGJnLWJsdWVjb3JhbCBkdXJhdGlvbi0zMDA7XFxuICB9XFxuXFxuICAmOmhvdmVyOjphZnRlciB7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBAYXBwbHkgdmlzaWJsZSBzY2FsZS0xMDA7XFxuICB9XFxuXFxuICAmLS1hY3RpdmUge1xcbiAgICBAYXBwbHkgZm9udC1ib2xkIHRleHQtYmx1ZWNvcmFsO1xcbiAgfVxcbn1cXG5cXG4udGFiX19saW5rcy0tYWN0aXZlOjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIEBhcHBseSBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgaC0xIHctZnVsbCBiZy1ibHVlY29yYWwgZHVyYXRpb24tMzAwO1xcbn1cXG5cXG4uc2VwYXJhdG9yIHtcXG4gIEBhcHBseSBteC00O1xcbn1cXG5cXG4ubGFzdCB7XFxuICBAYXBwbHkgdGV4dC1uLTMwO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIucmVzZXQge1xcbiAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBtYXJnaW4tbGVmdDogMC43NXJlbTtcXG4gIG1hcmdpbi1yaWdodDogMC43NXJlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0td2hpdGUpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBwYWRkaW5nOiAxLjI1cmVtO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xcbi5yZXNldCB7XFxuICAgIHBhZGRpbmc6IDIuNXJlbTtcXG59XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0IHtcXG4gICAgd2lkdGg6IDU4M3B4O1xcbiAgICBtYXJnaW46IGF1dG87XFxuICAgIHBhZGRpbmc6IDZyZW07XFxufVxcbn1cXG4ucmVzZXRfX2NvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5yZXNldF9fY29udGVudCAuaW5wdXQge1xcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xcbiAgcGFkZGluZy10b3A6IDEuMjVyZW07XFxuICBwYWRkaW5nLWJvdHRvbTogMS4yNXJlbTtcXG59XFxuLnJlc2V0X19jb250ZW50IC5sb2NrLWljb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMS41cmVtO1xcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjc1cmVtO1xcbiAgdG9wOiA0N3B4O1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldF9fY29udGVudCAubG9jay1pY29uIHtcXG4gICAgdG9wOiA1MHB4O1xcbiAgICBmb250LXNpemU6IDIwcHg7XFxufVxcbn1cXG4ucmVzZXRfX2NvbnRlbnQgLm1haWwtaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAxLjVyZW07XFxuICB0b3A6IDQ3cHg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0X19jb250ZW50IC5tYWlsLWljb24ge1xcbiAgICB0b3A6IDUxcHg7XFxufVxcbn1cXG4ucmVzZXQgaDIge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIC0tdHctdGV4dC1vcGFjaXR5OiAxO1xcbiAgY29sb3I6IHJnYmEodmFyKC0tbi01MCksIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4ucmVzZXQgaDIge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbi5yZXNldCBoMiB7XFxuICAgIGZvbnQtc2l6ZTogNDBweDtcXG4gICAgbGluZS1oZWlnaHQ6IDYwcHg7XFxufVxcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xcbi5yZXNldCBoMiB7XFxuICAgIGZvbnQtc2l6ZTogMzJweDtcXG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XFxufVxcbn1cXG4ucmVzZXQgcCB7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNDApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0IHAge1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxufVxcbn1cXG4ucmVzZXQgLnJlc2V0LWJ0biB7XFxuICBtYXJnaW4tdG9wOiAwLjc1cmVtO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICBsaW5lLWhlaWdodDogMXJlbTtcXG4gIHBhZGRpbmc6IDE0cHg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0IC5yZXNldC1idG4ge1xcbiAgICBwYWRkaW5nOiAxOHB4IDk0cHg7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG59XFxufVxcbi5yZXNldCAudmVyaWZpY2F0aW9uIHtcXG4gIGZvbnQtc2l6ZTogMTUwcHg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnJlc2V0IC52ZXJpZmljYXRpb24ge1xcbiAgICBmb250LXNpemU6IDE5MHB4O1xcbn1cXG59XFxuLnJlc2V0X19wYXNzd29yZCB7XFxuICBoZWlnaHQ6IDYxMHB4O1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9yZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Jlc2V0UGFnZS52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0E7RUFXRSxrREFBQTtFQUNBLG9CQUFBO0VBQUEscUJBQUE7RUFBQSxxQkFBQTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFBQSxnQkFBQTtBQVZGO0FBREU7QUFDRTtJQUFBLGVBQUE7QUFBQTtBQUtKO0FBRkU7QUFMRjtJQU1JLFlBQUE7SUFDQSxZQUFBO0lBRUEsYUFBQTtBQUlGO0FBQ0Y7QUFDSTtFQUFBLGtCQUFBO0VBQUEsYUFBQTtFQUFBLHNCQUFBO0FBQUE7QUFHRTtFQUFBLGtCQUFBO0VBQUEscUJBQUE7RUFBQSxvQkFBQTtFQUFBLHVCQUFBO0FBQUE7QUFJQTtFQUFBLGtCQUFBO0VBQUEsWUFBQTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFDQSxTQUFBO0FBREE7QUFHQTtBQUpGO0lBS0ksU0FBQTtJQUNBLGVBQUE7QUFFTjtBQUNGO0FBRU07RUFBQSxrQkFBQTtFQUFBLFlBQUE7RUFDQSxTQUFBO0FBREE7QUFHQTtBQUpGO0lBS0ksU0FBQTtBQUVOO0FBQ0Y7QUFXSTtFQUFBLGVBQUE7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxxQkFBQTtBQUFBO0FBQUE7QUFUQTtBQUNFO0lBQUEsZUFBQTtJQUNBLGlCQUFBO0FBREE7QUFNTjtBQUZJO0FBQ0U7SUFBQSxlQUFBO0lBQ0EsaUJBQUE7QUFEQTtBQU9OO0FBREk7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLGVBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFHQTtFQUFBLG1CQUFBO0VBQUEsV0FBQTtFQUFBLGtCQUFBO0VBQUEsaUJBQUE7RUFDQSxhQUFBO0FBREE7QUFHQTtBQUpGO0lBS0ksa0JBQUE7SUFDQSxlQUFBO0FBS0o7QUFDRjtBQUhFO0VBQ0UsZ0JBQUE7QUFLSjtBQUhJO0FBSEY7SUFJSSxnQkFBQTtBQU1KO0FBQ0Y7QUFIQTtFQUNFLGFBQUE7QUFNRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ucmVzZXQge1xcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4gICAgQGFwcGx5IHAtMTA7XFxuICB9XFxuXFxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICB3aWR0aDogNTgzcHg7XFxuICAgIG1hcmdpbjogYXV0bztcXG5cXG4gICAgQGFwcGx5IHAtMjQ7XFxuICB9XFxuICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIEBhcHBseSBteC0zIHJvdW5kZWQtbGcgYmctd2hpdGUgcC01O1xcblxcbiAgJl9fY29udGVudCB7XFxuICAgIEBhcHBseSByZWxhdGl2ZSBmbGV4IGZsZXgtY29sO1xcblxcbiAgICAuaW5wdXQge1xcbiAgICAgIEBhcHBseSBteS0yIHB5LTU7XFxuICAgIH1cXG5cXG4gICAgLmxvY2staWNvbiB7XFxuICAgICAgQGFwcGx5IGFic29sdXRlIGxlZnQtNiB0ZXh0LWxnO1xcbiAgICAgIHRvcDogNDdweDtcXG5cXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICAgICAgdG9wOiA1MHB4O1xcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAubWFpbC1pY29uIHtcXG4gICAgICBAYXBwbHkgYWJzb2x1dGUgbGVmdC02O1xcbiAgICAgIHRvcDogNDdweDtcXG5cXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICAgICAgdG9wOiA1MXB4O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbiAgaDIge1xcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiAgICAgIEBhcHBseSB0ZXh0LWhlYWRpbmctMztcXG4gICAgICBsaW5lLWhlaWdodDogNjBweDtcXG4gICAgfVxcblxcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xcbiAgICAgIEBhcHBseSB0ZXh0LWhlYWRpbmctNDtcXG4gICAgICBsaW5lLWhlaWdodDogNTBweDtcXG4gICAgfVxcbiAgICBAYXBwbHkgdGV4dC1oZWFkaW5nLTUgZm9udC1ib2xkIHRleHQtbi01MCBzbTptYi0yO1xcbiAgfVxcbiAgcCB7XFxuICAgIEBhcHBseSB0ZXh0LXNtIHRleHQtbi00MCBzbTp0ZXh0LWJhc2U7XFxuICB9XFxuICAucmVzZXQtYnRuIHtcXG4gICAgQGFwcGx5IG10LTMgdy1mdWxsIHRleHQteHM7XFxuICAgIHBhZGRpbmc6IDE0cHg7XFxuXFxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuICAgICAgcGFkZGluZzogMThweCA5NHB4O1xcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgfVxcbiAgfVxcbiAgLnZlcmlmaWNhdGlvbiB7XFxuICAgIGZvbnQtc2l6ZTogMTUwcHg7XFxuXFxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuICAgICAgZm9udC1zaXplOiAxOTBweDtcXG4gICAgfVxcbiAgfVxcbn1cXG4ucmVzZXRfX3Bhc3N3b3JkIHtcXG4gIGhlaWdodDogNjEwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5sYWJlbCB7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTUwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIge1xcbiAgbWF4LXdpZHRoOiA4NjVweDtcXG4gIG1hcmdpbjogYXV0bztcXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciB7XFxuICAgIG1heC13aWR0aDogMTIwNnB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5mZWVkYmFjayB7XFxuICAgIHdpZHRoOiA3MDJweDtcXG59XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLmZlZWRiYWNrIHAge1xcbiAgbGluZS1oZWlnaHQ6IDIycHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3dyYXBwZXIge1xcbiAgYm94LXNoYWRvdzogMHB4IDIwcHggNDBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3dyYXBwZXIgLnZlcmlmaWNhdGlvbiB7XFxuICBmb250LXNpemU6IDE5MHB4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICBtYXJnaW4tdG9wOiAxLjc1cmVtO1xcbiAgbWFyZ2luLWJvdHRvbTogMS43NXJlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwLjc1cmVtO1xcbiAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbGluZS1oZWlnaHQ6IDEuNzVyZW07XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHtcXG4gICAgbGluZS1oZWlnaHQ6IDIuNXJlbTtcXG59XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDIuNXJlbTtcXG4gICAgbWFyZ2luLXRvcDogMy41cmVtO1xcbn1cXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSB7XFxuICAgIGxpbmUtaGVpZ2h0OiAyLjI1cmVtO1xcbn1cXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUgcCB7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xcbiAgLS10dy10ZXh0LW9wYWNpdHk6IDE7XFxuICBjb2xvcjogcmdiYSh2YXIoLS1uLTQwKSwgdmFyKC0tdHctdGV4dC1vcGFjaXR5KSk7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHAge1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XFxufVxcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5yZWdpc3Rlcl9fc2lkZWJhciB7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLWVnZ3NoZWxsKSwgdmFyKC0tdHctYmctb3BhY2l0eSkpO1xcbiAgcGFkZGluZzogOTZweCAzMnB4IDQwcHg7XFxuICB3aWR0aDogMzQ0cHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIHVsIHtcXG4gIHdpZHRoOiAyNTNweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgdWw6OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiA0cHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwcHg7XFxuICB0b3A6IDBweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgLmRldGFpbCB7XFxuICBtYXJnaW4tbGVmdDogNDVweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgLmxpc3RfX2FjdGl2ZTo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogLTFweDtcXG4gIHdpZHRoOiA2cHg7XFxuICBoZWlnaHQ6IDg1cHg7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXR1cnF1b2lzZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgei1pbmRleDogNTtcXG59XFxuLmZvcm0ge1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5mb3JtIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAyLjVyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDIuNXJlbTtcXG4gICAgcGFkZGluZy10b3A6IDIuNXJlbTtcXG4gICAgcGFkZGluZy1ib3R0b206IDIuNXJlbTtcXG59XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uZm9ybSB7XFxuICAgIHBhZGRpbmctbGVmdDogNXJlbTtcXG4gICAgcGFkZGluZy1yaWdodDogNXJlbTtcXG59XFxufVxcbi5mb3JtIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcXG4gIHdpZHRoOiA4NjJweDtcXG59XFxuLmZvcm1fX2NvbnRhaW5lciB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSh2YXIoLS1uLTEwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XFxufVxcbi5mb3JtX19jb250YWluZXIgLmVycm9yX19pbnB1dCB7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tY3JpbXNvbi01MCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxufVxcbi5mb3JtX19jb250ZW50IHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xcbi5mb3JtX19jb250ZW50IHtcXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcXG4gICAgZ2FwOiAxNnB4O1xcbn1cXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvSWF0aVJlZ2lzdGVyUGFnZS52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUU7RUFBQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0JBQUE7RUFBQSxvQkFBQTtFQUFBLGdEQUFBO0FBQUE7QUFJQTtFQUlFLGdCQUFBO0VBQ0EsWUFBQTtBQUpKO0FBQUk7QUFERjtJQUVJLGlCQUFBO0FBR0o7QUFFRTtJQUVJLFlBQUE7QUFDTjtBQUpGO0FBTU07RUFDRSxpQkFBQTtBQUNSO0FBR0k7RUFDRSxrREFBQTtBQUROO0FBR007RUFDRSxnQkFBQTtBQURSO0FBVU07RUFBQSxtQkFBQTtFQUFBLHNCQUFBO0VBQUEsb0JBQUE7RUFBQSxxQkFBQTtFQUFBLGtCQUFBO0VBQUEsb0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEscUJBQUE7SUFBQSxrQkFBQTtBQUFBO0FBQUE7QUFKQTtBQUNFO0lBQUEsb0JBQUE7QUFBQTtBQUNSO0FBSU07RUFDRSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFBQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFGUjtBQUVRO0FBQUE7SUFBQSxlQUFBO0lBQUEsbUJBQUE7QUFBQTtBQUFBO0FBS0Y7RUFBQSxrQkFBQTtFQUFBLDZEQUFBO0VBQ0EsdUJBQUE7RUFDQSxZQUFBO0FBRkE7QUFJQTtFQUNFLFlBQUE7QUFKUjtBQU9NO0VBQ0UsV0FBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFBQSx5REFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7RUFDQSxTQUFBO0VBQ0EsUUFBQTtBQUxSO0FBUU07RUFDRSxpQkFBQTtBQU5SO0FBU007RUFDRSxrQkFBQTtFQUNBLE1BQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUFBLDhEQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0VBQ0EsVUFBQTtBQVBSO0FBY0U7RUFBQSxrQkFBQTtFQUFBLDBEQUFBO0VBQUEsZ0JBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxvQkFBQTtJQUFBLHFCQUFBO0lBQUEsbUJBQUE7SUFBQSxzQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUEsa0JBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFERjtFQUVFLDJCQUFBO0VBQ0EsOEJBQUE7RUFDQSxZQUFBO0FBVkY7QUFhSTtFQUFBLHdCQUFBO0VBQUEsc0JBQUE7RUFBQSxnRUFBQTtFQUNBLG1CQUFBO0FBREE7QUFJRTtFQUFBLGlCQUFBO0VBQUEsc0JBQUE7RUFBQSwrREFBQTtBQUFBO0FBSUo7RUFDRSxnQkFBQTtBQVpKO0FBZ0JBO0FBQ0U7SUFDRSxhQUFBO0lBQ0EscUNBQUE7SUFDQSxTQUFBO0FBYkY7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG4ubGFiZWwge1xcbiAgQGFwcGx5IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uLTUwO1xcbn1cXG5cXG4uc2VjdGlvbiB7XFxuICAmX19jb250YWluZXIge1xcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDEyMDZweDtcXG4gICAgfVxcbiAgICBtYXgtd2lkdGg6IDg2NXB4O1xcbiAgICBtYXJnaW46IGF1dG87XFxuXFxuICAgIC5mZWVkYmFjayB7XFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7XFxuICAgICAgICB3aWR0aDogNzAycHg7XFxuICAgICAgfVxcblxcbiAgICAgIHAge1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zZWN0aW9uX193cmFwcGVyIHtcXG4gICAgICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG5cXG4gICAgICAudmVyaWZpY2F0aW9uIHtcXG4gICAgICAgIGZvbnQtc2l6ZTogMTkwcHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zZWN0aW9uX190aXRsZSB7XFxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDQwcHgpIHtcXG4gICAgICAgIEBhcHBseSBsZWFkaW5nLTk7XFxuICAgICAgfVxcblxcbiAgICAgIEBhcHBseSBteS03IG14LTMgdGV4dC1jZW50ZXIgbGVhZGluZy03IHNtOmxlYWRpbmctMTAgbGc6bWItMTAgbGc6bXQtMTQ7XFxuXFxuICAgICAgcCB7XFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgQGFwcGx5IHRleHQtc20gdGV4dC1uLTQwIHNtOnRleHQtYmFzZTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnJlZ2lzdGVyX19zaWRlYmFyIHtcXG4gICAgICBAYXBwbHkgYmctZWdnc2hlbGw7XFxuICAgICAgcGFkZGluZzogOTZweCAzMnB4IDQwcHg7XFxuICAgICAgd2lkdGg6IDM0NHB4O1xcblxcbiAgICAgIHVsIHtcXG4gICAgICAgIHdpZHRoOiAyNTNweDtcXG4gICAgICB9XFxuXFxuICAgICAgdWw6OmJlZm9yZSB7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgICAgIHdpZHRoOiA0cHg7XFxuICAgICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgICBAYXBwbHkgYmctbi0yMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIGxlZnQ6IDBweDtcXG4gICAgICAgIHRvcDogMHB4O1xcbiAgICAgIH1cXG5cXG4gICAgICAuZGV0YWlsIHtcXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0NXB4O1xcbiAgICAgIH1cXG5cXG4gICAgICAubGlzdF9fYWN0aXZlOjphZnRlciB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IDA7XFxuICAgICAgICBsZWZ0OiAtMXB4O1xcbiAgICAgICAgd2lkdGg6IDZweDtcXG4gICAgICAgIGhlaWdodDogODVweDtcXG4gICAgICAgIEBhcHBseSBiZy10dXJxdW9pc2U7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gICAgICAgIHotaW5kZXg6IDU7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbi5mb3JtIHtcXG4gIEBhcHBseSBiZy13aGl0ZSBwLTUgc206cHgtMTAgc206cHktMTAgbGc6cHgtMjA7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7XFxuICB3aWR0aDogODYycHg7XFxuXFxuICAmX19jb250YWluZXIge1xcbiAgICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItYi1uLTEwO1xcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xcblxcbiAgICAuZXJyb3JfX2lucHV0IHtcXG4gICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1jcmltc29uLTUwO1xcbiAgICB9XFxuICB9XFxuXFxuICAmX19jb250ZW50IHtcXG4gICAgbWFyZ2luLXRvcDogMjRweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuICAuZm9ybV9fY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XFxuICAgIGdhcDogMTZweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XFxuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNTApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciB7XFxuICBtYXgtd2lkdGg6IDg2NXB4O1xcbiAgbWFyZ2luOiBhdXRvO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcXG4uc2VjdGlvbl9fY29udGFpbmVyIHtcXG4gICAgbWF4LXdpZHRoOiAxMjA2cHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLmZlZWRiYWNrIHtcXG4gICAgd2lkdGg6IDcwMnB4O1xcbn1cXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuZmVlZGJhY2sgcCB7XFxuICBsaW5lLWhlaWdodDogMjJweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fd3JhcHBlciB7XFxuICBib3gtc2hhZG93OiAwcHggMjBweCA0MHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fd3JhcHBlciAudmVyaWZpY2F0aW9uIHtcXG4gIGZvbnQtc2l6ZTogMTkwcHg7XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHtcXG4gIG1hcmdpbi10b3A6IDEuNzVyZW07XFxuICBtYXJnaW4tYm90dG9tOiAxLjc1cmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNzVyZW07XFxuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBsaW5lLWhlaWdodDogMS43NXJlbTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUge1xcbiAgICBsaW5lLWhlaWdodDogMi41cmVtO1xcbn1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMi41cmVtO1xcbiAgICBtYXJnaW4tdG9wOiAzLjVyZW07XFxufVxcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xcbi5zZWN0aW9uX19jb250YWluZXIgLnNlY3Rpb25fX3RpdGxlIHtcXG4gICAgbGluZS1oZWlnaHQ6IDIuMjVyZW07XFxufVxcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5zZWN0aW9uX190aXRsZSBwIHtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XFxuICAtLXR3LXRleHQtb3BhY2l0eTogMTtcXG4gIGNvbG9yOiByZ2JhKHZhcigtLW4tNDApLCB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAuc2VjdGlvbl9fdGl0bGUgcCB7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNXJlbTtcXG59XFxufVxcbi5zZWN0aW9uX19jb250YWluZXIgLnJlZ2lzdGVyX19zaWRlYmFyIHtcXG4gIC0tdHctYmctb3BhY2l0eTogMTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tZWdnc2hlbGwpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBwYWRkaW5nOiA5NnB4IDMycHggNDBweDtcXG4gIHdpZHRoOiAzNDRweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgdWwge1xcbiAgd2lkdGg6IDI1M3B4O1xcbn1cXG4uc2VjdGlvbl9fY29udGFpbmVyIC5yZWdpc3Rlcl9fc2lkZWJhciB1bDo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDRweDtcXG4gIGhlaWdodDogMTc1cHg7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW4tMjApLCB2YXIoLS10dy1iZy1vcGFjaXR5KSk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwcHg7XFxuICB0b3A6IDBweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgLmRldGFpbCB7XFxuICBtYXJnaW4tbGVmdDogNDVweDtcXG59XFxuLnNlY3Rpb25fX2NvbnRhaW5lciAucmVnaXN0ZXJfX3NpZGViYXIgLmxpc3RfX2FjdGl2ZTo6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogLTFweDtcXG4gIHdpZHRoOiA2cHg7XFxuICBoZWlnaHQ6IDg1cHg7XFxuICAtLXR3LWJnLW9wYWNpdHk6IDE7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLXR1cnF1b2lzZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgei1pbmRleDogNTtcXG59XFxuLmZvcm0ge1xcbiAgLS10dy1iZy1vcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS13aGl0ZSksIHZhcigtLXR3LWJnLW9wYWNpdHkpKTtcXG4gIHBhZGRpbmc6IDEuMjVyZW07XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xcbi5mb3JtIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAyLjVyZW07XFxuICAgIHBhZGRpbmctcmlnaHQ6IDIuNXJlbTtcXG4gICAgcGFkZGluZy10b3A6IDIuNXJlbTtcXG4gICAgcGFkZGluZy1ib3R0b206IDIuNXJlbTtcXG59XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4uZm9ybSB7XFxuICAgIHBhZGRpbmctbGVmdDogNXJlbTtcXG4gICAgcGFkZGluZy1yaWdodDogNXJlbTtcXG59XFxufVxcbi5mb3JtIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcXG4gIHdpZHRoOiA4NjJweDtcXG59XFxuLmZvcm1fX2NvbnRhaW5lciB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XFxuICAtLXR3LWJvcmRlci1vcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSh2YXIoLS1uLTEwKSwgdmFyKC0tdHctYm9yZGVyLW9wYWNpdHkpKTtcXG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XFxufVxcbi5mb3JtX19jb250YWluZXIgLmVycm9yX19pbnB1dCB7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIC0tdHctYm9yZGVyLW9wYWNpdHk6IDE7XFxuICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tY3JpbXNvbi01MCksIHZhcigtLXR3LWJvcmRlci1vcGFjaXR5KSk7XFxufVxcbi5mb3JtX19jb250ZW50IHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xcbi5mb3JtX19jb250ZW50IHtcXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcXG4gICAgZ2FwOiAxNnB4O1xcbn1cXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFRTtFQUFBLG1CQUFBO0VBQUEsb0JBQUE7RUFBQSxnQkFBQTtFQUFBLG9CQUFBO0VBQUEsZ0RBQUE7QUFBQTtBQUlBO0VBSUUsZ0JBQUE7RUFDQSxZQUFBO0FBSko7QUFBSTtBQURGO0lBRUksaUJBQUE7QUFHSjtBQUVFO0lBRUksWUFBQTtBQUNOO0FBSkY7QUFNTTtFQUNFLGlCQUFBO0FBQ1I7QUFHSTtFQUNFLGtEQUFBO0FBRE47QUFHTTtFQUNFLGdCQUFBO0FBRFI7QUFVTTtFQUFBLG1CQUFBO0VBQUEsc0JBQUE7RUFBQSxvQkFBQTtFQUFBLHFCQUFBO0VBQUEsa0JBQUE7RUFBQSxvQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLG1CQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxxQkFBQTtJQUFBLGtCQUFBO0FBQUE7QUFBQTtBQUpBO0FBQ0U7SUFBQSxvQkFBQTtBQUFBO0FBQ1I7QUFJTTtFQUNFLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUFBLG9CQUFBO0VBQUEsb0JBQUE7RUFBQSxnREFBQTtBQUZSO0FBRVE7QUFBQTtJQUFBLGVBQUE7SUFBQSxtQkFBQTtBQUFBO0FBQUE7QUFLRjtFQUFBLGtCQUFBO0VBQUEsNkRBQUE7RUFDQSx1QkFBQTtFQUNBLFlBQUE7QUFGQTtBQUlBO0VBQ0UsWUFBQTtBQUpSO0FBT007RUFDRSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUFBLHlEQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBO0FBTFI7QUFRTTtFQUNFLGlCQUFBO0FBTlI7QUFTTTtFQUNFLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLFVBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQUEsOERBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0FBUFI7QUFjRTtFQUFBLGtCQUFBO0VBQUEsMERBQUE7RUFBQSxnQkFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBLG9CQUFBO0lBQUEscUJBQUE7SUFBQSxtQkFBQTtJQUFBLHNCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQSxrQkFBQTtJQUFBLG1CQUFBO0FBQUE7QUFBQTtBQURGO0VBRUUsMkJBQUE7RUFDQSw4QkFBQTtFQUNBLFlBQUE7QUFWRjtBQWFJO0VBQUEsd0JBQUE7RUFBQSxzQkFBQTtFQUFBLGdFQUFBO0VBQ0EsbUJBQUE7QUFEQTtBQUlFO0VBQUEsaUJBQUE7RUFBQSxzQkFBQTtFQUFBLCtEQUFBO0FBQUE7QUFJSjtFQUNFLGdCQUFBO0FBWko7QUFnQkE7QUFDRTtJQUNFLGFBQUE7SUFDQSxxQ0FBQTtJQUNBLFNBQUE7QUFiRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIlxcbi5sYWJlbCB7XFxuICBAYXBwbHkgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LW4tNTA7XFxufVxcblxcbi5zZWN0aW9uIHtcXG4gICZfX2NvbnRhaW5lciB7XFxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkge1xcbiAgICAgIG1heC13aWR0aDogMTIwNnB4O1xcbiAgICB9XFxuICAgIG1heC13aWR0aDogODY1cHg7XFxuICAgIG1hcmdpbjogYXV0bztcXG5cXG4gICAgLmZlZWRiYWNrIHtcXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHtcXG4gICAgICAgIHdpZHRoOiA3MDJweDtcXG4gICAgICB9XFxuXFxuICAgICAgcCB7XFxuICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnNlY3Rpb25fX3dyYXBwZXIge1xcbiAgICAgIGJveC1zaGFkb3c6IDBweCAyMHB4IDQwcHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcblxcbiAgICAgIC52ZXJpZmljYXRpb24ge1xcbiAgICAgICAgZm9udC1zaXplOiAxOTBweDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLnNlY3Rpb25fX3RpdGxlIHtcXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NDBweCkge1xcbiAgICAgICAgQGFwcGx5IGxlYWRpbmctOTtcXG4gICAgICB9XFxuXFxuICAgICAgQGFwcGx5IG15LTcgbXgtMyB0ZXh0LWNlbnRlciBsZWFkaW5nLTcgc206bGVhZGluZy0xMCBsZzptYi0xMCBsZzptdC0xNDtcXG5cXG4gICAgICBwIHtcXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBAYXBwbHkgdGV4dC1zbSB0ZXh0LW4tNDAgc206dGV4dC1iYXNlO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAucmVnaXN0ZXJfX3NpZGViYXIge1xcbiAgICAgIEBhcHBseSBiZy1lZ2dzaGVsbDtcXG4gICAgICBwYWRkaW5nOiA5NnB4IDMycHggNDBweDtcXG4gICAgICB3aWR0aDogMzQ0cHg7XFxuXFxuICAgICAgdWwge1xcbiAgICAgICAgd2lkdGg6IDI1M3B4O1xcbiAgICAgIH1cXG5cXG4gICAgICB1bDo6YmVmb3JlIHtcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICAgICAgd2lkdGg6IDRweDtcXG4gICAgICAgIGhlaWdodDogMTc1cHg7XFxuICAgICAgICBAYXBwbHkgYmctbi0yMDtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIGxlZnQ6IDBweDtcXG4gICAgICAgIHRvcDogMHB4O1xcbiAgICAgIH1cXG5cXG4gICAgICAuZGV0YWlsIHtcXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0NXB4O1xcbiAgICAgIH1cXG5cXG4gICAgICAubGlzdF9fYWN0aXZlOjphZnRlciB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IDA7XFxuICAgICAgICBsZWZ0OiAtMXB4O1xcbiAgICAgICAgd2lkdGg6IDZweDtcXG4gICAgICAgIGhlaWdodDogODVweDtcXG4gICAgICAgIEBhcHBseSBiZy10dXJxdW9pc2U7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gICAgICAgIHotaW5kZXg6IDU7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbi5mb3JtIHtcXG4gIEBhcHBseSBiZy13aGl0ZSBwLTUgc206cHgtMTAgc206cHktMTAgbGc6cHgtMjA7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7XFxuICB3aWR0aDogODYycHg7XFxuXFxuICAmX19jb250YWluZXIge1xcbiAgICBAYXBwbHkgYm9yZGVyLWItMiBib3JkZXItYi1uLTEwO1xcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xcblxcbiAgICAuZXJyb3JfX2lucHV0IHtcXG4gICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1jcmltc29uLTUwO1xcbiAgICB9XFxuICB9XFxuXFxuICAmX19jb250ZW50IHtcXG4gICAgbWFyZ2luLXRvcDogMjRweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuICAuZm9ybV9fY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XFxuICAgIGdhcDogMTZweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI2J0bltkYXRhLXYtYTE4NjFmM2VdIHtcXG4gIHBhZGRpbmc6IDEzcHggMDtcXG59XFxuI2J0biBzdmdbZGF0YS12LWExODYxZjNlXSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMS43NXJlbTtcXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDJyZW07XFxuICB0cmFuc2l0aW9uOiAwLjRzO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDBweCkge1xcbiNidG5bZGF0YS12LWExODYxZjNlXSB7XFxuICAgIHBhZGRpbmc6IDE4cHggMDtcXG59XFxufVxcbi51c2VybmFtZVtkYXRhLXYtYTE4NjFmM2VdIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG59XFxuLnBhc3N3b3JkW2RhdGEtdi1hMTg2MWYzZV0ge1xcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xcbn1cXG5sYWJlbFtkYXRhLXYtYTE4NjFmM2VdIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3Jlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0E7RUFDRSxlQUFBO0FBQUY7QUFHSTtFQUFBLGtCQUFBO0VBQUEsY0FBQTtFQUFBLGlCQUFBO0VBQUEsaUJBQUE7RUFDQSxnQkFBQTtBQURBO0FBSUo7QUFDRTtJQUNFLGVBQUE7QUFBRjtBQUNGO0FBR0U7RUFBQSxxQkFBQTtBQUFBO0FBR0E7RUFBQSxxQkFBQTtBQUFBO0FBR0E7RUFBQSxxQkFBQTtFQUFBLGdCQUFBO0FBQUFcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuI2J0biB7XFxuICBwYWRkaW5nOiAxM3B4IDA7XFxuXFxuICBzdmcge1xcbiAgICBAYXBwbHkgYWJzb2x1dGUgcmlnaHQtNyB0ZXh0LTJ4bDtcXG4gICAgdHJhbnNpdGlvbjogMC40cztcXG4gIH1cXG59XFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHtcXG4gICNidG4ge1xcbiAgICBwYWRkaW5nOiAxOHB4IDA7XFxuICB9XFxufVxcbi51c2VybmFtZSB7XFxuICBAYXBwbHkgbWItMjtcXG59XFxuLnBhc3N3b3JkIHtcXG4gIEBhcHBseSBtYi0yO1xcbn1cXG5sYWJlbCB7XFxuICBAYXBwbHkgbWItMiBmb250LWJvbGQ7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vYWZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FmLmpzXCIsXG5cdFwiLi9hZi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanNcIixcblx0XCIuL2FyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXItZHpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWR6LmpzXCIsXG5cdFwiLi9hci1kei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanNcIixcblx0XCIuL2FyLWt3XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXIta3cuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWt3LmpzXCIsXG5cdFwiLi9hci1seVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanNcIixcblx0XCIuL2FyLWx5LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbWFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzXCIsXG5cdFwiLi9hci1tYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanNcIixcblx0XCIuL2FyLXNhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItc2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzXCIsXG5cdFwiLi9hci10blwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanNcIixcblx0XCIuL2FyLXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLmpzXCIsXG5cdFwiLi9helwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanNcIixcblx0XCIuL2F6LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYmVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzXCIsXG5cdFwiLi9iZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanNcIixcblx0XCIuL2JnXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYmcuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JnLmpzXCIsXG5cdFwiLi9ibVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanNcIixcblx0XCIuL2JtLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLmpzXCIsXG5cdFwiLi9ibi1iZFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4tYmQuanNcIixcblx0XCIuL2JuLWJkLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi1iZC5qc1wiLFxuXHRcIi4vYm4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLmpzXCIsXG5cdFwiLi9ib1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanNcIixcblx0XCIuL2JvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYnJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzXCIsXG5cdFwiLi9ici5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanNcIixcblx0XCIuL2JzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vYnMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzXCIsXG5cdFwiLi9jYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanNcIixcblx0XCIuL2NhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY3NcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzXCIsXG5cdFwiLi9jcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanNcIixcblx0XCIuL2N2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3YuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N2LmpzXCIsXG5cdFwiLi9jeVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanNcIixcblx0XCIuL2N5LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vZGFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RhLmpzXCIsXG5cdFwiLi9kYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanNcIixcblx0XCIuL2RlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZGUtYXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWF0LmpzXCIsXG5cdFwiLi9kZS1hdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanNcIixcblx0XCIuL2RlLWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUtY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzXCIsXG5cdFwiLi9kZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanNcIixcblx0XCIuL2R2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZHYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzXCIsXG5cdFwiLi9lbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanNcIixcblx0XCIuL2VsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZW4tYXVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWF1LmpzXCIsXG5cdFwiLi9lbi1hdS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanNcIixcblx0XCIuL2VuLWNhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tY2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzXCIsXG5cdFwiLi9lbi1nYlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanNcIixcblx0XCIuL2VuLWdiLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4taWVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWllLmpzXCIsXG5cdFwiLi9lbi1pZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanNcIixcblx0XCIuL2VuLWlsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taWwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWlsLmpzXCIsXG5cdFwiLi9lbi1pblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taW4uanNcIixcblx0XCIuL2VuLWluLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4tbnpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzXCIsXG5cdFwiLi9lbi1uei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tbnouanNcIixcblx0XCIuL2VuLXNnXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW4tc2cuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLXNnLmpzXCIsXG5cdFwiLi9lb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanNcIixcblx0XCIuL2VvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZXNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzXCIsXG5cdFwiLi9lcy1kb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtZG8uanNcIixcblx0XCIuL2VzLWRvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtbXhcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLW14LmpzXCIsXG5cdFwiLi9lcy1teC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanNcIixcblx0XCIuL2VzLXVzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMtdXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLXVzLmpzXCIsXG5cdFwiLi9lcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanNcIixcblx0XCIuL2V0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V0LmpzXCIsXG5cdFwiLi9ldVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanNcIixcblx0XCIuL2V1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZmFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzXCIsXG5cdFwiLi9mYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanNcIixcblx0XCIuL2ZpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzXCIsXG5cdFwiLi9maWxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpbC5qc1wiLFxuXHRcIi4vZmlsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanNcIixcblx0XCIuL2ZvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qc1wiLFxuXHRcIi4vZm8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzXCIsXG5cdFwiLi9mclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2ZyLWNhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qc1wiLFxuXHRcIi4vZnItY2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzXCIsXG5cdFwiLi9mci1jaFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLWNoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qc1wiLFxuXHRcIi4vZnIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzXCIsXG5cdFwiLi9meVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2Z5LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qc1wiLFxuXHRcIi4vZ2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dhLmpzXCIsXG5cdFwiLi9nYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dkXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qc1wiLFxuXHRcIi4vZ2QuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzXCIsXG5cdFwiLi9nbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qc1wiLFxuXHRcIi4vZ29tLWRldmFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1kZXZhLmpzXCIsXG5cdFwiLi9nb20tZGV2YS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1sYXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qc1wiLFxuXHRcIi4vZ29tLWxhdG4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1sYXRuLmpzXCIsXG5cdFwiLi9ndVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2d1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qc1wiLFxuXHRcIi4vaGVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzXCIsXG5cdFwiLi9oZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qc1wiLFxuXHRcIi4vaGkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hpLmpzXCIsXG5cdFwiLi9oclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2hyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qc1wiLFxuXHRcIi4vaHVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzXCIsXG5cdFwiLi9odS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h5LWFtXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qc1wiLFxuXHRcIi4vaHktYW0uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h5LWFtLmpzXCIsXG5cdFwiLi9pZFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lkLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qc1wiLFxuXHRcIi4vaXNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzXCIsXG5cdFwiLi9pcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2l0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qc1wiLFxuXHRcIi4vaXQtY2hcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzXCIsXG5cdFwiLi9pdC1jaC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qc1wiLFxuXHRcIi4vamFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzXCIsXG5cdFwiLi9qYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2p2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qc1wiLFxuXHRcIi4vanYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2p2LmpzXCIsXG5cdFwiLi9rYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2thLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qc1wiLFxuXHRcIi4va2tcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzXCIsXG5cdFwiLi9ray5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2ttXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qc1wiLFxuXHRcIi4va20uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzXCIsXG5cdFwiLi9rblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qc1wiLFxuXHRcIi4va29cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzXCIsXG5cdFwiLi9rby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2t1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qc1wiLFxuXHRcIi4va3UuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t1LmpzXCIsXG5cdFwiLi9reVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2t5LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qc1wiLFxuXHRcIi4vbGJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzXCIsXG5cdFwiLi9sYi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qc1wiLFxuXHRcIi4vbG8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xvLmpzXCIsXG5cdFwiLi9sdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qc1wiLFxuXHRcIi4vbHZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzXCIsXG5cdFwiLi9sdi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL21lXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qc1wiLFxuXHRcIi4vbWUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzXCIsXG5cdFwiLi9taVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21pLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qc1wiLFxuXHRcIi4vbWtcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzXCIsXG5cdFwiLi9tay5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21sXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qc1wiLFxuXHRcIi4vbWwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzXCIsXG5cdFwiLi9tblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21uLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qc1wiLFxuXHRcIi4vbXJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21yLmpzXCIsXG5cdFwiLi9tci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21zXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qc1wiLFxuXHRcIi4vbXMtbXlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLW15LmpzXCIsXG5cdFwiLi9tcy1teS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qc1wiLFxuXHRcIi4vbXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzXCIsXG5cdFwiLi9tdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL215XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qc1wiLFxuXHRcIi4vbXkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzXCIsXG5cdFwiLi9uYlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25iLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qc1wiLFxuXHRcIi4vbmVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzXCIsXG5cdFwiLi9uZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25sXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC5qc1wiLFxuXHRcIi4vbmwtYmVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzXCIsXG5cdFwiLi9ubC1iZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC5qc1wiLFxuXHRcIi4vbm5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzXCIsXG5cdFwiLi9ubi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL29jLWxuY1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzXCIsXG5cdFwiLi9vYy1sbmMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qc1wiLFxuXHRcIi4vcGEtaW5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wYS1pbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanNcIixcblx0XCIuL3BsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qc1wiLFxuXHRcIi4vcGwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanNcIixcblx0XCIuL3B0LWJyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qc1wiLFxuXHRcIi4vcHQtYnIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanNcIixcblx0XCIuL3JvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qc1wiLFxuXHRcIi4vcm8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9ydVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanNcIixcblx0XCIuL3J1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qc1wiLFxuXHRcIi4vc2RcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2QuanNcIixcblx0XCIuL3NlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qc1wiLFxuXHRcIi4vc2UuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zaVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanNcIixcblx0XCIuL3NpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qc1wiLFxuXHRcIi4vc2tcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zay5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanNcIixcblx0XCIuL3NsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qc1wiLFxuXHRcIi4vc2wuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zcVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanNcIixcblx0XCIuL3NxLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qc1wiLFxuXHRcIi4vc3JcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzXCIsXG5cdFwiLi9zci1jeXJsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzXCIsXG5cdFwiLi9zci1jeXJsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzXCIsXG5cdFwiLi9zci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanNcIixcblx0XCIuL3NzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qc1wiLFxuXHRcIi4vc3MuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzXCIsXG5cdFwiLi9zdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qc1wiLFxuXHRcIi4vc3dcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzXCIsXG5cdFwiLi9zdy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3RhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qc1wiLFxuXHRcIi4vdGEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzXCIsXG5cdFwiLi90ZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qc1wiLFxuXHRcIi4vdGV0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanNcIixcblx0XCIuL3RldC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzXCIsXG5cdFwiLi90Z1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanNcIixcblx0XCIuL3RnLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qc1wiLFxuXHRcIi4vdGhcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90aC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanNcIixcblx0XCIuL3RrXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ay5qc1wiLFxuXHRcIi4vdGsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90bC1waFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanNcIixcblx0XCIuL3RsLXBoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qc1wiLFxuXHRcIi4vdGxoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanNcIixcblx0XCIuL3RsaC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGxoLmpzXCIsXG5cdFwiLi90clwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHIuanNcIixcblx0XCIuL3RyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHpsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanNcIixcblx0XCIuL3R6bC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzXCIsXG5cdFwiLi90em1cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qc1wiLFxuXHRcIi4vdHptLWxhdG5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzXCIsXG5cdFwiLi90em0tbGF0bi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLWxhdG4uanNcIixcblx0XCIuL3R6bS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzXCIsXG5cdFwiLi91Zy1jblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWctY24uanNcIixcblx0XCIuL3VnLWNuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qc1wiLFxuXHRcIi4vdWtcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91ay5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanNcIixcblx0XCIuL3VyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qc1wiLFxuXHRcIi4vdXIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91elwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanNcIixcblx0XCIuL3V6LWxhdG5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanNcIixcblx0XCIuL3V6LWxhdG4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanNcIixcblx0XCIuL3V6LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qc1wiLFxuXHRcIi4vdmlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzXCIsXG5cdFwiLi92aS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3gtcHNldWRvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qc1wiLFxuXHRcIi4veC1wc2V1ZG8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzXCIsXG5cdFwiLi95b1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3lvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS95by5qc1wiLFxuXHRcIi4vemgtY25cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzXCIsXG5cdFwiLi96aC1jbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWhrXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qc1wiLFxuXHRcIi4vemgtaGsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzXCIsXG5cdFwiLi96aC1tb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLW1vLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1tby5qc1wiLFxuXHRcIi4vemgtdHdcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzXCIsXG5cdFwiLi96aC10dy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZSBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qJFwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEyLjY2NyAyLjY2NmgtMS4zMzNWMkEuNjY2LjY2NiAwIDEgMCAxMCAydi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NkgzLjMzNGEyIDIgMCAwIDAtMiAydjhhMiAyIDAgMCAwIDIgMmg5LjMzM2EyIDIgMCAwIDAgMi0ydi04YTIgMiAwIDAgMC0yLTJabS42NjcgMTBhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMy4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ni0uNjY3VjhoMTAuNjY2djQuNjY2Wm0wLTZIMi42Njd2LTJBLjY2Ny42NjcgMCAwIDEgMy4zMzQgNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzMzIDBWNGg0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzQgMFY0aDEuMzMzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY2djJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNCAxMy4zMzNIMi42NjdWMTJoMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0aC0yVjkuMzMzaDQuNjY3YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNIMi42NjdWNi42NjZIMTBhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0gyLjY2N1Y0aDEwYS42NjcuNjY3IDAgMSAwIDAtMS4zMzRoLTEwVjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYxMmEuNjY3LjY2NyAwIDAgMCAuNjY2LjY2NmgxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCA0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djYuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzM0IDBWNC42NjZBLjY2Ny42NjcgMCAwIDAgOCA0Wk00LjY2NyA4QS42NjcuNjY3IDAgMCAwIDQgOC42NjZ2Mi42NjdhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY4LjY2NkEuNjY3LjY2NyAwIDAgMCA0LjY2NyA4Wm02LjY2Ny0xLjMzNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2N3Y0YS42NjcuNjY3IDAgMCAwIDEuMzMzIDB2LTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3Wm0xLjMzMy01LjMzM0gzLjMzM2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoOS4zMzRhMiAyIDAgMCAwIDItMlYzLjMzM2EyIDIgMCAwIDAtMi0yWm0uNjY3IDExLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY3LjY2N0gzLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY2LS42NjdWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDkuMzMzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY3djkuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNS4zMzQgNy4zMzRoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDEwLjY2NyAzLjJBLjY2Ny42NjcgMCAwIDAgMTAgMi42NjdINmEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ny42NjcgMCAwIDAgLjUyNy4yNDdaTTYuNTQ3IDRoMi45MDdsLjQgMkg2LjE0N2wuNC0yWm04LjEyIDUuMkEuNjY3LjY2NyAwIDAgMCAxNCA4LjY2N2gtNGEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ni42NjYgMCAwIDAgLjUyNy4yNDdoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDE0LjY2NyA5LjJabS00LjUyIDIuOC40LTJoMi45MDZsLjQgMmgtMy43MDZaTTYgOC42NjhIMmEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ni42NjYgMCAwIDAgLjUyNy4yNDdoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDYuNjY3IDkuMkEuNjY3LjY2NyAwIDAgMCA2IDguNjY3Wm0tMy44NTMgMy4zMzQuNC0yaDIuOTA3bC40IDJIMi4xNDdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05LjMzNCA1LjMzM0gxMEEuNjY3LjY2NyAwIDAgMCAxMCA0aC0uNjY2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNabTAgMi42NjdIMTBhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNGgtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0Wk02IDUuMzMzaC42NjdhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g2YS42NjcuNjY3IDAgMSAwIDAgMS4zMzNaTTYgOGguNjY3YS42NjcuNjY3IDAgMSAwIDAtMS4zMzRINkEuNjY3LjY2NyAwIDAgMCA2IDhabTggNS4zMzNoLS42NjZWMmEuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdIMy4zMzNBLjY2Ny42NjcgMCAwIDAgMi42NjcgMnYxMS4zMzNIMmEuNjY2LjY2NiAwIDEgMCAwIDEuMzMzaDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabS01LjMzMyAwSDcuMzM0di0yLjY2N2gxLjMzM3YyLjY2N1ptMy4zMzMgMGgtMlYxMGEuNjY3LjY2NyAwIDAgMC0uNjY2LS42NjdINi42NjdBLjY2Ny42NjcgMCAwIDAgNiAxMHYzLjMzM0g0VjIuNjY2aDh2MTAuNjY3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNy4zMzQgNkgxMGEuNjY3LjY2NyAwIDEgMCAwLTEuMzMzSDguNjY3VjRhLjY2Ny42NjcgMCAxIDAtMS4zMzMgMHYuNjY3YTIgMiAwIDAgMCAwIDRoMS4zMzNhLjY2Ny42NjcgMCAwIDEgMCAxLjMzM0g2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoMS4zMzRWMTJhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMHYtLjY2NmEyIDIgMCAwIDAgMC00SDcuMzM0YS42NjcuNjY3IDAgMCAxIDAtMS4zMzRaTTggLjY2N2E3LjMzMyA3LjMzMyAwIDEgMCAwIDE0LjY2N0E3LjMzMyA3LjMzMyAwIDAgMCA4IC42NjdaTTggMTRBNiA2IDAgMSAxIDggMmE2IDYgMCAwIDEgMCAxMlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEzLjEyIDQuNTg3YTIuOTMzIDIuOTMzIDAgMCAwLTIuMjA2LS4yMTMgMi45MTMgMi45MTMgMCAwIDAtNS44MiAwIDIuOTg3IDIuOTg3IDAgMCAwLTIuMjA3LjE5M0EyLjkxMyAyLjkxMyAwIDAgMCAzLjI5NCA5LjlhMi45MzMgMi45MzMgMCAwIDAtLjUzNCAxLjY2N2MuMDAzLjE2OC4wMTkuMzM1LjA0Ny41YTIuODkzIDIuODkzIDAgMCAwIDIuODYgMi40MmMuMTQyLjAxLjI4NS4wMS40MjcgMEEyLjk0NyAyLjk0NyAwIDAgMCA4IDEzLjMzNGEyLjk0NyAyLjk0NyAwIDAgMCAxLjkwNyAxLjEyNmMuMTQyLjAxLjI4NS4wMS40MjcgMGEyLjkwNyAyLjkwNyAwIDAgMCAyLjM3My00LjU4IDIuOTA3IDIuOTA3IDAgMCAwIC40MTMtNS4zMzN2LjA0Wk02Ljg5NCAzLjI5NGExLjYgMS42IDAgMCAxIDIuMjEzIDAgMS42MiAxLjYyIDAgMCAxIC4zNDcgMS43NzNsLS4xNzQuMzkzLS40NC4zODdBMi43MTMgMi43MTMgMCAwIDAgOCA1LjdjLS4zNyAwLS43MzUuMDc4LTEuMDczLjIyN2wtLjM3My0uODZhMS41OTMgMS41OTMgMCAwIDEgLjM0LTEuNzczWm0tNC4wNjcgNC41NkExLjU4IDEuNTggMCAwIDEgNS4yOTQgNmwuMzI2LjI4Ny4yMzQuNTMzYTIuNjEzIDIuNjEzIDAgMCAwLS41MiAxLjU0NyAxLjkgMS45IDAgMCAwIDAgLjNoLS4zNjdsLS41Ni4wNTNhMS41OCAxLjU4IDAgMCAxLTEuNTgtLjg2NlptNC40IDQuMDUzYTEuNTg3IDEuNTg3IDAgMCAxLTMuMTA3LS4wNTMgMi4wNDcgMi4wNDcgMCAwIDEgMC0uMjggMS41NTMgMS41NTMgMCAwIDEgLjc4LTEuMzM0bC4zNC0uMjQuNjA3LS4wNjZjLjM4Mi41MzIuOTQ3LjkwNCAxLjU4NyAxLjA0NmwtLjIwNy45MjdaTTggOS43YTEuMzMzIDEuMzMzIDAgMSAxIDAtMi42NjZBMS4zMzMgMS4zMzMgMCAwIDEgOCA5LjdabTMuODggMi4xNDdhMS41NzMgMS41NzMgMCAwIDEtMS43ODYgMS4yOTMgMS41OTMgMS41OTMgMCAwIDEtMS4zMzQtMS4yMzNsLS4wOTMtLjQuMTQtLjYxM2EyLjY2NyAyLjY2NyAwIDAgMCAxLjQ2Ny0xLjE3NGwuMzMzLjJoLjA2bC40NC4yNmExLjU4NyAxLjU4NyAwIDAgMSAuNzczIDEuNjY3Wm0xLjI5NC00YTEuNTk0IDEuNTk0IDAgMCAxLTEuNDIuODg3aC0uMTZsLS40MjctLjA2Ny0uNS0uMjczYzAtLjY0OS0uMjM4LTEuMjc0LS42NjctMS43NmwuMjg3LS4yNDcuNDItLjM4N2ExLjU4IDEuNTggMCAwIDEgMi40NjcgMS44OHYtLjAzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEzLjMzNCA1Ljk2YS44OC44OCAwIDAgMC0uMDQtLjE4di0uMDZhLjcxNi43MTYgMCAwIDAtLjEyNy0uMTg3bC00LTRhLjcxMy43MTMgMCAwIDAtLjE4Ny0uMTI3aC0uMDZhLjU4Ny41ODcgMCAwIDAtLjIyLS4wNzNINC42NjdhMiAyIDAgMCAwLTIgMnY5LjMzM2EyIDIgMCAwIDAgMiAyaDYuNjY3YTIgMiAwIDAgMCAyLTJWNS45NlptLTQtMi4zNTQgMS43MjYgMS43MjdIMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ni0uNjY3di0xLjA2Wk0xMiAxMi42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ni42NjdINC42NjdBLjY2Ni42NjYgMCAwIDEgNCAxMi42NjZWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3SDh2MmEyIDIgMCAwIDAgMiAyaDJ2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEyLjk2IDguNjY2Yy0uMTQ3IDAtLjMtLjA0Ni0uNDQ3LS4wOGE2LjI5IDYuMjkgMCAwIDEtLjg3My0uMjYgMS4zMzMgMS4zMzMgMCAwIDAtMS42NTMuNjY3bC0uMTQ3LjNBOC4xMiA4LjEyIDAgMCAxIDguMDY3IDcuOTZhOC4xMiA4LjEyIDAgMCAxLTEuMzM0LTEuNzc0TDcuMDEzIDZhMS4zMzMgMS4zMzMgMCAwIDAgLjY2Ny0xLjY1NCA2Ljg4NyA2Ljg4NyAwIDAgMS0uMjYtLjg3M2MtLjAzMy0uMTQ3LS4wNi0uMy0uMDgtLjQ1M2EyIDIgMCAwIDAtMi0xLjY2aC0yYTIgMiAwIDAgMC0yIDIuMjczIDEyLjY2NyAxMi42NjcgMCAwIDAgMTEuMDEzIDEwLjk3M2guMjU0YTIgMiAwIDAgMCAxLjgyNy0xLjE4NSAyIDIgMCAwIDAgLjE3My0uODIxdi0yYTIgMiAwIDAgMC0xLjY0Ny0xLjkzNFptLjMzMyA0YS42NjYuNjY2IDAgMCAxLS40ODIuNjQxLjcwNy43MDcgMCAwIDEtLjI5LjAyNkExMS4zMzMgMTEuMzMzIDAgMCAxIDIuNzEyIDMuNDhhLjcyNy43MjcgMCAwIDEgLjE2Ny0uNTQ3LjY2Ny42NjcgMCAwIDEgLjUtLjIyN2gyYS42NjcuNjY3IDAgMCAxIC42NjcuNTI3IDcuNDE0IDcuNDE0IDAgMCAwIC40MDcgMS41NzNsLS45MzQuNDM0YS42NjcuNjY3IDAgMCAwLS4zMjcuODg2IDkuNjYgOS42NiAwIDAgMCA0LjY2NyA0LjY2Ny42NjYuNjY2IDAgMCAwIC41MDcgMCAuNjY1LjY2NSAwIDAgMCAuMzgtLjM0N2wuNDEzLS45MzNjLjM0NS4xMjMuNjk3LjIyNiAxLjA1My4zMDcuMTc4LjA0LjM1OC4wNzMuNTQuMWEuNjY3LjY2NyAwIDAgMSAuNTI3LjY2NmwuMDEzIDIuMDhaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNC4xNDYgOGEyIDIgMCAwIDAgLjUyLTEuMzMzIDIgMiAwIDAgMC0yLTJIOS4yMTNBMiAyIDAgMCAwIDcuMzMzIDJoLTRhMiAyIDAgMCAwLTIgMiAyIDIgMCAwIDAgLjUyIDEuMzMzIDIgMiAwIDAgMCAwIDIuNjY3IDIgMiAwIDAgMCAwIDIuNjY3QTIgMiAwIDAgMCAxLjMzMyAxMmEyIDIgMCAwIDAgMiAyaDkuMzMzYTIgMiAwIDAgMCAxLjQ4LTMuMzMzIDIgMiAwIDAgMCAwLTIuNjY3Wm0tNi44MTMgNC42NjdoLTRhLjY2Ny42NjcgMCAwIDEgMC0xLjMzNGg0YS42NjcuNjY3IDAgMCAxIDAgMS4zMzRabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDEgMC0xLjMzM2g0YS42NjcuNjY3IDAgMCAxIDAgMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAxIDEgMC0xLjMzM2g0YS42NjcuNjY3IDAgMCAxIDAgMS4zMzNabTAtMi42NjZoLTRhLjY2Ny42NjcgMCAwIDEgMC0xLjMzNGg0YS42NjcuNjY3IDAgMSAxIDAgMS4zMzRabTUuNzkzIDcuODA2YS42Mi42MiAwIDAgMS0uNDYuMTk0SDkuMjEzYy4xNi0uNDMuMTYtLjkwNCAwLTEuMzM0aDMuNDUzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY3LjY2Ni42NjYgMCAwIDEtLjIwNy40NzNabTAtMi42NjZhLjYyLjYyIDAgMCAxLS40Ni4xOTNIOS4yMTNjLjE2LS40My4xNi0uOTAzIDAtMS4zMzNoMy40NTNhLjY2Ni42NjYgMCAwIDEgLjY2Ny42NjYuNjY2LjY2NiAwIDAgMS0uMjA3LjQ3NFptMC0yLjY2N2EuNjIuNjIgMCAwIDEtLjQ2LjE5M0g5LjIxM2MuMTYtLjQzLjE2LS45MDMgMC0xLjMzM2gzLjQ1M2EuNjY2LjY2NiAwIDAgMSAuNjY3LjY2Ny42NjYuNjY2IDAgMCAxLS4yMDcuNDczWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4zMzMgNS4zMzNIMTBBLjY2Ny42NjcgMCAxIDAgMTAgNGgtLjY2N2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm0wIDIuNjY3SDEwYS42NjcuNjY3IDAgMSAwIDAtMS4zMzRoLS42NjdhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNFpNNiA1LjMzM2guNjY2YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINmEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzWk02IDhoLjY2NmEuNjY3LjY2NyAwIDEgMCAwLTEuMzM0SDZBLjY2Ny42NjcgMCAwIDAgNiA4Wm04IDUuMzMzaC0uNjY3VjJhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3SDMuMzMzQS42NjcuNjY3IDAgMCAwIDIuNjY2IDJ2MTEuMzMzSDJhLjY2Ni42NjYgMCAxIDAgMCAxLjMzM2gxMmEuNjY3LjY2NyAwIDEgMCAwLTEuMzMzWm0tNS4zMzQgMEg3LjMzM3YtMi42NjdoMS4zMzN2Mi42NjdabTMuMzM0IDBoLTJWMTBhLjY2Ny42NjcgMCAwIDAtLjY2Ny0uNjY3SDYuNjY2QS42NjcuNjY3IDAgMCAwIDYgMTB2My4zMzNINFYyLjY2Nmg4djEwLjY2N1pcXFwiIGZpbGw9XFxcIiNBNkI1QkFcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy4zMzQuNjY3SDIuNjY3YTIgMiAwIDAgMC0yIDJ2MTAuNjY3YTIgMiAwIDAgMCAyIDJoMTAuNjY3YTIgMiAwIDAgMCAyLTJWMi42NjdhMiAyIDAgMCAwLTItMlpNNS4zMzQgMTRIMi42NjdBLjY2Ny42NjcgMCAwIDEgMiAxMy4zMzR2LS43ODdhMiAyIDAgMCAwIC42NjcuMTJoMi42NjdWMTRabTAtMi42NjZIMi42NjdBLjY2Ny42NjcgMCAwIDEgMiAxMC42NjdWOS44OGEyIDIgMCAwIDAgLjY2Ny4xMmgyLjY2N3YxLjMzNFptMC0yLjY2N0gyLjY2N0EuNjY3LjY2NyAwIDAgMSAyIDhWMi42NjdBLjY2Ny42NjcgMCAwIDEgMi42NjcgMmgyLjY2N3Y2LjY2N1ptNCA1LjMzM0g2LjY2N3YtNGgyLjY2N3Y0Wm0wLTUuMzMzSDYuNjY3VjJoMi42Njd2Ni42NjdaTTE0IDEzLjMzNGEuNjY3LjY2NyAwIDAgMS0uNjY2LjY2NmgtMi42Njd2LTEuMzMzaDIuNjY3YTIgMiAwIDAgMCAuNjY2LS4xMnYuNzg3Wm0wLTIuNjY3YS42NjcuNjY3IDAgMCAxLS42NjYuNjY3aC0yLjY2N1YxMGgyLjY2N0EyIDIgMCAwIDAgMTQgOS44OHYuNzg3Wk0xNCA4YS42NjcuNjY3IDAgMCAxLS42NjYuNjY3aC0yLjY2N1YyaDIuNjY3YS42NjcuNjY3IDAgMCAxIC42NjYuNjY3VjhabS0yLTMuMzMzYS42NjcuNjY3IDAgMSAwIDAgMS4zMzQuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wk00IDZhLjY2Ny42NjcgMCAxIDAgMC0xLjMzM0EuNjY3LjY2NyAwIDAgMCA0IDZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk00IDcuMzMzYS42NjcuNjY3IDAgMSAwIDAgMS4zMzMuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm04IDBhLjY2Ny42NjcgMCAxIDAgMCAxLjMzNC42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTEuMzM0LTRIMi42NjdhMiAyIDAgMCAwLTIgMnY1LjMzM2EyIDIgMCAwIDAgMiAyaDEwLjY2N2EyIDIgMCAwIDAgMi0yVjUuMzMzYTIgMiAwIDAgMC0yLTJaTTE0IDEwLjY2NmEuNjY3LjY2NyAwIDAgMS0uNjY2LjY2N0gyLjY2N0EuNjY2LjY2NiAwIDAgMSAyIDEwLjY2NlY1LjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdoMTAuNjY3YS42NjcuNjY3IDAgMCAxIC42NjYuNjY3djUuMzMzWk04IDZhMiAyIDAgMSAwIDAgNCAyIDIgMCAwIDAgMC00Wm0wIDIuNjY2YS42NjcuNjY3IDAgMSAxIDAtMS4zMzMuNjY3LjY2NyAwIDAgMSAwIDEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTEuMzMzIDRhLjY2Ny42NjcgMCAwIDAtLjY2Ny42NjZ2NS4wNkw1LjE0IDQuMTkzYS42Ny42NyAwIDAgMC0uOTQ3Ljk0N2w1LjUzMyA1LjUyNmgtNS4wNmEuNjY3LjY2NyAwIDEgMCAwIDEuMzM0aDYuNjY3YS42NjcuNjY3IDAgMCAwIC42NjctLjY2N1Y0LjY2NkEuNjY2LjY2NiAwIDAgMCAxMS4zMzMgNFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTYgNi42NjZoLjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1pNNiA4YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNEEuNjY3LjY2NyAwIDAgMCAxMCA4SDZabTcuMzMzLTIuMDRhLjg4Ljg4IDAgMCAwLS4wNC0uMTh2LS4wNmEuNzE0LjcxNCAwIDAgMC0uMTI3LS4xODdsLTQtNGEuNzEzLjcxMyAwIDAgMC0uMTg2LS4xMjcuMjEzLjIxMyAwIDAgMC0uMDYgMCAuNTg3LjU4NyAwIDAgMC0uMjItLjA3M0g0LjY2N2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoNi42NjZhMiAyIDAgMCAwIDItMlY1Ljk2Wm0tNC0yLjM1NCAxLjcyNyAxLjcyN0gxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LS42Njd2LTEuMDZaTTEyIDEyLjY2NmEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0LjY2NkEuNjY2LjY2NiAwIDAgMSA0IDEyLjY2NlYzLjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdIOHYyYTIgMiAwIDAgMCAyIDJoMnY2Wm0tMi0ySDZBLjY2Ny42NjcgMCAwIDAgNiAxMmg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIm02LjY2NiAxMS43LTEuMTggMS4xNDdhMS42NSAxLjY1IDAgMCAxLTIuMzMzLTIuMzMzTDYuMTggNy40OGExLjY0IDEuNjQgMCAwIDEgMi4yNi0uMDZsLjA4LjA2N2EuNjY3LjY2NyAwIDAgMCAuOTMzLS45NTMgMS44MzYgMS44MzYgMCAwIDAtLjEyLS4xNCAyLjk3MyAyLjk3MyAwIDAgMC00LjA2LjE0NkwyLjIwNiA5LjU3NGEyLjk4NyAyLjk4NyAwIDAgMCA0LjIyIDQuMjJsMS4xNTQtMS4xMjdhLjY2Ny42NjcgMCAwIDAtLjkxNC0uOTY3Wm03LjEyNy05LjQ5M2EyLjk5MyAyLjk5MyAwIDAgMC00LjIyIDBMOC40MiAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuOTEzLjk2NmwxLjE1My0xLjE0NmExLjY1IDEuNjUgMCAwIDEgMi4zMzQgMi4zMzNMOS43OTMgOC41MmExLjY0IDEuNjQgMCAwIDEtMi4yNi4wNmwtLjA4LS4wNjZhLjY2Ny42NjcgMCAwIDAtLjkzMy45NTMgMi45OCAyLjk4IDAgMCAwIDQuMjEzLS4wMDdsMy4wMzMtMy4wMzNhMi45OTMgMi45OTMgMCAwIDAgLjAyNy00LjIyWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4zMzMgNy4zMzRoLS42NjZ2LS42NjdhLjY2Ny42NjcgMCAxIDAtMS4zMzQgMHYuNjY3aC0uNjY2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoLjY2NnYuNjY3YS42NjcuNjY3IDAgMCAwIDEuMzM0IDB2LS42NjdoLjY2NmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm00LjEwNy00QTQuMTk0IDQuMTk0IDAgMCAwIDggMi45NGE0LjE4IDQuMTggMCAwIDAtNS40NCA2LjMybDQgNC4wMzRhMiAyIDAgMCAwIDIuODI3IDBsNC00LjAzNGE0LjE4IDQuMTggMCAwIDAgLjA1My01LjkyNlptLS45NCA0Ljk3My00IDRhLjY2Ni42NjYgMCAwIDEtLjk0NyAwbC00LTRhMi44NiAyLjg2IDAgMCAxIDAtNCAyLjg0NyAyLjg0NyAwIDAgMSA0IDAgLjY2Ny42NjcgMCAwIDAgLjk0NyAwIDIuODQ3IDIuODQ3IDAgMCAxIDQgMCAyLjg2IDIuODYgMCAwIDEgMCA0LjAxM3YtLjAxM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTMuMzMzIDUuMzMzaDkuMzM0YS42NjcuNjY3IDAgMSAwIDAtMS4zMzNIMy4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptMTAuNjY3IDJIMmEuNjY3LjY2NyAwIDEgMCAwIDEuMzM0aDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabS0xLjMzMyAzLjMzNEgzLjMzM2EuNjY3LjY2NyAwIDEgMCAwIDEuMzMzaDkuMzM0YS42NjYuNjY2IDAgMSAwIDAtMS4zMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMC42NjcgOS4zMzNINS4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM2g1LjMzNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0wLTIuNjY3aC00YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0yLjY2Ni00aC0yVjJBLjY2Ny42NjcgMCAxIDAgMTAgMnYuNjY2SDguNjY3VjJhLjY2Ny42NjcgMCAxIDAtMS4zMzQgMHYuNjY2SDZWMmEuNjY3LjY2NyAwIDAgMC0xLjMzMyAwdi42NjZoLTJBLjY2Ny42NjcgMCAwIDAgMiAzLjMzM3Y5LjMzM2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzLjMzM2EuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdabS0uNjY2IDEwYS42NjcuNjY3IDAgMCAxLS42NjcuNjY3SDRhLjY2Ni42NjYgMCAwIDEtLjY2Ny0uNjY3VjRoMS4zMzR2LjY2NmEuNjY3LjY2NyAwIDEgMCAxLjMzMyAwVjRoMS4zMzN2LjY2NmEuNjY3LjY2NyAwIDAgMCAxLjMzNCAwVjRIMTB2LjY2NmEuNjY2LjY2NiAwIDEgMCAxLjMzMyAwVjRoMS4zMzR2OC42NjZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy4wODcgMi40MzNhLjY2Ny42NjcgMCAwIDAtLjU2LS4xMzMgNS4zMzMgNS4zMzMgMCAwIDEtNC4xNDctLjg0Ny42NjcuNjY3IDAgMCAwLS43NiAwIDUuMzMzIDUuMzMzIDAgMCAxLTQuMTQ2Ljg0Ny42NjcuNjY3IDAgMCAwLS44MDcuNjUzVjcuOTJhNiA2IDAgMCAwIDIuNTEzIDQuODg2bDIuNDM0IDEuNzM0YS42NjcuNjY3IDAgMCAwIC43NzMgMGwyLjQzMy0xLjczNGE2IDYgMCAwIDAgMi41MTQtNC44ODZWMi45NTNhLjY2Ny42NjcgMCAwIDAtLjI0Ny0uNTJaTTEyIDcuOTJhNC42NjYgNC42NjYgMCAwIDEtMS45NTMgMy44TDggMTMuMThsLTIuMDQ2LTEuNDZBNC42NjcgNC42NjcgMCAwIDEgNCA3Ljkydi00LjJhNi42NjcgNi42NjcgMCAwIDAgNC0uOTI3IDYuNjY3IDYuNjY3IDAgMCAwIDQgLjkyN3Y0LjJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk03LjMzMyA3LjkzM3YzLjRhLjY2Ny42NjcgMCAxIDAgMS4zMzQgMHYtMy40YTMuMzMzIDMuMzMzIDAgMSAwLTEuMzM0IDBaTTggMi42NjdhMiAyIDAgMSAxIDAgNCAyIDIgMCAwIDEgMC00Wm0yLjgwNyA2Ljk0NmEuNjgxLjY4MSAwIDAgMC0uMjggMS4zMzRjMS41MTMuMyAyLjE0Ljg0IDIuMTQgMS4wNTMgMCAuMzg3LTEuNjM0IDEuMzMzLTQuNjY3IDEuMzMzUzMuMzMzIDEyLjM4NyAzLjMzMyAxMmMwLS4yMTMuNjI3LS43NTMgMi4xNC0xLjA4YS42ODEuNjgxIDAgMCAwLS4yOC0xLjMzM0MzLjE2NyAxMC4wNTMgMiAxMC45MjcgMiAxMmMwIDEuNzUzIDMuMDIgMi42NjcgNiAyLjY2N3M2LS45MTQgNi0yLjY2N2MwLTEuMDczLTEuMTY3LTEuOTQ3LTMuMTkzLTIuMzg3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMiAzLjMzM2gxMmMuNCAwIC42NjctLjI2Ni42NjctLjY2NlMxNC40IDIgMTQgMkgyYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3cy4yNjcuNjY2LjY2Ny42NjZabTEyIDkuMzM0SDcuMzMzYy0uNCAwLS42NjYuMjY2LS42NjYuNjY2cy4yNjcuNjY3LjY2Ny42NjdIMTRjLjQgMCAuNjY3LS4yNjcuNjY3LS42NjdzLS4yNjctLjY2Ni0uNjY3LS42NjZabTAtNS4zMzRIMmMtLjQgMC0uNjY3LjI2Ny0uNjY3LjY2N3MuMjY3LjY2Ny42NjcuNjY3aDEyYy40IDAgLjY2Ny0uMjY3LjY2Ny0uNjY3UzE0LjQgNy4zMzMgMTQgNy4zMzNaTTE0IDEwSDJjLS40IDAtLjY2Ny4yNjctLjY2Ny42NjdzLjI2Ny42NjYuNjY3LjY2NmgxMmMuNCAwIC42NjctLjI2Ni42NjctLjY2NlMxNC40IDEwIDE0IDEwWm0wLTUuMzMzSDJjLS40IDAtLjY2Ny4yNjYtLjY2Ny42NjZTMS42IDYgMiA2aDEyYy40IDAgLjY2Ny0uMjY3LjY2Ny0uNjY3UzE0LjQgNC42NjcgMTQgNC42NjdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIm0xMy4zMzMgNS4zMzMtNC0zLjUwNmEyIDIgMCAwIDAtMi42NjYgMGwtNCAzLjUwNkEyIDIgMCAwIDAgMiA2Ljg0djUuODI3YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjYuODMzYTIgMiAwIDAgMC0uNjY3LTEuNVptLTQgOEg2LjY2N1YxMGEuNjY3LjY2NyAwIDAgMSAuNjY2LS42NjdoMS4zMzRhLjY2Ny42NjcgMCAwIDEgLjY2Ni42Njd2My4zMzNabTMuMzM0LS42NjZhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjZoLTEuMzMzVjEwYTIgMiAwIDAgMC0yLTJINy4zMzNhMiAyIDAgMCAwLTIgMnYzLjMzM0g0YS42NjcuNjY3IDAgMCAxLS42NjctLjY2NlY2LjgzM2EuNjY3LjY2NyAwIDAgMSAuMjI3LS41bDQtMy41YS42NjcuNjY3IDAgMCAxIC44OCAwbDQgMy41YS42NjcuNjY3IDAgMCAxIC4yMjcuNXY1LjgzNFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEwLjY2NyA5LjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzaDUuMzM0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabTAtMi42NjdoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNGg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabTIuNjY2LTRoLTJWMkEuNjY3LjY2NyAwIDEgMCAxMCAydi42NjZIOC42NjdWMmEuNjY3LjY2NyAwIDEgMC0xLjMzNCAwdi42NjZINlYyYS42NjcuNjY3IDAgMCAwLTEuMzMzIDB2LjY2NmgtMkEuNjY3LjY2NyAwIDAgMCAyIDMuMzMzdjkuMzMzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMuMzMzYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTBhLjY2Ny42NjcgMCAwIDEtLjY2Ny42NjdINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWNGgxLjMzNHYuNjY2YS42NjcuNjY3IDAgMSAwIDEuMzMzIDBWNGgxLjMzM3YuNjY2YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNEgxMHYuNjY2YS42NjYuNjY2IDAgMSAwIDEuMzMzIDBWNGgxLjMzNHY4LjY2NlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTggOC41YTIgMiAwIDEgMCAwIDQgMiAyIDAgMCAwIDAtNFptMCAyLjY2NmEuNjY3LjY2NyAwIDEgMSAwLTEuMzM0LjY2Ny42NjcgMCAwIDEgMCAxLjMzNFptLS40NzMtNC4xOTNjLjA2My4wNi4xMzguMTA4LjIyLjE0YS42MjcuNjI3IDAgMCAwIC41MDcgMCAuNjY3LjY2NyAwIDAgMCAuMjItLjE0TDEwIDUuNDczYS42ODguNjg4IDAgMSAwLS45NzMtLjk3M2wtLjM2LjM5M1YyLjVhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYyLjM5M2wtLjM2LS4zOTNBLjY4OC42ODggMCAwIDAgNiA1LjQ3M2wxLjUyNyAxLjVabTUuMTQgMy41MjdhLjY2Ni42NjYgMCAxIDAtMS4zMzIgMCAuNjY2LjY2NiAwIDAgMCAxLjMzMiAwWm0uNjY3LTQuNjY3aC0yYS42NjYuNjY2IDAgMSAwIDAgMS4zMzNoMmEuNjY3LjY2NyAwIDAgMSAuNjY2LjY2N3Y1LjMzM2EuNjY3LjY2NyAwIDAgMS0uNjY2LjY2N0gyLjY2N0EuNjY2LjY2NiAwIDAgMSAyIDEzLjE2NlY3LjgzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdoMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzaC0yYTIgMiAwIDAgMC0yIDJ2NS4zMzNhMiAyIDAgMCAwIDIgMmgxMC42NjdhMiAyIDAgMCAwIDItMlY3LjgzM2EyIDIgMCAwIDAtMi0yWm0tMTAgNC42NjdhLjY2Ny42NjcgMCAxIDAgMS4zMzQgMCAuNjY3LjY2NyAwIDAgMC0xLjMzNCAwWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNiA2LjY2NmguNjY3YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINmEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWk0xMCA4SDZhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM2g0QS42NjcuNjY3IDAgMSAwIDEwIDhabTAgMi42NjZINkEuNjY3LjY2NyAwIDAgMCA2IDEyaDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMy4xNCAyLjg2YTEuMDg1IDEuMDg1IDAgMCAwLS4xLS4wOC41MDcuNTA3IDAgMCAwLS4xMi0uMDZsLS4xMi0uMDUzYS42NjcuNjY3IDAgMCAwLS4zODYuMDQuNTk5LjU5OSAwIDAgMC0uMzYuMzZBLjU2LjU2IDAgMCAwIDEyIDE0YS42NjguNjY4IDAgMSAwIDEuMjgtLjI1NC43NjYuNzY2IDAgMCAwLS4xNC0uMjJabS4xOTQtNy41NjZhLjg4Ljg4IDAgMCAwLS4wNC0uMTh2LS4wNmEuNzE2LjcxNiAwIDAgMC0uMTI3LS4xODdsLTQtNGEuNzEzLjcxMyAwIDAgMC0uMTg3LS4xMjcuMjEzLjIxMyAwIDAgMC0uMDYgMCAuNTg3LjU4NyAwIDAgMC0uMjItLjA3M0g0LjY2N2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJIMTBhLjY2Ny42NjcgMCAxIDAgMC0xLjMzM0g0LjY2N0EuNjY2LjY2NiAwIDAgMSA0IDEyLjY2NlYzLjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdIOHYyYTIgMiAwIDAgMCAyIDJoMlY4YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNS45NlpNMTAgNS4zMzNhLjY2Ny42NjcgMCAwIDEtLjY2Ni0uNjY3di0xLjA2bDEuNzI2IDEuNzI3SDEwWk0xMi42NjcgMTBhLjY2Ny42NjcgMCAwIDAtLjY2Ny42NjZWMTJhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMHYtMS4zMzRhLjY2Ny42NjcgMCAwIDAtLjY2Ny0uNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtMTQuMjEzIDMuMzY3LTQtMS4zMzNoLS4wNDZhLjQ2Ni40NjYgMCAwIDAtLjA5NCAwaC0uMjg2TDYgMy4zMzRsLTMuNzg3LTEuM2EuNjY3LjY2NyAwIDAgMC0uNi4wOTMuNjY3LjY2NyAwIDAgMC0uMjguNTRWMTJhLjY2Ni42NjYgMCAwIDAgLjQ1NC42MzNsNCAxLjMzNGEuNjY3LjY2NyAwIDAgMCAuNDEzIDBMMTAgMTIuN2wzLjc4NyAxLjNjLjA3LjAxLjE0Mi4wMS4yMTMgMGEuNjI2LjYyNiAwIDAgMCAuMzg3LS4xMjcuNjY2LjY2NiAwIDAgMCAuMjgtLjU0VjRhLjY2Ny42NjcgMCAwIDAtLjQ1NC0uNjMzWm0tOC44OCA5LjA0LTIuNjY2LS44ODdWMy41OTRsMi42NjcuODg2djcuOTI3Wm00LS44ODctMi42NjYuODg3VjQuNDhsMi42NjctLjg4NnY3LjkyNlptNCAuODg3LTIuNjY2LS44ODdWMy41OTRsMi42NjcuODg2djcuOTI3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuNjQgNi40MmE1LjY2NiA1LjY2NiAwIDAgMC04Ljc3My00LjE4QTUuNzA3IDUuNzA3IDAgMCAwIDIuMzYgNi40MiA1LjY0IDUuNjQgMCAwIDAgNCAxMC45NzNsMy41MzMgMy41NGEuNjY2LjY2NiAwIDAgMCAuOTQ3IDBsMy41Mi0zLjU0YTUuNjM4IDUuNjM4IDAgMCAwIDEuNjQtNC41NTNabS0yLjU3MyAzLjYxM0w4IDEzLjFsLTMuMDY3LTMuMDY3YTQuMzI3IDQuMzI3IDAgMCAxLTEuMjQ2LTMuNDggNC4zOCA0LjM4IDAgMCAxIDEuOTI2LTMuMjJBNC4zMTMgNC4zMTMgMCAwIDEgMTEuNzEgNC43MmMuMzM0LjU1NS41NCAxLjE3Ni42MDQgMS44MmE0LjMyNiA0LjMyNiAwIDAgMS0xLjI0NiAzLjQ5M1pNOCA0YTMgMyAwIDEgMCAzIDMgMy4wMDcgMy4wMDcgMCAwIDAtMy0zWm0wIDQuNjY2YTEuNjY3IDEuNjY3IDAgMSAxIDAtMy4zMzMgMS42NjcgMS42NjcgMCAwIDEgMCAzLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTQuNjY3IDEwLjY2NmExIDEgMCAwIDAgMS0xIC41MTQuNTE0IDAgMCAwIDAtLjFsMS44Ni0xLjg2aC4zMDZMOC45MDcgOC43OHYuMDUzYTEgMSAwIDEgMCAyIDBWOC43OGwyLjQyNi0yLjQ0N2ExIDEgMCAxIDAtMS0xIC41MjIuNTIyIDAgMCAwIDAgLjFMOS45MjcgNy44NEg5LjgyTDguNjY3IDYuNjY2YTEgMSAwIDAgMC0yIDBsLTIgMmExIDEgMCAwIDAgMCAyWm05IDIuNjY3SDIuMzMzVjJBLjY2Ny42NjcgMCAxIDAgMSAydjEyYS42NjcuNjY3IDAgMCAwIC42NjcuNjY2aDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTIgMTVcXFwiPjxwYXRoIGQ9XFxcIm02LjE0IDEwLjc0Mi4wMi4wNTguMDA3LjAxdi4wMzZhLjA2LjA2IDAgMCAxLS4wMDYuMDI3bC0uMDEuMDIyLS4wMDguMDIxYS4xLjEgMCAwIDEtLjA2LjA2bC0uMDIyLjAwOC0uMDIxLjAxYS4wNi4wNiAwIDAgMS0uMDI3LjAwNmgtLjAwNmEuMTY2LjE2NiAwIDAgMS0uMTA2LS4wNC4yNjYuMjY2IDAgMCAxLS4wNC0uMDY2bC0uMDA0LS4wMS0uMDA1LS4wMWEuMDYuMDYgMCAwIDEtLjAwNS0uMDI4di0uMDIzbC0uMDAxLS4wMjMtLjAwMS0uMDE4LjAwMy0uMDA3LjAxMi0uMDMzYS41NzYuNTc2IDAgMCAxIC4wMjMtLjAzLjE2Ni4xNjYgMCAwIDEgLjA0NC0uMDI2bC4wMTQtLjAwNWEuMTY3LjE2NyAwIDAgMSAuMDk2LS4wMWwuMDk0LS40OTEtLjA5NC40OWEuMTY2LjE2NiAwIDAgMSAuMDc3LjAzOGMuMDA5LjAxLjAxOC4wMjIuMDI2LjAzNFptLjY5My05LjMzNSAzLjk2MyAzLjk2My4wMjMuMDdhLjM3LjM3IDAgMCAxIC4wMTQuMDU0djYuNjczYTEuNSAxLjUgMCAwIDEtMS41IDEuNUgyLjY2N2ExLjUgMS41IDAgMCAxLTEuMDYxLS40NGwtLjM0OC4zNDguMzQ4LS4zNDhhMS41IDEuNSAwIDAgMS0uNDQtMS4wNlYyLjgzM2ExLjUgMS41IDAgMCAxIDEuNS0xLjVoMy45OWwuMDE1LjAwNy4xMTYuMDY3aC4wNDZabS44NTQgMS4zNDZMNi44MzMgMS45djIuMjY3QTEuMTY3IDEuMTY3IDAgMCAwIDggNS4zMzNoMi4yNjdsLS44NTMtLjg1My0xLjcyNy0xLjcyN1pNNi41IDIuMTY3di0uNUgyLjY2N0ExLjE2NyAxLjE2NyAwIDAgMCAxLjUgMi44MzN2OS4zMzRhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjcgMS4xNjZoNi42NjZhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjctMS4xNjZ2LTYuNUg4YTEuNSAxLjUgMCAwIDEtMS41LTEuNXYtMlptLS42MTggNS4yMTVhLjE2Ny4xNjcgMCAwIDEgLjI4NS4xMTh2MS4zMzNhLjE2Ny4xNjcgMCAwIDEtLjMzNCAwVjcuNWMwLS4wNDQuMDE4LS4wODcuMDUtLjExOFpcXFwiIGZpbGw9XFxcIkN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJDdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy4wODcgMi40MzNhLjY2Ny42NjcgMCAwIDAtLjU2LS4xMzMgNS4zMzMgNS4zMzMgMCAwIDEtNC4xNDctLjg0Ny42NjcuNjY3IDAgMCAwLS43NiAwIDUuMzMzIDUuMzMzIDAgMCAxLTQuMTQ2Ljg0Ny42NjcuNjY3IDAgMCAwLS44MDcuNjUzVjcuOTJhNiA2IDAgMCAwIDIuNTEzIDQuODg2bDIuNDM0IDEuNzM0YS42NjcuNjY3IDAgMCAwIC43NzMgMGwyLjQzMy0xLjczNGE2IDYgMCAwIDAgMi41MTQtNC44ODZWMi45NTNhLjY2Ny42NjcgMCAwIDAtLjI0Ny0uNTJaTTEyIDcuOTJhNC42NjYgNC42NjYgMCAwIDEtMS45NTMgMy44TDggMTMuMThsLTIuMDQ2LTEuNDZBNC42NjcgNC42NjcgMCAwIDEgNCA3Ljkydi00LjJhNi42NjcgNi42NjcgMCAwIDAgNC0uOTI3IDYuNjY3IDYuNjY3IDAgMCAwIDQgLjkyN3Y0LjJaTTkuMDI3IDYuMzkzbC0xLjc5MyAxLjgtLjU5NC0uNmEuNjcuNjcgMCAwIDAtLjk0Ni45NDdMNi43NiA5LjYwNmEuNjY3LjY2NyAwIDAgMCAuOTQ3IDBMMTAgNy4zMzNhLjY3LjY3IDAgMSAwLS45NDYtLjk0N2wtLjAyNy4wMDdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0zLjYzNCAxNy45YS41LjUgMCAwIDEtLjUyNC4wNDdsLS4xNDkuMjk3LjE0OS0uMjk3YS41LjUgMCAwIDEtLjIwMi0uMTg0bC0uMjgzLjE3NC4yODMtLjE3NGEuNS41IDAgMCAxLS4wNzUtLjI2M3YtMTVhLjUuNSAwIDAgMSAuNS0uNWgxMy4zMzRhLjUuNSAwIDAgMSAuNS41djE0Ljk5OWEuNS41IDAgMCAxLS4yNzUuNDQ1aC0uMDAxYS41LjUgMCAwIDEtLjUyNS0uMDQ1bC0xLjcyNC0xLjI5LS4yLS4xNS0uMi4xNS0xLjcxNyAxLjI5MWEuNS41IDAgMCAxLS42IDBMMTAuMiAxNi42MDhsLS4yLS4xNS0uMi4xNUw4LjA3NSAxNy45YS41LjUgMCAwIDEtLjYgMGwtMS43MTYtMS4yOTEtLjItLjE1LS4yLjE1LTEuNzI1IDEuMjlabTEyLTEuOC41MzMuMzk5VjNIMy44MzN2MTMuNDk5bC41MzMtLjM5OS44OTItLjY2NmEuNS41IDAgMCAxIC42IDBsMS43MTcgMS4yOS4yLjE1MS4yLS4xNUw5LjcgMTUuNDMzYS41LjUgMCAwIDEgLjYgMGwxLjcyNSAxLjI5Mi4yLjE1LjItLjE1IDEuNzE3LTEuMjkyYS41LjUgMCAwIDEgLjYgMGwuODkyLjY2N1ptLTIuMy05Ljc2N2gtNWEuNS41IDAgMCAxIDAtMWg1YS41LjUgMCAwIDEgMCAxWm0wIDMuMzM0SDYuNjY2YS41LjUgMCAwIDEgMC0xaDYuNjY2YS41LjUgMCAwIDEgMCAxWm0wIDMuMzMzSDYuNjY2YS41LjUgMCAwIDEgMC0xaDYuNjY2YS41LjUgMCAxIDEgMCAxWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCA3LjJhMS4zMzMgMS4zMzMgMCAxIDAgMC0yLjY2N0ExLjMzMyAxLjMzMyAwIDAgMCA4IDcuMlptLS40NzMgNC42MDZhLjY2Ni42NjYgMCAwIDAgLjk0NiAwTDExLjIgOS4wNzNhNC41MjcgNC41MjcgMCAxIDAtNi40IDBsMi43MjcgMi43MzNaTTQuODIgNS41NmEzLjIwNyAzLjIwNyAwIDAgMSAxLjQyLTIuMzY3IDMuMjA3IDMuMjA3IDAgMCAxIDMuNTIgMCAzLjIxMyAzLjIxMyAwIDAgMSAuNSA0Ljk0TDggMTAuMzkzbC0yLjI2LTIuMjZhMy4xOCAzLjE4IDAgMCAxLS45Mi0yLjU3M1ptNy44NDYgNy43NzNIMy4zMzNhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM2g5LjMzNGEuNjY2LjY2NiAwIDEgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNC42NjYgNGEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptOS44MDcgMy44NTMtNi4zMi02LjMwN2EuNjY3LjY2NyAwIDAgMC0uNDg3LS4yMTNoLTRhLjY2Ny42NjcgMCAwIDAtLjQ3My4xOTNsLTEuNjY3IDEuNjZhLjY2Ny42NjcgMCAwIDAtLjE5My40NzR2NGEuNy43IDAgMCAwIC4xOTMuNDczbDYuMzI3IDYuMzMzYS43LjcgMCAwIDAgLjQ3My4xOTQuNjY2LjY2NiAwIDAgMCAuNDc0LS4xOTRsNS42NzMtNS42NzNhLjY2Ny42NjcgMCAwIDAgMC0uOTRaTTguMzI2IDEzLjA2bC01LjY2LTUuNjY3di0zLjQ2bDEuMjY3LTEuMjY3aDMuNDUzbDUuNjY3IDUuNjYtNC43MjcgNC43MzRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMC42NjcgOS4zMzNINS4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM2g1LjMzNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0wLTIuNjY3aC00YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0Wm0yLjY2Ni00aC0yVjJBLjY2Ny42NjcgMCAxIDAgMTAgMnYuNjY2SDguNjY3VjJhLjY2Ny42NjcgMCAxIDAtMS4zMzQgMHYuNjY2SDZWMmEuNjY3LjY2NyAwIDAgMC0xLjMzMyAwdi42NjZoLTJBLjY2Ny42NjcgMCAwIDAgMiAzLjMzM3Y5LjMzM2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzLjMzM2EuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdabS0uNjY2IDEwYS42NjcuNjY3IDAgMCAxLS42NjcuNjY3SDRhLjY2Ni42NjYgMCAwIDEtLjY2Ny0uNjY3VjRoMS4zMzR2LjY2NmEuNjY3LjY2NyAwIDEgMCAxLjMzMyAwVjRoMS4zMzN2LjY2NmEuNjY3LjY2NyAwIDAgMCAxLjMzNCAwVjRIMTB2LjY2NmEuNjY2LjY2NiAwIDEgMCAxLjMzMyAwVjRoMS4zMzR2OC42NjZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk02LjY2NyA1LjMzM2g0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNoLTRhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1pNNS4zMzMgOGg1LjMzNGEuNjY3LjY2NyAwIDAgMCAwLTEuMzM0SDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzRabTAgMi42NjZoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g1LjMzM2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm04LTkuMzMzSDIuNjY3QS42NjcuNjY3IDAgMCAwIDIgMnYxMmEuNjY3LjY2NyAwIDAgMCAxLjA2Ny41MzNsMS4zOC0xLjAzMyAxLjM3MyAxLjAzM2EuNjY2LjY2NiAwIDAgMCAuOCAwTDggMTMuNWwxLjM4IDEuMDMzYS42NjYuNjY2IDAgMCAwIC44IDBsMS4zNzMtMS4wMzMgMS4zOCAxLjAzM0EuNjY3LjY2NyAwIDAgMCAxNCAxNFYyYS42NjYuNjY2IDAgMCAwLS42NjctLjY2N1ptLS42NjYgMTEuMzMzLS43MTQtLjUzM2EuNjY3LjY2NyAwIDAgMC0uOCAwTDkuNzggMTMuMTY2IDguNCAxMi4xMzNhLjY2Ny42NjcgMCAwIDAtLjggMGwtMS4zOCAxLjAzMy0xLjM3My0xLjAzM2EuNjY3LjY2NyAwIDAgMC0uOCAwbC0uNzE0LjUzM3YtMTBoOS4zMzR2MTBaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE4IDE4XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxyZWN0IHdpZHRoPVxcXCIxOFxcXCIgaGVpZ2h0PVxcXCIxOFxcXCIgcng9XFxcIjlcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjxwYXRoIGQ9XFxcIk0yIDlhNyA3IDAgMSAxIDE0IDBBNyA3IDAgMSAxIDIgOVpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjxwYXRoIGQ9XFxcIk0xMy4wODMgOC40MTZoLTMuNXYtMy41YS41ODMuNTgzIDAgMCAwLTEuMTY3IDB2My41aC0zLjVhLjU4My41ODMgMCAwIDAgMCAxLjE2N2gzLjV2My41YS41ODMuNTgzIDAgMCAwIDEuMTY3IDB2LTMuNWgzLjVhLjU4My41ODMgMCAwIDAgMC0xLjE2N1pcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE3IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMi45MzUgNy4zMzNoLTR2LTRhLjY2Ny42NjcgMCAxIDAtMS4zMzMgMHY0aC00YS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoNHY0YS42NjcuNjY3IDAgMSAwIDEuMzM0IDB2LTRoNGEuNjY3LjY2NyAwIDEgMCAwLTEuMzM0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyMSAyMFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNDY0IDEuNjY3QzUuODggMS42NjcgMi4xMyA1LjQxNyAyLjEzIDEwYzAgNC41ODQgMy43NSA4LjMzNCA4LjMzMyA4LjMzNHM4LjMzMy0zLjc1IDguMzMzLTguMzM0YzAtNC41ODMtMy43NS04LjMzMy04LjMzMy04LjMzM1ptMCAxMi41Yy0uNSAwLS44MzMtLjMzMy0uODMzLS44MzMgMC0uNS4zMzMtLjgzNC44MzMtLjgzNC41IDAgLjgzMy4zMzQuODMzLjgzNCAwIC41LS4zMzMuODMzLS44MzMuODMzWk0xMS4yOTcgMTBjMCAuNS0uMzMzLjgzNC0uODMzLjgzNC0uNSAwLS44MzMtLjMzNC0uODMzLS44MzRWNi42NjdjMC0uNS4zMzMtLjgzMy44MzMtLjgzMy41IDAgLjgzMy4zMzMuODMzLjgzM1YxMFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTMuMzMzIDUuMzMzaDkuMzM0YS42NjcuNjY3IDAgMSAwIDAtMS4zMzNIMy4zMzNhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1ptMTAuNjY3IDJIMmEuNjY3LjY2NyAwIDEgMCAwIDEuMzM0aDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzRabS0xLjMzMyAzLjMzNEgzLjMzM2EuNjY3LjY2NyAwIDEgMCAwIDEuMzMzaDkuMzM0YS42NjYuNjY2IDAgMSAwIDAtMS4zMzNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0yIDMuMzMzaDEyYy40IDAgLjY2Ny0uMjY2LjY2Ny0uNjY2UzE0LjQgMiAxNCAySDJjLS40IDAtLjY2Ny4yNjctLjY2Ny42NjdzLjI2Ny42NjYuNjY3LjY2NlptMTIgOS4zMzRINy4zMzNjLS40IDAtLjY2Ni4yNjYtLjY2Ni42NjZzLjI2Ny42NjcuNjY3LjY2N0gxNGMuNCAwIC42NjctLjI2Ny42NjctLjY2N3MtLjI2Ny0uNjY2LS42NjctLjY2NlptMC01LjMzNEgyYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3cy4yNjcuNjY3LjY2Ny42NjdoMTJjLjQgMCAuNjY3LS4yNjcuNjY3LS42NjdTMTQuNCA3LjMzMyAxNCA3LjMzM1pNMTQgMTBIMmMtLjQgMC0uNjY3LjI2Ny0uNjY3LjY2N3MuMjY3LjY2Ni42NjcuNjY2aDEyYy40IDAgLjY2Ny0uMjY2LjY2Ny0uNjY2UzE0LjQgMTAgMTQgMTBabTAtNS4zMzNIMmMtLjQgMC0uNjY3LjI2Ni0uNjY3LjY2NlMxLjYgNiAyIDZoMTJjLjQgMCAuNjY3LS4yNjcuNjY3LS42NjdTMTQuNCA0LjY2NyAxNCA0LjY2N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJtOS41MjcgOS40Ni0yLjE5NCAyLjE5NC0uODYtLjg2YS42NjguNjY4IDAgMSAwLS45NDYuOTRsMS4zMzMgMS4zMzNhLjY2Ni42NjYgMCAwIDAgLjk0NyAwbDIuNjY2LTIuNjY3YS42NjcuNjY3IDAgMSAwLS45NDYtLjk0Wm0yLjc1My0zLjkxM2E0LjY2NyA0LjY2NyAwIDAgMC04LjkwNyAxLjI2NyAyLjY2NyAyLjY2NyAwIDAgMC0uMjUzIDUuMS42NjguNjY4IDAgMSAwIC40MjctMS4yNDcgMS4zMzMgMS4zMzMgMCAwIDEtLjg4LTEuMjY3QTEuMzMzIDEuMzMzIDAgMCAxIDQgOC4wNjdhLjY2Ny42NjcgMCAwIDAgLjY2Ny0uNjY3IDMuMzMzIDMuMzMzIDAgMCAxIDYuNDg2LTEuMDY2LjY2OC42NjggMCAwIDAgLjUyLjQ0IDIgMiAwIDAgMSAuMTYgMy44OTNBLjY3Mi42NzIgMCAxIDAgMTIgMTJoLjE2N2EzLjMzMyAzLjMzMyAwIDAgMCAuMTEzLTYuNDEzdi0uMDRaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAyMCAyMFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTQuMTY3IDcuNjRhLjgzNC44MzQgMCAwIDAtMS4xNzUgMEwxMCAxMC41OSA3LjA1IDcuNjRhLjgzMy44MzMgMCAxIDAtMS4xNzUgMS4xODRsMy41MzQgMy41MzNhLjgzMy44MzMgMCAwIDAgMS4xODMgMGwzLjU3NS0zLjUzM2EuODMzLjgzMyAwIDAgMCAwLTEuMTgzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCA4IDEyXFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk04IDEuMDU0IDYuODA1IDAgMCA2bDYuODA1IDZMOCAxMC45NDcgMi4zOSA2IDggMS4wNTRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDggMTJcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTAgMS4wNTQgMS4xOTUgMCA4IDZsLTYuODA1IDZMMCAxMC45NDcgNS42MSA2IDAgMS4wNTRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMThcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIgZD1cXFwiTTQuMzExIDcuNDMgMy43NCA4aDEwLjkyNmExIDEgMCAwIDEgMCAySDMuNzRsLjU3MS41NjkgNC40IDQuMzg3YS45OTkuOTk5IDAgMCAxIDAgMS40MmwtLjAwMS4wMDJhMS4wMDEgMS4wMDEgMCAwIDEtMS40MiAwaC0uMDAxTC42MjUgOS43MTJhMSAxIDAgMCAxLS4yMDgtLjMyN0wuNDE1IDkuMzhhMSAxIDAgMCAxIDAtLjc2bC4wMDItLjAwN2ExIDEgMCAwIDEgLjIwOC0uMzI3bDYuNjY0LTYuNjY0QTEuMDA1IDEuMDA1IDAgMSAxIDguNzEgMy4wNDRMNC4zMSA3LjQzWlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNNS45NTUgMTAuMzMzaDQuNjdsLTIuMzM2IDIuMjUzLTIuMzM0LTIuMjUzWm0xLjg0NCAzLjE5NGMuMjcuMjYuNzA0LjI2Ljk3NCAwbDMuMTctMy4wNmMuNDM2LS40MTQuMTMyLTEuMTM0LS40ODMtMS4xMzRINS4xMjZjLS42MTUgMC0uOTI2LjcyLS40OSAxLjE0bDMuMTYzIDMuMDUzWm0tMi42OC02Ljg2aDYuMzQxYy42MTUgMCAuOTI2LS43Mi40OS0xLjE0bC0zLjE3LTMuMDZhLjcwNi43MDYgMCAwIDAtLjk3NCAwbC0zLjE3IDMuMDZjLS40MzYuNDItLjEzMiAxLjE0LjQ4MyAxLjE0WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTMuNjM0IDE3LjlhLjUuNSAwIDAgMS0uNTI0LjA0N2wtLjE0OS4yOTcuMTQ5LS4yOTdhLjUuNSAwIDAgMS0uMjAyLS4xODRsLS4yODMuMTc0LjI4My0uMTc0YS41LjUgMCAwIDEtLjA3NS0uMjYzdi0xNWEuNS41IDAgMCAxIC41LS41aDEzLjMzNGEuNS41IDAgMCAxIC41LjV2MTQuOTk5YS41LjUgMCAwIDEtLjI3NS40NDVoLS4wMDFhLjUuNSAwIDAgMS0uNTI1LS4wNDVsLTEuNzI0LTEuMjktLjItLjE1LS4yLjE1LTEuNzE3IDEuMjkxYS41LjUgMCAwIDEtLjYgMEwxMC4yIDE2LjYwOGwtLjItLjE1LS4yLjE1TDguMDc1IDE3LjlhLjUuNSAwIDAgMS0uNiAwbC0xLjcxNi0xLjI5MS0uMi0uMTUtLjIuMTUtMS43MjUgMS4yOVptMTItMS44LjUzMy4zOTlWM0gzLjgzM3YxMy40OTlsLjUzMy0uMzk5Ljg5Mi0uNjY2YS41LjUgMCAwIDEgLjYgMGwxLjcxNyAxLjI5LjIuMTUxLjItLjE1TDkuNyAxNS40MzNhLjUuNSAwIDAgMSAuNiAwbDEuNzI1IDEuMjkyLjIuMTUuMi0uMTUgMS43MTctMS4yOTJhLjUuNSAwIDAgMSAuNiAwbC44OTIuNjY3Wm0tMi4zLTkuNzY3aC01YS41LjUgMCAwIDEgMC0xaDVhLjUuNSAwIDAgMSAwIDFabTAgMy4zMzRINi42NjZhLjUuNSAwIDAgMSAwLTFoNi42NjZhLjUuNSAwIDAgMSAwIDFabTAgMy4zMzNINi42NjZhLjUuNSAwIDAgMSAwLTFoNi42NjZhLjUuNSAwIDEgMSAwIDFaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xMy42NDcgNC45MTNWNC44NmwtLjA0LS4xYS40NjYuNDY2IDAgMCAwLS4wNDctLjA2LjYyMy42MjMgMCAwIDAtLjA2LS4wOGwtLjA2LS4wNDctLjEwNy0uMDUzLTUtMy4wODdhLjY2Ny42NjcgMCAwIDAtLjcwNiAwTDIuNjY3IDQuNTJsLS4wNi4wNTMtLjA2LjA0N2EuNjI3LjYyNyAwIDAgMC0uMDYuMDguNDczLjQ3MyAwIDAgMC0uMDQ3LjA2bC0uMDQuMXYuMDUzYS43NjcuNzY3IDAgMCAwIDAgLjE3NHY1LjgyNmEuNjY3LjY2NyAwIDAgMCAuMzEzLjU2N2w1IDMuMDg3Yy4wMzEuMDE5LjA2NS4wMzIuMS4wNGguMDU0YS41NzQuNTc0IDAgMCAwIC4zNDYgMGguMDU0YS4zMTQuMzE0IDAgMCAwIC4xLS4wNGw0Ljk2Ni0zLjA4N2EuNjY4LjY2OCAwIDAgMCAuMzE0LS41NjdWNS4wODdhLjc2MS43NjEgMCAwIDAgMC0uMTc0Wm0tNi4zMTQgNy44OTRMMy42NjcgMTAuNTRWNi4yODdsMy42NjYgMi4yNnY0LjI2Wk04IDcuMzkzIDQuMjY3IDUuMDg3IDggMi43ODdsMy43MzMgMi4zTDggNy4zOTNabTQuMzMzIDMuMTQ3LTMuNjY2IDIuMjY3di00LjI2bDMuNjY2LTIuMjZ2NC4yNTNaXFxcIiBmaWxsPVxcXCIjQTY2RUU5XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNS4zMzQgNy4zMzRoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDEwLjY2NyAzLjJBLjY2Ny42NjcgMCAwIDAgMTAgMi42NjdINmEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ny42NjcgMCAwIDAgLjUyNy4yNDdaTTYuNTQ3IDRoMi45MDdsLjQgMkg2LjE0N2wuNC0yWm04LjEyIDUuMkEuNjY3LjY2NyAwIDAgMCAxNCA4LjY2N2gtNGEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ni42NjYgMCAwIDAgLjUyNy4yNDdoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDE0LjY2NyA5LjJabS00LjUyIDIuOC40LTJoMi45MDZsLjQgMmgtMy43MDZaTTYgOC42NjhIMmEuNjY3LjY2NyAwIDAgMC0uNjY2LjUzM2wtLjY2NyAzLjMzNGEuNjY3LjY2NyAwIDAgMCAuMTQuNTUzLjY2Ni42NjYgMCAwIDAgLjUyNy4yNDdoNS4zMzNhLjY2Ny42NjcgMCAwIDAgLjUxMy0uMjQ3LjY2Ni42NjYgMCAwIDAgLjE1NC0uNTUzTDYuNjY3IDkuMkEuNjY3LjY2NyAwIDAgMCA2IDguNjY3Wm0tMy44NTMgMy4zMzQuNC0yaDIuOTA3bC40IDJIMi4xNDdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05LjMzNCA1LjMzM0gxMEEuNjY3LjY2NyAwIDAgMCAxMCA0aC0uNjY2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNabTAgMi42NjdIMTBhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNGgtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0Wk02IDUuMzMzaC42NjdhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM0g2YS42NjcuNjY3IDAgMSAwIDAgMS4zMzNaTTYgOGguNjY3YS42NjcuNjY3IDAgMSAwIDAtMS4zMzRINkEuNjY3LjY2NyAwIDAgMCA2IDhabTggNS4zMzNoLS42NjZWMmEuNjY2LjY2NiAwIDAgMC0uNjY3LS42NjdIMy4zMzNBLjY2Ny42NjcgMCAwIDAgMi42NjcgMnYxMS4zMzNIMmEuNjY2LjY2NiAwIDEgMCAwIDEuMzMzaDEyYS42NjcuNjY3IDAgMCAwIDAtMS4zMzNabS01LjMzMyAwSDcuMzM0di0yLjY2N2gxLjMzM3YyLjY2N1ptMy4zMzMgMGgtMlYxMGEuNjY3LjY2NyAwIDAgMC0uNjY2LS42NjdINi42NjdBLjY2Ny42NjcgMCAwIDAgNiAxMHYzLjMzM0g0VjIuNjY2aDh2MTAuNjY3WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE3IDE2XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJtMTIuMzIyIDUuNjguMDkyLjIxMi4yMjEuMDY3YTIuODM0IDIuODM0IDAgMCAxLS4wOTQgNS40NS4xNjguMTY4IDAgMCAxLS4wODMtLjMyNWwuMDA4LS4wMDJhMi41IDIuNSAwIDAgMC0uMi00Ljg2NmwtLjAwOC0uMDAyYS4xNjcuMTY3IDAgMCAxLS4xMy0uMTEybC0uMDAyLS4wMDRhMy44MzQgMy44MzQgMCAwIDAtNy40NiAxLjIzNS4xNjcuMTY3IDAgMCAxLS4xNjYuMTY3IDEuODMzIDEuODMzIDAgMSAwIDAgMy42NjcuMTY3LjE2NyAwIDAgMSAwIC4zMzNoLS4wMDFhMi4xNjcgMi4xNjcgMCAwIDEtLjUxLTQuMjczbC4zMzYtLjA4LjA0NC0uMzQyYTQuMTY3IDQuMTY3IDAgMCAxIDcuOTUzLTEuMTI1Wm0tMi4zNyA0LjE5OS4wMDIuMDAzYS4xNjcuMTY3IDAgMCAxIDAgLjIzN2wtLjg2Ni44Ni0uMzU4LjM1NS4zNTguMzU0Ljg2Ni44NmEuMTY3LjE2NyAwIDAgMSAwIC4yMzdsLS4wMDIuMDAzYS4xNjYuMTY2IDAgMCAxLS4xODMuMDM3LjE2Ni4xNjYgMCAwIDEtLjA1NC0uMDM3bC0uODYtLjg2Ny0uMzU1LS4zNTctLjM1NS4zNTctLjg2Ljg2N2EuMTY2LjE2NiAwIDAgMS0uMTgzLjAzNy4xNjYuMTY2IDAgMCAxLS4wNTQtLjAzN2wtLjAwMy0uMDAzYS4xNjcuMTY3IDAgMCAxIDAtLjIzNmwuODY3LS44Ni4zNTgtLjM1NS0uMzU4LS4zNTUtLjg2NS0uODU5YS4xNy4xNyAwIDAgMSAuMjQtLjI0bC44NTguODY2LjM1NS4zNTcuMzU1LS4zNTcuODYtLjg2N2EuMTY3LjE2NyAwIDAgMSAuMjM3IDBaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDE0IDE0XFxcIj48cGF0aCBkPVxcXCJNNyAuMzMyYy0zLjY2NyAwLTYuNjY3IDMtNi42NjcgNi42NjcgMCAzLjY2NiAzIDYuNjY2IDYuNjY3IDYuNjY2IDMuNjY2IDAgNi42NjYtMyA2LjY2Ni02LjY2NiAwLTMuNjY3LTMtNi42NjctNi42NjYtNi42NjdabTIuOCA1LjUzMy0zLjIgMy4yYS42NDQuNjQ0IDAgMCAxLS45MzQgMEw0LjIgNy42YS42NDQuNjQ0IDAgMCAxIDAtLjkzNC42NDQuNjQ0IDAgMCAxIC45MzMgMGwxIDEgMi43MzMtMi43MzNhLjY0NC42NDQgMCAwIDEgLjkzNCAwIC42NDUuNjQ1IDAgMCAxIDAgLjkzM1pcXFwiIGZpbGw9XFxcIiMxNzk5N0JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIk0xNy4xNjcgMy4zMzR2LS41aC0xMXYxMWgxMXYtMTAuNVpNOC4yMDQgOC43NWwuNDYzLS40NjYgMS4zNyAxLjM3Ni4zNTUuMzU3LjM1NC0uMzU3IDMuOTItMy45NS40NjMuNDY1LTQuNzM3IDQuNzhMOC4yMDQgOC43NVptLTUuMzcgNy45MTZ2LjVIMTQuNXYuNjY3SDMuMzMzYy0uNjQgMC0xLjE2Ni0uNTI2LTEuMTY2LTEuMTY3VjUuNWguNjY2djExLjE2N1ptMy44MzMtMTQuNWgxMGMuNjQgMCAxLjE2Ni41MjYgMS4xNjYgMS4xNjd2MTBjMCAuNjQtLjUyNiAxLjE2Ni0xLjE2NiAxLjE2NmgtMTBjLS42NCAwLTEuMTY3LS41MjYtMS4xNjctMS4xNjZ2LTEwYzAtLjY0LjUyNi0xLjE2NyAxLjE2Ny0xLjE2N1pcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTIgMTBcXFwiPjxwYXRoIGQ9XFxcIm0uNzUgNS4yNSAzLjUgMy41IDctNy41XFxcIiBzdHJva2U9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS41XFxcIiBzdHJva2UtbGluZWNhcD1cXFwicm91bmRcXFwiIHN0cm9rZS1saW5lam9pbj1cXFwicm91bmRcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLWxpbmVjYXA9XFxcInJvdW5kXFxcIiBzdHJva2UtbGluZWpvaW49XFxcInJvdW5kXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiIGNsYXNzPVxcXCJjaGV2cm9uX3N2Z19fZmVhdGhlciBjaGV2cm9uX3N2Z19fZmVhdGhlci1jaGV2cm9ucy1yaWdodFxcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJtMTMgMTcgNS01LTUtNU02IDE3bDUtNS01LTVcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE4IDE5XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05IDIuNDM0Yy00LjEyNSAwLTcuNSAzLjM3NS03LjUgNy41czMuMzc1IDcuNSA3LjUgNy41IDcuNS0zLjM3NSA3LjUtNy41LTMuMzc1LTcuNS03LjUtNy41Wm0yLjc3NSA5LjIyNWMuMy4zLjMuNzUgMCAxLjA1LS4zLjMtLjc1LjMtMS4wNSAwTDkgMTAuOTg0bC0xLjcyNSAxLjcyNWMtLjMuMy0uNzUuMy0xLjA1IDAtLjMtLjMtLjMtLjc1IDAtMS4wNUw3Ljk1IDkuOTM0IDYuMjI1IDguMjA5Yy0uMy0uMy0uMy0uNzUgMC0xLjA1LjMtLjMuNzUtLjMgMS4wNSAwTDkgOC44ODRsMS43MjUtMS43MjVjLjMtLjMuNzUtLjMgMS4wNSAwIC4zLjMuMy43NSAwIDEuMDVMMTAuMDUgOS45MzRsMS43MjUgMS43MjVaXFxcIiBmaWxsPVxcXCIjRTM0RDVCXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNOC43NSA1LjQ1N2gtMS41QTEuMDgzIDEuMDgzIDAgMCAwIDYuMTY3IDYuNTR2M2ExLjA4MyAxLjA4MyAwIDAgMCAxLjA4MyAxLjA4M2gxLjVBMS4wODQgMS4wODQgMCAwIDAgOS44MzMgOS41NGEuNDE3LjQxNyAwIDAgMSAuODM0IDAgMS45MTcgMS45MTcgMCAwIDEtMS45MTcgMS45MTdoLTEuNUExLjkxNiAxLjkxNiAwIDAgMSA1LjMzMyA5LjU0di0zQTEuOTE3IDEuOTE3IDAgMCAxIDcuMjUgNC42MjNoMS41YTEuOTE3IDEuOTE3IDAgMCAxIDEuOTE3IDEuOTE3LjQxNi40MTYgMCAxIDEtLjgzNCAwQTEuMDgzIDEuMDgzIDAgMCAwIDguNzUgNS40NTdaTTQuMDE4IDIuMDhBNy4xNjcgNy4xNjcgMCAxIDEgMTEuOTgyIDE0IDcuMTY3IDcuMTY3IDAgMCAxIDQuMDE4IDIuMDhabS40NjMgMTEuMjI1QTYuMzM0IDYuMzM0IDAgMSAwIDExLjUyIDIuNzc0YTYuMzM0IDYuMzM0IDAgMCAwLTcuMDQgMTAuNTMyWlxcXCIgZmlsbD1cXFwiI0E2QjVCQVxcXCIgc3Ryb2tlPVxcXCIjQTZCNUJBXFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE0IDE0XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05LjkxNyA0LjA4M2E0LjUxNSA0LjUxNSAwIDEgMC01LjgzNCA1LjgzNCA0LjUxNSA0LjUxNSAwIDEgMCA1LjgzNC01LjgzNFptLS45MzQuOTM0YTMuNDUzIDMuNDUzIDAgMCAxLS4wMyAxLjQ0N0w3LjUzMiA1LjA1MWMuMjU2LS4wNjEuNTE4LS4wOTMuNzgxLS4wOTQuMjI0IDAgLjQ0Ni4wMjIuNjY1LjA2NGwuMDA2LS4wMDVabS0uNTQ4IDIuNTY2YTMuNSAzLjUgMCAwIDEtLjg1Mi44NTJMNS41NjUgNi40MTdhMy41IDMuNSAwIDAgMSAuODUyLS44NTJsMi4wMTggMi4wMThabS00LjY2Ny44NTJhMy4zNTQgMy4zNTQgMCAxIDEgNC42NjctNC42NjdoLS4xNDZhNC41MjcgNC41MjcgMCAwIDAtNC40OTcgNC41NDRjMCAuMDQ3LjAwNS4xLjAwNS4xNDZsLS4wMjktLjAyM1ptMS4yMjUuNTE5YTMuNTcgMy41NyAwIDAgMS0uMDY0LS42NjVjLjAwMS0uMjYzLjAzMy0uNTI2LjA5My0uNzgyTDYuNDQgOC45MjVjLS4yNTYuMDYtLjUxOS4wOTItLjc4Mi4wOTNhMy41NyAzLjU3IDAgMCAxLS42MzYtLjA0bC0uMDI5LS4wMjRabTMuMzIgMi43MTJhMy4zNjUgMy4zNjUgMCAwIDEtMi43NzEtMS40NjRoLjE0NWE0LjUyNyA0LjUyNyAwIDAgMCA0LjUyMS00LjUxNXYtLjE0NWEzLjM1NCAzLjM1NCAwIDAgMS0xLjg5NiA2LjEyNFpcXFwiIGZpbGw9XFxcIiNGNEI3ODRcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgNTIgNTJcXFwiPjxjaXJjbGUgY3g9XFxcIjI2XFxcIiBjeT1cXFwiMjZcXFwiIHI9XFxcIjI1LjI1XFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjVcXFwiLz48cGF0aCBkPVxcXCJNMzcuNCAzNy44MmMtLjA1MS0uNjA5LS4wNS01LjM4My0uMDM2LTguMzE4YS42LjYgMCAwIDAtLjU5OC0uNjA0aC0uMDAzYS42LjYgMCAwIDAtLjYuNTk4YzAgLjAyMi0uMDEgMi4xMi0uMDEgNC4yMDQuMDAyIDIuMTEyLjAwNCAzLjIyNC4wMjkgMy44MzRsLTkuODQ5IDIuOTYzYS41OTcuNTk3IDAgMCAwIC4wNTQtLjI0OHYtNy44OTdhLjYuNiAwIDEgMC0xLjIwMiAwdjcuODk3YzAgLjA1NS4wMDkuMTA4LjAyMi4xNTlsLTkuNTYtMi45MDgtLjAwOC03LjlhLjYuNiAwIDAgMC0uNi0uNjAxaC0uMDAxYS42LjYgMCAwIDAtLjYuNmwuMDA3IDguMzQ3YS42LjYgMCAwIDAgLjQyNS41NzRsMTAuODY4IDMuMzA0YS41OTIuNTkyIDAgMCAwIC4zNDggMGwxMC45MDMtMy4yOGEuNi42IDAgMCAwIC40MS0uNzI0Wm0tLjQ3Mi0uNDRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiIzE4QUNCMlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuM1xcXCIvPjxwYXRoIGQ9XFxcIm00MC4wNCAyMy43NDYtMy4zNjUtMS45MDItLjAxMy0uMDA2YTEyLjAwNCAxMi4wMDQgMCAwIDAtMi4zMzEtMy4yNTkuNi42IDAgMSAwLS44NDcuODUyIDEwLjc3OCAxMC43NzggMCAwIDEgMi42MjQgNC4yMTdsLTEuNTgyLjQzM2MtMS4yNTgtMy42MzMtNC43MzMtNi4xMzItOC42MTMtNi4xMzJhOS4xMTUgOS4xMTUgMCAwIDAtNC41NzIgMS4yMjguNjAxLjYwMSAwIDAgMCAuNjAzIDEuMDM5IDcuOTA4IDcuOTA4IDAgMCAxIDMuOTY5LTEuMDY2IDcuOTUgNy45NSAwIDAgMSA3LjQ1IDUuMjVsLTEuNTgzLjQzM2E2LjMxMiA2LjMxMiAwIDAgMC01Ljg2Ny00LjA0NyA2LjI5NSA2LjI5NSAwIDAgMC01Ljg3OSA0LjA3NWwtMS41ODYtLjQyNWE3Ljk0IDcuOTQgMCAwIDEgMS44NzEtMi45Ny42LjYgMCAxIDAtLjg1LS44NDkgOS4xNDggOS4xNDggMCAwIDAtMi4xODQgMy41MDZsLTEuNTgzLS40MjVjLjEwMi0uMzEuMjE4LS42MTMuMzQ2LS45MDlhLjYwNy42MDcgMCAwIDAgLjE3Mi0uMzc2IDEwLjc3NiAxMC43NzYgMCAwIDEgOS42OTMtNi4xYzEuODkgMCAzLjc0OS40OTcgNS4zNzUgMS40MzlhLjYwMS42MDEgMCAwIDAgLjYwMi0xLjA0IDExLjk0OSAxMS45NDkgMCAwIDAtNS45NzctMS42IDExLjk4IDExLjk4IDAgMCAwLTEwLjgxNCA2Ljg2bC0zLjEzOSAxLjc3NGEuNi42IDAgMCAwIC4zNTggMS4xMmwxLjMyLS4xMzYtMS40NzMgMS44N2EuNTk5LjU5OSAwIDAgMCAuMzAxLjk0N2wxMS4zNjEgMy4zNzhhLjYwMS42MDEgMCAwIDAgLjY5MS0uMjc0bDEuNDA5LTIuNDE4IDEuMzEgMi4xNzdhLjYuNiAwIDAgMCAuNjczLjI3bDExLjQ0Ny0zLjEyOWEuNjAyLjYwMiAwIDAgMCAuMzEzLS45NTFsLTEuNDg3LTEuODg5IDEuNDk5LjE1NmEuNi42IDAgMCAwIC4zNTgtMS4xMlptLTE0LjEyNy0xLjc1OGE1LjEwNCA1LjEwNCAwIDAgMSA0LjcwMiAzLjE2NWwtNC43MDMgMS4yODgtNC43MS0xLjI2NWE1LjA5IDUuMDkgMCAwIDEgNC43MTEtMy4xODhabS0yLjE5NiA3LjY1Mi0xMC4wNjEtMi45OTIgMS40Ni0xLjg1NUwyNSAyNy40MzlsLTEuMjgyIDIuMjAxWm00LjMxNS0uMjQtMS4xODQtMS45NjQgOS44Ny0yLjY0MyAxLjQ0OCAxLjgzOC0xMC4xMzQgMi43N1ptLTYuNDQ3LTE1Ljk3YS42MDEuNjAxIDAgMCAwIDEuMTU1LS4zM2wtLjgtMi44MDNhLjYwMS42MDEgMCAwIDAtMS4xNTYuMzNsLjgwMSAyLjgwNFptNy43NTUuNDc5YS42MDEuNjAxIDAgMCAwIC43NDItLjQxMmwuOC0yLjgwNGEuNi42IDAgMSAwLTEuMTU1LS4zM2wtLjggMi44MDRhLjYuNiAwIDAgMCAuNDEyLjc0MlptNi41NyAzLjY3N2EuNjAxLjYwMSAwIDAgMCAuNDItLjE3bDIuMDUzLTIuMDAzYS42LjYgMCAxIDAtLjgzOS0uODZsLTIuMDUyIDIuMDAyYS42LjYgMCAwIDAgLjQxOSAxLjAzWm0tMjAuNTQtLjIyMWEuNjAyLjYwMiAwIDAgMCAuODQtLjg2bC0yLjAwMy0xLjk1MmEuNi42IDAgMSAwLS44MzguODZsMi4wMDEgMS45NTJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiIzE4QUNCMlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuM1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCA1MiA1MlxcXCI+PGNpcmNsZSBjeD1cXFwiMjZcXFwiIGN5PVxcXCIyNlxcXCIgcj1cXFwiMjUuMjVcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuNVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC44NzEgMTcuMjA4QTEwLjE2NyAxMC4xNjcgMCAwIDEgMjYgMTUuODIzYTEwLjExIDEwLjExIDAgMCAxIDcuMTk2IDIuOTguNTY2LjU2NiAwIDAgMCAuODA0IDBBLjU3LjU3IDAgMCAwIDM0IDE4YTExLjI0IDExLjI0IDAgMCAwLTgtMy4zMTNjLTIuMDA4IDAtMy45OC41MzItNS43MDMgMS41NGEuNTY4LjU2OCAwIDEgMCAuNTc0Ljk4MlpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCIjMThBQ0IyXFxcIiBzdHJva2Utd2lkdGg9XFxcIi4zXFxcIi8+PHBhdGggZD1cXFwiTTI2IDEyYy0zLjc4IDAtNy4zMjEgMS40ODItOS45NzQgNC4xNzVhLjU3LjU3IDAgMCAwIC44MS43OThBMTIuNzcgMTIuNzcgMCAwIDEgMjYgMTMuMTM3YzcuMDkyIDAgMTIuODYzIDUuNzcgMTIuODYzIDEyLjg2MyAwIDIuMTg0LS41NDggNC4yNDQtMS41MTMgNi4wNDdsLTEuNzctMi43MDdhNC4zODEgNC4zODEgMCAwIDAgMS43MzQtMy40OSA0LjM5MiA0LjM5MiAwIDAgMC00LjM4OC00LjM4OCA0LjM0IDQuMzQgMCAwIDAtMi4zODkuNzA3IDUuOTMgNS45MyAwIDAgMC05LjEyMy4wNiA0LjM3NyA0LjM3NyAwIDAgMC0yLjQ3OS0uNzY3IDQuMzkyIDQuMzkyIDAgMCAwLTQuMzg3IDQuMzg3YzAgMS40MTUuNjc0IDIuNjc0IDEuNzE2IDMuNDc3bC0xLjYzNSAyLjY4MWExMi44NiAxMi44NiAwIDAgMSAuMjA0LTEyLjM5My41NjkuNTY5IDAgMSAwLS45ODctLjU2NUExNCAxNCAwIDAgMCAxMiAyNmMwIDUuMDk1IDIuNzM2IDkuNTY0IDYuODE3IDEyLjAxM2EuNTY2LjU2NiAwIDAgMCAuMzI1LjE4OUExMy45MTEgMTMuOTExIDAgMCAwIDI2IDQwYzcuNzE5IDAgMTQtNi4yOCAxNC0xNHMtNi4yODEtMTQtMTQtMTRabTYuOTI1IDEwLjU5OWEzLjI1MyAzLjI1MyAwIDAgMSAzLjI1IDMuMjUgMy4yNTMgMy4yNTMgMCAwIDEtMy4yNSAzLjI1Yy0uNTc2IDAtMS4xMjctLjE1LTEuNjE4LS40MzRBNS45MDYgNS45MDYgMCAwIDAgMzEuOTQgMjZhNS45MDMgNS45MDMgMCAwIDAtLjc1Ny0yLjg5NiAzLjIxNyAzLjIxNyAwIDAgMSAxLjc0LS41MDVaTTI2IDIxLjE5NkE0LjgxIDQuODEgMCAwIDEgMzAuODAzIDI2IDQuODEgNC44MSAwIDAgMSAyNiAzMC44MDQgNC44MSA0LjgxIDAgMCAxIDIxLjE5NSAyNiA0LjgxIDQuODEgMCAwIDEgMjYgMjEuMTk2Wm0tMTAuMzE2IDQuNjUzYTMuMjUzIDMuMjUzIDAgMCAxIDUuMDkyLTIuNjc4QTUuOTA1IDUuOTA1IDAgMCAwIDIwLjA1OCAyNmMwIC45MzMuMjE3IDEuODE2LjYwMSAyLjYwM2EzLjI1MyAzLjI1MyAwIDAgMS00Ljk3Ni0yLjc1NFptMy4zODEgMTAuOTgxYTEyLjk2MiAxMi45NjIgMCAwIDEtMy43NzktMy43MTlsMS45NTktMy4yMTNjLjUyLjIxOCAxLjA5LjMzOSAxLjY4OS4zMzkuODMyIDAgMS42MjctLjIzIDIuMzIxLS42NjVhNiA2IDAgMCAwIDEuMyAxLjI2NWwtMy40OSA1Ljk5M1pNMjYgMzguODY0Yy0yLjE0NiAwLTQuMTctLjUzLTUuOTUxLTEuNDYzbDMuNDktNS45OTVhNS45IDUuOSAwIDAgMCAyLjQ2LjUzNWMuODYxIDAgMS42OC0uMTg1IDIuNDE4LS41MTZsMy40OTUgNS45OTdBMTIuNzg0IDEyLjc4NCAwIDAgMSAyNiAzOC44NjRabTYuODk3LTIuMDEtMy40OS01Ljk5Yy40OS0uMzQ1LjkyNi0uNzYyIDEuMjkyLTEuMjM1YTQuMzQ5IDQuMzQ5IDAgMCAwIDIuMjI2LjYwN2MuNTkgMCAxLjE1Mi0uMTE4IDEuNjY2LS4zM2wyLjExIDMuMjI0YTEyLjk3MyAxMi45NzMgMCAwIDEtMy44MDQgMy43MjNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiIzE4QUNCMlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuM1xcXCIvPjxwYXRoIGQ9XFxcIk0yNiAyOS44MDNhMy44MjMgMy44MjMgMCAwIDAgMy4wNDgtMS41MjguNTY5LjU2OSAwIDAgMC0uOTEtLjY4IDIuNjY4IDIuNjY4IDAgMCAxLTQuMzM3LS4wODYuNTY5LjU2OSAwIDAgMC0uOTM4LjY0M0EzLjgwNCAzLjgwNCAwIDAgMCAyNiAyOS44MDNaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiIzE4QUNCMlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuM1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxMiAxNFxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgZD1cXFwiTTguMTY3IDN2LjVoMy4xNjZhLjE2Ny4xNjcgMCAwIDEgMCAuMzMzaC0xLjE2NnY3LjgzM2ExLjUgMS41IDAgMCAxLTEuNSAxLjVIMy4zMzNhMS41IDEuNSAwIDAgMS0xLjA2LS40MzlsLS4zNTQuMzU0LjM1NC0uMzU0YTEuNSAxLjUgMCAwIDEtLjQ0LTEuMDZWMy44MzJILjY2N2EuMTY3LjE2NyAwIDEgMSAwLS4zMzNoMy4xNjZWMi4zMzNhMS41IDEuNSAwIDAgMSAxLjUtMS41aDEuMzM0YTEuNSAxLjUgMCAwIDEgMS41IDEuNVYzWm0tLjgzNC41aC41VjIuMzMzYTEuMTY3IDEuMTY3IDAgMCAwLTEuMTY2LTEuMTY3SDUuMzMzYTEuMTY3IDEuMTY3IDAgMCAwLTEuMTY2IDEuMTY3VjMuNWgzLjE2NlptLTQuNjY2LjMzM2gtLjV2Ny44MzNhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjYgMS4xNjdoNS4zMzRhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjYtMS4xNjdWMy44MzNIMi42NjdabTIuMTE4IDYuNjE4YS4xNjcuMTY3IDAgMCAxLS4yODUtLjExOHYtNGEuMTY3LjE2NyAwIDEgMSAuMzMzIDB2NGEuMTY3LjE2NyAwIDAgMS0uMDQ4LjExOFptMi42NjYgMGEuMTY3LjE2NyAwIDAgMS0uMjg0LS4xMTh2LTRhLjE2Ny4xNjcgMCAwIDEgLjMzMyAwdjRhLjE2Ny4xNjcgMCAwIDEtLjA0OS4xMThaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE3IDE2XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIk0xMC42MjQgNS42NjdoLTQuNjdMOC4yOSAzLjQxNGwyLjMzNSAyLjI1M1pNOC43OCAyLjQ3NGEuNzA2LjcwNiAwIDAgMC0uOTc0IDBsLTMuMTcgMy4wNmMtLjQzNi40MTMtLjEzMiAxLjEzMy40ODMgMS4xMzNoNi4zMzRjLjYxNSAwIC45MjYtLjcyLjQ5LTEuMTRMOC43OCAyLjQ3NFptMi42OCA2Ljg2SDUuMTE5Yy0uNjE1IDAtLjkyNi43Mi0uNDkgMS4xNGwzLjE3IDMuMDZjLjI3LjI2LjcwNC4yNi45NzQgMGwzLjE3LTMuMDZjLjQzNi0uNDIuMTMyLTEuMTQtLjQ4My0xLjE0WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJtMTMuODA3IDExLjE0LTEuNjE0LTEuNjE0YS42NjYuNjY2IDAgMCAwLS45NDYgMEw4Ljg2IDExLjkxM2EuNjY3LjY2NyAwIDAgMC0uMTkzLjQ3M1YxNGEuNjY3LjY2NyAwIDAgMCAuNjY2LjY2NmgxLjYxNGEuNjY4LjY2OCAwIDAgMCAuNDczLS4xOTNsMi4zODctMi4zODdhLjY2Ny42NjcgMCAwIDAgMC0uOTQ2Wm0tMy4xNCAyLjE5M0gxMHYtLjY2N2wxLjcyLTEuNzIuNjY3LjY2Ny0xLjcyIDEuNzJabS00IDBINGEuNjY2LjY2NiAwIDAgMS0uNjY3LS42NjdWMy4zMzNBLjY2Ny42NjcgMCAwIDEgNCAyLjY2NmgzLjMzM3YyYTIgMiAwIDAgMCAyIDJoMnYuNjY3YS42NjcuNjY3IDAgMCAwIDEuMzM0IDBWNS45NmEuODguODggMCAwIDAtLjA0LS4xOHYtLjA2YS43MTQuNzE0IDAgMCAwLS4xMjctLjE4N2wtNC00YS43MTMuNzEzIDAgMCAwLS4xODctLjEyNy4yMTMuMjEzIDAgMCAwLS4wNiAwbC0uMjEzLS4wNzNINGEyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoMi42NjdhLjY2Ny42NjcgMCAxIDAgMC0xLjMzM1ptMi05LjcyNyAxLjcyNiAxLjcyN2gtMS4wNmEuNjY3LjY2NyAwIDAgMS0uNjY2LS42Njd2LTEuMDZaTTUuMzMzIDkuMzMzaDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM2gtNGEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzWm0wLTIuNjY3SDZhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM2gtLjY2N2EuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm0xLjMzNCA0SDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzRoMS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE0IDE0XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxnIGNsaXAtcGF0aD1cXFwidXJsKCNkb3VibGUtdGlja19zdmdfX2EpXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiPjxwYXRoIGQ9XFxcIk05Ljg0NSAzLjcwNmEuNjQ3LjY0NyAwIDAgMC0uOTQ3IDBsLTUuMDcgNS4xNEwxLjczMyA2LjcyYS42NDcuNjQ3IDAgMCAwLS45NDcgMCAuNjY5LjY2OSAwIDAgMCAwIC45NmwyLjU3IDIuNjA0YS42MS42MSAwIDAgMCAuNDcyLjIwNi42MS42MSAwIDAgMCAuNDc0LS4yMDZsNS41NDMtNS42MmEuNjY5LjY2OSAwIDAgMCAwLS45NlpcXFwiLz48cGF0aCBkPVxcXCJNMTMuNjMyIDMuMzZhMS4yMzQgMS4yMzQgMCAwIDAtMS43ODMgMEw3LjE5NyA4LjA3OGwtMS42NzctMS43YTEuMjM0IDEuMjM0IDAgMCAwLTEuNzgzIDAgMS4yNTYgMS4yNTYgMCAwIDAgMCAxLjc4NGwyLjU3IDIuNjA0Yy4xMDEuMTAzLjIyNy4yMDUuMzg3LjI3Ny4xNjQuMDc0LjMzMy4xMDQuNTAzLjEwNC4xNzEgMCAuMzQtLjAzLjUwNC0uMTA0LjE2LS4wNzIuMjg2LS4xNzQuMzg4LS4yNzdsNS41NDMtNS42MmExLjI1NiAxLjI1NiAwIDAgMCAwLTEuNzg0WlxcXCIgc3Ryb2tlPVxcXCIjZmZmXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMTc1XFxcIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiZG91YmxlLXRpY2tfc3ZnX19hXFxcIj48cGF0aCBmaWxsPVxcXCIjZmZmXFxcIiBkPVxcXCJNMCAwaDE0djE0SDB6XFxcIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJtMTIuNzk2IDUuODcuMDIzLjA3YS4zMDUuMzA1IDAgMCAxIC4wMTQuMDU0djYuNjcyYTEuNSAxLjUgMCAwIDEtMS41IDEuNUg0LjY2N2ExLjUgMS41IDAgMCAxLTEuNS0xLjVWMy4zMzNhMS41IDEuNSAwIDAgMSAxLjUtMS41aDMuOTc4YS4yMzMuMjMzIDAgMCAxIC4wMzMuMDE0bC4xMS4wNmguMDQ1bDMuOTYzIDMuOTYyWm0tMy4xMS0yLjYxNy0uODUzLS44NTR2Mi4yNjdBMS4xNjcgMS4xNjcgMCAwIDAgMTAgNS44MzNoMi4yNjdsLS44NTMtLjg1NC0xLjcyNy0xLjcyNlpNOC41IDIuNjY2di0uNUg0LjY2N0ExLjE2NyAxLjE2NyAwIDAgMCAzLjUgMy4zMzN2OS4zMzNhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjcgMS4xNjdoNi42NjZhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjctMS4xNjd2LTYuNUgxMGExLjUgMS41IDAgMCAxLTEuNS0xLjV2LTJabS0uMzMzIDcuMDZ2MS4yMzdsLjg2LS44OS4xODktLjE5NWEuMTcuMTcgMCAwIDEgLjIzNy4yNDJsLTEuMzI4IDEuMzI4YS4xNjcuMTY3IDAgMCAxLS4wNTIuMDMybC0uMDExLjAwNC0uMDEuMDA1YS4xMjcuMTI3IDAgMCAxLS4xMDMgMGwtLjAxLS4wMDUtLjAxMi0uMDA0YS4xNjcuMTY3IDAgMCAxLS4wNTItLjAzMmwtMS4zMjgtMS4zMjlhLjE3LjE3IDAgMCAxIC4yMzctLjI0MWwuMTkuMTk2Ljg2Ljg4OVY4YS4xNjcuMTY3IDAgMCAxIC4zMzMgMHYxLjcyNlpcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIm0yLjYyNiAxMy4zNzQuMjM2LS4yMzYtLjIzNi4yMzZhMSAxIDAgMCAwIC43MDcuMjkzaDkuMzM0YTEgMSAwIDAgMCAuNzA3LS4yOTNsLS4yMzYtLjIzNi4yMzYuMjM2YTEgMSAwIDAgMCAuMjkzLS43MDdWMTBhLjMzMy4zMzMgMCAwIDEgLjU2OS0uMjM2bC4yMzUtLjIzNS0uMjM1LjIzNWEuMzMzLjMzMyAwIDAgMSAuMDk3LjIzNnYyLjY2N2ExLjY2NyAxLjY2NyAwIDAgMS0xLjY2NiAxLjY2NkgzLjMzM2ExLjY2NyAxLjY2NyAwIDAgMS0xLjY2Ni0xLjY2NlYxMGMwLS4wODguMDM1LS4xNzMuMDk3LS4yMzZMMS41MyA5LjUzbC4yMzUuMjM1YS4zMzMuMzMzIDAgMCAxIC40NzIgMGwuMjM1LS4yMzUtLjIzNS4yMzVhLjMzMy4zMzMgMCAwIDEgLjA5Ny4yMzZ2Mi42NjdhMSAxIDAgMCAwIC4yOTMuNzA3Wm01LjI1NS0zLjA2Ni0uMDA3LS4wMDMtLjAwNy0uMDAyYS4zMzMuMzMzIDAgMCAxLS4xMDgtLjA2OEw1LjA5NiA3LjU3YS4zMzYuMzM2IDAgMCAxIC4zNjYtLjU0OGwuMTI4LS4zMDgtLjEyOC4zMDhjLjA0LjAxNy4wNzguMDQxLjEwOS4wNzJMNy4wOTcgOC42M2wuNTcuNTcyVjJhLjMzMy4zMzMgMCAxIDEgLjY2NiAwdjcuMjAxbC41Ny0uNTcyIDEuNTI2LTEuNTMzYS4zMzYuMzM2IDAgMCAxIC40NzUuNDc1bC0yLjY2MyAyLjY2NGEuMzMzLjMzMyAwIDAgMS0uMTA4LjA2OGwtLjAwNy4wMDItLjAwNy4wMDNhLjI5Mi4yOTIgMCAwIDEtLjIzOCAwWlxcXCIgZmlsbD1cXFwiY3VycmVudGNvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRjb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEwIDZcXFwiPjxwYXRoIGQ9XFxcIk04LjkzMi44NzhhLjUuNSAwIDAgMSAwIC43MUw1LjM1NyA1LjEyMWwtLjAwMi4wMDNhLjUuNSAwIDAgMS0uNzEgMHYtLjAwMUwxLjExIDEuNTg5YS41LjUgMCAwIDEgMC0uNzFWLjg3N2EuNS41IDAgMCAxIC43MDUgMGwyLjk1IDIuOTUuMjMzLjIzMy4yMzYtLjIzMkw4LjIyNi44NzlWLjg3OGEuNS41IDAgMCAxIC43MDYgMFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTcgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTMuNzE4IDEyaDIuODI3YS42NjYuNjY2IDAgMCAwIC40NzMtLjE5NGw0LjYxNC00LjYyIDEuODkzLTEuODUzYS42NjguNjY4IDAgMCAwIDAtLjk0N2wtMi44MjctMi44NmEuNjY3LjY2NyAwIDAgMC0uOTQ2IDBsLTEuODggMS44ODctNC42MjcgNC42MmEuNjY3LjY2NyAwIDAgMC0uMTkzLjQ3M3YyLjgyN2EuNjY3LjY2NyAwIDAgMCAuNjY2LjY2N1ptNi41MDctOS4wNiAxLjg4NyAxLjg4Ni0uOTQ3Ljk0Ny0xLjg4Ny0xLjg4Ny45NDctLjk0NlptLTUuODQgNS44NCAzLjk1My0zLjk1NCAxLjg4NyAxLjg4Ny0zLjk1MyAzLjk1M0g0LjM4NVY4Ljc4Wm0xMCA0LjU1M2gtMTJhLjY2Ny42NjcgMCAxIDAgMCAxLjMzM2gxMmEuNjY2LjY2NiAwIDEgMCAwLTEuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIuNzUxIDcuMjEzYS43MzIuNzMyIDAgMCAwLS41LjE5NS42NDcuNjQ3IDAgMCAwLS4yMDguNDcydjQuNzg2YS42NDcuNjQ3IDAgMCAxLS4yMDcuNDcyLjczMS43MzEgMCAwIDEtLjUwMS4xOTVIMy41NDNhLjczMS43MzEgMCAwIDEtLjUtLjE5NS42NDcuNjQ3IDAgMCAxLS4yMDgtLjQ3MlY1LjMzM2MwLS4xNzcuMDc0LS4zNDYuMjA3LS40NzFhLjczMS43MzEgMCAwIDEgLjUwMS0uMTk2aDUuMDg2Yy4xODggMCAuMzY4LS4wNy41LS4xOTVBLjY0Ny42NDcgMCAwIDAgOS4zMzggNGEuNjQ3LjY0NyAwIDAgMC0uMjA3LS40NzIuNzMxLjczMSAwIDAgMC0uNTAxLS4xOTVIMy41NDNjLS41NjQgMC0xLjEwNC4yMS0xLjUwMy41ODZhMS45NDIgMS45NDIgMCAwIDAtLjYyMiAxLjQxNHY3LjMzM2MwIC41My4yMjQgMS4wNC42MjIgMS40MTUuMzk5LjM3NS45NC41ODUgMS41MDMuNTg1aDcuNzkyYy41NjMgMCAxLjEwNC0uMjEgMS41MDItLjU4NS4zOTktLjM3NS42MjMtLjg4NC42MjMtMS40MTVWNy44OGEuNjQ3LjY0NyAwIDAgMC0uMjA4LS40NzIuNzMyLjczMiAwIDAgMC0uNS0uMTk1Wm0yLjc3Ny01LjQ2N2EuNjkuNjkgMCAwIDAtLjM4My0uMzYuNzQ3Ljc0NyAwIDAgMC0uMjY5LS4wNTNoLTQuMjVhLjczMi43MzIgMCAwIDAtLjUuMTk1LjY0Ny42NDcgMCAwIDAtLjIwOC40NzJjMCAuMTc2LjA3NS4zNDYuMjA3LjQ3MWEuNzMyLjczMiAwIDAgMCAuNTAxLjE5NWgyLjU0M2wtNy4yOTYgNi44NmEuNjY2LjY2NiAwIDAgMC0uMTU1LjIxNy42MzMuNjMzIDAgMCAwIC4xNTUuNzMuNzQ2Ljc0NiAwIDAgMCAxLjAwNiAwbDcuMjg5LTYuODY3VjZjMCAuMTc2LjA3NS4zNDYuMjA3LjQ3MWEuNzMyLjczMiAwIDAgMCAuNTAxLjE5NWMuMTg4IDAgLjM2OC0uMDcuNTAxLS4xOTVBLjY0Ny42NDcgMCAwIDAgMTUuNTg1IDZWMmEuNjMzLjYzMyAwIDAgMC0uMDU3LS4yNTRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE3XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNC42MTMgNy45OEMxMy4yNjcgNC44NTMgMTAuNzMzIDIuOTEzIDggMi45MTNjLTIuNzMzIDAtNS4yNjcgMS45NC02LjYxMyA1LjA2N2EuNjY3LjY2NyAwIDAgMCAwIC41MzNDMi43MzMgMTEuNjQgNS4yNjcgMTMuNTggOCAxMy41OGMyLjczMyAwIDUuMjY3LTEuOTQgNi42MTMtNS4wNjdhLjY2Ny42NjcgMCAwIDAgMC0uNTMzWk04IDEyLjI0NmMtMi4xMTMgMC00LjExMy0xLjUyNi01LjI2Ny00IDEuMTU0LTIuNDczIDMuMTU0LTQgNS4yNjctNCAyLjExMyAwIDQuMTEzIDEuNTI3IDUuMjY3IDQtMS4xNTQgMi40NzQtMy4xNTQgNC01LjI2NyA0Wk04IDUuNThhMi42NjcgMi42NjcgMCAxIDAgMCA1LjMzM0EyLjY2NyAyLjY2NyAwIDAgMCA4IDUuNThabTAgNGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3QTEuMzMzIDEuMzMzIDAgMCAxIDggOS41OFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTUwIDE1MFxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48Y2lyY2xlIGN4PVxcXCI3NVxcXCIgY3k9XFxcIjc1XFxcIiByPVxcXCI3NVxcXCIgZmlsbD1cXFwidXJsKCNmb2xkZXJfc3ZnX19hKVxcXCIvPjxwYXRoIGQ9XFxcIk00NS41NDggNTQuMjJjMC0yLjM4IDAtMy41Ny40Ny00LjQ3NWE0LjE3OCA0LjE3OCAwIDAgMSAxLjc4Mi0xLjc4MWMuOTA2LS40NyAyLjA5NS0uNDcgNC40NzUtLjQ3aDE3LjU1N2MxLjAxMiAwIDEuNTE4IDAgMS45OTUuMTEzLjQwNi4wOTYuNzk1LjI1MyAxLjE1NC40NjUuNDIzLjI1Ljc4OC42IDEuNTE3IDEuMzAybC40My40MTZjLjczLjcwMiAxLjA5NCAxLjA1MyAxLjUxNyAxLjMwMi4zNi4yMTIuNzQ4LjM2OSAxLjE1NC40NjUuNDc3LjExNC45ODMuMTE0IDEuOTk2LjExNGgxNy43MThjMi4zNzkgMCAzLjU2OCAwIDQuNDc0LjQ3YTQuMTgyIDQuMTgyIDAgMCAxIDEuNzgyIDEuNzgyYy40Ny45MDYuNDcgMi4wOTUuNDcgNC40NzR2NDAuMDQ2YzAgMS4xOSAwIDEuNzg0LS4yMzUgMi4yMzdhMi4wODMgMi4wODMgMCAwIDEtLjg5MS44OTFjLS40NTMuMjM1LTEuMDQ4LjIzNS0yLjIzNy4yMzVINTEuNjAyYy0yLjE0MSAwLTMuMjEyIDAtNC4wMjctLjQyM2EzLjc2MyAzLjc2MyAwIDAgMS0xLjYwNC0xLjYwNGMtLjQyMy0uODE1LS40MjMtMS44ODUtLjQyMy00LjAyN1Y1NC4yMlpcXFwiIGZpbGw9XFxcInVybCgjZm9sZGVyX3N2Z19fYilcXFwiLz48cGF0aCBkPVxcXCJNNjYuNjU2IDYyLjMxMWgzOC41MzFjMS42NzIgMCAyLjkwNCAwIDMuODMuMTMzLjkyLjEzMyAxLjQ5OS4zOSAxLjg5NC44NzcuMzk0LjQ4Ni41MjggMS4xMDYuNDY3IDIuMDM0LS4wNjEuOTMzLS4zMTQgMi4xNC0uNjU4IDMuNzc1bC01Ljg5NCAyNy45OTJjLS4yMzUgMS4xMTctLjQwOCAxLjkzOC0uNjIxIDIuNTYyLS4yMTEuNjE5LS40NTUgMS4wMjMtLjgxOSAxLjMxOC0uMzYzLjI5NS0uODA4LjQ1LTEuNDU4LjUyOS0uNjU0LjA4LTEuNDkzLjA4MS0yLjYzNC4wODFINTAuMTU3Yy45Mi0xLjEwMSAxLjQyMi0yLjI0NSAxLjkxNy0zLjg2MS4yMjUtLjczNC40NS0xLjU2OC43MTItMi41NDJsLjE2OC0uNjIyYy4zMzctMS4yNDguNzQyLTIuNzE0IDEuMjgtNC40NzQgMS41NTItNS4wNiA1LjEwNS0xNy4yNDMgNi45ODgtMjMuNzIyLjI5Ny0xLjAyMS41MTUtMS43Ny43NTUtMi4zMzkuMjM4LS41NjMuNDktLjkzLjg0Mi0xLjE5NC4zNTItLjI2NS43NzQtLjQwNCAxLjM4Mi0uNDc1LjYxMi0uMDcyIDEuMzkyLS4wNzIgMi40NTUtLjA3MlpcXFwiIGZpbGw9XFxcIiNCOURERkZcXFwiIHN0cm9rZT1cXFwidXJsKCNmb2xkZXJfc3ZnX19jKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuMzlcXFwiLz48cGF0aCBkPVxcXCJNNjYuNjU2IDYyLjMxMWgzOC41MzFjMS42NzIgMCAyLjkwNCAwIDMuODMuMTMzLjkyLjEzMyAxLjQ5OS4zOSAxLjg5NC44NzcuMzk0LjQ4Ni41MjggMS4xMDYuNDY3IDIuMDM0LS4wNjEuOTMzLS4zMTQgMi4xNC0uNjU4IDMuNzc1bC01Ljg5NCAyNy45OTJjLS4yMzUgMS4xMTctLjQwOCAxLjkzOC0uNjIxIDIuNTYyLS4yMTEuNjE5LS40NTUgMS4wMjMtLjgxOSAxLjMxOC0uMzYzLjI5NS0uODA4LjQ1LTEuNDU4LjUyOS0uNjU0LjA4LTEuNDkzLjA4MS0yLjYzNC4wODFINTAuMTU3Yy45Mi0xLjEwMSAxLjQyMi0yLjI0NSAxLjkxNy0zLjg2MS4yMjUtLjczNC40NS0xLjU2OC43MTItMi41NDJsLjE2OC0uNjIyYy4zMzctMS4yNDguNzQyLTIuNzE0IDEuMjgtNC40NzQgMS41NTItNS4wNiA1LjEwNS0xNy4yNDMgNi45ODgtMjMuNzIyLjI5Ny0xLjAyMS41MTUtMS43Ny43NTUtMi4zMzkuMjM4LS41NjMuNDktLjkzLjg0Mi0xLjE5NC4zNTItLjI2NS43NzQtLjQwNCAxLjM4Mi0uNDc1LjYxMi0uMDcyIDEuMzkyLS4wNzIgMi40NTUtLjA3MlpcXFwiIGZpbGw9XFxcInVybCgjZm9sZGVyX3N2Z19fZClcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjhcXFwiIHN0cm9rZT1cXFwidXJsKCNmb2xkZXJfc3ZnX19lKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuMzlcXFwiLz48cGF0aCBkPVxcXCJNNTUuOTkzIDUxLjgyOGg4LjM1NmExLjkzMyAxLjkzMyAwIDAgMSAwIDMuODY2aC04LjM1NmExLjkzMyAxLjkzMyAwIDEgMSAwLTMuODY2WlxcXCIgZmlsbD1cXFwidXJsKCNmb2xkZXJfc3ZnX19mKVxcXCIgZmlsbC1vcGFjaXR5PVxcXCIuOVxcXCIgc3Ryb2tlPVxcXCJ1cmwoI2ZvbGRlcl9zdmdfX2cpXFxcIiBzdHJva2Utd2lkdGg9XFxcIi4zMTJcXFwiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2FcXFwiIHgxPVxcXCI3NVxcXCIgeTE9XFxcIjBcXFwiIHgyPVxcXCI3NVxcXCIgeTI9XFxcIjE1MFxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNFM0VDRkFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNEQUU3RkZcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZm9sZGVyX3N2Z19fYlxcXCIgeDE9XFxcIjYyLjQyXFxcIiB5MT1cXFwiNTkuMzc0XFxcIiB4Mj1cXFwiMTA2LjU1NFxcXCIgeTI9XFxcIjc1LjcxOVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiM3RkMwRkJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM0MDg4RjRcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZm9sZGVyX3N2Z19fY1xcXCIgeDE9XFxcIjQ2LjU5M1xcXCIgeTE9XFxcIjY0Ljk1MVxcXCIgeDI9XFxcIjY4Ljc0NlxcXCIgeTI9XFxcIjExOC4zNzJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIuNzY2XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZm9sZGVyX3N2Z19fZFxcXCIgeDE9XFxcIjEwOC41XFxcIiB5MT1cXFwiOThcXFwiIHgyPVxcXCI0MVxcXCIgeTI9XFxcIjk5LjVcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjQjRENEY3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIuMTI4XFxcIiBzdG9wLWNvbG9yPVxcXCIjOEJCREZCXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIuMjYyXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTFDMkZCXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIuNzU5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOUZDRkZEXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOUVDRUZEXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2VcXFwiIHgxPVxcXCI0Ni41OTNcXFwiIHkxPVxcXCI2NC45NTFcXFwiIHgyPVxcXCI2OC43NDZcXFwiIHkyPVxcXCIxMTguMzcyXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZvbGRlcl9zdmdfX2ZcXFwiIHgxPVxcXCI1Mi45NTJcXFwiIHkxPVxcXCI1MS4zOTNcXFwiIHgyPVxcXCI3MC4xMDZcXFwiIHkyPVxcXCI1Ni40NjFcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZm9sZGVyX3N2Z19fZ1xcXCIgeDE9XFxcIjUxLjc4MlxcXCIgeTE9XFxcIjUyLjU2MlxcXCIgeDI9XFxcIjYwLjE3MVxcXCIgeTI9XFxcIjU1Ljg1XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI2NiA2M1xcXCI+PHBhdGggZD1cXFwiTS44MyA1OC45MVYyOC43aDguNzI1djMwLjIxSC44M1ptMzUuMDE3LTIuOTNjLTEuOTgzIDIuNDE2LTQuODM1IDMuNzc3LTguNjE1IDMuNzc3LTYuMDc2IDAtMTAuOTcxLTMuNzc4LTEwLjk3MS05LjYwMyAwLTUuNzYzIDQuODk4LTguNjEgMTEuNzc3LTguOTg1IDUuMjctLjMxIDYuOTQzLS44NjggNi45NDMtMi42NjMgMC0xLjczNi0xLjYxMS0yLjkxMy00LjQ2My0yLjkxMy0zLjQ3IDAtNC45NiAxLjczNi01LjE0NSAzLjU5NGgtOC40OTRjLjQzNC02LjYyOCA1LjM5Mi0xMS4yMTQgMTMuNzAxLTExLjIxNCA4LjEyMiAwIDEzLjMzIDQuMzk4IDEzLjMzIDEyLjYzN3YxOC40NjNoLTcuMjU0bC0uODA5LTMuMDk0Wm0tMTAuNzg2LTYuMTk1YzAgMS43MzYgMS41NSAyLjc4OCA0LjAzIDIuNzg4IDMuMzQ4IDAgNi4wMTItMS44NTggNi4wMTItNS42MzhWNDUuODJzLTEuNjExLjc0My00Ljk2LjkzYy0zLjY1OC4xODUtNS4wODIgMS4zNjItNS4wODIgMy4wMzVabTM4LjMwNyA5LjQxNmMtNi42MzIgMC0xMC40NzctMy44NC0xMC40NzctMTAuNTMzVjM2LjgzNmgtNS4wODN2LTguMTE3aDUuMDgzdi00LjQ2MWw4LjgwMi03LjQzNFYyOC43Mmg3LjYyNnY4LjExN2gtNy42MjZWNDcuNDNjMCAyLjkxMiAxLjkyMiAzLjU5MyAzLjcyIDMuNTkzYTkuNTM5IDkuNTM5IDAgMCAwIDMuNzIxLS44MDV2Ny45OTJjMCAuMDAyLTIuMzU1Ljk5Mi01Ljc2Ni45OTJaTS4wOCAxOS42MzRjMC0yLjg1IDIuMjMtNS4xNDIgNS4wODItNS4xNDJhNS4xMyA1LjEzIDAgMCAxIDUuMTQ1IDUuMTQyYzAgMi43ODgtMi4yOTMgNS4wOC01LjE0NSA1LjA4YTUuMDYzIDUuMDYzIDAgMCAxLTUuMDgyLTUuMDhaTTc1LjgwOSA1OC45MVYyOC43aDguNzI2djMwLjIxaC04LjcyNlptMjAuMTU0LTM5LjIwMmMwLTEuNC0uMTktMi43Ni0uNTM3LTQuMDUzYTE1LjUxIDE1LjUxIDAgMCAwLTEuNTY5LTMuNzcyIDE1LjY2NSAxNS42NjUgMCAwIDAtMi40ODktMy4yNDEgMTUuNzMyIDE1LjczMiAwIDAgMC03LjAxOC00LjA1IDE1LjY1OCAxNS42NTggMCAwIDAtNC4wNTItLjUzM2gtLjAwNmExNS43NSAxNS43NSAwIDAgMC00LjA0OS41M2MtMS4zNC4zNTctMi42MDUuODg4LTMuNzc3IDEuNTY1QTE1LjY3IDE1LjY3IDAgMCAwIDY5LjIyIDguNjRhMTUuNzcgMTUuNzcgMCAwIDAtMi40OTIgMy4yNDIgMTUuNjQ4IDE1LjY0OCAwIDAgMC0xLjU3MiAzLjc3NGwyLjI0Mi42MDJhMTMuNDI3IDEzLjQyNyAwIDAgMSAzLjQ2Mi01Ljk3OCAxMy40MjYgMTMuNDI2IDAgMCAxIDUuOTg0LTMuNDUgMTMuNDI2IDEzLjQyNiAwIDAgMSAzLjQ0OC0uNDVoLjAwNmMxLjE5NSAwIDIuMzUuMTU4IDMuNDU0LjQ1M2ExMy40MTIgMTMuNDEyIDAgMCAxIDUuOTggMy40NDljLjgxOS44MiAxLjUzMSAxLjc1IDIuMTE5IDIuNzZhMTMuMyAxMy4zIDAgMCAxIDEuNzkzIDYuNjY0di4wMTJhMTMuMzggMTMuMzggMCAwIDEtLjQ1MSAzLjQ0MyAxMy4yMTcgMTMuMjE3IDAgMCAxLTEuMzM0IDMuMjE5bDIuMDEgMS4xNmExNS41MzkgMTUuNTM5IDAgMCAwIDEuNTY2LTMuNzc4IDE1LjcgMTUuNyAwIDAgMCAuNTMtNC4wNDFsLS4wMDItLjAxMlpcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTAwLjAyMyAxOS43MDhhMTkuNjU1IDE5LjY1NSAwIDAgMC0yLjY0NC05Ljg1NSAxOS44MSAxOS44MSAwIDAgMC03LjIyLTcuMjEzQTE5LjYxMiAxOS42MTIgMCAwIDAgODUuNDAzLjY3IDE5LjgxIDE5LjgxIDAgMCAwIDgwLjI5OCAwaC0uMDA2Yy0xLjc2NSAwLTMuNDczLjIzMy01LjEwMi42NjZhMTkuNTEzIDE5LjUxMyAwIDAgMC00Ljc1OSAxLjk2OSAxOS44MjQgMTkuODI0IDAgMCAwLTQuMDg2IDMuMTM0bDEuMjMxIDEuMjNhMTguMTA2IDE4LjEwNiAwIDAgMSAzLjcyNi0yLjg1NSAxNy44MDMgMTcuODAzIDAgMCAxIDQuMzQtMS43OTMgMTguMDg0IDE4LjA4NCAwIDAgMSA0LjY0OC0uNjA3aC4wMDVhMTcuOTUgMTcuOTUgMCAwIDEgMTIuNzEzIDUuMjYxIDE3LjkzMyAxNy45MzMgMCAwIDEgNS4yNzMgMTIuNzAzdi4wMTFhMTguMDMgMTguMDMgMCAwIDEtLjYwNyA0LjY0MyAxNy42NzUgMTcuNjc1IDAgMCAxLTEuNzk3IDQuMzM3IDE4LjAyMyAxOC4wMjMgMCAwIDEtMi44NTcgMy43MjNsMS4yMzEgMS4yMzFhMTkuNzQzIDE5Ljc0MyAwIDAgMCAzLjEzNi00LjA4NCAxOS42IDE5LjYgMCAwIDAgMS45Ny00Ljc1NmMuNDM0LTEuNjI1LjY2Ni0zLjMzMi42NjYtNS4wOTR2LS4wMVpcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNOTAuOTQ1IDE2Ljg1NWExMC45NDggMTAuOTQ4IDAgMCAwLTEuMTA0LTIuNjU1IDExLjE1NSAxMS4xNTUgMCAwIDAtMS43NS0yLjI4IDExLjA0OCAxMS4wNDggMCAwIDAtMi4yODItMS43NDdBMTAuOTY0IDEwLjk2NCAwIDAgMCA4MC4zIDguNjk1aC0uMDA2Yy0uOTg3IDAtMS45NC4xMy0yLjg0OS4zNzJhMTAuOTEgMTAuOTEgMCAwIDAtMi42NiAxLjEgMTAuOTk0IDEwLjk5NCAwIDAgMC00LjAzNyA0LjAyNyAxMSAxMSAwIDAgMC0xLjQ4NCA1LjUxdi4wMTJhMTAuOTI0IDEwLjkyNCAwIDAgMCAxLjQ3NiA1LjUwNWwzLjAxMy0xLjczOGE3LjUzNSA3LjUzNSAwIDAgMS0xLjAxLTMuNzd2LS4wMWE3LjU1MyA3LjU1MyAwIDAgMSA3LjU0OC03LjUzM2guMDA2YTcuNTI0IDcuNTI0IDAgMCAxIDMuNzY5IDEuMDEyIDcuNTUgNy41NSAwIDAgMSAzLjUxMyA0LjU3MmMuMTY3LjYyLjI1OCAxLjI3Ni4yNTggMS45NTFoMy40NzljLjAwMy0uOTg0LS4xMjgtMS45NC0uMzcyLTIuODVaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTg3LjU4NSAxNy43NjVhNy41NDIgNy41NDIgMCAwIDAtMS45NTUtMy4zOGwtMS42NCAxLjYzOWE1LjI2NCA1LjI2NCAwIDAgMSAxLjM1NCAyLjM0MyA1LjE4NCA1LjE4NCAwIDAgMSAwIDIuNzA1IDUuMjM5IDUuMjM5IDAgMCAxLTMuNjk4IDMuNjk1IDUuMTk1IDUuMTk1IDAgMCAxLTIuNzA3IDAgNS4yOTYgNS4yOTYgMCAwIDEtMS4yNi0uNTIxbC0xLjE2IDIuMDA4YTcuNTI4IDcuNTI4IDAgMCAwIDMuNzc0IDEuMDFjLjY3NyAwIDEuMzMtLjA5MSAxLjk1NC0uMjU2YTcuNTUzIDcuNTUzIDAgMCAwIDQuNTg0LTMuNTE3IDcuNTQ0IDcuNTQ0IDAgMCAwIDEuMDEzLTMuNzcxIDcuNSA3LjUgMCAwIDAtLjI1OS0xLjk1NVpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiLz48cGF0aCBkPVxcXCJNOTEuODUzIDEzLjA0NmExMy40MzUgMTMuNDM1IDAgMCAwLTIuMTItMi43NjUgMTMuMzQzIDEzLjM0MyAwIDAgMC0yLjc2Ni0yLjExOCAxMy4yODcgMTMuMjg3IDAgMCAwLTYuNjc1LTEuNzljLTEuMTk3IDAtMi4zNTIuMTU5LTMuNDU2LjQ1NC0xLjE0MS4zMDMtMi4yMi43NTctMy4yMTggMS4zMzZhMTMuNDM2IDEzLjQzNiAwIDAgMC0yLjc2NyAyLjExOCAxMy4zMzQgMTMuMzM0IDAgMCAwLTIuMTIgMi43NjUgMTMuMjcyIDEzLjI3MiAwIDAgMC0xLjc5IDYuNjdoMi4zMmMwLS45ODYuMTMxLTEuOTQyLjM3NS0yLjg1MmExMS4wODggMTEuMDg4IDAgMCAxIDIuODU1LTQuOTQgMTEuMDAyIDExLjAwMiAwIDAgMSAyLjI4NC0xLjc1IDExLjAzIDExLjAzIDAgMCAxIDIuNjYtMS4xMDQgMTEuMDIgMTEuMDIgMCAwIDEgMi44NTQtLjM3NGMuOTg4IDAgMS45NDQuMTMgMi44NTUuMzc0YTExLjA5OSAxMS4wOTkgMCAwIDEgNC45NDMgMi44NTMgMTAuOTkgMTAuOTkgMCAwIDEgMS43NTEgMi4yODNjLjQ3Ny44MjYuODUyIDEuNzE2IDEuMTA0IDIuNjU4bDIuMjQyLS42MDJhMTMuMTk0IDEzLjE5NCAwIDAgMC0xLjMzLTMuMjE2WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIvPjxwYXRoIGQ9XFxcIk05Ny42NzQgMTUuMDYzYTE3Ljc5MSAxNy43OTEgMCAwIDAtMS44LTQuMzM2IDE4LjA0MyAxOC4wNDMgMCAwIDAtNi41ODYtNi41ODMgMTcuOTMgMTcuOTMgMCAwIDAtOC45OTYtMi40MDhjLTEuNjEyIDAtMy4xNzIuMjEzLTQuNjU3LjYxYTE3LjgxNyAxNy44MTcgMCAwIDAtNC4zMzkgMS43OTggMTguMDMyIDE4LjAzMiAwIDAgMC02LjU4NiA2LjU4M2wyLjAxMiAxLjE2M2ExNS42NzYgMTUuNjc2IDAgMCAxIDIuNDg5LTMuMjQ1Yy45NjUtLjk2NCAyLjA1Ny0xLjggMy4yNDYtMi40ODdhMTUuNzA2IDE1LjcwNiAwIDAgMSAzLjc3Ny0xLjU2OSAxNS42OCAxNS42OCAwIDAgMSA4LjExIDBjMS4zNC4zNTggMi42MDYuODkxIDMuNzc4IDEuNTY5YTE1LjY4NSAxNS42ODUgMCAwIDEgMy4yNDYgMi40ODcgMTUuNjc2IDE1LjY3NiAwIDAgMSAyLjQ4OSAzLjI0NSAxNS42ODQgMTUuNjg0IDAgMCAxIDEuNTY5IDMuNzc0IDE1LjY1NCAxNS42NTQgMCAwIDEgMCA4LjEwNmwyLjI0NS42MDFjLjM5Ny0xLjQ4My42MS0zLjA0My42MS00LjY1NGExNy44NzUgMTcuODc1IDAgMCAwLS42MDgtNC42NTRaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIi8+PHBhdGggZD1cXFwiTTgwLjI5MyAyNC45NDRjMi44ODggMCA1LjIzLTIuMzQgNS4yMy01LjIyN2E1LjIyOSA1LjIyOSAwIDAgMC01LjIzLTUuMjI3IDUuMjI4IDUuMjI4IDAgMCAwLTUuMjMgNS4yMjcgNS4yMjggNS4yMjggMCAwIDAgNS4yMyA1LjIyN1ptMjAuNjE1IDE1LjQzNlYyOS41NDNoMi4zMDRWNDAuMzhoLTIuMzA0Wm02LjYxOC0zLjc4N3YzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41MzkgMi41MzkgMCAwIDEgMS43OTMtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA2IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5NnYtNC4yMzVjMC0uODAyLS4zNzItMS40ODMtMS4yNTQtMS40ODMtMS4wMzMuMDAzLTEuMzkxLjc3NC0xLjM5MSAxLjkzNFptOS42NjYgMy44MTdjLTEuNjU1IDAtMi42MTQtLjk1OC0yLjYxNC0yLjYyOHYtMi45NTNoLTEuMjY4di0yLjAyNWgxLjI2OHYtMS4xMTFsMi4xOTYtMS44NTV2Mi45N2gxLjkwMnYyLjAyNGgtMS45MDJ2Mi42NDNjMCAuNzI3LjQ4Ljg5Ny45MjguODk3LjUxMSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU4Ny4yNDctMS40MzguMjQ3Wm0xMC4xOTMtMy4yM2gtNS4zNTJjLjEyNS43NzUuNzU3IDEuMzYyIDEuNyAxLjM2Mi42MzUgMCAxLjAwNC0uMjY0IDEuMjM3LS42NWgyLjM2N2MtLjUxMSAxLjY0LTEuNjg2IDIuNjYtMy41NzMgMi42Ni0yLjE5NyAwLTMuOTU5LTEuNTMtMy45NTktMy45MSAwLTIuMjg5IDEuNjA5LTQuMDE5IDMuODM3LTQuMDE5IDIuNDg5IDAgMy43NTcgMS45NjMgMy43NTcgMy45ODggMCAuMTk4LS4wMTQuNTctLjAxNC41N1ptLTMuNzE1LTIuNjI4Yy0uODM0IDAtMS4zOTMuNTEtMS41MzIgMS4xNmgyLjk0Yy0uMDQ2LS42NjQtLjYxOS0xLjE2LTEuNDA4LTEuMTZabTEwLjIzOS0xLjMxNXYyLjE2NHMtLjU3My0uNTg3LTEuNDM5LS41ODdjLS42NjQgMC0xLjQwNy4zNTQtMS40MDcgMS40Njl2NC4wOTVoLTIuMTk3di03LjU3NWgyLjE2NXYuNjM1Yy0uMDE0IDAgLjQzNS0uNzQzIDEuNTE2LS43NDMuOTI4IDAgMS4zNjIuNTQyIDEuMzYyLjU0MlptMy40MDMgMy4zNTZ2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NXYuNTI1YTIuNTQzIDIuNTQzIDAgMCAxIDEuNzk0LS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTd2LTQuMjM1YzAtLjgwMi0uMzcxLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5Ljc3NC0xLjM5IDEuOTM0Wm0xMS4xNjYgMy4wMTVjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMy0uNzI2LS44NjUgMC0xLjIzNy40MzQtMS4yODUuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA2aC0xLjgxMWwtLjE5OS0uNzc1Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTQgMS4wMDUuNjk0LjgzNCAwIDEuNTAxLS40NjIgMS41MDEtMS40MDZ2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm05LjU1OCAyLjM0N2MtMS42NTUgMC0yLjYxNC0uOTU4LTIuNjE0LTIuNjI4di0yLjk1M2gtMS4yNjl2LTIuMDI1aDEuMjY5di0xLjExMWwyLjE5Ni0xLjg1NXYyLjk3aDEuOTAydjIuMDI0aC0xLjkwMnYyLjY0M2MwIC43MjcuNDguODk3LjkyOC44OTcuNTExIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTkuMjQ3LTEuNDM4LjI0N1ptMi45NTEtOS43NTNjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4Mi43MTMgMCAxLjI4Ni41NzMgMS4yODYgMS4yODIgMCAuNjk1LS41NzMgMS4yNjgtMS4yODYgMS4yNjhhMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjgtMS4yNjhabS4xNyA5LjcyMnYtNy41NzVoMi4xOTd2Ny41NzVoLTIuMTk3Wm0zLjc4OS0zLjc4NmMwLTIuMjcyIDEuNzQ4LTMuOTc0IDQuMDM4LTMuOTc0czQuMDM1IDEuNzAyIDQuMDM1IDMuOTc0YzAgMi4yNzEtMS43NDggMy45NTYtNC4wMzUgMy45NTYtMi4yOSAwLTQuMDM4LTEuNjg1LTQuMDM4LTMuOTU2Wm0yLjI0NSAwYzAgMS4xMTEuNzU3IDEuOTE3IDEuNzkzIDEuOTE3czEuNzk0LS44MDMgMS43OTQtMS45MTdjMC0xLjExMi0uNzU4LTEuOTE4LTEuNzk0LTEuOTE4cy0xLjc5My44MDMtMS43OTMgMS45MThabTkuNTQgMHYzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41NCAyLjU0IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTExLjE2NyAzLjAxNWMtLjQ5Ny42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNiAwLTIuNzM5LS45NDUtMi43MzktMi4zOTcgMC0xLjQzOCAxLjIyMS0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzNy40MzQtMS4yODYuODk2aC0yLjExOWMuMTA3LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDE5LTIuNzk5IDIuMDI2IDAgMy4zMjYgMS4wOTggMy4zMjYgMy4xNTR2NC42MDZoLTEuODFsLS4xOTktLjc3NVptLTIuNjkzLTEuNTQ1YzAgLjQzNC4zODYuNjk0IDEuMDA0LjY5NC44MzUgMCAxLjUwMi0uNDYyIDEuNTAyLTEuNDA2di0uMjc4cy0uNDAzLjE4NC0xLjIzOC4yMzJjLS45MTEuMDQ2LTEuMjY4LjM0LTEuMjY4Ljc1OFptNi41MjQgMi4zMTdWMjkuNTQzaDIuMTk2VjQwLjM4aC0yLjE5NlptMTQuMDg5LTEwLjgzNyA0LjI0IDEwLjgzN2gtMi4zODFsLS44NjYtMi4xMzNoLTQuMTkxbC0uODUxIDIuMTMzaC0yLjM4MWw0LjIzOS0xMC44MzdoMi4xOTFabS0xLjA5OCAzLjEyMy0xLjM0NSAzLjUzOWgyLjY5bC0xLjM0NS0zLjU0Wm02LjM4NS0yLjAwOWMwLS43MTIuNTU2LTEuMjgyIDEuMjY5LTEuMjgyLjcxMiAwIDEuMjg1LjU3MyAxLjI4NSAxLjI4MiAwIC42OTUtLjU3MyAxLjI2OC0xLjI4NSAxLjI2OGExLjI2NCAxLjI2NCAwIDAgMS0xLjI2OS0xLjI2OFptLjE3IDkuNzIydi03LjU3NWgyLjE5N3Y3LjU3NWgtMi4xOTdabTMuNzg5LTMuNzg2YzAtMi4zOTYgMS43MTYtMy45NzMgMy44MTktMy45NzMuODY2IDAgMS41OTIuMzIzIDEuOTgxLjY2NHYtMy43NDFoMi4xOTZWNDAuMzhoLTIuMTY1di0uNTQyYy0uNC4zODYtMS4xNi43MTItMi4wMDkuNzEyLTIuMTA2IDAtMy44MjItMS41MTUtMy44MjItMy45NTZabTUuODMxIDBjMC0xLjE3NC0uNzcyLTEuOTgtMS43OTMtMS45OC0xLjAyMiAwLTEuNzk0LjgwMy0xLjc5NCAxLjk4IDAgMS4xNzUuNzcyIDEuOTggMS43OTQgMS45OCAxLjAyMSAwIDEuNzkzLS44MDUgMS43OTMtMS45OFpNMTAwLjE5NiA0OC4wOWg4LjUyMnYyLjExOGgtMy4xMXY4LjcxOWgtMi4zMDR2LTguNzE5aC0zLjExMVY0OC4wOWguMDAzWm0xMy44ODggMy42OTJ2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5NnYtNy41NzVoMi4xNjV2LjYzNWMtLjAxNCAwIC40MzQtLjc0MyAxLjUxNS0uNzQzLjkzMS4wMDMgMS4zNjIuNTQyIDEuMzYyLjU0MlptNS44OTEgNi4zNzFjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzOC40MzQtMS4yODYuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxMWwtLjE5OS0uNzc0Wm0tMi42OS0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNS42OTUuODM0IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTE0LjA0Ni0xLjI2OS4zNC0xLjI2OS43NThabTguNzIxLTEuNDd2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NXYuNTI1YTIuNTQgMi41NCAwIDAgMSAxLjc5NC0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDUgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk3di00LjIzNWMwLS44MDItLjM3MS0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzMy4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptMTAuNzk1IDEuNjA3YzAtLjIzMi0uMTM5LS40MTYtLjc0NC0uNTQxbC0xLjE0My0uMjMzYy0xLjcxNy0uMzQtMi40NDQtMS4xNi0yLjQ0NC0yLjI4OCAwLTEuMzMgMS4wMDUtMi41MTkgMy4wOTQtMi41MTkgMi4xMDIgMCAzLjA0NyAxLjE3NCAzLjIwMSAyLjQ5aC0yLjA4OWMtLjEyNS0uNDE3LS40OC0uNjY0LTEuMTI5LS42NjQtLjYxOSAwLS45Ni4yMTYtLjk2LjUyNSAwIC4yMzMuMTg1LjM3Mi43NTguNDhsMS4xNDQuMjMyYzEuNjIzLjMyMyAyLjQyOSAxLjA4MyAyLjQyOSAyLjM4IDAgMS40NjktMS4wNjcgMi40OS0zLjE4NyAyLjQ5LTIuMTY1IDAtMy4zMjYtMS4wMjEtMy41NDItMi41OThoMi4yMTRjLjEyNS41MjQuNTExLjgwMiAxLjMyOC44MDIuNzQ2IDAgMS4wNy0uMjE1IDEuMDctLjU1NlptMTEuNTUyLTEuNjA4YzAgMi4zOTctMS43MTcgMy45NTctMy44MTkgMy45NTctLjg2NiAwLTEuNTkyLS4zMS0xLjk4MS0uNjV2My40NzdoLTIuMTk3VjUxLjM0OGgyLjE2NnYuNTQyYy40MDMtLjM4NiAxLjE2LS43MjYgMi4wMTItLjcyNiAyLjEwMiAwIDMuODE5IDEuNTE3IDMuODE5IDMuOTczWm0tNS44MzEgMGMwIDEuMTc1Ljc3NCAxLjk4IDEuNzkzIDEuOTggMS4wMjIgMCAxLjc5NC0uODAzIDEuNzk0LTEuOTggMC0xLjE3NC0uNzcyLTEuOTgtMS43OTQtMS45OC0xLjAxOS4wMDQtMS43OTMuODA2LTEuNzkzIDEuOThabTExLjg3OSAzLjAxNmMtLjQ5Ny42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNiAwLTIuNzM5LS45NDUtMi43MzktMi4zOTcgMC0xLjQzOCAxLjIyLTIuMTUgMi45MzctMi4yNCAxLjMxNC0uMDc3IDEuNzM0LS4yMTYgMS43MzQtLjY2NCAwLS40MzQtLjQwMy0uNzI2LTEuMTEyLS43MjYtLjg2NiAwLTEuMjM3LjQzNC0xLjI4Ni44OTZoLTIuMTJjLjEwOC0xLjY1MyAxLjM0Ni0yLjc5OSAzLjQyLTIuNzk5IDIuMDI2IDAgMy4zMjYgMS4wOTggMy4zMjYgMy4xNTR2NC42MDVoLTEuODExbC0uMTk4LS43NzRabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNC42OTUuODM1IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTExLjA0Ni0xLjI2OC4zNC0xLjI2OC43NThabTExLjU2Ni00LjgyNnYyLjE2NHMtLjU3My0uNTg3LTEuNDM5LS41ODdjLS42NjQgMC0xLjQwNy4zNTQtMS40MDcgMS40Njl2NC4wOTVoLTIuMTk3di03LjU3NWgyLjE2NnYuNjM1Yy0uMDE1IDAgLjQzNC0uNzQzIDEuNTE1LS43NDMuOTI4LjAwMyAxLjM2Mi41NDIgMS4zNjIuNTQyWm04LjQyOCAzLjk0NGgtNS4zNTJjLjEyNS43NzQuNzU4IDEuMzYgMS43MDMgMS4zNi42MzYgMCAxLjAwNS0uMjYzIDEuMjM3LS42NDloMi4zNjdjLS41MTEgMS42NC0xLjY4NiAyLjY2LTMuNTczIDIuNjYtMi4xOTYgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYxLTQuMDE5IDMuODM3LTQuMDE5IDIuNDg5IDAgMy43NTcgMS45NjMgMy43NTcgMy45ODggMCAuMi0uMDE3LjU3LS4wMTcuNTdabS0zLjcxMS0yLjYyN2MtLjgzNSAwLTEuMzk0LjUxLTEuNTMzIDEuMTZoMi45NGMtLjA0NS0uNjY2LS42MTktMS4xNi0xLjQwNy0xLjE2Wm03LjM5MiAyLjAzOXYzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41MzggMi41MzggMCAwIDEgMS43OTMtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA1IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5NnYtNC4yMzVjMC0uODAyLS4zNzItMS40ODMtMS4yNTQtMS40ODMtMS4wMzYuMDAzLTEuMzkxLjc3NC0xLjM5MSAxLjkzNFptMTEuNTY3LjgzN2gyLjQxMmMtLjM1NyAxLjg0LTEuNzQ4IDMuMTIzLTMuNzkxIDMuMTIzLTIuMjkgMC0zLjk5LTEuNjg1LTMuOTktMy45NTcgMC0yLjI3MSAxLjcwMy0zLjk3MyAzLjk5LTMuOTczIDEuOTk1IDAgMy4zODggMS4yMzYgMy42NjYgMy4wMjloLTIuNDE1Yy0uMTctLjU3My0uNjY0LS45NTktMS4zMjgtLjk1OS0uOTI4IDAtMS42NzEuNzg5LTEuNjcxIDEuOSAwIDEuMTEyLjc0MyAxLjkgMS43MDMgMS45LjcxMi4wMDQgMS4yNC0uNDE2IDEuNDI0LTEuMDYzWm01LjEwMiA2LjAyN2MtLjk5IDAtMS40ODQtLjI2NC0xLjQ4NC0uMjY0di0yLjAxcy40NDguMjMyLjkyOC4yMzJjLjQ5NiAwIDEuMTQzLS4xODQgMS4yOTktMS4wMzVsLTIuOTU0LTcuNTc1aDIuNDQ0bDEuNzE3IDQuNjk5IDEuNzQ4LTQuN2gyLjM0OWwtMy4wNzkgNy43Yy0uODAzIDIuMDI2LTEuNDUzIDIuOTUzLTIuOTY4IDIuOTUzWm0xMS41OTgtMy4wNzVWNDguMDloMi4zMDV2MTAuODM3aC0yLjMwNVptNi42MTgtMy43ODl2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NnYuNTI1YTIuNTM4IDIuNTM4IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNSAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU1LTEuNDgzLTEuMDMzLjAwMy0xLjM5Ljc3NC0xLjM5IDEuOTM0Wm02LjU0MS01LjkzNmMwLS43MTIuNTU2LTEuMjgyIDEuMjY4LTEuMjgyczEuMjg2LjU3MyAxLjI4NiAxLjI4MmExLjI4IDEuMjggMCAwIDEtMS4yODYgMS4yNjggMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjgtMS4yNjhabS4xNyA5LjcyNXYtNy41NzVoMi4xOTZ2Ny41NzVoLTIuMTk2Wm03LjI1NC4wMjljLTEuNjU1IDAtMi42MTQtLjk1OS0yLjYxNC0yLjYzdi0yLjk1MmgtMS4yNjhWNTEuMzVoMS4yNjh2LTEuMTExbDIuMTk2LTEuODU1djIuOTdoMS45MDJ2Mi4wMjRoLTEuOTAydjIuNjQzYzAgLjcyNi40OC44OTcuOTI4Ljg5Ny41MTEgMCAuOTI4LS4yMDIuOTI4LS4yMDJ2MS45OTRzLS41ODcuMjQ3LTEuNDM4LjI0N1ptMi45NTQtOS43NTRjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4MnMxLjI4Ni41NzMgMS4yODYgMS4yODJhMS4yOCAxLjI4IDAgMCAxLTEuMjg2IDEuMjY4IDEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk2djcuNTc1aC0yLjE5NlptOC43NTQtLjc3NGMtLjQ5Ni42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNSAwLTIuNzM4LS45NDUtMi43MzgtMi4zOTcgMC0xLjQzOCAxLjIyLTIuMTUgMi45MzctMi4yNCAxLjMxNC0uMDc3IDEuNzM0LS4yMTYgMS43MzQtLjY2NCAwLS40MzQtLjQwMy0uNzI2LTEuMTEzLS43MjYtLjg2NSAwLTEuMjM3LjQzNC0xLjI4NS44OTZoLTIuMTJjLjEwOC0xLjY1MyAxLjM0NS0yLjc5OSAzLjQxOS0yLjc5OSAyLjAyNyAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxbC0uMTk5LS43NzRabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNS42OTUuODM0IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTE0LjA0Ni0xLjI2OS4zNC0xLjI2OS43NThabTkuNTU4IDIuMzQ4Yy0xLjY1NSAwLTIuNjE0LS45NTktMi42MTQtMi42M3YtMi45NTJoLTEuMjY4VjUxLjM1aDEuMjY4di0xLjExMWwyLjE5Ny0xLjg1NXYyLjk3aDEuOTAxdjIuMDI0aC0xLjkwMXYyLjY0M2MwIC43MjYuNDc5Ljg5Ny45MjguODk3LjUxIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTg4LjI0Ny0xLjQzOS4yNDdabTIuOTUxLTkuNzU0YzAtLjcxMi41NTYtMS4yODIgMS4yNjktMS4yODIuNzEyIDAgMS4yODUuNTczIDEuMjg1IDEuMjgyIDAgLjY5NS0uNTczIDEuMjY4LTEuMjg1IDEuMjY4YTEuMjY0IDEuMjY0IDAgMCAxLTEuMjY5LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk3djcuNTc1aC0yLjE5N1ptMTAuOTgzLTcuNTc1LTIuNjkxIDcuNTc1aC0yLjI1OGwtMi42OTEtNy41NzVoMi4zMzZsMS40ODQgNC42ODUgMS40ODQtNC42ODVoMi4zMzZabTcuOTggNC4zNzRoLTUuMzUyYy4xMjUuNzc0Ljc1NyAxLjM2IDEuNzAyIDEuMzYuNjM2IDAgMS4wMDUtLjI2MyAxLjIzOC0uNjQ5aDIuMzY2Yy0uNTEgMS42NC0xLjY4NSAyLjY2LTMuNTcyIDIuNjYtMi4xOTcgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYwOS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OCAwIDMuNzYgMS45NjMgMy43NiAzLjk4OC0uMDA2LjItLjAyLjU3LS4wMi41N1ptLTMuNzEyLTIuNjI3Yy0uODM0IDAtMS4zOTMuNTEtMS41MzIgMS4xNmgyLjk0Yy0uMDQ5LS42NjYtLjYxOS0xLjE2LTEuNDA4LTEuMTZaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDk1MCAyOTJcXFwiPjxnIG9wYWNpdHk9XFxcIi4zXFxcIj48cGF0aCBvcGFjaXR5PVxcXCIuNFxcXCIgZD1cXFwiTTM5My4zODMgNTM3LjU5MmEyMTMuMDU4IDIxMy4wNTggMCAwIDEtNTUuMTMzLTcuMjQ4Yy0xOC4xOTYtNC44Ni0zNS40MTktMTIuMDktNTEuMzQ3LTIxLjMxNi0xNi4xNjYtOS4zNDUtMzEuMDAzLTIwLjcwMy00NC4xMTctMzMuODE3LTEzLjExMy0xMy4xMTMtMjQuNDcxLTI3Ljk2Ny0zMy44MTYtNDQuMTE2YTIxMS44MjYgMjExLjgyNiAwIDAgMS0yMS4zMTctNTEuMzQ3IDIxMi45MDYgMjEyLjkwNiAwIDAgMS03LjI0Ny01NS4xMzMgMjEzLjA5IDIxMy4wOSAwIDAgMSA3LjI0Ny01NS4xMzNjNC44NjEtMTguMTk2IDEyLjA5MS0zNS40MiAyMS4zMTctNTEuMzQ4bDU2LjY4NSAzMi43MjVhMTQ3LjIwMyAxNDcuMjAzIDAgMCAwLTE0Ljc2OCAzNS41NzMgMTQ3LjUzMSAxNDcuNTMxIDAgMCAwLTUuMDE0IDM4LjE4MyAxNDcuNTMgMTQ3LjUzIDAgMCAwIDUuMDE0IDM4LjE4MiAxNDYuNTI3IDE0Ni41MjcgMCAwIDAgMTQuNzY4IDM1LjU3M2M2LjQ4IDExLjE4NyAxNC4zNDEgMjEuNDcgMjMuNDMxIDMwLjU1OSA5LjA4OSA5LjA4OSAxOS4zNzIgMTYuOTUxIDMwLjU1OSAyMy40MzFhMTQ3LjIwMyAxNDcuMjAzIDAgMCAwIDM1LjU3MyAxNC43NjggMTQ3LjYyNyAxNDcuNjI3IDAgMCAwIDM4LjE4MiA1LjAxNGMxMy4yIDAgMjYuMDA2LTEuNzU3IDM4LjE4Mi01LjAxNGExNDYuNDk0IDE0Ni40OTQgMCAwIDAgMzUuNTczLTE0Ljc2OGMxMS4xODctNi40OCAyMS40Ny0xNC4zNDIgMzAuNTYtMjMuNDMxbDQ2LjI4MiA0Ni4yODJjLTEzLjExNCAxMy4xMTQtMjcuOTY3IDI0LjQ3Mi00NC4xMTcgMzMuODE3YTIxMS43NSAyMTEuNzUgMCAwIDEtNTEuMzQ3IDIxLjMxNiAyMTMuMjggMjEzLjI4IDAgMCAxLTU1LjE1IDcuMjQ4Wk01ODEuNjY4IDY1MC43NGMyOC41ODEtMTYuNTI0IDU0LjgyNi0zNi42MTMgNzguMDE4LTU5LjgwNSAyMy4xOTItMjMuMTkzIDQzLjI4MS00OS40NTUgNTkuODA2LTc4LjAxOSAxNi4zMDMtMjguMTcyIDI5LjA3NS01OC42MjkgMzcuNjg3LTkwLjgwOGEzNzYuNTkyIDM3Ni41OTIgMCAwIDAgMTIuODA3LTk3LjQ3NiAzNzcuMjMgMzc3LjIzIDAgMCAwLTEyLjgwNy05Ny40NzdjLTguNTk1LTMyLjE3OS0yMS4zODQtNjIuNjM2LTM3LjY4Ny05MC44MDgtMTYuNTQyLTI4LjU4MS0zNi42MTQtNTQuODI2LTU5LjgwNi03OC4wMTgtMjMuMTkyLTIzLjE5My00OS40NTQtNDMuMjgxLTc4LjAxOC01OS44MDYtMjguMTcyLTE2LjMwMy01OC42MjktMjkuMDkzLTkwLjgwOS0zNy42ODdhMzc2LjU5MiAzNzYuNTkyIDAgMCAwLTk3LjQ3Ni0xMi44MDd2NjUuNDVjMjcuODY1IDAgNTQuODQzIDMuNzE3IDgwLjU0MyAxMC41OSAyNi41ODUgNy4xMTEgNTEuNzM5IDE3LjY2NyA3NS4wMTcgMzEuMTM5IDIzLjYwMSAxMy42NiA0NS4zMSAzMC4yNTIgNjQuNDYxIDQ5LjQyIDE5LjE2NyAxOS4xNjggMzUuNzYgNDAuODYgNDkuNDIgNjQuNDYxIDEzLjQ3MiAyMy4yNzggMjQuMDI4IDQ4LjQzMSAzMS4xMzkgNzUuMDE3YTMxMS4yNjYgMzExLjI2NiAwIDAgMSAxMC41OSA4MC41NDNjMCAyNy44NjUtMy43MTcgNTQuODQzLTEwLjU5IDgwLjU0Mi03LjExMSAyNi41ODYtMTcuNjY3IDUxLjczOS0zMS4xMzkgNzUuMDE3LTEzLjY2IDIzLjYwMi0zMC4yNTMgNDUuMzEtNDkuNDIgNjQuNDYxLTE5LjE1MSAxOS4xNTEtNDAuODYgMzUuNzYxLTY0LjQ2MSA0OS40Mi0yMy4yNzggMTMuNDcyLTQ4LjQzMiAyNC4wMjgtNzUuMDE3IDMxLjEzOWwxNi45MzMgNjMuMjM0YzMyLjE5Ny04LjY0NiA2Mi42MzctMjEuNDE5IDkwLjgwOS0zNy43MjJabS01Ni45MDcgMTY0LjE4OGE1MDQuMzEyIDUwNC4zMTIgMCAwIDAgMTIyLjQyNS01MC43MzMgNTEwLjQgNTEwLjQgMCAwIDAgMTA1LjA4Mi04MC43MTNBNTA5LjIyNiA1MDkuMjI2IDAgMCAwIDgzMi45ODEgNTc4LjRhNTA0LjczIDUwNC43MyAwIDAgMCA1MC43MzMtMTIyLjQyNWMxMS4yMDQtNDEuOTE2IDE3LjIwNy04NS45NDggMTcuMjA3LTEzMS4zNzcgMC00NS40NDctNi4wMDMtODkuNDc5LTE3LjIwNy0xMzEuMzc4YTUwNC4zNDMgNTA0LjM0MyAwIDAgMC01MC43MzMtMTIyLjQyNUM4MTAuNzA5IDMyLjI4OCA3ODMuNTA5LTMuMDMgNzUyLjI2OC0zNC4yODdBNTA5LjIxNyA1MDkuMjE3IDAgMCAwIDY0Ny4xODYtMTE1bC0zMi43OTMgNTYuNzg3YzMzLjU0MyAxOS40MDcgNjQuMzU5IDQyLjk5MSA5MS41OTIgNzAuMjA4IDI3LjIxNyAyNy4yMTcgNTAuODAyIDU4LjA1IDcwLjIwOSA5MS41NzYgMTkuMTMzIDMzLjA2NiAzNC4xNCA2OC44MSA0NC4yMzYgMTA2LjU4MiA5Ljc1NCAzNi41MTEgMTUuMDQxIDc0Ljg0NyAxNS4wNDEgMTE0LjQyOCAwIDM5LjU4LTUuMjcgNzcuOTE2LTE1LjA0MSAxMTQuNDI2LTEwLjA5NiAzNy43NzMtMjUuMTAzIDczLjUxNy00NC4yMzYgMTA2LjU4My0xOS40MDcgMzMuNTQ0LTQyLjk5MiA2NC4zNTktNzAuMjA5IDkxLjU3Ni0yNy4yMTYgMjcuMjE3LTU4LjA0OSA1MC44MDEtOTEuNTkyIDcwLjIwOC0zMy4wNjYgMTkuMTM0LTY4LjgxIDM0LjE0LTEwNi41ODMgNDQuMjM2LTM2LjUxMSA5Ljc1NC03NC44NDYgMTUuMDQxLTExNC40MjcgMTUuMDQxLTM5LjU4IDAtNzcuOTE2LTUuMjg3LTExNC40MjctMTUuMDQxbC0xNi45NTEgNjMuMjg0YzQxLjkgMTEuMjA0IDg1LjkzMSAxNy4yMDcgMTMxLjM3OCAxNy4yMDcgNDUuNDQ3LjAzNCA4OS40NzgtNS45NjkgMTMxLjM3OC0xNy4xNzNaXFxcIiBmaWxsPVxcXCJ1cmwoI2dyb3VwX3N2Z19fYSlcXFwiLz48cGF0aCBkPVxcXCJNMzkzLjM4MyA3NjYuNjg2YTQ0Mi40ODkgNDQyLjQ4OSAwIDAgMS0xMTQuMTAzLTE0LjkzOGMtMzcuNzczLTEwLjA2Mi03My41MTYtMjUuMDUyLTEwNi41OTktNDQuMTUxbDMyLjcyNS01Ni42ODVjMjguMTg5IDE2LjI2OSA1OC42NDYgMjkuMDI0IDkwLjgyNSAzNy42MDJhMzc3LjEyNiAzNzcuMTI2IDAgMCAwIDk3LjE1MiAxMi43MjJoLjMwN2EzNzYuOTU4IDM3Ni45NTggMCAwIDAgOTcuNDI1LTEyLjg3NWMzMi4xNDYtOC42MTIgNjIuNTY4LTIxLjQwMiA5MC43MjMtMzcuNzA1IDI4LjU0Ny0xNi41MjQgNTQuNzc1LTM2LjYxMyA3Ny45MzMtNTkuNzg4IDIzLjE1OS0yMy4xNzYgNDMuMjMtNDkuNDA0IDU5Ljc1NS03Ny45NTEgMTYuMjg2LTI4LjE1NCAyOS4wNTktNTguNTYgMzcuNjctOTAuNzIzYTM3Ni41NzUgMzc2LjU3NSAwIDAgMCAxMi44MjQtOTcuMzl2LS4xODhjMC0zMy42MjktNC40NjctNjYuMjAxLTEyLjczOC05Ny4yMzctOC41NzgtMzIuMTYzLTIxLjMzNC02Mi42MDMtMzcuNjAzLTkwLjc3NS0xNi41MDctMjguNTgxLTM2LjU2Mi01NC44NDMtNTkuNzItNzguMDM1LTIzLjE3NS0yMy4yMS00OS40MDMtNDMuMzMyLTc3Ljk1LTU5Ljg5MS0yOC4xNzItMTYuMzM3LTU4LjYxMi0yOS4xNDQtOTAuNzc0LTM3Ljc3M2wxNi45MzMtNjMuMjMzYzM3Ljc3MyAxMC4xMyA3My41IDI1LjE1MyAxMDYuNTY2IDQ0LjMyMSAzMy41MjcgMTkuNDI0IDY0LjMwOCA0My4wNDIgOTEuNTA3IDcwLjI3NiAyNy4xODMgMjcuMjM0IDUwLjc1MSA1OC4wNjcgNzAuMTIzIDkxLjYxIDE5LjEgMzMuMDY2IDM0LjA3MiA2OC43OTMgNDQuMTUxIDEwNi41NjZhNDQyLjI4IDQ0Mi4yOCAwIDAgMSAxNC45NzMgMTE0LjE3MXYuMTg4YTQ0Mi43ODQgNDQyLjc4NCAwIDAgMS0xNS4wNTggMTE0LjM0MWMtMTAuMDk2IDM3LjczOS0yNS4wODYgNzMuNDQ4LTQ0LjIxOSAxMDYuNDk3LTE5LjM5IDMzLjUxLTQyLjk1NyA2NC4zMDgtNzAuMTQgOTEuNTI1LTI3LjIgMjcuMi01Ny45ODEgNTAuNzg0LTkxLjQ5MSA3MC4xOTEtMzMuMDMyIDE5LjEzNC02OC43NTggMzQuMTQxLTEwNi40OTcgNDQuMjUzYTQ0Mi4wNTIgNDQyLjA1MiAwIDAgMS0xMTQuMzU5IDE1LjA5MmMtLjEzNi0uMDE3LS4yMzgtLjAxNy0uMzQxLS4wMTdabS4zMDcgMTE0LjU0N2M0OS44MTMtLjAzNSA5OC4wOS02LjYzNCAxNDQuMDMyLTE4LjkyOWE1NTMuMzE2IDU1My4zMTYgMCAwIDAgMTM0LjE3NC01NS42NjIgNTU3Ljg4NyA1NTcuODg3IDAgMCAwIDExNS4xNDMtODguNTA2IDU1OC45MzggNTU4LjkzOCAwIDAgMCA4OC40NTUtMTE1LjE3OCA1NTIuODYzIDU1Mi44NjMgMCAwIDAgNTUuNjExLTEzNC4xNzRDOTQzLjQgNDIyLjg0MiA5NDkuOTgzIDM3NC41ODIgOTUwIDMyNC43ODZ2LS4xODdjMC00OS43NDQtNi41NjYtOTcuOTU0LTE4LjgxLTE0My44NDRhNTUzLjQ1NCA1NTMuNDU0IDAgMCAwLTU1LjU0Mi0xMzQuMjQzQzg1MS4yNDUgNC4yNzIgODIxLjQ1My0zNC40NTYgNzg3LjIxLTY4Ljc1bC0zNC43MiAzNC43MmE1MDguOTA4IDUwOC45MDggMCAwIDEgODAuNjI3IDEwNS4wOTkgNTA0LjQ2NSA1MDQuNDY1IDAgMCAxIDUwLjYzMSAxMjIuMzkxYzExLjE1MyA0MS44MzEgMTcuMTM5IDg1Ljc3NyAxNy4xMzkgMTMxLjEzOXYuMTg3Yy0uMDE3IDQ1LjQxMy02LjAyIDg5LjQxLTE3LjIyNCAxMzEuMjkzYTUwNC45MDIgNTA0LjkwMiAwIDAgMS01MC42OTkgMTIyLjMyMyA1MDkuNzE1IDUwOS43MTUgMCAwIDEtODAuNjYyIDEwNS4wMTMgNTA5LjI3OCA1MDkuMjc4IDAgMCAxLTEwNC45OTYgODAuNjk2IDUwNC4zMiA1MDQuMzIgMCAwIDEtMTIyLjMyMyA1MC43NWMtNDEuODgzIDExLjIyMS04NS44OTcgMTcuMjQxLTEzMS4zMjcgMTcuMjc1aC0uMzA3Yy00NS4zMjcgMC04OS4yMzktNS45NjgtMTMxLjA1NC0xNy4xMjFhNTA0Ljg5OSA1MDQuODk5IDAgMCAxLTEyMi40NDItNTAuNjMxQTUwOS4yODQgNTA5LjI4NCAwIDAgMSAzNC43MiA2ODMuNzIyTDAgNzE4LjQ0M2E1NTkuMjIyIDU1OS4yMjIgMCAwIDAgMTE1LjI5NyA4OC40NzIgNTUzLjU2MyA1NTMuNTYzIDAgMCAwIDEzNC4yOTQgNTUuNTQyYzQ1Ljg1NiAxMi4yMjcgOTQuMDMxIDE4Ljc3NiAxNDMuNzU4IDE4Ljc3NmguMzQxWm04MC40NzQtMjU2LjEwNmEzMDkuMjggMzA5LjI4IDAgMCAwIDc0LjkzMi0zMS4xNTZjMjMuNTY4LTEzLjY1OSA0NS4yNDItMzAuMjUyIDY0LjM3Ni00OS4zODYgMTkuMTM0LTE5LjE1MSAzNS43MDktNDAuODA4IDQ5LjM1Mi02NC4zOTMgMTMuNDU1LTIzLjI0MyAyNC4wMTEtNDguMzggMzEuMTA1LTc0LjkzMWEzMTEuMzk2IDMxMS4zOTYgMCAwIDAgMTAuNjA3LTgwLjQ1N3YtLjE4OGMwLTI3Ljc4LTMuNjgzLTU0LjY3My0xMC41MDUtODAuMjg3LTcuMDc3LTI2LjU2OC0xNy42MTYtNTEuNzIyLTMxLjA1NC03NS0xMy42MjUtMjMuNjE4LTMwLjIwMS00NS4zMS00OS4zMzQtNjQuNDc4LTE5LjEzNC0xOS4xODUtNDAuODA5LTM1LjgxMS02NC4zOTMtNDkuNDg4LTIzLjI2MS0xMy40OS00OC40MTQtMjQuMDgtNzUtMzEuMjI1YTMxMS40NTEgMzExLjQ1MSAwIDAgMC04MC41Ni0xMC42NzVoLS4zMDdhMzEwLjk5NyAzMTAuOTk3IDAgMCAwLTgwLjMwMyAxMC41MjJjLTI2LjYyIDcuMDk0LTUxLjgwOCAxNy42NS03NS4xMiAzMS4xMjJsNDkuMDk3IDg1LjAyN2EyMTEuNjc4IDIxMS42NzggMCAwIDEgNTEuNDMyLTIxLjI5OSAyMTMuMzE0IDIxMy4zMTQgMCAwIDEgNTQuODk0LTcuMThoLjMwN2EyMTMuMiAyMTMuMiAwIDAgMSA1NS4xNSA3LjMzMyAyMTEuMjQ1IDIxMS4yNDUgMCAwIDEgNTEuMzMxIDIxLjQwMmMxNi4xMzIgOS4zNzkgMzAuOTUxIDIwLjc3MSA0NC4wNDggMzMuOTAyIDEzLjA4IDEzLjEzMSAyNC40MiAyNy45ODQgMzMuNzQ4IDQ0LjEzNGEyMTEuNDA4IDIxMS40MDggMCAwIDEgMjEuMjMxIDUxLjMzIDIxMy4yNzYgMjEzLjI3NiAwIDAgMSA3LjE4IDU0Ljg3N3YuMTg4YTIxMi45MTEgMjEyLjkxMSAwIDAgMS03LjI2NSA1NS4wM2MtNC44NiAxOC4xNjItMTIuMDkxIDM1LjM1Mi0yMS4yODIgNTEuMjYyLTkuMzI4IDE2LjEzMy0yMC42NjkgMzAuOTUyLTMzLjc2NiA0NC4wNDktMTMuMDc5IDEzLjA5Ni0yNy44OTkgMjQuNDU0LTQ0LjAzMSAzMy43OTktMTUuOTExIDkuMjI2LTMzLjEgMTYuNDU2LTUxLjI2MiAyMS4zMzRhMjEyLjQ5NSAyMTIuNDk1IDAgMCAxLTU1LjA2NSA3LjI5OHY5OC4xNzZhMzEyLjA5IDMxMi4wOSAwIDAgMCA4MC40NTctMTAuNjQyWm02Ni43NDctMzAwLjUxMWMwLTgxLjQ4LTY2LjA0Ny0xNDcuNTI3LTE0Ny41MjgtMTQ3LjUyNy04MS40OCAwLTE0Ny41MjcgNjYuMDQ3LTE0Ny41MjcgMTQ3LjUyNyAwIDgxLjQ4IDY2LjA0NyAxNDcuNTI3IDE0Ny41MjcgMTQ3LjUyNyA4MS40ODEgMCAxNDcuNTI4LTY2LjA2NCAxNDcuNTI4LTE0Ny41MjdaXFxcIiBmaWxsPVxcXCJ1cmwoI2dyb3VwX3N2Z19fYilcXFwiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJncm91cF9zdmdfX2FcXFwiIHgxPVxcXCIxMjcuODk1XFxcIiB5MT1cXFwiNTgyLjY0N1xcXCIgeDI9XFxcIjg3OC4zNDJcXFwiIHkyPVxcXCIxNDkuMzc3XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuNlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImdyb3VwX3N2Z19fYlxcXCIgeDE9XFxcIi0xMS4wNzFcXFwiIHkxPVxcXCI2OTkuMTkzXFxcIiB4Mj1cXFwiOTM2LjU4OVxcXCIgeTI9XFxcIjE1Mi4wNjFcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIi42XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgOTM0IDIyMFxcXCI+PGcgZmlsbD1cXFwibm9uZVxcXCI+PHBhdGggZmlsbD1cXFwiIzE4NTU2OFxcXCIgZD1cXFwiTTIuNiAyMDguN1YxMDIuMmgzMC44djEwNi41ek0xMjYgMTk4LjRjLTcgOC41LTE3IDEzLjMtMzAuNCAxMy4zLTIxLjQgMC0zOC43LTEzLjMtMzguNy0zMy45IDAtMjAuMyAxNy4zLTMwLjQgNDEuNS0zMS43IDE4LjYtMS4xIDI0LjUtMy4xIDI0LjUtOS40IDAtNi4xLTUuNy0xMC4zLTE1LjctMTAuMy0xMi4yIDAtMTcuNSA2LjEtMTguMSAxMi43SDU5LjJjMS41LTIzLjQgMTktMzkuNSA0OC4zLTM5LjUgMjguNiAwIDQ3IDE1LjUgNDcgNDQuNnY2NS4xaC0yNS42bC0yLjktMTAuOXptLTM4LTIxLjljMCA2LjEgNS41IDkuOCAxNC4yIDkuOCAxMS44IDAgMjEuMi02LjYgMjEuMi0xOS45di0zLjlzLTUuNyAyLjYtMTcuNSAzLjNjLTEyLjguNy0xNy45IDQuOC0xNy45IDEwLjd6bTEzNSAzMy4yYy0yMy40IDAtMzYuOS0xMy41LTM2LjktMzcuMXYtNDEuN2gtMTcuOXYtMjguNmgxNy45Vjg2LjVsMzEtMjYuMnY0MS45SDI0NHYyOC42aC0yNi45djM3LjRjMCAxMC4zIDYuOCAxMi43IDEzLjEgMTIuNyA3LjIgMCAxMy4xLTIuOCAxMy4xLTIuOHYyOC4ycy04LjMgMy40LTIwLjMgMy40ek0wIDcwLjJjMC0xMCA3LjktMTguMSAxNy45LTE4LjEgMTAgMCAxOC4xIDguMSAxOC4xIDE4LjEgMCA5LjgtOC4xIDE3LjktMTguMSAxNy45LTEwIDAtMTcuOS04LTE3LjktMTcuOXptMjY2LjkgMTM4LjVWMTAyLjJoMzAuOHYxMDYuNXpcXFwiLz48ZyB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyMjcpXFxcIj48cGF0aCBmaWxsPVxcXCIjMTg1NTY4XFxcIiBkPVxcXCJNMTEwLjkgNzAuNWMwLTQuOS0uNy05LjctMS45LTE0LjMtMS4zLTQuNy0zLjEtOS4yLTUuNS0xMy4zLTIuNC00LjItNS40LTgtOC44LTExLjQtMy40LTMuNC03LjItNi4zLTExLjQtOC44LTQuMS0yLjQtOC42LTQuMy0xMy4zLTUuNS00LjYtMS4yLTkuMy0xLjktMTQuMy0xLjktNC45IDAtOS43LjctMTQuMyAxLjktNC43IDEuMy05LjIgMy4xLTEzLjMgNS41LTQuMiAyLjQtOCA1LjQtMTEuNCA4LjgtMy40IDMuNC02LjQgNy4yLTguOCAxMS40LTIuNCA0LjEtNC4zIDguNi01LjUgMTMuM2w3LjkgMi4xYzEuMS00IDIuNy03LjggNC43LTExLjMgMi4xLTMuNiA0LjYtNi44IDcuNS05LjcgMi45LTIuOSA2LjItNS40IDkuNy03LjUgMy41LTIgNy4zLTMuNiAxMS4zLTQuNyAzLjktMSA3LjktMS42IDEyLjEtMS42IDQuMiAwIDguMy42IDEyLjIgMS42IDQgMS4xIDcuOCAyLjcgMTEuMyA0LjcgMy42IDIuMSA2LjggNC42IDkuNyA3LjUgMi45IDIuOSA1LjQgNi4yIDcuNSA5LjcgMiAzLjUgMy42IDcuMyA0LjcgMTEuMyAxIDMuOSAxLjYgOCAxLjYgMTIuMiAwIDQuMi0uNiA4LjMtMS42IDEyLjEtMS4xIDQtMi43IDcuOC00LjcgMTEuM2w3LjEgNC4xYzIuNC00LjEgNC4zLTguNiA1LjUtMTMuMyAxLjMtNC41IDItOS4yIDItMTQuMlpcXFwiLz48cGF0aCBmaWxsPVxcXCIjMTg1NTY4XFxcIiBkPVxcXCJNMTI1LjIgNzAuNWMwLTYuMi0uOC0xMi4zLTIuNC0xOC0xLjYtNS45LTMuOS0xMS42LTctMTYuOC0zLjEtNS4zLTYuOC0xMC4xLTExLjEtMTQuNC00LjMtNC4zLTkuMS04LTE0LjQtMTEuMS01LjItMy0xMC44LTUuNC0xNi44LTYuOUM2Ny44IDEuOCA2MS43LjkgNTUuNS45Yy02LjIgMC0xMi4yLjgtMTggMi4zLTUuOSAxLjYtMTEuNiAzLjktMTYuOCA2LjktNS4zIDMtMTAuMSA2LjgtMTQuNCAxMWw0LjMgNC4zYzMuOS0zLjkgOC4zLTcuMyAxMy4xLTEwLjEgNC43LTIuNyA5LjktNC45IDE1LjMtNi4zIDUuMi0xLjQgMTAuNy0yLjEgMTYuNC0yLjEgNS43IDAgMTEuMi44IDE2LjQgMi4yIDUuNCAxLjQgMTAuNSAzLjYgMTUuMyA2LjNhNjQuNDY2IDY0LjQ2NiAwIDAgMSAyMy4yIDIzLjJjMi43IDQuNyA0LjkgOS45IDYuMyAxNS4zIDEuNCA1LjIgMi4yIDEwLjcgMi4yIDE2LjQgMCA1LjctLjcgMTEuMS0yLjEgMTYuNC0xLjQgNS40LTMuNiAxMC42LTYuMyAxNS4zLTIuOCA0LjgtNi4yIDkuMi0xMC4xIDEzLjFsNC4zIDQuM2M0LjMtNC4zIDgtOS4xIDExLjEtMTQuNCAzLTUuMiA1LjQtMTAuOCA2LjktMTYuOCAxLjgtNS40IDIuNi0xMS41IDIuNi0xNy43WlxcXCIvPjxwYXRoIGZpbGw9XFxcIiMxODU1NjhcXFwiIGQ9XFxcIk05My4yIDYwLjRjLS45LTMuMy0yLjItNi41LTMuOS05LjQtMS43LTIuOS0zLjgtNS43LTYuMi04LTIuNC0yLjQtNS4xLTQuNS04LTYuMi0yLjktMS43LTYtMy05LjQtMy45LTMuMi0uOS02LjYtMS4zLTEwLTEuMy0zLjUgMC02LjguNS0xMCAxLjMtMy4zLjktNi41IDIuMi05LjQgMy45LTIuOSAxLjctNS43IDMuOC04LjEgNi4yLTIuNCAyLjQtNC41IDUuMS02LjIgOC0xLjcgMi45LTMgNi0zLjkgOS40LS45IDMuMi0xLjMgNi42LTEuMyAxMC4xcy41IDYuOCAxLjMgMTBjLjkgMy4zIDIuMiA2LjUgMy45IDkuNGwxMC42LTYuMWMtMS4yLTItMi4xLTQuMS0yLjctNi40LS42LTIuMi0uOS00LjUtLjktNi45IDAtMi40LjMtNC43LjktNi45LjYtMi4zIDEuNS00LjQgMi43LTYuNCAxLjItMiAyLjYtMy45IDQuMi01LjVzMy41LTMuMSA1LjUtNC4yIDQuMS0yIDYuNC0yLjdjMi4yLS42IDQuNS0uOSA2LjktLjkgMi40IDAgNC43LjMgNi45LjkgMi4zLjYgNC40IDEuNSA2LjQgMi43IDIgMS4yIDMuOSAyLjYgNS41IDQuMnMzLjEgMy41IDQuMiA1LjVjMS4yIDIgMi4xIDQuMSAyLjcgNi40LjYgMi4yLjkgNC41LjkgNi45aDEyLjNjMC0zLjUtLjQtNi45LTEuMy0xMC4xWlxcXCIvPjxnIGZpbGw9XFxcIiNBN0VCRUZcXFwiPjxwYXRoIGQ9XFxcIk04MS40IDYzLjZjLS42LTIuMy0xLjUtNC40LTIuNy02LjQtMS4yLTItMi42LTMuOS00LjItNS41bC01LjggNS44YzEuMSAxLjEgMi4xIDIuNCAyLjkgMy44LjggMS40IDEuNCAyLjkgMS44IDQuNC40IDEuNS42IDMuMS42IDQuOCAwIDEuNy0uMiAzLjItLjYgNC44LS40IDEuNi0xIDMuMS0xLjggNC40LS44IDEuNC0xLjggMi43LTIuOSAzLjgtMS4xIDEuMS0yLjQgMi4xLTMuOCAyLjktMS40LjgtMi45IDEuNC00LjQgMS44LTEuNS40LTMuMS42LTQuOC42LTEuNyAwLTMuMi0uMi00LjgtLjYtMS42LS40LTMuMS0xLTQuNC0xLjhsLTQuMSA3LjFjMiAxLjIgNC4xIDIuMSA2LjQgMi43IDIuMi42IDQuNS45IDYuOS45IDIuNCAwIDQuNy0uMyA2LjktLjkgMi4zLS42IDQuNC0xLjUgNi40LTIuNyAyLTEuMiAzLjktMi42IDUuNS00LjJzMy4xLTMuNSA0LjItNS41YzEuMi0yIDIuMS00LjEgMi43LTYuNC42LTIuMi45LTQuNS45LTYuOSAwLTIuNC0uMy00LjctLjktNi45WlxcXCIvPjxwYXRoIGQ9XFxcIk05Ni40IDQ3Yy0yLjEtMy42LTQuNi02LjgtNy41LTkuNy0yLjktMi45LTYuMi01LjQtOS43LTcuNS0zLjUtMi03LjMtMy42LTExLjMtNC43LTMuOS0xLTgtMS42LTEyLjItMS42LTQuMiAwLTguMy42LTEyLjIgMS42LTQgMS4xLTcuOCAyLjctMTEuMyA0LjctMy42IDIuMS02LjggNC42LTkuNyA3LjUtMi45IDIuOS01LjQgNi4yLTcuNSA5LjctMiAzLjUtMy42IDcuMy00LjcgMTEuMy0xIDMuOS0xLjYgOC0xLjYgMTIuMmg4LjJjMC0zLjUuNS02LjkgMS4zLTEwLjEuOS0zLjMgMi4yLTYuNSAzLjktOS40IDEuNy0yLjkgMy44LTUuNyA2LjItOC4xIDIuNC0yLjQgNS4xLTQuNSA4LjEtNi4yIDIuOS0xLjcgNi4xLTMgOS40LTMuOSAzLjItLjkgNi42LTEuMyAxMC4xLTEuM3M2LjkuNSAxMC4xIDEuM2MzLjMuOSA2LjUgMi4yIDkuNCAzLjkgMi45IDEuNyA1LjcgMy44IDguMSA2LjIgMi40IDIuNCA0LjUgNS4xIDYuMiA4LjEgMS43IDIuOSAzIDYuMSAzLjkgOS40bDcuOS0yLjFjLTEuNS00LTMuMS03LjgtNS4xLTExLjNaXFxcIi8+PHBhdGggZD1cXFwiTTExNi45IDU0LjFjLTEuNC01LjQtMy42LTEwLjUtNi4zLTE1LjNhNjQuNDY2IDY0LjQ2NiAwIDAgMC0yMy4yLTIzLjJjLTQuNy0yLjctOS45LTQuOS0xNS4zLTYuMy01LjItMS40LTEwLjctMi4xLTE2LjQtMi4xLTUuNyAwLTExLjIuOC0xNi40IDIuMS01LjQgMS40LTEwLjUgMy42LTE1LjMgNi4zQTY0LjQ2NiA2NC40NjYgMCAwIDAgLjggMzguOGw3LjEgNC4xYzIuNC00LjIgNS40LTggOC44LTExLjQgMy40LTMuNCA3LjMtNi4zIDExLjQtOC44IDQuMS0yLjQgOC42LTQuMyAxMy4zLTUuNSA0LjYtMS4yIDkuMy0xLjkgMTQuMy0xLjlzOS43LjcgMTQuMyAxLjljNC43IDEuMyA5LjIgMy4xIDEzLjMgNS41IDQuMiAyLjQgOCA1LjQgMTEuNCA4LjggMy40IDMuNCA2LjMgNy4zIDguOCAxMS40IDIuNCA0LjEgNC4zIDguNiA1LjUgMTMuMyAxLjIgNC42IDEuOSA5LjMgMS45IDE0LjMgMCA0LjktLjcgOS43LTEuOSAxNC4zbDcuOSAyLjFjMS40LTUuMiAyLjEtMTAuNyAyLjEtMTYuNC4xLTUuNi0uNy0xMS4xLTIuMS0xNi40WlxcXCIvPjwvZz48Y2lyY2xlIGN4PVxcXCI1NS43XFxcIiBjeT1cXFwiNzAuNVxcXCIgcj1cXFwiMTguNFxcXCIgZmlsbD1cXFwiIzE4NTU2OFxcXCIvPjwvZz48cGF0aCBkPVxcXCJNMzU1LjMgMTQzLjR2LTM4LjJoOC4xdjM4LjJ6bTIzLjMtMTMuNHYxMy40aC03Ljd2LTI2LjdoNy42djEuOWMxLjUtMS40IDMuNi0yLjUgNi4zLTIuNSA2LjUgMCAxMC44IDQuMyAxMC44IDExLjh2MTUuNUgzODh2LTE0LjljMC0yLjgtMS4zLTUuMi00LjQtNS4yLTMuNy0uMS01IDIuNi01IDYuN3ptMzQuMSAxMy41Yy01LjggMC05LjItMy40LTkuMi05LjN2LTEwLjRIMzk5di03LjFoNC41di0zLjlsNy43LTYuNXYxMC41aDYuN3Y3LjFoLTYuN3Y5LjNjMCAyLjYgMS43IDMuMiAzLjMgMy4yIDEuOCAwIDMuMy0uNyAzLjMtLjd2N2MwLS4xLTIuMS44LTUuMS44em0zNS45LTExLjRoLTE4LjljLjQgMi43IDIuNyA0LjggNiA0LjggMi4yIDAgMy41LS45IDQuNC0yLjNoOC4zYy0xLjggNS44LTUuOSA5LjQtMTIuNiA5LjQtNy43IDAtMTQtNS40LTE0LTEzLjggMC04LjEgNS43LTE0LjIgMTMuNS0xNC4yIDguOCAwIDEzLjIgNi45IDEzLjIgMTQuMS4yLjcuMSAyIC4xIDJ6bS0xMy4xLTkuM2MtMi45IDAtNC45IDEuOC01LjQgNC4xaDEwLjRjLS4yLTIuMy0yLjItNC4xLTUtNC4xem0zNi4xLTQuNnY3LjZzLTItMi4xLTUuMS0yLjFjLTIuMyAwLTUgMS4zLTUgNS4ydjE0LjRoLTcuN3YtMjYuN2g3LjZ2Mi4yYy0uMSAwIDEuNS0yLjYgNS4zLTIuNiAzLjQuMSA0LjkgMiA0LjkgMnptMTIgMTEuOHYxMy40aC03Ljd2LTI2LjdoNy42djEuOWMxLjUtMS40IDMuNi0yLjUgNi4zLTIuNSA2LjUgMCAxMC44IDQuMyAxMC44IDExLjh2MTUuNWgtNy43di0xNC45YzAtMi44LTEuMy01LjItNC40LTUuMi0zLjctLjEtNC45IDIuNi00LjkgNi43em0zOS4zIDEwLjdjLTEuNyAyLjEtNC4zIDMuMy03LjYgMy4zLTUuMyAwLTkuNi0zLjMtOS42LTguNCAwLTUuMSA0LjMtNy42IDEwLjQtNy45IDQuNi0uMyA2LjEtLjggNi4xLTIuMyAwLTEuNS0xLjQtMi42LTMuOS0yLjYtMy4xIDAtNC40IDEuNS00LjUgMy4yaC03LjVjLjQtNS44IDQuNy05LjkgMTItOS45IDcuMSAwIDExLjcgMy45IDExLjcgMTEuMXYxNi4yaC02LjRsLS43LTIuN3ptLTkuNC01LjVjMCAxLjUgMS40IDIuNSAzLjUgMi41IDIuOSAwIDUuMy0xLjYgNS4zLTV2LTFzLTEuNC43LTQuNC44Yy0zLjIuMi00LjQgMS4yLTQuNCAyLjd6bTMzLjYgOC4zYy01LjggMC05LjItMy40LTkuMi05LjN2LTEwLjRoLTQuNXYtNy4xaDQuNXYtMy45bDcuNy02LjV2MTAuNWg2Ljd2Ny4xaC02Ljd2OS4zYzAgMi42IDEuNyAzLjIgMy4zIDMuMiAxLjggMCAzLjMtLjcgMy4zLS43djdjMC0uMS0yLjEuOC01LjEuOHptMTAuNC0zNC40YzAtMi41IDItNC41IDQuNS00LjVzNC41IDIgNC41IDQuNS0yIDQuNS00LjUgNC41LTQuNS0yLjEtNC41LTQuNXptLjYgMzQuM3YtMjYuN2g3Ljd2MjYuN2gtNy43em0xMy40LTEzLjRjMC04IDYuMi0xNCAxNC4yLTE0IDguMSAwIDE0LjIgNiAxNC4yIDE0cy02LjIgMTQtMTQuMiAxNGMtOC4xIDAtMTQuMi02LTE0LjItMTR6bTcuOSAwYzAgMy45IDIuNyA2LjggNi4zIDYuOCAzLjcgMCA2LjMtMi44IDYuMy02LjggMC0zLjktMi43LTYuOC02LjMtNi44LTMuNi4xLTYuMyAyLjktNi4zIDYuOHptMzMuNiAwdjEzLjRoLTcuN3YtMjYuN2g3LjZ2MS45YzEuNS0xLjQgMy42LTIuNSA2LjMtMi41IDYuNSAwIDEwLjggNC4zIDEwLjggMTEuOHYxNS41aC03Ljd2LTE0LjljMC0yLjgtMS4zLTUuMi00LjQtNS4yLTMuNi0uMS00LjkgMi42LTQuOSA2Ljd6bTM5LjQgMTAuN2MtMS43IDIuMS00LjMgMy4zLTcuNiAzLjMtNS4zIDAtOS42LTMuMy05LjYtOC40IDAtNS4xIDQuMy03LjYgMTAuNC03LjkgNC42LS4zIDYuMS0uOCA2LjEtMi4zIDAtMS41LTEuNC0yLjYtMy45LTIuNi0zLjEgMC00LjQgMS41LTQuNSAzLjJoLTcuNWMuNC01LjggNC43LTkuOSAxMi05LjkgNy4xIDAgMTEuNyAzLjkgMTEuNyAxMS4xdjE2LjJoLTYuNGwtLjctMi43em0tOS41LTUuNWMwIDEuNSAxLjQgMi41IDMuNSAyLjUgMi45IDAgNS4zLTEuNiA1LjMtNXYtMXMtMS40LjctNC40LjhjLTMuMi4yLTQuNCAxLjItNC40IDIuN3ptMjMgOC4ydi0zOC4yaDcuN3YzOC4yem00OS42LTM4LjIgMTQuOSAzOC4ySDcyMmwtMy4xLTcuNWgtMTQuOGwtMyA3LjVoLTguNGwxNC45LTM4LjJoNy45em0tMy45IDExLTQuNyAxMi41aDkuNWwtNC44LTEyLjV6bTIyLjUtNy4xYzAtMi41IDItNC41IDQuNS00LjVzNC41IDIgNC41IDQuNS0yIDQuNS00LjUgNC41LTQuNS0yLjEtNC41LTQuNXptLjYgMzQuM3YtMjYuN2g3Ljd2MjYuN2gtNy43em0xMy40LTEzLjRjMC04LjQgNi4xLTE0IDEzLjUtMTQgMy4xIDAgNS42IDEuMSA3IDIuM3YtMTMuMmg3Ljd2MzguMmgtNy42di0xLjljLTEuNCAxLjQtNC4xIDIuNS03LjEgMi41LTcuNS4xLTEzLjUtNS4zLTEzLjUtMTMuOXptMjAuNSAwYzAtNC4xLTIuNy03LTYuMy03LTMuNiAwLTYuMyAyLjgtNi4zIDcgMCA0LjEgMi43IDcgNi4zIDcgMy42IDAgNi4zLTIuOCA2LjMtN3ptLTQxNS44IDQwLjZoMzB2Ny41aC0xMXYzMC43aC04LjFWMTc4aC0xMXYtNy40em00OC45IDEzdjcuNnMtMi0yLjEtNS4xLTIuMWMtMi4zIDAtNSAxLjMtNSA1LjJ2MTQuNEgzODRWMTgyaDcuNnYyLjJjLS4xIDAgMS41LTIuNiA1LjMtMi42IDMuMy4xIDQuOCAyIDQuOCAyem0yMC44IDIyLjRjLTEuNyAyLjEtNC4zIDMuMy03LjYgMy4zLTUuMyAwLTkuNi0zLjMtOS42LTguNCAwLTUuMSA0LjMtNy42IDEwLjQtNy45IDQuNi0uMyA2LjEtLjggNi4xLTIuMyAwLTEuNS0xLjQtMi42LTMuOS0yLjYtMy4xIDAtNC40IDEuNS00LjUgMy4yaC03LjVjLjQtNS44IDQuNy05LjkgMTItOS45IDcuMSAwIDExLjcgMy45IDExLjcgMTEuMXYxNi4yaC02LjRsLS43LTIuN3ptLTkuNS01LjRjMCAxLjUgMS40IDIuNSAzLjUgMi41IDIuOSAwIDUuMy0xLjYgNS4zLTV2LTFzLTEuNC43LTQuNC44Yy0zLjEuMi00LjQgMS4yLTQuNCAyLjd6bTMwLjgtNS4ydjEzLjRINDM2di0yNi43aDcuNnYxLjljMS41LTEuNCAzLjYtMi41IDYuMy0yLjUgNi41IDAgMTAuOCA0LjMgMTAuOCAxMS44djE1LjVINDUzdi0xNC45YzAtMi44LTEuMy01LjItNC40LTUuMi0zLjYtLjEtNC44IDIuNi00LjggNi43em0zOCA1LjdjMC0uOC0uNS0xLjUtMi42LTEuOWwtNC0uOGMtNi4xLTEuMi04LjYtNC4xLTguNi04LjEgMC00LjcgMy41LTguOSAxMC45LTguOXMxMC43IDQuMSAxMS4zIDguOGgtNy40Yy0uNC0xLjUtMS43LTIuMy00LTIuMy0yLjIgMC0zLjQuOC0zLjQgMS45IDAgLjguNyAxLjMgMi43IDEuN2w0IC44YzUuNyAxLjEgOC42IDMuOCA4LjYgOC40IDAgNS4yLTMuOCA4LjgtMTEuMiA4LjgtNy42IDAtMTEuNy0zLjYtMTIuNS05LjJoNy44Yy40IDEuOSAxLjggMi44IDQuNyAyLjggMi41LS4xIDMuNy0uOCAzLjctMnptNDAuNy01LjdjMCA4LjQtNi4xIDE0LTEzLjUgMTQtMy4xIDAtNS42LTEuMS03LTIuM3YxMi4zaC03Ljd2LTM3LjNoNy42djEuOWMxLjQtMS40IDQuMS0yLjYgNy4xLTIuNiA3LjUgMCAxMy41IDUuNCAxMy41IDE0em0tMjAuNSAwYzAgNC4xIDIuNyA3IDYuMyA3IDMuNiAwIDYuMy0yLjggNi4zLTcgMC00LjEtMi43LTctNi4zLTctMy42IDAtNi4zIDIuOS02LjMgN3ptNDEuOCAxMC42Yy0xLjcgMi4xLTQuMyAzLjMtNy42IDMuMy01LjMgMC05LjYtMy4zLTkuNi04LjQgMC01LjEgNC4zLTcuNiAxMC40LTcuOSA0LjYtLjMgNi4xLS44IDYuMS0yLjMgMC0xLjUtMS40LTIuNi0zLjktMi42LTMuMSAwLTQuNCAxLjUtNC41IDMuMmgtNy41Yy40LTUuOCA0LjctOS45IDEyLTkuOSA3LjEgMCAxMS43IDMuOSAxMS43IDExLjF2MTYuMmgtNi40bC0uNy0yLjd6bS05LjUtNS40YzAgMS41IDEuNCAyLjUgMy41IDIuNSAyLjkgMCA1LjMtMS42IDUuMy01di0xcy0xLjQuNy00LjQuOGMtMy4xLjItNC40IDEuMi00LjQgMi43em00MC44LTE3djcuNnMtMi0yLjEtNS4xLTIuMWMtMi4zIDAtNSAxLjMtNSA1LjJ2MTQuNGgtNy43VjE4Mmg3LjZ2Mi4yYy0uMSAwIDEuNS0yLjYgNS4zLTIuNiAzLjQuMSA0LjkgMiA0LjkgMnptMjkuNyAxMy45aC0xOC45Yy40IDIuNyAyLjcgNC44IDYgNC44IDIuMiAwIDMuNS0uOSA0LjQtMi4zaDguM2MtMS44IDUuOC01LjkgOS40LTEyLjYgOS40LTcuNyAwLTE0LTUuNC0xNC0xMy44IDAtOC4xIDUuNy0xNC4yIDEzLjUtMTQuMiA4LjggMCAxMy4yIDYuOSAxMy4yIDE0LjEuMS43LjEgMiAuMSAyem0tMTMuMS05LjNjLTIuOSAwLTQuOSAxLjgtNS40IDQuMWgxMC40Yy0uMi0yLjMtMi4yLTQuMS01LTQuMXptMjYuMSA3LjJ2MTMuNEg2MTB2LTI2LjdoNy42djEuOWMxLjUtMS40IDMuNi0yLjUgNi4zLTIuNSA2LjUgMCAxMC44IDQuMyAxMC44IDExLjh2MTUuNUg2Mjd2LTE0LjljMC0yLjgtMS4zLTUuMi00LjQtNS4yLTMuNi0uMS00LjggMi42LTQuOCA2Ljd6bTQwLjcgM2g4LjVjLTEuMyA2LjUtNi4yIDExLTEzLjQgMTEtOC4xIDAtMTQuMS01LjktMTQuMS0xNCAwLTggNi0xNCAxNC4xLTE0IDcgMCAxMS45IDQuNCAxMi45IDEwLjdINjU4Yy0uNi0yLTIuMy0zLjQtNC43LTMuNC0zLjMgMC01LjkgMi44LTUuOSA2LjcgMCAzLjkgMi42IDYuNyA2IDYuNyAyLjYgMCA0LjUtMS40IDUuMS0zLjd6bTE4IDIxLjJjLTMuNSAwLTUuMi0uOS01LjItLjl2LTcuMXMxLjYuOCAzLjMuOGMxLjcgMCA0LS43IDQuNi0zLjdMNjY4LjggMTgyaDguNmw2LjEgMTYuNiA2LjItMTYuNmg4LjNsLTExIDI3LjJjLTIuOSA3LjEtNS4yIDEwLjQtMTAuNSAxMC40em00MC45LTEwLjh2LTM4LjJoOC4xdjM4LjJ6bTIzLjMtMTMuNHYxMy40SDczM3YtMjYuN2g3LjZ2MS45YzEuNS0xLjQgMy42LTIuNSA2LjMtMi41IDYuNSAwIDEwLjggNC4zIDEwLjggMTEuOHYxNS41SDc1MHYtMTQuOWMwLTIuOC0xLjMtNS4yLTQuNC01LjItMy43LS4xLTQuOSAyLjYtNC45IDYuN3ptMjMtMjAuOWMwLTIuNSAyLTQuNSA0LjUtNC41czQuNSAyIDQuNSA0LjUtMiA0LjUtNC41IDQuNS00LjUtMi4xLTQuNS00LjV6bS42IDM0LjN2LTI2LjdoNy43djI2LjdoLTcuN3ptMjUuNi4xYy01LjggMC05LjItMy40LTkuMi05LjN2LTEwLjRoLTQuNXYtNy4xaDQuNXYtMy45bDcuNy02LjV2MTAuNWg2Ljd2Ny4xaC02Ljd2OS4zYzAgMi42IDEuNyAzLjIgMy4zIDMuMiAxLjggMCAzLjMtLjcgMy4zLS43djdjMC0uMS0yLjEuOC01LjEuOHptMTAuNC0zNC40YzAtMi41IDItNC41IDQuNS00LjVzNC41IDIgNC41IDQuNS0yIDQuNS00LjUgNC41LTQuNS0yLjEtNC41LTQuNXptLjYgMzQuM3YtMjYuN2g3Ljd2MjYuN2gtNy43em0zMC44LTIuOGMtMS43IDIuMS00LjMgMy4zLTcuNiAzLjMtNS4zIDAtOS42LTMuMy05LjYtOC40IDAtNS4xIDQuMy03LjYgMTAuNC03LjkgNC42LS4zIDYuMS0uOCA2LjEtMi4zIDAtMS41LTEuNC0yLjYtMy45LTIuNi0zLjEgMC00LjQgMS41LTQuNSAzLjJoLTcuNWMuNC01LjggNC43LTkuOSAxMi05LjkgNy4xIDAgMTEuNyAzLjkgMTEuNyAxMS4xdjE2LjJoLTYuNGwtLjctMi43em0tOS40LTUuNGMwIDEuNSAxLjQgMi41IDMuNSAyLjUgMi45IDAgNS4zLTEuNiA1LjMtNXYtMXMtMS40LjctNC40LjhjLTMuMi4yLTQuNCAxLjItNC40IDIuN3ptMzMuNiA4LjNjLTUuOCAwLTkuMi0zLjQtOS4yLTkuM3YtMTAuNGgtNC41di03LjFoNC41di0zLjlsNy43LTYuNXYxMC41aDYuN3Y3LjFoLTYuN3Y5LjNjMCAyLjYgMS43IDMuMiAzLjMgMy4yIDEuOCAwIDMuMy0uNyAzLjMtLjd2N2MwLS4xLTIuMS44LTUuMS44em0xMC40LTM0LjRjMC0yLjUgMi00LjUgNC41LTQuNXM0LjUgMiA0LjUgNC41LTIgNC41LTQuNSA0LjUtNC41LTIuMS00LjUtNC41em0uNiAzNC4zdi0yNi43aDcuN3YyNi43aC03Ljd6bTM4LjctMjYuNy05LjUgMjYuN2gtOGwtOS41LTI2LjdoOC4ybDUuMiAxNi41IDUuMi0xNi41em0yOC4yIDE1LjRoLTE4LjljLjQgMi43IDIuNyA0LjggNiA0LjggMi4yIDAgMy41LS45IDQuNC0yLjNoOC4zYy0xLjggNS44LTUuOSA5LjQtMTIuNiA5LjQtNy43IDAtMTQtNS40LTE0LTEzLjggMC04LjEgNS43LTE0LjIgMTMuNS0xNC4yIDguOCAwIDEzLjIgNi45IDEzLjIgMTQuMS4xLjcuMSAyIC4xIDJabS0xMy4xLTkuM2MtMi45IDAtNC45IDEuOC01LjQgNC4xaDEwLjRjLS4yLTIuMy0yLjItNC4xLTUtNC4xWlxcXCIgZmlsbD1cXFwiIzE4NTU2OFxcXCIvPjwvZz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjUgMjRcXFwiPjxwYXRoIGQ9XFxcIk0yMC44MzQgMTEuMjNWOC45NTdhOC4zMzMgOC4zMzMgMCAwIDAtMTYuNjY3IDB2Mi4yNzFhMy4xMjUgMy4xMjUgMCAwIDAtMi4wODMgMi45Mzh2Mi4wODNhMy4xMjUgMy4xMjUgMCAwIDAgMy4xMjQgMy4xMjVoMy4xMjZhMS4wNDEgMS4wNDEgMCAwIDAgMS4wNDEtMS4wNDJ2LTYuMjVhMS4wNDIgMS4wNDIgMCAwIDAtMS4wNDEtMS4wNDFINi4yNVY4Ljk1OGE2LjI1IDYuMjUgMCAxIDEgMTIuNSAwdjIuMDg0aC0yLjA4M2ExLjA0MSAxLjA0MSAwIDAgMC0xLjA0MiAxLjA0MXY2LjI1YTEuMDQxIDEuMDQxIDAgMCAwIDEuMDQyIDEuMDQyaDMuMTI1YTMuMTI1IDMuMTI1IDAgMCAwIDMuMTI1LTMuMTI1di0yLjA4M2EzLjEyNSAzLjEyNSAwIDAgMC0yLjA4NC0yLjkzOFpNNy4yOTIgMTMuMTI0djQuMTY3SDUuMjA5YTEuMDQyIDEuMDQyIDAgMCAxLTEuMDQyLTEuMDQydi0yLjA4M2ExLjA0MiAxLjA0MiAwIDAgMSAxLjA0Mi0xLjA0MmgyLjA4M1ptMTMuNTQyIDMuMTI1YTEuMDQyIDEuMDQyIDAgMCAxLTEuMDQyIDEuMDQyaC0yLjA4NHYtNC4xNjdoMi4wODRhMS4wNDIgMS4wNDIgMCAwIDEgMS4wNDEgMS4wNDJ2Mi4wODNaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE4LjM4NCAyMS42MTZBNC42MyA0LjYzIDAgMCAxIDE1LjEyIDIzbC0uMDEtMS4xNThhMy40NzIgMy40NzIgMCAwIDAgMy40NDUtMy41bDEuMTU3LS4wMDlhNC42MyA0LjYzIDAgMCAxLTEuMzMgMy4yODRaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIiBzdHJva2U9XFxcIiNmZmZcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS4wNDJcXFwiLz48cmVjdCB4PVxcXCIxMS4yNVxcXCIgeT1cXFwiMjAuNDE2XFxcIiB3aWR0aD1cXFwiNC42ODhcXFwiIGhlaWdodD1cXFwiMy4xMjVcXFwiIHJ4PVxcXCIxLjU2M1xcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNSAxNFxcXCI+PHBhdGggZD1cXFwiTTcuMzg1IDQuNjY3YTEuMSAxLjEgMCAwIDAtLjUxOC4xMjhjLS4xNi4wODUtLjI5NS4yMDktLjM5LjM2MmwtLjAwNC4wMDYtLjAwMy4wMDdhLjM0Ni4zNDYgMCAwIDEtLjA5My4xMDUuNDM4LjQzOCAwIDAgMS0uNDU1LjAzMy4zNy4zNyAwIDAgMS0uMTEzLS4wOTMuMzEzLjMxMyAwIDAgMS0uMDYtLjExNy4yODcuMjg3IDAgMCAxLS4wMDUtLjEyNGwtLjMyOS0uMDU4LjMyOS4wNThhLjMwNS4zMDUgMCAwIDEgLjA0OS0uMTJsLjAwNC0uMDA1LjAwNC0uMDA2YTEuNzUgMS43NSAwIDAgMSAuNjYzLS42MTUgMS45MiAxLjkyIDAgMCAxIDIuMDkyLjE3NmMuMzI0LjI1Ni41MzcuNjA1LjYwNy45ODUuMDcuMzc4LS4wMDUuNzctLjIxNSAxLjEwNS0uMjExLjMzNy0uNTQ2LjYtLjk1Mi43MzdsLS4yMjcuMDc2di4zNmEuMzEuMzEgMCAwIDEtLjEwNC4yMjcuNDE0LjQxNCAwIDAgMS0uMjguMTA2Yy0uMTEgMC0uMjEtLjA0LS4yODEtLjEwNkEuMzEuMzEgMCAwIDEgNyA3LjY2N1Y3YS4zMS4zMSAwIDAgMSAuMTA0LS4yMjcuNDE0LjQxNCAwIDAgMSAuMjgtLjEwNmMuMjcyIDAgLjUzNi0uMS43MzUtLjI4NWEuOTc3Ljk3NyAwIDAgMCAuMzE3LS43MTUuOTc3Ljk3NyAwIDAgMC0uMzE3LS43MTYgMS4wOCAxLjA4IDAgMCAwLS43MzQtLjI4NFptMCAwVjV2LS4zMzNabS0uMzY5IDQuOTA2LjAxMi0uMDIxLjAwOS0uMDIzYS4xNi4xNiAwIDAgMSAuMDItLjAzNy43MzYuNzM2IDAgMCAxIC4wNS0uMDYuMzkxLjM5MSAwIDAgMSAuMTIyLS4wNzQuNDMzLjQzMyAwIDAgMSAuMzExIDBsLjEyLS4zMS0uMTIuMzFhLjM5LjM5IDAgMCAxIC4xMjcuMDc5Yy4wMzQuMDMyLjA2LjA3LjA3Ny4xMDhhLjMuMyAwIDAgMSAuMDI1LjEydi4wMTVhLjI5LjI5IDAgMCAxLS4wMi4xMTguMjYzLjI2MyAwIDAgMS0uMDY3LjA5OGwuMjI3LjI0NC0uMjI3LS4yNDRhLjMyMS4zMjEgMCAwIDEtLjExNi4wNjhsLS4wMS4wMDMtLjAxLjAwNWEuMzg2LjM4NiAwIDAgMS0uMjkzIDBsLS4wMS0uMDA1LS4wMS0uMDAzYS4zMjEuMzIxIDAgMCAxLS4xMTctLjA2OGwtLjIyNy4yNDQuMjI3LS4yNDRhLjI2My4yNjMgMCAwIDEtLjA2Ny0uMDk3bC0uMDA2LS4wMTUtLjAwNy0uMDE1YS4xOTMuMTkzIDAgMCAxLS4wMjItLjA5M1Y5LjY0YS41MS41MSAwIDAgMS0uMDAyLS4wNTcuMDc4LjA3OCAwIDAgMSAuMDA0LS4wMVpNMy41NzIgMS43NEE3LjI0NSA3LjI0NSAwIDAgMSA3LjM4NS42NjdjLjkwMiAwIDEuNzk1LjE2NSAyLjYyNy40ODUuODMzLjMyIDEuNTg4Ljc4OSAyLjIyMiAxLjM3OGE2LjMyMyA2LjMyMyAwIDAgMSAxLjQ4IDIuMDU1Yy4zNDEuNzY2LjUxNyAxLjU4Ny41MTcgMi40MTVhNiA2IDAgMCAxLTEuMTQ3IDMuNTEgNi43NiA2Ljc2IDAgMCAxLTMuMDcyIDIuMzM4IDcuMzYyIDcuMzYyIDAgMCAxLTMuOTY4LjM2MyA3LjAzMyA3LjAzMyAwIDAgMS0zLjUxLTEuNzQxQTYuMjAxIDYuMjAxIDAgMCAxIC42NyA4LjIzYTUuODkyIDUuODkyIDAgMCAxIC4zODctMy42NDVBNi40NjcgNi40NjcgMCAwIDEgMy41NzIgMS43NFptLjQ0NiA5Ljk3OGE2LjM5IDYuMzkgMCAwIDAgMy4zNjcuOTQ5YzEuNjA0IDAgMy4xNDYtLjU5MiA0LjI4OC0xLjY1MkMxMi44MTUgOS45NTUgMTMuNDYgOC41MTEgMTMuNDYgN2E1LjQgNS40IDAgMCAwLTEuMDMtMy4xNTggNi4wMDcgNi4wMDcgMCAwIDAtMi43MjktMi4wOCA2LjQ4OCA2LjQ4OCAwIDAgMC0zLjQ5OC0uMzIgNi4yMjYgNi4yMjYgMCAwIDAtMy4xMDggMS41NDIgNS41NiA1LjU2IDAgMCAwLTEuNjcgMi45MDYgNS4zMTQgNS4zMTQgMCAwIDAgLjM0OCAzLjI4NyA1Ljc3MyA1Ljc3MyAwIDAgMCAyLjI0NCAyLjU0WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIk0xMS4zMzMgMi4yYy0yLjYtMS40NjctNS44LTEtNy45MzMgMVYyYzAtLjQtLjI2Ny0uNjY3LS42NjctLjY2N1MyLjA2NyAxLjYgMi4wNjcgMnYzYzAgLjQuMjY2LjY2Ni42NjYuNjY2aDNjLjQgMCAuNjY3LS4yNjYuNjY3LS42NjZzLS4yNjctLjY2Ny0uNjY3LS42NjdoLTEuNmMxLTEuMDY3IDIuNC0xLjY2NyAzLjg2Ny0xLjY2NyAyLjkzMyAwIDUuMzMzIDIuNCA1LjMzMyA1LjMzNCAwIDIuOTMzLTIuNCA1LjMzMy01LjMzMyA1LjMzMy0yLjkzMyAwLTUuMzMzLTIuNC01LjMzMy01LjMzMyAwLS40LS4yNjctLjY2Ny0uNjY3LS42NjdTMS4zMzMgNy42IDEuMzMzIDhjMCAzLjY2NiAzIDYuNjY2IDYuNjY3IDYuNjY2IDIuNCAwIDQuNi0xLjI2NiA1LjgtMy4zMzMgMS44LTMuMi43MzMtNy4yNjctMi40NjctOS4xMzNaTTggNS4zMzNjLS40IDAtLjY2Ny4yNjctLjY2Ny42Njd2MmMwIC40LjI2Ny42NjYuNjY3LjY2NmgxLjMzM2MuNCAwIC42NjctLjI2Ni42NjctLjY2NnMtLjI2Ny0uNjY3LS42NjctLjY2N2gtLjY2NlY2YzAtLjQtLjI2Ny0uNjY3LS42NjctLjY2N1pcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE5MCAxOTBcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGNpcmNsZSBjeD1cXFwiOTVcXFwiIGN5PVxcXCI5NVxcXCIgcj1cXFwiODVcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48Y2lyY2xlIGN4PVxcXCI5NVxcXCIgY3k9XFxcIjk1XFxcIiByPVxcXCI5NVxcXCIgZmlsbD1cXFwiI0NERjhGQVxcXCIvPjxwYXRoIGQ9XFxcIk01MS4xNzIgNzkuNjM2YzAtMS44NDggMC0yLjc3Mi4yNDItMy42MjJhNi4zMzEgNi4zMzEgMCAwIDEgLjk4MS0yLjAwN2MuNTIzLS43MTMgMS4yNTItMS4yOCAyLjcxLTIuNDE2bDM0LjExNi0yNi41MzdjLjkyOC0uNzIzIDEuMzkyLTEuMDg0IDEuOS0xLjM0OWE2LjMyOSA2LjMyOSAwIDAgMSAyLjA0Ny0uNjU1Yy41NjctLjA4IDEuMTU1LS4wNTYgMi4zMy0uMDA4IDEuMDI3LjA0MiAxLjU0LjA2MyAyLjAzMy4xNjMuNjIyLjEyNiAxLjIyLjM0NCAxLjc3Ny42NDguNDQyLjI0MS44NDguNTU1IDEuNjYxIDEuMTg0bDM0LjY4OCAyNi44MjRjMS40NjcgMS4xMzQgMi4yIDEuNzAyIDIuNzI2IDIuNDE2LjQ0Ni42MDYuNzggMS4yODguOTg3IDIuMDEyLjI0NC44NTIuMjQ0IDEuNzguMjQ0IDMuNjM0djUyLjEwMWMwIDEuODAyIDAgMi43MDQtLjM1NiAzLjM5YTMuMTY3IDMuMTY3IDAgMCAxLTEuMzUgMS4zNDljLS42ODYuMzU3LTEuNTg3LjM1Ny0zLjM5LjM1N0g2MC4zNDVjLTMuMjQ1IDAtNC44NjcgMC02LjEwMi0uNjQyYTUuNjk3IDUuNjk3IDAgMCAxLTIuNDMtMi40MjljLS42NDEtMS4yMzUtLjY0MS0yLjg1Ny0uNjQxLTYuMTAyVjc5LjYzNlpcXFwiIGZpbGw9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fYSlcXFwiLz48cGF0aCBkPVxcXCJNNTkuNzc1IDcxLjkyNGMxLjI4NiAwIDEuODkuMDAyIDIuNDYuMTE0Ljc0LjE0NiAxLjQ0Ni40MjkgMi4wODEuODM0LjQ5LjMxMy45MjguNzMgMS44NTggMS42MThsMjYuNzYgMjUuNTYyYTUuMzYgNS4zNiAwIDAgMSAuMDEyIDcuNzM4bC0yNi4xMzQgMjUuMTEzYy0xLjgzMiAxLjc2LTIuNjkzIDIuNTgxLTMuNzY2IDMuMDEzLTEuMDcyLjQzMS0yLjI2Mi40MzYtNC44MDIuNDM2aC0uNzQyYy0xLjUgMC0yLjU5NiAwLTMuNDM0LS4xMTMtLjgyOS0uMTExLTEuMzYxLS4zMjgtMS43Ni0uNzI3LS40LS40LS42MTYtLjkzMi0uNzI4LTEuNzYxLS4xMTItLjgzOC0uMTEzLTEuOTMzLS4xMTMtMy40MzRWODAuMjMyYzAtMS4zNTggMC0yLjM2Mi4wNTYtMy4xNi4wNTUtLjc5NC4xNjQtMS4zNjMuMzcyLTEuODUzYTUuNDAyIDUuNDAyIDAgMCAxIDIuODY3LTIuODY3Yy40OS0uMjA4IDEuMDU4LS4zMTcgMS44NTMtLjM3Mi43OTgtLjA1NiAxLjgwMi0uMDU2IDMuMTYtLjA1NlpcXFwiIGZpbGw9XFxcIiNCOURERkZcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjZcXFwiIHN0cm9rZT1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19iKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNTkxXFxcIi8+PHBhdGggZD1cXFwiTTEzMS43OCA3MS45MjRjLTEuMjg2IDAtMS44OS4wMDItMi40NjEuMTE0YTYuMDQxIDYuMDQxIDAgMCAwLTIuMDgxLjgzNGMtLjQ5LjMxMy0uOTI3LjczLTEuODU3IDEuNjE4bC0yNi43NiAyNS41NjJhNS4zNiA1LjM2IDAgMCAwLS4wMTIgNy43MzhsMjYuMTM0IDI1LjExM2MxLjgzMiAxLjc2IDIuNjkzIDIuNTgxIDMuNzY1IDMuMDEzIDEuMDczLjQzMSAyLjI2My40MzYgNC44MDMuNDM2aC43NDJjMS41IDAgMi41OTYgMCAzLjQzMy0uMTEzLjgzLS4xMTEgMS4zNjItLjMyOCAxLjc2MS0uNzI3LjQtLjQuNjE2LS45MzIuNzI3LTEuNzYxLjExMy0uODM4LjExNC0xLjkzMy4xMTQtMy40MzRWODAuMjMyYzAtMS4zNTggMC0yLjM2Mi0uMDU2LTMuMTYtLjA1NS0uNzk0LS4xNjUtMS4zNjMtLjM3Mi0xLjg1M2E1LjQwMiA1LjQwMiAwIDAgMC0yLjg2OC0yLjg2N2MtLjQ4OS0uMjA4LTEuMDU4LS4zMTctMS44NTMtLjM3Mi0uNzk3LS4wNTYtMS44MDEtLjA1Ni0zLjE1OS0uMDU2WlxcXCIgZmlsbD1cXFwiI0I5RERGRlxcXCIgZmlsbC1vcGFjaXR5PVxcXCIuNlxcXCIgc3Ryb2tlPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2MpXFxcIiBzdHJva2Utd2lkdGg9XFxcIi41OTFcXFwiLz48cGF0aCBkPVxcXCJNNTAuNzEgMTI5LjQ2NWMwLTEuMzEuMDAyLTEuOTI1LjExNS0yLjQ5N2E2LjAzNiA2LjAzNiAwIDAgMSAxLjM4Mi0yLjgwOGMuMzg0LS40MzkuODctLjgxNSAxLjkwOS0xLjYxNWwzNS4yNzMtMjcuMTY4Yy45NTYtLjczNiAxLjQwNC0xLjA4IDEuODkzLTEuMzNhNi4wMzQgNi4wMzQgMCAwIDEgMS44OTItLjYwMmMuNTQzLS4wNzcgMS4xMDktLjA1NSAyLjMxNC0uMDA2IDEuMDUuMDQzIDEuNTQ0LjA2NCAyLjAxNi4xNmE2LjAzNCA2LjAzNCAwIDAgMSAxLjY0LjU5NWMuNDI1LjIyNy44MTcuNTI3IDEuNjUzIDEuMTY2bDM0LjU1MyAyNi40NTFjMi4zNDkgMS43OTggMy40NDUgMi42NDUgNC4wNTggMy44MjQuMDM4LjA3My4wNzUuMTQ3LjExLjIyMi41NjMgMS4yMDMuNTcgMi41ODkuNTcgNS41NDcgMCAxLjQzMS0uMDAxIDIuNDc2LS4xMDQgMy4yNzgtLjEwMi43OTUtLjMgMS4zMDktLjY2NiAxLjcwMmEyLjczNSAyLjczNSAwIDAgMS0uMTQzLjE0MmMtLjM5My4zNjYtLjkwNy41NjUtMS43MDIuNjY3LS44MDIuMTAzLTEuODQ3LjEwNC0zLjI3OC4xMDRINTguNTQyYy0yLjI4NiAwLTMuMzU0LS4wMDQtNC4yMDUtLjNhNS40MDMgNS40MDMgMCAwIDEtMy4zMjYtMy4zMjdjLS4yOTYtLjg1LS4zLTEuOTE4LS4zLTQuMjA1WlxcXCIgZmlsbD1cXFwiI0I5RERGRlxcXCIgc3Ryb2tlPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2QpXFxcIiBzdHJva2Utd2lkdGg9XFxcIi41OTFcXFwiLz48cGF0aCBkPVxcXCJNNTAuNzEgMTI5LjQ2NWMwLTEuMzEuMDAyLTEuOTI1LjExNS0yLjQ5N2E2LjAzNiA2LjAzNiAwIDAgMSAxLjM4Mi0yLjgwOGMuMzg0LS40MzkuODctLjgxNSAxLjkwOS0xLjYxNWwzNS4yNzMtMjcuMTY4Yy45NTYtLjczNiAxLjQwNC0xLjA4IDEuODkzLTEuMzNhNi4wMzQgNi4wMzQgMCAwIDEgMS44OTItLjYwMmMuNTQzLS4wNzcgMS4xMDktLjA1NSAyLjMxNC0uMDA2IDEuMDUuMDQzIDEuNTQ0LjA2NCAyLjAxNi4xNmE2LjAzNCA2LjAzNCAwIDAgMSAxLjY0LjU5NWMuNDI1LjIyNy44MTcuNTI3IDEuNjUzIDEuMTY2bDM0LjU1MyAyNi40NTFjMi4zNDkgMS43OTggMy40NDUgMi42NDUgNC4wNTggMy44MjRsLjI2Mi0uMTM3LS4yNjIuMTM3Yy4wMzguMDczLjA3NS4xNDcuMTEuMjIybC4yNjctLjEyNS0uMjY3LjEyNWMuNTYzIDEuMjAzLjU3IDIuNTg5LjU3IDUuNTQ3IDAgMS40MzEtLjAwMSAyLjQ3Ni0uMTA0IDMuMjc4LS4xMDIuNzk1LS4zIDEuMzA5LS42NjYgMS43MDJhMy4yMTQgMy4yMTQgMCAwIDEtLjE0My4xNDNjLS4zOTMuMzY1LS45MDcuNTY0LTEuNzAyLjY2Ni0uODAyLjEwMy0xLjg0Ny4xMDQtMy4yNzguMTA0SDU4LjU0MmMtMi4yODYgMC0zLjM1NC0uMDA0LTQuMjA1LS4zYTUuNDAzIDUuNDAzIDAgMCAxLTMuMzI2LTMuMzI3Yy0uMjk2LS44NS0uMy0xLjkxOC0uMy00LjIwNVpcXFwiIGZpbGw9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fZSlcXFwiIHN0cm9rZT1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19mKVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNTkxXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTMzLjczM1xcXCIgY3k9XFxcIjEzMi4yMTNcXFwiIHI9XFxcIjIxLjIxM1xcXCIgZmlsbD1cXFwiI0YxRjdGOVxcXCIvPjxtYXNrIGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19pXFxcIiBmaWxsPVxcXCIjZmZmXFxcIj48cGF0aCBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGNsaXAtcnVsZT1cXFwiZXZlbm9kZFxcXCIgZD1cXFwiTTE0Ni41NDEgMTI3LjM2NGEzLjAwMSAzLjAwMSAwIDAgMC00LjI0My00LjI0M2wtMTIuMTMxIDEyLjEzMS00LjI4My00LjI4M2EzIDMgMCAxIDAtNC4yNDMgNC4yNDNsNi4zNjQgNi4zNjRhMy4wMDEgMy4wMDEgMCAwIDAgMy40Ni41NjRjLjMzOS0uMTQ2LjY1Ny0uMzU3LjkzNC0uNjM0bDE0LjE0Mi0xNC4xNDJaXFxcIi8+PC9tYXNrPjxwYXRoIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgY2xpcC1ydWxlPVxcXCJldmVub2RkXFxcIiBkPVxcXCJNMTQ2LjU0MSAxMjcuMzY0YTMuMDAxIDMuMDAxIDAgMCAwLTQuMjQzLTQuMjQzbC0xMi4xMzEgMTIuMTMxLTQuMjgzLTQuMjgzYTMgMyAwIDEgMC00LjI0MyA0LjI0M2w2LjM2NCA2LjM2NGEzLjAwMSAzLjAwMSAwIDAgMCAzLjQ2LjU2NGMuMzM5LS4xNDYuNjU3LS4zNTcuOTM0LS42MzRsMTQuMTQyLTE0LjE0MlpcXFwiIGZpbGw9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19fZylcXFwiIGZpbGwtb3BhY2l0eT1cXFwiLjlcXFwiLz48cGF0aCBkPVxcXCJtMTQ2LjU0MSAxMjMuMTIxLS4xNzMuMTczLjE3My0uMTczWm0wIDQuMjQzLS4xNzMtLjE3NC4xNzMuMTc0Wm0tNC4yNDMtNC4yNDMtLjE3My0uMTczLjE3My4xNzNabS0xMi4xMzEgMTIuMTMxLS4xNzMuMTczLjE3My4xNzQuMTczLS4xNzQtLjE3My0uMTczWm0tNC4yODMtNC4yODMuMTczLS4xNzMtLjE3My4xNzNabS00LjI0MyA0LjI0My4xNzQtLjE3NC0uMTc0LjE3NFptNi4zNjQgNi4zNjQtLjE3My4xNzMuMTczLS4xNzNabTMuNDYuNTY0LS4wOTctLjIyNS0uMDEyLjAwNi4xMDkuMjE5Wm0uOTM0LS42MzQtLjE3NC0uMTc0LjE3NC4xNzRabTEzLjk2OS0xOC4yMTJhMi43NTYgMi43NTYgMCAwIDEgMCAzLjg5NmwuMzQ2LjM0N2EzLjI0NSAzLjI0NSAwIDAgMCAwLTQuNTg5bC0uMzQ2LjM0NlptLTMuODk3IDBhMi43NTYgMi43NTYgMCAwIDEgMy44OTcgMGwuMzQ2LS4zNDZhMy4yNDMgMy4yNDMgMCAwIDAtNC41ODkgMGwuMzQ2LjM0NlptLTEyLjEzMSAxMi4xMzEgMTIuMTMxLTEyLjEzMS0uMzQ2LS4zNDYtMTIuMTMxIDEyLjEzMS4zNDYuMzQ2Wm0tNC42MjktNC4yODMgNC4yODMgNC4yODMuMzQ2LS4zNDYtNC4yODMtNC4yODMtLjM0Ni4zNDZabS0zLjg5NiAwYTIuNzU1IDIuNzU1IDAgMCAxIDMuODk2IDBsLjM0Ni0uMzQ2YTMuMjQzIDMuMjQzIDAgMCAwLTQuNTg5IDBsLjM0Ny4zNDZabTAgMy44OTZhMi43NTUgMi43NTUgMCAwIDEgMC0zLjg5NmwtLjM0Ny0uMzQ2YTMuMjQ1IDMuMjQ1IDAgMCAwIDAgNC41ODlsLjM0Ny0uMzQ3Wm02LjM2NCA2LjM2NC02LjM2NC02LjM2NC0uMzQ3LjM0NyA2LjM2NCA2LjM2NC4zNDctLjM0N1ptMy4xNzcuNTE5YTIuNzU1IDIuNzU1IDAgMCAxLTMuMTc3LS41MTlsLS4zNDcuMzQ3YTMuMjQ0IDMuMjQ0IDAgMCAwIDMuNzQyLjYxbC0uMjE4LS40MzhabS44NjktLjU4OWEyLjczNSAyLjczNSAwIDAgMS0uODU3LjU4M2wuMTk0LjQ1YTMuMjM3IDMuMjM3IDAgMCAwIDEuMDEtLjY4NmwtLjM0Ny0uMzQ3Wm0xNC4xNDMtMTQuMTQyLTE0LjE0MyAxNC4xNDIuMzQ3LjM0NyAxNC4xNDItMTQuMTQyLS4zNDYtLjM0N1pcXFwiIGZpbGw9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19faClcXFwiIG1hc2s9XFxcInVybCgjaWMtdmVyaWZpY2F0aW9uX3N2Z19faSlcXFwiLz48bWFzayBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19fbFxcXCIgZmlsbD1cXFwiI2ZmZlxcXCI+PHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGQ9XFxcIk0xNDYuNTQxIDEyNy4zNjRhMy4wMDEgMy4wMDEgMCAwIDAtNC4yNDMtNC4yNDNsLTEyLjEzMSAxMi4xMzEtNC4yODMtNC4yODNhMyAzIDAgMSAwLTQuMjQzIDQuMjQzbDYuMzY0IDYuMzY0YTMuMDAxIDMuMDAxIDAgMCAwIDMuNDYuNTY0Yy4zMzktLjE0Ni42NTctLjM1Ny45MzQtLjYzNGwxNC4xNDItMTQuMTQyWlxcXCIvPjwvbWFzaz48cGF0aCBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGNsaXAtcnVsZT1cXFwiZXZlbm9kZFxcXCIgZD1cXFwiTTE0Ni41NDEgMTI3LjM2NGEzLjAwMSAzLjAwMSAwIDAgMC00LjI0My00LjI0M2wtMTIuMTMxIDEyLjEzMS00LjI4My00LjI4M2EzIDMgMCAxIDAtNC4yNDMgNC4yNDNsNi4zNjQgNi4zNjRhMy4wMDEgMy4wMDEgMCAwIDAgMy40Ni41NjRjLjMzOS0uMTQ2LjY1Ny0uMzU3LjkzNC0uNjM0bDE0LjE0Mi0xNC4xNDJaXFxcIiBmaWxsPVxcXCJ1cmwoI2ljLXZlcmlmaWNhdGlvbl9zdmdfX2opXFxcIiBmaWxsLW9wYWNpdHk9XFxcIi43NVxcXCIvPjxwYXRoIGQ9XFxcIm0xNDYuNTQxIDEyMy4xMjEtLjE3My4xNzMuMTczLS4xNzNabTAgNC4yNDMtLjE3My0uMTc0LjE3My4xNzRabS00LjI0My00LjI0My0uMTczLS4xNzMuMTczLjE3M1ptLTEyLjEzMSAxMi4xMzEtLjE3My4xNzMuMTczLjE3NC4xNzMtLjE3NC0uMTczLS4xNzNabS00LjI4My00LjI4My4xNzMtLjE3My0uMTczLjE3M1ptLTQuMjQzIDQuMjQzLjE3NC0uMTc0LS4xNzQuMTc0Wm02LjM2NCA2LjM2NC0uMTczLjE3My4xNzMtLjE3M1ptMy40Ni41NjQtLjA5Ny0uMjI1LS4wMTIuMDA2LjEwOS4yMTlabS45MzQtLjYzNC0uMTc0LS4xNzQuMTc0LjE3NFptMTMuOTY5LTE4LjIxMmEyLjc1NiAyLjc1NiAwIDAgMSAwIDMuODk2bC4zNDYuMzQ3YTMuMjQ1IDMuMjQ1IDAgMCAwIDAtNC41ODlsLS4zNDYuMzQ2Wm0tMy44OTcgMGEyLjc1NiAyLjc1NiAwIDAgMSAzLjg5NyAwbC4zNDYtLjM0NmEzLjI0MyAzLjI0MyAwIDAgMC00LjU4OSAwbC4zNDYuMzQ2Wm0tMTIuMTMxIDEyLjEzMSAxMi4xMzEtMTIuMTMxLS4zNDYtLjM0Ni0xMi4xMzEgMTIuMTMxLjM0Ni4zNDZabS00LjYyOS00LjI4MyA0LjI4MyA0LjI4My4zNDYtLjM0Ni00LjI4My00LjI4My0uMzQ2LjM0NlptLTMuODk2IDBhMi43NTUgMi43NTUgMCAwIDEgMy44OTYgMGwuMzQ2LS4zNDZhMy4yNDMgMy4yNDMgMCAwIDAtNC41ODkgMGwuMzQ3LjM0NlptMCAzLjg5NmEyLjc1NSAyLjc1NSAwIDAgMSAwLTMuODk2bC0uMzQ3LS4zNDZhMy4yNDUgMy4yNDUgMCAwIDAgMCA0LjU4OWwuMzQ3LS4zNDdabTYuMzY0IDYuMzY0LTYuMzY0LTYuMzY0LS4zNDcuMzQ3IDYuMzY0IDYuMzY0LjM0Ny0uMzQ3Wm0zLjE3Ny41MTlhMi43NTUgMi43NTUgMCAwIDEtMy4xNzctLjUxOWwtLjM0Ny4zNDdhMy4yNDQgMy4yNDQgMCAwIDAgMy43NDIuNjFsLS4yMTgtLjQzOFptLjg2OS0uNTg5YTIuNzM1IDIuNzM1IDAgMCAxLS44NTcuNTgzbC4xOTQuNDVhMy4yMzcgMy4yMzcgMCAwIDAgMS4wMS0uNjg2bC0uMzQ3LS4zNDdabTE0LjE0My0xNC4xNDItMTQuMTQzIDE0LjE0Mi4zNDcuMzQ3IDE0LjE0Mi0xNC4xNDItLjM0Ni0uMzQ3WlxcXCIgZmlsbD1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19rKVxcXCIgZmlsbC1vcGFjaXR5PVxcXCIuMVxcXCIgbWFzaz1cXFwidXJsKCNpYy12ZXJpZmljYXRpb25fc3ZnX19sKVxcXCIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19fYVxcXCIgeDE9XFxcIjc2LjY4NFxcXCIgeTE9XFxcIjg2LjU2OFxcXCIgeDI9XFxcIjE0My40MTdcXFwiIHkyPVxcXCIxMTEuMjgzXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiIzdGQzBGQlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzQwODhGNFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpYy12ZXJpZmljYXRpb25fc3ZnX19iXFxcIiB4MT1cXFwiOTEuODg5XFxcIiB5MT1cXFwiNjguMzc4XFxcIiB4Mj1cXFwiMzQuMDA4XFxcIiB5Mj1cXFwiOTMuOTM3XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2NcXFwiIHgxPVxcXCI5OS42NjVcXFwiIHkxPVxcXCI2OC4zNzhcXFwiIHgyPVxcXCIxNTcuNTQ3XFxcIiB5Mj1cXFwiOTMuOTM3XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2RcXFwiIHgxPVxcXCI0NS45MTdcXFwiIHkxPVxcXCI5Ni4xODVcXFwiIHgyPVxcXCI2Ni41NjlcXFwiIHkyPVxcXCIxNTkuODIyXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2VcXFwiIHgxPVxcXCI5NS40XFxcIiB5MT1cXFwiOTNcXFwiIHgyPVxcXCI5NS40XFxcIiB5Mj1cXFwiMTM3LjU5MlxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiNBN0QyRkRcXFwiIHN0b3Atb3BhY2l0eT1cXFwiLjI1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTdDOEZDXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2ZcXFwiIHgxPVxcXCI0NS45MTdcXFwiIHkxPVxcXCI5Ni4xODVcXFwiIHgyPVxcXCI2Ni41NjlcXFwiIHkyPVxcXCIxNTkuODIyXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiLjc2NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2dcXFwiIHgxPVxcXCIxNTAuMzQzXFxcIiB5MT1cXFwiMTI0LjEyOFxcXCIgeDI9XFxcIjExNy4zMjJcXFwiIHkyPVxcXCIxMzcuMzk1XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljLXZlcmlmaWNhdGlvbl9zdmdfX2hcXFwiIHgxPVxcXCIxNTAuODcxXFxcIiB5MT1cXFwiMTIxLjIyNVxcXCIgeDI9XFxcIjEzNC4wMzVcXFwiIHkyPVxcXCIxMjUuODlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjMTc5OTdCXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMTc5OTdCXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19falxcXCIgeDE9XFxcIjE1MC4zNDNcXFwiIHkxPVxcXCIxMjQuMTI4XFxcIiB4Mj1cXFwiMTE3LjMyMlxcXCIgeTI9XFxcIjEzNy4zOTVcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBzdG9wLWNvbG9yPVxcXCIjMTc5OTdCXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxNzk5N0JcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWMtdmVyaWZpY2F0aW9uX3N2Z19fa1xcXCIgeDE9XFxcIjE1MC44NzFcXFwiIHkxPVxcXCIxMjEuMjI1XFxcIiB4Mj1cXFwiMTM0LjAzNVxcXCIgeTI9XFxcIjEyNS44OVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIHN0b3AtY29sb3I9XFxcIiMxNzk5N0JcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE3OTk3QlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxOFxcXCI+PHBhdGggZD1cXFwiTTQuMzExIDcuNDMgMy43NCA4aDEwLjkyNmExIDEgMCAxIDEgMCAySDMuNzRsLjU3MS41NyA0LjQgNC4zODZhMSAxIDAgMCAxIDAgMS40MmwtLjAwMS4wMDNhMSAxIDAgMCAxLTEuNDIgMGwtLjAwMS0uMDAxTC42MjUgOS43MTRhMSAxIDAgMCAxLS4yMDgtLjMyOEwuNDE1IDkuMzhhMSAxIDAgMCAxIDAtLjc2bC4wMDItLjAwNmExIDEgMCAwIDEgLjIwOC0uMzI4bDYuNjY0LTYuNjY0LS4yMzYtLjIzNS4yMzYuMjM1QTEuMDA1IDEuMDA1IDAgMSAxIDguNzEgMy4wNDRsLTQuNCA0LjM4N1pcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZT1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI2NiA2M1xcXCI+PHBhdGggZD1cXFwiTS44MyA1OC45MVYyOC43aDguNzI1djMwLjIxSC44M1ptMzUuMDE3LTIuOTNjLTEuOTgzIDIuNDE2LTQuODM1IDMuNzc3LTguNjE1IDMuNzc3LTYuMDc2IDAtMTAuOTcxLTMuNzc4LTEwLjk3MS05LjYwMyAwLTUuNzYzIDQuODk4LTguNjEgMTEuNzc3LTguOTg1IDUuMjctLjMxIDYuOTQzLS44NjggNi45NDMtMi42NjMgMC0xLjczNi0xLjYxMS0yLjkxMy00LjQ2My0yLjkxMy0zLjQ3IDAtNC45NiAxLjczNi01LjE0NSAzLjU5NGgtOC40OTRjLjQzNC02LjYyOCA1LjM5Mi0xMS4yMTQgMTMuNzAxLTExLjIxNCA4LjEyMiAwIDEzLjMzIDQuMzk4IDEzLjMzIDEyLjYzN3YxOC40NjNoLTcuMjU0bC0uODA5LTMuMDk0Wm0tMTAuNzg2LTYuMTk1YzAgMS43MzYgMS41NSAyLjc4OCA0LjAzIDIuNzg4IDMuMzQ4IDAgNi4wMTItMS44NTggNi4wMTItNS42MzhWNDUuODJzLTEuNjExLjc0My00Ljk2LjkzYy0zLjY1OC4xODUtNS4wODIgMS4zNjItNS4wODIgMy4wMzVabTM4LjMwNyA5LjQxNmMtNi42MzIgMC0xMC40NzctMy44NC0xMC40NzctMTAuNTMzVjM2LjgzNmgtNS4wODN2LTguMTE3aDUuMDgzdi00LjQ2MWw4LjgwMi03LjQzNFYyOC43Mmg3LjYyNnY4LjExN2gtNy42MjZWNDcuNDNjMCAyLjkxMiAxLjkyMiAzLjU5MyAzLjcyIDMuNTkzYTkuNTM5IDkuNTM5IDAgMCAwIDMuNzIxLS44MDV2Ny45OTJjMCAuMDAyLTIuMzU1Ljk5Mi01Ljc2Ni45OTJaTS4wOCAxOS42MzRjMC0yLjg1IDIuMjMtNS4xNDIgNS4wODItNS4xNDJhNS4xMyA1LjEzIDAgMCAxIDUuMTQ1IDUuMTQyYzAgMi43ODgtMi4yOTMgNS4wOC01LjE0NSA1LjA4YTUuMDYzIDUuMDYzIDAgMCAxLTUuMDgyLTUuMDhaTTc1LjgwOSA1OC45MVYyOC43aDguNzI2djMwLjIxaC04LjcyNlptMjAuMTU0LTM5LjIwMmMwLTEuNC0uMTktMi43Ni0uNTM3LTQuMDUzYTE1LjUxIDE1LjUxIDAgMCAwLTEuNTY5LTMuNzcyIDE1LjY2NSAxNS42NjUgMCAwIDAtMi40ODktMy4yNDEgMTUuNzMyIDE1LjczMiAwIDAgMC03LjAxOC00LjA1IDE1LjY1OCAxNS42NTggMCAwIDAtNC4wNTItLjUzM2gtLjAwNmExNS43NSAxNS43NSAwIDAgMC00LjA0OS41M2MtMS4zNC4zNTctMi42MDUuODg4LTMuNzc3IDEuNTY1QTE1LjY3IDE1LjY3IDAgMCAwIDY5LjIyIDguNjRhMTUuNzcgMTUuNzcgMCAwIDAtMi40OTIgMy4yNDIgMTUuNjQ4IDE1LjY0OCAwIDAgMC0xLjU3MiAzLjc3NGwyLjI0Mi42MDJhMTMuNDI3IDEzLjQyNyAwIDAgMSAzLjQ2Mi01Ljk3OCAxMy40MjYgMTMuNDI2IDAgMCAxIDUuOTg0LTMuNDUgMTMuNDI2IDEzLjQyNiAwIDAgMSAzLjQ0OC0uNDVoLjAwNmMxLjE5NSAwIDIuMzUuMTU4IDMuNDU0LjQ1M2ExMy40MTIgMTMuNDEyIDAgMCAxIDUuOTggMy40NDljLjgxOS44MiAxLjUzMSAxLjc1IDIuMTE5IDIuNzZhMTMuMyAxMy4zIDAgMCAxIDEuNzkzIDYuNjY0di4wMTJhMTMuMzggMTMuMzggMCAwIDEtLjQ1MSAzLjQ0MyAxMy4yMTcgMTMuMjE3IDAgMCAxLTEuMzM0IDMuMjE5bDIuMDEgMS4xNmExNS41MzkgMTUuNTM5IDAgMCAwIDEuNTY2LTMuNzc4IDE1LjcgMTUuNyAwIDAgMCAuNTMtNC4wNDFsLS4wMDItLjAxMlpcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTAwLjAyMyAxOS43MDhhMTkuNjU1IDE5LjY1NSAwIDAgMC0yLjY0NC05Ljg1NSAxOS44MSAxOS44MSAwIDAgMC03LjIyLTcuMjEzQTE5LjYxMiAxOS42MTIgMCAwIDAgODUuNDAzLjY3IDE5LjgxIDE5LjgxIDAgMCAwIDgwLjI5OCAwaC0uMDA2Yy0xLjc2NSAwLTMuNDczLjIzMy01LjEwMi42NjZhMTkuNTEzIDE5LjUxMyAwIDAgMC00Ljc1OSAxLjk2OSAxOS44MjQgMTkuODI0IDAgMCAwLTQuMDg2IDMuMTM0bDEuMjMxIDEuMjNhMTguMTA2IDE4LjEwNiAwIDAgMSAzLjcyNi0yLjg1NSAxNy44MDMgMTcuODAzIDAgMCAxIDQuMzQtMS43OTMgMTguMDg0IDE4LjA4NCAwIDAgMSA0LjY0OC0uNjA3aC4wMDVhMTcuOTUgMTcuOTUgMCAwIDEgMTIuNzEzIDUuMjYxIDE3LjkzMyAxNy45MzMgMCAwIDEgNS4yNzMgMTIuNzAzdi4wMTFhMTguMDMgMTguMDMgMCAwIDEtLjYwNyA0LjY0MyAxNy42NzUgMTcuNjc1IDAgMCAxLTEuNzk3IDQuMzM3IDE4LjAyMyAxOC4wMjMgMCAwIDEtMi44NTcgMy43MjNsMS4yMzEgMS4yMzFhMTkuNzQzIDE5Ljc0MyAwIDAgMCAzLjEzNi00LjA4NCAxOS42IDE5LjYgMCAwIDAgMS45Ny00Ljc1NmMuNDM0LTEuNjI1LjY2Ni0zLjMzMi42NjYtNS4wOTR2LS4wMVpcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNOTAuOTQ1IDE2Ljg1NWExMC45NDggMTAuOTQ4IDAgMCAwLTEuMTA0LTIuNjU1IDExLjE1NSAxMS4xNTUgMCAwIDAtMS43NS0yLjI4IDExLjA0OCAxMS4wNDggMCAwIDAtMi4yODItMS43NDdBMTAuOTY0IDEwLjk2NCAwIDAgMCA4MC4zIDguNjk1aC0uMDA2Yy0uOTg3IDAtMS45NC4xMy0yLjg0OS4zNzJhMTAuOTEgMTAuOTEgMCAwIDAtMi42NiAxLjEgMTAuOTk0IDEwLjk5NCAwIDAgMC00LjAzNyA0LjAyNyAxMSAxMSAwIDAgMC0xLjQ4NCA1LjUxdi4wMTJhMTAuOTI0IDEwLjkyNCAwIDAgMCAxLjQ3NiA1LjUwNWwzLjAxMy0xLjczOGE3LjUzNSA3LjUzNSAwIDAgMS0xLjAxLTMuNzd2LS4wMWE3LjU1MyA3LjU1MyAwIDAgMSA3LjU0OC03LjUzM2guMDA2YTcuNTI0IDcuNTI0IDAgMCAxIDMuNzY5IDEuMDEyIDcuNTUgNy41NSAwIDAgMSAzLjUxMyA0LjU3MmMuMTY3LjYyLjI1OCAxLjI3Ni4yNTggMS45NTFoMy40NzljLjAwMy0uOTg0LS4xMjgtMS45NC0uMzcyLTIuODVaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwiTTg3LjU4NSAxNy43NjVhNy41NDIgNy41NDIgMCAwIDAtMS45NTUtMy4zOGwtMS42NCAxLjYzOWE1LjI2NCA1LjI2NCAwIDAgMSAxLjM1NCAyLjM0MyA1LjE4NCA1LjE4NCAwIDAgMSAwIDIuNzA1IDUuMjM5IDUuMjM5IDAgMCAxLTMuNjk4IDMuNjk1IDUuMTk1IDUuMTk1IDAgMCAxLTIuNzA3IDAgNS4yOTYgNS4yOTYgMCAwIDEtMS4yNi0uNTIxbC0xLjE2IDIuMDA4YTcuNTI4IDcuNTI4IDAgMCAwIDMuNzc0IDEuMDFjLjY3NyAwIDEuMzMtLjA5MSAxLjk1NC0uMjU2YTcuNTUzIDcuNTUzIDAgMCAwIDQuNTg0LTMuNTE3IDcuNTQ0IDcuNTQ0IDAgMCAwIDEuMDEzLTMuNzcxIDcuNSA3LjUgMCAwIDAtLjI1OS0xLjk1NVpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiLz48cGF0aCBkPVxcXCJNOTEuODUzIDEzLjA0NmExMy40MzUgMTMuNDM1IDAgMCAwLTIuMTItMi43NjUgMTMuMzQzIDEzLjM0MyAwIDAgMC0yLjc2Ni0yLjExOCAxMy4yODcgMTMuMjg3IDAgMCAwLTYuNjc1LTEuNzljLTEuMTk3IDAtMi4zNTIuMTU5LTMuNDU2LjQ1NC0xLjE0MS4zMDMtMi4yMi43NTctMy4yMTggMS4zMzZhMTMuNDM2IDEzLjQzNiAwIDAgMC0yLjc2NyAyLjExOCAxMy4zMzQgMTMuMzM0IDAgMCAwLTIuMTIgMi43NjUgMTMuMjcyIDEzLjI3MiAwIDAgMC0xLjc5IDYuNjdoMi4zMmMwLS45ODYuMTMxLTEuOTQyLjM3NS0yLjg1MmExMS4wODggMTEuMDg4IDAgMCAxIDIuODU1LTQuOTQgMTEuMDAyIDExLjAwMiAwIDAgMSAyLjI4NC0xLjc1IDExLjAzIDExLjAzIDAgMCAxIDIuNjYtMS4xMDQgMTEuMDIgMTEuMDIgMCAwIDEgMi44NTQtLjM3NGMuOTg4IDAgMS45NDQuMTMgMi44NTUuMzc0YTExLjA5OSAxMS4wOTkgMCAwIDEgNC45NDMgMi44NTMgMTAuOTkgMTAuOTkgMCAwIDEgMS43NTEgMi4yODNjLjQ3Ny44MjYuODUyIDEuNzE2IDEuMTA0IDIuNjU4bDIuMjQyLS42MDJhMTMuMTk0IDEzLjE5NCAwIDAgMC0xLjMzLTMuMjE2WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIvPjxwYXRoIGQ9XFxcIk05Ny42NzQgMTUuMDYzYTE3Ljc5MSAxNy43OTEgMCAwIDAtMS44LTQuMzM2IDE4LjA0MyAxOC4wNDMgMCAwIDAtNi41ODYtNi41ODMgMTcuOTMgMTcuOTMgMCAwIDAtOC45OTYtMi40MDhjLTEuNjEyIDAtMy4xNzIuMjEzLTQuNjU3LjYxYTE3LjgxNyAxNy44MTcgMCAwIDAtNC4zMzkgMS43OTggMTguMDMyIDE4LjAzMiAwIDAgMC02LjU4NiA2LjU4M2wyLjAxMiAxLjE2M2ExNS42NzYgMTUuNjc2IDAgMCAxIDIuNDg5LTMuMjQ1Yy45NjUtLjk2NCAyLjA1Ny0xLjggMy4yNDYtMi40ODdhMTUuNzA2IDE1LjcwNiAwIDAgMSAzLjc3Ny0xLjU2OSAxNS42OCAxNS42OCAwIDAgMSA4LjExIDBjMS4zNC4zNTggMi42MDYuODkxIDMuNzc4IDEuNTY5YTE1LjY4NSAxNS42ODUgMCAwIDEgMy4yNDYgMi40ODcgMTUuNjc2IDE1LjY3NiAwIDAgMSAyLjQ4OSAzLjI0NSAxNS42ODQgMTUuNjg0IDAgMCAxIDEuNTY5IDMuNzc0IDE1LjY1NCAxNS42NTQgMCAwIDEgMCA4LjEwNmwyLjI0NS42MDFjLjM5Ny0xLjQ4My42MS0zLjA0My42MS00LjY1NGExNy44NzUgMTcuODc1IDAgMCAwLS42MDgtNC42NTRaXFxcIiBmaWxsPVxcXCIjMTU1MzY2XFxcIi8+PHBhdGggZD1cXFwiTTgwLjI5MyAyNC45NDRjMi44ODggMCA1LjIzLTIuMzQgNS4yMy01LjIyN2E1LjIyOSA1LjIyOSAwIDAgMC01LjIzLTUuMjI3IDUuMjI4IDUuMjI4IDAgMCAwLTUuMjMgNS4yMjcgNS4yMjggNS4yMjggMCAwIDAgNS4yMyA1LjIyN1ptMjAuNjE1IDE1LjQzNlYyOS41NDNoMi4zMDRWNDAuMzhoLTIuMzA0Wm02LjYxOC0zLjc4N3YzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41MzkgMi41MzkgMCAwIDEgMS43OTMtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA2IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5NnYtNC4yMzVjMC0uODAyLS4zNzItMS40ODMtMS4yNTQtMS40ODMtMS4wMzMuMDAzLTEuMzkxLjc3NC0xLjM5MSAxLjkzNFptOS42NjYgMy44MTdjLTEuNjU1IDAtMi42MTQtLjk1OC0yLjYxNC0yLjYyOHYtMi45NTNoLTEuMjY4di0yLjAyNWgxLjI2OHYtMS4xMTFsMi4xOTYtMS44NTV2Mi45N2gxLjkwMnYyLjAyNGgtMS45MDJ2Mi42NDNjMCAuNzI3LjQ4Ljg5Ny45MjguODk3LjUxMSAwIC45MjgtLjIwMi45MjgtLjIwMnYxLjk5NHMtLjU4Ny4yNDctMS40MzguMjQ3Wm0xMC4xOTMtMy4yM2gtNS4zNTJjLjEyNS43NzUuNzU3IDEuMzYyIDEuNyAxLjM2Mi42MzUgMCAxLjAwNC0uMjY0IDEuMjM3LS42NWgyLjM2N2MtLjUxMSAxLjY0LTEuNjg2IDIuNjYtMy41NzMgMi42Ni0yLjE5NyAwLTMuOTU5LTEuNTMtMy45NTktMy45MSAwLTIuMjg5IDEuNjA5LTQuMDE5IDMuODM3LTQuMDE5IDIuNDg5IDAgMy43NTcgMS45NjMgMy43NTcgMy45ODggMCAuMTk4LS4wMTQuNTctLjAxNC41N1ptLTMuNzE1LTIuNjI4Yy0uODM0IDAtMS4zOTMuNTEtMS41MzIgMS4xNmgyLjk0Yy0uMDQ2LS42NjQtLjYxOS0xLjE2LTEuNDA4LTEuMTZabTEwLjIzOS0xLjMxNXYyLjE2NHMtLjU3My0uNTg3LTEuNDM5LS41ODdjLS42NjQgMC0xLjQwNy4zNTQtMS40MDcgMS40Njl2NC4wOTVoLTIuMTk3di03LjU3NWgyLjE2NXYuNjM1Yy0uMDE0IDAgLjQzNS0uNzQzIDEuNTE2LS43NDMuOTI4IDAgMS4zNjIuNTQyIDEuMzYyLjU0MlptMy40MDMgMy4zNTZ2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NXYuNTI1YTIuNTQzIDIuNTQzIDAgMCAxIDEuNzk0LS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTd2LTQuMjM1YzAtLjgwMi0uMzcxLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5Ljc3NC0xLjM5IDEuOTM0Wm0xMS4xNjYgMy4wMTVjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMy0uNzI2LS44NjUgMC0xLjIzNy40MzQtMS4yODUuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA2aC0xLjgxMWwtLjE5OS0uNzc1Wm0tMi42OTMtMS41NDVjMCAuNDM0LjM4Ni42OTQgMS4wMDUuNjk0LjgzNCAwIDEuNTAxLS40NjIgMS41MDEtMS40MDZ2LS4yNzhzLS40MDMuMTg0LTEuMjM3LjIzMmMtLjkxNC4wNDYtMS4yNjkuMzQtMS4yNjkuNzU4Wm05LjU1OCAyLjM0N2MtMS42NTUgMC0yLjYxNC0uOTU4LTIuNjE0LTIuNjI4di0yLjk1M2gtMS4yNjl2LTIuMDI1aDEuMjY5di0xLjExMWwyLjE5Ni0xLjg1NXYyLjk3aDEuOTAydjIuMDI0aC0xLjkwMnYyLjY0M2MwIC43MjcuNDguODk3LjkyOC44OTcuNTExIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTkuMjQ3LTEuNDM4LjI0N1ptMi45NTEtOS43NTNjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4Mi43MTMgMCAxLjI4Ni41NzMgMS4yODYgMS4yODIgMCAuNjk1LS41NzMgMS4yNjgtMS4yODYgMS4yNjhhMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjgtMS4yNjhabS4xNyA5LjcyMnYtNy41NzVoMi4xOTd2Ny41NzVoLTIuMTk3Wm0zLjc4OS0zLjc4NmMwLTIuMjcyIDEuNzQ4LTMuOTc0IDQuMDM4LTMuOTc0czQuMDM1IDEuNzAyIDQuMDM1IDMuOTc0YzAgMi4yNzEtMS43NDggMy45NTYtNC4wMzUgMy45NTYtMi4yOSAwLTQuMDM4LTEuNjg1LTQuMDM4LTMuOTU2Wm0yLjI0NSAwYzAgMS4xMTEuNzU3IDEuOTE3IDEuNzkzIDEuOTE3czEuNzk0LS44MDMgMS43OTQtMS45MTdjMC0xLjExMi0uNzU4LTEuOTE4LTEuNzk0LTEuOTE4cy0xLjc5My44MDMtMS43OTMgMS45MThabTkuNTQgMHYzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41NCAyLjU0IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNiAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU0LTEuNDgzLTEuMDM2LjAwMy0xLjM5MS43NzQtMS4zOTEgMS45MzRabTExLjE2NyAzLjAxNWMtLjQ5Ny42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNiAwLTIuNzM5LS45NDUtMi43MzktMi4zOTcgMC0xLjQzOCAxLjIyMS0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzNy40MzQtMS4yODYuODk2aC0yLjExOWMuMTA3LTEuNjUzIDEuMzQ1LTIuNzk5IDMuNDE5LTIuNzk5IDIuMDI2IDAgMy4zMjYgMS4wOTggMy4zMjYgMy4xNTR2NC42MDZoLTEuODFsLS4xOTktLjc3NVptLTIuNjkzLTEuNTQ1YzAgLjQzNC4zODYuNjk0IDEuMDA0LjY5NC44MzUgMCAxLjUwMi0uNDYyIDEuNTAyLTEuNDA2di0uMjc4cy0uNDAzLjE4NC0xLjIzOC4yMzJjLS45MTEuMDQ2LTEuMjY4LjM0LTEuMjY4Ljc1OFptNi41MjQgMi4zMTdWMjkuNTQzaDIuMTk2VjQwLjM4aC0yLjE5NlptMTQuMDg5LTEwLjgzNyA0LjI0IDEwLjgzN2gtMi4zODFsLS44NjYtMi4xMzNoLTQuMTkxbC0uODUxIDIuMTMzaC0yLjM4MWw0LjIzOS0xMC44MzdoMi4xOTFabS0xLjA5OCAzLjEyMy0xLjM0NSAzLjUzOWgyLjY5bC0xLjM0NS0zLjU0Wm02LjM4NS0yLjAwOWMwLS43MTIuNTU2LTEuMjgyIDEuMjY5LTEuMjgyLjcxMiAwIDEuMjg1LjU3MyAxLjI4NSAxLjI4MiAwIC42OTUtLjU3MyAxLjI2OC0xLjI4NSAxLjI2OGExLjI2NCAxLjI2NCAwIDAgMS0xLjI2OS0xLjI2OFptLjE3IDkuNzIydi03LjU3NWgyLjE5N3Y3LjU3NWgtMi4xOTdabTMuNzg5LTMuNzg2YzAtMi4zOTYgMS43MTYtMy45NzMgMy44MTktMy45NzMuODY2IDAgMS41OTIuMzIzIDEuOTgxLjY2NHYtMy43NDFoMi4xOTZWNDAuMzhoLTIuMTY1di0uNTQyYy0uNC4zODYtMS4xNi43MTItMi4wMDkuNzEyLTIuMTA2IDAtMy44MjItMS41MTUtMy44MjItMy45NTZabTUuODMxIDBjMC0xLjE3NC0uNzcyLTEuOTgtMS43OTMtMS45OC0xLjAyMiAwLTEuNzk0LjgwMy0xLjc5NCAxLjk4IDAgMS4xNzUuNzcyIDEuOTggMS43OTQgMS45OCAxLjAyMSAwIDEuNzkzLS44MDUgMS43OTMtMS45OFpNMTAwLjE5NiA0OC4wOWg4LjUyMnYyLjExOGgtMy4xMXY4LjcxOWgtMi4zMDR2LTguNzE5aC0zLjExMVY0OC4wOWguMDAzWm0xMy44ODggMy42OTJ2Mi4xNjRzLS41NzMtLjU4Ny0xLjQzOS0uNTg3Yy0uNjY0IDAtMS40MDcuMzU0LTEuNDA3IDEuNDY5djQuMDk1aC0yLjE5NnYtNy41NzVoMi4xNjV2LjYzNWMtLjAxNCAwIC40MzQtLjc0MyAxLjUxNS0uNzQzLjkzMS4wMDMgMS4zNjIuNTQyIDEuMzYyLjU0MlptNS44OTEgNi4zNzFjLS40OTYuNjA0LTEuMjA2Ljk0NS0yLjE1MS45NDUtMS41MTUgMC0yLjczOC0uOTQ1LTIuNzM4LTIuMzk3IDAtMS40MzggMS4yMi0yLjE1IDIuOTM3LTIuMjQgMS4zMTQtLjA3NyAxLjczNC0uMjE2IDEuNzM0LS42NjQgMC0uNDM0LS40MDMtLjcyNi0xLjExMi0uNzI2LS44NjYgMC0xLjIzOC40MzQtMS4yODYuODk2aC0yLjEyYy4xMDgtMS42NTMgMS4zNDUtMi43OTkgMy40Mi0yLjc5OSAyLjAyNiAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxMWwtLjE5OS0uNzc0Wm0tMi42OS0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNS42OTUuODM0IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTE0LjA0Ni0xLjI2OS4zNC0xLjI2OS43NThabTguNzIxLTEuNDd2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NXYuNTI1YTIuNTQgMi41NCAwIDAgMSAxLjc5NC0uNzEyYzEuODU2IDAgMy4wNzkgMS4yMDUgMy4wNzkgMy4zNTV2NC40MDVoLTIuMTk3di00LjIzNWMwLS44MDItLjM3MS0xLjQ4My0xLjI1NC0xLjQ4My0xLjAzMy4wMDMtMS4zOS43NzQtMS4zOSAxLjkzNFptMTAuNzk1IDEuNjA3YzAtLjIzMi0uMTM5LS40MTYtLjc0NC0uNTQxbC0xLjE0My0uMjMzYy0xLjcxNy0uMzQtMi40NDQtMS4xNi0yLjQ0NC0yLjI4OCAwLTEuMzMgMS4wMDUtMi41MTkgMy4wOTQtMi41MTkgMi4xMDIgMCAzLjA0NyAxLjE3NCAzLjIwMSAyLjQ5aC0yLjA4OWMtLjEyNS0uNDE3LS40OC0uNjY0LTEuMTI5LS42NjQtLjYxOSAwLS45Ni4yMTYtLjk2LjUyNSAwIC4yMzMuMTg1LjM3Mi43NTguNDhsMS4xNDQuMjMyYzEuNjIzLjMyMyAyLjQyOSAxLjA4MyAyLjQyOSAyLjM4IDAgMS40NjktMS4wNjcgMi40OS0zLjE4NyAyLjQ5LTIuMTY1IDAtMy4zMjYtMS4wMjEtMy41NDItMi41OThoMi4yMTRjLjEyNS41MjQuNTExLjgwMiAxLjMyOC44MDIuNzQ2IDAgMS4wNy0uMjE1IDEuMDctLjU1NlptMTEuNTUyLTEuNjA4YzAgMi4zOTctMS43MTcgMy45NTctMy44MTkgMy45NTctLjg2NiAwLTEuNTkyLS4zMS0xLjk4MS0uNjV2My40NzdoLTIuMTk3VjUxLjM0OGgyLjE2NnYuNTQyYy40MDMtLjM4NiAxLjE2LS43MjYgMi4wMTItLjcyNiAyLjEwMiAwIDMuODE5IDEuNTE3IDMuODE5IDMuOTczWm0tNS44MzEgMGMwIDEuMTc1Ljc3NCAxLjk4IDEuNzkzIDEuOTggMS4wMjIgMCAxLjc5NC0uODAzIDEuNzk0LTEuOTggMC0xLjE3NC0uNzcyLTEuOTgtMS43OTQtMS45OC0xLjAxOS4wMDQtMS43OTMuODA2LTEuNzkzIDEuOThabTExLjg3OSAzLjAxNmMtLjQ5Ny42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNiAwLTIuNzM5LS45NDUtMi43MzktMi4zOTcgMC0xLjQzOCAxLjIyLTIuMTUgMi45MzctMi4yNCAxLjMxNC0uMDc3IDEuNzM0LS4yMTYgMS43MzQtLjY2NCAwLS40MzQtLjQwMy0uNzI2LTEuMTEyLS43MjYtLjg2NiAwLTEuMjM3LjQzNC0xLjI4Ni44OTZoLTIuMTJjLjEwOC0xLjY1MyAxLjM0Ni0yLjc5OSAzLjQyLTIuNzk5IDIuMDI2IDAgMy4zMjYgMS4wOTggMy4zMjYgMy4xNTR2NC42MDVoLTEuODExbC0uMTk4LS43NzRabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNC42OTUuODM1IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTExLjA0Ni0xLjI2OC4zNC0xLjI2OC43NThabTExLjU2Ni00LjgyNnYyLjE2NHMtLjU3My0uNTg3LTEuNDM5LS41ODdjLS42NjQgMC0xLjQwNy4zNTQtMS40MDcgMS40Njl2NC4wOTVoLTIuMTk3di03LjU3NWgyLjE2NnYuNjM1Yy0uMDE1IDAgLjQzNC0uNzQzIDEuNTE1LS43NDMuOTI4LjAwMyAxLjM2Mi41NDIgMS4zNjIuNTQyWm04LjQyOCAzLjk0NGgtNS4zNTJjLjEyNS43NzQuNzU4IDEuMzYgMS43MDMgMS4zNi42MzYgMCAxLjAwNS0uMjYzIDEuMjM3LS42NDloMi4zNjdjLS41MTEgMS42NC0xLjY4NiAyLjY2LTMuNTczIDIuNjYtMi4xOTYgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYxLTQuMDE5IDMuODM3LTQuMDE5IDIuNDg5IDAgMy43NTcgMS45NjMgMy43NTcgMy45ODggMCAuMi0uMDE3LjU3LS4wMTcuNTdabS0zLjcxMS0yLjYyN2MtLjgzNSAwLTEuMzk0LjUxLTEuNTMzIDEuMTZoMi45NGMtLjA0NS0uNjY2LS42MTktMS4xNi0xLjQwNy0xLjE2Wm03LjM5MiAyLjAzOXYzLjc4N2gtMi4xOTZ2LTcuNTc2aDIuMTY1di41MjVhMi41MzggMi41MzggMCAwIDEgMS43OTMtLjcxMmMxLjg1NiAwIDMuMDc5IDEuMjA1IDMuMDc5IDMuMzU1djQuNDA1aC0yLjE5NnYtNC4yMzVjMC0uODAyLS4zNzItMS40ODMtMS4yNTQtMS40ODMtMS4wMzYuMDAzLTEuMzkxLjc3NC0xLjM5MSAxLjkzNFptMTEuNTY3LjgzN2gyLjQxMmMtLjM1NyAxLjg0LTEuNzQ4IDMuMTIzLTMuNzkxIDMuMTIzLTIuMjkgMC0zLjk5LTEuNjg1LTMuOTktMy45NTcgMC0yLjI3MSAxLjcwMy0zLjk3MyAzLjk5LTMuOTczIDEuOTk1IDAgMy4zODggMS4yMzYgMy42NjYgMy4wMjloLTIuNDE1Yy0uMTctLjU3My0uNjY0LS45NTktMS4zMjgtLjk1OS0uOTI4IDAtMS42NzEuNzg5LTEuNjcxIDEuOSAwIDEuMTEyLjc0MyAxLjkgMS43MDMgMS45LjcxMi4wMDQgMS4yNC0uNDE2IDEuNDI0LTEuMDYzWm01LjEwMiA2LjAyN2MtLjk5IDAtMS40ODQtLjI2NC0xLjQ4NC0uMjY0di0yLjAxcy40NDguMjMyLjkyOC4yMzJjLjQ5NiAwIDEuMTQzLS4xODQgMS4yOTktMS4wMzVsLTIuOTU0LTcuNTc1aDIuNDQ0bDEuNzE3IDQuNjk5IDEuNzQ4LTQuN2gyLjM0OWwtMy4wNzkgNy43Yy0uODAzIDIuMDI2LTEuNDUzIDIuOTUzLTIuOTY4IDIuOTUzWm0xMS41OTgtMy4wNzVWNDguMDloMi4zMDV2MTAuODM3aC0yLjMwNVptNi42MTgtMy43ODl2My43ODdoLTIuMTk3di03LjU3NmgyLjE2NnYuNTI1YTIuNTM4IDIuNTM4IDAgMCAxIDEuNzkzLS43MTJjMS44NTYgMCAzLjA3OSAxLjIwNSAzLjA3OSAzLjM1NXY0LjQwNWgtMi4xOTZ2LTQuMjM1YzAtLjgwMi0uMzcyLTEuNDgzLTEuMjU1LTEuNDgzLTEuMDMzLjAwMy0xLjM5Ljc3NC0xLjM5IDEuOTM0Wm02LjU0MS01LjkzNmMwLS43MTIuNTU2LTEuMjgyIDEuMjY4LTEuMjgyczEuMjg2LjU3MyAxLjI4NiAxLjI4MmExLjI4IDEuMjggMCAwIDEtMS4yODYgMS4yNjggMS4yNjQgMS4yNjQgMCAwIDEtMS4yNjgtMS4yNjhabS4xNyA5LjcyNXYtNy41NzVoMi4xOTZ2Ny41NzVoLTIuMTk2Wm03LjI1NC4wMjljLTEuNjU1IDAtMi42MTQtLjk1OS0yLjYxNC0yLjYzdi0yLjk1MmgtMS4yNjhWNTEuMzVoMS4yNjh2LTEuMTExbDIuMTk2LTEuODU1djIuOTdoMS45MDJ2Mi4wMjRoLTEuOTAydjIuNjQzYzAgLjcyNi40OC44OTcuOTI4Ljg5Ny41MTEgMCAuOTI4LS4yMDIuOTI4LS4yMDJ2MS45OTRzLS41ODcuMjQ3LTEuNDM4LjI0N1ptMi45NTQtOS43NTRjMC0uNzEyLjU1Ni0xLjI4MiAxLjI2OC0xLjI4MnMxLjI4Ni41NzMgMS4yODYgMS4yODJhMS4yOCAxLjI4IDAgMCAxLTEuMjg2IDEuMjY4IDEuMjY0IDEuMjY0IDAgMCAxLTEuMjY4LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk2djcuNTc1aC0yLjE5NlptOC43NTQtLjc3NGMtLjQ5Ni42MDQtMS4yMDYuOTQ1LTIuMTUxLjk0NS0xLjUxNSAwLTIuNzM4LS45NDUtMi43MzgtMi4zOTcgMC0xLjQzOCAxLjIyLTIuMTUgMi45MzctMi4yNCAxLjMxNC0uMDc3IDEuNzM0LS4yMTYgMS43MzQtLjY2NCAwLS40MzQtLjQwMy0uNzI2LTEuMTEzLS43MjYtLjg2NSAwLTEuMjM3LjQzNC0xLjI4NS44OTZoLTIuMTJjLjEwOC0xLjY1MyAxLjM0NS0yLjc5OSAzLjQxOS0yLjc5OSAyLjAyNyAwIDMuMzI2IDEuMDk4IDMuMzI2IDMuMTU0djQuNjA1aC0xLjgxbC0uMTk5LS43NzRabS0yLjY5My0xLjU0NWMwIC40MzQuMzg2LjY5NSAxLjAwNS42OTUuODM0IDAgMS41MDEtLjQ2MyAxLjUwMS0xLjQwN3YtLjI3OHMtLjQwMy4xODQtMS4yMzcuMjMyYy0uOTE0LjA0Ni0xLjI2OS4zNC0xLjI2OS43NThabTkuNTU4IDIuMzQ4Yy0xLjY1NSAwLTIuNjE0LS45NTktMi42MTQtMi42M3YtMi45NTJoLTEuMjY4VjUxLjM1aDEuMjY4di0xLjExMWwyLjE5Ny0xLjg1NXYyLjk3aDEuOTAxdjIuMDI0aC0xLjkwMXYyLjY0M2MwIC43MjYuNDc5Ljg5Ny45MjguODk3LjUxIDAgLjkyOC0uMjAyLjkyOC0uMjAydjEuOTk0cy0uNTg4LjI0Ny0xLjQzOS4yNDdabTIuOTUxLTkuNzU0YzAtLjcxMi41NTYtMS4yODIgMS4yNjktMS4yODIuNzEyIDAgMS4yODUuNTczIDEuMjg1IDEuMjgyIDAgLjY5NS0uNTczIDEuMjY4LTEuMjg1IDEuMjY4YTEuMjY0IDEuMjY0IDAgMCAxLTEuMjY5LTEuMjY4Wm0uMTcgOS43MjV2LTcuNTc1aDIuMTk3djcuNTc1aC0yLjE5N1ptMTAuOTgzLTcuNTc1LTIuNjkxIDcuNTc1aC0yLjI1OGwtMi42OTEtNy41NzVoMi4zMzZsMS40ODQgNC42ODUgMS40ODQtNC42ODVoMi4zMzZabTcuOTggNC4zNzRoLTUuMzUyYy4xMjUuNzc0Ljc1NyAxLjM2IDEuNzAyIDEuMzYuNjM2IDAgMS4wMDUtLjI2MyAxLjIzOC0uNjQ5aDIuMzY2Yy0uNTEgMS42NC0xLjY4NSAyLjY2LTMuNTcyIDIuNjYtMi4xOTcgMC0zLjk1OS0xLjUzLTMuOTU5LTMuOTEgMC0yLjI4OSAxLjYwOS00LjAxOSAzLjgzNy00LjAxOSAyLjQ4OCAwIDMuNzYgMS45NjMgMy43NiAzLjk4OC0uMDA2LjItLjAyLjU3LS4wMi41N1ptLTMuNzEyLTIuNjI3Yy0uODM0IDAtMS4zOTMuNTEtMS41MzIgMS4xNmgyLjk0Yy0uMDQ5LS42NjYtLjYxOS0xLjE2LTEuNDA4LTEuMTZaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxMjIgMzZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiPjxwYXRoIGQ9XFxcIk00NC4wMTkgMjdWMTYuOTc5aDMuMjQ3YzEuMjMgMCAyLjAzMi4wNSAyLjQwNi4xNS41NzQuMTUgMS4wNTUuNDc4IDEuNDQyLjk4NC4zODguNTAyLjU4MSAxLjE1MS41ODEgMS45NDggMCAuNjE2LS4xMTEgMS4xMzMtLjMzNSAxLjU1Mi0uMjIzLjQyLS41MDguNzUtLjg1NC45OTItLjM0Mi4yMzYtLjY5LjM5NC0xLjA0Ni40NzEtLjQ4My4wOTYtMS4xODMuMTQ0LTIuMDk5LjE0NGgtMS4zMTlWMjdoLTIuMDIzWm0yLjAyMy04LjMyNnYyLjg0NGgxLjEwN2MuNzk4IDAgMS4zMzEtLjA1MyAxLjYtLjE1OGExLjMzMyAxLjMzMyAwIDAgMCAuODYxLTEuMjcxYzAtLjM2NS0uMTA3LS42NjUtLjMyLS45MDJhMS4zOTkgMS4zOTkgMCAwIDAtLjgxNC0uNDQ1Yy0uMjQyLS4wNDUtLjcyNy0uMDY4LTEuNDU2LS4wNjhoLS45NzhabTcuMDItMS42OTVoMi4wMjR2NS40MjdjMCAuODYyLjAyNSAxLjQyLjA3NSAxLjY3NS4wODcuNDEuMjkyLjc0LjYxNi45OTEuMzI4LjI0Ni43NzQuMzcgMS4zNC4zNy41NzQgMCAxLjAwNy0uMTE3IDEuMjk4LS4zNS4yOTItLjIzNi40NjctLjUyNi41MjctLjg2Ny4wNTktLjM0Mi4wODktLjkxLjA4OS0xLjcwM1YxNi45OGgyLjAyM3Y1LjI2M2MwIDEuMjAzLS4wNTUgMi4wNTMtLjE2NCAyLjU1LS4xMS40OTctLjMxMi45MTYtLjYwOCAxLjI1OC0uMjkyLjM0Mi0uNjg0LjYxNS0xLjE3Ni44Mi0uNDkyLjItMS4xMzUuMy0xLjkyOC4zLS45NTcgMC0xLjY4NC0uMTA5LTIuMTgtLjMyNy0uNDkzLS4yMjQtLjg4My0uNTEtMS4xNy0uODYyYTIuNzg4IDIuNzg4IDAgMCAxLS41NjctMS4xMTRjLS4xMzItLjU3NC0uMTk4LTEuNDIyLS4xOTgtMi41NDN2LTUuMzQ2Wm05Ljg1OCAwaDQuMDA2Yy43OTMgMCAxLjM4My4wMzQgMS43Ny4xMDIuMzkzLjA2NC43NDEuMiAxLjA0Ny40MS4zMS4yMS41NjcuNDkuNzcyLjg0MS4yMDUuMzQ2LjMwOC43MzYuMzA4IDEuMTY5IDAgLjQ3LS4xMjguOS0uMzgzIDEuMjkyYTIuMzMgMi4zMyAwIDAgMS0xLjAyNS44ODJjLjYxLjE3NyAxLjA4LjQ4IDEuNDA4LjkwOS4zMjguNDI4LjQ5Mi45MzIuNDkyIDEuNTEgMCAuNDU2LS4xMDcuOS0uMzIxIDEuMzM0LS4yMS40MjgtLjUuNzcyLS44NjggMS4wMzItLjM2NS4yNTUtLjgxNi40MTItMS4zNTQuNDcyLS4zMzcuMDM2LTEuMTUuMDU5LTIuNDQuMDY4SDYyLjkyVjE2Ljk3OVptMi4wMjQgMS42Njh2Mi4zMTdoMS4zMjZjLjc4OCAwIDEuMjc4LS4wMTEgMS40Ny0uMDM0LjM0Ni0uMDQxLjYxNy0uMTYuODEzLS4zNTYuMi0uMi4zMDEtLjQ2Mi4zMDEtLjc4NiAwLS4zMS0uMDg3LS41Ni0uMjYtLjc1Mi0uMTY4LS4xOTYtLjQyMS0uMzE0LS43NTgtLjM1NS0uMjAxLS4wMjMtLjc3OC0uMDM1LTEuNzMtLjAzNWgtMS4xNjJabTAgMy45ODV2Mi42OGgxLjg3M2MuNzMgMCAxLjE5Mi0uMDIxIDEuMzg4LS4wNjIuMy0uMDU1LjU0NC0uMTg3LjczMS0uMzk2LjE5MS0uMjE1LjI4Ny0uNS4yODctLjg1NSAwLS4zLS4wNzMtLjU1Ni0uMjE5LS43NjZhMS4yMzcgMS4yMzcgMCAwIDAtLjYzNS0uNDU4Yy0uMjc0LS4wOTUtLjg3LS4xNDMtMS43OTEtLjE0M2gtMS42MzRaTTcyLjgwNSAyN3YtOS45NGgyLjAyNHY4LjI1Mmg1LjAzMVYyN2gtNy4wNTVabTguMTYzIDBWMTYuOTc5aDIuMDIzVjI3aC0yLjAyM1ptMy4xNjUtMy4yNiAxLjk2OS0uMTkyYy4xMTguNjYuMzU4IDEuMTQ2LjcxOCAxLjQ1Ni4zNjQuMzEuODU0LjQ2NSAxLjQ3LjQ2NS42NTEgMCAxLjE0MS0uMTM3IDEuNDctLjQxLjMzMi0uMjc4LjQ5OC0uNjAyLjQ5OC0uOTcxYS44OS44OSAwIDAgMC0uMjEyLS42MDJjLS4xMzYtLjE2OC0uMzc4LS4zMTQtLjcyNC0uNDM3LS4yMzctLjA4Mi0uNzc3LS4yMjgtMS42Mi0uNDM4LTEuMDg1LS4yNjktMS44NDYtLjU5OS0yLjI4NC0uOTktLjYxNS0uNTUyLS45MjItMS4yMjQtLjkyMi0yLjAxNyAwLS41MS4xNDMtLjk4Ny40My0xLjQzLjI5Mi0uNDQ2LjcwOS0uNzg1IDEuMjUxLTEuMDE4LjU0Ny0uMjMyIDEuMjA2LS4zNDggMS45NzYtLjM0OCAxLjI1NyAwIDIuMjAzLjI3NSAyLjgzNy44MjcuNjM4LjU1MS45NzMgMS4yODcgMS4wMDUgMi4yMDhsLTIuMDI0LjA4OWMtLjA4Ny0uNTE1LS4yNzMtLjg4NC0uNTYtMS4xMDgtLjI4My0uMjI4LS43MS0uMzQyLTEuMjc5LS4zNDItLjU4OCAwLTEuMDQ4LjEyMS0xLjM4LjM2M2EuNzMuNzMgMCAwIDAtLjMyMi42MjJjMCAuMjM3LjEuNDQuMy42MDguMjU2LjIxNC44NzYuNDM4IDEuODYuNjcuOTg1LjIzMiAxLjcxMi40NzQgMi4xOC43MjUuNDc1LjI0Ni44NDQuNTg1IDEuMTA4IDEuMDE4LjI3LjQyOS40MDQuOTYuNDA0IDEuNTkzIDAgLjU3NC0uMTYgMS4xMTItLjQ3OSAxLjYxMy0uMzE5LjUwMi0uNzcuODc1LTEuMzUzIDEuMTIxLS41ODQuMjQyLTEuMzEuMzYzLTIuMTgxLjM2My0xLjI2NyAwLTIuMjQtLjI5Mi0yLjkxOS0uODc1LS42NzktLjU4OC0xLjA4NS0xLjQ0My0xLjIxNy0yLjU2NFpNOTMuNzExIDI3VjE2Ljk3OWgyLjAyM3YzLjk0NEg5OS43di0zLjk0NGgyLjAyM1YyN2gtMi4wMjN2LTQuMzgyaC0zLjk2NVYyN2gtMi4wMjNabTkuODMgMFYxNi45NzloNy40MzF2MS42OTVoLTUuNDA4djIuMjIxaDUuMDMydjEuNjg5aC01LjAzMnYyLjcyN2g1LjU5OVYyN2gtNy42MjJabTkuMDY1IDBWMTYuOTc5aDQuMjU4YzEuMDcxIDAgMS44NDguMDkgMi4zMzIuMjczYTIuMjggMi4yOCAwIDAgMSAxLjE2OC45NTdjLjI5Mi40Ni40MzguOTg3LjQzOCAxLjU4IDAgLjc1MS0uMjIxIDEuMzczLS42NjMgMS44NjUtLjQ0Mi40ODgtMS4xMDMuNzk2LTEuOTgzLjkyMy40MzguMjU1Ljc5OC41MzYgMS4wODEuODQxLjI4Ny4zMDUuNjcyLjg0OCAxLjE1NSAxLjYyN0wxMjEuNjE1IDI3aC0yLjQxOWwtMS40NjMtMi4xOGMtLjUyLS43OC0uODc1LTEuMjctMS4wNjctMS40N2ExLjUwMyAxLjUwMyAwIDAgMC0uNjA4LS40MTdjLS4yMTQtLjA3OC0uNTU0LS4xMTctMS4wMTktLjExN2gtLjQxVjI3aC0yLjAyM1ptMi4wMjMtNS43ODNoMS40OTdjLjk3MSAwIDEuNTc3LS4wNDEgMS44MTktLjEyMy4yNDEtLjA4Mi40My0uMjI0LjU2Ny0uNDI0LjEzNy0uMi4yMDUtLjQ1MS4yMDUtLjc1MiAwLS4zMzctLjA5MS0uNjA4LS4yNzMtLjgxMy0uMTc4LS4yMS0uNDMxLS4zNDItLjc1OS0uMzk3LS4xNjQtLjAyMy0uNjU2LS4wMzQtMS40NzctLjAzNGgtMS41Nzl2Mi41NDNaXFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZmlsbD1cXFwidXJsKCNsb2dvX3N2Z19fYSlcXFwiIGQ9XFxcIk0wIDBoNDF2MzZIMHpcXFwiLz48ZGVmcz48cGF0dGVybiBpZD1cXFwibG9nb19zdmdfX2FcXFwiIHBhdHRlcm5Db250ZW50VW5pdHM9XFxcIm9iamVjdEJvdW5kaW5nQm94XFxcIiB3aWR0aD1cXFwiMVxcXCIgaGVpZ2h0PVxcXCIxXFxcIj48dXNlIHhsaW5rOmhyZWY9XFxcIiNsb2dvX3N2Z19fYlxcXCIgdHJhbnNmb3JtPVxcXCJtYXRyaXgoLjAwMDkzIDAgMCAuMDAxMDYgLS4xMjIgLS4wMDcpXFxcIi8+PC9wYXR0ZXJuPjxpbWFnZSBpZD1cXFwibG9nb19zdmdfX2JcXFwiIHdpZHRoPVxcXCIyMjM1XFxcIiBoZWlnaHQ9XFxcIjk1OVxcXCIgeGxpbms6aHJlZj1cXFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUNMc0FBQU8vQ0FZQUFBQXRLbGFrQUFBQUNYQklXWE1BQUNFM0FBQWhOd0V6V0o5NkFBQWdBRWxFUVZSNDJ1emRQWWhkNlowbThPY2RPakRzRFdwaFlDb3diRFd1b0lPQnZnM09YR0Fwc3BMRjNiU1NpVlJpY2FUQXJVaFIwMm9jS2VxZVFKR0RMa1dUcUxITUp0V1JOU0REQkF0ekd5YVlvSXhyWVlKYUdKZ2FxSVVKQnQ0TjNsdXJzdHdmK3JqM1BlZmMrL3RCY1V0cSs1NnY5MVNwZEI0OS93UUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEb29EZ0ZBQUFBTUU2MTFwMGs4ei83WWI2VXA4NE9BQUFBQU50SzJBVUFBQUJXck5hNmwyUnYrY3Q1a3AzbDUvL3R5dTluK2Z2ek5lekMweGQrdlVqeTc4dlBUNWNmU2JJb3BaeTdZZ0FBQUFCTWliQUxBQUFBdktKYTYyV0E1ZHJ5dDM2NmZMMGFiSm1TMCtYSGVaS3ZsNitMSktlbGxGTlhIQUFBQUlBeEVYWUJBQUNBYjNCbGhOQThyWkZsbnRiS3NyZUZwMk9SRm9ENSt5eURNVVlwQVFBQUFEQVVZUmNBQUFDMjNyS3BaUzh0MFBMVFRMZWhwYmZUdENETTEybWprelRCQUFBQUFMQjJ3aTRBQUFCc2xXVmp5N1VJdHF6TGVWcnc1VElBc3lpbG5Ec3RBQUFBQUt5S3NBc0FBQUFiYmRuYWNobHN1WmJ0SEVNMHRFV3VCR0MwdndBQUFBRHdKb1JkQUFBQTJDaTExcjIwVU12UGw2OWFXOGJuTkMzODh0dTA4SXZtRndBQUFBQmVtckFMQUFBQWszWmxMTkZsdUdYUFdabWN5K2FYMzVaU25qb2RBQUFBQUh3WFlSY0FBQUFtWjluZThuNmVCMXpZSE9kNTN2cnlST3NMQUFBQUFDOFNkZ0VBQUdBU2FxM3pKTGZTUWk1N3pzaldXQ1I1bEJaOE9YVTZBQUFBQUJCMkFRQUFZTFFFWEhpQjRBc0FBQUFBd2k0QUFBQ01pNEFMTDBud0JRQUFBR0JMQ2JzQUFBQXd1RnJyWGxxNDVaY1JjT0hWUGMzejRNdTUwd0VBQUFDdzJZUmRBQUFBR0V5dDlUREp6OU9DTHJBS1Iwa2VsVktlT2hVQUFBQUFtMG5ZQlFBQWdLNldMUzYvVEhLWVpNY1pZVTFPMDlwZWpvdzVBZ0FBQU5nc3dpNEFBQUIwc1d4eHVaWGttck5CWjBmUjlnSUFBQUN3TVlSZEFBQUFXSnRsaTh0aFdwT0xGaGVHZHByazB5UlBTaW5uVGdjQUFBREFOQW03QUFBQXNISzExbXRwTFM2SHpnWWpkSjdXOXZLM1Jod0JBQUFBVEkrd0N3QUFBQ3RUYTMwL3JjWGxtclB4VWhiZjhIc25TZjd2Szd6SGo1TE1Ydmk5V1pKOXAvZWxITVdJSXdBQUFJQkpFWFlCQUFEZ2pkVmFENU44a21SdnkwL0ZSVnBZSlVtK1hyNmVMVCt5L0c4WEErelg3dklqYVNHWVdaTC9rdWVCbUxsVm5LZEpQaFY2QVFBQUFCZy9ZUmNBQUFCZTI1YUdYQzdESzVjTkxJdjhhY2hseXVaNTNncnpWMmtCbWN0d3pMWjRtdGIwY3VRT0J3QUFBQmduWVJjQUFBQmVTYTExSjhsSGFlT0tkamI0VUM4RExDZEovcEFXY0ZsczZXVy9ETURzcDQxTjJzM210OEdjcGpXOUhMbnJBUUFBQU1aRjJBVUFBSUNYVm11OW44ME51U3pTUmc5ZEJsek9YUEh2ZFRVQU04L3pzVWliNURSQ0x3QUFBQUNqSXV3Q0FBREE5OXJBY1VXWExTMS9XTDZldU1vck0xOStYQVpnTm1VRTBpTEozVkxLVTVjWUFBQUFZRmpDTGdBQUFIeXJEUXE1WENSNWx0YmNzb2pXbHA3MjAwSXY3Mll6d2k5UDA1cGVucnEwQUFBQUFNTVFkZ0VBQU9EUDFGcXZwWVZjcmszNE1CWkpmaC9OTFdOejJmenlrMHg3N05HVHRLYVhVNWNVQUFBQW9DOWhGd0FBQVA2L1d1dGVraTh5elpETDVXaWl5NERMaFNzNmVyTWtCMm5CbDZtMnZueWUxdlJ5N25JQ0FBQUE5Q0hzQWdBQVFHcXRPMmxOTGg5TmJOZlAwc1lUZlJYdExadmdNdmh5a0drRlg4N1RBaStmdTRRQUFBQUE2eWZzQWdBQXNPVnFyUitsQlYxMkpyTExBaTdiWVlyQmw5TWt0MHNwVDEwK0FBQUFnUFVSZGdFQUFOaFN0ZFpyU1Q1TEd4OHpkaGRKamlQZ3NxMm1Gbng1a3VSdUtlWFVwUU1BQUFCWVBXRVhBQUNBTGJNY1dmUlprc01KN081eGt0K25OYm5BTEMzdzhyT01QNlIxbnVSdlN5bjNYVFlBQUFDQTFSSjJBUUFBMkNLMTFzTzBvTXVZUnhhZHBEVzRIS2MxdXNBMzJVMXlJeTM0c2p2aS9WeWt0Ync4ZGNrQUFBQUFWa1BZQlFBQVlBdlVXdmVTZkpIazJvaDM4empKbHpHbWlGZDMyZlp5TU9KOS9EekpwNldVYzVjTEFBQUE0TTBJdXdBQUFHeTRXdXRIU1Q3Sk9OdGN6dElDTGxwY1dJWGRKQittTmI3TVJyaC81MGx1bDFLZXVGUUFBQUFBcjAvWUJRQUFZRVBWV3VkcGJTN3pFZTdlSWkzazhzeVZZZzFtYVMwdnR6TE9FVWRQMGtJdldsNEFBQUFBWG9Pd0N3QUF3QWFxdGQ1UGEzTVpHNk9LNk8wZ3JlMWxiS0V2TFM4QUFBQUFyMG5ZQlFBQVlJUFVXdmZTMmx5dWpXelhqcE04U2h0YkJFT1lwNFZlRGthMlgxcGVBQUFBQUY2UnNBc0FBTUNHcUxWK2xOYm1zak9TWGJwSWEzRjV2UHdjeG1BM2JielJqUkh0MDJsYTRPV3B5d01BQUFEdy9ZUmRBQUFBSnE3V3VwUFc1dkwrU0haSnlJVXBHR1BvNWZOU3lsMlhCZ0FBQU9DN0Nic0FBQUJNV0szMVdwTGZaQnh0TGtJdVROSFlRaStMSkIrVVVrNWRHZ0FBQUlCdkp1d0NBQUF3VWJYVysybGppOGJnT01uRENMa3dYYnRKN2lXWmoyQmZ6cFBjTGFVY3VTd0FBQUFBZjA3WUJRQUFZR0pxclh0cGJTNWplQ2gvbk9SUmtqTlhoZzB4VDJ0NkdjUDlkWlFXZWpsM1dRQUFBQUNlRTNZQkFBQ1lrQkdOTFZxa2hWd1dyc3JhekpMc2Y4ODFZSDBPa3R4SmEzd1orbDY3WFVweHZRRUFBQUNXaEYwQUFBQW1ZaVJqaTg3U3hoVTljMFZleXRYQXl0V21rSGV2Zkw2YjFRWXFUdktuNDZTK1hyNWVMUDliSWlqektnNlRmTGk4bGtNNVR3dThQSEU1QUFBQUFJUmRBQUFBUnEvV3VwUFc1bkp0d04yNFNQSmwybGdWL3RSK1doQmludVMvTEgrOTZnREx1bHdHWTc3Tzh6RE1XWXlsZXRFc3JlWGx4c0Q3OFhrcDVhN0xBUUFBQUd3N1lSY0FBSUFScTdYTzA0SXVld1B1eHJPME5wZHREMEJjQmxqbVNYNjAvSHgvZzQ5M3Niem1mMGdMd2J6WUdMT041bW1obHlHdis5TWtINVJTem4yRkJBQUFBTGFWc0FzQUFNQkkxVm9QazN5V1pHZWdYVGhMOGlEYk9mTG1jdnpRWmJCbG5tSEgySXpGV1ZybzVldmw2N2FPUTdxWjVOYUFhK0kwTGZCaUhCVUFBQUN3bFlSZEFBQUFScWpXZWovSkp3UHV3cU5zMThpaXl6RkU3eTVmOTYzQ2w3WklDNzhzc2wzdEw3TWs5NUljRExUOTh5UjNTeWxIbGlBQUFBQ3diWVJkQUFBQVJxVFd1cFBXNW5JNDBDNHMwa1lXbld6NHFSWnVXZThhdWd5L2JFUHp5RHd0OUxJNzBQWS9MYVhjdCt3QUFBQ0FiU0xzQWdBQU1CTExvTXZ2MGg2ZTkzYVIxdWJ5ZUlOUDhXNWFDOGRQQmpySDIrZ2lMZkR5K3lUUHNybXRMN08wc1VZM0I5citVU25sdHVVR0FBQUFiQXRoRndBQWdCR290YzdUZ2k0N0EyeCtrZVJCa3JNTlBMWDdTWDZXRm5MWnRkSUdkNUxrcTdUZ3l5YXV0eUZiWGhaSnJwZFN6aTB6QUFBQVlOTUp1d0FBQUF5czFub3R5Vy9TUCtpeXFXMHVBaTdUc0tuQmx5RmJYaFpKYnBkU0ZwWVhBQUFBc01tRVhRQUFBQVpVYXoxTThzVUFtejVKOG5FMkoyU3dtK1REQ0xoTTFXWHc1VGliTStwb251UlhhZUdYbnM3VEdsNEVYZ0FBQUlDTkpld0NBQUF3a0ZyclIwaytHMkRUajVJY2JjQXBuS1dGV3o1TWEzTmhNenhMOHZ1MDRNc21yTkY3eTNYYTAzbGF3OHNUeXdrQUFBRFlSTUl1QUFBQUE2aTFmcEhrc1BObXo1SThTQnQxTW1YenRERkZONnlralhhUkZuajVNdE52SUxxUjVFNzZ0N3pjTHFVY1dVb0FBQURBcGhGMkFRQUE2R3lnb011enRLRExWRWZFWExhNDNJb3hSZHRva2VkampxWnFQNjNscFhjTGtjQUxBQUFBc0hHRVhRQUFBRHFwdGU2a2pTMDY3THpwaDBrZVQvUzA3YWFOS2JxUi9xMFlqTTlaV3VqbGNhWVozSnFsTmJ6MGJpWDZ0SlJ5My9JQkFBQUFOb1d3Q3dBQVFBZkxvTXZ2MGtidzlIS1c1T01rSnhNOFpmTzBrTXVCMWNNM3VFaHJLM3FVYVk0NEdtS3MwVkVwNWJhbEF3QUFBR3dDWVJjQUFJQTFHeWpvTXRXeFJRZHBJWmU1bGNOTE9rNXJlMWxNYkwrSEdHc2s4QUlBQUFCc0JHRVhBQUNBTlJvbzZQSW95ZEhFVHRXTkpMZlN4aGJCNjFnczEvNlVRaSt6dE1CTHp3WWpnUmNBQUFCZzhvUmRBQUFBMW1TQW9NdEZXcHZMc3dtZEppRVhWbTJLb1pmRDVYM1FpOEFMQUFBQU1HbkNMZ0FBQUd2U09leHlraFowT1puSTZUbEljaWRDTHF6UDFFSXZCMmt0TDdOTzJ4TjRBUUFBQUNaTDJBVUFBR0NOT2dWZUZraytUbXQyR2J0NVdvUEYzT3FnaytPMDBNdlpCUFoxUDhtdjBpOEVKdkFDQUFBQVRKS3dDd0FBd0pxdE9mQnluTmJvTW5hN2FhMFZRaTRNNVhGYTZHWHNvYkJaa3MvU2dpODlDTHdBQUFBQWt5UHNBZ0FBME1HYUFpOFAweDdnajlrc3JjbmxwbFhBQ0Z3aytUTEowUVQyOVY2U0c1MjJKZkFDQUFBQVRJcXdDd0FBUUNjckRMeGNwQVZkamtkK3lEZlRnaTR6VjUrUk9WdmVRODlHdnArSHkzdW9oODlMS1hjdERRQUFBR0FLaEYwQUFBQTZXa0hnNVNMSjNTUW5JejdNZVpJNzZUZUdCVjdYSW0wTTJObUk5L0ZHV3N0TEQ3ZExLVWVXQlFBQUFEQjJ3aTRBQUFDZHZVSGc1U3pKeHhsdjBHV1dGbks1NFNxL2xwTzBNTlByMm84V25kZjFLT01lYlhTUUZuanBjWDBGWGdBQUFJRFJFM1lCQUFBWXdHc0VYazdTR2wwdVJucElOOUtDTHNJV2Yrb2l6ME1zZjFqKzN1S0YvN1l1bDJ0cmx1Y3RPKysrOE45NDdpeXQ1V1V4MHYzYlQvSlpCRjRBQUFBQWhGMEFBQUNHOGdxQmx6RUhYWGJUR2llMlBUeHh0dno0K3Nybmk1SHY4MlVJWmovSlgxMzVmTnNEUzQvVG1sN0dlTC8xQ3J5Y0o3bGVTbGtFQUFBQVlJU0VYUUFBQUFiMEVvR1hNUWRkYmlhNWxlMExSMXdHV2Y2d3ZENmJGZ2k0RE1ITWsveG8rYnFOMTNpc0xTLzdhUUd6L1RWdlIrQUZBQUFBR0MxaEZ3QUFnSUY5UitEbE9NbkRqQy9vc20xdExwZUJscStYcnhkYnVFeDNsOWY3M2VYcjdwWWM5MWhiWG1acERTL3JEcnljSm5tdmxITHVLelVBQUFBd0pzSXVBQUFBSS9BTmdaZmp0R2FKc2RtR05oZmhsdSszVGVHWHNiYTg5QXE4TE5JYVhnUmVBQUFBZ05FUWRnRUFBQmlKSzRHWHk0ZnJZekpMYTNNNTJORFQveXd0M1BKc2VmNTVOWmRqajM2VzlZY3Zodkk0cldscGJQZGxqOERMVVNubHRtVU9BQUFBaklXd0N3QUF3RWpVV3QvS09NTWs4eVMveW1hMXVWemtUd011Mmx0VzU3TDE1U2ZadkhEVVNaS1BNNjVBVksvQXkrZWxsTHVXTndBQUFEQUd3aTRBQUFBanNBeTZ6RE8rUU1saDJ0aWlUZkVzeVZmTFY5WnZsaFo0K1RDYjAvaHlrZGJ3Y2p5eTg5d2o4SEs3bEhKa1dRTUFBQUJERTNZQkFBQVkyRWlETHIwZW52ZHdrdVRMYUhBWjJtNlNHMm1qam5ZMzRIaU8wMEl2RjF0MHo1NG51VjVLV1ZqT0FBQUF3SkNFWFFBQUFBWldhLzNySkg4NW9sM2FoTEZGRjJsaGhDOHpycEV6UEY5alAwc0x2MHpaMk1ZYTlRcTh2RjFLT2JlTUFRQUFnS0VJdXdBQUFBeW8xdnBPeHRWeWNUUEpuUW1mMHNzV2wyT3JheEptYVlHWER6UGR0cGVMSkE4eW50RlkrMm1CbDNXRzFSYWxsUGNzWHdBQUFHQW93aTRBQUFBREdWblFaWmJrWHBLRGlaN080eVJmSlRGZVpib08wa0l2ODRudS82TWtSeVBabHg2Qmw2TlN5bTNMRmdBQUFCaUNzQXNBQU1BQWFxMzdTWDQ0a3QzWlRSdGJ0RCt4MDJoVTBXYmFUd3U5VEhIRTBiTzBscGVMa1p6SGRRZGVicGRTaml4WkFBQUFvRGRoRndBQWdNNXFyYnRKM2huSjd2UjRJTDVxRjJrQmw4Y1pSNmlBOWRoTmNpdlRDNzJjSlBrNDR3aGd6WmYzOTdxY0o3bGVTdEdvQkFBQUFIUWw3QUlBQU5EUnlJSXVOOUpHRjAyRmtNdDJtbUxvNVNMSjNiVGd5NmJmNTZkSjNpdWxuRnVxQUFBQVFDL0NMZ0FBQUozVVdtZEpmanlTM1RsTUN4Qk1nWkFMeWZSQ0x4ZEpIcWFOMmhyYXpTUjMxdmorVDBvcEgxaWlBQUFBUUMvQ0xnQUFBQjBzZ3k3ekpHK05ZSGZ1WlRxQmdjZEpIa1hJaGVkMjA0SWJCeFBaM3djWlIrQmwzZmY5M1ZMSzU1WW5BQUFBMElPd0N3QUF3SnJWV3Q5S0M3ck1CdDZWV1pKZkxmZGw3STdUUWk1blZoRGZZcDdXOURLVjlmeGdCUHZ4MlJyUDEzbVM2NldVaGFVSkFBQUFySnV3Q3dBQXdKclZXbitjY1FSZFBrdXlQL0xUZFpJMitzVURjMTdXamJUUXkrN0k5M01NZ1pkMWZ4MVlwQVZlemkxTEFBQUFZSjJFWFFBQUFOYW8xdnBPaG44SVA0V2d5MFZheU9YWXF1RTExL2pOdE5ETG1CMHYxL21RWTduMmwxOFAxaFhBKzd5VWN0ZVNCQUFBQU5aSjJBVUFBR0JOYXEyN1NkNFplRGYyMDBZWGpibjE0bkhheUtJTHE0WTN0SnZrWHNZOTJ1Z2t5ZDJCMS9zOExmQ3lMaCtVVXA1WWpnQUFBTUM2Q0xzQUFBQ3NRYTExSjhNL2NGOTNnOE9iTXJLSWRibVI1TTdJMS83UWdaZWJ5M08wRHVkSjNqYk9DQUFBQUZpWHYzQUtBQUFBVnF2VytvTWtmejN3Ym93OTZQSW95UzhpNk1KNkhDZjVteVRQUnJwL1k3Zy9IMmQ5WThOMmtueGhHUUlBQUFEcm90a0ZBQUJneFdxdFA4NndEN0hISEhRNVNmSmcrUW85SEtTTk5ocnIvVEJrdzh0cytiVmlmMDN2Zjd1VWNtUUpBZ0FBQUtzbTdBSUFBTEJDdGRaM2t1d091QXRqRHJvOFNuSzA1VXRrZC9reHkvT0F3WSt1WEsrcnYvOHFyamJrbkNYNVB5Lzgva21HSFprenRGbGE0T1ZnaFBzMmRPQmxOOG12MS9RMTR6ekplNldVVTk4ZEFBQUFnRlVTZGdFQUFGaVJXdXR1a25jRzNJV3hCbDNPa255YzdXcHptZWQ1c09YZHZINklaZFVXYWFHS1B5eXZ4OW1XWFpleHRyd01IWGc1U1BLck5iMzMwMUxLZGQ4aEFBQUFnRlVTZGdFQUFGaUJXdXNzTGVEdzFrQzdzTTUyaGpkeG5PUmhOcnRWWkgvNThlNlZ6NmRta1JhNCtNUHk4N01Odmw2N2FZR1grY2oyYStqQXk1MGtOOWYwM3NZWkFRQUFBQ3NsN0FJQUFQQ0dhcTF2cFQwNEh5cG9Na3RyZEJsVHlPSWlMZVJ5dklHWGZIOTV2ZDhkK0xxdjAxbGE2T1hyYkc3NDVUREpyWkh0MDdPMEZxU2gvSHBOWDBmT2s3eGRTam4zSFFNQUFBQllCV0VYQUFDQU4xUnIzVS95dzRFMlA4YWd5MG1TQjltYzhUaXp0REV2N3k1ZloxdTR6Qy9ETDc5UEMyUnNpbm5hK0o0eFhkUGo1ZjB6aEhVMlJEMHBwWHpnT3dZQUFBQ3dDc0l1QUFBQWI2RFcrcGRKL25xZ3pZOHg2TElwWTR0MjA0SXRQOHMweHhLdDI3TThENzVNL1ZxUDlUNGFLdkJ5a0JZQVdvY1BTaWxQM0Q0QUFBREFteEoyQVFBQWVFMjExaDhrK1hHU3R3YmFoWHRKYm96b2xEekl0TWNXelpiblU4RGwxV3hLOEdWczk5UERKSTgzN0Z5Y0publBPQ01BQUFEZ1RRbTdBQUFBdktaYTZ6ekp6a0NiSDlPRCtZc2tkelBkc1VVM2t2d2tyZEdDTjFzSHo1SjhsVGJ5YUtwcjRkNkk5bWVvQU5rc2JaelI3aHJlKzlOU3luMjNDd0FBQVBBbWhGMEFBQUJlUTYzMWh4bXUvV05NRCtSUGtueWM1R3hpbDNBM3lZZkxjem16b2xmdUxNbVhhVUdOcWJXOTdLZU5OUnJMdXZoRmhnbVM3YWNGWHRiaHZWTEt3bTBDQUFBQXZDNWhGd0FBZ0ZkVWE1MGxtV2VZOFVVSFNYNDFrbFB4TEsxNVlrcGhobmxheUVXTFN6L0hTUjVsV29HbzNlVjlOb1p4VmtNMkp4MG11YldHOTMxYVNybnUxZ0FBQUFCZWw3QUxBQURBSzZxMS9qakR0RDZNcVhIaU9DM29NaFUzMGg3YTcxckJnMW1raFY2bTB1Z3hXOTV2WXdpOG5LUUZYb1lJbHYxNlRlZmdkaW5seUcwQkFBQUF2QTVoRndBQWdGZFFhOTFMc2pmQXBtZHBENTNIRU5aNG1PVHhCQzdYTEszQlJjaGxYQlpKdmtvTFRFM0J2YlN3MU5DZXBZME02MjFkNDR4TzA4WVpuYnNsQUFBQWdGY2w3QUlBQVBDU2x1T0xmanpRNWo5TEc4RXp0QWVaUmtqaE1HMWMwY3pLSGEyenRLYVhLYXluc1FSZUhxZUZ6WWE0bjlZeHp1alRVc3A5dHdJQUFBRHdxb1JkQUFBQVhsS3RkWjVrWjRCTjMwbHljK0REdjBoN3lENzJZSUp4UmRNemxmRkdONWYzNHRDR0NweXRhNXpSMjZXVVU3Y0JBQUFBOENxRVhRQUFBRjVDcmZXSFdjK0QzdTl6STYxVllrZ1hTZTRtT1JueEpUcElDeUlJdVV6WElpMVFOZVoxdHMzMzR6eXRZV3JWamtvcHR5MS9BQUFBNEZVSXV3QUFBSHlQV3VzUDBzWVh2ZFY1MC90cEQ1ZUhITVV6OXFETGZscklaVzZsYm96anROREx4VWozYnd5Qmw1UGxmZG43SEsyclplcDZLZVdwcFE4QUFBQzhMR0VYQUFDQTcxRnIvZXNrZjlsNXM3TzBvTXYrZ0ljKzVxRExMRzFjMFUwcmRDTmRwSTAyZWp6Uy9SdEQ0T1Zaa284SHVPOStuZFUzS0QwdHBWeTM3QUVBQUlDWDlSZE9BUUFBd0xlcnRlNmtmOUFsYVEwS2dpN2Y3Q0RKMzBYUVpaUE5sdmZBcnpQTzFwN2pKQTlHY0IvY0hPRHJ3c00xdk8rMVd1djdsajBBQUFEd3NqUzdBQUFBZkl0YTYxdHA0NHQrMEhuVFE3ZEdqRFhvc3JzOEwwWVdiWi9IYVUwdll4dHROSWFHbDE4TWNLOSt0b2I3OExTVThyYWxEZ0FBQUx3TXpTNEFBQURmN29mcEgzVFpUV3UwR01wWWd5NDNNOTZXRDdiMytvK2g0ZVZlV2hOT1QrczQ1cjFhNjZHbERnQUFBTHdNelM0QUFBRGZvTmI2ZzdSV2w3YzZiL3JYR1haODBkMGtpeEZkQ20wdXZHaU1MUzlETjd3OHpuckdDMzJYd3lTM1Z2eWUybDBBQUFDQWw2TFpCUUFBNEp2OU1QMkRMb2NaTnVqeUlPTUt1aHhFbXd0LzdyTGxaWDlFKzNTOC9CanluQngwM3ViakpHY3Jmay90TGdBQUFNQkwwZXdDQUFEd0xXcXR1MmtQMUh1RVh1WkpQaHZ3Y0I5azJJZjFWODNTUmpuZHNBcjVIbytTSEkxb2YrNE51RzR2a3Z4TitqYmVyS1BSUnJzTEFBQUE4TDAwdXdBQUFIeUxVc3Baa245SWNycm1UYzB5L0FpVXNRUmQ5dE5DUDRJdXZJeGJ5L1V5RzhuK0RObU9OTVRYa2VNMUhLOTJGd0FBQU9CN0Nic0FBQUI4aDFMS2Y1WlNUdE5DTC8rNnBzM2NTckk3MENFZUozazRrdE45SXkyNHNHL2w4UXJtU2Y1dVJPdm00eVFuQTIzN0lQM0hHVDFhdzN0K1lsa0RBQUFBMzBYWUJRQUE0Q1dVVXY2amxQSlBhUzBHLzdIQ3Q1NG51VG5RWVoxa1BFR1hlOHVQbWRYR2E1Z2wrWFhHMFFoMGtSWjR1Ump3WHVwNUh5MlNQRnZ4ZTJwM0FRQUFBTDVUY1FvQUFBQmVYYTMxaDBuMmtyejFCbTl6K1lCK2lGYVhzeVMveUhBUDVLK2VBMjB1ck5KeDJqaWhvZTB2Nys4aFBFc0wzUFN5bTlhdXMwcW5wWlMzTFdjQUFBRGdtMmgyQVFBQWVBMmxsSDlKRzIzMEwyL3dOamN6VE5CbDZPYUpTNWRoQUVFWFZ1bkdjbDBOM1JKMGt1RkNONzNIR1oybGhZeFdTYnNMQUFBQThLMkVYUUFBQUY1VEtlVS9TeWtuU2Y1WGt2TlgvTC92SjdrMTBLNC9USHNRUDZSNVdxUExycFhFR3V4bkhJMUJ4MGtlRDdUdE8ra2IrSG0waHZmOHhGSUdBQUFBdm9td0N3QUF3QnNxcFZ5VVVoWkovaW5KZjd6ay8rM09RTHY3T0t0dllIaFZOOUtDQ0RPcmh6VWFTK0RsWVpMRkFOdmRUZDlBM1ZsV0gzalpxN1crYnlrREFBQUFMeEoyQVFBQVdKRlN5citXVXY0aHlXbVMvL3lPLytuTnRHYVQzaFpwRDk2SGREUEpQYXVGVG1acGdaZURnZmRqcUxGaE45TTM3UE40RGNmNVM4c1lBQUFBZUpHd0N3QUF3SXFWVWs2VC9FTmEwOEdMWmhsbWZORkYyZ1AzSWQzTGNJMDJiSzlaa2wrbE5Rb041U0xKM1lHMmZhZnpjWDY1NHZlOFZtdTlaaGtEQUFBQVZ3bTdBQUFBckVFcDVUOUxLZitjMXFaeWZ1VS8zY2t3NDN1R2FwYTRkQy9EaGcxZzZEVjRrbUdhbGVhZGozc2Q3UzYzTEY4QUFBRGdLbUVYQUFDQU5TcWxuSmRTRmtuK09XU0c5c0FBQUNBQVNVUkJWTWtQTTh6RDlrZHBvWnVoQ0xvd0ZrT3Z4Y2NEM1lzOVEzYnJhSGM1ckxYdVdiNEFBQURBSldFWEFBQ0FEa29wWjBuK3h3Q2JYaVE1R3ZEUUJWMFltNkhYNUJBdFM3TWtOenR1Ny9FYTN2UFEwZ1VBQUFBdUNic0FBQUIwVUdzOVRIS3Q4Mll2a2p3WThMQUZYUmlySWRmbVVQZmxyU1M3SFkveGVNWHYrVXZMRmdBQUFMZ2s3QUlBQU5ESEp3TnM4MkdTczRHT1Y5Q0ZzUnR5alQ3TGV0cFB2cytkanR0NnRPTDMyMW1HQmdFQUFBRHlsbE1BQUFDd1hyWFcrMG4yT20vMldWYmZyUEN5RGlQbzhyS2VKamxQOHZXVlgxODZMNlVzdm1OZFhidnl5NTBrOCtYblAzM2gxM3k3ZTh2WEllNlZSMGtPMHE5dEpjdnR6ZFBHbTYzYjJmSzhydkpyd1M4ejdGZzJBQUFBWUNTS1V3QUFBTEErdGRhZEpIOU1DeC8wY3BIa2I1YXZ2ZDNJOHdBQno1Mm1CUXkrVGd1MExFb3A1eDNXMzE1YXVHR2U1TjIwVVZvN0xzZWYzUzkzazV3TXNPMTVrczg2YjNPeFBONGU5cFA4ZXNYditkNTNoY0FBQUFDQTdTRHNBZ0FBc0ViTFZwZmVJNHcrVG10MjZVM1E1YmxGV3FqbDc1TTg3UkZzZVlVMXVaY1dldm5wOG5YUDVSbzA4SElueWMzTzI3eWJQdTB1U1F2enJMSmw2S2lVY3R1U0JRQUFnTzBtN0FJQUFMQW1BN1c2UEVzTHUvUzJuL1pRZTdiRmwveEprdCttaFZ0T0o3Uk81Mm1obDF2Wjd0RkhaMGwra2Y2TlNMTzA5cE9lNDR4T2xzZmF3MEdTWDYzdy9jNlR2RDJtQUJrQUFBRFEzMTg0QlFBQUFHdnpVZnFQTDNvNHdISHVabnVETGsrUzNFN3lYMHNwSDVSU2pxWVVkRW1TVXNxaWxQSjVLZVc5SkcrbmIrdkhtRnl1NDk0dWtqem92TTM5dENhbUhwNmxCWWxXWlNmSis3NjlBQUFBd0hZVGRnRUFBRmlEWmF2TEx6dHY5bEZXKzFENVpjelNXaHUyS2VoeW11VFR0SGFKeTRETFJyUk1sRkpPcndSZjNrdnllVnFUeHJiWXp6Q2p1QmJwUDNyc1ZzZHRmVG5oZlFjQUFBQkdTTmdGQUFCZ1BYcTN1cHdrZVR6QWNkNUpDd2hzZzZkSlBpaWx2RjFLdVQrMUJwZFh0V3g4dVp2VzluSTdMZVN6RFc0a3VUbkFkaCttN3dpbDNmUnJkemxlOGJGZHE3WHUrVFlEQUFBQTIwdllCUUFBWU1VR2FuVVpZbnpSemZSN1dENmtvN1FXbCt1bGxDZmJ0cDVMS2VmTDlwcTNrMXhQQy8xc3VqdEo1cDIzZVpiV3p0UlRyNGFVaTZ5K3VlYlFkeHNBQUFEWVhzSXVBQUFBcTllNzFlVTRiUXhLVC9PMFFNQW1PMG9MdWR6ZTlCYVhsMVZLZVZwS3VaN3RDTDBNTVo3cmNmcU9JdHROdjFDUFVVWUFBQURBeWdpN0FBQUFyTkFBclM0WDZkL3FNa3NMQW15cW93aTVmS2N0Q2IwTXRjNGZkTjVlcjlESXlmSmpWZlpxclhOM0l3QUFBR3duWVJjQUFJRFY2dDNxOG1WYTRLV25JUm92ZW5pYTVMcVF5OHU3RW5xNW5XUVR6OWs4L2NmbExOSzNxV21lNmJhNy9OSmRDQUFBQU50SjJBVUFBR0MxZW83V09FdHJJZW5wTVAwZWpQZHludVIyS2VWNktlV3BKZnpxU2lsSFNkNUw4dW1HM3RPOTEzenZkcGNQTzIzbldWWWJ6bnZmM1FjQUFBRGJTZGdGQUFCZ1JXcXRoMG4yT203eVVlZEQzRS9mTUU4UFIya2ppNDZzNERkVFNqa3ZwZHhQOG5ZMmI3VFJ2ZlJ0TXpwTGN0eHhld2RKZGp0czV5SXQ4TElxTzdWV2dSY0FBQURZUXNJdUFBQUFxOU56cEVidmgrR3p0QWYrbStJMHowY1duVnU2cTFOS09WMk9OcnFiMXBxekNYWUhXUDhQMDNkRVdhOGcyMWNyZnIrZnUrc0FBQUJnK3dpN0FBQUFyRUN0OVZyNmpqcnBQZWJrVmxxenl5WTRTdktla1VYclZVcjVQRzIwMGFhYzU0UGxSeThYU2I3c2ZIdzkybXNXYVdHOVZkSHNBZ0FBQUZ0STJBVUFBR0ExZW83M1dTdy9lcGtudWJrQjErZzh5UWZhWFBxNTB2THk2WVljVXU5eFJvL1RyOTFsbHVSR3AyMFpaUVFBQUFDOEVXRVhBQUNBTjFScjNVdHkySEdUanpvZjRpYU1MMXFrdGJrOHNXTDdLNlhjVDNJOTB4OXIxSHVjVis5Mmx3ODdiV2ZWeDJTVUVRQUFBR3daWVJjQUFJQTNkOWh4VzcxYlhRNlQ3RTc4K2h3bHVWNUtPYlZVaDdNY0cvVjI1L1c3RGdmcE83S3NaN3ZMYnFkak8wdHlzc0wzdStZT0F3QUFnTzBpN0FJQUFQRG1lbzR3NnRucXN0djUyTmJocnJGRjQxRktPUytsdkpjV1FKcXludU9NZXJlNy9LelRkcjVhNFh2dDFWcm43akFBQUFEWUhzSXVBQUFBYjZEVytuNlN2VTZiNjkzcU11WHhSZWRKUGlpbGZHNlZqazhwNVhhU3V4TStoTjBrTnp0dXIyZTd5NDMwQ2ZJOFcvSDczWEpuQVFBQXdQWVFkZ0VBQUhnelBSK3dmdFZ4VzcxSHRhelNlZHJZb2llVzUzZ3RnMGkzSjM3djl4cnhkWkhrdU9PeDNlaXdEYU9NQUFBQWdOY203QUlBQVBDYWFxMDdTZDd2dExtejlIdllQVXR5WjZLWDVUTG9zckJDeDYrVWNwVGtnK1YxbTZLZTdVYzlSeGw5MkdrN3F3end6V3V0ZSs0cUFBQUEyQTdDTGdBQUFLL3ZzT08ySG5YYzFzMzBhNnhZcFVXU3R3VmRwbVhad0hNOTB3eTh6Tk92QWFsbjRHMDN5WDZIN2F4NmxORTFkeFFBQUFCc0IyRVhBQUNBMTlkcmhORkZWdjlRK052TTBxL1ZZWlVXYVkwdTU1Ymw5Q3dEU3JlWGEzMXFlcllnOVd4MytWbUhiWnd0UDFibDUrNG1BQUFBMkE1dk9RWHdhcGExeUZjL0xyMmJaT2ZLcnhkSi92M0tyNThtU1NubHFiTUlBTEF4Znk3czFlaHduSDRoZ0R0cGdaY3AyWWlneTVXZk5YWmVXRnN2L3F4eG11Ui92M0Q4NTBrV1V6MEh0ZFozbHNkd044bG5FMXVEKzBsdXBFL3J5c255ZXZmNDJuTWp5Y01PMjNtVzFpYTFDdGQ4ZHdJQUFJRHRVSndDK0hhMTFubmFYNWE5bTlYV1U1K24vUVhsM3k5Zm4vb1hxQUFBay91ejR2MGtuM1RhM045a3RlMEgzMlkzeWQ5TjdGS2Nwd1ZkRmhOYlAxZC8xdGpMNmg3U1gvNnNzVWp5OWZKbmpkT1JuNHQzOHFkanMrWnBnWmNwT1Z2ZXB6M2NTSEt2MDdZK3p2cGJwVlo5dmQ4enlnd0FBQUEybjdBTFhGRnIzVW55ZmxyMThiWDg2YitlWExkRld2dkxiN1cvQUFCTTRzK09mOHlmTnYydHk3TzBCODQ5M0V0N2tENFZrd202RFB5enh1bVZueldlak95OHZCaDB1ZFF6MExFcUQ5S24zU1ZKL21mNnROOGNMNDlyU3NmemFTbmx2dTlTQUFBQXNObUVYZGg2TC95bDgvc2oyYTN6SkUrUy9LMS9rUVlBTU1vL1E4NlQvR09uemZWb1ZraW0yZW95NmdhSGtmNnNrZVhQR28rR0RyNThSOURsMHMyMHNWcFQwYlBkNVU1V04vcm51MXdrK2U4ZHRyUEtvTjNUVXNwMTM2a0FBQUJncy8yRlU4QzJxclhPYTYxZkpQbGpraTh5cnI5ODNrbHltT1FmYTYxL3JMVit0UHlMY2dBQXhxSFhueDNQMGlmb2tpUzNKbllOYm84MTZITGxaNDEvRytIUEdwZnI5emUxMW4rcnRYNVdhOTBiNEJ4OVg5QWxTUjZuWDFQS0t1eW1YelBTbDUyMk0wdHkwR0U3WDYvd3ZhNzVGZ1VBQUFDYlQ5aUZyVk5ydlZaci9WM2F2OFE5VE4vNjhOZXhsemEvL0krMTF2dEQvRVUwQUFCLzV1ZWR0dE1yNk5MeklmMHFmRjVLT1JyaHp4cnZ2L0N6eHRqdEpQbG8rYlBHRjdYV2E1M08wOHNFWFM0OVNCdjVPaFc5UW1ObkhjL0xUenBzWTdIaU5YWXRBQUFBd0VZVGRtRnJYQW01L0M3VC9KZGVPMGsrU2Z1TDZNODB2UUFBRFBibnlyMGs4MDZiNjlYZU1LVldsNmVsbExzai9GbmpqMGwrayttMlNod20rVjJ0OVhmTE1WM3JPbGV2RW5TNTlIRmF1R01LZWdiSHZ1cTBuUjdOTG1kSlRsYjRmbE85RHdFQUFJQ1hKT3pDeHF1MTd0VmFmNVBwaGx5K3llVy92cnp2Q2dNQWROZHJKTTFKK2p6Z24yVTZyUzduU1Q0WTBjOGFWd1AxZXh1eXZxK2xqVlA5WXRXdGtxOFpkRW1TaTdUQXkxVDBDbzg5VzU2YkhsOGo5anRzWjVYdExqLzFyUW9BQUFBMm03QUxHMjBaQnZuSDlIc2cwZE5Pa2s5cXJYOVUwUXdBLzQrOXV3ZVI1TXpUUmYrOGc0eUJJOWdjV0RneUZpYWJsWEU4bGVCNlowSFoxbzZuYXM0NjExSzJjYTFycU50YWErbHVqclZXdDR5MXE5cTYxOWhEbCtBYWM2ek9CaTJNc2RBbEdHT01YcFFEWS9RQndlWkNINUFoZUs4UlVlcFNUWDlVVlVaRVJtYitmdEQwaktUS3lQaEh2Rkh4OGNUL2hVRU5OWVhSVUYxZC9tNkxhbitybExJYXdYWEdwTlo2bE4wSzFGODBUeE42dWQ5UnphNGJkRG56SXNrL2JVbnRQc293M1o5ZVpiaXB6djUyZ0dWODIrRm51VVlHQUFDQUhTZnN3azZxdFI3VVdwK25tZlpuMTZmN21hWnBOMjVxSXdDQS9zOHpKeG51SWVwUUQ3SC8yNWFVLzBFcFpUR0NmZUF3eVhkcHdpQzc3aXhnLzN5ZHFZMDZDTHFjK2VkMDIvMmpUME4xZC9tWGdaWXpSSGpudE9PeGVoQUFBQUJnWndtN3NITnFyWGZTZEhQWnR4dGJkOUs4ZVRtekZ3QUE5R2FvYzYyaHBpZjVUWm9wU3NidXRKUnlmOFBYR1pOMmV0UW4yZjFBL1VVSHVXYVhsdzZETG1mK1lhQ3gwVVhOUHRxaFk4WEhBNnpQcXpRZGZMYnRlQTBBQUFCc2dMQUxPK1BjemVlSGUxeUdhWm91TC9mdEVRQUF2UmhxQ3FPaHVqVnNRMWVYVlpKYkc3N1dPTWp1VG85NkZmZHFyVTh2MjFHeWg2QkwwZ1FpL25GTDZqWFUrQnFxQzlTMmRYZjV4SzhzQUFBQTJGM0NMdXlFOXViejA3ajVmT1plcmZXSmFZMEFBRG8zRzJnNVF6eTgvcmo5TTNaZmxWS1dHN3pXbUtjSnVrenQvaitOZ2UvZU4wVk1UMEdYOCtQam15Mm8xVzhHV3M1UTRiZ2h3aVBmYnVIeEdnQUFBTmdBWVJlMjNybWdpL200Zis0d1RaY1hnUmNBZ0k2VVVtNGt1Wm5rVWJydFFIRGVVTk9TYkVOWGw0MU9YMVJyZlpqa3lKNy9aeVpwcGpXYXY2VnVmUVpkenZ4VHhqK2QwWWNaSnZBeTFESGpiNFlZOHgxKzF0VDFNQUFBQU93dVlSZTIycm0zTE4zQWVyT0RYT0t0U3dBQUxxK1VzaWlsM0MybGZKcmtWMm1tMkRsT3N1eG9FZDhPdENwL3N3WGx2cnZCYTQyakpIZnM4ZTkwVkd1OWM2RnVRd1Jka3VSbGtzZGJVS08vSFdnNVEzUzYrVEQ5ZDRONjFXN2JMcStKQVFBQWdCMGs3TUxXYW9NdTNySjh2MG1hRGk5dThnRUFkS3lVc2lxbG5KUlNicmRkWDI0a3VaM2tKTW5xbWg4N3hFUHIzNlI1Y0QxbXg2V1V4UWF1TXlhMTF1ZEo1dmJ3UzNuWUJvT0dETHFjK2Vja0wwWmVuNE9CYXZMdGdPdlR0eTY3dTh3TVVRQUFBTmhOd2k1c0pVR1hLeE40QVFBWVFDbGxXVW81THFYY0txWDhLc21uU1I0a1dWenlJMTZrMjY0R2IvTmZSMTdLVlRiUTFhV2Q4c1FVcVZjM3I3VSt5YkJCbHpQL3RBWDFHYUtMMGpjRHJjc25BeXpqMzdicyt3SUFBQUFiSU96QzFoRjB1VGFCRndDQWdaVlNUa3NwOTBzcE4wc3BKYzJVUjQveTlzNEZwd044clE4ei9pbU12aXFscklaY29LREwyZzZUL1AwR2xuczYwTGhaeDM4YllCbXZCcXJERU9PankyNDlVME1UQUFBQWRwT3dDMXVsRFdvOFZJbHJPd3U4VEpVQ0FHQjQ3WlJIZDBzcG55YjVWWm9wajQ2VExOdi81RjhHK0JwakQ3b3Mwd1NDaG5ZVVFaZDEvU2FibWY3cEgwZGVsNCtTZkR6QWNvYVl5dWpEOU4vQnA4dlFqakVOQUFBQU8wclloYTNSQmpTZXBnbHNjSDJUSkUvYU4xY0JBTmlRVXNxcW5mTG9kaW5sUnBvcGo0Ym96REQyS1l3ZWJLQ3J5MUdhemlTczc0czBvWmNodlV6eTI1SFg1Vzk3L3Z4Vmt2OTNvSFhacXU0dXRkYVpZUWtBQUFDN1I5aUZyZEFHTTU1RTBLVXJCMjA5QVFBWWoxY0RMR1BzVXhndFN5bkhBMTlyM01sbXVwSHNzci9QOEIwMUhtL0JOVmpYeDRzL0pmbDlrbS9hS2ROK215YjAwcmUvSG1BWnBqSUNBQUFBM2tuWWhXM3hNTm9QZDIxV2E3MnZEQUFBb3pGRXNIdnNVeGc5R0hKaGJjY0gwNlQyNDcrbi8rbHV6aHQ3ZDVlUDE2ekhqKzA2L2lISjcwb3AvMXBLZVZGSytiNlU4dU81LzI0eHdMb01jVzMrdnpyOHJLbmhDQUFBQUx0SDJJWFJxN1hPNDAzTHZ0elQwaGtBWUJUbnZCK2s2YnJTdHpGUFliUWFzcXRMTzAycWJvZjkrVEJONEdWSVkrL3VjdFd3MmZkcE9wejhheW5sbTFMS0gwb3BMMHNwUDd6alo1NE5zQjRmRDdDTUxxZDArOHh3QkFBQWdOMGo3TUtvdFRlZ3ZXblpyeWZ0TkZFQUFHek9VT2RqWSs2VytOWEF5enVLYVZMNzluR1MvM3ZBNWIxTXR5R0pybjN5bm4vL0tza3l5V2twWlZGSytYMHA1VStsbEt0TWNiYllrV09KYVl3QUFBQ0FkeEoyWWV6Y2dPN2ZwSzB6QUFDYlBTZnIyMEdHNlI1elhZK0dXbEE3bmVmTWJqZUl2OHV3SWFzeGQzZTUyTm5saHlSL1N2TDdKTiswVXhNdFN5bXI2eTZnbERKVTJLZnY3aTZ2Mmo5ZG1CcUdBQUFBc0h1RVhSaXRkdnFpbVVvTTRyRFdlcWdNQU1DSXpnVVBhcTM3Tk1YTUVDR1VNWGQxT1Y3bkFmOFY5NjFwa250RzJhRCtQc01GclU3VGRIZ1pxNE1rZjBqeXUxTEs3MG9wTDBvcDM1ZFNmdXh3R1lzQjF1TS9EN0NNRngyTyt3UERFQUFBQUhhTHNBdWoxRTZyWS9xaVlUMDBuUkVBTUpKendYbVNwOW12RG45RHJPc25JMTcvSWJ0eDZHbzR2SS9TZEhnWnl2OFljUzErWFVwNVdVcjVvY2RsUEJ0Z1BUNGVZQmxkVG1Ya1doY0FBQUIyakxBTFkzVXZia1lOYlpya2pqSUFBSnRVYTcyVFBadktzdFk2Vk1lTHNYWTJXSlpTRmdQVmVoN2RJemZsaXpTaGx5SDhkc1IxR0dML0cySXFveUdPSi85N3krb09BQUFBREVqWWhkRnAyNG9MWFd6R3ZiYitBQUNiT0E4OHluNTI5OXYzS1l5K0dtai8wajF5OC81K29PVzhTdkxOU0d0d01FQkh6ZE9CMXVXakxWcVB2ekQ4QUFBQVlMY0l1ekJHOTVSQS9RR0EvVkZybmRSYW55ZVo3MmtKOWozc2NqTFFjdTVFOThoTk94aHdYL3lmSTY5RGIwb3B5eVNyQWRhajc3RExxejA1QmdJQUFBRFhJT3pDcUxSZFJlWXFzVkZ6M1YwQWdBSFAvdzZTUE0xK1A0Z2NJdXp5eVVqWC9iUjlNTi8zZmpaSjhxVVJOd3BmRExTY2I5SnRXS0pMc3lIRzFnREw2UHU0L2NKd0FRQUFBTjVHMklXeDBWWEVkZ0FBOWtTdGRSWkJsMlNZYmlNZmozVGRIdyswSEYxZHhtUEk3aTVqbmNyb3N3R1dNVVRZNVQ4TnNJeVhIWDNPek5BREFBQ0EzU0xzd21qbzZqSXF1cnNBQUgyZis4M1RCRjBtZTE2SFh3NndtSTh6VFBlWTZ6Z1pvTWE2dW96UFVOMWR2aDNwK2c4Ujl2bmpRTWVXdnIwMFhBQUFBSUEzRVhaaFRPWktZSHNBQUx1djF2b3d5WkZLSkVtR0NMdDhOTkoxSDJRS28vYThWbGVYY1JtcXU4dFlPN3RNQm5pNVlJak9Ma01jV3pxYmlxcnRKZ1lBQUFEc0NHRVh4dVFMSlJnVmI3OENBSjJxdFU1cXJVL1NUQ2xEWTUrbk1GbzRyOTFyZnp2QU1sNWxtTkRIZGZRZDl0bVZzTXUvR1NvQUFBREFtd2k3TUFxMTFzTWtVNVVZbFVrN3ZRQUFRQmZuZTVNMDB4WWRxc2JQZkREQU1qNFo2YnAvN1RwanIvMG13MHl2dFpkVEdaVlNWa2xXQTZ6SFIxdTB6emtXQUFBQXdBNFJkbUVzUGxjQzJ3VUEyRTIxMW9NazMyV1lhVXUyelJBUCswZjVNTHFVc25BK3UvZCtNOEF5eHRyWjVaTWRXZmVQdG1nZHBvWWNBQUFBN0E1aEY4YkNHNzRqM1M3dFc5Z0FBTmZTZG9wN21tR202OWxHUTNSMkdXUFlaVEhBdmpkSk1yZUxqZG9RVXhtTk5ld3lIV0FaT3JzQUFBQUFPMHZZaFkxclc0dDcrREZlZ2tnQXdIWFA4KzRrT1hLdTkwNTlkM1laYXplZFo4NWpTZkp4aGdsTGpESHdNc1RZSEdJS3A3NjMzOHNPUCtzVFF3NEFBQUIyaDdBTFkvQ1pFdGcrQU1CdXFiVWVKWG1vRXUrczBSQmRYVDRjNmVvUEVUNHdoZEYyK0pzQmx2SHRTSThCMDU0WHNkcUIvYVBMc0l2Z0pRQUFBT3dRWVJmR3dCdVh0ZzhBc0NOcXJaTmE2L09ZUHVZeWhnaWlmRHpTZFI4aTdES3ppMjJGL3pyQU1sNk1kTjJuT3pET2RFc0JBQUFBTmtMWWhZMXEzMlNicXNTb1RXcXRCOG9BQUZ6aTNPNGd5Zk9NZCtxY2ZmU2ZSdmlkVnFXVVpjLzc0aXk2T0d5TElZNFhMMGU2N3E2Rmg5MStqZ2tBQUFDd1E0UmQyRFFQUXJiRFRBa0FnSGRwd3dWUDQrSHRWUXp4NEhXTW5WMTBkV0hvNjhLOTdPeFNTbG5zeVA3eGNrdjJNd0FBQUdCQXdpNXMybWRLWURzQkFOdXQxanBQRTNUeDFqeVhNVVRZeGZucmRqbllrZjN1cXY3Q3RnTUFBQUM0bmcrVWdBMXpZOHgyQWdDMldLMzFLTWxjSlp6SFhjRi9PSC9sZ2s4R1dNWXI0eE1BQUFCZ2QranN3cWE1dWJjZHBrb0FBSnhYYTUzVVdwOUUwR1VkKzlvSlo5SHp2am1OTGtQYlpvanB0djdOZU50YUx3d1JBQUFBNENKaEZ6YW0xanFKbTlEYnRMMW1xZ0FBdE9jRjB6VFRGaDJxeHFoOXVLZnJMVkMvbmZ0cTMvdXJ6aTdiZTZ6NTN4Mysvbko4QUFBQWdCMGg3TUltdWNtMFhRU1RBSUN6QjRYUG5jdHRoWS9IK0tWS0tRdlhHV3hnZngxamQ1Q0piYWZtQUFBQXdQVUl1N0JKYmpKdEZ3OE5BR0RQMVZybmFUcTZPSTlqekg2dEJGdnBZeVhveFVvSkFBQUFnRjBrN01JbUNVOEFBR3lKV3V2OUpFY1JkT25TUHRaeU9jQXlwbmF0cmRUM1ZEZ3Y5clN1MzlxMUFBQUFnRjBrN0FKYzFpZEtBQUQ3cWRaNmxPU2VTdENCNVFETEVNamFUdis1NTg5L05kTGpxNWRBQUFBQUFLN2hBeVVBTHNsREF3RFlNN1hXU1pwcGl6eU0zVTRIMXBzdDhwSHJMTjdpbFJJQUFBQUFGK25zd2licEZBSUFNRkp0dDRIbkVSd0FZTE5lS0FFQUFBQndrYkFMbStRTk5nQ0FFYXExenRKMGRKbXFCckJEWGlvQkFBQUF3RzRRZGdFQUFINVNhNTJuQ2JvSUp0T0hsUkt3UWNJdUFBQUFBRHZpQXlVQUFBQ1NwTlo2bEdTdUV2VG9XeVZnZzM2ZjhRV3VCTUFBQUFBQXJrSFlCUUFBOWx5dGRaTGtTWktaYWd5bmxMTG9lYnZhbnZCei8xQktXU29EQUFBQXdQWXpqUkdiNUEwMkFJQU5xN1ZPMDB4Yk5GTU5CdkNKRWdBQUFBQUE2eEoyWVpPME1BY0EyS0JhNjBHUzUwa09WSU9CVEpTQURmcEJDUUFBQUFCMmc3QUxjRmxMSlFDQTNWRnJuYWNKdWdnZkFQdEMyQVVBQUFCZ1J3aTdBSmYxUnlVQWdOMVFhNzJmNUVnbGR0N0tlZ003UVBjeEFBQUE0TThJdTdCSkN5VUFBQmhPclhWU2F6MUtjazgxOXNLcDlXYUxtT1lXQUFBQWdFdjdRQW5ZSUc5Y2JwZUZFZ0RBOXFxMVRwSThqVGZrMlN6N0g1djBveElBQUFBQTdBYWRYZGlZVW9vM0xyZUxjQklBYktsYTYwR1M1eEUwWVBNbUF5emptVEp2cFJjRFhJTysyc082Zm1iWEFnQUFBSGFSc0F1YnRsU0M3U0NjQkFEYnFkWjZtS2FqeTFRMUdNaysyWGZnUlVoN083MVNBdHNPQUFBQTRMS0VYZGcwQVlydHNGQUNBTmcrdGRaNWtpY1pwcHNHSTFOS0dlczVYTjhkaGx4anVEWjhFNEdNL3J6WW91KzZ0TGtBQUFCZ053aTdzR25mS3NGVzhNQUFBTFpNcmZVb3laRktNRUo5aDYrY3UyNmZsd01zNDBmamJXdjlkVmNmVkVwWkdtNEFBQUN3RzRSZDJMU0ZFbXlGWjBvQUFOdWgxanFwdFQ1Tk1sY05NczRwZlhydDdGSktXVVgzaG0welJFQnBYenU3SE96QU9ueG9pQUFBQUFBWENidXdVU051cmM3UDJVNEFzQVZxcmRNa1Q1UE1WSVBXR0x1Yy9OcjVLeGY4MndETCtFR1plMkY2S0FBQUFHQWpoRjBZZzRVU2pOcHArM1lzQURCaXRkYURKTSt6RzIveHM5dUcyRWRObDdwbDF4d0RMR1B2UWhsdEFMSnZMK3krQUFBQXdDWUl1ekFHWHl2QnFDMlVBQURHcmRZNlR4TjBtYWdHRjR4eE9zb2h3aTRuTnYzV2VKVmhBaFA3MklGa3VpUHI4YkZyV3dBQUFPQWlZUmZHd0kzb2NYdXNCQUF3WHJYV2gwbU9WSUl0MjI5N0RieVVVcFpKbGlxOUZiNFpZQmsvbEZKK1ZPcGV2QnhnR1I4cU13QUFBSENSc0FzYjE5NklQbFdKVVZxV1Vtd2JBQmloV3V1azFucVU1STVxOEE2TGtYNHYzVjA0TThTVVU2LzJ0TGF6QVpieHYrekNBQUFBd0NZSXV6QVd1b2ZZTGdEQUpkVmFKMG1lSnBtckJ1K3hHdW4zK3N5NUxLMGhPcnU4VXVhdDlYR0huK1ZGRGdBQUFOZ2h3aTZNaGJjdXgrbFlDUUJnWE5ycFg3N0xNSjB4MkhJajd0STNHMmpkbC9hQ1VmdHRoZ21pclBhMHZrT0V5dm8reG5RNWhkRi9HSElBQUFDd080UmRHSVYyS2lPQmwzRlp0TnNGQUJpSld1dGhtbzR1RTlYZ0NzWVllSm5XV3FjRExNYzF4cmo5eTBEWG0vc2FkdG1GM3hVZkdpWUFBQURBbXdpN01DWmZLWUh0QVFDOFdhMzFUcEluRVhUaDZwWWovVjR6NTdSNzdXV0dtY0pvdGNjMUhxSUQySXVlUDcvTGFZd1doaDBBQUFEc0RtRVhScU9Vc29nMjQyT3hMS1Y0Q3hZQVJxTFdlcFRrb1Vwd1RkK085SHYxUHNWSzI2bHdZUmNZcGY4NTBISyszOVBmRzlPQkZ2WEtyZ3dBQUFCc2dyQUxZL05BQ1d3SEFLQlJhNTNVV3A4bW1hc0dhMWlNOUhzZE9yZmRhLzg4MEhMMnRiUExkSUJsdkJoZ0daOTArRmxMd3c0QUFBQjJoN0FMbzFKS09ZNGJVSnUyYkxjREFMQkJ0ZGFESkU4enpGUXY3TGJUa1g2dlNidWY5MzJOc1hDTk1UcS96VEFkUVg0b3BleHI1NUVoZm5kc1ZXM2JUazhBQUFEQWpoQjJZWXk4ZWJsWmQ1VUFBRGJyWE5EbFFEVllWeWxsbGZHR1BiNXdqYkdYSGcrMG5PLzN1TWEvSG1BWlEweVIxdFh2d1pWaEJ3QUFBTHRGMklYUmFidUtMRlJpSXhhbGxCTmxBSUROcWJYT2t6eFBNbEVOdWp6UEcrbjNHbVFxSXgwa1IrVzNTVjRPdEt5WGUxem5BL1g5bVZORER3QUFBSGFMc0F0ajVjM0x6ZERWQlFBMnFOYjZNTW1SU3RDRGIwZjZ2YVpEVEdYVXVtMDMyTGhYR2E2cnl6NVBZWlRzUnRpbHkzWFEyUVVBQUFCMmpMQUxvMVJLV1NRNVZvbEJQU3FsZU5zTkFEYWcxanFwdFI0bHVhTWE5R1F4NHUvMjVZRFhHQXU3d2tiOWp3elhEV1J2cHpDcXRjNEdXdFNMbmovL3d3NC82MXZERHdBQUFIYUxzQXRqZGpmZXZocktNcnJwQU1CRzFGb25TWjRtbWFzR2ZXbER6V005dHo1c3g4RlExeGhzeHNzay96emc4djYweDdVZXFxdEwzNTF6UHU3d3M5eGJBQUFBZ0IwajdNSm9sVkpXMFdwOEtMZmJlZ01BQTJxbmIva3V3enlZaE1WSXY5Y2t5ZUZBMXhpbkVmTGVsSDlLLytHSU02dFN5Zzk3WE90UEJsakdFQjE2L3JyRHo5TEZGQUFBQUhhTXNBdWpWa281aWVtTSt2YWdiZWtPQUF5bzFqcFAwOUZsb2hvTTVObUl2OXVYQXk3clVack9oZ3pubS9iUFVGN3VlYjJIQ0ZBT01TM1FSeDErbGpFUEFBQUFPMGJZaFcxd045N0M2c3VpbEhKZkdRQmdXTFhXTzBtT0l1akNzRTVHL04wT2FxMnpJUmJVZGpTOFpYY1l6S3NrL3pqZzhuNG9wZXh0MktXZEVteUlzTXVMQVpieGNZZmpmbWtvQWdBQXdHNFJkbUgwemsxblpKcWRicm5KRHdBYlVHczlTdkpRSmRqQWVmVXk0KzV1OE1XQXRUQ2QwWEQrSWNOTlg1VG82akliYURsOWgxMCs3dkN6Rm9ZaEFBQUE3QjVoRjdaQ2V6UDZ0a3AwWnBYa1poc2tBZ0FHVUd1ZDFGcWZKNW1yQmhzMDV1NHU4MXJyZE1CcmpQdnhFTHh2anpOc2w4NGZrL3hwejJ2KzJRRExlSlgrUTBXbU1BSUFBQURlU2RpRnJWRktPWW5BUzFkdXR3RWlBR0FBdGRhREpFOHp6TlFTOEM1ZmovejczUnQ0ZWJmaVFYaGZUcE1jRDd6TVA1VlNmdHp6dXM4R1dNWldUV0dVNUkrR0l3QUFBT3dlWVJlMlNpbmxPTVBmTU4wMXQ5dmdFQUF3Z0ZyckxJSXVqT2Q4ZXBGeFR3ODZkSGVYczZrOWRUenMxb3MwMHhjTmFlKzd1dFJhSndQOXJ2bDJnR1Y4MHVGbmVkRURBQUFBZHBDd0MxdW5sSEk3QWkvWGRic05EQUVBQTZpMXp0TUVYU2Fxd1lpTVBmZzhhSGNYVTZaMjdsV1NmMnovSHBLdUxzTjBkVW1HNmV6UzVUUkd3aTRBQUFDd2c0UmQyRW9DTDljaTZBSUFBNnExUGt4eXBCS00wTmluTWhxMHUwdDdmV0hLMUc2OFNuSTN3NFFoenR2N3JpNnR6d1phVHQvaGtRL1RZZGlsbExLMGF3QUFBTUR1RVhaaGF3bThYSW1nQ3dBTXBOWTZxYlUrU1hKSE5SanBlZlJKK3N4YnZnQUFJQUJKUkVGVXhqOXR6OE1OMU9VNEFpL3IyRlRRSmRIVjVjemhBTXQ0a2Y2NzluUTVGZFBDYmdFQUFBQzdTZGlGcmRZR1h1NnF4RnV0a3R3VWRBR0FZZFJhSjJtbUxUcFVEVVp1N09lSGg3WFdnNkVYS3ZCeWJac011dndRWFYzU2RrT2FEckNvSWFZRStuakx2aThBQUFDd0FjSXViTDFTeXFNME42UlhxdkV6eXpSQmw0VlNBRUQvMmdmejM2WGJOOUtoTDQrMzREeDJJdytwQlY2dWJKTkJseVI1b2F0TGt1RkNsdDhPc0l4UHR1ejdBZ0FBQUJzZzdNSk9hRzlJMzB4elk1emtKTW1ubTNwQUFBRDdwdFk2VDlQUlphSWFiTW41OCtrSXo1MVhTZTZXVW01c09yQjlMdkFpVVA5dW13NjZyRW9wMzlzTVNaSXZCbHFPemk0QUFBREFLQWk3c0RQYUcvYWZwZ2w2N0xPN3BaUmJwUlEzNWdGZ0FMWFdPMG1PSXVqQzl2bHFSTi9sVVpJYmJkZkdzVnhmSEtjSjFEdXZmck1YU2Y3UGJDN29raVIvc0JsK21rTHZZS0J0L3FyblpYeWM1TU9PN3hNQUFBQUFPMGpZaFoxU1NsbVZVbTVsUDkvQ1BFM1R6ZVdSUFFFQWhsRnJQVXJ5VUNYWVVzY2orQTZMOWh6MjdoakQydTJEOGh2UkhlS2kzNmJwNlBKcWc5OWhXVXI1d2FaSU10d1VSdjlma3QrbENSbDluNlNQNmFPNkRPMHM3Qm9BQUFDd3U0UmQyRW50VzVqNzB1VmxsZVJCS2NXMFJRQXdrRnJycE5iNlBNbGNOZGppYytaVk5oZDRXU2E1VlVxNU9mWnoyRFpRLzJtYTdqUDc3bFdTZjJ6L2JETG84cXFVc3JRNWZ2TDVRTXQ1VmtyNW9aVHlzcFR5KzFMS04wbit0UjNQWFlYVi9yckQ3K3Y2R0FBQUFIWllVUUoyWGEzMU1NMGIxOU1kWEwyVE5OTVdMVzFwQUJqczNPSWd5Wk1kUGJjWW0wVXA1YVl5OUw0L1B4OXdrYXNrWDVWUzdtOXB2V1pwcGkzYngvSC9Jc2svSkhrNWd1L3lyNldVVjBid1QxTVkvZnNReXlxbGxFdDhuNzlNTTYzZkpOZWJqdWovU2ZKUlIxLzVWaW5seEY0Q0FBQUF1MGxuRjNaZUtlV2tsSElqVFp2dFhabmFhSkhrWmlubGxxQUxBQXluZmREOU5JSXU3TTY1OG1tR20rcmpPTTJVUmZlM3VGNkxOQjBrOTZuTHk2c2tqNVA4WHhsSDBPV0ZvTXZQRERXRjBja2x4OGozcFpRWHBaUi9UZkpObWltUFhpYTV6SlJUSDZXN29FdWlzd3NBQUFEc05HRVg5a1lwNVZHU0cwa2VaSHRETDRzMElaZWI3WTEyQUdBZ3RkWjVtcURMUkRYWU1ZOEhPb2U5dlF0QjdYWmFvN3RKYm1iM0g2Wi9reWJrY2p5UzcvTjlLZVZQaHV6UGZEblFjcjYreGxqNXNaM3k2QStsbE44bCtWMmFEa0hmSi9ueERUOXkwT0gzWFhveEJBQUFBSGFiYVl6WVcrMERxeS9UN1EyMXZoeW5hZmZ1elRRQTJOeTV3OU1rTTVVWWxHbU1odHUvdjB2M0hZdVdTUjZVVW81M3RHWWZKUGsvMG5UVytDTGRkcVRZdEJkSi9pbmpDdlA4a0diNm9oK04ySi8yd1dtUzd3WmEzSTJ1d3lQdEZFem4vL3ozSkgvVDFUVjBLZVcydlFRQUFBQjIxd2RLd0w1cWI3b2YxMW9QMG9SZURqT3VON1ZQazN5VjVLU1VzckxGQUFEbzBZTWtSeDEvM3FNZFA0LzlxeVMvVFBMYk5CMVEvaTdKMzJhN1F5OHYwM1Q2K2UwSXY5dnZCVjMrekh5b2E5TSt1cVMweDRkVjhsTjRyTXNYVVo3WlBRQUFBR0MzNmV3QzU5UmFENU44bGliNE10M0FWMWlrYVE5OW91VXlBSXp1UEVGbmx3MmNHK25zTXRqK1BVblRJV0xkOFBkSmtydTdmaTViYS8xbG1xNHViM3FCNURmWnZrNHZwMmxDTG1QdEpQbUhVc3BMSS9YUDlzTStPaks5eWQxMld1QSsxK1VneWZNT1AvSlRuVkVCQUFCZ3QrbnNBdWVVVWs3UzNxQnZXMExQMG9SZkR0TDlkRWVyTkRlVG42VjVrTE93QlFBQTJOQjU4S3JXK2xXU2U5ZjhpTk0wRDhUMzVaeDIrbzdyNmQrMmZ3N1NkSHI1elVqWDRWWDdQZjlIbW80dVkvVW5RWmMvMTc2b01SMW9jU2NETEdQVzViVzJvQXNBQUFEc1BwMWQ0QXJhdDgwbWVYMGo3cE5jN3UzWDB5VC9rV1RaL2prMU5SRUFiTjE1Z000dXc5UFpaZGg5L0RyZFhWWnBRaTdIZTFhbnF3VGhQMHp5TjBuK2EvdjNKcjFLTStYU3Y3Ui9qOTNMVXNvZmpNNDM3b2RQMG5RazdkdHBLZVhUTGZzZGUxeEt1VzB2QVFBQWdOMm1zd3Rjd2JtM3d4YXFBUURBanAzclhyVzd5Nk1rRC9Zd3hQM3hGZi83c3c0cXYyMy8vOStrQ2MwZlhPT3pydU0weWJkcHdpMHZ0cWpPcjdicyt3Nm03VUo2T05EaUhnK3dQdWRmS09uQ00zc0pBQUFBN0Q1aEZ3QUFBSklrcFpUN3RkWXY4dTdwVVJaSmJwZFNsdnRXbjFyclIyazZ0YXpqbS95OHE4cFo2T1UvdDM5LzFQNjVxaGRwQWlMZnBwbVc2RVcyTnl6eUtrMUhrUitOeWplYUQ3aXNJYVl3NmpxNHM3Q0xBQUFBd080VGRnRUFBT0M4QjBtTzN2RFBsMmxDTG90OUxFcXQ5WVAwMDRubHRQM3pKdStiTG1rWHU1OEl1cnpmbHdNdDUzU2dVTnRuSFg3V2NoK0RlQUFBQUxDUGhGMEFBQUQ0U1NubHVOWjZMNis3dTZ5U2ZGVkt1Yi9ucGZtckRWeERuKzVaalFWZDNxUFdPazh5R1doeGp3ZGFUcGVkWFU3c0pRQUFBTEFmZnFFRUFBQUFYSEM3L2ZzNHlZMTlEN3JVV24rWmQwL3R4UG9FWFM3bnl3R1hkVHpBMkRwTXQrR2RaM1lSQUFBQTJBODZ1d0FBQVBBenBaUkZyZldHNlVCKzhyRVM5RXJRNVJKcXJiTzhmMnFycnB5VVVsWURMT2Z6am85ZE9yc0FBQURBbmhCMkFRQUE0TThJdWpScXJaTWtmNmtTdlZrbCtiMmd5NlhjRzNCWnBqQUNBQUFBUmszWUJRQUFBTjd1dnloQmIxNldVdjZnRE8vWGRuV1pEYlM0NVJBZFVucVl3dWhyZXdvQUFBRHNEMkVYQUFBQWVJTmE2MThsK2FWSzlPSkZLZVZQeW5CcFh3NjRyS0c2dW56ZThlY3Q3Q1lBQUFDd1A0UmRBQUFBNElKYTZ3ZEpwaXJSdVIvVFRGdTBVb3BMNzR2VGREdmR6L3NjRDdTY0x0ZnAxTlJyQUFBQXNGK0VYUUFBQU9EUFRWMHpkKzVWbXFETEQwcHhKUThIWE5iSkVLR1JIcVl3ZW13M0FRQUFnUDNpeGgwQUFBQ2NVMnY5WlpLL1VvbE8vYW1VOGtJWnJyd3Z6akpzVjVldkJscE8xMU1ZbmRoYkFBQUFZTDhJdXdBQUFNRFAvUmNsNk13UFNmNWcycUpydXpmZ3NwYWxsRVhmQzZtMVRwTE1PL3hJVXhnQkFBREFIaEoyQVFBQWdGYXQ5Uy9UN2ZRcSsreGxraGVsbEIrVjRscjc0aXpKYk1CRlBoaG9PVjEzcWpHRkVRQUFBT3doWVJjQUFBQjQ3V01sV0p0dUx0MFlzcXZMS3NOTkJmUmx4NTluQ2lNQUFBRFlROEl1QUFBQWtLVFdPazN5UzVWWXl6TEpuM1J6V1h0Zm5HZllyaTVmRFJGT2FzZllRWWNmYVFvakFBQUEyRlBDTGdBQUFOQll0WDlNWTNSMTM2ZVpzdWdIcFZoUHJYV1NZYnU2Sk1tamdaYlRkVmNYVXhnQkFBREFuaEoyQVFBQWdDUnRaNHZUV3V0SFNhYlI1ZVV5VmttV3BpenExTkJocStNQnQ5Kzg0ODh6aFJFQUFBRHNxVjhvQVFBQUFMeFdTbmxaU3ZsZGtqOGswYW5relZacHBwQTVGWFRwZlA5Ykp2azB5WU8yem4xN01NUjZ0Vk16ZFJua1daakNDQUFBQVBhWHNBc0FBQUM4d1lYUXl5c1ZTU0xrTXRTK3R5cWwzRThUZXVtemU4bnhnSUdSTHpyK1BGTVlBUUFBd0I0clNnQUFBTzlYYTMyYVpLWVNnMXFVVW00cUF5TTZEa3lTZk5UKzJTYy9KdmsrelhSRk90MXNadCtiSlhtWTVLRGpqNzR4Uk5pbDFqcE44bDJISDdscXY3dkFGUUFBQU95cEQ1UUFBQUFBM3E5OXNMNnF0Uzd6T3ZUeXl4MWU1VmRKL3BUaysxTEtqL2FBamU1N2l5U2Z0bE1CUFV3MzB3RU4yZFhsWHNlZmR5TG9BZ0FBQVB0Tlp4Y0FBTGdFblYwMlFtY1h0dUhZOEdHYTBNdGZaamVDTHo4a2VabmtwUzR1bzkzbkprbnVaUDBBeVZCZFhTWnB1cnBNT3Z6WW0yMEFDQUFBQU5oVE9yc0FBQURBTlpWU1hpVjVrZVRGdWVETEpNbUhXN1FhcXpUVEZIMHY0TElWKzl3cXlmMWE2M0dTbzF3dmlEbGtWNWM3NlRib3NoUjBBUUFBQUlSZEFBQUFvQVBuZ2krcHRmNHl6UVArcytETG1NSXZxelJURksyU3JFeFJ0TFg3MnpMSnpWcnJMRTNvWlhxRkgzOHc0RmY5b3VQUCs4cldCd0FBQUlSZEFBQUFvR050aDVTWDdaL1VXajlJRTNpWnBKbnU2Q3dNMDdkVm1xbUpYaVY1MVhZRlliZjJ0VVdTRzdYV3M2bU4zcmRmUFJpcXEwdXRkWjZyaFhBdTQ5aFdCd0FBQUlvU0FBREErOVZhbitaNlUwVndmWXRTeWsxbFlNZVBMV2ZCbDdNd1RQSTZESE5acjVLY2RXYzVDN084MHJGbEwvZW5TWktIU2VaditVOVdTVzRNRlhxcXRYNlhic011eDZXVTI3WTBBQUFBb0xNTEFBQUFiRWpiQWVhSDl2OStyeUtzdVQrdGt0eXV0WDZWSnZReXUvQ2ZmRFZnMEdXVzdydTZQTGFWQVFBQWdDVDVoUklBQUFBQTdJNVN5bW5iR2V0V2ttWDdqNWVsbFBzRGZvMTdIWC9lYVR0bEV3QUFBSURPTGdBQUFBQzdxSlJ5a3VTazFuby95ZWxReTIyN3VzdzYvdGl2YkZFQUFBRGdqTEFMQUFBQXdBNGJ1S05MMG4xWGwxVXA1ZGlXQkFBQUFNNll4Z2dBQUFDQVR1anFBZ0FBQUF4QjJBVUFBQUNBcnR6cjRUTWZLU3NBQUFCd25yQUxBQUFBQUd2cnFhdkxjU2xscGJvQUFBREFlUjhvQVFCY1hYc2ovOHhCa3NtRi8rU3pqaGU1VFBMSEMvOXNjZjdmbDFLV3Rnd0FBQnZVUjFlWEI4b0tBQUFBWENUc0FnRG4xRnFuU2M3LytZczBZWmFrKzdkVTEzWHZ3bmMvKzUrblNWYnRuMi9idjArVHJFb3BwN1l5QUFBOW5FZlAwazlYbDZYcUFnQUFBQmNKdXdDd2QycXRrelFCbG9Na3YyNy9uclovZHNIQnVmOTllR0hkazlmaGwyV2FiakdMNkF3REFNQjYrdWpxOGxoWkFRQUFnRGNSZGdGZ3A5VmF6MEl0bitSMXdHV3k1MldaNU9kdjNkNXJhNVcwd1pjMEhXRk9TeWtMZXhFQUFPODU1NTZuKzY0dUMrZWlBQUFBd05zSXV3Q3dNOW9waUdaNUhXeVpxY3FWelM3VU5HbTZ3SndtZVpZbUFHTXFKQUFBenV1anE4c0RaUVVBQUFEZVJ0Z0ZnSzNWZG0yWkpmbXMvWHVpS3IwNDY0Z3piK3UrU3RNQjVsbWFOMjZGWHdBQTl2ZWMvSDY2bnc1VVZ4Y0FBQURnbllSZEFOZ2E1enEzZkI3aGxrMmFKRGxzLzV5RlgwN3lPdnl5VkNJQWdMMDRQNThrK2JLSGo5YlZCWUJOLzQ2YnBnbHp6dEpNOTd3VXhBUUFHQmRoRjhaOFFYRVFEN0tIdE5LZGdaRWVDMlpwd2kySDZmNk5VYm94U2RQMVpkNXVzOU0wblY4ZU82NEFNTEx6aWttYWJtVU1aeWtJdTlQdTlYRGR2ckd1TGgwY0kwNUxLU3U3QmNCV255OGV0ci9mRHQ3dzc4NWU5cm5yZU04ZWo1SFpkWDlXWUF5QXJoVWxZTVFuVFUvVEpPY1p4cUtVY2xNWkdNbjRQOHpyZ0l2UTIzWmJwdTM2VWtvNVVZNjlHY1AzMDl3Y0JEYnZRU25sdmpMOGRIeWFKWG1xRXZaQk9obFBCMG1lOS9EUk56Y1lkbG4zR0hIVFF4eUFyZjI5TmtseWxMYUw3WHVza3R4Mm40TTlIU3YxdWo5YlN2Rk1Fb0JPL1VJSkFCakpoZEpocmZWSmU4SDBKRTJYRUVHWDdUZE5jaWZKazFycnY5ZGFIN1lQUmdBQTJHNFBlL2pNaGJBSWw3aDJuS29DR1BjOWVKTExCVjJTNW43VmsvWmxMUUFBTmtUWUJZQ05xYlhPYXExSHRkWi96OVZ1S3JDZEptbUNMODlycmQvVld1KzdVUTBBc0pYbjhZZnBweFByWGRYbFBmdmUvVFNkRjREOStwM3p2T2RsM0wvbTc3VWo5elVBQURaSDJBV0FRZFZhcDIzSTRiczBMY0xuMGNGbEgwM1RUSFB6WGEzMWFhMTFyaVFBQUZ0eFBqOUpQMTFkamtzcHB5ck0yL2E3V3V0UlRKVUoremIyNzZSNU9XclM0ekltU2I2ODVvOVBISmNBQURaSDJBV0FRWnhOVTVUa3UvWkd3RlJWYU0zU3ZBMzE3N3E5QUFDTVhsL244ZytVbHJkY1MwN3kra1VKWUgvRy9sSDZDVmRlTk05NllScGRpZ0VBTmtUWUJZRGV0Ry9mblhWeE1VMFI3M1AyUnRSMzdmUldNeVVCQUJqVitmMUJtbWtwdS9hb2xMSlVZZDZ5enoxUGNxQWFzRGZqZmxKckhUTGc5dG1hUHo5eC93SUFZRE9FWFFEb1hEdFYwVkYwY2VINjVrbWV0bE1jQ1VrQkFJekRVUStmdVlxdUxyejV1dkl3VFVjWDE1T3dQK1Arb0IzM3N3RVgyOFVVU1FKNUFBQWJJT3dDUUdkcXJiTnpJWmQ1ZXB4VG1iMHhTL0trMXZwZHJYV3VIQUFBR3p2WHY1TitIdVo5VlVwWnFUQnYyTitldUthRXZScjNzelJCbDIwTWpqaFdBUUJzZ0xBTEFHdHJReTVQWXg1MStqTk5jaVQwQWdDd2tmUDlhWnFPalYxYmxsTHVxekFYOXJlakpBOVZBdlpxM00vVDNGUGExdERJcWEwSUFEQThZUmNBcnUxQ3lHV21JZ3hnbXRlaEYvc2NBTUF3anRMUEE4aTdTc3U1Njh0SmUzMDVWdzNZcTdIL01QMU1rM2RacHlQNURBQUFya2pZQllBcnE3Vk9oVnpZc0dtU3A3WFdwMEl2QUFDOW52dmY2ZW1jZjFGS09WRmgydjNzd1BVbDdOMjRuOVJhbnlTNXMrR3Y4dldhUDM5YVNsbmFvZ0FBd3hOMkFlRFMycERMVVpMdjRpWWs0ekJMRTNvNWF0dnJBd0RRNGZsLytwbStLRWx1cXpEdGZuWVdkRGxRRGRpYmNUOXB4LzNocHI5TEtXV1JaTEhHUnp5d1JRRUFOa1BZQllEM2F0KzJ1Wi9rZWJTVVpwem1TWjYzK3lrQUFOM29hL3FpQjk2Q3A3M1duTGZYbVJQVmdMMFo5d2RwWHFJYVU4RHRicExWTlg3dVdKY3lBSURORVhZQjRKMXFyWWRwYmo3ZWl4dVFqTnNreWIxYTYzZW1OZ0lBV1BzNjRINzY2ZWE0VFBKSWhhbTFQa3dUcUFMMlo5elAwM1IwR2RYOXBWTEthYTRlZUZtMFB3TUF3SVlJdXdEd1J1MlVSVStUUEVreVZSRzJ5RFN2cHpZUzBBSUF1UHExd0VINm03N29iaWxscGNwN3Y0L05rdHhSQ2RnN2ZYVU1XMXNwNVRqSnpieC9TcU5WbWc1bE4vMCtBd0RZckErVUFJQ0wycmM0djR4T0xteTNlWkxEV3V0dGJZVUJBQzU5TFRCSmY5MDJUcHlYQVRCV2JZZVhtMjBnNy9QOGZLcWxWWkpuYWFZdUVuSUJBQmdCWVJjQWZ0Syt3WG1VY2MyYkRPdVlKSGxTYXoxSmN0c05LUUNBOTNyWTAvWEFLcVo3QUdBTGxGSVdlWCtIRndBQU5zdzBSZ0FrK2FtYnkvTUl1ckNiRHBNOGI5L09BZ0RnemRjRWgybTY0L1hoUVNsbHFjb0FBQUJBRjRSZEFQWmNyZldnMXZvOHlUM1ZZTWROa3p4dGcxMEFBUHo4dW1DYS9xWXZXcFJTSHFreUFBQUEwQlZoRjRBOVZtdWRKM2thM1Z6WUwvZHFyYy9iQnpvQUFEU2VwSmtDc2crbUx3SUFBQUE2OVlFU0FPeWZXdXNrelZ1Ymg2ckJuanBJTTYzUnJYWXViZ0NBZmI0K09FcC9BZmdIcFpSVFZkN0lOZCtzM2E2ZjVNK0RUTXNrZjB4eW11VFVGRk9kMXY2Z3JmczB5YS9idnk4NlRmSWZ1MWIvZHI4N2Z5eFpqVzM4dDl0bjFtNmJOeDMzbmlWWnRkdGxzUVUxbjdicmNaRGtMOTV4TEQrL3p5MGRsM2ZxZUhPMkQ3enRlSE4ydkYrMisvWHBqdFZnZG01TVgxei9WWkp2dDJuZEwvd09lZGVZZnRiK3ZXakh0Ti9qQU93bFlSZUEvYndRZnZLV0MyRFlKNU0wMHhyZDFWWWZBTmpqNjRONWtubFBIMzlhU3JtdnlwZmFCdGU1UGx1V1VvNHZmTlpoa2k5eXhSY2JhcTNMSkNkSnZ1cmlnZGtsMXVuWGEzejg5QnBUa3g3MytTQ3dyZnZuYmQwdjB5RnA5b2I2TDVJOEhpSmdzY2JVcm0vYjU5NjY3clhXdE92MmRic2RWcGY4anRNMWprMC8yOTduUHV1TFM0eTEyWVh2ZnBMazY0dnJQWUpqeG1kWDJOL2V0TSt0em0yWGs4dHVsL2Q4cjluRjVXeDR2MTFjZGp5dGNSenUvZmh5NFh0TzJ1MytlVnZyeVRVK28vTnQzL2YrY2ZGY29yMjMrZVVseDhEaGhYVS9HZXBZZTQxdGVwWGYzV2UxdkhmaDk4alhwWlFUWjFjQTdJdWlCSXhWcmZWcG54ZEl2UEVDOEtZeTdQeTRtaWQ1bVA3YWs4TzJPazV5ZDZpYlBIdHdyTG1mOW9ZTHNIRVBQR2orMmZGcGxtWUtSK3lENUtlSFJVOTd1ajVZSmZsMG05NDA3dUFZY2ZNNkQ4L1d1UC94MDNWOCs5MlAwczFMRFl0MjdDN1dxT1hZN3VuYzdQckJadnVBOGs2YUI2NWRqcUZsa3E5eWhXRElOYjU3dmU2K3NlWSt0MnJYN2RINzFtM044WGl6bExKb3Q5RzlkanQxY1V5NzFIZnZhWnROMjMxdDNzTXhlOVZlRTY4VmRodmhkZUNsejBIV1BHYmQ3RHM0Y1M3Y01lL2g0OCtDam4ydnc3WDNqMUpLT1RjT0hxYWJUdFhMZGg4NTN1QTV4eGM5YmRObGtzZDlIYS9XK0IzeTA3WUVnSzc4UWdrQTlrT3Q5V0dhRzFHQ0x2RG41bW02dkJnZkFNQytYQjlNMG5SODdPdjg1NEdXK3NOc3gvWmE3Mm02Njk0NWE4K05Iem8vZm12Tjd5ZjVMczJEMjY1ck5FM3pNUGQ1KzhMS1dPOHZYR2VmT3d1ZlBHMGYzdmY1SFdkSm5xZWJvTXY1Ny82OC9leWh4L2gzN2JyME1TYlBnbHZmcmRIMWgzNjIvN1FONGp4UGYxM1lEdHN4K1hUSWZmc2F0WmkzZGVocVN2WnBrcU4ydmFjRGI5TW43VEcwcjIwNmJZOVgzNDMxOXdnQWRFWFlCV0QzTDR3bjdZWHhIZFdBZHpwSWMrUHlRQ2tBZ0QzUTU5U21DOU5FRG1LUzVtRlpYOWQ2ZHpKQUtHSExycTluYVI2MjloRnl1V2lhMXc5aUp5T3F3VkVIKzl4WlY2bStmSkZ1QTJBWHQ4dlRJVUloUFFSMkx1TmVyZFYxOGViSDJmbVEwMnlneGM3YWZmdG9iRUhIOXJqVDF3dDhzd3dVTHF5MTNrbTNnWjNMbkNjYzFWcWZDSzhDc0t1RVhRQjIrK0w0N0FiU1REWGdVcVp4UXg4QTJQM3JoSWM5WGlPc2t0eFM1VUVjdEgvNlhvYno0L3cwQlVkZkFZcDNtYVY1TzM4TTIyQ1c3am9SOVBuZ2RUNUFMZTYxRCtENzJ0L21HOXJmalB2Tkgydk83dVZ0NnFXMWVYdk1tWTJvTEgyUDZiTlF5THpIN1hxVXpVMHRmOWE5WjJxRUFiQnJoRjBBZHYvaTJNMEp1SnBKZXhOZ3JoUUF3QTVlSjh6VDd3TzAyNldVbFVydjVQbnh3UjZQbTZNMDNWdzJ1UTJldTBZWm5Ya2ZnWmQyT3grTllOenI4TEtaMzlGanVKZTNyL2RGZWdtOHRNZUpUZGZ5ckp1eERpOEE3QlJoRjREZHZqaDJBUVBYMC90YlBRQUFHN2hPbUtYZkI2aVBTaWtuS3IyejU4ZDdPUTNDU0I1U25uR05Najd6THJmSlNJSXU1K253TXR5eDVtemJqK2s0ZTlSbkI2T1JPdXB5bngvWjc1Q3pFSlA3eFFEc0RHRVhBQmZId051NW1Rd0E3TXAxd2tHU0p6MHU0alRKQTVYZWFkTTBVekRzMDdnWjAwUEs4OWNvd2dmajhyQ0w2VUhhN1RxMllNRmtoTjlwRjQ4MTh4SFhlYjZIZ1pkT3dwMjExanNqL0IxeWtNMTJLZ09BVGdtN0FMZzRCdDVONEFVQTJQYnJoTE9IbFgwRjRsY3hmZEcrbUxjZGd2WmgzTnpQK0I1U252Rm0vcmgwRlFoNU10TDFPMmpIQS8wY2F3NHovbnQ1OHoyN0x6TE5tbE0rdGdHNHNRWkU3K3pMNzNJQWRwK3dDOER1WEJ6UEkrZ0NmUkY0QVFDMjlUcGhrbWFLMHo0N1Fkd3RwWnlxOXQ2NHR3ZmpaamJ5OVp4a3ZNR0lmVFZiNStGeEd5YVpqbmo5dmhTdzZ1VllNOFp1UG05enRHY0JpWFgzK2JGdlY5MWRBTmdKd2k0QXUzRngvRENDTHRBM2dSY0FZQnM5VEw5QmwrTlN5ckV5NzVYWkxqL3diQjl1UHRtUzdlRDZaRnp1cmJIUGZUbnlkWnRrelU0WHZORzJUVVArWkk5Q1Q5ZmU1OXZma1dQL1BUblQzUVdBWFNEc0FyRGwycHRiYmpqQU1JN2FGc01BQU50d3JYQ1VmcWRoT1UxeVY2WDMwaGM3dkc3M3NqMFBueC9xdGpFcXMzYnFrcXM2M0pKOTdndWJ1TlBmMGZmVGJ4aTFENU9NZDJxZU1lM3oyekpXdmpRU0FkaDJIeWdCd0ZaZkdNK2pvd3NNN2FqV3V0U3FId0FZK2JYQ3cvUWJkRmtsdVZWS1dhbjJYanBNY25zSHg4MDAzYjVNY3ByazYvWi9MOU5NVS9NWGFkNzQ3K0loOTFubmdmdDJ5VkdOalVkWC9Ka3VIaml2a3B3a2VkYnVhK2NkSlBrazY0ZHFwclhXV1NsbFlUTjNjcXpaMXFEQnZOYjZlRS8yZ3l2djgyMEFzWXZ6citXNU1YM3hYR3QyYmt5dmRieXF0VTZjeXdHd3pZUmRBTGIzd25nZVFSZlloRW1TcDdYV213SXZBTUNJcnhYNjd2NTR1NVN5Vk8xUk9rM3l1UDE3V1VwWnRsTVZUTk84YlQ3cjRweTQxbnBZU2puWnNkcmQ2K2h6SHFTWjRtdjVqbkU2YlpjM1gzTlpYMGJZNVRMT3dpQmZKMW1WVWhidE5wZ20rYnpkRGwxMFYva2lWd2k3dEEvR0R6clkzeDY5NDRIMW9sM1czVFJkT2RiWjV6NC8renpXUHRaMDJjMW4yVzZYaTJHbmFWNkhJcVlkZi85Tjd3ZkxDMlA2dE5aNmNHRk1kK0dxKy95NnYyTlhTZTYrWjRySXhibmZJMC9XUEliTTJqb0N3RllTZGdIWVFvSXVzSEdUTkhOVmYrb05HQUJnRDY4Vkh1eGd5R0VYbkhYYldWejhGK2YrMlhFYmZEbksrZzgrUDh2Ykg1RGR6YnNmNUI3aytsTmhYR2Y2ck5OTGpKMXAxbjg0ZXBvbUNQYmU1YlZCbU51MTFzZHBIbFplOThIM3BOWTZmOCtEMGI2ZEQxZ2xyN3ZZVE52OVpKWnVIN1JmMVhHYWg4ZXJOMnlEWlpKRnJmVkJtZ2Y0NndZRkQ2N1lLV0cyNXZJK3ZleExHTzEzdWwxcnpScjcrc0Y3NnJ4NHo4OC9YV05kYjE3eHYxK085UGQwRjhlYTgrdjQ0QkxqLzI1NzdMK1hiZ0tQc3cxMytibGJTbm4waG4zOHREME9uYlJqK3FpRDliM3F6MysyNXZhOGVka3djUnRtdmRtT3Erc0dYdDcxdXh3QVJrL1lCV0RMdEc4cENMckE1azNUM0ZENFZDa0FnSkZjSzh3SHVGWTRLYVhjViszUldTVzVjWmtIN0cxSGkwK1RQTTk2QVlTRGR5emo5RDM3NmxycjJ0TUQxblduZ3poTjg1RHlTbUg0ZG51Y1BheThidURsOHpSQmc2R2Rwbm5vL0tidHNXei9QbTYzK1dHYUxqU3pnYi9qR3grS3YyRTdyTklFQXY2WTZ3ZXh6bytOeGJyajZKTHJkcDF1bzNkei9iREY3QjAxWE9ZOUFaTjF4djRPVFpzejcraHpIcFZTN2w2eGZvdGE2NTBPOXZHazZXSzBpVzF5NnpLQjIzWi92RmxyZmJMbThmMmc1Ly8rNHJvdHJ6Z3VWbTNYcHFjRHJSOEFqTW92bEFCZ2U3UkJsNmNxQWFOeFVHc1ZQZ01BeG5DdE1FLy9RWmZUSkxkVmU1U3VGTEk0Ni9DdzVqSm5PMWJETDlmNDJWV3VFWFE1dHoydTA2M212TU4yT3B3aEhaZFNQcjFzQUtHVWNsSkt1ZG11NTFEZE1VOHVFM1M1OEQwZlpmMEgrRmQ1ZUh6ZExoQ3JxNjdiaGZGLzdYVnNPNU53ZlY5MDhCbTNyeEowZWNNKzNzWHY4dmtHamp2WDZTeDNPMnQyK1dtNzR2UXgvaThlcjA2dnVVM1hPV1laendCc05XRVhnQzNSWGtDdTA5b1k2TWU4ZlRNS0FHQlQxd3J6OUI5ME9ac2l4eFNPNDNOOG5RZGs3Y094WStYNzZlSDlkSTJQdUx2dTJHaW5JVm11OFJHSEE1WnNVVXE1ZmMzMWZKU21PK2JwQU4venVnR2lkWU1BUTl5M09kbmdkNXc2YWx6N1dIUFFRZjBlckR0dFdmdnpYUVJlaGp6dUxLL1RXYTQ5Tmo4WWNMeGNkMnc5MjlCdWFUd0RzTlZNWXdTd1BaNjZBSUhSZWxoclhWejNMUndBZ0RWOU9jQXlibDYxdFQ2RCtXcU5uLzA2YTB5cFVXdWQ3Y2pVSXVzOHNGMnQrK0Q1bk1kSjdsM3paei9MY09HbHRSNlN0OGVTdnFlRFBiN3VNYXVVc3F5MW51YjZIUnF1MHEzbGJxNzNjSHk1eHJnOWlLbEx0dkZZa3lTblhVMGxXRW81cnJWK3Z1WjNHdks0czg3dnVwTTBVemRkTjRoeWtNc0h6RzVlZDl1dU1hYTlnQVhBM2hKMkFkZ0M3VFFwYmtUQXVEMnR0ZDd3dGpNQXNBRTMwNFRqKzdwbXVDM1VPMXJMZGJaTktlV2sxcXFLMTU5S0prbE9yempGeGJ1c2N5MHhHNmhXeDFzU2ZQdTZnNS92L1Q3TWtNZld0bVB3UE5jUFZMSFpZMDJ5M25SbmIvdThkY0l1c3dGcmQ3TEdPRnZWV2hjWm9CUE5rQUhRdGl1Wk1RM0FYaE4yQVJpNXRpWDVYQ1ZnOU02bUdydXBGQURBa05xSE9IMEZYaDUwMkxXQzdwMTA4Qm1MRFB2QWNveldHVGV6a2RSdk90Qnl2dDZTYmJybzRPZTM5Z0Z5RzJ3NWFLOVREOUtFTFBaOW5JL0JPdHRnMFhXUW91MWlkSnpyMzNlYzFscW5Bd1RnVGp0WXhyY1pkdHFscnNmMHREM09uLzNwYkV6dlVKYzJBUGFRc0F2QXVDOWtEcEljcVFSc2pWbXQ5WDVYYllVQkFDNnJwOERMc2ZPYTBmdTJnODlZS3VOdVRCbFl5SVNRQUFBZ0FFbEVRVlE4MEFQTGJlanl0T3lnNCtacXhOdjViQnFpYVpKZm45dC9KOUVWT0NQZmJ1dDQzTk5YVzJzNnUzYi82L3YzeUhJa245SGJzVHV2dzJtZjVQVjBTOU9ZMGg0QTNrbllCV0M4RnpwblhTS0E3WEt2MW5xaTFUOEFNTFNPQXkrTFVzcHRWUjI5WlFlZjhjYzl2L1lXRHJqYWNXYTVEK09pbEhJNmxpbSsybzRPaDBrK2orNHMyMnl5N3UvbG5zYjB1dFBaSGZUMTNjN1pxV0JuKzN2bmkzWTgreDBFQUd2NGhSSUFqTlpScFBkaFd6MXBBMnNBQUlOcXV4bmN6SHJkRjA2VDNGTE5yYkJTZ3JYdDBubjd6T2JjblhGUmE1M1hXcDhtK1M3SlE5dDM2MDNYMmFkN0Rwb3RIRU43SDgrVFd1dWRXdXQzU1o0bnVSTkJGd0JZbTdBTHdEZ3ZnTzVraStlUkJUTE5Gcy92RGdCc3R6VURMNmRKYm5Zd0JRakRiR3ZkQk9IUGZidk5YNzdXT21zZmlCOUZ3R1hYN2hOYzE3NGY2eGRiUHFibmVSMWFteG9LQU5BZFlSZUE4VjBBSGJRWFA4QjJ1OVBPdXd3QU1MaHJCbDVXU1c0SnVnQnNScTMxWVpxcDZLYXF3WUFFSi9zWno1TzJPOU5SZE1BQmdGNEl1d0NNejVFU3dPNk1aOU1aQVFDYmNzWEF5eXBOUjVlbHlnRU1xMzBvZmphMUNRek5mWXZ1eC9SQm1tNHVNOVVBZ1A0SXV3Q002MExvZnN6WENydGtHamNyQVlBTnVtVGc1U3pvNHMxdWdNMTRHdmVEZUx1K3d5aFRKZTVPclhYYWpta2hJZ0RvbWJBTHdIZ3VoQTZTM0ZNSjJEbjMydkVOQUxBUjd3bThDTG9BYkZBN2RaRnJ4dDIzenUvWnZ2ZVBxYzNUcVNjUmRBR0FRUWk3QUl5SDZZdGdkejFVQWdCZ2s5NFNlQkYwQWRpZ1d1c3N3M1lEWFNZNVRuS2krb05icmJtdkhQUzBEMDZ5WHRobGFkUCtySjczTTJ4NDdUVEpvNndYcGdLQXJmV0JFZ0RzNVlVUU1LeFpyWFZlU2psV0NnQmdVMG9wcTFycnpieWVMdU91b0F2R1JWblVXcS83NDh0U3lnMVZaQTFkZC9oZDVuWDRZSlhrMi9aL0w1S2N0c0hIcy90UWg4by9xSFYvMzM2UmZnSU5oeDNzYzd6MlpRLzd6ZXBjcmYvWS92L1RDMlA2cWRJRHNJK0VYUUEyckozSDlVdVZnSjEzcjlaNmNuWWpBZ0JnRTg0RlhtYWxGRy8yUTJPVjYwMDVNYTIxSGdpTmNSM3QvYUJaQi92dWNaS3ZTeWtMVlIzOTc5L3JIbXVTSnBSeXQ0ZXY5c1dhNjJXL2V6Mm01MWwvK3FKbG1zNUxqLzF1QVlEM000MFJ3T1k5akhsY1lSOU1NMng3YWdDQU55cWxyQVJkNEdmV2VhRG81Uld1YTkyT0dpZEpicFJTN2w0amNQQ0o4bS9FWW8yZm5iWmhpczYwMDJqTk5uVHMzRVdmcmZuekQwb3BaMlA2cXJXZEtqOEErMGpZQldDRDJvdEtiV05oZjN6WnpvY05BQUJjejdTSHozeTJ4cy9PMnc0ZGNGWHJCRTRXcFpSYmEzUU8zYnA5ZGtmRzJiTTFmLzVoVi9jVTJzODVXdk5qRm9ieHo4elcrTmtIcFpUN2EyeEx2NGNBMkV1bU1RTFlyQ01sZ0wweVNkUE42YlpTQUFEQXRVeHJyYk9PcDg0NFNYSnZqWjkva3VUVGRiNUErN0J5clU2UTEzMVF5dWIyNVRWKzl1NGErOW8weWNFVzFtdWVaTnYzOFpQMm5zQjFUWkk4WGZkNDAzcVk5UU1Tend6anpzYjBvelYrMW91VUFPd3RZUmVBRGFtMTNvblVQZXlqZWEzMVFTbGxxUlFBQU95cDFaby9meThkZGhRb3BaeldXcGRyWEtNZjFGcVBTaW5yaE5xUHN0NER5OU5zZnhDQUsreXphNDZmYmZSbHJmWFJHdDFzeHJEZGxyWFcwNndYTmpxb3RSNGx1WHZkV3JRL1AxOXpkWmFtUk96TVlzMzkrcDRTQXJDdlRHTUVzQUh0RzFzdVJHQi9HZjhBQU95dE5SL1VKOG1zMXZya2ZkT2ExRm9QMjRlNmwvRjR6ZTgwcjdVK3ZjNVVLKzEzWFBmTi9NZjJyUDF4M1NsOTJ1bTA1eHY4Nm9zMWZuYVM1R203RHU5YXg0TmE2OE5hNjFpNzEzelZ3V2ZNMjFvY1hIVy9xYlUrN1dnZmNNenB6c0VheHdJdlV3S3cxM1IyQWRpTU8rMUZPckNmZEhjQkFJRDFIQ1k1ckxVdTh1ZFRhWHlXNXVIaDJYWDNaVHF1SEdmOVVQb3N5Zk5hNjFkSjN0dUJvbjFvL3pEZFRDbHpiSmZZcjJ2S1hMR1RUeHVNZUxMbDYzMlFKdVJ4bWlZNDh4L24vdDBuN2IrZnR2Ly82NUd1dzlsVVJwTU9hdkc4MW5xYzVLdDNoUWpiYmY5bHVnMDZPZVowWjNLZDZmbHFyZk9zTnkwV0FHdzlZUmVBZ2JWZFhiNVVDZGg3OTNLNW0rNEFBTENMRm1uQ0lldWFkZkU1N2ZRaXgxbi9ZZkJaSjlkNzU0STR5L1pQMGp5Zy9uV2FzTTYwbzFvZWIvUFVMbHp2ZXJMV3VpeWxIRi9tUDI2N1A5ekw1bCs4ZXRiUnVEOUlOeUd4d1pWU1ZtMGdycXVPci9NMEw5UXMwMHhuOXUyNWYzY3hBTlNWWXkvdmRPNUpyZlhtWlRxZm5lc1lma2ZaQU5oM3dpNEF3eHZEelFWZzgzUjNBUUJnbjUybW00ZmVYWHFRYmpzZnpBWmF4d2QycDYyMGJ2RGpxTmI2UlpxdUhpY1gvMlhieldPVzVvV3I2WWpHL2Q0cnBkeHZ0MTJYMjJYYS9qbnMrZXV2a3R5MUZkOW9zY2FZbnVSMXA1N0hiK3J5MG5ZRCs3ejlQZVhlTWdBaytZVVNBQXlublZOWjZoNDRjMDhKQUFEWVU4L0c5b1hhSVBxMkJVZDBXTmhlWFFRL1ptazZRdFJhNjcvWFdwKzJmOWNrejlOTWNUSWQwVG92YlBhZmJHdW4xd2M2U2ZVNnB1ZHBwdXA2MDVoK211YStzcUFMQUxTRVhRQ0dOVmNDNEp6RHR2MHNBQURzbGJZVHhSZ2ZtRDdLOW5TZjBHRmh1eTA2L3J4Sm12RExaTVRqZnBYa3hLWlAyczRkajdadG55MmxQTEwxM3VyeHZvMXBBTmcwWVJlQWdiUVB0TDlVQ2VDY1NYUjdBZ0JnZngyUDdRdTFEK052WjV4Qm5JdHU2N0N3dmRwdGQ3eUhxLzdZMXYvSmcyeFh1TzZXVGZiT01YMmFaS2tTQURBY1lSZUE0V2d6Q2J6SkYwb0FBTUNlK2lvakRKVzBEeXpIM2pIbHVPMk93M1o3c0c4cjNPNjNwemI5VDRHbm14bC91RzZWNUtad25URU5BR01qN0FJd0hGMWRnRGVaMWxybnlnQUF3TDRwcFN6VEJGN0crTjJPMDNSNEdhTnRDT053K1RHd2o5UEMySDlmN3dOakQ3eWNCVjBFbEM3L3UwT3RBR0Fnd2k0QUEyZ2ZaT3ZxQXJ5TjdpNEFBT3lsVXNyOWpQVEI0RWdETDZmUllXSFhiTk5VTmwyTnJVWDJNK1R6dG5xY3BnbThMRWYyMVFSZHJtZGJwc0lEZ0swbjdBSXdqSHRLQUx6RHJOWTZWUVlBQVBiVXpZdzc4SElyNDNod0tlaXlnOXJ0dVltSDQ0c05yL2ZkSk1mMmdKL3FjWnJrMHhFZEM4K09ONEl1MTl1V20raGV0RkI5QVBhTnNBdEF6MnF0c3lSVGxRRGV3MVJuQUFEc3BYUFRlSXcxOEhLU3pUK0VQb21neXk2UGdiUE9Ia050MytOU3lzYW56aW1sM0k3QXk4K09oYVdVVDlOMCs5bWtSeEYwV1hkYkhtZll6bUMzTTk2cDl3Q2dOOEl1QVAwelBRbHdHWE1sQUFCZ1g1MEx2RHdhNmZkYnRnK2g3MmJZZ01BcXlkMVN5aTFCbDUwZkE2ZEpicVQvVU5XRE5tU1NOQ0dxVGEvMzdRMk1xN0h2Qy9mVEJPd1dBeTk2bVNia2N0ZnhwcFB0ZU54dXgyWFB2eU51bDFLT1N5bkxqRzhxTEFEb2xiQUxRSTlxclpONGdBMWN6cVRXZXFnTUFBRHNxN2Fyd2QwMER3ZTdlZ2kvNnZnN1Brb1RTSGlRL2gvT0h5ZTUwUzZUL1JrRG4vYTBmeTNUQkJudW4vdG56MGF5M21majZyakQ5VjV0K2I1dzJuYmZ1WlgrQTFETE5JR0pHNldVaFpIWTdYWnNmNmYxY1J4ZkpQbTBEZFdjLzJjQXNEZUVYUUQ2TlZjQzRBbytWd0lBQVBaZCs1RDNWcHFIMzNkejlZZDNwMmtlTE40cXBmeXFoKyszYWdNRFo5K3Z5d2ZSeXpSQmh4dWxsTnU2Syt6dEdEamJ2N29JdlN6VGRITjVVNUJoTWFKMVhyVmRYbTZrbVk3bDVJcnJ2a3dUbHJtZDVGZTdNZ1ZQS2VXa0RVRGRUTGRob0xRMXZ0WHVHOGRHWHEvNzl0MjhEblN0NnpSTk9PbG0yODNsdkdjcURzQmUvWjVWQXNhcTF2bzB5VXdsQnJObzN4YWcyLzM0dXlSVGxRQ3U0RmZiZmtPNzFuby95VDJiRWtiaHdZVzNkL2Y5M0d5VzVLbEsyQWZoTGNlSVNaS0ROVDdpOURybmNiWFdneVNUNnl5d2l6ZndhNjNUTmE1YlQ0YzhkejFYcTR2ZitUVE5BK0RWcGg1d3QzV2NKZm1zL2Z1eU5WMjEzLzlaa3BNaHZuLzcrekNiMnVjR0dJL0xOendBSHJKT25lK0hiUmZRejl1YVhLWXVwKzJmcjBzcEp4MnY1OURqL215OFg5d25sdTJmdGZmTGRZN0RROWZqM1A3d1dWdVBxMnkveGJuanpXSkQyM0VqTlI3RE1lWENkem04NHUrTDAzYjdQWDdYOGVXYTYzbWwrbTdEN3hBQTlvZXdDNk1sN0RJNFlaZnU5K0dESk05VllxK2MzV0E5VGZJZjUyNGt2UGNpOGkwWGltZi83Qy9hQzlWMWI3NnpIVzV2K3h0VndpNHdLb0lHZi83N1Z0akZQZ2d3NUgyQmR6MUFQOVc1aFRYT2FkN0l3K1M5M0IvZWQ3K28wN0FHZzI2LzFhNTBLUUtBUG55Z0JBQzkrVUlKZHRZeVRhRGwyelJobHJWdkdyemxadFRpTFJmQjB6UnZmY3lTL0RwWGUydVE4ZnM4M2JTMUJRQUFOc2dEU25yY3R4YXF3TG45WVpVUlRVbUY3UWNBUXhGMkFlalBvUkxzakxOV29ZTzNlWDNMUmZBeVRlRG1wd3ZoOWkyUVdab1dxSWNSZnRucVkwZXRkZUlOVHdBQUFBQUFnRGNUZGdIb1FUdDM3bFFsdHRwSlhzK1p2aHo3bDIyREVTZnRuN3R0OTVmRE5CMkdUSDIwZlE2anV3c0FBQUFBQU1BYi9VSUpBSHJ4dVJKc3BXV1N1MGx1bEZKdWxWSWViZXVjeHFXVVpmdjlQMDF5SThtakpEcUZPSVlBQUFBQUFBQnNQV0VYZ0g3TWxHQ3JIQ2U1V1VxNXNjMEJsN2RwZ3k5M1N5bS9Tbkk3VGFnSHh4QUFBQUFBQUlDdEpPd0MwTEZhNjBGTVliUXRqdE4wY2JsZFNsbnN3d3FYVW81TEtUY2k5REoyazFyclRCa0FBQUFBQUFEK25MQUxRUGUrVUlMUk84bnJrTXR5SHd0d0x2UnlONlkzR2l0VEdRRUFBQUFBQUx5QnNBdEE5MlpLTUZxbmFhWXJ1cld2SVplTFNpbVBrbnlhSmdDRVl3a0FBQUFBQU1Eb0Nic0FkS2pXT2sxeW9CS2o5S0NVOHVtK1RGZDBGYVdVWlNubFZwb3VMNHpIUVh0TUFRQUFBQUFBNEJ4aEY0QnV6WlJnZEpaSlBpMmwzRmVLZHp2WDVjVzBSbzRwQUFBQUFBQUFveVhzQXRDdHo1UmdWRTdTQkYxT2xlSnkybHJkU0RQbEU0NHBBQUFBQUFBQW95UHNBdEN0UXlVWWpRZWxsRnVsRkYxS3JxaXQyYzBJdkl6QlRBa0FBQUFBQUFCKzdnTWxBT2hHcmZVZ3lVUWxSdUYyS2VWWUdhNnZsTEtxdGQ1TThqVEpnWXBzekxUV09pMmxMTGZzZXg4bldlemc5bmhvUEF6dU5NbGRaVmpMVWdrQUFBQUFnRjBqN0FMUW5aa1NqSUtnUzBmYXdNdnROSUVYUWE3Tk9jaVdQYXh1d3puTFhkc1F0VmFkb29hM0txVXNsQUVBQUFBQWdQTk1Zd1RRblUrVVlPTUVYVHBXU2psTmNsc2xOdW96SlFBQUFBQUFBSGhOMkFXZ096TWwyS2k3Z2k3OUtLV2NKSG1rRWh0ajJod0FBQUFBQUlCemhGMEFPbEJyblNTWnFzVEdISmZ5LzdOM3IxZE9KTWtDZ0NQMzdQL1ZXckFhQzZheEFHRUJqUVdvTFlDMmdNWUNHQXRhV0VCakFSb0xSbU1CV2d0VzE0SzRQNVJhTkN6UWtySWtsYVR2TzZjUFR6MHFNaXZya1ZHUlJUTEdmcjJOQ0V1NEhNZElDQUFBQUFBQUFMNlM3QUxRalpFUUhNMnNsR0tablQwcnBTd2k0bFlramlNelZYY0JBQUFBQUFDb0pMc0FkTU5FOUhFc0l1S0ZNQnhHWFNacUxoTEdHQUFBQUFBQWdHT1M3QUxRalYrRjRDamVsbExtd25EWW1BdUJNUVlBQUFBQUFPQ1lKTHNBZEVQVmhjT2JsbExlQzhQQlBjU3lvZzdHR0FBQUFBQUFnS09RN0FMUUtETUhFVEVVaVlPN0ZZTERLNlVzWXBud3dtRkpkZ0VBQUFBQUFLZ2t1d0MwTXdsOWVKTlN5a3dZanVhVEVCemNvQ2JXQVFBQUFBQUFYRHpKTGdEdEpMc2MzbHNoT0txcEVCaHJBQUFBQUFBQWprV3lDMEE3MVJZT2ExSkttUXZEOGRTbGpGVFdPVHpKTGdBQUFBQUFBQ0haQmFBTFQ0WGdvSDRUZ2w2WUM4SEJTYXdEQUFBQUFBQUl5UzRBWFRBQmZUaXpVb3FLSXYzd3B4QWNuTVE2QUFBQUFBQ0FrT3dDMEFWTGl4eU9xaTVjTW9sMUFBQUFBQUFBSWRrRm9FbG1tbncrckFjaDZBMFZkZzVQWWgwQUFBQUFBRUJJZGdGb1pmTDVjS2FsbElVdzlJYTJPQUlKZGdBQUFBQUFBSkpkQUZxWmVENmNUMElBRXV3QUFBQUFBQUFrdXdDME1mRjhPRk1oNkpXaEVBQUFBQUFBQUhBTWtsMEFPQW1sbEprbzlNcFFDSTVpSkFRQUFBQUFBTUNsayt3QzBPWmZRbkFRVXlIb25YOElBUUFBQUFBQUFNY2cyUVdnelZBSURrSlZsLzZ4aE5keFNMQURBQUFBQUFBdW5tUVhBRTdCL3dsQjc0eUU0Q2lHUWdBQUFBQUFBRnc2eVM0QWJZWkNjQkJUSWVpUHpMd1dCUUFBQUFBQUFJN2w3MElBME9SR0NBN0NNa2I5OGx3SWptWW9CQUFBQUFBQXdLV1Q3QUxRb0pReUZRVXVTV1lPSW1Jc0VrY3pGQUlBQUFBQUFPRFNXY1lJQU5qR2F5RUFBQUFBQUFEZ21DUzdBQUFieWN5cmlIZ2pFZ0FBQUFBQUFCeVRaQmNBNEZGMSthSjdrZWhGV3d4RkFRQUFBQUFBdUdTU1hRQ0FUYnlMaUN0aDZJV2hFQUFBQUFBQUFKZE1zZ3NBOEZPWmVSOFJZNUVBQUFBQUFBQ2dEeVM3QUFEZmxaa0RpUzRBQUFBQUFBRDB6ZCtGQUFENFZtWmVSY1I5V0xvSUFBQUFBQUNBbmxIWkJRRDRpOHk4aTRnL1FxSUxBQUFBQUFBQVBhU3lDd0FRRVJHWk9ZNklOeEV4RkEwQUFBQUFBQUQ2U3JJTEFGdzRTUzRuUnpzQkFOQ1hhNGxoUkZ4SHhLOXI1Nm16aVBnekloNUtLUXRSQWdBQVlCOGt1d0RBQmNyTXE0aDRHUkhqaUJpSXlFa1pDZ0VBd0VtZGU0OGJ6dUdtcFpScEQ3ZHBFTXVFK2RmZitlZFIvZlZkWnY1V1NyblRsaEVSTVNtbHpNOXNtMDVGTDJNUEFBQzBrZXdDQUJlaUpyaU1ZcG5rY2lVaUFBQ3c5M1B3UVVTOGk5MFR6SjlHeExTSDIvUjVnMnVLUVVTOHljeW5FZkhpVEtxOHZJeXZ5VHpibWtiRS9NeTI2VlQwTmZZQUFFQUR5UzRBY0ticVRlaFJMRytRWDRlS0lBQUFjR2pYMFZaSmNaU1p3NzVVcGRnaTBlVXYyeEFSSHlQaW1lNEFBQUJBVnlTN0FNQ1p5TXhoTEc4ay8xcC9WYjBGQUFDTzYyVUg3L0VxSW01N3NqMnZkN3pPR0dYbXVKUXkwU1VBQUFEb2dtUVhBRGhCbVRtS1phV1dZU3dydDF4RjJ4T2pBQUJBdCtmc3craG1lWmh4OUNEWnBWWjFlZFh3Rm04aVlxSm5BQUFBMEFYSkxnRFFVL1htK0RDK0pySThqYThKTGdBQVFMKzk2dWg5QnBsNVhVcDVPUEwydEM3Sk5Nek1VU2xscW1zQUFBRFFTcklMQUJ4SnJjNFM4VFdCNVY5cnZ4K0tFQUFBbkxSeGgrLzFNaUtPbmV6U3hUWEtLQ0ttdWdZQUFBQ3RKTHNBUUljeWMzMDVvZlhmUDYyL0RtSzNOZTRCQUlEVHVTNFlSN2ZMakY1bjVyQ1VNai9pWmozVnNnQUFBUFNGWkJjQStNYmE4a0VyMy83NVg5LzhlU1JxQUFEQW11ZDdlTTl4Uk53SkxRQUFBRWgyQWVETWZaTzRNbHI3cC9XbkV0Zi9Ed0FBUU9zMXlQVWUzdnBsSERmWjVmZVE2QThBQUVCUFNIWUI0S1JsNWlqK3VqVFFLb2xsSkRvQUFNQVJqUGYwdnNQTXZDNmxQQnhwdTJZZHZNZUQ3Z0VBQUVBWEpMc0EwSHVaZVJYTHlpdFg4WFVKb2F0WUpya0FBQUQweWNzOXZ2ZnpPRkxDU0NubElUTVhEZGRoODFMS1RQY0FBQUNnQzVKZEFPaU56RnhWYUJuRk1xbmxLcjVXYkFFQUFPajdOYzExN0hlSjFIRm0zcFpTRmtmYXhMY1I4VzdIMTk3cUlRQUFBSFJGc2dzQVIvRk5Zc3V2OWZkRGtRRUFBRTdZeXdOOHhqZ2kzaDlqNDBvcDd6UHphVVJjYi9uU3lSR1hYd0lBQU9BTVNYWUI0Q0F5Y3hqTHhKYW5vV0lMQUFCd2Z0YzhnOWcrQ1dRWHIrSkl5UzdWVGYxMTAyMTlYMHBSMWFXL3VsNWFhdEI0dlQrdlAxMWFhR1lBQURnL2tsMEEySXR2a2x0R29Xb0xBQUJ3M3NZSCtweGhabDZWVW1iSDJNaTZoTktMekJ4SHhKdWZYT3ROSStKdEtXV3FhL1JYMTRsSW1UbUtpTThOYi9HaGxIS25aUUFBZ01kSWRnR2dNM1Y5K2xWSjY2R0lBQUFBRitUVmdUL3I1cGdiVzBxWlJNUWtNMWZMMHc3cVB5MGlZbnFzWkJ3QUFBQXVnMlFYQUhaV3E3ZXNKN2dBQUFCYzRyWFJLQTZiOEgrZG1iZTF5c3BSMWFRV2lTMEFBQUFjbEdRWEFMYXlsdUR5TXRyVzRRWUFBRGdYTHcvOGVZTjZYVFlSZWdBQUFDNlJaQmNBSGlYQkJRQUE0SWZYUzZ2RWswTjdGWkpkQUFBQXVGQ1NYUUQ0cnJVYnRpOWp1ZjQ2QUFBQS8rczZscFZXRHUwcU02L3FNa0lBQUFCd1VTUzdBUEFYZGEzNWx4RXhGZzBBQUlCSHZXcDQ3U0xhRW1WZVJvUmtsNTlmMzQ0aTR0ZUlHTWFQSzVYTzY4L3ZFVEV0cFV4Rmp5MzYyTlYzOXVOWlJNeEtLZk1EZnBlcjcvVDNuNDB2c3pvRy9WNS9QeTJsTEU2MEhhNGo0bW5kNXRFRysvbXNsUExROHpGckVJOC9mRGF0Mi9SbmJiL1pDYmJkVlN5VFJuK3Q3VGZjb0wrZXhEaGRIeVJjalJGUGE1dGVQWEpPTUR2MU5sM2I5aC90ajlPNkR5NE8vSjJHYS92WDFTTmo1R3E4bUszMXVaTWNIOWYyczVlUGJIZnZ4OGdOOXJIaFQ4YVFWZDliSDBlY1E4TVprT3dDd09yRWNCekxtN1JERVFFQUFOam9XbW8xYWJDcmgxamVwTi8xT213Y0ViY0gzTjV4TENkTGRuRjdpRW1GT3VuOVBMYXJ1RE9zUDZPSWVKT1ppOW8ydjVrSU9hdjk5Zk9PTDUyVlVtN1gzbWNZRVc4MjZXT1pPYXY5YUxMSE1lalZqdVBJYXV3YXJiM2ZOQ0krUk1URHZpWjJ1eHBINnIyczEvVzlobHZ1NTlHWC9YenRvYk5kcW9TTnZubXYxVFo5NkRvWnBQYTFkenUrL01QNlBsRDNvZkVXYmZkdGYzMlRtYXRqNktkOTdWODd4bW13dG0zYm5oOE12dE9tODdWK091L2grUGh0MjQ3cW1QU3o1UjNmckk4MysyeS9odlpZSHk5ZXI0L24reHdmZXpaR1JpeVh5L3pRcCtTeXhuMXN0WDlkNzJQTXJQMy9UZVBiN09WOHVYRU0vNTl6SVFBMlBNRktEdW16WG5lUis5a3dNKzh6OHo5MkFUZ1pkMFl2NXliT1QyRDNtMDkySzhjdDZIaGN1Vy9jUjBhWiticnhQY1lIM042N2xtM2Q4M2NiWithWGZaeVAxQW1DMXZQQjBZWHNFNk8rSGpkYXowa3pjNUNaNzNaOGp5OWQ5b0VhNTMxZW4veW43dStEUG80amRYLy9UOGY3K2ZBSSs4bysyL0R6SHZwYzAzNWQ5Nkg3VStxdk85eGp6Vk5wMDQ3R3gvVzIvZGg2bkQyUjl0aHJmK3Rvakx6ZXd4aDVkZVR6aTMzdlkxOWF6Nm5yZnRBYTkvczl4ZTlkNC9jYUIvVFUzNFFBNENKdnlJNHk4Mk5FZklsbEp2UkFWQUFBQUxaMjNmRGFlWDJLdExWTS9NdExib0I2ZmZzbEl1NWpQNVZLUnhIeGgrUzl5MVluTlQ5SGZjSi9COE9JK056QlJOcXdKdDk4anNlWHVHa3hpT1hUNlY5cXRhUytHTlQ3V2ZmUjdiMnNVZDNXdTBQMHBib04rMjdEVWUxekg0K1pCTEsyM2RmeDlUN2tQdnZyK0FqYmRyZkhiZnRlbTc3clE1dXViZjlWM2Y3cnh1MjY2bWovMm5kN3JQZTMxOUV2ZzVvczhYRVBZK1JSem9WV1NYSUgyTWVHRVhHZm1YL3NtbFJXSy82MG50ZnY2NWpiRXJzdXRndjJScklMd0FWWlBUVlNMNml2UlFRQUFHRG42NnR4dEUway9CWVJVWmNsYUxtQlBEcDBSWUtleEgrUW1lL3E5ZTBodHY5TjdIZGltdjVhSmJwMDhWVDdmVU9mSDBmRUh3ZnVoNE9JK0xpdko4MTNqTjgrNzJlOTJXZHlTQWRKQWJ1NGp1V2svREdyTXJ5TTdpZmZmOVJmNzJzVmlyMG5nOVRrc3oraWZkbVNiYjJPWmVMQlZRLzJ5WC9WOFhIUVFkdTk2MkQvT21SN0RDTGkzYUg2MnhaajVIalBZK1RCdG5mUFNYSS9jaFhMNUt1N2x2UDdsbjdWZFpKcGZiK1dOdHZyMGwzUVNySUx3QVg0SnNsbEpDSUFBQUROV2l1cXJDZTRmR3A4cjFjWGRvMTdGVzFWTm1BYlY5Rk5va3RMbjcrUDdxdVpiR05jbjNZLzlvVHVJVDcvT3BZVG5ZT08yM0ExYmcyT0ZMZGpMa015UFBEbmpXTFBDVDVyaVJYSGpPbm5IaVM4aktNSEZjUFhrZ0dIUi9qNHZmZTNubzJSbzMyTWtkKzA1NzRxMUd4anA4U2VVc29zSXVaSHZzYm8rdjErQytneHlTNEFaMHlTQ3dBQXdGNnV0WWFOMTFnUHRhSkxSRVNVVWlheExCRytxK3NMaXYxcXd2aEtUK1JDK3Z5K245VGYxRlVzSng0dndWVTBWT0g1eWJoMXpLU0FZeWU4SEdONy85akhza1k5YWM5TGJOTWZ0Y2U3THZkWGJiSHhHUGw1VCsyNXFxYldoK1BlS0haTDdHbE5Ecm51S3Btb3ZrL0xkY0tzSnZCQWIwbDJBVGpQay93clNTNEFBQUI3MDFwSjVYdVZYQ1lON3pmc3V1UjVYNjkxb3g4VGpIQ29Qdjg2K2pIaHR6S3FFOHVYNExwaEdZdjFOaHpFY2FzVHJGc3RTM1ZKWStoOWx3a3ZOZG0xVDhlaFZaTEZSUjRYYXpMZzY1NjF4Y1VrdkhSOVBGaExkT2xUREs5MjJNY21IWHh1VitmMXJlT2ZxaTcwbm1RWGdQTTZ3VitWK0R2MEdzNEFBQUNYWk56dzJrV3Q1UEt0RDQzZjZlVTVCN3lIRTR5dzd6NC9pb2crSnBhOHJ0L3RFcnpwWU9MNlRSeG5hWlVmR2NieHEyQWMybjJIQ1FoOVNWeGFON2pBTmwwdFhUVHVZVnRjVXZKUlo4ZURuaWE2ckd4VnlhYVVzb2oyaEpldWxpaHR1VDVZeEYrWFhZVmVrdXdDY0Q0bitIY1I4YVdISi9rQUFBRG5kTzExSFcwVFhkKzlhVnhMaExlVUNiK3VDU0huR1BNK1ZVYUFRN24zM1hwaDU0U2pPaWEvN3VFMlhWOVF3dEpLY3dKQ3ZmZmExNm9kMTVkUTRXMnRMVVk5SG9kVzV5ekd5TzJQSzMydWlyTnRKWnRQSFh6ZXNIRS91V3FNNlVOTjNJRmVrK3dDY0FZbjk1bjVSeXlmRkhIakR3QUFZTDlhSzZqOHJCeDRhM1dYOFpuRy9FMzBld0lFT2xVckZneDcvQldIWFM0TjAzT2poc1NRTnowZlZ5OUpVd0pDVFpSNTFmTnR2SWdseHRZU1lQcytidHhkeUw1MTFYbzhxTEU2aFdTdGpTdlpsRkllSW1KKzVQUDZmVjZ6UUc5SWRnRTQ0UlA3bWszYzEvSitBQUFBNTNZZE5veTJtL0d6V3NIbFJ5YU5YL0hsR2NaOEZQMnNqQUQ3OU1aMzdKVmRreHo2UEhrN090ZHFZSTlzODNqSDE3Nk8vajlrT0x5UWlqM3Y0alFlK0h4MVFmdll6dWVmdGZySW14UHJmNXM2OWhLbCs3eG1nZDZRN0FKd2d1cUZ5eC9oaGg4QUFNQWhqUnRmLzlPYjNyVlUrS1RoL2M5eG91dGV0K09TMUtWSWhoMi83U3dpcGhIUjVYSUV3d3RhQ21mclplSnFiQVlkdE52YmlMaU5pR2YxNTIwOVRzdzcySzVYRjdpTHZkdHhPYU91azBrWGRaK2NkL3krTDgrNThlcCtOVDZScnp1SXkwa0tiRW1lTzdXS1JOdFVzcGswZnRiT3g5a096aVZVZGVGay9GMElBRTdxaEg1MWtpekpCUUFBNFBCYUo1RW1HL3lmVDlFMmtmTXlsaE5vNTNBTlBJN3VKLzFYRTR4L3J2M2RQeUppRktxbWNoN2pUTlErL2lFaXBxV1UrWGYycmV1SWVCN3RrOGJQZXpiZXJIK1hVY2Z2ZlIwUjc3ZjQveTJmUDR1SUY5OXJ1L1Z0ckdOa1M1V0xVWS9hYmxaLy9yMzJkNy9XNzlobEZZOUJMTytyM20xeExCcDFjQ3hhSmJOKytGNjFoRnJkWWhUTEJLU1d6eHBIeE0wWmo0OWRKWThzSXVLaG5uUE5WMjFTMjJGWXg3YnJEdnJlT0RQZi9tQmZ2dlF4Y2pXR2pVNjBIejU2VGw5S21XZm1RN1JWV05uMXZQNTVCL3NIbkFTVlhRQk9SRDNaVnMwRkFBRGdPTmRrclU5SVB0VEtMVDlWU25tSXRpZTl4enMrdGQ1SFhUNFJQWTJJWjZXVWY1WlNYcFJTN3RaK2Jrc3BUeUxpbDFoV1RWam84ZXpRdjZiUlRaV0dVY05yRjdGTWtuaFdTcG44YUlLMWxQSlFTcm1KaUNleFRERFlWUitXNlpsRXhKT3k5R3p0cDBURWkrZ3VHZWZwbHYvLzF4MC9aMTdIcWtmN1VpbGxVc2V0WGNlc3F5TWZMeFoxelAybGxQS2tsSEx6emRqOG9wVHl6MWhXdEpsMitMbmJWclI1M2tFZi9hVWVhMlkvYU10WktlVjlLZVdYYUt3RzBiT0tTNHUxOFhIUndYWjFzVzJyUG5kVHg4TFpOKzJ3R2g5WDV3UjlPcGZaeHhqWlZWTEQ4eVBIWmg3TFpKdG5aVTF0eDV1T3g1QnRLcTU4YXZ5czZ4MzJsVUcwSmJOdWRNMENmU0haQmZmZjFSZ0FBQ0FBU1VSQlZPQUVaT2JyV0NhNkRFVURBQURnS0ZvbnV6NXM4WDliSng3R1ozQWRQT3JvR25nUnk0bVBaNldVNmMvK1l5bGxYa3E1aStYRWlDZGErWmw1TEplVytlV2JDY1JmNnVUYXMxaE91aTIyN1BkWHNYc2xnVlZmMzdqdjFrbmVsaW9Rd3lNbVM4eGpPWUY3ODVNRWdvZFN5clBvcHRMRmFNdi92MnRjdHBwa3JQLzNSY04ySGF1aTFVUGRmKzRlUyt3cHBVeHJPejZMYnBJUkIxc3NROUlhbzBudG85dTBhZXZFL0NpT2ExNzN1VjlxZ3VscWZQeG5SUHl6OXRmSkR1L2J1dXpXb280WmR4c21IeS9xT1VGcnZ6dFdFdkxxbVBEWUdQbWl0bGZydnJWVnYrdHd5YjVGUk56VzQrL3R0K2Q2OWR4dXNqYUd6RHVLNzhzTjkrZEpZMnkzSGE4aTJoTlJMV0hFU1pIc0F0QmptVG5Jekk5eGVtdFhBZ0FBbk5XMVdiUWxrQ3kybVlDTzlwdk1yODRnN0YwczVUS0w1V1RiZEpzWDFRbXVGN0ZNWm9CdnZhMlRhdTkvVWpsbFdrcTVqZTJyQmJWTXF2LzJvd25OUi9yN0xOcVN1NDZSTExHYXhKMXR1STJUYUU5NEdXVG04QURiTnRxaERhZTFEYWM3L0F5T3RBKzkyTFp5UU4zT1g2S3RHdEhLODMyMlNUV3ZpU3M3N2M4TjIvWnJITWQ2MHNGM0swdlY0K3VxY3NvL1k4UEtLZlU4N1BwUVk4WjMrbDNyK0hGOWhMWjR0dW41VHgwam04OTV0cXdxMU1WNTNyeHU1L3N0MnZKSlIyUElObTA2T2VCNDFYb2RNTnRsUDRGamt1d0MwRlAxYVo3UDBZK1NzQUFBQUpkczNQajZ5VGIvdVU0UXRkeG9IdFpyeWxQV2VpMjhtdWpaK1duYU9ubnlYdmRuelUxOTBuL1RQclRZc2xyUXNPRzd0ZlRWUDF2R215TzF3M3pML1hrUzdSV2JEckd0VjVuNWNkdkVtcG84OG15SG4wTlhzWHEvelQ3MHZYMHF1cW53Y3IxSnRZM0dpaHd0Q1N2VGh0Y2VzNHJJKzIzYXN2YUZUWklQeGgyTUdiT0dmdmNRYlFrTHp3L2NIcmZiYm04ZEl5ZU5uN3ZSdU5WQjh0S3F6ejNaWVR0WFk4aTg4Zk1IV3lUM3RDYXhYMjg2RnRWalIxUGlyRk05VHMzZmhRQ2dmK3FKMHNjalhad0FBQUR3VjYyVlVuN2I4VFgzamQvNTVoU0RYYStKVzYrSFg3UWt1cXlVVW01cjR0RElibkR4M3RmSndGMzYwU0lpWG1UbVk1Vjc1N0hiSlBlOHNiLy9xK0cxd3dPM3c3UWhRZU50dEUyd2pxSXRDV0ZUMTdHYzNIeUlaU0xTTkpaUDJ5OU9mQjlhVlR4cUhaY1htZmtpbGc4SlJtTjdQbXpRdjNkdDgybmpkOXZWTVpKZDMrNmFURkpLbVdYbXMwZjJ6YWRIR2pPK1BTOGJOK3pUaHpMZjlWaFZ4OGh4dzJjUER4aVBuUk9hNnhoeUc4djVsOVl4WkxyQjU4MHpjOXE0WDQ5anM2VFdsbXVXUlZqR2t4TWsyUVdnWitvYWpQY2lBUUFBMEl0cnRLdG9tOHlkYlZ1Qm9IcUk1WksydXlaOVhHZm03WWxPam80YVh6L1pkdW1pUjl4RXhCZDd3MFZieEliTGJmek1ZeFA5SFQxWnYrMFlONHIycWdtSDlLRWgvclBNbk1WaGtnRm1IWXhsMS9YblRXMnJXWDNmUCt1eFpYcGkrMUZuUzhPVlVxYVpPV25zdTAvamtZbmRtc0R4N01ENzVHRFY1anM2OU1PVDgyMHF1dndnem90SHhyN3JZNHdaM3hrLzVydWVFMmJtNkVENzdHOE4yemh2SENQL3NjVysxK0p0NjFJN3BaU0hsdmFzZnQyeUg3WWNFMTdHWnNrdUxmdkt3eGtrVlhLQkpMc0E5RWg5d3VlMVNBQUFBUFRHTWFxNnJKNDZmWWpkSi9KV0plSW5KeGp6NWttUUxyOU1uZnlaeEdrbEJOQ3RzNXNBcWtrdUwwK3dYN2MrZFQ2Tnd5UzcvTG1IOTd4YS8rNlpHYkZNZmxrbHdFeGJKNEQzYUxLSDc5WmFoZUtxWi92a3NCNjNYOFZ4bGdmcnhUSDNCMk5WaTE4ejg2NEhjUnJGWVNwRHRZNlJueHIyamFzdFlyR3JSWFMzeE9TenhuMXRzV1c3dENTeFgyWG04R2NKOUhWZmFka2VTeGh4a2lTN0FQVG5ndVkrM0RnREFBRG8wM1hhS21Ha1JjdWt3NGZHNjhSWGNackpMaTBUa0E4N1Z0SjV6Q2ZYN0JmdDB3bU9YVmZmN0ZPRFdDNVhOSXpUWFphcmk2VjgvdDN3Mm0yV2U1b2VjTHhjVDRDWjE4LyswTFBLTDUzdlF6VVI4YUhoT0QwNjhINjUyZytqL25vVnkwb1lxd3B5d3hQZEwvZmR6MXJqMHBjSFMvOTFnTTlZZEhBT2RJaUV1WlkyN1N6NXRNWnFmb2pHN3lDSmZYVmUvN01LV1M4Ymo2OTlUWmFFbjVMc0F0Q1BteEFTWFFBQUFQcm5PdHFXQTVpMDNKQ3Z5elRNWS9kSmdVZWZBdTJwbHBqL3ZvOHZWTXZkTCtMd3kwUFFEOU0rZnFuNkZQY29sa3NwRE9KMGsxZzIxY1ZZMWpLWnQvRllYQk14cGtkb2syRXM3ekdPNi9IanQ5WmpVVmRqNko3ZSt2ZG9UMHJ0Y3A5Y0pSLzlHcWVmeExKeFh6OUFuejRIaDlpT0xwSVZGbnZlUjFySHhFOG4zQWQraTdZNW9PdjRRYkpMQnduNnFycHdzaVM3QUJ6L0lraWlDd0FBUUQrMUxtSDA3dzV1NnMraWJZTGtzYWRBKzNhTmZOVkJ2UFpsRnVlZlRNQjM5R1VKbzdYSnJPZlJvd24rQS9yenhMN3YyeU9QR2NOWUxwdnhKak52U3ltVEkzMlBhVi9mT3pOSHJSVnc2bkhyVlczcjRZWHRrOU1EZk1iVE00blZJZnJHMlZmbTJHUGkzQ0crK3l3elo3RjdCY1BoVDhhc2xnVDlSYlF2ZndWSEk5a0Y0SWdrdWdBQUFQVDJldTB2UzBQczZFMzlPYVp4bkZDeVN6UldUdG56c2gyU1hUaldlRFNJNVZJY3IwSjFvWk5ScTNPMUxMUFQ1Ymg2bjVrdkkrTEZFWkszWm51TThTd3pqN1ZmanVzeGZxaTNzNEZEOUpQL080RTR0SnhIemMrZ0gzeG92TDU0R2Q5UE1tdFp3dWloTDBtOXNJdS9DUUhBY1VoMEFRQUE2TFdYWjdJZGd6b2hSN3YvRXdJT0xUTmZSOFNYV0U2cVMzUTVQVGZSbjJvTG80ajQwa0VGcllzZU96UHpLalAvaUlqN2tPZ0NoelEvZzIyWU5MNysranRqMGpEYWtvZ3NZY1JKayt3Q2NKeUxJb2t1QUFBQS9YWk8xMnd2TlNlY2xzd2NaT2JuV0M1REk4bmxSTlduNVo5RmZ4SmVCaEh4K1FnSkwrZXlYNDRqNG85b3Ivd0dYTzR4WWRJeWhuOG5pYjNsbW1WV1NwbHBHVTZaWkJlQXcxOFV2UXVKTGdBQUFIMitiaHZIZVUwdWorcFRuOEJwakVHRGlQZ2NsczA2Q3oxTmVMbXYvWXpOOTh2N1dGWnpBV2p4b2ZIMXo3LzVjMHRTdTZvdW5EekpMZ0NIdlNnYXgzS05aUUFBQVByckhDdWhqRFVyOU45YW9vdktFV2VrbExJb3BUeUppTGM5K1VwWGNiaDdsUDg0Zy8xeTdEZ0tSemM4aytQQk5OcVdaTHBlSmJIWEtsMjd4bVVSRVErNkZhZE9zZ3ZBNFM2S1JpSDdId0FBb08vWGJzTTR6Mm9LTHkray9mYVpJUERVSHNJQnZBbUpMbWVybEhJWEViOUUyeklXWFhsMW9Pb3VlK3ZQaDFpT3FYNkdlN3JRalduRGE0ZG5GSWZXNmk3WHEzRzg0VDBlYXVVeE9HbC9Gd0tBL2FzM1N6K0tCQUFBUU8rOU90UHRHbWJtZFNtbDEwOXdsbEttbWRueUZxUFkzMUloRWhEWXEzci82RkRWTm1iMTUvZFlQdDN0dnRYaHhybDVSTnhrNXR0WVZndDVHY2VaeEIzVXozKy81OCs1NnV0NzF3b0xqM2wzb1BhWXIrMlQwNGo0dzk3eTM3anNhaElSL3hiQ3N6cE85djVjZG91KythYmg5Uy9yMkgzZDhCNldNT0lzU0hZQjJQOEoyS0RlTUxBT0xnQUFRUDlkbi9HMnZZelRLRmUrYUxpR2ZocDdtTGpOekd2WDlSekFtdzdmYXhyTGlmUC9XL3R6Uk1TOEpsdXM5KytSMEI5ZWJZZTdpTGlyMVVPdTZ4aDJ5UFo0R2Z0UGRobnNjWUw2ZWVPeDVyR3gvNnJEOXBqWGZmTFArdWZaNmp0OEwrbW1NZkh6bkxRa3F5eHFOU1g2WTliQlBuL3l5UzZsbEhsbVBqUmNkMXhsNXJ1R2M5TlpLV1dtTzNJT0pMc0E3Tis3OFBRWEFBQkE3OVdFaHVFWmIrSjFaZzYvbmVqdW9WbnNQcm00cjIxOGJnL2hFUHRvQi92T2I2V1V5WmF2azhoMVpIWFNjYloyUEJyRjhuN2lyL1hYZmQxYnZNck13UUdXc3VoOGdycFdRcnB1M0Y4ZTAxcnRiUkhMNmdtVEV6ajI5dm1jb0dWTXZSWENYbzExaTh5Y041eHZYMmZtYlZkalZtWithVHozZjl1UVVQV2hjUXhycVFTbnFndG40MjlDQUxBLzlVYnBXQ1FBQUFCT3dzc0wyTVpUcUZ6VCtxUnBsOVV4VmhPcXJ1M1pxNXJjMEpKME1pbWxQTmtoMFNYQ1ExcTlVMHFabGxMZWwxSnVhcnVXaUhnV3k0bjdTWFM3WE5zaDJuOWN4OUl1dFk3MW04UncxUGorVDBvcGQ5c211dFJLNGJTZkV3eFZydXFsYWNOckI5SFJjbisxYnd5UDFUOXJ0YXZGRWVLL2lET29qZ01ya2wwQTlxUmV3TjJMQkFBQXdNbGN3MTFmd0thK09vSHYrSHZqNjhkMTZZbXV1TGJuRUVZTnI1MldVbTRhWHYrcjhQZmZ0d2t3RWZGTFJOekVjbm1jRm9kS3JPaHNMSzFqL1BnQXg1cGh3L3ZmTkZSekdlbngvKzMzODhZKy9rNFV6KzQ4NzAxSDUzbGRKRWRQRzE4L09VTDhIdzVRelFzT3hqSkdBUHU5Z0pPRkR3QUFjQnJHRjdLZHc4d2NsVkttUGY2T1hYeTNqNW41cFBWbWZtYmVoVWxIK3U5RFF4OGZ4R1VrK2gxRXJmSzg2eVRzZEp1eHVTWUJUQ0ppa3BuM0RjZXhxempNVS82anpMeHJXUEpqdmM5K2JQMHl0YXJDeno2blpleWYxcVdwZG1YcHZMOTZpTjJyZVZ4bDVuMWpRbUJrNXNmR3NmSnRhOTgvcy9ac1RYNXJPcy9yNlB4dTFrSFN5Ry9SVWFXYUxUOFR6b1prRjREOVhOaStEamZEQUFBQVRzbkxDOXZXYVYrL1hDbGxrWmtQMFRhcE5JeUl6NW41ckdFaVpCd2RMNGtFUC9Hdmh0Zk9HMTZyajNmcnFpR20vMm9ZbTIvak5KSTIzMlRtZk1mbHRsYUpMcCtqZmVtUjNpN2hZZW04Ny9vUWJRa0I0OHlNWFJOZTZyMys2M1B0Y3lkK25uZXpiV0paaCtkM0h6cUl4VHd6cDNHNHVhUlpZeUllOUk1a0Y0RDlYSkM0VWNBbG1MajRCZ0RnVEs3alJ0RStjVFk5NEZjZXhPNlZBeUtXa3o2M1BTOWgvaW5hSjVhdUl1S1BPaEV5M2FJL0RHSzU3SUhySFU3RjFTNWpVQjM3WGd0ZnAxb21FY2VaK1hhWHBXL3E1UEdweE9nK001OUd4RmJIb2RwZjd6czRYa2QwTUVuOWlKMitZMWRWYTg1TktXV1dtZlBHdGgvWCsvWmJMUzlWSzRDMDN1dWZTekQ0N2o3WXhYbmU1enB1dnQ5dy8zclQ0WEZ2MG1Fc1JnZUt1Nm91bkIzSkxnRGRleGVXTCtKOHplb0orS1RlU0JrTENRQUFaNkMxcXN1a3RUeitOdXJOK2krTjE1N2ppSGpmMXdZcHBVd3k4MDIwVDJvT1l6a1JNb21JMzM0MjJWVGpPbzdsUklqcmVnN3QzdzJ2ZlpXWmt4MFNCMHlxZDIvYStQcVB1MVNrYWwxeTV3aHhHa2ZFZFdhK3JjZlF4VSsyN1NvaVhrVjNDWWp6eDVZd3Fsb1NRb2VaK1hxVENmaHZqa0dmb3kyWjlaeTlqZmFsYjBZUjhhV2VFM3o0V1NMc1d2V1BZUWZmWFlMQi81N25QWFNRd0JUMWZPMWRacjZLWmZXY1Q5KzJheDBmbjljeHBLdnp1MGxYU2VQMW5QY1FjMHFMVUdHSU15VFpCYUJEOWNUSk9zZWNtMVdDeThNdVR4Y0JBRURQcitOV0NRNHRQaHp5TzYrVmYyLzUzaStqeDhrdWEzSHRxbkxxT0paUGRjOWpPYkg3YldMQjA3QWNNYWRyR011a3JoZVBYYmV2VlNRZUM5dmV4dWRaN0o2d3NIVkZxZzRTbDQ1VjVXdFZSZXRkWGNiajkyLysvVjkxWEI1Mi9MbHZOMnpMV1dPMW5IZDE2WnhOS2s2TXd3T1VqM25vTUVhcmM0S0lyOGxlODdXKzF1WDV3Q0s2cXdCeWJycElZRm8vRHI2T2lOY0hxbkwxZGcvOWU5L0g1WWVlVjNXRW5VaDJBZWpXdlJCd0JoYjFRdTlUUkV3bHVBQUFjT2JHamErZmI3TkVUb2QrYS96dVY1bDUxZk95K3U5am1aUXo3UEE5aDJHU24zNmFSbHR5MTFVc0t4WTh4REpwNE50OWV4UVJ2NGFIdEE3aFE3UlY1eGpHTW5scEhzc0owRDlqT1JHL2JyV2MzZlBHejRxZUhBZEdjWmlFdzNrcFpiTE4vMjg4QnEwcVRueUkvNjJnTTR4bG91VjFTSExacEo4dU12TTJ1ci8vdnU5Kzk1c0VneCsyNmFUdUg2ZFd6V2l5aC92bHJlZjFtMzRHbkIzSkxnQWR5Y3pYMGYyVEJuQW8wMWplREh1d2hpd0FBQmZtVmVQcmozTGp1RDV4UG8yMlNacFhFWEhUMTRaWm05aXkxQXBucjVReTdlaHA5T3VRMEhKc2sraG1PYlJoTENzVjdOT2xMV214N1RGdkd1MFQwTVBhSDk3WU5ackh5VWxtdm96VHFjUTJqLzVYMGV2RFB2bkhDWDNmUlhSZjFXVjFYdDlTRmV3eE0vZjhPVmQvRXdLQWRyWHN0UXNXVHNVOGxqY3piaVBpU1ZsNlZrcTVjOUlMQU1DRlhjdGRSZnREQzVNamJrTHI4a25YOVhxMnQwb3BEM0Y1azdGY0xuMzlETlFxRHBNVCticWZMcWhwM3U5UWllMkRIdDA3dDNHOHBiZTIvcTZxdWp3NlhzNWlEOGtqZS9SMmoxWFE5NWxBcjZvTFowdXlDMEEzWG9keWsvVFRQSlkzeTk1R3hMT0krR2NwNVpkU3lvdFN5bnZKTFFBQVhMaldxaTZUWTA1aTFLVVlXajUvRUtkUkFlSW1UbWRpQzFxWWpEb2ZiMDlnM0Zwc3VhVFBLZHRwUXIwbXg4eDE1LzZvOXpKdlQrQ3JQdFNFWFI1djA3czRqV1RQaDFMS1BpdjE3Q3NHaTVCTXl4bVQ3QUxRcUQ0Rjkwb2tPTEo1TEV1cnZxOFhmTTlxeFpaVllzdGRLV1hxYVFJQUFQakx0Vnhyb2tjZm5vaWZOTDcrWmQvYnFsN0hQQXNKTDV5NU9yRStGWW16YU10RjlIaVp1T3J0aFRUSElpSnVHdTZKdmRXamU3ZC9UYUxmeXdQTlRtRC83NXViR3JlTGJkTTlWZ1Y3TUNmQU9aUHNBdEJPVlJjT2VWSTlyUmR6cTBvdFQ5YVNXcDZWVW01cnhaYXBjQUVBd0U5ZE4xN0x6WHZ5eEc1ckpZaFJaZzc3M2xqMVNXNFRSMXlDV3lFNEQvVVlNZW5wMTV2dHVVSkJYeXhpK1VEWXJLRWRKeUVKclkvNzEyMVA5Ni9XNUtwTGJjOVZZdk9zcDIzNjRrQnR1bytsMDFTTjQ2ejlYUWdBbXFucVF1dko4bXp0OTMvVzM4L3JUMGhjQVFDQVhsN0xmZWpEUnBSUzVwazVqWWhSWXl4NlA4RmVTbm5JekdjUjhURThkTUtaS3FYTU12TW1JdTVGNHl6YTh5WXpJeUxHUGZwYWk0aDRjUUhoYjA1MFdmTWlJcjQ0OXZSeS8xckU4bUhVYyt0emw5aWVpM3FlOXpraXJucnl0ZWF4VEhTWkh5Z0cwOHljUjhTd283ZWM2WStjTzhrdUFBMHljK3dpaDdXTG1kbmFTZkMvdi9QMy96MXBGUzRBQURqcXRkd3cybStpVDNxMFNSK2lMZGxsSENkU1RhSk9BcXdTWG9aNk0rZW9sRExKektkeDJBU0o5N0dzZUdXLzZyNDkrNVR3c3BxTW41OTUyR2ZSNFFUMU41UHdnd051dzZlSWVHTXYrbW5iM0dibW54SHhMbzU3bjE2aVMwZjdXa1E4eWN6N0hveVpzOXFtaDY3UzgxdnR6MTI5RjV3MXlTNEFiVnhzWEpaWkxCTlovb3l2bFZmbUYzQ0RBQUFBemsxclZaZUhQbDBIMUlueGxrbWVRV2FPNjFJTnZWY3JYenlKWmVXTDZ3Tis5Q0k4OE1MaCt2bE5adjQ3RG5QdjZYMmRNQjVFdnlxUWFNOXV6V0s1dk1xNVQ4YS9qNGkzWFU5UTEyUFBvUkplWnJGYzBtVVk3ajl2ZWg0MGkyV0N3T2dJWDJFYWgxdm01cExHekUvMVhPOFk1MTV2U3lsM1I5cjhoK2dtMldWUjN3dk8ydCtFQUdBM21Ua0tUN3VjczJsRXZJM2xtdkJQeXRLVFVzcUxVc3BkS1dWU1NwbEtkQUVBZ0pNMGJuejloeDV1MDZUeDljOVBxUUZMS1l0U3lvdFlMaTJ4Nyt1eVJiMDI5SFFzaCs3bmQ3V1BML2JadDBzcHE4cE92NHY2M3R2elNTenZPUjNhK3poZTFZbHAvZng5bTlkdHZOMVgwa0dOM3k5N2JzT0h1aDJMK25rU0tEWnNtMUxLczNxOFBsVE1GaEZ4VzBwNUp0RmxMMjM2VVBlMzl3ZjgyR2tzNXdMdWpyamQ4K2dtU2VWQnYrUVNTSFlCMk4xTElUZ2JxeXpuMi9pYTJQSnNMYWxGK1VrQUFEZ1RIU3hITzY4MzMvdW1OUkhqdWk3dmRGSktLUStsbEY5aU9iazEzOE5IVENMaWwxT3Blc1A1MmVOazN6U1c5MERXKzdZbndQZmZucXNKK1dkeG1LU1gxUmgyZTh4Sno1cFF0YTlFbjNrc2s3WitPY1RTNFRVSjVka2VqanZ6V0ZZSCtiWkN5TlNlczFYN1RPcVllUnY3UzRaZHhQSWh5VjlLS2U5RmZlLzcyMjF0MDBuc0w1RnBWZm1xTDB0UmRaRllMMG1iaXlEWkJXQUh5cnFlaFZrc2J4UTlLYVg4czE1SXZwZllBZ0FBWjYrMWdra2ZxN3AwOVJUbzlhazJhbjFRNFpkWVZzR1lSTnRreUR5K1RtTGRlQ3FXSHZUdjljbSt0OUUyZ1R1SlpkV0laOTlXcTYxOTNYMlJ3N1RwdENaTVBJbmwvYWt1NHo2TDVVVC9hZ3liOTJTYloydmIzRHBPTDliNjhsRVNFdGVPT3pmUmxwQXlpNitWcGI5M0hGZHhhYmN4ODMySDV3VXIwOXBXdjlTSEpKMGZIUEE4dDVSeVU0K0ROOUZOY3VZOHZzNFBQT2xUWW5NZEMxckc3cGw1RGk1bWZCQUMraW96UDhkeDFsZThWS3NMTERicm4rTllyaGZKYVpuSDhzYjB4UEpEbmUwTEtRb0hkOHcxWTUyYk9EZHhmc0twNzhlamlQZ3NFbzVid0VXTis2T0krRFdXMVh5dTR2dFZmYWF4bkFUN3ZaNS9tQnpnRlByM1ZlM2ZUMnUvL3Q2MXlpcDVaYmJXdjAzTzlyZE5oM1djdXRwZzNGcHYzMFZFL0ZsL3Y1YzJianlQL3VGMTNUZmo5R3I3ZjdTZDg3cWR2UnluNjhPUjEzVmJyaHh6ZWoxdXJ2cmI2aWQrMEU1UjIybHYreGJOKzl6Vk4rZDZveC84OTNuOW1VWEV2MDloMzh2TS84VHUxU2h2VkNYa1V2eGRDQUIyWWdtajB6S0ppQStIS0dWNmdSZUlBQUFBdlZTdkFWMEhjcTc5ZTVYRVlnbU44Mm5UZVN3bll4OHVhSnZQWnB5dWlSQVRQZmtreGszT1o1ODd5M085ekx5TzNSTmRGbUZaUWk2SVpCZUE3VTgwaHVISi9sT3dpT1c2bEtxNDdNOUFDQUFBQUFBQW9ET3ZHbDc3b0FvUmwwU3lDOEQycm9XZzExWkpMdStkMUFFQUFBQUFBS2NnTThmUjlyRDFiNkxJSlpIc0FyQzlwMExRVzVPSWVLdVN5OEVNaFFBQUFBQUFBTnJVUkpmN2hyZVkxdVc2NEdMOFRRZ0F0anJaR0lUS0xuMDBqNGhucFpRYmlTNEhOUlFDQUFBQUFBRDRxOHk4eTh6N3pMeDY1UDhOTS9NKzJoSmRJaUkraURxWFJtVVhnTzJNaEtCM0poRnhhOG1pby9pSEVBQUFBQUFBd0hlTkkyS2NtWXVJbUViRW4ydi85bzlZempsZGRmQTU4MUxLUkxpNU5KSmRBTFpqQ2FOK3VYRUNkMVJYUWdBWVp3QUFBQURncDFhckJ1eHI1WUMzUXN3bGt1d0NzSjJSRVBUQ0lpSmVsRkttUW5GVVF5RUFEbkFqQUFBQUFBRDRQbFZkdUZoL0V3S0F6V1RtSUR4aDNnZUxpSGdtMGFVWGhrSUFIT2o0Q3dBQUFBRDhMMVZkdUZpU1hRQTJOeEtDWG5oV1Nwa0p3M0ZscHYwQk9CU0pwZ0FBQUFEd3YxUjE0YUpKZGdIWW5NbTI0N3VSNk5JYlF5RUFqRGNBQUFBQWNEUTNRc0Fsayt3Q3NMbW5RbkJVNzJVbzJ4K0FpL1NyRUFBQUFBREFYenlVVXFiQ3dDV1Q3QUt3T1pWZGptY2UxcDIwUHdER0d3QUFBQUJnSHFxNmdHUVhnRTFrNWlBaUJpSnhORGVsbElVdzlHcC9NUGtNSE1wSUNBQUFBQURndjE2WU13SEpMZ0NiTXJGL1BGT2wrSHBuSkFUQUlXV21jUWNBQUFBQWxnOEh6NFFCSkxzQWJFcXl5L0ZZdnFoL25nc0JjR0FqSVFBQUFBRGd3dDJVVWliQ0FFdVNYUUEyWXdtajQ1aXA2dEpMSXlFQURreVNIUUFBQUFDWGFoRVJ6eVM2d0Y5SmRnSFl6Rk1oT0lyZmhLQmZNdk1xSW9ZaUFSellWV1lhZXdBQUFBQTRGZk9PM3VkOVJQeml3V0Q0WDVKZEFPaXpCeUhvblpkQ0FCekpXQWdBQUFBQU9BVzFDc3N2RVhFYnk3bU8rUll2bjlYWC9WSkt1UzJsTEVRVS90ZmZoUUJnSTFkQ2NIQXpKM0M5TkJZQzRFaGVSc1NkTUFBQUFCeFdyU1pRUkFKZzYvRnpIc3ZLTE85WGY1ZVpvN1gvc3ZyOUlwWUpMcUdDQzJ4T3NndkFaZ1pDY0hCTzZIb21NNi90QzF3NENYakhOY3pNc2JXSkFRQUFBRGhWM3lTelRFVUVkbWNaSTRCSFpLYkovZVA0VXdoNnh4SkdHSmN3RGdFQUFBQUFjSFNTWFFBZVp3bWo0NWdMUVg5azVqQWlya1VDT0xKUlpvNkZBUUFBQUFEZ3NrbDJBYUN2WmtMUUsyK0VBREFlQVFBQUFBRFFCNUpkQU9pbFVzcENGUHFoTHVVMUZnbWdKNGFaZVNjTUFBQUFBQUNYUzdJTEFQQ1kxMElBRVJFaENhOC8zbVNtWlFZQkFBQUFBQzZVWkJlQXg0MkVnRXVWbWNPd1pBaXNXRjZ0WHo3V3lsTUFBQUFBQUZ3WXlTNEF3TTlJZEFINmFoZ1JINFVCQUFBQUFPRHlTSFlCQUw0ck0wY1JNUllKb01kR21Ya3ZEQUFBQUFBQWwwV3lDd0M5bEpsWG9uQjA3NFFBdmlxbFRFV2hsOFlTWGdBQUFBQUFMb3RrRndENmFpQUV4NU9aZHhFaDRRZzRGZVBNdk05TXg0N2xHRDdJektGSUFBQUFBQURuU3JJTEFIMDFFb0xqcUZWMTNvZ0VmTmRDQ0hwckhCR2ZMem5KSXpPSHRjck5sN0FNSFFBQUFBQnd4aVM3QU5CWHZ3ckI0ZFdxQ0pZRGdSK2JDVUd2WFVYRUg1bDVmVW5qZG1hT00vTnpmRTF5VWVFR0FBQUFBRGhyZnhjQ0FIcHFKQVJIOFM0c1h3U2N0a0ZFZk16TWg0aTRMYVhNejNFamEwTFA4NGk0RHNrdEFBQUFBTUNGVWRrRjRIRnpJVGlLUVYxT2h3UEp6TmRoMlF0NHpPOUNjREt1SStKTFp0N1ZxbFduUGtZUE12TTZNKzh6OHo4UjhURlVjUUVBQUFBQUxwUmtGNERIellYZ2FGNEp3V0hVQ2dIdlJBSTRRMjlpbWZSeW41bkRFeHVicnpMemRWMmlTSUlMQUFBQUFFQWwyUVdBUHJzK2g2ZngrNjVXMExrWENkaklWQWhPMGlDV1NTSmZNdk56Wm83N2VIeFpTMjc1V0t1My9CSExSTVNSSmdRQUFBQUErT3J2UWdCQWp3MGk0blZFM0FuRmZ0UkVsOCtoU2dCc2FpRUVKMjlVZis0emN4WVJueUppV2txWkhuajhIVVhFTUNKK2pZaXJrTkFDQUFBQUFMQXh5UzRBanpPeGVWeXZNdk45S1VVN2RFeWlDMnl2bERMTFRJRTRIMWYxNTAxdDExbjkrWGY5ZFJFUnMxMk9RWFdNSGRTZnE0ajRSLzExV0g4QUFBQUFBTmlSWkJlQVI1allQRHJWWGZaQW9nczBtWWRraFhPMVNuNzVkc3hjYi92NUQxNDcxQzhBQUFBQUFBNURzZ3NBcCtCTlpqNlVVbVpDMFM0enJ5UGlQaVM2d0s3bUlhbmhVZzIxUFFBQUFBREE4ZjFOQ0FBMk1oZUNvN3ZQVE1rWmpUSnpIQkVmUTZJTHRQaGRDQUFBQUFBQTRIZ2t1d0JzWmk0RVIzY1ZFZStFWVRlWk9jak0rMWhXZEFFY0V3QUFBQUFBNEdSWnhnaGdNM01oNklWeFprWXA1VVlvTnBlWlY3Rk1jcmtTRGVpRUpkVUFBQUFBQU9DSVZIWUIyTXkvaGFBM3hwbjVXaGcyVTJQMU9TUzZRR2RLS1pKZEFBQUFBQURnaUNTN0FHeG1MZ1M5OHE0dXljTVBaT1pWWm42TzVkSlBBeEdCemsyRkFBQUFBQUFBamtPeUM4Qm01a0xRTytQTS9KaVpFam5XWk9ZZ00rOGk0bytJR0lrSTdJM3FMZ0FBQUFBQWNDU1NYUUEyVUVxWmlrSXZYVWZFSDVrNUVvcUl6QnhIeEplSWVDTWFzSGQvQ2dFQUFBQUFBQnlIWkJlQXpjMkZvSmVHRWZFNU05OWRhcFdYekJ4bjVwZUl1QTlMRnNHaFRJVUFBQUFBQUFDT1E3SUx3T1lzV2RGdnJ5UGlTNjF1Y3ZaV3l4V3RKYmtNZFFFNG5GTEtQQ0lXSWdFQTBIUmRzMXFlZHQxLzZ0K05MelFtbzdyOS8va21McDlydkR6Z2NMNzd3YmR0ZnJIN0FRQUFiRUt5QzhEbUxGblJmNE9JdU0vTXMwMTZxVGMrN3lQaVA3RmNybWlvMmVGb3BrSUFBR2QzcnQxaUpJb2J4L29xTS8rSVplTCs5WGV1NjY3cnRkMGZtWGwxSVRFWlpPYm5pUGhjdC8vYnBKWlJqWmVsZk05M1AvaTJ6VmY3d1pkTDJROEFBR0Fia2wwQU5qY1ZncE14aks4M2hPNHljM2pLRzFOdmdMMnJWVncrUjhSWUUwTXYvQzRFQUFEYlg5L1U2NXBOSnUrdllybHM3ZFVGeE9STExCTmFOcm5lL2F6aXgwWHRCOE5ZSmpsZGl4d0FBSHdsMlFWZ2M1WXhPajNEV0ZZLytiSXEvM3NxSlovclU2V3JCSmMvWXJsTTAxQ1RRcTlNaFFBQVlLdnJuRUVzSi9pM3VTNGJ4REs1WTNpazcvejZBSlZVN3JlTVNjVHlBUS9WUHZiVDV1LzIyZVoxUC9pNFk1dTdMd0FBQUpWa0Y0QU5sVklXSWVIbGxGM0g4Z2JpZjJvcDdMdStsSDZ1NWFwSDlUdDl6c3lNNVExZ0NTN1E3K1BDTENMbUlnRUFzTEYzc2YwRWY5VFh2RG5DdGRwOS9jNzcvSXk3Mkt5NngvZmNrbkhiMlFBQUhrcEpSRUZVNjFLZFg1dC9yTmZpKzdUcmtzUURiUTRBQUYvOVhRZ0F0aktMM1c5QzBSOVg5ZWZOTXE4a1p2WG56L3JydkpReTM4Y0gxd1NiUWYzOFgrdXZRMDBDSjJzYWxoWURBTmprV21qUWVONDB6c3kzKzdwVys4NTMzWFNKbVZZdlc2NXRNM05VU3BucVlhZlI1aDNzQjZQTXZLcUo5d0FBY05Fa3V3QnM1L2N3cVhtT1Zza3YvMVdUWU9ieHRXckRMQ0wrYjh2M2ZWcC9IWVFrS1RoWG54d1hBQUEyY3QzUmU3emY1NWVzU3dQZEgrSWFybjdXc1BGdG5vZmxOYnRvaDIyWDE5clZxSVBQdVE2Vmh3RUFRTElMd0pZZVFzbllTektNcnpjZVI4SUJmTWRVQ0FBQU5yNithdld2Zlg3QldvbnpZeHdtNlNHaW00UWFEMWEwdGZrNGRsOWU2MWp0OWF1V0F3Q0FpTDhKQWNEbVNpbUw4UFFNQUg4OUxqeUlCQURBUWV3dHNhTW1QUnlxdXNmS1VKTWVUMmEranVVRFRZTVQrK29EclFjQUFKSmRBSFl4RlFJQTFud1NBZ0NBZzVqdjQwMHo4MTBjcDRyclFwTWVSMmJleDdLaUN3QUFjS0lrdXdCczc0TVFBTEJtS2dRQUFJL3FJckhqMzExK29jd2NaT2JIaUhoOXBKaDBVVGwycm10dDNlWi9STVQ0U0YraGkvYjZYVXNDQUlCa0Y0Q3RsVkptNGVrckFMNGVGK1loNFFVQTRERVBQWG1QaUZnbVBjUnkyYUxySTU1SFRxUDkvb0xFaDgzYi9LcTIrZFdKN3dldVBRQUFJQ1M3QU96cVFRZ0FXS1BxRndEQVQzU1FJRHl0RDU4MHEwa1BYK0s0U1E4ckxmY1g1cVdVaWQ2MVVadVA0dmlKTGxGS1dVVEVwTEhOcDFvVUFBQWt1d0RzNnBNUUFMQkdFaVFBd09OdWovVGEvOHJNY1N5VEhnWTlpc25pbURFNWR6MXM4N2NOYlg2alJRRUFZRW15QzhBT1Npa1BZU2tqQUw0ZUZ4WWg0UVVBNExGenBsbnNObGwvMDBWVmw4eDhIUkgzMFora2g5VjU1TFBZL2g3RCszcHZncCszK2J2YTVuM2FEK1lOKzhGVXF3SUF3SkprRjREZFRZUUFnRFdXTWdJQWVFUmRkdWRGYkpiY3NZaUlGMTBzMVZNVFhkNzFOQ2F6V0NhOHpEZU15VTBwUlZXWHg5djhYVVM4N21tYlA4VG1TVTZyTnA5b1ZRQUErRXF5QzhEdVRHb0M4Ri8xaHZWY0pBQUFOanB2K2lXV3k3bDg3L3hwWHYvdGx3NnJsd3g2SHBOWlJEeUo1ZEpFc3gvRTVIMUVQSkgwc0xHcm5yZjVkSXY5UUpzREFNQTMvaTRFQUxzcHBjd3ljeFk5djNrQ3dFRjlpSWczd2dBQThPZzE5U0lpN2lMaUxqTUhhOWZXcy9wdmx4cVQ5eEh4L3B1WXpPdlNOOWdQQUFDQVNySUxRSnZmb21kclB3TndWSk9RN0FJQXNKVTZxVDhWQ1RIUjV0b2NBQUEyWlJramdEWVBzZG42eWdCY2dQckU3VVFrQUFBQUFBQmdmeVM3QURTb1Q5MU1SQUtBTlIrRUFBQUFBQUFBOXNjeVJnRHRmb3VJMThJQVFFUkVLV1dhbWRPSUdJa0dBSEJNbVhrVkVZT0lHTmFmaUloWkxDdVVMa29wTTFGaWgzNDFpSWlyK3NmMTMwZXNMY05UU3BtS0ZqM3V4NnZydGZYeGNWSEh5SWlJZWEzY0NRQkFUMGwyQVdoVVNwbG41aVFpeHFJQlFQVTJKTHNBQUJ0WVMwaloxbmVUVlRKekhCSFA2N25JNEpIUGpsZ21KL3dlRVEvN1RuN0p6R0Y4blZUZTFrOG5udGNtcm4va1h3MWYvYXJHYXB0N0JkTU5ZL0p0c2tobk1lbTRqMTVIeE5QNlhYL1dyOTU4MDcvbXNVd2UrQlFSMHk2Lzd3WnRQdWhwbSs5bFAyanNTejhjVTQ0d3RtMFZ6eTMyczFVZkhtMGEvOHhjSmI4Y1pJd0VBR0E3a2wwQXV2RWhKTHNBVU5YcUx2UFkvU1kyQUhBNTNzVnVTYkxUaUhnVzhkK0ozTmNSOFNxMm4xd2UxWjgzbVRtTGlOOUtLWk05YmVzNDFwSWh0dlEySXU1Kzh1K2Y5OXhHVzU4U2J2ai9yaHErKzJNeDJWbE55QmhIeE12R2M5cGgvYm11N3p1TmlBOGQ5YkZUYmZPOTdBZWxsRVZtZm96ZEUwem1FZkZMaHpIOG8rRzFuWHlYbWhEMU1uYS9aemY0Wm95Y3g3TEM4NlF1YlE0QXdCSDlUUWdBMnRXblRhWWlBY0NhdDBJQUFPeGJuY3o5STVhVDU0UEd0N3VLaVB2TS9MSkIxUXpPc3o4Tk12TStJcjdVUGpYcytDTkdhMzNzV3NRNzk5RHcybUd0eHRKRlA3bys0blpFWm80eTgzTXNFNkxHSGNaM0dNdEVxQytaZVZjVERRRUFPQkxKTGdEZE1ha0p3SC9WcDFXVnVRWUE5aVl6WDhkeU1uZlk4VnNQSStKelpyNFQ1WXZxVCtOWUpybU1EL0J4dzRqNG1KbWZKUXgwNmxQajYxOTI5RDJlTjc3K3R4Mzc4S0JXdC9rYysxMVdkaERMWkxBL0pBWUNBQnlQWkJlQWpxanVBc0IzM0FvQkFMQW5vOWh0cVpWdHZKYU1jUDdXcXJuY1IzdDFvRjM2OFpldUtvcGN1bExLUTBTMExLL1RWYldkbHZlWmxWTG1PL1RqNjFnbWF4MnlZdEF3SkFZQ0FCeU5aQmVBYnQwSUFRQXJFaUVCZ0RNd2l1Vmtyb1NYTTFUYnRldWxYclkxcUgxTXdrczNKZzJ2SFdibXNMRlBYVWRiMHRTSEhUN3pkVVI4ak1NbmE2Mjh6c3lQeGtrQWdNT1M3QUxRb2Zya3lVUWtBRmhqbVRzQTROUmR4ZjZyeUhCZ2E0a3VmVWd5a2ZEU25RK05yMit0ak5LNmhOSERsdjM0dmlmajAzVklEQVFBT0NqSkxnRGRleHR0SldNQk9DTzF1c3RFSkFDQUV6ZXUxUk00SCsraUg0a3VLNE9JVUIyai9mcGpGaEh6aHJkNDJmZ1ZSZzJ2ZmRobUNhT2E2REx1VWZpdllya2NHQUFBQnlEWkJhQmo5YUw4TjVFQVlNMXRTSVFFQUU3Zkc0a0k1NkV1TlRQdTRWY2JSc1FiTGRTc3BickwxYTVMR2RYS1BNT0d6LzYweFdlTmU5cUhyek5USlN3QWdBT1E3QUt3QjZXVXUyaDdpZ2FBOHpvdUxNSnlSZ0RBNlJ1RTVZeE9YazFZNm5QMWlkZTdKbHZ3WDVQRzErKzZsRkZyVlppSERmdncxUW4wNFd2ZEVBQmd2eVM3QU96UGpSQUFzRkpLZVI4Uk01RUFBRTdjV0NMQ3lYc2R5OFNsUGxQZHBlM2FZOTU0N2ZGMHg5ZTFKSGc4MUljRWZxb21hMzA4Z1dhNFZ3a0xBR0MvSkxzQTdFa3BaUm9iUHBFQ3dNV1FDQWtBbklPeEVKeTBWNmZReHlSVk5XdFp5dWg2MjBTTkRwWXcydlQ3dm1uOG5FTVpoS1F0QUlDOWt1d0NzRjgzRWJFUUJnQWlJa29wczdDY0VRQncrbDRLd1duS3pIRjBWOVZsRnN2bGN0NnUvVXlqdS9zZ2xvRnBNemx3L0VjTm43VW9wVHhzMEgrSHNheE0xS1Y1N2JmVGp2dHZoQ1c1QUFEMjZ1OUNBTEEvcFpSRlp0N0VhWlJYQmVBd3g0YTd6SHdlRVZlaUFRRHN5U3lXazdiL3QvWjNUNk50TW5yZE1ET3ZhaUl2cCtWNTQrc1hFZkZiUkx6LzJaSXptVG1LWlZXTFVlTjNmYS9KZHI3dVdHVG1RK3llTlBROHRrdVlhVW1DMjdReWNsZVZVcWF4ckNUejNhV1RhcFdhbDdHc1l0V2FIUFltVlBnRUFOZ0x5UzRBZTFaS2VXaTh1UURBK2JtSmlEK0VBUURvMkNRaTNwWlM1dC83eDdvc3ladm9wakxDS0paSk5YM3hXUFc4bG1TZlNVVDgrMHo2eUtqaHRiT0llUGF6SkplVnVyVHpORFB2WS9kbHIwYU5iZjR5ZGwvdTVsemEvRlBzZmo5cTQ5ZlY2aVV0eWZ3Zk52eU1jV004RmhGeDgxZ1ZtWnJJTjh2TXR4RnhIMjMzOU1hWmVidkpmZ01Bd0hZa3V3QWN4azI5NkI4S0JRQ2xsRmxtM2tiRU85RUFBTHE2N2l5bFRCNDVCMWxFeEcxbS9obkxDZHdXVDZOSFZUZEtLWGMvKy9mTXZJdmRFejArMU9TTmsxYXJWZXhhcFdJUkd5YTZmTk11TjdYS3kzREg3eno2VWV3M2FQT25zZnQ5bUxObzgxaFdUTGx2NkRQWG15d3ZGRzNKSVBNTlkvMnFNUmFyUGp6Ym92OHVJdUpGWTlKVzFOZXFVZ1FBMExHL0NRSEEvdFdMWXlWTEFWZy9OcnlQemN0MUF3RDh6TzFqaVM3Zm5JZE1JdUsyOFRNdHlYaDZobzE5Yk5mS0ZCK085SjFkY3l6YmJOTHdGcHN1ZTNXSUpZeGFFbXEyVG5UNUpvNDMwVmJKNnFYZUNBRFFQY2t1QUFkU24xSjVLeElBckxtSmlMa3dBQUFOcGpXSmR0dHIxUGVONXlGRG9UODVMUWxLeDByUzFzL2FmV3A0N2FNSkpuVjV0SDB2WWRSYUxmbnRyb2t1YTFvU0JLOXFuQUFBNkpCbGpBQU9xSlJ5bDVtL1J0dlRLQUNjejNGaGtaa3ZJdUp6N0Y1U0hnQzRiTDgxdlBadHRDMXhjdFhCQkRLSE05M3hkWXVHcWk0Unl5V3ZPTjQxeDBObUxuYTgzaGhzc0pSUjZ4SkdtNHdoTHhzLzQzMEhjWnhtNWl4MlQreTVqcllxT3dBQWZFT3lDOERoM2NUeWFSUWxud0dJVXNvc00yK2pZYUlKQUxoWWkwY21vUi96MEhnT0lsbjN0TTQ3cDdGN3dzdE9Ndk11SWtZTmJ5RlJwaHNQRVRIZThiWFA0K2VWZlo0M2ZLOU5rL1g2VXBYb1U4TjMrVlUzQkFEb2xtUVhnQU9yVC9IZmhLZjRBZmg2YkpqVXlsK3ZSUU1BMk1LMGcrdlRsa29GOEJkMXFaWlJMSk5VcnNNeVJIM3hXK3llN0RKNnBMMWJLcnM4dEg2SFRWNmJtWjg3aW1OTGZ6Yk9BZ0IwVExJTHdCSFVwL2h2SXVLamFIREdKckg3elRTNHhHUERiYjFaYkw4QkFEYjFad2Z2c1JCR0hwT1p3MWhPOUEvaXI1UDIvNHF2Q1FBamtlcnR0Y1lzTStleFc3TEc4Q2RMbHJVa3VzeEtLZk1OK2w1cmtraGZra3pzSHdBQUhaUHNBbkFrZGMza203QnNCZWRwRmhHM3NieVJOaElPMk5odExHL0dldW9QQU5qRXRJUDMrTjA1Tyt1K3FjNXlwWCtjallmWXZaTGt5M3FkLzYyV1phWTJYY0pvY0U3N1ZpbEZnaUVBUUVmK0pnUUF4MU5LbVVURWU1SGd6TXdqNGxtOWdmTkpPR0NyNDhJaUlwN0Y5MjhrQXdEQTNtVG1kV1oraklqL3hMSVM3ZXVRNkhKT1BqUzg5bnJMdjkvRUlaWXc2aHNQTlFBQWRFaXlDOENSbFZKdVk3bmNDNXlEUlVTOFdIdFNhU29rc1BWeFFjSUxBTEFwNXdzMHEwa3VYMktaNEhJdEltZDduVEZyR0RPRzN5NG5sSm5Yc1h2VmxRY1ZUZ0FBYUNYWkJhQUhTaWszSWVHRjA3ZUlaVVdYMlZyZm50Vy9CN1k3TGtoNEFRQTJQV2VBbldUbUlETS94ekxKWlNnaUY2R2x1c3ZvbXo4L2IzZ3ZWV0FCQUdnbTJRV2dKMnJDeTROSWNNSmVyQ2U2ckprS0RleDBYSkR3QWdEQVh0UXFIVi9DTWtXWHB1VyswOHR2L3J4ckZhQkZ1UDhGQUVBSEpMc0E5TXRObU5Ua1JQdHVLV1g2ZzMvN1hYaGdOeEplQUFEb1drMTArUnk3TDBIRDZWNWZ6R1AzQjFLdU1uTzQxb2NzWVFRQXdGRkpkZ0hva2JWSnpZbG9jRUp1U2lrLzY3TlRJWUpPamcwU1hnQUFhSktaZzVEb2N1bGFsakphVlhONTJmQWVsakFDQUtBVGtsMEFlcWFVc3FoTEdrMUVneFB3V0tKTDFLV05QTFVGamNlR1dDYThURVVEQUlBRzkzSDRSQmRKMi8zU3hWSkdPeTloVkVxeGhCRUFBSjM0dXhBQTlGTXA1U1l6SXlMR29rRlBQWnJvc3VaQlg0Ym00OElpSXA1bDVyMzlDUUNBYldYbUtIWlBVdGpVTkpZUE8vd1p5eVNYYVVTc2xrMmlKOWNWbWZtd1kxKzRxdjFvdU9QSFQzYnNVMjhhK3VQYkhvVmY0aGNBUUlja3V3RDBXRTE0V1VURWE5R2dSeGF4VEhUWjVtbXMzOFBrUEhSNWJQZ3pJdDZKQmdBQVczalYwZnM4eERLWlpSckxTaDAvbmNDdkQvTFFMNTlpOThTbis0YlAzV1VKcFpaS3NjTlN5bFJ6QXdDY0o4c1lBZlJjS2VVMkltNUVncDVZUk1Tekhjb09UNFVPT2owMnZJL2xza2FXQ0FNQTJML0JtV3hIYTFXWHR4SHh6MUxLaTFMS1hTbGwrbGlpQzcyOW5wZzBYRXNNZDN6ZGZKZiswdGpIaHJVU0RRQUFaMGl5QzhBSnFEY2hUR3B5Ykt0RWwxMXVUczBqWWk2RTBPbXhZUm9SVDBJcGJBQ0FmYnM2OVEzb1lNTC9waWE0N0hKZlluU0NJUnRlUUw5K09QRG5mV2g0N2JUaHRXOENBSUN6WkJramdCTlJTcGxtNXJOWWxvdTlFaEVPYkJiTFJKZVdoS3RwV01vSXVqNDJ6Q1BpU1dhK0MwdmVBUURzeTY5bnNBMHQ5eEVtOVNHY1M0cmYwNGlZbkhtLy9uVGdhL1NXZVA0ZXV5ZE5qVEp6M05pSEl6TUhqZnRSV0ZJSkFLQmJrbDBBVGtncFpiYVc4SEl0SWh6SVF5eWY0bXV0TFBSN1NIYUJmUjBmYmpQejkzcDhHSWdJQUVDbnJqUHo2c1NYN0drNVIveDkxeGRtNWpDT2QvK2lKVUZpbkpsdmEzTDV1VjVEUEdUbVBBNVR4V2JXR011SGFLdlE4aTR6WjQzN2NPdTl1SWV3eERNQVFLY3NZd1J3WWtvcGkxTEtpNGk0RlEwTzRHMWRqNzJMSmJRZWhCUDJlbng0aUloZjdHc0FBSHZ4T1RNZnJlcVFtWVBNOUhES1YrOU8rTHQvck1rNm03VDVxVmJnUGRTMVE4c1NSbEdUVk9ZTmJ6R28rL0JvbHhkbjVsMjBKMjE5TWh3QUFIUkxzZ3ZBaVNxbHZJK0lKNDBYKy9Bamk0aDRVVXE1NjdEUExtSzVIQkt3djJQREtpSHlSZDJQQVFCWWFyMFdHVVRFSDVsNW41blhxeVNJekJ4bTVpZ3pYMmZteDRqNFQwUzhPclBZUGQzbFJaazVqdE91U250VjIveGRiZU5WbTEvVlA5OWw1dWZhNXFlNm5SOE85RGxkSk5YODFzRSsvTG51dzhNTisvQWdNKytqcmFwTTFHc3pEeVVBQUhSTXNndkFDYXRQdGp4eHdVekhaaEh4ckZhSjZOcFVlT0VneDRkVmxaZUphQUFBUkVSM2ljRGppUGdZRVY4eU15UGlTMFI4am1VRmszT3Q2REt1aVNzYnk4eDNzVnoyNVppNnVQNGNSTVRyMnNhck52K2ovdmxON0w1TVVsK3VHMW9ycG16aW9hUGxvQ1lkN2NmajJwYjNtVG4rTnZHbEpyaU1haC8rRXQwc3gvelFVY1ZjQUFEV1NIWUJPSEdlNHFkamsxZ211dXlyQXN2dlFnd0hQVDdjUk1TelVGVUpBSEJ1Tkwzd0VMUnUvMzJ0WkRMNDBYK29TUUxqelB3U3l3U1JZM01PdkpsOVYzZjUxTkUrdklqMjZpN3J4ckZNeVBxU2EySlpxZWR6N2NPRGpqN3JyVzRHQU5BOXlTNEFaNkkreGY4a1ZNNWdONnRsaTI3Mi9MU1IvZ21IUHo1TVN5bFBJdUkySkVVQ0FKZnRrcTlINWgyOHg1dUkrRTltZnE1TCs5elZuM2RyeS9uY1I4U3dKK2ZCaTdEMDh5WW1lMzcvTHF2R3ZqL0JOcDEwVk5rR0FJQnZTSFlCT0NPbGxIa3A1Vm1vOHNKMnBoSHh5NTZXTGZxMmp5N0MwM1Z3ckdQRSsxZ3ViZlRXTVFJQXVGQ2ZMblhENjJSN1Y5ZGlvMWhXdlhoVGYxNUhmNWZ6c2V6ellmdkd0eVpkUGxCVDMrdjJoTUo3YXQ4WEFPQ2tTSFlCT0VNMWFlR1gyUC9UT1p5MlJVVGNsbEtlSFhqdDZLblF3OUdPRDR0U3lsMDlScndYRVFEZ3dsejZOZktIQzl6bTMzVDdvL2FOemhQTTZqMnZVN21XZVh2Zyt5MEFBQmRGc2d2QW1hb1RtamNSOFN4VTB1Qi9QY1N5bXNzeGJoQjlFbjdveFRIaU5sUjZBUUF1N0J3b0xqdmhaWEpwNTMyMWFzbFU3OStvYjNSdHNhOEtzdlZhcHUvM3VoNk9kTThGQU9CaVNIWUJPSE9sbEdrcDVVbEUzSVRKVEpaclc3OG9wYnc0MXRORnBaU3Bab0RlSENQbWE1VmUzdFl4Z3RObnlUZ0ErTEdMVGZTdDE0Q1hXT25rUnJmZnFHOTBuWml5N3lXayt2eHcxMXkvQXdEWVA4a3VBQmVpbERJSlQvQmZza1Z0K3lmN2VySnFTMU5OQXIwNlJpeEtLWGVsbEY5aWVWTldvc1JwbXNReW9mR2ZQUm5yQWFDUDV6M3ppTGk5NE8yL3U3Unp2ZHJtYi9YK1IzVmRoZlhEbnR0MUVmMU1lRm5VYzNMMzNnQUE5a3l5QzhBRldVMW14akxwUlNuVnl6R0paWkxMWFk5dXR2eXVXYUMzeDRwSnJRajJKQzZ3MVAwSmVvaGxndEkvU3lrM2tsd0FZTFB6bmJqczVZeGVIT2tjYjNIRU5yKzc4RGJmOUx5eXF6YWFINktxYXc4VFhoWVI4YXlVNHVFQkFJQURrT3dDOFAvdDNkRnhHa2NBQnVEL1p2SWVwNExJRlZpdVFGSUZqaXB3cUNCREIzWUZjUW1vQTZXRGN3Zm5EbEFGd1JWY0huYlBNTEZrR1lIZ1RuemZEQU1qalJEc0x0emUzcis3SjZpR1h1WXBvWmVGRW5teDJwU1F5NnpPWkJ2YmF3UEdmYXpvNnZmSGJ5bGhDaUdLY1ZqVlkvZDFTc0RsdWdhVWhKSUFZTHUrenV4VXo0ZnIrZUZWRGhzK21ZM2dQSEN1VC92RGRySFByWXh1RC9tNmExai8ySk82dXBReEdFRVhBSUFERVhZQk9HRk4weXpyQUovdGpWNldObVVtMFdobkU5VVpYdG9iVE9kNHNXaWE1anFKNE12eHZ0ZUhyZWkrcmVBaTRBSUFPL2R4WmpuUjdXM3F1ZUpWa3VVei82dGhTNWRGanJ6Q1p3MUZYTWRLdHoreXI2Mk1ibzVRdi9NRHRlbjdmRW9aaDFscVFnQUFoeVBzQXNBUWV2bVFkZWpGeWZrMHRWbUhYTnFKdkY1Z1dzZUwxVDNCbDBXRTEvYXRTeGt3SDFadnVhcGIwWmtsQ2dENzc5OThTTm0rc1QzQjk5N1Y5LzVjNFkrdW5xUGVqdWtjY0NNVTRaejArN0xaeDFaRzNiSDZyWFVzNUcwT042RnJXZHY0WEJBZEFPRHdoRjBBMkJ3VVdOV0xhYTh6amlXRytUbUxKSzhuRkhJWmZGWjFNUGxqeG1KanE2TmhVTm14WXp1cnJGZHV1VW9KdDd5dEErWldid0dBdy9ScnVxWnBybXAvWnBHblh5UmZwZ1JINWhQcjArMDcvTEZLTXE5OW1tNnpuRE9Ta0hUVE5HMnQ4NnNkNjN3SUtTOWUwRWRpMTFVY2IwYlFwaitrVE9pYTUza21kSFZKWmszVHZKN1lPQXdBd0l2eWl5SUE0SUhCZ1VXU1JkLzM1MG4rU3ZKSGtsZEtaalNXS1FOSW55WjhJYlJWamZDaWpodGR5cUJ2a3FUdis4c2tsMGt1a3B3N2hpUXBGMUdHY3ZxU0k4NTZCZURCUHZiSEhmLytLVzV5M0NCNGU4RDMzQjdwZFc3VG41a2xtZFZ6NGN2YWg3bDQ0RSs2SkYvcmErdWVlRzYyUzd0cjkvamUyeVJ0My9kbkcyTUFaMXMrelcyU2YrcDR3a1BtV3o3djhwbnJ2SzNsT0t2OTEvTkg2dnp6UnRrL3RjNUgvVG1vN2ZGdWg3OGZ4WmFudFc0K0pmbFVQOC92NjJmNi9JbFAyYVZzODNTckR3OEFNQTZOSWdEZ1ovVjkvMmVTZHltRFhoekhiWktialdXZ3A5Nm0vbzBMNE52NldHZXB3ZFErNzJjcEE4dm5LUmNQenJMOUJaUXBhVk11enR3Tmo1dW1XV29KQU1CRSsyKy81dnVRd0xmZ2g5VXRtRmpidnN3NjJQVDdQZWNsUXo5K2xSSnEwcjRCQUVaSTJBV0Fwd3dLbktVRVh0N242VE5pK0hsZHltelAyNWQyb2JUdis3KzFvYTNkUERKVEVxYjJQWENaZGZEbFRjcUE4eFJXZ2xsdTNPNDJIbmUySGdJQUFBQUFlRjdDTGdEc1pDUDQ4aTVsT1ZqMlk1bjFLaTZXeHdWTzlSZ3poRjZHQUV4eS82emlYWTgvdy9aQ200WnRDWWJ2NU9Yd2MyRVdBQUFBQUlEakVuWUJZRy82dm4rVkVueTVxUGUycDlsT20vWCt6MHZGQVFBQUFBQUFBTjhUZGdIZzJkUVorWmV4NnN0RGxsa0hYRm9yQlFBQUFBQUFBTURqaEYwQU9KaU44TXRGeWhZVVp5ZFdCRjFLdU9WTFNyaGxxVlVBQUFBQUFBREFkb1JkQURpYXV1M1JFSUI1a3hKK09YOGhiNjlOV2JubFM1S3VhWnBXalFNQUFBQUFBTUR1aEYwQUdKMjZBc3haU3ZEbDkvcDR1STFKbDJSVjc3K21CbHlzMkFJQUFBQUFBQURQUjlnRmdFblpXQTBtOWY1VmZUeUVZalp0L3Y0eHkzcjcvOC91N3ZsOTF6VE5TbTBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjSHIrQTNMQmQ0YXc4VXlMQUFBQUFFbEZUa1N1UW1DQ1xcXCIvPjwvZGVmcz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTIgMTRcXFwiPjxwYXRoIGQ9XFxcIk0uNjY3IDdhLjY2Ny42NjcgMCAwIDAgLjY2Ni42NjZoNS4wNkw0Ljg2IDkuMTkzYS42NjcuNjY3IDAgMCAwIC4yMTcgMS4wOTMuNjY4LjY2OCAwIDAgMCAuNzMtLjE0NmwyLjY2Ni0yLjY2N2EuNjY3LjY2NyAwIDAgMCAuMTQtLjIyLjY2Ny42NjcgMCAwIDAgMC0uNTA3LjY2Ny42NjcgMCAwIDAtLjE0LS4yMkw1LjgwNyAzLjg2YS42Ny42NyAwIDAgMC0uOTQ3Ljk0NmwxLjUzMyAxLjUyN2gtNS4wNkEuNjY3LjY2NyAwIDAgMCAuNjY3IDdaTTkuMzMzLjMzM0gyLjY2N2EyIDIgMCAwIDAtMiAydjJhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMHYtMmEuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdoNi42NjZhLjY2Ny42NjcgMCAwIDEgLjY2Ny42Njd2OS4zMzNhLjY2Ni42NjYgMCAwIDEtLjY2Ny42NjdIMi42NjdBLjY2Ni42NjYgMCAwIDEgMiAxMS42NjZ2LTJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYyYTIgMiAwIDAgMCAyIDJoNi42NjZhMiAyIDAgMCAwIDItMlYyLjMzM2EyIDIgMCAwIDAtMi0yWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDIwIDE2XFxcIj48cGF0aCBkPVxcXCJNMTcgMEgzYTMgMyAwIDAgMC0zIDN2MTBhMyAzIDAgMCAwIDMgM2gxNGEzIDMgMCAwIDAgMy0zVjNhMyAzIDAgMCAwLTMtM1ptLS40MSAyLTUuODggNS44OGExIDEgMCAwIDEtMS40MiAwTDMuNDEgMmgxMy4xOFpNMTggMTNhMSAxIDAgMCAxLTEgMUgzYTEgMSAwIDAgMS0xLTFWMy40MWw1Ljg4IDUuODhhMyAzIDAgMCAwIDQuMjQgMEwxOCAzLjQxVjEzWlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTUgMTRcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTEyLjg0NiA3LjU4M2EuNTgzLjU4MyAwIDAgMC0uNjEyLS4wODIgNC42OTYgNC42OTYgMCAwIDEtMS45NjYuNDI2QTQuNzU0IDQuNzU0IDAgMCAxIDUuNTIgMy4yMDJhNS4wMSA1LjAxIDAgMCAxIC4xNDUtMS4xNjYuNTgzLjU4MyAwIDAgMC0uNzc1LS42NiA1LjkxNSA1LjkxNSAwIDEgMCA4LjE2NiA2LjgyLjU4My41ODMgMCAwIDAtLjIxLS42MTNabS01LjU0MSAzLjkwM2E0Ljc0OCA0Ljc0OCAwIDAgMS0yLjk1Mi04LjQ0MXYuMTU3YTUuOTIgNS45MiAwIDAgMCA3LjE0IDUuNzg3IDQuNzMxIDQuNzMxIDAgMCAxLTQuMTg4IDIuNTJ2LS4wMjNaXFxcIiBmaWxsPVxcXCIjQTY2RUU5XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOS4zMzQgNS4zMzNIMTBBLjY2Ny42NjcgMCAwIDAgMTAgNGgtLjY2NmEuNjY3LjY2NyAwIDAgMCAwIDEuMzMzWm0wIDIuNjY3SDEwYS42NjcuNjY3IDAgMCAwIDAtMS4zMzRoLS42NjZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzNFpNNiA1LjMzM2guNjY3YS42NjcuNjY3IDAgMCAwIDAtMS4zMzNINmEuNjY3LjY2NyAwIDEgMCAwIDEuMzMzWk02IDhoLjY2N2EuNjY3LjY2NyAwIDEgMCAwLTEuMzM0SDZBLjY2Ny42NjcgMCAwIDAgNiA4Wm04IDUuMzMzaC0uNjY2VjJhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3SDMuMzMzQS42NjcuNjY3IDAgMCAwIDIuNjY3IDJ2MTEuMzMzSDJhLjY2Ni42NjYgMCAxIDAgMCAxLjMzM2gxMmEuNjY3LjY2NyAwIDAgMCAwLTEuMzMzWm0tNS4zMzMgMEg3LjMzNHYtMi42NjdoMS4zMzN2Mi42NjdabTMuMzMzIDBoLTJWMTBhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3SDYuNjY3QS42NjcuNjY3IDAgMCAwIDYgMTB2My4zMzNINFYyLjY2Nmg4djEwLjY2N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTYgNi42NjZoLjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1pNNiA4YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNEEuNjY3LjY2NyAwIDAgMCAxMCA4SDZabTcuMzMzLTIuMDRhLjg4Ljg4IDAgMCAwLS4wNC0uMTh2LS4wNmEuNzE0LjcxNCAwIDAgMC0uMTI3LS4xODdsLTQtNGEuNzEzLjcxMyAwIDAgMC0uMTg2LS4xMjcuMjEzLjIxMyAwIDAgMC0uMDYgMCAuNTg3LjU4NyAwIDAgMC0uMjItLjA3M0g0LjY2N2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoNi42NjZhMiAyIDAgMCAwIDItMlY1Ljk2Wm0tNC0yLjM1NCAxLjcyNyAxLjcyN0gxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LS42Njd2LTEuMDZaTTEyIDEyLjY2NmEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0LjY2NkEuNjY2LjY2NiAwIDAgMSA0IDEyLjY2NlYzLjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdIOHYyYTIgMiAwIDAgMCAyIDJoMnY2Wm0tMi0ySDZBLjY2Ny42NjcgMCAwIDAgNiAxMmg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTQgMTVcXFwiPjxwYXRoIGQ9XFxcIm0xMS43OSA2Ljg5Ni4wNTYuNDM3SDEzYS4xNjYuMTY2IDAgMCAxIC4xMTguMjg1bC4zNTMuMzUzLS4zNTMtLjM1M2EuMTY2LjE2NiAwIDAgMS0uMTE4LjA0OWgtMS4xNTRsLS4wNTUuNDM3YTQuODMzIDQuODMzIDAgMCAxLTQuMTg3IDQuMTg3bC0uNDM3LjA1NVYxMy41YS4xNjcuMTY3IDAgMCAxLS4wNS4xMThsLjM1NC4zNTMtLjM1My0uMzUzYS4xNjcuMTY3IDAgMCAxLS4yODUtLjExOHYtMS4xNTNsLS40MzctLjA1NkE0LjgzMyA0LjgzMyAwIDAgMSAyLjIxIDguMTA0bC0uMDU1LS40MzdIMWEuMTY3LjE2NyAwIDEgMSAwLS4zMzRoMS4xNTNsLjA1Ni0uNDM3QTQuODMzIDQuODMzIDAgMCAxIDYuMzk2IDIuNzFsLjQzNy0uMDU1VjEuNWEuMTY3LjE2NyAwIDAgMSAuMzM0IDB2MS4xNTNsLjQzNy4wNTZhNC44MzQgNC44MzQgMCAwIDEgNC4xODcgNC4xODdabS0uMzU3IDEuMzU0LjEtLjU4M2gtMS4yYS4xNjYuMTY2IDAgMSAxIDAtLjMzNGgxLjE5OWwtLjEtLjU4M0E0LjUgNC41IDAgMCAwIDcuNzUgMy4wNjdsLS41ODMtLjF2MS4yYS4xNjcuMTY3IDAgMCAxLS4wNS4xMThsLjMwNC4zMDMtLjMwMy0uMzAzYS4xNjcuMTY3IDAgMCAxLS4yODUtLjExOFYyLjk2OGwtLjU4My4xQTQuNSA0LjUgMCAwIDAgMi41NjcgNi43NWwtLjEuNTgzaDEuMmEuMTY3LjE2NyAwIDAgMSAuMTE4LjI4NWwuMzAzLjMwMy0uMzA0LS4zMDNhLjE2Ny4xNjcgMCAwIDEtLjExNy4wNDlIMi40NjhsLjEuNTgzYTQuNSA0LjUgMCAwIDAgMy42ODIgMy42ODNsLjU4My4xdi0xLjJhLjE2Ni4xNjYgMCAxIDEgLjMzNCAwdjEuMTk5bC41ODMtLjFhNC41IDQuNSAwIDAgMCAzLjY4My0zLjY4MlptLTQuNTI2LS44ODlhLjE2Ny4xNjcgMCAxIDEgLjE4Ni4yNzguMTY3LjE2NyAwIDAgMS0uMTg2LS4yNzhaXFxcIiBmaWxsPVxcXCJDdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiQ3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCA0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djYuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzM0IDBWNC42NjZBLjY2Ny42NjcgMCAwIDAgOCA0Wk00LjY2NyA4QS42NjcuNjY3IDAgMCAwIDQgOC42NjZ2Mi42NjdhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY4LjY2NkEuNjY3LjY2NyAwIDAgMCA0LjY2NyA4Wm02LjY2Ny0xLjMzNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2N3Y0YS42NjcuNjY3IDAgMCAwIDEuMzMzIDB2LTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3Wm0xLjMzMy01LjMzM0gzLjMzM2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoOS4zMzRhMiAyIDAgMCAwIDItMlYzLjMzM2EyIDIgMCAwIDAtMi0yWm0uNjY3IDExLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY3LjY2N0gzLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY2LS42NjdWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDkuMzMzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY3djkuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCA0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djYuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzM0IDBWNC42NjZBLjY2Ny42NjcgMCAwIDAgOCA0Wk00LjY2NyA4QS42NjcuNjY3IDAgMCAwIDQgOC42NjZ2Mi42NjdhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY4LjY2NkEuNjY3LjY2NyAwIDAgMCA0LjY2NyA4Wm02LjY2Ny0xLjMzNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2N3Y0YS42NjcuNjY3IDAgMCAwIDEuMzMzIDB2LTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3Wm0xLjMzMy01LjMzM0gzLjMzM2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoOS4zMzRhMiAyIDAgMCAwIDItMlYzLjMzM2EyIDIgMCAwIDAtMi0yWm0uNjY3IDExLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY3LjY2N0gzLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY2LS42NjdWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDkuMzMzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY3djkuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNOCA0YS42NjcuNjY3IDAgMCAwLS42NjcuNjY2djYuNjY3YS42NjcuNjY3IDAgMSAwIDEuMzM0IDBWNC42NjZBLjY2Ny42NjcgMCAwIDAgOCA0Wk00LjY2NyA4QS42NjcuNjY3IDAgMCAwIDQgOC42NjZ2Mi42NjdhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY4LjY2NkEuNjY3LjY2NyAwIDAgMCA0LjY2NyA4Wm02LjY2Ny0xLjMzNGEuNjY3LjY2NyAwIDAgMC0uNjY3LjY2N3Y0YS42NjcuNjY3IDAgMCAwIDEuMzMzIDB2LTRhLjY2Ny42NjcgMCAwIDAtLjY2Ni0uNjY3Wm0xLjMzMy01LjMzM0gzLjMzM2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoOS4zMzRhMiAyIDAgMCAwIDItMlYzLjMzM2EyIDIgMCAwIDAtMi0yWm0uNjY3IDExLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY3LjY2N0gzLjMzM2EuNjY2LjY2NiAwIDAgMS0uNjY2LS42NjdWMy4zMzNhLjY2Ny42NjcgMCAwIDEgLjY2Ny0uNjY3aDkuMzMzYS42NjcuNjY3IDAgMCAxIC42NjcuNjY3djkuMzMzWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNNC42NjcgMTAuNjY2YTEgMSAwIDAgMCAxLTEgLjUxNC41MTQgMCAwIDAgMC0uMWwxLjg2LTEuODZoLjMwNkw4LjkwNyA4Ljc4di4wNTNhMSAxIDAgMSAwIDIgMFY4Ljc4bDIuNDI2LTIuNDQ3YTEgMSAwIDEgMC0xLTEgLjUyMi41MjIgMCAwIDAgMCAuMUw5LjkyNyA3Ljg0SDkuODJMOC42NjcgNi42NjZhMSAxIDAgMCAwLTIgMGwtMiAyYTEgMSAwIDAgMCAwIDJabTkgMi42NjdIMi4zMzNWMkEuNjY3LjY2NyAwIDEgMCAxIDJ2MTJhLjY2Ny42NjcgMCAwIDAgLjY2Ny42NjZoMTJhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBhdGggZD1cXFwiTTYgNi42NjZoLjY2N2EuNjY3LjY2NyAwIDAgMCAwLTEuMzMzSDZhLjY2Ny42NjcgMCAwIDAgMCAxLjMzM1pNNiA4YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNEEuNjY3LjY2NyAwIDAgMCAxMCA4SDZabTcuMzMzLTIuMDRhLjg4Ljg4IDAgMCAwLS4wNC0uMTh2LS4wNmEuNzE0LjcxNCAwIDAgMC0uMTI3LS4xODdsLTQtNGEuNzEzLjcxMyAwIDAgMC0uMTg2LS4xMjcuMjEzLjIxMyAwIDAgMC0uMDYgMCAuNTg3LjU4NyAwIDAgMC0uMjItLjA3M0g0LjY2N2EyIDIgMCAwIDAtMiAydjkuMzMzYTIgMiAwIDAgMCAyIDJoNi42NjZhMiAyIDAgMCAwIDItMlY1Ljk2Wm0tNC0yLjM1NCAxLjcyNyAxLjcyN0gxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LS42Njd2LTEuMDZaTTEyIDEyLjY2NmEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0LjY2NkEuNjY2LjY2NiAwIDAgMSA0IDEyLjY2NlYzLjMzM2EuNjY3LjY2NyAwIDAgMSAuNjY3LS42NjdIOHYyYTIgMiAwIDAgMCAyIDJoMnY2Wm0tMi0ySDZBLjY2Ny42NjcgMCAwIDAgNiAxMmg0YS42NjcuNjY3IDAgMCAwIDAtMS4zMzRaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiAxNGExIDEgMCAxIDAtMS0xIDEgMSAwIDAgMCAxIDFabTUgMGExIDEgMCAxIDAtMS0xIDEgMSAwIDAgMCAxIDFabS01IDRhMSAxIDAgMSAwLTEtMSAxIDEgMCAwIDAgMSAxWm01IDBhMSAxIDAgMSAwLTEtMSAxIDEgMCAwIDAgMSAxWk03IDE0YTEgMSAwIDEgMC0xLTEgMSAxIDAgMCAwIDEgMVpNMTkgNGgtMVYzYTEgMSAwIDAgMC0yIDB2MUg4VjNhMSAxIDAgMCAwLTIgMHYxSDVhMyAzIDAgMCAwLTMgM3YxMmEzIDMgMCAwIDAgMyAzaDE0YTMgMyAwIDAgMCAzLTNWN2EzIDMgMCAwIDAtMy0zWm0xIDE1YTEgMSAwIDAgMS0xIDFINWExIDEgMCAwIDEtMS0xdi05aDE2Wm0wLTExSDRWN2ExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDFaTTcgMThhMSAxIDAgMSAwLTEtMSAxIDEgMCAwIDAgMSAxWlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEyIDE1XFxcIj48cGF0aCBkPVxcXCJtNi4xNCAxMC43NDIuMDIuMDU4LjAwNy4wMXYuMDM2YS4wNi4wNiAwIDAgMS0uMDA2LjAyN2wtLjAxLjAyMi0uMDA4LjAyMWEuMS4xIDAgMCAxLS4wNi4wNmwtLjAyMi4wMDgtLjAyMS4wMWEuMDYuMDYgMCAwIDEtLjAyNy4wMDZoLS4wMDZhLjE2Ni4xNjYgMCAwIDEtLjEwNi0uMDQuMjY2LjI2NiAwIDAgMS0uMDQtLjA2NmwtLjAwNC0uMDEtLjAwNS0uMDFhLjA2LjA2IDAgMCAxLS4wMDUtLjAyOHYtLjAyM2wtLjAwMS0uMDIzLS4wMDEtLjAxOC4wMDMtLjAwNy4wMTItLjAzM2EuNTc2LjU3NiAwIDAgMSAuMDIzLS4wMy4xNjYuMTY2IDAgMCAxIC4wNDQtLjAyNmwuMDE0LS4wMDVhLjE2Ny4xNjcgMCAwIDEgLjA5Ni0uMDFsLjA5NC0uNDkxLS4wOTQuNDlhLjE2Ni4xNjYgMCAwIDEgLjA3Ny4wMzhjLjAwOS4wMS4wMTguMDIyLjAyNi4wMzRabS42OTMtOS4zMzUgMy45NjMgMy45NjMuMDIzLjA3YS4zNy4zNyAwIDAgMSAuMDE0LjA1NHY2LjY3M2ExLjUgMS41IDAgMCAxLTEuNSAxLjVIMi42NjdhMS41IDEuNSAwIDAgMS0xLjA2MS0uNDRsLS4zNDguMzQ4LjM0OC0uMzQ4YTEuNSAxLjUgMCAwIDEtLjQ0LTEuMDZWMi44MzNhMS41IDEuNSAwIDAgMSAxLjUtMS41aDMuOTlsLjAxNS4wMDcuMTE2LjA2N2guMDQ2Wm0uODU0IDEuMzQ2TDYuODMzIDEuOXYyLjI2N0ExLjE2NyAxLjE2NyAwIDAgMCA4IDUuMzMzaDIuMjY3bC0uODUzLS44NTMtMS43MjctMS43MjdaTTYuNSAyLjE2N3YtLjVIMi42NjdBMS4xNjcgMS4xNjcgMCAwIDAgMS41IDIuODMzdjkuMzM0YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3IDEuMTY2aDYuNjY2YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3LTEuMTY2di02LjVIOGExLjUgMS41IDAgMCAxLTEuNS0xLjV2LTJabS0uNjE4IDUuMjE1YS4xNjcuMTY3IDAgMCAxIC4yODUuMTE4djEuMzMzYS4xNjcuMTY3IDAgMCAxLS4zMzQgMFY3LjVjMC0uMDQ0LjAxOC0uMDg3LjA1LS4xMThaXFxcIiBmaWxsPVxcXCJDdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiQ3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDEyIDE1XFxcIj48cGF0aCBkPVxcXCJtNi4xNCAxMC43NDIuMDIuMDU4LjAwNy4wMXYuMDM2YS4wNi4wNiAwIDAgMS0uMDA2LjAyN2wtLjAxLjAyMi0uMDA4LjAyMWEuMS4xIDAgMCAxLS4wNi4wNmwtLjAyMi4wMDgtLjAyMS4wMWEuMDYuMDYgMCAwIDEtLjAyNy4wMDZoLS4wMDZhLjE2Ni4xNjYgMCAwIDEtLjEwNi0uMDQuMjY2LjI2NiAwIDAgMS0uMDQtLjA2NmwtLjAwNC0uMDEtLjAwNS0uMDFhLjA2LjA2IDAgMCAxLS4wMDUtLjAyOHYtLjAyM2wtLjAwMS0uMDIzLS4wMDEtLjAxOC4wMDMtLjAwNy4wMTItLjAzM2EuNTc2LjU3NiAwIDAgMSAuMDIzLS4wMy4xNjYuMTY2IDAgMCAxIC4wNDQtLjAyNmwuMDE0LS4wMDVhLjE2Ny4xNjcgMCAwIDEgLjA5Ni0uMDFsLjA5NC0uNDkxLS4wOTQuNDlhLjE2Ni4xNjYgMCAwIDEgLjA3Ny4wMzhjLjAwOS4wMS4wMTguMDIyLjAyNi4wMzRabS42OTMtOS4zMzUgMy45NjMgMy45NjMuMDIzLjA3YS4zNy4zNyAwIDAgMSAuMDE0LjA1NHY2LjY3M2ExLjUgMS41IDAgMCAxLTEuNSAxLjVIMi42NjdhMS41IDEuNSAwIDAgMS0xLjA2MS0uNDRsLS4zNDguMzQ4LjM0OC0uMzQ4YTEuNSAxLjUgMCAwIDEtLjQ0LTEuMDZWMi44MzNhMS41IDEuNSAwIDAgMSAxLjUtMS41aDMuOTlsLjAxNS4wMDcuMTE2LjA2N2guMDQ2Wm0uODU0IDEuMzQ2TDYuODMzIDEuOXYyLjI2N0ExLjE2NyAxLjE2NyAwIDAgMCA4IDUuMzMzaDIuMjY3bC0uODUzLS44NTMtMS43MjctMS43MjdaTTYuNSAyLjE2N3YtLjVIMi42NjdBMS4xNjcgMS4xNjcgMCAwIDAgMS41IDIuODMzdjkuMzM0YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3IDEuMTY2aDYuNjY2YTEuMTY3IDEuMTY3IDAgMCAwIDEuMTY3LTEuMTY2di02LjVIOGExLjUgMS41IDAgMCAxLTEuNS0xLjV2LTJabS0uNjE4IDUuMjE1YS4xNjcuMTY3IDAgMCAxIC4yODUuMTE4djEuMzMzYS4xNjcuMTY3IDAgMCAxLS4zMzQgMFY3LjVjMC0uMDQ0LjAxOC0uMDg3LjA1LS4xMThaXFxcIiBmaWxsPVxcXCJDdXJyZW50Q29sb3JcXFwiIHN0cm9rZT1cXFwiQ3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTAuNjY3IDkuMzMzSDUuMzMzYS42NjcuNjY3IDAgMCAwIDAgMS4zMzNoNS4zMzRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzM1ptMC0yLjY2N2gtNGEuNjY3LjY2NyAwIDAgMCAwIDEuMzM0aDRhLjY2Ny42NjcgMCAwIDAgMC0xLjMzNFptMi42NjYtNGgtMlYyQS42NjcuNjY3IDAgMSAwIDEwIDJ2LjY2Nkg4LjY2N1YyYS42NjcuNjY3IDAgMSAwLTEuMzM0IDB2LjY2Nkg2VjJhLjY2Ny42NjcgMCAwIDAtMS4zMzMgMHYuNjY2aC0yQS42NjcuNjY3IDAgMCAwIDIgMy4zMzN2OS4zMzNhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMy4zMzNhLjY2Ni42NjYgMCAwIDAtLjY2Ny0uNjY3Wm0tLjY2NiAxMGEuNjY3LjY2NyAwIDAgMS0uNjY3LjY2N0g0YS42NjYuNjY2IDAgMCAxLS42NjctLjY2N1Y0aDEuMzM0di42NjZhLjY2Ny42NjcgMCAxIDAgMS4zMzMgMFY0aDEuMzMzdi42NjZhLjY2Ny42NjcgMCAwIDAgMS4zMzQgMFY0SDEwdi42NjZhLjY2Ni42NjYgMCAxIDAgMS4zMzMgMFY0aDEuMzM0djguNjY2WlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTIuOTYgOC42NjZjLS4xNDcgMC0uMy0uMDQ2LS40NDctLjA4YTYuMjkgNi4yOSAwIDAgMS0uODczLS4yNiAxLjMzMyAxLjMzMyAwIDAgMC0xLjY1My42NjdsLS4xNDcuM0E4LjEyIDguMTIgMCAwIDEgOC4wNjcgNy45NmE4LjEyIDguMTIgMCAwIDEtMS4zMzQtMS43NzRMNy4wMTMgNmExLjMzMyAxLjMzMyAwIDAgMCAuNjY3LTEuNjU0IDYuODg3IDYuODg3IDAgMCAxLS4yNi0uODczYy0uMDMzLS4xNDctLjA2LS4zLS4wOC0uNDUzYTIgMiAwIDAgMC0yLTEuNjZoLTJhMiAyIDAgMCAwLTIgMi4yNzMgMTIuNjY3IDEyLjY2NyAwIDAgMCAxMS4wMTMgMTAuOTczaC4yNTRhMiAyIDAgMCAwIDEuODI3LTEuMTg1IDIgMiAwIDAgMCAuMTczLS44MjF2LTJhMiAyIDAgMCAwLTEuNjQ3LTEuOTM0Wm0uMzMzIDRhLjY2Ni42NjYgMCAwIDEtLjQ4Mi42NDEuNzA3LjcwNyAwIDAgMS0uMjkuMDI2QTExLjMzMyAxMS4zMzMgMCAwIDEgMi43MTIgMy40OGEuNzI3LjcyNyAwIDAgMSAuMTY3LS41NDcuNjY3LjY2NyAwIDAgMSAuNS0uMjI3aDJhLjY2Ny42NjcgMCAwIDEgLjY2Ny41MjcgNy40MTQgNy40MTQgMCAwIDAgLjQwNyAxLjU3M2wtLjkzNC40MzRhLjY2Ny42NjcgMCAwIDAtLjMyNy44ODYgOS42NiA5LjY2IDAgMCAwIDQuNjY3IDQuNjY3LjY2Ni42NjYgMCAwIDAgLjUwNyAwIC42NjUuNjY1IDAgMCAwIC4zOC0uMzQ3bC40MTMtLjkzM2MuMzQ1LjEyMy42OTcuMjI2IDEuMDUzLjMwNy4xNzguMDQuMzU4LjA3My41NC4xYS42NjcuNjY3IDAgMCAxIC41MjcuNjY2bC4wMTMgMi4wOFpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNSAxNVxcXCI+PHBhdGggZD1cXFwiTTEwLjkxNyA5LjY2NmgtLjY1OWwtLjIzMy0uMjI1YTUuNDE3IDUuNDE3IDAgMCAwIDEuMjMzLTQuNDVDMTAuODY3IDIuNjc1IDguOTMzLjgyNSA2LjYuNTQxQTUuNDIgNS40MiAwIDAgMCAuNTQyIDYuNmMuMjgzIDIuMzMzIDIuMTMzIDQuMjY2IDQuNDUgNC42NThhNS40MTcgNS40MTcgMCAwIDAgNC40NS0xLjIzM2wuMjI1LjIzM3YuNjU4bDMuNTQxIDMuNTQyYS44OC44OCAwIDAgMCAxLjI0MiAwIC44OC44OCAwIDAgMCAwLTEuMjQybC0zLjUzMy0zLjU1Wm0tNSAwYTMuNzQ1IDMuNzQ1IDAgMCAxLTMuNzUtMy43NSAzLjc0NSAzLjc0NSAwIDAgMSAzLjc1LTMuNzUgMy43NDUgMy43NDUgMCAwIDEgMy43NSAzLjc1IDMuNzQ1IDMuNzQ1IDAgMCAxLTMuNzUgMy43NVpcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCI+PHBhdGggZmlsbD1cXFwiI2ZmZlxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIk04LjE2NyA3LjMzNHYuNWg0LjVhLjE2Ny4xNjcgMCAxIDEgMCAuMzMzaC00LjV2NC41YS4xNjYuMTY2IDAgMSAxLS4zMzQgMHYtNC41aC00LjVhLjE2Ny4xNjcgMCAwIDEgMC0uMzMzaDQuNXYtNC41YS4xNjcuMTY3IDAgMSAxIC4zMzQgMHY0WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNyAxNlxcXCI+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIiBkPVxcXCJNOC4xNjcgMy42di0uODA1bC0uNTcuNTY5LS44NjYuODY3YS4zMTIuMzEyIDAgMCAxLS40NjIgMCAuMzEyLjMxMiAwIDAgMSAwLS40NjJsMi0yLS4yMzQtLjIzNS4yMzQuMjM1YS4zMTIuMzEyIDAgMCAxIC40NjIgMGwuMjMzLS4yMzQtLjIzMy4yMzQgMiAyYS4zMTIuMzEyIDAgMCAxIDAgLjQ2Mi4zNjguMzY4IDAgMCAxLS4xMDguMDguMjkyLjI5MiAwIDAgMS0uMTIzLjAyMi4yOTIuMjkyIDAgMCAxLS4xMjMtLjAyMS4zNjguMzY4IDAgMCAxLS4xMDgtLjA4MWwtLjg2Ny0uODY3LS41NjktLjU3djguNTM5YzAgLjEyNC0uMDQuMjAyLS4wODUuMjQ4LS4wNDYuMDQ1LS4xMjQuMDg1LS4yNDguMDg1cy0uMjAyLS4wNC0uMjQ4LS4wODVjLS4wNDUtLjA0Ni0uMDg1LS4xMjQtLjA4NS0uMjQ4VjMuNlptMyAyLjczM0gxMi41Yy45NSAwIDEuNjY3LjcxNyAxLjY2NyAxLjY2N3Y0LjY2NmMwIC45NS0uNzE4IDEuNjY3LTEuNjY3IDEuNjY3aC04Yy0uOTUgMC0xLjY2Ny0uNzE3LTEuNjY3LTEuNjY3VjhjMC0uOTUuNzE4LTEuNjY3IDEuNjY3LTEuNjY3aDEuMzMzYy4xMjUgMCAuMjAyLjA0LjI0OC4wODYuMDQ2LjA0NS4wODYuMTIzLjA4Ni4yNDcgMCAuMTI1LS4wNC4yMDItLjA4Ni4yNDgtLjA0Ni4wNDYtLjEyMy4wODYtLjI0OC4wODZINC41YTEgMSAwIDAgMC0uNzE5LjI4QTEgMSAwIDAgMCAzLjUgOHY0LjY2NmExIDEgMCAwIDAgLjI4MS43MiAxIDEgMCAwIDAgLjcxOS4yOGg4YTEgMSAwIDAgMCAuNzE5LS4yOCAxIDEgMCAwIDAgLjI4MS0uNzJWOGExIDEgMCAwIDAtLjI4MS0uNzJBMSAxIDAgMCAwIDEyLjUgN2gtMS4zMzNjLS4xMjUgMC0uMjAyLS4wNC0uMjQ4LS4wODYtLjA0Ni0uMDQ2LS4wODYtLjEyMy0uMDg2LS4yNDggMC0uMTI0LjA0LS4yMDIuMDg2LS4yNDcuMDQ2LS4wNDYuMTIzLS4wODYuMjQ4LS4wODZaXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDE2IDIwXFxcIj48cGF0aCBkPVxcXCJNMTIuNjY3IDd2LjMzM0gxM0EyLjY2NyAyLjY2NyAwIDAgMSAxNS42NjcgMTB2N0EyLjY2NyAyLjY2NyAwIDAgMSAxMyAxOS42NjdIM0EyLjY2NyAyLjY2NyAwIDAgMSAuMzMzIDE3di03QTIuNjY3IDIuNjY3IDAgMCAxIDMgNy4zMzNoLjMzM1Y1YTQuNjY3IDQuNjY3IDAgMCAxIDkuMzM0IDB2MlpNMTEgNy4zMzNoLjMzM1Y1YTMuMzMzIDMuMzMzIDAgMCAwLTYuNjY2IDB2Mi4zMzNIMTFabTIuOTQzIDEwLjYxYy4yNS0uMjUuMzktLjU5LjM5LS45NDN2LTdBMS4zMzMgMS4zMzMgMCAwIDAgMTMgOC42NjdIM0ExLjMzMyAxLjMzMyAwIDAgMCAxLjY2NyAxMHY3QTEuMzMzIDEuMzMzIDAgMCAwIDMgMTguMzMzaDEwYy4zNTQgMCAuNjkzLS4xNC45NDMtLjM5WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlPVxcXCIjMTU1MzY2XFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiBmaWxsPVxcXCJub25lXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTUgMTRcXFwiPjxwYXRoIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlPVxcXCJjdXJyZW50Q29sb3JcXFwiIHN0cm9rZS13aWR0aD1cXFwiLjY2N1xcXCIgZD1cXFwiTTcuNSA0LjY2NmExIDEgMCAwIDAtLjg2OS41bC0uMDA2LjAxMmEuMzMzLjMzMyAwIDAgMS0uMjAzLjE2NmwuMDkzLjMyLS4wOTMtLjMyYS4zMzMuMzMzIDAgMCAxLS4zNi0uMTJsLS4yNjYuMi4yNjctLjJhLjMzMy4zMzMgMCAwIDEtLjAxNS0uMzc5bC4wMDQtLjAwNi4wMDMtLjAwNkExLjY2NyAxLjY2NyAwIDAgMSA3LjUgNGExLjY2NyAxLjY2NyAwIDAgMSAuNTU0IDMuMjMzbC0uMjIuMDh2LjM1M2EuMzMzLjMzMyAwIDEgMS0uNjY2IDBWN2EuMzMzLjMzMyAwIDAgMSAuMzMzLS4zMzQgMSAxIDAgMCAwIDAtMlptMCAwVjVsLjAwMS0uMzM0Wm0tLjMxNiA0Ljg5OC4wMS0uMDIuMDA4LS4wMjNhLjE3My4xNzMgMCAwIDEgLjAyLS4wMzkgMS4yIDEuMiAwIDAgMSAuMDQ2LS4wNi4zMzMuMzMzIDAgMCAxIC4xMDQtLjA2N2wtLjEyOC0uMzA4LjEyOC4zMDhhLjMzMy4zMzMgMCAwIDEgLjM2NS4wNzMuMzMzLjMzMyAwIDAgMSAuMDk2LjIzNnYuMDE1YS4zMzMuMzMzIDAgMCAxLS4wMi4xMjZ2LjAwMWEuMjY3LjI2NyAwIDAgMS0uMDYyLjA5OGwuMjM2LjIzNi0uMjM2LS4yMzZhLjI2Ny4yNjcgMCAwIDEtLjA5OC4wNjJsLS4wMS4wMDQtLjAxMS4wMDVhLjI5My4yOTMgMCAwIDEtLjIzNyAwbC0uMDEtLjAwNS0uMDEyLS4wMDRhLjI2Ny4yNjcgMCAwIDEtLjA5Ny0uMDYybC0uMjM2LjIzNi4yMzYtLjIzNmEuMjY3LjI2NyAwIDAgMS0uMDYzLS4wOThsLS4wMDUtLjAxNC0uMDA3LS4wMTVhLjIyNy4yMjcgMCAwIDEtLjAyMS0uMTAydi0uMDMzYS41NzMuNTczIDAgMCAxLS4wMDItLjA2NC4wOTQuMDk0IDAgMCAxIC4wMDYtLjAxNFpNMy45OCAxLjczNGE2LjMzMyA2LjMzMyAwIDEgMSA3LjAzOCAxMC41MzJBNi4zMzMgNi4zMzMgMCAwIDEgMy45OCAxLjczNFptLjM3IDkuOTc3YTUuNjY2IDUuNjY2IDAgMSAwIDYuMjk3LTkuNDIyIDUuNjY2IDUuNjY2IDAgMCAwLTYuMjk2IDkuNDIyWlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNCAxNFxcXCI+PHBhdGggZmlsbD1cXFwicmVkXFxcIiBkPVxcXCJtOC40MSA3IDQuMy00LjI5YTEuMDA0IDEuMDA0IDAgMCAwLTEuNDItMS40Mkw3IDUuNTlsLTQuMjktNC4zYTEuMDA0IDEuMDA0IDAgMSAwLTEuNDIgMS40Mkw1LjU5IDdsLTQuMyA0LjI5YS45OTkuOTk5IDAgMCAwIDAgMS40MiAxIDEgMCAwIDAgMS40MiAwTDcgOC40MWw0LjI5IDQuM2ExLjAwMSAxLjAwMSAwIDAgMCAxLjYzOS0uMzI1IDEgMSAwIDAgMC0uMjItMS4wOTVMOC40MSA3WlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCA2IDZcXFwiPjxjaXJjbGUgY3g9XFxcIjNcXFwiIGN5PVxcXCIzXFxcIiByPVxcXCIzXFxcIiBmaWxsPVxcXCIjRkY3MjY0XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJNMTMuOTk5IDcuMzMzYy0uNCAwLS42NjcuMjY3LS42NjcuNjY3IDAgMS45MzMtMSAzLjY2Ni0yLjY2NyA0LjYtMi41MzMgMS40NjYtNS44LjYtNy4yNjYtMS45MzQtMS40NjctMi41MzMtLjYtNS44IDEuOTMzLTcuMjY2YTUuMzM4IDUuMzM4IDAgMCAxIDYuNTMzLjkzM2gtMS42Yy0uNCAwLS42NjYuMjY3LS42NjYuNjY3cy4yNjYuNjY2LjY2Ni42NjZoM2MuNCAwIC42NjctLjI2Ni42NjctLjY2NlYyYzAtLjQtLjI2Ny0uNjY3LS42NjctLjY2N1MxMi42IDEuNiAxMi42IDJ2MS4yYy0xLjI2Ny0xLjItMi44NjctMS44NjctNC42LTEuODY3LTMuNjY3IDAtNi42NjcgMy02LjY2NyA2LjY2NyAwIDMuNjY2IDMgNi42NjYgNi42NjcgNi42NjYgMy42NjYgMCA2LjY2Ni0zIDYuNjY2LTYuNjY2IDAtLjQtLjI2Ni0uNjY3LS42NjYtLjY2N1pcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTMgMTJoMThtLTUtNSA1IDUtNSA1XFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIyXFxcIiBzdHJva2UtbGluZWNhcD1cXFwicm91bmRcXFwiIHN0cm9rZS1saW5lam9pbj1cXFwicm91bmRcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIm0xMC4xNjUgOS42NjIuMTYzLjE2NC4yMS0uMDk2YTEuNzIgMS43MiAwIDAgMSAxLjg5NS4zMTRsMS4zNzYgMS40MDkuMjM4LS4yMzMtLjIzMy4yMzhhMS42NjUgMS42NjUgMCAwIDEgMCAyLjM4NGwtLjAwMy4wMDJhMS42NjcgMS42NjcgMCAwIDEtMi4zNTUgMGwtMS40MTItMS40MTJhMS42NjcgMS42NjcgMCAwIDEtLjI5My0xLjkybC4xMS0uMjE2LS4xNzItLjE3Mi0uNTkzLS41OTMtLjIwNC0uMjA0LS4yMzEuMTczYTQuMzMzIDQuMzMzIDAgMSAxIC44NzItLjg3M2wtLjE3My4yMzEuMjA1LjIwNC42LjZabTIuODUzIDMuODk4YTEgMSAwIDAgMCAuNTQzLS41NDIuOTk5Ljk5OSAwIDAgMC0uMjE5LTEuMDk0bC0xLjQxMi0xLjQxMmExIDEgMCAwIDAtMS42MzcuMzIzIDEgMSAwIDAgMCAuMjE5IDEuMDk1bDEuNDEyIDEuNDExdi4wMDFhLjk5OS45OTkgMCAwIDAgMS4wOTQuMjE4Wk02Ljc1MiA5LjYzYTMuNjY3IDMuNjY3IDAgMSAwLTEuNDI0LTcuMTk0QTMuNjY3IDMuNjY3IDAgMCAwIDYuNzUyIDkuNjNaXFxcIiBmaWxsPVxcXCIjQTZCNUJBXFxcIiBzdHJva2U9XFxcImN1cnJlbnRDb2xvclxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtMTQuMjEyIDYuMzY2LTEuMjYtLjQyLjU5My0xLjE4NkEuNjY3LjY2NyAwIDAgMCAxMy40MiA0bC0xLjQyLTEuNDJhLjY2Ny42NjcgMCAwIDAtLjc2Ny0uMTI3bC0xLjE4Ny41OTMtLjQyLTEuMjZBLjY2Ny42NjcgMCAwIDAgOSAxLjMzM2gtMmEuNjY3LjY2NyAwIDAgMC0uNjM0LjQ1M2wtLjQyIDEuMjYtMS4xODYtLjU5M2EuNjY3LjY2NyAwIDAgMC0uNzYuMTI3TDIuNTc5IDRhLjY2Ny42NjcgMCAwIDAtLjEyNy43NjZsLjU5MyAxLjE4Ny0xLjI2LjQyQS42NjcuNjY3IDAgMCAwIDEuMzMyIDd2MmEuNjY3LjY2NyAwIDAgMCAuNDUzLjYzM2wxLjI2LjQyLS41OTMgMS4xODdhLjY2Ny42NjcgMCAwIDAgLjEyNy43NmwxLjQyIDEuNDJhLjY2Ny42NjcgMCAwIDAgLjc2Ni4xMjZsMS4xODctLjU5My40MiAxLjI2YS42NjcuNjY3IDAgMCAwIC42MzMuNDUzaDJhLjY2Ny42NjcgMCAwIDAgLjYzNC0uNDUzbC40Mi0xLjI2IDEuMTg2LjU5M0EuNjY2LjY2NiAwIDAgMCAxMiAxMy40MmwxLjQyLTEuNDJhLjY2Ny42NjcgMCAwIDAgLjEyNi0uNzY3bC0uNTkzLTEuMTg3IDEuMjYtLjQyQS42NjcuNjY3IDAgMCAwIDE0LjY2NSA5VjdhLjY2Ny42NjcgMCAwIDAtLjQ1My0uNjM0Wm0tLjg4IDIuMTU0LS44LjI2NmExLjMzNCAxLjMzNCAwIDAgMC0uNzczIDEuODhsLjM4Ljc2LS43MzQuNzM0LS43NC0uNGExLjMzNSAxLjMzNSAwIDAgMC0xLjg2Ljc3M2wtLjI2Ni44aC0xLjA2bC0uMjY3LS44YTEuMzMzIDEuMzMzIDAgMCAwLTEuODgtLjc3M2wtLjc2LjM4LS43MzMtLjczNC40LS43NGExLjMzMyAxLjMzMyAwIDAgMC0uNzc0LTEuODhsLS44LS4yNjZWNy40OGwuOC0uMjY3YTEuMzMzIDEuMzMzIDAgMCAwIC43NzQtMS44OGwtLjM4LS43NC43MzMtLjczMy43NC4zOGExLjMzMyAxLjMzMyAwIDAgMCAxLjg4LS43NzRsLjI2Ny0uOGgxLjA0bC4yNjYuOGExLjMzMyAxLjMzMyAwIDAgMCAxLjg4Ljc3NGwuNzYtLjM4LjczNC43MzMtLjQuNzRhMS4zMzMgMS4zMzMgMCAwIDAgLjc3MyAxLjg2bC44LjI2N3YxLjA2Wk03Ljk5OSA1LjMzM2EyLjY2NyAyLjY2NyAwIDEgMCAwIDUuMzMzIDIuNjY3IDIuNjY3IDAgMCAwIDAtNS4zMzNabTAgNGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE4IDE4XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNC43MjMgMi43MzhhLjc1Ljc1IDAgMCAwLS42My0uMTUgNiA2IDAgMCAxLTQuNjY1LS45NTMuNzUuNzUgMCAwIDAtLjg1NiAwIDYgNiAwIDAgMS00LjY2NC45NTMuNzUuNzUgMCAwIDAtLjkwOC43MzVWOC45MWE2Ljc1IDYuNzUgMCAwIDAgMi44MjcgNS40OThsMi43MzggMS45NWEuNzUuNzUgMCAwIDAgLjg3IDBsMi43MzctMS45NUE2Ljc1IDYuNzUgMCAwIDAgMTUgOC45MVYzLjMyM2EuNzQ5Ljc0OSAwIDAgMC0uMjc3LS41ODVaTTEzLjUgOC45MWE1LjI0OSA1LjI0OSAwIDAgMS0yLjE5NyA0LjI3NUw5IDE0LjgyOGwtMi4zMDMtMS42NDNBNS4yNSA1LjI1IDAgMCAxIDQuNSA4LjkxVjQuMTg1QTcuNSA3LjUgMCAwIDAgOSAzLjE0M2E3LjUgNy41IDAgMCAwIDQuNSAxLjA0MlY4LjkxWm0tMy4zNDUtMS43MTdMOC4xMzcgOS4yMThsLS42NjctLjY3NWEuNzUzLjc1MyAwIDEgMC0xLjA2NSAxLjA2NWwxLjIgMS4yYS43NS43NSAwIDAgMCAxLjA2NSAwbDIuNTgtMi41NThhLjc1My43NTMgMCAwIDAtMS4wNjUtMS4wNjVsLS4wMy4wMDhaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNC4yNzMgNS43Njd2LS4wNGE2LjY2NyA2LjY2NyAwIDAgMC0xMi41Mi0uMDQuNTY3LjU2NyAwIDAgMC0uMDUzLjE2IDYuNjY3IDYuNjY3IDAgMSAwIDEyLjU3My0uMDhaTTggMi42NjdhNS4zMzMgNS4zMzMgMCAwIDEgNC42MTMgMi42NjZoLS44YTIgMiAwIDAgMC0zLjA4LjE0N0EyLjExMyAyLjExMyAwIDAgMCA4IDUuMzMzYy0uMjUxLjAwNS0uNS4wNTUtLjczMy4xNDdhMiAyIDAgMCAwLTMuMDgtLjE0N2gtLjhBNS4zMzMgNS4zMzMgMCAwIDEgOCAyLjY2N1ptMyA0YS42NjcuNjY3IDAgMSAxLTEuMzM0IDAgLjY2Ny42NjcgMCAwIDEgMS4zMzQgMFptLTQuNjY3IDBhLjY2Ny42NjcgMCAxIDEtMS4zMzMgMCAuNjY3LjY2NyAwIDAgMSAxLjMzMyAwWk04IDEzLjMzM0E1LjMzMyA1LjMzMyAwIDAgMSAyLjY2NyA4Yy4wMDMtLjQ1LjA2LS44OTguMTczLTEuMzMzaC44MjdhMiAyIDAgMCAwIDQgLjEyLjY2Ny42NjcgMCAwIDEgLjY2NiAwIDIgMiAwIDEgMCA0LS4xMmguODI3Yy4xMTIuNDM1LjE3Ljg4My4xNzMgMS4zMzNBNS4zMzQgNS4zMzQgMCAwIDEgOCAxMy4zMzNabTEuNTczLTMuODQ2YTIuNTA3IDIuNTA3IDAgMCAxLTMuMTQ2IDAgLjY2Ny42NjcgMCAwIDAtLjg1NCAxLjAyNiAzLjc4NyAzLjc4NyAwIDAgMCA0Ljg1NCAwIC42NjguNjY4IDAgMCAwLS44NTQtMS4wMjZaXFxcIiBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE3IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk0xNC44OSA2LjQ0N0EuNjY2LjY2NiAwIDAgMCAxNC4zMTYgNmwtMy43OTMtLjU1M0w4LjgyMyAyYS42NjcuNjY3IDAgMCAwLTEuMiAwbC0xLjcgMy40NEwyLjEzIDZhLjY2Ny42NjcgMCAwIDAtLjU0LjQ1My42NjcuNjY3IDAgMCAwIC4xNjYuNjY3TDQuNTEgOS43ODdsLS42NjcgMy43ODZhLjY2Ny42NjcgMCAwIDAgLjk2Ny43MTRsMy40MTMtMS43OCAzLjQgMS43ODZjLjA5NC4wNTMuMi4wOC4zMDcuMDhhLjY2Ny42NjcgMCAwIDAgLjYyNC0uNDIuNjY2LjY2NiAwIDAgMCAuMDM2LS4zNzNsLS42NjctMy43ODcgMi43NTMtMi42NjZhLjY2Ny42NjcgMCAwIDAgLjIxNC0uNjhabS00LjEgMi42NjZhLjY2Ni42NjYgMCAwIDAtLjE5NC41OTRsLjQ4IDIuNzkzLTIuNTA2LTEuMzMzYS42NjYuNjY2IDAgMCAwLS42MjcgMEw1LjQzNiAxMi41bC40OC0yLjc5M2EuNjY3LjY2NyAwIDAgMC0uMTkzLS41OTRsLTItMiAyLjgwNy0uNDA2YS42NjcuNjY3IDAgMCAwIC41MDYtLjM2N0w4LjIyMyAzLjhsMS4yNTMgMi41NDdhLjY2Ny42NjcgMCAwIDAgLjUwNy4zNjZsMi44MDcuNDA3LTIgMS45OTNaXFxcIiBmaWxsPVxcXCIjMDZEQkU0XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgZmlsbD1cXFwibm9uZVxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBmaWxsPVxcXCIjZmZmXFxcIiBkPVxcXCJNNi44NzUgMTAuNzI5YS42NjUuNjY1IDAgMCAxLS40NzEtLjE5Nkw0LjUyOSA4LjY1OGEuNjY3LjY2NyAwIDAgMSAuOTQyLS45NDJsMS40MDQgMS40MDMgMy42NTQtMy42NTNhLjY2Ny42NjcgMCAwIDEgLjk0Mi45NDJsLTQuMTI1IDQuMTI1YS42NjQuNjY0IDAgMCAxLS40NzEuMTk2WlxcXCIgb3BhY2l0eT1cXFwiLjk5XFxcIi8+PHBhdGggZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiBkPVxcXCJNOCAxLjMzM0E2LjY2NyA2LjY2NyAwIDEgMCAxNC42NjcgOCA2LjY3NCA2LjY3NCAwIDAgMCA4IDEuMzMzWm0zLjQ3MSA1LjA3Ni00LjEyNSA0LjEyNWEuNjY3LjY2NyAwIDAgMS0uOTQyIDBMNC41MjkgOC42NTlhLjY2Ny42NjcgMCAwIDEgLjk0Mi0uOTQzbDEuNDA0IDEuNDAzIDMuNjU0LTMuNjUzYS42NjcuNjY3IDAgMCAxIC45NDIuOTQzWlxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAxNCAxNFxcXCI+PHBhdGggZD1cXFwiTTcgLjMzMmMtMy42NjcgMC02LjY2NyAzLTYuNjY3IDYuNjY3IDAgMy42NjYgMyA2LjY2NiA2LjY2NyA2LjY2NiAzLjY2NiAwIDYuNjY2LTMgNi42NjYtNi42NjYgMC0zLjY2Ny0zLTYuNjY3LTYuNjY2LTYuNjY3Wm0yLjQ2NiA4LjJhLjY0NC42NDQgMCAwIDEgMCAuOTMzLjY0NC42NDQgMCAwIDEtLjkzMyAwTDcgNy45MzIgNS40NjYgOS40NjVhLjY0NC42NDQgMCAwIDEtLjkzMyAwIC42NDQuNjQ0IDAgMCAxIDAtLjkzM2wxLjUzMy0xLjUzMy0xLjUzMy0xLjUzNGEuNjQ0LjY0NCAwIDAgMSAwLS45MzMuNjQ0LjY0NCAwIDAgMSAuOTMzIDBMNyA2LjA2NWwxLjUzMy0xLjUzM2EuNjQ0LjY0NCAwIDAgMSAuOTMzIDAgLjY0NC42NDQgMCAwIDEgMCAuOTMzTDcuOTMzIDdsMS41MzMgMS41MzNaXFxcIiBmaWxsPVxcXCIjRDEwMDFFXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDMyIDMyXFxcIj48Y2lyY2xlIGN4PVxcXCIxNlxcXCIgY3k9XFxcIjE2XFxcIiByPVxcXCIxNlxcXCIgZmlsbD1cXFwiI0YxRjdGOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC43MDIgMTcuNjlhMi43NDkgMi43NDkgMCAwIDAgMi4zNSAxLjQxMWwuOTMzLjAxOC0uNzM0LjU3OGE2LjQ5OCA2LjQ5OCAwIDAgMS0zLjQwMSAxLjM2MiA4LjM0MiA4LjM0MiAwIDAgMCAzLjM2Ny43MDVoLjAwNGE4LjM1OCA4LjM1OCAwIDAgMCA4LjQ0Ni04LjQyNHYtLjU2OGwuMTM0LS4xYy4yNjMtLjE5Ni41MS0uNDE0LjczNy0uNjVMMTAuNzAyIDE3LjY5Wm0wIDBoLjA1MmMuMzExLS4wMDMuNjItLjA1LjkxOC0uMTQxbC0uMDMyLS42NDZhMi43NDEgMi43NDEgMCAwIDEtMi4xNTgtMi4xNzdjLjMyMi4xMS42Ni4xNzIgMS4wMDQuMTgybDEuMTU2LjAzMS0uOTYyLS42NDJhMi43MzQgMi43MzQgMCAwIDEtMS4yMTctMi4yOGMwLS4zMjMuMDU2LS42NDIuMTY0LS45NDNhOS4wNjQgOS4wNjQgMCAwIDAgNi4yMzYgMi45NDFsLjQ0NS4wMjMtLjEwNC0uNDM0YTIuNzQyIDIuNzQyIDAgMCAxIDQuNjgtMi41bC4xMjguMTM2LjE4My0uMDM2Yy4zODQtLjA3Ni43Ni0uMTg2IDEuMTIyLS4zMjlhMi43NjMgMi43NjMgMCAwIDEtLjc1OC42NjhMMTAuNzAyIDE3LjY5WlxcXCIgZmlsbD1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlPVxcXCIjMTU1MzY2XFxcIiBzdHJva2Utd2lkdGg9XFxcIi42NjdcXFwiLz48L3N2Zz5cIjsiLCJleHBvcnQgZGVmYXVsdCBcIjxzdmcgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwYXRoIGQ9XFxcIk05LjI3IDkuNDkxYS4xNjcuMTY3IDAgMCAxLS4wNTQtLjAzNWwtLjE5LS4xOTctLjg2LS44ODl2Mi45NjNhLjE2Ny4xNjcgMCAwIDEtLjMzMyAwVjguMzdsLS44Ni44OS0uMTg5LjE5NWEuMTcuMTcgMCAwIDEtLjIzNy0uMjQxbDEuMzI4LTEuMzI5YS4xNjYuMTY2IDAgMCAxIC4wNTItLjAzMmwuMDEtLjAwNGEuMTY3LjE2NyAwIDAgMSAuMTI2IDBsLjAxLjAwNGEuMTU2LjE1NiAwIDAgMSAuMDUyLjAzMmwxLjMyOCAxLjMyOS4wMDIuMDAxYS4xNjcuMTY3IDAgMCAxIC4wMzYuMTgybC40NjIuMTkzLS40NjItLjE5M2EuMTY3LjE2NyAwIDAgMS0uMDM2LjA1NWwtLjAwMy4wMDNhLjE2Ny4xNjcgMCAwIDEtLjE4My4wMzZabS0uNDM3LTcuNTg0IDMuOTYzIDMuOTYzLjAyMy4wN2EuMzMuMzMgMCAwIDEgLjAxNC4wNTR2Ni42NzNhMS41IDEuNSAwIDAgMS0xLjUgMS41SDQuNjY3YTEuNSAxLjUgMCAwIDEtMS4wNjEtLjQ0bC0uMzQ4LjM0OC4zNDgtLjM0OGExLjUgMS41IDAgMCAxLS40NC0xLjA2VjMuMzMzYTEuNSAxLjUgMCAwIDEgMS41LTEuNWgzLjk4YS4yMzMuMjMzIDAgMCAxIC4wMzIuMDE1bC4xMS4wNTloLjA0NVptLjg1NCAxLjM0Nkw4LjgzMyAyLjR2Mi4yNjdBMS4xNjcgMS4xNjcgMCAwIDAgMTAgNS44MzNoMi4yNjdsLS44NTMtLjg1My0xLjcyNy0xLjcyN1pNOC41IDIuNjY3di0uNUg0LjY2N0ExLjE2NyAxLjE2NyAwIDAgMCAzLjUgMy4zMzN2OS4zMzRhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjcgMS4xNjZoNi42NjZhMS4xNjcgMS4xNjcgMCAwIDAgMS4xNjctMS4xNjZ2LTYuNUgxMGExLjUgMS41IDAgMCAxLTEuNS0xLjV2LTJaXFxcIiBmaWxsPVxcXCJjdXJyZW50Y29sb3JcXFwiIHN0cm9rZT1cXFwiY3VycmVudGNvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cGF0aCBkPVxcXCJtMy44MzcgMTEuNjQzLS4xMjguMzE0LjI0My4yMzVBNS44MzMgNS44MzMgMCAwIDAgOCAxMy44MzNoLjAwMmE1LjgzMyA1LjgzMyAwIDAgMCA0LjA0Ny0xLjY0bC4yNDMtLjIzNi0uMTI5LS4zMTRhNC41IDQuNSAwIDAgMC04LjMyNSAwWm04LjMzOC0uNzI0LjQzLjczNi40MzMtLjczNkE1Ljc4IDUuNzggMCAwIDAgMTMuODMzIDggNS44MzMgNS44MzMgMCAwIDAgMi4xNjcgOGE1Ljc4IDUuNzggMCAwIDAgLjc5NSAyLjkybC40MzIuNzM2LjQzLS43MzdhNC44MzMgNC44MzMgMCAwIDEgMi4zNjMtMi4wNDJsLjY1NS0uMjY1LS40NjctLjUzYTIuMTY3IDIuMTY3IDAgMSAxIDMuMjUgMGwtLjQ2Ny41My42NTUuMjY1YTQuODMzIDQuODMzIDAgMCAxIDIuMzYyIDIuMDQyWk00LjYzNSAyLjg0YzEtLjY1NSAyLjE3LTEuMDA1IDMuMzY1LTEuMDA3YTYuMTY2IDYuMTY2IDAgMCAxIDQuNTMyIDEwLjMzNSA2LjE2NyA2LjE2NyAwIDAgMS05LjA2NCAwQTYuMTY3IDYuMTY3IDAgMCAxIDQuNjM1IDIuODRabTEuODQgMi44MDhhMS44MzMgMS44MzMgMCAxIDAgMy4wNSAyLjAzNyAxLjgzMyAxLjgzMyAwIDAgMC0zLjA1LTIuMDM3WlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZT1cXFwiY3VycmVudENvbG9yXFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIyXFxcIj48cGF0aCBkPVxcXCJtMTMuNTA0IDExLjQ0OC0uNDU1LjM1OC41MzguMjE0YTkuNjY3IDkuNjY3IDAgMCAxIDYuMDQyIDcuOTE2LjY2Ny42NjcgMCAwIDEtLjU3LjczaC0uMDkxYS42NjcuNjY3IDAgMCAxLS42NjctLjU5MyA4LjMzMyA4LjMzMyAwIDAgMC0xNi41NjIgMEEuNjczLjY3MyAwIDAgMSAuNCAxOS45MjZhOS42NjcgOS42NjcgMCAwIDEgNi4wMTMtNy45MDdsLjUzNi0uMjE0LS40NTQtLjM1N2E1LjY2NyA1LjY2NyAwIDEgMSA3LjAwOCAwWm0tNS45MTEtLjg0NWE0LjMzNCA0LjMzNCAwIDEgMCA0LjgxNS03LjIwNyA0LjMzNCA0LjMzNCAwIDAgMC00LjgxNSA3LjIwN1pcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZT1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiZXhwb3J0IGRlZmF1bHQgXCI8c3ZnIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDIwIDE4XFxcIj48cGF0aCBkPVxcXCJtMTguOTE3IDEzLjU4My02Ljc1LTExLjY2NkMxMS41Ljc1IDkuOTE3LjMzMyA4Ljc1IDFjLS40MTcuMjUtLjc1LjU4My0uOTE3LjkxN2wtNi43NSAxMS42NjZDLjQxNyAxNC43NS44MzMgMTYuMzMzIDIgMTdjLjQxNy4yNS44MzMuMzMzIDEuMjUuMzMzaDEzLjQxN2MxLjQxNiAwIDIuNS0xLjE2NiAyLjUtMi41LjA4My0uNS0uMDg0LS45MTYtLjI1LTEuMjVaTTEwIDE0Yy0uNSAwLS44MzMtLjMzMy0uODMzLS44MzMgMC0uNS4zMzMtLjgzNC44MzMtLjgzNC41IDAgLjgzMy4zMzQuODMzLjgzNCAwIC41LS4zMzMuODMzLS44MzMuODMzWm0uODMzLTQuMTY3YzAgLjUtLjMzMy44MzQtLjgzMy44MzQtLjUgMC0uODMzLS4zMzQtLjgzMy0uODM0VjYuNWMwLS41LjMzMy0uODMzLjgzMy0uODMzLjUgMCAuODMzLjMzMy44MzMuODMzdjMuMzMzWlxcXCIgZmlsbD1cXFwiI0ZGNzI2NFxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHZpZXdCb3g9XFxcIjAgMCAxOCAxOVxcXCI+PGcgY2xpcC1wYXRoPVxcXCJ1cmwoI3dhcm5pbmctZmlsbF9zdmdfX2EpXFxcIj48cGF0aCBmaWxsPVxcXCJjdXJyZW50Q29sb3JcXFwiIGQ9XFxcIm0xNy4wMiAxMy45OTItNi4wNzMtMTAuNWMtLjYtMS4wNS0yLjAyNS0xLjQyNS0zLjA3NC0uODI1LS4zNzUuMjI1LS42NzUuNTI1LS44MjUuODI1bC02LjA3MyAxMC41Yy0uNiAxLjA1LS4yMjUgMi40NzUuODI0IDMuMDc1LjM3NS4yMjUuNzUuMyAxLjEyNS4zaDEyLjA3MWMxLjI3NSAwIDIuMjUtMS4wNSAyLjI1LTIuMjUuMDc1LS40NS0uMDc1LS44MjUtLjIyNS0xLjEyNVptLTguMDIzLjM3NWMtLjQ1IDAtLjc1LS4zLS43NS0uNzVzLjMtLjc1Ljc1LS43NS43NS4zLjc1Ljc1LS4zLjc1LS43NS43NVptLjc1LTMuNzVjMCAuNDUtLjMuNzUtLjc1Ljc1cy0uNzUtLjMtLjc1LS43NXYtM2MwLS40NS4zLS43NS43NS0uNzVzLjc1LjMuNzUuNzV2M1pcXFwiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPVxcXCJ3YXJuaW5nLWZpbGxfc3ZnX19hXFxcIj48cGF0aCBmaWxsPVxcXCIjZmZmXFxcIiBkPVxcXCJNMCAwaDE3Ljk5NXYxOEgwelxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMCAuODY3KVxcXCIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyMyAyMVxcXCI+PHBhdGggZD1cXFwiTTExLjg4NyAxNWExIDEgMCAxIDAgMCAyIDEgMSAwIDAgMCAwLTJabTEwLjY3IDEuNDctOC4wNS0xNGEzIDMgMCAwIDAtNS4yNCAwbC04IDE0QTMgMyAwIDAgMCAzLjgyNyAyMWgxNi4xMmEzIDMgMCAwIDAgMi42MS00LjUzWm0tMS43MyAyYTEgMSAwIDAgMS0uODguNTFIMy44MjdhMSAxIDAgMCAxLS44OC0uNTEgMSAxIDAgMCAxIDAtMWw4LTE0YTEgMSAwIDAgMSAxLjc4IDBsOC4wNSAxNGExIDEgMCAwIDEgLjA1IDEuMDJ2LS4wMlpNMTEuODg3IDdhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAyIDBWOGExIDEgMCAwIDAtMS0xWlxcXCIgZmlsbD1cXFwiI0QxMDAxRVxcXCIvPjwvc3ZnPlwiOyIsImV4cG9ydCBkZWZhdWx0IFwiPHN2ZyBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAzMiAzMlxcXCI+PGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcj1cXFwiMTZcXFwiIGZpbGw9XFxcIiNGMUY3RjlcXFwiLz48cGF0aCBkPVxcXCJNMjMuOTE3IDE0LjI3di4wMTJjMCAuNDYyIDAgMi45NzctLjAzIDMuMzgxdi4wMjhhNy42IDcuNiAwIDAgMS0uMzc0IDIuNDQzdi4wMDFhMS41MzUgMS41MzUgMCAwIDEtLjM3NS42MTUgMS44MjcgMS44MjcgMCAwIDEtLjk1NS40OTFjLTIuNzAyLjIwOC00Ljk5LjI0NS03LjYwMy4yMDhoLS4wMTJhMzMuNTYyIDMzLjU2MiAwIDAgMS00LjgxNy0uMjQ0IDEuODExIDEuODExIDAgMCAxLS45MjctLjQ4NSAyLjAyMiAyLjAyMiAwIDAgMS0uNDUtLjg2OGwtLjAwMS0uMDA2YTYuODI4IDYuODI4IDAgMCAxLS4yMTUtMS40M3YtLjAwOWEzNS44ODcgMzUuODg3IDAgMCAxIC4wMDMtNC44NTdjLjAzNy0uNDQyLjA3NC0uODg4LjE3NS0xLjI5OC4xMDQtLjQyNC4yNy0uNzc1LjU0LTEuMDI1bC4wMDMtLjAwM2MuMjUzLS4yNC41Ny0uNDAxLjkxMS0uNDY2YTU4LjUyNyA1OC41MjcgMCAwIDEgNi4yMDQtLjIyM2guMDEyYTU4LjQyNiA1OC40MjYgMCAwIDEgNi4yMjYuMjNjLjQxLjA3OC43ODIuMjkgMS4wNTYuNjA1LjQ0Ny45LjY2NCAxLjg5Ni42MjkgMi45Wm0tOS45NDUgMy44Njd2LjU2bC40OTItLjI2N2E5OC45NyA5OC45NyAwIDAgMSAyLjI2NC0xLjE3NWwuMDYzLS4wMzJhNzAuNDUgNzAuNDUgMCAwIDAgMi4xMTYtMS4xMDRsLjU0LS4zLS41NDctLjI4Ny00LjQ0LTIuMzMyLS40ODgtLjI1N3Y1LjE5NFpcXFwiIGZpbGw9XFxcIiMxNTUzNjZcXFwiIHN0cm9rZT1cXFwiIzE1NTM2NlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIuNjY3XFxcIi8+PC9zdmc+XCI7IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0xJmlkPTZmZTU5MDU1Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9Yjc3YjExZDQmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0hvdmVyVGV4dC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01NTM4ZDdlMiZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTG9hZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPThlMzZmOGVjJmxhbmc9c2Nzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Qb3B1cE1vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVhMmJkYTU4Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TaGltbWVyTG9hZGluZy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD03NDM1NjE3MiZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1mNjdjN2U3MiZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJvZ3Jlc3NMb2FkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWMzMmJmMGMmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1N0aWNreUVycm9ycy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xZTM4ZDEwZSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYTU3MWZkNiZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9YzdjYTI4YjgmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWQwYjgwMmRhJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MDYzY2JkODYmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YTQwZmNmNCZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uRGF0YS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00YWRhNWYzNiZsYW5nPXNjc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMV0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsyXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzNdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzZXRQYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTM2Yjc2NGJiJmxhbmc9c2Nzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0xJmlkPTE3ZTYzMmE2Jmxhbmc9c2Nzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVsxXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzJdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbM10hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTEmaWQ9NTIyNjYyMDAmbGFuZz1zY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTMudXNlWzFdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3Qvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMy51c2VbMl0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTEzLnVzZVszXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NpZ25Jbi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1hMTg2MWYzZSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZlNTkwNTUmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3QvdGhlbWVzL2RlZmF1bHQuY3NzP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3NcIlxuaW1wb3J0IFwiLi9BZG1pbkhlYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MSZpZD02ZmU1OTA1NSZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtNmZlNTkwNTVcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0FkbWluSGVhZGVyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2ZmU1OTA1NVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzZmZTU5MDU1JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNmZlNTkwNTUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FkbWluSGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZmU1OTA1NSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzZmZTU5MDU1JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9CcmVhZENydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NWQwZTNkYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQnJlYWRDcnVtYi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQnJlYWRDcnVtYi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNjVkMGUzZGFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2NWQwZTNkYScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzY1ZDBlM2RhJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9CcmVhZENydW1iLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02NWQwZTNkYSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzY1ZDBlM2RhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9CdXR0b25Db21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlmZjVhOGY4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9CdXR0b25Db21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0J1dHRvbkNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvQnV0dG9uQ29tcG9uZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI5ZmY1YThmOFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzlmZjVhOGY4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnOWZmNWE4ZjgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0J1dHRvbkNvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWZmNWE4ZjgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc5ZmY1YThmOCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZWJmNDFmOSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVzY3JpcHRpb25Gb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9EZXNjcmlwdGlvbkZvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Rlc2NyaXB0aW9uRm9ybS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNmViZjQxZjlcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2ZWJmNDFmOScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzZlYmY0MWY5JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EZXNjcmlwdGlvbkZvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZlYmY0MWY5JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNmViZjQxZjknLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Vycm9yTWVzc2FnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Yjc3YjExZDQmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Vycm9yTWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL0Vycm9yTWVzc2FnZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1iNzdiMTFkNCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtYjc3YjExZDRcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Vycm9yTWVzc2FnZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYjc3YjExZDRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdiNzdiMTFkNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2I3N2IxMWQ0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3N2IxMWQ0JnNjb3BlZD10cnVlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYjc3YjExZDQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Vycm9yUG9wVXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBmMWQ4YjFiJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Vycm9yUG9wVXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JQb3BVcC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMGYxZDhiMWJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwZjFkOGIxYicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzBmMWQ4YjFiJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZjFkOGIxYiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzBmMWQ4YjFiJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1MzhkN2UyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0hvdmVyVGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgXCIuL0hvdmVyVGV4dC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01NTM4ZDdlMiZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvSG92ZXJUZXh0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1NTM4ZDdlMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzU1MzhkN2UyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTUzOGQ3ZTInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0hvdmVyVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTUzOGQ3ZTImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1NTM4ZDdlMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vTG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04ZTM2ZjhlYyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Mb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9Mb2FkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9OGUzNmY4ZWMmbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0xvYWRlci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOGUzNmY4ZWNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4ZTM2ZjhlYycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzhlMzZmOGVjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Mb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPThlMzZmOGVjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOGUzNmY4ZWMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL05hdkRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNjE5YTdlZCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTmF2RHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL05hdkRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9OYXZEcm9wZG93bi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMjYxOWE3ZWRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyNjE5YTdlZCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzI2MTlhN2VkJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9OYXZEcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjYxOWE3ZWQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyNjE5YTdlZCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWEyYmRhNTgmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BvcHVwTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BvcHVwTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9Qb3B1cE1vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVhMmJkYTU4Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi01YTJiZGE1OFwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUG9wdXBNb2RhbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWEyYmRhNThcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1YTJiZGE1OCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVhMmJkYTU4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Qb3B1cE1vZGFsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YTJiZGE1OCZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzVhMmJkYTU4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SYWRpYWxQcm9ncmVzc0Jhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTU3MzhlNjAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JhZGlhbFByb2dyZXNzQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SYWRpYWxQcm9ncmVzc0Jhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvUmFkaWFsUHJvZ3Jlc3NCYXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjE1NzM4ZTYwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMTU3MzhlNjAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxNTczOGU2MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmFkaWFsUHJvZ3Jlc3NCYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1NzM4ZTYwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMTU3MzhlNjAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1NoaW1tZXJMb2FkaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDM1NjE3MiZzY29wZWQ9dHJ1ZVwiXG5jb25zdCBzY3JpcHQgPSB7fVxuXG5pbXBvcnQgXCIuL1NoaW1tZXJMb2FkaW5nLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTc0MzU2MTcyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi03NDM1NjE3MlwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvU2hpbW1lckxvYWRpbmcudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc0MzU2MTcyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzQzNTYxNzInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3NDM1NjE3MicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2hpbW1lckxvYWRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MzU2MTcyJnNjb3BlZD10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzc0MzU2MTcyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UYWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPThjOTdhNWJlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvVGFibGVQYWdpbmF0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI4Yzk3YTViZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzhjOTdhNWJlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnOGM5N2E1YmUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RhYmxlUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGM5N2E1YmUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc4Yzk3YTViZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVG9hc3RNZXNzYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMDFkOGNkMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVG9hc3RNZXNzYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9Ub2FzdE1lc3NhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImQwMWQ4Y2QyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZDAxZDhjZDInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdkMDFkOGNkMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVG9hc3RNZXNzYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMDFkOGNkMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2QwMWQ4Y2QyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9EZWxldGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWE5M2Q4NDdjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9EZWxldGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRGVsZXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvRGVsZXRlQnV0dG9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJhOTNkODQ3Y1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2E5M2Q4NDdjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYTkzZDg0N2MnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0RlbGV0ZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTkzZDg0N2MmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdhOTNkODQ3YycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vTGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmZlNjUxMDImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0xpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0xpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvTGluay52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYmZlNjUxMDJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdiZmU2NTEwMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2JmZTY1MTAyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9MaW5rLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iZmU2NTEwMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2JmZTY1MTAyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lY2M1MDgyOCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvUHVibGlzaEJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZWNjNTA4MjhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlY2M1MDgyOCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2VjYzUwODI4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lY2M1MDgyOCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2VjYzUwODI4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9VblB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1OWMzMTkzJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9VblB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVW5QdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2J1dHRvbnMvVW5QdWJsaXNoQnV0dG9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0NTljMzE5M1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQ1OWMzMTkzJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDU5YzMxOTMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1VuUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDU5YzMxOTMmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0NTljMzE5MycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRGVsZXRlQWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NmJjZThjYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVsZXRlQWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0RlbGV0ZUFjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9EZWxldGVBY3Rpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjU2YmNlOGNhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTZiY2U4Y2EnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1NmJjZThjYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRGVsZXRlQWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NmJjZThjYSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzU2YmNlOGNhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FcnJvckxpc3RzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjdjN2U3MiZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FcnJvckxpc3RzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9FcnJvckxpc3RzLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWY2N2M3ZTcyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19zY29wZUlkJyxcImRhdGEtdi1mNjdjN2U3MlwiXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvRXJyb3JMaXN0cy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZjY3YzdlNzJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdmNjdjN2U3MicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2Y2N2M3ZTcyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FcnJvckxpc3RzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjdjN2U3MiZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2Y2N2M3ZTcyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9IYXZlTm90QWRkZWRZZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM5MjVlZjQ5JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9IYXZlTm90QWRkZWRZZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0hhdmVOb3RBZGRlZFlldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc2VjdGlvbnMvSGF2ZU5vdEFkZGVkWWV0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIzOTI1ZWY0OVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzM5MjVlZjQ5JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMzkyNWVmNDknLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0hhdmVOb3RBZGRlZFlldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzkyNWVmNDkmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCczOTI1ZWY0OScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZiOGY0MDYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyZmI4ZjQwNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzJmYjhmNDA2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMmZiOGY0MDYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL09yZ2FuaXphdGlvblB1Ymxpc2hVbnB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYjhmNDA2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMmZiOGY0MDYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWI1NGUwOWYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9QYWdlVGl0bGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjFiNTRlMDlmXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMWI1NGUwOWYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxYjU0ZTA5ZicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYjU0ZTA5ZiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzFiNTRlMDlmJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Qcm9ncmVzc0xvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWMzMmJmMGMmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9Qcm9ncmVzc0xvYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01YzMyYmYwYyZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtNWMzMmJmMGNcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3NlY3Rpb25zL1Byb2dyZXNzTG9hZGVyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1YzMyYmYwY1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzVjMzJiZjBjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNWMzMmJmMGMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Byb2dyZXNzTG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YzMyYmYwYyZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzVjMzJiZjBjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TdGlja3lFcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlMzhkMTBlJnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TdGlja3lFcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9TdGlja3lFcnJvcnMudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWUzOGQxMGUmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LTFlMzhkMTBlXCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvY29tcG9uZW50cy9zZWN0aW9ucy9TdGlja3lFcnJvcnMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjFlMzhkMTBlXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMWUzOGQxMGUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxZTM4ZDEwZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZTM4ZDEwZSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzFlMzhkMTBlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FbGVtZW50U3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZWI4ZGViMCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRWxlbWVudFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FbGVtZW50U3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy9jb21wb25lbnRzL3N0YXR1cy9FbGVtZW50U3RhdHVzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxZWI4ZGViMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzFlYjhkZWIwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMWViOGRlYjAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0VsZW1lbnRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlYjhkZWIwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMWViOGRlYjAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFmMmY5YWI4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvc3RhdHVzL1ByZXZpb3VzbHlQdWJsaXNoZWQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjFmMmY5YWI4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMWYyZjlhYjgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxZjJmOWFiOCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUHJldmlvdXNseVB1Ymxpc2hlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWYyZjlhYjgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxZjJmOWFiOCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIzZWUzNzVjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BY3Rpdml0eURlZmF1bHRWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0eURlZmF1bHRWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjIzZWUzNzVjXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjNlZTM3NWMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyM2VlMzc1YycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIzZWUzNzVjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMjNlZTM3NWMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5RGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTQwMmIwNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FjdGl2aXR5RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvQWN0aXZpdHlEZXRhaWwudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjRlNDAyYjA2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNGU0MDJiMDYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0ZTQwMmIwNicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0aXZpdHlEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlNDAyYjA2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNGU0MDJiMDYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5SW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBhNTcxZmQ2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BY3Rpdml0eUluZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0eUluZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYTU3MWZkNiZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L0FjdGl2aXR5SW5kZXgudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBhNTcxZmQ2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGE1NzFmZDYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwYTU3MWZkNicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGE1NzFmZDYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwYTU3MWZkNicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3Y2EyOGI4JnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9DcmVhdGVNb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9DcmVhdGVNb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1jN2NhMjhiOCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fc2NvcGVJZCcsXCJkYXRhLXYtYzdjYTI4YjhcIl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9DcmVhdGVNb2RhbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYzdjYTI4YjhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdjN2NhMjhiOCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2M3Y2EyOGI4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9DcmVhdGVNb2RhbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzdjYTI4Yjgmc2NvcGVkPXRydWUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdjN2NhMjhiOCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwYjgwMmRhJnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9CdWxrUHVibGlzaGluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9CdWxrUHVibGlzaGluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZDBiODAyZGEmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LWQwYjgwMmRhXCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0J1bGtQdWJsaXNoaW5nLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkMGI4MDJkYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2QwYjgwMmRhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDBiODAyZGEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0J1bGtQdWJsaXNoaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMGI4MDJkYSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2QwYjgwMmRhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2M2NiZDg2JnNjb3BlZD10cnVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MDYzY2JkODYmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LTA2M2NiZDg2XCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL0Vycm9ySXRlbS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDYzY2JkODZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwNjNjYmQ4NicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzA2M2NiZDg2JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2M2NiZDg2JnNjb3BlZD10cnVlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMDYzY2JkODYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1B1Ymxpc2hTZWxlY3RlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2ZiMWUxY2MmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1B1Ymxpc2hTZWxlY3RlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QdWJsaXNoU2VsZWN0ZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2J1bGstcHVibGlzaC9QdWJsaXNoU2VsZWN0ZWQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjNmYjFlMWNjXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnM2ZiMWUxY2MnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCczZmIxZTFjYycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUHVibGlzaFNlbGVjdGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZmIxZTFjYyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzNmYjFlMWNjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWZyZXNoVG9hc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwMTE4OTdhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZWZyZXNoVG9hc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVmcmVzaFRvYXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9idWxrLXB1Ymxpc2gvUmVmcmVzaFRvYXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0MDExODk3YVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQwMTE4OTdhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDAxMTg5N2EnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlZnJlc2hUb2FzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDAxMTg5N2EmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0MDExODk3YScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVmFsaWRhdGlvbkVycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjU3NWQzYjImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1ZhbGlkYXRpb25FcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVmFsaWRhdGlvbkVycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvYnVsay1wdWJsaXNoL1ZhbGlkYXRpb25FcnJvcnMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI1NzVkM2IyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjU3NWQzYjInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyNTc1ZDNiMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVmFsaWRhdGlvbkVycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjU3NWQzYjImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyNTc1ZDNiMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWN0aXZpdHlEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMTM4ZWE4OCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlEYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3Rpdml0eURhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9BY3Rpdml0eURhdGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjAxMzhlYTg4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMDEzOGVhODgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwMTM4ZWE4OCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0aXZpdHlEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMTM4ZWE4OCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzAxMzhlYTg4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Db25kaXRpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iYWZiMjViYSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0NvbmRpdGlvbnMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImJhZmIyNWJhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnYmFmYjI1YmEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdiYWZiMjViYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ29uZGl0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmFmYjI1YmEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdiYWZiMjViYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQ29udGFjdEluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5YTdkMzEzJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Db250YWN0SW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQ29udGFjdEluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9Db250YWN0SW5mby52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMjlhN2QzMTNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyOWE3ZDMxMycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzI5YTdkMzEzJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Db250YWN0SW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjlhN2QzMTMmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyOWE3ZDMxMycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3ZDc5OWJlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYzdkNzk5YmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdjN2Q3OTliZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2M3ZDc5OWJlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzdkNzk5YmUmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdjN2Q3OTliZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNkZmI3NDY4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9IdW1hbml0YXJpYW5TY29wZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9IdW1hbml0YXJpYW5TY29wZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvSHVtYW5pdGFyaWFuU2NvcGUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImNkZmI3NDY4XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnY2RmYjc0NjgnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjZGZiNzQ2OCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNkZmI3NDY4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignY2RmYjc0NjgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0lhdGlJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjYxYWZmZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSWF0aUlkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0lhdGlJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvSWF0aUlkZW50aWZpZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjUyNjFhZmZlXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTI2MWFmZmUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1MjYxYWZmZScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSWF0aUlkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyNjFhZmZlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNTI2MWFmZmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0xlZ2FjeURhdGEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNiM2U0ODA0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9MZWdhY3lEYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9MZWdhY3lEYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvTGVnYWN5RGF0YS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiY2IzZTQ4MDRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdjYjNlNDgwNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2NiM2U0ODA0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9MZWdhY3lEYXRhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjNlNDgwNCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2NiM2U0ODA0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Mb2NhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTJjMmU4NjAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0xvY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Mb2NhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL0xvY2F0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxMmMyZTg2MFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzEyYzJlODYwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMTJjMmU4NjAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0xvY2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMmMyZTg2MCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzEyYzJlODYwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9PdGhlcklkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc4YjY0NDA0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9PdGhlcklkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL090aGVySWRlbnRpZmllci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL090aGVySWRlbnRpZmllci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNzhiNjQ0MDRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3OGI2NDQwNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzc4YjY0NDA0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9PdGhlcklkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc4YjY0NDA0JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzhiNjQ0MDQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BhcnRpY2lwYXRpbmdPcmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkNGRhYjc0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QYXJ0aWNpcGF0aW5nT3JnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QYXJ0aWNpcGF0aW5nT3JnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUGFydGljaXBhdGluZ09yZy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2Q0ZGFiNzRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3ZDRkYWI3NCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdkNGRhYjc0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QYXJ0aWNpcGF0aW5nT3JnLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDRkYWI3NCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzdkNGRhYjc0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMTcyYzJhYyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUGxhbm5lZERpc2J1cnNlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwMTcyYzJhY1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzAxNzJjMmFjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMDE3MmMyYWMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BsYW5uZWREaXNidXJzZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTAxNzJjMmFjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMDE3MmMyYWMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BvbGljeU1hcmtlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmQ5ODg4OTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BvbGljeU1hcmtlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUG9saWN5TWFya2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUG9saWN5TWFya2VyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJiZDk4ODg5MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2JkOTg4ODkyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYmQ5ODg4OTInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BvbGljeU1hcmtlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YmQ5ODg4OTImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdiZDk4ODg5MicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2YxOGJlMzAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3ZjE4YmUzMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzdmMThiZTMwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnN2YxOGJlMzAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmMThiZTMwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignN2YxOGJlMzAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWJkNjYyZGMmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZWJkNjYyZGNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlYmQ2NjJkYycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2ViZDY2MmRjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWViZDY2MmRjJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignZWJkNjYyZGMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlbGF0ZWRBY3Rpdml0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmNhMDRjMDImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlbGF0ZWRBY3Rpdml0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVsYXRlZEFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVsYXRlZEFjdGl2aXR5LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyY2EwNGMwMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzJjYTA0YzAyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMmNhMDRjMDInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlbGF0ZWRBY3Rpdml0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmNhMDRjMDImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyY2EwNGMwMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MzhiMGFlNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0MzhiMGFlNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQzOGIwYWU2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDM4YjBhZTYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlcG9ydGluZ09yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDM4YjBhZTYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0MzhiMGFlNicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVzdWx0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNzdjYjRmMCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVzdWx0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXN1bHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9SZXN1bHQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI3N2NiNGYwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjc3Y2I0ZjAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyNzdjYjRmMCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVzdWx0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNzdjYjRmMCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzI3N2NiNGYwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyOTQ2ODUxJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2VsZW1lbnRzL1NlY3Rvci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMzI5NDY4NTFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCczMjk0Njg1MScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzMyOTQ2ODUxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMyOTQ2ODUxJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMzI5NDY4NTEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RhZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDExOTY2ODImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvZWxlbWVudHMvVGFnLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwMTE5NjY4MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzAxMTk2NjgyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMDExOTY2ODInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RhZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDExOTY2ODImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwMTE5NjY4MicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3NGE3MTNkJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UaXRsZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDc0YTcxM2RcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NzRhNzEzZCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ3NGE3MTNkJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDc0YTcxM2QmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0NzRhNzEzZCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjhhZmYwMCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9lbGVtZW50cy9UcmFuc2FjdGlvbnMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjJiOGFmZjAwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMmI4YWZmMDAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyYjhhZmYwMCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVHJhbnNhY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjhhZmYwMCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzJiOGFmZjAwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JbmRpY2F0b3JEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVmZjE3NzcyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRpY2F0b3JEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGljYXRvckRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvSW5kaWNhdG9yRGV0YWlsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1ZmYxNzc3MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzVmZjE3NzcyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNWZmMTc3NzInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0luZGljYXRvckRldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWZmMTc3NzImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1ZmYxNzc3MicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSW5kaWNhdG9yTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmY3OGNmN2YmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL0luZGljYXRvckxpc3QudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjZmNzhjZjdmXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNmY3OGNmN2YnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2Zjc4Y2Y3ZicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSW5kaWNhdG9yTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmY3OGNmN2YmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2Zjc4Y2Y3ZicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWdncmVnYXRpb25TdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRkNzYzZTRjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BZ2dyZWdhdGlvblN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWdncmVnYXRpb25TdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkZDc2M2U0Y1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2RkNzYzZTRjJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZGQ3NjNlNGMnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kZDc2M2U0YyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2RkNzYzZTRjJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9CYXNlbGluZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmFhNmQwNjImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Jhc2VsaW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9CYXNlbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvQmFzZWxpbmUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjZhYTZkMDYyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNmFhNmQwNjInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2YWE2ZDA2MicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQmFzZWxpbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZhYTZkMDYyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNmFhNmQwNjInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NzViNjFlMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9EZXNjcmlwdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNzc1YjYxZTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3NzViNjFlMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzc3NWI2MWUyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Nzc1YjYxZTImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3NzViNjFlMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2IyNjAzZiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL0RvY3VtZW50TGluay52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiM2NiMjYwM2ZcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCczY2IyNjAzZicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzNjYjI2MDNmJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjYjI2MDNmJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignM2NiMjYwM2YnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0luZGljYXRvckFzY2VuZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjdlZDZhZGEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGljYXRvckFzY2VuZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9JbmRpY2F0b3JBc2NlbmRpbmcudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImY3ZWQ2YWRhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZjdlZDZhZGEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdmN2VkNmFkYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mN2VkNmFkYSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2Y3ZWQ2YWRhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9NZWFzdXJlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YTY0ZDk0NCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWVhc3VyZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vTWVhc3VyZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvTWVhc3VyZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2E2NGQ5NDRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3YTY0ZDk0NCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdhNjRkOTQ0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9NZWFzdXJlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YTY0ZDk0NCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzdhNjRkOTQ0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU4MTY4NDZhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BlcmlvZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L2luZGljYXRvcnMvZWxlbWVudHMvUGVyaW9kLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1ODE2ODQ2YVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzU4MTY4NDZhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTgxNjg0NmEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BlcmlvZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTgxNjg0NmEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1ODE2ODQ2YScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ODVhNGQ5ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9pbmRpY2F0b3JzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDg1YTRkOWVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0ODVhNGQ5ZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ4NWE0ZDllJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ4NWE0ZDllJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDg1YTRkOWUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04ZjZmZjY4NCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvaW5kaWNhdG9ycy9lbGVtZW50cy9UaXRsZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiOGY2ZmY2ODRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4ZjZmZjY4NCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzhmNmZmNjg0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OGY2ZmY2ODQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc4ZjZmZjY4NCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YTQwZmNmNCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVhNDBmY2Y0Jmxhbmc9c2Nzc1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1YTQwZmNmNFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzVhNDBmY2Y0JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNWE0MGZjZjQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE0MGZjZjQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1YTQwZmNmNCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWN0aXZpdHlFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjVkNjBhNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FjdGl2aXR5RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvQWN0aXZpdHlFbGVtZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI3ZjVkNjBhNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzdmNWQ2MGE2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnN2Y1ZDYwYTYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FjdGl2aXR5RWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y1ZDYwYTYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3ZjVkNjBhNicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MGUxNzNjJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BZGRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9BZGRBY3Rpdml0eUJ1dHRvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMDUwZTE3M2NcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwNTBlMTczYycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzA1MGUxNzNjJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BZGRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwZTE3M2MmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwNTBlMTczYycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjYxZTZmOGUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9Eb3dubG9hZEFjdGl2aXR5QnV0dG9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2NjFlNmY4ZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzY2MWU2ZjhlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNjYxZTZmOGUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Rvd25sb2FkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY2MWU2ZjhlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNjYxZTZmOGUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0VsZW1lbnRzTm90ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJjMDQxZjkmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0VsZW1lbnRzTm90ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRWxlbWVudHNOb3RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvRWxlbWVudHNOb3RlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1YmMwNDFmOVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzViYzA0MWY5JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNWJjMDQxZjknLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0VsZW1lbnRzTm90ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJjMDQxZjkmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1YmMwNDFmOScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vRW1wdHlBY3Rpdml0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWFlZjk2ODgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0VtcHR5QWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0VtcHR5QWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9FbXB0eUFjdGl2aXR5LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI5YWVmOTY4OFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzlhZWY5Njg4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnOWFlZjk2ODgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0VtcHR5QWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhZWY5Njg4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOWFlZjk2ODgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzU4OWU4NmUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BhcnRpYWxzL1BhZ2VUaXRsZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNzU4OWU4NmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3NTg5ZTg2ZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzc1ODllODZlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ODllODZlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzU4OWU4NmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1NpZGViYXJIZWxwQmxvY2sudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZlZjI2YTgwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGFydGlhbHMvU2lkZWJhckhlbHBCbG9jay52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZmVmMjZhODBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdmZWYyNmE4MCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2ZlZjI2YTgwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mZWYyNmE4MCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2ZlZjI2YTgwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQ4NGExZDgmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1RhYmxlTGF5b3V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhYmxlTGF5b3V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wYXJ0aWFscy9UYWJsZUxheW91dC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNWQ4NGExZDhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc1ZDg0YTFkOCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzVkODRhMWQ4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYWJsZUxheW91dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQ4NGExZDgmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1ZDg0YTFkOCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUGVyaW9kc0RldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzJlM2I1OTkmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BlcmlvZHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNEZXRhaWwudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjcyZTNiNTk5XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzJlM2I1OTknLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3MmUzYjU5OScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGVyaW9kc0RldGFpbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzJlM2I1OTkmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3MmUzYjU5OScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUGVyaW9kc0xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzM2IyOTM0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QZXJpb2RzTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUGVyaW9kc0xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9wZXJpb2RzL1BlcmlvZHNMaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkMzNiMjkzNFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2QzM2IyOTM0JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDMzYjI5MzQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BlcmlvZHNMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMzNiMjkzNCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2QzM2IyOTM0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BY3R1YWxWYWx1ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzlhODhmYzUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FjdHVhbFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BY3R1YWxWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3BlcmlvZHMvZWxlbWVudHMvQWN0dWFsVmFsdWUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc5YTg4ZmM1XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzlhODhmYzUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3OWE4OGZjNScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWN0dWFsVmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5YTg4ZmM1JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzlhODhmYzUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RhcmdldFZhbHVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZTU3MWIyMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVGFyZ2V0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhcmdldFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcGVyaW9kcy9lbGVtZW50cy9UYXJnZXRWYWx1ZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMGU1NzFiMjJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwZTU3MWIyMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzBlNTcxYjIyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYXJnZXRWYWx1ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU1NzFiMjImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwZTU3MWIyMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVzdWx0RGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YzIwZjE3OCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVzdWx0RGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXN1bHREZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL1Jlc3VsdERldGFpbC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNmMyMGYxNzhcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc2YzIwZjE3OCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzZjMjBmMTc4JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXN1bHREZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZjMjBmMTc4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNmMyMGYxNzgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc3VsdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4ZmU0MjE5JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHRFbGVtZW50LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIxOGZlNDIxOVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzE4ZmU0MjE5JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMThmZTQyMTknLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc3VsdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4ZmU0MjE5JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMThmZTQyMTknLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc3VsdExpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWFhMDZhODVlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXN1bHRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9SZXN1bHRMaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJhYTA2YTg1ZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2FhMDZhODVlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYWEwNmE4NWUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc3VsdExpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWFhMDZhODVlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYWEwNmE4NWUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGUyZTgzMDcmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9Eb2N1bWVudExpbmsudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjBlMmU4MzA3XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMGUyZTgzMDcnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcwZTJlODMwNycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZTJlODMwNyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzBlMmU4MzA3JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9JbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRjMmU2ODJkJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGljYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3Jlc3VsdHMvZWxlbWVudHMvSW5kaWNhdG9yLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0YzJlNjgyZFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzRjMmU2ODJkJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNGMyZTY4MmQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0luZGljYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGMyZTY4MmQmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0YzJlNjgyZCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MWMyMjkyZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS9yZXN1bHRzL2VsZW1lbnRzL1JlZmVyZW5jZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiODFjMjI5MmVcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc4MWMyMjkyZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzgxYzIyOTJlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxYzIyOTJlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignODFjMjI5MmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc3VsdFR5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjMjFjNDZlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXN1bHRUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXN1bHRUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9SZXN1bHRUeXBlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIzYzIxYzQ2ZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzNjMjFjNDZlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnM2MyMWM0NmUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc3VsdFR5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjMjFjNDZlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignM2MyMWM0NmUnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RpdGxlRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxMmZlZDU0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvcmVzdWx0cy9lbGVtZW50cy9UaXRsZURlc2NyaXB0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkMTJmZWQ1NFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2QxMmZlZDU0JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDEyZmVkNTQnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RpdGxlRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxMmZlZDU0JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignZDEyZmVkNTQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wN2MwNmMxMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25EZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwN2MwNmMxMlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzA3YzA2YzEyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMDdjMDZjMTInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wN2MwNmMxMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzA3YzA2YzEyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ1NmMxMWVhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkVsZW1lbnQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImQ1NmMxMWVhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZDU2YzExZWEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdkNTZjMTFlYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVHJhbnNhY3Rpb25FbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNTZjMTFlYSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2Q1NmMxMWVhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjODcyN2MyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UcmFuc2FjdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9UcmFuc2FjdGlvbkxpc3QudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImNjODcyN2MyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnY2M4NzI3YzInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjYzg3MjdjMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVHJhbnNhY3Rpb25MaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzg3MjdjMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2NjODcyN2MyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BaWRUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kZjk2Yzk2YSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWlkVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWlkVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9BaWRUeXBlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkZjk2Yzk2YVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2RmOTZjOTZhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZGY5NmM5NmEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FpZFR5cGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRmOTZjOTZhJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignZGY5NmM5NmEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMmE4YTczMSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0Rlc2NyaXB0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyMmE4YTczMVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzIyYThhNzMxJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjJhOGE3MzEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMmE4YTczMSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzIyYThhNzMxJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNzg1MzA1MiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRGlzYnVyc2VtZW50Q2hhbm5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJjNzg1MzA1MlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2M3ODUzMDUyJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnYzc4NTMwNTInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Rpc2J1cnNlbWVudENoYW5uZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM3ODUzMDUyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYzc4NTMwNTInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0ZpbmFuY2VUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNWM3YzUyZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRmluYW5jZVR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ZpbmFuY2VUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL0ZpbmFuY2VUeXBlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJlNWM3YzUyZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2U1YzdjNTJlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZTVjN2M1MmUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0ZpbmFuY2VUeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNWM3YzUyZSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2U1YzdjNTJlJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9GbG93VHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0MDZhYTMmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Zsb3dUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9GbG93VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9GbG93VHlwZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMGU0MDZhYTNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwZTQwNmFhMycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzBlNDA2YWEzJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9GbG93VHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0MDZhYTMmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwZTQwNmFhMycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM1ZWY2ODVmJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Qcm92aWRlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvUHJvdmlkZXJPcmdhbml6YXRpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjM1ZWY2ODVmXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMzVlZjY4NWYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCczNWVmNjg1ZicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM1ZWY2ODVmJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMzVlZjY4NWYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04YTA4ZGY0NiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVjZWl2ZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI4YTA4ZGY0NlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzhhMDhkZjQ2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnOGEwOGRmNDYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04YTA4ZGY0NiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzhhMDhkZjQ2JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00M2Q1MzZkOCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2FjdGl2aXR5L3RyYW5zYWN0aW9ucy9lbGVtZW50cy9SZWNpcGllbnRDb3VudHJ5LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0M2Q1MzZkOFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQzZDUzNmQ4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDNkNTM2ZDgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlY2lwaWVudENvdW50cnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQzZDUzNmQ4JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDNkNTM2ZDgnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGEzMGJhYTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1JlY2lwaWVudFJlZ2lvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMGEzMGJhYTJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwYTMwYmFhMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzBhMzBiYWEyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBhMzBiYWEyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMGEzMGJhYTInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1NlY3Rvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGVlYmFhNDEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU2VjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1NlY3Rvci52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNGVlYmFhNDFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0ZWViYWE0MScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzRlZWJhYTQxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlZWJhYTQxJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNGVlYmFhNDEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1RpZWRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU3MDg5ODQxJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UaWVkU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UaWVkU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvYWN0aXZpdHkvdHJhbnNhY3Rpb25zL2VsZW1lbnRzL1RpZWRTdGF0dXMudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjU3MDg5ODQxXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTcwODk4NDEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1NzA4OTg0MScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVGllZFN0YXR1cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTcwODk4NDEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1NzA4OTg0MScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25EYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MTJmY2M2MSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25EYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvbkRhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25EYXRlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2MTJmY2M2MVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzYxMmZjYzYxJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNjEyZmNjNjEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9uRGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjEyZmNjNjEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2MTJmY2M2MScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVHJhbnNhY3Rpb25UeXBlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02M2Y2NzQyNiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVHJhbnNhY3Rpb25UeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9UcmFuc2FjdGlvblR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVHJhbnNhY3Rpb25UeXBlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI2M2Y2NzQyNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzYzZjY3NDI2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNjNmNjc0MjYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RyYW5zYWN0aW9uVHlwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjNmNjc0MjYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc2M2Y2NzQyNicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE2OTcyODM0JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9WYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9hY3Rpdml0eS90cmFuc2FjdGlvbnMvZWxlbWVudHMvVmFsdWUudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjE2OTcyODM0XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMTY5NzI4MzQnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxNjk3MjgzNCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVmFsdWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE2OTcyODM0JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMTY5NzI4MzQnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0FjdGl2aXR5VXBsb2FkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZWQ1ZmRkMiZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQWN0aXZpdHlVcGxvYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWN0aXZpdHlVcGxvYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL2ltcG9ydC9BY3Rpdml0eVVwbG9hZC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMGVkNWZkZDJcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcwZWQ1ZmRkMicsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzBlZDVmZGQyJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BY3Rpdml0eVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGVkNWZkZDImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwZWQ1ZmRkMicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSW1wb3J0TGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBkNzg3MGEmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0ltcG9ydExpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW1wb3J0TGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydExpc3QudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjQwZDc4NzBhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNDBkNzg3MGEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0MGQ3ODcwYScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSW1wb3J0TGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBkNzg3MGEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0MGQ3ODcwYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSW1wb3J0UGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkMTQ4ZDM3JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbXBvcnRQbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbXBvcnRQbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvaW1wb3J0L0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1ZDE0OGQzN1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzVkMTQ4ZDM3JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNWQxNDhkMzcnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0ltcG9ydFBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDE0OGQzNyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzVkMTQ4ZDM3JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9MaXN0RWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWE2MDg0MzImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0xpc3RFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0xpc3RFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9pbXBvcnQvTGlzdEVsZW1lbnQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjlhNjA4NDMyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnOWE2MDg0MzInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc5YTYwODQzMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vTGlzdEVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhNjA4NDMyJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignOWE2MDg0MzInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZGE1ZjM2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9PcmdhbmlzYXRpb25EYXRhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vT3JnYW5pc2F0aW9uRGF0YS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00YWRhNWYzNiZsYW5nPXNjc3NcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25EYXRhLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0YWRhNWYzNlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzRhZGE1ZjM2JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNGFkYTVmMzYnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZGE1ZjM2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNGFkYTVmMzYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTRlYTgwMyZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDU0ZWE4MDNcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NTRlYTgwMycsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ1NGVhODAzJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9PcmdhbmlzYXRpb25FbGVtZW50cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDU0ZWE4MDMmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc0NTRlYTgwMycsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI4MzllMDk4JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIyODM5ZTA5OFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzI4MzllMDk4JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMjgzOWUwOTgnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yODM5ZTA5OCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzI4MzllMDk4JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmNmQzMTJhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvRG9jdW1lbnRMaW5rLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJlZjZkMzEyYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2VmNmQzMTJhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZWY2ZDMxMmEnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWY2ZDMxMmEmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdlZjZkMzEyYScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2JlODc2ZDAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImNiZTg3NmQwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnY2JlODc2ZDAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdjYmU4NzZkMCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVjaXBpZW50Q291bnRyeUJ1ZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2JlODc2ZDAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdjYmU4NzZkMCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDY3ZDJmMSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1JlcG9ydGluZ09yZ0J1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1JlcG9ydGluZ09yZ0J1ZGdldC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiMjQ2N2QyZjFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCcyNDY3ZDJmMScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzI0NjdkMmYxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9SZXBvcnRpbmdPcmdCdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0NjdkMmYxJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignMjQ2N2QyZjEnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njk5OWFlZTImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvcnRpbmdPcmdhbmlzYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL29yZ2FuaXNhdGlvbi9lbGVtZW50cy9SZXBvcnRpbmdPcmdhbmlzYXRpb24udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjY5OTlhZWUyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNjk5OWFlZTInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2OTk5YWVlMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OTk5YWVlMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzY5OTlhZWUyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTg1YzlkYzNlJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvUmVwb3J0aW5nUmVnaW9uQnVkZ2V0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI4NWM5ZGMzZVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzg1YzlkYzNlJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnODVjOWRjM2UnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODVjOWRjM2UmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc4NWM5ZGMzZScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vVG90YWxCdWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQzYzBkMzNhJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Ub3RhbEJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Ub3RhbEJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvb3JnYW5pc2F0aW9uL2VsZW1lbnRzL1RvdGFsQnVkZ2V0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCJkM2MwZDMzYVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJ2QzYzBkMzNhJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnZDNjMGQzM2EnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RvdGFsQnVkZ2V0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2MwZDMzYSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2QzYzBkMzNhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjU1Zjk1MSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVG90YWxFeHBlbmRpdHVyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9vcmdhbmlzYXRpb24vZWxlbWVudHMvVG90YWxFeHBlbmRpdHVyZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiNDY1NWY5NTFcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc0NjU1Zjk1MScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzQ2NTVmOTUxJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Ub3RhbEV4cGVuZGl0dXJlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NjU1Zjk1MSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzQ2NTVmOTUxJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9QYXNzd29yZFJlY292ZXJ5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MDM4NWRhM1wiXG5jb25zdCBzY3JpcHQgPSB7fVxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3Jlc2V0L1Bhc3N3b3JkUmVjb3ZlcnkudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjcwMzg1ZGEzXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzAzODVkYTMnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3MDM4NWRhMycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGFzc3dvcmRSZWNvdmVyeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzAzODVkYTNcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNzAzODVkYTMnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzZiNzY0YmImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vUmVzZXRQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBcIi4vUmVzZXRQYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTM2Yjc2NGJiJmxhbmc9c2Nzc1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3MvcmVzZXQvUmVzZXRQYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIzNmI3NjRiYlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzM2Yjc2NGJiJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMzZiNzY0YmInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzZiNzY0YmImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCczNmI3NjRiYicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVzZXRQYXNzd29yZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDViNDJjYzcmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9yZXNldC9SZXNldFBhc3N3b3JkLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0NWI0MmNjN1wiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQ1YjQyY2M3JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDViNDJjYzcnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1YjQyY2M3JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNDViNDJjYzcnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGQ4NjQ2NjcmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1NldHRpbmdEZWZhdWx0Rm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nRGVmYXVsdEZvcm0udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjRkODY0NjY3XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNGQ4NjQ2NjcnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc0ZDg2NDY2NycsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZDg2NDY2NyZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzRkODY0NjY3JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9TZXR0aW5nUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODFhN2ZkODYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1NldHRpbmdQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9TZXR0aW5nUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3NldHRpbmcvU2V0dGluZ1BhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjgxYTdmZDg2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnODFhN2ZkODYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc4MWE3ZmQ4NicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2V0dGluZ1BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxYTdmZDg2JnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignODFhN2ZkODYnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjMwNzczMDUmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc2V0dGluZy9TZXR0aW5nUHVibGlzaGluZ0Zvcm0udnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjYzMDc3MzA1XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNjMwNzczMDUnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc2MzA3NzMwNScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MzA3NzMwNSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzYzMDc3MzA1JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9PcmdhbmlzYXRpb25MaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NWI5OTA2MCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3JnYW5pc2F0aW9uTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9PcmdhbmlzYXRpb25MaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zdXBlcmFkbWluL09yZ2FuaXNhdGlvbkxpc3QudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjc1Yjk5MDYwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNzViOTkwNjAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc3NWI5OTA2MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vT3JnYW5pc2F0aW9uTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzViOTkwNjAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3NWI5OTA2MCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWRtaW5CYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1OTRhY2Q1JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BZG1pbkJhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9BZG1pbkJhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvc3VwZXJhZG1pbi9jb21wb25lbnRzL0FkbWluQmFyLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI0NTk0YWNkNVwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzQ1OTRhY2Q1JywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNDU5NGFjZDUnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FkbWluQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTk0YWNkNSZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzQ1OTRhY2Q1JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9UYWJsZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1YjI2MzRiJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWJsZUxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIlxuZXhwb3J0ICogZnJvbSBcIi4vVGFibGVMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy9zdXBlcmFkbWluL2NvbXBvbmVudHMvVGFibGVMaXN0LnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCIwNWIyNjM0YlwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzA1YjI2MzRiJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnMDViMjYzNGInLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1RhYmxlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDViMjYzNGImdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcwNWIyNjM0YicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vQWJvdXRQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDlmYTkwNFwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Fib3V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vQWJvdXRQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0Fib3V0UGFnZS52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2Q5ZmE5MDRcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3ZDlmYTkwNCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdkOWZhOTA0JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BYm91dFBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdkOWZhOTA0XCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzdkOWZhOTA0JywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NkYTVjMTkmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9FbWFpbFZlcmlmaWNhdGlvbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiN2NkYTVjMTlcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCc3Y2RhNWMxOScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJzdjZGE1YzE5JywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NkYTVjMTkmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc3Y2RhNWMxOScsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTdlNjMyYTYmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0lhdGlSZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0lhdGlSZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3QvdGhlbWVzL2RlZmF1bHQuY3NzP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3NcIlxuaW1wb3J0IFwiLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0xJmlkPTE3ZTYzMmE2Jmxhbmc9c2Nzc1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlSZWdpc3RlclBhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjE3ZTYzMmE2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMTdlNjMyYTYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxN2U2MzJhNicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSWF0aVJlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTdlNjMyYTYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcxN2U2MzJhNicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vSWF0aVN0YW5kYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNjg0OTRkMCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSWF0aVN0YW5kYXJkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCJcbmV4cG9ydCAqIGZyb20gXCIuL0lhdGlTdGFuZGFyZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL0lhdGlTdGFuZGFyZC52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiZTY4NDk0ZDBcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdlNjg0OTRkMCcsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2U2ODQ5NGQwJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JYXRpU3RhbmRhcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU2ODQ5NGQwJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignZTY4NDk0ZDAnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRjYTY5Mzk2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1B1Ymxpc2hpbmdDaGVja2xpc3QudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImRjYTY5Mzk2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZGNhNjkzOTYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdkY2E2OTM5NicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUHVibGlzaGluZ0NoZWNrbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGNhNjkzOTYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCdkY2E2OTM5NicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjI2NjIwMCZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiQHZ1ZWZvcm0vbXVsdGlzZWxlY3QvdGhlbWVzL2RlZmF1bHQuY3NzP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1jc3NcIlxuaW1wb3J0IFwiLi9SZWdpc3RlclBhZ2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTEmaWQ9NTIyNjYyMDAmbGFuZz1zY3NzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvUmVnaXN0ZXJQYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1MjI2NjIwMFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzUyMjY2MjAwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTIyNjYyMDAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1JlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTIyNjYyMDAmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCc1MjI2NjIwMCcsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vU3VwcG9ydFBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ZmZmOTgwJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9TdXBwb3J0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9TdXBwb3J0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL1N1cHBvcnRQYWdlLnZ1ZVwiXV0pXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICBfX2V4cG9ydHNfXy5fX2htcklkID0gXCI1NmZmZjk4MFwiXG4gIGNvbnN0IGFwaSA9IF9fVlVFX0hNUl9SVU5USU1FX19cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIWFwaS5jcmVhdGVSZWNvcmQoJzU2ZmZmOTgwJywgX19leHBvcnRzX18pKSB7XG4gICAgYXBpLnJlbG9hZCgnNTZmZmY5ODAnLCBfX2V4cG9ydHNfXylcbiAgfVxuICBcbiAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1N1cHBvcnRQYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NmZmZjk4MCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzU2ZmZmOTgwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWFlNDQ4NWFcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vV2VsY29tZVBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvV2VsY29tZVBhZ2UudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcImVhZTQ0ODVhXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnZWFlNDQ4NWEnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCdlYWU0NDg1YScsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vV2VsY29tZVBhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVhZTQ0ODVhXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJ2VhZTQ0ODVhJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9BZG1pbkZvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTVmOWI0YmImdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FkbWluRm9vdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FkbWluRm9vdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX2ZpbGUnLFwicmVzb3VyY2VzL2Fzc2V0cy9qcy92aWV3cy93ZWIvcGFydGlhbHMvQWRtaW5Gb290ZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjU1ZjliNGJiXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnNTVmOWI0YmInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCc1NWY5YjRiYicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQWRtaW5Gb290ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1ZjliNGJiJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignNTVmOWI0YmInLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL0pvaW5Ob3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI2OWY1MDg2JnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Kb2luTm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Kb2luTm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5cbmltcG9ydCBleHBvcnRDb21wb25lbnQgZnJvbSBcIi9ob21lL21vbWlrL1lJL2lhdGlwdWJsaXNoZXIvbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanNcIlxuY29uc3QgX19leHBvcnRzX18gPSAvKiNfX1BVUkVfXyovZXhwb3J0Q29tcG9uZW50KHNjcmlwdCwgW1sncmVuZGVyJyxyZW5kZXJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL0pvaW5Ob3cudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjI2OWY1MDg2XCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjY5ZjUwODYnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyNjlmNTA4NicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vSm9pbk5vdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjY5ZjUwODYmdHM9dHJ1ZVwiLCAoKSA9PiB7XG4gICAgYXBpLnJlcmVuZGVyKCcyNjlmNTA4NicsIHJlbmRlcilcbiAgfSlcblxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IF9fZXhwb3J0c19fIiwiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vU2lnbkluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMTg2MWYzZSZzY29wZWQ9dHJ1ZSZ0cz10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vU2lnbkluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiXG5leHBvcnQgKiBmcm9tIFwiLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcblxuaW1wb3J0IFwiLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9YTE4NjFmM2UmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuaW1wb3J0IGV4cG9ydENvbXBvbmVudCBmcm9tIFwiL2hvbWUvbW9taWsvWUkvaWF0aXB1Ymxpc2hlci9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2V4cG9ydEhlbHBlci5qc1wiXG5jb25zdCBfX2V4cG9ydHNfXyA9IC8qI19fUFVSRV9fKi9leHBvcnRDb21wb25lbnQoc2NyaXB0LCBbWydyZW5kZXInLHJlbmRlcl0sWydfX3Njb3BlSWQnLFwiZGF0YS12LWExODYxZjNlXCJdLFsnX19maWxlJyxcInJlc291cmNlcy9hc3NldHMvanMvdmlld3Mvd2ViL3BhcnRpYWxzL1NpZ25Jbi52dWVcIl1dKVxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgX19leHBvcnRzX18uX19obXJJZCA9IFwiYTE4NjFmM2VcIlxuICBjb25zdCBhcGkgPSBfX1ZVRV9ITVJfUlVOVElNRV9fXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFhcGkuY3JlYXRlUmVjb3JkKCdhMTg2MWYzZScsIF9fZXhwb3J0c19fKSkge1xuICAgIGFwaS5yZWxvYWQoJ2ExODYxZjNlJywgX19leHBvcnRzX18pXG4gIH1cbiAgXG4gIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TaWduSW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWExODYxZjNlJnNjb3BlZD10cnVlJnRzPXRydWVcIiwgKCkgPT4ge1xuICAgIGFwaS5yZXJlbmRlcignYTE4NjFmM2UnLCByZW5kZXIpXG4gIH0pXG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBfX2V4cG9ydHNfXyIsImltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL1dlYkZvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBkMTA2ODAmdHM9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1dlYkZvb3Rlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9XZWJGb290ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJGb290ZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjIwZDEwNjgwXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMjBkMTA2ODAnLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcyMGQxMDY4MCcsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vV2ViRm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGQxMDY4MCZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzIwZDEwNjgwJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9XZWJIZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTEwYzllMGIyJnRzPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9XZWJIZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL1dlYkhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIlxuXG5pbXBvcnQgZXhwb3J0Q29tcG9uZW50IGZyb20gXCIvaG9tZS9tb21pay9ZSS9pYXRpcHVibGlzaGVyL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvZXhwb3J0SGVscGVyLmpzXCJcbmNvbnN0IF9fZXhwb3J0c19fID0gLyojX19QVVJFX18qL2V4cG9ydENvbXBvbmVudChzY3JpcHQsIFtbJ3JlbmRlcicscmVuZGVyXSxbJ19fZmlsZScsXCJyZXNvdXJjZXMvYXNzZXRzL2pzL3ZpZXdzL3dlYi9wYXJ0aWFscy9XZWJIZWFkZXIudnVlXCJdXSlcbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIF9fZXhwb3J0c19fLl9faG1ySWQgPSBcIjEwYzllMGIyXCJcbiAgY29uc3QgYXBpID0gX19WVUVfSE1SX1JVTlRJTUVfX1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghYXBpLmNyZWF0ZVJlY29yZCgnMTBjOWUwYjInLCBfX2V4cG9ydHNfXykpIHtcbiAgICBhcGkucmVsb2FkKCcxMGM5ZTBiMicsIF9fZXhwb3J0c19fKVxuICB9XG4gIFxuICBtb2R1bGUuaG90LmFjY2VwdChcIi4vV2ViSGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xMGM5ZTBiMiZ0cz10cnVlXCIsICgpID0+IHtcbiAgICBhcGkucmVyZW5kZXIoJzEwYzllMGIyJywgcmVuZGVyKVxuICB9KVxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgX19leHBvcnRzX18iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRtaW5IZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRtaW5IZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CcmVhZENydW1iLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CcmVhZENydW1iLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0J1dHRvbkNvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQnV0dG9uQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rlc2NyaXB0aW9uRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb25Gb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Vycm9yTWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvck1lc3NhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvclBvcFVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Vycm9yUG9wVXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ib3ZlclRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0hvdmVyVGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Mb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0xvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9OYXZEcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTmF2RHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUG9wdXBNb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SYWRpYWxQcm9ncmVzc0Jhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmFkaWFsUHJvZ3Jlc3NCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVG9hc3RNZXNzYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RvYXN0TWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0RlbGV0ZUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZWxldGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9MaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9MaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1B1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1VuUHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9VblB1Ymxpc2hCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZWxldGVBY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVsZXRlQWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JMaXN0cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvckxpc3RzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSGF2ZU5vdEFkZGVkWWV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9IYXZlTm90QWRkZWRZZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Pcmdhbml6YXRpb25QdWJsaXNoVW5wdWJsaXNoQnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGFnZVRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJvZ3Jlc3NMb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJvZ3Jlc3NMb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TdGlja3lFcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU3RpY2t5RXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRWxlbWVudFN0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbGVtZW50U3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJldmlvdXNseVB1Ymxpc2hlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QcmV2aW91c2x5UHVibGlzaGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlEZWZhdWx0VmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eURldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlEZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdHlJbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9DcmVhdGVNb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQ3JlYXRlTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQnVsa1B1Ymxpc2hpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FcnJvckl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRXJyb3JJdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHVibGlzaFNlbGVjdGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1B1Ymxpc2hTZWxlY3RlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlZnJlc2hUb2FzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWZyZXNoVG9hc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9WYWxpZGF0aW9uRXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1ZhbGlkYXRpb25FcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eURhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5RGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Db25kaXRpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Db25kaXRpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0NvbnRhY3RJbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Db250YWN0SW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSHVtYW5pdGFyaWFuU2NvcGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JYXRpSWRlbnRpZmllci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSWF0aUlkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGVnYWN5RGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTGVnYWN5RGF0YS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Mb2NhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3RoZXJJZGVudGlmaWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PdGhlcklkZW50aWZpZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGFydGljaXBhdGluZ09yZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGFydGljaXBhdGluZ09yZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QbGFubmVkRGlzYnVyc2VtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BsYW5uZWREaXNidXJzZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Qb2xpY3lNYXJrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BvbGljeU1hcmtlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRSZWdpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWxhdGVkQWN0aXZpdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlbGF0ZWRBY3Rpdml0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXBvcnRpbmdPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2VjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TZWN0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYWcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvckRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW5kaWNhdG9yRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0luZGljYXRvckxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWdncmVnYXRpb25TdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FnZ3JlZ2F0aW9uU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Jhc2VsaW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9CYXNlbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRGVzY3JpcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW5kaWNhdG9yQXNjZW5kaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbmRpY2F0b3JBc2NlbmRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTWVhc3VyZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vTWVhc3VyZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QZXJpb2QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BlcmlvZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlZmVyZW5jZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0aXZpdGllc0VsZW1lbnRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXRpZXNFbGVtZW50cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BY3Rpdml0eUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BZGRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRkQWN0aXZpdHlCdXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG93bmxvYWRBY3Rpdml0eUJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbGVtZW50c05vdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0VsZW1lbnRzTm90ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbXB0eUFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbXB0eUFjdGl2aXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1BhZ2VUaXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QYWdlVGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TaWRlYmFySGVscEJsb2NrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhYmxlTGF5b3V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhYmxlTGF5b3V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGVyaW9kc0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGVyaW9kc0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QZXJpb2RzTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUGVyaW9kc0xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWN0dWFsVmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdHVhbFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhcmdldFZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UYXJnZXRWYWx1ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHREZXRhaWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdERldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXN1bHRFbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdExpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc3VsdExpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRG9jdW1lbnRMaW5rLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW5kaWNhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbmRpY2F0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVmZXJlbmNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWZlcmVuY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzdWx0VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UaXRsZURlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9uRGV0YWlsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkRldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9uRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RyYW5zYWN0aW9uTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BaWRUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BaWRUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Rlc2NyaXB0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EZXNjcmlwdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9EaXNidXJzZW1lbnRDaGFubmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0ZpbmFuY2VUeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9GaW5hbmNlVHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9GbG93VHlwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vRmxvd1R5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUHJvdmlkZXJPcmdhbml6YXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Byb3ZpZGVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlY2VpdmVyT3JnYW5pemF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNlaXZlck9yZ2FuaXphdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlY2lwaWVudFJlZ2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVjaXBpZW50UmVnaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2VjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RpZWRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RpZWRTdGF0dXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25EYXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvbkRhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVHJhbnNhY3Rpb25UeXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9UcmFuc2FjdGlvblR5cGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVmFsdWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1ZhbHVlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5VXBsb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FjdGl2aXR5VXBsb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW1wb3J0TGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JbXBvcnRMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW1wb3J0UGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vSW1wb3J0UGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9MaXN0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9MaXN0RWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkRhdGEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uRWxlbWVudHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9PcmdhbmlzYXRpb25FbGVtZW50c0RldGFpbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0RvY3VtZW50TGluay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Eb2N1bWVudExpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZWNpcGllbnRDb3VudHJ5QnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlY2lwaWVudENvdW50cnlCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXBvcnRpbmdPcmdCdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nT3JnQnVkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVwb3J0aW5nT3JnYW5pc2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlcG9ydGluZ09yZ2FuaXNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlcG9ydGluZ1JlZ2lvbkJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9SZXBvcnRpbmdSZWdpb25CdWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ub3RhbEJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Ub3RhbEJ1ZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RvdGFsRXhwZW5kaXR1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVG90YWxFeHBlbmRpdHVyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc2V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVzZXRQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1Jlc2V0UGFzc3dvcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2V0dGluZ0RlZmF1bHRGb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9TZXR0aW5nRGVmYXVsdEZvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2V0dGluZ1BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NldHRpbmdQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NldHRpbmdQdWJsaXNoaW5nRm9ybS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2V0dGluZ1B1Ymxpc2hpbmdGb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL09yZ2FuaXNhdGlvbkxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vT3JnYW5pc2F0aW9uTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkbWluQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0FkbWluQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vVGFibGVMaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1RhYmxlTGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0VtYWlsVmVyaWZpY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9FbWFpbFZlcmlmaWNhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JYXRpUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0lhdGlTdGFuZGFyZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9JYXRpU3RhbmRhcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9QdWJsaXNoaW5nQ2hlY2tsaXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1JlZ2lzdGVyUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vUmVnaXN0ZXJQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1N1cHBvcnRQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1N1cHBvcnRQYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZzZXR1cD10cnVlXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRtaW5Gb290ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vQWRtaW5Gb290ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Kb2luTm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9Kb2luTm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1NpZ25Jbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC02IS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMF0udXNlWzBdIS4vU2lnbkluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10c1wiIiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1dlYkZvb3Rlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmc2V0dXA9dHJ1ZVwiOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9XZWJGb290ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJnNldHVwPXRydWVcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTYhLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9XZWJIZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzXCI7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTUudXNlWzBdIS4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNiEuLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL1dlYkhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHNcIiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC01LnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9kaXN0L2luZGV4LmpzPz9ydWxlU2V0WzBdLnVzZVswXSEuL0Fib3V0UGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9BYm91dFBhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFswXS51c2VbMF0hLi9XZWxjb21lUGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsInZhciBtYXAgPSB7XG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9kYXRlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X2RhdGUuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9zY29wZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9zY29wZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2FjdGl2aXR5X3N0YXR1cy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9hY3Rpdml0eV9zdGF0dXMuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9idWRnZXQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvYnVkZ2V0LnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvYnVpbGRpbmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvYnVpbGRpbmcuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9jYXBpdGFsX3NwZW5kLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NhcGl0YWxfc3BlbmQuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9jb2xsYWJvcmF0aW9uX3R5cGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvY29sbGFib3JhdGlvbl90eXBlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvY29uZGl0aW9ucy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jb25kaXRpb25zLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvY29udGFjdF9pbmZvLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvbnRhY3RfaW5mby5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2NvdW50cnlfYnVkZ2V0X2l0ZW1zLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2NvdW50cnlfYnVkZ2V0X2l0ZW1zLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvY3JzLWFkZC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9jcnMtYWRkLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvZGVmYXVsdF9haWRfdHlwZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2FpZF90eXBlLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvZGVmYXVsdF9maW5hbmNlX3R5cGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvZGVmYXVsdF9maW5hbmNlX3R5cGUuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2Zsb3dfdHlwZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kZWZhdWx0X2Zsb3dfdHlwZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvZG9jdW1lbnRfbGluay5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9kb2N1bWVudF9saW5rLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvaHVtYW5pdGFyaWFuX3Njb3BlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL2h1bWFuaXRhcmlhbl9zY29wZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL2lhdGlfaWRlbnRpZmllci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9pYXRpX2lkZW50aWZpZXIuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9pbmRpY2F0b3Iuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvaW5kaWNhdG9yLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvbGVnYWN5X2RhdGEuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvbGVnYWN5X2RhdGEuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9sb2NhdGlvbi5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9sb2NhdGlvbi5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL290aGVyX2lkZW50aWZpZXIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvb3RoZXJfaWRlbnRpZmllci5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3BhcnRpY2lwYXRpbmdfb3JnLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BhcnRpY2lwYXRpbmdfb3JnLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcGVyaW9kLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BlcmlvZC5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3BsYW5uZWRfZGlzYnVyc2VtZW50LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3BsYW5uZWRfZGlzYnVyc2VtZW50LnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcG9saWN5X21hcmtlci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9wb2xpY3lfbWFya2VyLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcmVjaXBpZW50X2NvdW50cnkuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVjaXBpZW50X2NvdW50cnkuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZWNpcGllbnRfcmVnaW9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb24uc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZWxhdGVkX2FjdGl2aXR5LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3JlbGF0ZWRfYWN0aXZpdHkuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZXBvcnRpbmdfb3JnLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3JlcG9ydGluZ19vcmcuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy9yZXN1bHQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYWN0aXZpdHktZWxlbWVudHMvcmVzdWx0LnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvcmVzdWx0cy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy9yZXN1bHRzLnN2Z1wiLFxuXHRcIi4vYWN0aXZpdHktZWxlbWVudHMvc2VjdG9yLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FjdGl2aXR5LWVsZW1lbnRzL3NlY3Rvci5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3RhZy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90YWcuc3ZnXCIsXG5cdFwiLi9hY3Rpdml0eS1lbGVtZW50cy90aXRsZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90aXRsZS5zdmdcIixcblx0XCIuL2FjdGl2aXR5LWVsZW1lbnRzL3RyYW5zYWN0aW9ucy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hY3Rpdml0eS1lbGVtZW50cy90cmFuc2FjdGlvbnMuc3ZnXCIsXG5cdFwiLi9hZGQtbW9yZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hZGQtbW9yZS5zdmdcIixcblx0XCIuL2FkZC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hZGQuc3ZnXCIsXG5cdFwiLi9hbGVydC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGVydC5zdmdcIixcblx0XCIuL2FsaWduLWNlbnRlci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1jZW50ZXIuc3ZnXCIsXG5cdFwiLi9hbGlnbi1yaWdodC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hbGlnbi1yaWdodC5zdmdcIixcblx0XCIuL2FwcHJvdmVkLWNsb3VkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2FwcHJvdmVkLWNsb3VkLnN2Z1wiLFxuXHRcIi4vYXJyb3ctZG93bi5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hcnJvdy1kb3duLnN2Z1wiLFxuXHRcIi4vYXJyb3ctbGVmdC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9hcnJvdy1sZWZ0LnN2Z1wiLFxuXHRcIi4vYXJyb3ctcmlnaHQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXJyb3ctcmlnaHQuc3ZnXCIsXG5cdFwiLi9hcnJvdy1zaG9ydC1sZWZ0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Fycm93LXNob3J0LWxlZnQuc3ZnXCIsXG5cdFwiLi9hc2NlbmRpbmctYXJyb3cuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvYXNjZW5kaW5nLWFycm93LnN2Z1wiLFxuXHRcIi4vYmlsbC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9iaWxsLnN2Z1wiLFxuXHRcIi4vYm94LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2JveC5zdmdcIixcblx0XCIuL2J1ZGdldC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9idWRnZXQuc3ZnXCIsXG5cdFwiLi9idWlsZGluZy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9idWlsZGluZy5zdmdcIixcblx0XCIuL2NhbmNlbC1jbG91ZC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jYW5jZWwtY2xvdWQuc3ZnXCIsXG5cdFwiLi9jaGVjay1jaXJjbGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2hlY2stY2lyY2xlLnN2Z1wiLFxuXHRcIi4vY2hlY2tib3guc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvY2hlY2tib3guc3ZnXCIsXG5cdFwiLi9jaGVja2VkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NoZWNrZWQuc3ZnXCIsXG5cdFwiLi9jaGV2cm9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NoZXZyb24uc3ZnXCIsXG5cdFwiLi9jbG9zZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jbG9zZS5zdmdcIixcblx0XCIuL2NvcHlyaWdodC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9jb3B5cmlnaHQuc3ZnXCIsXG5cdFwiLi9jb3JlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2NvcmUuc3ZnXCIsXG5cdFwiLi9kZWZhdWx0LTEuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZGVmYXVsdC0xLnN2Z1wiLFxuXHRcIi4vZGVmYXVsdC0yLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RlZmF1bHQtMi5zdmdcIixcblx0XCIuL2RlbGV0ZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kZWxldGUuc3ZnXCIsXG5cdFwiLi9kZXNjZW5kaW5nLWFycm93LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2Rlc2NlbmRpbmctYXJyb3cuc3ZnXCIsXG5cdFwiLi9kb2N1bWVudC13cml0ZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kb2N1bWVudC13cml0ZS5zdmdcIixcblx0XCIuL2RvdWJsZS10aWNrLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2RvdWJsZS10aWNrLnN2Z1wiLFxuXHRcIi4vZG93bmxvYWQtZmlsZS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kb3dubG9hZC1maWxlLnN2Z1wiLFxuXHRcIi4vZG93bmxvYWQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZG93bmxvYWQuc3ZnXCIsXG5cdFwiLi9kcm9wZG93bi1hcnJvdy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9kcm9wZG93bi1hcnJvdy5zdmdcIixcblx0XCIuL2VkaXQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvZWRpdC5zdmdcIixcblx0XCIuL2V4dGVybmFsLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2V4dGVybmFsLnN2Z1wiLFxuXHRcIi4vZXllLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2V5ZS5zdmdcIixcblx0XCIuL2ZvbGRlci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9mb2xkZXIuc3ZnXCIsXG5cdFwiLi9mb290ZXItbG9nby5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9mb290ZXItbG9nby5zdmdcIixcblx0XCIuL2dyb3VwLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2dyb3VwLnN2Z1wiLFxuXHRcIi4vaGVhZGVyLWxvZ28uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvaGVhZGVyLWxvZ28uc3ZnXCIsXG5cdFwiLi9oZWFkcGhvbmUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvaGVhZHBob25lLnN2Z1wiLFxuXHRcIi4vaGVscC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oZWxwLnN2Z1wiLFxuXHRcIi4vaGlzdG9yeS5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9oaXN0b3J5LnN2Z1wiLFxuXHRcIi4vaWMtdmVyaWZpY2F0aW9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL2ljLXZlcmlmaWNhdGlvbi5zdmdcIixcblx0XCIuL2xlZnQtYXJyb3cuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbGVmdC1hcnJvdy5zdmdcIixcblx0XCIuL2xvZ28td2hpdGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbG9nby13aGl0ZS5zdmdcIixcblx0XCIuL2xvZ28uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvbG9nby5zdmdcIixcblx0XCIuL2xvZ291dC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9sb2dvdXQuc3ZnXCIsXG5cdFwiLi9tYWlsLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL21haWwuc3ZnXCIsXG5cdFwiLi9tb29uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL21vb24uc3ZnXCIsXG5cdFwiLi9ub3RlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL25vdGUuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvYnVpbGRpbmcuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2J1aWxkaW5nLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL2Rlc2NyaXB0aW9uLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9kZXNjcmlwdGlvbi5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9kb2N1bWVudF9saW5rLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9kb2N1bWVudF9saW5rLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL25hbWUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL25hbWUuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvb3JnX2lkZW50aWZpZXIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL29yZ19pZGVudGlmaWVyLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL29yZ2FuaXNhdGlvbl9pZGVudGlmaWVyLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbmlzYXRpb25faWRlbnRpZmllci5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9vcmdhbml6YXRpb25faWRlbnRpZmllci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvb3JnYW5pemF0aW9uX2lkZW50aWZpZXIuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X2NvdW50cnlfYnVkZ2V0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfY291bnRyeV9idWRnZXQuc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvcmVjaXBpZW50X29yZ19idWRnZXQuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlY2lwaWVudF9vcmdfYnVkZ2V0LnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlY2lwaWVudF9yZWdpb25fYnVkZ2V0LnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZWNpcGllbnRfcmVnaW9uX2J1ZGdldC5zdmdcIixcblx0XCIuL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZXBvcnRpbmdfb3JnLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy9yZXBvcnRpbmdfb3JnLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlcG9ydGluZ19vcmdhbmlzYXRpb24uc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3JlcG9ydGluZ19vcmdhbmlzYXRpb24uc3ZnXCIsXG5cdFwiLi9vcmdhbmlzYXRpb24tZWxlbWVudHMvdGl0bGUuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RpdGxlLnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RvdGFsX2J1ZGdldC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9vcmdhbmlzYXRpb24tZWxlbWVudHMvdG90YWxfYnVkZ2V0LnN2Z1wiLFxuXHRcIi4vb3JnYW5pc2F0aW9uLWVsZW1lbnRzL3RvdGFsX2V4cGVuZGl0dXJlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL29yZ2FuaXNhdGlvbi1lbGVtZW50cy90b3RhbF9leHBlbmRpdHVyZS5zdmdcIixcblx0XCIuL3BhbmVsLXNlYXJjaC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9wYW5lbC1zZWFyY2guc3ZnXCIsXG5cdFwiLi9wbHVzLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3BsdXMuc3ZnXCIsXG5cdFwiLi9wdWJsaXNoLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3B1Ymxpc2guc3ZnXCIsXG5cdFwiLi9wdy1sb2NrLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3B3LWxvY2suc3ZnXCIsXG5cdFwiLi9xdWVzdGlvbi1tYXJrLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3F1ZXN0aW9uLW1hcmsuc3ZnXCIsXG5cdFwiLi9yZWQtY3Jvc3Muc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcmVkLWNyb3NzLnN2Z1wiLFxuXHRcIi4vcmVkLWRvdC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWQtZG90LnN2Z1wiLFxuXHRcIi4vcmVkby5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9yZWRvLnN2Z1wiLFxuXHRcIi4vcmlnaHQtYXJyb3cuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvcmlnaHQtYXJyb3cuc3ZnXCIsXG5cdFwiLi9zZWFyY2guc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvc2VhcmNoLnN2Z1wiLFxuXHRcIi4vc2V0dGluZy5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9zZXR0aW5nLnN2Z1wiLFxuXHRcIi4vc2hpZWxkLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NoaWVsZC5zdmdcIixcblx0XCIuL3NtaWxlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3NtaWxlLnN2Z1wiLFxuXHRcIi4vc3Rhci5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy9zdGFyLnN2Z1wiLFxuXHRcIi4vdGljay5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy90aWNrLnN2Z1wiLFxuXHRcIi4vdGltZXMtY2lyY2xlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3RpbWVzLWNpcmNsZS5zdmdcIixcblx0XCIuL3R3aXR0ZXIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdHdpdHRlci5zdmdcIixcblx0XCIuL3VwbG9hZC1maWxlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3VwbG9hZC1maWxlLnN2Z1wiLFxuXHRcIi4vdXNlci1wcm9maWxlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3VzZXItcHJvZmlsZS5zdmdcIixcblx0XCIuL3VzZXIuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvdXNlci5zdmdcIixcblx0XCIuL3dhcm5pbmctYWN0aXZpdHkuc3ZnXCI6IFwiLi9yZXNvdXJjZXMvYXNzZXRzL2ltYWdlcy9zdmcvd2FybmluZy1hY3Rpdml0eS5zdmdcIixcblx0XCIuL3dhcm5pbmctZmlsbC5zdmdcIjogXCIuL3Jlc291cmNlcy9hc3NldHMvaW1hZ2VzL3N2Zy93YXJuaW5nLWZpbGwuc3ZnXCIsXG5cdFwiLi93YXJuaW5nLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3dhcm5pbmcuc3ZnXCIsXG5cdFwiLi95b3V0dWJlLnN2Z1wiOiBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnL3lvdXR1YmUuc3ZnXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vcmVzb3VyY2VzL2Fzc2V0cy9pbWFnZXMvc3ZnIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLiokXCI7IiwiLyogKGlnbm9yZWQpICovIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0IiwidHJ5cyIsIm9wcyIsImYiLCJ5IiwiZyIsInZlcmIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm4iLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJjYWxsIiwicG9wIiwibGVuZ3RoIiwicHVzaCIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2dWVfMSIsInJlcXVpcmUiLCJ2dWVfMiIsImF4aW9zXzEiLCJjb3JlXzEiLCJDcmVhdGVNb2RhbF92dWVfMSIsIlRvYXN0TWVzc2FnZV92dWVfMSIsImRlZmluZUNvbXBvbmVudCIsIl9fbmFtZSIsInByb3BzIiwidXNlciIsInR5cGUiLCJyZXF1aXJlZCIsIm9yZ2FuaXphdGlvbiIsInZhbGlkYXRvciIsInN1cGVyQWRtaW4iLCJCb29sZWFuIiwic2V0dXAiLCJfX3Byb3BzIiwiX2EiLCJfdGhpcyIsIl9iIiwiZXhwb3NlIiwidHJhbnNsYXRpb24iLCJ3aW5kb3ciLCJzaG93VXNlckRyb3Bkb3duIiwicmVmIiwidG9hc3RWaXNpYmlsaXR5Iiwic2hvd1NpZGViYXIiLCJ0b2FzdE1lc3NhZ2UiLCJ0b2FzdFR5cGUiLCJkYXRhIiwicmVhY3RpdmUiLCJsYW5ndWFnZU5hdkxpQ2xhc3NlcyIsImxhbmd1YWdlTmF2QW5jaG9yQ2xhc3NlcyIsIm1lbnVOYXZMaUNsYXNzZXMiLCJtZW51TmF2QW5jaG9yQ2xhc3NlcyIsImxhbmd1YWdlcyIsImxhbmd1YWdlIiwicGVybWFsaW5rIiwiYWN0aXZlIiwibWVudXMiLCJuYW1lIiwiYWRtaW4iLCJoZWFkZXIiLCJhY3Rpdml0eV9kYXRhIiwib3JnYW5pc2F0aW9uX2RhdGEiLCJzZXR0aW5ncyIsImNvbW1vbl9sYW5nIiwiYWRkX2ltcG9ydF9hY3Rpdml0eSIsImxpQ2xhc3MiLCJfYyIsInVzZVRvZ2dsZSIsIm1vZGFsVmFsdWUiLCJtb2RhbFRvZ2dsZSIsInRvYXN0IiwibWVzc2FnZSIsInNldFRpbWVvdXQiLCJpc1RvdWNoRGV2aWNlIiwiY29tcHV0ZWQiLCJuYXZpZ2F0b3IiLCJtYXhUb3VjaFBvaW50cyIsIlRvZ2dsZU1vZGVsIiwibG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsIndhdGNoIiwic2lkZWJhciIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJvdmVyZmxvdyIsImNoYW5nZUFjdGl2ZU1lbnUiLCJwYXRoIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImZvckVhY2giLCJtZW51Iiwia2V5IiwiaW5jbHVkZXMiLCJwYSIsInVzZVN0b3JhZ2UiLCJwdWJsaXNoaW5nQWN0aXZpdGllcyIsImdldEl0ZW0iLCJsb2dvdXQiLCJwb3N0IiwicmVzIiwic3RhdHVzIiwiaHJlZiIsInNlYXJjaFZhbHVlIiwiY3VycmVudFVSTCIsInF1ZXJ5U3RyaW5nIiwic2VhcmNoIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiZ2V0Iiwic3Bpbm5lciIsInNlYXJjaEZ1bmN0aW9uIiwidXJsIiwicGFyYW0iLCJyZXBsYWNlIiwic29ydGluZ1BhcmFtIiwicXVlcnlTdHJpbmdBcnIiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsImNvbmNhdCIsIm9uTW91bnRlZCIsIm9uVW5tb3VudGVkIiwiX19yZXR1cm5lZF9fIiwiQ3JlYXRlTW9kYWwiLCJUb2FzdCIsImVudW1lcmFibGUiLCJ0aXRsZV8xIiwiY29tcG9uZW50cyIsInRvUmVmcyIsImJyZWFkY3J1bWJEYXRhIiwiZ2V0QWN0aXZpdHlUaXRsZSIsInRleHQiLCJTdHJpbmciLCJpY29uIiwibGluayIsImJ0blR5cGUiLCJ2dWVfMyIsIkxvYWRlcl92dWVfMSIsImlzRW1wdHkiLCJzaG93IiwiaGFzRXJyb3JzIiwiZXJyb3JDb3VudCIsInRvYXN0RGF0YSIsImluamVjdCIsImVycm9yRGF0YSIsImFjY291bnRfdmVyaWZpZWQiLCJwdWJsaXNoZXJfYWN0aXZlIiwiZGVmYXVsdF9zZXR0aW5nIiwicHVibGlzaGVyX3NldHRpbmciLCJ0b2tlbl9zdGF0dXMiLCJpc0xvYWRlclZpc2libGUiLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsInZpc2liaWxpdHkiLCJzdWNjZXNzIiwiZXJyb3IiLCJhbGwiLCJzcHJlYWQiLCJzZXR0aW5nX3JlcyIsInVzZXJfcmVzIiwib3JnX3JlcyIsInJlc3BvbnNlIiwidXNlcl9yZXNwb25zZSIsIm9yZ19yZXNwb25zZSIsImRlZmF1bHRfc3RhdHVzIiwicHVibGlzaGVyX3N0YXR1cyIsImdyb3VwZWRFcnJvciIsImluZGV4T2YiLCJ2YWx1ZXMiLCJUcmFuc2l0aW9uUm9vdCIsIkxvYWRlciIsIkFycmF5IiwidGl0bGUiLCJlbWl0cyIsImVtaXQiLCJjbG9zZSIsImhvdmVyVGV4dCIsIndpZHRoIiwicG9zaXRpb24iLCJpY29uU2l6ZSIsInNob3dJYXRpUmVmZXJlbmNlIiwiYnRuVGV4dCIsImJ0bkxpbmsiLCJtb2RhbEFjdGl2ZSIsInZ1ZTNfcmFkaWFsX3Byb2dyZXNzXzEiLCJSYWRpYWxQcm9ncmVzc0JhciIsInBlcmNlbnQiLCJOdW1iZXIiLCJjb21wbGV0ZWRQZXJjZW50IiwidG90YWxQZXJjZW50IiwiYWN0aXZlX3BhZ2UiLCJ1cGRhdGVBY3RpdmVQYWdlIiwicGFnZSIsImNoYW5nZVBhZ2UiLCJwYWdlTnVtIiwibGFzdF9wYWdlIiwibmV4dFBhZ2UiLCJwcmV2aW91c1BhZ2UiLCJjbGFzc05hbWUiLCJCdXR0b25Db21wb25lbnRfdnVlXzEiLCJQb3B1cE1vZGFsX3Z1ZV8xIiwiUHJvZ3Jlc3NMb2FkZXJfdnVlXzEiLCJpbmRleF8xIiwic3RvcmUiLCJ1c2VTdG9yZSIsImRlbGV0ZVZhbHVlIiwiZGVsZXRlVG9nZ2xlIiwibG9hZGVyIiwiZGVsZXRlRnVuY3Rpb24iLCJkZWxldGVFbmRQb2ludCIsInN0YXRlIiwic2VsZWN0ZWRBY3Rpdml0aWVzIiwicmVsb2FkIiwiQnRuQ29tcG9uZW50IiwiTW9kYWwiLCJkZXNpZ24iLCJzdHlsZVR5cGUiLCJjbGFzc2VzIiwic2hvd18xIiwibGlua2VkVG9JYXRpIiwiY29yZUNvbXBsZXRlZCIsImFjdGl2aXR5SWQiLCJkZXRhaWxTdG9yZSIsImlkIiwicHVibGlzaFZhbHVlIiwicHVibGlzaFRvZ2dsZSIsInB1Ymxpc2hTdGVwIiwiY29yZUVsZW1lbnRTdGF0dXMiLCJsb2FkZXJUZXh0IiwicmVzZXRQdWJsaXNoU3RlcCIsInB1Ymxpc2hTdGF0ZUNoYW5nZSIsInB1Ymxpc2hTdGF0ZSIsImRlc2NyaXB0aW9uIiwiYWxlcnRTdGF0ZSIsImNvcmVfY29tcGxldGVkX3RpdGxlIiwiY29yZV9jb21wbGV0ZWRfZGVzY3JpcHRpb24iLCJjb3JlX25vdF9jb21wbGV0ZWRfdGl0bGUiLCJjb3JlX25vdF9jb21wbGV0ZWRfZGVzY3JpcHRpb24iLCJzIiwic3RpY2t5IiwiY29tbW9uIiwiZGVzY3JpcHRpb25fMSIsInRpdGxlXzIiLCJkZXNjcmlwdGlvbl8yIiwidGl0bGVfMyIsImVyciIsImNyaXRpY2FsTnVtYmVyIiwiY3JpdGljYWwiLCJlcnJvcnMiLCJlcnJvck51bWJlciIsImFuZCIsIndhcm5pbmdOdW1iZXIiLCJ3YXJuaW5ncyIsImhhc19hdGxlYXN0X29uZV9jcml0aWNhbF9lcnJvciIsIndlX2hpZ2hseV9yZWNvbW1lbmQiLCJ3ZXJlX2ZvdW5kIiwidmlld19pbmZvcm1hdGlvbiIsInN0ZXBQbHVzT25lIiwic3RlcE1pbnVzT25lIiwidmFsaWRhdG9yRnVuY3Rpb24iLCJ2YWxpZGF0aW5nIiwiYWN0aXZpdHkiLCJkaXNwYXRjaCIsImNyaXQiLCJzdW1tYXJ5Iiwid2FybmluZyIsImNoZWNrUHVibGlzaCIsInB1Ymxpc2hGdW5jdGlvbiIsInB1Ymxpc2hpbmciLCJwdWJsaXNoU3RhdHVzIiwibGlua2VkX3RvX2lhdGkiLCJidXR0b25fbGFuZyIsInJlcHVibGlzaCIsInB1Ymxpc2giLCJ1bnB1Ymxpc2hWYWx1ZSIsInVucHVibGlzaFRvZ2dsZSIsInBsZWFzZV93YWl0IiwidW5QdWJsaXNoRnVuY3Rpb24iLCJ1bnB1Ymxpc2hpbmciLCJpdGVtSWQiLCJpdGVtVHlwZSIsImVycm9yVHlwZSIsImJnQ29sb3IiLCJpY29uQ29sb3IiLCJ0b2dnbGUiLCJhY2NvcmRpb25Ub2dnbGUiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwicGFyZW50RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJlbEhlaWdodCIsImNsaWVudEhlaWdodCIsImNzc1RleHQiLCJ1cGRhdGVFcnJvckNvdW50TWVzc2FnZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwiTGlua192dWVfMSIsIkJ0biIsIm1hbmRhdG9yeUVsZW1lbnRTdGF0dXMiLCJpc19wdWJsaXNoZWQiLCJCcmVhZENydW1iX3Z1ZV8xIiwiQnJlYWRjcnVtYiIsImJhY2tMaW5rIiwiY2hhbmdlVGV4dCIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsIkVycm9yTGlzdHNfdnVlXzEiLCJlcnJvclZhbHVlIiwiZXJyb3JUb2dnbGUiLCJ0ZW1wRGF0YSIsInVwZGF0ZVRlbXBNZXNzYWdlIiwiZXJyb3JEYXRhUHJvcHMiLCJfaSIsImVycm9yRGF0YVByb3BzXzEiLCJzZXZlcml0eSIsIkVycm9yTGlzdHMiLCJjb2xvciIsImNvbXBsZXRlZCIsIm5vdF9jb21wbGV0ZWQiLCJwcmV2aW91c2x5X3B1Ymxpc2hlZF9vbl9pYXRpIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJpIiwiYXJndW1lbnRzIiwicCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwibXVsdGlzZWxlY3RfMSIsImN1cnJlbmNpZXMiLCJidWRnZXROb3RQcm92aWRlZCIsImh1bWFuaXRhcmlhbiIsImRlZmF1bHRWYWx1ZXMiLCJidWRnZXRfbm90X3Byb3ZpZGVkIiwiZGVmYXVsdF9jdXJyZW5jeSIsImRlZmF1bHRfbGFuZ3VhZ2UiLCJoaWVyYXJjaHkiLCJkZWZhdWx0RXJyb3JzIiwiZXJyb3JSZXNldCIsImRlZmF1bHREYXRhIiwibG9hZGVyVmlzaWJpbGl0eSIsInN1Ym1pdEZvcm0iLCJwdXQiLCJNdWx0aXNlbGVjdCIsIkluZGV4XzEiLCJIb3ZlclRleHRfdnVlXzEiLCJSYWRpYWxQcm9ncmVzc0Jhcl92dWVfMSIsIlB1Ymxpc2hCdXR0b25fdnVlXzEiLCJVblB1Ymxpc2hCdXR0b25fdnVlXzEiLCJEZWxldGVCdXR0b25fdnVlXzEiLCJTdGlja3lFcnJvcnNfdnVlXzEiLCJFcnJvclBvcFVwX3Z1ZV8xIiwiQWN0aXZpdGllc0VsZW1lbnRzX3Z1ZV8xIiwiQWN0aXZpdHlFbGVtZW50X3Z1ZV8xIiwiUHJldmlvdXNseVB1Ymxpc2hlZF92dWVfMSIsIkhvdmVyVGV4dCIsIlByb2dyZXNzQmFyIiwiRWxlbWVudHMiLCJBY3Rpdml0eUVsZW1lbnQiLCJSZXN1bHQiLCJQdWJsaXNoIiwiRXJyb3JzIiwiVW5QdWJsaXNoIiwiRGVsZXRlQnV0dG9uIiwiUHJldmlvdXNseVB1Ymxpc2hlZCIsIkVycm9yUG9wVXAiLCJlbGVtZW50cyIsImdyb3VwcyIsInByb2dyZXNzIiwidHlwZXMiLCJyZXN1bHRzIiwidHJhbnNhY3Rpb25zIiwiaWF0aVZhbGlkYXRvclJlc3BvbnNlIiwiaW5kZXhTdG9yZSIsInBvc2l0aW9uWSIsInNjcmVlbldpZHRoIiwiZG93bmxvYWRWYWx1ZSIsImRvd25sb2FkVG9nZ2xlIiwidG9nZ2xlU2lkZWJhciIsImhhbmRsZVNjcm9sbCIsInNjcm9sbFkiLCJpc3RvcFZpc2libGUiLCJpbm5lcldpZHRoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNhbGNXaWR0aCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsImlnbm9yZVRvYXN0VXBkYXRlIiwiX2QiLCJncm91cGVkRGF0YSIsImFjdGl2aXR5UHJvcHMiLCJhY3Rpdml0aWVzIiwiZWxlbWVudFByb3BzIiwic3RhdHVzUHJvcHMiLCJ0cmFuc2FjdGlvblByb3BzIiwia2V5cyIsIm1hcCIsImZsYWciLCJrIiwidG9TdHJpbmciLCJwYWdlVGl0bGUiLCJmb3VuZCIsImZpbmQiLCJjdXJyZW50TGFuZ3VhZ2UiLCJuYXJyYXRpdmUiLCJmb3JtYXRUaXRsZSIsImlnbm9yZVVwZGF0ZXMiLCJ3YXRjaElnbm9yYWJsZSIsInVuZGVmaW5lZCIsImZsdXNoIiwicHJvdmlkZSIsImFjdGl2aXRpZXNfbGFuZyIsInlvdXJfYWN0aXZpdGllcyIsInZhbGlkYXRpb25SZXN1bHQiLCJFbXB0eUFjdGl2aXR5X3Z1ZV8xIiwiVGFibGVMYXlvdXRfdnVlXzEiLCJUYWJsZVBhZ2luYXRpb25fdnVlXzEiLCJQYWdlVGl0bGVfdnVlXzEiLCJFcnJvck1lc3NhZ2VfdnVlXzEiLCJFbXB0eUFjdGl2aXR5IiwiUGFnZVRpdGxlIiwiUGFnaW5hdGlvbiIsIlRhYmxlTGF5b3V0IiwiRXJyb3JNZXNzYWdlIiwiaXNMb2FkaW5nIiwiZW5kcG9pbnQiLCJzaG93RW1wdHlUZW1wbGF0ZSIsInNob3dCdXR0b25zIiwic2hvd09ySGlkZSIsImZldGNoQWN0aXZpdGllcyIsInJlZnJlc2hUb2FzdE1zZyIsInJlZnJlc2hNZXNzYWdlVHlwZSIsInJlZnJlc2hNZXNzYWdlIiwiZm9ybURhdGEiLCJhY3Rpdml0eV9pZGVudGlmaWVyIiwiY2xvc2VNb2RhbCIsInN0b3JlQWN0aXZpdHkiLCJwYVN0b3JhZ2UiLCJoYXNGYWlsZWRBY3Rpdml0aWVzIiwiaWRzIiwiaW50ZXJ2YWxJRCIsImJ1bGtQdWJsaXNoU3RhdHVzIiwibmV3VmFsdWUiLCJjbGVhckludGVydmFsIiwiZmFpbGVkQWN0aXZpdGllcyIsInNldEludGVydmFsIiwib3JnYW5pemF0aW9uX2lkIiwiam9iX2JhdGNoX3V1aWQiLCJvcGVuIiwidG9nZ2xlV2luZG93IiwiY2xvc2VzdCIsImNsb3NlV2luZG93IiwibmVzdGVkT2JqZWN0IiwiZmFpbGVkQWN0aXZpdGllc0lEIiwiYXNBcnJheURhdGEiLCJlbnRyaWVzIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJhY3Rpdml0eV9pZCIsImZhaWxlZEFjdGl2aXRpZXNEYXRhIiwiZnJvbUVudHJpZXMiLCJyZXRyeVB1Ymxpc2hpbmciLCJWYWxpZGF0aW9uRXJyb3JzX3Z1ZV8xIiwiQnVsa1B1Ymxpc2hpbmdfdnVlXzEiLCJwdWJsaXNoQWxlcnRWYWx1ZSIsInB1Ymxpc2hBbGVydFRvZ2dsZSIsImJ1bGtQdWJsaXNoU3RlcCIsInBvcFVwV2lkdGhDaGFuZ2UiLCJkaXNwbGF5VG9hc3QiLCJjb3JlQ29tcGxldGVkQWN0aXZpdGllcyIsImNvcmVJbkNvbXBsZXRlZEFjdGl2aXRpZXMiLCJ2ZXJpZnlDb3JlRWxlbWVudHMiLCJ2ZXJpZnlpbmdfY29yZV9lbGVtZW50cyIsImNvbXBsZXRlIiwiaW5jb21wbGV0ZSIsInZhbGlkYXRpb25FcnJvcnMiLCJ2YWxpZGF0ZUFjdGl2aXRpZXMiLCJ2YWxpZGF0aW5nX2FjdGl2aXRpZXMiLCJzdGFydEJ1bGtQdWJsaXNoIiwic3RhcnRpbmdfdG9fcHVibGlzaCIsIlZhbGlkYXRpb25FcnJvcnMiLCJCdWxrUHVibGlzaGluZyIsImNsYXNzTmFtZTIiLCJFcnJvckl0ZW1fdnVlXzEiLCJjcml0aWNhbE1lc3NhZ2UiLCJ3YXJuaW5nTWVzc2FnZSIsIm5vRXJyb3JNZXNzYWdlIiwibm9fZXJyb3IiLCJFcnJvckl0ZW0iLCJtb21lbnRfMSIsImZvcm1hdERhdGUiLCJkYXRlIiwiZm9ybWF0IiwiZGF0ZUZvcm1hdF8xIiwiZGF0ZUZvcm1hdCIsInJvdW5kRmxvYXQiLCJudW0iLCJwYXJzZUZsb2F0IiwidG9GaXhlZCIsIkhhdmVOb3RBZGRlZFlldF92dWVfMSIsIk5vdFlldCIsInRvb2x0aXAiLCJyZXN1bHREYXRhIiwiY29udGVudCIsIm1vbWVudCIsIlRpdGxlRWxlbWVudCIsIk1lYXN1cmUiLCJBc2NlbmRpbmciLCJBZ2dyZWdhdGlvblN0YXR1cyIsIkRlc2NyaXB0aW9uIiwiUmVmZXJlbmNlIiwiQmFzZWxpbmUiLCJEb2N1bWVudExpbmsiLCJQZXJpb2QiLCJyZXN1bHRUaXRsZSIsImluZGljYXRvciIsInBlcmlvZCIsImVsZW1lbnQiLCJsaW5rQ2xhc3NlcyIsImluZGljYXRvckRhdGEiLCJwZXJpb2REYXRhIiwicGFyZW50RGF0YSIsInJlc3VsdF9pZCIsImFjdGl2aXR5VGl0bGUiLCJhY3Rpdml0eUxpbmsiLCJyZXN1bHRJZCIsInJlc3VsdFRpdGxlZCIsInJlc3VsdExpbmsiLCJpbmRpY2F0b3JMaW5rIiwiaW5kaWNhdG9yVGl0bGUiLCJEZWxldGVBY3Rpb25fdnVlXzEiLCJEZWxldGVBY3Rpb24iLCJpbmRpY2F0b3JzIiwiaW5kaWNhdG9yc0RhdGEiLCJpbmRpY2F0b3JfbGlzdCIsImhhbmRsZU5hdmlnYXRlIiwiZmV0Y2hMaXN0aW5ncyIsInN0YXR1c0RhdGEiLCJiYXNlVHlwZSIsImVsZW1lbnRTcGFjaW5nIiwiYmFzZWxpbmUiLCJsb2NhdGlvbnMiLCJpdGVtIiwicmVmZXJlbmNlIiwibGFzdExvY2F0aW9uIiwiZGltZW5zaW9ucyIsImRlc2NUeXBlIiwiZGVzY3JpcHRpb25EYXRhIiwiYWxpZ25tZW50IiwiZGxEYXRhIiwibWVhc3VyZVR5cGUiLCJtZWFzdXJlRGF0YSIsInJlZlR5cGUiLCJyZWZEYXRhIiwidGl0bGVUeXBlIiwidGl0bGVEYXRhIiwiY29yZUVsZW1lbnRzXzEiLCJkcm9wZG93biIsImRyb3Bkb3duQnRuIiwic2VhcmNoQnRuVmFsdWUiLCJzZWFyY2hCdG5Ub2dnbGUiLCJlbGVtZW50SWNvbnMiLCJjb3JlIiwiZmlsdGVyZWRFbGVtZW50cyIsInRvTG93ZXJDYXNlIiwianVzdFN0cmluZ3MiLCJhY3Rpdml0eUNvcmVFbGVtZW50cyIsImRyb3Bkb3duRmlsdGVyIiwiY29udGFpbnMiLCJnZXRMaW5rIiwiaGFzX2RhdGEiLCJpbmRleCIsIkVsZW1lbnRTdGF0dXNfdnVlXzEiLCJsYXlvdXQiLCJkZWxldGVBY3Rpdml0eUVsZW1lbnQiLCJkZWxldGVFbGVtZW50Iiwic2Nyb2xsVG8iLCJBY3Rpdml0eURhdGUiLCJDb25kaXRpb25zIiwiQ29udGFjdEluZm8iLCJIdW1hbml0YXJpYW5TY29wZSIsIklhdGlJZGVudGlmaWVyIiwiTGVnYWN5RGF0YSIsIkxvY2F0aW9uIiwiT3RoZXJJZGVudGlmaWVyIiwiUGFydGljaXBhdGluZ09yZyIsIlBsYW5uZWREaXNidXJzZW1lbnQiLCJQb2xpY3lNYXJrZXIiLCJSZWNpcGllbnRDb3VudHJ5IiwiUmVjaXBpZW50UmVnaW9uIiwiUmVsYXRlZEFjdGl2aXR5IiwiUmVwb3J0aW5nT3JnYW5pemF0aW9uIiwiU2VjdG9yIiwiVGFnIiwiVHJhbnNhY3Rpb25zIiwiU3RhdHVzIiwiaXNWaXNpYmxlIiwibW9kZWxWaXNpYmxlIiwidG9nZ2xlTW9kZWwiLCJ0b2FzdG1lc3NhZ2VUeXBlIiwic2hvd0Vycm9ycG9wdXAiLCJkb3dubG9hZEVycm9yIiwiZmlsZW5hbWUiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImRvd25sb2FkRXJyb3J4bWwiLCJjb3VudEFjdGl2aXRpZXMiLCJxdWVyeVBhcmFtZXRlcnMiLCJhZGRRdWVyeVBhcmFtcyIsImFwaVVybCIsImJsb2IiLCJCbG9iIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJoZWFkZXJzIiwiZG93bmxvYWRYbWwiLCJjb25zb2xlIiwibG9nIiwieG1sX2Vycm9yIiwiZG93bmxvYWRDc3YiLCJBZGRBY3Rpdml0eUJ1dHRvbl92dWVfMSIsIkFjdGl2aXR5QnV0dG9uIiwiZGlzbWlzcyIsIkRvd25sb2FkQWN0aXZpdHlCdXR0b25fdnVlXzEiLCJSZWZyZXNoVG9hc3RfdnVlXzEiLCJQdWJsaXNoU2VsZWN0ZWRfdnVlXzEiLCJEb3dubG9hZEFjdGl2aXR5QnV0dG9uIiwiQWRkQWN0aXZpdHlCdXR0b24iLCJSZWZyZXNoVG9hc3RNZXNzYWdlIiwiUHVibGlzaFNlbGVjdGVkIiwic2VsZWN0QWxsVmFsdWUiLCJzZWxlY3RBbGxUb2dnbGUiLCJmcm9tTm93IiwidG9nZ2xlU2VsZWN0QWxsIiwiZGF0dW0iLCJxdWVyeSIsImRpcmVjdGlvbiIsInNvcnRpbmdEaXJlY3Rpb24iLCJzb3J0QnlEYXRlVXJsIiwiVGFyZ2V0VmFsdWUiLCJBY3R1YWxWYWx1ZSIsImluZGljYXRvcklkIiwicGVyaW9kTGluayIsImFjdHRpdml0aWVzX2xhbmciLCJwZXJpb2RzRGF0YSIsInBlcmlvZHNfbGlzdCIsInV0aWxzXzEiLCJkbFR5cGUiLCJhY3R1YWxWYWx1ZSIsImdldExvY2F0aW9uIiwidGFyZ2V0VmFsdWUiLCJSZXN1bHRFbGVtZW50X3Z1ZV8xIiwiSW5kaWNhdG9yX3Z1ZV8xIiwiUmVzdWx0RWxlbWVudCIsIkluZGljYXRvciIsImhhc0luZGljYXRvcnMiLCJyZXN1bHRzRGF0YSIsIlRpdGxlRGVzY3JpcHRpb24iLCJSZXN1bHRUeXBlIiwiZWxlbWVudE5hbWUiLCJlZGl0VXJsIiwiZWxlbWVudERhdGEiLCJyZXN1bHRUeXBlIiwicmVzdWx0Vm9jYWJ1bGFyeSIsInRyYW5zbGF0aW9uTGFuZ3VhZ2UiLCJyZXN1bHRfbGlzdCIsInRvb2xUaXAiLCJyZXZlcnNlIiwicmVmZXJlbmNlRGF0YSIsInR5cGVEYXRhIiwidGREYXRhIiwiVHJhbnNhY3Rpb25FbGVtZW50X3Z1ZV8xIiwiVHJhbnNhY3Rpb25FbGVtZW50IiwidHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbkRhdGEiLCJ0cmFuc2FjdGlvbkxpbmsiLCJpc01hbmRhdG9yeUljb24iLCJyIiwiQWlkVHlwZSIsIlRyYW5zYWN0aW9uVHlwZSIsIlRyYW5zYWN0aW9uRGF0ZSIsIlZhbHVlIiwiUHJvdmlkZXJPcmdhbml6YXRpb24iLCJSZWNlaXZlck9yZ2FuaXphdGlvbiIsIkRpc2J1cnNlbWVudENoYW5uZWwiLCJGbG93VHlwZSIsIkZpbmFuY2VUeXBlIiwiVGllZFN0YXR1cyIsImdldExhbmd1YWdlcyIsImVudHJ5IiwidHJhbnNhY3Rpb25zRGF0YSIsInRyYW5zYWN0aW9uX2xpc3QiLCJhdERhdGEiLCJjb2RlIiwiZmluYW5jZURhdGEiLCJmbG93RGF0YSIsIlBvRGF0YSIsImNvdW50cnkiLCJzZWN0b3IiLCJ0c0RhdGEiLCJmaWxlIiwidXBsb2FkRmlsZSIsImZpbGVzIiwiY29uZmlnIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJkb3dubG9hZEV4Y2VsIiwibWV0aG9kIiwicmVzcG9uc2VUeXBlIiwiSW1wb3J0UGxhY2Vob2xkZXJfdnVlXzEiLCJMaXN0RWxlbWVudF92dWVfMSIsInNlbGVjdGVkQ291bnQiLCJhY3Rpdml0aWVzTGVuZ3RoIiwic2VsZWN0QWxsIiwidGltZXIiLCJjb3VudCIsInVwZGF0ZVNlbGVjdGVkQWN0aXZpdGllcyIsInNwbGljZSIsInNlbGVjdEFsbEFjdGl2aXRpZXMiLCJpbXBvcnRBY3Rpdml0aWVzIiwiZmlsZXR5cGUiLCJQbGFjZWhvbGRlciIsIkxpc3RFbGVtZW50IiwiU2hpbW1lckxvYWRpbmdfdnVlXzEiLCJTaGltbWVyIiwidG9nZ2xlRXJyb3IiLCJzZWxlY3RFbGVtZW50IiwiY291bnRFcnJvcnMiLCJzZWxlY3RlZERhdGEiLCJKU09OIiwicGFyc2UiLCJPcmdhbmlzYXRpb25FbGVtZW50c192dWVfMSIsIk9yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsX3Z1ZV8xIiwiT3JnYW5pemF0aW9uUHVibGlzaFVucHVibGlzaEJ1dHRvbl92dWVfMSIsImNvcmVfMiIsIk9yZ2FuaXNhdGlvbkVsZW1lbnRzIiwiT3JnYW5pc2F0aW9uRWxlbWVudHNEZXRhaWwiLCJQdWJsaXNoVW5wdWJsaXNoIiwibWFuZGF0b3J5Q29tcGxldGVkIiwiX2UiLCJvcmdhbml6YXRpb25Qcm9wcyIsIm9yZ2FuaXphdGlvbkRhdGEiLCJwdWJsaXNoTWVzc2FnZSIsIm1hbmRhdG9yeSIsIm9yZ01hbmRhdG9yeUVsZW1lbnRzIiwicmVwbGFjZVVuZGVyc2NvcmUiLCJzdHJpbmciLCJyZWdleCIsIlJlcG9ydGluZ09yZ2FuaXNhdGlvbiIsIlRvdGFsQnVkZ2V0IiwiUmVwb3J0aW5nT3JnQnVkZ2V0IiwiUmVwb3J0aW5nUmVnaW9uQnVkZ2V0IiwiUmVjaXBpZW50Q291bnRyeUJ1ZGdldCIsIlRvdGFsRXhwZW5kaXR1cmUiLCJtaXNzaW5nIiwiZW1haWwiLCJlbWFpbEVycm9yIiwicmVzZXQiLCJyZXF1ZXN0IiwicmVzcG9uc2VVUkwiLCJjcnlwdG9fanNfMSIsInRva2VuIiwicGFzc3dvcmQiLCJwYXNzd29yZF9jb25maXJtYXRpb24iLCJlbmNyeXB0IiwiaXYiLCJsaWIiLCJXb3JkQXJyYXkiLCJyYW5kb20iLCJzYWx0IiwiaXRlcmF0aW9ucyIsImVuY3J5cHRNZXRob2RMZW5ndGgiLCJoYXNoS2V5IiwiUEJLREYyIiwiaGFzaGVyIiwiYWxnbyIsIlNIQTUxMiIsImtleVNpemUiLCJlbmNyeXB0ZWQiLCJBRVMiLCJtb2RlIiwiQ0JDIiwiZW5jcnlwdGVkU3RyaW5nIiwiZW5jIiwiQmFzZTY0Iiwic3RyaW5naWZ5IiwiY2lwaGVydGV4dCIsIm91dHB1dCIsIkhleCIsIlV0ZjgiLCJmb3JtIiwicHJvY2VzcyIsImVudiIsIk1JWF9FTkNSWVBUSU9OX0tFWSIsInN0b3JlXzEiLCJhY3Rpb25zXzEiLCJkZWZhdWx0Rm9ybSIsImRlZmF1bHRFcnJvciIsInVwZGF0ZVN0b3JlIiwiQWN0aW9uVHlwZXMiLCJVUERBVEVfREVGQVVMVF9WQUxVRVMiLCJTZXR0aW5nRGVmYXVsdEZvcm1fdnVlXzEiLCJTZXR0aW5nUHVibGlzaGluZ0Zvcm1fdnVlXzEiLCJTZXR0aW5nRGVmYXVsdEZvcm0iLCJTZXR0aW5nUHVibGlzaGluZ0Zvcm0iLCJ0YWIiLCJwdWJsaXNoaW5nRm9ybSIsInB1Ymxpc2hpbmdJbmZvIiwicHVibGlzaGluZ0Vycm9yIiwic2V0dGluZ0RhdGEiLCJwdWJsaXNoZXJJbmZvIiwiYWN0aXZpdHlWYWx1ZXMiLCJkZWZhdWx0X3ZhbHVlcyIsInB1Ymxpc2hpbmdfaW5mbyIsImFjdGl2aXR5X2RlZmF1bHRfdmFsdWVzIiwiYXBpX3Rva2VuIiwidG9nZ2xlVGFiIiwic3VibWl0RGVmYXVsdCIsImhpZXJhcmNoaWFsIiwic3VibWl0UHVibGlzaGluZyIsInB1Ymxpc2hlcl92ZXJpZmljYXRpb24iLCJ0b2tlbl92ZXJpZmljYXRpb24iLCJhdXRvVmVyaWZ5IiwiVVBEQVRFX1BVQkxJU0hJTkdfRk9STSIsIlRhYmxlTGlzdF92dWVfMSIsIm9yZ2FuaXNhdGlvbnMiLCJUYWJsZUxpc3QiLCJvcmdhbml6YXRpb25OYW1lIiwic3dpdGNoQmFjayIsIm9yZ2FuaXNhdGlvbkRhdGEiLCJmZXRjaE9yZ2FuaXNhdGlvbiIsInByb3h5VXNlciIsImRlZmF1bHRTb3J0RGlyZWN0aW9uIiwic29ydERpcmVjdGlvbiIsIm9yZGVyVHlwZSIsInNvcnRCeSIsIm9yZGVyIiwiRW1haWxWZXJpZmljYXRpb25fdnVlXzEiLCJlbmNyeXB0aW9uXzEiLCJFbWFpbFZlcmlmaWNhdGlvbiIsInB1Ymxpc2hlckV4aXN0cyIsInRleHRhcmVhIiwicHVibGlzaGVyX25hbWUiLCJwdWJsaXNoZXJfaWQiLCJyZWdpc3RyYXRpb25fYWdlbmN5IiwicmVnaXN0cmF0aW9uX251bWJlciIsImlkZW50aWZpZXIiLCJwdWJsaXNoZXJfdHlwZSIsImxpY2Vuc2VfaWQiLCJpbWFnZV91cmwiLCJjb250YWN0X2VtYWlsIiwid2Vic2l0ZSIsImFkZHJlc3MiLCJzb3VyY2UiLCJyZWNvcmRfZXhjbHVzaW9ucyIsInVzZXJuYW1lIiwiZnVsbF9uYW1lIiwiaWF0aUVycm9yIiwicmVzaXplIiwiaGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiYWdlbmNpZXMiLCJyZWdpc3RyYXRpb25BZ2VuY3kiLCJ1bmNhdGVnb3JpemVkXzEiLCJzdGFydHNXaXRoIiwic29tZSIsImlzVGV4dEZpZWxkIiwiZmllbGRUeXBlIiwiZmllbGROYW1lIiwiY2hlY2tTdGVwIiwiZm9ybVN0ZXAiLCJwYXJzZUludCIsInJlZ2lzdGVyRm9ybSIsInJlZ2lzdGVyX2xhbmciLCJwdWJsaXNoZXJfaW5mb3JtYXRpb24iLCJpc19jb21wbGV0ZSIsImhvdmVyX3RleHQiLCJmaWVsZHMiLCJwbGFjZWhvbGRlciIsImhlbHBfdGV4dCIsIm9wdGlvbnMiLCJvcmdfcmVnaXN0cmF0aW9uX2FnZW5jeSIsImZvcl9lZyIsImlhdGlfb3JnX2lkZW50aWZpZXIiLCJwdWJsaXNoZXJUeXBlIiwiZGF0YV9saWNlbnNlIiwiZGF0YUxpY2Vuc2UiLCJwdWJsaXNoZXJfbG9nb191cmwiLCJvcmdhbmlzYXRpb25fZGVzYyIsImNvbnRhY3RfaW5mbyIsImNvbnRhY3QiLCJwdWJsaXNoaW5nX2FkZGl0aW9uYWxfaW5mbyIsImFkbWluaXN0cmF0b3JfaW5mb3JtYXRpb24iLCJpYXRpX3JlZ2lzdGVyX2Rlc2NyaXB0aW9uIiwiZnVsbG5hbWUiLCJlbWFpbF9hZGRyZXNzIiwiY29uZmlybSIsImNvbmZpcm1faGVscCIsImVtYWlsX3ZlcmlmaWNhdGlvbiIsInVwZGF0ZVZhbGlkYXRpb25FcnJvcnMiLCJlcnJvclJlc3BvbnNlIiwiY2xlYW5WYWxpZGF0aW9uRXJyb3JzIiwiZmllbGQiLCJ1cGRhdGVFcnJvcnMiLCJldmVyeSIsImNsZWFuSWF0aUVycm9ycyIsInZlcmlmeVB1Ymxpc2hlciIsInVwZGF0ZVN0ZXAiLCJ2ZXJpZnlDb250YWN0SW5mb3JtYXRpb24iLCJ2ZXJpZnlBZGRpdGlvbmFsSW5mb3JtYXRpb24iLCJnZXRDdXJyZW50U3RlcCIsImN1cnJlbnRfc3RlcCIsImdvVG9OZXh0Rm9ybSIsImdvVG9QcmV2aW91c0Zvcm0iLCJTaW1wbGVTcGFuX3Z1ZV8xIiwiU2ltcGxlU3BhbiIsInRyaWdnZXJNb2RlbCIsInNldEl0ZW0iLCJhZ2VuY3kiLCJwdWJsc2hlcl9uYW1lIiwib3JnYW5pemF0aW9uX3JlZ2lzdHJhdGlvbl9hZ2VuY3kiLCJvcmdhbml6YXRpb25fcmVnaXN0cmF0aW9uX25vIiwib3JnX3JlZ2lzdHJhdGlvbl9ubyIsImlhdGlfb3JnYW5pemF0aW9uYWxfaWRlbnRpZmllciIsInJlZ2lzdGVyX2Rlc2NyaXB0aW9uIiwiY29uZmlybV9wYXNzd29yZCIsImxvZ2luIiwiTmF2RHJvcGRvd25fdnVlXzEiLCJOYXZEcm9wZG93biIsImF1dGgiLCJyZW5kZXIiLCJfd2l0aFNjb3BlSWQiLCJwdXNoU2NvcGVJZCIsInBvcFNjb3BlSWQiLCJfaG9pc3RlZF8xIiwiX2hvaXN0ZWRfMiIsIl9ob2lzdGVkXzMiLCJjcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzYiLCJfaG9pc3RlZF83IiwiX2hvaXN0ZWRfOCIsIl9ob2lzdGVkXzkiLCJfaG9pc3RlZF8xMCIsIl9ob2lzdGVkXzExIiwiX2hvaXN0ZWRfMTIiLCJfaG9pc3RlZF8xMyIsIl9ob2lzdGVkXzE0IiwiX2hvaXN0ZWRfMTUiLCJfaG9pc3RlZF8xNiIsIl9ob2lzdGVkXzE3IiwiX2hvaXN0ZWRfMTgiLCJfaG9pc3RlZF8xOSIsIl9ob2lzdGVkXzIwIiwiX2hvaXN0ZWRfMjEiLCJfaG9pc3RlZF8yMiIsIl9ob2lzdGVkXzIzIiwiX2hvaXN0ZWRfMjQiLCJfaG9pc3RlZF8yNSIsIl9ob2lzdGVkXzI2IiwiX2hvaXN0ZWRfMjciLCJfaG9pc3RlZF8yOCIsIl9ob2lzdGVkXzI5IiwiX2hvaXN0ZWRfMzAiLCJfaG9pc3RlZF8zMSIsIl9ob2lzdGVkXzMyIiwiX2hvaXN0ZWRfMzMiLCJfaG9pc3RlZF8zNCIsIl9jdHgiLCJfY2FjaGUiLCIkcHJvcHMiLCIkc2V0dXAiLCIkZGF0YSIsIiRvcHRpb25zIiwiX2NvbXBvbmVudF9zdmdfdnVlIiwicmVzb2x2ZUNvbXBvbmVudCIsIm9wZW5CbG9jayIsImNyZWF0ZUVsZW1lbnRCbG9jayIsImNyZWF0ZUJsb2NrIiwiY3JlYXRlQ29tbWVudFZOb2RlIiwib25DbGljayIsImNyZWF0ZVZOb2RlIiwiRnJhZ21lbnQiLCJyZW5kZXJMaXN0Iiwibm9ybWFsaXplQ2xhc3MiLCJuYXZfX3BvaW50ZXIiLCJ0b0Rpc3BsYXlTdHJpbmciLCIkZXZlbnQiLCJhZGRfYWN0aXZpdHlfbWFudWFsbHkiLCJpbXBvcnRfYWN0aXZpdGllcyIsIndpdGhEaXJlY3RpdmVzIiwic2VhcmNoX2FjdGl2aXR5Iiwib25LZXl1cCIsIndpdGhLZXlzIiwidk1vZGVsVGV4dCIsInNlYXJjaF9vcmdhbmlzYXRpb24iLCJ5b3VyX3Byb2ZpbGUiLCJvbkNsb3NlIiwib25DbG9zZU1vZGFsIiwib25Ub2FzdCIsImJjIiwiZCIsImFjdGlvbiIsInRhYmluZGV4IiwiY29scyIsInJvd3MiLCJjcmVhdGVUZXh0Vk5vZGUiLCJjcmVhdGVTdGF0aWNWTm9kZSIsIl9ob2lzdGVkXzM1IiwiX2hvaXN0ZWRfMzYiLCJjb21tb29uX2xhbmciLCJzZWxlY3RfYV92YWx1ZSIsImdlbmVyYWwiLCJvYmplY3RpdmVzIiwidGFyZ2V0X2dyb3VwcyIsIm90aGVyIiwiYWRkX25hcnJhdGl2ZV9pbl9vdGhlcl9sYW5nIiwiYWRkX2FkZGl0aW9uYWxfZGVzY3JpcHRpb24iLCJhY2NvdW50X25vdF92ZXJpZmllZCIsImNvbXBsZXRlX3lvdXJfc2V0dXAiLCJwdWJsaXNoZXJfaXNfaW5hY3RpdmUiLCJhcyIsImVudGVyIiwibGVhdmUiLCJ3aXRoQ3R4IiwiYWNjb3VudF9ub3RfdmVyaWZpZWRfZGVzY3JpcHRpb24iLCJjb21wbGV0ZV95b3VyX3NldHVwX2Rlc2NyaXB0aW9uIiwidXBkYXRlX3JlZ2lzdHJ5X2luZm9ybWF0aW9uIiwiYXBpX2tleV9wdWJfaWQiLCJlbnRlcl9jb3JyZWN0X2FwaV90b2tlbiIsInVwZGF0ZV9kZWZhdWx0X3ZhbHVlcyIsInB1Ymxpc2hlcl9pc19ub3RfYWN0aXZlIiwiaWF0aV9zdGFuZGFyZF9yZWZlcmVuY2UiLCJpbm5lckhUTUwiLCJsZWFybl9tb3JlIiwiVGVsZXBvcnQiLCJ0byIsIlRyYW5zaXRpb24iLCJhcmdzIiwibm9ybWFsaXplU3R5bGUiLCJyZW5kZXJTbG90IiwiJHNsb3RzIiwiX2NvbXBvbmVudF9yYWRpYWxfcHJvZ3Jlc3NfYmFyIiwiZGlhbWV0ZXIiLCJwcmV2IiwibSIsImRlbGV0ZV9zb21ldGhpbmciLCJkZWxldGVfY29uZmlybWF0aW9uIiwiZ29fYmFjayIsIm9uUmVzZXQiLCJjb250aW51ZV9hbnl3YXkiLCJhZGRfc29tZXRoaW5nIiwicHVibGlzaF9hbnl3YXkiLCJmaXhfaXNzdWVzIiwidW5wdWJsaXNoIiwidW5wdWJsaXNoX2NvbmZpcm1hdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImRlbGV0ZV9yZXN1bHQiLCJkZWxldGVfaW5kaWNhdG9yIiwiZGVsZXRlX3BlcmlvZCIsImRlbGV0ZV90cmFuc2FjdGlvbiIsImRlbGV0ZV9jb25maW1fZGVmYXVsdCIsInJlbGF0ZWRfaW5kaWNhdG9yX3BlcmlvZF9kZWxldGVkIiwicmVsYXRlZF9wZXJpb2RfZGVsZXRlZCIsImRlbGV0ZV9jb25maXJtX2RlZmF1bHQiLCJtb2R1bGUiLCJfY29tcG9uZW50X0J0biIsIm9yZ2FuaXNhdGlvbiIsIl9jb21wb25lbnRfQnJlYWRjcnVtYiIsImlzc3Vlc19mb3VuZCIsImlzc3Vlc19mb3VuZF9pbl9pYXRpX3ZhbGlkYXRvciIsImhpZGUiLCJfaG9pc3RlZF8zNyIsIl9ob2lzdGVkXzM4IiwiX2NvbXBvbmVudF9Ib3ZlclRleHQiLCJhY3Rpdml0eV9kZWZhdWx0X2xhbmciLCJvdmVycmlkZV9kZWZhdWx0X3ZhbHVlcyIsImN1cnJlbmN5IiwiaG92ZXJfaGVhZGVyIiwibW9kZWxWYWx1ZSIsInNlYXJjaGFibGUiLCJyb2xlIiwiY2FuY2VsX2xhYmVsIiwic2F2ZV9kZWZhdWx0X3ZhbHVlc19sYWJlbCIsIl9ob2lzdGVkXzM5IiwiX2hvaXN0ZWRfNDAiLCJfaG9pc3RlZF80MSIsIl9ob2lzdGVkXzQyIiwiX2hvaXN0ZWRfNDMiLCJfaG9pc3RlZF80NCIsIl9ob2lzdGVkXzQ1IiwiX2hvaXN0ZWRfNDYiLCJfaG9pc3RlZF80NyIsIl9ob2lzdGVkXzQ4IiwiX2hvaXN0ZWRfNDkiLCJfaG9pc3RlZF81MCIsIl9ob2lzdGVkXzUxIiwiX2hvaXN0ZWRfNTIiLCJfaG9pc3RlZF81MyIsIl9ob2lzdGVkXzU0IiwiX2hvaXN0ZWRfNTUiLCJfaG9pc3RlZF81NiIsIl9ob2lzdGVkXzU3IiwiX2NvbXBvbmVudF9Ub2FzdCIsIl9jb21wb25lbnRfRXJyb3JQb3BVcCIsIl9jb21wb25lbnRfRGVsZXRlQnV0dG9uIiwiX2NvbXBvbmVudF9VblB1Ymxpc2giLCJfY29tcG9uZW50X1B1Ymxpc2giLCJfY29tcG9uZW50X0Vycm9ycyIsIl9jb21wb25lbnRfUHJldmlvdXNseVB1Ymxpc2hlZCIsIl9jb21wb25lbnRfUHJvZ3Jlc3NCYXIiLCJfY29tcG9uZW50X0VsZW1lbnRzIiwiX2NvbXBvbmVudF9BY3Rpdml0eUVsZW1lbnQiLCJfY29tcG9uZW50X1Jlc3VsdCIsIl9kaXJlY3RpdmVfc3RpY2t5X2NvbXBvbmVudCIsInJlc29sdmVEaXJlY3RpdmUiLCJfZGlyZWN0aXZlX3Ntb290aF9zY3JvbGwiLCJhY3Rpdml0eV9sYW5nIiwieW91cl9hY3Rpdml0aWVzX2xhYmVsIiwidW50aXRsZWQiLCJhY3Rpdml0eV9jb3VsZF9ub3RfYmVfcHVibGlzaGVkIiwib25DbG9zZVBvcHVwIiwidW5QdWJsaXNoZWQiLCJzaG93UHVibGlzaGVkIiwicHVibGlzaEVycm9ycyIsInB1Ymxpc2hpbmdfcHJvZ3Jlc3MiLCJjYW5ub3RfcHVibGlzaF9hY3Rpdml0eV91bnRpbF9tYW5kYXRvcnkiLCJjb21wbGV0ZV9hbGxfY29yZV9sYWJlbCIsImVhY2hfZWxlbWVudF9yZXByZXNlbnRzIiwiY29yZV9lbGVtZW50c19pbmNsdWRlIiwiYm91bmRhcnkiLCJ0aGVfaWF0aV9zdGFuZGFyZF9jb250YWluc193aWRlIiwidWNfb3ZlcnJpZGVfdGhpc19hY3Rpdml0eV9sYWJlbCIsImRpc2FibGVkIiwiaWNvbl9zaXplIiwiX2NvbXBvbmVudF9Mb2FkZXIiLCJfY29tcG9uZW50X1BhZ2VUaXRsZSIsIl9jb21wb25lbnRfRXJyb3JNZXNzYWdlIiwiX2NvbXBvbmVudF9FbXB0eUFjdGl2aXR5IiwiX2NvbXBvbmVudF9UYWJsZUxheW91dCIsIl9jb21wb25lbnRfUGFnaW5hdGlvbiIsIm9uU2hvd09ySGlkZSIsIm9uRmV0Y2hBY3Rpdml0aWVzIiwiX2NvbXBvbmVudF9NdWx0aXNlbGVjdCIsIl9jb21wb25lbnRfQnRuQ29tcG9uZW50IiwiX2NvbXBvbmVudF9Nb2RhbCIsImFkZF9hX3RpdHRsZV9hbmRfaWRlbnRpZmllcl9sYWJlbCIsImVsX2NvbW1vbl9sYW5nIiwiZWxlbWVudHNfbGFuZyIsImVycm9yX19pbnB1dCIsInR5cGVfbmFycmF0aXZlX2hlcmUiLCJhX2NvZGVfc3BlY2lmeWluZ190ZXh0X2xpbmtfNSIsInNlbGVjdF9sYW5ndWFnZSIsInlvdXJfZGVmYXVsdF9sYW5ndWFnZV9hc3N1bWVkX25vX3RoYXQiLCJpYXRpX2lkZW50aWZpZXIiLCJhY2l0aXZpdHlfaWRlbnRpZmllciIsInR5cGVfYWN0aXZpdHlfaWRlbnRpZmllcl9oZXJlIiwic2hvcnRlcl9oZWxwX3RleHQiLCJpYXRpX2lkZW50aWZpZXJfdGV4dCIsInRoaXNfaXNfYXV0b2dlbmVyYXRlZCIsImNhbmNlbCIsInNhdmUiLCJhY3Rpdml0aWVzX25vY2FzZSIsInJldHJ5IiwiYyIsInNob3dfbW9yZSIsInZNb2RlbENoZWNrYm94Iiwidmlld19lcnJvcnNfb3Jfd2FybmluZyIsInB1Ymxpc2hpbmdfYWxlcnQiLCJhY3Rpdml0aWVzX2FscmVhZHlfcHVibGlzaGVkX3dpbGxfbm90IiwiY2hhbmdlc19tYWRlX3RvX3B1Ymxpc2hlZF93aWxsX2JlX3JlcHVibGlzaGVkIiwiYWN0Iiwibm9fYWN0aXZpdGllc19mb3VuZCIsInJlZnJlc2giLCJjcml0aWNhbF9lcnJvcl9mb3VuZCIsImVycm9yc19hbmRfd2FybmluZ3NfZm91bmQiLCJub19lcnJvcnMiLCJhY3Rpdml0eURhdGUiLCJzb21ldGhpbmciLCJuYXR0YXRpdmUiLCJjb25kaXRpb25fYXR0YWNoZWQiLCJhdHRhY2hlZCIsIm5vIiwieWVzIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uX3R5cGUiLCJjb25kaXRpb25UeXBlIiwiY29uZGl0aW9uc19ub3RfYXR0YWNoZWQiLCJjb250YWN0VHlwZSIsInBlcnNvbl9uYW1lIiwiZGVwYXJ0bWVudCIsImpvYl90aXRsZSIsImVtYWlsX3ZhbHVlIiwidGVsZXBob25lIiwidGVsIiwidyIsIm1haWxpbmdfYWRkcmVzcyIsImFkZHJlc3NfaW5kZXgiLCJub3RfYXZhaWxhYmxlIiwiZGVzY3JpcHRpb25UeXBlIiwiaHVtYW5pdGFyaWFuU2NvcGVUeXBlIiwidm9jYWJ1bGFyeSIsImh1bWFuaXRhcmlhblNjb3BlVm9jYWJ1bGFyeSIsInZvY2FidWxhcnlfdXJpIiwibGVnYWN5X25hbWUiLCJpYXRpX2VxdWl2YWxlbnQiLCJsb2NhdGlvbl9yZWFjaCIsImdlb2dyYXBoaWNMb2NhdGlvblJlYWNoIiwiaiIsInJlZmVybmVjZSIsImxvY2F0aW9uX2lkIiwiZ2VvZ3JhcGhpY1ZvY2FidWxhcnkiLCJhY3Rpdml0eV9kZXNjcmlwdGlvbiIsImFkbWluaXN0cmF0aXZlIiwibGV2ZWwiLCJwb2ludCIsInNyc19uYW1lIiwicG9zIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJleGFjdG5lc3MiLCJnZW9ncmFwaGljRXhhY3RuZXNzIiwibG9jYXRpb25fY2xhc3MiLCJnZW9ncmFwaGljTG9jYXRpb25DbGFzcyIsImZlYXR1cmVfZGVzaWduYXRpb24iLCJwcm9wZXJfY2xhc3MiLCJsb2NhdGlvblR5cGUiLCJyZWZlcmVuY2VfdHlwZSIsIm90aGVySWRlbnRpZmllclR5cGUiLCJvd25lcl9vcmciLCJvd25lcl9vcmdhbmlzYXRpb25fcmVmZXJlbmNlIiwib3duZXJfb3JnYW5pc2F0aW9uX25hcnJhdGl2ZSIsInBhcnRpY2lwYXRpbmdfb3JnIiwib3JnYW5pemF0aW9uX3JvbGUiLCJvcmdhbmlzYXRpb25Sb2xlIiwibWlzc2luZ19sYW5nIiwib3JnYW5pc2F0aW9uX3JvbGUiLCJvcmdhbmlzYXRpb25fbmFtZSIsIm9yZ2FuaXNhdGlvbl90eXBlIiwib3JnYW5pemF0aW9uVHlwZSIsImNyc19jaGFubmVsX2NvZGUiLCJjcnNDaGFubmVsQ29kZSIsImJ1ZGdldFR5cGUiLCJwbGFubmVkX2Rpc2J1cnNlbWVudF90eXBlIiwidmFsdWVfYW1vdW50IiwiYW1vdW50IiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZV9kYXRlIiwicGVyaW9kX3N0YXJ0IiwicGVyaW9kX2VuZCIsInByb3ZpZGVyX29yZyIsInByb3ZpZGVyIiwib3JnIiwicHJvdmlkZXJfYWN0aXZpdHlfaWQiLCJyZWNlaXZlcl9vcmciLCJyZWNlaXZlciIsInJlY2VpdmVyX2FjdGl2aXR5X2lkIiwicG9saWN5X21hcmtlcl92b2NhYnVsYXJ5IiwicG9saWN5TWFya2VyVm9jYWJ1bGFyeSIsInBvbGljeV9tYXJrZXIiLCJwb2xpY3lNYXJrZXIiLCJwb2xpY3lfbWFya2VyX3RleHQiLCJzaWduaWZpY2FuY2UiLCJwb2xpY3lTaWduaWZpY2FuY2UiLCJjb3VudHJ5X2NvZGUiLCJwZXJjZW50YWdlIiwicmVnaW9uX3ZvY2FidWxhcnkiLCJyZWdpb25Wb2NhYnVsYXJ5IiwicmVnaW9uX2NvZGUiLCJyZWdpb24iLCJjdXN0b21fY29kZSIsInJlbGF0aW9uc2hpcF90eXBlIiwicmVsYXRlZEFjdGl2aXR5VHlwZSIsInJlcG9ydGluZ19vcmciLCJyZWZlcmVuY2VzIiwic2Vjb25kYXJ5X3JlcG9ydGVyIiwiX2NvbXBvbmVudF9Ob3RZZXQiLCJuZXdfcmVzdWx0Iiwic2hvd19zb21ldGhpbmciLCJmdWxsX3Jlc3VsdF9saXN0Iiwidmlld19zb21ldGhpbmciLCJlZGl0X3NvbWV0aGluZyIsInJlc3VsdF90eXBlIiwibm90X3lldF9hZGRlZF9wZXJpb2QiLCJub3RfeWV0X2FkZGVkX3BlcmlvZF9idG4iLCJuZXdfaW5kaWNhdG9yIiwiZnVsbF9pbmRpY2F0b3IiLCJiIiwicGVyaW9kcyIsImVkaXQiLCJidXR0b25zIiwic2hvd19mdWxsX3BlcmlvZCIsInNlY3Rvcl92b2NhYnVsYXJ5Iiwic2VjdG9yVm9jYWJ1bGFyeSIsInNlY3RvckNvZGUiLCJjYXRlZ29yeV9jb2RlIiwic2VjdG9yQ2F0ZWdvcnkiLCJzZGdfZ29hbCIsInNkZ0dvYWxzIiwic2RnX3RhcmdldCIsInNkZ1RhcmdldCIsImNvbW1vbl9sYW5ndWFnZSIsInRhZ192b2NhYnVsYXJ5IiwidGFnVm9jYWJ1bGFyeSIsInRhZ190ZXh0IiwiZ29hbHNfdGFnX2NvZGUiLCJ0YXJnZXRzX3RhZ19jb2RlIiwidHJhbnMiLCJ0cmFuc2FjdGlvblR5cGUiLCJ0cmFuc2FjdGlvbl90eXBlIiwidHJhbnNhY3Rpb25fdHlwZV9jb2RlIiwidmFsIiwiX2NvbXBvbmVudF9UaXRsZUVsZW1lbnQiLCJfY29tcG9uZW50X0FzY2VuZGluZyIsIl9jb21wb25lbnRfTWVhc3VyZSIsIl9jb21wb25lbnRfQWdncmVnYXRpb25TdGF0dXMiLCJfY29tcG9uZW50X0Rlc2NyaXB0aW9uIiwiX2NvbXBvbmVudF9SZWZlcmVuY2UiLCJfY29tcG9uZW50X0Jhc2VsaW5lIiwiX2NvbXBvbmVudF9QZXJpb2QiLCJfY29tcG9uZW50X0RvY3VtZW50TGluayIsImluZGljYXRvcl9kZXRhaWwiLCJyRGF0YSIsInJpIiwicGVyaW9kX25vY2FzZSIsImRvY3VtZW50X2xpbmsiLCJhc2NlbmRpbmciLCJtZWFzdXJlIiwiaW5kaWNhdG9yTWVhc3VyZSIsImFnZ3JlZ2F0aW9uX3N0YXR1cyIsInNjb3BlIiwiX2NvbXBvbmVudF9EZWxldGVBY3Rpb24iLCJpbmRpY2F0b3JfbGluayIsImJhc2UiLCJ5ZWFyIiwiZGltZW5zaW9uIiwiY29tbWVudCIsImNvbSIsImRlZnVhbHQiLCJuYSIsImNhdGVnb3J5IiwiY2F0IiwiZG9jdW1lbnRDYXRlZ29yeSIsImRvY3VtZW50X2RhdGUiLCJpbmRpY2F0b3JWb2NhYnVsYXJ5IiwiaW5kaWNhdG9yX3VyaSIsImFsbF9lbGVtZW50cyIsInZTaG93IiwiX2hvaXN0ZWRfNTgiLCJfaG9pc3RlZF81OSIsIl9ob2lzdGVkXzYwIiwiX2hvaXN0ZWRfNjEiLCJfaG9pc3RlZF82MiIsIl9ob2lzdGVkXzYzIiwiX2hvaXN0ZWRfNjQiLCJfaG9pc3RlZF82NSIsIl9ob2lzdGVkXzY2IiwiX2hvaXN0ZWRfNjciLCJfaG9pc3RlZF82OCIsIl9ob2lzdGVkXzY5IiwiX2hvaXN0ZWRfNzAiLCJfaG9pc3RlZF83MSIsIl9ob2lzdGVkXzcyIiwiX2hvaXN0ZWRfNzMiLCJfaG9pc3RlZF83NCIsIl9ob2lzdGVkXzc1IiwiX2hvaXN0ZWRfNzYiLCJfaG9pc3RlZF83NyIsIl9ob2lzdGVkXzc4IiwiX2hvaXN0ZWRfNzkiLCJfaG9pc3RlZF84MCIsIl9ob2lzdGVkXzgxIiwiX2hvaXN0ZWRfODIiLCJfaG9pc3RlZF84MyIsIl9ob2lzdGVkXzg0IiwiX2hvaXN0ZWRfODUiLCJfaG9pc3RlZF84NiIsIl9ob2lzdGVkXzg3IiwiX2hvaXN0ZWRfODgiLCJfaG9pc3RlZF84OSIsIl9ob2lzdGVkXzkwIiwiX2hvaXN0ZWRfOTEiLCJfaG9pc3RlZF85MiIsIl9ob2lzdGVkXzkzIiwiX2hvaXN0ZWRfOTQiLCJmdWxsX3RyYW5zYWN0aW9uIiwiZGVmYXVsdF9haWRfdHlwZV92b2NhYnVsYXJ5IiwiYWlkVHlwZVZvY2FidWxhcnkiLCJlYXJtYXJraW5nX2NhdGVnb3J5IiwiZWFybWFya2luZ0NhdGVnb3J5IiwiZWFybWFya2luZ19tb2RhbGl0eSIsImVhcm1hcmtpbmdNb2RhbGl0eSIsImNhc2hfYW5kX3ZvdWNoZXJfbW9kYWxpdGllcyIsImNhc2hhbmRWb3VjaGVyTW9kYWxpdGllcyIsImRlZmF1bHRfYWlkX3R5cGUiLCJhaWRUeXBlIiwiY291bnRyeV9idWRnZXRfdm9jYWJ1bGFyeSIsImJ1ZGdldElkZW50aWZpZXJWb2NhYnVsYXJ5IiwiYnVkZ2V0X2l0ZW0iLCJidWRnZXRJZGVudGlmaWVyIiwiYnVkZ2V0X3R5cGUiLCJidWRnZXRfdmFsdWUiLCJidWRnZXRfc3RhdHVzIiwiYnVkZ2V0U3RhdHVzIiwiYWN0aXZpdHlTdGF0dXMiLCJhY3Rpdml0eVNjb3BlIiwiY29sbGFib3JhdGlvblR5cGUiLCJmbG93VHlwZSIsInRpZWRTdGF0dXMiLCJmaW5hbmNlVHlwZSIsIm5vX2NvbnRlbnQiLCJfY29tcG9uZW50X0NyZWF0ZU1vZGFsIiwiYWRkX2FjdGl2aXR5IiwiZG93bmxvYWRfYWxsIiwiZG93bmxvYWRfc29tZXRoaW5nIiwiY3N2IiwieG1sIiwiZG93bmxvYWRfeG1sX2NvbmZpcm1hdGlvbiIsImVycm9yX21lc3NhZ2UiLCJhbnl3YXkiLCJub3RlIiwiY29yZV9lbGVtZW50cyIsIm1hbmRhdG9yeV9zdWJfZWxlbWVudHMiLCJyZWNvbW1lbmRlZF9zdWJfZWxlbWVudHMiLCJfY29tcG9uZW50X0FjdGl2aXR5QnV0dG9uIiwibm9fYWN0aXZpdHlfaGFzX2JlZW5fYWRkZWRfbGFiZWwiLCJjbGlja19vbl9idXR0b25fdG9fYWRkX25ld19sYWJlbCIsIndoYXRfaXNfYWN0aXZpdHkiLCJvbmUiLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwic3Ryb2tlIiwiY29sc3BhbiIsImFjdGl2aXR5X3RpdGxlIiwidXBkYXRlZF9vbiIsInRvdGFsIiwidXBkYXRlZF9hdCIsInN0YXR1c19sYWJlbHMiLCJzZWxlY3QiLCJhY3Rpdml0aWVzX25vdF9mb3VuZCIsIl9jb21wb25lbnRfVGFyZ2V0VmFsdWUiLCJfY29tcG9uZW50X0FjdHVhbFZhbHVlIiwicGVyaW9kX2RldGFpbCIsImFjdHVhbCIsIndpZGVsZXRoIiwic3RhcnRfZGF0ZSIsImVuZF9kYXRlIiwicGUiLCJ0VmFsdWUiLCJhY3R1YWxfdmFsdWUiLCJ1cHBlcl9jYXNlIiwibG9jYXRpb25fcmVmZXJlbmNlIiwiZGltIiwidGFyZ2V0X3ZhbHVlIiwiX2NvbXBvbmVudF9SZXN1bHRFbGVtZW50IiwiX2NvbXBvbmVudF9JbmRpY2F0b3IiLCJyZXN1bHRfZGV0YWlsIiwiaW5kaWNhdG9yX25vY2FzZSIsImFkZF9pbmRpY2F0b3Jfbm9jYXNlIiwibm90X3lldF9hZGRlZF9pbmRpY2F0b3IiLCJfY29tcG9uZW50X1RpdGxlRGVzY3JpcHRpb24iLCJfY29tcG9uZW50X1Jlc3VsdFR5cGUiLCJ0cmFuc2xhdGlvbmxhbmd1YWdlIiwiaW5kaWNhdG9yX3RpdGxlIiwibGFudWdhZ2UiLCJkb2N1bWVudHMiLCJsb2MiLCJsIiwidGFyIiwiX2NvbXBvbmVudF9UcmFuc2FjdGlvbkVsZW1lbnQiLCJ0cmFuc2FjdGlvbl9kZXRhaWwiLCJfY29tcG9uZW50X0FpZFR5cGUiLCJfY29tcG9uZW50X1RyYW5zYWN0aW9uVHlwZSIsIl9jb21wb25lbnRfVHJhbnNhY3Rpb25EYXRlIiwiX2NvbXBvbmVudF9WYWx1ZSIsIl9jb21wb25lbnRfUHJvdmlkZXJPcmdhbml6YXRpb24iLCJfY29tcG9uZW50X1JlY2VpdmVyT3JnYW5pemF0aW9uIiwiX2NvbXBvbmVudF9EaXNidXJzZW1lbnRDaGFubmVsIiwiX2NvbXBvbmVudF9TZWN0b3IiLCJfY29tcG9uZW50X1JlY2lwaWVudENvdW50cnkiLCJfY29tcG9uZW50X1JlY2lwaWVudFJlZ2lvbiIsIl9jb21wb25lbnRfRmxvd1R5cGUiLCJfY29tcG9uZW50X0ZpbmFuY2VUeXBlIiwiX2NvbXBvbmVudF9UaWVkU3RhdHVzIiwiaW50ZXJuYWwiLCJ0cmFuc2FjdGlvbl9kYXRlIiwiY2xhcyIsImF0IiwiYWlkX3R5cGVfdm9jYWJ1bGFyeSIsImFpZF90eXBlX2NvZGUiLCJjYXNoQW5kVm91Y2hlck1vZGFsaXRpZXMiLCJlYXJNYXJraW5nQ2F0ZWdvcnkiLCJlYXJNYXJraW5nTW9kYWxpdHkiLCJkaXNidXJzZW1lbnRfY2hhbm5lbF9jb2RlIiwiZGlzYnVyc2VtZW50Q2hhbm5lbCIsImZpbmFuY2VfdHlwZSIsImZsb3dfdHlwZSIsIm9yZ2FuaXNlcl9pZGVudGlmaWVyX2NvZGUiLCJvcmdhbml6YXRpb25faWRlbnRpZmllcl9jb2RlIiwicG8iLCJjb3UiLCJjb3VudHJ5Q29kZSIsInNkIiwicmVnaW9uQ29kZSIsInNlYyIsInVuc2RnR29hbHMiLCJ1bnNkZ1RhcmdldHMiLCJ0aWVkX3N0YXR1c19jb2RlIiwidGllZFN0YXR1c1R5cGUiLCJ0aWVkX3N0YXR1cyIsImltcG9ydF9hY3Rpdml0eSIsInVwbG9hZF9maWxlIiwiZG93bmxvYWRfY3N2X3RlbXBsYXRlIiwiZG93bmxvYWRfY3N2X3RlbXBsYXRlX2Rlc2NyaXB0aW9uIiwiaW1wb3J0X2FjdGl2aXkiLCJhY3Rpdml0aWVzX3dpdGhfZXJyb3IiLCJvblNlbGVjdEVsZW1lbnQiLCJlcnJvcnNfbm9jYXNlIiwiZWxlX2VyciIsImV4aXN0aW5nIiwiX2NvbXBvbmVudF9QdWJsaXNoVW5wdWJsaXNoIiwiX2NvbXBvbmVudF9SYWRpYWxQcm9ncmVzc0JhciIsIl9jb21wb25lbnRfT3JnYW5pc2F0aW9uRWxlbWVudHMiLCJfY29tcG9uZW50X09yZ2FuaXNhdGlvbkVsZW1lbnRzRGV0YWlsIiwib3JnX2xhbmciLCJ5b3VyX29yZyIsIm9yZ19jb3VsZF9ub3RfYmVfcHVibGlzaGVkIiwiZmlsbF9tYW5kYXRvcnlfZmllbGRzIiwicmVjaXBpZW50X2NvdW50cnkiLCJyZWNpcGllbnRfY291bnRyeV9idWRnZXQiLCJidWRnZXRfbGluZSIsImJ1ZGdldF9hbW91bnQiLCJyZWNpcGllbnRfb3JnX2J1ZGdldCIsInJlY2lwaWVudF9vcmciLCJyZWNpcGllbnRfb3JnX2luZGV4IiwibmFycmF0aXZlX2luZGV4IiwiYnVkZ2V0IiwicmVjaXBpZW50X3JlZ2lvbl9idWRnZXQiLCJyZWNpcGllbnRfcmVnaW9uIiwidG90YWxfYnVkZ2V0IiwidG90YWxfYnVkZ2V0X3N0YXR1cyIsImJ1ZGdldF9sYW5nIiwidG90YWxfZXhwZW5kaXR1cmUiLCJleHBlbmRpdHVyZV9hbW91bnQiLCJleHBlbnNlX2xpbmUiLCJwYXNzd29yZF9yZWNvdmVyeSIsInBhc3N3b3JkX3JlY292ZXJ5X2hlYWRlciIsInBhc3N3b3JkX3JlY292ZXJ5X2Rlc2NyaXB0aW9uIiwiZW1haWxfbGFiZWwiLCJlbWFpbF9wbGFjZWhvbGRlciIsInNlbmRfcGFzc3dvcmRfcmVzZXQiLCJyZXNldF9wYXNzd29yZCIsImVudGVyX25ld19wYXNzd29yZCIsIm5ld19wYXNzd29yZCIsImVudGVyX25ld19wYXNzd29yZF9wbGFjZWhvbGRlciIsInJlcGVhdF9wYXNzd29yZCIsInJlZW50ZXJfcGFzc3dvcmRfcGxhY2Vob2xkZXIiLCJzZXR0aW5nc19sYW5nIiwiZGVmYXVsdF9mb3JfYWxsX2RhdGFfbGFiZWwiLCJkZWZhdWx0X2Zvcl9hY3Rpdml0eV9sYWJlbCIsImRlZmF1bHRfaGllcmFyY2h5Iiwib25JbnB1dCIsIl9jb21wb25lbnRfU2V0dGluZ1B1Ymxpc2hpbmdGb3JtIiwiX2NvbXBvbmVudF9TZXR0aW5nRGVmYXVsdEZvcm0iLCJzZXR0aW5nc19sYWJlbCIsImFjdGl2ZV9fdGFiIiwicHVibGlzaGluZ19zZXR0aW5nc19sYWJlbCIsImRlZmF1bHRfdmFsdWVzX2xhYmVsIiwib25TdWJtaXRQdWJsaXNoaW5nIiwic2F2ZV9wdWJsaXNoaW5nX3NldHRpbmdzIiwic2F2ZV9kZWZhdWx0X3ZhbHVlcyIsInJlZ2lzdHJ5X2luZm9ybWF0aW9uIiwiaXNWZXJpZmljYXRpb25SZXF1ZXN0ZWQiLCJ0YWdfX2NvcnJlY3QiLCJ0YWdfX2luY29ycmVjdCIsImNvcnJlY3RfbGFiZWwiLCJpbmNvcnJlY3RfbGFiZWwiLCJ1Y192ZXJpZnkiLCJsb2dnZWRfaW5fYXMiLCJzd2l0Y2hfYmFjayIsInVwZGF0ZV9vbiIsImZldGNoaW5nX2RhdGEiLCJhbGxfYWN0aXZpdGllc19jb3VudCIsInByb3h5IiwidmVyaWZ5X3lvdXJfYWNjb3VudCIsImNsaWNrX2FuZF9hY3RpdmF0ZSIsImdldF9zdGFydGVkIiwiX2NvbXBvbmVudF9FbWFpbFZlcmlmaWNhdGlvbiIsImNyZWF0ZV9pYXRpX3B1Ymxpc2hlcl9oZWFkZXIiLCJjcmVhdGVfaWF0aV9wdWJsaXNoZXJfc3ViaGVhZGVyIiwiZXJyb3Jfa2V5IiwiZm9ybV9faW5wdXQiLCJ2TW9kZWxEeW5hbWljIiwicmVmX2ZvciIsIm9uRm9jdXMiLCJ3aXRoTW9kaWZpZXJzIiwidnVlX19zZWxlY3QiLCJhbHJlYWR5X2hhdmVfYWNjb3VudCIsInNpZ25faW4iLCJuZXh0X3N0ZXAiLCJyZWwiLCJpYXRpX3N0YW5kYXJkIiwiaWF0aV9zdGFuZGFyZF9kZXNjcmlwdGlvbiIsIm9yZ2FuaXNhdGlvbl9kYXRhX2hlYWRlciIsIm9yZ2FuaXNhdGlvbl9kYXRhX2Rlc2NyaXB0aW9uIiwibGlzdF9pdGVtcyIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJhY3Rpdml0eV9kYXRhX2hlYWRlciIsImFjdGl2aXR5X2RhdGFfZGVzY3JpcHRpb24iLCJzaXgiLCJzZXZlbiIsInB1Ymxpc2hpbmdfZGF0YV9laXRoZXJfaGVhZGVyIiwicHVibGlzaGluZ19kYXRhX2VpdGhlcl9kZXNjcmlwdGlvbiIsImRvd25sb2FkX3BkZl9oZWFkZXIiLCJkb3dubG9hZF9wZGZfZGVzY3JpcHRpb24iLCJpYXRpX3N0YW5kYXJkX3JlZmVyZW5jZV9oZWFkZXIiLCJpYXRpX3N0YW5kYXJkX3JlZmVyZW5jZV9kZXNjcmlwdGlvbiIsIl9jb21wb25lbnRfU2ltcGxlU3BhbiIsInB1Ymxpc2hpbmdfY2hlY2tsaXN0Iiwib3JnYW5pc2F0aW9uc191c2luZ19pYXRpX2xhYmVsIiwicmVnaXN0ZXJfYV9wdWJsaXNoZXJfaGVhZGVyIiwicmVnaXN0ZXJfYV9wdWJsaXNoZXJfZGVzY3JpcHRpb24iLCJwdWJsaXNoX3lvdXJfb3JnYW5pc2F0aW9uX2hlYWRlciIsInB1Ymxpc2hfeW91cl9vcmdhbmlzYXRpb25fZGVzY3JpcHRpb24iLCJwdWJsaXNoX3lvdXJfYWN0aXZpdHlfaGVhZGVyIiwicHVibGlzaF95b3VyX2FjdGl2aXR5X2Rlc2NyaXB0aW9uIiwidW5kZXJzdGFuZF9mdXJ0aGVyX2RhdGFfaGVhZGVyIiwidW5kZXJzdGFuZF9mdXJ0aGVyX2RhdGFfZGVzY3JpcHRpb24iLCJydW5fYXV0b21hdGljX2NoZWNrc19oZWFkZXIiLCJydW5fYXV0b21hdGljX2NoZWNrc19kZXNjcmlwdGlvbiIsInB1Ymxpc2hfeW91cl9kYXRhX2hlYWRlciIsInB1Ymxpc2hfeW91cl9kYXRhX2Rlc2NyaXB0aW9uIiwiYWNjZXNzX3lvdXJfZGF0YV9oZWFkZXIiLCJhY2Nlc3NfeW91cl9kYXRhX2Rlc2NyaXB0aW9uIiwidXBkYXRlX2FuZF9pbXByb3ZlX2hlYWRlciIsInVwZGF0ZV9hbmRfaW1wcm92ZV9kZXNjcmlwdGlvbiIsInVwZGF0ZV9hbmRfaW1wb3J2ZV9kZXNjcmlwdGlvbiIsImluZm9ybWF0aW9uX2RvZXNudF9tYXRjaF9yZWdpc3RyeSIsImlmX3lvdV9hcmVfYWNjb3VudF9ob2xkZXIiLCJpYXRpX3JlZ2lzdHJ5IiwibWFrZV9zdXJlX3lvdXIiLCJvcmdhbmlzYXRpb25faWQiLCJtYXRjaF95b3VyX2lhdGlfcmVnaXN0cnlfaW5mbyIsImZvcl9tb3JlX2RldGFpbHMiLCJvdXRfb2YiLCJ3ZWJfbGFuZyIsInN1cHBvcnQiLCJzdXBwb3J0X2Rlc2NyaXB0aW9uIiwiaWF0aV9wdWJsaXNoZXIiLCJmb290ZXIiLCJkYXNoYm9hcmQiLCJhYm91dCIsInBhcnRfb2ZfaWF0aV91bmlmaWVkX2xhYmVsIiwiY29kZV9saWNlbnNlZF91bmRlcl9sYWJlbCIsImRvY3VtZW50YXRpb25fbGljZW5zZWRfdW5kZXJfbGFiZWwiLCJhbnlfcXVlc3Rpb25zX2NvbnRhY3RfbGFiZWwiLCJjb3B5cmlnaHRfbGFiZWwiLCJqb2luX25vdyIsImhvbWUiLCJqb2luX25vd19zZWN0aW9uIiwidG9fYmVnaW5fdGV4dCIsIm5ld190b19pYXRpX2xhYmVsIiwibmV3X3RvX2lhdGlfdGV4dCIsIm15X29yZ2FuaXNhdGlvbl9oYXNfcmVnaXN0ZXJlZF9sYWJlbCIsIm15X29yZ2FuaXNhdGlvbl9oYXNfcmVnaXN0ZXJlZF90ZXh0Iiwibm90X3N1cmVfd2hpY2hfb25lX2xhYmVsIiwiY29udGFjdF9zdXBwb3J0X2xhYmVsIiwic2lnbl9pbl9zZWN0aW9uIiwid2VsY29tZV9iYWNrX2xhYmVsIiwidXNlcm5hbWVfbGFiZWwiLCJlcnJvcl9pbnB1dCIsInBhc3N3b3JkX2xhYmVsIiwicGFzc3dvcmRfcGxhY2Vob2xkZXIiLCJmb3Jnb3RfcGFzc3dvcmRfbGFiZWwiLCJfY29tcG9uZW50X05hdkRyb3Bkb3duIiwiYWJvdXRfaG92ZXJfdGV4dCIsInB1Ymxpc2hpbmdfY2hlY2tsaXN0X2hvdmVyX3RleHQiLCJyZWFkX21vcmUiLCJpYXRpX3N0YW5kYXJkX2hvdmVyX3RleHQiLCJzZWVfYWxsX2RhdGFfZmllbGRzIiwic3VwcG9ydF9ob3Zlcl90ZXh0IiwiZ29fdG9fZGFzaGJvYXJkIiwidnVlM19zbW9vdGhfc2Nyb2xsXzEiLCJzdmdfdnVlM18xIiwiV2ViSGVhZGVyX3Z1ZV8xIiwiV2ViRm9vdGVyX3Z1ZV8xIiwiQWRtaW5Gb290ZXJfdnVlXzEiLCJXZWxjb21lUGFnZV92dWVfMSIsIlJlZ2lzdGVyUGFnZV92dWVfMSIsIkFib3V0UGFnZV92dWVfMSIsIlN1cHBvcnRQYWdlX3Z1ZV8xIiwiSWF0aVN0YW5kYXJkX3Z1ZV8xIiwiUHVibGlzaGluZ0NoZWNrbGlzdF92dWVfMSIsIklhdGlSZWdpc3RlclBhZ2VfdnVlXzEiLCJSZXN1bHREZXRhaWxfdnVlXzEiLCJSZXN1bHRMaXN0X3Z1ZV8xIiwiSW5kaWNhdG9yRGV0YWlsX3Z1ZV8xIiwiSW5kaWNhdG9yTGlzdF92dWVfMSIsIlBlcmlvZHNEZXRhaWxfdnVlXzEiLCJQZXJpb2RzTGlzdF92dWVfMSIsIlRyYW5zYWN0aW9uTGlzdF92dWVfMSIsIlRyYW5zYWN0aW9uRGV0YWlsX3Z1ZV8xIiwiRGVzY3JpcHRpb25Gb3JtX3Z1ZV8xIiwiRWxlbWVudHNOb3RlX3Z1ZV8xIiwiQWN0aXZpdHlJbmRleF92dWVfMSIsIkFkbWluSGVhZGVyX3Z1ZV8xIiwiQWN0aXZpdHlEZXRhaWxfdnVlXzEiLCJTaWRlYmFySGVscEJsb2NrX3Z1ZV8xIiwiQWN0aXZpdHlVcGxvYWRfdnVlXzEiLCJJbXBvcnRMaXN0X3Z1ZV8xIiwiU2V0dGluZ1BhZ2VfdnVlXzEiLCJBY3Rpdml0eURlZmF1bHRWYWx1ZV92dWVfMSIsIlJlc2V0UGFnZV92dWVfMSIsIlBhc3N3b3JkUmVjb3ZlcnlfdnVlXzEiLCJSZXNldFBhc3N3b3JkX3Z1ZV8xIiwiT3JnYW5pc2F0aW9uRGF0YV92dWVfMSIsIk9yZ2FuaXNhdGlvbkxpc3RfdnVlXzEiLCJBZG1pbkJhcl92dWVfMSIsImFwcCIsImNyZWF0ZUFwcCIsImNvbXBvbmVudCIsInVzZSIsImxhc3RTY3JvbGxUb3AiLCJhZmZpeFR5cGUiLCJzdGlja3lTaWRlYmFyIiwiZWwiLCJwYXJlbnRXcmFwcGVyIiwic3RpY2t5RWxlbWVudCIsImZpcnN0Q2hpbGQiLCJvZmZzZXRIZWlnaHQiLCJzdGlja3lDdXJyZW50VG9wIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwic3RpY2t5Q3VycmVudEJvdHRvbSIsImJvdHRvbSIsImVsV2lkdGgiLCJvZmZzZXRXaWR0aCIsImVsU2Nyb2xsTGVmdCIsImxlZnQiLCJlbFNjcm9sbFRvcCIsImVsU2Nyb2xsQm90dG9tIiwidmlld3BvcnRIZWlnaHQiLCJpbm5lckhlaWdodCIsImN1cnJlbnRXaW5kb3dzU2Nyb2xsUG9zaXRpb24iLCJwYWdlWU9mZnNldCIsInRhcmdldFNjcm9sbFBvc2l0aW9uIiwiZWxQYXJlbnQiLCJlbFBhcmVudEJvdHRvbSIsImlzU2Nyb2xsRG93biIsImlzU2Nyb2xsVXAiLCJoYW5kbGVTY3JvbGxEb3duIiwiaGFuZGxlU2Nyb2xsVXAiLCJmaXhTaWRlYmFyIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZWN0IiwiY2xpZW50V2lkdGgiLCJkaXJlY3RpdmUiLCJtb3VudGVkIiwiYmluZGluZyIsInVubW91bnRlZCIsInBhcmVudCIsIm1vdW50IiwiZm9ybWF0X2RhdGUiLCJkYXRhXzEiLCJ2dWV4XzEiLCJtdXRhdGlvbnMiLCJtdXRhdGVTZWxlY3RlZEFjdGl2aXRpZXMiLCJwYXlsb2FkIiwiYWN0aW9ucyIsImNvbW1pdCIsImFjdGl2aXR5TGlzdFN0b3JlIiwiY3JlYXRlU3RvcmUiLCJtdXRhdGVVblB1Ymxpc2hlZCIsIm11dGF0ZVNob3dQdWJsaXNoZWQiLCJtdXRhdGVQdWJsaXNoRXJyb3JzIiwidXBkYXRlVW5QdWJsaXNoZWQiLCJ1cGRhdGVTaG93UHVibGlzaGVkIiwidXBkYXRlUHVibGlzaEVycm9ycyIsImFjdGl2aXR5RGV0YWlsU3RvcmUiLCJzdGF0ZV8xIiwibXV0YXRpb25fMSIsIk11dGF0aW9uVHlwZXMiLCJVUERBVEVfUFVCTElTSEVSX0lORk8iLCJVUERBVEVfUFVCTElTSElOR19FUlJPUiIsIlVQREFURV9ERUZBVUxUX0VSUk9SIiwiUmVzdWx0X3Z1ZV8xIiwiSWF0aUlkZW50aWZpZXJfdnVlXzEiLCJPdGhlcklkZW50aWZpZXJfdnVlXzEiLCJUaXRsZV92dWVfMSIsIkRlc2NyaXB0aW9uX3Z1ZV8xIiwiQWN0aXZpdHlEYXRlX3Z1ZV8xIiwiQ29udGFjdEluZm9fdnVlXzEiLCJQYXJ0aWNpcGF0aW5nT3JnX3Z1ZV8xIiwiUmVjaXBpZW50Q291bnRyeV92dWVfMSIsIlJlY2lwaWVudFJlZ2lvbl92dWVfMSIsIlRyYW5zYWN0aW9uc192dWVfMSIsIkxvY2F0aW9uX3Z1ZV8xIiwiU2VjdG9yX3Z1ZV8xIiwiTGVnYWN5RGF0YV92dWVfMSIsIkNvbmRpdGlvbnNfdnVlXzEiLCJSZWxhdGVkQWN0aXZpdHlfdnVlXzEiLCJQb2xpY3lNYXJrZXJfdnVlXzEiLCJUYWdfdnVlXzEiLCJIdW1hbml0YXJpYW5TY29wZV92dWVfMSIsIlBsYW5uZWREaXNidXJzZW1lbnRfdnVlXzEiLCJSZXBvcnRpbmdPcmdhbml6YXRpb25fdnVlXzEiLCJNZWFzdXJlX3Z1ZV8xIiwiSW5kaWNhdG9yQXNjZW5kaW5nX3Z1ZV8xIiwiQWdncmVnYXRpb25TdGF0dXNfdnVlXzEiLCJSZWZlcmVuY2VfdnVlXzEiLCJEb2N1bWVudExpbmtfdnVlXzEiLCJCYXNlbGluZV92dWVfMSIsIlBlcmlvZF92dWVfMSIsIlRhcmdldFZhbHVlX3Z1ZV8xIiwiQWN0dWFsVmFsdWVfdnVlXzEiLCJUaXRsZURlc2NyaXB0aW9uX3Z1ZV8xIiwiUmVzdWx0VHlwZV92dWVfMSIsIkFpZFR5cGVfdnVlXzEiLCJUcmFuc2FjdGlvblR5cGVfdnVlXzEiLCJUcmFuc2FjdGlvbkRhdGVfdnVlXzEiLCJWYWx1ZV92dWVfMSIsIlByb3ZpZGVyT3JnYW5pemF0aW9uX3Z1ZV8xIiwiUmVjZWl2ZXJPcmdhbml6YXRpb25fdnVlXzEiLCJEaXNidXJzZW1lbnRDaGFubmVsX3Z1ZV8xIiwiRmxvd1R5cGVfdnVlXzEiLCJGaW5hbmNlVHlwZV92dWVfMSIsIlRpZWRTdGF0dXNfdnVlXzEiLCJSZXBvcnRpbmdPcmdhbmlzYXRpb25fdnVlXzEiLCJUb3RhbEJ1ZGdldF92dWVfMSIsIlJlcG9ydGluZ09yZ0J1ZGdldF92dWVfMSIsIlJlcG9ydGluZ1JlZ2lvbkJ1ZGdldF92dWVfMSIsIlJlY2lwaWVudENvdW50cnlCdWRnZXRfdnVlXzEiLCJUb3RhbEV4cGVuZGl0dXJlX3Z1ZV8xIiwiU2lnbkluIiwiSm9pbk5vdyIsInBhZ2VDb250ZW50IiwidG9nZ2xlUGFnZSIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX3RvRGlzcGxheVN0cmluZyIsInlvdXJfZW1haWxfaGFzX2JlZW5fc2VudF93aXRoX2xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwid2hhdF9pc19pYXRpX3B1Ymxpc2hlcl9oZWFkZXIiLCJ3aGF0X2lzX2lhdGlfcHVibGlzaGVyX2Rlc2NyaXB0aW9uIiwidXNlX2lhdGlfcHVibGlzaGVyX3RvX2hlYWRlciIsInVzZV9pYXRpX3B1Ymxpc2hlcl90b19kZXNjcmlwdGlvbiIsImRldmVsb3BtZW50X29mX2lhdGlfaGVhZGVyIiwiZGV2ZWxvcG1lbnRfb2ZfaWF0aV9kZXNjcmlwdGlvbiIsImlhdGlfcHVibGlzaGluZ190b29sX2hlYWRlciIsImlhdGlfcHVibGlzaGluZ190b29sX3NlY3Rpb24iLCJ3ZWxjb21lX3RleHQiLCJoYXZlbnRfcmVnaXN0ZXJlZF9sYWJlbCIsImFscmVhZHlfaGF2ZV9hY2NvdW50X2xhYmVsIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9TaWduSW4iLCJfY29tcG9uZW50X0pvaW5Ob3ciXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/public/js/vendor.js b/public/js/vendor.js index eb7b12fdbd..c1a31fe372 100644 --- a/public/js/vendor.js +++ b/public/js/vendor.js @@ -83386,4 +83386,4 @@ exports.install = function(){} /***/ }) }]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxRUFBcUUsc0RBQVM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw2Q0FBSTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixLQUFxQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0RBQU87QUFDbkIsNEJBQTRCLGlCQUFpQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsb0RBQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQU07QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxLQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEtBQXFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsUUFBUTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxLQUFxQyx1QkFBdUIsQ0FBRTtBQUN0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsb0RBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsMEJBQTBCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsdUJBQXVCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx1QkFBdUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwwQkFBMEI7QUFDdEQ7QUFDQSxvQkFBb0IscURBQVEsV0FBVyxxREFBUTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsSUFBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMscURBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsYUFBYTtBQUM3Qix3QkFBd0IsdUJBQXVCO0FBQy9DLG9CQUFvQixhQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxtSUFBbUksOENBQThDLDZDQUFJLG9CQUFvQiw2Q0FBSSx5SEFBeUgsa0RBQVMsZ0dBQWdHO0FBQ3ZkO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1REFBVSxDQUFDLHFEQUFVO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHVCQUF1QixvQ0FBb0M7QUFDM0QsU0FBUztBQUNUO0FBQ0E7QUFDQSxpQkFBaUIsSUFBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLGlCQUFpQixLQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsS0FBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGdDQUFnQztBQUNoQztBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLGdCQUFnQixxREFBUTtBQUN4QjtBQUNBO0FBQ0Esa0VBQWtFLHNCQUFzQjtBQUN4RjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwyREFBbUQ7QUFDL0U7QUFDQTtBQUNBLGFBQWEsS0FBcUM7QUFDbEQ7QUFDQTtBQUNBLGtDQUFrQyw2REFBdUQsQ0FBQztBQUMxRjtBQUNBLDhHQUE4RyxLQUFxQyxXQUFXLGVBQWUsTUFBTSxDQUFFO0FBQ3JMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVkscURBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBLG9CQUFvQiwyQkFBMkI7QUFDL0M7QUFDQTtBQUNBLGdCQUFnQixvREFBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwwQkFBMEI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFEQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtCQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QixpQkFBaUIsS0FBSyxpQkFBaUI7QUFDckUscUNBQXFDLG9TQUFvUztBQUN6VTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUMsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5RUFBeUU7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixhQUFhLEdBQUcsVUFBVSxHQUFHO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixFQUFFLDJDQUEyQztBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QyxvQkFBb0Isa0JBQWtCLE9BQU8sRUFBRTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9HQUFvRztBQUNoSDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxXQUFXO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsRUFBRSxpQkFBaUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNkJBQTZCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEIsSUFBSSxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsbUNBQW1DLEdBQUcsZ0JBQWdCO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1Q0FBdUM7QUFDbkQ7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTyxJQUFJLEdBQUc7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFEQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFxQyxzQkFBc0Isb0RBQU87QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QixvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0EsWUFBWSxxREFBUTtBQUNwQjtBQUNBO0FBQ0EsaUJBQWlCLG9EQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFEQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFFBQVEscURBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsSUFBcUM7QUFDdEQsOERBQThELFVBQVU7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0EsWUFBWSxxREFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGFBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakM7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUIsR0FBRyw2QkFBNkI7QUFDbkU7QUFDQTtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDLFlBQVksbUdBQW1HO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQixHQUFHLDhCQUE4QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxxQkFBcUI7QUFDakMsbUJBQW1CLHFEQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtDQUFrQztBQUM5QyxZQUFZLGFBQWE7QUFDekI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFxQztBQUNoRDtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQyxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckMsWUFBWSx5Q0FBeUM7QUFDckQ7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBLFFBQVEsb0RBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9EQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvREFBb0Q7QUFDaEUsWUFBWSxrQ0FBa0M7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDBDQUEwQztBQUN0RCxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0EsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0EsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsR0FBRztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEtBQUs7QUFDdkIsd0JBQXdCLGVBQWUsSUFBSSxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFLGdCQUFnQjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxJQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBK0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEtBQXFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLEtBQXFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBZ0Q7QUFDcEU7QUFDQTtBQUNBLG9EQUFvRCxTQUFTO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFxQyxlQUFlLENBQUk7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQiw4RUFBOEUsU0FBUztBQUN2RixZQUFZLFdBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQywyREFBbUQ7QUFDbkY7QUFDQTtBQUNBLGlCQUFpQixLQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsNkRBQXVELENBQUM7QUFDOUY7QUFDQSw2SEFBNkgsS0FBcUMsV0FBVyxlQUFlLE1BQU0sQ0FBRTtBQUNwTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQXFDLFdBQVcsdURBQWMsZ0JBQWdCLE1BQU0sQ0FBRTtBQUNwRztBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBLGlCQUFpQixLQUFnRDtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsS0FBcUM7QUFDM0QsaUNBQWlDLDJEQUFtRCxFQUFFO0FBQ3RGLDBCQUEwQixDQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsbUNBQW1DO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDRDQUE0QztBQUN4RCxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGVBQWU7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBK0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQStDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUErQztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBK0M7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx5QkFBeUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEMsb0JBQW9CLG9DQUFvQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixNQUFNO0FBQ2hDO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsTUFBTTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1Q0FBdUM7QUFDdkQsZ0JBQWdCLHVGQUF1RjtBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxLQUFxQyxXQUFXLHNEQUFhLFlBQVksTUFBTSxDQUFFO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixJQUFJO0FBQ3RCLG1DQUFtQyxxREFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsS0FBcUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLElBQXFDO0FBQ3REO0FBQ0E7QUFDQSx3REFBd0QsdURBQWMsYUFBYTtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsdURBQWM7QUFDaEU7QUFDQTtBQUNBLGtDQUFrQyx1REFBYztBQUNoRDtBQUNBLHdEQUF3RCxXQUFXO0FBQ25FO0FBQ0E7QUFDQSxpQkFBaUIsRUFFSjtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFlBQVk7QUFDNUM7QUFDQTtBQUNBLG1DQUFtQyxpREFBSTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDJEQUFjO0FBQy9CO0FBQ0E7QUFDQSxrQ0FBa0MsMkRBQWM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsSUFBcUM7QUFDdEU7QUFDQTtBQUNBLHNFQUFzRSxLQUFLO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpREFBSTtBQUNyRCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxREFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwrREFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1Q0FBdUM7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxpREFBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUFDQTtBQUNBLEtBQUssSUFBcUM7QUFDMUMsSUFBSSwwREFBYTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLG1EQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsYUFBYTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDhNQUE4TTtBQUMxTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9EQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWcyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbnNQbitCO0FBQzNWO0FBQ3VQOztBQUV6UjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsS0FBSztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsUUFBUTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IscURBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIscURBQVE7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvREFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHNEQUFTO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHFEQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQVU7QUFDckIsb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixpRUFBb0I7QUFDOUMsNENBQTRDLCtEQUFrQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELG9CQUFvQiwrREFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBcUM7QUFDbEQsWUFBWSx1REFBSSx5QkFBeUIsSUFBSSxRQUFRLHlCQUF5QjtBQUM5RSx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHNEQUFTO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkVBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvREFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaURBQUk7QUFDakI7QUFDQSxhQUFhLDREQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsdURBQVU7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHFEQUFRO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtFQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixLQUFxQztBQUN0RCxnQkFBZ0IsdURBQUk7QUFDcEI7QUFDQTtBQUNBLGdDQUFnQyxjQUFjO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSwyREFBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw0QkFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGtCQUFrQixrQkFBa0I7QUFDN0M7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDLGdDQUFnQyxvREFBTztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxxREFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsaURBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFEQUFRO0FBQzVCO0FBQ0Esc0JBQXNCLHFEQUFVO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHNEQUFTO0FBQy9DO0FBQ0E7QUFDQSxzQ0FBc0Msc0RBQVM7QUFDL0M7QUFDQTtBQUNBLHlDQUF5QyxzREFBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDhEQUFXLFlBQVksbURBQU0sR0FBRztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLElBQXFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLElBQXFDO0FBQzFEO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixxRUFBa0I7QUFDM0M7QUFDQSxhQUFhLEtBQXFDLEtBQUssdURBQUk7QUFDM0QsbUJBQW1CLGtEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsS0FBcUMsS0FBSyx1REFBSTtBQUMzRCxtQkFBbUIsa0RBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFxQztBQUNsRCxnQkFBZ0IsdURBQUkscURBQXFELEtBQUs7QUFDOUUsbUJBQW1CLGtEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIscUVBQWtCO0FBQ3ZDO0FBQ0E7QUFDQSxTQUFTLEtBQXFDO0FBQzlDLFlBQVksdURBQUk7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrRUFBZTtBQUNuQixJQUFJLDREQUFTO0FBQ2I7QUFDQSxxREFBcUQsaUJBQWlCO0FBQ3RFLFFBQVEsOERBQVc7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVEQUFRO0FBQ3BDO0FBQ0E7QUFDQSw0QkFBNEIscURBQU07QUFDbEMsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxJQUFJO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPLEtBQUssb0RBQUMsQ0FBQyw2REFBYztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsbURBQU0sR0FBRyxFQUFFLG1FQUFvQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvREFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsb0RBQU87QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0RBQWdELEtBQUssb0NBQW9DLEtBQUssa0NBQWtDLEtBQUssc0lBQXNJLEtBQUssb0NBQW9DLEtBQUssa0NBQWtDLEtBQUssYUFBYTtBQUN6WDtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdLQUFnSztBQUM1SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXLG1EQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscURBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxREFBUTtBQUN4QixTQUFTLElBQXFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVEQUFJO0FBQ1osbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0EsUUFBUSx1REFBSTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtREFBTSxHQUFHO0FBQ2xDO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbUJBQW1CLE9BQU87QUFDMUIseUJBQXlCLHFFQUFrQjtBQUMzQyxzQkFBc0IscUVBQWtCO0FBQ3hDO0FBQ0E7QUFDQSxRQUFRLDREQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELGtCQUFrQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsNkJBQTZCLHdEQUFLO0FBQ2xDO0FBQ0Esc0NBQXNDLHVEQUFRO0FBQzlDO0FBQ0EsdUNBQXVDLDJFQUF3QjtBQUMvRCw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQSxvQkFBb0IscUVBQWtCLFFBQVEseUVBQXNCO0FBQ3BFO0FBQ0EsMEJBQTBCLElBQXFDO0FBQy9ELG9CQUFvQix1REFBSTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MseUJBQXlCO0FBQ3pEO0FBQ0Esb0JBQW9CLHFFQUFrQixRQUFRLHlFQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOERBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxHQUFHLEtBQUssR0FBRztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQU8sZ0JBQWdCLDJEQUFjO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsYUFBYSxzQkFBc0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIscURBQVE7QUFDbkM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBLEtBQUs7QUFDTCx1QkFBdUIsb0JBQW9CLHNCQUFzQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELHFEQUFRO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9EQUFPO0FBQ3ZCLDhCQUE4Qix5REFBWTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixrREFBSztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlCQUFpQjtBQUMzQztBQUNBLFFBQVEsb0RBQU87QUFDZixxQkFBcUIseURBQVk7QUFDakM7QUFDQSxhQUFhLGtEQUFLO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1REFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTztBQUN6QixxQkFBcUIsdURBQVU7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTCx1QkFBdUIsaUJBQWlCO0FBQ3hDO0FBQ0E7QUFDQSx5QkFBeUIsdURBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG9CQUFvQixVQUFVO0FBQ2hELDJCQUEyQixrREFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMscURBQVE7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9EQUFPLFlBQVksa0RBQUs7QUFDL0MsU0FBUyxLQUFxQztBQUM5QyxZQUFZLHVEQUFJO0FBQ2hCLDJCQUEyQixtREFBbUQ7QUFDOUU7QUFDQTtBQUNBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvREFBTztBQUN2QixrQ0FBa0MseURBQVk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVEQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU8sUUFBUSxPQUFPO0FBQ3RELGlDQUFpQyxPQUFPO0FBQ3hDLDJCQUEyQix1REFBVTtBQUNyQyxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLG9DQUFvQyxPQUFPO0FBQzNDLFlBQVksb0RBQU87QUFDbkIsK0JBQStCLHlEQUFZO0FBQzNDLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsaUJBQWlCLGtEQUFLO0FBQ3RCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxFQUFFO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixzREFBUztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLE9BQU8sSUFBSSxZQUFZO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGtCQUFrQixPQUFPLElBQUksWUFBWTtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLGlCQUFpQixJQUFJLFlBQVk7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixPQUFPO0FBQ2xDO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxtREFBTSxHQUFHLFdBQVc7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlFQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwRUFBdUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsSUFBcUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVEQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLElBQXFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzREFBUyxTQUFTLHFEQUFRO0FBQ2xEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0VBQWE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsdURBQUk7QUFDcEI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBSTtBQUNwQjtBQUNBLGFBQWE7QUFDYjtBQUNBLGdCQUFnQix1REFBSTtBQUNwQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFEQUFRO0FBQ2hCO0FBQ0EsYUFBYSxLQUFxQztBQUNsRCxZQUFZLHVEQUFJLGdEQUFnRCxVQUFVO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLFNBQVMsS0FBcUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1REFBSSxtQ0FBbUMsZUFBZTtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWdTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbHFEaFM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQywrQkFBK0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLEtBQUssRUFBRSxpREFBaUQsS0FBSyxTQUFTO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxjQUFjO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxLQUFLO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYyxHQUFHLE9BQU87QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsc0JBQXNCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakIsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsMENBQUs7QUFDL0I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQLEtBQUssSUFBSSxlQUFlO0FBQ3hCOztBQUVBOztBQUVBO0FBQ0EsNERBQTRELFdBQVc7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUUsMENBQUs7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUsMENBQUs7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUksWUFBWTs7QUFFbkIsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFLDBDQUFLOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSwyQ0FBTTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtCQUFrQiw2Q0FBUTtBQUMxQjtBQUNBLEdBQUc7O0FBRUgsaUJBQWlCLDZDQUFRO0FBQ3pCO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsNkNBQVE7QUFDakM7QUFDQSxHQUFHOztBQUVILHlCQUF5Qiw2Q0FBUTtBQUNqQztBQUNBLEdBQUc7O0FBRUgsdUJBQXVCLDZDQUFRO0FBQy9CO0FBQ0EsR0FBRzs7QUFFSCxvQkFBb0IsNkNBQVE7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLG9CQUFvQiw2Q0FBUTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSCxvQkFBb0IsNkNBQVE7QUFDNUI7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUMsNkNBQVE7QUFDakQ7QUFDQSxHQUFHOztBQUVILHdDQUF3Qyw2Q0FBUTtBQUNoRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0NBQXdDLDZDQUFRO0FBQ2hEO0FBQ0E7QUFDQSxHQUFHOztBQUVILHFDQUFxQyw2Q0FBUTtBQUM3QztBQUNBLEdBQUc7O0FBRUgscUNBQXFDLDZDQUFRO0FBQzdDO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSSw2Q0FBUTtBQUNaO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLDZDQUFRO0FBQ1o7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUsMENBQUs7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSw2Q0FBUTtBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7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QUNBOztBQUVBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQyxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0EsaUJBQWlCLFdBQVc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGOztBQUVBLENBQUM7Ozs7Ozs7Ozs7QUNyVUQsQ0FBQztBQUNELEtBQUssSUFBMkI7QUFDaEM7QUFDQSxxQ0FBcUMsbUJBQU8sQ0FBQyxnREFBUSxHQUFHLG1CQUFPLENBQUMsNERBQWMsR0FBRyxtQkFBTyxDQUFDLDhDQUFPLEdBQUcsbUJBQU8sQ0FBQyxvREFBVSxHQUFHLG1CQUFPLENBQUMsOERBQWU7QUFDL0k7QUFDQSxNQUFNLEVBT0o7QUFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGNBQWM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLEtBQTBCOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxZQUFZOztBQUVyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUYsb0JBQW9COztBQUVwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLG1CQUFtQixpQ0FBaUM7QUFDcEQsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsU0FBUztBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLElBQUk7QUFDdEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixJQUFJOztBQUVwQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsSUFBSTtBQUM5QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixVQUFVOztBQUVWO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLDBCQUEwQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUyw2QkFBNkI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxpQ0FBaUMsTUFBTTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZixTQUFTOztBQUVUO0FBQ0EsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxxQ0FBcUM7QUFDOUMsU0FBUztBQUNULEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVE7O0FBRVI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBOztBQUVBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaURBQWlEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRCxXQUFXLDRDQUE0QztBQUN2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUEsRUFBRTs7OztBQUlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLFNBQVMsR0FBRztBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOzs7O0FBSUE7O0FBRUE7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBLGVBQWUsU0FBUztBQUN4QjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLDJCQUEyQix3QkFBd0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLDJDQUEyQztBQUMzQyxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5Q0FBeUMscUNBQXFDO0FBQzlFLHFDQUFxQyxzQ0FBc0M7QUFDM0UscUNBQXFDLHFDQUFxQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDLHNDQUFzQztBQUN0QyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7QUFLQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixhQUFhO0FBQ3JDLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFNBQVM7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7OztBQUdBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLGdCQUFnQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUEsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxPQUFPO0FBQ2hCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSxzQkFBc0I7QUFDckM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxjQUFjOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVDQUF1QztBQUNsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQXVEO0FBQy9FOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sK0NBQStDO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxlQUFlLG9DQUFvQztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FB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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4REFBOEQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxPQUFPOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLFNBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxTQUFTLE9BQU87QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0RBQWtELDBCQUEwQjtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQix1QkFBdUI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGOzs7QUFHQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQ0FBb0M7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxjQUFjOztBQUVkOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLE1BQU07QUFDTjs7QUFFQSxZQUFZO0FBQ1osSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVO0FBQ1Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjtBQUNqQixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQSxzQkFBc0I7QUFDdEIsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkMsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsY0FBYyx1Q0FBdUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7O0FBRUY7QUFDQSxlQUFlLHFEQUFxRDtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLGVBQWUsa0NBQWtDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNILEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUssSUFBMEM7QUFDL0MsQ0FBQyxpQ0FBa0IsRUFBRSxtQ0FBRTtBQUN2QjtBQUNBLEVBQUU7QUFBQSxrR0FBRTtBQUNKOzs7OztBQUtBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQSxFQUFFOzs7Ozs7Ozs7OztBQzVwVkY7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDakZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0S0Q7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUNqRUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3JMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDbEVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ25IRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2pFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNU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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDN0REO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzNJRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUNqSUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLElBQUk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0SUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxT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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3pGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RGRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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RTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2hGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2xMRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDdEtEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2hJRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUksSUFBSSxJQUFJO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDeEdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0RkQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDdEpEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUMxRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3BIRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM5SkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsOENBQThDLElBQUksSUFBSSxJQUFJO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RHRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDNUZEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxzQ0FBc0MsSUFBSTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2pIRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RJRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3JGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDaElEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDOUZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ25KRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QseUNBQXlDLElBQUk7QUFDN0M7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDNUVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN2SUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDeEdEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDL0hEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxJQUFJO0FBQzNELDZEQUE2RCxJQUFJO0FBQ2pFLDREQUE0RCxJQUFJO0FBQ2hFLGtFQUFrRSxJQUFJO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDdEVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2hHRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzVGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsS0FBSztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzlHRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxT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QyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDOUVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNk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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3BIRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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NEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2pMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM1RkQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDaEVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzdERDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLFNBQVM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsWUFBWTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUk7QUFDeEI7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3R0FBd0csSUFBSSx3QkFBd0IsSUFBSSx1REFBdUQsSUFBSTtBQUNuTSxxRUFBcUUsSUFBSTtBQUN6RSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLFlBQVk7QUFDdkQ7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFlBQVk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLElBQUk7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHFCQUFxQixFQUFFO0FBQ3ZCLDBCQUEwQixFQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCLHdCQUF3QixJQUFJO0FBQzVCLDZCQUE2QixJQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU0sd0VBQXdFLE1BQU0sbUJBQW1CLE1BQU0scUJBQXFCLE1BQU0sRUFBRSxJQUFJO0FBQ2pLOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7QUFDcEIsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQWE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLCtCQUErQjtBQUNuRDtBQUNBOztBQUVBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtQ0FBbUMsaUJBQWlCO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxzQkFBc0I7QUFDMUQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msc0JBQXNCO0FBQzFEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUIsbUJBQW1CO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixtQkFBbUI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3BqTEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7Ozs7Ozs7Ozs7O0FDdkw3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxNQUFNLElBQTBDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBTyxDQUFDLHlFQUFRLENBQUMsb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxrR0FBQztBQUMvQixJQUFJLEtBQUssRUFxQk47QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxlQUFlO0FBQ3RCLFdBQVcsV0FBVyxPQUFPO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxPQUFPO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxPQUFPO0FBQ3REOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IseUJBQXlCO0FBQzdDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxzQkFBc0IsMEJBQTBCO0FBQ2hEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQyxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVixrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw2QkFBNkI7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0IsaUJBQWlCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQix3QkFBd0I7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQixzQkFBc0I7QUFDNUM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7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RUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLEdBQUcsUUFBUTs7QUFFdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CLDZCQUE2QjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsZ0NBQWdDO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEMsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsMkNBQTJDOztBQUUzQztBQUNBLFVBQVU7QUFDViwyQ0FBMkM7O0FBRTNDO0FBQ0EsVUFBVTtBQUNWLDZDQUE2Qzs7QUFFN0M7QUFDQSxVQUFVO0FBQ1YseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsaUNBQWlDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QixxQkFBcUI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQSxTQUFTOztBQUVUO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLEdBQUc7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YscURBQXFELG9CQUFvQjtBQUN6RSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0EsK0RBQStELDBCQUEwQjtBQUN6RixVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGlCQUFpQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxVQUFVLCtDQUErQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBLElBQUk7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxJQUFJO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsSUFBSTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GLGdCQUFnQjtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsMERBQTBEO0FBQzFELFVBQVUseUJBQXlCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxjQUFjO0FBQ2pELFVBQVUsK0JBQStCO0FBQ3pDO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0Msb0NBQW9DLElBQUk7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTix3Q0FBd0MsbUJBQW1C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dC9jb21waWxlci1jb3JlLmVzbS1idW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVlL2NvbXBpbGVyLWRvbS9kaXN0L2NvbXBpbGVyLWRvbS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9kZXZ0b29scy1hcGkvbGliL2VzbS9jb25zdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9kZXZ0b29scy1hcGkvbGliL2VzbS9lbnYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vcHJveHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9yZWFjdGl2aXR5L2Rpc3QvcmVhY3Rpdml0eS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9ydW50aW1lLWNvcmUvZGlzdC9ydW50aW1lLWNvcmUuZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvcnVudGltZS1kb20vZGlzdC9ydW50aW1lLWRvbS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9zaGFyZWQvZGlzdC9zaGFyZWQuZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L2Rpc3QvbXVsdGlzZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jaXBoZXItY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvZW5jLWJhc2U2NHVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2VuYy11dGYxNi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2Zvcm1hdC1oZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9obWFjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9saWItdHlwZWRhcnJheXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tZDUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWNmYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtY3RyLWdsYWRtYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWN0ci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1vZmIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtYW5zaXg5MjMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvMTAxMjYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvOTc5NzEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtbm9wYWRkaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGJrZGYyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmFiYml0LWxlZ2FjeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JjNC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JpcGVtZDE2MC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyMjQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyNTYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMzg0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhNTEyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvdHJpcGxlZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMveDY0LWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L3RoZW1lcy9kZWZhdWx0LmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItc2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4tYmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tbnouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtZG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1kZXZhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h5LWFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2p2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLW15LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVlZm9ybS9tdWx0aXNlbGVjdC90aGVtZXMvZGVmYXVsdC5jc3M/MmRiOSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N2Zy12dWUzL2Rpc3Qvc3ZnLXZ1ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L3RoZW1lcy9kZWZhdWx0LmNzcz9lMjRkIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZTMtcmFkaWFsLXByb2dyZXNzL2Rpc3QvUmFkaWFsUHJvZ3Jlc3NCYXIuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUzLXNtb290aC1zY3JvbGwvZGlzdC92dWUtc21vb3RoLXNjcm9sbC5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZXgvZGlzdC92dWV4LmVzbS1idW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AaGVhZGxlc3N1aS92dWUvZGlzdC9oZWFkbGVzc3VpLmRldi5janMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BoZWFkbGVzc3VpL3Z1ZS9kaXN0L2luZGV4LmNqcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9jb3JlL2luZGV4LmNqcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9jb3JlL25vZGVfbW9kdWxlcy9AdnVldXNlL3NoYXJlZC9pbmRleC5janMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvY29yZS9ub2RlX21vZHVsZXMvdnVlLWRlbWkvbGliL2luZGV4LmNqcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlLCBOT09QLCBleHRlbmQsIGlzT2JqZWN0LCBOTywgaXNBcnJheSwgbWFrZU1hcCwgaXNTeW1ib2wsIEVNUFRZX09CSiwgY2FwaXRhbGl6ZSwgY2FtZWxpemUgYXMgY2FtZWxpemUkMSwgUGF0Y2hGbGFnTmFtZXMsIHNsb3RGbGFnc1RleHQsIGlzT24sIGlzQnVpbHRJbkRpcmVjdGl2ZSwgaXNSZXNlcnZlZFByb3AsIHRvSGFuZGxlcktleSB9IGZyb20gJ0B2dWUvc2hhcmVkJztcbmV4cG9ydCB7IGdlbmVyYXRlQ29kZUZyYW1lIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5mdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnJvcikge1xyXG4gICAgdGhyb3cgZXJyb3I7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdE9uV2Fybihtc2cpIHtcclxuICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjb25zb2xlLndhcm4oYFtWdWUgd2Fybl0gJHttc2cubWVzc2FnZX1gKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDb21waWxlckVycm9yKGNvZGUsIGxvYywgbWVzc2FnZXMsIGFkZGl0aW9uYWxNZXNzYWdlKSB7XHJcbiAgICBjb25zdCBtc2cgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgIXRydWVcclxuICAgICAgICA/IChtZXNzYWdlcyB8fCBlcnJvck1lc3NhZ2VzKVtjb2RlXSArIChhZGRpdGlvbmFsTWVzc2FnZSB8fCBgYClcclxuICAgICAgICA6IGNvZGU7XHJcbiAgICBjb25zdCBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihTdHJpbmcobXNnKSk7XHJcbiAgICBlcnJvci5jb2RlID0gY29kZTtcclxuICAgIGVycm9yLmxvYyA9IGxvYztcclxuICAgIHJldHVybiBlcnJvcjtcclxufVxyXG5jb25zdCBlcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgLy8gcGFyc2UgZXJyb3JzXHJcbiAgICBbMCAvKiBFcnJvckNvZGVzLkFCUlVQVF9DTE9TSU5HX09GX0VNUFRZX0NPTU1FTlQgKi9dOiAnSWxsZWdhbCBjb21tZW50LicsXHJcbiAgICBbMSAvKiBFcnJvckNvZGVzLkNEQVRBX0lOX0hUTUxfQ09OVEVOVCAqL106ICdDREFUQSBzZWN0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBYTUwgY29udGV4dC4nLFxyXG4gICAgWzIgLyogRXJyb3JDb2Rlcy5EVVBMSUNBVEVfQVRUUklCVVRFICovXTogJ0R1cGxpY2F0ZSBhdHRyaWJ1dGUuJyxcclxuICAgIFszIC8qIEVycm9yQ29kZXMuRU5EX1RBR19XSVRIX0FUVFJJQlVURVMgKi9dOiAnRW5kIHRhZyBjYW5ub3QgaGF2ZSBhdHRyaWJ1dGVzLicsXHJcbiAgICBbNCAvKiBFcnJvckNvZGVzLkVORF9UQUdfV0lUSF9UUkFJTElOR19TT0xJRFVTICovXTogXCJJbGxlZ2FsICcvJyBpbiB0YWdzLlwiLFxyXG4gICAgWzUgLyogRXJyb3JDb2Rlcy5FT0ZfQkVGT1JFX1RBR19OQU1FICovXTogJ1VuZXhwZWN0ZWQgRU9GIGluIHRhZy4nLFxyXG4gICAgWzYgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fQ0RBVEEgKi9dOiAnVW5leHBlY3RlZCBFT0YgaW4gQ0RBVEEgc2VjdGlvbi4nLFxyXG4gICAgWzcgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fQ09NTUVOVCAqL106ICdVbmV4cGVjdGVkIEVPRiBpbiBjb21tZW50LicsXHJcbiAgICBbOCAvKiBFcnJvckNvZGVzLkVPRl9JTl9TQ1JJUFRfSFRNTF9DT01NRU5UX0xJS0VfVEVYVCAqL106ICdVbmV4cGVjdGVkIEVPRiBpbiBzY3JpcHQuJyxcclxuICAgIFs5IC8qIEVycm9yQ29kZXMuRU9GX0lOX1RBRyAqL106ICdVbmV4cGVjdGVkIEVPRiBpbiB0YWcuJyxcclxuICAgIFsxMCAvKiBFcnJvckNvZGVzLklOQ09SUkVDVExZX0NMT1NFRF9DT01NRU5UICovXTogJ0luY29ycmVjdGx5IGNsb3NlZCBjb21tZW50LicsXHJcbiAgICBbMTEgLyogRXJyb3JDb2Rlcy5JTkNPUlJFQ1RMWV9PUEVORURfQ09NTUVOVCAqL106ICdJbmNvcnJlY3RseSBvcGVuZWQgY29tbWVudC4nLFxyXG4gICAgWzEyIC8qIEVycm9yQ29kZXMuSU5WQUxJRF9GSVJTVF9DSEFSQUNURVJfT0ZfVEFHX05BTUUgKi9dOiBcIklsbGVnYWwgdGFnIG5hbWUuIFVzZSAnJmx0OycgdG8gcHJpbnQgJzwnLlwiLFxyXG4gICAgWzEzIC8qIEVycm9yQ29kZXMuTUlTU0lOR19BVFRSSUJVVEVfVkFMVUUgKi9dOiAnQXR0cmlidXRlIHZhbHVlIHdhcyBleHBlY3RlZC4nLFxyXG4gICAgWzE0IC8qIEVycm9yQ29kZXMuTUlTU0lOR19FTkRfVEFHX05BTUUgKi9dOiAnRW5kIHRhZyBuYW1lIHdhcyBleHBlY3RlZC4nLFxyXG4gICAgWzE1IC8qIEVycm9yQ29kZXMuTUlTU0lOR19XSElURVNQQUNFX0JFVFdFRU5fQVRUUklCVVRFUyAqL106ICdXaGl0ZXNwYWNlIHdhcyBleHBlY3RlZC4nLFxyXG4gICAgWzE2IC8qIEVycm9yQ29kZXMuTkVTVEVEX0NPTU1FTlQgKi9dOiBcIlVuZXhwZWN0ZWQgJzwhLS0nIGluIGNvbW1lbnQuXCIsXHJcbiAgICBbMTcgLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0NIQVJBQ1RFUl9JTl9BVFRSSUJVVEVfTkFNRSAqL106ICdBdHRyaWJ1dGUgbmFtZSBjYW5ub3QgY29udGFpbiBVKzAwMjIgKFwiKSwgVSswMDI3IChcXCcpLCBhbmQgVSswMDNDICg8KS4nLFxyXG4gICAgWzE4IC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9DSEFSQUNURVJfSU5fVU5RVU9URURfQVRUUklCVVRFX1ZBTFVFICovXTogJ1VucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSBjYW5ub3QgY29udGFpbiBVKzAwMjIgKFwiKSwgVSswMDI3IChcXCcpLCBVKzAwM0MgKDwpLCBVKzAwM0QgKD0pLCBhbmQgVSswMDYwIChgKS4nLFxyXG4gICAgWzE5IC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9FUVVBTFNfU0lHTl9CRUZPUkVfQVRUUklCVVRFX05BTUUgKi9dOiBcIkF0dHJpYnV0ZSBuYW1lIGNhbm5vdCBzdGFydCB3aXRoICc9Jy5cIixcclxuICAgIFsyMSAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfUVVFU1RJT05fTUFSS19JTlNURUFEX09GX1RBR19OQU1FICovXTogXCInPD8nIGlzIGFsbG93ZWQgb25seSBpbiBYTUwgY29udGV4dC5cIixcclxuICAgIFsyMCAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfTlVMTF9DSEFSQUNURVIgKi9dOiBgVW5leHBlY3RlZCBudWxsIGNoYXJhY3Rlci5gLFxyXG4gICAgWzIyIC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9TT0xJRFVTX0lOX1RBRyAqL106IFwiSWxsZWdhbCAnLycgaW4gdGFncy5cIixcclxuICAgIC8vIFZ1ZS1zcGVjaWZpYyBwYXJzZSBlcnJvcnNcclxuICAgIFsyMyAvKiBFcnJvckNvZGVzLlhfSU5WQUxJRF9FTkRfVEFHICovXTogJ0ludmFsaWQgZW5kIHRhZy4nLFxyXG4gICAgWzI0IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0VORF9UQUcgKi9dOiAnRWxlbWVudCBpcyBtaXNzaW5nIGVuZCB0YWcuJyxcclxuICAgIFsyNSAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19JTlRFUlBPTEFUSU9OX0VORCAqL106ICdJbnRlcnBvbGF0aW9uIGVuZCBzaWduIHdhcyBub3QgZm91bmQuJyxcclxuICAgIFsyNyAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19EWU5BTUlDX0RJUkVDVElWRV9BUkdVTUVOVF9FTkQgKi9dOiAnRW5kIGJyYWNrZXQgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IHdhcyBub3QgZm91bmQuICcgK1xyXG4gICAgICAgICdOb3RlIHRoYXQgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgY2Fubm90IGNvbnRhaW4gc3BhY2VzLicsXHJcbiAgICBbMjYgLyogRXJyb3JDb2Rlcy5YX01JU1NJTkdfRElSRUNUSVZFX05BTUUgKi9dOiAnTGVnYWwgZGlyZWN0aXZlIG5hbWUgd2FzIGV4cGVjdGVkLicsXHJcbiAgICAvLyB0cmFuc2Zvcm0gZXJyb3JzXHJcbiAgICBbMjggLyogRXJyb3JDb2Rlcy5YX1ZfSUZfTk9fRVhQUkVTU0lPTiAqL106IGB2LWlmL3YtZWxzZS1pZiBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFsyOSAvKiBFcnJvckNvZGVzLlhfVl9JRl9TQU1FX0tFWSAqL106IGB2LWlmL2Vsc2UgYnJhbmNoZXMgbXVzdCB1c2UgdW5pcXVlIGtleXMuYCxcclxuICAgIFszMCAvKiBFcnJvckNvZGVzLlhfVl9FTFNFX05PX0FESkFDRU5UX0lGICovXTogYHYtZWxzZS92LWVsc2UtaWYgaGFzIG5vIGFkamFjZW50IHYtaWYgb3Igdi1lbHNlLWlmLmAsXHJcbiAgICBbMzEgLyogRXJyb3JDb2Rlcy5YX1ZfRk9SX05PX0VYUFJFU1NJT04gKi9dOiBgdi1mb3IgaXMgbWlzc2luZyBleHByZXNzaW9uLmAsXHJcbiAgICBbMzIgLyogRXJyb3JDb2Rlcy5YX1ZfRk9SX01BTEZPUk1FRF9FWFBSRVNTSU9OICovXTogYHYtZm9yIGhhcyBpbnZhbGlkIGV4cHJlc3Npb24uYCxcclxuICAgIFszMyAvKiBFcnJvckNvZGVzLlhfVl9GT1JfVEVNUExBVEVfS0VZX1BMQUNFTUVOVCAqL106IGA8dGVtcGxhdGUgdi1mb3I+IGtleSBzaG91bGQgYmUgcGxhY2VkIG9uIHRoZSA8dGVtcGxhdGU+IHRhZy5gLFxyXG4gICAgWzM0IC8qIEVycm9yQ29kZXMuWF9WX0JJTkRfTk9fRVhQUkVTU0lPTiAqL106IGB2LWJpbmQgaXMgbWlzc2luZyBleHByZXNzaW9uLmAsXHJcbiAgICBbMzUgLyogRXJyb3JDb2Rlcy5YX1ZfT05fTk9fRVhQUkVTU0lPTiAqL106IGB2LW9uIGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzM2IC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfVU5FWFBFQ1RFRF9ESVJFQ1RJVkVfT05fU0xPVF9PVVRMRVQgKi9dOiBgVW5leHBlY3RlZCBjdXN0b20gZGlyZWN0aXZlIG9uIDxzbG90PiBvdXRsZXQuYCxcclxuICAgIFszNyAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX01JWEVEX1NMT1RfVVNBR0UgKi9dOiBgTWl4ZWQgdi1zbG90IHVzYWdlIG9uIGJvdGggdGhlIGNvbXBvbmVudCBhbmQgbmVzdGVkIDx0ZW1wbGF0ZT4uYCArXHJcbiAgICAgICAgYFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG5hbWVkIHNsb3RzLCBhbGwgc2xvdHMgc2hvdWxkIHVzZSA8dGVtcGxhdGU+IGAgK1xyXG4gICAgICAgIGBzeW50YXggdG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LmAsXHJcbiAgICBbMzggLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9EVVBMSUNBVEVfU0xPVF9OQU1FUyAqL106IGBEdXBsaWNhdGUgc2xvdCBuYW1lcyBmb3VuZC4gYCxcclxuICAgIFszOSAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX0VYVFJBTkVPVVNfREVGQVVMVF9TTE9UX0NISUxEUkVOICovXTogYEV4dHJhbmVvdXMgY2hpbGRyZW4gZm91bmQgd2hlbiBjb21wb25lbnQgYWxyZWFkeSBoYXMgZXhwbGljaXRseSBuYW1lZCBgICtcclxuICAgICAgICBgZGVmYXVsdCBzbG90LiBUaGVzZSBjaGlsZHJlbiB3aWxsIGJlIGlnbm9yZWQuYCxcclxuICAgIFs0MCAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX01JU1BMQUNFRCAqL106IGB2LXNsb3QgY2FuIG9ubHkgYmUgdXNlZCBvbiBjb21wb25lbnRzIG9yIDx0ZW1wbGF0ZT4gdGFncy5gLFxyXG4gICAgWzQxIC8qIEVycm9yQ29kZXMuWF9WX01PREVMX05PX0VYUFJFU1NJT04gKi9dOiBgdi1tb2RlbCBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFs0MiAvKiBFcnJvckNvZGVzLlhfVl9NT0RFTF9NQUxGT1JNRURfRVhQUkVTU0lPTiAqL106IGB2LW1vZGVsIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IG1lbWJlciBleHByZXNzaW9uLmAsXHJcbiAgICBbNDMgLyogRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfT05fU0NPUEVfVkFSSUFCTEUgKi9dOiBgdi1tb2RlbCBjYW5ub3QgYmUgdXNlZCBvbiB2LWZvciBvciB2LXNsb3Qgc2NvcGUgdmFyaWFibGVzIGJlY2F1c2UgdGhleSBhcmUgbm90IHdyaXRhYmxlLmAsXHJcbiAgICBbNDQgLyogRXJyb3JDb2Rlcy5YX0lOVkFMSURfRVhQUkVTU0lPTiAqL106IGBFcnJvciBwYXJzaW5nIEphdmFTY3JpcHQgZXhwcmVzc2lvbjogYCxcclxuICAgIFs0NSAvKiBFcnJvckNvZGVzLlhfS0VFUF9BTElWRV9JTlZBTElEX0NISUxEUkVOICovXTogYDxLZWVwQWxpdmU+IGV4cGVjdHMgZXhhY3RseSBvbmUgY2hpbGQgY29tcG9uZW50LmAsXHJcbiAgICAvLyBnZW5lcmljIGVycm9yc1xyXG4gICAgWzQ2IC8qIEVycm9yQ29kZXMuWF9QUkVGSVhfSURfTk9UX1NVUFBPUlRFRCAqL106IGBcInByZWZpeElkZW50aWZpZXJzXCIgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBvZiBjb21waWxlci5gLFxyXG4gICAgWzQ3IC8qIEVycm9yQ29kZXMuWF9NT0RVTEVfTU9ERV9OT1RfU1VQUE9SVEVEICovXTogYEVTIG1vZHVsZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBvZiBjb21waWxlci5gLFxyXG4gICAgWzQ4IC8qIEVycm9yQ29kZXMuWF9DQUNIRV9IQU5ETEVSX05PVF9TVVBQT1JURUQgKi9dOiBgXCJjYWNoZUhhbmRsZXJzXCIgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGhlIFwicHJlZml4SWRlbnRpZmllcnNcIiBvcHRpb24gaXMgZW5hYmxlZC5gLFxyXG4gICAgWzQ5IC8qIEVycm9yQ29kZXMuWF9TQ09QRV9JRF9OT1RfU1VQUE9SVEVEICovXTogYFwic2NvcGVJZFwiIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBtb2R1bGUgbW9kZS5gLFxyXG4gICAgLy8ganVzdCB0byBmdWxmaWxsIHR5cGVzXHJcbiAgICBbNTAgLyogRXJyb3JDb2Rlcy5fX0VYVEVORF9QT0lOVF9fICovXTogYGBcclxufTtcblxuY29uc3QgRlJBR01FTlQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYEZyYWdtZW50YCA6IGBgKTtcclxuY29uc3QgVEVMRVBPUlQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYFRlbGVwb3J0YCA6IGBgKTtcclxuY29uc3QgU1VTUEVOU0UgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYFN1c3BlbnNlYCA6IGBgKTtcclxuY29uc3QgS0VFUF9BTElWRSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgS2VlcEFsaXZlYCA6IGBgKTtcclxuY29uc3QgQkFTRV9UUkFOU0lUSU9OID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBCYXNlVHJhbnNpdGlvbmAgOiBgYCk7XHJcbmNvbnN0IE9QRU5fQkxPQ0sgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYG9wZW5CbG9ja2AgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9CTE9DSyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlQmxvY2tgIDogYGApO1xyXG5jb25zdCBDUkVBVEVfRUxFTUVOVF9CTE9DSyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlRWxlbWVudEJsb2NrYCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX1ZOT0RFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVWTm9kZWAgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9FTEVNRU5UX1ZOT0RFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVFbGVtZW50Vk5vZGVgIDogYGApO1xyXG5jb25zdCBDUkVBVEVfQ09NTUVOVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlQ29tbWVudFZOb2RlYCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX1RFWFQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGNyZWF0ZVRleHRWTm9kZWAgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9TVEFUSUMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGNyZWF0ZVN0YXRpY1ZOb2RlYCA6IGBgKTtcclxuY29uc3QgUkVTT0xWRV9DT01QT05FTlQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHJlc29sdmVDb21wb25lbnRgIDogYGApO1xyXG5jb25zdCBSRVNPTFZFX0RZTkFNSUNfQ09NUE9ORU5UID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGByZXNvbHZlRHluYW1pY0NvbXBvbmVudGAgOiBgYCk7XHJcbmNvbnN0IFJFU09MVkVfRElSRUNUSVZFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGByZXNvbHZlRGlyZWN0aXZlYCA6IGBgKTtcclxuY29uc3QgUkVTT0xWRV9GSUxURVIgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHJlc29sdmVGaWx0ZXJgIDogYGApO1xyXG5jb25zdCBXSVRIX0RJUkVDVElWRVMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHdpdGhEaXJlY3RpdmVzYCA6IGBgKTtcclxuY29uc3QgUkVOREVSX0xJU1QgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHJlbmRlckxpc3RgIDogYGApO1xyXG5jb25zdCBSRU5ERVJfU0xPVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgcmVuZGVyU2xvdGAgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9TTE9UUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlU2xvdHNgIDogYGApO1xyXG5jb25zdCBUT19ESVNQTEFZX1NUUklORyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdG9EaXNwbGF5U3RyaW5nYCA6IGBgKTtcclxuY29uc3QgTUVSR0VfUFJPUFMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYG1lcmdlUHJvcHNgIDogYGApO1xyXG5jb25zdCBOT1JNQUxJWkVfQ0xBU1MgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYG5vcm1hbGl6ZUNsYXNzYCA6IGBgKTtcclxuY29uc3QgTk9STUFMSVpFX1NUWUxFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBub3JtYWxpemVTdHlsZWAgOiBgYCk7XHJcbmNvbnN0IE5PUk1BTElaRV9QUk9QUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgbm9ybWFsaXplUHJvcHNgIDogYGApO1xyXG5jb25zdCBHVUFSRF9SRUFDVElWRV9QUk9QUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgZ3VhcmRSZWFjdGl2ZVByb3BzYCA6IGBgKTtcclxuY29uc3QgVE9fSEFORExFUlMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHRvSGFuZGxlcnNgIDogYGApO1xyXG5jb25zdCBDQU1FTElaRSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY2FtZWxpemVgIDogYGApO1xyXG5jb25zdCBDQVBJVEFMSVpFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjYXBpdGFsaXplYCA6IGBgKTtcclxuY29uc3QgVE9fSEFORExFUl9LRVkgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHRvSGFuZGxlcktleWAgOiBgYCk7XHJcbmNvbnN0IFNFVF9CTE9DS19UUkFDS0lORyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgc2V0QmxvY2tUcmFja2luZ2AgOiBgYCk7XHJcbmNvbnN0IFBVU0hfU0NPUEVfSUQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHB1c2hTY29wZUlkYCA6IGBgKTtcclxuY29uc3QgUE9QX1NDT1BFX0lEID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBwb3BTY29wZUlkYCA6IGBgKTtcclxuY29uc3QgV0lUSF9DVFggPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHdpdGhDdHhgIDogYGApO1xyXG5jb25zdCBVTlJFRiA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdW5yZWZgIDogYGApO1xyXG5jb25zdCBJU19SRUYgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGlzUmVmYCA6IGBgKTtcclxuY29uc3QgV0lUSF9NRU1PID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB3aXRoTWVtb2AgOiBgYCk7XHJcbmNvbnN0IElTX01FTU9fU0FNRSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgaXNNZW1vU2FtZWAgOiBgYCk7XHJcbi8vIE5hbWUgbWFwcGluZyBmb3IgcnVudGltZSBoZWxwZXJzIHRoYXQgbmVlZCB0byBiZSBpbXBvcnRlZCBmcm9tICd2dWUnIGluXHJcbi8vIGdlbmVyYXRlZCBjb2RlLiBNYWtlIHN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBleHBvcnRlZCBpbiB0aGUgcnVudGltZSFcclxuLy8gVXNpbmcgYGFueWAgaGVyZSBiZWNhdXNlIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9scyBhcyBpbmRleCB0eXBlLlxyXG5jb25zdCBoZWxwZXJOYW1lTWFwID0ge1xyXG4gICAgW0ZSQUdNRU5UXTogYEZyYWdtZW50YCxcclxuICAgIFtURUxFUE9SVF06IGBUZWxlcG9ydGAsXHJcbiAgICBbU1VTUEVOU0VdOiBgU3VzcGVuc2VgLFxyXG4gICAgW0tFRVBfQUxJVkVdOiBgS2VlcEFsaXZlYCxcclxuICAgIFtCQVNFX1RSQU5TSVRJT05dOiBgQmFzZVRyYW5zaXRpb25gLFxyXG4gICAgW09QRU5fQkxPQ0tdOiBgb3BlbkJsb2NrYCxcclxuICAgIFtDUkVBVEVfQkxPQ0tdOiBgY3JlYXRlQmxvY2tgLFxyXG4gICAgW0NSRUFURV9FTEVNRU5UX0JMT0NLXTogYGNyZWF0ZUVsZW1lbnRCbG9ja2AsXHJcbiAgICBbQ1JFQVRFX1ZOT0RFXTogYGNyZWF0ZVZOb2RlYCxcclxuICAgIFtDUkVBVEVfRUxFTUVOVF9WTk9ERV06IGBjcmVhdGVFbGVtZW50Vk5vZGVgLFxyXG4gICAgW0NSRUFURV9DT01NRU5UXTogYGNyZWF0ZUNvbW1lbnRWTm9kZWAsXHJcbiAgICBbQ1JFQVRFX1RFWFRdOiBgY3JlYXRlVGV4dFZOb2RlYCxcclxuICAgIFtDUkVBVEVfU1RBVElDXTogYGNyZWF0ZVN0YXRpY1ZOb2RlYCxcclxuICAgIFtSRVNPTFZFX0NPTVBPTkVOVF06IGByZXNvbHZlQ29tcG9uZW50YCxcclxuICAgIFtSRVNPTFZFX0RZTkFNSUNfQ09NUE9ORU5UXTogYHJlc29sdmVEeW5hbWljQ29tcG9uZW50YCxcclxuICAgIFtSRVNPTFZFX0RJUkVDVElWRV06IGByZXNvbHZlRGlyZWN0aXZlYCxcclxuICAgIFtSRVNPTFZFX0ZJTFRFUl06IGByZXNvbHZlRmlsdGVyYCxcclxuICAgIFtXSVRIX0RJUkVDVElWRVNdOiBgd2l0aERpcmVjdGl2ZXNgLFxyXG4gICAgW1JFTkRFUl9MSVNUXTogYHJlbmRlckxpc3RgLFxyXG4gICAgW1JFTkRFUl9TTE9UXTogYHJlbmRlclNsb3RgLFxyXG4gICAgW0NSRUFURV9TTE9UU106IGBjcmVhdGVTbG90c2AsXHJcbiAgICBbVE9fRElTUExBWV9TVFJJTkddOiBgdG9EaXNwbGF5U3RyaW5nYCxcclxuICAgIFtNRVJHRV9QUk9QU106IGBtZXJnZVByb3BzYCxcclxuICAgIFtOT1JNQUxJWkVfQ0xBU1NdOiBgbm9ybWFsaXplQ2xhc3NgLFxyXG4gICAgW05PUk1BTElaRV9TVFlMRV06IGBub3JtYWxpemVTdHlsZWAsXHJcbiAgICBbTk9STUFMSVpFX1BST1BTXTogYG5vcm1hbGl6ZVByb3BzYCxcclxuICAgIFtHVUFSRF9SRUFDVElWRV9QUk9QU106IGBndWFyZFJlYWN0aXZlUHJvcHNgLFxyXG4gICAgW1RPX0hBTkRMRVJTXTogYHRvSGFuZGxlcnNgLFxyXG4gICAgW0NBTUVMSVpFXTogYGNhbWVsaXplYCxcclxuICAgIFtDQVBJVEFMSVpFXTogYGNhcGl0YWxpemVgLFxyXG4gICAgW1RPX0hBTkRMRVJfS0VZXTogYHRvSGFuZGxlcktleWAsXHJcbiAgICBbU0VUX0JMT0NLX1RSQUNLSU5HXTogYHNldEJsb2NrVHJhY2tpbmdgLFxyXG4gICAgW1BVU0hfU0NPUEVfSURdOiBgcHVzaFNjb3BlSWRgLFxyXG4gICAgW1BPUF9TQ09QRV9JRF06IGBwb3BTY29wZUlkYCxcclxuICAgIFtXSVRIX0NUWF06IGB3aXRoQ3R4YCxcclxuICAgIFtVTlJFRl06IGB1bnJlZmAsXHJcbiAgICBbSVNfUkVGXTogYGlzUmVmYCxcclxuICAgIFtXSVRIX01FTU9dOiBgd2l0aE1lbW9gLFxyXG4gICAgW0lTX01FTU9fU0FNRV06IGBpc01lbW9TYW1lYFxyXG59O1xyXG5mdW5jdGlvbiByZWdpc3RlclJ1bnRpbWVIZWxwZXJzKGhlbHBlcnMpIHtcclxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaGVscGVycykuZm9yRWFjaChzID0+IHtcclxuICAgICAgICBoZWxwZXJOYW1lTWFwW3NdID0gaGVscGVyc1tzXTtcclxuICAgIH0pO1xyXG59XG5cbi8vIEFTVCBVdGlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIFNvbWUgZXhwcmVzc2lvbnMsIGUuZy4gc2VxdWVuY2UgYW5kIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zLCBhcmUgbmV2ZXJcclxuLy8gYXNzb2NpYXRlZCB3aXRoIHRlbXBsYXRlIG5vZGVzLCBzbyB0aGVpciBzb3VyY2UgbG9jYXRpb25zIGFyZSBqdXN0IGEgc3R1Yi5cclxuLy8gQ29udGFpbmVyIHR5cGVzIGxpa2UgQ29tcG91bmRFeHByZXNzaW9uIGFsc28gZG9uJ3QgbmVlZCBhIHJlYWwgbG9jYXRpb24uXHJcbmNvbnN0IGxvY1N0dWIgPSB7XHJcbiAgICBzb3VyY2U6ICcnLFxyXG4gICAgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAxLCBvZmZzZXQ6IDAgfSxcclxuICAgIGVuZDogeyBsaW5lOiAxLCBjb2x1bW46IDEsIG9mZnNldDogMCB9XHJcbn07XHJcbmZ1bmN0aW9uIGNyZWF0ZVJvb3QoY2hpbGRyZW4sIGxvYyA9IGxvY1N0dWIpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMCAvKiBOb2RlVHlwZXMuUk9PVCAqLyxcclxuICAgICAgICBjaGlsZHJlbixcclxuICAgICAgICBoZWxwZXJzOiBbXSxcclxuICAgICAgICBjb21wb25lbnRzOiBbXSxcclxuICAgICAgICBkaXJlY3RpdmVzOiBbXSxcclxuICAgICAgICBob2lzdHM6IFtdLFxyXG4gICAgICAgIGltcG9ydHM6IFtdLFxyXG4gICAgICAgIGNhY2hlZDogMCxcclxuICAgICAgICB0ZW1wczogMCxcclxuICAgICAgICBjb2RlZ2VuTm9kZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIGxvY1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVWTm9kZUNhbGwoY29udGV4dCwgdGFnLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzLCBkaXJlY3RpdmVzLCBpc0Jsb2NrID0gZmFsc2UsIGRpc2FibGVUcmFja2luZyA9IGZhbHNlLCBpc0NvbXBvbmVudCA9IGZhbHNlLCBsb2MgPSBsb2NTdHViKSB7XHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICAgIGlmIChpc0Jsb2NrKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKE9QRU5fQkxPQ0spO1xyXG4gICAgICAgICAgICBjb250ZXh0LmhlbHBlcihnZXRWTm9kZUJsb2NrSGVscGVyKGNvbnRleHQuaW5TU1IsIGlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LmhlbHBlcihnZXRWTm9kZUhlbHBlcihjb250ZXh0LmluU1NSLCBpc0NvbXBvbmVudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aXZlcykge1xyXG4gICAgICAgICAgICBjb250ZXh0LmhlbHBlcihXSVRIX0RJUkVDVElWRVMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTMgLyogTm9kZVR5cGVzLlZOT0RFX0NBTEwgKi8sXHJcbiAgICAgICAgdGFnLFxyXG4gICAgICAgIHByb3BzLFxyXG4gICAgICAgIGNoaWxkcmVuLFxyXG4gICAgICAgIHBhdGNoRmxhZyxcclxuICAgICAgICBkeW5hbWljUHJvcHMsXHJcbiAgICAgICAgZGlyZWN0aXZlcyxcclxuICAgICAgICBpc0Jsb2NrLFxyXG4gICAgICAgIGRpc2FibGVUcmFja2luZyxcclxuICAgICAgICBpc0NvbXBvbmVudCxcclxuICAgICAgICBsb2NcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzLCBsb2MgPSBsb2NTdHViKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDE3IC8qIE5vZGVUeXBlcy5KU19BUlJBWV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBlbGVtZW50c1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMsIGxvYyA9IGxvY1N0dWIpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTUgLyogTm9kZVR5cGVzLkpTX09CSkVDVF9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBwcm9wZXJ0aWVzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdFByb3BlcnR5KGtleSwgdmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTYgLyogTm9kZVR5cGVzLkpTX1BST1BFUlRZICovLFxyXG4gICAgICAgIGxvYzogbG9jU3R1YixcclxuICAgICAgICBrZXk6IGlzU3RyaW5nKGtleSkgPyBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGtleSwgdHJ1ZSkgOiBrZXksXHJcbiAgICAgICAgdmFsdWVcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihjb250ZW50LCBpc1N0YXRpYyA9IGZhbHNlLCBsb2MgPSBsb2NTdHViLCBjb25zdFR5cGUgPSAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIGlzU3RhdGljLFxyXG4gICAgICAgIGNvbnN0VHlwZTogaXNTdGF0aWMgPyAzIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NUUklOR0lGWSAqLyA6IGNvbnN0VHlwZVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbnRlcnBvbGF0aW9uKGNvbnRlbnQsIGxvYykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiA1IC8qIE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBjb250ZW50OiBpc1N0cmluZyhjb250ZW50KVxyXG4gICAgICAgICAgICA/IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oY29udGVudCwgZmFsc2UsIGxvYylcclxuICAgICAgICAgICAgOiBjb250ZW50XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihjaGlsZHJlbiwgbG9jID0gbG9jU3R1Yikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBjaGlsZHJlblxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDYWxsRXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MgPSBbXSwgbG9jID0gbG9jU3R1Yikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGxvYyxcclxuICAgICAgICBjYWxsZWUsXHJcbiAgICAgICAgYXJndW1lbnRzOiBhcmdzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIHJldHVybnMgPSB1bmRlZmluZWQsIG5ld2xpbmUgPSBmYWxzZSwgaXNTbG90ID0gZmFsc2UsIGxvYyA9IGxvY1N0dWIpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTggLyogTm9kZVR5cGVzLkpTX0ZVTkNUSU9OX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgIHJldHVybnMsXHJcbiAgICAgICAgbmV3bGluZSxcclxuICAgICAgICBpc1Nsb3QsXHJcbiAgICAgICAgbG9jXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIG5ld2xpbmUgPSB0cnVlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDE5IC8qIE5vZGVUeXBlcy5KU19DT05ESVRJT05BTF9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIHRlc3QsXHJcbiAgICAgICAgY29uc2VxdWVudCxcclxuICAgICAgICBhbHRlcm5hdGUsXHJcbiAgICAgICAgbmV3bGluZSxcclxuICAgICAgICBsb2M6IGxvY1N0dWJcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVFeHByZXNzaW9uKGluZGV4LCB2YWx1ZSwgaXNWTm9kZSA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDIwIC8qIE5vZGVUeXBlcy5KU19DQUNIRV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGluZGV4LFxyXG4gICAgICAgIHZhbHVlLFxyXG4gICAgICAgIGlzVk5vZGUsXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUJsb2NrU3RhdGVtZW50KGJvZHkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMjEgLyogTm9kZVR5cGVzLkpTX0JMT0NLX1NUQVRFTUVOVCAqLyxcclxuICAgICAgICBib2R5LFxyXG4gICAgICAgIGxvYzogbG9jU3R1YlxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZUxpdGVyYWwoZWxlbWVudHMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMjIgLyogTm9kZVR5cGVzLkpTX1RFTVBMQVRFX0xJVEVSQUwgKi8sXHJcbiAgICAgICAgZWxlbWVudHMsXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUlmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAyMyAvKiBOb2RlVHlwZXMuSlNfSUZfU1RBVEVNRU5UICovLFxyXG4gICAgICAgIHRlc3QsXHJcbiAgICAgICAgY29uc2VxdWVudCxcclxuICAgICAgICBhbHRlcm5hdGUsXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKGxlZnQsIHJpZ2h0KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDI0IC8qIE5vZGVUeXBlcy5KU19BU1NJR05NRU5UX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbGVmdCxcclxuICAgICAgICByaWdodCxcclxuICAgICAgICBsb2M6IGxvY1N0dWJcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDI1IC8qIE5vZGVUeXBlcy5KU19TRVFVRU5DRV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgIGV4cHJlc3Npb25zLFxyXG4gICAgICAgIGxvYzogbG9jU3R1YlxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQocmV0dXJucykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAyNiAvKiBOb2RlVHlwZXMuSlNfUkVUVVJOX1NUQVRFTUVOVCAqLyxcclxuICAgICAgICByZXR1cm5zLFxyXG4gICAgICAgIGxvYzogbG9jU3R1YlxyXG4gICAgfTtcclxufVxuXG5jb25zdCBpc1N0YXRpY0V4cCA9IChwKSA9PiBwLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmIHAuaXNTdGF0aWM7XHJcbmNvbnN0IGlzQnVpbHRJblR5cGUgPSAodGFnLCBleHBlY3RlZCkgPT4gdGFnID09PSBleHBlY3RlZCB8fCB0YWcgPT09IGh5cGhlbmF0ZShleHBlY3RlZCk7XHJcbmZ1bmN0aW9uIGlzQ29yZUNvbXBvbmVudCh0YWcpIHtcclxuICAgIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgJ1RlbGVwb3J0JykpIHtcclxuICAgICAgICByZXR1cm4gVEVMRVBPUlQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgJ1N1c3BlbnNlJykpIHtcclxuICAgICAgICByZXR1cm4gU1VTUEVOU0U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgJ0tlZXBBbGl2ZScpKSB7XHJcbiAgICAgICAgcmV0dXJuIEtFRVBfQUxJVkU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgJ0Jhc2VUcmFuc2l0aW9uJykpIHtcclxuICAgICAgICByZXR1cm4gQkFTRV9UUkFOU0lUSU9OO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG5vbklkZW50aWZpZXJSRSA9IC9eXFxkfFteXFwkXFx3XS87XHJcbmNvbnN0IGlzU2ltcGxlSWRlbnRpZmllciA9IChuYW1lKSA9PiAhbm9uSWRlbnRpZmllclJFLnRlc3QobmFtZSk7XHJcbmNvbnN0IHZhbGlkRmlyc3RJZGVudENoYXJSRSA9IC9bQS1aYS16XyRcXHhBMC1cXHVGRkZGXS87XHJcbmNvbnN0IHZhbGlkSWRlbnRDaGFyUkUgPSAvW1xcLlxcP1xcdyRcXHhBMC1cXHVGRkZGXS87XHJcbmNvbnN0IHdoaXRlc3BhY2VSRSA9IC9cXHMrWy5bXVxccyp8XFxzKlsuW11cXHMrL2c7XHJcbi8qKlxyXG4gKiBTaW1wbGUgbGV4ZXIgdG8gY2hlY2sgaWYgYW4gZXhwcmVzc2lvbiBpcyBhIG1lbWJlciBleHByZXNzaW9uLiBUaGlzIGlzXHJcbiAqIGxheCBhbmQgb25seSBjaGVja3MgdmFsaWRpdHkgYXQgdGhlIHJvb3QgbGV2ZWwgKGkuZS4gZG9lcyBub3QgdmFsaWRhdGUgZXhwc1xyXG4gKiBpbnNpZGUgc3F1YXJlIGJyYWNrZXRzKSwgYnV0IGl0J3Mgb2sgc2luY2UgdGhlc2UgYXJlIG9ubHkgdXNlZCBvbiB0ZW1wbGF0ZVxyXG4gKiBleHByZXNzaW9ucyBhbmQgZmFsc2UgcG9zaXRpdmVzIGFyZSBpbnZhbGlkIGV4cHJlc3Npb25zIGluIHRoZSBmaXJzdCBwbGFjZS5cclxuICovXHJcbmNvbnN0IGlzTWVtYmVyRXhwcmVzc2lvbkJyb3dzZXIgPSAocGF0aCkgPT4ge1xyXG4gICAgLy8gcmVtb3ZlIHdoaXRlc3BhY2VzIGFyb3VuZCAuIG9yIFsgZmlyc3RcclxuICAgIHBhdGggPSBwYXRoLnRyaW0oKS5yZXBsYWNlKHdoaXRlc3BhY2VSRSwgcyA9PiBzLnRyaW0oKSk7XHJcbiAgICBsZXQgc3RhdGUgPSAwIC8qIE1lbWJlckV4cExleFN0YXRlLmluTWVtYmVyRXhwICovO1xyXG4gICAgbGV0IHN0YXRlU3RhY2sgPSBbXTtcclxuICAgIGxldCBjdXJyZW50T3BlbkJyYWNrZXRDb3VudCA9IDA7XHJcbiAgICBsZXQgY3VycmVudE9wZW5QYXJlbnNDb3VudCA9IDA7XHJcbiAgICBsZXQgY3VycmVudFN0cmluZ1R5cGUgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hhciA9IHBhdGguY2hhckF0KGkpO1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSAwIC8qIE1lbWJlckV4cExleFN0YXRlLmluTWVtYmVyRXhwICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICdbJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxIC8qIE1lbWJlckV4cExleFN0YXRlLmluQnJhY2tldHMgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5CcmFja2V0Q291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09ICcoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyIC8qIE1lbWJlckV4cExleFN0YXRlLmluUGFyZW5zICovO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuUGFyZW5zQ291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEoaSA9PT0gMCA/IHZhbGlkRmlyc3RJZGVudENoYXJSRSA6IHZhbGlkSWRlbnRDaGFyUkUpLnRlc3QoY2hhcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxIC8qIE1lbWJlckV4cExleFN0YXRlLmluQnJhY2tldHMgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gYCdgIHx8IGNoYXIgPT09IGBcImAgfHwgY2hhciA9PT0gJ2AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDMgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5TdHJpbmcgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmluZ1R5cGUgPSBjaGFyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gYFtgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5CcmFja2V0Q291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09IGBdYCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghLS1jdXJyZW50T3BlbkJyYWNrZXRDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMiAvKiBNZW1iZXJFeHBMZXhTdGF0ZS5pblBhcmVucyAqLzpcclxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSBgJ2AgfHwgY2hhciA9PT0gYFwiYCB8fCBjaGFyID09PSAnYCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLnB1c2goc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMyAvKiBNZW1iZXJFeHBMZXhTdGF0ZS5pblN0cmluZyAqLztcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyaW5nVHlwZSA9IGNoYXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSBgKGApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3BlblBhcmVuc0NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSBgKWApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZXhwIGVuZHMgYXMgYSBjYWxsIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHBhdGgubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghLS1jdXJyZW50T3BlblBhcmVuc0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzIC8qIE1lbWJlckV4cExleFN0YXRlLmluU3RyaW5nICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09IGN1cnJlbnRTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHJpbmdUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhY3VycmVudE9wZW5CcmFja2V0Q291bnQgJiYgIWN1cnJlbnRPcGVuUGFyZW5zQ291bnQ7XHJcbn07XHJcbmNvbnN0IGlzTWVtYmVyRXhwcmVzc2lvbk5vZGUgPSBOT09QXHJcbiAgICA7XHJcbmNvbnN0IGlzTWVtYmVyRXhwcmVzc2lvbiA9IGlzTWVtYmVyRXhwcmVzc2lvbkJyb3dzZXJcclxuICAgIDtcclxuZnVuY3Rpb24gZ2V0SW5uZXJSYW5nZShsb2MsIG9mZnNldCwgbGVuZ3RoKSB7XHJcbiAgICBjb25zdCBzb3VyY2UgPSBsb2Muc291cmNlLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcclxuICAgIGNvbnN0IG5ld0xvYyA9IHtcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgc3RhcnQ6IGFkdmFuY2VQb3NpdGlvbldpdGhDbG9uZShsb2Muc3RhcnQsIGxvYy5zb3VyY2UsIG9mZnNldCksXHJcbiAgICAgICAgZW5kOiBsb2MuZW5kXHJcbiAgICB9O1xyXG4gICAgaWYgKGxlbmd0aCAhPSBudWxsKSB7XHJcbiAgICAgICAgbmV3TG9jLmVuZCA9IGFkdmFuY2VQb3NpdGlvbldpdGhDbG9uZShsb2Muc3RhcnQsIGxvYy5zb3VyY2UsIG9mZnNldCArIGxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3TG9jO1xyXG59XHJcbmZ1bmN0aW9uIGFkdmFuY2VQb3NpdGlvbldpdGhDbG9uZShwb3MsIHNvdXJjZSwgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gc291cmNlLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGFkdmFuY2VQb3NpdGlvbldpdGhNdXRhdGlvbihleHRlbmQoe30sIHBvcyksIHNvdXJjZSwgbnVtYmVyT2ZDaGFyYWN0ZXJzKTtcclxufVxyXG4vLyBhZHZhbmNlIGJ5IG11dGF0aW9uIHdpdGhvdXQgY2xvbmluZyAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpLCBzaW5jZSB0aGlzXHJcbi8vIGdldHMgY2FsbGVkIGEgbG90IGluIHRoZSBwYXJzZXJcclxuZnVuY3Rpb24gYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uKHBvcywgc291cmNlLCBudW1iZXJPZkNoYXJhY3RlcnMgPSBzb3VyY2UubGVuZ3RoKSB7XHJcbiAgICBsZXQgbGluZXNDb3VudCA9IDA7XHJcbiAgICBsZXQgbGFzdE5ld0xpbmVQb3MgPSAtMTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFyYWN0ZXJzOyBpKyspIHtcclxuICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaSkgPT09IDEwIC8qIG5ld2xpbmUgY2hhciBjb2RlICovKSB7XHJcbiAgICAgICAgICAgIGxpbmVzQ291bnQrKztcclxuICAgICAgICAgICAgbGFzdE5ld0xpbmVQb3MgPSBpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHBvcy5vZmZzZXQgKz0gbnVtYmVyT2ZDaGFyYWN0ZXJzO1xyXG4gICAgcG9zLmxpbmUgKz0gbGluZXNDb3VudDtcclxuICAgIHBvcy5jb2x1bW4gPVxyXG4gICAgICAgIGxhc3ROZXdMaW5lUG9zID09PSAtMVxyXG4gICAgICAgICAgICA/IHBvcy5jb2x1bW4gKyBudW1iZXJPZkNoYXJhY3RlcnNcclxuICAgICAgICAgICAgOiBudW1iZXJPZkNoYXJhY3RlcnMgLSBsYXN0TmV3TGluZVBvcztcclxuICAgIHJldHVybiBwb3M7XHJcbn1cclxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbXNnKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmICghY29uZGl0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCBgdW5leHBlY3RlZCBjb21waWxlciBjb25kaXRpb25gKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBmaW5kRGlyKG5vZGUsIG5hbWUsIGFsbG93RW1wdHkgPSBmYWxzZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmXHJcbiAgICAgICAgICAgIChhbGxvd0VtcHR5IHx8IHAuZXhwKSAmJlxyXG4gICAgICAgICAgICAoaXNTdHJpbmcobmFtZSkgPyBwLm5hbWUgPT09IG5hbWUgOiBuYW1lLnRlc3QocC5uYW1lKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGZpbmRQcm9wKG5vZGUsIG5hbWUsIGR5bmFtaWNPbmx5ID0gZmFsc2UsIGFsbG93RW1wdHkgPSBmYWxzZSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovKSB7XHJcbiAgICAgICAgICAgIGlmIChkeW5hbWljT25seSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocC5uYW1lID09PSBuYW1lICYmIChwLnZhbHVlIHx8IGFsbG93RW1wdHkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwLm5hbWUgPT09ICdiaW5kJyAmJlxyXG4gICAgICAgICAgICAocC5leHAgfHwgYWxsb3dFbXB0eSkgJiZcclxuICAgICAgICAgICAgaXNTdGF0aWNBcmdPZihwLmFyZywgbmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzU3RhdGljQXJnT2YoYXJnLCBuYW1lKSB7XHJcbiAgICByZXR1cm4gISEoYXJnICYmIGlzU3RhdGljRXhwKGFyZykgJiYgYXJnLmNvbnRlbnQgPT09IG5hbWUpO1xyXG59XHJcbmZ1bmN0aW9uIGhhc0R5bmFtaWNLZXlWQmluZChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5wcm9wcy5zb21lKHAgPT4gcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICBwLm5hbWUgPT09ICdiaW5kJyAmJlxyXG4gICAgICAgICghcC5hcmcgfHwgLy8gdi1iaW5kPVwib2JqXCJcclxuICAgICAgICAgICAgcC5hcmcudHlwZSAhPT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gfHwgLy8gdi1iaW5kOltfY3R4LmZvb11cclxuICAgICAgICAgICAgIXAuYXJnLmlzU3RhdGljKSAvLyB2LWJpbmQ6W2Zvb11cclxuICAgICk7XHJcbn1cclxuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnR5cGUgPT09IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8gfHwgbm9kZS50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovO1xyXG59XHJcbmZ1bmN0aW9uIGlzVlNsb3QocCkge1xyXG4gICAgcmV0dXJuIHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIHAubmFtZSA9PT0gJ3Nsb3QnO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGVtcGxhdGVOb2RlKG5vZGUpIHtcclxuICAgIHJldHVybiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmIG5vZGUudGFnVHlwZSA9PT0gMyAvKiBFbGVtZW50VHlwZXMuVEVNUExBVEUgKi8pO1xyXG59XHJcbmZ1bmN0aW9uIGlzU2xvdE91dGxldChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmIG5vZGUudGFnVHlwZSA9PT0gMiAvKiBFbGVtZW50VHlwZXMuU0xPVCAqLztcclxufVxyXG5mdW5jdGlvbiBnZXRWTm9kZUhlbHBlcihzc3IsIGlzQ29tcG9uZW50KSB7XHJcbiAgICByZXR1cm4gc3NyIHx8IGlzQ29tcG9uZW50ID8gQ1JFQVRFX1ZOT0RFIDogQ1JFQVRFX0VMRU1FTlRfVk5PREU7XHJcbn1cclxuZnVuY3Rpb24gZ2V0Vk5vZGVCbG9ja0hlbHBlcihzc3IsIGlzQ29tcG9uZW50KSB7XHJcbiAgICByZXR1cm4gc3NyIHx8IGlzQ29tcG9uZW50ID8gQ1JFQVRFX0JMT0NLIDogQ1JFQVRFX0VMRU1FTlRfQkxPQ0s7XHJcbn1cclxuY29uc3QgcHJvcHNIZWxwZXJTZXQgPSBuZXcgU2V0KFtOT1JNQUxJWkVfUFJPUFMsIEdVQVJEX1JFQUNUSVZFX1BST1BTXSk7XHJcbmZ1bmN0aW9uIGdldFVubm9ybWFsaXplZFByb3BzKHByb3BzLCBjYWxsUGF0aCA9IFtdKSB7XHJcbiAgICBpZiAocHJvcHMgJiZcclxuICAgICAgICAhaXNTdHJpbmcocHJvcHMpICYmXHJcbiAgICAgICAgcHJvcHMudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IHByb3BzLmNhbGxlZTtcclxuICAgICAgICBpZiAoIWlzU3RyaW5nKGNhbGxlZSkgJiYgcHJvcHNIZWxwZXJTZXQuaGFzKGNhbGxlZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldFVubm9ybWFsaXplZFByb3BzKHByb3BzLmFyZ3VtZW50c1swXSwgY2FsbFBhdGguY29uY2F0KHByb3BzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtwcm9wcywgY2FsbFBhdGhdO1xyXG59XHJcbmZ1bmN0aW9uIGluamVjdFByb3Aobm9kZSwgcHJvcCwgY29udGV4dCkge1xyXG4gICAgbGV0IHByb3BzV2l0aEluamVjdGlvbjtcclxuICAgIC8qKlxyXG4gICAgICogMS4gbWVyZ2VQcm9wcyguLi4pXHJcbiAgICAgKiAyLiB0b0hhbmRsZXJzKC4uLilcclxuICAgICAqIDMuIG5vcm1hbGl6ZVByb3BzKC4uLilcclxuICAgICAqIDQuIG5vcm1hbGl6ZVByb3BzKGd1YXJkUmVhY3RpdmVQcm9wcyguLi4pKVxyXG4gICAgICpcclxuICAgICAqIHdlIG5lZWQgdG8gZ2V0IHRoZSByZWFsIHByb3BzIGJlZm9yZSBub3JtYWxpemF0aW9uXHJcbiAgICAgKi9cclxuICAgIGxldCBwcm9wcyA9IG5vZGUudHlwZSA9PT0gMTMgLyogTm9kZVR5cGVzLlZOT0RFX0NBTEwgKi8gPyBub2RlLnByb3BzIDogbm9kZS5hcmd1bWVudHNbMl07XHJcbiAgICBsZXQgY2FsbFBhdGggPSBbXTtcclxuICAgIGxldCBwYXJlbnRDYWxsO1xyXG4gICAgaWYgKHByb3BzICYmXHJcbiAgICAgICAgIWlzU3RyaW5nKHByb3BzKSAmJlxyXG4gICAgICAgIHByb3BzLnR5cGUgPT09IDE0IC8qIE5vZGVUeXBlcy5KU19DQUxMX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBjb25zdCByZXQgPSBnZXRVbm5vcm1hbGl6ZWRQcm9wcyhwcm9wcyk7XHJcbiAgICAgICAgcHJvcHMgPSByZXRbMF07XHJcbiAgICAgICAgY2FsbFBhdGggPSByZXRbMV07XHJcbiAgICAgICAgcGFyZW50Q2FsbCA9IGNhbGxQYXRoW2NhbGxQYXRoLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb3BzID09IG51bGwgfHwgaXNTdHJpbmcocHJvcHMpKSB7XHJcbiAgICAgICAgcHJvcHNXaXRoSW5qZWN0aW9uID0gY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihbcHJvcF0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIC8vIG1lcmdlZCBwcm9wcy4uLiBhZGQgb3Vyc1xyXG4gICAgICAgIC8vIG9ubHkgaW5qZWN0IGtleSB0byBvYmplY3QgbGl0ZXJhbCBpZiBpdCdzIHRoZSBmaXJzdCBhcmd1bWVudCBzbyB0aGF0XHJcbiAgICAgICAgLy8gaWYgZG9lc24ndCBvdmVycmlkZSB1c2VyIHByb3ZpZGVkIGtleXNcclxuICAgICAgICBjb25zdCBmaXJzdCA9IHByb3BzLmFyZ3VtZW50c1swXTtcclxuICAgICAgICBpZiAoIWlzU3RyaW5nKGZpcnN0KSAmJiBmaXJzdC50eXBlID09PSAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgZmlyc3QucHJvcGVydGllcy51bnNoaWZ0KHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHByb3BzLmNhbGxlZSA9PT0gVE9fSEFORExFUlMpIHtcclxuICAgICAgICAgICAgICAgIC8vICMyMzY2XHJcbiAgICAgICAgICAgICAgICBwcm9wc1dpdGhJbmplY3Rpb24gPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihNRVJHRV9QUk9QUyksIFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uKFtwcm9wXSksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHNcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuYXJndW1lbnRzLnVuc2hpZnQoY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihbcHJvcF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAhcHJvcHNXaXRoSW5qZWN0aW9uICYmIChwcm9wc1dpdGhJbmplY3Rpb24gPSBwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy50eXBlID09PSAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBsZXQgYWxyZWFkeUV4aXN0cyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNoZWNrIGV4aXN0aW5nIGtleSB0byBhdm9pZCBvdmVycmlkaW5nIHVzZXIgcHJvdmlkZWQga2V5c1xyXG4gICAgICAgIGlmIChwcm9wLmtleS50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wS2V5TmFtZSA9IHByb3Aua2V5LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGFscmVhZHlFeGlzdHMgPSBwcm9wcy5wcm9wZXJ0aWVzLnNvbWUocCA9PiBwLmtleS50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyAmJlxyXG4gICAgICAgICAgICAgICAgcC5rZXkuY29udGVudCA9PT0gcHJvcEtleU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpIHtcclxuICAgICAgICAgICAgcHJvcHMucHJvcGVydGllcy51bnNoaWZ0KHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wc1dpdGhJbmplY3Rpb24gPSBwcm9wcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIHNpbmdsZSB2LWJpbmQgd2l0aCBleHByZXNzaW9uLCByZXR1cm4gYSBtZXJnZWQgcmVwbGFjZW1lbnRcclxuICAgICAgICBwcm9wc1dpdGhJbmplY3Rpb24gPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihNRVJHRV9QUk9QUyksIFtcclxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihbcHJvcF0pLFxyXG4gICAgICAgICAgICBwcm9wc1xyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIG5lc3RlZCBoZWxwZXIgY2FsbCwgZS5nLiBgbm9ybWFsaXplUHJvcHMoZ3VhcmRSZWFjdGl2ZVByb3BzKHByb3BzKSlgLFxyXG4gICAgICAgIC8vIGl0IHdpbGwgYmUgcmV3cml0dGVuIGFzIGBub3JtYWxpemVQcm9wcyhtZXJnZVByb3BzKHsga2V5OiAwIH0sIHByb3BzKSlgLFxyXG4gICAgICAgIC8vIHRoZSBgZ3VhcmRSZWFjdGl2ZVByb3BzYCB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWRcclxuICAgICAgICBpZiAocGFyZW50Q2FsbCAmJiBwYXJlbnRDYWxsLmNhbGxlZSA9PT0gR1VBUkRfUkVBQ1RJVkVfUFJPUFMpIHtcclxuICAgICAgICAgICAgcGFyZW50Q2FsbCA9IGNhbGxQYXRoW2NhbGxQYXRoLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudENhbGwpIHtcclxuICAgICAgICAgICAgcGFyZW50Q2FsbC5hcmd1bWVudHNbMF0gPSBwcm9wc1dpdGhJbmplY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBub2RlLnByb3BzID0gcHJvcHNXaXRoSW5qZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChwYXJlbnRDYWxsKSB7XHJcbiAgICAgICAgICAgIHBhcmVudENhbGwuYXJndW1lbnRzWzBdID0gcHJvcHNXaXRoSW5qZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMl0gPSBwcm9wc1dpdGhJbmplY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRvVmFsaWRBc3NldElkKG5hbWUsIHR5cGUpIHtcclxuICAgIC8vIHNlZSBpc3N1ZSM0NDIyLCB3ZSBuZWVkIGFkZGluZyBpZGVudGlmaWVyIG9uIHZhbGlkQXNzZXRJZCBpZiB2YXJpYWJsZSBgbmFtZWAgaGFzIHNwZWNpZmljIGNoYXJhY3RlclxyXG4gICAgcmV0dXJuIGBfJHt0eXBlfV8ke25hbWUucmVwbGFjZSgvW15cXHddL2csIChzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNlYXJjaFZhbHVlID09PSAnLScgPyAnXycgOiBuYW1lLmNoYXJDb2RlQXQocmVwbGFjZVZhbHVlKS50b1N0cmluZygpO1xyXG4gICAgfSl9YDtcclxufVxyXG4vLyBDaGVjayBpZiBhIG5vZGUgY29udGFpbnMgZXhwcmVzc2lvbnMgdGhhdCByZWZlcmVuY2UgY3VycmVudCBjb250ZXh0IHNjb3BlIGlkc1xyXG5mdW5jdGlvbiBoYXNTY29wZVJlZihub2RlLCBpZHMpIHtcclxuICAgIGlmICghbm9kZSB8fCBPYmplY3Qua2V5cyhpZHMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovOlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBub2RlLnByb3BzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGhhc1Njb3BlUmVmKHAuYXJnLCBpZHMpIHx8IGhhc1Njb3BlUmVmKHAuZXhwLCBpZHMpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLnNvbWUoYyA9PiBoYXNTY29wZVJlZihjLCBpZHMpKTtcclxuICAgICAgICBjYXNlIDExIC8qIE5vZGVUeXBlcy5GT1IgKi86XHJcbiAgICAgICAgICAgIGlmIChoYXNTY29wZVJlZihub2RlLnNvdXJjZSwgaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uc29tZShjID0+IGhhc1Njb3BlUmVmKGMsIGlkcykpO1xyXG4gICAgICAgIGNhc2UgOSAvKiBOb2RlVHlwZXMuSUYgKi86XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLmJyYW5jaGVzLnNvbWUoYiA9PiBoYXNTY29wZVJlZihiLCBpZHMpKTtcclxuICAgICAgICBjYXNlIDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi86XHJcbiAgICAgICAgICAgIGlmIChoYXNTY29wZVJlZihub2RlLmNvbmRpdGlvbiwgaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uc29tZShjID0+IGhhc1Njb3BlUmVmKGMsIGlkcykpO1xyXG4gICAgICAgIGNhc2UgNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIHJldHVybiAoIW5vZGUuaXNTdGF0aWMgJiZcclxuICAgICAgICAgICAgICAgIGlzU2ltcGxlSWRlbnRpZmllcihub2RlLmNvbnRlbnQpICYmXHJcbiAgICAgICAgICAgICAgICAhIWlkc1tub2RlLmNvbnRlbnRdKTtcclxuICAgICAgICBjYXNlIDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLnNvbWUoYyA9PiBpc09iamVjdChjKSAmJiBoYXNTY29wZVJlZihjLCBpZHMpKTtcclxuICAgICAgICBjYXNlIDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi86XHJcbiAgICAgICAgY2FzZSAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovOlxyXG4gICAgICAgICAgICByZXR1cm4gaGFzU2NvcGVSZWYobm9kZS5jb250ZW50LCBpZHMpO1xyXG4gICAgICAgIGNhc2UgMiAvKiBOb2RlVHlwZXMuVEVYVCAqLzpcclxuICAgICAgICBjYXNlIDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi86XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSA7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRNZW1vZWRWTm9kZUNhbGwobm9kZSkge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLyAmJiBub2RlLmNhbGxlZSA9PT0gV0lUSF9NRU1PKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuYXJndW1lbnRzWzFdLnJldHVybnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBtYWtlQmxvY2sobm9kZSwgeyBoZWxwZXIsIHJlbW92ZUhlbHBlciwgaW5TU1IgfSkge1xyXG4gICAgaWYgKCFub2RlLmlzQmxvY2spIHtcclxuICAgICAgICBub2RlLmlzQmxvY2sgPSB0cnVlO1xyXG4gICAgICAgIHJlbW92ZUhlbHBlcihnZXRWTm9kZUhlbHBlcihpblNTUiwgbm9kZS5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgIGhlbHBlcihPUEVOX0JMT0NLKTtcclxuICAgICAgICBoZWxwZXIoZ2V0Vk5vZGVCbG9ja0hlbHBlcihpblNTUiwgbm9kZS5pc0NvbXBvbmVudCkpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IGRlcHJlY2F0aW9uRGF0YSA9IHtcclxuICAgIFtcIkNPTVBJTEVSX0lTX09OX0VMRU1FTlRcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSVNfT05fRUxFTUVOVCAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgUGxhdGZvcm0tbmF0aXZlIGVsZW1lbnRzIHdpdGggXCJpc1wiIHByb3Agd2lsbCBubyBsb25nZXIgYmUgYCArXHJcbiAgICAgICAgICAgIGB0cmVhdGVkIGFzIGNvbXBvbmVudHMgaW4gVnVlIDMgdW5sZXNzIHRoZSBcImlzXCIgdmFsdWUgaXMgZXhwbGljaXRseSBgICtcclxuICAgICAgICAgICAgYHByZWZpeGVkIHdpdGggXCJ2dWU6XCIuYCxcclxuICAgICAgICBsaW5rOiBgaHR0cHM6Ly92My1taWdyYXRpb24udnVlanMub3JnL2JyZWFraW5nLWNoYW5nZXMvY3VzdG9tLWVsZW1lbnRzLWludGVyb3AuaHRtbGBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9WX0JJTkRfU1lOQ1wiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfU1lOQyAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBrZXkgPT4gYC5zeW5jIG1vZGlmaWVyIGZvciB2LWJpbmQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHYtbW9kZWwgd2l0aCBgICtcclxuICAgICAgICAgICAgYGFyZ3VtZW50IGluc3RlYWQuIFxcYHYtYmluZDoke2tleX0uc3luY1xcYCBzaG91bGQgYmUgY2hhbmdlZCB0byBgICtcclxuICAgICAgICAgICAgYFxcYHYtbW9kZWw6JHtrZXl9XFxgLmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL3YtbW9kZWwuaHRtbGBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9WX0JJTkRfUFJPUFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfUFJPUCAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgLnByb3AgbW9kaWZpZXIgZm9yIHYtYmluZCBoYXMgYmVlbiByZW1vdmVkIGFuZCBubyBsb25nZXIgbmVjZXNzYXJ5LiBgICtcclxuICAgICAgICAgICAgYFZ1ZSAzIHdpbGwgYXV0b21hdGljYWxseSBzZXQgYSBiaW5kaW5nIGFzIERPTSBwcm9wZXJ0eSB3aGVuIGFwcHJvcHJpYXRlLmBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9WX0JJTkRfT0JKRUNUX09SREVSXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9PQkpFQ1RfT1JERVIgKi9dOiB7XHJcbiAgICAgICAgbWVzc2FnZTogYHYtYmluZD1cIm9ialwiIHVzYWdlIGlzIG5vdyBvcmRlciBzZW5zaXRpdmUgYW5kIGJlaGF2ZXMgbGlrZSBKYXZhU2NyaXB0IGAgK1xyXG4gICAgICAgICAgICBgb2JqZWN0IHNwcmVhZDogaXQgd2lsbCBub3cgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIG5vbi1tZXJnZWFibGUgYXR0cmlidXRlIGAgK1xyXG4gICAgICAgICAgICBgdGhhdCBhcHBlYXJzIGJlZm9yZSB2LWJpbmQgaW4gdGhlIGNhc2Ugb2YgY29uZmxpY3QuIGAgK1xyXG4gICAgICAgICAgICBgVG8gcmV0YWluIDIueCBiZWhhdmlvciwgbW92ZSB2LWJpbmQgdG8gbWFrZSBpdCB0aGUgZmlyc3QgYXR0cmlidXRlLiBgICtcclxuICAgICAgICAgICAgYFlvdSBjYW4gYWxzbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaWYgdGhlIHVzYWdlIGlzIGludGVuZGVkLmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL3YtYmluZC5odG1sYFxyXG4gICAgfSxcclxuICAgIFtcIkNPTVBJTEVSX1ZfT05fTkFUSVZFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfT05fTkFUSVZFICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGhhcyBiZWVuIHJlbW92ZWQgYXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5gLFxyXG4gICAgICAgIGxpbms6IGBodHRwczovL3YzLW1pZ3JhdGlvbi52dWVqcy5vcmcvYnJlYWtpbmctY2hhbmdlcy92LW9uLW5hdGl2ZS1tb2RpZmllci1yZW1vdmVkLmh0bWxgXHJcbiAgICB9LFxyXG4gICAgW1wiQ09NUElMRVJfVl9JRl9WX0ZPUl9QUkVDRURFTkNFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfSUZfVl9GT1JfUFJFQ0VERU5DRSAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgdi1pZiAvIHYtZm9yIHByZWNlZGVuY2Ugd2hlbiB1c2VkIG9uIHRoZSBzYW1lIGVsZW1lbnQgaGFzIGNoYW5nZWQgYCArXHJcbiAgICAgICAgICAgIGBpbiBWdWUgMzogdi1pZiBub3cgdGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgYW5kIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYCArXHJcbiAgICAgICAgICAgIGBhY2Nlc3MgdG8gdi1mb3Igc2NvcGUgdmFyaWFibGVzLiBJdCBpcyBiZXN0IHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYCArXHJcbiAgICAgICAgICAgIGB3aXRoIDx0ZW1wbGF0ZT4gdGFncyBvciB1c2UgYSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGZpbHRlcnMgdi1mb3IgYCArXHJcbiAgICAgICAgICAgIGBkYXRhIHNvdXJjZS5gLFxyXG4gICAgICAgIGxpbms6IGBodHRwczovL3YzLW1pZ3JhdGlvbi52dWVqcy5vcmcvYnJlYWtpbmctY2hhbmdlcy92LWlmLXYtZm9yLmh0bWxgXHJcbiAgICB9LFxyXG4gICAgW1wiQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX05BVElWRV9URU1QTEFURSAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgPHRlbXBsYXRlPiB3aXRoIG5vIHNwZWNpYWwgZGlyZWN0aXZlcyB3aWxsIHJlbmRlciBhcyBhIG5hdGl2ZSB0ZW1wbGF0ZSBgICtcclxuICAgICAgICAgICAgYGVsZW1lbnQgaW5zdGVhZCBvZiBpdHMgaW5uZXIgY29udGVudCBpbiBWdWUgMy5gXHJcbiAgICB9LFxyXG4gICAgW1wiQ09NUElMRVJfSU5MSU5FX1RFTVBMQVRFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX0lOTElORV9URU1QTEFURSAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgXCJpbmxpbmUtdGVtcGxhdGVcIiBoYXMgYmVlbiByZW1vdmVkIGluIFZ1ZSAzLmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL2lubGluZS10ZW1wbGF0ZS1hdHRyaWJ1dGUuaHRtbGBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9GSUxURVJcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfRklMVEVSUyAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgZmlsdGVycyBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBWdWUgMy4gYCArXHJcbiAgICAgICAgICAgIGBUaGUgXCJ8XCIgc3ltYm9sIHdpbGwgYmUgdHJlYXRlZCBhcyBuYXRpdmUgSmF2YVNjcmlwdCBiaXR3aXNlIE9SIG9wZXJhdG9yLiBgICtcclxuICAgICAgICAgICAgYFVzZSBtZXRob2QgY2FsbHMgb3IgY29tcHV0ZWQgcHJvcGVydGllcyBpbnN0ZWFkLmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL2ZpbHRlcnMuaHRtbGBcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gZ2V0Q29tcGF0VmFsdWUoa2V5LCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBjb250ZXh0Lm9wdGlvbnNcclxuICAgICAgICA/IGNvbnRleHQub3B0aW9ucy5jb21wYXRDb25maWdcclxuICAgICAgICA6IGNvbnRleHQuY29tcGF0Q29uZmlnO1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb25maWcgJiYgY29uZmlnW2tleV07XHJcbiAgICBpZiAoa2V5ID09PSAnTU9ERScpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgfHwgMzsgLy8gY29tcGlsZXIgZGVmYXVsdHMgdG8gdjMgYmVoYXZpb3JcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc0NvbXBhdEVuYWJsZWQoa2V5LCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBtb2RlID0gZ2V0Q29tcGF0VmFsdWUoJ01PREUnLCBjb250ZXh0KTtcclxuICAgIGNvbnN0IHZhbHVlID0gZ2V0Q29tcGF0VmFsdWUoa2V5LCBjb250ZXh0KTtcclxuICAgIC8vIGluIHYzIG1vZGUsIG9ubHkgZW5hYmxlIGlmIGV4cGxpY2l0bHkgc2V0IHRvIHRydWVcclxuICAgIC8vIG90aGVyd2lzZSBlbmFibGUgZm9yIGFueSBub24tZmFsc2UgdmFsdWVcclxuICAgIHJldHVybiBtb2RlID09PSAzID8gdmFsdWUgPT09IHRydWUgOiB2YWx1ZSAhPT0gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tDb21wYXRFbmFibGVkKGtleSwgY29udGV4dCwgbG9jLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gaXNDb21wYXRFbmFibGVkKGtleSwgY29udGV4dCk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGVuYWJsZWQpIHtcclxuICAgICAgICB3YXJuRGVwcmVjYXRpb24oa2V5LCBjb250ZXh0LCBsb2MsIC4uLmFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuYWJsZWQ7XHJcbn1cclxuZnVuY3Rpb24gd2FybkRlcHJlY2F0aW9uKGtleSwgY29udGV4dCwgbG9jLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCB2YWwgPSBnZXRDb21wYXRWYWx1ZShrZXksIGNvbnRleHQpO1xyXG4gICAgaWYgKHZhbCA9PT0gJ3N1cHByZXNzLXdhcm5pbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBtZXNzYWdlLCBsaW5rIH0gPSBkZXByZWNhdGlvbkRhdGFba2V5XTtcclxuICAgIGNvbnN0IG1zZyA9IGAoZGVwcmVjYXRpb24gJHtrZXl9KSAke3R5cGVvZiBtZXNzYWdlID09PSAnZnVuY3Rpb24nID8gbWVzc2FnZSguLi5hcmdzKSA6IG1lc3NhZ2V9JHtsaW5rID8gYFxcbiAgRGV0YWlsczogJHtsaW5rfWAgOiBgYH1gO1xyXG4gICAgY29uc3QgZXJyID0gbmV3IFN5bnRheEVycm9yKG1zZyk7XHJcbiAgICBlcnIuY29kZSA9IGtleTtcclxuICAgIGlmIChsb2MpXHJcbiAgICAgICAgZXJyLmxvYyA9IGxvYztcclxuICAgIGNvbnRleHQub25XYXJuKGVycik7XHJcbn1cblxuLy8gVGhlIGRlZmF1bHQgZGVjb2RlciBvbmx5IHByb3ZpZGVzIGVzY2FwZXMgZm9yIGNoYXJhY3RlcnMgcmVzZXJ2ZWQgYXMgcGFydCBvZlxyXG4vLyB0aGUgdGVtcGxhdGUgc3ludGF4LCBhbmQgaXMgb25seSB1c2VkIGlmIHRoZSBjdXN0b20gcmVuZGVyZXIgZGlkIG5vdCBwcm92aWRlXHJcbi8vIGEgcGxhdGZvcm0tc3BlY2lmaWMgZGVjb2Rlci5cclxuY29uc3QgZGVjb2RlUkUgPSAvJihndHxsdHxhbXB8YXBvc3xxdW90KTsvZztcclxuY29uc3QgZGVjb2RlTWFwID0ge1xyXG4gICAgZ3Q6ICc+JyxcclxuICAgIGx0OiAnPCcsXHJcbiAgICBhbXA6ICcmJyxcclxuICAgIGFwb3M6IFwiJ1wiLFxyXG4gICAgcXVvdDogJ1wiJ1xyXG59O1xyXG5jb25zdCBkZWZhdWx0UGFyc2VyT3B0aW9ucyA9IHtcclxuICAgIGRlbGltaXRlcnM6IFtge3tgLCBgfX1gXSxcclxuICAgIGdldE5hbWVzcGFjZTogKCkgPT4gMCAvKiBOYW1lc3BhY2VzLkhUTUwgKi8sXHJcbiAgICBnZXRUZXh0TW9kZTogKCkgPT4gMCAvKiBUZXh0TW9kZXMuREFUQSAqLyxcclxuICAgIGlzVm9pZFRhZzogTk8sXHJcbiAgICBpc1ByZVRhZzogTk8sXHJcbiAgICBpc0N1c3RvbUVsZW1lbnQ6IE5PLFxyXG4gICAgZGVjb2RlRW50aXRpZXM6IChyYXdUZXh0KSA9PiByYXdUZXh0LnJlcGxhY2UoZGVjb2RlUkUsIChfLCBwMSkgPT4gZGVjb2RlTWFwW3AxXSksXHJcbiAgICBvbkVycm9yOiBkZWZhdWx0T25FcnJvcixcclxuICAgIG9uV2FybjogZGVmYXVsdE9uV2FybixcclxuICAgIGNvbW1lbnRzOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxufTtcclxuZnVuY3Rpb24gYmFzZVBhcnNlKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZVBhcnNlckNvbnRleHQoY29udGVudCwgb3B0aW9ucyk7XHJcbiAgICBjb25zdCBzdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIHJldHVybiBjcmVhdGVSb290KHBhcnNlQ2hpbGRyZW4oY29udGV4dCwgMCAvKiBUZXh0TW9kZXMuREFUQSAqLywgW10pLCBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVQYXJzZXJDb250ZXh0KGNvbnRlbnQsIHJhd09wdGlvbnMpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRQYXJzZXJPcHRpb25zKTtcclxuICAgIGxldCBrZXk7XHJcbiAgICBmb3IgKGtleSBpbiByYXdPcHRpb25zKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIG9wdGlvbnNba2V5XSA9XHJcbiAgICAgICAgICAgIHJhd09wdGlvbnNba2V5XSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRQYXJzZXJPcHRpb25zW2tleV1cclxuICAgICAgICAgICAgICAgIDogcmF3T3B0aW9uc1trZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgIGNvbHVtbjogMSxcclxuICAgICAgICBsaW5lOiAxLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBvcmlnaW5hbFNvdXJjZTogY29udGVudCxcclxuICAgICAgICBzb3VyY2U6IGNvbnRlbnQsXHJcbiAgICAgICAgaW5QcmU6IGZhbHNlLFxyXG4gICAgICAgIGluVlByZTogZmFsc2UsXHJcbiAgICAgICAgb25XYXJuOiBvcHRpb25zLm9uV2FyblxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZUNoaWxkcmVuKGNvbnRleHQsIG1vZGUsIGFuY2VzdG9ycykge1xyXG4gICAgY29uc3QgcGFyZW50ID0gbGFzdChhbmNlc3RvcnMpO1xyXG4gICAgY29uc3QgbnMgPSBwYXJlbnQgPyBwYXJlbnQubnMgOiAwIC8qIE5hbWVzcGFjZXMuSFRNTCAqLztcclxuICAgIGNvbnN0IG5vZGVzID0gW107XHJcbiAgICB3aGlsZSAoIWlzRW5kKGNvbnRleHQsIG1vZGUsIGFuY2VzdG9ycykpIHtcclxuICAgICAgICBjb25zdCBzID0gY29udGV4dC5zb3VyY2U7XHJcbiAgICAgICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG1vZGUgPT09IDAgLyogVGV4dE1vZGVzLkRBVEEgKi8gfHwgbW9kZSA9PT0gMSAvKiBUZXh0TW9kZXMuUkNEQVRBICovKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGV4dC5pblZQcmUgJiYgc3RhcnRzV2l0aChzLCBjb250ZXh0Lm9wdGlvbnMuZGVsaW1pdGVyc1swXSkpIHtcclxuICAgICAgICAgICAgICAgIC8vICd7eydcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUludGVycG9sYXRpb24oY29udGV4dCwgbW9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gMCAvKiBUZXh0TW9kZXMuREFUQSAqLyAmJiBzWzBdID09PSAnPCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCN0YWctb3Blbi1zdGF0ZVxyXG4gICAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDUgLyogRXJyb3JDb2Rlcy5FT0ZfQkVGT1JFX1RBR19OQU1FICovLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT09ICchJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNtYXJrdXAtZGVjbGFyYXRpb24tb3Blbi1zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHMsICc8IS0tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlQ29tbWVudChjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChzLCAnPCFET0NUWVBFJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIERPQ1RZUEUgYnkgYSBsaW1pdGF0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0c1dpdGgocywgJzwhW0NEQVRBWycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChucyAhPT0gMCAvKiBOYW1lc3BhY2VzLkhUTUwgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUNEQVRBKGNvbnRleHQsIGFuY2VzdG9ycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMSAvKiBFcnJvckNvZGVzLkNEQVRBX0lOX0hUTUxfQ09OVEVOVCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxMSAvKiBFcnJvckNvZGVzLklOQ09SUkVDVExZX09QRU5FRF9DT01NRU5UICovKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlQm9ndXNDb21tZW50KGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNlbmQtdGFnLW9wZW4tc3RhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAocy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDUgLyogRXJyb3JDb2Rlcy5FT0ZfQkVGT1JFX1RBR19OQU1FICovLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc1syXSA9PT0gJz4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxNCAvKiBFcnJvckNvZGVzLk1JU1NJTkdfRU5EX1RBR19OQU1FICovLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoL1thLXpdL2kudGVzdChzWzJdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMjMgLyogRXJyb3JDb2Rlcy5YX0lOVkFMSURfRU5EX1RBRyAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGFnKGNvbnRleHQsIDEgLyogVGFnVHlwZS5FbmQgKi8sIHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDEyIC8qIEVycm9yQ29kZXMuSU5WQUxJRF9GSVJTVF9DSEFSQUNURVJfT0ZfVEFHX05BTUUgKi8sIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1thLXpdL2kudGVzdChzWzFdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUVsZW1lbnQoY29udGV4dCwgYW5jZXN0b3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAyLnggPHRlbXBsYXRlPiB3aXRoIG5vIGRpcmVjdGl2ZSBjb21wYXRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX05BVElWRV9URU1QTEFURSAqLywgY29udGV4dCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRhZyA9PT0gJ3RlbXBsYXRlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhbm9kZS5wcm9wcy5zb21lKHAgPT4gcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3BlY2lhbFRlbXBsYXRlRGlyZWN0aXZlKHAubmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkRlcHJlY2F0aW9uKFwiQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX05BVElWRV9URU1QTEFURSAqLywgY29udGV4dCwgbm9kZS5sb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzWzFdID09PSAnPycpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMjEgLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX1FVRVNUSU9OX01BUktfSU5TVEVBRF9PRl9UQUdfTkFNRSAqLywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlQm9ndXNDb21tZW50KGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDEyIC8qIEVycm9yQ29kZXMuSU5WQUxJRF9GSVJTVF9DSEFSQUNURVJfT0ZfVEFHX05BTUUgKi8sIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbm9kZSkge1xyXG4gICAgICAgICAgICBub2RlID0gcGFyc2VUZXh0KGNvbnRleHQsIG1vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNBcnJheShub2RlKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHB1c2hOb2RlKG5vZGVzLCBub2RlW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcHVzaE5vZGUobm9kZXMsIG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFdoaXRlc3BhY2UgaGFuZGxpbmcgc3RyYXRlZ3kgbGlrZSB2MlxyXG4gICAgbGV0IHJlbW92ZWRXaGl0ZXNwYWNlID0gZmFsc2U7XHJcbiAgICBpZiAobW9kZSAhPT0gMiAvKiBUZXh0TW9kZXMuUkFXVEVYVCAqLyAmJiBtb2RlICE9PSAxIC8qIFRleHRNb2Rlcy5SQ0RBVEEgKi8pIHtcclxuICAgICAgICBjb25zdCBzaG91bGRDb25kZW5zZSA9IGNvbnRleHQub3B0aW9ucy53aGl0ZXNwYWNlICE9PSAncHJlc2VydmUnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuaW5QcmUgJiYgbm9kZS50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9bXlxcdFxcclxcblxcZiBdLy50ZXN0KG5vZGUuY29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gbm9kZXNbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBub2Rlc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGlmOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIC0gdGhlIHdoaXRlc3BhY2UgaXMgdGhlIGZpcnN0IG9yIGxhc3Qgbm9kZSwgb3I6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLSAoY29uZGVuc2UgbW9kZSkgdGhlIHdoaXRlc3BhY2UgaXMgYWRqYWNlbnQgdG8gYSBjb21tZW50LCBvcjpcclxuICAgICAgICAgICAgICAgICAgICAvLyAtIChjb25kZW5zZSBtb2RlKSB0aGUgd2hpdGVzcGFjZSBpcyBiZXR3ZWVuIHR3byBlbGVtZW50cyBBTkQgY29udGFpbnMgbmV3bGluZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhbmV4dCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2hvdWxkQ29uZGVuc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2LnR5cGUgPT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnR5cGUgPT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldi50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvW1xcclxcbl0vLnRlc3Qobm9kZS5jb250ZW50KSkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkV2hpdGVzcGFjZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHdoaXRlc3BhY2UgaXMgY29uZGVuc2VkIGludG8gYSBzaW5nbGUgc3BhY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb250ZW50ID0gJyAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZENvbmRlbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgY29uc2VjdXRpdmUgd2hpdGVzcGFjZXMgaW4gdGV4dCBhcmUgY29uZGVuc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZG93biB0byBhIHNpbmdsZSBzcGFjZS5cclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnRlbnQgPSBub2RlLmNvbnRlbnQucmVwbGFjZSgvW1xcdFxcclxcblxcZiBdKy9nLCAnICcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBjb21tZW50IG5vZGVzIGlmIGRlc2lyZWQgYnkgY29uZmlndXJhdGlvbi5cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovICYmICFjb250ZXh0Lm9wdGlvbnMuY29tbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZWRXaGl0ZXNwYWNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIG5vZGVzW2ldID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udGV4dC5pblByZSAmJiBwYXJlbnQgJiYgY29udGV4dC5vcHRpb25zLmlzUHJlVGFnKHBhcmVudC50YWcpKSB7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBsZWFkaW5nIG5ld2xpbmUgcGVyIGh0bWwgc3BlY1xyXG4gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9ncm91cGluZy1jb250ZW50Lmh0bWwjdGhlLXByZS1lbGVtZW50XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbm9kZXNbMF07XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCAmJiBmaXJzdC50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovKSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdC5jb250ZW50ID0gZmlyc3QuY29udGVudC5yZXBsYWNlKC9eXFxyP1xcbi8sICcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZW1vdmVkV2hpdGVzcGFjZSA/IG5vZGVzLmZpbHRlcihCb29sZWFuKSA6IG5vZGVzO1xyXG59XHJcbmZ1bmN0aW9uIHB1c2hOb2RlKG5vZGVzLCBub2RlKSB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovKSB7XHJcbiAgICAgICAgY29uc3QgcHJldiA9IGxhc3Qobm9kZXMpO1xyXG4gICAgICAgIC8vIE1lcmdlIGlmIGJvdGggdGhpcyBhbmQgdGhlIHByZXZpb3VzIG5vZGUgYXJlIHRleHQgYW5kIHRob3NlIGFyZVxyXG4gICAgICAgIC8vIGNvbnNlY3V0aXZlLiBUaGlzIGhhcHBlbnMgZm9yIGNhc2VzIGxpa2UgXCJhIDwgYlwiLlxyXG4gICAgICAgIGlmIChwcmV2ICYmXHJcbiAgICAgICAgICAgIHByZXYudHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyAmJlxyXG4gICAgICAgICAgICBwcmV2LmxvYy5lbmQub2Zmc2V0ID09PSBub2RlLmxvYy5zdGFydC5vZmZzZXQpIHtcclxuICAgICAgICAgICAgcHJldi5jb250ZW50ICs9IG5vZGUuY29udGVudDtcclxuICAgICAgICAgICAgcHJldi5sb2MuZW5kID0gbm9kZS5sb2MuZW5kO1xyXG4gICAgICAgICAgICBwcmV2LmxvYy5zb3VyY2UgKz0gbm9kZS5sb2Muc291cmNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbm9kZXMucHVzaChub2RlKTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZUNEQVRBKGNvbnRleHQsIGFuY2VzdG9ycykge1xyXG4gICAgYWR2YW5jZUJ5KGNvbnRleHQsIDkpO1xyXG4gICAgY29uc3Qgbm9kZXMgPSBwYXJzZUNoaWxkcmVuKGNvbnRleHQsIDMgLyogVGV4dE1vZGVzLkNEQVRBICovLCBhbmNlc3RvcnMpO1xyXG4gICAgaWYgKGNvbnRleHQuc291cmNlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCA2IC8qIEVycm9yQ29kZXMuRU9GX0lOX0NEQVRBICovKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCAzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlcztcclxufVxyXG5mdW5jdGlvbiBwYXJzZUNvbW1lbnQoY29udGV4dCkge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBsZXQgY29udGVudDtcclxuICAgIC8vIFJlZ3VsYXIgY29tbWVudC5cclxuICAgIGNvbnN0IG1hdGNoID0gLy0tKFxcISk/Pi8uZXhlYyhjb250ZXh0LnNvdXJjZSk7XHJcbiAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRleHQuc291cmNlLnNsaWNlKDQpO1xyXG4gICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCBjb250ZXh0LnNvdXJjZS5sZW5ndGgpO1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCA3IC8qIEVycm9yQ29kZXMuRU9GX0lOX0NPTU1FTlQgKi8pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKG1hdGNoLmluZGV4IDw9IDMpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDAgLyogRXJyb3JDb2Rlcy5BQlJVUFRfQ0xPU0lOR19PRl9FTVBUWV9DT01NRU5UICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxMCAvKiBFcnJvckNvZGVzLklOQ09SUkVDVExZX0NMT1NFRF9DT01NRU5UICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRleHQuc291cmNlLnNsaWNlKDQsIG1hdGNoLmluZGV4KTtcclxuICAgICAgICAvLyBBZHZhbmNpbmcgd2l0aCByZXBvcnRpbmcgbmVzdGVkIGNvbW1lbnRzLlxyXG4gICAgICAgIGNvbnN0IHMgPSBjb250ZXh0LnNvdXJjZS5zbGljZSgwLCBtYXRjaC5pbmRleCk7XHJcbiAgICAgICAgbGV0IHByZXZJbmRleCA9IDEsIG5lc3RlZEluZGV4ID0gMDtcclxuICAgICAgICB3aGlsZSAoKG5lc3RlZEluZGV4ID0gcy5pbmRleE9mKCc8IS0tJywgcHJldkluZGV4KSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCBuZXN0ZWRJbmRleCAtIHByZXZJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBpZiAobmVzdGVkSW5kZXggKyA0IDwgcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxNiAvKiBFcnJvckNvZGVzLk5FU1RFRF9DT01NRU5UICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2SW5kZXggPSBuZXN0ZWRJbmRleCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAtIHByZXZJbmRleCArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovLFxyXG4gICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgbG9jOiBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQm9ndXNDb21tZW50KGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgY29udGVudFN0YXJ0ID0gY29udGV4dC5zb3VyY2VbMV0gPT09ICc/JyA/IDEgOiAyO1xyXG4gICAgbGV0IGNvbnRlbnQ7XHJcbiAgICBjb25zdCBjbG9zZUluZGV4ID0gY29udGV4dC5zb3VyY2UuaW5kZXhPZignPicpO1xyXG4gICAgaWYgKGNsb3NlSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRleHQuc291cmNlLnNsaWNlKGNvbnRlbnRTdGFydCk7XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIGNvbnRleHQuc291cmNlLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb250ZW50ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoY29udGVudFN0YXJ0LCBjbG9zZUluZGV4KTtcclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgY2xvc2VJbmRleCArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovLFxyXG4gICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgbG9jOiBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlRWxlbWVudChjb250ZXh0LCBhbmNlc3RvcnMpIHtcclxuICAgIC8vIFN0YXJ0IHRhZy5cclxuICAgIGNvbnN0IHdhc0luUHJlID0gY29udGV4dC5pblByZTtcclxuICAgIGNvbnN0IHdhc0luVlByZSA9IGNvbnRleHQuaW5WUHJlO1xyXG4gICAgY29uc3QgcGFyZW50ID0gbGFzdChhbmNlc3RvcnMpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHBhcnNlVGFnKGNvbnRleHQsIDAgLyogVGFnVHlwZS5TdGFydCAqLywgcGFyZW50KTtcclxuICAgIGNvbnN0IGlzUHJlQm91bmRhcnkgPSBjb250ZXh0LmluUHJlICYmICF3YXNJblByZTtcclxuICAgIGNvbnN0IGlzVlByZUJvdW5kYXJ5ID0gY29udGV4dC5pblZQcmUgJiYgIXdhc0luVlByZTtcclxuICAgIGlmIChlbGVtZW50LmlzU2VsZkNsb3NpbmcgfHwgY29udGV4dC5vcHRpb25zLmlzVm9pZFRhZyhlbGVtZW50LnRhZykpIHtcclxuICAgICAgICAvLyAjNDAzMCBzZWxmLWNsb3NpbmcgPHByZT4gdGFnXHJcbiAgICAgICAgaWYgKGlzUHJlQm91bmRhcnkpIHtcclxuICAgICAgICAgICAgY29udGV4dC5pblByZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNWUHJlQm91bmRhcnkpIHtcclxuICAgICAgICAgICAgY29udGV4dC5pblZQcmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICAvLyBDaGlsZHJlbi5cclxuICAgIGFuY2VzdG9ycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgbW9kZSA9IGNvbnRleHQub3B0aW9ucy5nZXRUZXh0TW9kZShlbGVtZW50LCBwYXJlbnQpO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJzZUNoaWxkcmVuKGNvbnRleHQsIG1vZGUsIGFuY2VzdG9ycyk7XHJcbiAgICBhbmNlc3RvcnMucG9wKCk7XHJcbiAgICAvLyAyLnggaW5saW5lLXRlbXBsYXRlIGNvbXBhdFxyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IGlubGluZVRlbXBsYXRlUHJvcCA9IGVsZW1lbnQucHJvcHMuZmluZChwID0+IHAudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovICYmIHAubmFtZSA9PT0gJ2lubGluZS10ZW1wbGF0ZScpO1xyXG4gICAgICAgIGlmIChpbmxpbmVUZW1wbGF0ZVByb3AgJiZcclxuICAgICAgICAgICAgY2hlY2tDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSU5MSU5FX1RFTVBMQVRFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX0lOTElORV9URU1QTEFURSAqLywgY29udGV4dCwgaW5saW5lVGVtcGxhdGVQcm9wLmxvYykpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9jID0gZ2V0U2VsZWN0aW9uKGNvbnRleHQsIGVsZW1lbnQubG9jLmVuZCk7XHJcbiAgICAgICAgICAgIGlubGluZVRlbXBsYXRlUHJvcC52YWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8sXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBsb2Muc291cmNlLFxyXG4gICAgICAgICAgICAgICAgbG9jXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxlbWVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgLy8gRW5kIHRhZy5cclxuICAgIGlmIChzdGFydHNXaXRoRW5kVGFnT3Blbihjb250ZXh0LnNvdXJjZSwgZWxlbWVudC50YWcpKSB7XHJcbiAgICAgICAgcGFyc2VUYWcoY29udGV4dCwgMSAvKiBUYWdUeXBlLkVuZCAqLywgcGFyZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyNCAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19FTkRfVEFHICovLCAwLCBlbGVtZW50LmxvYy5zdGFydCk7XHJcbiAgICAgICAgaWYgKGNvbnRleHQuc291cmNlLmxlbmd0aCA9PT0gMCAmJiBlbGVtZW50LnRhZy50b0xvd2VyQ2FzZSgpID09PSAnc2NyaXB0Jykge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgJiYgc3RhcnRzV2l0aChmaXJzdC5sb2Muc291cmNlLCAnPCEtLScpKSB7XHJcbiAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgOCAvKiBFcnJvckNvZGVzLkVPRl9JTl9TQ1JJUFRfSFRNTF9DT01NRU5UX0xJS0VfVEVYVCAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbGVtZW50LmxvYyA9IGdldFNlbGVjdGlvbihjb250ZXh0LCBlbGVtZW50LmxvYy5zdGFydCk7XHJcbiAgICBpZiAoaXNQcmVCb3VuZGFyeSkge1xyXG4gICAgICAgIGNvbnRleHQuaW5QcmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpc1ZQcmVCb3VuZGFyeSkge1xyXG4gICAgICAgIGNvbnRleHQuaW5WUHJlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZWxlbWVudDtcclxufVxyXG5jb25zdCBpc1NwZWNpYWxUZW1wbGF0ZURpcmVjdGl2ZSA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgaWYsZWxzZSxlbHNlLWlmLGZvcixzbG90YCk7XHJcbmZ1bmN0aW9uIHBhcnNlVGFnKGNvbnRleHQsIHR5cGUsIHBhcmVudCkge1xyXG4gICAgLy8gVGFnIG9wZW4uXHJcbiAgICBjb25zdCBzdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGNvbnN0IG1hdGNoID0gL148XFwvPyhbYS16XVteXFx0XFxyXFxuXFxmIC8+XSopL2kuZXhlYyhjb250ZXh0LnNvdXJjZSk7XHJcbiAgICBjb25zdCB0YWcgPSBtYXRjaFsxXTtcclxuICAgIGNvbnN0IG5zID0gY29udGV4dC5vcHRpb25zLmdldE5hbWVzcGFjZSh0YWcsIHBhcmVudCk7XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgbWF0Y2hbMF0ubGVuZ3RoKTtcclxuICAgIGFkdmFuY2VTcGFjZXMoY29udGV4dCk7XHJcbiAgICAvLyBzYXZlIGN1cnJlbnQgc3RhdGUgaW4gY2FzZSB3ZSBuZWVkIHRvIHJlLXBhcnNlIGF0dHJpYnV0ZXMgd2l0aCB2LXByZVxyXG4gICAgY29uc3QgY3Vyc29yID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgY3VycmVudFNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xyXG4gICAgLy8gY2hlY2sgPHByZT4gdGFnXHJcbiAgICBpZiAoY29udGV4dC5vcHRpb25zLmlzUHJlVGFnKHRhZykpIHtcclxuICAgICAgICBjb250ZXh0LmluUHJlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIEF0dHJpYnV0ZXMuXHJcbiAgICBsZXQgcHJvcHMgPSBwYXJzZUF0dHJpYnV0ZXMoY29udGV4dCwgdHlwZSk7XHJcbiAgICAvLyBjaGVjayB2LXByZVxyXG4gICAgaWYgKHR5cGUgPT09IDAgLyogVGFnVHlwZS5TdGFydCAqLyAmJlxyXG4gICAgICAgICFjb250ZXh0LmluVlByZSAmJlxyXG4gICAgICAgIHByb3BzLnNvbWUocCA9PiBwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJiBwLm5hbWUgPT09ICdwcmUnKSkge1xyXG4gICAgICAgIGNvbnRleHQuaW5WUHJlID0gdHJ1ZTtcclxuICAgICAgICAvLyByZXNldCBjb250ZXh0XHJcbiAgICAgICAgZXh0ZW5kKGNvbnRleHQsIGN1cnNvcik7XHJcbiAgICAgICAgY29udGV4dC5zb3VyY2UgPSBjdXJyZW50U291cmNlO1xyXG4gICAgICAgIC8vIHJlLXBhcnNlIGF0dHJzIGFuZCBmaWx0ZXIgb3V0IHYtcHJlIGl0c2VsZlxyXG4gICAgICAgIHByb3BzID0gcGFyc2VBdHRyaWJ1dGVzKGNvbnRleHQsIHR5cGUpLmZpbHRlcihwID0+IHAubmFtZSAhPT0gJ3YtcHJlJyk7XHJcbiAgICB9XHJcbiAgICAvLyBUYWcgY2xvc2UuXHJcbiAgICBsZXQgaXNTZWxmQ2xvc2luZyA9IGZhbHNlO1xyXG4gICAgaWYgKGNvbnRleHQuc291cmNlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCA5IC8qIEVycm9yQ29kZXMuRU9GX0lOX1RBRyAqLyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpc1NlbGZDbG9zaW5nID0gc3RhcnRzV2l0aChjb250ZXh0LnNvdXJjZSwgJy8+Jyk7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IDEgLyogVGFnVHlwZS5FbmQgKi8gJiYgaXNTZWxmQ2xvc2luZykge1xyXG4gICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgNCAvKiBFcnJvckNvZGVzLkVORF9UQUdfV0lUSF9UUkFJTElOR19TT0xJRFVTICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIGlzU2VsZkNsb3NpbmcgPyAyIDogMSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gMSAvKiBUYWdUeXBlLkVuZCAqLykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIDIueCBkZXByZWNhdGlvbiBjaGVja3NcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICBpc0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9WX0lGX1ZfRk9SX1BSRUNFREVOQ0VcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9JRl9WX0ZPUl9QUkVDRURFTkNFICovLCBjb250ZXh0KSkge1xyXG4gICAgICAgIGxldCBoYXNJZiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBoYXNGb3IgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwcm9wc1tpXTtcclxuICAgICAgICAgICAgaWYgKHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC5uYW1lID09PSAnaWYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzSWYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocC5uYW1lID09PSAnZm9yJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0ZvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhc0lmICYmIGhhc0Zvcikge1xyXG4gICAgICAgICAgICAgICAgd2FybkRlcHJlY2F0aW9uKFwiQ09NUElMRVJfVl9JRl9WX0ZPUl9QUkVDRURFTkNFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfSUZfVl9GT1JfUFJFQ0VERU5DRSAqLywgY29udGV4dCwgZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0KSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCB0YWdUeXBlID0gMCAvKiBFbGVtZW50VHlwZXMuRUxFTUVOVCAqLztcclxuICAgIGlmICghY29udGV4dC5pblZQcmUpIHtcclxuICAgICAgICBpZiAodGFnID09PSAnc2xvdCcpIHtcclxuICAgICAgICAgICAgdGFnVHlwZSA9IDIgLyogRWxlbWVudFR5cGVzLlNMT1QgKi87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3RlbXBsYXRlJykge1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuc29tZShwID0+IHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIGlzU3BlY2lhbFRlbXBsYXRlRGlyZWN0aXZlKHAubmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0YWdUeXBlID0gMyAvKiBFbGVtZW50VHlwZXMuVEVNUExBVEUgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNDb21wb25lbnQodGFnLCBwcm9wcywgY29udGV4dCkpIHtcclxuICAgICAgICAgICAgdGFnVHlwZSA9IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8sXHJcbiAgICAgICAgbnMsXHJcbiAgICAgICAgdGFnLFxyXG4gICAgICAgIHRhZ1R5cGUsXHJcbiAgICAgICAgcHJvcHMsXHJcbiAgICAgICAgaXNTZWxmQ2xvc2luZyxcclxuICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgbG9jOiBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpLFxyXG4gICAgICAgIGNvZGVnZW5Ob2RlOiB1bmRlZmluZWQgLy8gdG8gYmUgY3JlYXRlZCBkdXJpbmcgdHJhbnNmb3JtIHBoYXNlXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHRhZywgcHJvcHMsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnM7XHJcbiAgICBpZiAob3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQodGFnKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0YWcgPT09ICdjb21wb25lbnQnIHx8XHJcbiAgICAgICAgL15bQS1aXS8udGVzdCh0YWcpIHx8XHJcbiAgICAgICAgaXNDb3JlQ29tcG9uZW50KHRhZykgfHxcclxuICAgICAgICAob3B0aW9ucy5pc0J1aWx0SW5Db21wb25lbnQgJiYgb3B0aW9ucy5pc0J1aWx0SW5Db21wb25lbnQodGFnKSkgfHxcclxuICAgICAgICAob3B0aW9ucy5pc05hdGl2ZVRhZyAmJiAhb3B0aW9ucy5pc05hdGl2ZVRhZyh0YWcpKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgdGFnIHNob3VsZCBiZSBhIG5hdGl2ZSB0YWcsIGJ1dCBjaGVjayBmb3IgcG90ZW50aWFsIFwiaXNcIlxyXG4gICAgLy8gY2FzdGluZ1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHAgPSBwcm9wc1tpXTtcclxuICAgICAgICBpZiAocC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHAubmFtZSA9PT0gJ2lzJyAmJiBwLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC52YWx1ZS5jb250ZW50LnN0YXJ0c1dpdGgoJ3Z1ZTonKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovLCBjb250ZXh0LCBwLmxvYykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIC8vIHYtaXMgKFRPRE8gRGVwcmVjYXRlKVxyXG4gICAgICAgICAgICBpZiAocC5uYW1lID09PSAnaXMnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgLy8gOmlzIG9uIHBsYWluIGVsZW1lbnQgLSBvbmx5IHRyZWF0IGFzIGNvbXBvbmVudCBpbiBjb21wYXQgbW9kZVxyXG4gICAgICAgICAgICBwLm5hbWUgPT09ICdiaW5kJyAmJlxyXG4gICAgICAgICAgICAgICAgaXNTdGF0aWNBcmdPZihwLmFyZywgJ2lzJykgJiZcclxuICAgICAgICAgICAgICAgIHRydWUgJiZcclxuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX0lTX09OX0VMRU1FTlRcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSVNfT05fRUxFTUVOVCAqLywgY29udGV4dCwgcC5sb2MpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZXMoY29udGV4dCwgdHlwZSkge1xyXG4gICAgY29uc3QgcHJvcHMgPSBbXTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gbmV3IFNldCgpO1xyXG4gICAgd2hpbGUgKGNvbnRleHQuc291cmNlLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAhc3RhcnRzV2l0aChjb250ZXh0LnNvdXJjZSwgJz4nKSAmJlxyXG4gICAgICAgICFzdGFydHNXaXRoKGNvbnRleHQuc291cmNlLCAnLz4nKSkge1xyXG4gICAgICAgIGlmIChzdGFydHNXaXRoKGNvbnRleHQuc291cmNlLCAnLycpKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyMiAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfU09MSURVU19JTl9UQUcgKi8pO1xyXG4gICAgICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgMSk7XHJcbiAgICAgICAgICAgIGFkdmFuY2VTcGFjZXMoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PT0gMSAvKiBUYWdUeXBlLkVuZCAqLykge1xyXG4gICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMyAvKiBFcnJvckNvZGVzLkVORF9UQUdfV0lUSF9BVFRSSUJVVEVTICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXR0ciA9IHBhcnNlQXR0cmlidXRlKGNvbnRleHQsIGF0dHJpYnV0ZU5hbWVzKTtcclxuICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UgYmV0d2VlbiBjbGFzc1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2lzc3Vlcy80MjUxXHJcbiAgICAgICAgaWYgKGF0dHIudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovICYmXHJcbiAgICAgICAgICAgIGF0dHIudmFsdWUgJiZcclxuICAgICAgICAgICAgYXR0ci5uYW1lID09PSAnY2xhc3MnKSB7XHJcbiAgICAgICAgICAgIGF0dHIudmFsdWUuY29udGVudCA9IGF0dHIudmFsdWUuY29udGVudC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PT0gMCAvKiBUYWdUeXBlLlN0YXJ0ICovKSB7XHJcbiAgICAgICAgICAgIHByb3BzLnB1c2goYXR0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgvXlteXFx0XFxyXFxuXFxmIC8+XS8udGVzdChjb250ZXh0LnNvdXJjZSkpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDE1IC8qIEVycm9yQ29kZXMuTUlTU0lOR19XSElURVNQQUNFX0JFVFdFRU5fQVRUUklCVVRFUyAqLyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkdmFuY2VTcGFjZXMoY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGUoY29udGV4dCwgbmFtZVNldCkge1xyXG4gICAgLy8gTmFtZS5cclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgbWF0Y2ggPSAvXlteXFx0XFxyXFxuXFxmIC8+XVteXFx0XFxyXFxuXFxmIC8+PV0qLy5leGVjKGNvbnRleHQuc291cmNlKTtcclxuICAgIGNvbnN0IG5hbWUgPSBtYXRjaFswXTtcclxuICAgIGlmIChuYW1lU2V0LmhhcyhuYW1lKSkge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyIC8qIEVycm9yQ29kZXMuRFVQTElDQVRFX0FUVFJJQlVURSAqLyk7XHJcbiAgICB9XHJcbiAgICBuYW1lU2V0LmFkZChuYW1lKTtcclxuICAgIGlmIChuYW1lWzBdID09PSAnPScpIHtcclxuICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMTkgLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VRVUFMU19TSUdOX0JFRk9SRV9BVFRSSUJVVEVfTkFNRSAqLyk7XHJcbiAgICB9XHJcbiAgICB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC9bXCInPF0vZztcclxuICAgICAgICBsZXQgbTtcclxuICAgICAgICB3aGlsZSAoKG0gPSBwYXR0ZXJuLmV4ZWMobmFtZSkpKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxNyAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfQ0hBUkFDVEVSX0lOX0FUVFJJQlVURV9OQU1FICovLCBtLmluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgbmFtZS5sZW5ndGgpO1xyXG4gICAgLy8gVmFsdWVcclxuICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgIGlmICgvXltcXHRcXHJcXG5cXGYgXSo9Ly50ZXN0KGNvbnRleHQuc291cmNlKSkge1xyXG4gICAgICAgIGFkdmFuY2VTcGFjZXMoY29udGV4dCk7XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIDEpO1xyXG4gICAgICAgIGFkdmFuY2VTcGFjZXMoY29udGV4dCk7XHJcbiAgICAgICAgdmFsdWUgPSBwYXJzZUF0dHJpYnV0ZVZhbHVlKGNvbnRleHQpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDEzIC8qIEVycm9yQ29kZXMuTUlTU0lOR19BVFRSSUJVVEVfVkFMVUUgKi8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGxvYyA9IGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydCk7XHJcbiAgICBpZiAoIWNvbnRleHQuaW5WUHJlICYmIC9eKHYtW0EtWmEtejAtOS1dfDp8XFwufEB8IykvLnRlc3QobmFtZSkpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IC8oPzpedi0oW2EtejAtOS1dKykpPyg/Oig/Ojp8XlxcLnxeQHxeIykoXFxbW15cXF1dK1xcXXxbXlxcLl0rKSk/KC4rKT8kL2kuZXhlYyhuYW1lKTtcclxuICAgICAgICBsZXQgaXNQcm9wU2hvcnRoYW5kID0gc3RhcnRzV2l0aChuYW1lLCAnLicpO1xyXG4gICAgICAgIGxldCBkaXJOYW1lID0gbWF0Y2hbMV0gfHxcclxuICAgICAgICAgICAgKGlzUHJvcFNob3J0aGFuZCB8fCBzdGFydHNXaXRoKG5hbWUsICc6JylcclxuICAgICAgICAgICAgICAgID8gJ2JpbmQnXHJcbiAgICAgICAgICAgICAgICA6IHN0YXJ0c1dpdGgobmFtZSwgJ0AnKVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ29uJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogJ3Nsb3QnKTtcclxuICAgICAgICBsZXQgYXJnO1xyXG4gICAgICAgIGlmIChtYXRjaFsyXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpc1Nsb3QgPSBkaXJOYW1lID09PSAnc2xvdCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbmFtZS5sYXN0SW5kZXhPZihtYXRjaFsyXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGdldFNlbGVjdGlvbihjb250ZXh0LCBnZXROZXdQb3NpdGlvbihjb250ZXh0LCBzdGFydCwgc3RhcnRPZmZzZXQpLCBnZXROZXdQb3NpdGlvbihjb250ZXh0LCBzdGFydCwgc3RhcnRPZmZzZXQgKyBtYXRjaFsyXS5sZW5ndGggKyAoKGlzU2xvdCAmJiBtYXRjaFszXSkgfHwgJycpLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IG1hdGNoWzJdO1xyXG4gICAgICAgICAgICBsZXQgaXNTdGF0aWMgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCdbJykpIHtcclxuICAgICAgICAgICAgICAgIGlzU3RhdGljID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnQuZW5kc1dpdGgoJ10nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyNyAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19EWU5BTUlDX0RJUkVDVElWRV9BUkdVTUVOVF9FTkQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSwgY29udGVudC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1Nsb3QpIHtcclxuICAgICAgICAgICAgICAgIC8vICMxMjQxIHNwZWNpYWwgY2FzZSBmb3Igdi1zbG90OiB2dWV0aWZ5IHJlbGllcyBleHRlbnNpdmVseSBvbiBzbG90XHJcbiAgICAgICAgICAgICAgICAvLyBuYW1lcyBjb250YWluaW5nIGRvdHMuIHYtc2xvdCBkb2Vzbid0IGhhdmUgYW55IG1vZGlmaWVycyBhbmQgVnVlIDIueFxyXG4gICAgICAgICAgICAgICAgLy8gc3VwcG9ydHMgc3VjaCB1c2FnZSBzbyB3ZSBhcmUga2VlcGluZyBpdCBjb25zaXN0ZW50IHdpdGggMi54LlxyXG4gICAgICAgICAgICAgICAgY29udGVudCArPSBtYXRjaFszXSB8fCAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcmcgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBpc1N0YXRpYyxcclxuICAgICAgICAgICAgICAgIGNvbnN0VHlwZTogaXNTdGF0aWNcclxuICAgICAgICAgICAgICAgICAgICA/IDMgLyogQ29uc3RhbnRUeXBlcy5DQU5fU1RSSU5HSUZZICovXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovLFxyXG4gICAgICAgICAgICAgICAgbG9jXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1F1b3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUxvYyA9IHZhbHVlLmxvYztcclxuICAgICAgICAgICAgdmFsdWVMb2Muc3RhcnQub2Zmc2V0Kys7XHJcbiAgICAgICAgICAgIHZhbHVlTG9jLnN0YXJ0LmNvbHVtbisrO1xyXG4gICAgICAgICAgICB2YWx1ZUxvYy5lbmQgPSBhZHZhbmNlUG9zaXRpb25XaXRoQ2xvbmUodmFsdWVMb2Muc3RhcnQsIHZhbHVlLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICB2YWx1ZUxvYy5zb3VyY2UgPSB2YWx1ZUxvYy5zb3VyY2Uuc2xpY2UoMSwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBtYXRjaFszXSA/IG1hdGNoWzNdLnNsaWNlKDEpLnNwbGl0KCcuJykgOiBbXTtcclxuICAgICAgICBpZiAoaXNQcm9wU2hvcnRoYW5kKVxyXG4gICAgICAgICAgICBtb2RpZmllcnMucHVzaCgncHJvcCcpO1xyXG4gICAgICAgIC8vIDIueCBjb21wYXQgdi1iaW5kOmZvby5zeW5jIC0+IHYtbW9kZWw6Zm9vXHJcbiAgICAgICAgaWYgKGRpck5hbWUgPT09ICdiaW5kJyAmJiBhcmcpIHtcclxuICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5pbmNsdWRlcygnc3luYycpICYmXHJcbiAgICAgICAgICAgICAgICBjaGVja0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9WX0JJTkRfU1lOQ1wiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfU1lOQyAqLywgY29udGV4dCwgbG9jLCBhcmcubG9jLnNvdXJjZSkpIHtcclxuICAgICAgICAgICAgICAgIGRpck5hbWUgPSAnbW9kZWwnO1xyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnNwbGljZShtb2RpZmllcnMuaW5kZXhPZignc3luYycpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG1vZGlmaWVycy5pbmNsdWRlcygncHJvcCcpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9WX0JJTkRfUFJPUFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfUFJPUCAqLywgY29udGV4dCwgbG9jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8sXHJcbiAgICAgICAgICAgIG5hbWU6IGRpck5hbWUsXHJcbiAgICAgICAgICAgIGV4cDogdmFsdWUgJiYge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiB2YWx1ZS5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgLy8gVHJlYXQgYXMgbm9uLWNvbnN0YW50IGJ5IGRlZmF1bHQuIFRoaXMgY2FuIGJlIHBvdGVudGlhbGx5IHNldCB0b1xyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXIgdmFsdWVzIGJ5IGB0cmFuc2Zvcm1FeHByZXNzaW9uYCB0byBtYWtlIGl0IGVsaWdpYmxlIGZvciBob2lzdGluZy5cclxuICAgICAgICAgICAgICAgIGNvbnN0VHlwZTogMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLyxcclxuICAgICAgICAgICAgICAgIGxvYzogdmFsdWUubG9jXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFyZyxcclxuICAgICAgICAgICAgbW9kaWZpZXJzLFxyXG4gICAgICAgICAgICBsb2NcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy8gbWlzc2luZyBkaXJlY3RpdmUgbmFtZSBvciBpbGxlZ2FsIGRpcmVjdGl2ZSBuYW1lXHJcbiAgICBpZiAoIWNvbnRleHQuaW5WUHJlICYmIHN0YXJ0c1dpdGgobmFtZSwgJ3YtJykpIHtcclxuICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMjYgLyogRXJyb3JDb2Rlcy5YX01JU1NJTkdfRElSRUNUSVZFX05BTUUgKi8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8sXHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB2YWx1ZTogdmFsdWUgJiYge1xyXG4gICAgICAgICAgICB0eXBlOiAyIC8qIE5vZGVUeXBlcy5URVhUICovLFxyXG4gICAgICAgICAgICBjb250ZW50OiB2YWx1ZS5jb250ZW50LFxyXG4gICAgICAgICAgICBsb2M6IHZhbHVlLmxvY1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9jXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlVmFsdWUoY29udGV4dCkge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBsZXQgY29udGVudDtcclxuICAgIGNvbnN0IHF1b3RlID0gY29udGV4dC5zb3VyY2VbMF07XHJcbiAgICBjb25zdCBpc1F1b3RlZCA9IHF1b3RlID09PSBgXCJgIHx8IHF1b3RlID09PSBgJ2A7XHJcbiAgICBpZiAoaXNRdW90ZWQpIHtcclxuICAgICAgICAvLyBRdW90ZWQgdmFsdWUuXHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIDEpO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gY29udGV4dC5zb3VyY2UuaW5kZXhPZihxdW90ZSk7XHJcbiAgICAgICAgaWYgKGVuZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb250ZW50ID0gcGFyc2VUZXh0RGF0YShjb250ZXh0LCBjb250ZXh0LnNvdXJjZS5sZW5ndGgsIDQgLyogVGV4dE1vZGVzLkFUVFJJQlVURV9WQUxVRSAqLyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZW50ID0gcGFyc2VUZXh0RGF0YShjb250ZXh0LCBlbmRJbmRleCwgNCAvKiBUZXh0TW9kZXMuQVRUUklCVVRFX1ZBTFVFICovKTtcclxuICAgICAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIFVucXVvdGVkXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvXlteXFx0XFxyXFxuXFxmID5dKy8uZXhlYyhjb250ZXh0LnNvdXJjZSk7XHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1bmV4cGVjdGVkQ2hhcnMgPSAvW1wiJzw9YF0vZztcclxuICAgICAgICBsZXQgbTtcclxuICAgICAgICB3aGlsZSAoKG0gPSB1bmV4cGVjdGVkQ2hhcnMuZXhlYyhtYXRjaFswXSkpKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxOCAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfQ0hBUkFDVEVSX0lOX1VOUVVPVEVEX0FUVFJJQlVURV9WQUxVRSAqLywgbS5pbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbnQgPSBwYXJzZVRleHREYXRhKGNvbnRleHQsIG1hdGNoWzBdLmxlbmd0aCwgNCAvKiBUZXh0TW9kZXMuQVRUUklCVVRFX1ZBTFVFICovKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNvbnRlbnQsIGlzUXVvdGVkLCBsb2M6IGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydCkgfTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZUludGVycG9sYXRpb24oY29udGV4dCwgbW9kZSkge1xyXG4gICAgY29uc3QgW29wZW4sIGNsb3NlXSA9IGNvbnRleHQub3B0aW9ucy5kZWxpbWl0ZXJzO1xyXG4gICAgY29uc3QgY2xvc2VJbmRleCA9IGNvbnRleHQuc291cmNlLmluZGV4T2YoY2xvc2UsIG9wZW4ubGVuZ3RoKTtcclxuICAgIGlmIChjbG9zZUluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyNSAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19JTlRFUlBPTEFUSU9OX0VORCAqLyk7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgYWR2YW5jZUJ5KGNvbnRleHQsIG9wZW4ubGVuZ3RoKTtcclxuICAgIGNvbnN0IGlubmVyU3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBjb25zdCBpbm5lckVuZCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGNvbnN0IHJhd0NvbnRlbnRMZW5ndGggPSBjbG9zZUluZGV4IC0gb3Blbi5sZW5ndGg7XHJcbiAgICBjb25zdCByYXdDb250ZW50ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoMCwgcmF3Q29udGVudExlbmd0aCk7XHJcbiAgICBjb25zdCBwcmVUcmltQ29udGVudCA9IHBhcnNlVGV4dERhdGEoY29udGV4dCwgcmF3Q29udGVudExlbmd0aCwgbW9kZSk7XHJcbiAgICBjb25zdCBjb250ZW50ID0gcHJlVHJpbUNvbnRlbnQudHJpbSgpO1xyXG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBwcmVUcmltQ29udGVudC5pbmRleE9mKGNvbnRlbnQpO1xyXG4gICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCkge1xyXG4gICAgICAgIGFkdmFuY2VQb3NpdGlvbldpdGhNdXRhdGlvbihpbm5lclN0YXJ0LCByYXdDb250ZW50LCBzdGFydE9mZnNldCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmRPZmZzZXQgPSByYXdDb250ZW50TGVuZ3RoIC0gKHByZVRyaW1Db250ZW50Lmxlbmd0aCAtIGNvbnRlbnQubGVuZ3RoIC0gc3RhcnRPZmZzZXQpO1xyXG4gICAgYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uKGlubmVyRW5kLCByYXdDb250ZW50LCBlbmRPZmZzZXQpO1xyXG4gICAgYWR2YW5jZUJ5KGNvbnRleHQsIGNsb3NlLmxlbmd0aCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8sXHJcbiAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICB0eXBlOiA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyBTZXQgYGlzQ29uc3RhbnRgIHRvIGZhbHNlIGJ5IGRlZmF1bHQgYW5kIHdpbGwgZGVjaWRlIGluIHRyYW5zZm9ybUV4cHJlc3Npb25cclxuICAgICAgICAgICAgY29uc3RUeXBlOiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovLFxyXG4gICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICBsb2M6IGdldFNlbGVjdGlvbihjb250ZXh0LCBpbm5lclN0YXJ0LCBpbm5lckVuZClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYzogZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0KVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBwYXJzZVRleHQoY29udGV4dCwgbW9kZSkge1xyXG4gICAgY29uc3QgZW5kVG9rZW5zID0gbW9kZSA9PT0gMyAvKiBUZXh0TW9kZXMuQ0RBVEEgKi8gPyBbJ11dPiddIDogWyc8JywgY29udGV4dC5vcHRpb25zLmRlbGltaXRlcnNbMF1dO1xyXG4gICAgbGV0IGVuZEluZGV4ID0gY29udGV4dC5zb3VyY2UubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmRUb2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGNvbnRleHQuc291cmNlLmluZGV4T2YoZW5kVG9rZW5zW2ldLCAxKTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmIGVuZEluZGV4ID4gaW5kZXgpIHtcclxuICAgICAgICAgICAgZW5kSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZVRleHREYXRhKGNvbnRleHQsIGVuZEluZGV4LCBtb2RlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyxcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIGxvYzogZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0KVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogR2V0IHRleHQgZGF0YSB3aXRoIGEgZ2l2ZW4gbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgbG9jYXRpb24uXHJcbiAqIFRoaXMgdHJhbnNsYXRlcyBIVE1MIGVudGl0aWVzIGluIHRoZSB0ZXh0IGRhdGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZVRleHREYXRhKGNvbnRleHQsIGxlbmd0aCwgbW9kZSkge1xyXG4gICAgY29uc3QgcmF3VGV4dCA9IGNvbnRleHQuc291cmNlLnNsaWNlKDAsIGxlbmd0aCk7XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgbGVuZ3RoKTtcclxuICAgIGlmIChtb2RlID09PSAyIC8qIFRleHRNb2Rlcy5SQVdURVhUICovIHx8XHJcbiAgICAgICAgbW9kZSA9PT0gMyAvKiBUZXh0TW9kZXMuQ0RBVEEgKi8gfHxcclxuICAgICAgICAhcmF3VGV4dC5pbmNsdWRlcygnJicpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhd1RleHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBEQVRBIG9yIFJDREFUQSBjb250YWluaW5nIFwiJlwiXCIuIEVudGl0eSBkZWNvZGluZyByZXF1aXJlZC5cclxuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb25zLmRlY29kZUVudGl0aWVzKHJhd1RleHQsIG1vZGUgPT09IDQgLyogVGV4dE1vZGVzLkFUVFJJQlVURV9WQUxVRSAqLyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0Q3Vyc29yKGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgY29sdW1uLCBsaW5lLCBvZmZzZXQgfSA9IGNvbnRleHQ7XHJcbiAgICByZXR1cm4geyBjb2x1bW4sIGxpbmUsIG9mZnNldCB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydCwgZW5kKSB7XHJcbiAgICBlbmQgPSBlbmQgfHwgZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzdGFydCxcclxuICAgICAgICBlbmQsXHJcbiAgICAgICAgc291cmNlOiBjb250ZXh0Lm9yaWdpbmFsU291cmNlLnNsaWNlKHN0YXJ0Lm9mZnNldCwgZW5kLm9mZnNldClcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gbGFzdCh4cykge1xyXG4gICAgcmV0dXJuIHhzW3hzLmxlbmd0aCAtIDFdO1xyXG59XHJcbmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc291cmNlLCBzZWFyY2hTdHJpbmcpIHtcclxuICAgIHJldHVybiBzb3VyY2Uuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcpO1xyXG59XHJcbmZ1bmN0aW9uIGFkdmFuY2VCeShjb250ZXh0LCBudW1iZXJPZkNoYXJhY3RlcnMpIHtcclxuICAgIGNvbnN0IHsgc291cmNlIH0gPSBjb250ZXh0O1xyXG4gICAgYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uKGNvbnRleHQsIHNvdXJjZSwgbnVtYmVyT2ZDaGFyYWN0ZXJzKTtcclxuICAgIGNvbnRleHQuc291cmNlID0gc291cmNlLnNsaWNlKG51bWJlck9mQ2hhcmFjdGVycyk7XHJcbn1cclxuZnVuY3Rpb24gYWR2YW5jZVNwYWNlcyhjb250ZXh0KSB7XHJcbiAgICBjb25zdCBtYXRjaCA9IC9eW1xcdFxcclxcblxcZiBdKy8uZXhlYyhjb250ZXh0LnNvdXJjZSk7XHJcbiAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgbWF0Y2hbMF0ubGVuZ3RoKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXROZXdQb3NpdGlvbihjb250ZXh0LCBzdGFydCwgbnVtYmVyT2ZDaGFyYWN0ZXJzKSB7XHJcbiAgICByZXR1cm4gYWR2YW5jZVBvc2l0aW9uV2l0aENsb25lKHN0YXJ0LCBjb250ZXh0Lm9yaWdpbmFsU291cmNlLnNsaWNlKHN0YXJ0Lm9mZnNldCwgbnVtYmVyT2ZDaGFyYWN0ZXJzKSwgbnVtYmVyT2ZDaGFyYWN0ZXJzKTtcclxufVxyXG5mdW5jdGlvbiBlbWl0RXJyb3IoY29udGV4dCwgY29kZSwgb2Zmc2V0LCBsb2MgPSBnZXRDdXJzb3IoY29udGV4dCkpIHtcclxuICAgIGlmIChvZmZzZXQpIHtcclxuICAgICAgICBsb2Mub2Zmc2V0ICs9IG9mZnNldDtcclxuICAgICAgICBsb2MuY29sdW1uICs9IG9mZnNldDtcclxuICAgIH1cclxuICAgIGNvbnRleHQub3B0aW9ucy5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoY29kZSwge1xyXG4gICAgICAgIHN0YXJ0OiBsb2MsXHJcbiAgICAgICAgZW5kOiBsb2MsXHJcbiAgICAgICAgc291cmNlOiAnJ1xyXG4gICAgfSkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRW5kKGNvbnRleHQsIG1vZGUsIGFuY2VzdG9ycykge1xyXG4gICAgY29uc3QgcyA9IGNvbnRleHQuc291cmNlO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgY2FzZSAwIC8qIFRleHRNb2Rlcy5EQVRBICovOlxyXG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChzLCAnPC8nKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcHJvYmFibHkgYmFkIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gYW5jZXN0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGhFbmRUYWdPcGVuKHMsIGFuY2VzdG9yc1tpXS50YWcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDEgLyogVGV4dE1vZGVzLlJDREFUQSAqLzpcclxuICAgICAgICBjYXNlIDIgLyogVGV4dE1vZGVzLlJBV1RFWFQgKi86IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbGFzdChhbmNlc3RvcnMpO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHN0YXJ0c1dpdGhFbmRUYWdPcGVuKHMsIHBhcmVudC50YWcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAzIC8qIFRleHRNb2Rlcy5DREFUQSAqLzpcclxuICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgocywgJ11dPicpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiAhcztcclxufVxyXG5mdW5jdGlvbiBzdGFydHNXaXRoRW5kVGFnT3Blbihzb3VyY2UsIHRhZykge1xyXG4gICAgcmV0dXJuIChzdGFydHNXaXRoKHNvdXJjZSwgJzwvJykgJiZcclxuICAgICAgICBzb3VyY2Uuc2xpY2UoMiwgMiArIHRhZy5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgL1tcXHRcXHJcXG5cXGYgLz5dLy50ZXN0KHNvdXJjZVsyICsgdGFnLmxlbmd0aF0gfHwgJz4nKSk7XHJcbn1cblxuZnVuY3Rpb24gaG9pc3RTdGF0aWMocm9vdCwgY29udGV4dCkge1xyXG4gICAgd2Fsayhyb290LCBjb250ZXh0LCBcclxuICAgIC8vIFJvb3Qgbm9kZSBpcyB1bmZvcnR1bmF0ZWx5IG5vbi1ob2lzdGFibGUgZHVlIHRvIHBvdGVudGlhbCBwYXJlbnRcclxuICAgIC8vIGZhbGx0aHJvdWdoIGF0dHJpYnV0ZXMuXHJcbiAgICBpc1NpbmdsZUVsZW1lbnRSb290KHJvb3QsIHJvb3QuY2hpbGRyZW5bMF0pKTtcclxufVxyXG5mdW5jdGlvbiBpc1NpbmdsZUVsZW1lbnRSb290KHJvb3QsIGNoaWxkKSB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSByb290O1xyXG4gICAgcmV0dXJuIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICBjaGlsZC50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgIWlzU2xvdE91dGxldChjaGlsZCkpO1xyXG59XHJcbmZ1bmN0aW9uIHdhbGsobm9kZSwgY29udGV4dCwgZG9Ob3RIb2lzdE5vZGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gbm9kZTtcclxuICAgIGNvbnN0IG9yaWdpbmFsQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBsZXQgaG9pc3RlZENvdW50ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIC8vIG9ubHkgcGxhaW4gZWxlbWVudHMgJiB0ZXh0IGNhbGxzIGFyZSBlbGlnaWJsZSBmb3IgaG9pc3RpbmcuXHJcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgY2hpbGQudGFnVHlwZSA9PT0gMCAvKiBFbGVtZW50VHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgICAgICBjb25zdCBjb25zdGFudFR5cGUgPSBkb05vdEhvaXN0Tm9kZVxyXG4gICAgICAgICAgICAgICAgPyAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovXHJcbiAgICAgICAgICAgICAgICA6IGdldENvbnN0YW50VHlwZShjaGlsZCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChjb25zdGFudFR5cGUgPiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRUeXBlID49IDIgLyogQ29uc3RhbnRUeXBlcy5DQU5fSE9JU1QgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jb2RlZ2VuTm9kZS5wYXRjaEZsYWcgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtMSAvKiBQYXRjaEZsYWdzLkhPSVNURUQgKi8gKyAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYCAvKiBIT0lTVEVEICovYCA6IGBgKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jb2RlZ2VuTm9kZSA9IGNvbnRleHQuaG9pc3QoY2hpbGQuY29kZWdlbk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhvaXN0ZWRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbm9kZSBtYXkgY29udGFpbiBkeW5hbWljIGNoaWxkcmVuLCBidXQgaXRzIHByb3BzIG1heSBiZSBlbGlnaWJsZSBmb3JcclxuICAgICAgICAgICAgICAgIC8vIGhvaXN0aW5nLlxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZWdlbk5vZGUgPSBjaGlsZC5jb2RlZ2VuTm9kZTtcclxuICAgICAgICAgICAgICAgIGlmIChjb2RlZ2VuTm9kZS50eXBlID09PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYWcgPSBnZXRQYXRjaEZsYWcoY29kZWdlbk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWZsYWcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9PT0gNTEyIC8qIFBhdGNoRmxhZ3MuTkVFRF9QQVRDSCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID09PSAxIC8qIFBhdGNoRmxhZ3MuVEVYVCAqLykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0R2VuZXJhdGVkUHJvcHNDb25zdGFudFR5cGUoY2hpbGQsIGNvbnRleHQpID49XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC8qIENvbnN0YW50VHlwZXMuQ0FOX0hPSVNUICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2V0Tm9kZVByb3BzKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlZ2VuTm9kZS5wcm9wcyA9IGNvbnRleHQuaG9pc3QocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlZ2VuTm9kZS5keW5hbWljUHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZWdlbk5vZGUuZHluYW1pY1Byb3BzID0gY29udGV4dC5ob2lzdChjb2RlZ2VuTm9kZS5keW5hbWljUHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZC50eXBlID09PSAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovICYmXHJcbiAgICAgICAgICAgIGdldENvbnN0YW50VHlwZShjaGlsZC5jb250ZW50LCBjb250ZXh0KSA+PSAyIC8qIENvbnN0YW50VHlwZXMuQ0FOX0hPSVNUICovKSB7XHJcbiAgICAgICAgICAgIGNoaWxkLmNvZGVnZW5Ob2RlID0gY29udGV4dC5ob2lzdChjaGlsZC5jb2RlZ2VuTm9kZSk7XHJcbiAgICAgICAgICAgIGhvaXN0ZWRDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3YWxrIGZ1cnRoZXJcclxuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgICAgICBjb25zdCBpc0NvbXBvbmVudCA9IGNoaWxkLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLztcclxuICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNjb3Blcy52U2xvdCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdhbGsoY2hpbGQsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAoaXNDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc2NvcGVzLnZTbG90LS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2hpbGQudHlwZSA9PT0gMTEgLyogTm9kZVR5cGVzLkZPUiAqLykge1xyXG4gICAgICAgICAgICAvLyBEbyBub3QgaG9pc3Qgdi1mb3Igc2luZ2xlIGNoaWxkIGJlY2F1c2UgaXQgaGFzIHRvIGJlIGEgYmxvY2tcclxuICAgICAgICAgICAgd2FsayhjaGlsZCwgY29udGV4dCwgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2hpbGQudHlwZSA9PT0gOSAvKiBOb2RlVHlwZXMuSUYgKi8pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZC5icmFuY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGhvaXN0IHYtaWYgc2luZ2xlIGNoaWxkIGJlY2F1c2UgaXQgaGFzIHRvIGJlIGEgYmxvY2tcclxuICAgICAgICAgICAgICAgIHdhbGsoY2hpbGQuYnJhbmNoZXNbaV0sIGNvbnRleHQsIGNoaWxkLmJyYW5jaGVzW2ldLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaG9pc3RlZENvdW50ICYmIGNvbnRleHQudHJhbnNmb3JtSG9pc3QpIHtcclxuICAgICAgICBjb250ZXh0LnRyYW5zZm9ybUhvaXN0KGNoaWxkcmVuLCBjb250ZXh0LCBub2RlKTtcclxuICAgIH1cclxuICAgIC8vIGFsbCBjaGlsZHJlbiB3ZXJlIGhvaXN0ZWQgLSB0aGUgZW50aXJlIGNoaWxkcmVuIGFycmF5IGlzIGhvaXN0YWJsZS5cclxuICAgIGlmIChob2lzdGVkQ291bnQgJiZcclxuICAgICAgICBob2lzdGVkQ291bnQgPT09IG9yaWdpbmFsQ291bnQgJiZcclxuICAgICAgICBub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDAgLyogRWxlbWVudFR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICBub2RlLmNvZGVnZW5Ob2RlICYmXHJcbiAgICAgICAgbm9kZS5jb2RlZ2VuTm9kZS50eXBlID09PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLyAmJlxyXG4gICAgICAgIGlzQXJyYXkobm9kZS5jb2RlZ2VuTm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICBub2RlLmNvZGVnZW5Ob2RlLmNoaWxkcmVuID0gY29udGV4dC5ob2lzdChjcmVhdGVBcnJheUV4cHJlc3Npb24obm9kZS5jb2RlZ2VuTm9kZS5jaGlsZHJlbikpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldENvbnN0YW50VHlwZShub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IGNvbnN0YW50Q2FjaGUgfSA9IGNvbnRleHQ7XHJcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xyXG4gICAgICAgIGNhc2UgMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLzpcclxuICAgICAgICAgICAgaWYgKG5vZGUudGFnVHlwZSAhPT0gMCAvKiBFbGVtZW50VHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY29uc3RhbnRDYWNoZS5nZXQobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjb2RlZ2VuTm9kZSA9IG5vZGUuY29kZWdlbk5vZGU7XHJcbiAgICAgICAgICAgIGlmIChjb2RlZ2VuTm9kZS50eXBlICE9PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlLmlzQmxvY2sgJiZcclxuICAgICAgICAgICAgICAgIG5vZGUudGFnICE9PSAnc3ZnJyAmJlxyXG4gICAgICAgICAgICAgICAgbm9kZS50YWcgIT09ICdmb3JlaWduT2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZmxhZyA9IGdldFBhdGNoRmxhZyhjb2RlZ2VuTm9kZSk7XHJcbiAgICAgICAgICAgIGlmICghZmxhZykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJldHVyblR5cGUgPSAzIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NUUklOR0lGWSAqLztcclxuICAgICAgICAgICAgICAgIC8vIEVsZW1lbnQgaXRzZWxmIGhhcyBubyBwYXRjaCBmbGFnLiBIb3dldmVyIHdlIHN0aWxsIG5lZWQgdG8gY2hlY2s6XHJcbiAgICAgICAgICAgICAgICAvLyAxLiBFdmVuIGZvciBhIG5vZGUgd2l0aCBubyBwYXRjaCBmbGFnLCBpdCBpcyBwb3NzaWJsZSBmb3IgaXQgdG8gY29udGFpblxyXG4gICAgICAgICAgICAgICAgLy8gbm9uLWhvaXN0YWJsZSBleHByZXNzaW9ucyB0aGF0IHJlZmVycyB0byBzY29wZSB2YXJpYWJsZXMsIGUuZy4gY29tcGlsZXJcclxuICAgICAgICAgICAgICAgIC8vIGluamVjdGVkIGtleXMgb3IgY2FjaGVkIGV2ZW50IGhhbmRsZXJzLiBUaGVyZWZvcmUgd2UgbmVlZCB0byBhbHdheXNcclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBjb2RlZ2VuTm9kZSdzIHByb3BzIHRvIGJlIHN1cmUuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZWRQcm9wc1R5cGUgPSBnZXRHZW5lcmF0ZWRQcm9wc0NvbnN0YW50VHlwZShub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRQcm9wc1R5cGUgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdGFudENhY2hlLnNldChub2RlLCAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRQcm9wc1R5cGUgPCByZXR1cm5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGdlbmVyYXRlZFByb3BzVHlwZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIDIuIGl0cyBjaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGdldENvbnN0YW50VHlwZShub2RlLmNoaWxkcmVuW2ldLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50Q2FjaGUuc2V0KG5vZGUsIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA8IHJldHVyblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGNoaWxkVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyAzLiBpZiB0aGUgdHlwZSBpcyBub3QgYWxyZWFkeSBDQU5fU0tJUF9QQVRDSCB3aGljaCBpcyB0aGUgbG93ZXN0IG5vbi0wXHJcbiAgICAgICAgICAgICAgICAvLyB0eXBlLCBjaGVjayBpZiBhbnkgb2YgdGhlIHByb3BzIGNhbiBjYXVzZSB0aGUgdHlwZSB0byBiZSBsb3dlcmVkXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gc2tpcCBjYW5fcGF0Y2ggYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgYnkgdGhlIGFic2VuY2Ugb2YgYVxyXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2hGbGFnLlxyXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgPiAxIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NLSVBfUEFUQ0ggKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJiBwLm5hbWUgPT09ICdiaW5kJyAmJiBwLmV4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwVHlwZSA9IGdldENvbnN0YW50VHlwZShwLmV4cCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwVHlwZSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50Q2FjaGUuc2V0KG5vZGUsIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cFR5cGUgPCByZXR1cm5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGV4cFR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHN2Zy9mb3JlaWduT2JqZWN0IGNvdWxkIGJlIGJsb2NrIGhlcmUsIGhvd2V2ZXIgaWYgdGhleSBhcmVcclxuICAgICAgICAgICAgICAgIC8vIHN0YXRpYyB0aGVuIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBibG9ja3Mgc2luY2UgdGhlcmUgd2lsbCBiZSBub1xyXG4gICAgICAgICAgICAgICAgLy8gbmVzdGVkIHVwZGF0ZXMuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29kZWdlbk5vZGUuaXNCbG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBzZXQgY3VzdG9tIGRpcmVjdGl2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBub2RlLnByb3BzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50Q2FjaGUuc2V0KG5vZGUsIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVIZWxwZXIoT1BFTl9CTE9DSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVIZWxwZXIoZ2V0Vk5vZGVCbG9ja0hlbHBlcihjb250ZXh0LmluU1NSLCBjb2RlZ2VuTm9kZS5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGVnZW5Ob2RlLmlzQmxvY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmhlbHBlcihnZXRWTm9kZUhlbHBlcihjb250ZXh0LmluU1NSLCBjb2RlZ2VuTm9kZS5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnRDYWNoZS5zZXQobm9kZSwgcmV0dXJuVHlwZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50Q2FjaGUuc2V0KG5vZGUsIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBjYXNlIDIgLyogTm9kZVR5cGVzLlRFWFQgKi86XHJcbiAgICAgICAgY2FzZSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovOlxyXG4gICAgICAgICAgICByZXR1cm4gMyAvKiBDb25zdGFudFR5cGVzLkNBTl9TVFJJTkdJRlkgKi87XHJcbiAgICAgICAgY2FzZSA5IC8qIE5vZGVUeXBlcy5JRiAqLzpcclxuICAgICAgICBjYXNlIDExIC8qIE5vZGVUeXBlcy5GT1IgKi86XHJcbiAgICAgICAgY2FzZSAxMCAvKiBOb2RlVHlwZXMuSUZfQlJBTkNIICovOlxyXG4gICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICBjYXNlIDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi86XHJcbiAgICAgICAgY2FzZSAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovOlxyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnRUeXBlKG5vZGUuY29udGVudCwgY29udGV4dCk7XHJcbiAgICAgICAgY2FzZSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29uc3RUeXBlO1xyXG4gICAgICAgIGNhc2UgOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgbGV0IHJldHVyblR5cGUgPSAzIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NUUklOR0lGWSAqLztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcoY2hpbGQpIHx8IGlzU3ltYm9sKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gZ2V0Q29uc3RhbnRUeXBlKGNoaWxkLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkVHlwZSA8IHJldHVyblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gY2hpbGRUeXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIDtcclxuICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICB9XHJcbn1cclxuY29uc3QgYWxsb3dIb2lzdGVkSGVscGVyU2V0ID0gbmV3IFNldChbXHJcbiAgICBOT1JNQUxJWkVfQ0xBU1MsXHJcbiAgICBOT1JNQUxJWkVfU1RZTEUsXHJcbiAgICBOT1JNQUxJWkVfUFJPUFMsXHJcbiAgICBHVUFSRF9SRUFDVElWRV9QUk9QU1xyXG5dKTtcclxuZnVuY3Rpb24gZ2V0Q29uc3RhbnRUeXBlT2ZIZWxwZXJDYWxsKHZhbHVlLCBjb250ZXh0KSB7XHJcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLyAmJlxyXG4gICAgICAgICFpc1N0cmluZyh2YWx1ZS5jYWxsZWUpICYmXHJcbiAgICAgICAgYWxsb3dIb2lzdGVkSGVscGVyU2V0Lmhhcyh2YWx1ZS5jYWxsZWUpKSB7XHJcbiAgICAgICAgY29uc3QgYXJnID0gdmFsdWUuYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50VHlwZShhcmcsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhcmcudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBuZXN0ZWQgaGVscGVyIGNhbGwsIGUuZy4gYG5vcm1hbGl6ZVByb3BzKGd1YXJkUmVhY3RpdmVQcm9wcyhleHApKWBcclxuICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50VHlwZU9mSGVscGVyQ2FsbChhcmcsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG59XHJcbmZ1bmN0aW9uIGdldEdlbmVyYXRlZFByb3BzQ29uc3RhbnRUeXBlKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGxldCByZXR1cm5UeXBlID0gMyAvKiBDb25zdGFudFR5cGVzLkNBTl9TVFJJTkdJRlkgKi87XHJcbiAgICBjb25zdCBwcm9wcyA9IGdldE5vZGVQcm9wcyhub2RlKTtcclxuICAgIGlmIChwcm9wcyAmJiBwcm9wcy50eXBlID09PSAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IHByb3BzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGtleVR5cGUgPSBnZXRDb25zdGFudFR5cGUoa2V5LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGtleVR5cGUgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBrZXlUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChrZXlUeXBlIDwgcmV0dXJuVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGtleVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHZhbHVlVHlwZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVR5cGUgPSBnZXRDb25zdGFudFR5cGUodmFsdWUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IDE0IC8qIE5vZGVUeXBlcy5KU19DQUxMX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIHNvbWUgaGVscGVyIGNhbGxzIGNhbiBiZSBob2lzdGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gc3VjaCBhcyB0aGUgYG5vcm1hbGl6ZVByb3BzYCBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIGZvciBwcmUtbm9ybWFsaXplIGNsYXNzLFxyXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gcmVzcGVjdCB0aGUgQ29uc3RhbnRUeXBlIG9mIHRoZSBoZWxwZXIncyBhcmd1bWVudHNcclxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IGdldENvbnN0YW50VHlwZU9mSGVscGVyQ2FsbCh2YWx1ZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVR5cGUgPSAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA8IHJldHVyblR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSB2YWx1ZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0dXJuVHlwZTtcclxufVxyXG5mdW5jdGlvbiBnZXROb2RlUHJvcHMobm9kZSkge1xyXG4gICAgY29uc3QgY29kZWdlbk5vZGUgPSBub2RlLmNvZGVnZW5Ob2RlO1xyXG4gICAgaWYgKGNvZGVnZW5Ob2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvZGVnZW5Ob2RlLnByb3BzO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFBhdGNoRmxhZyhub2RlKSB7XHJcbiAgICBjb25zdCBmbGFnID0gbm9kZS5wYXRjaEZsYWc7XHJcbiAgICByZXR1cm4gZmxhZyA/IHBhcnNlSW50KGZsYWcsIDEwKSA6IHVuZGVmaW5lZDtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1Db250ZXh0KHJvb3QsIHsgZmlsZW5hbWUgPSAnJywgcHJlZml4SWRlbnRpZmllcnMgPSBmYWxzZSwgaG9pc3RTdGF0aWMgPSBmYWxzZSwgY2FjaGVIYW5kbGVycyA9IGZhbHNlLCBub2RlVHJhbnNmb3JtcyA9IFtdLCBkaXJlY3RpdmVUcmFuc2Zvcm1zID0ge30sIHRyYW5zZm9ybUhvaXN0ID0gbnVsbCwgaXNCdWlsdEluQ29tcG9uZW50ID0gTk9PUCwgaXNDdXN0b21FbGVtZW50ID0gTk9PUCwgZXhwcmVzc2lvblBsdWdpbnMgPSBbXSwgc2NvcGVJZCA9IG51bGwsIHNsb3R0ZWQgPSB0cnVlLCBzc3IgPSBmYWxzZSwgaW5TU1IgPSBmYWxzZSwgc3NyQ3NzVmFycyA9IGBgLCBiaW5kaW5nTWV0YWRhdGEgPSBFTVBUWV9PQkosIGlubGluZSA9IGZhbHNlLCBpc1RTID0gZmFsc2UsIG9uRXJyb3IgPSBkZWZhdWx0T25FcnJvciwgb25XYXJuID0gZGVmYXVsdE9uV2FybiwgY29tcGF0Q29uZmlnIH0pIHtcclxuICAgIGNvbnN0IG5hbWVNYXRjaCA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcPy4qJC8sICcnKS5tYXRjaCgvKFteL1xcXFxdKylcXC5cXHcrJC8pO1xyXG4gICAgY29uc3QgY29udGV4dCA9IHtcclxuICAgICAgICAvLyBvcHRpb25zXHJcbiAgICAgICAgc2VsZk5hbWU6IG5hbWVNYXRjaCAmJiBjYXBpdGFsaXplKGNhbWVsaXplJDEobmFtZU1hdGNoWzFdKSksXHJcbiAgICAgICAgcHJlZml4SWRlbnRpZmllcnMsXHJcbiAgICAgICAgaG9pc3RTdGF0aWMsXHJcbiAgICAgICAgY2FjaGVIYW5kbGVycyxcclxuICAgICAgICBub2RlVHJhbnNmb3JtcyxcclxuICAgICAgICBkaXJlY3RpdmVUcmFuc2Zvcm1zLFxyXG4gICAgICAgIHRyYW5zZm9ybUhvaXN0LFxyXG4gICAgICAgIGlzQnVpbHRJbkNvbXBvbmVudCxcclxuICAgICAgICBpc0N1c3RvbUVsZW1lbnQsXHJcbiAgICAgICAgZXhwcmVzc2lvblBsdWdpbnMsXHJcbiAgICAgICAgc2NvcGVJZCxcclxuICAgICAgICBzbG90dGVkLFxyXG4gICAgICAgIHNzcixcclxuICAgICAgICBpblNTUixcclxuICAgICAgICBzc3JDc3NWYXJzLFxyXG4gICAgICAgIGJpbmRpbmdNZXRhZGF0YSxcclxuICAgICAgICBpbmxpbmUsXHJcbiAgICAgICAgaXNUUyxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG9uV2FybixcclxuICAgICAgICBjb21wYXRDb25maWcsXHJcbiAgICAgICAgLy8gc3RhdGVcclxuICAgICAgICByb290LFxyXG4gICAgICAgIGhlbHBlcnM6IG5ldyBNYXAoKSxcclxuICAgICAgICBjb21wb25lbnRzOiBuZXcgU2V0KCksXHJcbiAgICAgICAgZGlyZWN0aXZlczogbmV3IFNldCgpLFxyXG4gICAgICAgIGhvaXN0czogW10sXHJcbiAgICAgICAgaW1wb3J0czogW10sXHJcbiAgICAgICAgY29uc3RhbnRDYWNoZTogbmV3IE1hcCgpLFxyXG4gICAgICAgIHRlbXBzOiAwLFxyXG4gICAgICAgIGNhY2hlZDogMCxcclxuICAgICAgICBpZGVudGlmaWVyczogT2JqZWN0LmNyZWF0ZShudWxsKSxcclxuICAgICAgICBzY29wZXM6IHtcclxuICAgICAgICAgICAgdkZvcjogMCxcclxuICAgICAgICAgICAgdlNsb3Q6IDAsXHJcbiAgICAgICAgICAgIHZQcmU6IDAsXHJcbiAgICAgICAgICAgIHZPbmNlOiAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgY3VycmVudE5vZGU6IHJvb3QsXHJcbiAgICAgICAgY2hpbGRJbmRleDogMCxcclxuICAgICAgICBpblZPbmNlOiBmYWxzZSxcclxuICAgICAgICAvLyBtZXRob2RzXHJcbiAgICAgICAgaGVscGVyKG5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnQgPSBjb250ZXh0LmhlbHBlcnMuZ2V0KG5hbWUpIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVycy5zZXQobmFtZSwgY291bnQgKyAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmVIZWxwZXIobmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGNvbnRleHQuaGVscGVycy5nZXQobmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gY291bnQgLSAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmhlbHBlcnMuZGVsZXRlKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5oZWxwZXJzLnNldChuYW1lLCBjdXJyZW50Q291bnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoZWxwZXJTdHJpbmcobmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYF8ke2hlbHBlck5hbWVNYXBbY29udGV4dC5oZWxwZXIobmFtZSldfWA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXBsYWNlTm9kZShub2RlKSB7XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuY3VycmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgYmVpbmcgcmVwbGFjZWQgaXMgYWxyZWFkeSByZW1vdmVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlcGxhY2Ugcm9vdCBub2RlLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRleHQucGFyZW50LmNoaWxkcmVuW2NvbnRleHQuY2hpbGRJbmRleF0gPSBjb250ZXh0LmN1cnJlbnROb2RlID0gbm9kZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZU5vZGUobm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFjb250ZXh0LnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVtb3ZlIHJvb3Qgbm9kZS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gY29udGV4dC5wYXJlbnQuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92YWxJbmRleCA9IG5vZGVcclxuICAgICAgICAgICAgICAgID8gbGlzdC5pbmRleE9mKG5vZGUpXHJcbiAgICAgICAgICAgICAgICA6IGNvbnRleHQuY3VycmVudE5vZGVcclxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRleHQuY2hpbGRJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHJlbW92YWxJbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm9kZSBiZWluZyByZW1vdmVkIGlzIG5vdCBhIGNoaWxkIG9mIGN1cnJlbnQgcGFyZW50YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT09IGNvbnRleHQuY3VycmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbm9kZSByZW1vdmVkXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQub25Ob2RlUmVtb3ZlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc2libGluZyBub2RlIHJlbW92ZWRcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmNoaWxkSW5kZXggPiByZW1vdmFsSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNoaWxkSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uTm9kZVJlbW92ZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250ZXh0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UocmVtb3ZhbEluZGV4LCAxKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uTm9kZVJlbW92ZWQ6ICgpID0+IHsgfSxcclxuICAgICAgICBhZGRJZGVudGlmaWVycyhleHApIHtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUlkZW50aWZpZXJzKGV4cCkge1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG9pc3QoZXhwKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhleHApKVxyXG4gICAgICAgICAgICAgICAgZXhwID0gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihleHApO1xyXG4gICAgICAgICAgICBjb250ZXh0LmhvaXN0cy5wdXNoKGV4cCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBfaG9pc3RlZF8ke2NvbnRleHQuaG9pc3RzLmxlbmd0aH1gLCBmYWxzZSwgZXhwLmxvYywgMiAvKiBDb25zdGFudFR5cGVzLkNBTl9IT0lTVCAqLyk7XHJcbiAgICAgICAgICAgIGlkZW50aWZpZXIuaG9pc3RlZCA9IGV4cDtcclxuICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYWNoZShleHAsIGlzVk5vZGUgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ2FjaGVFeHByZXNzaW9uKGNvbnRleHQuY2FjaGVkKyssIGV4cCwgaXNWTm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHtcclxuICAgICAgICBjb250ZXh0LmZpbHRlcnMgPSBuZXcgU2V0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGV4dDtcclxufVxyXG5mdW5jdGlvbiB0cmFuc2Zvcm0ocm9vdCwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZVRyYW5zZm9ybUNvbnRleHQocm9vdCwgb3B0aW9ucyk7XHJcbiAgICB0cmF2ZXJzZU5vZGUocm9vdCwgY29udGV4dCk7XHJcbiAgICBpZiAob3B0aW9ucy5ob2lzdFN0YXRpYykge1xyXG4gICAgICAgIGhvaXN0U3RhdGljKHJvb3QsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFvcHRpb25zLnNzcikge1xyXG4gICAgICAgIGNyZWF0ZVJvb3RDb2RlZ2VuKHJvb3QsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgLy8gZmluYWxpemUgbWV0YSBpbmZvcm1hdGlvblxyXG4gICAgcm9vdC5oZWxwZXJzID0gWy4uLmNvbnRleHQuaGVscGVycy5rZXlzKCldO1xyXG4gICAgcm9vdC5jb21wb25lbnRzID0gWy4uLmNvbnRleHQuY29tcG9uZW50c107XHJcbiAgICByb290LmRpcmVjdGl2ZXMgPSBbLi4uY29udGV4dC5kaXJlY3RpdmVzXTtcclxuICAgIHJvb3QuaW1wb3J0cyA9IGNvbnRleHQuaW1wb3J0cztcclxuICAgIHJvb3QuaG9pc3RzID0gY29udGV4dC5ob2lzdHM7XHJcbiAgICByb290LnRlbXBzID0gY29udGV4dC50ZW1wcztcclxuICAgIHJvb3QuY2FjaGVkID0gY29udGV4dC5jYWNoZWQ7XHJcbiAgICB7XHJcbiAgICAgICAgcm9vdC5maWx0ZXJzID0gWy4uLmNvbnRleHQuZmlsdGVyc107XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUm9vdENvZGVnZW4ocm9vdCwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBoZWxwZXIgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSByb290O1xyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgLy8gaWYgdGhlIHNpbmdsZSBjaGlsZCBpcyBhbiBlbGVtZW50LCB0dXJuIGl0IGludG8gYSBibG9jay5cclxuICAgICAgICBpZiAoaXNTaW5nbGVFbGVtZW50Um9vdChyb290LCBjaGlsZCkgJiYgY2hpbGQuY29kZWdlbk5vZGUpIHtcclxuICAgICAgICAgICAgLy8gc2luZ2xlIGVsZW1lbnQgcm9vdCBpcyBuZXZlciBob2lzdGVkIHNvIGNvZGVnZW5Ob2RlIHdpbGwgbmV2ZXIgYmVcclxuICAgICAgICAgICAgLy8gU2ltcGxlRXhwcmVzc2lvbk5vZGVcclxuICAgICAgICAgICAgY29uc3QgY29kZWdlbk5vZGUgPSBjaGlsZC5jb2RlZ2VuTm9kZTtcclxuICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgICAgICAgICBtYWtlQmxvY2soY29kZWdlbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuY29kZWdlbk5vZGUgPSBjb2RlZ2VuTm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIC0gc2luZ2xlIDxzbG90Lz4sIElmTm9kZSwgRm9yTm9kZTogYWxyZWFkeSBibG9ja3MuXHJcbiAgICAgICAgICAgIC8vIC0gc2luZ2xlIHRleHQgbm9kZTogYWx3YXlzIHBhdGNoZWQuXHJcbiAgICAgICAgICAgIC8vIHJvb3QgY29kZWdlbiBmYWxscyB0aHJvdWdoIHZpYSBnZW5Ob2RlKClcclxuICAgICAgICAgICAgcm9vdC5jb2RlZ2VuTm9kZSA9IGNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyByb290IGhhcyBtdWx0aXBsZSBub2RlcyAtIHJldHVybiBhIGZyYWdtZW50IGJsb2NrLlxyXG4gICAgICAgIGxldCBwYXRjaEZsYWcgPSA2NCAvKiBQYXRjaEZsYWdzLlNUQUJMRV9GUkFHTUVOVCAqLztcclxuICAgICAgICBsZXQgcGF0Y2hGbGFnVGV4dCA9IFBhdGNoRmxhZ05hbWVzWzY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovXTtcclxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgZnJhZ21lbnQgYWN0dWFsbHkgY29udGFpbnMgYSBzaW5nbGUgdmFsaWQgY2hpbGQgd2l0aFxyXG4gICAgICAgIC8vIHRoZSByZXN0IGJlaW5nIGNvbW1lbnRzXHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICBjaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnR5cGUgIT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8pLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBwYXRjaEZsYWcgfD0gMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovO1xyXG4gICAgICAgICAgICBwYXRjaEZsYWdUZXh0ICs9IGAsICR7UGF0Y2hGbGFnTmFtZXNbMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmNvZGVnZW5Ob2RlID0gY3JlYXRlVk5vZGVDYWxsKGNvbnRleHQsIGhlbHBlcihGUkFHTUVOVCksIHVuZGVmaW5lZCwgcm9vdC5jaGlsZHJlbiwgcGF0Y2hGbGFnICsgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGAgLyogJHtwYXRjaEZsYWdUZXh0fSAqL2AgOiBgYCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCB1bmRlZmluZWQsIGZhbHNlIC8qIGlzQ29tcG9uZW50ICovKTtcclxuICAgIH1cclxuICAgIGVsc2UgO1xyXG59XHJcbmZ1bmN0aW9uIHRyYXZlcnNlQ2hpbGRyZW4ocGFyZW50LCBjb250ZXh0KSB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBjb25zdCBub2RlUmVtb3ZlZCA9ICgpID0+IHtcclxuICAgICAgICBpLS07XHJcbiAgICB9O1xyXG4gICAgZm9yICg7IGkgPCBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcoY2hpbGQpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjb250ZXh0LnBhcmVudCA9IHBhcmVudDtcclxuICAgICAgICBjb250ZXh0LmNoaWxkSW5kZXggPSBpO1xyXG4gICAgICAgIGNvbnRleHQub25Ob2RlUmVtb3ZlZCA9IG5vZGVSZW1vdmVkO1xyXG4gICAgICAgIHRyYXZlcnNlTm9kZShjaGlsZCwgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQuY3VycmVudE5vZGUgPSBub2RlO1xyXG4gICAgLy8gYXBwbHkgdHJhbnNmb3JtIHBsdWdpbnNcclxuICAgIGNvbnN0IHsgbm9kZVRyYW5zZm9ybXMgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCBleGl0Rm5zID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVUcmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgb25FeGl0ID0gbm9kZVRyYW5zZm9ybXNbaV0obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKG9uRXhpdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheShvbkV4aXQpKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Rm5zLnB1c2goLi4ub25FeGl0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4aXRGbnMucHVzaChvbkV4aXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY29udGV4dC5jdXJyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAvLyBub2RlIHdhcyByZW1vdmVkXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG5vZGUgbWF5IGhhdmUgYmVlbiByZXBsYWNlZFxyXG4gICAgICAgICAgICBub2RlID0gY29udGV4dC5jdXJyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xyXG4gICAgICAgIGNhc2UgMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLzpcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0LnNzcikge1xyXG4gICAgICAgICAgICAgICAgLy8gaW5qZWN0IGltcG9ydCBmb3IgdGhlIENvbW1lbnQgc3ltYm9sLCB3aGljaCBpcyBuZWVkZWQgZm9yIGNyZWF0aW5nXHJcbiAgICAgICAgICAgICAgICAvLyBjb21tZW50IG5vZGVzIHdpdGggYGNyZWF0ZVZOb2RlYFxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5oZWxwZXIoQ1JFQVRFX0NPTU1FTlQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLzpcclxuICAgICAgICAgICAgLy8gbm8gbmVlZCB0byB0cmF2ZXJzZSwgYnV0IHdlIG5lZWQgdG8gaW5qZWN0IHRvU3RyaW5nIGhlbHBlclxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuc3NyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhlbHBlcihUT19ESVNQTEFZX1NUUklORyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8gZm9yIGNvbnRhaW5lciB0eXBlcywgZnVydGhlciB0cmF2ZXJzZSBkb3dud2FyZHNcclxuICAgICAgICBjYXNlIDkgLyogTm9kZVR5cGVzLklGICovOlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuYnJhbmNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRyYXZlcnNlTm9kZShub2RlLmJyYW5jaGVzW2ldLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi86XHJcbiAgICAgICAgY2FzZSAxMSAvKiBOb2RlVHlwZXMuRk9SICovOlxyXG4gICAgICAgIGNhc2UgMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLzpcclxuICAgICAgICBjYXNlIDAgLyogTm9kZVR5cGVzLlJPT1QgKi86XHJcbiAgICAgICAgICAgIHRyYXZlcnNlQ2hpbGRyZW4obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gZXhpdCB0cmFuc2Zvcm1zXHJcbiAgICBjb250ZXh0LmN1cnJlbnROb2RlID0gbm9kZTtcclxuICAgIGxldCBpID0gZXhpdEZucy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgZXhpdEZuc1tpXSgpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0cnVjdHVyYWxEaXJlY3RpdmVUcmFuc2Zvcm0obmFtZSwgZm4pIHtcclxuICAgIGNvbnN0IG1hdGNoZXMgPSBpc1N0cmluZyhuYW1lKVxyXG4gICAgICAgID8gKG4pID0+IG4gPT09IG5hbWVcclxuICAgICAgICA6IChuKSA9PiBuYW1lLnRlc3Qobik7XHJcbiAgICByZXR1cm4gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcHMgfSA9IG5vZGU7XHJcbiAgICAgICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHRyYW5zZm9ybXMgYXJlIG5vdCBjb25jZXJuZWQgd2l0aCBzbG90c1xyXG4gICAgICAgICAgICAvLyBhcyB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gdlNsb3QudHNcclxuICAgICAgICAgICAgaWYgKG5vZGUudGFnVHlwZSA9PT0gMyAvKiBFbGVtZW50VHlwZXMuVEVNUExBVEUgKi8gJiYgcHJvcHMuc29tZShpc1ZTbG90KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXRGbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIG1hdGNoZXMocHJvcC5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlcyBhcmUgcmVtb3ZlZCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb25cclxuICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIHdlIHJlbW92ZSB0aGVtICpiZWZvcmUqIGFwcGx5aW5nIHNvIHRoYXQgaXQgY2FuIGZ1cnRoZXJcclxuICAgICAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZSBpdHNlbGYgaW4gY2FzZSBpdCBtb3ZlcyB0aGUgbm9kZSBhcm91bmRcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uRXhpdCA9IGZuKG5vZGUsIHByb3AsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkV4aXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRGbnMucHVzaChvbkV4aXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBleGl0Rm5zO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuY29uc3QgUFVSRV9BTk5PVEFUSU9OID0gYC8qI19fUFVSRV9fKi9gO1xyXG5jb25zdCBhbGlhc0hlbHBlciA9IChzKSA9PiBgJHtoZWxwZXJOYW1lTWFwW3NdfTogXyR7aGVscGVyTmFtZU1hcFtzXX1gO1xyXG5mdW5jdGlvbiBjcmVhdGVDb2RlZ2VuQ29udGV4dChhc3QsIHsgbW9kZSA9ICdmdW5jdGlvbicsIHByZWZpeElkZW50aWZpZXJzID0gbW9kZSA9PT0gJ21vZHVsZScsIHNvdXJjZU1hcCA9IGZhbHNlLCBmaWxlbmFtZSA9IGB0ZW1wbGF0ZS52dWUuaHRtbGAsIHNjb3BlSWQgPSBudWxsLCBvcHRpbWl6ZUltcG9ydHMgPSBmYWxzZSwgcnVudGltZUdsb2JhbE5hbWUgPSBgVnVlYCwgcnVudGltZU1vZHVsZU5hbWUgPSBgdnVlYCwgc3NyUnVudGltZU1vZHVsZU5hbWUgPSAndnVlL3NlcnZlci1yZW5kZXJlcicsIHNzciA9IGZhbHNlLCBpc1RTID0gZmFsc2UsIGluU1NSID0gZmFsc2UgfSkge1xyXG4gICAgY29uc3QgY29udGV4dCA9IHtcclxuICAgICAgICBtb2RlLFxyXG4gICAgICAgIHByZWZpeElkZW50aWZpZXJzLFxyXG4gICAgICAgIHNvdXJjZU1hcCxcclxuICAgICAgICBmaWxlbmFtZSxcclxuICAgICAgICBzY29wZUlkLFxyXG4gICAgICAgIG9wdGltaXplSW1wb3J0cyxcclxuICAgICAgICBydW50aW1lR2xvYmFsTmFtZSxcclxuICAgICAgICBydW50aW1lTW9kdWxlTmFtZSxcclxuICAgICAgICBzc3JSdW50aW1lTW9kdWxlTmFtZSxcclxuICAgICAgICBzc3IsXHJcbiAgICAgICAgaXNUUyxcclxuICAgICAgICBpblNTUixcclxuICAgICAgICBzb3VyY2U6IGFzdC5sb2Muc291cmNlLFxyXG4gICAgICAgIGNvZGU6IGBgLFxyXG4gICAgICAgIGNvbHVtbjogMSxcclxuICAgICAgICBsaW5lOiAxLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICBpbmRlbnRMZXZlbDogMCxcclxuICAgICAgICBwdXJlOiBmYWxzZSxcclxuICAgICAgICBtYXA6IHVuZGVmaW5lZCxcclxuICAgICAgICBoZWxwZXIoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXyR7aGVscGVyTmFtZU1hcFtrZXldfWA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwdXNoKGNvZGUsIG5vZGUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5jb2RlICs9IGNvZGU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmRlbnQoKSB7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoKytjb250ZXh0LmluZGVudExldmVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlaW5kZW50KHdpdGhvdXROZXdMaW5lID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKHdpdGhvdXROZXdMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAtLWNvbnRleHQuaW5kZW50TGV2ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdsaW5lKC0tY29udGV4dC5pbmRlbnRMZXZlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG5ld2xpbmUoKSB7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoY29udGV4dC5pbmRlbnRMZXZlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG5ld2xpbmUobikge1xyXG4gICAgICAgIGNvbnRleHQucHVzaCgnXFxuJyArIGAgIGAucmVwZWF0KG4pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250ZXh0O1xyXG59XHJcbmZ1bmN0aW9uIGdlbmVyYXRlKGFzdCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlQ29kZWdlbkNvbnRleHQoYXN0LCBvcHRpb25zKTtcclxuICAgIGlmIChvcHRpb25zLm9uQ29udGV4dENyZWF0ZWQpXHJcbiAgICAgICAgb3B0aW9ucy5vbkNvbnRleHRDcmVhdGVkKGNvbnRleHQpO1xyXG4gICAgY29uc3QgeyBtb2RlLCBwdXNoLCBwcmVmaXhJZGVudGlmaWVycywgaW5kZW50LCBkZWluZGVudCwgbmV3bGluZSwgc2NvcGVJZCwgc3NyIH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3QgaGFzSGVscGVycyA9IGFzdC5oZWxwZXJzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCB1c2VXaXRoQmxvY2sgPSAhcHJlZml4SWRlbnRpZmllcnMgJiYgbW9kZSAhPT0gJ21vZHVsZSc7XHJcbiAgICAvLyBwcmVhbWJsZXNcclxuICAgIC8vIGluIHNldHVwKCkgaW5saW5lIG1vZGUsIHRoZSBwcmVhbWJsZSBpcyBnZW5lcmF0ZWQgaW4gYSBzdWIgY29udGV4dFxyXG4gICAgLy8gYW5kIHJldHVybmVkIHNlcGFyYXRlbHkuXHJcbiAgICBjb25zdCBwcmVhbWJsZUNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAge1xyXG4gICAgICAgIGdlbkZ1bmN0aW9uUHJlYW1ibGUoYXN0LCBwcmVhbWJsZUNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgLy8gZW50ZXIgcmVuZGVyIGZ1bmN0aW9uXHJcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzc3IgPyBgc3NyUmVuZGVyYCA6IGByZW5kZXJgO1xyXG4gICAgY29uc3QgYXJncyA9IHNzciA/IFsnX2N0eCcsICdfcHVzaCcsICdfcGFyZW50JywgJ19hdHRycyddIDogWydfY3R4JywgJ19jYWNoZSddO1xyXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXJncy5qb2luKCcsICcpO1xyXG4gICAge1xyXG4gICAgICAgIHB1c2goYGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSgke3NpZ25hdHVyZX0pIHtgKTtcclxuICAgIH1cclxuICAgIGluZGVudCgpO1xyXG4gICAgaWYgKHVzZVdpdGhCbG9jaykge1xyXG4gICAgICAgIHB1c2goYHdpdGggKF9jdHgpIHtgKTtcclxuICAgICAgICBpbmRlbnQoKTtcclxuICAgICAgICAvLyBmdW5jdGlvbiBtb2RlIGNvbnN0IGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgaW5zaWRlIHdpdGggYmxvY2tcclxuICAgICAgICAvLyBhbHNvIHRoZXkgc2hvdWxkIGJlIHJlbmFtZWQgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggdXNlciBwcm9wZXJ0aWVzXHJcbiAgICAgICAgaWYgKGhhc0hlbHBlcnMpIHtcclxuICAgICAgICAgICAgcHVzaChgY29uc3QgeyAke2FzdC5oZWxwZXJzLm1hcChhbGlhc0hlbHBlcikuam9pbignLCAnKX0gfSA9IF9WdWVgKTtcclxuICAgICAgICAgICAgcHVzaChgXFxuYCk7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBnZW5lcmF0ZSBhc3NldCByZXNvbHV0aW9uIHN0YXRlbWVudHNcclxuICAgIGlmIChhc3QuY29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgICAgICBnZW5Bc3NldHMoYXN0LmNvbXBvbmVudHMsICdjb21wb25lbnQnLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoYXN0LmRpcmVjdGl2ZXMubGVuZ3RoIHx8IGFzdC50ZW1wcyA+IDApIHtcclxuICAgICAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChhc3QuZGlyZWN0aXZlcy5sZW5ndGgpIHtcclxuICAgICAgICBnZW5Bc3NldHMoYXN0LmRpcmVjdGl2ZXMsICdkaXJlY3RpdmUnLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoYXN0LnRlbXBzID4gMCkge1xyXG4gICAgICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFzdC5maWx0ZXJzICYmIGFzdC5maWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICBnZW5Bc3NldHMoYXN0LmZpbHRlcnMsICdmaWx0ZXInLCBjb250ZXh0KTtcclxuICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXN0LnRlbXBzID4gMCkge1xyXG4gICAgICAgIHB1c2goYGxldCBgKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFzdC50ZW1wczsgaSsrKSB7XHJcbiAgICAgICAgICAgIHB1c2goYCR7aSA+IDAgPyBgLCBgIDogYGB9X3RlbXAke2l9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFzdC5jb21wb25lbnRzLmxlbmd0aCB8fCBhc3QuZGlyZWN0aXZlcy5sZW5ndGggfHwgYXN0LnRlbXBzKSB7XHJcbiAgICAgICAgcHVzaChgXFxuYCk7XHJcbiAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gZ2VuZXJhdGUgdGhlIFZOb2RlIHRyZWUgZXhwcmVzc2lvblxyXG4gICAgaWYgKCFzc3IpIHtcclxuICAgICAgICBwdXNoKGByZXR1cm4gYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXN0LmNvZGVnZW5Ob2RlKSB7XHJcbiAgICAgICAgZ2VuTm9kZShhc3QuY29kZWdlbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcHVzaChgbnVsbGApO1xyXG4gICAgfVxyXG4gICAgaWYgKHVzZVdpdGhCbG9jaykge1xyXG4gICAgICAgIGRlaW5kZW50KCk7XHJcbiAgICAgICAgcHVzaChgfWApO1xyXG4gICAgfVxyXG4gICAgZGVpbmRlbnQoKTtcclxuICAgIHB1c2goYH1gKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgYXN0LFxyXG4gICAgICAgIGNvZGU6IGNvbnRleHQuY29kZSxcclxuICAgICAgICBwcmVhbWJsZTogYGAsXHJcbiAgICAgICAgLy8gU291cmNlTWFwR2VuZXJhdG9yIGRvZXMgaGF2ZSB0b0pTT04oKSBtZXRob2QgYnV0IGl0J3Mgbm90IGluIHRoZSB0eXBlc1xyXG4gICAgICAgIG1hcDogY29udGV4dC5tYXAgPyBjb250ZXh0Lm1hcC50b0pTT04oKSA6IHVuZGVmaW5lZFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZW5GdW5jdGlvblByZWFtYmxlKGFzdCwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBzc3IsIHByZWZpeElkZW50aWZpZXJzLCBwdXNoLCBuZXdsaW5lLCBydW50aW1lTW9kdWxlTmFtZSwgcnVudGltZUdsb2JhbE5hbWUsIHNzclJ1bnRpbWVNb2R1bGVOYW1lIH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3QgVnVlQmluZGluZyA9IHJ1bnRpbWVHbG9iYWxOYW1lO1xyXG4gICAgLy8gR2VuZXJhdGUgY29uc3QgZGVjbGFyYXRpb24gZm9yIGhlbHBlcnNcclxuICAgIC8vIEluIHByZWZpeCBtb2RlLCB3ZSBwbGFjZSB0aGUgY29uc3QgZGVjbGFyYXRpb24gYXQgdG9wIHNvIGl0J3MgZG9uZVxyXG4gICAgLy8gb25seSBvbmNlOyBCdXQgaWYgd2Ugbm90IHByZWZpeGluZywgd2UgcGxhY2UgdGhlIGRlY2xhcmF0aW9uIGluc2lkZSB0aGVcclxuICAgIC8vIHdpdGggYmxvY2sgc28gaXQgZG9lc24ndCBpbmN1ciB0aGUgYGluYCBjaGVjayBjb3N0IGZvciBldmVyeSBoZWxwZXIgYWNjZXNzLlxyXG4gICAgaWYgKGFzdC5oZWxwZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIFwid2l0aFwiIG1vZGUuXHJcbiAgICAgICAgICAgIC8vIHNhdmUgVnVlIGluIGEgc2VwYXJhdGUgdmFyaWFibGUgdG8gYXZvaWQgY29sbGlzaW9uXHJcbiAgICAgICAgICAgIHB1c2goYGNvbnN0IF9WdWUgPSAke1Z1ZUJpbmRpbmd9XFxuYCk7XHJcbiAgICAgICAgICAgIC8vIGluIFwid2l0aFwiIG1vZGUsIGhlbHBlcnMgYXJlIGRlY2xhcmVkIGluc2lkZSB0aGUgd2l0aCBibG9jayB0byBhdm9pZFxyXG4gICAgICAgICAgICAvLyBoYXMgY2hlY2sgY29zdCwgYnV0IGhvaXN0cyBhcmUgbGlmdGVkIG91dCBvZiB0aGUgZnVuY3Rpb24gLSB3ZSBuZWVkXHJcbiAgICAgICAgICAgIC8vIHRvIHByb3ZpZGUgdGhlIGhlbHBlciBoZXJlLlxyXG4gICAgICAgICAgICBpZiAoYXN0LmhvaXN0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRpY0hlbHBlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX1ZOT0RFLFxyXG4gICAgICAgICAgICAgICAgICAgIENSRUFURV9FTEVNRU5UX1ZOT0RFLFxyXG4gICAgICAgICAgICAgICAgICAgIENSRUFURV9DT01NRU5ULFxyXG4gICAgICAgICAgICAgICAgICAgIENSRUFURV9URVhULFxyXG4gICAgICAgICAgICAgICAgICAgIENSRUFURV9TVEFUSUNcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGhlbHBlciA9PiBhc3QuaGVscGVycy5pbmNsdWRlcyhoZWxwZXIpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoYWxpYXNIZWxwZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgICAgICBwdXNoKGBjb25zdCB7ICR7c3RhdGljSGVscGVyc30gfSA9IF9WdWVcXG5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdlbkhvaXN0cyhhc3QuaG9pc3RzLCBjb250ZXh0KTtcclxuICAgIG5ld2xpbmUoKTtcclxuICAgIHB1c2goYHJldHVybiBgKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Bc3NldHMoYXNzZXRzLCB0eXBlLCB7IGhlbHBlciwgcHVzaCwgbmV3bGluZSwgaXNUUyB9KSB7XHJcbiAgICBjb25zdCByZXNvbHZlciA9IGhlbHBlcih0eXBlID09PSAnZmlsdGVyJ1xyXG4gICAgICAgID8gUkVTT0xWRV9GSUxURVJcclxuICAgICAgICA6IHR5cGUgPT09ICdjb21wb25lbnQnXHJcbiAgICAgICAgICAgID8gUkVTT0xWRV9DT01QT05FTlRcclxuICAgICAgICAgICAgOiBSRVNPTFZFX0RJUkVDVElWRSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBpZCA9IGFzc2V0c1tpXTtcclxuICAgICAgICAvLyBwb3RlbnRpYWwgY29tcG9uZW50IGltcGxpY2l0IHNlbGYtcmVmZXJlbmNlIGluZmVycmVkIGZyb20gU0ZDIGZpbGVuYW1lXHJcbiAgICAgICAgY29uc3QgbWF5YmVTZWxmUmVmZXJlbmNlID0gaWQuZW5kc1dpdGgoJ19fc2VsZicpO1xyXG4gICAgICAgIGlmIChtYXliZVNlbGZSZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgwLCAtNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHB1c2goYGNvbnN0ICR7dG9WYWxpZEFzc2V0SWQoaWQsIHR5cGUpfSA9ICR7cmVzb2x2ZXJ9KCR7SlNPTi5zdHJpbmdpZnkoaWQpfSR7bWF5YmVTZWxmUmVmZXJlbmNlID8gYCwgdHJ1ZWAgOiBgYH0pJHtpc1RTID8gYCFgIDogYGB9YCk7XHJcbiAgICAgICAgaWYgKGkgPCBhc3NldHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbkhvaXN0cyhob2lzdHMsIGNvbnRleHQpIHtcclxuICAgIGlmICghaG9pc3RzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnRleHQucHVyZSA9IHRydWU7XHJcbiAgICBjb25zdCB7IHB1c2gsIG5ld2xpbmUsIGhlbHBlciwgc2NvcGVJZCwgbW9kZSB9ID0gY29udGV4dDtcclxuICAgIG5ld2xpbmUoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9pc3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZXhwID0gaG9pc3RzW2ldO1xyXG4gICAgICAgIGlmIChleHApIHtcclxuICAgICAgICAgICAgcHVzaChgY29uc3QgX2hvaXN0ZWRfJHtpICsgMX0gPSAke2BgfWApO1xyXG4gICAgICAgICAgICBnZW5Ob2RlKGV4cCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb250ZXh0LnB1cmUgPSBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBpc1RleHQkMShuKSB7XHJcbiAgICByZXR1cm4gKGlzU3RyaW5nKG4pIHx8XHJcbiAgICAgICAgbi50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyB8fFxyXG4gICAgICAgIG4udHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyB8fFxyXG4gICAgICAgIG4udHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLyB8fFxyXG4gICAgICAgIG4udHlwZSA9PT0gOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLyk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuTm9kZUxpc3RBc0FycmF5KG5vZGVzLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBtdWx0aWxpbmVzID0gbm9kZXMubGVuZ3RoID4gMyB8fFxyXG4gICAgICAgICgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSAmJiBub2Rlcy5zb21lKG4gPT4gaXNBcnJheShuKSB8fCAhaXNUZXh0JDEobikpKTtcclxuICAgIGNvbnRleHQucHVzaChgW2ApO1xyXG4gICAgbXVsdGlsaW5lcyAmJiBjb250ZXh0LmluZGVudCgpO1xyXG4gICAgZ2VuTm9kZUxpc3Qobm9kZXMsIGNvbnRleHQsIG11bHRpbGluZXMpO1xyXG4gICAgbXVsdGlsaW5lcyAmJiBjb250ZXh0LmRlaW5kZW50KCk7XHJcbiAgICBjb250ZXh0LnB1c2goYF1gKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Ob2RlTGlzdChub2RlcywgY29udGV4dCwgbXVsdGlsaW5lcyA9IGZhbHNlLCBjb21tYSA9IHRydWUpIHtcclxuICAgIGNvbnN0IHsgcHVzaCwgbmV3bGluZSB9ID0gY29udGV4dDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5vZGUpKSB7XHJcbiAgICAgICAgICAgIHB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobm9kZSkpIHtcclxuICAgICAgICAgICAgZ2VuTm9kZUxpc3RBc0FycmF5KG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VuTm9kZShub2RlLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGkgPCBub2Rlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGlmIChtdWx0aWxpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb21tYSAmJiBwdXNoKCcsJyk7XHJcbiAgICAgICAgICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb21tYSAmJiBwdXNoKCcsICcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbk5vZGUobm9kZSwgY29udGV4dCkge1xyXG4gICAgaWYgKGlzU3RyaW5nKG5vZGUpKSB7XHJcbiAgICAgICAgY29udGV4dC5wdXNoKG5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1N5bWJvbChub2RlKSkge1xyXG4gICAgICAgIGNvbnRleHQucHVzaChjb250ZXh0LmhlbHBlcihub2RlKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcclxuICAgICAgICBjYXNlIDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi86XHJcbiAgICAgICAgY2FzZSA5IC8qIE5vZGVUeXBlcy5JRiAqLzpcclxuICAgICAgICBjYXNlIDExIC8qIE5vZGVUeXBlcy5GT1IgKi86XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgYXNzZXJ0KG5vZGUuY29kZWdlbk5vZGUgIT0gbnVsbCwgYENvZGVnZW4gbm9kZSBpcyBtaXNzaW5nIGZvciBlbGVtZW50L2lmL2ZvciBub2RlLiBgICtcclxuICAgICAgICAgICAgICAgICAgICBgQXBwbHkgYXBwcm9wcmlhdGUgdHJhbnNmb3JtcyBmaXJzdC5gKTtcclxuICAgICAgICAgICAgZ2VuTm9kZShub2RlLmNvZGVnZW5Ob2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyIC8qIE5vZGVUeXBlcy5URVhUICovOlxyXG4gICAgICAgICAgICBnZW5UZXh0KG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5FeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkludGVycG9sYXRpb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTIgLyogTm9kZVR5cGVzLlRFWFRfQ0FMTCAqLzpcclxuICAgICAgICAgICAgZ2VuTm9kZShub2RlLmNvZGVnZW5Ob2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5Db21wb3VuZEV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLzpcclxuICAgICAgICAgICAgZ2VuQ29tbWVudChub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLzpcclxuICAgICAgICAgICAgZ2VuVk5vZGVDYWxsKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE0IC8qIE5vZGVUeXBlcy5KU19DQUxMX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkNhbGxFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE1IC8qIE5vZGVUeXBlcy5KU19PQkpFQ1RfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgZ2VuT2JqZWN0RXhwcmVzc2lvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxNyAvKiBOb2RlVHlwZXMuSlNfQVJSQVlfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgZ2VuQXJyYXlFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE4IC8qIE5vZGVUeXBlcy5KU19GVU5DVElPTl9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5GdW5jdGlvbkV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTkgLyogTm9kZVR5cGVzLkpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyMCAvKiBOb2RlVHlwZXMuSlNfQ0FDSEVfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgZ2VuQ2FjaGVFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDIxIC8qIE5vZGVUeXBlcy5KU19CTE9DS19TVEFURU1FTlQgKi86XHJcbiAgICAgICAgICAgIGdlbk5vZGVMaXN0KG5vZGUuYm9keSwgY29udGV4dCwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBTU1Igb25seSB0eXBlc1xyXG4gICAgICAgIGNhc2UgMjIgLyogTm9kZVR5cGVzLkpTX1RFTVBMQVRFX0xJVEVSQUwgKi86XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjMgLyogTm9kZVR5cGVzLkpTX0lGX1NUQVRFTUVOVCAqLzpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyNCAvKiBOb2RlVHlwZXMuSlNfQVNTSUdOTUVOVF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI1IC8qIE5vZGVUeXBlcy5KU19TRVFVRU5DRV9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI2IC8qIE5vZGVUeXBlcy5KU19SRVRVUk5fU1RBVEVNRU5UICovOlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGNhc2UgMTAgLyogTm9kZVR5cGVzLklGX0JSQU5DSCAqLzpcclxuICAgICAgICAgICAgLy8gbm9vcFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGB1bmhhbmRsZWQgY29kZWdlbiBub2RlIHR5cGU6ICR7bm9kZS50eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGV4aGF1c3QgYWxsIHBvc3NpYmxlIHR5cGVzXHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGhhdXN0aXZlQ2hlY2sgPSBub2RlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aGF1c3RpdmVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlblRleHQobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wdXNoKEpTT04uc3RyaW5naWZ5KG5vZGUuY29udGVudCksIG5vZGUpO1xyXG59XHJcbmZ1bmN0aW9uIGdlbkV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBjb250ZW50LCBpc1N0YXRpYyB9ID0gbm9kZTtcclxuICAgIGNvbnRleHQucHVzaChpc1N0YXRpYyA/IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpIDogY29udGVudCwgbm9kZSk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuSW50ZXJwb2xhdGlvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2gsIGhlbHBlciwgcHVyZSB9ID0gY29udGV4dDtcclxuICAgIGlmIChwdXJlKVxyXG4gICAgICAgIHB1c2goUFVSRV9BTk5PVEFUSU9OKTtcclxuICAgIHB1c2goYCR7aGVscGVyKFRPX0RJU1BMQVlfU1RSSU5HKX0oYCk7XHJcbiAgICBnZW5Ob2RlKG5vZGUuY29udGVudCwgY29udGV4dCk7XHJcbiAgICBwdXNoKGApYCk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuQ29tcG91bmRFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQucHVzaChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBnZW5Ob2RlKGNoaWxkLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuRXhwcmVzc2lvbkFzUHJvcGVydHlLZXkobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoIH0gPSBjb250ZXh0O1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIHB1c2goYFtgKTtcclxuICAgICAgICBnZW5Db21wb3VuZEV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgcHVzaChgXWApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5pc1N0YXRpYykge1xyXG4gICAgICAgIC8vIG9ubHkgcXVvdGUga2V5cyBpZiBuZWNlc3NhcnlcclxuICAgICAgICBjb25zdCB0ZXh0ID0gaXNTaW1wbGVJZGVudGlmaWVyKG5vZGUuY29udGVudClcclxuICAgICAgICAgICAgPyBub2RlLmNvbnRlbnRcclxuICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShub2RlLmNvbnRlbnQpO1xyXG4gICAgICAgIHB1c2godGV4dCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwdXNoKGBbJHtub2RlLmNvbnRlbnR9XWAsIG5vZGUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbkNvbW1lbnQobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBoZWxwZXIsIHB1cmUgfSA9IGNvbnRleHQ7XHJcbiAgICBpZiAocHVyZSkge1xyXG4gICAgICAgIHB1c2goUFVSRV9BTk5PVEFUSU9OKTtcclxuICAgIH1cclxuICAgIHB1c2goYCR7aGVscGVyKENSRUFURV9DT01NRU5UKX0oJHtKU09OLnN0cmluZ2lmeShub2RlLmNvbnRlbnQpfSlgLCBub2RlKTtcclxufVxyXG5mdW5jdGlvbiBnZW5WTm9kZUNhbGwobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBoZWxwZXIsIHB1cmUgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCB7IHRhZywgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgZGlyZWN0aXZlcywgaXNCbG9jaywgZGlzYWJsZVRyYWNraW5nLCBpc0NvbXBvbmVudCB9ID0gbm9kZTtcclxuICAgIGlmIChkaXJlY3RpdmVzKSB7XHJcbiAgICAgICAgcHVzaChoZWxwZXIoV0lUSF9ESVJFQ1RJVkVTKSArIGAoYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNCbG9jaykge1xyXG4gICAgICAgIHB1c2goYCgke2hlbHBlcihPUEVOX0JMT0NLKX0oJHtkaXNhYmxlVHJhY2tpbmcgPyBgdHJ1ZWAgOiBgYH0pLCBgKTtcclxuICAgIH1cclxuICAgIGlmIChwdXJlKSB7XHJcbiAgICAgICAgcHVzaChQVVJFX0FOTk9UQVRJT04pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FsbEhlbHBlciA9IGlzQmxvY2tcclxuICAgICAgICA/IGdldFZOb2RlQmxvY2tIZWxwZXIoY29udGV4dC5pblNTUiwgaXNDb21wb25lbnQpXHJcbiAgICAgICAgOiBnZXRWTm9kZUhlbHBlcihjb250ZXh0LmluU1NSLCBpc0NvbXBvbmVudCk7XHJcbiAgICBwdXNoKGhlbHBlcihjYWxsSGVscGVyKSArIGAoYCwgbm9kZSk7XHJcbiAgICBnZW5Ob2RlTGlzdChnZW5OdWxsYWJsZUFyZ3MoW3RhZywgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wc10pLCBjb250ZXh0KTtcclxuICAgIHB1c2goYClgKTtcclxuICAgIGlmIChpc0Jsb2NrKSB7XHJcbiAgICAgICAgcHVzaChgKWApO1xyXG4gICAgfVxyXG4gICAgaWYgKGRpcmVjdGl2ZXMpIHtcclxuICAgICAgICBwdXNoKGAsIGApO1xyXG4gICAgICAgIGdlbk5vZGUoZGlyZWN0aXZlcywgY29udGV4dCk7XHJcbiAgICAgICAgcHVzaChgKWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbk51bGxhYmxlQXJncyhhcmdzKSB7XHJcbiAgICBsZXQgaSA9IGFyZ3MubGVuZ3RoO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlmIChhcmdzW2ldICE9IG51bGwpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyZ3Muc2xpY2UoMCwgaSArIDEpLm1hcChhcmcgPT4gYXJnIHx8IGBudWxsYCk7XHJcbn1cclxuLy8gSmF2YVNjcmlwdFxyXG5mdW5jdGlvbiBnZW5DYWxsRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2gsIGhlbHBlciwgcHVyZSB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IGNhbGxlZSA9IGlzU3RyaW5nKG5vZGUuY2FsbGVlKSA/IG5vZGUuY2FsbGVlIDogaGVscGVyKG5vZGUuY2FsbGVlKTtcclxuICAgIGlmIChwdXJlKSB7XHJcbiAgICAgICAgcHVzaChQVVJFX0FOTk9UQVRJT04pO1xyXG4gICAgfVxyXG4gICAgcHVzaChjYWxsZWUgKyBgKGAsIG5vZGUpO1xyXG4gICAgZ2VuTm9kZUxpc3Qobm9kZS5hcmd1bWVudHMsIGNvbnRleHQpO1xyXG4gICAgcHVzaChgKWApO1xyXG59XHJcbmZ1bmN0aW9uIGdlbk9iamVjdEV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBpbmRlbnQsIGRlaW5kZW50LCBuZXdsaW5lIH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSBub2RlO1xyXG4gICAgaWYgKCFwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgICAgIHB1c2goYHt9YCwgbm9kZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbXVsdGlsaW5lcyA9IHByb3BlcnRpZXMubGVuZ3RoID4gMSB8fFxyXG4gICAgICAgICgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSAmJlxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnNvbWUocCA9PiBwLnZhbHVlLnR5cGUgIT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSk7XHJcbiAgICBwdXNoKG11bHRpbGluZXMgPyBge2AgOiBgeyBgKTtcclxuICAgIG11bHRpbGluZXMgJiYgaW5kZW50KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgLy8ga2V5XHJcbiAgICAgICAgZ2VuRXhwcmVzc2lvbkFzUHJvcGVydHlLZXkoa2V5LCBjb250ZXh0KTtcclxuICAgICAgICBwdXNoKGA6IGApO1xyXG4gICAgICAgIC8vIHZhbHVlXHJcbiAgICAgICAgZ2VuTm9kZSh2YWx1ZSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGkgPCBwcm9wZXJ0aWVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgLy8gd2lsbCBvbmx5IHJlYWNoIHRoaXMgaWYgaXQncyBtdWx0aWxpbmVzXHJcbiAgICAgICAgICAgIHB1c2goYCxgKTtcclxuICAgICAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG11bHRpbGluZXMgJiYgZGVpbmRlbnQoKTtcclxuICAgIHB1c2gobXVsdGlsaW5lcyA/IGB9YCA6IGAgfWApO1xyXG59XHJcbmZ1bmN0aW9uIGdlbkFycmF5RXhwcmVzc2lvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBnZW5Ob2RlTGlzdEFzQXJyYXkobm9kZS5lbGVtZW50cywgY29udGV4dCk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgcHVzaCwgaW5kZW50LCBkZWluZGVudCB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IHsgcGFyYW1zLCByZXR1cm5zLCBib2R5LCBuZXdsaW5lLCBpc1Nsb3QgfSA9IG5vZGU7XHJcbiAgICBpZiAoaXNTbG90KSB7XHJcbiAgICAgICAgLy8gd3JhcCBzbG90IGZ1bmN0aW9ucyB3aXRoIG93bmVyIGNvbnRleHRcclxuICAgICAgICBwdXNoKGBfJHtoZWxwZXJOYW1lTWFwW1dJVEhfQ1RYXX0oYCk7XHJcbiAgICB9XHJcbiAgICBwdXNoKGAoYCwgbm9kZSk7XHJcbiAgICBpZiAoaXNBcnJheShwYXJhbXMpKSB7XHJcbiAgICAgICAgZ2VuTm9kZUxpc3QocGFyYW1zLCBjb250ZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBhcmFtcykge1xyXG4gICAgICAgIGdlbk5vZGUocGFyYW1zLCBjb250ZXh0KTtcclxuICAgIH1cclxuICAgIHB1c2goYCkgPT4gYCk7XHJcbiAgICBpZiAobmV3bGluZSB8fCBib2R5KSB7XHJcbiAgICAgICAgcHVzaChge2ApO1xyXG4gICAgICAgIGluZGVudCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJldHVybnMpIHtcclxuICAgICAgICBpZiAobmV3bGluZSkge1xyXG4gICAgICAgICAgICBwdXNoKGByZXR1cm4gYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FycmF5KHJldHVybnMpKSB7XHJcbiAgICAgICAgICAgIGdlbk5vZGVMaXN0QXNBcnJheShyZXR1cm5zLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlbk5vZGUocmV0dXJucywgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYm9keSkge1xyXG4gICAgICAgIGdlbk5vZGUoYm9keSwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAobmV3bGluZSB8fCBib2R5KSB7XHJcbiAgICAgICAgZGVpbmRlbnQoKTtcclxuICAgICAgICBwdXNoKGB9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTbG90KSB7XHJcbiAgICAgICAgaWYgKG5vZGUuaXNOb25TY29wZWRTbG90KSB7XHJcbiAgICAgICAgICAgIHB1c2goYCwgdW5kZWZpbmVkLCB0cnVlYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHB1c2goYClgKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5Db25kaXRpb25hbEV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIG5ld2xpbmU6IG5lZWROZXdsaW5lIH0gPSBub2RlO1xyXG4gICAgY29uc3QgeyBwdXNoLCBpbmRlbnQsIGRlaW5kZW50LCBuZXdsaW5lIH0gPSBjb250ZXh0O1xyXG4gICAgaWYgKHRlc3QudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBjb25zdCBuZWVkc1BhcmVucyA9ICFpc1NpbXBsZUlkZW50aWZpZXIodGVzdC5jb250ZW50KTtcclxuICAgICAgICBuZWVkc1BhcmVucyAmJiBwdXNoKGAoYCk7XHJcbiAgICAgICAgZ2VuRXhwcmVzc2lvbih0ZXN0LCBjb250ZXh0KTtcclxuICAgICAgICBuZWVkc1BhcmVucyAmJiBwdXNoKGApYCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwdXNoKGAoYCk7XHJcbiAgICAgICAgZ2VuTm9kZSh0ZXN0LCBjb250ZXh0KTtcclxuICAgICAgICBwdXNoKGApYCk7XHJcbiAgICB9XHJcbiAgICBuZWVkTmV3bGluZSAmJiBpbmRlbnQoKTtcclxuICAgIGNvbnRleHQuaW5kZW50TGV2ZWwrKztcclxuICAgIG5lZWROZXdsaW5lIHx8IHB1c2goYCBgKTtcclxuICAgIHB1c2goYD8gYCk7XHJcbiAgICBnZW5Ob2RlKGNvbnNlcXVlbnQsIGNvbnRleHQpO1xyXG4gICAgY29udGV4dC5pbmRlbnRMZXZlbC0tO1xyXG4gICAgbmVlZE5ld2xpbmUgJiYgbmV3bGluZSgpO1xyXG4gICAgbmVlZE5ld2xpbmUgfHwgcHVzaChgIGApO1xyXG4gICAgcHVzaChgOiBgKTtcclxuICAgIGNvbnN0IGlzTmVzdGVkID0gYWx0ZXJuYXRlLnR5cGUgPT09IDE5IC8qIE5vZGVUeXBlcy5KU19DT05ESVRJT05BTF9FWFBSRVNTSU9OICovO1xyXG4gICAgaWYgKCFpc05lc3RlZCkge1xyXG4gICAgICAgIGNvbnRleHQuaW5kZW50TGV2ZWwrKztcclxuICAgIH1cclxuICAgIGdlbk5vZGUoYWx0ZXJuYXRlLCBjb250ZXh0KTtcclxuICAgIGlmICghaXNOZXN0ZWQpIHtcclxuICAgICAgICBjb250ZXh0LmluZGVudExldmVsLS07XHJcbiAgICB9XHJcbiAgICBuZWVkTmV3bGluZSAmJiBkZWluZGVudCh0cnVlIC8qIHdpdGhvdXQgbmV3bGluZSAqLyk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuQ2FjaGVFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgcHVzaCwgaGVscGVyLCBpbmRlbnQsIGRlaW5kZW50LCBuZXdsaW5lIH0gPSBjb250ZXh0O1xyXG4gICAgcHVzaChgX2NhY2hlWyR7bm9kZS5pbmRleH1dIHx8IChgKTtcclxuICAgIGlmIChub2RlLmlzVk5vZGUpIHtcclxuICAgICAgICBpbmRlbnQoKTtcclxuICAgICAgICBwdXNoKGAke2hlbHBlcihTRVRfQkxPQ0tfVFJBQ0tJTkcpfSgtMSksYCk7XHJcbiAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgfVxyXG4gICAgcHVzaChgX2NhY2hlWyR7bm9kZS5pbmRleH1dID0gYCk7XHJcbiAgICBnZW5Ob2RlKG5vZGUudmFsdWUsIGNvbnRleHQpO1xyXG4gICAgaWYgKG5vZGUuaXNWTm9kZSkge1xyXG4gICAgICAgIHB1c2goYCxgKTtcclxuICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgcHVzaChgJHtoZWxwZXIoU0VUX0JMT0NLX1RSQUNLSU5HKX0oMSksYCk7XHJcbiAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIHB1c2goYF9jYWNoZVske25vZGUuaW5kZXh9XWApO1xyXG4gICAgICAgIGRlaW5kZW50KCk7XHJcbiAgICB9XHJcbiAgICBwdXNoKGApYCk7XHJcbn1cblxuZnVuY3Rpb24gd2Fsa0lkZW50aWZpZXJzKHJvb3QsIG9uSWRlbnRpZmllciwgaW5jbHVkZUFsbCA9IGZhbHNlLCBwYXJlbnRTdGFjayA9IFtdLCBrbm93bklkcyA9IE9iamVjdC5jcmVhdGUobnVsbCkpIHtcclxuICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNSZWZlcmVuY2VkSWRlbnRpZmllcihpZCwgcGFyZW50LCBwYXJlbnRTdGFjaykge1xyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc0luRGVzdHJ1Y3R1cmVBc3NpZ25tZW50KHBhcmVudCwgcGFyZW50U3RhY2spIHtcclxuICAgIGlmIChwYXJlbnQgJiZcclxuICAgICAgICAocGFyZW50LnR5cGUgPT09ICdPYmplY3RQcm9wZXJ0eScgfHwgcGFyZW50LnR5cGUgPT09ICdBcnJheVBhdHRlcm4nKSkge1xyXG4gICAgICAgIGxldCBpID0gcGFyZW50U3RhY2subGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgcCA9IHBhcmVudFN0YWNrW2ldO1xyXG4gICAgICAgICAgICBpZiAocC50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwLnR5cGUgIT09ICdPYmplY3RQcm9wZXJ0eScgJiYgIXAudHlwZS5lbmRzV2l0aCgnUGF0dGVybicpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiB3YWxrRnVuY3Rpb25QYXJhbXMobm9kZSwgb25JZGVudCkge1xyXG4gICAgZm9yIChjb25zdCBwIG9mIG5vZGUucGFyYW1zKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBleHRyYWN0SWRlbnRpZmllcnMocCkpIHtcclxuICAgICAgICAgICAgb25JZGVudChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHdhbGtCbG9ja0RlY2xhcmF0aW9ucyhibG9jaywgb25JZGVudCkge1xyXG4gICAgZm9yIChjb25zdCBzdG10IG9mIGJsb2NrLmJvZHkpIHtcclxuICAgICAgICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKHN0bXQuZGVjbGFyZSlcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlY2wgb2Ygc3RtdC5kZWNsYXJhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgZXh0cmFjdElkZW50aWZpZXJzKGRlY2wuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25JZGVudChpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RtdC50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicgfHxcclxuICAgICAgICAgICAgc3RtdC50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKHN0bXQuZGVjbGFyZSB8fCAhc3RtdC5pZClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBvbklkZW50KHN0bXQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBleHRyYWN0SWRlbnRpZmllcnMocGFyYW0sIG5vZGVzID0gW10pIHtcclxuICAgIHN3aXRjaCAocGFyYW0udHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxyXG4gICAgICAgICAgICBub2Rlcy5wdXNoKHBhcmFtKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6XHJcbiAgICAgICAgICAgIGxldCBvYmplY3QgPSBwYXJhbTtcclxuICAgICAgICAgICAgd2hpbGUgKG9iamVjdC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5vYmplY3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZXMucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdPYmplY3RQYXR0ZXJuJzpcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHBhcmFtLnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09ICdSZXN0RWxlbWVudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHRyYWN0SWRlbnRpZmllcnMocHJvcC5hcmd1bWVudCwgbm9kZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFjdElkZW50aWZpZXJzKHByb3AudmFsdWUsIG5vZGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxyXG4gICAgICAgICAgICBwYXJhbS5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFjdElkZW50aWZpZXJzKGVsZW1lbnQsIG5vZGVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1Jlc3RFbGVtZW50JzpcclxuICAgICAgICAgICAgZXh0cmFjdElkZW50aWZpZXJzKHBhcmFtLmFyZ3VtZW50LCBub2Rlcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnRQYXR0ZXJuJzpcclxuICAgICAgICAgICAgZXh0cmFjdElkZW50aWZpZXJzKHBhcmFtLmxlZnQsIG5vZGVzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbn1cclxuY29uc3QgaXNGdW5jdGlvblR5cGUgPSAobm9kZSkgPT4ge1xyXG4gICAgcmV0dXJuIC9GdW5jdGlvbig/OkV4cHJlc3Npb258RGVjbGFyYXRpb24pJHxNZXRob2QkLy50ZXN0KG5vZGUudHlwZSk7XHJcbn07XHJcbmNvbnN0IGlzU3RhdGljUHJvcGVydHkgPSAobm9kZSkgPT4gbm9kZSAmJlxyXG4gICAgKG5vZGUudHlwZSA9PT0gJ09iamVjdFByb3BlcnR5JyB8fCBub2RlLnR5cGUgPT09ICdPYmplY3RNZXRob2QnKSAmJlxyXG4gICAgIW5vZGUuY29tcHV0ZWQ7XHJcbmNvbnN0IGlzU3RhdGljUHJvcGVydHlLZXkgPSAobm9kZSwgcGFyZW50KSA9PiBpc1N0YXRpY1Byb3BlcnR5KHBhcmVudCkgJiYgcGFyZW50LmtleSA9PT0gbm9kZTtcblxuLy8gdGhlc2Uga2V5d29yZHMgc2hvdWxkIG5vdCBhcHBlYXIgaW5zaWRlIGV4cHJlc3Npb25zLCBidXQgb3BlcmF0b3JzIGxpa2VcclxuLy8gdHlwZW9mLCBpbnN0YW5jZW9mIGFuZCBpbiBhcmUgYWxsb3dlZFxyXG5jb25zdCBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICtcclxuICAgICgnZG8saWYsZm9yLGxldCxuZXcsdHJ5LHZhcixjYXNlLGVsc2Usd2l0aCxhd2FpdCxicmVhayxjYXRjaCxjbGFzcyxjb25zdCwnICtcclxuICAgICAgICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xyXG4gICAgICAgICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzLHR5cGVvZix2b2lkJylcclxuICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgIC5qb2luKCdcXFxcYnxcXFxcYicpICtcclxuICAgICdcXFxcYicpO1xyXG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXHJcbmNvbnN0IHN0cmlwU3RyaW5nUkUgPSAvJyg/OlteJ1xcXFxdfFxcXFwuKSonfFwiKD86W15cIlxcXFxdfFxcXFwuKSpcInxgKD86W15gXFxcXF18XFxcXC4pKlxcJFxce3xcXH0oPzpbXmBcXFxcXXxcXFxcLikqYHxgKD86W15gXFxcXF18XFxcXC4pKmAvZztcclxuLyoqXHJcbiAqIFZhbGlkYXRlIGEgbm9uLXByZWZpeGVkIGV4cHJlc3Npb24uXHJcbiAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiB1c2luZyB0aGUgaW4tYnJvd3NlciBydW50aW1lIGNvbXBpbGVyIHNpbmNlIGl0XHJcbiAqIGRvZXNuJ3QgcHJlZml4IGV4cHJlc3Npb25zLlxyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVCcm93c2VyRXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBhc1BhcmFtcyA9IGZhbHNlLCBhc1Jhd1N0YXRlbWVudHMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZXhwID0gbm9kZS5jb250ZW50O1xyXG4gICAgLy8gZW1wdHkgZXhwcmVzc2lvbnMgYXJlIHZhbGlkYXRlZCBwZXItZGlyZWN0aXZlIHNpbmNlIHNvbWUgZGlyZWN0aXZlc1xyXG4gICAgLy8gZG8gYWxsb3cgZW1wdHkgZXhwcmVzc2lvbnMuXHJcbiAgICBpZiAoIWV4cC50cmltKCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIG5ldyBGdW5jdGlvbihhc1Jhd1N0YXRlbWVudHNcclxuICAgICAgICAgICAgPyBgICR7ZXhwfSBgXHJcbiAgICAgICAgICAgIDogYHJldHVybiAke2FzUGFyYW1zID8gYCgke2V4cH0pID0+IHt9YCA6IGAoJHtleHB9KWB9YCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gZS5tZXNzYWdlO1xyXG4gICAgICAgIGNvbnN0IGtleXdvcmRNYXRjaCA9IGV4cFxyXG4gICAgICAgICAgICAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJylcclxuICAgICAgICAgICAgLm1hdGNoKHByb2hpYml0ZWRLZXl3b3JkUkUpO1xyXG4gICAgICAgIGlmIChrZXl3b3JkTWF0Y2gpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IGBhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIke2tleXdvcmRNYXRjaFswXX1cImA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ0IC8qIEVycm9yQ29kZXMuWF9JTlZBTElEX0VYUFJFU1NJT04gKi8sIG5vZGUubG9jLCB1bmRlZmluZWQsIG1lc3NhZ2UpKTtcclxuICAgIH1cclxufVxuXG5jb25zdCB0cmFuc2Zvcm1FeHByZXNzaW9uID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8pIHtcclxuICAgICAgICBub2RlLmNvbnRlbnQgPSBwcm9jZXNzRXhwcmVzc2lvbihub2RlLmNvbnRlbnQsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgLy8gaGFuZGxlIGRpcmVjdGl2ZXMgb24gZWxlbWVudFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5wcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBkaXIgPSBub2RlLnByb3BzW2ldO1xyXG4gICAgICAgICAgICAvLyBkbyBub3QgcHJvY2VzcyBmb3Igdi1vbiAmIHYtZm9yIHNpbmNlIHRoZXkgYXJlIHNwZWNpYWwgaGFuZGxlZFxyXG4gICAgICAgICAgICBpZiAoZGlyLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJiBkaXIubmFtZSAhPT0gJ2ZvcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4cCA9IGRpci5leHA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcmcgPSBkaXIuYXJnO1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IHByb2Nlc3MgZXhwIGlmIHRoaXMgaXMgdi1vbjphcmcgLSB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgIC8vIGZvciB3cmFwcGluZyBpbmxpbmUgc3RhdGVtZW50cy5cclxuICAgICAgICAgICAgICAgIGlmIChleHAgJiZcclxuICAgICAgICAgICAgICAgICAgICBleHAudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAhKGRpci5uYW1lID09PSAnb24nICYmIGFyZykpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXIuZXhwID0gcHJvY2Vzc0V4cHJlc3Npb24oZXhwLCBjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzbG90IGFyZ3MgbXVzdCBiZSBwcm9jZXNzZWQgYXMgZnVuY3Rpb24gcGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyLm5hbWUgPT09ICdzbG90Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJnICYmIGFyZy50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyAmJiAhYXJnLmlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyLmFyZyA9IHByb2Nlc3NFeHByZXNzaW9uKGFyZywgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbi8vIEltcG9ydGFudDogc2luY2UgdGhpcyBmdW5jdGlvbiB1c2VzIE5vZGUuanMgb25seSBkZXBlbmRlbmNpZXMsIGl0IHNob3VsZFxyXG4vLyBhbHdheXMgYmUgdXNlZCB3aXRoIGEgbGVhZGluZyAhdHJ1ZSBjaGVjayBzbyB0aGF0IGl0IGNhbiBiZVxyXG4vLyB0cmVlLXNoYWtlbiBmcm9tIHRoZSBicm93c2VyIGJ1aWxkLlxyXG5mdW5jdGlvbiBwcm9jZXNzRXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBcclxuLy8gc29tZSBleHByZXNzaW9ucyBsaWtlIHYtc2xvdCBwcm9wcyAmIHYtZm9yIGFsaWFzZXMgc2hvdWxkIGJlIHBhcnNlZCBhc1xyXG4vLyBmdW5jdGlvbiBwYXJhbXNcclxuYXNQYXJhbXMgPSBmYWxzZSwgXHJcbi8vIHYtb24gaGFuZGxlciB2YWx1ZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgc3RhdGVtZW50c1xyXG5hc1Jhd1N0YXRlbWVudHMgPSBmYWxzZSwgbG9jYWxWYXJzID0gT2JqZWN0LmNyZWF0ZShjb250ZXh0LmlkZW50aWZpZXJzKSkge1xyXG4gICAge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgLy8gc2ltcGxlIGluLWJyb3dzZXIgdmFsaWRhdGlvbiAoc2FtZSBsb2dpYyBpbiAyLngpXHJcbiAgICAgICAgICAgIHZhbGlkYXRlQnJvd3NlckV4cHJlc3Npb24obm9kZSwgY29udGV4dCwgYXNQYXJhbXMsIGFzUmF3U3RhdGVtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHRyYW5zZm9ybUlmID0gY3JlYXRlU3RydWN0dXJhbERpcmVjdGl2ZVRyYW5zZm9ybSgvXihpZnxlbHNlfGVsc2UtaWYpJC8sIChub2RlLCBkaXIsIGNvbnRleHQpID0+IHtcclxuICAgIHJldHVybiBwcm9jZXNzSWYobm9kZSwgZGlyLCBjb250ZXh0LCAoaWZOb2RlLCBicmFuY2gsIGlzUm9vdCkgPT4ge1xyXG4gICAgICAgIC8vICMxNTg3OiBXZSBuZWVkIHRvIGR5bmFtaWNhbGx5IGluY3JlbWVudCB0aGUga2V5IGJhc2VkIG9uIHRoZSBjdXJyZW50XHJcbiAgICAgICAgLy8gbm9kZSdzIHNpYmxpbmcgbm9kZXMsIHNpbmNlIGNoYWluZWQgdi1pZi9lbHNlIGJyYW5jaGVzIGFyZVxyXG4gICAgICAgIC8vIHJlbmRlcmVkIGF0IHRoZSBzYW1lIGRlcHRoXHJcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSBjb250ZXh0LnBhcmVudC5jaGlsZHJlbjtcclxuICAgICAgICBsZXQgaSA9IHNpYmxpbmdzLmluZGV4T2YoaWZOb2RlKTtcclxuICAgICAgICBsZXQga2V5ID0gMDtcclxuICAgICAgICB3aGlsZSAoaS0tID49IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xyXG4gICAgICAgICAgICBpZiAoc2libGluZyAmJiBzaWJsaW5nLnR5cGUgPT09IDkgLyogTm9kZVR5cGVzLklGICovKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgKz0gc2libGluZy5icmFuY2hlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRXhpdCBjYWxsYmFjay4gQ29tcGxldGUgdGhlIGNvZGVnZW5Ob2RlIHdoZW4gYWxsIGNoaWxkcmVuIGhhdmUgYmVlblxyXG4gICAgICAgIC8vIHRyYW5zZm9ybWVkLlxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc1Jvb3QpIHtcclxuICAgICAgICAgICAgICAgIGlmTm9kZS5jb2RlZ2VuTm9kZSA9IGNyZWF0ZUNvZGVnZW5Ob2RlRm9yQnJhbmNoKGJyYW5jaCwga2V5LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGF0dGFjaCB0aGlzIGJyYW5jaCdzIGNvZGVnZW4gbm9kZSB0byB0aGUgdi1pZiByb290LlxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29uZGl0aW9uID0gZ2V0UGFyZW50Q29uZGl0aW9uKGlmTm9kZS5jb2RlZ2VuTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25kaXRpb24uYWx0ZXJuYXRlID0gY3JlYXRlQ29kZWdlbk5vZGVGb3JCcmFuY2goYnJhbmNoLCBrZXkgKyBpZk5vZGUuYnJhbmNoZXMubGVuZ3RoIC0gMSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn0pO1xyXG4vLyB0YXJnZXQtYWdub3N0aWMgdHJhbnNmb3JtIHVzZWQgZm9yIGJvdGggQ2xpZW50IGFuZCBTU1JcclxuZnVuY3Rpb24gcHJvY2Vzc0lmKG5vZGUsIGRpciwgY29udGV4dCwgcHJvY2Vzc0NvZGVnZW4pIHtcclxuICAgIGlmIChkaXIubmFtZSAhPT0gJ2Vsc2UnICYmXHJcbiAgICAgICAgKCFkaXIuZXhwIHx8ICFkaXIuZXhwLmNvbnRlbnQudHJpbSgpKSkge1xyXG4gICAgICAgIGNvbnN0IGxvYyA9IGRpci5leHAgPyBkaXIuZXhwLmxvYyA6IG5vZGUubG9jO1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDI4IC8qIEVycm9yQ29kZXMuWF9WX0lGX05PX0VYUFJFU1NJT04gKi8sIGRpci5sb2MpKTtcclxuICAgICAgICBkaXIuZXhwID0gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgdHJ1ZWAsIGZhbHNlLCBsb2MpO1xyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB0cnVlICYmIGRpci5leHApIHtcclxuICAgICAgICB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKGRpci5leHAsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRpci5uYW1lID09PSAnaWYnKSB7XHJcbiAgICAgICAgY29uc3QgYnJhbmNoID0gY3JlYXRlSWZCcmFuY2gobm9kZSwgZGlyKTtcclxuICAgICAgICBjb25zdCBpZk5vZGUgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IDkgLyogTm9kZVR5cGVzLklGICovLFxyXG4gICAgICAgICAgICBsb2M6IG5vZGUubG9jLFxyXG4gICAgICAgICAgICBicmFuY2hlczogW2JyYW5jaF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnRleHQucmVwbGFjZU5vZGUoaWZOb2RlKTtcclxuICAgICAgICBpZiAocHJvY2Vzc0NvZGVnZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NDb2RlZ2VuKGlmTm9kZSwgYnJhbmNoLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBsb2NhdGUgdGhlIGFkamFjZW50IHYtaWZcclxuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IGNvbnRleHQucGFyZW50LmNoaWxkcmVuO1xyXG4gICAgICAgIGNvbnN0IGNvbW1lbnRzID0gW107XHJcbiAgICAgICAgbGV0IGkgPSBzaWJsaW5ncy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIHdoaWxlIChpLS0gPj0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHNpYmxpbmcgJiYgc2libGluZy50eXBlID09PSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZU5vZGUoc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICBjb21tZW50cy51bnNoaWZ0KHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNpYmxpbmcgJiZcclxuICAgICAgICAgICAgICAgIHNpYmxpbmcudHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyAmJlxyXG4gICAgICAgICAgICAgICAgIXNpYmxpbmcuY29udGVudC50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZU5vZGUoc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2libGluZyAmJiBzaWJsaW5nLnR5cGUgPT09IDkgLyogTm9kZVR5cGVzLklGICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB2LWVsc2Ugd2FzIGZvbGxvd2VkIGJ5IHYtZWxzZS1pZlxyXG4gICAgICAgICAgICAgICAgaWYgKGRpci5uYW1lID09PSAnZWxzZS1pZicgJiZcclxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLmJyYW5jaGVzW3NpYmxpbmcuYnJhbmNoZXMubGVuZ3RoIC0gMV0uY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzMCAvKiBFcnJvckNvZGVzLlhfVl9FTFNFX05PX0FESkFDRU5UX0lGICovLCBub2RlLmxvYykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gbW92ZSB0aGUgbm9kZSB0byB0aGUgaWYgbm9kZSdzIGJyYW5jaGVzXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGNyZWF0ZUlmQnJhbmNoKG5vZGUsIGRpcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIzM2MTkgaWdub3JlIGNvbW1lbnRzIGlmIHRoZSB2LWlmIGlzIGRpcmVjdCBjaGlsZCBvZiA8dHJhbnNpdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAhKGNvbnRleHQucGFyZW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucGFyZW50LnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNCdWlsdEluVHlwZShjb250ZXh0LnBhcmVudC50YWcsICd0cmFuc2l0aW9uJykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJhbmNoLmNoaWxkcmVuID0gWy4uLmNvbW1lbnRzLCAuLi5icmFuY2guY2hpbGRyZW5dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdXNlciBpcyBmb3JjaW5nIHNhbWUga2V5IG9uIGRpZmZlcmVudCBicmFuY2hlc1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCAhdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGJyYW5jaC51c2VyS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy5icmFuY2hlcy5mb3JFYWNoKCh7IHVzZXJLZXkgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUtleSh1c2VyS2V5LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMjkgLyogRXJyb3JDb2Rlcy5YX1ZfSUZfU0FNRV9LRVkgKi8sIGJyYW5jaC51c2VyS2V5LmxvYykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzaWJsaW5nLmJyYW5jaGVzLnB1c2goYnJhbmNoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uRXhpdCA9IHByb2Nlc3NDb2RlZ2VuICYmIHByb2Nlc3NDb2RlZ2VuKHNpYmxpbmcsIGJyYW5jaCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGJyYW5jaCB3YXMgcmVtb3ZlZCwgaXQgd2lsbCBub3QgYmUgdHJhdmVyc2VkLlxyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIHRyYXZlcnNlIGhlcmUuXHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZU5vZGUoYnJhbmNoLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb24gZXhpdFxyXG4gICAgICAgICAgICAgICAgaWYgKG9uRXhpdClcclxuICAgICAgICAgICAgICAgICAgICBvbkV4aXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCBjdXJyZW50Tm9kZSBhZnRlciB0cmF2ZXJzYWwgdG8gaW5kaWNhdGUgdGhpc1xyXG4gICAgICAgICAgICAgICAgLy8gbm9kZSBoYXMgYmVlbiByZW1vdmVkLlxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzMCAvKiBFcnJvckNvZGVzLlhfVl9FTFNFX05PX0FESkFDRU5UX0lGICovLCBub2RlLmxvYykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJZkJyYW5jaChub2RlLCBkaXIpIHtcclxuICAgIGNvbnN0IGlzVGVtcGxhdGVJZiA9IG5vZGUudGFnVHlwZSA9PT0gMyAvKiBFbGVtZW50VHlwZXMuVEVNUExBVEUgKi87XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi8sXHJcbiAgICAgICAgbG9jOiBub2RlLmxvYyxcclxuICAgICAgICBjb25kaXRpb246IGRpci5uYW1lID09PSAnZWxzZScgPyB1bmRlZmluZWQgOiBkaXIuZXhwLFxyXG4gICAgICAgIGNoaWxkcmVuOiBpc1RlbXBsYXRlSWYgJiYgIWZpbmREaXIobm9kZSwgJ2ZvcicpID8gbm9kZS5jaGlsZHJlbiA6IFtub2RlXSxcclxuICAgICAgICB1c2VyS2V5OiBmaW5kUHJvcChub2RlLCBga2V5YCksXHJcbiAgICAgICAgaXNUZW1wbGF0ZUlmXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvZGVnZW5Ob2RlRm9yQnJhbmNoKGJyYW5jaCwga2V5SW5kZXgsIGNvbnRleHQpIHtcclxuICAgIGlmIChicmFuY2guY29uZGl0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihicmFuY2guY29uZGl0aW9uLCBjcmVhdGVDaGlsZHJlbkNvZGVnZW5Ob2RlKGJyYW5jaCwga2V5SW5kZXgsIGNvbnRleHQpLCBcclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gcGFzcyBpbiBhc0Jsb2NrOiB0cnVlIHNvIHRoYXQgdGhlIGNvbW1lbnQgbm9kZSBjYWxsXHJcbiAgICAgICAgLy8gY2xvc2VzIHRoZSBjdXJyZW50IGJsb2NrLlxyXG4gICAgICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKENSRUFURV9DT01NRU5UKSwgW1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyAnXCJ2LWlmXCInIDogJ1wiXCInLFxyXG4gICAgICAgICAgICAndHJ1ZSdcclxuICAgICAgICBdKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGRyZW5Db2RlZ2VuTm9kZShicmFuY2gsIGtleUluZGV4LCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDaGlsZHJlbkNvZGVnZW5Ob2RlKGJyYW5jaCwga2V5SW5kZXgsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgaGVscGVyIH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3Qga2V5UHJvcGVydHkgPSBjcmVhdGVPYmplY3RQcm9wZXJ0eShga2V5YCwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgJHtrZXlJbmRleH1gLCBmYWxzZSwgbG9jU3R1YiwgMiAvKiBDb25zdGFudFR5cGVzLkNBTl9IT0lTVCAqLykpO1xyXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gYnJhbmNoO1xyXG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3QgbmVlZEZyYWdtZW50V3JhcHBlciA9IGNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCBmaXJzdENoaWxkLnR5cGUgIT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi87XHJcbiAgICBpZiAobmVlZEZyYWdtZW50V3JhcHBlcikge1xyXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZC50eXBlID09PSAxMSAvKiBOb2RlVHlwZXMuRk9SICovKSB7XHJcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGF3YXkgbmVzdGVkIGZyYWdtZW50cyB3aGVuIGNoaWxkIGlzIGEgRm9yTm9kZVxyXG4gICAgICAgICAgICBjb25zdCB2bm9kZUNhbGwgPSBmaXJzdENoaWxkLmNvZGVnZW5Ob2RlO1xyXG4gICAgICAgICAgICBpbmplY3RQcm9wKHZub2RlQ2FsbCwga2V5UHJvcGVydHksIGNvbnRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdm5vZGVDYWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBhdGNoRmxhZyA9IDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovO1xyXG4gICAgICAgICAgICBsZXQgcGF0Y2hGbGFnVGV4dCA9IFBhdGNoRmxhZ05hbWVzWzY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovXTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZyYWdtZW50IGFjdHVhbGx5IGNvbnRhaW5zIGEgc2luZ2xlIHZhbGlkIGNoaWxkIHdpdGhcclxuICAgICAgICAgICAgLy8gdGhlIHJlc3QgYmVpbmcgY29tbWVudHNcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgIWJyYW5jaC5pc1RlbXBsYXRlSWYgJiZcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZpbHRlcihjID0+IGMudHlwZSAhPT0gMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLykubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaEZsYWcgfD0gMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovO1xyXG4gICAgICAgICAgICAgICAgcGF0Y2hGbGFnVGV4dCArPSBgLCAke1BhdGNoRmxhZ05hbWVzWzIwNDggLyogUGF0Y2hGbGFncy5ERVZfUk9PVF9GUkFHTUVOVCAqL119YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGVDYWxsKGNvbnRleHQsIGhlbHBlcihGUkFHTUVOVCksIGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oW2tleVByb3BlcnR5XSksIGNoaWxkcmVuLCBwYXRjaEZsYWcgKyAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYCAvKiAke3BhdGNoRmxhZ1RleHR9ICovYCA6IGBgKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlLCBmYWxzZSAvKiBpc0NvbXBvbmVudCAqLywgYnJhbmNoLmxvYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmV0ID0gZmlyc3RDaGlsZC5jb2RlZ2VuTm9kZTtcclxuICAgICAgICBjb25zdCB2bm9kZUNhbGwgPSBnZXRNZW1vZWRWTm9kZUNhbGwocmV0KTtcclxuICAgICAgICAvLyBDaGFuZ2UgY3JlYXRlVk5vZGUgdG8gY3JlYXRlQmxvY2suXHJcbiAgICAgICAgaWYgKHZub2RlQ2FsbC50eXBlID09PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLykge1xyXG4gICAgICAgICAgICBtYWtlQmxvY2sodm5vZGVDYWxsLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5qZWN0IGJyYW5jaCBrZXlcclxuICAgICAgICBpbmplY3RQcm9wKHZub2RlQ2FsbCwga2V5UHJvcGVydHksIGNvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNTYW1lS2V5KGEsIGIpIHtcclxuICAgIGlmICghYSB8fCBhLnR5cGUgIT09IGIudHlwZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChhLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLykge1xyXG4gICAgICAgIGlmIChhLnZhbHVlLmNvbnRlbnQgIT09IGIudmFsdWUuY29udGVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gZGlyZWN0aXZlXHJcbiAgICAgICAgY29uc3QgZXhwID0gYS5leHA7XHJcbiAgICAgICAgY29uc3QgYnJhbmNoRXhwID0gYi5leHA7XHJcbiAgICAgICAgaWYgKGV4cC50eXBlICE9PSBicmFuY2hFeHAudHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHAudHlwZSAhPT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gfHxcclxuICAgICAgICAgICAgZXhwLmlzU3RhdGljICE9PSBicmFuY2hFeHAuaXNTdGF0aWMgfHxcclxuICAgICAgICAgICAgZXhwLmNvbnRlbnQgIT09IGJyYW5jaEV4cC5jb250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBnZXRQYXJlbnRDb25kaXRpb24obm9kZSkge1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSAxOSAvKiBOb2RlVHlwZXMuSlNfQ09ORElUSU9OQUxfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUudHlwZSA9PT0gMTkgLyogTm9kZVR5cGVzLkpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmFsdGVybmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMjAgLyogTm9kZVR5cGVzLkpTX0NBQ0hFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgbm9kZSA9IG5vZGUudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNvbnN0IHRyYW5zZm9ybUZvciA9IGNyZWF0ZVN0cnVjdHVyYWxEaXJlY3RpdmVUcmFuc2Zvcm0oJ2ZvcicsIChub2RlLCBkaXIsIGNvbnRleHQpID0+IHtcclxuICAgIGNvbnN0IHsgaGVscGVyLCByZW1vdmVIZWxwZXIgfSA9IGNvbnRleHQ7XHJcbiAgICByZXR1cm4gcHJvY2Vzc0Zvcihub2RlLCBkaXIsIGNvbnRleHQsIGZvck5vZGUgPT4ge1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgbG9vcCByZW5kZXIgZnVuY3Rpb24gZXhwcmVzc2lvbiBub3csIGFuZCBhZGQgdGhlXHJcbiAgICAgICAgLy8gaXRlcmF0b3Igb24gZXhpdCBhZnRlciBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIHRyYXZlcnNlZFxyXG4gICAgICAgIGNvbnN0IHJlbmRlckV4cCA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGhlbHBlcihSRU5ERVJfTElTVCksIFtcclxuICAgICAgICAgICAgZm9yTm9kZS5zb3VyY2VcclxuICAgICAgICBdKTtcclxuICAgICAgICBjb25zdCBpc1RlbXBsYXRlID0gaXNUZW1wbGF0ZU5vZGUobm9kZSk7XHJcbiAgICAgICAgY29uc3QgbWVtbyA9IGZpbmREaXIobm9kZSwgJ21lbW8nKTtcclxuICAgICAgICBjb25zdCBrZXlQcm9wID0gZmluZFByb3Aobm9kZSwgYGtleWApO1xyXG4gICAgICAgIGNvbnN0IGtleUV4cCA9IGtleVByb3AgJiZcclxuICAgICAgICAgICAgKGtleVByb3AudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovXHJcbiAgICAgICAgICAgICAgICA/IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oa2V5UHJvcC52YWx1ZS5jb250ZW50LCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgOiBrZXlQcm9wLmV4cCk7XHJcbiAgICAgICAgY29uc3Qga2V5UHJvcGVydHkgPSBrZXlQcm9wID8gY3JlYXRlT2JqZWN0UHJvcGVydHkoYGtleWAsIGtleUV4cCkgOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGlzU3RhYmxlRnJhZ21lbnQgPSBmb3JOb2RlLnNvdXJjZS50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyAmJlxyXG4gICAgICAgICAgICBmb3JOb2RlLnNvdXJjZS5jb25zdFR5cGUgPiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50RmxhZyA9IGlzU3RhYmxlRnJhZ21lbnRcclxuICAgICAgICAgICAgPyA2NCAvKiBQYXRjaEZsYWdzLlNUQUJMRV9GUkFHTUVOVCAqL1xyXG4gICAgICAgICAgICA6IGtleVByb3BcclxuICAgICAgICAgICAgICAgID8gMTI4IC8qIFBhdGNoRmxhZ3MuS0VZRURfRlJBR01FTlQgKi9cclxuICAgICAgICAgICAgICAgIDogMjU2IC8qIFBhdGNoRmxhZ3MuVU5LRVlFRF9GUkFHTUVOVCAqLztcclxuICAgICAgICBmb3JOb2RlLmNvZGVnZW5Ob2RlID0gY3JlYXRlVk5vZGVDYWxsKGNvbnRleHQsIGhlbHBlcihGUkFHTUVOVCksIHVuZGVmaW5lZCwgcmVuZGVyRXhwLCBmcmFnbWVudEZsYWcgK1xyXG4gICAgICAgICAgICAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYCAvKiAke1BhdGNoRmxhZ05hbWVzW2ZyYWdtZW50RmxhZ119ICovYCA6IGBgKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUgLyogaXNCbG9jayAqLywgIWlzU3RhYmxlRnJhZ21lbnQgLyogZGlzYWJsZVRyYWNraW5nICovLCBmYWxzZSAvKiBpc0NvbXBvbmVudCAqLywgbm9kZS5sb2MpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGZpbmlzaCB0aGUgY29kZWdlbiBub3cgdGhhdCBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIHRyYXZlcnNlZFxyXG4gICAgICAgICAgICBsZXQgY2hpbGRCbG9jaztcclxuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gZm9yTm9kZTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgPHRlbXBsYXRlIHYtZm9yPiBrZXkgcGxhY2VtZW50XHJcbiAgICAgICAgICAgIGlmICgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICF0cnVlKSAmJiBpc1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNvbWUoYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBmaW5kUHJvcChjLCAna2V5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMzIC8qIEVycm9yQ29kZXMuWF9WX0ZPUl9URU1QTEFURV9LRVlfUExBQ0VNRU5UICovLCBrZXkubG9jKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRGcmFnbWVudFdyYXBwZXIgPSBjaGlsZHJlbi5sZW5ndGggIT09IDEgfHwgY2hpbGRyZW5bMF0udHlwZSAhPT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLztcclxuICAgICAgICAgICAgY29uc3Qgc2xvdE91dGxldCA9IGlzU2xvdE91dGxldChub2RlKVxyXG4gICAgICAgICAgICAgICAgPyBub2RlXHJcbiAgICAgICAgICAgICAgICA6IGlzVGVtcGxhdGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2xvdE91dGxldChub2RlLmNoaWxkcmVuWzBdKVxyXG4gICAgICAgICAgICAgICAgICAgID8gbm9kZS5jaGlsZHJlblswXSAvLyBhcGktZXh0cmFjdG9yIHNvbWVob3cgZmFpbHMgdG8gaW5mZXIgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNsb3RPdXRsZXQpIHtcclxuICAgICAgICAgICAgICAgIC8vIDxzbG90IHYtZm9yPVwiLi4uXCI+IG9yIDx0ZW1wbGF0ZSB2LWZvcj1cIi4uLlwiPjxzbG90Lz48L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9jayA9IHNsb3RPdXRsZXQuY29kZWdlbk5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZW1wbGF0ZSAmJiBrZXlQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDx0ZW1wbGF0ZSB2LWZvcj1cIi4uLlwiIDprZXk9XCIuLi5cIj48c2xvdC8+PC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGluamVjdCB0aGUga2V5IHRvIHRoZSByZW5kZXJTbG90KCkgY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJvcHMgZm9yIHJlbmRlclNsb3QgaXMgcGFzc2VkIGFzIHRoZSAzcmQgYXJndW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0UHJvcChjaGlsZEJsb2NrLCBrZXlQcm9wZXJ0eSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobmVlZEZyYWdtZW50V3JhcHBlcikge1xyXG4gICAgICAgICAgICAgICAgLy8gPHRlbXBsYXRlIHYtZm9yPVwiLi4uXCI+IHdpdGggdGV4dCBvciBtdWx0aS1lbGVtZW50c1xyXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGdlbmVyYXRlIGEgZnJhZ21lbnQgYmxvY2sgZm9yIGVhY2ggbG9vcFxyXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9jayA9IGNyZWF0ZVZOb2RlQ2FsbChjb250ZXh0LCBoZWxwZXIoRlJBR01FTlQpLCBrZXlQcm9wZXJ0eSA/IGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oW2tleVByb3BlcnR5XSkgOiB1bmRlZmluZWQsIG5vZGUuY2hpbGRyZW4sIDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovICtcclxuICAgICAgICAgICAgICAgICAgICAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCAvKiAke1BhdGNoRmxhZ05hbWVzWzY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovXX0gKi9gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGApLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZSAvKiBpc0NvbXBvbmVudCAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWwgZWxlbWVudCB2LWZvci4gRGlyZWN0bHkgdXNlIHRoZSBjaGlsZCdzIGNvZGVnZW5Ob2RlXHJcbiAgICAgICAgICAgICAgICAvLyBidXQgbWFyayBpdCBhcyBhIGJsb2NrLlxyXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9jayA9IGNoaWxkcmVuWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvZGVnZW5Ob2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGVtcGxhdGUgJiYga2V5UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmplY3RQcm9wKGNoaWxkQmxvY2ssIGtleVByb3BlcnR5LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZEJsb2NrLmlzQmxvY2sgIT09ICFpc1N0YWJsZUZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2suaXNCbG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggZnJvbSBibG9jayB0byB2bm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVIZWxwZXIoT1BFTl9CTE9DSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUhlbHBlcihnZXRWTm9kZUJsb2NrSGVscGVyKGNvbnRleHQuaW5TU1IsIGNoaWxkQmxvY2suaXNDb21wb25lbnQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3aXRjaCBmcm9tIHZub2RlIHRvIGJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUhlbHBlcihnZXRWTm9kZUhlbHBlcihjb250ZXh0LmluU1NSLCBjaGlsZEJsb2NrLmlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9jay5pc0Jsb2NrID0gIWlzU3RhYmxlRnJhZ21lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jay5pc0Jsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVscGVyKE9QRU5fQkxPQ0spO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlbHBlcihnZXRWTm9kZUJsb2NrSGVscGVyKGNvbnRleHQuaW5TU1IsIGNoaWxkQmxvY2suaXNDb21wb25lbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlbHBlcihnZXRWTm9kZUhlbHBlcihjb250ZXh0LmluU1NSLCBjaGlsZEJsb2NrLmlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1lbW8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvb3AgPSBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oY3JlYXRlRm9yTG9vcFBhcmFtcyhmb3JOb2RlLnBhcnNlUmVzdWx0LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgX2NhY2hlZGApXHJcbiAgICAgICAgICAgICAgICBdKSk7XHJcbiAgICAgICAgICAgICAgICBsb29wLmJvZHkgPSBjcmVhdGVCbG9ja1N0YXRlbWVudChbXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtgY29uc3QgX21lbW8gPSAoYCwgbWVtby5leHAsIGApYF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBpZiAoX2NhY2hlZGAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihrZXlFeHAgPyBbYCAmJiBfY2FjaGVkLmtleSA9PT0gYCwga2V5RXhwXSA6IFtdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYCAmJiAke2NvbnRleHQuaGVscGVyU3RyaW5nKElTX01FTU9fU0FNRSl9KF9jYWNoZWQsIF9tZW1vKSkgcmV0dXJuIF9jYWNoZWRgXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtgY29uc3QgX2l0ZW0gPSBgLCBjaGlsZEJsb2NrXSksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgX2l0ZW0ubWVtbyA9IF9tZW1vYCksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgcmV0dXJuIF9pdGVtYClcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyRXhwLmFyZ3VtZW50cy5wdXNoKGxvb3AsIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYF9jYWNoZWApLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKFN0cmluZyhjb250ZXh0LmNhY2hlZCsrKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyRXhwLmFyZ3VtZW50cy5wdXNoKGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihjcmVhdGVGb3JMb29wUGFyYW1zKGZvck5vZGUucGFyc2VSZXN1bHQpLCBjaGlsZEJsb2NrLCB0cnVlIC8qIGZvcmNlIG5ld2xpbmUgKi8pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxufSk7XHJcbi8vIHRhcmdldC1hZ25vc3RpYyB0cmFuc2Zvcm0gdXNlZCBmb3IgYm90aCBDbGllbnQgYW5kIFNTUlxyXG5mdW5jdGlvbiBwcm9jZXNzRm9yKG5vZGUsIGRpciwgY29udGV4dCwgcHJvY2Vzc0NvZGVnZW4pIHtcclxuICAgIGlmICghZGlyLmV4cCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMxIC8qIEVycm9yQ29kZXMuWF9WX0ZPUl9OT19FWFBSRVNTSU9OICovLCBkaXIubG9jKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFyc2VSZXN1bHQgPSBwYXJzZUZvckV4cHJlc3Npb24oXHJcbiAgICAvLyBjYW4gb25seSBiZSBzaW1wbGUgZXhwcmVzc2lvbiBiZWNhdXNlIHZGb3IgdHJhbnNmb3JtIGlzIGFwcGxpZWRcclxuICAgIC8vIGJlZm9yZSBleHByZXNzaW9uIHRyYW5zZm9ybS5cclxuICAgIGRpci5leHAsIGNvbnRleHQpO1xyXG4gICAgaWYgKCFwYXJzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMyIC8qIEVycm9yQ29kZXMuWF9WX0ZPUl9NQUxGT1JNRURfRVhQUkVTU0lPTiAqLywgZGlyLmxvYykpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgYWRkSWRlbnRpZmllcnMsIHJlbW92ZUlkZW50aWZpZXJzLCBzY29wZXMgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCB7IHNvdXJjZSwgdmFsdWUsIGtleSwgaW5kZXggfSA9IHBhcnNlUmVzdWx0O1xyXG4gICAgY29uc3QgZm9yTm9kZSA9IHtcclxuICAgICAgICB0eXBlOiAxMSAvKiBOb2RlVHlwZXMuRk9SICovLFxyXG4gICAgICAgIGxvYzogZGlyLmxvYyxcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVBbGlhczogdmFsdWUsXHJcbiAgICAgICAga2V5QWxpYXM6IGtleSxcclxuICAgICAgICBvYmplY3RJbmRleEFsaWFzOiBpbmRleCxcclxuICAgICAgICBwYXJzZVJlc3VsdCxcclxuICAgICAgICBjaGlsZHJlbjogaXNUZW1wbGF0ZU5vZGUobm9kZSkgPyBub2RlLmNoaWxkcmVuIDogW25vZGVdXHJcbiAgICB9O1xyXG4gICAgY29udGV4dC5yZXBsYWNlTm9kZShmb3JOb2RlKTtcclxuICAgIC8vIGJvb2trZWVwaW5nXHJcbiAgICBzY29wZXMudkZvcisrO1xyXG4gICAgY29uc3Qgb25FeGl0ID0gcHJvY2Vzc0NvZGVnZW4gJiYgcHJvY2Vzc0NvZGVnZW4oZm9yTm9kZSk7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIHNjb3Blcy52Rm9yLS07XHJcbiAgICAgICAgaWYgKG9uRXhpdClcclxuICAgICAgICAgICAgb25FeGl0KCk7XHJcbiAgICB9O1xyXG59XHJcbmNvbnN0IGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XHJcbi8vIFRoaXMgcmVnZXggZG9lc24ndCBjb3ZlciB0aGUgY2FzZSBpZiBrZXkgb3IgaW5kZXggYWxpYXNlcyBoYXZlIGRlc3RydWN0dXJpbmcsXHJcbi8vIGJ1dCB0aG9zZSBkbyBub3QgbWFrZSBzZW5zZSBpbiB0aGUgZmlyc3QgcGxhY2UsIHNvIHRoaXMgd29ya3MgaW4gcHJhY3RpY2UuXHJcbmNvbnN0IGZvckl0ZXJhdG9yUkUgPSAvLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC87XHJcbmNvbnN0IHN0cmlwUGFyZW5zUkUgPSAvXlxcKHxcXCkkL2c7XHJcbmZ1bmN0aW9uIHBhcnNlRm9yRXhwcmVzc2lvbihpbnB1dCwgY29udGV4dCkge1xyXG4gICAgY29uc3QgbG9jID0gaW5wdXQubG9jO1xyXG4gICAgY29uc3QgZXhwID0gaW5wdXQuY29udGVudDtcclxuICAgIGNvbnN0IGluTWF0Y2ggPSBleHAubWF0Y2goZm9yQWxpYXNSRSk7XHJcbiAgICBpZiAoIWluTWF0Y2gpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgWywgTEhTLCBSSFNdID0gaW5NYXRjaDtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICBzb3VyY2U6IGNyZWF0ZUFsaWFzRXhwcmVzc2lvbihsb2MsIFJIUy50cmltKCksIGV4cC5pbmRleE9mKFJIUywgTEhTLmxlbmd0aCkpLFxyXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAga2V5OiB1bmRlZmluZWQsXHJcbiAgICAgICAgaW5kZXg6IHVuZGVmaW5lZFxyXG4gICAgfTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdHJ1ZSkge1xyXG4gICAgICAgIHZhbGlkYXRlQnJvd3NlckV4cHJlc3Npb24ocmVzdWx0LnNvdXJjZSwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsdWVDb250ZW50ID0gTEhTLnRyaW0oKS5yZXBsYWNlKHN0cmlwUGFyZW5zUkUsICcnKS50cmltKCk7XHJcbiAgICBjb25zdCB0cmltbWVkT2Zmc2V0ID0gTEhTLmluZGV4T2YodmFsdWVDb250ZW50KTtcclxuICAgIGNvbnN0IGl0ZXJhdG9yTWF0Y2ggPSB2YWx1ZUNvbnRlbnQubWF0Y2goZm9ySXRlcmF0b3JSRSk7XHJcbiAgICBpZiAoaXRlcmF0b3JNYXRjaCkge1xyXG4gICAgICAgIHZhbHVlQ29udGVudCA9IHZhbHVlQ29udGVudC5yZXBsYWNlKGZvckl0ZXJhdG9yUkUsICcnKS50cmltKCk7XHJcbiAgICAgICAgY29uc3Qga2V5Q29udGVudCA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xyXG4gICAgICAgIGxldCBrZXlPZmZzZXQ7XHJcbiAgICAgICAgaWYgKGtleUNvbnRlbnQpIHtcclxuICAgICAgICAgICAga2V5T2Zmc2V0ID0gZXhwLmluZGV4T2Yoa2V5Q29udGVudCwgdHJpbW1lZE9mZnNldCArIHZhbHVlQ29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXN1bHQua2V5ID0gY3JlYXRlQWxpYXNFeHByZXNzaW9uKGxvYywga2V5Q29udGVudCwga2V5T2Zmc2V0KTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKHJlc3VsdC5rZXksIGNvbnRleHQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVyYXRvck1hdGNoWzJdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q29udGVudCA9IGl0ZXJhdG9yTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuaW5kZXggPSBjcmVhdGVBbGlhc0V4cHJlc3Npb24obG9jLCBpbmRleENvbnRlbnQsIGV4cC5pbmRleE9mKGluZGV4Q29udGVudCwgcmVzdWx0LmtleVxyXG4gICAgICAgICAgICAgICAgICAgID8ga2V5T2Zmc2V0ICsga2V5Q29udGVudC5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA6IHRyaW1tZWRPZmZzZXQgKyB2YWx1ZUNvbnRlbnQubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKHJlc3VsdC5pbmRleCwgY29udGV4dCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVDb250ZW50KSB7XHJcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gY3JlYXRlQWxpYXNFeHByZXNzaW9uKGxvYywgdmFsdWVDb250ZW50LCB0cmltbWVkT2Zmc2V0KTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRydWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGVCcm93c2VyRXhwcmVzc2lvbihyZXN1bHQudmFsdWUsIGNvbnRleHQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQWxpYXNFeHByZXNzaW9uKHJhbmdlLCBjb250ZW50LCBvZmZzZXQpIHtcclxuICAgIHJldHVybiBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGNvbnRlbnQsIGZhbHNlLCBnZXRJbm5lclJhbmdlKHJhbmdlLCBvZmZzZXQsIGNvbnRlbnQubGVuZ3RoKSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRm9yTG9vcFBhcmFtcyh7IHZhbHVlLCBrZXksIGluZGV4IH0sIG1lbW9BcmdzID0gW10pIHtcclxuICAgIHJldHVybiBjcmVhdGVQYXJhbXNMaXN0KFt2YWx1ZSwga2V5LCBpbmRleCwgLi4ubWVtb0FyZ3NdKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVQYXJhbXNMaXN0KGFyZ3MpIHtcclxuICAgIGxldCBpID0gYXJncy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgaWYgKGFyZ3NbaV0pXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyZ3NcclxuICAgICAgICAuc2xpY2UoMCwgaSArIDEpXHJcbiAgICAgICAgLm1hcCgoYXJnLCBpKSA9PiBhcmcgfHwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgX2AucmVwZWF0KGkgKyAxKSwgZmFsc2UpKTtcclxufVxuXG5jb25zdCBkZWZhdWx0RmFsbGJhY2sgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGB1bmRlZmluZWRgLCBmYWxzZSk7XHJcbi8vIEEgTm9kZVRyYW5zZm9ybSB0aGF0OlxyXG4vLyAxLiBUcmFja3Mgc2NvcGUgaWRlbnRpZmllcnMgZm9yIHNjb3BlZCBzbG90cyBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IHByZWZpeGVkXHJcbi8vICAgIGJ5IHRyYW5zZm9ybUV4cHJlc3Npb24uIFRoaXMgaXMgb25seSBhcHBsaWVkIGluIG5vbi1icm93c2VyIGJ1aWxkcyB3aXRoXHJcbi8vICAgIHsgcHJlZml4SWRlbnRpZmllcnM6IHRydWUgfS5cclxuLy8gMi4gVHJhY2sgdi1zbG90IGRlcHRocyBzbyB0aGF0IHdlIGtub3cgYSBzbG90IGlzIGluc2lkZSBhbm90aGVyIHNsb3QuXHJcbi8vICAgIE5vdGUgdGhlIGV4aXQgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYmVmb3JlIGJ1aWxkU2xvdHMoKSBvbiB0aGUgc2FtZSBub2RlLFxyXG4vLyAgICBzbyBvbmx5IG5lc3RlZCBzbG90cyBzZWUgcG9zaXRpdmUgbnVtYmVycy5cclxuY29uc3QgdHJhY2tTbG90U2NvcGVzID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAobm9kZS50YWdUeXBlID09PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi8gfHxcclxuICAgICAgICAgICAgbm9kZS50YWdUeXBlID09PSAzIC8qIEVsZW1lbnRUeXBlcy5URU1QTEFURSAqLykpIHtcclxuICAgICAgICAvLyBXZSBhcmUgb25seSBjaGVja2luZyBub24tZW1wdHkgdi1zbG90IGhlcmVcclxuICAgICAgICAvLyBzaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgc2xvdHMgdGhhdCBpbnRyb2R1Y2Ugc2NvcGUgdmFyaWFibGVzLlxyXG4gICAgICAgIGNvbnN0IHZTbG90ID0gZmluZERpcihub2RlLCAnc2xvdCcpO1xyXG4gICAgICAgIGlmICh2U2xvdCkge1xyXG4gICAgICAgICAgICB2U2xvdC5leHA7XHJcbiAgICAgICAgICAgIGNvbnRleHQuc2NvcGVzLnZTbG90Kys7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNjb3Blcy52U2xvdC0tO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuLy8gQSBOb2RlVHJhbnNmb3JtIHRoYXQgdHJhY2tzIHNjb3BlIGlkZW50aWZpZXJzIGZvciBzY29wZWQgc2xvdHMgd2l0aCB2LWZvci5cclxuLy8gVGhpcyB0cmFuc2Zvcm0gaXMgb25seSBhcHBsaWVkIGluIG5vbi1icm93c2VyIGJ1aWxkcyB3aXRoIHsgcHJlZml4SWRlbnRpZmllcnM6IHRydWUgfVxyXG5jb25zdCB0cmFja1ZGb3JTbG90U2NvcGVzID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGxldCB2Rm9yO1xyXG4gICAgaWYgKGlzVGVtcGxhdGVOb2RlKG5vZGUpICYmXHJcbiAgICAgICAgbm9kZS5wcm9wcy5zb21lKGlzVlNsb3QpICYmXHJcbiAgICAgICAgKHZGb3IgPSBmaW5kRGlyKG5vZGUsICdmb3InKSkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAodkZvci5wYXJzZVJlc3VsdCA9IHBhcnNlRm9yRXhwcmVzc2lvbih2Rm9yLmV4cCwgY29udGV4dCkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSwga2V5LCBpbmRleCB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB7IGFkZElkZW50aWZpZXJzLCByZW1vdmVJZGVudGlmaWVycyB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgdmFsdWUgJiYgYWRkSWRlbnRpZmllcnModmFsdWUpO1xyXG4gICAgICAgICAgICBrZXkgJiYgYWRkSWRlbnRpZmllcnMoa2V5KTtcclxuICAgICAgICAgICAgaW5kZXggJiYgYWRkSWRlbnRpZmllcnMoaW5kZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgJiYgcmVtb3ZlSWRlbnRpZmllcnModmFsdWUpO1xyXG4gICAgICAgICAgICAgICAga2V5ICYmIHJlbW92ZUlkZW50aWZpZXJzKGtleSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCAmJiByZW1vdmVJZGVudGlmaWVycyhpbmRleCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5jb25zdCBidWlsZENsaWVudFNsb3RGbiA9IChwcm9wcywgY2hpbGRyZW4sIGxvYykgPT4gY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKHByb3BzLCBjaGlsZHJlbiwgZmFsc2UgLyogbmV3bGluZSAqLywgdHJ1ZSAvKiBpc1Nsb3QgKi8sIGNoaWxkcmVuLmxlbmd0aCA/IGNoaWxkcmVuWzBdLmxvYyA6IGxvYyk7XHJcbi8vIEluc3RlYWQgb2YgYmVpbmcgYSBEaXJlY3RpdmVUcmFuc2Zvcm0sIHYtc2xvdCBwcm9jZXNzaW5nIGlzIGNhbGxlZCBkdXJpbmdcclxuLy8gdHJhbnNmb3JtRWxlbWVudCB0byBidWlsZCB0aGUgc2xvdHMgb2JqZWN0IGZvciBhIGNvbXBvbmVudC5cclxuZnVuY3Rpb24gYnVpbGRTbG90cyhub2RlLCBjb250ZXh0LCBidWlsZFNsb3RGbiA9IGJ1aWxkQ2xpZW50U2xvdEZuKSB7XHJcbiAgICBjb250ZXh0LmhlbHBlcihXSVRIX0NUWCk7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBsb2MgfSA9IG5vZGU7XHJcbiAgICBjb25zdCBzbG90c1Byb3BlcnRpZXMgPSBbXTtcclxuICAgIGNvbnN0IGR5bmFtaWNTbG90cyA9IFtdO1xyXG4gICAgLy8gSWYgdGhlIHNsb3QgaXMgaW5zaWRlIGEgdi1mb3Igb3IgYW5vdGhlciB2LXNsb3QsIGZvcmNlIGl0IHRvIGJlIGR5bmFtaWNcclxuICAgIC8vIHNpbmNlIGl0IGxpa2VseSB1c2VzIGEgc2NvcGUgdmFyaWFibGUuXHJcbiAgICBsZXQgaGFzRHluYW1pY1Nsb3RzID0gY29udGV4dC5zY29wZXMudlNsb3QgPiAwIHx8IGNvbnRleHQuc2NvcGVzLnZGb3IgPiAwO1xyXG4gICAgLy8gMS4gQ2hlY2sgZm9yIHNsb3Qgd2l0aCBzbG90UHJvcHMgb24gY29tcG9uZW50IGl0c2VsZi5cclxuICAgIC8vICAgIDxDb21wIHYtc2xvdD1cInsgcHJvcCB9XCIvPlxyXG4gICAgY29uc3Qgb25Db21wb25lbnRTbG90ID0gZmluZERpcihub2RlLCAnc2xvdCcsIHRydWUpO1xyXG4gICAgaWYgKG9uQ29tcG9uZW50U2xvdCkge1xyXG4gICAgICAgIGNvbnN0IHsgYXJnLCBleHAgfSA9IG9uQ29tcG9uZW50U2xvdDtcclxuICAgICAgICBpZiAoYXJnICYmICFpc1N0YXRpY0V4cChhcmcpKSB7XHJcbiAgICAgICAgICAgIGhhc0R5bmFtaWNTbG90cyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsb3RzUHJvcGVydGllcy5wdXNoKGNyZWF0ZU9iamVjdFByb3BlcnR5KGFyZyB8fCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCdkZWZhdWx0JywgdHJ1ZSksIGJ1aWxkU2xvdEZuKGV4cCwgY2hpbGRyZW4sIGxvYykpKTtcclxuICAgIH1cclxuICAgIC8vIDIuIEl0ZXJhdGUgdGhyb3VnaCBjaGlsZHJlbiBhbmQgY2hlY2sgZm9yIHRlbXBsYXRlIHNsb3RzXHJcbiAgICAvLyAgICA8dGVtcGxhdGUgdi1zbG90OmZvbz1cInsgcHJvcCB9XCI+XHJcbiAgICBsZXQgaGFzVGVtcGxhdGVTbG90cyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc05hbWVkRGVmYXVsdFNsb3QgPSBmYWxzZTtcclxuICAgIGNvbnN0IGltcGxpY2l0RGVmYXVsdENoaWxkcmVuID0gW107XHJcbiAgICBjb25zdCBzZWVuU2xvdE5hbWVzID0gbmV3IFNldCgpO1xyXG4gICAgbGV0IGNvbmRpdGlvbmFsQnJhbmNoSW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHNsb3RFbGVtZW50ID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgbGV0IHNsb3REaXI7XHJcbiAgICAgICAgaWYgKCFpc1RlbXBsYXRlTm9kZShzbG90RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgIShzbG90RGlyID0gZmluZERpcihzbG90RWxlbWVudCwgJ3Nsb3QnLCB0cnVlKSkpIHtcclxuICAgICAgICAgICAgLy8gbm90IGEgPHRlbXBsYXRlIHYtc2xvdD4sIHNraXAuXHJcbiAgICAgICAgICAgIGlmIChzbG90RWxlbWVudC50eXBlICE9PSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICBpbXBsaWNpdERlZmF1bHRDaGlsZHJlbi5wdXNoKHNsb3RFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uQ29tcG9uZW50U2xvdCkge1xyXG4gICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBvbi1jb21wb25lbnQgc2xvdCAtIHRoaXMgaXMgaW5jb3JyZWN0IHVzYWdlLlxyXG4gICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzNyAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX01JWEVEX1NMT1RfVVNBR0UgKi8sIHNsb3REaXIubG9jKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoYXNUZW1wbGF0ZVNsb3RzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCB7IGNoaWxkcmVuOiBzbG90Q2hpbGRyZW4sIGxvYzogc2xvdExvYyB9ID0gc2xvdEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgeyBhcmc6IHNsb3ROYW1lID0gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgZGVmYXVsdGAsIHRydWUpLCBleHA6IHNsb3RQcm9wcywgbG9jOiBkaXJMb2MgfSA9IHNsb3REaXI7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgbmFtZSBpcyBkeW5hbWljLlxyXG4gICAgICAgIGxldCBzdGF0aWNTbG90TmFtZTtcclxuICAgICAgICBpZiAoaXNTdGF0aWNFeHAoc2xvdE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHN0YXRpY1Nsb3ROYW1lID0gc2xvdE5hbWUgPyBzbG90TmFtZS5jb250ZW50IDogYGRlZmF1bHRgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGFzRHluYW1pY1Nsb3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2xvdEZ1bmN0aW9uID0gYnVpbGRTbG90Rm4oc2xvdFByb3BzLCBzbG90Q2hpbGRyZW4sIHNsb3RMb2MpO1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgc2xvdCBpcyBjb25kaXRpb25hbCAodi1pZi92LWZvcilcclxuICAgICAgICBsZXQgdklmO1xyXG4gICAgICAgIGxldCB2RWxzZTtcclxuICAgICAgICBsZXQgdkZvcjtcclxuICAgICAgICBpZiAoKHZJZiA9IGZpbmREaXIoc2xvdEVsZW1lbnQsICdpZicpKSkge1xyXG4gICAgICAgICAgICBoYXNEeW5hbWljU2xvdHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBkeW5hbWljU2xvdHMucHVzaChjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24odklmLmV4cCwgYnVpbGREeW5hbWljU2xvdChzbG90TmFtZSwgc2xvdEZ1bmN0aW9uLCBjb25kaXRpb25hbEJyYW5jaEluZGV4KyspLCBkZWZhdWx0RmFsbGJhY2spKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHZFbHNlID0gZmluZERpcihzbG90RWxlbWVudCwgL15lbHNlKC1pZik/JC8sIHRydWUgLyogYWxsb3dFbXB0eSAqLykpKSB7XHJcbiAgICAgICAgICAgIC8vIGZpbmQgYWRqYWNlbnQgdi1pZlxyXG4gICAgICAgICAgICBsZXQgaiA9IGk7XHJcbiAgICAgICAgICAgIGxldCBwcmV2O1xyXG4gICAgICAgICAgICB3aGlsZSAoai0tKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldi50eXBlICE9PSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByZXYgJiYgaXNUZW1wbGF0ZU5vZGUocHJldikgJiYgZmluZERpcihwcmV2LCAnaWYnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vZGVcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgIC8vIGF0dGFjaCB0aGlzIHNsb3QgdG8gcHJldmlvdXMgY29uZGl0aW9uYWxcclxuICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb25hbCA9IGR5bmFtaWNTbG90c1tkeW5hbWljU2xvdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29uZGl0aW9uYWwuYWx0ZXJuYXRlLnR5cGUgPT09IDE5IC8qIE5vZGVUeXBlcy5KU19DT05ESVRJT05BTF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5hbHRlcm5hdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25kaXRpb25hbC5hbHRlcm5hdGUgPSB2RWxzZS5leHBcclxuICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbih2RWxzZS5leHAsIGJ1aWxkRHluYW1pY1Nsb3Qoc2xvdE5hbWUsIHNsb3RGdW5jdGlvbiwgY29uZGl0aW9uYWxCcmFuY2hJbmRleCsrKSwgZGVmYXVsdEZhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgICAgIDogYnVpbGREeW5hbWljU2xvdChzbG90TmFtZSwgc2xvdEZ1bmN0aW9uLCBjb25kaXRpb25hbEJyYW5jaEluZGV4KyspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzAgLyogRXJyb3JDb2Rlcy5YX1ZfRUxTRV9OT19BREpBQ0VOVF9JRiAqLywgdkVsc2UubG9jKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHZGb3IgPSBmaW5kRGlyKHNsb3RFbGVtZW50LCAnZm9yJykpKSB7XHJcbiAgICAgICAgICAgIGhhc0R5bmFtaWNTbG90cyA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gdkZvci5wYXJzZVJlc3VsdCB8fFxyXG4gICAgICAgICAgICAgICAgcGFyc2VGb3JFeHByZXNzaW9uKHZGb3IuZXhwLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKHBhcnNlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGR5bmFtaWMgc2xvdHMgYXMgYW4gYXJyYXkgYW5kIGFkZCBpdCB0byB0aGUgY3JlYXRlU2xvdCgpXHJcbiAgICAgICAgICAgICAgICAvLyBhcmdzLiBUaGUgcnVudGltZSBrbm93cyBob3cgdG8gaGFuZGxlIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgICAgICAgICAgICBkeW5hbWljU2xvdHMucHVzaChjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihSRU5ERVJfTElTVCksIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdC5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGNyZWF0ZUZvckxvb3BQYXJhbXMocGFyc2VSZXN1bHQpLCBidWlsZER5bmFtaWNTbG90KHNsb3ROYW1lLCBzbG90RnVuY3Rpb24pLCB0cnVlIC8qIGZvcmNlIG5ld2xpbmUgKi8pXHJcbiAgICAgICAgICAgICAgICBdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzMiAvKiBFcnJvckNvZGVzLlhfVl9GT1JfTUFMRk9STUVEX0VYUFJFU1NJT04gKi8sIHZGb3IubG9jKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGR1cGxpY2F0ZSBzdGF0aWMgbmFtZXNcclxuICAgICAgICAgICAgaWYgKHN0YXRpY1Nsb3ROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VlblNsb3ROYW1lcy5oYXMoc3RhdGljU2xvdE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzggLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9EVVBMSUNBVEVfU0xPVF9OQU1FUyAqLywgZGlyTG9jKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZWVuU2xvdE5hbWVzLmFkZChzdGF0aWNTbG90TmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGljU2xvdE5hbWUgPT09ICdkZWZhdWx0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc05hbWVkRGVmYXVsdFNsb3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNsb3RzUHJvcGVydGllcy5wdXNoKGNyZWF0ZU9iamVjdFByb3BlcnR5KHNsb3ROYW1lLCBzbG90RnVuY3Rpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW9uQ29tcG9uZW50U2xvdCkge1xyXG4gICAgICAgIGNvbnN0IGJ1aWxkRGVmYXVsdFNsb3RQcm9wZXJ0eSA9IChwcm9wcywgY2hpbGRyZW4pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm4gPSBidWlsZFNsb3RGbihwcm9wcywgY2hpbGRyZW4sIGxvYyk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmNvbXBhdENvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgZm4uaXNOb25TY29wZWRTbG90ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlT2JqZWN0UHJvcGVydHkoYGRlZmF1bHRgLCBmbik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWhhc1RlbXBsYXRlU2xvdHMpIHtcclxuICAgICAgICAgICAgLy8gaW1wbGljaXQgZGVmYXVsdCBzbG90IChvbiBjb21wb25lbnQpXHJcbiAgICAgICAgICAgIHNsb3RzUHJvcGVydGllcy5wdXNoKGJ1aWxkRGVmYXVsdFNsb3RQcm9wZXJ0eSh1bmRlZmluZWQsIGNoaWxkcmVuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGltcGxpY2l0RGVmYXVsdENoaWxkcmVuLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAvLyAjMzc2NlxyXG4gICAgICAgICAgICAvLyB3aXRoIHdoaXRlc3BhY2U6ICdwcmVzZXJ2ZScsIHdoaXRlc3BhY2VzIGJldHdlZW4gc2xvdHMgd2lsbCBlbmQgdXAgaW5cclxuICAgICAgICAgICAgLy8gaW1wbGljaXREZWZhdWx0Q2hpbGRyZW4uIElnbm9yZSBpZiBhbGwgaW1wbGljaXQgY2hpbGRyZW4gYXJlIHdoaXRlc3BhY2VzLlxyXG4gICAgICAgICAgICBpbXBsaWNpdERlZmF1bHRDaGlsZHJlbi5zb21lKG5vZGUgPT4gaXNOb25XaGl0ZXNwYWNlQ29udGVudChub2RlKSkpIHtcclxuICAgICAgICAgICAgLy8gaW1wbGljaXQgZGVmYXVsdCBzbG90IChtaXhlZCB3aXRoIG5hbWVkIHNsb3RzKVxyXG4gICAgICAgICAgICBpZiAoaGFzTmFtZWREZWZhdWx0U2xvdCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzkgLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9FWFRSQU5FT1VTX0RFRkFVTFRfU0xPVF9DSElMRFJFTiAqLywgaW1wbGljaXREZWZhdWx0Q2hpbGRyZW5bMF0ubG9jKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzbG90c1Byb3BlcnRpZXMucHVzaChidWlsZERlZmF1bHRTbG90UHJvcGVydHkodW5kZWZpbmVkLCBpbXBsaWNpdERlZmF1bHRDaGlsZHJlbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc2xvdEZsYWcgPSBoYXNEeW5hbWljU2xvdHNcclxuICAgICAgICA/IDIgLyogU2xvdEZsYWdzLkRZTkFNSUMgKi9cclxuICAgICAgICA6IGhhc0ZvcndhcmRlZFNsb3RzKG5vZGUuY2hpbGRyZW4pXHJcbiAgICAgICAgICAgID8gMyAvKiBTbG90RmxhZ3MuRk9SV0FSREVEICovXHJcbiAgICAgICAgICAgIDogMSAvKiBTbG90RmxhZ3MuU1RBQkxFICovO1xyXG4gICAgbGV0IHNsb3RzID0gY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihzbG90c1Byb3BlcnRpZXMuY29uY2F0KGNyZWF0ZU9iamVjdFByb3BlcnR5KGBfYCwgXHJcbiAgICAvLyAyID0gY29tcGlsZWQgYnV0IGR5bmFtaWMgPSBjYW4gc2tpcCBub3JtYWxpemF0aW9uLCBidXQgbXVzdCBydW4gZGlmZlxyXG4gICAgLy8gMSA9IGNvbXBpbGVkIGFuZCBzdGF0aWMgPSBjYW4gc2tpcCBub3JtYWxpemF0aW9uIEFORCBkaWZmIGFzIG9wdGltaXplZFxyXG4gICAgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihzbG90RmxhZyArICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgIC8qICR7c2xvdEZsYWdzVGV4dFtzbG90RmxhZ119ICovYCA6IGBgKSwgZmFsc2UpKSksIGxvYyk7XHJcbiAgICBpZiAoZHluYW1pY1Nsb3RzLmxlbmd0aCkge1xyXG4gICAgICAgIHNsb3RzID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoQ1JFQVRFX1NMT1RTKSwgW1xyXG4gICAgICAgICAgICBzbG90cyxcclxuICAgICAgICAgICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uKGR5bmFtaWNTbG90cylcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc2xvdHMsXHJcbiAgICAgICAgaGFzRHluYW1pY1Nsb3RzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkRHluYW1pY1Nsb3QobmFtZSwgZm4sIGluZGV4KSB7XHJcbiAgICBjb25zdCBwcm9wcyA9IFtcclxuICAgICAgICBjcmVhdGVPYmplY3RQcm9wZXJ0eShgbmFtZWAsIG5hbWUpLFxyXG4gICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KGBmbmAsIGZuKVxyXG4gICAgXTtcclxuICAgIGlmIChpbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgcHJvcHMucHVzaChjcmVhdGVPYmplY3RQcm9wZXJ0eShga2V5YCwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihTdHJpbmcoaW5kZXgpLCB0cnVlKSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcHMpO1xyXG59XHJcbmZ1bmN0aW9uIGhhc0ZvcndhcmRlZFNsb3RzKGNoaWxkcmVuKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBzd2l0Y2ggKGNoaWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnRhZ1R5cGUgPT09IDIgLyogRWxlbWVudFR5cGVzLlNMT1QgKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICBoYXNGb3J3YXJkZWRTbG90cyhjaGlsZC5jaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDkgLyogTm9kZVR5cGVzLklGICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZvcndhcmRlZFNsb3RzKGNoaWxkLmJyYW5jaGVzKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi86XHJcbiAgICAgICAgICAgIGNhc2UgMTEgLyogTm9kZVR5cGVzLkZPUiAqLzpcclxuICAgICAgICAgICAgICAgIGlmIChoYXNGb3J3YXJkZWRTbG90cyhjaGlsZC5jaGlsZHJlbikpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNOb25XaGl0ZXNwYWNlQ29udGVudChub2RlKSB7XHJcbiAgICBpZiAobm9kZS50eXBlICE9PSAyIC8qIE5vZGVUeXBlcy5URVhUICovICYmIG5vZGUudHlwZSAhPT0gMTIgLyogTm9kZVR5cGVzLlRFWFRfQ0FMTCAqLylcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBub2RlLnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi9cclxuICAgICAgICA/ICEhbm9kZS5jb250ZW50LnRyaW0oKVxyXG4gICAgICAgIDogaXNOb25XaGl0ZXNwYWNlQ29udGVudChub2RlLmNvbnRlbnQpO1xyXG59XG5cbi8vIHNvbWUgZGlyZWN0aXZlIHRyYW5zZm9ybXMgKGUuZy4gdi1tb2RlbCkgbWF5IHJldHVybiBhIHN5bWJvbCBmb3IgcnVudGltZVxyXG4vLyBpbXBvcnQsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgYSByZXNvbHZlRGlyZWN0aXZlIGNhbGwuXHJcbmNvbnN0IGRpcmVjdGl2ZUltcG9ydE1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbi8vIGdlbmVyYXRlIGEgSmF2YVNjcmlwdCBBU1QgZm9yIHRoaXMgZWxlbWVudCdzIGNvZGVnZW5cclxuY29uc3QgdHJhbnNmb3JtRWxlbWVudCA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICAvLyBwZXJmb3JtIHRoZSB3b3JrIG9uIGV4aXQsIGFmdGVyIGFsbCBjaGlsZCBleHByZXNzaW9ucyBoYXZlIGJlZW5cclxuICAgIC8vIHByb2Nlc3NlZCBhbmQgbWVyZ2VkLlxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBvc3RUcmFuc2Zvcm1FbGVtZW50KCkge1xyXG4gICAgICAgIG5vZGUgPSBjb250ZXh0LmN1cnJlbnROb2RlO1xyXG4gICAgICAgIGlmICghKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICAobm9kZS50YWdUeXBlID09PSAwIC8qIEVsZW1lbnRUeXBlcy5FTEVNRU5UICovIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyB0YWcsIHByb3BzIH0gPSBub2RlO1xyXG4gICAgICAgIGNvbnN0IGlzQ29tcG9uZW50ID0gbm9kZS50YWdUeXBlID09PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi87XHJcbiAgICAgICAgLy8gVGhlIGdvYWwgb2YgdGhlIHRyYW5zZm9ybSBpcyB0byBjcmVhdGUgYSBjb2RlZ2VuTm9kZSBpbXBsZW1lbnRpbmcgdGhlXHJcbiAgICAgICAgLy8gVk5vZGVDYWxsIGludGVyZmFjZS5cclxuICAgICAgICBsZXQgdm5vZGVUYWcgPSBpc0NvbXBvbmVudFxyXG4gICAgICAgICAgICA/IHJlc29sdmVDb21wb25lbnRUeXBlKG5vZGUsIGNvbnRleHQpXHJcbiAgICAgICAgICAgIDogYFwiJHt0YWd9XCJgO1xyXG4gICAgICAgIGNvbnN0IGlzRHluYW1pY0NvbXBvbmVudCA9IGlzT2JqZWN0KHZub2RlVGFnKSAmJiB2bm9kZVRhZy5jYWxsZWUgPT09IFJFU09MVkVfRFlOQU1JQ19DT01QT05FTlQ7XHJcbiAgICAgICAgbGV0IHZub2RlUHJvcHM7XHJcbiAgICAgICAgbGV0IHZub2RlQ2hpbGRyZW47XHJcbiAgICAgICAgbGV0IHZub2RlUGF0Y2hGbGFnO1xyXG4gICAgICAgIGxldCBwYXRjaEZsYWcgPSAwO1xyXG4gICAgICAgIGxldCB2bm9kZUR5bmFtaWNQcm9wcztcclxuICAgICAgICBsZXQgZHluYW1pY1Byb3BOYW1lcztcclxuICAgICAgICBsZXQgdm5vZGVEaXJlY3RpdmVzO1xyXG4gICAgICAgIGxldCBzaG91bGRVc2VCbG9jayA9IFxyXG4gICAgICAgIC8vIGR5bmFtaWMgY29tcG9uZW50IG1heSByZXNvbHZlIHRvIHBsYWluIGVsZW1lbnRzXHJcbiAgICAgICAgaXNEeW5hbWljQ29tcG9uZW50IHx8XHJcbiAgICAgICAgICAgIHZub2RlVGFnID09PSBURUxFUE9SVCB8fFxyXG4gICAgICAgICAgICB2bm9kZVRhZyA9PT0gU1VTUEVOU0UgfHxcclxuICAgICAgICAgICAgKCFpc0NvbXBvbmVudCAmJlxyXG4gICAgICAgICAgICAgICAgLy8gPHN2Zz4gYW5kIDxmb3JlaWduT2JqZWN0PiBtdXN0IGJlIGZvcmNlZCBpbnRvIGJsb2NrcyBzbyB0aGF0IGJsb2NrXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGVzIGluc2lkZSBnZXQgcHJvcGVyIGlzU1ZHIGZsYWcgYXQgcnVudGltZS4gKCM2MzksICM2NDMpXHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IHdlYi1zcGVjaWZpYywgYnV0IHNwbGl0dGluZyB0aGUgbG9naWMgb3V0IG9mIGNvcmVcclxuICAgICAgICAgICAgICAgIC8vIGxlYWRzIHRvIHRvbyBtdWNoIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuXHJcbiAgICAgICAgICAgICAgICAodGFnID09PSAnc3ZnJyB8fCB0YWcgPT09ICdmb3JlaWduT2JqZWN0JykpO1xyXG4gICAgICAgIC8vIHByb3BzXHJcbiAgICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHNCdWlsZFJlc3VsdCA9IGJ1aWxkUHJvcHMobm9kZSwgY29udGV4dCwgdW5kZWZpbmVkLCBpc0NvbXBvbmVudCwgaXNEeW5hbWljQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgdm5vZGVQcm9wcyA9IHByb3BzQnVpbGRSZXN1bHQucHJvcHM7XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyA9IHByb3BzQnVpbGRSZXN1bHQucGF0Y2hGbGFnO1xyXG4gICAgICAgICAgICBkeW5hbWljUHJvcE5hbWVzID0gcHJvcHNCdWlsZFJlc3VsdC5keW5hbWljUHJvcE5hbWVzO1xyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmVzID0gcHJvcHNCdWlsZFJlc3VsdC5kaXJlY3RpdmVzO1xyXG4gICAgICAgICAgICB2bm9kZURpcmVjdGl2ZXMgPVxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlcyAmJiBkaXJlY3RpdmVzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY3JlYXRlQXJyYXlFeHByZXNzaW9uKGRpcmVjdGl2ZXMubWFwKGRpciA9PiBidWlsZERpcmVjdGl2ZUFyZ3MoZGlyLCBjb250ZXh0KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChwcm9wc0J1aWxkUmVzdWx0LnNob3VsZFVzZUJsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICBzaG91bGRVc2VCbG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hpbGRyZW5cclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh2bm9kZVRhZyA9PT0gS0VFUF9BTElWRSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQWx0aG91Z2ggYSBidWlsdC1pbiBjb21wb25lbnQsIHdlIGNvbXBpbGUgS2VlcEFsaXZlIHdpdGggcmF3IGNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHNsb3QgZnVuY3Rpb25zIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW5zaWRlIFRyYW5zaXRpb25cclxuICAgICAgICAgICAgICAgIC8vIG9yIG90aGVyIFRyYW5zaXRpb24td3JhcHBpbmcgSE9Dcy5cclxuICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSBjb3JyZWN0IHVwZGF0ZXMgd2l0aCBibG9jayBvcHRpbWl6YXRpb25zLCB3ZSBuZWVkIHRvOlxyXG4gICAgICAgICAgICAgICAgLy8gMS4gRm9yY2Uga2VlcC1hbGl2ZSBpbnRvIGEgYmxvY2suIFRoaXMgYXZvaWRzIGl0cyBjaGlsZHJlbiBiZWluZ1xyXG4gICAgICAgICAgICAgICAgLy8gICAgY29sbGVjdGVkIGJ5IGEgcGFyZW50IGJsb2NrLlxyXG4gICAgICAgICAgICAgICAgc2hvdWxkVXNlQmxvY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gMi4gRm9yY2Uga2VlcC1hbGl2ZSB0byBhbHdheXMgYmUgdXBkYXRlZCwgc2luY2UgaXQgdXNlcyByYXcgY2hpbGRyZW4uXHJcbiAgICAgICAgICAgICAgICBwYXRjaEZsYWcgfD0gMTAyNCAvKiBQYXRjaEZsYWdzLkRZTkFNSUNfU0xPVFMgKi87XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ1IC8qIEVycm9yQ29kZXMuWF9LRUVQX0FMSVZFX0lOVkFMSURfQ0hJTERSRU4gKi8sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5vZGUuY2hpbGRyZW5bMF0ubG9jLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5vZGUuY2hpbGRyZW5bbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXS5sb2MuZW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZEJ1aWxkQXNTbG90cyA9IGlzQ29tcG9uZW50ICYmXHJcbiAgICAgICAgICAgICAgICAvLyBUZWxlcG9ydCBpcyBub3QgYSByZWFsIGNvbXBvbmVudCBhbmQgaGFzIGRlZGljYXRlZCBydW50aW1lIGhhbmRsaW5nXHJcbiAgICAgICAgICAgICAgICB2bm9kZVRhZyAhPT0gVEVMRVBPUlQgJiZcclxuICAgICAgICAgICAgICAgIC8vIGV4cGxhaW5lZCBhYm92ZS5cclxuICAgICAgICAgICAgICAgIHZub2RlVGFnICE9PSBLRUVQX0FMSVZFO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRBc1Nsb3RzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNsb3RzLCBoYXNEeW5hbWljU2xvdHMgfSA9IGJ1aWxkU2xvdHMobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB2bm9kZUNoaWxkcmVuID0gc2xvdHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzRHluYW1pY1Nsb3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hGbGFnIHw9IDEwMjQgLyogUGF0Y2hGbGFncy5EWU5BTUlDX1NMT1RTICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIHZub2RlVGFnICE9PSBURUxFUE9SVCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGNoaWxkLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgZHluYW1pYyB0ZXh0IGNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEeW5hbWljVGV4dENoaWxkID0gdHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi87XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzRHluYW1pY1RleHRDaGlsZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGdldENvbnN0YW50VHlwZShjaGlsZCwgY29udGV4dCkgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZsYWcgfD0gMSAvKiBQYXRjaEZsYWdzLlRFWFQgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBwYXNzIGRpcmVjdGx5IGlmIHRoZSBvbmx5IGNoaWxkIGlzIGEgdGV4dCBub2RlXHJcbiAgICAgICAgICAgICAgICAvLyAocGxhaW4gLyBpbnRlcnBvbGF0aW9uIC8gZXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgIGlmIChoYXNEeW5hbWljVGV4dENoaWxkIHx8IHR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZUNoaWxkcmVuID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZUNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZub2RlQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBhdGNoRmxhZyAmIGR5bmFtaWNQcm9wTmFtZXNcclxuICAgICAgICBpZiAocGF0Y2hGbGFnICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBmbGFncyAobmVnYXRpdmUgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSlcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZVBhdGNoRmxhZyA9IHBhdGNoRmxhZyArIGAgLyogJHtQYXRjaEZsYWdOYW1lc1twYXRjaEZsYWddfSAqL2A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBiaXR3aXNlIGZsYWdzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhZ05hbWVzID0gT2JqZWN0LmtleXMoUGF0Y2hGbGFnTmFtZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoTnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG4gPT4gbiA+IDAgJiYgcGF0Y2hGbGFnICYgbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChuID0+IFBhdGNoRmxhZ05hbWVzW25dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihgLCBgKTtcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZVBhdGNoRmxhZyA9IHBhdGNoRmxhZyArIGAgLyogJHtmbGFnTmFtZXN9ICovYDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZub2RlUGF0Y2hGbGFnID0gU3RyaW5nKHBhdGNoRmxhZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNQcm9wTmFtZXMgJiYgZHluYW1pY1Byb3BOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHZub2RlRHluYW1pY1Byb3BzID0gc3RyaW5naWZ5RHluYW1pY1Byb3BOYW1lcyhkeW5hbWljUHJvcE5hbWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBub2RlLmNvZGVnZW5Ob2RlID0gY3JlYXRlVk5vZGVDYWxsKGNvbnRleHQsIHZub2RlVGFnLCB2bm9kZVByb3BzLCB2bm9kZUNoaWxkcmVuLCB2bm9kZVBhdGNoRmxhZywgdm5vZGVEeW5hbWljUHJvcHMsIHZub2RlRGlyZWN0aXZlcywgISFzaG91bGRVc2VCbG9jaywgZmFsc2UgLyogZGlzYWJsZVRyYWNraW5nICovLCBpc0NvbXBvbmVudCwgbm9kZS5sb2MpO1xyXG4gICAgfTtcclxufTtcclxuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudFR5cGUobm9kZSwgY29udGV4dCwgc3NyID0gZmFsc2UpIHtcclxuICAgIGxldCB7IHRhZyB9ID0gbm9kZTtcclxuICAgIC8vIDEuIGR5bmFtaWMgY29tcG9uZW50XHJcbiAgICBjb25zdCBpc0V4cGxpY2l0RHluYW1pYyA9IGlzQ29tcG9uZW50VGFnKHRhZyk7XHJcbiAgICBjb25zdCBpc1Byb3AgPSBmaW5kUHJvcChub2RlLCAnaXMnKTtcclxuICAgIGlmIChpc1Byb3ApIHtcclxuICAgICAgICBpZiAoaXNFeHBsaWNpdER5bmFtaWMgfHxcclxuICAgICAgICAgICAgKGlzQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX0lTX09OX0VMRU1FTlRcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSVNfT05fRUxFTUVOVCAqLywgY29udGV4dCkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cCA9IGlzUHJvcC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi9cclxuICAgICAgICAgICAgICAgID8gaXNQcm9wLnZhbHVlICYmIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oaXNQcm9wLnZhbHVlLmNvbnRlbnQsIHRydWUpXHJcbiAgICAgICAgICAgICAgICA6IGlzUHJvcC5leHA7XHJcbiAgICAgICAgICAgIGlmIChleHApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihSRVNPTFZFX0RZTkFNSUNfQ09NUE9ORU5UKSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNQcm9wLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLyAmJlxyXG4gICAgICAgICAgICBpc1Byb3AudmFsdWUuY29udGVudC5zdGFydHNXaXRoKCd2dWU6JykpIHtcclxuICAgICAgICAgICAgLy8gPGJ1dHRvbiBpcz1cInZ1ZTp4eHhcIj5cclxuICAgICAgICAgICAgLy8gaWYgbm90IDxjb21wb25lbnQ+LCBvbmx5IGlzIHZhbHVlIHRoYXQgc3RhcnRzIHdpdGggXCJ2dWU6XCIgd2lsbCBiZVxyXG4gICAgICAgICAgICAvLyB0cmVhdGVkIGFzIGNvbXBvbmVudCBieSB0aGUgcGFyc2UgcGhhc2UgYW5kIHJlYWNoIGhlcmUsIHVubGVzcyBpdCdzXHJcbiAgICAgICAgICAgIC8vIGNvbXBhdCBtb2RlIHdoZXJlIGFsbCBpcyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgY29tcG9uZW50c1xyXG4gICAgICAgICAgICB0YWcgPSBpc1Byb3AudmFsdWUuY29udGVudC5zbGljZSg0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAxLjUgdi1pcyAoVE9ETzogRGVwcmVjYXRlKVxyXG4gICAgY29uc3QgaXNEaXIgPSAhaXNFeHBsaWNpdER5bmFtaWMgJiYgZmluZERpcihub2RlLCAnaXMnKTtcclxuICAgIGlmIChpc0RpciAmJiBpc0Rpci5leHApIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoUkVTT0xWRV9EWU5BTUlDX0NPTVBPTkVOVCksIFtcclxuICAgICAgICAgICAgaXNEaXIuZXhwXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICAvLyAyLiBidWlsdC1pbiBjb21wb25lbnRzIChUZWxlcG9ydCwgVHJhbnNpdGlvbiwgS2VlcEFsaXZlLCBTdXNwZW5zZS4uLilcclxuICAgIGNvbnN0IGJ1aWx0SW4gPSBpc0NvcmVDb21wb25lbnQodGFnKSB8fCBjb250ZXh0LmlzQnVpbHRJbkNvbXBvbmVudCh0YWcpO1xyXG4gICAgaWYgKGJ1aWx0SW4pIHtcclxuICAgICAgICAvLyBidWlsdC1pbnMgYXJlIHNpbXBseSBmYWxsdGhyb3VnaHMgLyBoYXZlIHNwZWNpYWwgaGFuZGxpbmcgZHVyaW5nIHNzclxyXG4gICAgICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gaW1wb3J0IHRoZWlyIHJ1bnRpbWUgZXF1aXZhbGVudHNcclxuICAgICAgICBpZiAoIXNzcilcclxuICAgICAgICAgICAgY29udGV4dC5oZWxwZXIoYnVpbHRJbik7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWx0SW47XHJcbiAgICB9XHJcbiAgICAvLyA1LiB1c2VyIGNvbXBvbmVudCAocmVzb2x2ZSlcclxuICAgIGNvbnRleHQuaGVscGVyKFJFU09MVkVfQ09NUE9ORU5UKTtcclxuICAgIGNvbnRleHQuY29tcG9uZW50cy5hZGQodGFnKTtcclxuICAgIHJldHVybiB0b1ZhbGlkQXNzZXRJZCh0YWcsIGBjb21wb25lbnRgKTtcclxufVxyXG5mdW5jdGlvbiBidWlsZFByb3BzKG5vZGUsIGNvbnRleHQsIHByb3BzID0gbm9kZS5wcm9wcywgaXNDb21wb25lbnQsIGlzRHluYW1pY0NvbXBvbmVudCwgc3NyID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHsgdGFnLCBsb2M6IGVsZW1lbnRMb2MsIGNoaWxkcmVuIH0gPSBub2RlO1xyXG4gICAgbGV0IHByb3BlcnRpZXMgPSBbXTtcclxuICAgIGNvbnN0IG1lcmdlQXJncyA9IFtdO1xyXG4gICAgY29uc3QgcnVudGltZURpcmVjdGl2ZXMgPSBbXTtcclxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoID4gMDtcclxuICAgIGxldCBzaG91bGRVc2VCbG9jayA9IGZhbHNlO1xyXG4gICAgLy8gcGF0Y2hGbGFnIGFuYWx5c2lzXHJcbiAgICBsZXQgcGF0Y2hGbGFnID0gMDtcclxuICAgIGxldCBoYXNSZWYgPSBmYWxzZTtcclxuICAgIGxldCBoYXNDbGFzc0JpbmRpbmcgPSBmYWxzZTtcclxuICAgIGxldCBoYXNTdHlsZUJpbmRpbmcgPSBmYWxzZTtcclxuICAgIGxldCBoYXNIeWRyYXRpb25FdmVudEJpbmRpbmcgPSBmYWxzZTtcclxuICAgIGxldCBoYXNEeW5hbWljS2V5cyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc1Zub2RlSG9vayA9IGZhbHNlO1xyXG4gICAgY29uc3QgZHluYW1pY1Byb3BOYW1lcyA9IFtdO1xyXG4gICAgY29uc3QgYW5hbHl6ZVBhdGNoRmxhZyA9ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xyXG4gICAgICAgIGlmIChpc1N0YXRpY0V4cChrZXkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBrZXkuY29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgaXNFdmVudEhhbmRsZXIgPSBpc09uKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNFdmVudEhhbmRsZXIgJiZcclxuICAgICAgICAgICAgICAgICghaXNDb21wb25lbnQgfHwgaXNEeW5hbWljQ29tcG9uZW50KSAmJlxyXG4gICAgICAgICAgICAgICAgLy8gb21pdCB0aGUgZmxhZyBmb3IgY2xpY2sgaGFuZGxlcnMgYmVjYXVzZSBoeWRyYXRpb24gZ2l2ZXMgY2xpY2tcclxuICAgICAgICAgICAgICAgIC8vIGRlZGljYXRlZCBmYXN0IHBhdGguXHJcbiAgICAgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdvbmNsaWNrJyAmJlxyXG4gICAgICAgICAgICAgICAgLy8gb21pdCB2LW1vZGVsIGhhbmRsZXJzXHJcbiAgICAgICAgICAgICAgICBuYW1lICE9PSAnb25VcGRhdGU6bW9kZWxWYWx1ZScgJiZcclxuICAgICAgICAgICAgICAgIC8vIG9taXQgb25Wbm9kZVhYWCBob29rc1xyXG4gICAgICAgICAgICAgICAgIWlzUmVzZXJ2ZWRQcm9wKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNIeWRyYXRpb25FdmVudEJpbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0V2ZW50SGFuZGxlciAmJiBpc1Jlc2VydmVkUHJvcChuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgaGFzVm5vZGVIb29rID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gMjAgLyogTm9kZVR5cGVzLkpTX0NBQ0hFX0VYUFJFU1NJT04gKi8gfHxcclxuICAgICAgICAgICAgICAgICgodmFsdWUudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGdldENvbnN0YW50VHlwZSh2YWx1ZSwgY29udGV4dCkgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBpZiB0aGUgcHJvcCBpcyBhIGNhY2hlZCBoYW5kbGVyIG9yIGhhcyBjb25zdGFudCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAncmVmJykge1xyXG4gICAgICAgICAgICAgICAgaGFzUmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNDbGFzc0JpbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcclxuICAgICAgICAgICAgICAgIGhhc1N0eWxlQmluZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gJ2tleScgJiYgIWR5bmFtaWNQcm9wTmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNQcm9wTmFtZXMucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB0cmVhdCB0aGUgZHluYW1pYyBjbGFzcyBhbmQgc3R5bGUgYmluZGluZyBvZiB0aGUgY29tcG9uZW50IGFzIGR5bmFtaWMgcHJvcHNcclxuICAgICAgICAgICAgaWYgKGlzQ29tcG9uZW50ICYmXHJcbiAgICAgICAgICAgICAgICAobmFtZSA9PT0gJ2NsYXNzJyB8fCBuYW1lID09PSAnc3R5bGUnKSAmJlxyXG4gICAgICAgICAgICAgICAgIWR5bmFtaWNQcm9wTmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNQcm9wTmFtZXMucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGFzRHluYW1pY0tleXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gc3RhdGljIGF0dHJpYnV0ZVxyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcclxuICAgICAgICBpZiAocHJvcC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBsb2MsIG5hbWUsIHZhbHVlIH0gPSBwcm9wO1xyXG4gICAgICAgICAgICBsZXQgaXNTdGF0aWMgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3JlZicpIHtcclxuICAgICAgICAgICAgICAgIGhhc1JlZiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5zY29wZXMudkZvciA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkoY3JlYXRlU2ltcGxlRXhwcmVzc2lvbigncmVmX2ZvcicsIHRydWUpLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCd0cnVlJykpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBza2lwIGlzIG9uIDxjb21wb25lbnQ+LCBvciBpcz1cInZ1ZTp4eHhcIlxyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJlxyXG4gICAgICAgICAgICAgICAgKGlzQ29tcG9uZW50VGFnKHRhZykgfHxcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWUgJiYgdmFsdWUuY29udGVudC5zdGFydHNXaXRoKCd2dWU6JykpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX0lTX09OX0VMRU1FTlRcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSVNfT05fRUxFTUVOVCAqLywgY29udGV4dCkpKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKGNyZWF0ZU9iamVjdFByb3BlcnR5KGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24obmFtZSwgdHJ1ZSwgZ2V0SW5uZXJSYW5nZShsb2MsIDAsIG5hbWUubGVuZ3RoKSksIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24odmFsdWUgPyB2YWx1ZS5jb250ZW50IDogJycsIGlzU3RhdGljLCB2YWx1ZSA/IHZhbHVlLmxvYyA6IGxvYykpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRpcmVjdGl2ZXNcclxuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBhcmcsIGV4cCwgbG9jIH0gPSBwcm9wO1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZCaW5kID0gbmFtZSA9PT0gJ2JpbmQnO1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZPbiA9IG5hbWUgPT09ICdvbic7XHJcbiAgICAgICAgICAgIC8vIHNraXAgdi1zbG90IC0gaXQgaXMgaGFuZGxlZCBieSBpdHMgZGVkaWNhdGVkIHRyYW5zZm9ybS5cclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzbG90Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQwIC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfTUlTUExBQ0VEICovLCBsb2MpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNraXAgdi1vbmNlL3YtbWVtbyAtIHRoZXkgYXJlIGhhbmRsZWQgYnkgZGVkaWNhdGVkIHRyYW5zZm9ybXMuXHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnb25jZScgfHwgbmFtZSA9PT0gJ21lbW8nKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBza2lwIHYtaXMgYW5kIDppcyBvbiA8Y29tcG9uZW50PlxyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lzJyB8fFxyXG4gICAgICAgICAgICAgICAgKGlzVkJpbmQgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpY0FyZ09mKGFyZywgJ2lzJykgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaXNDb21wb25lbnRUYWcodGFnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovLCBjb250ZXh0KSkpKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2tpcCB2LW9uIGluIFNTUiBjb21waWxhdGlvblxyXG4gICAgICAgICAgICBpZiAoaXNWT24gJiYgc3NyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIC8vICM5Mzg6IGVsZW1lbnRzIHdpdGggZHluYW1pYyBrZXlzIHNob3VsZCBiZSBmb3JjZWQgaW50byBibG9ja3NcclxuICAgICAgICAgICAgKGlzVkJpbmQgJiYgaXNTdGF0aWNBcmdPZihhcmcsICdrZXknKSkgfHxcclxuICAgICAgICAgICAgICAgIC8vIGlubGluZSBiZWZvcmUtdXBkYXRlIGhvb2tzIG5lZWQgdG8gZm9yY2UgYmxvY2sgc28gdGhhdCBpdCBpcyBpbnZva2VkXHJcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmUgY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIChpc1ZPbiAmJiBoYXNDaGlsZHJlbiAmJiBpc1N0YXRpY0FyZ09mKGFyZywgJ3Z1ZTpiZWZvcmUtdXBkYXRlJykpKSB7XHJcbiAgICAgICAgICAgICAgICBzaG91bGRVc2VCbG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzVkJpbmQgJiYgaXNTdGF0aWNBcmdPZihhcmcsICdyZWYnKSAmJiBjb250ZXh0LnNjb3Blcy52Rm9yID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKGNyZWF0ZU9iamVjdFByb3BlcnR5KGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJ3JlZl9mb3InLCB0cnVlKSwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbigndHJ1ZScpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB2LWJpbmQgYW5kIHYtb24gd2l0aCBubyBhcmd1bWVudFxyXG4gICAgICAgICAgICBpZiAoIWFyZyAmJiAoaXNWQmluZCB8fCBpc1ZPbikpIHtcclxuICAgICAgICAgICAgICAgIGhhc0R5bmFtaWNLZXlzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VBcmdzLnB1c2goY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihkZWR1cGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpLCBlbGVtZW50TG9jKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVkJpbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi54IHYtYmluZCBvYmplY3Qgb3JkZXIgY29tcGF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzT3ZlcnJpZGFibGVLZXlzID0gbWVyZ2VBcmdzLnNvbWUoYXJnID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy50eXBlID09PSAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmcucHJvcGVydGllcy5zb21lKCh7IGtleSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50eXBlICE9PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAha2V5LmlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGtleS5jb250ZW50ICE9PSAnY2xhc3MnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5jb250ZW50ICE9PSAnc3R5bGUnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc09uKGtleS5jb250ZW50KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR5bmFtaWMgZXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3ZlcnJpZGFibGVLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX1ZfQklORF9PQkpFQ1RfT1JERVJcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9CSU5EX09CSkVDVF9PUkRFUiAqLywgY29udGV4dCwgbG9jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfVl9CSU5EX09CSkVDVF9PUkRFUlwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfT0JKRUNUX09SREVSICovLCBjb250ZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQXJncy51bnNoaWZ0KGV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VBcmdzLnB1c2goZXhwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHYtb249XCJvYmpcIiAtPiB0b0hhbmRsZXJzKG9iailcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VBcmdzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZTogY29udGV4dC5oZWxwZXIoVE9fSEFORExFUlMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzOiBpc0NvbXBvbmVudCA/IFtleHBdIDogW2V4cCwgYHRydWVgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcihpc1ZCaW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMzQgLyogRXJyb3JDb2Rlcy5YX1ZfQklORF9OT19FWFBSRVNTSU9OICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMzUgLyogRXJyb3JDb2Rlcy5YX1ZfT05fTk9fRVhQUkVTU0lPTiAqLywgbG9jKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmVUcmFuc2Zvcm0gPSBjb250ZXh0LmRpcmVjdGl2ZVRyYW5zZm9ybXNbbmFtZV07XHJcbiAgICAgICAgICAgIGlmIChkaXJlY3RpdmVUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIC8vIGhhcyBidWlsdC1pbiBkaXJlY3RpdmUgdHJhbnNmb3JtLlxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgbmVlZFJ1bnRpbWUgfSA9IGRpcmVjdGl2ZVRyYW5zZm9ybShwcm9wLCBub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICFzc3IgJiYgcHJvcHMuZm9yRWFjaChhbmFseXplUGF0Y2hGbGFnKTtcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCguLi5wcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJ1bnRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBydW50aW1lRGlyZWN0aXZlcy5wdXNoKHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N5bWJvbChuZWVkUnVudGltZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlSW1wb3J0TWFwLnNldChwcm9wLCBuZWVkUnVudGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0J1aWx0SW5EaXJlY3RpdmUobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGJ1aWx0LWluIHRyYW5zZm9ybSwgdGhpcyBpcyBhIHVzZXIgY3VzdG9tIGRpcmVjdGl2ZS5cclxuICAgICAgICAgICAgICAgIHJ1bnRpbWVEaXJlY3RpdmVzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjdXN0b20gZGlycyBtYXkgdXNlIGJlZm9yZVVwZGF0ZSBzbyB0aGV5IG5lZWQgdG8gZm9yY2UgYmxvY2tzXHJcbiAgICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgYmVmb3JlLXVwZGF0ZSBnZXRzIGNhbGxlZCBiZWZvcmUgY2hpbGRyZW4gdXBkYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRVc2VCbG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcHJvcHNFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xyXG4gICAgLy8gaGFzIHYtYmluZD1cIm9iamVjdFwiIG9yIHYtb249XCJvYmplY3RcIiwgd3JhcCB3aXRoIG1lcmdlUHJvcHNcclxuICAgIGlmIChtZXJnZUFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1lcmdlQXJncy5wdXNoKGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oZGVkdXBlUHJvcGVydGllcyhwcm9wZXJ0aWVzKSwgZWxlbWVudExvYykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVyZ2VBcmdzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcHJvcHNFeHByZXNzaW9uID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoTUVSR0VfUFJPUFMpLCBtZXJnZUFyZ3MsIGVsZW1lbnRMb2MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc2luZ2xlIHYtYmluZCB3aXRoIG5vdGhpbmcgZWxzZSAtIG5vIG5lZWQgZm9yIGEgbWVyZ2VQcm9wcyBjYWxsXHJcbiAgICAgICAgICAgIHByb3BzRXhwcmVzc2lvbiA9IG1lcmdlQXJnc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgICAgIHByb3BzRXhwcmVzc2lvbiA9IGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oZGVkdXBlUHJvcGVydGllcyhwcm9wZXJ0aWVzKSwgZWxlbWVudExvYyk7XHJcbiAgICB9XHJcbiAgICAvLyBwYXRjaEZsYWcgYW5hbHlzaXNcclxuICAgIGlmIChoYXNEeW5hbWljS2V5cykge1xyXG4gICAgICAgIHBhdGNoRmxhZyB8PSAxNiAvKiBQYXRjaEZsYWdzLkZVTExfUFJPUFMgKi87XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoaGFzQ2xhc3NCaW5kaW5nICYmICFpc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBwYXRjaEZsYWcgfD0gMiAvKiBQYXRjaEZsYWdzLkNMQVNTICovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFzU3R5bGVCaW5kaW5nICYmICFpc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBwYXRjaEZsYWcgfD0gNCAvKiBQYXRjaEZsYWdzLlNUWUxFICovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZHluYW1pY1Byb3BOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcGF0Y2hGbGFnIHw9IDggLyogUGF0Y2hGbGFncy5QUk9QUyAqLztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhhc0h5ZHJhdGlvbkV2ZW50QmluZGluZykge1xyXG4gICAgICAgICAgICBwYXRjaEZsYWcgfD0gMzIgLyogUGF0Y2hGbGFncy5IWURSQVRFX0VWRU5UUyAqLztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXNob3VsZFVzZUJsb2NrICYmXHJcbiAgICAgICAgKHBhdGNoRmxhZyA9PT0gMCB8fCBwYXRjaEZsYWcgPT09IDMyIC8qIFBhdGNoRmxhZ3MuSFlEUkFURV9FVkVOVFMgKi8pICYmXHJcbiAgICAgICAgKGhhc1JlZiB8fCBoYXNWbm9kZUhvb2sgfHwgcnVudGltZURpcmVjdGl2ZXMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICBwYXRjaEZsYWcgfD0gNTEyIC8qIFBhdGNoRmxhZ3MuTkVFRF9QQVRDSCAqLztcclxuICAgIH1cclxuICAgIC8vIHByZS1ub3JtYWxpemUgcHJvcHMsIFNTUiBpcyBza2lwcGVkIGZvciBub3dcclxuICAgIGlmICghY29udGV4dC5pblNTUiAmJiBwcm9wc0V4cHJlc3Npb24pIHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BzRXhwcmVzc2lvbi50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTUgLyogTm9kZVR5cGVzLkpTX09CSkVDVF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCB0aGVyZSBpcyBubyB2LWJpbmQsXHJcbiAgICAgICAgICAgICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBkZWFsIHdpdGggZHluYW1pYyBrZXkgYmluZGluZ1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzS2V5SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgIGxldCBzdHlsZUtleUluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzRHluYW1pY0tleSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc0V4cHJlc3Npb24ucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHByb3BzRXhwcmVzc2lvbi5wcm9wZXJ0aWVzW2ldLmtleTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGF0aWNFeHAoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmNvbnRlbnQgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzS2V5SW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleS5jb250ZW50ID09PSAnc3R5bGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUtleUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgha2V5LmlzSGFuZGxlcktleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEeW5hbWljS2V5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc1Byb3AgPSBwcm9wc0V4cHJlc3Npb24ucHJvcGVydGllc1tjbGFzc0tleUluZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlUHJvcCA9IHByb3BzRXhwcmVzc2lvbi5wcm9wZXJ0aWVzW3N0eWxlS2V5SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZHluYW1pYyBrZXlcclxuICAgICAgICAgICAgICAgIGlmICghaGFzRHluYW1pY0tleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc1Byb3AgJiYgIWlzU3RhdGljRXhwKGNsYXNzUHJvcC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NQcm9wLnZhbHVlID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoTk9STUFMSVpFX0NMQVNTKSwgW2NsYXNzUHJvcC52YWx1ZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVQcm9wICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGF0aWMgc3R5bGUgaXMgY29tcGlsZWQgaW50byBhbiBvYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHVzZSBgaGFzU3R5bGVCaW5kaW5nYCB0byBlbnN1cmUgdGhhdCBpdCBpcyBhIGR5bmFtaWMgc3R5bGUgYmluZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaGFzU3R5bGVCaW5kaW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGVQcm9wLnZhbHVlLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVQcm9wLnZhbHVlLmNvbnRlbnQudHJpbSgpWzBdID09PSBgW2ApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2LWJpbmQ6c3R5bGUgYW5kIHN0eWxlIGJvdGggZXhpc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2LWJpbmQ6c3R5bGUgd2l0aCBzdGF0aWMgbGl0ZXJhbCBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUHJvcC52YWx1ZS50eXBlID09PSAxNyAvKiBOb2RlVHlwZXMuSlNfQVJSQVlfRVhQUkVTU0lPTiAqLykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVQcm9wLnZhbHVlID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoTk9STUFMSVpFX1NUWUxFKSwgW3N0eWxlUHJvcC52YWx1ZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGR5bmFtaWMga2V5IGJpbmRpbmcsIHdyYXAgd2l0aCBgbm9ybWFsaXplUHJvcHNgXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHNFeHByZXNzaW9uID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoTk9STUFMSVpFX1BST1BTKSwgW3Byb3BzRXhwcmVzc2lvbl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlUHJvcHMgY2FsbCwgZG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBzaW5nbGUgdi1iaW5kXHJcbiAgICAgICAgICAgICAgICBwcm9wc0V4cHJlc3Npb24gPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihOT1JNQUxJWkVfUFJPUFMpLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoR1VBUkRfUkVBQ1RJVkVfUFJPUFMpLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzRXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvcHM6IHByb3BzRXhwcmVzc2lvbixcclxuICAgICAgICBkaXJlY3RpdmVzOiBydW50aW1lRGlyZWN0aXZlcyxcclxuICAgICAgICBwYXRjaEZsYWcsXHJcbiAgICAgICAgZHluYW1pY1Byb3BOYW1lcyxcclxuICAgICAgICBzaG91bGRVc2VCbG9ja1xyXG4gICAgfTtcclxufVxyXG4vLyBEZWR1cGUgcHJvcHMgaW4gYW4gb2JqZWN0IGxpdGVyYWwuXHJcbi8vIExpdGVyYWwgZHVwbGljYXRlZCBhdHRyaWJ1dGVzIHdvdWxkIGhhdmUgYmVlbiB3YXJuZWQgZHVyaW5nIHRoZSBwYXJzZSBwaGFzZSxcclxuLy8gaG93ZXZlciwgaXQncyBwb3NzaWJsZSB0byBlbmNvdW50ZXIgZHVwbGljYXRlZCBgb25YWFhgIGhhbmRsZXJzIHdpdGggZGlmZmVyZW50XHJcbi8vIG1vZGlmaWVycy4gV2UgYWxzbyBuZWVkIHRvIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBjbGFzcyAvIHN0eWxlIGF0dHJpYnV0ZXMuXHJcbi8vIC0gb25YWFggaGFuZGxlcnMgLyBzdHlsZTogbWVyZ2UgaW50byBhcnJheVxyXG4vLyAtIGNsYXNzOiBtZXJnZSBpbnRvIHNpbmdsZSBleHByZXNzaW9uIHdpdGggY29uY2F0ZW5hdGlvblxyXG5mdW5jdGlvbiBkZWR1cGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcclxuICAgIGNvbnN0IGtub3duUHJvcHMgPSBuZXcgTWFwKCk7XHJcbiAgICBjb25zdCBkZWR1cGVkID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAvLyBkeW5hbWljIGtleXMgYXJlIGFsd2F5cyBhbGxvd2VkXHJcbiAgICAgICAgaWYgKHByb3Aua2V5LnR5cGUgPT09IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi8gfHwgIXByb3Aua2V5LmlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIGRlZHVwZWQucHVzaChwcm9wKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBwcm9wLmtleS5jb250ZW50O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0ga25vd25Qcm9wcy5nZXQobmFtZSk7XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnc3R5bGUnIHx8IG5hbWUgPT09ICdjbGFzcycgfHwgaXNPbihuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgbWVyZ2VBc0FycmF5KGV4aXN0aW5nLCBwcm9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB1bmV4cGVjdGVkIGR1cGxpY2F0ZSwgc2hvdWxkIGhhdmUgZW1pdHRlZCBlcnJvciBkdXJpbmcgcGFyc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGtub3duUHJvcHMuc2V0KG5hbWUsIHByb3ApO1xyXG4gICAgICAgICAgICBkZWR1cGVkLnB1c2gocHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZHVwZWQ7XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VBc0FycmF5KGV4aXN0aW5nLCBpbmNvbWluZykge1xyXG4gICAgaWYgKGV4aXN0aW5nLnZhbHVlLnR5cGUgPT09IDE3IC8qIE5vZGVUeXBlcy5KU19BUlJBWV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgZXhpc3RpbmcudmFsdWUuZWxlbWVudHMucHVzaChpbmNvbWluZy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBleGlzdGluZy52YWx1ZSA9IGNyZWF0ZUFycmF5RXhwcmVzc2lvbihbZXhpc3RpbmcudmFsdWUsIGluY29taW5nLnZhbHVlXSwgZXhpc3RpbmcubG9jKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBidWlsZERpcmVjdGl2ZUFyZ3MoZGlyLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBkaXJBcmdzID0gW107XHJcbiAgICBjb25zdCBydW50aW1lID0gZGlyZWN0aXZlSW1wb3J0TWFwLmdldChkaXIpO1xyXG4gICAgaWYgKHJ1bnRpbWUpIHtcclxuICAgICAgICAvLyBidWlsdC1pbiBkaXJlY3RpdmUgd2l0aCBydW50aW1lXHJcbiAgICAgICAgZGlyQXJncy5wdXNoKGNvbnRleHQuaGVscGVyU3RyaW5nKHJ1bnRpbWUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gaW5qZWN0IHN0YXRlbWVudCBmb3IgcmVzb2x2aW5nIGRpcmVjdGl2ZVxyXG4gICAgICAgICAgICBjb250ZXh0LmhlbHBlcihSRVNPTFZFX0RJUkVDVElWRSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlyZWN0aXZlcy5hZGQoZGlyLm5hbWUpO1xyXG4gICAgICAgICAgICBkaXJBcmdzLnB1c2godG9WYWxpZEFzc2V0SWQoZGlyLm5hbWUsIGBkaXJlY3RpdmVgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgeyBsb2MgfSA9IGRpcjtcclxuICAgIGlmIChkaXIuZXhwKVxyXG4gICAgICAgIGRpckFyZ3MucHVzaChkaXIuZXhwKTtcclxuICAgIGlmIChkaXIuYXJnKSB7XHJcbiAgICAgICAgaWYgKCFkaXIuZXhwKSB7XHJcbiAgICAgICAgICAgIGRpckFyZ3MucHVzaChgdm9pZCAwYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpckFyZ3MucHVzaChkaXIuYXJnKTtcclxuICAgIH1cclxuICAgIGlmIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzKS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWRpci5hcmcpIHtcclxuICAgICAgICAgICAgaWYgKCFkaXIuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBkaXJBcmdzLnB1c2goYHZvaWQgMGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpckFyZ3MucHVzaChgdm9pZCAwYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRydWVFeHByZXNzaW9uID0gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgdHJ1ZWAsIGZhbHNlLCBsb2MpO1xyXG4gICAgICAgIGRpckFyZ3MucHVzaChjcmVhdGVPYmplY3RFeHByZXNzaW9uKGRpci5tb2RpZmllcnMubWFwKG1vZGlmaWVyID0+IGNyZWF0ZU9iamVjdFByb3BlcnR5KG1vZGlmaWVyLCB0cnVlRXhwcmVzc2lvbikpLCBsb2MpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVBcnJheUV4cHJlc3Npb24oZGlyQXJncywgZGlyLmxvYyk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5RHluYW1pY1Byb3BOYW1lcyhwcm9wcykge1xyXG4gICAgbGV0IHByb3BzTmFtZXNTdHJpbmcgPSBgW2A7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByb3BzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHByb3BzTmFtZXNTdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNbaV0pO1xyXG4gICAgICAgIGlmIChpIDwgbCAtIDEpXHJcbiAgICAgICAgICAgIHByb3BzTmFtZXNTdHJpbmcgKz0gJywgJztcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wc05hbWVzU3RyaW5nICsgYF1gO1xyXG59XHJcbmZ1bmN0aW9uIGlzQ29tcG9uZW50VGFnKHRhZykge1xyXG4gICAgcmV0dXJuIHRhZyA9PT0gJ2NvbXBvbmVudCcgfHwgdGFnID09PSAnQ29tcG9uZW50JztcclxufVxuXG4ocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgID8gT2JqZWN0LmZyZWV6ZSh7fSlcclxuICAgIDoge307XHJcbihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IE9iamVjdC5mcmVlemUoW10pIDogW107XHJcbmNvbnN0IGNhY2hlU3RyaW5nRnVuY3Rpb24gPSAoZm4pID0+IHtcclxuICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHJldHVybiAoKHN0cikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhpdCA9IGNhY2hlW3N0cl07XHJcbiAgICAgICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpO1xyXG4gICAgfSk7XHJcbn07XHJcbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgY2FtZWxpemUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCAoXywgYykgPT4gKGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJykpO1xyXG59KTtcblxuY29uc3QgdHJhbnNmb3JtU2xvdE91dGxldCA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAoaXNTbG90T3V0bGV0KG5vZGUpKSB7XHJcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgbG9jIH0gPSBub2RlO1xyXG4gICAgICAgIGNvbnN0IHsgc2xvdE5hbWUsIHNsb3RQcm9wcyB9ID0gcHJvY2Vzc1Nsb3RPdXRsZXQobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgY29uc3Qgc2xvdEFyZ3MgPSBbXHJcbiAgICAgICAgICAgIGNvbnRleHQucHJlZml4SWRlbnRpZmllcnMgPyBgX2N0eC4kc2xvdHNgIDogYCRzbG90c2AsXHJcbiAgICAgICAgICAgIHNsb3ROYW1lLFxyXG4gICAgICAgICAgICAne30nLFxyXG4gICAgICAgICAgICAndW5kZWZpbmVkJyxcclxuICAgICAgICAgICAgJ3RydWUnXHJcbiAgICAgICAgXTtcclxuICAgICAgICBsZXQgZXhwZWN0ZWRMZW4gPSAyO1xyXG4gICAgICAgIGlmIChzbG90UHJvcHMpIHtcclxuICAgICAgICAgICAgc2xvdEFyZ3NbMl0gPSBzbG90UHJvcHM7XHJcbiAgICAgICAgICAgIGV4cGVjdGVkTGVuID0gMztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBzbG90QXJnc1szXSA9IGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihbXSwgY2hpbGRyZW4sIGZhbHNlLCBmYWxzZSwgbG9jKTtcclxuICAgICAgICAgICAgZXhwZWN0ZWRMZW4gPSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udGV4dC5zY29wZUlkICYmICFjb250ZXh0LnNsb3R0ZWQpIHtcclxuICAgICAgICAgICAgZXhwZWN0ZWRMZW4gPSA1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBzbG90QXJncy5zcGxpY2UoZXhwZWN0ZWRMZW4pOyAvLyByZW1vdmUgdW51c2VkIGFyZ3VtZW50c1xyXG4gICAgICAgIG5vZGUuY29kZWdlbk5vZGUgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihSRU5ERVJfU0xPVCksIHNsb3RBcmdzLCBsb2MpO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldChub2RlLCBjb250ZXh0KSB7XHJcbiAgICBsZXQgc2xvdE5hbWUgPSBgXCJkZWZhdWx0XCJgO1xyXG4gICAgbGV0IHNsb3RQcm9wcyA9IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IG5vbk5hbWVQcm9wcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC5uYW1lID09PSAnbmFtZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbG90TmFtZSA9IEpTT04uc3RyaW5naWZ5KHAudmFsdWUuY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwLm5hbWUgPSBjYW1lbGl6ZShwLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vbk5hbWVQcm9wcy5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocC5uYW1lID09PSAnYmluZCcgJiYgaXNTdGF0aWNBcmdPZihwLmFyZywgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAuZXhwKVxyXG4gICAgICAgICAgICAgICAgICAgIHNsb3ROYW1lID0gcC5leHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC5uYW1lID09PSAnYmluZCcgJiYgcC5hcmcgJiYgaXNTdGF0aWNFeHAocC5hcmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcC5hcmcuY29udGVudCA9IGNhbWVsaXplKHAuYXJnLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9uTmFtZVByb3BzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobm9uTmFtZVByb3BzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCB7IHByb3BzLCBkaXJlY3RpdmVzIH0gPSBidWlsZFByb3BzKG5vZGUsIGNvbnRleHQsIG5vbk5hbWVQcm9wcywgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBzbG90UHJvcHMgPSBwcm9wcztcclxuICAgICAgICBpZiAoZGlyZWN0aXZlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzYgLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9VTkVYUEVDVEVEX0RJUkVDVElWRV9PTl9TTE9UX09VVExFVCAqLywgZGlyZWN0aXZlc1swXS5sb2MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHNsb3ROYW1lLFxyXG4gICAgICAgIHNsb3RQcm9wc1xyXG4gICAgfTtcclxufVxuXG5jb25zdCBmbkV4cFJFID0gL15cXHMqKFtcXHckX10rfChhc3luY1xccyopP1xcKFteKV0qP1xcKSlcXHMqPT58XlxccyooYXN5bmNcXHMrKT9mdW5jdGlvbig/OlxccytbXFx3JF0rKT9cXHMqXFwoLztcclxuY29uc3QgdHJhbnNmb3JtT24gPSAoZGlyLCBub2RlLCBjb250ZXh0LCBhdWdtZW50b3IpID0+IHtcclxuICAgIGNvbnN0IHsgbG9jLCBtb2RpZmllcnMsIGFyZyB9ID0gZGlyO1xyXG4gICAgaWYgKCFkaXIuZXhwICYmICFtb2RpZmllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzUgLyogRXJyb3JDb2Rlcy5YX1ZfT05fTk9fRVhQUkVTU0lPTiAqLywgbG9jKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgZXZlbnROYW1lO1xyXG4gICAgaWYgKGFyZy50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGlmIChhcmcuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgbGV0IHJhd05hbWUgPSBhcmcuY29udGVudDtcclxuICAgICAgICAgICAgLy8gVE9ETyBkZXByZWNhdGUgQHZub2RlWFhYIHVzYWdlXHJcbiAgICAgICAgICAgIGlmIChyYXdOYW1lLnN0YXJ0c1dpdGgoJ3Z1ZTonKSkge1xyXG4gICAgICAgICAgICAgICAgcmF3TmFtZSA9IGB2bm9kZS0ke3Jhd05hbWUuc2xpY2UoNCl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBldmVudFN0cmluZyA9IG5vZGUudGFnVHlwZSA9PT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovIHx8XHJcbiAgICAgICAgICAgICAgICByYXdOYW1lLnN0YXJ0c1dpdGgoJ3Zub2RlJykgfHxcclxuICAgICAgICAgICAgICAgICEvW0EtWl0vLnRlc3QocmF3TmFtZSlcclxuICAgICAgICAgICAgICAgID8gLy8gZm9yIGNvbXBvbmVudCBhbmQgdm5vZGUgbGlmZWN5Y2xlIGV2ZW50IGxpc3RlbmVycywgYXV0byBjb252ZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgdG8gY2FtZWxDYXNlLiBTZWUgaXNzdWUgIzIyNDlcclxuICAgICAgICAgICAgICAgICAgICB0b0hhbmRsZXJLZXkoY2FtZWxpemUkMShyYXdOYW1lKSlcclxuICAgICAgICAgICAgICAgIC8vIHByZXNlcnZlIGNhc2UgZm9yIHBsYWluIGVsZW1lbnQgbGlzdGVuZXJzIHRoYXQgaGF2ZSB1cHBlcmNhc2VcclxuICAgICAgICAgICAgICAgIC8vIGxldHRlcnMsIGFzIHRoZXNlIG1heSBiZSBjdXN0b20gZWxlbWVudHMnIGN1c3RvbSBldmVudHNcclxuICAgICAgICAgICAgICAgIDogYG9uOiR7cmF3TmFtZX1gO1xyXG4gICAgICAgICAgICBldmVudE5hbWUgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGV2ZW50U3RyaW5nLCB0cnVlLCBhcmcubG9jKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICMyMzg4XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbXHJcbiAgICAgICAgICAgICAgICBgJHtjb250ZXh0LmhlbHBlclN0cmluZyhUT19IQU5ETEVSX0tFWSl9KGAsXHJcbiAgICAgICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgICAgICBgKWBcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gYWxyZWFkeSBhIGNvbXBvdW5kIGV4cHJlc3Npb24uXHJcbiAgICAgICAgZXZlbnROYW1lID0gYXJnO1xyXG4gICAgICAgIGV2ZW50TmFtZS5jaGlsZHJlbi51bnNoaWZ0KGAke2NvbnRleHQuaGVscGVyU3RyaW5nKFRPX0hBTkRMRVJfS0VZKX0oYCk7XHJcbiAgICAgICAgZXZlbnROYW1lLmNoaWxkcmVuLnB1c2goYClgKTtcclxuICAgIH1cclxuICAgIC8vIGhhbmRsZXIgcHJvY2Vzc2luZ1xyXG4gICAgbGV0IGV4cCA9IGRpci5leHA7XHJcbiAgICBpZiAoZXhwICYmICFleHAuY29udGVudC50cmltKCkpIHtcclxuICAgICAgICBleHAgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgc2hvdWxkQ2FjaGUgPSBjb250ZXh0LmNhY2hlSGFuZGxlcnMgJiYgIWV4cCAmJiAhY29udGV4dC5pblZPbmNlO1xyXG4gICAgaWYgKGV4cCkge1xyXG4gICAgICAgIGNvbnN0IGlzTWVtYmVyRXhwID0gaXNNZW1iZXJFeHByZXNzaW9uKGV4cC5jb250ZW50KTtcclxuICAgICAgICBjb25zdCBpc0lubGluZVN0YXRlbWVudCA9ICEoaXNNZW1iZXJFeHAgfHwgZm5FeHBSRS50ZXN0KGV4cC5jb250ZW50KSk7XHJcbiAgICAgICAgY29uc3QgaGFzTXVsdGlwbGVTdGF0ZW1lbnRzID0gZXhwLmNvbnRlbnQuaW5jbHVkZXMoYDtgKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRydWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGVCcm93c2VyRXhwcmVzc2lvbihleHAsIGNvbnRleHQsIGZhbHNlLCBoYXNNdWx0aXBsZVN0YXRlbWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNJbmxpbmVTdGF0ZW1lbnQgfHwgKHNob3VsZENhY2hlICYmIGlzTWVtYmVyRXhwKSkge1xyXG4gICAgICAgICAgICAvLyB3cmFwIGlubGluZSBzdGF0ZW1lbnQgaW4gYSBmdW5jdGlvbiBleHByZXNzaW9uXHJcbiAgICAgICAgICAgIGV4cCA9IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbXHJcbiAgICAgICAgICAgICAgICBgJHtpc0lubGluZVN0YXRlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgID8gYCRldmVudGBcclxuICAgICAgICAgICAgICAgICAgICA6IGAke2BgfSguLi5hcmdzKWB9ID0+ICR7aGFzTXVsdGlwbGVTdGF0ZW1lbnRzID8gYHtgIDogYChgfWAsXHJcbiAgICAgICAgICAgICAgICBleHAsXHJcbiAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZVN0YXRlbWVudHMgPyBgfWAgOiBgKWBcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHJldCA9IHtcclxuICAgICAgICBwcm9wczogW1xyXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RQcm9wZXJ0eShldmVudE5hbWUsIGV4cCB8fCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGAoKSA9PiB7fWAsIGZhbHNlLCBsb2MpKVxyXG4gICAgICAgIF1cclxuICAgIH07XHJcbiAgICAvLyBhcHBseSBleHRlbmRlZCBjb21waWxlciBhdWdtZW50b3JcclxuICAgIGlmIChhdWdtZW50b3IpIHtcclxuICAgICAgICByZXQgPSBhdWdtZW50b3IocmV0KTtcclxuICAgIH1cclxuICAgIGlmIChzaG91bGRDYWNoZSkge1xyXG4gICAgICAgIC8vIGNhY2hlIGhhbmRsZXJzIHNvIHRoYXQgaXQncyBhbHdheXMgdGhlIHNhbWUgaGFuZGxlciBiZWluZyBwYXNzZWQgZG93bi5cclxuICAgICAgICAvLyB0aGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzIHdoZW4gdXNlcnMgdXNlIGlubGluZSBoYW5kbGVycyBvblxyXG4gICAgICAgIC8vIGNvbXBvbmVudHMuXHJcbiAgICAgICAgcmV0LnByb3BzWzBdLnZhbHVlID0gY29udGV4dC5jYWNoZShyZXQucHJvcHNbMF0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gbWFyayB0aGUga2V5IGFzIGhhbmRsZXIgZm9yIHByb3BzIG5vcm1hbGl6YXRpb24gY2hlY2tcclxuICAgIHJldC5wcm9wcy5mb3JFYWNoKHAgPT4gKHAua2V5LmlzSGFuZGxlcktleSA9IHRydWUpKTtcclxuICAgIHJldHVybiByZXQ7XHJcbn07XG5cbi8vIHYtYmluZCB3aXRob3V0IGFyZyBpcyBoYW5kbGVkIGRpcmVjdGx5IGluIC4vdHJhbnNmb3JtRWxlbWVudHMudHMgZHVlIHRvIGl0IGFmZmVjdGluZ1xyXG4vLyBjb2RlZ2VuIGZvciB0aGUgZW50aXJlIHByb3BzIG9iamVjdC4gVGhpcyB0cmFuc2Zvcm0gaGVyZSBpcyBvbmx5IGZvciB2LWJpbmRcclxuLy8gKndpdGgqIGFyZ3MuXHJcbmNvbnN0IHRyYW5zZm9ybUJpbmQgPSAoZGlyLCBfbm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgY29uc3QgeyBleHAsIG1vZGlmaWVycywgbG9jIH0gPSBkaXI7XHJcbiAgICBjb25zdCBhcmcgPSBkaXIuYXJnO1xyXG4gICAgaWYgKGFyZy50eXBlICE9PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGFyZy5jaGlsZHJlbi51bnNoaWZ0KGAoYCk7XHJcbiAgICAgICAgYXJnLmNoaWxkcmVuLnB1c2goYCkgfHwgXCJcImApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIWFyZy5pc1N0YXRpYykge1xyXG4gICAgICAgIGFyZy5jb250ZW50ID0gYCR7YXJnLmNvbnRlbnR9IHx8IFwiXCJgO1xyXG4gICAgfVxyXG4gICAgLy8gLnN5bmMgaXMgcmVwbGFjZWQgYnkgdi1tb2RlbDphcmdcclxuICAgIGlmIChtb2RpZmllcnMuaW5jbHVkZXMoJ2NhbWVsJykpIHtcclxuICAgICAgICBpZiAoYXJnLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgIGlmIChhcmcuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIGFyZy5jb250ZW50ID0gY2FtZWxpemUkMShhcmcuY29udGVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmcuY29udGVudCA9IGAke2NvbnRleHQuaGVscGVyU3RyaW5nKENBTUVMSVpFKX0oJHthcmcuY29udGVudH0pYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXJnLmNoaWxkcmVuLnVuc2hpZnQoYCR7Y29udGV4dC5oZWxwZXJTdHJpbmcoQ0FNRUxJWkUpfShgKTtcclxuICAgICAgICAgICAgYXJnLmNoaWxkcmVuLnB1c2goYClgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWNvbnRleHQuaW5TU1IpIHtcclxuICAgICAgICBpZiAobW9kaWZpZXJzLmluY2x1ZGVzKCdwcm9wJykpIHtcclxuICAgICAgICAgICAgaW5qZWN0UHJlZml4KGFyZywgJy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1vZGlmaWVycy5pbmNsdWRlcygnYXR0cicpKSB7XHJcbiAgICAgICAgICAgIGluamVjdFByZWZpeChhcmcsICdeJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFleHAgfHxcclxuICAgICAgICAoZXhwLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmICFleHAuY29udGVudC50cmltKCkpKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzQgLyogRXJyb3JDb2Rlcy5YX1ZfQklORF9OT19FWFBSRVNTSU9OICovLCBsb2MpKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm9wczogW2NyZWF0ZU9iamVjdFByb3BlcnR5KGFyZywgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbignJywgdHJ1ZSwgbG9jKSldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvcHM6IFtjcmVhdGVPYmplY3RQcm9wZXJ0eShhcmcsIGV4cCldXHJcbiAgICB9O1xyXG59O1xyXG5jb25zdCBpbmplY3RQcmVmaXggPSAoYXJnLCBwcmVmaXgpID0+IHtcclxuICAgIGlmIChhcmcudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBpZiAoYXJnLmlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIGFyZy5jb250ZW50ID0gcHJlZml4ICsgYXJnLmNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhcmcuY29udGVudCA9IGBcXGAke3ByZWZpeH1cXCR7JHthcmcuY29udGVudH19XFxgYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcmcuY2hpbGRyZW4udW5zaGlmdChgJyR7cHJlZml4fScgKyAoYCk7XHJcbiAgICAgICAgYXJnLmNoaWxkcmVuLnB1c2goYClgKTtcclxuICAgIH1cclxufTtcblxuLy8gTWVyZ2UgYWRqYWNlbnQgdGV4dCBub2RlcyBhbmQgZXhwcmVzc2lvbnMgaW50byBhIHNpbmdsZSBleHByZXNzaW9uXHJcbi8vIGUuZy4gPGRpdj5hYmMge3sgZCB9fSB7eyBlIH19PC9kaXY+IHNob3VsZCBoYXZlIGEgc2luZ2xlIGV4cHJlc3Npb24gbm9kZSBhcyBjaGlsZC5cclxuY29uc3QgdHJhbnNmb3JtVGV4dCA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAwIC8qIE5vZGVUeXBlcy5ST09UICovIHx8XHJcbiAgICAgICAgbm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovIHx8XHJcbiAgICAgICAgbm9kZS50eXBlID09PSAxMSAvKiBOb2RlVHlwZXMuRk9SICovIHx8XHJcbiAgICAgICAgbm9kZS50eXBlID09PSAxMCAvKiBOb2RlVHlwZXMuSUZfQlJBTkNIICovKSB7XHJcbiAgICAgICAgLy8gcGVyZm9ybSB0aGUgdHJhbnNmb3JtIG9uIG5vZGUgZXhpdCBzbyB0aGF0IGFsbCBleHByZXNzaW9ucyBoYXZlIGFscmVhZHlcclxuICAgICAgICAvLyBiZWVuIHByb2Nlc3NlZC5cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQgaGFzVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dChjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNUZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RleHQobmV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBjaGlsZHJlbltpXSA9IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbY2hpbGRdLCBjaGlsZC5sb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2RlIGludG8gY3VycmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRhaW5lci5jaGlsZHJlbi5wdXNoKGAgKyBgLCBuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGotLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWhhc1RleHQgfHxcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBwbGFpbiBlbGVtZW50IHdpdGggYSBzaW5nbGUgdGV4dCBjaGlsZCwgbGVhdmUgaXRcclxuICAgICAgICAgICAgICAgIC8vIGFzLWlzIHNpbmNlIHRoZSBydW50aW1lIGhhcyBkZWRpY2F0ZWQgZmFzdCBwYXRoIGZvciB0aGlzIGJ5IGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHRleHRDb250ZW50IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgLy8gZm9yIGNvbXBvbmVudCByb290IGl0J3MgYWx3YXlzIG5vcm1hbGl6ZWQgYW55d2F5LlxyXG4gICAgICAgICAgICAgICAgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChub2RlLnR5cGUgPT09IDAgLyogTm9kZVR5cGVzLlJPT1QgKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YWdUeXBlID09PSAwIC8qIEVsZW1lbnRUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjMzc1NlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VzdG9tIGRpcmVjdGl2ZXMgY2FuIHBvdGVudGlhbGx5IGFkZCBET00gZWxlbWVudHMgYXJiaXRyYXJpbHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGF2b2lkIHNldHRpbmcgdGV4dENvbnRlbnQgb2YgdGhlIGVsZW1lbnQgYXQgcnVudGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZSBET00gZWxlbWVudHMgYWRkZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IHRoZSB1c2VyIHRocm91Z2ggY3VzdG9tIGRpcmVjdGl2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbm9kZS5wcm9wcy5maW5kKHAgPT4gcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY29udGV4dC5kaXJlY3RpdmVUcmFuc2Zvcm1zW3AubmFtZV0pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjb21wYXQgbW9kZSwgPHRlbXBsYXRlPiB0YWdzIHdpdGggbm8gc3BlY2lhbCBkaXJlY3RpdmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlbmRlcmVkIGFzIGEgZnJhZ21lbnQgc28gaXRzIGNoaWxkcmVuIG11c3QgYmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCBpbnRvIHZub2Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobm9kZS50YWcgPT09ICd0ZW1wbGF0ZScpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJlLWNvbnZlcnQgdGV4dCBub2RlcyBpbnRvIGNyZWF0ZVRleHRWTm9kZSh0ZXh0KSBjYWxscyB0byBhdm9pZFxyXG4gICAgICAgICAgICAvLyBydW50aW1lIG5vcm1hbGl6YXRpb24uXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0KGNoaWxkKSB8fCBjaGlsZC50eXBlID09PSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbEFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVUZXh0Vk5vZGUgZGVmYXVsdHMgdG8gc2luZ2xlIHdoaXRlc3BhY2UsIHNvIGlmIGl0IGlzIGFcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUgc3BhY2UgdGhlIGNvZGUgY291bGQgYmUgYW4gZW1wdHkgY2FsbCB0byBzYXZlIGJ5dGVzLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlICE9PSAyIC8qIE5vZGVUeXBlcy5URVhUICovIHx8IGNoaWxkLmNvbnRlbnQgIT09ICcgJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsQXJncy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBkeW5hbWljIHRleHQgd2l0aCBmbGFnIHNvIGl0IGdldHMgcGF0Y2hlZCBpbnNpZGUgYSBibG9ja1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5zc3IgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uc3RhbnRUeXBlKGNoaWxkLCBjb250ZXh0KSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsQXJncy5wdXNoKDEgLyogUGF0Y2hGbGFncy5URVhUICovICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgIC8qICR7UGF0Y2hGbGFnTmFtZXNbMSAvKiBQYXRjaEZsYWdzLlRFWFQgKi9dfSAqL2AgOiBgYCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTIgLyogTm9kZVR5cGVzLlRFWFRfQ0FMTCAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogY2hpbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogY2hpbGQubG9jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlZ2VuTm9kZTogY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoQ1JFQVRFX1RFWFQpLCBjYWxsQXJncylcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTtcblxuY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XHJcbmNvbnN0IHRyYW5zZm9ybU9uY2UgPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJiBmaW5kRGlyKG5vZGUsICdvbmNlJywgdHJ1ZSkpIHtcclxuICAgICAgICBpZiAoc2Vlbi5oYXMobm9kZSkgfHwgY29udGV4dC5pblZPbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Vlbi5hZGQobm9kZSk7XHJcbiAgICAgICAgY29udGV4dC5pblZPbmNlID0gdHJ1ZTtcclxuICAgICAgICBjb250ZXh0LmhlbHBlcihTRVRfQkxPQ0tfVFJBQ0tJTkcpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5WT25jZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBjdXIgPSBjb250ZXh0LmN1cnJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAoY3VyLmNvZGVnZW5Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjdXIuY29kZWdlbk5vZGUgPSBjb250ZXh0LmNhY2hlKGN1ci5jb2RlZ2VuTm9kZSwgdHJ1ZSAvKiBpc1ZOb2RlICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XG5cbmNvbnN0IHRyYW5zZm9ybU1vZGVsID0gKGRpciwgbm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgY29uc3QgeyBleHAsIGFyZyB9ID0gZGlyO1xyXG4gICAgaWYgKCFleHApIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcig0MSAvKiBFcnJvckNvZGVzLlhfVl9NT0RFTF9OT19FWFBSRVNTSU9OICovLCBkaXIubG9jKSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRyYW5zZm9ybVByb3BzKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXdFeHAgPSBleHAubG9jLnNvdXJjZTtcclxuICAgIGNvbnN0IGV4cFN0cmluZyA9IGV4cC50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyA/IGV4cC5jb250ZW50IDogcmF3RXhwO1xyXG4gICAgLy8gaW0gU0ZDIDxzY3JpcHQgc2V0dXA+IGlubGluZSBtb2RlLCB0aGUgZXhwIG1heSBoYXZlIGJlZW4gdHJhbnNmb3JtZWQgaW50b1xyXG4gICAgLy8gX3VucmVmKGV4cClcclxuICAgIGNvbnRleHQuYmluZGluZ01ldGFkYXRhW3Jhd0V4cF07XHJcbiAgICBjb25zdCBtYXliZVJlZiA9ICF0cnVlICAgIC8qIEJpbmRpbmdUeXBlcy5TRVRVUF9DT05TVCAqLztcclxuICAgIGlmICghZXhwU3RyaW5nLnRyaW0oKSB8fFxyXG4gICAgICAgICghaXNNZW1iZXJFeHByZXNzaW9uKGV4cFN0cmluZykgJiYgIW1heWJlUmVmKSkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQyIC8qIEVycm9yQ29kZXMuWF9WX01PREVMX01BTEZPUk1FRF9FWFBSRVNTSU9OICovLCBleHAubG9jKSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVRyYW5zZm9ybVByb3BzKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9wTmFtZSA9IGFyZyA/IGFyZyA6IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJ21vZGVsVmFsdWUnLCB0cnVlKTtcclxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGFyZ1xyXG4gICAgICAgID8gaXNTdGF0aWNFeHAoYXJnKVxyXG4gICAgICAgICAgICA/IGBvblVwZGF0ZToke2FyZy5jb250ZW50fWBcclxuICAgICAgICAgICAgOiBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oWydcIm9uVXBkYXRlOlwiICsgJywgYXJnXSlcclxuICAgICAgICA6IGBvblVwZGF0ZTptb2RlbFZhbHVlYDtcclxuICAgIGxldCBhc3NpZ25tZW50RXhwO1xyXG4gICAgY29uc3QgZXZlbnRBcmcgPSBjb250ZXh0LmlzVFMgPyBgKCRldmVudDogYW55KWAgOiBgJGV2ZW50YDtcclxuICAgIHtcclxuICAgICAgICBhc3NpZ25tZW50RXhwID0gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtcclxuICAgICAgICAgICAgYCR7ZXZlbnRBcmd9ID0+ICgoYCxcclxuICAgICAgICAgICAgZXhwLFxyXG4gICAgICAgICAgICBgKSA9ICRldmVudClgXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9wcyA9IFtcclxuICAgICAgICAvLyBtb2RlbFZhbHVlOiBmb29cclxuICAgICAgICBjcmVhdGVPYmplY3RQcm9wZXJ0eShwcm9wTmFtZSwgZGlyLmV4cCksXHJcbiAgICAgICAgLy8gXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6ICRldmVudCA9PiAoZm9vID0gJGV2ZW50KVxyXG4gICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KGV2ZW50TmFtZSwgYXNzaWdubWVudEV4cClcclxuICAgIF07XHJcbiAgICAvLyBtb2RlbE1vZGlmaWVyczogeyBmb286IHRydWUsIFwiYmFyLWJhelwiOiB0cnVlIH1cclxuICAgIGlmIChkaXIubW9kaWZpZXJzLmxlbmd0aCAmJiBub2RlLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLykge1xyXG4gICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnNcclxuICAgICAgICAgICAgLm1hcChtID0+IChpc1NpbXBsZUlkZW50aWZpZXIobSkgPyBtIDogSlNPTi5zdHJpbmdpZnkobSkpICsgYDogdHJ1ZWApXHJcbiAgICAgICAgICAgIC5qb2luKGAsIGApO1xyXG4gICAgICAgIGNvbnN0IG1vZGlmaWVyc0tleSA9IGFyZ1xyXG4gICAgICAgICAgICA/IGlzU3RhdGljRXhwKGFyZylcclxuICAgICAgICAgICAgICAgID8gYCR7YXJnLmNvbnRlbnR9TW9kaWZpZXJzYFxyXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oW2FyZywgJyArIFwiTW9kaWZpZXJzXCInXSlcclxuICAgICAgICAgICAgOiBgbW9kZWxNb2RpZmllcnNgO1xyXG4gICAgICAgIHByb3BzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkobW9kaWZpZXJzS2V5LCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGB7ICR7bW9kaWZpZXJzfSB9YCwgZmFsc2UsIGRpci5sb2MsIDIgLyogQ29uc3RhbnRUeXBlcy5DQU5fSE9JU1QgKi8pKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlVHJhbnNmb3JtUHJvcHMocHJvcHMpO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1Qcm9wcyhwcm9wcyA9IFtdKSB7XHJcbiAgICByZXR1cm4geyBwcm9wcyB9O1xyXG59XG5cbmNvbnN0IHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XHJcbmNvbnN0IHRyYW5zZm9ybUZpbHRlciA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAoIWlzQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX0ZJTFRFUlwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9GSUxURVJTICovLCBjb250ZXh0KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8pIHtcclxuICAgICAgICAvLyBmaWx0ZXIgcmV3cml0ZSBpcyBhcHBsaWVkIGJlZm9yZSBleHByZXNzaW9uIHRyYW5zZm9ybSBzbyBvbmx5XHJcbiAgICAgICAgLy8gc2ltcGxlIGV4cHJlc3Npb25zIGFyZSBwb3NzaWJsZSBhdCB0aGlzIHN0YWdlXHJcbiAgICAgICAgcmV3cml0ZUZpbHRlcihub2RlLmNvbnRlbnQsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgIG5vZGUucHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICAgICAgICAgIHByb3AubmFtZSAhPT0gJ2ZvcicgJiZcclxuICAgICAgICAgICAgICAgIHByb3AuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICByZXdyaXRlRmlsdGVyKHByb3AuZXhwLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByZXdyaXRlRmlsdGVyKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgcGFyc2VGaWx0ZXIobm9kZSwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIHBhcnNlRmlsdGVyKGNoaWxkLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjaGlsZC50eXBlID09PSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgICAgICByZXdyaXRlRmlsdGVyKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIHJld3JpdGVGaWx0ZXIoY2hpbGQuY29udGVudCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VGaWx0ZXIobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgZXhwID0gbm9kZS5jb250ZW50O1xyXG4gICAgbGV0IGluU2luZ2xlID0gZmFsc2U7XHJcbiAgICBsZXQgaW5Eb3VibGUgPSBmYWxzZTtcclxuICAgIGxldCBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaW5SZWdleCA9IGZhbHNlO1xyXG4gICAgbGV0IGN1cmx5ID0gMDtcclxuICAgIGxldCBzcXVhcmUgPSAwO1xyXG4gICAgbGV0IHBhcmVuID0gMDtcclxuICAgIGxldCBsYXN0RmlsdGVySW5kZXggPSAwO1xyXG4gICAgbGV0IGMsIHByZXYsIGksIGV4cHJlc3Npb24sIGZpbHRlcnMgPSBbXTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBleHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBwcmV2ID0gYztcclxuICAgICAgICBjID0gZXhwLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGluU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDI3ICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpblNpbmdsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbkRvdWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyMiAmJiBwcmV2ICE9PSAweDVjKVxyXG4gICAgICAgICAgICAgICAgaW5Eb3VibGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaW5UZW1wbGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoYyA9PT0gMHg2MCAmJiBwcmV2ICE9PSAweDVjKVxyXG4gICAgICAgICAgICAgICAgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpblJlZ2V4KSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDJmICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpblJlZ2V4ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IDB4N2MgJiYgLy8gcGlwZVxyXG4gICAgICAgICAgICBleHAuY2hhckNvZGVBdChpICsgMSkgIT09IDB4N2MgJiZcclxuICAgICAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdjICYmXHJcbiAgICAgICAgICAgICFjdXJseSAmJlxyXG4gICAgICAgICAgICAhc3F1YXJlICYmXHJcbiAgICAgICAgICAgICFwYXJlbikge1xyXG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcclxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcHVzaEZpbHRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyMjpcclxuICAgICAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFwiXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjc6XHJcbiAgICAgICAgICAgICAgICAgICAgaW5TaW5nbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAnXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4NjA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW5UZW1wbGF0ZVN0cmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGBcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyODpcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbisrO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAoXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjk6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW4tLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gKVxyXG4gICAgICAgICAgICAgICAgY2FzZSAweDViOlxyXG4gICAgICAgICAgICAgICAgICAgIHNxdWFyZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBbXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgc3F1YXJlLS07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIF1cclxuICAgICAgICAgICAgICAgIGNhc2UgMHg3YjpcclxuICAgICAgICAgICAgICAgICAgICBjdXJseSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4N2Q6XHJcbiAgICAgICAgICAgICAgICAgICAgY3VybHktLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDJmKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAvXHJcbiAgICAgICAgICAgICAgICBsZXQgaiA9IGkgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHA7XHJcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxyXG4gICAgICAgICAgICAgICAgZm9yICg7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgIT09ICcgJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIXZhbGlkRGl2aXNpb25DaGFyUkUudGVzdChwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XHJcbiAgICAgICAgcHVzaEZpbHRlcigpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcHVzaEZpbHRlcigpIHtcclxuICAgICAgICBmaWx0ZXJzLnB1c2goZXhwLnNsaWNlKGxhc3RGaWx0ZXJJbmRleCwgaSkudHJpbSgpKTtcclxuICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcclxuICAgIH1cclxuICAgIGlmIChmaWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICB3YXJuRGVwcmVjYXRpb24oXCJDT01QSUxFUl9GSUxURVJcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfRklMVEVSUyAqLywgY29udGV4dCwgbm9kZS5sb2MpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0sIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub2RlLmNvbnRlbnQgPSBleHByZXNzaW9uO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHdyYXBGaWx0ZXIoZXhwLCBmaWx0ZXIsIGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQuaGVscGVyKFJFU09MVkVfRklMVEVSKTtcclxuICAgIGNvbnN0IGkgPSBmaWx0ZXIuaW5kZXhPZignKCcpO1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgY29udGV4dC5maWx0ZXJzLmFkZChmaWx0ZXIpO1xyXG4gICAgICAgIHJldHVybiBgJHt0b1ZhbGlkQXNzZXRJZChmaWx0ZXIsICdmaWx0ZXInKX0oJHtleHB9KWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gZmlsdGVyLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgIGNvbnRleHQuZmlsdGVycy5hZGQobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGAke3RvVmFsaWRBc3NldElkKG5hbWUsICdmaWx0ZXInKX0oJHtleHB9JHthcmdzICE9PSAnKScgPyAnLCcgKyBhcmdzIDogYXJnc31gO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHNlZW4kMSA9IG5ldyBXZWFrU2V0KCk7XHJcbmNvbnN0IHRyYW5zZm9ybU1lbW8gPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgIGNvbnN0IGRpciA9IGZpbmREaXIobm9kZSwgJ21lbW8nKTtcclxuICAgICAgICBpZiAoIWRpciB8fCBzZWVuJDEuaGFzKG5vZGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VlbiQxLmFkZChub2RlKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlZ2VuTm9kZSA9IG5vZGUuY29kZWdlbk5vZGUgfHxcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudE5vZGUuY29kZWdlbk5vZGU7XHJcbiAgICAgICAgICAgIGlmIChjb2RlZ2VuTm9kZSAmJiBjb2RlZ2VuTm9kZS50eXBlID09PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLykge1xyXG4gICAgICAgICAgICAgICAgLy8gbm9uLWNvbXBvbmVudCBzdWIgdHJlZSBzaG91bGQgYmUgdHVybmVkIGludG8gYSBibG9ja1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUudGFnVHlwZSAhPT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFrZUJsb2NrKGNvZGVnZW5Ob2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5vZGUuY29kZWdlbk5vZGUgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihXSVRIX01FTU8pLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyLmV4cCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24odW5kZWZpbmVkLCBjb2RlZ2VuTm9kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgYF9jYWNoZWAsXHJcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nKGNvbnRleHQuY2FjaGVkKyspXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XG5cbmZ1bmN0aW9uIGdldEJhc2VUcmFuc2Zvcm1QcmVzZXQocHJlZml4SWRlbnRpZmllcnMpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1PbmNlLFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1JZixcclxuICAgICAgICAgICAgdHJhbnNmb3JtTWVtbyxcclxuICAgICAgICAgICAgdHJhbnNmb3JtRm9yLFxyXG4gICAgICAgICAgICAuLi4oW3RyYW5zZm9ybUZpbHRlcl0gKSxcclxuICAgICAgICAgICAgLi4uKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgICAgID8gW3RyYW5zZm9ybUV4cHJlc3Npb25dXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybVNsb3RPdXRsZXQsXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybUVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRyYWNrU2xvdFNjb3BlcyxcclxuICAgICAgICAgICAgdHJhbnNmb3JtVGV4dFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvbjogdHJhbnNmb3JtT24sXHJcbiAgICAgICAgICAgIGJpbmQ6IHRyYW5zZm9ybUJpbmQsXHJcbiAgICAgICAgICAgIG1vZGVsOiB0cmFuc2Zvcm1Nb2RlbFxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbn1cclxuLy8gd2UgbmFtZSBpdCBgYmFzZUNvbXBpbGVgIHNvIHRoYXQgaGlnaGVyIG9yZGVyIGNvbXBpbGVycyBsaWtlXHJcbi8vIEB2dWUvY29tcGlsZXItZG9tIGNhbiBleHBvcnQgYGNvbXBpbGVgIHdoaWxlIHJlLWV4cG9ydGluZyBldmVyeXRoaW5nIGVsc2UuXHJcbmZ1bmN0aW9uIGJhc2VDb21waWxlKHRlbXBsYXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgIGNvbnN0IG9uRXJyb3IgPSBvcHRpb25zLm9uRXJyb3IgfHwgZGVmYXVsdE9uRXJyb3I7XHJcbiAgICBjb25zdCBpc01vZHVsZU1vZGUgPSBvcHRpb25zLm1vZGUgPT09ICdtb2R1bGUnO1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucHJlZml4SWRlbnRpZmllcnMgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgb25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ2IC8qIEVycm9yQ29kZXMuWF9QUkVGSVhfSURfTk9UX1NVUFBPUlRFRCAqLykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc01vZHVsZU1vZGUpIHtcclxuICAgICAgICAgICAgb25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ3IC8qIEVycm9yQ29kZXMuWF9NT0RVTEVfTU9ERV9OT1RfU1VQUE9SVEVEICovKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgcHJlZml4SWRlbnRpZmllcnMgPSAhdHJ1ZSA7XHJcbiAgICBpZiAob3B0aW9ucy5jYWNoZUhhbmRsZXJzKSB7XHJcbiAgICAgICAgb25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ4IC8qIEVycm9yQ29kZXMuWF9DQUNIRV9IQU5ETEVSX05PVF9TVVBQT1JURUQgKi8pKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLnNjb3BlSWQgJiYgIWlzTW9kdWxlTW9kZSkge1xyXG4gICAgICAgIG9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcig0OSAvKiBFcnJvckNvZGVzLlhfU0NPUEVfSURfTk9UX1NVUFBPUlRFRCAqLykpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXN0ID0gaXNTdHJpbmcodGVtcGxhdGUpID8gYmFzZVBhcnNlKHRlbXBsYXRlLCBvcHRpb25zKSA6IHRlbXBsYXRlO1xyXG4gICAgY29uc3QgW25vZGVUcmFuc2Zvcm1zLCBkaXJlY3RpdmVUcmFuc2Zvcm1zXSA9IGdldEJhc2VUcmFuc2Zvcm1QcmVzZXQoKTtcclxuICAgIHRyYW5zZm9ybShhc3QsIGV4dGVuZCh7fSwgb3B0aW9ucywge1xyXG4gICAgICAgIHByZWZpeElkZW50aWZpZXJzLFxyXG4gICAgICAgIG5vZGVUcmFuc2Zvcm1zOiBbXHJcbiAgICAgICAgICAgIC4uLm5vZGVUcmFuc2Zvcm1zLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5ub2RlVHJhbnNmb3JtcyB8fCBbXSkgLy8gdXNlciB0cmFuc2Zvcm1zXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkaXJlY3RpdmVUcmFuc2Zvcm1zOiBleHRlbmQoe30sIGRpcmVjdGl2ZVRyYW5zZm9ybXMsIG9wdGlvbnMuZGlyZWN0aXZlVHJhbnNmb3JtcyB8fCB7fSAvLyB1c2VyIHRyYW5zZm9ybXNcclxuICAgICAgICApXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gZ2VuZXJhdGUoYXN0LCBleHRlbmQoe30sIG9wdGlvbnMsIHtcclxuICAgICAgICBwcmVmaXhJZGVudGlmaWVyc1xyXG4gICAgfSkpO1xyXG59XG5cbmNvbnN0IG5vb3BEaXJlY3RpdmVUcmFuc2Zvcm0gPSAoKSA9PiAoeyBwcm9wczogW10gfSk7XG5cbmV4cG9ydCB7IEJBU0VfVFJBTlNJVElPTiwgQ0FNRUxJWkUsIENBUElUQUxJWkUsIENSRUFURV9CTE9DSywgQ1JFQVRFX0NPTU1FTlQsIENSRUFURV9FTEVNRU5UX0JMT0NLLCBDUkVBVEVfRUxFTUVOVF9WTk9ERSwgQ1JFQVRFX1NMT1RTLCBDUkVBVEVfU1RBVElDLCBDUkVBVEVfVEVYVCwgQ1JFQVRFX1ZOT0RFLCBGUkFHTUVOVCwgR1VBUkRfUkVBQ1RJVkVfUFJPUFMsIElTX01FTU9fU0FNRSwgSVNfUkVGLCBLRUVQX0FMSVZFLCBNRVJHRV9QUk9QUywgTk9STUFMSVpFX0NMQVNTLCBOT1JNQUxJWkVfUFJPUFMsIE5PUk1BTElaRV9TVFlMRSwgT1BFTl9CTE9DSywgUE9QX1NDT1BFX0lELCBQVVNIX1NDT1BFX0lELCBSRU5ERVJfTElTVCwgUkVOREVSX1NMT1QsIFJFU09MVkVfQ09NUE9ORU5ULCBSRVNPTFZFX0RJUkVDVElWRSwgUkVTT0xWRV9EWU5BTUlDX0NPTVBPTkVOVCwgUkVTT0xWRV9GSUxURVIsIFNFVF9CTE9DS19UUkFDS0lORywgU1VTUEVOU0UsIFRFTEVQT1JULCBUT19ESVNQTEFZX1NUUklORywgVE9fSEFORExFUlMsIFRPX0hBTkRMRVJfS0VZLCBVTlJFRiwgV0lUSF9DVFgsIFdJVEhfRElSRUNUSVZFUywgV0lUSF9NRU1PLCBhZHZhbmNlUG9zaXRpb25XaXRoQ2xvbmUsIGFkdmFuY2VQb3NpdGlvbldpdGhNdXRhdGlvbiwgYXNzZXJ0LCBiYXNlQ29tcGlsZSwgYmFzZVBhcnNlLCBidWlsZERpcmVjdGl2ZUFyZ3MsIGJ1aWxkUHJvcHMsIGJ1aWxkU2xvdHMsIGNoZWNrQ29tcGF0RW5hYmxlZCwgY3JlYXRlQXJyYXlFeHByZXNzaW9uLCBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbiwgY3JlYXRlQmxvY2tTdGF0ZW1lbnQsIGNyZWF0ZUNhY2hlRXhwcmVzc2lvbiwgY3JlYXRlQ2FsbEV4cHJlc3Npb24sIGNyZWF0ZUNvbXBpbGVyRXJyb3IsIGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbiwgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uLCBjcmVhdGVGb3JMb29wUGFyYW1zLCBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24sIGNyZWF0ZUlmU3RhdGVtZW50LCBjcmVhdGVJbnRlcnBvbGF0aW9uLCBjcmVhdGVPYmplY3RFeHByZXNzaW9uLCBjcmVhdGVPYmplY3RQcm9wZXJ0eSwgY3JlYXRlUmV0dXJuU3RhdGVtZW50LCBjcmVhdGVSb290LCBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24sIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24sIGNyZWF0ZVN0cnVjdHVyYWxEaXJlY3RpdmVUcmFuc2Zvcm0sIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbCwgY3JlYXRlVHJhbnNmb3JtQ29udGV4dCwgY3JlYXRlVk5vZGVDYWxsLCBleHRyYWN0SWRlbnRpZmllcnMsIGZpbmREaXIsIGZpbmRQcm9wLCBnZW5lcmF0ZSwgZ2V0QmFzZVRyYW5zZm9ybVByZXNldCwgZ2V0Q29uc3RhbnRUeXBlLCBnZXRJbm5lclJhbmdlLCBnZXRNZW1vZWRWTm9kZUNhbGwsIGdldFZOb2RlQmxvY2tIZWxwZXIsIGdldFZOb2RlSGVscGVyLCBoYXNEeW5hbWljS2V5VkJpbmQsIGhhc1Njb3BlUmVmLCBoZWxwZXJOYW1lTWFwLCBpbmplY3RQcm9wLCBpc0J1aWx0SW5UeXBlLCBpc0NvcmVDb21wb25lbnQsIGlzRnVuY3Rpb25UeXBlLCBpc0luRGVzdHJ1Y3R1cmVBc3NpZ25tZW50LCBpc01lbWJlckV4cHJlc3Npb24sIGlzTWVtYmVyRXhwcmVzc2lvbkJyb3dzZXIsIGlzTWVtYmVyRXhwcmVzc2lvbk5vZGUsIGlzUmVmZXJlbmNlZElkZW50aWZpZXIsIGlzU2ltcGxlSWRlbnRpZmllciwgaXNTbG90T3V0bGV0LCBpc1N0YXRpY0FyZ09mLCBpc1N0YXRpY0V4cCwgaXNTdGF0aWNQcm9wZXJ0eSwgaXNTdGF0aWNQcm9wZXJ0eUtleSwgaXNUZW1wbGF0ZU5vZGUsIGlzVGV4dCwgaXNWU2xvdCwgbG9jU3R1YiwgbWFrZUJsb2NrLCBub29wRGlyZWN0aXZlVHJhbnNmb3JtLCBwcm9jZXNzRXhwcmVzc2lvbiwgcHJvY2Vzc0ZvciwgcHJvY2Vzc0lmLCBwcm9jZXNzU2xvdE91dGxldCwgcmVnaXN0ZXJSdW50aW1lSGVscGVycywgcmVzb2x2ZUNvbXBvbmVudFR5cGUsIHRvVmFsaWRBc3NldElkLCB0cmFja1Nsb3RTY29wZXMsIHRyYWNrVkZvclNsb3RTY29wZXMsIHRyYW5zZm9ybSwgdHJhbnNmb3JtQmluZCwgdHJhbnNmb3JtRWxlbWVudCwgdHJhbnNmb3JtRXhwcmVzc2lvbiwgdHJhbnNmb3JtTW9kZWwsIHRyYW5zZm9ybU9uLCB0cmF2ZXJzZU5vZGUsIHdhbGtCbG9ja0RlY2xhcmF0aW9ucywgd2Fsa0Z1bmN0aW9uUGFyYW1zLCB3YWxrSWRlbnRpZmllcnMsIHdhcm5EZXByZWNhdGlvbiB9O1xuIiwiaW1wb3J0IHsgcmVnaXN0ZXJSdW50aW1lSGVscGVycywgaXNCdWlsdEluVHlwZSwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbiwgY3JlYXRlQ29tcGlsZXJFcnJvciwgY3JlYXRlT2JqZWN0UHJvcGVydHksIGdldENvbnN0YW50VHlwZSwgY3JlYXRlQ2FsbEV4cHJlc3Npb24sIFRPX0RJU1BMQVlfU1RSSU5HLCB0cmFuc2Zvcm1Nb2RlbCBhcyB0cmFuc2Zvcm1Nb2RlbCQxLCBmaW5kUHJvcCwgaGFzRHluYW1pY0tleVZCaW5kLCB0cmFuc2Zvcm1PbiBhcyB0cmFuc2Zvcm1PbiQxLCBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24sIGlzU3RhdGljRXhwLCBjaGVja0NvbXBhdEVuYWJsZWQsIG5vb3BEaXJlY3RpdmVUcmFuc2Zvcm0sIGJhc2VDb21waWxlLCBiYXNlUGFyc2UgfSBmcm9tICdAdnVlL2NvbXBpbGVyLWNvcmUnO1xuZXhwb3J0ICogZnJvbSAnQHZ1ZS9jb21waWxlci1jb3JlJztcbmltcG9ydCB7IGlzVm9pZFRhZywgaXNIVE1MVGFnLCBpc1NWR1RhZywgbWFrZU1hcCwgcGFyc2VTdHJpbmdTdHlsZSwgY2FwaXRhbGl6ZSwgZXh0ZW5kIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5jb25zdCBWX01PREVMX1JBRElPID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB2TW9kZWxSYWRpb2AgOiBgYCk7XHJcbmNvbnN0IFZfTU9ERUxfQ0hFQ0tCT1ggPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZNb2RlbENoZWNrYm94YCA6IGBgKTtcclxuY29uc3QgVl9NT0RFTF9URVhUID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB2TW9kZWxUZXh0YCA6IGBgKTtcclxuY29uc3QgVl9NT0RFTF9TRUxFQ1QgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZNb2RlbFNlbGVjdGAgOiBgYCk7XHJcbmNvbnN0IFZfTU9ERUxfRFlOQU1JQyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdk1vZGVsRHluYW1pY2AgOiBgYCk7XHJcbmNvbnN0IFZfT05fV0lUSF9NT0RJRklFUlMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZPbk1vZGlmaWVyc0d1YXJkYCA6IGBgKTtcclxuY29uc3QgVl9PTl9XSVRIX0tFWVMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZPbktleXNHdWFyZGAgOiBgYCk7XHJcbmNvbnN0IFZfU0hPVyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdlNob3dgIDogYGApO1xyXG5jb25zdCBUUkFOU0lUSU9OID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBUcmFuc2l0aW9uYCA6IGBgKTtcclxuY29uc3QgVFJBTlNJVElPTl9HUk9VUCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgVHJhbnNpdGlvbkdyb3VwYCA6IGBgKTtcclxucmVnaXN0ZXJSdW50aW1lSGVscGVycyh7XHJcbiAgICBbVl9NT0RFTF9SQURJT106IGB2TW9kZWxSYWRpb2AsXHJcbiAgICBbVl9NT0RFTF9DSEVDS0JPWF06IGB2TW9kZWxDaGVja2JveGAsXHJcbiAgICBbVl9NT0RFTF9URVhUXTogYHZNb2RlbFRleHRgLFxyXG4gICAgW1ZfTU9ERUxfU0VMRUNUXTogYHZNb2RlbFNlbGVjdGAsXHJcbiAgICBbVl9NT0RFTF9EWU5BTUlDXTogYHZNb2RlbER5bmFtaWNgLFxyXG4gICAgW1ZfT05fV0lUSF9NT0RJRklFUlNdOiBgd2l0aE1vZGlmaWVyc2AsXHJcbiAgICBbVl9PTl9XSVRIX0tFWVNdOiBgd2l0aEtleXNgLFxyXG4gICAgW1ZfU0hPV106IGB2U2hvd2AsXHJcbiAgICBbVFJBTlNJVElPTl06IGBUcmFuc2l0aW9uYCxcclxuICAgIFtUUkFOU0lUSU9OX0dST1VQXTogYFRyYW5zaXRpb25Hcm91cGBcclxufSk7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xyXG5sZXQgZGVjb2RlcjtcclxuZnVuY3Rpb24gZGVjb2RlSHRtbEJyb3dzZXIocmF3LCBhc0F0dHIgPSBmYWxzZSkge1xyXG4gICAgaWYgKCFkZWNvZGVyKSB7XHJcbiAgICAgICAgZGVjb2RlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzQXR0cikge1xyXG4gICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gYDxkaXYgZm9vPVwiJHtyYXcucmVwbGFjZSgvXCIvZywgJyZxdW90OycpfVwiPmA7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZXIuY2hpbGRyZW5bMF0uZ2V0QXR0cmlidXRlKCdmb28nKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gcmF3O1xyXG4gICAgICAgIHJldHVybiBkZWNvZGVyLnRleHRDb250ZW50O1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IGlzUmF3VGV4dENvbnRhaW5lciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcCgnc3R5bGUsaWZyYW1lLHNjcmlwdCxub3NjcmlwdCcsIHRydWUpO1xyXG5jb25zdCBwYXJzZXJPcHRpb25zID0ge1xyXG4gICAgaXNWb2lkVGFnLFxyXG4gICAgaXNOYXRpdmVUYWc6IHRhZyA9PiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWR1RhZyh0YWcpLFxyXG4gICAgaXNQcmVUYWc6IHRhZyA9PiB0YWcgPT09ICdwcmUnLFxyXG4gICAgZGVjb2RlRW50aXRpZXM6IGRlY29kZUh0bWxCcm93c2VyICxcclxuICAgIGlzQnVpbHRJbkNvbXBvbmVudDogKHRhZykgPT4ge1xyXG4gICAgICAgIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgYFRyYW5zaXRpb25gKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVFJBTlNJVElPTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNCdWlsdEluVHlwZSh0YWcsIGBUcmFuc2l0aW9uR3JvdXBgKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVFJBTlNJVElPTl9HUk9VUDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RyZWUtY29uc3RydWN0aW9uLWRpc3BhdGNoZXJcclxuICAgIGdldE5hbWVzcGFjZSh0YWcsIHBhcmVudCkge1xyXG4gICAgICAgIGxldCBucyA9IHBhcmVudCA/IHBhcmVudC5ucyA6IDAgLyogRE9NTmFtZXNwYWNlcy5IVE1MICovO1xyXG4gICAgICAgIGlmIChwYXJlbnQgJiYgbnMgPT09IDIgLyogRE9NTmFtZXNwYWNlcy5NQVRIX01MICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQudGFnID09PSAnYW5ub3RhdGlvbi14bWwnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFnID09PSAnc3ZnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxIC8qIERPTU5hbWVzcGFjZXMuU1ZHICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudC5wcm9wcy5zb21lKGEgPT4gYS50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICBhLm5hbWUgPT09ICdlbmNvZGluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICBhLnZhbHVlICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAoYS52YWx1ZS5jb250ZW50ID09PSAndGV4dC9odG1sJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhLnZhbHVlLmNvbnRlbnQgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBucyA9IDAgLyogRE9NTmFtZXNwYWNlcy5IVE1MICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKC9ebSg/Oltpb25zXXx0ZXh0KSQvLnRlc3QocGFyZW50LnRhZykgJiZcclxuICAgICAgICAgICAgICAgIHRhZyAhPT0gJ21nbHlwaCcgJiZcclxuICAgICAgICAgICAgICAgIHRhZyAhPT0gJ21hbGlnbm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICBucyA9IDAgLyogRE9NTmFtZXNwYWNlcy5IVE1MICovO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBhcmVudCAmJiBucyA9PT0gMSAvKiBET01OYW1lc3BhY2VzLlNWRyAqLykge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50LnRhZyA9PT0gJ2ZvcmVpZ25PYmplY3QnIHx8XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQudGFnID09PSAnZGVzYycgfHxcclxuICAgICAgICAgICAgICAgIHBhcmVudC50YWcgPT09ICd0aXRsZScpIHtcclxuICAgICAgICAgICAgICAgIG5zID0gMCAvKiBET01OYW1lc3BhY2VzLkhUTUwgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5zID09PSAwIC8qIERPTU5hbWVzcGFjZXMuSFRNTCAqLykge1xyXG4gICAgICAgICAgICBpZiAodGFnID09PSAnc3ZnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDEgLyogRE9NTmFtZXNwYWNlcy5TVkcgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMiAvKiBET01OYW1lc3BhY2VzLk1BVEhfTUwgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5zO1xyXG4gICAgfSxcclxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwYXJzaW5nLWh0bWwtZnJhZ21lbnRzXHJcbiAgICBnZXRUZXh0TW9kZSh7IHRhZywgbnMgfSkge1xyXG4gICAgICAgIGlmIChucyA9PT0gMCAvKiBET01OYW1lc3BhY2VzLkhUTUwgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHRhZyA9PT0gJ3RleHRhcmVhJyB8fCB0YWcgPT09ICd0aXRsZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxIC8qIFRleHRNb2Rlcy5SQ0RBVEEgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUmF3VGV4dENvbnRhaW5lcih0YWcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMiAvKiBUZXh0TW9kZXMuUkFXVEVYVCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMCAvKiBUZXh0TW9kZXMuREFUQSAqLztcclxuICAgIH1cclxufTtcblxuLy8gUGFyc2UgaW5saW5lIENTUyBzdHJpbmdzIGZvciBzdGF0aWMgc3R5bGUgYXR0cmlidXRlcyBpbnRvIGFuIG9iamVjdC5cclxuLy8gVGhpcyBpcyBhIE5vZGVUcmFuc2Zvcm0gc2luY2UgaXQgd29ya3Mgb24gdGhlIHN0YXRpYyBgc3R5bGVgIGF0dHJpYnV0ZSBhbmRcclxuLy8gY29udmVydHMgaXQgaW50byBhIGR5bmFtaWMgZXF1aXZhbGVudDpcclxuLy8gc3R5bGU9XCJjb2xvcjogcmVkXCIgLT4gOnN0eWxlPSd7IFwiY29sb3JcIjogXCJyZWRcIiB9J1xyXG4vLyBJdCBpcyB0aGVuIHByb2Nlc3NlZCBieSBgdHJhbnNmb3JtRWxlbWVudGAgYW5kIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWRcclxuLy8gcHJvcHMuXHJcbmNvbnN0IHRyYW5zZm9ybVN0eWxlID0gbm9kZSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgbm9kZS5wcm9wcy5mb3JFYWNoKChwLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLyAmJiBwLm5hbWUgPT09ICdzdHlsZScgJiYgcC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBwIHdpdGggYW4gZXhwcmVzc2lvbiBub2RlXHJcbiAgICAgICAgICAgICAgICBub2RlLnByb3BzW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgYmluZGAsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJnOiBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBzdHlsZWAsIHRydWUsIHAubG9jKSxcclxuICAgICAgICAgICAgICAgICAgICBleHA6IHBhcnNlSW5saW5lQ1NTKHAudmFsdWUuY29udGVudCwgcC5sb2MpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jOiBwLmxvY1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBwYXJzZUlubGluZUNTUyA9IChjc3NUZXh0LCBsb2MpID0+IHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXJzZVN0cmluZ1N0eWxlKGNzc1RleHQpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZCksIGZhbHNlLCBsb2MsIDMgLyogQ29uc3RhbnRUeXBlcy5DQU5fU1RSSU5HSUZZICovKTtcclxufTtcblxuZnVuY3Rpb24gY3JlYXRlRE9NQ29tcGlsZXJFcnJvcihjb2RlLCBsb2MpIHtcclxuICAgIHJldHVybiBjcmVhdGVDb21waWxlckVycm9yKGNvZGUsIGxvYywgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICF0cnVlID8gRE9NRXJyb3JNZXNzYWdlcyA6IHVuZGVmaW5lZCk7XHJcbn1cclxuY29uc3QgRE9NRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIFs1MCAvKiBET01FcnJvckNvZGVzLlhfVl9IVE1MX05PX0VYUFJFU1NJT04gKi9dOiBgdi1odG1sIGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzUxIC8qIERPTUVycm9yQ29kZXMuWF9WX0hUTUxfV0lUSF9DSElMRFJFTiAqL106IGB2LWh0bWwgd2lsbCBvdmVycmlkZSBlbGVtZW50IGNoaWxkcmVuLmAsXHJcbiAgICBbNTIgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfVEVYVF9OT19FWFBSRVNTSU9OICovXTogYHYtdGV4dCBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFs1MyAvKiBET01FcnJvckNvZGVzLlhfVl9URVhUX1dJVEhfQ0hJTERSRU4gKi9dOiBgdi10ZXh0IHdpbGwgb3ZlcnJpZGUgZWxlbWVudCBjaGlsZHJlbi5gLFxyXG4gICAgWzU0IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX09OX0lOVkFMSURfRUxFTUVOVCAqL106IGB2LW1vZGVsIGNhbiBvbmx5IGJlIHVzZWQgb24gPGlucHV0PiwgPHRleHRhcmVhPiBhbmQgPHNlbGVjdD4gZWxlbWVudHMuYCxcclxuICAgIFs1NSAvKiBET01FcnJvckNvZGVzLlhfVl9NT0RFTF9BUkdfT05fRUxFTUVOVCAqL106IGB2LW1vZGVsIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQgb24gcGxhaW4gZWxlbWVudHMuYCxcclxuICAgIFs1NiAvKiBET01FcnJvckNvZGVzLlhfVl9NT0RFTF9PTl9GSUxFX0lOUFVUX0VMRU1FTlQgKi9dOiBgdi1tb2RlbCBjYW5ub3QgYmUgdXNlZCBvbiBmaWxlIGlucHV0cyBzaW5jZSB0aGV5IGFyZSByZWFkLW9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGluc3RlYWQuYCxcclxuICAgIFs1NyAvKiBET01FcnJvckNvZGVzLlhfVl9NT0RFTF9VTk5FQ0VTU0FSWV9WQUxVRSAqL106IGBVbm5lY2Vzc2FyeSB2YWx1ZSBiaW5kaW5nIHVzZWQgYWxvbmdzaWRlIHYtbW9kZWwuIEl0IHdpbGwgaW50ZXJmZXJlIHdpdGggdi1tb2RlbCdzIGJlaGF2aW9yLmAsXHJcbiAgICBbNTggLyogRE9NRXJyb3JDb2Rlcy5YX1ZfU0hPV19OT19FWFBSRVNTSU9OICovXTogYHYtc2hvdyBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFs1OSAvKiBET01FcnJvckNvZGVzLlhfVFJBTlNJVElPTl9JTlZBTElEX0NISUxEUkVOICovXTogYDxUcmFuc2l0aW9uPiBleHBlY3RzIGV4YWN0bHkgb25lIGNoaWxkIGVsZW1lbnQgb3IgY29tcG9uZW50LmAsXHJcbiAgICBbNjAgLyogRE9NRXJyb3JDb2Rlcy5YX0lHTk9SRURfU0lERV9FRkZFQ1RfVEFHICovXTogYFRhZ3Mgd2l0aCBzaWRlIGVmZmVjdCAoPHNjcmlwdD4gYW5kIDxzdHlsZT4pIGFyZSBpZ25vcmVkIGluIGNsaWVudCBjb21wb25lbnQgdGVtcGxhdGVzLmBcclxufTtcblxuY29uc3QgdHJhbnNmb3JtVkh0bWwgPSAoZGlyLCBub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBjb25zdCB7IGV4cCwgbG9jIH0gPSBkaXI7XHJcbiAgICBpZiAoIWV4cCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDUwIC8qIERPTUVycm9yQ29kZXMuWF9WX0hUTUxfTk9fRVhQUkVTU0lPTiAqLywgbG9jKSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1MSAvKiBET01FcnJvckNvZGVzLlhfVl9IVE1MX1dJVEhfQ0hJTERSRU4gKi8sIGxvYykpO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvcHM6IFtcclxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UHJvcGVydHkoY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgaW5uZXJIVE1MYCwgdHJ1ZSwgbG9jKSwgZXhwIHx8IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJycsIHRydWUpKVxyXG4gICAgICAgIF1cclxuICAgIH07XHJcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVZUZXh0ID0gKGRpciwgbm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgY29uc3QgeyBleHAsIGxvYyB9ID0gZGlyO1xyXG4gICAgaWYgKCFleHApIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1MiAvKiBET01FcnJvckNvZGVzLlhfVl9URVhUX05PX0VYUFJFU1NJT04gKi8sIGxvYykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTMgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfVEVYVF9XSVRIX0NISUxEUkVOICovLCBsb2MpKTtcclxuICAgICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb3BzOiBbXHJcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYHRleHRDb250ZW50YCwgdHJ1ZSksIGV4cFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDb25zdGFudFR5cGUoZXhwLCBjb250ZXh0KSA+IDBcclxuICAgICAgICAgICAgICAgICAgICA/IGV4cFxyXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXJTdHJpbmcoVE9fRElTUExBWV9TVFJJTkcpLCBbZXhwXSwgbG9jKVxyXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCcnLCB0cnVlKSlcclxuICAgICAgICBdXHJcbiAgICB9O1xyXG59O1xuXG5jb25zdCB0cmFuc2Zvcm1Nb2RlbCA9IChkaXIsIG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGNvbnN0IGJhc2VSZXN1bHQgPSB0cmFuc2Zvcm1Nb2RlbCQxKGRpciwgbm9kZSwgY29udGV4dCk7XHJcbiAgICAvLyBiYXNlIHRyYW5zZm9ybSBoYXMgZXJyb3JzIE9SIGNvbXBvbmVudCB2LW1vZGVsIChvbmx5IG5lZWQgcHJvcHMpXHJcbiAgICBpZiAoIWJhc2VSZXN1bHQucHJvcHMubGVuZ3RoIHx8IG5vZGUudGFnVHlwZSA9PT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VSZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlyLmFyZykge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDU1IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX0FSR19PTl9FTEVNRU5UICovLCBkaXIuYXJnLmxvYykpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVkVmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaW5kUHJvcChub2RlLCAndmFsdWUnKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTcgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfVU5ORUNFU1NBUllfVkFMVUUgKi8sIHZhbHVlLmxvYykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFnIH0gPSBub2RlO1xyXG4gICAgY29uc3QgaXNDdXN0b21FbGVtZW50ID0gY29udGV4dC5pc0N1c3RvbUVsZW1lbnQodGFnKTtcclxuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgfHxcclxuICAgICAgICB0YWcgPT09ICd0ZXh0YXJlYScgfHxcclxuICAgICAgICB0YWcgPT09ICdzZWxlY3QnIHx8XHJcbiAgICAgICAgaXNDdXN0b21FbGVtZW50KSB7XHJcbiAgICAgICAgbGV0IGRpcmVjdGl2ZVRvVXNlID0gVl9NT0RFTF9URVhUO1xyXG4gICAgICAgIGxldCBpc0ludmFsaWRUeXBlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCBpc0N1c3RvbUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGZpbmRQcm9wKG5vZGUsIGB0eXBlYCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZS50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyA6dHlwZT1cImZvb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX0RZTkFNSUM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLnZhbHVlLmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX1JBRElPO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZVRvVXNlID0gVl9NT0RFTF9DSEVDS0JPWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmaWxlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW52YWxpZFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTYgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfT05fRklMRV9JTlBVVF9FTEVNRU5UICovLCBkaXIubG9jKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNoZWNrRHVwbGljYXRlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzRHluYW1pY0tleVZCaW5kKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGhhcyBiaW5kaW5ncyB3aXRoIGR5bmFtaWMga2V5cywgd2hpY2ggY2FuIHBvc3NpYmx5IGNvbnRhaW5cclxuICAgICAgICAgICAgICAgIC8vIFwidHlwZVwiLlxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX0RZTkFNSUM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0ZXh0IHR5cGVcclxuICAgICAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjaGVja0R1cGxpY2F0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX1NFTEVDVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHRleHRhcmVhXHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjaGVja0R1cGxpY2F0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbmplY3QgcnVudGltZSBkaXJlY3RpdmVcclxuICAgICAgICAvLyBieSByZXR1cm5pbmcgdGhlIGhlbHBlciBzeW1ib2wgdmlhIG5lZWRSdW50aW1lXHJcbiAgICAgICAgLy8gdGhlIGltcG9ydCB3aWxsIHJlcGxhY2VkIGEgcmVzb2x2ZURpcmVjdGl2ZSBjYWxsLlxyXG4gICAgICAgIGlmICghaXNJbnZhbGlkVHlwZSkge1xyXG4gICAgICAgICAgICBiYXNlUmVzdWx0Lm5lZWRSdW50aW1lID0gY29udGV4dC5oZWxwZXIoZGlyZWN0aXZlVG9Vc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDU0IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX09OX0lOVkFMSURfRUxFTUVOVCAqLywgZGlyLmxvYykpO1xyXG4gICAgfVxyXG4gICAgLy8gbmF0aXZlIHZtb2RlbCBkb2Vzbid0IG5lZWQgdGhlIGBtb2RlbFZhbHVlYCBwcm9wcyBzaW5jZSB0aGV5IGFyZSBhbHNvXHJcbiAgICAvLyBwYXNzZWQgdG8gdGhlIHJ1bnRpbWUgYXMgYGJpbmRpbmcudmFsdWVgLiByZW1vdmluZyBpdCByZWR1Y2VzIGNvZGUgc2l6ZS5cclxuICAgIGJhc2VSZXN1bHQucHJvcHMgPSBiYXNlUmVzdWx0LnByb3BzLmZpbHRlcihwID0+ICEocC5rZXkudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gJiZcclxuICAgICAgICBwLmtleS5jb250ZW50ID09PSAnbW9kZWxWYWx1ZScpKTtcclxuICAgIHJldHVybiBiYXNlUmVzdWx0O1xyXG59O1xuXG5jb25zdCBpc0V2ZW50T3B0aW9uTW9kaWZpZXIgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoYHBhc3NpdmUsb25jZSxjYXB0dXJlYCk7XHJcbmNvbnN0IGlzTm9uS2V5TW9kaWZpZXIgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoXHJcbi8vIGV2ZW50IHByb3BhZ2F0aW9uIG1hbmFnZW1lbnRcclxuYHN0b3AscHJldmVudCxzZWxmLGAgK1xyXG4gICAgLy8gc3lzdGVtIG1vZGlmaWVycyArIGV4YWN0XHJcbiAgICBgY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCxgICtcclxuICAgIC8vIG1vdXNlXHJcbiAgICBgbWlkZGxlYCk7XHJcbi8vIGxlZnQgJiByaWdodCBjb3VsZCBiZSBtb3VzZSBvciBrZXkgbW9kaWZpZXJzIGJhc2VkIG9uIGV2ZW50IHR5cGVcclxuY29uc3QgbWF5YmVLZXlNb2RpZmllciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcCgnbGVmdCxyaWdodCcpO1xyXG5jb25zdCBpc0tleWJvYXJkRXZlbnQgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoYG9ua2V5dXAsb25rZXlkb3duLG9ua2V5cHJlc3NgLCB0cnVlKTtcclxuY29uc3QgcmVzb2x2ZU1vZGlmaWVycyA9IChrZXksIG1vZGlmaWVycywgY29udGV4dCwgbG9jKSA9PiB7XHJcbiAgICBjb25zdCBrZXlNb2RpZmllcnMgPSBbXTtcclxuICAgIGNvbnN0IG5vbktleU1vZGlmaWVycyA9IFtdO1xyXG4gICAgY29uc3QgZXZlbnRPcHRpb25Nb2RpZmllcnMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtb2RpZmllcnNbaV07XHJcbiAgICAgICAgaWYgKG1vZGlmaWVyID09PSAnbmF0aXZlJyAmJlxyXG4gICAgICAgICAgICBjaGVja0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9WX09OX05BVElWRVwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX09OX05BVElWRSAqLywgY29udGV4dCwgbG9jKSkge1xyXG4gICAgICAgICAgICBldmVudE9wdGlvbk1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNFdmVudE9wdGlvbk1vZGlmaWVyKG1vZGlmaWVyKSkge1xyXG4gICAgICAgICAgICAvLyBldmVudE9wdGlvbk1vZGlmaWVyczogbW9kaWZpZXJzIGZvciBhZGRFdmVudExpc3RlbmVyKCkgb3B0aW9ucyxcclxuICAgICAgICAgICAgLy8gZS5nLiAucGFzc2l2ZSAmIC5jYXB0dXJlXHJcbiAgICAgICAgICAgIGV2ZW50T3B0aW9uTW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcnVudGltZU1vZGlmaWVyczogbW9kaWZpZXJzIHRoYXQgbmVlZHMgcnVudGltZSBndWFyZHNcclxuICAgICAgICAgICAgaWYgKG1heWJlS2V5TW9kaWZpZXIobW9kaWZpZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTdGF0aWNFeHAoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkRXZlbnQoa2V5LmNvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleU1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbktleU1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlNb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9uS2V5TW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTm9uS2V5TW9kaWZpZXIobW9kaWZpZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9uS2V5TW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5TW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBrZXlNb2RpZmllcnMsXHJcbiAgICAgICAgbm9uS2V5TW9kaWZpZXJzLFxyXG4gICAgICAgIGV2ZW50T3B0aW9uTW9kaWZpZXJzXHJcbiAgICB9O1xyXG59O1xyXG5jb25zdCB0cmFuc2Zvcm1DbGljayA9IChrZXksIGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBpc1N0YXRpY0NsaWNrID0gaXNTdGF0aWNFeHAoa2V5KSAmJiBrZXkuY29udGVudC50b0xvd2VyQ2FzZSgpID09PSAnb25jbGljayc7XHJcbiAgICByZXR1cm4gaXNTdGF0aWNDbGlja1xyXG4gICAgICAgID8gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihldmVudCwgdHJ1ZSlcclxuICAgICAgICA6IGtleS50eXBlICE9PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqL1xyXG4gICAgICAgICAgICA/IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbXHJcbiAgICAgICAgICAgICAgICBgKGAsXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICBgKSA9PT0gXCJvbkNsaWNrXCIgPyBcIiR7ZXZlbnR9XCIgOiAoYCxcclxuICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgIGApYFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICA6IGtleTtcclxufTtcclxuY29uc3QgdHJhbnNmb3JtT24gPSAoZGlyLCBub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICByZXR1cm4gdHJhbnNmb3JtT24kMShkaXIsIG5vZGUsIGNvbnRleHQsIGJhc2VSZXN1bHQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbW9kaWZpZXJzIH0gPSBkaXI7XHJcbiAgICAgICAgaWYgKCFtb2RpZmllcnMubGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZVJlc3VsdDtcclxuICAgICAgICBsZXQgeyBrZXksIHZhbHVlOiBoYW5kbGVyRXhwIH0gPSBiYXNlUmVzdWx0LnByb3BzWzBdO1xyXG4gICAgICAgIGNvbnN0IHsga2V5TW9kaWZpZXJzLCBub25LZXlNb2RpZmllcnMsIGV2ZW50T3B0aW9uTW9kaWZpZXJzIH0gPSByZXNvbHZlTW9kaWZpZXJzKGtleSwgbW9kaWZpZXJzLCBjb250ZXh0LCBkaXIubG9jKTtcclxuICAgICAgICAvLyBub3JtYWxpemUgY2xpY2sucmlnaHQgYW5kIGNsaWNrLm1pZGRsZSBzaW5jZSB0aGV5IGRvbid0IGFjdHVhbGx5IGZpcmVcclxuICAgICAgICBpZiAobm9uS2V5TW9kaWZpZXJzLmluY2x1ZGVzKCdyaWdodCcpKSB7XHJcbiAgICAgICAgICAgIGtleSA9IHRyYW5zZm9ybUNsaWNrKGtleSwgYG9uQ29udGV4dG1lbnVgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vbktleU1vZGlmaWVycy5pbmNsdWRlcygnbWlkZGxlJykpIHtcclxuICAgICAgICAgICAga2V5ID0gdHJhbnNmb3JtQ2xpY2soa2V5LCBgb25Nb3VzZXVwYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub25LZXlNb2RpZmllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJFeHAgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihWX09OX1dJVEhfTU9ESUZJRVJTKSwgW1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlckV4cCxcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5vbktleU1vZGlmaWVycylcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlNb2RpZmllcnMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIC8vIGlmIGV2ZW50IG5hbWUgaXMgZHluYW1pYywgYWx3YXlzIHdyYXAgd2l0aCBrZXlzIGd1YXJkXHJcbiAgICAgICAgICAgICghaXNTdGF0aWNFeHAoa2V5KSB8fCBpc0tleWJvYXJkRXZlbnQoa2V5LmNvbnRlbnQpKSkge1xyXG4gICAgICAgICAgICBoYW5kbGVyRXhwID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoVl9PTl9XSVRIX0tFWVMpLCBbXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyRXhwLFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoa2V5TW9kaWZpZXJzKVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50T3B0aW9uTW9kaWZpZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RpZmllclBvc3RmaXggPSBldmVudE9wdGlvbk1vZGlmaWVycy5tYXAoY2FwaXRhbGl6ZSkuam9pbignJyk7XHJcbiAgICAgICAgICAgIGtleSA9IGlzU3RhdGljRXhwKGtleSlcclxuICAgICAgICAgICAgICAgID8gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgJHtrZXkuY29udGVudH0ke21vZGlmaWVyUG9zdGZpeH1gLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oW2AoYCwga2V5LCBgKSArIFwiJHttb2RpZmllclBvc3RmaXh9XCJgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3BzOiBbY3JlYXRlT2JqZWN0UHJvcGVydHkoa2V5LCBoYW5kbGVyRXhwKV1cclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XG5cbmNvbnN0IHRyYW5zZm9ybVNob3cgPSAoZGlyLCBub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBjb25zdCB7IGV4cCwgbG9jIH0gPSBkaXI7XHJcbiAgICBpZiAoIWV4cCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDU4IC8qIERPTUVycm9yQ29kZXMuWF9WX1NIT1dfTk9fRVhQUkVTU0lPTiAqLywgbG9jKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb3BzOiBbXSxcclxuICAgICAgICBuZWVkUnVudGltZTogY29udGV4dC5oZWxwZXIoVl9TSE9XKVxyXG4gICAgfTtcclxufTtcblxuY29uc3QgdHJhbnNmb3JtVHJhbnNpdGlvbiA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgbm9kZS50YWdUeXBlID09PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmlzQnVpbHRJbkNvbXBvbmVudChub2RlLnRhZyk7XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudCA9PT0gVFJBTlNJVElPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHdhcm4gbXVsdGlwbGUgdHJhbnNpdGlvbiBjaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc011bHRpcGxlQ2hpbGRyZW4obm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1OSAvKiBET01FcnJvckNvZGVzLlhfVFJBTlNJVElPTl9JTlZBTElEX0NISUxEUkVOICovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBub2RlLmNoaWxkcmVuWzBdLmxvYy5zdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBub2RlLmNoaWxkcmVuW25vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMV0ubG9jLmVuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgcyBzaW5nbGUgY2hpbGQgdy8gdi1zaG93XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB5ZXMsIGluamVjdCBcInBlcnNpc3RlZDogdHJ1ZVwiIHRvIHRoZSB0cmFuc2l0aW9uIHByb3BzXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZC5wcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiYgcC5uYW1lID09PSAnc2hvdycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucHJvcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwZXJzaXN0ZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBub2RlLmxvY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBoYXNNdWx0aXBsZUNoaWxkcmVuKG5vZGUpIHtcclxuICAgIC8vICMxMzUyIGZpbHRlciBvdXQgcG90ZW50aWFsIGNvbW1lbnQgbm9kZXMuXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IChub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnR5cGUgIT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8gJiZcclxuICAgICAgICAhKGMudHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyAmJiAhYy5jb250ZW50LnRyaW0oKSkpKTtcclxuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5bMF07XHJcbiAgICByZXR1cm4gKGNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fFxyXG4gICAgICAgIGNoaWxkLnR5cGUgPT09IDExIC8qIE5vZGVUeXBlcy5GT1IgKi8gfHxcclxuICAgICAgICAoY2hpbGQudHlwZSA9PT0gOSAvKiBOb2RlVHlwZXMuSUYgKi8gJiYgY2hpbGQuYnJhbmNoZXMuc29tZShoYXNNdWx0aXBsZUNoaWxkcmVuKSkpO1xyXG59XG5cbmNvbnN0IGlnbm9yZVNpZGVFZmZlY3RUYWdzID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDAgLyogRWxlbWVudFR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAobm9kZS50YWcgPT09ICdzY3JpcHQnIHx8IG5vZGUudGFnID09PSAnc3R5bGUnKSkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDYwIC8qIERPTUVycm9yQ29kZXMuWF9JR05PUkVEX1NJREVfRUZGRUNUX1RBRyAqLywgbm9kZS5sb2MpKTtcclxuICAgICAgICBjb250ZXh0LnJlbW92ZU5vZGUoKTtcclxuICAgIH1cclxufTtcblxuY29uc3QgRE9NTm9kZVRyYW5zZm9ybXMgPSBbXHJcbiAgICB0cmFuc2Zvcm1TdHlsZSxcclxuICAgIC4uLigocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBbdHJhbnNmb3JtVHJhbnNpdGlvbl0gOiBbXSlcclxuXTtcclxuY29uc3QgRE9NRGlyZWN0aXZlVHJhbnNmb3JtcyA9IHtcclxuICAgIGNsb2FrOiBub29wRGlyZWN0aXZlVHJhbnNmb3JtLFxyXG4gICAgaHRtbDogdHJhbnNmb3JtVkh0bWwsXHJcbiAgICB0ZXh0OiB0cmFuc2Zvcm1WVGV4dCxcclxuICAgIG1vZGVsOiB0cmFuc2Zvcm1Nb2RlbCxcclxuICAgIG9uOiB0cmFuc2Zvcm1PbixcclxuICAgIHNob3c6IHRyYW5zZm9ybVNob3dcclxufTtcclxuZnVuY3Rpb24gY29tcGlsZSh0ZW1wbGF0ZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gYmFzZUNvbXBpbGUodGVtcGxhdGUsIGV4dGVuZCh7fSwgcGFyc2VyT3B0aW9ucywgb3B0aW9ucywge1xyXG4gICAgICAgIG5vZGVUcmFuc2Zvcm1zOiBbXHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSA8c2NyaXB0PiBhbmQgPHRhZz5cclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgcHV0IGluc2lkZSBET01Ob2RlVHJhbnNmb3JtcyBiZWNhdXNlIHRoYXQgbGlzdCBpcyB1c2VkXHJcbiAgICAgICAgICAgIC8vIGJ5IGNvbXBpbGVyLXNzciB0byBnZW5lcmF0ZSB2bm9kZSBmYWxsYmFjayBicmFuY2hlc1xyXG4gICAgICAgICAgICBpZ25vcmVTaWRlRWZmZWN0VGFncyxcclxuICAgICAgICAgICAgLi4uRE9NTm9kZVRyYW5zZm9ybXMsXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLm5vZGVUcmFuc2Zvcm1zIHx8IFtdKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGlyZWN0aXZlVHJhbnNmb3JtczogZXh0ZW5kKHt9LCBET01EaXJlY3RpdmVUcmFuc2Zvcm1zLCBvcHRpb25zLmRpcmVjdGl2ZVRyYW5zZm9ybXMgfHwge30pLFxyXG4gICAgICAgIHRyYW5zZm9ybUhvaXN0OiBudWxsIFxyXG4gICAgfSkpO1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlKHRlbXBsYXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBiYXNlUGFyc2UodGVtcGxhdGUsIGV4dGVuZCh7fSwgcGFyc2VyT3B0aW9ucywgb3B0aW9ucykpO1xyXG59XG5cbmV4cG9ydCB7IERPTURpcmVjdGl2ZVRyYW5zZm9ybXMsIERPTU5vZGVUcmFuc2Zvcm1zLCBUUkFOU0lUSU9OLCBUUkFOU0lUSU9OX0dST1VQLCBWX01PREVMX0NIRUNLQk9YLCBWX01PREVMX0RZTkFNSUMsIFZfTU9ERUxfUkFESU8sIFZfTU9ERUxfU0VMRUNULCBWX01PREVMX1RFWFQsIFZfT05fV0lUSF9LRVlTLCBWX09OX1dJVEhfTU9ESUZJRVJTLCBWX1NIT1csIGNvbXBpbGUsIGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IsIHBhcnNlLCBwYXJzZXJPcHRpb25zLCB0cmFuc2Zvcm1TdHlsZSB9O1xuIiwiZXhwb3J0IGNvbnN0IEhPT0tfU0VUVVAgPSAnZGV2dG9vbHMtcGx1Z2luOnNldHVwJztcbmV4cG9ydCBjb25zdCBIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQgPSAncGx1Z2luOnNldHRpbmdzOnNldCc7XG4iLCJleHBvcnQgZnVuY3Rpb24gZ2V0RGV2dG9vbHNHbG9iYWxIb29rKCkge1xuICAgIHJldHVybiBnZXRUYXJnZXQoKS5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldCgpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgIDoge307XG59XG5leHBvcnQgY29uc3QgaXNQcm94eUF2YWlsYWJsZSA9IHR5cGVvZiBQcm94eSA9PT0gJ2Z1bmN0aW9uJztcbiIsImltcG9ydCB7IGdldFRhcmdldCwgZ2V0RGV2dG9vbHNHbG9iYWxIb29rLCBpc1Byb3h5QXZhaWxhYmxlIH0gZnJvbSAnLi9lbnYuanMnO1xuaW1wb3J0IHsgSE9PS19TRVRVUCB9IGZyb20gJy4vY29uc3QuanMnO1xuaW1wb3J0IHsgQXBpUHJveHkgfSBmcm9tICcuL3Byb3h5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gc2V0dXBEZXZ0b29sc1BsdWdpbihwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHBsdWdpbkRlc2NyaXB0b3I7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7XG4gICAgY29uc3QgaG9vayA9IGdldERldnRvb2xzR2xvYmFsSG9vaygpO1xuICAgIGNvbnN0IGVuYWJsZVByb3h5ID0gaXNQcm94eUF2YWlsYWJsZSAmJiBkZXNjcmlwdG9yLmVuYWJsZUVhcmx5UHJveHk7XG4gICAgaWYgKGhvb2sgJiYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIHx8ICFlbmFibGVQcm94eSkpIHtcbiAgICAgICAgaG9vay5lbWl0KEhPT0tfU0VUVVAsIHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSBlbmFibGVQcm94eSA/IG5ldyBBcGlQcm94eShkZXNjcmlwdG9yLCBob29rKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyB8fCBbXTtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHBsdWdpbkRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBzZXR1cEZuLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJveHkpXG4gICAgICAgICAgICBzZXR1cEZuKHByb3h5LnByb3hpZWRUYXJnZXQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCB9IGZyb20gJy4vY29uc3QuanMnO1xuaW1wb3J0IHsgbm93IH0gZnJvbSAnLi90aW1lLmpzJztcbmV4cG9ydCBjbGFzcyBBcGlQcm94eSB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luLCBob29rKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy50YXJnZXRRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLm9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHt9O1xuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBsdWdpbi5zZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwbHVnaW4uc2V0dGluZ3NbaWRdO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5nc1tpZF0gPSBpdGVtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhbFNldHRpbmdzU2F2ZUlkID0gYF9fdnVlLWRldnRvb2xzLXBsdWdpbi1zZXR0aW5nc19fJHtwbHVnaW4uaWR9YDtcbiAgICAgICAgbGV0IGN1cnJlbnRTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnRTZXR0aW5ncywgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgIGdldFNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2V0dGluZ3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0U2V0dGluZ3ModmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm93KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgaG9vay5vbihIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQsIChwbHVnaW5JZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tzLnNldFNldHRpbmdzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3hpZWRPbiA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQub25bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25RdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3hpZWRUYXJnZXQgPSBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgICAgIGdldDogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3hpZWRPbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy5mYWxsYmFja3MpLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrc1twcm9wXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZXRSZWFsVGFyZ2V0KHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub25RdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQub25baXRlbS5tZXRob2RdKC4uLml0ZW0uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMudGFyZ2V0UXVldWUpIHtcbiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZShhd2FpdCB0aGlzLnRhcmdldFtpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJsZXQgc3VwcG9ydGVkO1xubGV0IHBlcmY7XG5leHBvcnQgZnVuY3Rpb24gaXNQZXJmb3JtYW5jZVN1cHBvcnRlZCgpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgKChfYSA9IGdsb2JhbC5wZXJmX2hvb2tzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucGVyZm9ybWFuY2UpKSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIHBlcmYgPSBnbG9iYWwucGVyZl9ob29rcy5wZXJmb3JtYW5jZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gaXNQZXJmb3JtYW5jZVN1cHBvcnRlZCgpID8gcGVyZi5ub3coKSA6IERhdGUubm93KCk7XG59XG4iLCJpbXBvcnQgeyBleHRlbmQsIGlzQXJyYXksIGlzTWFwLCBpc0ludGVnZXJLZXksIGhhc093biwgaXNTeW1ib2wsIGlzT2JqZWN0LCBoYXNDaGFuZ2VkLCBtYWtlTWFwLCBjYXBpdGFsaXplLCB0b1Jhd1R5cGUsIGRlZiwgaXNGdW5jdGlvbiwgTk9PUCB9IGZyb20gJ0B2dWUvc2hhcmVkJztcblxuZnVuY3Rpb24gd2Fybihtc2csIC4uLmFyZ3MpIHtcclxuICAgIGNvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke21zZ31gLCAuLi5hcmdzKTtcclxufVxuXG5sZXQgYWN0aXZlRWZmZWN0U2NvcGU7XHJcbmNsYXNzIEVmZmVjdFNjb3BlIHtcclxuICAgIGNvbnN0cnVjdG9yKGRldGFjaGVkID0gZmFsc2UpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGludGVybmFsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5lZmZlY3RzID0gW107XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGludGVybmFsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jbGVhbnVwcyA9IFtdO1xyXG4gICAgICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBhY3RpdmVFZmZlY3RTY29wZTtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9XHJcbiAgICAgICAgICAgICAgICAoYWN0aXZlRWZmZWN0U2NvcGUuc2NvcGVzIHx8IChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgPSBbXSkpLnB1c2godGhpcykgLSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJ1bihmbikge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWZmZWN0U2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSBjdXJyZW50RWZmZWN0U2NvcGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYGNhbm5vdCBydW4gYW4gaW5hY3RpdmUgZWZmZWN0IHNjb3BlLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIG9uKCkge1xyXG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIG9mZigpIHtcclxuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXMucGFyZW50O1xyXG4gICAgfVxyXG4gICAgc3RvcChmcm9tUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGxldCBpLCBsO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5lZmZlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzW2ldLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5jbGVhbnVwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cHNbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zY29wZXMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3Blc1tpXS5zdG9wKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG5lc3RlZCBzY29wZSwgZGVyZWZlcmVuY2UgZnJvbSBwYXJlbnQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiAhZnJvbVBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb3B0aW1pemVkIE8oMSkgcmVtb3ZhbFxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QgIT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zY29wZXNbdGhpcy5pbmRleF0gPSBsYXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3QuaW5kZXggPSB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XHJcbiAgICByZXR1cm4gbmV3IEVmZmVjdFNjb3BlKGRldGFjaGVkKTtcclxufVxyXG5mdW5jdGlvbiByZWNvcmRFZmZlY3RTY29wZShlZmZlY3QsIHNjb3BlID0gYWN0aXZlRWZmZWN0U2NvcGUpIHtcclxuICAgIGlmIChzY29wZSAmJiBzY29wZS5hY3RpdmUpIHtcclxuICAgICAgICBzY29wZS5lZmZlY3RzLnB1c2goZWZmZWN0KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XHJcbiAgICByZXR1cm4gYWN0aXZlRWZmZWN0U2NvcGU7XHJcbn1cclxuZnVuY3Rpb24gb25TY29wZURpc3Bvc2UoZm4pIHtcclxuICAgIGlmIChhY3RpdmVFZmZlY3RTY29wZSkge1xyXG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmNsZWFudXBzLnB1c2goZm4pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2Fybihgb25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlYCArXHJcbiAgICAgICAgICAgIGAgdG8gYmUgYXNzb2NpYXRlZCB3aXRoLmApO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IGNyZWF0ZURlcCA9IChlZmZlY3RzKSA9PiB7XHJcbiAgICBjb25zdCBkZXAgPSBuZXcgU2V0KGVmZmVjdHMpO1xyXG4gICAgZGVwLncgPSAwO1xyXG4gICAgZGVwLm4gPSAwO1xyXG4gICAgcmV0dXJuIGRlcDtcclxufTtcclxuY29uc3Qgd2FzVHJhY2tlZCA9IChkZXApID0+IChkZXAudyAmIHRyYWNrT3BCaXQpID4gMDtcclxuY29uc3QgbmV3VHJhY2tlZCA9IChkZXApID0+IChkZXAubiAmIHRyYWNrT3BCaXQpID4gMDtcclxuY29uc3QgaW5pdERlcE1hcmtlcnMgPSAoeyBkZXBzIH0pID0+IHtcclxuICAgIGlmIChkZXBzLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkZXBzW2ldLncgfD0gdHJhY2tPcEJpdDsgLy8gc2V0IHdhcyB0cmFja2VkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5jb25zdCBmaW5hbGl6ZURlcE1hcmtlcnMgPSAoZWZmZWN0KSA9PiB7XHJcbiAgICBjb25zdCB7IGRlcHMgfSA9IGVmZmVjdDtcclxuICAgIGlmIChkZXBzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBwdHIgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBkZXAgPSBkZXBzW2ldO1xyXG4gICAgICAgICAgICBpZiAod2FzVHJhY2tlZChkZXApICYmICFuZXdUcmFja2VkKGRlcCkpIHtcclxuICAgICAgICAgICAgICAgIGRlcC5kZWxldGUoZWZmZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlcHNbcHRyKytdID0gZGVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNsZWFyIGJpdHNcclxuICAgICAgICAgICAgZGVwLncgJj0gfnRyYWNrT3BCaXQ7XHJcbiAgICAgICAgICAgIGRlcC5uICY9IH50cmFja09wQml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXBzLmxlbmd0aCA9IHB0cjtcclxuICAgIH1cclxufTtcblxuY29uc3QgdGFyZ2V0TWFwID0gbmV3IFdlYWtNYXAoKTtcclxuLy8gVGhlIG51bWJlciBvZiBlZmZlY3RzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkIHJlY3Vyc2l2ZWx5LlxyXG5sZXQgZWZmZWN0VHJhY2tEZXB0aCA9IDA7XHJcbmxldCB0cmFja09wQml0ID0gMTtcclxuLyoqXHJcbiAqIFRoZSBiaXR3aXNlIHRyYWNrIG1hcmtlcnMgc3VwcG9ydCBhdCBtb3N0IDMwIGxldmVscyBvZiByZWN1cnNpb24uXHJcbiAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIHRvIGVuYWJsZSBtb2Rlcm4gSlMgZW5naW5lcyB0byB1c2UgYSBTTUkgb24gYWxsIHBsYXRmb3Jtcy5cclxuICogV2hlbiByZWN1cnNpb24gZGVwdGggaXMgZ3JlYXRlciwgZmFsbCBiYWNrIHRvIHVzaW5nIGEgZnVsbCBjbGVhbnVwLlxyXG4gKi9cclxuY29uc3QgbWF4TWFya2VyQml0cyA9IDMwO1xyXG5sZXQgYWN0aXZlRWZmZWN0O1xyXG5jb25zdCBJVEVSQVRFX0tFWSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyAnaXRlcmF0ZScgOiAnJyk7XHJcbmNvbnN0IE1BUF9LRVlfSVRFUkFURV9LRVkgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gJ01hcCBrZXkgaXRlcmF0ZScgOiAnJyk7XHJcbmNsYXNzIFJlYWN0aXZlRWZmZWN0IHtcclxuICAgIGNvbnN0cnVjdG9yKGZuLCBzY2hlZHVsZXIgPSBudWxsLCBzY29wZSkge1xyXG4gICAgICAgIHRoaXMuZm4gPSBmbjtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmVjb3JkRWZmZWN0U2NvcGUodGhpcywgc2NvcGUpO1xyXG4gICAgfVxyXG4gICAgcnVuKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IGFjdGl2ZUVmZmVjdDtcclxuICAgICAgICBsZXQgbGFzdFNob3VsZFRyYWNrID0gc2hvdWxkVHJhY2s7XHJcbiAgICAgICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBhY3RpdmVFZmZlY3Q7XHJcbiAgICAgICAgICAgIGFjdGl2ZUVmZmVjdCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNob3VsZFRyYWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdHJhY2tPcEJpdCA9IDEgPDwgKytlZmZlY3RUcmFja0RlcHRoO1xyXG4gICAgICAgICAgICBpZiAoZWZmZWN0VHJhY2tEZXB0aCA8PSBtYXhNYXJrZXJCaXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0RGVwTWFya2Vycyh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFudXBFZmZlY3QodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIGlmIChlZmZlY3RUcmFja0RlcHRoIDw9IG1heE1hcmtlckJpdHMpIHtcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplRGVwTWFya2Vycyh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja09wQml0ID0gMSA8PCAtLWVmZmVjdFRyYWNrRGVwdGg7XHJcbiAgICAgICAgICAgIGFjdGl2ZUVmZmVjdCA9IHRoaXMucGFyZW50O1xyXG4gICAgICAgICAgICBzaG91bGRUcmFjayA9IGxhc3RTaG91bGRUcmFjaztcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmVyU3RvcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIC8vIHN0b3BwZWQgd2hpbGUgcnVubmluZyBpdHNlbGYgLSBkZWZlciB0aGUgY2xlYW51cFxyXG4gICAgICAgIGlmIChhY3RpdmVFZmZlY3QgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZlclN0b3AgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBjbGVhbnVwRWZmZWN0KHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vblN0b3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2xlYW51cEVmZmVjdChlZmZlY3QpIHtcclxuICAgIGNvbnN0IHsgZGVwcyB9ID0gZWZmZWN0O1xyXG4gICAgaWYgKGRlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlcHNbaV0uZGVsZXRlKGVmZmVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlcHMubGVuZ3RoID0gMDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBlZmZlY3QoZm4sIG9wdGlvbnMpIHtcclxuICAgIGlmIChmbi5lZmZlY3QpIHtcclxuICAgICAgICBmbiA9IGZuLmVmZmVjdC5mbjtcclxuICAgIH1cclxuICAgIGNvbnN0IF9lZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoZm4pO1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICBleHRlbmQoX2VmZmVjdCwgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGUpXHJcbiAgICAgICAgICAgIHJlY29yZEVmZmVjdFNjb3BlKF9lZmZlY3QsIG9wdGlvbnMuc2NvcGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmxhenkpIHtcclxuICAgICAgICBfZWZmZWN0LnJ1bigpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcnVubmVyID0gX2VmZmVjdC5ydW4uYmluZChfZWZmZWN0KTtcclxuICAgIHJ1bm5lci5lZmZlY3QgPSBfZWZmZWN0O1xyXG4gICAgcmV0dXJuIHJ1bm5lcjtcclxufVxyXG5mdW5jdGlvbiBzdG9wKHJ1bm5lcikge1xyXG4gICAgcnVubmVyLmVmZmVjdC5zdG9wKCk7XHJcbn1cclxubGV0IHNob3VsZFRyYWNrID0gdHJ1ZTtcclxuY29uc3QgdHJhY2tTdGFjayA9IFtdO1xyXG5mdW5jdGlvbiBwYXVzZVRyYWNraW5nKCkge1xyXG4gICAgdHJhY2tTdGFjay5wdXNoKHNob3VsZFRyYWNrKTtcclxuICAgIHNob3VsZFRyYWNrID0gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gZW5hYmxlVHJhY2tpbmcoKSB7XHJcbiAgICB0cmFja1N0YWNrLnB1c2goc2hvdWxkVHJhY2spO1xyXG4gICAgc2hvdWxkVHJhY2sgPSB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHJlc2V0VHJhY2tpbmcoKSB7XHJcbiAgICBjb25zdCBsYXN0ID0gdHJhY2tTdGFjay5wb3AoKTtcclxuICAgIHNob3VsZFRyYWNrID0gbGFzdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGxhc3Q7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2sodGFyZ2V0LCB0eXBlLCBrZXkpIHtcclxuICAgIGlmIChzaG91bGRUcmFjayAmJiBhY3RpdmVFZmZlY3QpIHtcclxuICAgICAgICBsZXQgZGVwc01hcCA9IHRhcmdldE1hcC5nZXQodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIWRlcHNNYXApIHtcclxuICAgICAgICAgICAgdGFyZ2V0TWFwLnNldCh0YXJnZXQsIChkZXBzTWFwID0gbmV3IE1hcCgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkZXAgPSBkZXBzTWFwLmdldChrZXkpO1xyXG4gICAgICAgIGlmICghZGVwKSB7XHJcbiAgICAgICAgICAgIGRlcHNNYXAuc2V0KGtleSwgKGRlcCA9IGNyZWF0ZURlcCgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV2ZW50SW5mbyA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICA/IHsgZWZmZWN0OiBhY3RpdmVFZmZlY3QsIHRhcmdldCwgdHlwZSwga2V5IH1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdHJhY2tFZmZlY3RzKGRlcCwgZXZlbnRJbmZvKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0cmFja0VmZmVjdHMoZGVwLCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKSB7XHJcbiAgICBsZXQgc2hvdWxkVHJhY2sgPSBmYWxzZTtcclxuICAgIGlmIChlZmZlY3RUcmFja0RlcHRoIDw9IG1heE1hcmtlckJpdHMpIHtcclxuICAgICAgICBpZiAoIW5ld1RyYWNrZWQoZGVwKSkge1xyXG4gICAgICAgICAgICBkZXAubiB8PSB0cmFja09wQml0OyAvLyBzZXQgbmV3bHkgdHJhY2tlZFxyXG4gICAgICAgICAgICBzaG91bGRUcmFjayA9ICF3YXNUcmFja2VkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gRnVsbCBjbGVhbnVwIG1vZGUuXHJcbiAgICAgICAgc2hvdWxkVHJhY2sgPSAhZGVwLmhhcyhhY3RpdmVFZmZlY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNob3VsZFRyYWNrKSB7XHJcbiAgICAgICAgZGVwLmFkZChhY3RpdmVFZmZlY3QpO1xyXG4gICAgICAgIGFjdGl2ZUVmZmVjdC5kZXBzLnB1c2goZGVwKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGFjdGl2ZUVmZmVjdC5vblRyYWNrKSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZUVmZmVjdC5vblRyYWNrKE9iamVjdC5hc3NpZ24oeyBlZmZlY3Q6IGFjdGl2ZUVmZmVjdCB9LCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXIodGFyZ2V0LCB0eXBlLCBrZXksIG5ld1ZhbHVlLCBvbGRWYWx1ZSwgb2xkVGFyZ2V0KSB7XHJcbiAgICBjb25zdCBkZXBzTWFwID0gdGFyZ2V0TWFwLmdldCh0YXJnZXQpO1xyXG4gICAgaWYgKCFkZXBzTWFwKSB7XHJcbiAgICAgICAgLy8gbmV2ZXIgYmVlbiB0cmFja2VkXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRlcHMgPSBbXTtcclxuICAgIGlmICh0eXBlID09PSBcImNsZWFyXCIgLyogVHJpZ2dlck9wVHlwZXMuQ0xFQVIgKi8pIHtcclxuICAgICAgICAvLyBjb2xsZWN0aW9uIGJlaW5nIGNsZWFyZWRcclxuICAgICAgICAvLyB0cmlnZ2VyIGFsbCBlZmZlY3RzIGZvciB0YXJnZXRcclxuICAgICAgICBkZXBzID0gWy4uLmRlcHNNYXAudmFsdWVzKCldO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoa2V5ID09PSAnbGVuZ3RoJyAmJiBpc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICBkZXBzTWFwLmZvckVhY2goKGRlcCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdsZW5ndGgnIHx8IGtleSA+PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIHNjaGVkdWxlIHJ1bnMgZm9yIFNFVCB8IEFERCB8IERFTEVURVxyXG4gICAgICAgIGlmIChrZXkgIT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBkZXBzLnB1c2goZGVwc01hcC5nZXQoa2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFsc28gcnVuIGZvciBpdGVyYXRpb24ga2V5IG9uIEFERCB8IERFTEVURSB8IE1hcC5TRVRcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImFkZFwiIC8qIFRyaWdnZXJPcFR5cGVzLkFERCAqLzpcclxuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFwKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KE1BUF9LRVlfSVRFUkFURV9LRVkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0ludGVnZXJLZXkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBpbmRleCBhZGRlZCB0byBhcnJheSAtPiBsZW5ndGggY2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldCgnbGVuZ3RoJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChJVEVSQVRFX0tFWSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01hcCh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChNQVBfS0VZX0lURVJBVEVfS0VZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChJVEVSQVRFX0tFWSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXZlbnRJbmZvID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgPyB7IHRhcmdldCwgdHlwZSwga2V5LCBuZXdWYWx1ZSwgb2xkVmFsdWUsIG9sZFRhcmdldCB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoZGVwcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBpZiAoZGVwc1swXSkge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRWZmZWN0cyhkZXBzWzBdLCBldmVudEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlckVmZmVjdHMoZGVwc1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBlZmZlY3RzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgZGVwcykge1xyXG4gICAgICAgICAgICBpZiAoZGVwKSB7XHJcbiAgICAgICAgICAgICAgICBlZmZlY3RzLnB1c2goLi4uZGVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJFZmZlY3RzKGNyZWF0ZURlcChlZmZlY3RzKSwgZXZlbnRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJFZmZlY3RzKGNyZWF0ZURlcChlZmZlY3RzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJFZmZlY3RzKGRlcCwgZGVidWdnZXJFdmVudEV4dHJhSW5mbykge1xyXG4gICAgLy8gc3ByZWFkIGludG8gYXJyYXkgZm9yIHN0YWJpbGl6YXRpb25cclxuICAgIGNvbnN0IGVmZmVjdHMgPSBpc0FycmF5KGRlcCkgPyBkZXAgOiBbLi4uZGVwXTtcclxuICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIGVmZmVjdHMpIHtcclxuICAgICAgICBpZiAoZWZmZWN0LmNvbXB1dGVkKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJFZmZlY3QoZWZmZWN0LCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBlZmZlY3RzKSB7XHJcbiAgICAgICAgaWYgKCFlZmZlY3QuY29tcHV0ZWQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVmZmVjdChlZmZlY3QsIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0cmlnZ2VyRWZmZWN0KGVmZmVjdCwgZGVidWdnZXJFdmVudEV4dHJhSW5mbykge1xyXG4gICAgaWYgKGVmZmVjdCAhPT0gYWN0aXZlRWZmZWN0IHx8IGVmZmVjdC5hbGxvd1JlY3Vyc2UpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGVmZmVjdC5vblRyaWdnZXIpIHtcclxuICAgICAgICAgICAgZWZmZWN0Lm9uVHJpZ2dlcihleHRlbmQoeyBlZmZlY3QgfSwgZGVidWdnZXJFdmVudEV4dHJhSW5mbykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWZmZWN0LnNjaGVkdWxlcikge1xyXG4gICAgICAgICAgICBlZmZlY3Quc2NoZWR1bGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlZmZlY3QucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNvbnN0IGlzTm9uVHJhY2thYmxlS2V5cyA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgX19wcm90b19fLF9fdl9pc1JlZixfX2lzVnVlYCk7XHJcbmNvbnN0IGJ1aWx0SW5TeW1ib2xzID0gbmV3IFNldChcclxuLyojX19QVVJFX18qL1xyXG5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpXHJcbiAgICAvLyBpb3MxMC54IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCkgY2FuIGVudW1lcmF0ZSAnYXJndW1lbnRzJyBhbmQgJ2NhbGxlcidcclxuICAgIC8vIGJ1dCBhY2Nlc3NpbmcgdGhlbSBvbiBTeW1ib2wgbGVhZHMgdG8gVHlwZUVycm9yIGJlY2F1c2UgU3ltYm9sIGlzIGEgc3RyaWN0IG1vZGVcclxuICAgIC8vIGZ1bmN0aW9uXHJcbiAgICAuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdhcmd1bWVudHMnICYmIGtleSAhPT0gJ2NhbGxlcicpXHJcbiAgICAubWFwKGtleSA9PiBTeW1ib2xba2V5XSlcclxuICAgIC5maWx0ZXIoaXNTeW1ib2wpKTtcclxuY29uc3QgZ2V0ID0gLyojX19QVVJFX18qLyBjcmVhdGVHZXR0ZXIoKTtcclxuY29uc3Qgc2hhbGxvd0dldCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlR2V0dGVyKGZhbHNlLCB0cnVlKTtcclxuY29uc3QgcmVhZG9ubHlHZXQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUdldHRlcih0cnVlKTtcclxuY29uc3Qgc2hhbGxvd1JlYWRvbmx5R2V0ID0gLyojX19QVVJFX18qLyBjcmVhdGVHZXR0ZXIodHJ1ZSwgdHJ1ZSk7XHJcbmNvbnN0IGFycmF5SW5zdHJ1bWVudGF0aW9ucyA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQXJyYXlJbnN0cnVtZW50YXRpb25zKCk7XHJcbmZ1bmN0aW9uIGNyZWF0ZUFycmF5SW5zdHJ1bWVudGF0aW9ucygpIHtcclxuICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbnMgPSB7fTtcclxuICAgIFsnaW5jbHVkZXMnLCAnaW5kZXhPZicsICdsYXN0SW5kZXhPZiddLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBpbnN0cnVtZW50YXRpb25zW2tleV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSB0b1Jhdyh0aGlzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2soYXJyLCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sIGkgKyAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gd2UgcnVuIHRoZSBtZXRob2QgdXNpbmcgdGhlIG9yaWdpbmFsIGFyZ3MgZmlyc3QgKHdoaWNoIG1heSBiZSByZWFjdGl2ZSlcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXJyW2tleV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPT09IC0xIHx8IHJlcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoYXQgZGlkbid0IHdvcmssIHJ1biBpdCBhZ2FpbiB1c2luZyByYXcgdmFsdWVzLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycltrZXldKC4uLmFyZ3MubWFwKHRvUmF3KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgWydwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSddLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBpbnN0cnVtZW50YXRpb25zW2tleV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgICAgICBwYXVzZVRyYWNraW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRvUmF3KHRoaXMpW2tleV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICAgICAgICAgIHJlc2V0VHJhY2tpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9ucztcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXIoaXNSZWFkb25seSA9IGZhbHNlLCBzaGFsbG93ID0gZmFsc2UpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBnZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFjdGl2ZVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBQ1RJVkUgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuICFpc1JlYWRvbmx5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc1JlYWRvbmx5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gc2hhbGxvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqLyAmJlxyXG4gICAgICAgICAgICByZWNlaXZlciA9PT1cclxuICAgICAgICAgICAgICAgIChpc1JlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBzaGFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2hhbGxvd1JlYWRvbmx5TWFwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVhZG9ubHlNYXBcclxuICAgICAgICAgICAgICAgICAgICA6IHNoYWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzaGFsbG93UmVhY3RpdmVNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZWFjdGl2ZU1hcCkuZ2V0KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNBcnJheSA9IGlzQXJyYXkodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIWlzUmVhZG9ubHkgJiYgdGFyZ2V0SXNBcnJheSAmJiBoYXNPd24oYXJyYXlJbnN0cnVtZW50YXRpb25zLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldChhcnJheUluc3RydW1lbnRhdGlvbnMsIGtleSwgcmVjZWl2ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xyXG4gICAgICAgIGlmIChpc1N5bWJvbChrZXkpID8gYnVpbHRJblN5bWJvbHMuaGFzKGtleSkgOiBpc05vblRyYWNrYWJsZUtleXMoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUmVhZG9ubHkpIHtcclxuICAgICAgICAgICAgdHJhY2sodGFyZ2V0LCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFsbG93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1JlZihyZXMpKSB7XHJcbiAgICAgICAgICAgIC8vIHJlZiB1bndyYXBwaW5nIC0gc2tpcCB1bndyYXAgZm9yIEFycmF5ICsgaW50ZWdlciBrZXkuXHJcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRJc0FycmF5ICYmIGlzSW50ZWdlcktleShrZXkpID8gcmVzIDogcmVzLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNPYmplY3QocmVzKSkge1xyXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHJldHVybmVkIHZhbHVlIGludG8gYSBwcm94eSBhcyB3ZWxsLiB3ZSBkbyB0aGUgaXNPYmplY3QgY2hlY2tcclxuICAgICAgICAgICAgLy8gaGVyZSB0byBhdm9pZCBpbnZhbGlkIHZhbHVlIHdhcm5pbmcuIEFsc28gbmVlZCB0byBsYXp5IGFjY2VzcyByZWFkb25seVxyXG4gICAgICAgICAgICAvLyBhbmQgcmVhY3RpdmUgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5LlxyXG4gICAgICAgICAgICByZXR1cm4gaXNSZWFkb25seSA/IHJlYWRvbmx5KHJlcykgOiByZWFjdGl2ZShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfTtcclxufVxyXG5jb25zdCBzZXQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZVNldHRlcigpO1xyXG5jb25zdCBzaGFsbG93U2V0ID0gLyojX19QVVJFX18qLyBjcmVhdGVTZXR0ZXIodHJ1ZSk7XHJcbmZ1bmN0aW9uIGNyZWF0ZVNldHRlcihzaGFsbG93ID0gZmFsc2UpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBzZXQodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcikge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xyXG4gICAgICAgIGlmIChpc1JlYWRvbmx5KG9sZFZhbHVlKSAmJiBpc1JlZihvbGRWYWx1ZSkgJiYgIWlzUmVmKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hhbGxvdykge1xyXG4gICAgICAgICAgICBpZiAoIWlzU2hhbGxvdyh2YWx1ZSkgJiYgIWlzUmVhZG9ubHkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9IHRvUmF3KG9sZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaXNBcnJheSh0YXJnZXQpICYmIGlzUmVmKG9sZFZhbHVlKSAmJiAhaXNSZWYodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFkS2V5ID0gaXNBcnJheSh0YXJnZXQpICYmIGlzSW50ZWdlcktleShrZXkpXHJcbiAgICAgICAgICAgID8gTnVtYmVyKGtleSkgPCB0YXJnZXQubGVuZ3RoXHJcbiAgICAgICAgICAgIDogaGFzT3duKHRhcmdldCwga2V5KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKTtcclxuICAgICAgICAvLyBkb24ndCB0cmlnZ2VyIGlmIHRhcmdldCBpcyBzb21ldGhpbmcgdXAgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBvZiBvcmlnaW5hbFxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRvUmF3KHJlY2VpdmVyKSkge1xyXG4gICAgICAgICAgICBpZiAoIWhhZEtleSkge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovLCBrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChoYXNDaGFuZ2VkKHZhbHVlLCBvbGRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLywga2V5LCB2YWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwga2V5KSB7XHJcbiAgICBjb25zdCBoYWRLZXkgPSBoYXNPd24odGFyZ2V0LCBrZXkpO1xyXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0YXJnZXRba2V5XTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBrZXkpO1xyXG4gICAgaWYgKHJlc3VsdCAmJiBoYWRLZXkpIHtcclxuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8sIGtleSwgdW5kZWZpbmVkLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIGhhcyh0YXJnZXQsIGtleSkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5oYXModGFyZ2V0LCBrZXkpO1xyXG4gICAgaWYgKCFpc1N5bWJvbChrZXkpIHx8ICFidWlsdEluU3ltYm9scy5oYXMoa2V5KSkge1xyXG4gICAgICAgIHRyYWNrKHRhcmdldCwgXCJoYXNcIiAvKiBUcmFja09wVHlwZXMuSEFTICovLCBrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBvd25LZXlzKHRhcmdldCkge1xyXG4gICAgdHJhY2sodGFyZ2V0LCBcIml0ZXJhdGVcIiAvKiBUcmFja09wVHlwZXMuSVRFUkFURSAqLywgaXNBcnJheSh0YXJnZXQpID8gJ2xlbmd0aCcgOiBJVEVSQVRFX0tFWSk7XHJcbiAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCk7XHJcbn1cclxuY29uc3QgbXV0YWJsZUhhbmRsZXJzID0ge1xyXG4gICAgZ2V0LFxyXG4gICAgc2V0LFxyXG4gICAgZGVsZXRlUHJvcGVydHksXHJcbiAgICBoYXMsXHJcbiAgICBvd25LZXlzXHJcbn07XHJcbmNvbnN0IHJlYWRvbmx5SGFuZGxlcnMgPSB7XHJcbiAgICBnZXQ6IHJlYWRvbmx5R2V0LFxyXG4gICAgc2V0KHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBTZXQgb3BlcmF0aW9uIG9uIGtleSBcIiR7U3RyaW5nKGtleSl9XCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuYCwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG4gICAgZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYERlbGV0ZSBvcGVyYXRpb24gb24ga2V5IFwiJHtTdHJpbmcoa2V5KX1cIiBmYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5gLCB0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufTtcclxuY29uc3Qgc2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMgPSAvKiNfX1BVUkVfXyovIGV4dGVuZCh7fSwgbXV0YWJsZUhhbmRsZXJzLCB7XHJcbiAgICBnZXQ6IHNoYWxsb3dHZXQsXHJcbiAgICBzZXQ6IHNoYWxsb3dTZXRcclxufSk7XHJcbi8vIFByb3BzIGhhbmRsZXJzIGFyZSBzcGVjaWFsIGluIHRoZSBzZW5zZSB0aGF0IGl0IHNob3VsZCBub3QgdW53cmFwIHRvcC1sZXZlbFxyXG4vLyByZWZzIChpbiBvcmRlciB0byBhbGxvdyByZWZzIHRvIGJlIGV4cGxpY2l0bHkgcGFzc2VkIGRvd24pLCBidXQgc2hvdWxkXHJcbi8vIHJldGFpbiB0aGUgcmVhY3Rpdml0eSBvZiB0aGUgbm9ybWFsIHJlYWRvbmx5IG9iamVjdC5cclxuY29uc3Qgc2hhbGxvd1JlYWRvbmx5SGFuZGxlcnMgPSAvKiNfX1BVUkVfXyovIGV4dGVuZCh7fSwgcmVhZG9ubHlIYW5kbGVycywge1xyXG4gICAgZ2V0OiBzaGFsbG93UmVhZG9ubHlHZXRcclxufSk7XG5cbmNvbnN0IHRvU2hhbGxvdyA9ICh2YWx1ZSkgPT4gdmFsdWU7XHJcbmNvbnN0IGdldFByb3RvID0gKHYpID0+IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yodik7XHJcbmZ1bmN0aW9uIGdldCQxKHRhcmdldCwga2V5LCBpc1JlYWRvbmx5ID0gZmFsc2UsIGlzU2hhbGxvdyA9IGZhbHNlKSB7XHJcbiAgICAvLyAjMTc3MjogcmVhZG9ubHkocmVhY3RpdmUoTWFwKSkgc2hvdWxkIHJldHVybiByZWFkb25seSArIHJlYWN0aXZlIHZlcnNpb25cclxuICAgIC8vIG9mIHRoZSB2YWx1ZVxyXG4gICAgdGFyZ2V0ID0gdGFyZ2V0W1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcclxuICAgIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XHJcbiAgICBjb25zdCByYXdLZXkgPSB0b1JhdyhrZXkpO1xyXG4gICAgaWYgKCFpc1JlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gcmF3S2V5KSB7XHJcbiAgICAgICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmFjayhyYXdUYXJnZXQsIFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLywgcmF3S2V5KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgaGFzIH0gPSBnZXRQcm90byhyYXdUYXJnZXQpO1xyXG4gICAgY29uc3Qgd3JhcCA9IGlzU2hhbGxvdyA/IHRvU2hhbGxvdyA6IGlzUmVhZG9ubHkgPyB0b1JlYWRvbmx5IDogdG9SZWFjdGl2ZTtcclxuICAgIGlmIChoYXMuY2FsbChyYXdUYXJnZXQsIGtleSkpIHtcclxuICAgICAgICByZXR1cm4gd3JhcCh0YXJnZXQuZ2V0KGtleSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFzLmNhbGwocmF3VGFyZ2V0LCByYXdLZXkpKSB7XHJcbiAgICAgICAgcmV0dXJuIHdyYXAodGFyZ2V0LmdldChyYXdLZXkpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRhcmdldCAhPT0gcmF3VGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gIzM2MDIgcmVhZG9ubHkocmVhY3RpdmUoTWFwKSlcclxuICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgbmVzdGVkIHJlYWN0aXZlIGBNYXBgIGNhbiBkbyB0cmFja2luZyBmb3IgaXRzZWxmXHJcbiAgICAgICAgdGFyZ2V0LmdldChrZXkpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGhhcyQxKGtleSwgaXNSZWFkb25seSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcclxuICAgIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XHJcbiAgICBjb25zdCByYXdLZXkgPSB0b1JhdyhrZXkpO1xyXG4gICAgaWYgKCFpc1JlYWRvbmx5KSB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gcmF3S2V5KSB7XHJcbiAgICAgICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJoYXNcIiAvKiBUcmFja09wVHlwZXMuSEFTICovLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmFjayhyYXdUYXJnZXQsIFwiaGFzXCIgLyogVHJhY2tPcFR5cGVzLkhBUyAqLywgcmF3S2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXkgPT09IHJhd0tleVxyXG4gICAgICAgID8gdGFyZ2V0LmhhcyhrZXkpXHJcbiAgICAgICAgOiB0YXJnZXQuaGFzKGtleSkgfHwgdGFyZ2V0LmhhcyhyYXdLZXkpO1xyXG59XHJcbmZ1bmN0aW9uIHNpemUodGFyZ2V0LCBpc1JlYWRvbmx5ID0gZmFsc2UpIHtcclxuICAgIHRhcmdldCA9IHRhcmdldFtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL107XHJcbiAgICAhaXNSZWFkb25seSAmJiB0cmFjayh0b1Jhdyh0YXJnZXQpLCBcIml0ZXJhdGVcIiAvKiBUcmFja09wVHlwZXMuSVRFUkFURSAqLywgSVRFUkFURV9LRVkpO1xyXG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgJ3NpemUnLCB0YXJnZXQpO1xyXG59XHJcbmZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xyXG4gICAgdmFsdWUgPSB0b1Jhdyh2YWx1ZSk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0b1Jhdyh0aGlzKTtcclxuICAgIGNvbnN0IHByb3RvID0gZ2V0UHJvdG8odGFyZ2V0KTtcclxuICAgIGNvbnN0IGhhZEtleSA9IHByb3RvLmhhcy5jYWxsKHRhcmdldCwgdmFsdWUpO1xyXG4gICAgaWYgKCFoYWRLZXkpIHtcclxuICAgICAgICB0YXJnZXQuYWRkKHZhbHVlKTtcclxuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8sIHZhbHVlLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufVxyXG5mdW5jdGlvbiBzZXQkMShrZXksIHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9IHRvUmF3KHZhbHVlKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xyXG4gICAgY29uc3QgeyBoYXMsIGdldCB9ID0gZ2V0UHJvdG8odGFyZ2V0KTtcclxuICAgIGxldCBoYWRLZXkgPSBoYXMuY2FsbCh0YXJnZXQsIGtleSk7XHJcbiAgICBpZiAoIWhhZEtleSkge1xyXG4gICAgICAgIGtleSA9IHRvUmF3KGtleSk7XHJcbiAgICAgICAgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgY2hlY2tJZGVudGl0eUtleXModGFyZ2V0LCBoYXMsIGtleSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvbGRWYWx1ZSA9IGdldC5jYWxsKHRhcmdldCwga2V5KTtcclxuICAgIHRhcmdldC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICBpZiAoIWhhZEtleSkge1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcImFkZFwiIC8qIFRyaWdnZXJPcFR5cGVzLkFERCAqLywga2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChoYXNDaGFuZ2VkKHZhbHVlLCBvbGRWYWx1ZSkpIHtcclxuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sIGtleSwgdmFsdWUsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59XHJcbmZ1bmN0aW9uIGRlbGV0ZUVudHJ5KGtleSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdG9SYXcodGhpcyk7XHJcbiAgICBjb25zdCB7IGhhcywgZ2V0IH0gPSBnZXRQcm90byh0YXJnZXQpO1xyXG4gICAgbGV0IGhhZEtleSA9IGhhcy5jYWxsKHRhcmdldCwga2V5KTtcclxuICAgIGlmICghaGFkS2V5KSB7XHJcbiAgICAgICAga2V5ID0gdG9SYXcoa2V5KTtcclxuICAgICAgICBoYWRLZXkgPSBoYXMuY2FsbCh0YXJnZXQsIGtleSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjaGVja0lkZW50aXR5S2V5cyh0YXJnZXQsIGhhcywga2V5KTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9sZFZhbHVlID0gZ2V0ID8gZ2V0LmNhbGwodGFyZ2V0LCBrZXkpIDogdW5kZWZpbmVkO1xyXG4gICAgLy8gZm9yd2FyZCB0aGUgb3BlcmF0aW9uIGJlZm9yZSBxdWV1ZWluZyByZWFjdGlvbnNcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRhcmdldC5kZWxldGUoa2V5KTtcclxuICAgIGlmIChoYWRLZXkpIHtcclxuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8sIGtleSwgdW5kZWZpbmVkLCBvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIGNsZWFyKCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdG9SYXcodGhpcyk7XHJcbiAgICBjb25zdCBoYWRJdGVtcyA9IHRhcmdldC5zaXplICE9PSAwO1xyXG4gICAgY29uc3Qgb2xkVGFyZ2V0ID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgPyBpc01hcCh0YXJnZXQpXHJcbiAgICAgICAgICAgID8gbmV3IE1hcCh0YXJnZXQpXHJcbiAgICAgICAgICAgIDogbmV3IFNldCh0YXJnZXQpXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAvLyBmb3J3YXJkIHRoZSBvcGVyYXRpb24gYmVmb3JlIHF1ZXVlaW5nIHJlYWN0aW9uc1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGFyZ2V0LmNsZWFyKCk7XHJcbiAgICBpZiAoaGFkSXRlbXMpIHtcclxuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJjbGVhclwiIC8qIFRyaWdnZXJPcFR5cGVzLkNMRUFSICovLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb2xkVGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRm9yRWFjaChpc1JlYWRvbmx5LCBpc1NoYWxsb3cpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWQgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9ic2VydmVkW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcclxuICAgICAgICBjb25zdCByYXdUYXJnZXQgPSB0b1Jhdyh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IHdyYXAgPSBpc1NoYWxsb3cgPyB0b1NoYWxsb3cgOiBpc1JlYWRvbmx5ID8gdG9SZWFkb25seSA6IHRvUmVhY3RpdmU7XHJcbiAgICAgICAgIWlzUmVhZG9ubHkgJiYgdHJhY2socmF3VGFyZ2V0LCBcIml0ZXJhdGVcIiAvKiBUcmFja09wVHlwZXMuSVRFUkFURSAqLywgSVRFUkFURV9LRVkpO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQ6IG1ha2Ugc3VyZSB0aGUgY2FsbGJhY2sgaXNcclxuICAgICAgICAgICAgLy8gMS4gaW52b2tlZCB3aXRoIHRoZSByZWFjdGl2ZSBtYXAgYXMgYHRoaXNgIGFuZCAzcmQgYXJnXHJcbiAgICAgICAgICAgIC8vIDIuIHRoZSB2YWx1ZSByZWNlaXZlZCBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIHJlYWN0aXZlL3JlYWRvbmx5LlxyXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB3cmFwKHZhbHVlKSwgd3JhcChrZXkpLCBvYnNlcnZlZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgaXNSZWFkb25seSwgaXNTaGFsbG93KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcclxuICAgICAgICBjb25zdCByYXdUYXJnZXQgPSB0b1Jhdyh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldElzTWFwID0gaXNNYXAocmF3VGFyZ2V0KTtcclxuICAgICAgICBjb25zdCBpc1BhaXIgPSBtZXRob2QgPT09ICdlbnRyaWVzJyB8fCAobWV0aG9kID09PSBTeW1ib2wuaXRlcmF0b3IgJiYgdGFyZ2V0SXNNYXApO1xyXG4gICAgICAgIGNvbnN0IGlzS2V5T25seSA9IG1ldGhvZCA9PT0gJ2tleXMnICYmIHRhcmdldElzTWFwO1xyXG4gICAgICAgIGNvbnN0IGlubmVySXRlcmF0b3IgPSB0YXJnZXRbbWV0aG9kXSguLi5hcmdzKTtcclxuICAgICAgICBjb25zdCB3cmFwID0gaXNTaGFsbG93ID8gdG9TaGFsbG93IDogaXNSZWFkb25seSA/IHRvUmVhZG9ubHkgOiB0b1JlYWN0aXZlO1xyXG4gICAgICAgICFpc1JlYWRvbmx5ICYmXHJcbiAgICAgICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJpdGVyYXRlXCIgLyogVHJhY2tPcFR5cGVzLklURVJBVEUgKi8sIGlzS2V5T25seSA/IE1BUF9LRVlfSVRFUkFURV9LRVkgOiBJVEVSQVRFX0tFWSk7XHJcbiAgICAgICAgLy8gcmV0dXJuIGEgd3JhcHBlZCBpdGVyYXRvciB3aGljaCByZXR1cm5zIG9ic2VydmVkIHZlcnNpb25zIG9mIHRoZVxyXG4gICAgICAgIC8vIHZhbHVlcyBlbWl0dGVkIGZyb20gdGhlIHJlYWwgaXRlcmF0b3JcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAvLyBpdGVyYXRvciBwcm90b2NvbFxyXG4gICAgICAgICAgICBuZXh0KCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gaW5uZXJJdGVyYXRvci5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZVxyXG4gICAgICAgICAgICAgICAgICAgID8geyB2YWx1ZSwgZG9uZSB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpc1BhaXIgPyBbd3JhcCh2YWx1ZVswXSksIHdyYXAodmFsdWVbMV0pXSA6IHdyYXAodmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gaXRlcmFibGUgcHJvdG9jb2xcclxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlYWRvbmx5TWV0aG9kKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXJnc1swXSA/IGBvbiBrZXkgXCIke2FyZ3NbMF19XCIgYCA6IGBgO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7Y2FwaXRhbGl6ZSh0eXBlKX0gb3BlcmF0aW9uICR7a2V5fWZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LmAsIHRvUmF3KHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovID8gZmFsc2UgOiB0aGlzO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50YXRpb25zKCkge1xyXG4gICAgY29uc3QgbXV0YWJsZUluc3RydW1lbnRhdGlvbnMgPSB7XHJcbiAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEodGhpcywga2V5KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldCBzaXplKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2l6ZSh0aGlzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhczogaGFzJDEsXHJcbiAgICAgICAgYWRkLFxyXG4gICAgICAgIHNldDogc2V0JDEsXHJcbiAgICAgICAgZGVsZXRlOiBkZWxldGVFbnRyeSxcclxuICAgICAgICBjbGVhcixcclxuICAgICAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKGZhbHNlLCBmYWxzZSlcclxuICAgIH07XHJcbiAgICBjb25zdCBzaGFsbG93SW5zdHJ1bWVudGF0aW9ucyA9IHtcclxuICAgICAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXQkMSh0aGlzLCBrZXksIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldCBzaXplKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2l6ZSh0aGlzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhczogaGFzJDEsXHJcbiAgICAgICAgYWRkLFxyXG4gICAgICAgIHNldDogc2V0JDEsXHJcbiAgICAgICAgZGVsZXRlOiBkZWxldGVFbnRyeSxcclxuICAgICAgICBjbGVhcixcclxuICAgICAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKGZhbHNlLCB0cnVlKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlYWRvbmx5SW5zdHJ1bWVudGF0aW9ucyA9IHtcclxuICAgICAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXQkMSh0aGlzLCBrZXksIHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0IHNpemUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaXplKHRoaXMsIHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFzKGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaGFzJDEuY2FsbCh0aGlzLCBrZXksIHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWRkOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImFkZFwiIC8qIFRyaWdnZXJPcFR5cGVzLkFERCAqLyksXHJcbiAgICAgICAgc2V0OiBjcmVhdGVSZWFkb25seU1ldGhvZChcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyksXHJcbiAgICAgICAgZGVsZXRlOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImRlbGV0ZVwiIC8qIFRyaWdnZXJPcFR5cGVzLkRFTEVURSAqLyksXHJcbiAgICAgICAgY2xlYXI6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiY2xlYXJcIiAvKiBUcmlnZ2VyT3BUeXBlcy5DTEVBUiAqLyksXHJcbiAgICAgICAgZm9yRWFjaDogY3JlYXRlRm9yRWFjaCh0cnVlLCBmYWxzZSlcclxuICAgIH07XHJcbiAgICBjb25zdCBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zID0ge1xyXG4gICAgICAgIGdldChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldCQxKHRoaXMsIGtleSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQgc2l6ZSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNpemUodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBoYXMkMS5jYWxsKHRoaXMsIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovKSxcclxuICAgICAgICBzZXQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovKSxcclxuICAgICAgICBkZWxldGU6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovKSxcclxuICAgICAgICBjbGVhcjogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJjbGVhclwiIC8qIFRyaWdnZXJPcFR5cGVzLkNMRUFSICovKSxcclxuICAgICAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKHRydWUsIHRydWUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXRlcmF0b3JNZXRob2RzID0gWydrZXlzJywgJ3ZhbHVlcycsICdlbnRyaWVzJywgU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGl0ZXJhdG9yTWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XHJcbiAgICAgICAgbXV0YWJsZUluc3RydW1lbnRhdGlvbnNbbWV0aG9kXSA9IGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICByZWFkb25seUluc3RydW1lbnRhdGlvbnNbbWV0aG9kXSA9IGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIHNoYWxsb3dJbnN0cnVtZW50YXRpb25zW21ldGhvZF0gPSBjcmVhdGVJdGVyYWJsZU1ldGhvZChtZXRob2QsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zW21ldGhvZF0gPSBjcmVhdGVJdGVyYWJsZU1ldGhvZChtZXRob2QsIHRydWUsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIG11dGFibGVJbnN0cnVtZW50YXRpb25zLFxyXG4gICAgICAgIHJlYWRvbmx5SW5zdHJ1bWVudGF0aW9ucyxcclxuICAgICAgICBzaGFsbG93SW5zdHJ1bWVudGF0aW9ucyxcclxuICAgICAgICBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zXHJcbiAgICBdO1xyXG59XHJcbmNvbnN0IFttdXRhYmxlSW5zdHJ1bWVudGF0aW9ucywgcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zLCBzaGFsbG93SW5zdHJ1bWVudGF0aW9ucywgc2hhbGxvd1JlYWRvbmx5SW5zdHJ1bWVudGF0aW9uc10gPSAvKiAjX19QVVJFX18qLyBjcmVhdGVJbnN0cnVtZW50YXRpb25zKCk7XHJcbmZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcihpc1JlYWRvbmx5LCBzaGFsbG93KSB7XHJcbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zID0gc2hhbGxvd1xyXG4gICAgICAgID8gaXNSZWFkb25seVxyXG4gICAgICAgICAgICA/IHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnNcclxuICAgICAgICAgICAgOiBzaGFsbG93SW5zdHJ1bWVudGF0aW9uc1xyXG4gICAgICAgIDogaXNSZWFkb25seVxyXG4gICAgICAgICAgICA/IHJlYWRvbmx5SW5zdHJ1bWVudGF0aW9uc1xyXG4gICAgICAgICAgICA6IG11dGFibGVJbnN0cnVtZW50YXRpb25zO1xyXG4gICAgcmV0dXJuICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpID0+IHtcclxuICAgICAgICBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWN0aXZlXCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFDVElWRSAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gIWlzUmVhZG9ubHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUmVhZG9ubHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KGhhc093bihpbnN0cnVtZW50YXRpb25zLCBrZXkpICYmIGtleSBpbiB0YXJnZXRcclxuICAgICAgICAgICAgPyBpbnN0cnVtZW50YXRpb25zXHJcbiAgICAgICAgICAgIDogdGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcclxuICAgIH07XHJcbn1cclxuY29uc3QgbXV0YWJsZUNvbGxlY3Rpb25IYW5kbGVycyA9IHtcclxuICAgIGdldDogLyojX19QVVJFX18qLyBjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIoZmFsc2UsIGZhbHNlKVxyXG59O1xyXG5jb25zdCBzaGFsbG93Q29sbGVjdGlvbkhhbmRsZXJzID0ge1xyXG4gICAgZ2V0OiAvKiNfX1BVUkVfXyovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcihmYWxzZSwgdHJ1ZSlcclxufTtcclxuY29uc3QgcmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XHJcbiAgICBnZXQ6IC8qI19fUFVSRV9fKi8gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKHRydWUsIGZhbHNlKVxyXG59O1xyXG5jb25zdCBzaGFsbG93UmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XHJcbiAgICBnZXQ6IC8qI19fUFVSRV9fKi8gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKHRydWUsIHRydWUpXHJcbn07XHJcbmZ1bmN0aW9uIGNoZWNrSWRlbnRpdHlLZXlzKHRhcmdldCwgaGFzLCBrZXkpIHtcclxuICAgIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XHJcbiAgICBpZiAocmF3S2V5ICE9PSBrZXkgJiYgaGFzLmNhbGwodGFyZ2V0LCByYXdLZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHRvUmF3VHlwZSh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgUmVhY3RpdmUgJHt0eXBlfSBjb250YWlucyBib3RoIHRoZSByYXcgYW5kIHJlYWN0aXZlIGAgK1xyXG4gICAgICAgICAgICBgdmVyc2lvbnMgb2YgdGhlIHNhbWUgb2JqZWN0JHt0eXBlID09PSBgTWFwYCA/IGAgYXMga2V5c2AgOiBgYH0sIGAgK1xyXG4gICAgICAgICAgICBgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzLiBgICtcclxuICAgICAgICAgICAgYEF2b2lkIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIGAgK1xyXG4gICAgICAgICAgICBgb2YgYW4gb2JqZWN0IGFuZCBvbmx5IHVzZSB0aGUgcmVhY3RpdmUgdmVyc2lvbiBpZiBwb3NzaWJsZS5gKTtcclxuICAgIH1cclxufVxuXG5jb25zdCByZWFjdGl2ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IHNoYWxsb3dSZWFjdGl2ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IHJlYWRvbmx5TWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3Qgc2hhbGxvd1JlYWRvbmx5TWFwID0gbmV3IFdlYWtNYXAoKTtcclxuZnVuY3Rpb24gdGFyZ2V0VHlwZU1hcChyYXdUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJhd1R5cGUpIHtcclxuICAgICAgICBjYXNlICdPYmplY3QnOlxyXG4gICAgICAgIGNhc2UgJ0FycmF5JzpcclxuICAgICAgICAgICAgcmV0dXJuIDEgLyogVGFyZ2V0VHlwZS5DT01NT04gKi87XHJcbiAgICAgICAgY2FzZSAnTWFwJzpcclxuICAgICAgICBjYXNlICdTZXQnOlxyXG4gICAgICAgIGNhc2UgJ1dlYWtNYXAnOlxyXG4gICAgICAgIGNhc2UgJ1dlYWtTZXQnOlxyXG4gICAgICAgICAgICByZXR1cm4gMiAvKiBUYXJnZXRUeXBlLkNPTExFQ1RJT04gKi87XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIDAgLyogVGFyZ2V0VHlwZS5JTlZBTElEICovO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFRhcmdldFR5cGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZVtcIl9fdl9za2lwXCIgLyogUmVhY3RpdmVGbGFncy5TS0lQICovXSB8fCAhT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSlcclxuICAgICAgICA/IDAgLyogVGFyZ2V0VHlwZS5JTlZBTElEICovXHJcbiAgICAgICAgOiB0YXJnZXRUeXBlTWFwKHRvUmF3VHlwZSh2YWx1ZSkpO1xyXG59XHJcbmZ1bmN0aW9uIHJlYWN0aXZlKHRhcmdldCkge1xyXG4gICAgLy8gaWYgdHJ5aW5nIHRvIG9ic2VydmUgYSByZWFkb25seSBwcm94eSwgcmV0dXJuIHRoZSByZWFkb25seSB2ZXJzaW9uLlxyXG4gICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QodGFyZ2V0LCBmYWxzZSwgbXV0YWJsZUhhbmRsZXJzLCBtdXRhYmxlQ29sbGVjdGlvbkhhbmRsZXJzLCByZWFjdGl2ZU1hcCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybiBhIHNoYWxsb3dseS1yZWFjdGl2ZSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBvYmplY3QsIHdoZXJlIG9ubHkgdGhlIHJvb3RcclxuICogbGV2ZWwgcHJvcGVydGllcyBhcmUgcmVhY3RpdmUuIEl0IGFsc28gZG9lcyBub3QgYXV0by11bndyYXAgcmVmcyAoZXZlbiBhdCB0aGVcclxuICogcm9vdCBsZXZlbCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBzaGFsbG93UmVhY3RpdmUodGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QodGFyZ2V0LCBmYWxzZSwgc2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMsIHNoYWxsb3dDb2xsZWN0aW9uSGFuZGxlcnMsIHNoYWxsb3dSZWFjdGl2ZU1hcCk7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZWFkb25seSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBvYmplY3QuIE5vdGUgdGhlIHJldHVybmVkIGNvcHkgaXMgbm90XHJcbiAqIG1hZGUgcmVhY3RpdmUsIGJ1dCBgcmVhZG9ubHlgIGNhbiBiZSBjYWxsZWQgb24gYW4gYWxyZWFkeSByZWFjdGl2ZSBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiByZWFkb25seSh0YXJnZXQpIHtcclxuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZU9iamVjdCh0YXJnZXQsIHRydWUsIHJlYWRvbmx5SGFuZGxlcnMsIHJlYWRvbmx5Q29sbGVjdGlvbkhhbmRsZXJzLCByZWFkb25seU1hcCk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgYSByZWFjdGl2ZS1jb3B5IG9mIHRoZSBvcmlnaW5hbCBvYmplY3QsIHdoZXJlIG9ubHkgdGhlIHJvb3QgbGV2ZWxcclxuICogcHJvcGVydGllcyBhcmUgcmVhZG9ubHksIGFuZCBkb2VzIE5PVCB1bndyYXAgcmVmcyBub3IgcmVjdXJzaXZlbHkgY29udmVydFxyXG4gKiByZXR1cm5lZCBwcm9wZXJ0aWVzLlxyXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBwcm9wcyBwcm94eSBvYmplY3QgZm9yIHN0YXRlZnVsIGNvbXBvbmVudHMuXHJcbiAqL1xyXG5mdW5jdGlvbiBzaGFsbG93UmVhZG9ubHkodGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QodGFyZ2V0LCB0cnVlLCBzaGFsbG93UmVhZG9ubHlIYW5kbGVycywgc2hhbGxvd1JlYWRvbmx5Q29sbGVjdGlvbkhhbmRsZXJzLCBzaGFsbG93UmVhZG9ubHlNYXApO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KHRhcmdldCwgaXNSZWFkb25seSwgYmFzZUhhbmRsZXJzLCBjb2xsZWN0aW9uSGFuZGxlcnMsIHByb3h5TWFwKSB7XHJcbiAgICBpZiAoIWlzT2JqZWN0KHRhcmdldCkpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgdmFsdWUgY2Fubm90IGJlIG1hZGUgcmVhY3RpdmU6ICR7U3RyaW5nKHRhcmdldCl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICAvLyB0YXJnZXQgaXMgYWxyZWFkeSBhIFByb3h5LCByZXR1cm4gaXQuXHJcbiAgICAvLyBleGNlcHRpb246IGNhbGxpbmcgcmVhZG9ubHkoKSBvbiBhIHJlYWN0aXZlIG9iamVjdFxyXG4gICAgaWYgKHRhcmdldFtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL10gJiZcclxuICAgICAgICAhKGlzUmVhZG9ubHkgJiYgdGFyZ2V0W1wiX192X2lzUmVhY3RpdmVcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQUNUSVZFICovXSkpIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgLy8gdGFyZ2V0IGFscmVhZHkgaGFzIGNvcnJlc3BvbmRpbmcgUHJveHlcclxuICAgIGNvbnN0IGV4aXN0aW5nUHJveHkgPSBwcm94eU1hcC5nZXQodGFyZ2V0KTtcclxuICAgIGlmIChleGlzdGluZ1Byb3h5KSB7XHJcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJveHk7XHJcbiAgICB9XHJcbiAgICAvLyBvbmx5IHNwZWNpZmljIHZhbHVlIHR5cGVzIGNhbiBiZSBvYnNlcnZlZC5cclxuICAgIGNvbnN0IHRhcmdldFR5cGUgPSBnZXRUYXJnZXRUeXBlKHRhcmdldCk7XHJcbiAgICBpZiAodGFyZ2V0VHlwZSA9PT0gMCAvKiBUYXJnZXRUeXBlLklOVkFMSUQgKi8pIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCB0YXJnZXRUeXBlID09PSAyIC8qIFRhcmdldFR5cGUuQ09MTEVDVElPTiAqLyA/IGNvbGxlY3Rpb25IYW5kbGVycyA6IGJhc2VIYW5kbGVycyk7XHJcbiAgICBwcm94eU1hcC5zZXQodGFyZ2V0LCBwcm94eSk7XHJcbiAgICByZXR1cm4gcHJveHk7XHJcbn1cclxuZnVuY3Rpb24gaXNSZWFjdGl2ZSh2YWx1ZSkge1xyXG4gICAgaWYgKGlzUmVhZG9ubHkodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWVbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dKTtcclxuICAgIH1cclxuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZVtcIl9fdl9pc1JlYWN0aXZlXCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFDVElWRSAqL10pO1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVhZG9ubHkodmFsdWUpIHtcclxuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZVtcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqL10pO1xyXG59XHJcbmZ1bmN0aW9uIGlzU2hhbGxvdyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqL10pO1xyXG59XHJcbmZ1bmN0aW9uIGlzUHJveHkodmFsdWUpIHtcclxuICAgIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlKSB8fCBpc1JlYWRvbmx5KHZhbHVlKTtcclxufVxyXG5mdW5jdGlvbiB0b1JhdyhvYnNlcnZlZCkge1xyXG4gICAgY29uc3QgcmF3ID0gb2JzZXJ2ZWQgJiYgb2JzZXJ2ZWRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xyXG4gICAgcmV0dXJuIHJhdyA/IHRvUmF3KHJhdykgOiBvYnNlcnZlZDtcclxufVxyXG5mdW5jdGlvbiBtYXJrUmF3KHZhbHVlKSB7XHJcbiAgICBkZWYodmFsdWUsIFwiX192X3NraXBcIiAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8sIHRydWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbmNvbnN0IHRvUmVhY3RpdmUgPSAodmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSA/IHJlYWN0aXZlKHZhbHVlKSA6IHZhbHVlO1xyXG5jb25zdCB0b1JlYWRvbmx5ID0gKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgPyByZWFkb25seSh2YWx1ZSkgOiB2YWx1ZTtcblxuZnVuY3Rpb24gdHJhY2tSZWZWYWx1ZShyZWYpIHtcclxuICAgIGlmIChzaG91bGRUcmFjayAmJiBhY3RpdmVFZmZlY3QpIHtcclxuICAgICAgICByZWYgPSB0b1JhdyhyZWYpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgdHJhY2tFZmZlY3RzKHJlZi5kZXAgfHwgKHJlZi5kZXAgPSBjcmVhdGVEZXAoKSksIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxyXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHJhY2tFZmZlY3RzKHJlZi5kZXAgfHwgKHJlZi5kZXAgPSBjcmVhdGVEZXAoKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0cmlnZ2VyUmVmVmFsdWUocmVmLCBuZXdWYWwpIHtcclxuICAgIHJlZiA9IHRvUmF3KHJlZik7XHJcbiAgICBpZiAocmVmLmRlcCkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVmZmVjdHMocmVmLmRlcCwge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyxcclxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWZmZWN0cyhyZWYuZGVwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNSZWYocikge1xyXG4gICAgcmV0dXJuICEhKHIgJiYgci5fX3ZfaXNSZWYgPT09IHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIHJlZih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgZmFsc2UpO1xyXG59XHJcbmZ1bmN0aW9uIHNoYWxsb3dSZWYodmFsdWUpIHtcclxuICAgIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlZihyYXdWYWx1ZSwgc2hhbGxvdykge1xyXG4gICAgaWYgKGlzUmVmKHJhd1ZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUmVmSW1wbChyYXdWYWx1ZSwgc2hhbGxvdyk7XHJcbn1cclxuY2xhc3MgUmVmSW1wbCB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSwgX192X2lzU2hhbGxvdykge1xyXG4gICAgICAgIHRoaXMuX192X2lzU2hhbGxvdyA9IF9fdl9pc1NoYWxsb3c7XHJcbiAgICAgICAgdGhpcy5kZXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3Jhd1ZhbHVlID0gX192X2lzU2hhbGxvdyA/IHZhbHVlIDogdG9SYXcodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gX192X2lzU2hhbGxvdyA/IHZhbHVlIDogdG9SZWFjdGl2ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgdHJhY2tSZWZWYWx1ZSh0aGlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUobmV3VmFsKSB7XHJcbiAgICAgICAgY29uc3QgdXNlRGlyZWN0VmFsdWUgPSB0aGlzLl9fdl9pc1NoYWxsb3cgfHwgaXNTaGFsbG93KG5ld1ZhbCkgfHwgaXNSZWFkb25seShuZXdWYWwpO1xyXG4gICAgICAgIG5ld1ZhbCA9IHVzZURpcmVjdFZhbHVlID8gbmV3VmFsIDogdG9SYXcobmV3VmFsKTtcclxuICAgICAgICBpZiAoaGFzQ2hhbmdlZChuZXdWYWwsIHRoaXMuX3Jhd1ZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXdWYWx1ZSA9IG5ld1ZhbDtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB1c2VEaXJlY3RWYWx1ZSA/IG5ld1ZhbCA6IHRvUmVhY3RpdmUobmV3VmFsKTtcclxuICAgICAgICAgICAgdHJpZ2dlclJlZlZhbHVlKHRoaXMsIG5ld1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJSZWYocmVmKSB7XHJcbiAgICB0cmlnZ2VyUmVmVmFsdWUocmVmLCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyByZWYudmFsdWUgOiB2b2lkIDApO1xyXG59XHJcbmZ1bmN0aW9uIHVucmVmKHJlZikge1xyXG4gICAgcmV0dXJuIGlzUmVmKHJlZikgPyByZWYudmFsdWUgOiByZWY7XHJcbn1cclxuY29uc3Qgc2hhbGxvd1Vud3JhcEhhbmRsZXJzID0ge1xyXG4gICAgZ2V0OiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSA9PiB1bnJlZihSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpKSxcclxuICAgIHNldDogKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpID0+IHtcclxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xyXG4gICAgICAgIGlmIChpc1JlZihvbGRWYWx1ZSkgJiYgIWlzUmVmKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHByb3h5UmVmcyhvYmplY3RXaXRoUmVmcykge1xyXG4gICAgcmV0dXJuIGlzUmVhY3RpdmUob2JqZWN0V2l0aFJlZnMpXHJcbiAgICAgICAgPyBvYmplY3RXaXRoUmVmc1xyXG4gICAgICAgIDogbmV3IFByb3h5KG9iamVjdFdpdGhSZWZzLCBzaGFsbG93VW53cmFwSGFuZGxlcnMpO1xyXG59XHJcbmNsYXNzIEN1c3RvbVJlZkltcGwge1xyXG4gICAgY29uc3RydWN0b3IoZmFjdG9yeSkge1xyXG4gICAgICAgIHRoaXMuZGVwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX192X2lzUmVmID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCB7IGdldCwgc2V0IH0gPSBmYWN0b3J5KCgpID0+IHRyYWNrUmVmVmFsdWUodGhpcyksICgpID0+IHRyaWdnZXJSZWZWYWx1ZSh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fZ2V0ID0gZ2V0O1xyXG4gICAgICAgIHRoaXMuX3NldCA9IHNldDtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUobmV3VmFsKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0KG5ld1ZhbCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3VzdG9tUmVmKGZhY3RvcnkpIHtcclxuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVmSW1wbChmYWN0b3J5KTtcclxufVxyXG5mdW5jdGlvbiB0b1JlZnMob2JqZWN0KSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1Byb3h5KG9iamVjdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYHRvUmVmcygpIGV4cGVjdHMgYSByZWFjdGl2ZSBvYmplY3QgYnV0IHJlY2VpdmVkIGEgcGxhaW4gb25lLmApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0ID0gaXNBcnJheShvYmplY3QpID8gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpIDoge307XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICByZXRba2V5XSA9IHRvUmVmKG9iamVjdCwga2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuY2xhc3MgT2JqZWN0UmVmSW1wbCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihfb2JqZWN0LCBfa2V5LCBfZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fb2JqZWN0ID0gX29iamVjdDtcclxuICAgICAgICB0aGlzLl9rZXkgPSBfa2V5O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IF9kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuX29iamVjdFt0aGlzLl9rZXldO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHVuZGVmaW5lZCA/IHRoaXMuX2RlZmF1bHRWYWx1ZSA6IHZhbDtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcclxuICAgICAgICB0aGlzLl9vYmplY3RbdGhpcy5fa2V5XSA9IG5ld1ZhbDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0b1JlZihvYmplY3QsIGtleSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICBjb25zdCB2YWwgPSBvYmplY3Rba2V5XTtcclxuICAgIHJldHVybiBpc1JlZih2YWwpXHJcbiAgICAgICAgPyB2YWxcclxuICAgICAgICA6IG5ldyBPYmplY3RSZWZJbXBsKG9iamVjdCwga2V5LCBkZWZhdWx0VmFsdWUpO1xyXG59XG5cbnZhciBfYTtcclxuY2xhc3MgQ29tcHV0ZWRSZWZJbXBsIHtcclxuICAgIGNvbnN0cnVjdG9yKGdldHRlciwgX3NldHRlciwgaXNSZWFkb25seSwgaXNTU1IpIHtcclxuICAgICAgICB0aGlzLl9zZXR0ZXIgPSBfc2V0dGVyO1xyXG4gICAgICAgIHRoaXMuZGVwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX192X2lzUmVmID0gdHJ1ZTtcclxuICAgICAgICB0aGlzW19hXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVmZmVjdCA9IG5ldyBSZWFjdGl2ZUVmZmVjdChnZXR0ZXIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlclJlZlZhbHVlKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3QuY29tcHV0ZWQgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0LmFjdGl2ZSA9IHRoaXMuX2NhY2hlYWJsZSA9ICFpc1NTUjtcclxuICAgICAgICB0aGlzW1wiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovXSA9IGlzUmVhZG9ubHk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgLy8gdGhlIGNvbXB1dGVkIHJlZiBtYXkgZ2V0IHdyYXBwZWQgYnkgb3RoZXIgcHJveGllcyBlLmcuIHJlYWRvbmx5KCkgIzMzNzZcclxuICAgICAgICBjb25zdCBzZWxmID0gdG9SYXcodGhpcyk7XHJcbiAgICAgICAgdHJhY2tSZWZWYWx1ZShzZWxmKTtcclxuICAgICAgICBpZiAoc2VsZi5fZGlydHkgfHwgIXNlbGYuX2NhY2hlYWJsZSkge1xyXG4gICAgICAgICAgICBzZWxmLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHNlbGYuZWZmZWN0LnJ1bigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUobmV3VmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zZXR0ZXIobmV3VmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbl9hID0gXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi87XHJcbmZ1bmN0aW9uIGNvbXB1dGVkKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zLCBpc1NTUiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgZ2V0dGVyO1xyXG4gICAgbGV0IHNldHRlcjtcclxuICAgIGNvbnN0IG9ubHlHZXR0ZXIgPSBpc0Z1bmN0aW9uKGdldHRlck9yT3B0aW9ucyk7XHJcbiAgICBpZiAob25seUdldHRlcikge1xyXG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcclxuICAgICAgICBzZXR0ZXIgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICAgICAgPyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHZhbHVlIGlzIHJlYWRvbmx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBOT09QO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZ2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLmdldDtcclxuICAgICAgICBzZXR0ZXIgPSBnZXR0ZXJPck9wdGlvbnMuc2V0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgY1JlZiA9IG5ldyBDb21wdXRlZFJlZkltcGwoZ2V0dGVyLCBzZXR0ZXIsIG9ubHlHZXR0ZXIgfHwgIXNldHRlciwgaXNTU1IpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBkZWJ1Z09wdGlvbnMgJiYgIWlzU1NSKSB7XHJcbiAgICAgICAgY1JlZi5lZmZlY3Qub25UcmFjayA9IGRlYnVnT3B0aW9ucy5vblRyYWNrO1xyXG4gICAgICAgIGNSZWYuZWZmZWN0Lm9uVHJpZ2dlciA9IGRlYnVnT3B0aW9ucy5vblRyaWdnZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY1JlZjtcclxufVxuXG52YXIgX2EkMTtcclxuY29uc3QgdGljayA9IC8qI19fUFVSRV9fKi8gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbmNvbnN0IHF1ZXVlID0gW107XHJcbmxldCBxdWV1ZWQgPSBmYWxzZTtcclxuY29uc3Qgc2NoZWR1bGVyID0gKGZuKSA9PiB7XHJcbiAgICBxdWV1ZS5wdXNoKGZuKTtcclxuICAgIGlmICghcXVldWVkKSB7XHJcbiAgICAgICAgcXVldWVkID0gdHJ1ZTtcclxuICAgICAgICB0aWNrLnRoZW4oZmx1c2gpO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBmbHVzaCA9ICgpID0+IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBxdWV1ZVtpXSgpO1xyXG4gICAgfVxyXG4gICAgcXVldWUubGVuZ3RoID0gMDtcclxuICAgIHF1ZXVlZCA9IGZhbHNlO1xyXG59O1xyXG5jbGFzcyBEZWZlcnJlZENvbXB1dGVkUmVmSW1wbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihnZXR0ZXIpIHtcclxuICAgICAgICB0aGlzLmRlcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xyXG4gICAgICAgIHRoaXNbX2EkMV0gPSB0cnVlO1xyXG4gICAgICAgIGxldCBjb21wYXJlVGFyZ2V0O1xyXG4gICAgICAgIGxldCBoYXNDb21wYXJlVGFyZ2V0ID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KGdldHRlciwgKGNvbXB1dGVkVHJpZ2dlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wdXRlZFRyaWdnZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlVGFyZ2V0ID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29tcGFyZVRhcmdldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghc2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUb0NvbXBhcmUgPSBoYXNDb21wYXJlVGFyZ2V0ID8gY29tcGFyZVRhcmdldCA6IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29tcGFyZVRhcmdldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVmZmVjdC5hY3RpdmUgJiYgdGhpcy5fZ2V0KCkgIT09IHZhbHVlVG9Db21wYXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyUmVmVmFsdWUodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjaGFpbmVkIHVwc3RyZWFtIGNvbXB1dGVkcyBhcmUgbm90aWZpZWQgc3luY2hyb25vdXNseSB0byBlbnN1cmVcclxuICAgICAgICAgICAgICAgIC8vIHZhbHVlIGludmFsaWRhdGlvbiBpbiBjYXNlIG9mIHN5bmMgYWNjZXNzOyBub3JtYWwgZWZmZWN0cyBhcmVcclxuICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkIHRvIGJlIHRyaWdnZXJlZCBpbiBzY2hlZHVsZXIuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5kZXApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb21wdXRlZCBpbnN0YW5jZW9mIERlZmVycmVkQ29tcHV0ZWRSZWZJbXBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc2NoZWR1bGVyKHRydWUgLyogY29tcHV0ZWRUcmlnZ2VyICovKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0LmNvbXB1dGVkID0gdGhpcztcclxuICAgIH1cclxuICAgIF9nZXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fdmFsdWUgPSB0aGlzLmVmZmVjdC5ydW4oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICB0cmFja1JlZlZhbHVlKHRoaXMpO1xyXG4gICAgICAgIC8vIHRoZSBjb21wdXRlZCByZWYgbWF5IGdldCB3cmFwcGVkIGJ5IG90aGVyIHByb3hpZXMgZS5nLiByZWFkb25seSgpICMzMzc2XHJcbiAgICAgICAgcmV0dXJuIHRvUmF3KHRoaXMpLl9nZXQoKTtcclxuICAgIH1cclxufVxyXG5fYSQxID0gXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi87XHJcbmZ1bmN0aW9uIGRlZmVycmVkQ29tcHV0ZWQoZ2V0dGVyKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkQ29tcHV0ZWRSZWZJbXBsKGdldHRlcik7XHJcbn1cblxuZXhwb3J0IHsgRWZmZWN0U2NvcGUsIElURVJBVEVfS0VZLCBSZWFjdGl2ZUVmZmVjdCwgY29tcHV0ZWQsIGN1c3RvbVJlZiwgZGVmZXJyZWRDb21wdXRlZCwgZWZmZWN0LCBlZmZlY3RTY29wZSwgZW5hYmxlVHJhY2tpbmcsIGdldEN1cnJlbnRTY29wZSwgaXNQcm94eSwgaXNSZWFjdGl2ZSwgaXNSZWFkb25seSwgaXNSZWYsIGlzU2hhbGxvdywgbWFya1Jhdywgb25TY29wZURpc3Bvc2UsIHBhdXNlVHJhY2tpbmcsIHByb3h5UmVmcywgcmVhY3RpdmUsIHJlYWRvbmx5LCByZWYsIHJlc2V0VHJhY2tpbmcsIHNoYWxsb3dSZWFjdGl2ZSwgc2hhbGxvd1JlYWRvbmx5LCBzaGFsbG93UmVmLCBzdG9wLCB0b1JhdywgdG9SZWYsIHRvUmVmcywgdHJhY2ssIHRyaWdnZXIsIHRyaWdnZXJSZWYsIHVucmVmIH07XG4iLCJpbXBvcnQgeyBwYXVzZVRyYWNraW5nLCByZXNldFRyYWNraW5nLCBpc1JlZiwgdG9SYXcsIGlzU2hhbGxvdyBhcyBpc1NoYWxsb3ckMSwgaXNSZWFjdGl2ZSwgUmVhY3RpdmVFZmZlY3QsIHJlZiwgc2hhbGxvd1JlYWRvbmx5LCB0cmFjaywgcmVhY3RpdmUsIHNoYWxsb3dSZWFjdGl2ZSwgdHJpZ2dlciwgaXNQcm94eSwgRWZmZWN0U2NvcGUsIG1hcmtSYXcsIHByb3h5UmVmcywgY29tcHV0ZWQgYXMgY29tcHV0ZWQkMSwgaXNSZWFkb25seSB9IGZyb20gJ0B2dWUvcmVhY3Rpdml0eSc7XG5leHBvcnQgeyBFZmZlY3RTY29wZSwgUmVhY3RpdmVFZmZlY3QsIGN1c3RvbVJlZiwgZWZmZWN0LCBlZmZlY3RTY29wZSwgZ2V0Q3VycmVudFNjb3BlLCBpc1Byb3h5LCBpc1JlYWN0aXZlLCBpc1JlYWRvbmx5LCBpc1JlZiwgaXNTaGFsbG93LCBtYXJrUmF3LCBvblNjb3BlRGlzcG9zZSwgcHJveHlSZWZzLCByZWFjdGl2ZSwgcmVhZG9ubHksIHJlZiwgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHN0b3AsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0cmlnZ2VyUmVmLCB1bnJlZiB9IGZyb20gJ0B2dWUvcmVhY3Rpdml0eSc7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBpc0FycmF5LCBOT09QLCBnZXRHbG9iYWxUaGlzLCBleHRlbmQsIEVNUFRZX09CSiwgdG9IYW5kbGVyS2V5LCB0b051bWJlciwgaHlwaGVuYXRlLCBjYW1lbGl6ZSwgaXNPYmplY3QsIGlzT24sIGhhc093biwgaXNNb2RlbExpc3RlbmVyLCBoYXNDaGFuZ2VkLCByZW1vdmUsIGlzU2V0LCBpc01hcCwgaXNQbGFpbk9iamVjdCwgaW52b2tlQXJyYXlGbnMsIGlzQnVpbHRJbkRpcmVjdGl2ZSwgY2FwaXRhbGl6ZSwgaXNHbG9iYWxseVdoaXRlbGlzdGVkLCBkZWYsIGlzUmVzZXJ2ZWRQcm9wLCBFTVBUWV9BUlIsIHRvUmF3VHlwZSwgbWFrZU1hcCwgTk8sIG5vcm1hbGl6ZUNsYXNzLCBub3JtYWxpemVTdHlsZSB9IGZyb20gJ0B2dWUvc2hhcmVkJztcbmV4cG9ydCB7IGNhbWVsaXplLCBjYXBpdGFsaXplLCBub3JtYWxpemVDbGFzcywgbm9ybWFsaXplUHJvcHMsIG5vcm1hbGl6ZVN0eWxlLCB0b0Rpc3BsYXlTdHJpbmcsIHRvSGFuZGxlcktleSB9IGZyb20gJ0B2dWUvc2hhcmVkJztcblxuY29uc3Qgc3RhY2sgPSBbXTtcclxuZnVuY3Rpb24gcHVzaFdhcm5pbmdDb250ZXh0KHZub2RlKSB7XHJcbiAgICBzdGFjay5wdXNoKHZub2RlKTtcclxufVxyXG5mdW5jdGlvbiBwb3BXYXJuaW5nQ29udGV4dCgpIHtcclxuICAgIHN0YWNrLnBvcCgpO1xyXG59XHJcbmZ1bmN0aW9uIHdhcm4obXNnLCAuLi5hcmdzKSB7XHJcbiAgICAvLyBhdm9pZCBwcm9wcyBmb3JtYXR0aW5nIG9yIHdhcm4gaGFuZGxlciB0cmFja2luZyBkZXBzIHRoYXQgbWlnaHQgYmUgbXV0YXRlZFxyXG4gICAgLy8gZHVyaW5nIHBhdGNoLCBsZWFkaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cclxuICAgIHBhdXNlVHJhY2tpbmcoKTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gc3RhY2subGVuZ3RoID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0uY29tcG9uZW50IDogbnVsbDtcclxuICAgIGNvbnN0IGFwcFdhcm5IYW5kbGVyID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcud2FybkhhbmRsZXI7XHJcbiAgICBjb25zdCB0cmFjZSA9IGdldENvbXBvbmVudFRyYWNlKCk7XHJcbiAgICBpZiAoYXBwV2FybkhhbmRsZXIpIHtcclxuICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoYXBwV2FybkhhbmRsZXIsIGluc3RhbmNlLCAxMSAvKiBFcnJvckNvZGVzLkFQUF9XQVJOX0hBTkRMRVIgKi8sIFtcclxuICAgICAgICAgICAgbXNnICsgYXJncy5qb2luKCcnKSxcclxuICAgICAgICAgICAgaW5zdGFuY2UgJiYgaW5zdGFuY2UucHJveHksXHJcbiAgICAgICAgICAgIHRyYWNlXHJcbiAgICAgICAgICAgICAgICAubWFwKCh7IHZub2RlIH0pID0+IGBhdCA8JHtmb3JtYXRDb21wb25lbnROYW1lKGluc3RhbmNlLCB2bm9kZS50eXBlKX0+YClcclxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKSxcclxuICAgICAgICAgICAgdHJhY2VcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHdhcm5BcmdzID0gW2BbVnVlIHdhcm5dOiAke21zZ31gLCAuLi5hcmdzXTtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICBpZiAodHJhY2UubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIC8vIGF2b2lkIHNwYW1taW5nIGNvbnNvbGUgZHVyaW5nIHRlc3RzXHJcbiAgICAgICAgICAgICFmYWxzZSkge1xyXG4gICAgICAgICAgICB3YXJuQXJncy5wdXNoKGBcXG5gLCAuLi5mb3JtYXRUcmFjZSh0cmFjZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oLi4ud2FybkFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmVzZXRUcmFja2luZygpO1xyXG59XHJcbmZ1bmN0aW9uIGdldENvbXBvbmVudFRyYWNlKCkge1xyXG4gICAgbGV0IGN1cnJlbnRWTm9kZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKCFjdXJyZW50Vk5vZGUpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICAvLyB3ZSBjYW4ndCBqdXN0IHVzZSB0aGUgc3RhY2sgYmVjYXVzZSBpdCB3aWxsIGJlIGluY29tcGxldGUgZHVyaW5nIHVwZGF0ZXNcclxuICAgIC8vIHRoYXQgZGlkIG5vdCBzdGFydCBmcm9tIHRoZSByb290LiBSZS1jb25zdHJ1Y3QgdGhlIHBhcmVudCBjaGFpbiB1c2luZ1xyXG4gICAgLy8gaW5zdGFuY2UgcGFyZW50IHBvaW50ZXJzLlxyXG4gICAgY29uc3Qgbm9ybWFsaXplZFN0YWNrID0gW107XHJcbiAgICB3aGlsZSAoY3VycmVudFZOb2RlKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdCA9IG5vcm1hbGl6ZWRTdGFja1swXTtcclxuICAgICAgICBpZiAobGFzdCAmJiBsYXN0LnZub2RlID09PSBjdXJyZW50Vk5vZGUpIHtcclxuICAgICAgICAgICAgbGFzdC5yZWN1cnNlQ291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRTdGFjay5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHZub2RlOiBjdXJyZW50Vk5vZGUsXHJcbiAgICAgICAgICAgICAgICByZWN1cnNlQ291bnQ6IDBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlID0gY3VycmVudFZOb2RlLmNvbXBvbmVudCAmJiBjdXJyZW50Vk5vZGUuY29tcG9uZW50LnBhcmVudDtcclxuICAgICAgICBjdXJyZW50Vk5vZGUgPSBwYXJlbnRJbnN0YW5jZSAmJiBwYXJlbnRJbnN0YW5jZS52bm9kZTtcclxuICAgIH1cclxuICAgIHJldHVybiBub3JtYWxpemVkU3RhY2s7XHJcbn1cclxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuZnVuY3Rpb24gZm9ybWF0VHJhY2UodHJhY2UpIHtcclxuICAgIGNvbnN0IGxvZ3MgPSBbXTtcclxuICAgIHRyYWNlLmZvckVhY2goKGVudHJ5LCBpKSA9PiB7XHJcbiAgICAgICAgbG9ncy5wdXNoKC4uLihpID09PSAwID8gW10gOiBbYFxcbmBdKSwgLi4uZm9ybWF0VHJhY2VFbnRyeShlbnRyeSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbG9ncztcclxufVxyXG5mdW5jdGlvbiBmb3JtYXRUcmFjZUVudHJ5KHsgdm5vZGUsIHJlY3Vyc2VDb3VudCB9KSB7XHJcbiAgICBjb25zdCBwb3N0Zml4ID0gcmVjdXJzZUNvdW50ID4gMCA/IGAuLi4gKCR7cmVjdXJzZUNvdW50fSByZWN1cnNpdmUgY2FsbHMpYCA6IGBgO1xyXG4gICAgY29uc3QgaXNSb290ID0gdm5vZGUuY29tcG9uZW50ID8gdm5vZGUuY29tcG9uZW50LnBhcmVudCA9PSBudWxsIDogZmFsc2U7XHJcbiAgICBjb25zdCBvcGVuID0gYCBhdCA8JHtmb3JtYXRDb21wb25lbnROYW1lKHZub2RlLmNvbXBvbmVudCwgdm5vZGUudHlwZSwgaXNSb290KX1gO1xyXG4gICAgY29uc3QgY2xvc2UgPSBgPmAgKyBwb3N0Zml4O1xyXG4gICAgcmV0dXJuIHZub2RlLnByb3BzXHJcbiAgICAgICAgPyBbb3BlbiwgLi4uZm9ybWF0UHJvcHModm5vZGUucHJvcHMpLCBjbG9zZV1cclxuICAgICAgICA6IFtvcGVuICsgY2xvc2VdO1xyXG59XHJcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbmZ1bmN0aW9uIGZvcm1hdFByb3BzKHByb3BzKSB7XHJcbiAgICBjb25zdCByZXMgPSBbXTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcbiAgICBrZXlzLnNsaWNlKDAsIDMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICByZXMucHVzaCguLi5mb3JtYXRQcm9wKGtleSwgcHJvcHNba2V5XSkpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgcmVzLnB1c2goYCAuLi5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuZnVuY3Rpb24gZm9ybWF0UHJvcChrZXksIHZhbHVlLCByYXcpIHtcclxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxyXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XHJcbiAgICAgICAgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiByYXcgPyB2YWx1ZSA6IFtgJHtrZXl9PSR7dmFsdWV9YF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1JlZih2YWx1ZSkpIHtcclxuICAgICAgICB2YWx1ZSA9IGZvcm1hdFByb3Aoa2V5LCB0b1Jhdyh2YWx1ZS52YWx1ZSksIHRydWUpO1xyXG4gICAgICAgIHJldHVybiByYXcgPyB2YWx1ZSA6IFtgJHtrZXl9PVJlZjxgLCB2YWx1ZSwgYD5gXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIFtgJHtrZXl9PWZuJHt2YWx1ZS5uYW1lID8gYDwke3ZhbHVlLm5hbWV9PmAgOiBgYH1gXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiByYXcgPyB2YWx1ZSA6IFtgJHtrZXl9PWAsIHZhbHVlXTtcclxuICAgIH1cclxufVxuXG5jb25zdCBFcnJvclR5cGVTdHJpbmdzID0ge1xyXG4gICAgW1wic3BcIiAvKiBMaWZlY3ljbGVIb29rcy5TRVJWRVJfUFJFRkVUQ0ggKi9dOiAnc2VydmVyUHJlZmV0Y2ggaG9vaycsXHJcbiAgICBbXCJiY1wiIC8qIExpZmVjeWNsZUhvb2tzLkJFRk9SRV9DUkVBVEUgKi9dOiAnYmVmb3JlQ3JlYXRlIGhvb2snLFxyXG4gICAgW1wiY1wiIC8qIExpZmVjeWNsZUhvb2tzLkNSRUFURUQgKi9dOiAnY3JlYXRlZCBob29rJyxcclxuICAgIFtcImJtXCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX01PVU5UICovXTogJ2JlZm9yZU1vdW50IGhvb2snLFxyXG4gICAgW1wibVwiIC8qIExpZmVjeWNsZUhvb2tzLk1PVU5URUQgKi9dOiAnbW91bnRlZCBob29rJyxcclxuICAgIFtcImJ1XCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX1VQREFURSAqL106ICdiZWZvcmVVcGRhdGUgaG9vaycsXHJcbiAgICBbXCJ1XCIgLyogTGlmZWN5Y2xlSG9va3MuVVBEQVRFRCAqL106ICd1cGRhdGVkJyxcclxuICAgIFtcImJ1bVwiIC8qIExpZmVjeWNsZUhvb2tzLkJFRk9SRV9VTk1PVU5UICovXTogJ2JlZm9yZVVubW91bnQgaG9vaycsXHJcbiAgICBbXCJ1bVwiIC8qIExpZmVjeWNsZUhvb2tzLlVOTU9VTlRFRCAqL106ICd1bm1vdW50ZWQgaG9vaycsXHJcbiAgICBbXCJhXCIgLyogTGlmZWN5Y2xlSG9va3MuQUNUSVZBVEVEICovXTogJ2FjdGl2YXRlZCBob29rJyxcclxuICAgIFtcImRhXCIgLyogTGlmZWN5Y2xlSG9va3MuREVBQ1RJVkFURUQgKi9dOiAnZGVhY3RpdmF0ZWQgaG9vaycsXHJcbiAgICBbXCJlY1wiIC8qIExpZmVjeWNsZUhvb2tzLkVSUk9SX0NBUFRVUkVEICovXTogJ2Vycm9yQ2FwdHVyZWQgaG9vaycsXHJcbiAgICBbXCJydGNcIiAvKiBMaWZlY3ljbGVIb29rcy5SRU5ERVJfVFJBQ0tFRCAqL106ICdyZW5kZXJUcmFja2VkIGhvb2snLFxyXG4gICAgW1wicnRnXCIgLyogTGlmZWN5Y2xlSG9va3MuUkVOREVSX1RSSUdHRVJFRCAqL106ICdyZW5kZXJUcmlnZ2VyZWQgaG9vaycsXHJcbiAgICBbMCAvKiBFcnJvckNvZGVzLlNFVFVQX0ZVTkNUSU9OICovXTogJ3NldHVwIGZ1bmN0aW9uJyxcclxuICAgIFsxIC8qIEVycm9yQ29kZXMuUkVOREVSX0ZVTkNUSU9OICovXTogJ3JlbmRlciBmdW5jdGlvbicsXHJcbiAgICBbMiAvKiBFcnJvckNvZGVzLldBVENIX0dFVFRFUiAqL106ICd3YXRjaGVyIGdldHRlcicsXHJcbiAgICBbMyAvKiBFcnJvckNvZGVzLldBVENIX0NBTExCQUNLICovXTogJ3dhdGNoZXIgY2FsbGJhY2snLFxyXG4gICAgWzQgLyogRXJyb3JDb2Rlcy5XQVRDSF9DTEVBTlVQICovXTogJ3dhdGNoZXIgY2xlYW51cCBmdW5jdGlvbicsXHJcbiAgICBbNSAvKiBFcnJvckNvZGVzLk5BVElWRV9FVkVOVF9IQU5ETEVSICovXTogJ25hdGl2ZSBldmVudCBoYW5kbGVyJyxcclxuICAgIFs2IC8qIEVycm9yQ29kZXMuQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVIgKi9dOiAnY29tcG9uZW50IGV2ZW50IGhhbmRsZXInLFxyXG4gICAgWzcgLyogRXJyb3JDb2Rlcy5WTk9ERV9IT09LICovXTogJ3Zub2RlIGhvb2snLFxyXG4gICAgWzggLyogRXJyb3JDb2Rlcy5ESVJFQ1RJVkVfSE9PSyAqL106ICdkaXJlY3RpdmUgaG9vaycsXHJcbiAgICBbOSAvKiBFcnJvckNvZGVzLlRSQU5TSVRJT05fSE9PSyAqL106ICd0cmFuc2l0aW9uIGhvb2snLFxyXG4gICAgWzEwIC8qIEVycm9yQ29kZXMuQVBQX0VSUk9SX0hBTkRMRVIgKi9dOiAnYXBwIGVycm9ySGFuZGxlcicsXHJcbiAgICBbMTEgLyogRXJyb3JDb2Rlcy5BUFBfV0FSTl9IQU5ETEVSICovXTogJ2FwcCB3YXJuSGFuZGxlcicsXHJcbiAgICBbMTIgLyogRXJyb3JDb2Rlcy5GVU5DVElPTl9SRUYgKi9dOiAncmVmIGZ1bmN0aW9uJyxcclxuICAgIFsxMyAvKiBFcnJvckNvZGVzLkFTWU5DX0NPTVBPTkVOVF9MT0FERVIgKi9dOiAnYXN5bmMgY29tcG9uZW50IGxvYWRlcicsXHJcbiAgICBbMTQgLyogRXJyb3JDb2Rlcy5TQ0hFRFVMRVIgKi9dOiAnc2NoZWR1bGVyIGZsdXNoLiBUaGlzIGlzIGxpa2VseSBhIFZ1ZSBpbnRlcm5hbHMgYnVnLiAnICtcclxuICAgICAgICAnUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQgaHR0cHM6Ly9uZXctaXNzdWUudnVlanMub3JnLz9yZXBvPXZ1ZWpzL2NvcmUnXHJcbn07XHJcbmZ1bmN0aW9uIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhmbiwgaW5zdGFuY2UsIHR5cGUsIGFyZ3MpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGFyZ3MgPyBmbiguLi5hcmdzKSA6IGZuKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyLCBpbnN0YW5jZSwgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XHJcbmZ1bmN0aW9uIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncykge1xyXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbFdpdGhFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncyk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiBpc1Byb21pc2UocmVzKSkge1xyXG4gICAgICAgICAgICByZXMuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIHR5cGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGZuW2ldLCBpbnN0YW5jZSwgdHlwZSwgYXJncykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlcztcclxufVxyXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCB0eXBlLCB0aHJvd0luRGV2ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgY29udGV4dFZOb2RlID0gaW5zdGFuY2UgPyBpbnN0YW5jZS52bm9kZSA6IG51bGw7XHJcbiAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICBsZXQgY3VyID0gaW5zdGFuY2UucGFyZW50O1xyXG4gICAgICAgIC8vIHRoZSBleHBvc2VkIGluc3RhbmNlIGlzIHRoZSByZW5kZXIgcHJveHkgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggMi54XHJcbiAgICAgICAgY29uc3QgZXhwb3NlZEluc3RhbmNlID0gaW5zdGFuY2UucHJveHk7XHJcbiAgICAgICAgLy8gaW4gcHJvZHVjdGlvbiB0aGUgaG9vayByZWNlaXZlcyBvbmx5IHRoZSBlcnJvciBjb2RlXHJcbiAgICAgICAgY29uc3QgZXJyb3JJbmZvID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gRXJyb3JUeXBlU3RyaW5nc1t0eXBlXSA6IHR5cGU7XHJcbiAgICAgICAgd2hpbGUgKGN1cikge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvckNhcHR1cmVkSG9va3MgPSBjdXIuZWM7XHJcbiAgICAgICAgICAgIGlmIChlcnJvckNhcHR1cmVkSG9va3MpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JDYXB0dXJlZEhvb2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FwdHVyZWRIb29rc1tpXShlcnIsIGV4cG9zZWRJbnN0YW5jZSwgZXJyb3JJbmZvKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhcHAtbGV2ZWwgaGFuZGxpbmdcclxuICAgICAgICBjb25zdCBhcHBFcnJvckhhbmRsZXIgPSBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZy5lcnJvckhhbmRsZXI7XHJcbiAgICAgICAgaWYgKGFwcEVycm9ySGFuZGxlcikge1xyXG4gICAgICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoYXBwRXJyb3JIYW5kbGVyLCBudWxsLCAxMCAvKiBFcnJvckNvZGVzLkFQUF9FUlJPUl9IQU5ETEVSICovLCBbZXJyLCBleHBvc2VkSW5zdGFuY2UsIGVycm9ySW5mb10pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbG9nRXJyb3IoZXJyLCB0eXBlLCBjb250ZXh0Vk5vZGUsIHRocm93SW5EZXYpO1xyXG59XHJcbmZ1bmN0aW9uIGxvZ0Vycm9yKGVyciwgdHlwZSwgY29udGV4dFZOb2RlLCB0aHJvd0luRGV2ID0gdHJ1ZSkge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGNvbnN0IGluZm8gPSBFcnJvclR5cGVTdHJpbmdzW3R5cGVdO1xyXG4gICAgICAgIGlmIChjb250ZXh0Vk5vZGUpIHtcclxuICAgICAgICAgICAgcHVzaFdhcm5pbmdDb250ZXh0KGNvbnRleHRWTm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdhcm4oYFVuaGFuZGxlZCBlcnJvciR7aW5mbyA/IGAgZHVyaW5nIGV4ZWN1dGlvbiBvZiAke2luZm99YCA6IGBgfWApO1xyXG4gICAgICAgIGlmIChjb250ZXh0Vk5vZGUpIHtcclxuICAgICAgICAgICAgcG9wV2FybmluZ0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3Jhc2ggaW4gZGV2IGJ5IGRlZmF1bHQgc28gaXQncyBtb3JlIG5vdGljZWFibGVcclxuICAgICAgICBpZiAodGhyb3dJbkRldikge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gcmVjb3ZlciBpbiBwcm9kIHRvIHJlZHVjZSB0aGUgaW1wYWN0IG9uIGVuZC11c2VyXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG59XG5cbmxldCBpc0ZsdXNoaW5nID0gZmFsc2U7XHJcbmxldCBpc0ZsdXNoUGVuZGluZyA9IGZhbHNlO1xyXG5jb25zdCBxdWV1ZSA9IFtdO1xyXG5sZXQgZmx1c2hJbmRleCA9IDA7XHJcbmNvbnN0IHBlbmRpbmdQb3N0Rmx1c2hDYnMgPSBbXTtcclxubGV0IGFjdGl2ZVBvc3RGbHVzaENicyA9IG51bGw7XHJcbmxldCBwb3N0Rmx1c2hJbmRleCA9IDA7XHJcbmNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IC8qI19fUFVSRV9fKi8gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbmxldCBjdXJyZW50Rmx1c2hQcm9taXNlID0gbnVsbDtcclxuY29uc3QgUkVDVVJTSU9OX0xJTUlUID0gMTAwO1xyXG5mdW5jdGlvbiBuZXh0VGljayhmbikge1xyXG4gICAgY29uc3QgcCA9IGN1cnJlbnRGbHVzaFByb21pc2UgfHwgcmVzb2x2ZWRQcm9taXNlO1xyXG4gICAgcmV0dXJuIGZuID8gcC50aGVuKHRoaXMgPyBmbi5iaW5kKHRoaXMpIDogZm4pIDogcDtcclxufVxyXG4vLyAjMjc2OFxyXG4vLyBVc2UgYmluYXJ5LXNlYXJjaCB0byBmaW5kIGEgc3VpdGFibGUgcG9zaXRpb24gaW4gdGhlIHF1ZXVlLFxyXG4vLyBzbyB0aGF0IHRoZSBxdWV1ZSBtYWludGFpbnMgdGhlIGluY3JlYXNpbmcgb3JkZXIgb2Ygam9iJ3MgaWQsXHJcbi8vIHdoaWNoIGNhbiBwcmV2ZW50IHRoZSBqb2IgZnJvbSBiZWluZyBza2lwcGVkIGFuZCBhbHNvIGNhbiBhdm9pZCByZXBlYXRlZCBwYXRjaGluZy5cclxuZnVuY3Rpb24gZmluZEluc2VydGlvbkluZGV4KGlkKSB7XHJcbiAgICAvLyB0aGUgc3RhcnQgaW5kZXggc2hvdWxkIGJlIGBmbHVzaEluZGV4ICsgMWBcclxuICAgIGxldCBzdGFydCA9IGZsdXNoSW5kZXggKyAxO1xyXG4gICAgbGV0IGVuZCA9IHF1ZXVlLmxlbmd0aDtcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgPj4+IDE7XHJcbiAgICAgICAgY29uc3QgbWlkZGxlSm9iSWQgPSBnZXRJZChxdWV1ZVttaWRkbGVdKTtcclxuICAgICAgICBtaWRkbGVKb2JJZCA8IGlkID8gKHN0YXJ0ID0gbWlkZGxlICsgMSkgOiAoZW5kID0gbWlkZGxlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdGFydDtcclxufVxyXG5mdW5jdGlvbiBxdWV1ZUpvYihqb2IpIHtcclxuICAgIC8vIHRoZSBkZWR1cGUgc2VhcmNoIHVzZXMgdGhlIHN0YXJ0SW5kZXggYXJndW1lbnQgb2YgQXJyYXkuaW5jbHVkZXMoKVxyXG4gICAgLy8gYnkgZGVmYXVsdCB0aGUgc2VhcmNoIGluZGV4IGluY2x1ZGVzIHRoZSBjdXJyZW50IGpvYiB0aGF0IGlzIGJlaW5nIHJ1blxyXG4gICAgLy8gc28gaXQgY2Fubm90IHJlY3Vyc2l2ZWx5IHRyaWdnZXIgaXRzZWxmIGFnYWluLlxyXG4gICAgLy8gaWYgdGhlIGpvYiBpcyBhIHdhdGNoKCkgY2FsbGJhY2ssIHRoZSBzZWFyY2ggd2lsbCBzdGFydCB3aXRoIGEgKzEgaW5kZXggdG9cclxuICAgIC8vIGFsbG93IGl0IHJlY3Vyc2l2ZWx5IHRyaWdnZXIgaXRzZWxmIC0gaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0b1xyXG4gICAgLy8gZW5zdXJlIGl0IGRvZXNuJ3QgZW5kIHVwIGluIGFuIGluZmluaXRlIGxvb3AuXHJcbiAgICBpZiAoIXF1ZXVlLmxlbmd0aCB8fFxyXG4gICAgICAgICFxdWV1ZS5pbmNsdWRlcyhqb2IsIGlzRmx1c2hpbmcgJiYgam9iLmFsbG93UmVjdXJzZSA/IGZsdXNoSW5kZXggKyAxIDogZmx1c2hJbmRleCkpIHtcclxuICAgICAgICBpZiAoam9iLmlkID09IG51bGwpIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChqb2IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVldWUuc3BsaWNlKGZpbmRJbnNlcnRpb25JbmRleChqb2IuaWQpLCAwLCBqb2IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBxdWV1ZUZsdXNoKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcXVldWVGbHVzaCgpIHtcclxuICAgIGlmICghaXNGbHVzaGluZyAmJiAhaXNGbHVzaFBlbmRpbmcpIHtcclxuICAgICAgICBpc0ZsdXNoUGVuZGluZyA9IHRydWU7XHJcbiAgICAgICAgY3VycmVudEZsdXNoUHJvbWlzZSA9IHJlc29sdmVkUHJvbWlzZS50aGVuKGZsdXNoSm9icyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW52YWxpZGF0ZUpvYihqb2IpIHtcclxuICAgIGNvbnN0IGkgPSBxdWV1ZS5pbmRleE9mKGpvYik7XHJcbiAgICBpZiAoaSA+IGZsdXNoSW5kZXgpIHtcclxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcXVldWVQb3N0Rmx1c2hDYihjYikge1xyXG4gICAgaWYgKCFpc0FycmF5KGNiKSkge1xyXG4gICAgICAgIGlmICghYWN0aXZlUG9zdEZsdXNoQ2JzIHx8XHJcbiAgICAgICAgICAgICFhY3RpdmVQb3N0Rmx1c2hDYnMuaW5jbHVkZXMoY2IsIGNiLmFsbG93UmVjdXJzZSA/IHBvc3RGbHVzaEluZGV4ICsgMSA6IHBvc3RGbHVzaEluZGV4KSkge1xyXG4gICAgICAgICAgICBwZW5kaW5nUG9zdEZsdXNoQ2JzLnB1c2goY2IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGlmIGNiIGlzIGFuIGFycmF5LCBpdCBpcyBhIGNvbXBvbmVudCBsaWZlY3ljbGUgaG9vayB3aGljaCBjYW4gb25seSBiZVxyXG4gICAgICAgIC8vIHRyaWdnZXJlZCBieSBhIGpvYiwgd2hpY2ggaXMgYWxyZWFkeSBkZWR1cGVkIGluIHRoZSBtYWluIHF1ZXVlLCBzb1xyXG4gICAgICAgIC8vIHdlIGNhbiBza2lwIGR1cGxpY2F0ZSBjaGVjayBoZXJlIHRvIGltcHJvdmUgcGVyZlxyXG4gICAgICAgIHBlbmRpbmdQb3N0Rmx1c2hDYnMucHVzaCguLi5jYik7XHJcbiAgICB9XHJcbiAgICBxdWV1ZUZsdXNoKCk7XHJcbn1cclxuZnVuY3Rpb24gZmx1c2hQcmVGbHVzaENicyhzZWVuLCBpID0gZmx1c2hJbmRleCkge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIHNlZW4gPSBzZWVuIHx8IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGZvciAoOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjYiA9IHF1ZXVlW2ldO1xyXG4gICAgICAgIGlmIChjYiAmJiBjYi5wcmUpIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjaGVja1JlY3Vyc2l2ZVVwZGF0ZXMoc2VlbiwgY2IpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBxdWV1ZS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZmx1c2hQb3N0Rmx1c2hDYnMoc2Vlbikge1xyXG4gICAgaWYgKHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZGVkdXBlZCA9IFsuLi5uZXcgU2V0KHBlbmRpbmdQb3N0Rmx1c2hDYnMpXTtcclxuICAgICAgICBwZW5kaW5nUG9zdEZsdXNoQ2JzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gIzE5NDcgYWxyZWFkeSBoYXMgYWN0aXZlIHF1ZXVlLCBuZXN0ZWQgZmx1c2hQb3N0Rmx1c2hDYnMgY2FsbFxyXG4gICAgICAgIGlmIChhY3RpdmVQb3N0Rmx1c2hDYnMpIHtcclxuICAgICAgICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzLnB1c2goLi4uZGVkdXBlZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzID0gZGVkdXBlZDtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHNlZW4gPSBzZWVuIHx8IG5ldyBNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzLnNvcnQoKGEsIGIpID0+IGdldElkKGEpIC0gZ2V0SWQoYikpO1xyXG4gICAgICAgIGZvciAocG9zdEZsdXNoSW5kZXggPSAwOyBwb3N0Rmx1c2hJbmRleCA8IGFjdGl2ZVBvc3RGbHVzaENicy5sZW5ndGg7IHBvc3RGbHVzaEluZGV4KyspIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hlY2tSZWN1cnNpdmVVcGRhdGVzKHNlZW4sIGFjdGl2ZVBvc3RGbHVzaENic1twb3N0Rmx1c2hJbmRleF0pKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3RpdmVQb3N0Rmx1c2hDYnNbcG9zdEZsdXNoSW5kZXhdKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFjdGl2ZVBvc3RGbHVzaENicyA9IG51bGw7XHJcbiAgICAgICAgcG9zdEZsdXNoSW5kZXggPSAwO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGdldElkID0gKGpvYikgPT4gam9iLmlkID09IG51bGwgPyBJbmZpbml0eSA6IGpvYi5pZDtcclxuY29uc3QgY29tcGFyYXRvciA9IChhLCBiKSA9PiB7XHJcbiAgICBjb25zdCBkaWZmID0gZ2V0SWQoYSkgLSBnZXRJZChiKTtcclxuICAgIGlmIChkaWZmID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGEucHJlICYmICFiLnByZSlcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIGlmIChiLnByZSAmJiAhYS5wcmUpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmY7XHJcbn07XHJcbmZ1bmN0aW9uIGZsdXNoSm9icyhzZWVuKSB7XHJcbiAgICBpc0ZsdXNoUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgaXNGbHVzaGluZyA9IHRydWU7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgc2VlbiA9IHNlZW4gfHwgbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXHJcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcclxuICAgIC8vIDEuIENvbXBvbmVudHMgYXJlIHVwZGF0ZWQgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIChiZWNhdXNlIHBhcmVudCBpcyBhbHdheXNcclxuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZCBzbyBpdHMgcmVuZGVyIGVmZmVjdCB3aWxsIGhhdmUgc21hbGxlclxyXG4gICAgLy8gICAgcHJpb3JpdHkgbnVtYmVyKVxyXG4gICAgLy8gMi4gSWYgYSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGR1cmluZyBhIHBhcmVudCBjb21wb25lbnQncyB1cGRhdGUsXHJcbiAgICAvLyAgICBpdHMgdXBkYXRlIGNhbiBiZSBza2lwcGVkLlxyXG4gICAgcXVldWUuc29ydChjb21wYXJhdG9yKTtcclxuICAgIC8vIGNvbmRpdGlvbmFsIHVzYWdlIG9mIGNoZWNrUmVjdXJzaXZlVXBkYXRlIG11c3QgYmUgZGV0ZXJtaW5lZCBvdXQgb2ZcclxuICAgIC8vIHRyeSAuLi4gY2F0Y2ggYmxvY2sgc2luY2UgUm9sbHVwIGJ5IGRlZmF1bHQgZGUtb3B0aW1pemVzIHRyZWVzaGFraW5nXHJcbiAgICAvLyBpbnNpZGUgdHJ5LWNhdGNoLiBUaGlzIGNhbiBsZWF2ZSBhbGwgd2FybmluZyBjb2RlIHVuc2hha2VkLiBBbHRob3VnaFxyXG4gICAgLy8gdGhleSB3b3VsZCBnZXQgZXZlbnR1YWxseSBzaGFrZW4gYnkgYSBtaW5pZmllciBsaWtlIHRlcnNlciwgc29tZSBtaW5pZmllcnNcclxuICAgIC8vIHdvdWxkIGZhaWwgdG8gZG8gdGhhdCAoZS5nLiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTYxMClcclxuICAgIGNvbnN0IGNoZWNrID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgPyAoam9iKSA9PiBjaGVja1JlY3Vyc2l2ZVVwZGF0ZXMoc2Vlbiwgam9iKVxyXG4gICAgICAgIDogTk9PUDtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZm9yIChmbHVzaEluZGV4ID0gMDsgZmx1c2hJbmRleCA8IHF1ZXVlLmxlbmd0aDsgZmx1c2hJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGpvYiA9IHF1ZXVlW2ZsdXNoSW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoam9iICYmIGpvYi5hY3RpdmUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNoZWNrKGpvYikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBydW5uaW5nOmAsIGpvYi5pZClcclxuICAgICAgICAgICAgICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhqb2IsIG51bGwsIDE0IC8qIEVycm9yQ29kZXMuU0NIRURVTEVSICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIGZsdXNoSW5kZXggPSAwO1xyXG4gICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZmx1c2hQb3N0Rmx1c2hDYnMoc2Vlbik7XHJcbiAgICAgICAgaXNGbHVzaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGN1cnJlbnRGbHVzaFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIC8vIHNvbWUgcG9zdEZsdXNoQ2IgcXVldWVkIGpvYnMhXHJcbiAgICAgICAgLy8ga2VlcCBmbHVzaGluZyB1bnRpbCBpdCBkcmFpbnMuXHJcbiAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCB8fCBwZW5kaW5nUG9zdEZsdXNoQ2JzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbHVzaEpvYnMoc2Vlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBmbikge1xyXG4gICAgaWYgKCFzZWVuLmhhcyhmbikpIHtcclxuICAgICAgICBzZWVuLnNldChmbiwgMSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb3VudCA9IHNlZW4uZ2V0KGZuKTtcclxuICAgICAgICBpZiAoY291bnQgPiBSRUNVUlNJT05fTElNSVQpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBmbi5vd25lckluc3RhbmNlO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gaW5zdGFuY2UgJiYgZ2V0Q29tcG9uZW50TmFtZShpbnN0YW5jZS50eXBlKTtcclxuICAgICAgICAgICAgd2FybihgTWF4aW11bSByZWN1cnNpdmUgdXBkYXRlcyBleGNlZWRlZCR7Y29tcG9uZW50TmFtZSA/IGAgaW4gY29tcG9uZW50IDwke2NvbXBvbmVudE5hbWV9PmAgOiBgYH0uIGAgK1xyXG4gICAgICAgICAgICAgICAgYFRoaXMgbWVhbnMgeW91IGhhdmUgYSByZWFjdGl2ZSBlZmZlY3QgdGhhdCBpcyBtdXRhdGluZyBpdHMgb3duIGAgK1xyXG4gICAgICAgICAgICAgICAgYGRlcGVuZGVuY2llcyBhbmQgdGh1cyByZWN1cnNpdmVseSB0cmlnZ2VyaW5nIGl0c2VsZi4gUG9zc2libGUgc291cmNlcyBgICtcclxuICAgICAgICAgICAgICAgIGBpbmNsdWRlIGNvbXBvbmVudCB0ZW1wbGF0ZSwgcmVuZGVyIGZ1bmN0aW9uLCB1cGRhdGVkIGhvb2sgb3IgYCArXHJcbiAgICAgICAgICAgICAgICBgd2F0Y2hlciBzb3VyY2UgZnVuY3Rpb24uYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2Vlbi5zZXQoZm4sIGNvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xyXG5sZXQgaXNIbXJVcGRhdGluZyA9IGZhbHNlO1xyXG5jb25zdCBobXJEaXJ0eUNvbXBvbmVudHMgPSBuZXcgU2V0KCk7XHJcbi8vIEV4cG9zZSB0aGUgSE1SIHJ1bnRpbWUgb24gdGhlIGdsb2JhbCBvYmplY3RcclxuLy8gVGhpcyBtYWtlcyBpdCBlbnRpcmVseSB0cmVlLXNoYWthYmxlIHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBleHBvcnRzIGFuZCBtYWtlc1xyXG4vLyBpdCBlYXNpZXIgdG8gYmUgdXNlZCBpbiB0b29saW5ncyBsaWtlIHZ1ZS1sb2FkZXJcclxuLy8gTm90ZTogZm9yIGEgY29tcG9uZW50IHRvIGJlIGVsaWdpYmxlIGZvciBITVIgaXQgYWxzbyBuZWVkcyB0aGUgX19obXJJZCBvcHRpb25cclxuLy8gdG8gYmUgc2V0IHNvIHRoYXQgaXRzIGluc3RhbmNlcyBjYW4gYmUgcmVnaXN0ZXJlZCAvIHJlbW92ZWQuXHJcbmlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9ITVJfUlVOVElNRV9fID0ge1xyXG4gICAgICAgIGNyZWF0ZVJlY29yZDogdHJ5V3JhcChjcmVhdGVSZWNvcmQpLFxyXG4gICAgICAgIHJlcmVuZGVyOiB0cnlXcmFwKHJlcmVuZGVyKSxcclxuICAgICAgICByZWxvYWQ6IHRyeVdyYXAocmVsb2FkKVxyXG4gICAgfTtcclxufVxyXG5jb25zdCBtYXAgPSBuZXcgTWFwKCk7XHJcbmZ1bmN0aW9uIHJlZ2lzdGVySE1SKGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBpZCA9IGluc3RhbmNlLnR5cGUuX19obXJJZDtcclxuICAgIGxldCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcclxuICAgIGlmICghcmVjb3JkKSB7XHJcbiAgICAgICAgY3JlYXRlUmVjb3JkKGlkLCBpbnN0YW5jZS50eXBlKTtcclxuICAgICAgICByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcclxuICAgIH1cclxuICAgIHJlY29yZC5pbnN0YW5jZXMuYWRkKGluc3RhbmNlKTtcclxufVxyXG5mdW5jdGlvbiB1bnJlZ2lzdGVySE1SKGluc3RhbmNlKSB7XHJcbiAgICBtYXAuZ2V0KGluc3RhbmNlLnR5cGUuX19obXJJZCkuaW5zdGFuY2VzLmRlbGV0ZShpbnN0YW5jZSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUmVjb3JkKGlkLCBpbml0aWFsRGVmKSB7XHJcbiAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBtYXAuc2V0KGlkLCB7XHJcbiAgICAgICAgaW5pdGlhbERlZjogbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoaW5pdGlhbERlZiksXHJcbiAgICAgICAgaW5zdGFuY2VzOiBuZXcgU2V0KClcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoY29tcG9uZW50KSB7XHJcbiAgICByZXR1cm4gaXNDbGFzc0NvbXBvbmVudChjb21wb25lbnQpID8gY29tcG9uZW50Ll9fdmNjT3B0cyA6IGNvbXBvbmVudDtcclxufVxyXG5mdW5jdGlvbiByZXJlbmRlcihpZCwgbmV3UmVuZGVyKSB7XHJcbiAgICBjb25zdCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcclxuICAgIGlmICghcmVjb3JkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gdXBkYXRlIGluaXRpYWwgcmVjb3JkIChmb3Igbm90LXlldC1yZW5kZXJlZCBjb21wb25lbnQpXHJcbiAgICByZWNvcmQuaW5pdGlhbERlZi5yZW5kZXIgPSBuZXdSZW5kZXI7XHJcbiAgICBbLi4ucmVjb3JkLmluc3RhbmNlc10uZm9yRWFjaChpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgaWYgKG5ld1JlbmRlcikge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIgPSBuZXdSZW5kZXI7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KGluc3RhbmNlLnR5cGUpLnJlbmRlciA9IG5ld1JlbmRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2UucmVuZGVyQ2FjaGUgPSBbXTtcclxuICAgICAgICAvLyB0aGlzIGZsYWcgZm9yY2VzIGNoaWxkIGNvbXBvbmVudHMgd2l0aCBzbG90IGNvbnRlbnQgdG8gdXBkYXRlXHJcbiAgICAgICAgaXNIbXJVcGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UudXBkYXRlKCk7XHJcbiAgICAgICAgaXNIbXJVcGRhdGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gcmVsb2FkKGlkLCBuZXdDb21wKSB7XHJcbiAgICBjb25zdCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcclxuICAgIGlmICghcmVjb3JkKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIG5ld0NvbXAgPSBub3JtYWxpemVDbGFzc0NvbXBvbmVudChuZXdDb21wKTtcclxuICAgIC8vIHVwZGF0ZSBpbml0aWFsIGRlZiAoZm9yIG5vdC15ZXQtcmVuZGVyZWQgY29tcG9uZW50cylcclxuICAgIHVwZGF0ZUNvbXBvbmVudERlZihyZWNvcmQuaW5pdGlhbERlZiwgbmV3Q29tcCk7XHJcbiAgICAvLyBjcmVhdGUgYSBzbmFwc2hvdCB3aGljaCBhdm9pZHMgdGhlIHNldCBiZWluZyBtdXRhdGVkIGR1cmluZyB1cGRhdGVzXHJcbiAgICBjb25zdCBpbnN0YW5jZXMgPSBbLi4ucmVjb3JkLmluc3RhbmNlc107XHJcbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xyXG4gICAgICAgIGNvbnN0IG9sZENvbXAgPSBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbnN0YW5jZS50eXBlKTtcclxuICAgICAgICBpZiAoIWhtckRpcnR5Q29tcG9uZW50cy5oYXMob2xkQ29tcCkpIHtcclxuICAgICAgICAgICAgLy8gMS4gVXBkYXRlIGV4aXN0aW5nIGNvbXAgZGVmaW5pdGlvbiB0byBtYXRjaCBuZXcgb25lXHJcbiAgICAgICAgICAgIGlmIChvbGRDb21wICE9PSByZWNvcmQuaW5pdGlhbERlZikge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50RGVmKG9sZENvbXAsIG5ld0NvbXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIDIuIG1hcmsgZGVmaW5pdGlvbiBkaXJ0eS4gVGhpcyBmb3JjZXMgdGhlIHJlbmRlcmVyIHRvIHJlcGxhY2UgdGhlXHJcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudCBvbiBwYXRjaC5cclxuICAgICAgICAgICAgaG1yRGlydHlDb21wb25lbnRzLmFkZChvbGRDb21wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMy4gaW52YWxpZGF0ZSBvcHRpb25zIHJlc29sdXRpb24gY2FjaGVcclxuICAgICAgICBpbnN0YW5jZS5hcHBDb250ZXh0Lm9wdGlvbnNDYWNoZS5kZWxldGUoaW5zdGFuY2UudHlwZSk7XHJcbiAgICAgICAgLy8gNC4gYWN0dWFsbHkgdXBkYXRlXHJcbiAgICAgICAgaWYgKGluc3RhbmNlLmNlUmVsb2FkKSB7XHJcbiAgICAgICAgICAgIC8vIGN1c3RvbSBlbGVtZW50XHJcbiAgICAgICAgICAgIGhtckRpcnR5Q29tcG9uZW50cy5hZGQob2xkQ29tcCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmNlUmVsb2FkKG5ld0NvbXAuc3R5bGVzKTtcclxuICAgICAgICAgICAgaG1yRGlydHlDb21wb25lbnRzLmRlbGV0ZShvbGRDb21wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2UucGFyZW50KSB7XHJcbiAgICAgICAgICAgIC8vIDQuIEZvcmNlIHRoZSBwYXJlbnQgaW5zdGFuY2UgdG8gcmUtcmVuZGVyLiBUaGlzIHdpbGwgY2F1c2UgYWxsIHVwZGF0ZWRcclxuICAgICAgICAgICAgLy8gY29tcG9uZW50cyB0byBiZSB1bm1vdW50ZWQgYW5kIHJlLW1vdW50ZWQuIFF1ZXVlIHRoZSB1cGRhdGUgc28gdGhhdCB3ZVxyXG4gICAgICAgICAgICAvLyBkb24ndCBlbmQgdXAgZm9yY2luZyB0aGUgc2FtZSBwYXJlbnQgdG8gcmUtcmVuZGVyIG11bHRpcGxlIHRpbWVzLlxyXG4gICAgICAgICAgICBxdWV1ZUpvYihpbnN0YW5jZS5wYXJlbnQudXBkYXRlKTtcclxuICAgICAgICAgICAgLy8gaW5zdGFuY2UgaXMgdGhlIGlubmVyIGNvbXBvbmVudCBvZiBhbiBhc3luYyBjdXN0b20gZWxlbWVudFxyXG4gICAgICAgICAgICAvLyBpbnZva2UgdG8gcmVzZXQgc3R5bGVzXHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnQudHlwZS5fX2FzeW5jTG9hZGVyICYmXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5wYXJlbnQuY2VSZWxvYWQpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnBhcmVudC5jZVJlbG9hZChuZXdDb21wLnN0eWxlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5yZWxvYWQpIHtcclxuICAgICAgICAgICAgLy8gcm9vdCBpbnN0YW5jZSBtb3VudGVkIHZpYSBjcmVhdGVBcHAoKSBoYXMgYSByZWxvYWQgbWV0aG9kXHJcbiAgICAgICAgICAgIGluc3RhbmNlLmFwcENvbnRleHQucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8vIHJvb3QgaW5zdGFuY2UgaW5zaWRlIHRyZWUgY3JlYXRlZCB2aWEgcmF3IHJlbmRlcigpLiBGb3JjZSByZWxvYWQuXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0hNUl0gUm9vdCBvciBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlIG1vZGlmaWVkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyA1LiBtYWtlIHN1cmUgdG8gY2xlYW51cCBkaXJ0eSBobXIgY29tcG9uZW50cyBhZnRlciB1cGRhdGVcclxuICAgIHF1ZXVlUG9zdEZsdXNoQ2IoKCkgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgICAgIGhtckRpcnR5Q29tcG9uZW50cy5kZWxldGUobm9ybWFsaXplQ2xhc3NDb21wb25lbnQoaW5zdGFuY2UudHlwZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudERlZihvbGRDb21wLCBuZXdDb21wKSB7XHJcbiAgICBleHRlbmQob2xkQ29tcCwgbmV3Q29tcCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvbGRDb21wKSB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ19fZmlsZScgJiYgIShrZXkgaW4gbmV3Q29tcCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIG9sZENvbXBba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdHJ5V3JhcChmbikge1xyXG4gICAgcmV0dXJuIChpZCwgYXJnKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZuKGlkLCBhcmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtITVJdIFNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBWdWUgY29tcG9uZW50IGhvdC1yZWxvYWQuIGAgK1xyXG4gICAgICAgICAgICAgICAgYEZ1bGwgcmVsb2FkIHJlcXVpcmVkLmApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxubGV0IGRldnRvb2xzO1xyXG5sZXQgYnVmZmVyID0gW107XHJcbmxldCBkZXZ0b29sc05vdEluc3RhbGxlZCA9IGZhbHNlO1xyXG5mdW5jdGlvbiBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XHJcbiAgICBpZiAoZGV2dG9vbHMpIHtcclxuICAgICAgICBkZXZ0b29scy5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFkZXZ0b29sc05vdEluc3RhbGxlZCkge1xyXG4gICAgICAgIGJ1ZmZlci5wdXNoKHsgZXZlbnQsIGFyZ3MgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gc2V0RGV2dG9vbHNIb29rKGhvb2ssIHRhcmdldCkge1xyXG4gICAgdmFyIF9hLCBfYjtcclxuICAgIGRldnRvb2xzID0gaG9vaztcclxuICAgIGlmIChkZXZ0b29scykge1xyXG4gICAgICAgIGRldnRvb2xzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGJ1ZmZlci5mb3JFYWNoKCh7IGV2ZW50LCBhcmdzIH0pID0+IGRldnRvb2xzLmVtaXQoZXZlbnQsIC4uLmFyZ3MpKTtcclxuICAgICAgICBidWZmZXIgPSBbXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKFxyXG4gICAgLy8gaGFuZGxlIGxhdGUgZGV2dG9vbHMgaW5qZWN0aW9uIC0gb25seSBkbyB0aGlzIGlmIHdlIGFyZSBpbiBhbiBhY3R1YWxcclxuICAgIC8vIGJyb3dzZXIgZW52aXJvbm1lbnQgdG8gYXZvaWQgdGhlIHRpbWVyIGhhbmRsZSBzdGFsbGluZyB0ZXN0IHJ1bm5lciBleGl0XHJcbiAgICAvLyAoIzQ4MTUpXHJcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgIC8vIHNvbWUgZW52cyBtb2NrIHdpbmRvdyBidXQgbm90IGZ1bGx5XHJcbiAgICAgICAgd2luZG93LkhUTUxFbGVtZW50ICYmXHJcbiAgICAgICAgLy8gYWxzbyBleGNsdWRlIGpzZG9tXHJcbiAgICAgICAgISgoX2IgPSAoX2EgPSB3aW5kb3cubmF2aWdhdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXNlckFnZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5jbHVkZXMoJ2pzZG9tJykpKSB7XHJcbiAgICAgICAgY29uc3QgcmVwbGF5ID0gKHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fID1cclxuICAgICAgICAgICAgdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX18gfHwgW10pO1xyXG4gICAgICAgIHJlcGxheS5wdXNoKChuZXdIb29rKSA9PiB7XHJcbiAgICAgICAgICAgIHNldERldnRvb2xzSG9vayhuZXdIb29rLCB0YXJnZXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGNsZWFyIGJ1ZmZlciBhZnRlciAzcyAtIHRoZSB1c2VyIHByb2JhYmx5IGRvZXNuJ3QgaGF2ZSBkZXZ0b29scyBpbnN0YWxsZWRcclxuICAgICAgICAvLyBhdCBhbGwsIGFuZCBrZWVwaW5nIHRoZSBidWZmZXIgd2lsbCBjYXVzZSBtZW1vcnkgbGVha3MgKCM0NzM4KVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRldnRvb2xzKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBkZXZ0b29sc05vdEluc3RhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDMwMDApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gbm9uLWJyb3dzZXIgZW52LCBhc3N1bWUgbm90IGluc3RhbGxlZFxyXG4gICAgICAgIGRldnRvb2xzTm90SW5zdGFsbGVkID0gdHJ1ZTtcclxuICAgICAgICBidWZmZXIgPSBbXTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBkZXZ0b29sc0luaXRBcHAoYXBwLCB2ZXJzaW9uKSB7XHJcbiAgICBlbWl0KFwiYXBwOmluaXRcIiAvKiBEZXZ0b29sc0hvb2tzLkFQUF9JTklUICovLCBhcHAsIHZlcnNpb24sIHtcclxuICAgICAgICBGcmFnbWVudCxcclxuICAgICAgICBUZXh0LFxyXG4gICAgICAgIENvbW1lbnQsXHJcbiAgICAgICAgU3RhdGljXHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBkZXZ0b29sc1VubW91bnRBcHAoYXBwKSB7XHJcbiAgICBlbWl0KFwiYXBwOnVubW91bnRcIiAvKiBEZXZ0b29sc0hvb2tzLkFQUF9VTk1PVU5UICovLCBhcHApO1xyXG59XHJcbmNvbnN0IGRldnRvb2xzQ29tcG9uZW50QWRkZWQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZURldnRvb2xzQ29tcG9uZW50SG9vayhcImNvbXBvbmVudDphZGRlZFwiIC8qIERldnRvb2xzSG9va3MuQ09NUE9ORU5UX0FEREVEICovKTtcclxuY29uc3QgZGV2dG9vbHNDb21wb25lbnRVcGRhdGVkID0gXHJcbi8qI19fUFVSRV9fKi8gY3JlYXRlRGV2dG9vbHNDb21wb25lbnRIb29rKFwiY29tcG9uZW50OnVwZGF0ZWRcIiAvKiBEZXZ0b29sc0hvb2tzLkNPTVBPTkVOVF9VUERBVEVEICovKTtcclxuY29uc3QgZGV2dG9vbHNDb21wb25lbnRSZW1vdmVkID0gXHJcbi8qI19fUFVSRV9fKi8gY3JlYXRlRGV2dG9vbHNDb21wb25lbnRIb29rKFwiY29tcG9uZW50OnJlbW92ZWRcIiAvKiBEZXZ0b29sc0hvb2tzLkNPTVBPTkVOVF9SRU1PVkVEICovKTtcclxuZnVuY3Rpb24gY3JlYXRlRGV2dG9vbHNDb21wb25lbnRIb29rKGhvb2spIHtcclxuICAgIHJldHVybiAoY29tcG9uZW50KSA9PiB7XHJcbiAgICAgICAgZW1pdChob29rLCBjb21wb25lbnQuYXBwQ29udGV4dC5hcHAsIGNvbXBvbmVudC51aWQsIGNvbXBvbmVudC5wYXJlbnQgPyBjb21wb25lbnQucGFyZW50LnVpZCA6IHVuZGVmaW5lZCwgY29tcG9uZW50KTtcclxuICAgIH07XHJcbn1cclxuY29uc3QgZGV2dG9vbHNQZXJmU3RhcnQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZURldnRvb2xzUGVyZm9ybWFuY2VIb29rKFwicGVyZjpzdGFydFwiIC8qIERldnRvb2xzSG9va3MuUEVSRk9STUFOQ0VfU1RBUlQgKi8pO1xyXG5jb25zdCBkZXZ0b29sc1BlcmZFbmQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZURldnRvb2xzUGVyZm9ybWFuY2VIb29rKFwicGVyZjplbmRcIiAvKiBEZXZ0b29sc0hvb2tzLlBFUkZPUk1BTkNFX0VORCAqLyk7XHJcbmZ1bmN0aW9uIGNyZWF0ZURldnRvb2xzUGVyZm9ybWFuY2VIb29rKGhvb2spIHtcclxuICAgIHJldHVybiAoY29tcG9uZW50LCB0eXBlLCB0aW1lKSA9PiB7XHJcbiAgICAgICAgZW1pdChob29rLCBjb21wb25lbnQuYXBwQ29udGV4dC5hcHAsIGNvbXBvbmVudC51aWQsIGNvbXBvbmVudCwgdHlwZSwgdGltZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGRldnRvb2xzQ29tcG9uZW50RW1pdChjb21wb25lbnQsIGV2ZW50LCBwYXJhbXMpIHtcclxuICAgIGVtaXQoXCJjb21wb25lbnQ6ZW1pdFwiIC8qIERldnRvb2xzSG9va3MuQ09NUE9ORU5UX0VNSVQgKi8sIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCwgY29tcG9uZW50LCBldmVudCwgcGFyYW1zKTtcclxufVxuXG5mdW5jdGlvbiBlbWl0JDEoaW5zdGFuY2UsIGV2ZW50LCAuLi5yYXdBcmdzKSB7XHJcbiAgICBpZiAoaW5zdGFuY2UuaXNVbm1vdW50ZWQpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgcHJvcHMgPSBpbnN0YW5jZS52bm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgY29uc3QgeyBlbWl0c09wdGlvbnMsIHByb3BzT3B0aW9uczogW3Byb3BzT3B0aW9uc10gfSA9IGluc3RhbmNlO1xyXG4gICAgICAgIGlmIChlbWl0c09wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKCEoZXZlbnQgaW4gZW1pdHNPcHRpb25zKSAmJlxyXG4gICAgICAgICAgICAgICAgIShmYWxzZSApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BzT3B0aW9ucyB8fCAhKHRvSGFuZGxlcktleShldmVudCkgaW4gcHJvcHNPcHRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYENvbXBvbmVudCBlbWl0dGVkIGV2ZW50IFwiJHtldmVudH1cIiBidXQgaXQgaXMgbmVpdGhlciBkZWNsYXJlZCBpbiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHRoZSBlbWl0cyBvcHRpb24gbm9yIGFzIGFuIFwiJHt0b0hhbmRsZXJLZXkoZXZlbnQpfVwiIHByb3AuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSBlbWl0c09wdGlvbnNbZXZlbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdG9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0b3IoLi4ucmF3QXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYEludmFsaWQgZXZlbnQgYXJndW1lbnRzOiBldmVudCB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgZXZlbnQgXCIke2V2ZW50fVwiLmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhcmdzID0gcmF3QXJncztcclxuICAgIGNvbnN0IGlzTW9kZWxMaXN0ZW5lciA9IGV2ZW50LnN0YXJ0c1dpdGgoJ3VwZGF0ZTonKTtcclxuICAgIC8vIGZvciB2LW1vZGVsIHVwZGF0ZTp4eHggZXZlbnRzLCBhcHBseSBtb2RpZmllcnMgb24gYXJnc1xyXG4gICAgY29uc3QgbW9kZWxBcmcgPSBpc01vZGVsTGlzdGVuZXIgJiYgZXZlbnQuc2xpY2UoNyk7XHJcbiAgICBpZiAobW9kZWxBcmcgJiYgbW9kZWxBcmcgaW4gcHJvcHMpIHtcclxuICAgICAgICBjb25zdCBtb2RpZmllcnNLZXkgPSBgJHttb2RlbEFyZyA9PT0gJ21vZGVsVmFsdWUnID8gJ21vZGVsJyA6IG1vZGVsQXJnfU1vZGlmaWVyc2A7XHJcbiAgICAgICAgY29uc3QgeyBudW1iZXIsIHRyaW0gfSA9IHByb3BzW21vZGlmaWVyc0tleV0gfHwgRU1QVFlfT0JKO1xyXG4gICAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgICAgIGFyZ3MgPSByYXdBcmdzLm1hcChhID0+IGEudHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG51bWJlcikge1xyXG4gICAgICAgICAgICBhcmdzID0gcmF3QXJncy5tYXAodG9OdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgZGV2dG9vbHNDb21wb25lbnRFbWl0KGluc3RhbmNlLCBldmVudCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgcHJvcHNbdG9IYW5kbGVyS2V5KGxvd2VyQ2FzZUV2ZW50KV0pIHtcclxuICAgICAgICAgICAgd2FybihgRXZlbnQgXCIke2xvd2VyQ2FzZUV2ZW50fVwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IGAgK1xyXG4gICAgICAgICAgICAgICAgYCR7Zm9ybWF0Q29tcG9uZW50TmFtZShpbnN0YW5jZSwgaW5zdGFuY2UudHlwZSl9IGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcIiR7ZXZlbnR9XCIuIGAgK1xyXG4gICAgICAgICAgICAgICAgYE5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIGAgK1xyXG4gICAgICAgICAgICAgICAgYHYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBgICtcclxuICAgICAgICAgICAgICAgIGBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcIiR7aHlwaGVuYXRlKGV2ZW50KX1cIiBpbnN0ZWFkIG9mIFwiJHtldmVudH1cIi5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgaGFuZGxlck5hbWU7XHJcbiAgICBsZXQgaGFuZGxlciA9IHByb3BzWyhoYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShldmVudCkpXSB8fFxyXG4gICAgICAgIC8vIGFsc28gdHJ5IGNhbWVsQ2FzZSBldmVudCBoYW5kbGVyICgjMjI0OSlcclxuICAgICAgICBwcm9wc1soaGFuZGxlck5hbWUgPSB0b0hhbmRsZXJLZXkoY2FtZWxpemUoZXZlbnQpKSldO1xyXG4gICAgLy8gZm9yIHYtbW9kZWwgdXBkYXRlOnh4eCBldmVudHMsIGFsc28gdHJpZ2dlciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRcclxuICAgIC8vIGZvciBwcm9wcyBwYXNzZWQgdmlhIGtlYmFiLWNhc2VcclxuICAgIGlmICghaGFuZGxlciAmJiBpc01vZGVsTGlzdGVuZXIpIHtcclxuICAgICAgICBoYW5kbGVyID0gcHJvcHNbKGhhbmRsZXJOYW1lID0gdG9IYW5kbGVyS2V5KGh5cGhlbmF0ZShldmVudCkpKV07XHJcbiAgICB9XHJcbiAgICBpZiAoaGFuZGxlcikge1xyXG4gICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGhhbmRsZXIsIGluc3RhbmNlLCA2IC8qIEVycm9yQ29kZXMuQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVIgKi8sIGFyZ3MpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb25jZUhhbmRsZXIgPSBwcm9wc1toYW5kbGVyTmFtZSArIGBPbmNlYF07XHJcbiAgICBpZiAob25jZUhhbmRsZXIpIHtcclxuICAgICAgICBpZiAoIWluc3RhbmNlLmVtaXR0ZWQpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UuZW1pdHRlZCA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbnN0YW5jZS5lbWl0dGVkW2hhbmRsZXJOYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlLmVtaXR0ZWRbaGFuZGxlck5hbWVdID0gdHJ1ZTtcclxuICAgICAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhvbmNlSGFuZGxlciwgaW5zdGFuY2UsIDYgLyogRXJyb3JDb2Rlcy5DT01QT05FTlRfRVZFTlRfSEFORExFUiAqLywgYXJncyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplRW1pdHNPcHRpb25zKGNvbXAsIGFwcENvbnRleHQsIGFzTWl4aW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY2FjaGUgPSBhcHBDb250ZXh0LmVtaXRzQ2FjaGU7XHJcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoY29tcCk7XHJcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gY2FjaGVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmF3ID0gY29tcC5lbWl0cztcclxuICAgIGxldCBub3JtYWxpemVkID0ge307XHJcbiAgICAvLyBhcHBseSBtaXhpbi9leHRlbmRzIHByb3BzXHJcbiAgICBsZXQgaGFzRXh0ZW5kcyA9IGZhbHNlO1xyXG4gICAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgIWlzRnVuY3Rpb24oY29tcCkpIHtcclxuICAgICAgICBjb25zdCBleHRlbmRFbWl0cyA9IChyYXcpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZyb21FeHRlbmQgPSBub3JtYWxpemVFbWl0c09wdGlvbnMocmF3LCBhcHBDb250ZXh0LCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRGcm9tRXh0ZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNFeHRlbmRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGV4dGVuZChub3JtYWxpemVkLCBub3JtYWxpemVkRnJvbUV4dGVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghYXNNaXhpbiAmJiBhcHBDb250ZXh0Lm1peGlucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXBwQ29udGV4dC5taXhpbnMuZm9yRWFjaChleHRlbmRFbWl0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21wLmV4dGVuZHMpIHtcclxuICAgICAgICAgICAgZXh0ZW5kRW1pdHMoY29tcC5leHRlbmRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXAubWl4aW5zKSB7XHJcbiAgICAgICAgICAgIGNvbXAubWl4aW5zLmZvckVhY2goZXh0ZW5kRW1pdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghcmF3ICYmICFoYXNFeHRlbmRzKSB7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnNldChjb21wLCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBcnJheShyYXcpKSB7XHJcbiAgICAgICAgcmF3LmZvckVhY2goa2V5ID0+IChub3JtYWxpemVkW2tleV0gPSBudWxsKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBleHRlbmQobm9ybWFsaXplZCwgcmF3KTtcclxuICAgIH1cclxuICAgIGlmIChpc09iamVjdChjb21wKSkge1xyXG4gICAgICAgIGNhY2hlLnNldChjb21wLCBub3JtYWxpemVkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG59XHJcbi8vIENoZWNrIGlmIGFuIGluY29taW5nIHByb3Aga2V5IGlzIGEgZGVjbGFyZWQgZW1pdCBldmVudCBsaXN0ZW5lci5cclxuLy8gZS5nLiBXaXRoIGBlbWl0czogeyBjbGljazogbnVsbCB9YCwgcHJvcHMgbmFtZWQgYG9uQ2xpY2tgIGFuZCBgb25jbGlja2AgYXJlXHJcbi8vIGJvdGggY29uc2lkZXJlZCBtYXRjaGVkIGxpc3RlbmVycy5cclxuZnVuY3Rpb24gaXNFbWl0TGlzdGVuZXIob3B0aW9ucywga2V5KSB7XHJcbiAgICBpZiAoIW9wdGlvbnMgfHwgIWlzT24oa2V5KSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGtleSA9IGtleS5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sICcnKTtcclxuICAgIHJldHVybiAoaGFzT3duKG9wdGlvbnMsIGtleVswXS50b0xvd2VyQ2FzZSgpICsga2V5LnNsaWNlKDEpKSB8fFxyXG4gICAgICAgIGhhc093bihvcHRpb25zLCBoeXBoZW5hdGUoa2V5KSkgfHxcclxuICAgICAgICBoYXNPd24ob3B0aW9ucywga2V5KSk7XHJcbn1cblxuLyoqXHJcbiAqIG1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIGluc3RhbmNlIGZvciBhc3NldCByZXNvbHV0aW9uIChlLmcuXHJcbiAqIHJlc29sdmVDb21wb25lbnQsIHJlc29sdmVEaXJlY3RpdmUpIGR1cmluZyByZW5kZXJcclxuICovXHJcbmxldCBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xyXG5sZXQgY3VycmVudFNjb3BlSWQgPSBudWxsO1xyXG4vKipcclxuICogTm90ZTogcmVuZGVyaW5nIGNhbGxzIG1heWJlIG5lc3RlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBhcmVudCByZW5kZXJpbmdcclxuICogaW5zdGFuY2UgaWYgcHJlc2VudCwgd2hpY2ggc2hvdWxkIGJlIHJlc3RvcmVkIGFmdGVyIHRoZSByZW5kZXIgaXMgZG9uZTpcclxuICpcclxuICogYGBganNcclxuICogY29uc3QgcHJldiA9IHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZShpKVxyXG4gKiAvLyAuLi5yZW5kZXJcclxuICogc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKHByZXYpXHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBwcmV2ID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xyXG4gICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICBjdXJyZW50U2NvcGVJZCA9IChpbnN0YW5jZSAmJiBpbnN0YW5jZS50eXBlLl9fc2NvcGVJZCkgfHwgbnVsbDtcclxuICAgIHJldHVybiBwcmV2O1xyXG59XHJcbi8qKlxyXG4gKiBTZXQgc2NvcGUgaWQgd2hlbiBjcmVhdGluZyBob2lzdGVkIHZub2Rlcy5cclxuICogQHByaXZhdGUgY29tcGlsZXIgaGVscGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXNoU2NvcGVJZChpZCkge1xyXG4gICAgY3VycmVudFNjb3BlSWQgPSBpZDtcclxufVxyXG4vKipcclxuICogVGVjaG5pY2FsbHkgd2Ugbm8gbG9uZ2VyIG5lZWQgdGhpcyBhZnRlciAzLjAuOCBidXQgd2UgbmVlZCB0byBrZWVwIHRoZSBzYW1lXHJcbiAqIEFQSSBmb3IgYmFja3dhcmRzIGNvbXBhdCB3LyBjb2RlIGdlbmVyYXRlZCBieSBjb21waWxlcnMuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBwb3BTY29wZUlkKCkge1xyXG4gICAgY3VycmVudFNjb3BlSWQgPSBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBPbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCB3aXRoU2NvcGVJZCA9IChfaWQpID0+IHdpdGhDdHg7XHJcbi8qKlxyXG4gKiBXcmFwIGEgc2xvdCBmdW5jdGlvbiB0byBtZW1vaXplIGN1cnJlbnQgcmVuZGVyaW5nIGluc3RhbmNlXHJcbiAqIEBwcml2YXRlIGNvbXBpbGVyIGhlbHBlclxyXG4gKi9cclxuZnVuY3Rpb24gd2l0aEN0eChmbiwgY3R4ID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLCBpc05vblNjb3BlZFNsb3QgLy8gZmFsc2Ugb25seVxyXG4pIHtcclxuICAgIGlmICghY3R4KVxyXG4gICAgICAgIHJldHVybiBmbjtcclxuICAgIC8vIGFscmVhZHkgbm9ybWFsaXplZFxyXG4gICAgaWYgKGZuLl9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVuZGVyRm5XaXRoQ29udGV4dCA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgLy8gSWYgYSB1c2VyIGNhbGxzIGEgY29tcGlsZWQgc2xvdCBpbnNpZGUgYSB0ZW1wbGF0ZSBleHByZXNzaW9uICgjMTc0NSksIGl0XHJcbiAgICAgICAgLy8gY2FuIG1lc3MgdXAgYmxvY2sgdHJhY2tpbmcsIHNvIGJ5IGRlZmF1bHQgd2UgZGlzYWJsZSBibG9jayB0cmFja2luZyBhbmRcclxuICAgICAgICAvLyBmb3JjZSBiYWlsIG91dCB3aGVuIGludm9raW5nIGEgY29tcGlsZWQgc2xvdCAoaW5kaWNhdGVkIGJ5IHRoZSAuX2QgZmxhZykuXHJcbiAgICAgICAgLy8gVGhpcyBpc24ndCBuZWNlc3NhcnkgaWYgcmVuZGVyaW5nIGEgY29tcGlsZWQgYDxzbG90PmAsIHNvIHdlIGZsaXAgdGhlXHJcbiAgICAgICAgLy8gLl9kIGZsYWcgb2ZmIHdoZW4gaW52b2tpbmcgdGhlIHdyYXBwZWQgZm4gaW5zaWRlIGByZW5kZXJTbG90YC5cclxuICAgICAgICBpZiAocmVuZGVyRm5XaXRoQ29udGV4dC5fZCkge1xyXG4gICAgICAgICAgICBzZXRCbG9ja1RyYWNraW5nKC0xKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJldkluc3RhbmNlID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGN0eCk7XHJcbiAgICAgICAgY29uc3QgcmVzID0gZm4oLi4uYXJncyk7XHJcbiAgICAgICAgc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKHByZXZJbnN0YW5jZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckZuV2l0aENvbnRleHQuX2QpIHtcclxuICAgICAgICAgICAgc2V0QmxvY2tUcmFja2luZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgZGV2dG9vbHNDb21wb25lbnRVcGRhdGVkKGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9O1xyXG4gICAgLy8gbWFyayBub3JtYWxpemVkIHRvIGF2b2lkIGR1cGxpY2F0ZWQgd3JhcHBpbmdcclxuICAgIHJlbmRlckZuV2l0aENvbnRleHQuX24gPSB0cnVlO1xyXG4gICAgLy8gbWFyayB0aGlzIGFzIGNvbXBpbGVkIGJ5IGRlZmF1bHRcclxuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiB2bm9kZS50cyAtPiBub3JtYWxpemVDaGlsZHJlbigpIHRvIHNldCB0aGUgc2xvdFxyXG4gICAgLy8gcmVuZGVyaW5nIGZsYWcuXHJcbiAgICByZW5kZXJGbldpdGhDb250ZXh0Ll9jID0gdHJ1ZTtcclxuICAgIC8vIGRpc2FibGUgYmxvY2sgdHJhY2tpbmcgYnkgZGVmYXVsdFxyXG4gICAgcmVuZGVyRm5XaXRoQ29udGV4dC5fZCA9IHRydWU7XHJcbiAgICByZXR1cm4gcmVuZGVyRm5XaXRoQ29udGV4dDtcclxufVxuXG4vKipcclxuICogZGV2IG9ubHkgZmxhZyB0byB0cmFjayB3aGV0aGVyICRhdHRycyB3YXMgdXNlZCBkdXJpbmcgcmVuZGVyLlxyXG4gKiBJZiAkYXR0cnMgd2FzIHVzZWQgZHVyaW5nIHJlbmRlciB0aGVuIHRoZSB3YXJuaW5nIGZvciBmYWlsZWQgYXR0cnNcclxuICogZmFsbHRocm91Z2ggY2FuIGJlIHN1cHByZXNzZWQuXHJcbiAqL1xyXG5sZXQgYWNjZXNzZWRBdHRycyA9IGZhbHNlO1xyXG5mdW5jdGlvbiBtYXJrQXR0cnNBY2Nlc3NlZCgpIHtcclxuICAgIGFjY2Vzc2VkQXR0cnMgPSB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudFJvb3QoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IHsgdHlwZTogQ29tcG9uZW50LCB2bm9kZSwgcHJveHksIHdpdGhQcm94eSwgcHJvcHMsIHByb3BzT3B0aW9uczogW3Byb3BzT3B0aW9uc10sIHNsb3RzLCBhdHRycywgZW1pdCwgcmVuZGVyLCByZW5kZXJDYWNoZSwgZGF0YSwgc2V0dXBTdGF0ZSwgY3R4LCBpbmhlcml0QXR0cnMgfSA9IGluc3RhbmNlO1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIGxldCBmYWxsdGhyb3VnaEF0dHJzO1xyXG4gICAgY29uc3QgcHJldiA9IHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgYWNjZXNzZWRBdHRycyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgNCAvKiBTaGFwZUZsYWdzLlNUQVRFRlVMX0NPTVBPTkVOVCAqLykge1xyXG4gICAgICAgICAgICAvLyB3aXRoUHJveHkgaXMgYSBwcm94eSB3aXRoIGEgZGlmZmVyZW50IGBoYXNgIHRyYXAgb25seSBmb3JcclxuICAgICAgICAgICAgLy8gcnVudGltZS1jb21waWxlZCByZW5kZXIgZnVuY3Rpb25zIHVzaW5nIGB3aXRoYCBibG9jay5cclxuICAgICAgICAgICAgY29uc3QgcHJveHlUb1VzZSA9IHdpdGhQcm94eSB8fCBwcm94eTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbm9ybWFsaXplVk5vZGUocmVuZGVyLmNhbGwocHJveHlUb1VzZSwgcHJveHlUb1VzZSwgcmVuZGVyQ2FjaGUsIHByb3BzLCBzZXR1cFN0YXRlLCBkYXRhLCBjdHgpKTtcclxuICAgICAgICAgICAgZmFsbHRocm91Z2hBdHRycyA9IGF0dHJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb25hbFxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIgPSBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIC8vIGluIGRldiwgbWFyayBhdHRycyBhY2Nlc3NlZCBpZiBvcHRpb25hbCBwcm9wcyAoYXR0cnMgPT09IHByb3BzKVxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGF0dHJzID09PSBwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQgPSBub3JtYWxpemVWTm9kZShyZW5kZXIubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAgICAgPyByZW5kZXIocHJvcHMsIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgYXR0cnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrQXR0cnNBY2Nlc3NlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbG90cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHsgYXR0cnMsIHNsb3RzLCBlbWl0IH0pXHJcbiAgICAgICAgICAgICAgICA6IHJlbmRlcihwcm9wcywgbnVsbCAvKiB3ZSBrbm93IGl0IGRvZXNuJ3QgbmVlZCBpdCAqLykpO1xyXG4gICAgICAgICAgICBmYWxsdGhyb3VnaEF0dHJzID0gQ29tcG9uZW50LnByb3BzXHJcbiAgICAgICAgICAgICAgICA/IGF0dHJzXHJcbiAgICAgICAgICAgICAgICA6IGdldEZ1bmN0aW9uYWxGYWxsdGhyb3VnaChhdHRycyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGJsb2NrU3RhY2subGVuZ3RoID0gMDtcclxuICAgICAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCAxIC8qIEVycm9yQ29kZXMuUkVOREVSX0ZVTkNUSU9OICovKTtcclxuICAgICAgICByZXN1bHQgPSBjcmVhdGVWTm9kZShDb21tZW50KTtcclxuICAgIH1cclxuICAgIC8vIGF0dHIgbWVyZ2luZ1xyXG4gICAgLy8gaW4gZGV2IG1vZGUsIGNvbW1lbnRzIGFyZSBwcmVzZXJ2ZWQsIGFuZCBpdCdzIHBvc3NpYmxlIGZvciBhIHRlbXBsYXRlXHJcbiAgICAvLyB0byBoYXZlIGNvbW1lbnRzIGFsb25nIHNpZGUgdGhlIHJvb3QgZWxlbWVudCB3aGljaCBtYWtlcyBpdCBhIGZyYWdtZW50XHJcbiAgICBsZXQgcm9vdCA9IHJlc3VsdDtcclxuICAgIGxldCBzZXRSb290ID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgIHJlc3VsdC5wYXRjaEZsYWcgPiAwICYmXHJcbiAgICAgICAgcmVzdWx0LnBhdGNoRmxhZyAmIDIwNDggLyogUGF0Y2hGbGFncy5ERVZfUk9PVF9GUkFHTUVOVCAqLykge1xyXG4gICAgICAgIFtyb290LCBzZXRSb290XSA9IGdldENoaWxkUm9vdChyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZhbGx0aHJvdWdoQXR0cnMgJiYgaW5oZXJpdEF0dHJzICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmYWxsdGhyb3VnaEF0dHJzKTtcclxuICAgICAgICBjb25zdCB7IHNoYXBlRmxhZyB9ID0gcm9vdDtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmICgxIC8qIFNoYXBlRmxhZ3MuRUxFTUVOVCAqLyB8IDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcHNPcHRpb25zICYmIGtleXMuc29tZShpc01vZGVsTGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB2LW1vZGVsIGxpc3RlbmVyIChvblVwZGF0ZTp4eHgpIGhhcyBhIGNvcnJlc3BvbmRpbmcgZGVjbGFyZWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcm9wLCBpdCBpbmRpY2F0ZXMgdGhpcyBjb21wb25lbnQgZXhwZWN0cyB0byBoYW5kbGUgdi1tb2RlbCBhbmRcclxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBzaG91bGQgbm90IGZhbGx0aHJvdWdoLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbGF0ZWQ6ICMxNTQzLCAjMTY0MywgIzE5ODlcclxuICAgICAgICAgICAgICAgICAgICBmYWxsdGhyb3VnaEF0dHJzID0gZmlsdGVyTW9kZWxMaXN0ZW5lcnMoZmFsbHRocm91Z2hBdHRycywgcHJvcHNPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJvb3QgPSBjbG9uZVZOb2RlKHJvb3QsIGZhbGx0aHJvdWdoQXR0cnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhYWNjZXNzZWRBdHRycyAmJiByb290LnR5cGUgIT09IENvbW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbEF0dHJzID0gT2JqZWN0LmtleXMoYXR0cnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRBdHRycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFBdHRycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhbGxBdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhbGxBdHRyc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB2LW1vZGVsIGhhbmRsZXJzIHdoZW4gdGhleSBmYWlsIHRvIGZhbGx0aHJvdWdoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBgb25gLCBsb3dlcmNhc2UgZmlyc3QgbGV0dGVyIHRvIHJlZmxlY3QgZXZlbnQgY2FzaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2N1cmF0ZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEF0dHJzLnB1c2goa2V5WzJdLnRvTG93ZXJDYXNlKCkgKyBrZXkuc2xpY2UoMykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFBdHRycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBFeHRyYW5lb3VzIG5vbi1wcm9wcyBhdHRyaWJ1dGVzIChgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZXh0cmFBdHRycy5qb2luKCcsICcpfSkgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB3ZXJlIHBhc3NlZCB0byBjb21wb25lbnQgYnV0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGJlY2F1c2UgY29tcG9uZW50IHJlbmRlcnMgZnJhZ21lbnQgb3IgdGV4dCByb290IG5vZGVzLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50QXR0cnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgRXh0cmFuZW91cyBub24tZW1pdHMgZXZlbnQgbGlzdGVuZXJzIChgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZXZlbnRBdHRycy5qb2luKCcsICcpfSkgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB3ZXJlIHBhc3NlZCB0byBjb21wb25lbnQgYnV0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGJlY2F1c2UgY29tcG9uZW50IHJlbmRlcnMgZnJhZ21lbnQgb3IgdGV4dCByb290IG5vZGVzLiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYElmIHRoZSBsaXN0ZW5lciBpcyBpbnRlbmRlZCB0byBiZSBhIGNvbXBvbmVudCBjdXN0b20gZXZlbnQgbGlzdGVuZXIgb25seSwgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWNsYXJlIGl0IHVzaW5nIHRoZSBcImVtaXRzXCIgb3B0aW9uLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaW5oZXJpdCBkaXJlY3RpdmVzXHJcbiAgICBpZiAodm5vZGUuZGlycykge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzRWxlbWVudFJvb3Qocm9vdCkpIHtcclxuICAgICAgICAgICAgd2FybihgUnVudGltZSBkaXJlY3RpdmUgdXNlZCBvbiBjb21wb25lbnQgd2l0aCBub24tZWxlbWVudCByb290IG5vZGUuIGAgK1xyXG4gICAgICAgICAgICAgICAgYFRoZSBkaXJlY3RpdmVzIHdpbGwgbm90IGZ1bmN0aW9uIGFzIGludGVuZGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjbG9uZSBiZWZvcmUgbXV0YXRpbmcgc2luY2UgdGhlIHJvb3QgbWF5IGJlIGEgaG9pc3RlZCB2bm9kZVxyXG4gICAgICAgIHJvb3QgPSBjbG9uZVZOb2RlKHJvb3QpO1xyXG4gICAgICAgIHJvb3QuZGlycyA9IHJvb3QuZGlycyA/IHJvb3QuZGlycy5jb25jYXQodm5vZGUuZGlycykgOiB2bm9kZS5kaXJzO1xyXG4gICAgfVxyXG4gICAgLy8gaW5oZXJpdCB0cmFuc2l0aW9uIGRhdGFcclxuICAgIGlmICh2bm9kZS50cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNFbGVtZW50Um9vdChyb290KSkge1xyXG4gICAgICAgICAgICB3YXJuKGBDb21wb25lbnQgaW5zaWRlIDxUcmFuc2l0aW9uPiByZW5kZXJzIG5vbi1lbGVtZW50IHJvb3Qgbm9kZSBgICtcclxuICAgICAgICAgICAgICAgIGB0aGF0IGNhbm5vdCBiZSBhbmltYXRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC50cmFuc2l0aW9uID0gdm5vZGUudHJhbnNpdGlvbjtcclxuICAgIH1cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgc2V0Um9vdCkge1xyXG4gICAgICAgIHNldFJvb3Qocm9vdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSByb290O1xyXG4gICAgfVxyXG4gICAgc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKHByZXYpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICogSW4gZGV2IG1vZGUsIHRlbXBsYXRlIHJvb3QgbGV2ZWwgY29tbWVudHMgYXJlIHJlbmRlcmVkLCB3aGljaCB0dXJucyB0aGVcclxuICogdGVtcGxhdGUgaW50byBhIGZyYWdtZW50IHJvb3QsIGJ1dCB3ZSBuZWVkIHRvIGxvY2F0ZSB0aGUgc2luZ2xlIGVsZW1lbnRcclxuICogcm9vdCBmb3IgYXR0cnMgYW5kIHNjb3BlIGlkIHByb2Nlc3NpbmcuXHJcbiAqL1xyXG5jb25zdCBnZXRDaGlsZFJvb3QgPSAodm5vZGUpID0+IHtcclxuICAgIGNvbnN0IHJhd0NoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XHJcbiAgICBjb25zdCBkeW5hbWljQ2hpbGRyZW4gPSB2bm9kZS5keW5hbWljQ2hpbGRyZW47XHJcbiAgICBjb25zdCBjaGlsZFJvb3QgPSBmaWx0ZXJTaW5nbGVSb290KHJhd0NoaWxkcmVuKTtcclxuICAgIGlmICghY2hpbGRSb290KSB7XHJcbiAgICAgICAgcmV0dXJuIFt2bm9kZSwgdW5kZWZpbmVkXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID0gcmF3Q2hpbGRyZW4uaW5kZXhPZihjaGlsZFJvb3QpO1xyXG4gICAgY29uc3QgZHluYW1pY0luZGV4ID0gZHluYW1pY0NoaWxkcmVuID8gZHluYW1pY0NoaWxkcmVuLmluZGV4T2YoY2hpbGRSb290KSA6IC0xO1xyXG4gICAgY29uc3Qgc2V0Um9vdCA9ICh1cGRhdGVkUm9vdCkgPT4ge1xyXG4gICAgICAgIHJhd0NoaWxkcmVuW2luZGV4XSA9IHVwZGF0ZWRSb290O1xyXG4gICAgICAgIGlmIChkeW5hbWljQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljQ2hpbGRyZW5bZHluYW1pY0luZGV4XSA9IHVwZGF0ZWRSb290O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVwZGF0ZWRSb290LnBhdGNoRmxhZyA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZub2RlLmR5bmFtaWNDaGlsZHJlbiA9IFsuLi5keW5hbWljQ2hpbGRyZW4sIHVwZGF0ZWRSb290XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gW25vcm1hbGl6ZVZOb2RlKGNoaWxkUm9vdCksIHNldFJvb3RdO1xyXG59O1xyXG5mdW5jdGlvbiBmaWx0ZXJTaW5nbGVSb290KGNoaWxkcmVuKSB7XHJcbiAgICBsZXQgc2luZ2xlUm9vdDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgdXNlciBjb21tZW50XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlICE9PSBDb21tZW50IHx8IGNoaWxkLmNoaWxkcmVuID09PSAndi1pZicpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVSb290KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFzIG1vcmUgdGhhbiAxIG5vbi1jb21tZW50IGNoaWxkLCByZXR1cm4gbm93XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUm9vdCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNpbmdsZVJvb3Q7XHJcbn1cclxuY29uc3QgZ2V0RnVuY3Rpb25hbEZhbGx0aHJvdWdoID0gKGF0dHJzKSA9PiB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ3N0eWxlJyB8fCBpc09uKGtleSkpIHtcclxuICAgICAgICAgICAgKHJlcyB8fCAocmVzID0ge30pKVtrZXldID0gYXR0cnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59O1xyXG5jb25zdCBmaWx0ZXJNb2RlbExpc3RlbmVycyA9IChhdHRycywgcHJvcHMpID0+IHtcclxuICAgIGNvbnN0IHJlcyA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcclxuICAgICAgICBpZiAoIWlzTW9kZWxMaXN0ZW5lcihrZXkpIHx8ICEoa2V5LnNsaWNlKDkpIGluIHByb3BzKSkge1xyXG4gICAgICAgICAgICByZXNba2V5XSA9IGF0dHJzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufTtcclxuY29uc3QgaXNFbGVtZW50Um9vdCA9ICh2bm9kZSkgPT4ge1xyXG4gICAgcmV0dXJuICh2bm9kZS5zaGFwZUZsYWcgJiAoNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLyB8IDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovKSB8fFxyXG4gICAgICAgIHZub2RlLnR5cGUgPT09IENvbW1lbnQgLy8gcG90ZW50aWFsIHYtaWYgYnJhbmNoIHN3aXRjaFxyXG4gICAgKTtcclxufTtcclxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlQ29tcG9uZW50KHByZXZWTm9kZSwgbmV4dFZOb2RlLCBvcHRpbWl6ZWQpIHtcclxuICAgIGNvbnN0IHsgcHJvcHM6IHByZXZQcm9wcywgY2hpbGRyZW46IHByZXZDaGlsZHJlbiwgY29tcG9uZW50IH0gPSBwcmV2Vk5vZGU7XHJcbiAgICBjb25zdCB7IHByb3BzOiBuZXh0UHJvcHMsIGNoaWxkcmVuOiBuZXh0Q2hpbGRyZW4sIHBhdGNoRmxhZyB9ID0gbmV4dFZOb2RlO1xyXG4gICAgY29uc3QgZW1pdHMgPSBjb21wb25lbnQuZW1pdHNPcHRpb25zO1xyXG4gICAgLy8gUGFyZW50IGNvbXBvbmVudCdzIHJlbmRlciBmdW5jdGlvbiB3YXMgaG90LXVwZGF0ZWQuIFNpbmNlIHRoaXMgbWF5IGhhdmVcclxuICAgIC8vIGNhdXNlZCB0aGUgY2hpbGQgY29tcG9uZW50J3Mgc2xvdHMgY29udGVudCB0byBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG9cclxuICAgIC8vIGZvcmNlIHRoZSBjaGlsZCB0byB1cGRhdGUgYXMgd2VsbC5cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgKHByZXZDaGlsZHJlbiB8fCBuZXh0Q2hpbGRyZW4pICYmIGlzSG1yVXBkYXRpbmcpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIGZvcmNlIGNoaWxkIHVwZGF0ZSBmb3IgcnVudGltZSBkaXJlY3RpdmUgb3IgdHJhbnNpdGlvbiBvbiBjb21wb25lbnQgdm5vZGUuXHJcbiAgICBpZiAobmV4dFZOb2RlLmRpcnMgfHwgbmV4dFZOb2RlLnRyYW5zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpbWl6ZWQgJiYgcGF0Y2hGbGFnID49IDApIHtcclxuICAgICAgICBpZiAocGF0Y2hGbGFnICYgMTAyNCAvKiBQYXRjaEZsYWdzLkRZTkFNSUNfU0xPVFMgKi8pIHtcclxuICAgICAgICAgICAgLy8gc2xvdCBjb250ZW50IHRoYXQgcmVmZXJlbmNlcyB2YWx1ZXMgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQsXHJcbiAgICAgICAgICAgIC8vIGUuZy4gaW4gYSB2LWZvclxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqLykge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbmV4dFByb3BzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByZXNlbmNlIG9mIHRoaXMgZmxhZyBpbmRpY2F0ZXMgcHJvcHMgYXJlIGFsd2F5cyBub24tbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gaGFzUHJvcHNDaGFuZ2VkKHByZXZQcm9wcywgbmV4dFByb3BzLCBlbWl0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHBhdGNoRmxhZyAmIDggLyogUGF0Y2hGbGFncy5QUk9QUyAqLykge1xyXG4gICAgICAgICAgICBjb25zdCBkeW5hbWljUHJvcHMgPSBuZXh0Vk5vZGUuZHluYW1pY1Byb3BzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZHluYW1pY1Byb3BzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRQcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFpc0VtaXRMaXN0ZW5lcihlbWl0cywga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcyBwYXRoIGlzIG9ubHkgdGFrZW4gYnkgbWFudWFsbHkgd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zXHJcbiAgICAgICAgLy8gc28gcHJlc2VuY2Ugb2YgYW55IGNoaWxkcmVuIGxlYWRzIHRvIGEgZm9yY2VkIHVwZGF0ZVxyXG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4gfHwgbmV4dENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGlmICghbmV4dENoaWxkcmVuIHx8ICFuZXh0Q2hpbGRyZW4uJHN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZXZQcm9wcyA9PT0gbmV4dFByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2UHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhbmV4dFByb3BzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5leHRQcm9wcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhhc1Byb3BzQ2hhbmdlZChwcmV2UHJvcHMsIG5leHRQcm9wcywgZW1pdHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGhhc1Byb3BzQ2hhbmdlZChwcmV2UHJvcHMsIG5leHRQcm9wcywgZW1pdHNPcHRpb25zKSB7XHJcbiAgICBjb25zdCBuZXh0S2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XHJcbiAgICBpZiAobmV4dEtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhwcmV2UHJvcHMpLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXh0S2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IG5leHRLZXlzW2ldO1xyXG4gICAgICAgIGlmIChuZXh0UHJvcHNba2V5XSAhPT0gcHJldlByb3BzW2tleV0gJiZcclxuICAgICAgICAgICAgIWlzRW1pdExpc3RlbmVyKGVtaXRzT3B0aW9ucywga2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlSE9DSG9zdEVsKHsgdm5vZGUsIHBhcmVudCB9LCBlbCAvLyBIb3N0Tm9kZVxyXG4pIHtcclxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnN1YlRyZWUgPT09IHZub2RlKSB7XHJcbiAgICAgICAgKHZub2RlID0gcGFyZW50LnZub2RlKS5lbCA9IGVsO1xyXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgaXNTdXNwZW5zZSA9ICh0eXBlKSA9PiB0eXBlLl9faXNTdXNwZW5zZTtcclxuLy8gU3VzcGVuc2UgZXhwb3NlcyBhIGNvbXBvbmVudC1saWtlIEFQSSwgYW5kIGlzIHRyZWF0ZWQgbGlrZSBhIGNvbXBvbmVudFxyXG4vLyBpbiB0aGUgY29tcGlsZXIsIGJ1dCBpbnRlcm5hbGx5IGl0J3MgYSBzcGVjaWFsIGJ1aWx0LWluIHR5cGUgdGhhdCBob29rc1xyXG4vLyBkaXJlY3RseSBpbnRvIHRoZSByZW5kZXJlci5cclxuY29uc3QgU3VzcGVuc2VJbXBsID0ge1xyXG4gICAgbmFtZTogJ1N1c3BlbnNlJyxcclxuICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgU3VzcGVuc2UgdHJlZS1zaGFrYWJsZSwgd2UgbmVlZCB0byBhdm9pZCBpbXBvcnRpbmcgaXRcclxuICAgIC8vIGRpcmVjdGx5IGluIHRoZSByZW5kZXJlci4gVGhlIHJlbmRlcmVyIGNoZWNrcyBmb3IgdGhlIF9faXNTdXNwZW5zZSBmbGFnXHJcbiAgICAvLyBvbiBhIHZub2RlJ3MgdHlwZSBhbmQgY2FsbHMgdGhlIGBwcm9jZXNzYCBtZXRob2QsIHBhc3NpbmcgaW4gcmVuZGVyZXJcclxuICAgIC8vIGludGVybmFscy5cclxuICAgIF9faXNTdXNwZW5zZTogdHJ1ZSxcclxuICAgIHByb2Nlc3MobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBcclxuICAgIC8vIHBsYXRmb3JtLXNwZWNpZmljIGltcGwgcGFzc2VkIGZyb20gcmVuZGVyZXJcclxuICAgIHJlbmRlcmVySW50ZXJuYWxzKSB7XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZShuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGF0Y2hTdXNwZW5zZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBoeWRyYXRlOiBoeWRyYXRlU3VzcGVuc2UsXHJcbiAgICBjcmVhdGU6IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnksXHJcbiAgICBub3JtYWxpemU6IG5vcm1hbGl6ZVN1c3BlbnNlQ2hpbGRyZW5cclxufTtcclxuLy8gRm9yY2UtY2FzdGVkIHB1YmxpYyB0eXBpbmcgZm9yIGggYW5kIFRTWCBwcm9wcyBpbmZlcmVuY2VcclxuY29uc3QgU3VzcGVuc2UgPSAoU3VzcGVuc2VJbXBsICk7XHJcbmZ1bmN0aW9uIHRyaWdnZXJFdmVudCh2bm9kZSwgbmFtZSkge1xyXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzW25hbWVdO1xyXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZlbnRMaXN0ZW5lcikpIHtcclxuICAgICAgICBldmVudExpc3RlbmVyKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZSh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpIHtcclxuICAgIGNvbnN0IHsgcDogcGF0Y2gsIG86IHsgY3JlYXRlRWxlbWVudCB9IH0gPSByZW5kZXJlckludGVybmFscztcclxuICAgIGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgY29uc3Qgc3VzcGVuc2UgPSAodm5vZGUuc3VzcGVuc2UgPSBjcmVhdGVTdXNwZW5zZUJvdW5kYXJ5KHZub2RlLCBwYXJlbnRTdXNwZW5zZSwgcGFyZW50Q29tcG9uZW50LCBjb250YWluZXIsIGhpZGRlbkNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzKSk7XHJcbiAgICAvLyBzdGFydCBtb3VudGluZyB0aGUgY29udGVudCBzdWJ0cmVlIGluIGFuIG9mZi1kb20gY29udGFpbmVyXHJcbiAgICBwYXRjaChudWxsLCAoc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCksIGhpZGRlbkNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcyk7XHJcbiAgICAvLyBub3cgY2hlY2sgaWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhbnkgYXN5bmMgZGVwc1xyXG4gICAgaWYgKHN1c3BlbnNlLmRlcHMgPiAwKSB7XHJcbiAgICAgICAgLy8gaGFzIGFzeW5jXHJcbiAgICAgICAgLy8gaW52b2tlIEBmYWxsYmFjayBldmVudFxyXG4gICAgICAgIHRyaWdnZXJFdmVudCh2bm9kZSwgJ29uUGVuZGluZycpO1xyXG4gICAgICAgIHRyaWdnZXJFdmVudCh2bm9kZSwgJ29uRmFsbGJhY2snKTtcclxuICAgICAgICAvLyBtb3VudCB0aGUgZmFsbGJhY2sgdHJlZVxyXG4gICAgICAgIHBhdGNoKG51bGwsIHZub2RlLnNzRmFsbGJhY2ssIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIG51bGwsIC8vIGZhbGxiYWNrIHRyZWUgd2lsbCBub3QgaGF2ZSBzdXNwZW5zZSBjb250ZXh0XHJcbiAgICAgICAgaXNTVkcsIHNsb3RTY29wZUlkcyk7XHJcbiAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCB2bm9kZS5zc0ZhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIFN1c3BlbnNlIGhhcyBubyBhc3luYyBkZXBzLiBKdXN0IHJlc29sdmUuXHJcbiAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHBhdGNoU3VzcGVuc2UobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHsgcDogcGF0Y2gsIHVtOiB1bm1vdW50LCBvOiB7IGNyZWF0ZUVsZW1lbnQgfSB9KSB7XHJcbiAgICBjb25zdCBzdXNwZW5zZSA9IChuMi5zdXNwZW5zZSA9IG4xLnN1c3BlbnNlKTtcclxuICAgIHN1c3BlbnNlLnZub2RlID0gbjI7XHJcbiAgICBuMi5lbCA9IG4xLmVsO1xyXG4gICAgY29uc3QgbmV3QnJhbmNoID0gbjIuc3NDb250ZW50O1xyXG4gICAgY29uc3QgbmV3RmFsbGJhY2sgPSBuMi5zc0ZhbGxiYWNrO1xyXG4gICAgY29uc3QgeyBhY3RpdmVCcmFuY2gsIHBlbmRpbmdCcmFuY2gsIGlzSW5GYWxsYmFjaywgaXNIeWRyYXRpbmcgfSA9IHN1c3BlbnNlO1xyXG4gICAgaWYgKHBlbmRpbmdCcmFuY2gpIHtcclxuICAgICAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gbmV3QnJhbmNoO1xyXG4gICAgICAgIGlmIChpc1NhbWVWTm9kZVR5cGUobmV3QnJhbmNoLCBwZW5kaW5nQnJhbmNoKSkge1xyXG4gICAgICAgICAgICAvLyBzYW1lIHJvb3QgdHlwZSBidXQgY29udGVudCBtYXkgaGF2ZSBjaGFuZ2VkLlxyXG4gICAgICAgICAgICBwYXRjaChwZW5kaW5nQnJhbmNoLCBuZXdCcmFuY2gsIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgaWYgKHN1c3BlbnNlLmRlcHMgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5GYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgcGF0Y2goYWN0aXZlQnJhbmNoLCBuZXdGYWxsYmFjaywgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgbnVsbCwgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcclxuICAgICAgICAgICAgICAgIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIG5ld0ZhbGxiYWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdG9nZ2xlZCBiZWZvcmUgcGVuZGluZyB0cmVlIGlzIHJlc29sdmVkXHJcbiAgICAgICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCsrO1xyXG4gICAgICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRvZ2dsZWQgYmVmb3JlIGh5ZHJhdGlvbiBpcyBmaW5pc2hlZCwgdGhlIGN1cnJlbnQgRE9NIHRyZWUgaXNcclxuICAgICAgICAgICAgICAgIC8vIG5vIGxvbmdlciB2YWxpZC4gc2V0IGl0IGFzIHRoZSBhY3RpdmUgYnJhbmNoIHNvIGl0IHdpbGwgYmUgdW5tb3VudGVkXHJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHJlc29sdmVkXHJcbiAgICAgICAgICAgICAgICBzdXNwZW5zZS5pc0h5ZHJhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gcGVuZGluZ0JyYW5jaDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVubW91bnQocGVuZGluZ0JyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IHBlbmRpbmcgSUQuIHRoaXMgaXMgdXNlZCB0byBpbnZhbGlkYXRlIGFzeW5jIGNhbGxiYWNrc1xyXG4gICAgICAgICAgICAvLyByZXNldCBzdXNwZW5zZSBzdGF0ZVxyXG4gICAgICAgICAgICBzdXNwZW5zZS5kZXBzID0gMDtcclxuICAgICAgICAgICAgLy8gZGlzY2FyZCBlZmZlY3RzIGZyb20gcGVuZGluZyBicmFuY2hcclxuICAgICAgICAgICAgc3VzcGVuc2UuZWZmZWN0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAvLyBkaXNjYXJkIHByZXZpb3VzIGNvbnRhaW5lclxyXG4gICAgICAgICAgICBzdXNwZW5zZS5oaWRkZW5Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgaWYgKGlzSW5GYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBpbiBmYWxsYmFjayBzdGF0ZVxyXG4gICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgbmV3QnJhbmNoLCBzdXNwZW5zZS5oaWRkZW5Db250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgc3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2UuZGVwcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2goYWN0aXZlQnJhbmNoLCBuZXdGYWxsYmFjaywgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgbnVsbCwgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUJyYW5jaChzdXNwZW5zZSwgbmV3RmFsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGFjdGl2ZUJyYW5jaCAmJiBpc1NhbWVWTm9kZVR5cGUobmV3QnJhbmNoLCBhY3RpdmVCcmFuY2gpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0b2dnbGVkIFwiYmFja1wiIHRvIGN1cnJlbnQgYWN0aXZlIGJyYW5jaFxyXG4gICAgICAgICAgICAgICAgcGF0Y2goYWN0aXZlQnJhbmNoLCBuZXdCcmFuY2gsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gZm9yY2UgcmVzb2x2ZVxyXG4gICAgICAgICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHN3aXRjaGVkIHRvIGEgM3JkIGJyYW5jaFxyXG4gICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgbmV3QnJhbmNoLCBzdXNwZW5zZS5oaWRkZW5Db250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgc3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2UuZGVwcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGFjdGl2ZUJyYW5jaCAmJiBpc1NhbWVWTm9kZVR5cGUobmV3QnJhbmNoLCBhY3RpdmVCcmFuY2gpKSB7XHJcbiAgICAgICAgICAgIC8vIHJvb3QgZGlkIG5vdCBjaGFuZ2UsIGp1c3Qgbm9ybWFsIHBhdGNoXHJcbiAgICAgICAgICAgIHBhdGNoKGFjdGl2ZUJyYW5jaCwgbmV3QnJhbmNoLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdCcmFuY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcm9vdCBub2RlIHRvZ2dsZWRcclxuICAgICAgICAgICAgLy8gaW52b2tlIEBwZW5kaW5nIGV2ZW50XHJcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChuMiwgJ29uUGVuZGluZycpO1xyXG4gICAgICAgICAgICAvLyBtb3VudCBwZW5kaW5nIGJyYW5jaCBpbiBvZmYtZG9tIGNvbnRhaW5lclxyXG4gICAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gbmV3QnJhbmNoO1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nSWQrKztcclxuICAgICAgICAgICAgcGF0Y2gobnVsbCwgbmV3QnJhbmNoLCBzdXNwZW5zZS5oaWRkZW5Db250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgc3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGluY29taW5nIGJyYW5jaCBoYXMgbm8gYXN5bmMgZGVwcywgcmVzb2x2ZSBub3cuXHJcbiAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRpbWVvdXQsIHBlbmRpbmdJZCB9ID0gc3VzcGVuc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1c3BlbnNlLnBlbmRpbmdJZCA9PT0gcGVuZGluZ0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5mYWxsYmFjayhuZXdGYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVvdXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5mYWxsYmFjayhuZXdGYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxubGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xyXG5mdW5jdGlvbiBjcmVhdGVTdXNwZW5zZUJvdW5kYXJ5KHZub2RlLCBwYXJlbnQsIHBhcmVudENvbXBvbmVudCwgY29udGFpbmVyLCBoaWRkZW5Db250YWluZXIsIGFuY2hvciwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscywgaXNIeWRyYXRpbmcgPSBmYWxzZSkge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFmYWxzZSAmJiAhaGFzV2FybmVkKSB7XHJcbiAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBAdHMtaWdub3JlIGBjb25zb2xlLmluZm9gIGNhbm5vdCBiZSBudWxsIGVycm9yXHJcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oYDxTdXNwZW5zZT4gaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgYW5kIGl0cyBBUEkgd2lsbCBsaWtlbHkgY2hhbmdlLmApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBwOiBwYXRjaCwgbTogbW92ZSwgdW06IHVubW91bnQsIG46IG5leHQsIG86IHsgcGFyZW50Tm9kZSwgcmVtb3ZlIH0gfSA9IHJlbmRlcmVySW50ZXJuYWxzO1xyXG4gICAgY29uc3QgdGltZW91dCA9IHRvTnVtYmVyKHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnRpbWVvdXQpO1xyXG4gICAgY29uc3Qgc3VzcGVuc2UgPSB7XHJcbiAgICAgICAgdm5vZGUsXHJcbiAgICAgICAgcGFyZW50LFxyXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcclxuICAgICAgICBpc1NWRyxcclxuICAgICAgICBjb250YWluZXIsXHJcbiAgICAgICAgaGlkZGVuQ29udGFpbmVyLFxyXG4gICAgICAgIGFuY2hvcixcclxuICAgICAgICBkZXBzOiAwLFxyXG4gICAgICAgIHBlbmRpbmdJZDogMCxcclxuICAgICAgICB0aW1lb3V0OiB0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicgPyB0aW1lb3V0IDogLTEsXHJcbiAgICAgICAgYWN0aXZlQnJhbmNoOiBudWxsLFxyXG4gICAgICAgIHBlbmRpbmdCcmFuY2g6IG51bGwsXHJcbiAgICAgICAgaXNJbkZhbGxiYWNrOiB0cnVlLFxyXG4gICAgICAgIGlzSHlkcmF0aW5nLFxyXG4gICAgICAgIGlzVW5tb3VudGVkOiBmYWxzZSxcclxuICAgICAgICBlZmZlY3RzOiBbXSxcclxuICAgICAgICByZXNvbHZlKHJlc3VtZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzdW1lICYmICFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdXNwZW5zZS5yZXNvbHZlKCkgaXMgY2FsbGVkIHdpdGhvdXQgYSBwZW5kaW5nIGJyYW5jaC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5zZS5pc1VubW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3VzcGVuc2UucmVzb2x2ZSgpIGlzIGNhbGxlZCBvbiBhbiBhbHJlYWR5IHVubW91bnRlZCBzdXNwZW5zZSBib3VuZGFyeS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IHZub2RlLCBhY3RpdmVCcmFuY2gsIHBlbmRpbmdCcmFuY2gsIHBlbmRpbmdJZCwgZWZmZWN0cywgcGFyZW50Q29tcG9uZW50LCBjb250YWluZXIgfSA9IHN1c3BlbnNlO1xyXG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UuaXNIeWRyYXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHN1c3BlbnNlLmlzSHlkcmF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXJlc3VtZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsYXlFbnRlciA9IGFjdGl2ZUJyYW5jaCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdCcmFuY2gudHJhbnNpdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdCcmFuY2gudHJhbnNpdGlvbi5tb2RlID09PSAnb3V0LWluJztcclxuICAgICAgICAgICAgICAgIGlmIChkZWxheUVudGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQnJhbmNoLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdJZCA9PT0gc3VzcGVuc2UucGVuZGluZ0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHBlbmRpbmdCcmFuY2gsIGNvbnRhaW5lciwgYW5jaG9yLCAwIC8qIE1vdmVUeXBlLkVOVEVSICovKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGluaXRpYWwgYW5jaG9yIG9uIG1vdW50XHJcbiAgICAgICAgICAgICAgICBsZXQgeyBhbmNob3IgfSA9IHN1c3BlbnNlO1xyXG4gICAgICAgICAgICAgICAgLy8gdW5tb3VudCBjdXJyZW50IGFjdGl2ZSB0cmVlXHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlQnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZhbGxiYWNrIHRyZWUgd2FzIG1vdW50ZWQsIGl0IG1heSBoYXZlIGJlZW4gbW92ZWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBhcyBwYXJ0IG9mIGEgcGFyZW50IHN1c3BlbnNlLiBnZXQgdGhlIGxhdGVzdCBhbmNob3IgZm9yIGluc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvciA9IG5leHQoYWN0aXZlQnJhbmNoKTtcclxuICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGFjdGl2ZUJyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlbGF5RW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlIGNvbnRlbnQgZnJvbSBvZmYtZG9tIGNvbnRhaW5lciB0byBhY3R1YWwgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZShwZW5kaW5nQnJhbmNoLCBjb250YWluZXIsIGFuY2hvciwgMCAvKiBNb3ZlVHlwZS5FTlRFUiAqLyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBwZW5kaW5nQnJhbmNoKTtcclxuICAgICAgICAgICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmlzSW5GYWxsYmFjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBmbHVzaCBidWZmZXJlZCBlZmZlY3RzXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgcGVuZGluZyBwYXJlbnQgc3VzcGVuc2VcclxuICAgICAgICAgICAgbGV0IHBhcmVudCA9IHN1c3BlbnNlLnBhcmVudDtcclxuICAgICAgICAgICAgbGV0IGhhc1VucmVzb2x2ZWRBbmNlc3RvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50LnBlbmRpbmdCcmFuY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHBlbmRpbmcgcGFyZW50IHN1c3BlbnNlLCBtZXJnZSBidWZmZXJlZCBwb3N0IGpvYnNcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoYXQgcGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmVmZmVjdHMucHVzaCguLi5lZmZlY3RzKTtcclxuICAgICAgICAgICAgICAgICAgICBoYXNVbnJlc29sdmVkQW5jZXN0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBubyBwZW5kaW5nIHBhcmVudCBzdXNwZW5zZSwgZmx1c2ggYWxsIGpvYnNcclxuICAgICAgICAgICAgaWYgKCFoYXNVbnJlc29sdmVkQW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgIHF1ZXVlUG9zdEZsdXNoQ2IoZWZmZWN0cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3VzcGVuc2UuZWZmZWN0cyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBpbnZva2UgQHJlc29sdmUgZXZlbnRcclxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KHZub2RlLCAnb25SZXNvbHZlJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxsYmFjayhmYWxsYmFja1ZOb2RlKSB7XHJcbiAgICAgICAgICAgIGlmICghc3VzcGVuc2UucGVuZGluZ0JyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdm5vZGUsIGFjdGl2ZUJyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBjb250YWluZXIsIGlzU1ZHIH0gPSBzdXNwZW5zZTtcclxuICAgICAgICAgICAgLy8gaW52b2tlIEBmYWxsYmFjayBldmVudFxyXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQodm5vZGUsICdvbkZhbGxiYWNrJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5leHQoYWN0aXZlQnJhbmNoKTtcclxuICAgICAgICAgICAgY29uc3QgbW91bnRGYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghc3VzcGVuc2UuaXNJbkZhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gbW91bnQgdGhlIGZhbGxiYWNrIHRyZWVcclxuICAgICAgICAgICAgICAgIHBhdGNoKG51bGwsIGZhbGxiYWNrVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIG51bGwsIC8vIGZhbGxiYWNrIHRyZWUgd2lsbCBub3QgaGF2ZSBzdXNwZW5zZSBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBmYWxsYmFja1ZOb2RlKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgZGVsYXlFbnRlciA9IGZhbGxiYWNrVk5vZGUudHJhbnNpdGlvbiAmJiBmYWxsYmFja1ZOb2RlLnRyYW5zaXRpb24ubW9kZSA9PT0gJ291dC1pbic7XHJcbiAgICAgICAgICAgIGlmIChkZWxheUVudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVCcmFuY2gudHJhbnNpdGlvbi5hZnRlckxlYXZlID0gbW91bnRGYWxsYmFjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdXNwZW5zZS5pc0luRmFsbGJhY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAvLyB1bm1vdW50IGN1cnJlbnQgYWN0aXZlIGJyYW5jaFxyXG4gICAgICAgICAgICB1bm1vdW50KGFjdGl2ZUJyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBudWxsLCAvLyBubyBzdXNwZW5zZSBzbyB1bm1vdW50IGhvb2tzIGZpcmUgbm93XHJcbiAgICAgICAgICAgIHRydWUgLy8gc2hvdWxkUmVtb3ZlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghZGVsYXlFbnRlcikge1xyXG4gICAgICAgICAgICAgICAgbW91bnRGYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3ZlKGNvbnRhaW5lciwgYW5jaG9yLCB0eXBlKSB7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCAmJlxyXG4gICAgICAgICAgICAgICAgbW92ZShzdXNwZW5zZS5hY3RpdmVCcmFuY2gsIGNvbnRhaW5lciwgYW5jaG9yLCB0eXBlKTtcclxuICAgICAgICAgICAgc3VzcGVuc2UuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbmV4dCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCAmJiBuZXh0KHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZWdpc3RlckRlcChpbnN0YW5jZSwgc2V0dXBSZW5kZXJFZmZlY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNJblBlbmRpbmdTdXNwZW5zZSA9ICEhc3VzcGVuc2UucGVuZGluZ0JyYW5jaDtcclxuICAgICAgICAgICAgaWYgKGlzSW5QZW5kaW5nU3VzcGVuc2UpIHtcclxuICAgICAgICAgICAgICAgIHN1c3BlbnNlLmRlcHMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBoeWRyYXRlZEVsID0gaW5zdGFuY2Uudm5vZGUuZWw7XHJcbiAgICAgICAgICAgIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAuYXN5bmNEZXAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIDAgLyogRXJyb3JDb2Rlcy5TRVRVUF9GVU5DVElPTiAqLyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbihhc3luY1NldHVwUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJldHJ5IHdoZW4gdGhlIHNldHVwKCkgcHJvbWlzZSByZXNvbHZlcy5cclxuICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudCBtYXkgaGF2ZSBiZWVuIHVubW91bnRlZCBiZWZvcmUgcmVzb2x2ZS5cclxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5pc1VubW91bnRlZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlLmlzVW5tb3VudGVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2UucGVuZGluZ0lkICE9PSBpbnN0YW5jZS5zdXNwZW5zZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcmV0cnkgZnJvbSB0aGlzIGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuYXN5bmNSZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZub2RlIH0gPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQodm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIGFzeW5jU2V0dXBSZXN1bHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChoeWRyYXRlZEVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdm5vZGUgbWF5IGhhdmUgYmVlbiByZXBsYWNlZCBpZiBhbiB1cGRhdGUgaGFwcGVuZWQgYmVmb3JlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzeW5jIGRlcCBpcyByZXNvbHZlZC5cclxuICAgICAgICAgICAgICAgICAgICB2bm9kZS5lbCA9IGh5ZHJhdGVkRWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9ICFoeWRyYXRlZEVsICYmIGluc3RhbmNlLnN1YlRyZWUuZWw7XHJcbiAgICAgICAgICAgICAgICBzZXR1cFJlbmRlckVmZmVjdChpbnN0YW5jZSwgdm5vZGUsIFxyXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IG1heSBoYXZlIGJlZW4gbW92ZWQgYmVmb3JlIHJlc29sdmUuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIG5vdCBhIGh5ZHJhdGlvbiwgaW5zdGFuY2Uuc3ViVHJlZSB3aWxsIGJlIHRoZSBjb21tZW50XHJcbiAgICAgICAgICAgICAgICAvLyBwbGFjZWhvbGRlci5cclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUoaHlkcmF0ZWRFbCB8fCBpbnN0YW5jZS5zdWJUcmVlLmVsKSwgXHJcbiAgICAgICAgICAgICAgICAvLyBhbmNob3Igd2lsbCBub3QgYmUgdXNlZCBpZiB0aGlzIGlzIGh5ZHJhdGlvbiwgc28gb25seSBuZWVkIHRvXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zaWRlciB0aGUgY29tbWVudCBwbGFjZWhvbGRlciBjYXNlLlxyXG4gICAgICAgICAgICAgICAgaHlkcmF0ZWRFbCA/IG51bGwgOiBuZXh0KGluc3RhbmNlLnN1YlRyZWUpLCBzdXNwZW5zZSwgaXNTVkcsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmUocGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlSE9DSG9zdEVsKGluc3RhbmNlLCB2bm9kZS5lbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wV2FybmluZ0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIG9ubHkgZGVjcmVhc2UgZGVwcyBjb3VudCBpZiBzdXNwZW5zZSBpcyBub3QgYWxyZWFkeSByZXNvbHZlZFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzSW5QZW5kaW5nU3VzcGVuc2UgJiYgLS1zdXNwZW5zZS5kZXBzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVubW91bnQocGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmlzVW5tb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudChzdXNwZW5zZS5hY3RpdmVCcmFuY2gsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UucGVuZGluZ0JyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHN1c3BlbnNlO1xyXG59XHJcbmZ1bmN0aW9uIGh5ZHJhdGVTdXNwZW5zZShub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscywgaHlkcmF0ZU5vZGUpIHtcclxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xyXG4gICAgY29uc3Qgc3VzcGVuc2UgPSAodm5vZGUuc3VzcGVuc2UgPSBjcmVhdGVTdXNwZW5zZUJvdW5kYXJ5KHZub2RlLCBwYXJlbnRTdXNwZW5zZSwgcGFyZW50Q29tcG9uZW50LCBub2RlLnBhcmVudE5vZGUsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBudWxsLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzLCB0cnVlIC8qIGh5ZHJhdGluZyAqLykpO1xyXG4gICAgLy8gdGhlcmUgYXJlIHR3byBwb3NzaWJsZSBzY2VuYXJpb3MgZm9yIHNlcnZlci1yZW5kZXJlZCBzdXNwZW5zZTpcclxuICAgIC8vIC0gc3VjY2Vzczogc3NyIGNvbnRlbnQgc2hvdWxkIGJlIGZ1bGx5IHJlc29sdmVkXHJcbiAgICAvLyAtIGZhaWx1cmU6IHNzciBjb250ZW50IHNob3VsZCBiZSB0aGUgZmFsbGJhY2sgYnJhbmNoLlxyXG4gICAgLy8gaG93ZXZlciwgb24gdGhlIGNsaWVudCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBpdCBoYXMgZmFpbGVkIG9yIG5vdFxyXG4gICAgLy8gYXR0ZW1wdCB0byBoeWRyYXRlIHRoZSBET00gYXNzdW1pbmcgaXQgaGFzIHN1Y2NlZWRlZCwgYnV0IHdlIHN0aWxsXHJcbiAgICAvLyBuZWVkIHRvIGNvbnN0cnVjdCBhIHN1c3BlbnNlIGJvdW5kYXJ5IGZpcnN0XHJcbiAgICBjb25zdCByZXN1bHQgPSBoeWRyYXRlTm9kZShub2RlLCAoc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCksIHBhcmVudENvbXBvbmVudCwgc3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgIGlmIChzdXNwZW5zZS5kZXBzID09PSAwKSB7XHJcbiAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplU3VzcGVuc2VDaGlsZHJlbih2bm9kZSkge1xyXG4gICAgY29uc3QgeyBzaGFwZUZsYWcsIGNoaWxkcmVuIH0gPSB2bm9kZTtcclxuICAgIGNvbnN0IGlzU2xvdENoaWxkcmVuID0gc2hhcGVGbGFnICYgMzIgLyogU2hhcGVGbGFncy5TTE9UU19DSElMRFJFTiAqLztcclxuICAgIHZub2RlLnNzQ29udGVudCA9IG5vcm1hbGl6ZVN1c3BlbnNlU2xvdChpc1Nsb3RDaGlsZHJlbiA/IGNoaWxkcmVuLmRlZmF1bHQgOiBjaGlsZHJlbik7XHJcbiAgICB2bm9kZS5zc0ZhbGxiYWNrID0gaXNTbG90Q2hpbGRyZW5cclxuICAgICAgICA/IG5vcm1hbGl6ZVN1c3BlbnNlU2xvdChjaGlsZHJlbi5mYWxsYmFjaylcclxuICAgICAgICA6IGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN1c3BlbnNlU2xvdChzKSB7XHJcbiAgICBsZXQgYmxvY2s7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihzKSkge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQmxvY2sgPSBpc0Jsb2NrVHJlZUVuYWJsZWQgJiYgcy5fYztcclxuICAgICAgICBpZiAodHJhY2tCbG9jaykge1xyXG4gICAgICAgICAgICAvLyBkaXNhYmxlVHJhY2tpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgIC8vIGFsbG93IGJsb2NrIHRyYWNraW5nIGZvciBjb21waWxlZCBzbG90c1xyXG4gICAgICAgICAgICAvLyAoc2VlIC4vY29tcG9uZW50UmVuZGVyQ29udGV4dC50cylcclxuICAgICAgICAgICAgcy5fZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBvcGVuQmxvY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyA9IHMoKTtcclxuICAgICAgICBpZiAodHJhY2tCbG9jaykge1xyXG4gICAgICAgICAgICBzLl9kID0gdHJ1ZTtcclxuICAgICAgICAgICAgYmxvY2sgPSBjdXJyZW50QmxvY2s7XHJcbiAgICAgICAgICAgIGNsb3NlQmxvY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBcnJheShzKSkge1xyXG4gICAgICAgIGNvbnN0IHNpbmdsZUNoaWxkID0gZmlsdGVyU2luZ2xlUm9vdChzKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFzaW5nbGVDaGlsZCkge1xyXG4gICAgICAgICAgICB3YXJuKGA8U3VzcGVuc2U+IHNsb3RzIGV4cGVjdCBhIHNpbmdsZSByb290IG5vZGUuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMgPSBzaW5nbGVDaGlsZDtcclxuICAgIH1cclxuICAgIHMgPSBub3JtYWxpemVWTm9kZShzKTtcclxuICAgIGlmIChibG9jayAmJiAhcy5keW5hbWljQ2hpbGRyZW4pIHtcclxuICAgICAgICBzLmR5bmFtaWNDaGlsZHJlbiA9IGJsb2NrLmZpbHRlcihjID0+IGMgIT09IHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbn1cclxuZnVuY3Rpb24gcXVldWVFZmZlY3RXaXRoU3VzcGVuc2UoZm4sIHN1c3BlbnNlKSB7XHJcbiAgICBpZiAoc3VzcGVuc2UgJiYgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCkge1xyXG4gICAgICAgIGlmIChpc0FycmF5KGZuKSkge1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goLi4uZm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3VzcGVuc2UuZWZmZWN0cy5wdXNoKGZuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBxdWV1ZVBvc3RGbHVzaENiKGZuKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIGJyYW5jaCkge1xyXG4gICAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gYnJhbmNoO1xyXG4gICAgY29uc3QgeyB2bm9kZSwgcGFyZW50Q29tcG9uZW50IH0gPSBzdXNwZW5zZTtcclxuICAgIGNvbnN0IGVsID0gKHZub2RlLmVsID0gYnJhbmNoLmVsKTtcclxuICAgIC8vIGluIGNhc2Ugc3VzcGVuc2UgaXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNvbXBvbmVudCxcclxuICAgIC8vIHJlY3Vyc2l2ZWx5IHVwZGF0ZSB0aGUgSE9DIGVsXHJcbiAgICBpZiAocGFyZW50Q29tcG9uZW50ICYmIHBhcmVudENvbXBvbmVudC5zdWJUcmVlID09PSB2bm9kZSkge1xyXG4gICAgICAgIHBhcmVudENvbXBvbmVudC52bm9kZS5lbCA9IGVsO1xyXG4gICAgICAgIHVwZGF0ZUhPQ0hvc3RFbChwYXJlbnRDb21wb25lbnQsIGVsKTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBwcm92aWRlKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBwcm92aWRlKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKS5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZXQgcHJvdmlkZXMgPSBjdXJyZW50SW5zdGFuY2UucHJvdmlkZXM7XHJcbiAgICAgICAgLy8gYnkgZGVmYXVsdCBhbiBpbnN0YW5jZSBpbmhlcml0cyBpdHMgcGFyZW50J3MgcHJvdmlkZXMgb2JqZWN0XHJcbiAgICAgICAgLy8gYnV0IHdoZW4gaXQgbmVlZHMgdG8gcHJvdmlkZSB2YWx1ZXMgb2YgaXRzIG93biwgaXQgY3JlYXRlcyBpdHNcclxuICAgICAgICAvLyBvd24gcHJvdmlkZXMgb2JqZWN0IHVzaW5nIHBhcmVudCBwcm92aWRlcyBvYmplY3QgYXMgcHJvdG90eXBlLlxyXG4gICAgICAgIC8vIHRoaXMgd2F5IGluIGBpbmplY3RgIHdlIGNhbiBzaW1wbHkgbG9vayB1cCBpbmplY3Rpb25zIGZyb20gZGlyZWN0XHJcbiAgICAgICAgLy8gcGFyZW50IGFuZCBsZXQgdGhlIHByb3RvdHlwZSBjaGFpbiBkbyB0aGUgd29yay5cclxuICAgICAgICBjb25zdCBwYXJlbnRQcm92aWRlcyA9IGN1cnJlbnRJbnN0YW5jZS5wYXJlbnQgJiYgY3VycmVudEluc3RhbmNlLnBhcmVudC5wcm92aWRlcztcclxuICAgICAgICBpZiAocGFyZW50UHJvdmlkZXMgPT09IHByb3ZpZGVzKSB7XHJcbiAgICAgICAgICAgIHByb3ZpZGVzID0gY3VycmVudEluc3RhbmNlLnByb3ZpZGVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRQcm92aWRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcclxuICAgICAgICBwcm92aWRlc1trZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgPSBmYWxzZSkge1xyXG4gICAgLy8gZmFsbGJhY2sgdG8gYGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZWAgc28gdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgaW5cclxuICAgIC8vIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcclxuICAgIGNvbnN0IGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcclxuICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIC8vICMyNDAwXHJcbiAgICAgICAgLy8gdG8gc3VwcG9ydCBgYXBwLnVzZWAgcGx1Z2lucyxcclxuICAgICAgICAvLyBmYWxsYmFjayB0byBhcHBDb250ZXh0J3MgYHByb3ZpZGVzYCBpZiB0aGUgaW5zdGFuY2UgaXMgYXQgcm9vdFxyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVzID0gaW5zdGFuY2UucGFyZW50ID09IG51bGxcclxuICAgICAgICAgICAgPyBpbnN0YW5jZS52bm9kZS5hcHBDb250ZXh0ICYmIGluc3RhbmNlLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXNcclxuICAgICAgICAgICAgOiBpbnN0YW5jZS5wYXJlbnQucHJvdmlkZXM7XHJcbiAgICAgICAgaWYgKHByb3ZpZGVzICYmIGtleSBpbiBwcm92aWRlcykge1xyXG4gICAgICAgICAgICAvLyBUUyBkb2Vzbid0IGFsbG93IHN5bWJvbCBhcyBpbmRleCB0eXBlXHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxyXG4gICAgICAgICAgICAgICAgPyBkZWZhdWx0VmFsdWUuY2FsbChpbnN0YW5jZS5wcm94eSlcclxuICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgaW5qZWN0aW9uIFwiJHtTdHJpbmcoa2V5KX1cIiBub3QgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FybihgaW5qZWN0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKSBvciBmdW5jdGlvbmFsIGNvbXBvbmVudHMuYCk7XHJcbiAgICB9XHJcbn1cblxuLy8gU2ltcGxlIGVmZmVjdC5cclxuZnVuY3Rpb24gd2F0Y2hFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIG9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIHdhdGNoUG9zdEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBmbHVzaDogJ3Bvc3QnIH0pIDogeyBmbHVzaDogJ3Bvc3QnIH0pKTtcclxufVxyXG5mdW5jdGlvbiB3YXRjaFN5bmNFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZmx1c2g6ICdzeW5jJyB9KSA6IHsgZmx1c2g6ICdzeW5jJyB9KSk7XHJcbn1cclxuLy8gaW5pdGlhbCB2YWx1ZSBmb3Igd2F0Y2hlcnMgdG8gdHJpZ2dlciBvbiB1bmRlZmluZWQgaW5pdGlhbCB2YWx1ZXNcclxuY29uc3QgSU5JVElBTF9XQVRDSEVSX1ZBTFVFID0ge307XHJcbi8vIGltcGxlbWVudGF0aW9uXHJcbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzRnVuY3Rpb24oY2IpKSB7XHJcbiAgICAgICAgd2FybihgXFxgd2F0Y2goZm4sIG9wdGlvbnM/KVxcYCBzaWduYXR1cmUgaGFzIGJlZW4gbW92ZWQgdG8gYSBzZXBhcmF0ZSBBUEkuIGAgK1xyXG4gICAgICAgICAgICBgVXNlIFxcYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylcXGAgaW5zdGVhZC4gXFxgd2F0Y2hcXGAgbm93IG9ubHkgYCArXHJcbiAgICAgICAgICAgIGBzdXBwb3J0cyBcXGB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zPykgc2lnbmF0dXJlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRvV2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gZG9XYXRjaChzb3VyY2UsIGNiLCB7IGltbWVkaWF0ZSwgZGVlcCwgZmx1c2gsIG9uVHJhY2ssIG9uVHJpZ2dlciB9ID0gRU1QVFlfT0JKKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFjYikge1xyXG4gICAgICAgIGlmIChpbW1lZGlhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB3YXJuKGB3YXRjaCgpIFwiaW1tZWRpYXRlXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIGAgK1xyXG4gICAgICAgICAgICAgICAgYHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgd2Fybihgd2F0Y2goKSBcImRlZXBcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgYCArXHJcbiAgICAgICAgICAgICAgICBgd2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB3YXJuSW52YWxpZFNvdXJjZSA9IChzKSA9PiB7XHJcbiAgICAgICAgd2FybihgSW52YWxpZCB3YXRjaCBzb3VyY2U6IGAsIHMsIGBBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgZnVuY3Rpb24sIGEgcmVmLCBgICtcclxuICAgICAgICAgICAgYGEgcmVhY3RpdmUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiB0aGVzZSB0eXBlcy5gKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIGxldCBnZXR0ZXI7XHJcbiAgICBsZXQgZm9yY2VUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICBsZXQgaXNNdWx0aVNvdXJjZSA9IGZhbHNlO1xyXG4gICAgaWYgKGlzUmVmKHNvdXJjZSkpIHtcclxuICAgICAgICBnZXR0ZXIgPSAoKSA9PiBzb3VyY2UudmFsdWU7XHJcbiAgICAgICAgZm9yY2VUcmlnZ2VyID0gaXNTaGFsbG93JDEoc291cmNlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xyXG4gICAgICAgIGdldHRlciA9ICgpID0+IHNvdXJjZTtcclxuICAgICAgICBkZWVwID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkoc291cmNlKSkge1xyXG4gICAgICAgIGlzTXVsdGlTb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgIGZvcmNlVHJpZ2dlciA9IHNvdXJjZS5zb21lKHMgPT4gaXNSZWFjdGl2ZShzKSB8fCBpc1NoYWxsb3ckMShzKSk7XHJcbiAgICAgICAgZ2V0dGVyID0gKCkgPT4gc291cmNlLm1hcChzID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzUmVmKHMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcy52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2Uocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhzLCBpbnN0YW5jZSwgMiAvKiBFcnJvckNvZGVzLldBVENIX0dFVFRFUiAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2FybkludmFsaWRTb3VyY2Uocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oc291cmNlKSkge1xyXG4gICAgICAgIGlmIChjYikge1xyXG4gICAgICAgICAgICAvLyBnZXR0ZXIgd2l0aCBjYlxyXG4gICAgICAgICAgICBnZXR0ZXIgPSAoKSA9PiBjYWxsV2l0aEVycm9ySGFuZGxpbmcoc291cmNlLCBpbnN0YW5jZSwgMiAvKiBFcnJvckNvZGVzLldBVENIX0dFVFRFUiAqLyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBubyBjYiAtPiBzaW1wbGUgZWZmZWN0XHJcbiAgICAgICAgICAgIGdldHRlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5pc1VubW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKHNvdXJjZSwgaW5zdGFuY2UsIDMgLyogRXJyb3JDb2Rlcy5XQVRDSF9DQUxMQkFDSyAqLywgW29uQ2xlYW51cF0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGdldHRlciA9IE5PT1A7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm5JbnZhbGlkU291cmNlKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2IgJiYgZGVlcCkge1xyXG4gICAgICAgIGNvbnN0IGJhc2VHZXR0ZXIgPSBnZXR0ZXI7XHJcbiAgICAgICAgZ2V0dGVyID0gKCkgPT4gdHJhdmVyc2UoYmFzZUdldHRlcigpKTtcclxuICAgIH1cclxuICAgIGxldCBjbGVhbnVwO1xyXG4gICAgbGV0IG9uQ2xlYW51cCA9IChmbikgPT4ge1xyXG4gICAgICAgIGNsZWFudXAgPSBlZmZlY3Qub25TdG9wID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCA0IC8qIEVycm9yQ29kZXMuV0FUQ0hfQ0xFQU5VUCAqLyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvLyBpbiBTU1IgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXR1cCBhbiBhY3R1YWwgZWZmZWN0LCBhbmQgaXQgc2hvdWxkIGJlIG5vb3BcclxuICAgIC8vIHVubGVzcyBpdCdzIGVhZ2VyXHJcbiAgICBpZiAoaXNJblNTUkNvbXBvbmVudFNldHVwKSB7XHJcbiAgICAgICAgLy8gd2Ugd2lsbCBhbHNvIG5vdCBjYWxsIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrICgrIHJ1bm5lciBpcyBub3Qgc2V0IHVwKVxyXG4gICAgICAgIG9uQ2xlYW51cCA9IE5PT1A7XHJcbiAgICAgICAgaWYgKCFjYikge1xyXG4gICAgICAgICAgICBnZXR0ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaW1tZWRpYXRlKSB7XHJcbiAgICAgICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGNiLCBpbnN0YW5jZSwgMyAvKiBFcnJvckNvZGVzLldBVENIX0NBTExCQUNLICovLCBbXHJcbiAgICAgICAgICAgICAgICBnZXR0ZXIoKSxcclxuICAgICAgICAgICAgICAgIGlzTXVsdGlTb3VyY2UgPyBbXSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE5PT1A7XHJcbiAgICB9XHJcbiAgICBsZXQgb2xkVmFsdWUgPSBpc011bHRpU291cmNlID8gW10gOiBJTklUSUFMX1dBVENIRVJfVkFMVUU7XHJcbiAgICBjb25zdCBqb2IgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFlZmZlY3QuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIC8vIHdhdGNoKHNvdXJjZSwgY2IpXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWZmZWN0LnJ1bigpO1xyXG4gICAgICAgICAgICBpZiAoZGVlcCB8fFxyXG4gICAgICAgICAgICAgICAgZm9yY2VUcmlnZ2VyIHx8XHJcbiAgICAgICAgICAgICAgICAoaXNNdWx0aVNvdXJjZVxyXG4gICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUuc29tZSgodiwgaSkgPT4gaGFzQ2hhbmdlZCh2LCBvbGRWYWx1ZVtpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZmFsc2UgICkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFudXAgYmVmb3JlIHJ1bm5pbmcgY2IgYWdhaW5cclxuICAgICAgICAgICAgICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoY2IsIGluc3RhbmNlLCAzIC8qIEVycm9yQ29kZXMuV0FUQ0hfQ0FMTEJBQ0sgKi8sIFtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxyXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlID09PSBJTklUSUFMX1dBVENIRVJfVkFMVUUgPyB1bmRlZmluZWQgOiBvbGRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsZWFudXBcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gd2F0Y2hFZmZlY3RcclxuICAgICAgICAgICAgZWZmZWN0LnJ1bigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBpbXBvcnRhbnQ6IG1hcmsgdGhlIGpvYiBhcyBhIHdhdGNoZXIgY2FsbGJhY2sgc28gdGhhdCBzY2hlZHVsZXIga25vd3NcclxuICAgIC8vIGl0IGlzIGFsbG93ZWQgdG8gc2VsZi10cmlnZ2VyICgjMTcyNylcclxuICAgIGpvYi5hbGxvd1JlY3Vyc2UgPSAhIWNiO1xyXG4gICAgbGV0IHNjaGVkdWxlcjtcclxuICAgIGlmIChmbHVzaCA9PT0gJ3N5bmMnKSB7XHJcbiAgICAgICAgc2NoZWR1bGVyID0gam9iOyAvLyB0aGUgc2NoZWR1bGVyIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGRpcmVjdGx5XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmbHVzaCA9PT0gJ3Bvc3QnKSB7XHJcbiAgICAgICAgc2NoZWR1bGVyID0gKCkgPT4gcXVldWVQb3N0UmVuZGVyRWZmZWN0KGpvYiwgaW5zdGFuY2UgJiYgaW5zdGFuY2Uuc3VzcGVuc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gZGVmYXVsdDogJ3ByZSdcclxuICAgICAgICBqb2IucHJlID0gdHJ1ZTtcclxuICAgICAgICBpZiAoaW5zdGFuY2UpXHJcbiAgICAgICAgICAgIGpvYi5pZCA9IGluc3RhbmNlLnVpZDtcclxuICAgICAgICBzY2hlZHVsZXIgPSAoKSA9PiBxdWV1ZUpvYihqb2IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KGdldHRlciwgc2NoZWR1bGVyKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBlZmZlY3Qub25UcmFjayA9IG9uVHJhY2s7XHJcbiAgICAgICAgZWZmZWN0Lm9uVHJpZ2dlciA9IG9uVHJpZ2dlcjtcclxuICAgIH1cclxuICAgIC8vIGluaXRpYWwgcnVuXHJcbiAgICBpZiAoY2IpIHtcclxuICAgICAgICBpZiAoaW1tZWRpYXRlKSB7XHJcbiAgICAgICAgICAgIGpvYigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb2xkVmFsdWUgPSBlZmZlY3QucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xyXG4gICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChlZmZlY3QucnVuLmJpbmQoZWZmZWN0KSwgaW5zdGFuY2UgJiYgaW5zdGFuY2Uuc3VzcGVuc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZWZmZWN0LnJ1bigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBlZmZlY3Quc3RvcCgpO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5zY29wZSkge1xyXG4gICAgICAgICAgICByZW1vdmUoaW5zdGFuY2Uuc2NvcGUuZWZmZWN0cywgZWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIHRoaXMuJHdhdGNoXHJcbmZ1bmN0aW9uIGluc3RhbmNlV2F0Y2goc291cmNlLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgcHVibGljVGhpcyA9IHRoaXMucHJveHk7XHJcbiAgICBjb25zdCBnZXR0ZXIgPSBpc1N0cmluZyhzb3VyY2UpXHJcbiAgICAgICAgPyBzb3VyY2UuaW5jbHVkZXMoJy4nKVxyXG4gICAgICAgICAgICA/IGNyZWF0ZVBhdGhHZXR0ZXIocHVibGljVGhpcywgc291cmNlKVxyXG4gICAgICAgICAgICA6ICgpID0+IHB1YmxpY1RoaXNbc291cmNlXVxyXG4gICAgICAgIDogc291cmNlLmJpbmQocHVibGljVGhpcywgcHVibGljVGhpcyk7XHJcbiAgICBsZXQgY2I7XHJcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcclxuICAgICAgICBjYiA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2IgPSB2YWx1ZS5oYW5kbGVyO1xyXG4gICAgICAgIG9wdGlvbnMgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1ciA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIHNldEN1cnJlbnRJbnN0YW5jZSh0aGlzKTtcclxuICAgIGNvbnN0IHJlcyA9IGRvV2F0Y2goZ2V0dGVyLCBjYi5iaW5kKHB1YmxpY1RoaXMpLCBvcHRpb25zKTtcclxuICAgIGlmIChjdXIpIHtcclxuICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoY3VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVBhdGhHZXR0ZXIoY3R4LCBwYXRoKSB7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1ciA9IGN0eDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aCAmJiBjdXI7IGkrKykge1xyXG4gICAgICAgICAgICBjdXIgPSBjdXJbc2VnbWVudHNbaV1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VyO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmF2ZXJzZSh2YWx1ZSwgc2Vlbikge1xyXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWVbXCJfX3Zfc2tpcFwiIC8qIFJlYWN0aXZlRmxhZ3MuU0tJUCAqL10pIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZWVuID0gc2VlbiB8fCBuZXcgU2V0KCk7XHJcbiAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2Vlbi5hZGQodmFsdWUpO1xyXG4gICAgaWYgKGlzUmVmKHZhbHVlKSkge1xyXG4gICAgICAgIHRyYXZlcnNlKHZhbHVlLnZhbHVlLCBzZWVuKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0cmF2ZXJzZSh2YWx1ZVtpXSwgc2Vlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTZXQodmFsdWUpIHx8IGlzTWFwKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICAgICAgdHJhdmVyc2Uodiwgc2Vlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlW2tleV0sIHNlZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxuXG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uU3RhdGUoKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHtcclxuICAgICAgICBpc01vdW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIGlzTGVhdmluZzogZmFsc2UsXHJcbiAgICAgICAgaXNVbm1vdW50aW5nOiBmYWxzZSxcclxuICAgICAgICBsZWF2aW5nVk5vZGVzOiBuZXcgTWFwKClcclxuICAgIH07XHJcbiAgICBvbk1vdW50ZWQoKCkgPT4ge1xyXG4gICAgICAgIHN0YXRlLmlzTW91bnRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIG9uQmVmb3JlVW5tb3VudCgoKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuaXNVbm1vdW50aW5nID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN0YXRlO1xyXG59XHJcbmNvbnN0IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yID0gW0Z1bmN0aW9uLCBBcnJheV07XHJcbmNvbnN0IEJhc2VUcmFuc2l0aW9uSW1wbCA9IHtcclxuICAgIG5hbWU6IGBCYXNlVHJhbnNpdGlvbmAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGU6IFN0cmluZyxcclxuICAgICAgICBhcHBlYXI6IEJvb2xlYW4sXHJcbiAgICAgICAgcGVyc2lzdGVkOiBCb29sZWFuLFxyXG4gICAgICAgIC8vIGVudGVyXHJcbiAgICAgICAgb25CZWZvcmVFbnRlcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25FbnRlcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25BZnRlckVudGVyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkVudGVyQ2FuY2VsbGVkOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICAvLyBsZWF2ZVxyXG4gICAgICAgIG9uQmVmb3JlTGVhdmU6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uTGVhdmU6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uQWZ0ZXJMZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25MZWF2ZUNhbmNlbGxlZDogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgLy8gYXBwZWFyXHJcbiAgICAgICAgb25CZWZvcmVBcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uQXBwZWFyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkFmdGVyQXBwZWFyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkFwcGVhckNhbmNlbGxlZDogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3JcclxuICAgIH0sXHJcbiAgICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHVzZVRyYW5zaXRpb25TdGF0ZSgpO1xyXG4gICAgICAgIGxldCBwcmV2VHJhbnNpdGlvbktleTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHNsb3RzLmRlZmF1bHQgJiYgZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuKHNsb3RzLmRlZmF1bHQoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhhc0ZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWNvbW1lbnQgY2hpbGRcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnR5cGUgIT09IENvbW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBoYXNGb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FybiBtb3JlIHRoYW4gb25lIG5vbi1jb21tZW50IGNoaWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKCc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50IG9yIGNvbXBvbmVudC4gJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZSA8dHJhbnNpdGlvbi1ncm91cD4gZm9yIGxpc3RzLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gbmVlZCB0byB0cmFjayByZWFjdGl2aXR5IGZvciB0aGVzZSBwcm9wcyBzbyB1c2UgdGhlIHJhd1xyXG4gICAgICAgICAgICAvLyBwcm9wcyBmb3IgYSBiaXQgYmV0dGVyIHBlcmZcclxuICAgICAgICAgICAgY29uc3QgcmF3UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgbW9kZSB9ID0gcmF3UHJvcHM7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIG1vZGVcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgbW9kZSAmJlxyXG4gICAgICAgICAgICAgICAgbW9kZSAhPT0gJ2luLW91dCcgJiZcclxuICAgICAgICAgICAgICAgIG1vZGUgIT09ICdvdXQtaW4nICYmXHJcbiAgICAgICAgICAgICAgICBtb2RlICE9PSAnZGVmYXVsdCcpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYGludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICR7bW9kZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNMZWF2aW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlQbGFjZWhvbGRlcihjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgPHRyYW5zaXRpb24+PGtlZXAtYWxpdmUvPjwvdHJhbnNpdGlvbj4sIHdlIG5lZWQgdG9cclxuICAgICAgICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZSBvZiB0aGUga2VwdC1hbGl2ZSBjaGlsZHJlbi5cclxuICAgICAgICAgICAgY29uc3QgaW5uZXJDaGlsZCA9IGdldEtlZXBBbGl2ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgaWYgKCFpbm5lckNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlQbGFjZWhvbGRlcihjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZW50ZXJIb29rcyA9IHJlc29sdmVUcmFuc2l0aW9uSG9va3MoaW5uZXJDaGlsZCwgcmF3UHJvcHMsIHN0YXRlLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhpbm5lckNoaWxkLCBlbnRlckhvb2tzKTtcclxuICAgICAgICAgICAgY29uc3Qgb2xkQ2hpbGQgPSBpbnN0YW5jZS5zdWJUcmVlO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRJbm5lckNoaWxkID0gb2xkQ2hpbGQgJiYgZ2V0S2VlcEFsaXZlQ2hpbGQob2xkQ2hpbGQpO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNpdGlvbktleUNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgeyBnZXRUcmFuc2l0aW9uS2V5IH0gPSBpbm5lckNoaWxkLnR5cGU7XHJcbiAgICAgICAgICAgIGlmIChnZXRUcmFuc2l0aW9uS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBnZXRUcmFuc2l0aW9uS2V5KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlRyYW5zaXRpb25LZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZUcmFuc2l0aW9uS2V5ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ICE9PSBwcmV2VHJhbnNpdGlvbktleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZUcmFuc2l0aW9uS2V5ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25LZXlDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgbW9kZVxyXG4gICAgICAgICAgICBpZiAob2xkSW5uZXJDaGlsZCAmJlxyXG4gICAgICAgICAgICAgICAgb2xkSW5uZXJDaGlsZC50eXBlICE9PSBDb21tZW50ICYmXHJcbiAgICAgICAgICAgICAgICAoIWlzU2FtZVZOb2RlVHlwZShpbm5lckNoaWxkLCBvbGRJbm5lckNoaWxkKSB8fCB0cmFuc2l0aW9uS2V5Q2hhbmdlZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlYXZpbmdIb29rcyA9IHJlc29sdmVUcmFuc2l0aW9uSG9va3Mob2xkSW5uZXJDaGlsZCwgcmF3UHJvcHMsIHN0YXRlLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgb2xkIHRyZWUncyBob29rcyBpbiBjYXNlIG9mIGR5bmFtaWMgdHJhbnNpdGlvblxyXG4gICAgICAgICAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKG9sZElubmVyQ2hpbGQsIGxlYXZpbmdIb29rcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBzd2l0Y2hpbmcgYmV0d2VlbiBkaWZmZXJlbnQgdmlld3NcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmlzTGVhdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHBsYWNlaG9sZGVyIG5vZGUgYW5kIHF1ZXVlIHVwZGF0ZSB3aGVuIGxlYXZlIGZpbmlzaGVzXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhdmluZ0hvb2tzLmFmdGVyTGVhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmlzTGVhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVBsYWNlaG9sZGVyKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnICYmIGlubmVyQ2hpbGQudHlwZSAhPT0gQ29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlYXZpbmdIb29rcy5kZWxheUxlYXZlID0gKGVsLCBlYXJseVJlbW92ZSwgZGVsYXllZExlYXZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoc3RhdGUsIG9sZElubmVyQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWF2aW5nVk5vZGVzQ2FjaGVbU3RyaW5nKG9sZElubmVyQ2hpbGQua2V5KV0gPSBvbGRJbm5lckNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXJseSByZW1vdmFsIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLl9sZWF2ZUNiID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFybHlSZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLl9sZWF2ZUNiID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudGVySG9va3MuZGVsYXllZExlYXZlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRlckhvb2tzLmRlbGF5ZWRMZWF2ZSA9IGRlbGF5ZWRMZWF2ZTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59O1xyXG4vLyBleHBvcnQgdGhlIHB1YmxpYyB0eXBlIGZvciBoL3RzeCBpbmZlcmVuY2VcclxuLy8gYWxzbyB0byBhdm9pZCBpbmxpbmUgaW1wb3J0KCkgaW4gZ2VuZXJhdGVkIGQudHMgZmlsZXNcclxuY29uc3QgQmFzZVRyYW5zaXRpb24gPSBCYXNlVHJhbnNpdGlvbkltcGw7XHJcbmZ1bmN0aW9uIGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoc3RhdGUsIHZub2RlKSB7XHJcbiAgICBjb25zdCB7IGxlYXZpbmdWTm9kZXMgfSA9IHN0YXRlO1xyXG4gICAgbGV0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGxlYXZpbmdWTm9kZXMuZ2V0KHZub2RlLnR5cGUpO1xyXG4gICAgaWYgKCFsZWF2aW5nVk5vZGVzQ2FjaGUpIHtcclxuICAgICAgICBsZWF2aW5nVk5vZGVzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIGxlYXZpbmdWTm9kZXMuc2V0KHZub2RlLnR5cGUsIGxlYXZpbmdWTm9kZXNDYWNoZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVhdmluZ1ZOb2Rlc0NhY2hlO1xyXG59XHJcbi8vIFRoZSB0cmFuc2l0aW9uIGhvb2tzIGFyZSBhdHRhY2hlZCB0byB0aGUgdm5vZGUgYXMgdm5vZGUudHJhbnNpdGlvblxyXG4vLyBhbmQgd2lsbCBiZSBjYWxsZWQgYXQgYXBwcm9wcmlhdGUgdGltaW5nIGluIHRoZSByZW5kZXJlci5cclxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyh2bm9kZSwgcHJvcHMsIHN0YXRlLCBpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgeyBhcHBlYXIsIG1vZGUsIHBlcnNpc3RlZCA9IGZhbHNlLCBvbkJlZm9yZUVudGVyLCBvbkVudGVyLCBvbkFmdGVyRW50ZXIsIG9uRW50ZXJDYW5jZWxsZWQsIG9uQmVmb3JlTGVhdmUsIG9uTGVhdmUsIG9uQWZ0ZXJMZWF2ZSwgb25MZWF2ZUNhbmNlbGxlZCwgb25CZWZvcmVBcHBlYXIsIG9uQXBwZWFyLCBvbkFmdGVyQXBwZWFyLCBvbkFwcGVhckNhbmNlbGxlZCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodm5vZGUua2V5KTtcclxuICAgIGNvbnN0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoc3RhdGUsIHZub2RlKTtcclxuICAgIGNvbnN0IGNhbGxIb29rID0gKGhvb2ssIGFyZ3MpID0+IHtcclxuICAgICAgICBob29rICYmXHJcbiAgICAgICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGhvb2ssIGluc3RhbmNlLCA5IC8qIEVycm9yQ29kZXMuVFJBTlNJVElPTl9IT09LICovLCBhcmdzKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBjYWxsQXN5bmNIb29rID0gKGhvb2ssIGFyZ3MpID0+IHtcclxuICAgICAgICBjb25zdCBkb25lID0gYXJnc1sxXTtcclxuICAgICAgICBjYWxsSG9vayhob29rLCBhcmdzKTtcclxuICAgICAgICBpZiAoaXNBcnJheShob29rKSkge1xyXG4gICAgICAgICAgICBpZiAoaG9vay5ldmVyeShob29rID0+IGhvb2subGVuZ3RoIDw9IDEpKVxyXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChob29rLmxlbmd0aCA8PSAxKSB7XHJcbiAgICAgICAgICAgIGRvbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaG9va3MgPSB7XHJcbiAgICAgICAgbW9kZSxcclxuICAgICAgICBwZXJzaXN0ZWQsXHJcbiAgICAgICAgYmVmb3JlRW50ZXIoZWwpIHtcclxuICAgICAgICAgICAgbGV0IGhvb2sgPSBvbkJlZm9yZUVudGVyO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlLmlzTW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGVhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvb2sgPSBvbkJlZm9yZUFwcGVhciB8fCBvbkJlZm9yZUVudGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGZvciBzYW1lIGVsZW1lbnQgKHYtc2hvdylcclxuICAgICAgICAgICAgaWYgKGVsLl9sZWF2ZUNiKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5fbGVhdmVDYih0cnVlIC8qIGNhbmNlbGxlZCAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZm9yIHRvZ2dsZWQgZWxlbWVudCB3aXRoIHNhbWUga2V5ICh2LWlmKVxyXG4gICAgICAgICAgICBjb25zdCBsZWF2aW5nVk5vZGUgPSBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5XTtcclxuICAgICAgICAgICAgaWYgKGxlYXZpbmdWTm9kZSAmJlxyXG4gICAgICAgICAgICAgICAgaXNTYW1lVk5vZGVUeXBlKHZub2RlLCBsZWF2aW5nVk5vZGUpICYmXHJcbiAgICAgICAgICAgICAgICBsZWF2aW5nVk5vZGUuZWwuX2xlYXZlQ2IpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZvcmNlIGVhcmx5IHJlbW92YWwgKG5vdCBjYW5jZWxsZWQpXHJcbiAgICAgICAgICAgICAgICBsZWF2aW5nVk5vZGUuZWwuX2xlYXZlQ2IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsSG9vayhob29rLCBbZWxdKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudGVyKGVsKSB7XHJcbiAgICAgICAgICAgIGxldCBob29rID0gb25FbnRlcjtcclxuICAgICAgICAgICAgbGV0IGFmdGVySG9vayA9IG9uQWZ0ZXJFbnRlcjtcclxuICAgICAgICAgICAgbGV0IGNhbmNlbEhvb2sgPSBvbkVudGVyQ2FuY2VsbGVkO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlLmlzTW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGVhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvb2sgPSBvbkFwcGVhciB8fCBvbkVudGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVySG9vayA9IG9uQWZ0ZXJBcHBlYXIgfHwgb25BZnRlckVudGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEhvb2sgPSBvbkFwcGVhckNhbmNlbGxlZCB8fCBvbkVudGVyQ2FuY2VsbGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgZG9uZSA9IChlbC5fZW50ZXJDYiA9IChjYW5jZWxsZWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsSG9vayhjYW5jZWxIb29rLCBbZWxdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxIb29rKGFmdGVySG9vaywgW2VsXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaG9va3MuZGVsYXllZExlYXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9va3MuZGVsYXllZExlYXZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbC5fZW50ZXJDYiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChob29rKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsQXN5bmNIb29rKGhvb2ssIFtlbCwgZG9uZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZWF2ZShlbCwgcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyh2bm9kZS5rZXkpO1xyXG4gICAgICAgICAgICBpZiAoZWwuX2VudGVyQ2IpIHtcclxuICAgICAgICAgICAgICAgIGVsLl9lbnRlckNiKHRydWUgLyogY2FuY2VsbGVkICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNVbm1vdW50aW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsbEhvb2sob25CZWZvcmVMZWF2ZSwgW2VsXSk7XHJcbiAgICAgICAgICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgZG9uZSA9IChlbC5fbGVhdmVDYiA9IChjYW5jZWxsZWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxIb29rKG9uTGVhdmVDYW5jZWxsZWQsIFtlbF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbEhvb2sob25BZnRlckxlYXZlLCBbZWxdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsLl9sZWF2ZUNiID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlYXZpbmdWTm9kZXNDYWNoZVtrZXldID09PSB2bm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxlYXZpbmdWTm9kZXNDYWNoZVtrZXldID0gdm5vZGU7XHJcbiAgICAgICAgICAgIGlmIChvbkxlYXZlKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsQXN5bmNIb29rKG9uTGVhdmUsIFtlbCwgZG9uZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbG9uZSh2bm9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyh2bm9kZSwgcHJvcHMsIHN0YXRlLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBob29rcztcclxufVxyXG4vLyB0aGUgcGxhY2Vob2xkZXIgcmVhbGx5IG9ubHkgaGFuZGxlcyBvbmUgc3BlY2lhbCBjYXNlOiBLZWVwQWxpdmVcclxuLy8gaW4gdGhlIGNhc2Ugb2YgYSBLZWVwQWxpdmUgaW4gYSBsZWF2ZSBwaGFzZSB3ZSBuZWVkIHRvIHJldHVybiBhIEtlZXBBbGl2ZVxyXG4vLyBwbGFjZWhvbGRlciB3aXRoIGVtcHR5IGNvbnRlbnQgdG8gYXZvaWQgdGhlIEtlZXBBbGl2ZSBpbnN0YW5jZSBmcm9tIGJlaW5nXHJcbi8vIHVubW91bnRlZC5cclxuZnVuY3Rpb24gZW1wdHlQbGFjZWhvbGRlcih2bm9kZSkge1xyXG4gICAgaWYgKGlzS2VlcEFsaXZlKHZub2RlKSkge1xyXG4gICAgICAgIHZub2RlID0gY2xvbmVWTm9kZSh2bm9kZSk7XHJcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB2bm9kZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRLZWVwQWxpdmVDaGlsZCh2bm9kZSkge1xyXG4gICAgcmV0dXJuIGlzS2VlcEFsaXZlKHZub2RlKVxyXG4gICAgICAgID8gdm5vZGUuY2hpbGRyZW5cclxuICAgICAgICAgICAgPyB2bm9kZS5jaGlsZHJlblswXVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgIDogdm5vZGU7XHJcbn1cclxuZnVuY3Rpb24gc2V0VHJhbnNpdGlvbkhvb2tzKHZub2RlLCBob29rcykge1xyXG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8gJiYgdm5vZGUuY29tcG9uZW50KSB7XHJcbiAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKHZub2RlLmNvbXBvbmVudC5zdWJUcmVlLCBob29rcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgIHZub2RlLnNzQ29udGVudC50cmFuc2l0aW9uID0gaG9va3MuY2xvbmUodm5vZGUuc3NDb250ZW50KTtcclxuICAgICAgICB2bm9kZS5zc0ZhbGxiYWNrLnRyYW5zaXRpb24gPSBob29rcy5jbG9uZSh2bm9kZS5zc0ZhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZub2RlLnRyYW5zaXRpb24gPSBob29rcztcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4oY2hpbGRyZW4sIGtlZXBDb21tZW50ID0gZmFsc2UsIHBhcmVudEtleSkge1xyXG4gICAgbGV0IHJldCA9IFtdO1xyXG4gICAgbGV0IGtleWVkRnJhZ21lbnRDb3VudCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgLy8gIzUzNjAgaW5oZXJpdCBwYXJlbnQga2V5IGluIGNhc2Ugb2YgPHRlbXBsYXRlIHYtZm9yPlxyXG4gICAgICAgIGNvbnN0IGtleSA9IHBhcmVudEtleSA9PSBudWxsXHJcbiAgICAgICAgICAgID8gY2hpbGQua2V5XHJcbiAgICAgICAgICAgIDogU3RyaW5nKHBhcmVudEtleSkgKyBTdHJpbmcoY2hpbGQua2V5ICE9IG51bGwgPyBjaGlsZC5rZXkgOiBpKTtcclxuICAgICAgICAvLyBoYW5kbGUgZnJhZ21lbnQgY2hpbGRyZW4gY2FzZSwgZS5nLiB2LWZvclxyXG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSBGcmFnbWVudCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQucGF0Y2hGbGFnICYgMTI4IC8qIFBhdGNoRmxhZ3MuS0VZRURfRlJBR01FTlQgKi8pXHJcbiAgICAgICAgICAgICAgICBrZXllZEZyYWdtZW50Q291bnQrKztcclxuICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdChnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGtlZXBDb21tZW50LCBrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29tbWVudCBwbGFjZWhvbGRlcnMgc2hvdWxkIGJlIHNraXBwZWQsIGUuZy4gdi1pZlxyXG4gICAgICAgIGVsc2UgaWYgKGtlZXBDb21tZW50IHx8IGNoaWxkLnR5cGUgIT09IENvbW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0LnB1c2goa2V5ICE9IG51bGwgPyBjbG9uZVZOb2RlKGNoaWxkLCB7IGtleSB9KSA6IGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAjMTEyNiBpZiBhIHRyYW5zaXRpb24gY2hpbGRyZW4gbGlzdCBjb250YWlucyBtdWx0aXBsZSBzdWIgZnJhZ21lbnRzLCB0aGVzZVxyXG4gICAgLy8gZnJhZ21lbnRzIHdpbGwgYmUgbWVyZ2VkIGludG8gYSBmbGF0IGNoaWxkcmVuIGFycmF5LiBTaW5jZSBlYWNoIHYtZm9yXHJcbiAgICAvLyBmcmFnbWVudCBtYXkgY29udGFpbiBkaWZmZXJlbnQgc3RhdGljIGJpbmRpbmdzIGluc2lkZSwgd2UgbmVlZCB0byBkZS1vcFxyXG4gICAgLy8gdGhlc2UgY2hpbGRyZW4gdG8gZm9yY2UgZnVsbCBkaWZmcyB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvci5cclxuICAgIGlmIChrZXllZEZyYWdtZW50Q291bnQgPiAxKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmV0W2ldLnBhdGNoRmxhZyA9IC0yIC8qIFBhdGNoRmxhZ3MuQkFJTCAqLztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XG5cbi8vIGltcGxlbWVudGF0aW9uLCBjbG9zZSB0byBuby1vcFxyXG5mdW5jdGlvbiBkZWZpbmVDb21wb25lbnQob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob3B0aW9ucykgPyB7IHNldHVwOiBvcHRpb25zLCBuYW1lOiBvcHRpb25zLm5hbWUgfSA6IG9wdGlvbnM7XHJcbn1cblxuY29uc3QgaXNBc3luY1dyYXBwZXIgPSAoaSkgPT4gISFpLnR5cGUuX19hc3luY0xvYWRlcjtcclxuZnVuY3Rpb24gZGVmaW5lQXN5bmNDb21wb25lbnQoc291cmNlKSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XHJcbiAgICAgICAgc291cmNlID0geyBsb2FkZXI6IHNvdXJjZSB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBsb2FkZXIsIGxvYWRpbmdDb21wb25lbnQsIGVycm9yQ29tcG9uZW50LCBkZWxheSA9IDIwMCwgdGltZW91dCwgLy8gdW5kZWZpbmVkID0gbmV2ZXIgdGltZXMgb3V0XHJcbiAgICBzdXNwZW5zaWJsZSA9IHRydWUsIG9uRXJyb3I6IHVzZXJPbkVycm9yIH0gPSBzb3VyY2U7XHJcbiAgICBsZXQgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xyXG4gICAgbGV0IHJlc29sdmVkQ29tcDtcclxuICAgIGxldCByZXRyaWVzID0gMDtcclxuICAgIGNvbnN0IHJldHJ5ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHJpZXMrKztcclxuICAgICAgICBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGxvYWQoKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBsb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCB0aGlzUmVxdWVzdDtcclxuICAgICAgICByZXR1cm4gKHBlbmRpbmdSZXF1ZXN0IHx8XHJcbiAgICAgICAgICAgICh0aGlzUmVxdWVzdCA9IHBlbmRpbmdSZXF1ZXN0ID1cclxuICAgICAgICAgICAgICAgIGxvYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlclJldHJ5ID0gKCkgPT4gcmVzb2x2ZShyZXRyeSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJGYWlsID0gKCkgPT4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyT25FcnJvcihlcnIsIHVzZXJSZXRyeSwgdXNlckZhaWwsIHJldHJpZXMgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoY29tcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFjb21wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYEFzeW5jIGNvbXBvbmVudCBsb2FkZXIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkLiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBJZiB5b3UgYXJlIHVzaW5nIHJldHJ5KCksIG1ha2Ugc3VyZSB0byByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS5gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJvcCBtb2R1bGUgZGVmYXVsdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wLl9fZXNNb2R1bGUgfHwgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXN5bmMgY29tcG9uZW50IGxvYWQgcmVzdWx0OiAke2NvbXB9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQ29tcCA9IGNvbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7XHJcbiAgICAgICAgICAgICAgICB9KSkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQoe1xyXG4gICAgICAgIG5hbWU6ICdBc3luY0NvbXBvbmVudFdyYXBwZXInLFxyXG4gICAgICAgIF9fYXN5bmNMb2FkZXI6IGxvYWQsXHJcbiAgICAgICAgZ2V0IF9fYXN5bmNSZXNvbHZlZCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkQ29tcDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldHVwKCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgICAgICAgICAgLy8gYWxyZWFkeSByZXNvbHZlZFxyXG4gICAgICAgICAgICBpZiAocmVzb2x2ZWRDb21wKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gY3JlYXRlSW5uZXJDb21wKHJlc29sdmVkQ29tcCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCAxMyAvKiBFcnJvckNvZGVzLkFTWU5DX0NPTVBPTkVOVF9MT0FERVIgKi8sICFlcnJvckNvbXBvbmVudCAvKiBkbyBub3QgdGhyb3cgaW4gZGV2IGlmIHVzZXIgcHJvdmlkZWQgZXJyb3IgY29tcG9uZW50ICovKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gc3VzcGVuc2UtY29udHJvbGxlZCBvciBTU1IuXHJcbiAgICAgICAgICAgIGlmICgoc3VzcGVuc2libGUgJiYgaW5zdGFuY2Uuc3VzcGVuc2UpIHx8XHJcbiAgICAgICAgICAgICAgICAoaXNJblNTUkNvbXBvbmVudFNldHVwKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWQoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGNvbXAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBjcmVhdGVJbm5lckNvbXAoY29tcCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGVycm9yQ29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlVk5vZGUoZXJyb3JDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbG9hZGVkID0gcmVmKGZhbHNlKTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZWYoKTtcclxuICAgICAgICAgICAgY29uc3QgZGVsYXllZCA9IHJlZighIWRlbGF5KTtcclxuICAgICAgICAgICAgaWYgKGRlbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxheWVkLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LCBkZWxheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2FkZWQudmFsdWUgJiYgIWVycm9yLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXMuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9hZCgpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2FkZWQudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudCAmJiBpc0tlZXBBbGl2ZShpbnN0YW5jZS5wYXJlbnQudm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50IGlzIGtlZXAtYWxpdmUsIGZvcmNlIHVwZGF0ZSBzbyB0aGUgbG9hZGVkIGNvbXBvbmVudCdzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbmFtZSBpcyB0YWtlbiBpbnRvIGFjY291bnRcclxuICAgICAgICAgICAgICAgICAgICBxdWV1ZUpvYihpbnN0YW5jZS5wYXJlbnQudXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvYWRlZC52YWx1ZSAmJiByZXNvbHZlZENvbXApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5uZXJDb21wKHJlc29sdmVkQ29tcCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IudmFsdWUgJiYgZXJyb3JDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoZXJyb3JDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsb2FkaW5nQ29tcG9uZW50ICYmICFkZWxheWVkLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKGxvYWRpbmdDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUlubmVyQ29tcChjb21wLCB7IHZub2RlOiB7IHJlZiwgcHJvcHMsIGNoaWxkcmVuLCBzaGFwZUZsYWcgfSwgcGFyZW50IH0pIHtcclxuICAgIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUoY29tcCwgcHJvcHMsIGNoaWxkcmVuKTtcclxuICAgIC8vIGVuc3VyZSBpbm5lciBjb21wb25lbnQgaW5oZXJpdHMgdGhlIGFzeW5jIHdyYXBwZXIncyByZWYgb3duZXJcclxuICAgIHZub2RlLnJlZiA9IHJlZjtcclxuICAgIHJldHVybiB2bm9kZTtcclxufVxuXG5jb25zdCBpc0tlZXBBbGl2ZSA9ICh2bm9kZSkgPT4gdm5vZGUudHlwZS5fX2lzS2VlcEFsaXZlO1xyXG5jb25zdCBLZWVwQWxpdmVJbXBsID0ge1xyXG4gICAgbmFtZTogYEtlZXBBbGl2ZWAsXHJcbiAgICAvLyBNYXJrZXIgZm9yIHNwZWNpYWwgaGFuZGxpbmcgaW5zaWRlIHRoZSByZW5kZXJlci4gV2UgYXJlIG5vdCB1c2luZyBhID09PVxyXG4gICAgLy8gY2hlY2sgZGlyZWN0bHkgb24gS2VlcEFsaXZlIGluIHRoZSByZW5kZXJlciwgYmVjYXVzZSBpbXBvcnRpbmcgaXQgZGlyZWN0bHlcclxuICAgIC8vIHdvdWxkIHByZXZlbnQgaXQgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cclxuICAgIF9faXNLZWVwQWxpdmU6IHRydWUsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGluY2x1ZGU6IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldLFxyXG4gICAgICAgIGV4Y2x1ZGU6IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldLFxyXG4gICAgICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxyXG4gICAgfSxcclxuICAgIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIC8vIEtlZXBBbGl2ZSBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaW5zdGFudGlhdGVkIHJlbmRlcmVyIHZpYSB0aGVcclxuICAgICAgICAvLyBjdHggd2hlcmUgdGhlIHJlbmRlcmVyIHBhc3NlcyBpbiBpdHMgaW50ZXJuYWxzLFxyXG4gICAgICAgIC8vIGFuZCB0aGUgS2VlcEFsaXZlIGluc3RhbmNlIGV4cG9zZXMgYWN0aXZhdGUvZGVhY3RpdmF0ZSBpbXBsZW1lbnRhdGlvbnMuXHJcbiAgICAgICAgLy8gVGhlIHdob2xlIHBvaW50IG9mIHRoaXMgaXMgdG8gYXZvaWQgaW1wb3J0aW5nIEtlZXBBbGl2ZSBkaXJlY3RseSBpbiB0aGVcclxuICAgICAgICAvLyByZW5kZXJlciB0byBmYWNpbGl0YXRlIHRyZWUtc2hha2luZy5cclxuICAgICAgICBjb25zdCBzaGFyZWRDb250ZXh0ID0gaW5zdGFuY2UuY3R4O1xyXG4gICAgICAgIC8vIGlmIHRoZSBpbnRlcm5hbCByZW5kZXJlciBpcyBub3QgcmVnaXN0ZXJlZCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcsXHJcbiAgICAgICAgLy8gZm9yIEtlZXBBbGl2ZSwgd2UganVzdCBuZWVkIHRvIHJlbmRlciBpdHMgY2hpbGRyZW5cclxuICAgICAgICBpZiAoIXNoYXJlZENvbnRleHQucmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCAmJiBzbG90cy5kZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAxID8gY2hpbGRyZW5bMF0gOiBjaGlsZHJlbjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoKTtcclxuICAgICAgICBsZXQgY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UuX192X2NhY2hlID0gY2FjaGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmVudFN1c3BlbnNlID0gaW5zdGFuY2Uuc3VzcGVuc2U7XHJcbiAgICAgICAgY29uc3QgeyByZW5kZXJlcjogeyBwOiBwYXRjaCwgbTogbW92ZSwgdW06IF91bm1vdW50LCBvOiB7IGNyZWF0ZUVsZW1lbnQgfSB9IH0gPSBzaGFyZWRDb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBzaGFyZWRDb250ZXh0LmFjdGl2YXRlID0gKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgaXNTVkcsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgbW92ZSh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIDAgLyogTW92ZVR5cGUuRU5URVIgKi8sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSBwcm9wcyBoYXZlIGNoYW5nZWRcclxuICAgICAgICAgICAgcGF0Y2goaW5zdGFuY2Uudm5vZGUsIHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgaW5zdGFuY2UsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgdm5vZGUuc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaXNEZWFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnZva2VBcnJheUZucyhpbnN0YW5jZS5hKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZub2RlSG9vayA9IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLm9uVm5vZGVNb3VudGVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZub2RlSG9vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIGluc3RhbmNlLnBhcmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50cyB0cmVlXHJcbiAgICAgICAgICAgICAgICBkZXZ0b29sc0NvbXBvbmVudEFkZGVkKGluc3RhbmNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2hhcmVkQ29udGV4dC5kZWFjdGl2YXRlID0gKHZub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50O1xyXG4gICAgICAgICAgICBtb3ZlKHZub2RlLCBzdG9yYWdlQ29udGFpbmVyLCBudWxsLCAxIC8qIE1vdmVUeXBlLkxFQVZFICovLCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UuZGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnZva2VBcnJheUZucyhpbnN0YW5jZS5kYSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bm9kZUhvb2sgPSB2bm9kZS5wcm9wcyAmJiB2bm9kZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZub2RlSG9vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIGluc3RhbmNlLnBhcmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaXNEZWFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjb21wb25lbnRzIHRyZWVcclxuICAgICAgICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmdW5jdGlvbiB1bm1vdW50KHZub2RlKSB7XHJcbiAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBzaGFwZUZsYWcgc28gaXQgY2FuIGJlIHByb3Blcmx5IHVubW91bnRlZFxyXG4gICAgICAgICAgICByZXNldFNoYXBlRmxhZyh2bm9kZSk7XHJcbiAgICAgICAgICAgIF91bm1vdW50KHZub2RlLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBwcnVuZUNhY2hlKGZpbHRlcikge1xyXG4gICAgICAgICAgICBjYWNoZS5mb3JFYWNoKCh2bm9kZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh2bm9kZS50eXBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmICghZmlsdGVyIHx8ICFmaWx0ZXIobmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkoa2V5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnQgfHwgY2FjaGVkLnR5cGUgIT09IGN1cnJlbnQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudChjYWNoZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIGluc3RhbmNlIHNob3VsZCBubyBsb25nZXIgYmUga2VwdC1hbGl2ZS5cclxuICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0IHVubW91bnQgaXQgbm93IGJ1dCBpdCBtaWdodCBiZSBsYXRlciwgc28gcmVzZXQgaXRzIGZsYWcgbm93LlxyXG4gICAgICAgICAgICAgICAgcmVzZXRTaGFwZUZsYWcoY3VycmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgICAgIGtleXMuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBydW5lIGNhY2hlIG9uIGluY2x1ZGUvZXhjbHVkZSBwcm9wIGNoYW5nZVxyXG4gICAgICAgIHdhdGNoKCgpID0+IFtwcm9wcy5pbmNsdWRlLCBwcm9wcy5leGNsdWRlXSwgKFtpbmNsdWRlLCBleGNsdWRlXSkgPT4ge1xyXG4gICAgICAgICAgICBpbmNsdWRlICYmIHBydW5lQ2FjaGUobmFtZSA9PiBtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKTtcclxuICAgICAgICAgICAgZXhjbHVkZSAmJiBwcnVuZUNhY2hlKG5hbWUgPT4gIW1hdGNoZXMoZXhjbHVkZSwgbmFtZSkpO1xyXG4gICAgICAgIH0sIFxyXG4gICAgICAgIC8vIHBydW5lIHBvc3QtcmVuZGVyIGFmdGVyIGBjdXJyZW50YCBoYXMgYmVlbiB1cGRhdGVkXHJcbiAgICAgICAgeyBmbHVzaDogJ3Bvc3QnLCBkZWVwOiB0cnVlIH0pO1xyXG4gICAgICAgIC8vIGNhY2hlIHN1YiB0cmVlIGFmdGVyIHJlbmRlclxyXG4gICAgICAgIGxldCBwZW5kaW5nQ2FjaGVLZXkgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlU3VidHJlZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gZml4ICMxNjIxLCB0aGUgcGVuZGluZ0NhY2hlS2V5IGNvdWxkIGJlIDBcclxuICAgICAgICAgICAgaWYgKHBlbmRpbmdDYWNoZUtleSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5zZXQocGVuZGluZ0NhY2hlS2V5LCBnZXRJbm5lckNoaWxkKGluc3RhbmNlLnN1YlRyZWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgb25Nb3VudGVkKGNhY2hlU3VidHJlZSk7XHJcbiAgICAgICAgb25VcGRhdGVkKGNhY2hlU3VidHJlZSk7XHJcbiAgICAgICAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcclxuICAgICAgICAgICAgY2FjaGUuZm9yRWFjaChjYWNoZWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdWJUcmVlLCBzdXNwZW5zZSB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bm9kZSA9IGdldElubmVyQ2hpbGQoc3ViVHJlZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVkLnR5cGUgPT09IHZub2RlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGluc3RhbmNlIHdpbGwgYmUgdW5tb3VudGVkIGFzIHBhcnQgb2Yga2VlcC1hbGl2ZSdzIHVubW91bnRcclxuICAgICAgICAgICAgICAgICAgICByZXNldFNoYXBlRmxhZyh2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGludm9rZSBpdHMgZGVhY3RpdmF0ZWQgaG9vayBoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGEgPSB2bm9kZS5jb21wb25lbnQuZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgZGEgJiYgcXVldWVQb3N0UmVuZGVyRWZmZWN0KGRhLCBzdXNwZW5zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdW5tb3VudChjYWNoZWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBwZW5kaW5nQ2FjaGVLZXkgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIXNsb3RzLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBjb25zdCByYXdWTm9kZSA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYEtlZXBBbGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBjb21wb25lbnQgY2hpbGQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghaXNWTm9kZShyYXdWTm9kZSkgfHxcclxuICAgICAgICAgICAgICAgICghKHJhd1ZOb2RlLnNoYXBlRmxhZyAmIDQgLyogU2hhcGVGbGFncy5TVEFURUZVTF9DT01QT05FTlQgKi8pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIShyYXdWTm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykpKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByYXdWTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdm5vZGUgPSBnZXRJbm5lckNoaWxkKHJhd1ZOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgY29tcCA9IHZub2RlLnR5cGU7XHJcbiAgICAgICAgICAgIC8vIGZvciBhc3luYyBjb21wb25lbnRzLCBuYW1lIGNoZWNrIHNob3VsZCBiZSBiYXNlZCBpbiBpdHMgbG9hZGVkXHJcbiAgICAgICAgICAgIC8vIGlubmVyIGNvbXBvbmVudCBpZiBhdmFpbGFibGVcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoaXNBc3luY1dyYXBwZXIodm5vZGUpXHJcbiAgICAgICAgICAgICAgICA/IHZub2RlLnR5cGUuX19hc3luY1Jlc29sdmVkIHx8IHt9XHJcbiAgICAgICAgICAgICAgICA6IGNvbXApO1xyXG4gICAgICAgICAgICBjb25zdCB7IGluY2x1ZGUsIGV4Y2x1ZGUsIG1heCB9ID0gcHJvcHM7XHJcbiAgICAgICAgICAgIGlmICgoaW5jbHVkZSAmJiAoIW5hbWUgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHZub2RlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhd1ZOb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHZub2RlLmtleSA9PSBudWxsID8gY29tcCA6IHZub2RlLmtleTtcclxuICAgICAgICAgICAgY29uc3QgY2FjaGVkVk5vZGUgPSBjYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICAgICAgLy8gY2xvbmUgdm5vZGUgaWYgaXQncyByZXVzZWQgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gbXV0YXRlIGl0XHJcbiAgICAgICAgICAgIGlmICh2bm9kZS5lbCkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUgPSBjbG9uZVZOb2RlKHZub2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyYXdWTm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhd1ZOb2RlLnNzQ29udGVudCA9IHZub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICMxNTEzIGl0J3MgcG9zc2libGUgZm9yIHRoZSByZXR1cm5lZCB2bm9kZSB0byBiZSBjbG9uZWQgZHVlIHRvIGF0dHJcclxuICAgICAgICAgICAgLy8gZmFsbHRocm91Z2ggb3Igc2NvcGVJZCwgc28gdGhlIHZub2RlIGhlcmUgbWF5IG5vdCBiZSB0aGUgZmluYWwgdm5vZGVcclxuICAgICAgICAgICAgLy8gdGhhdCBpcyBtb3VudGVkLiBJbnN0ZWFkIG9mIGNhY2hpbmcgaXQgZGlyZWN0bHksIHdlIHN0b3JlIHRoZSBwZW5kaW5nXHJcbiAgICAgICAgICAgIC8vIGtleSBhbmQgY2FjaGUgYGluc3RhbmNlLnN1YlRyZWVgICh0aGUgbm9ybWFsaXplZCB2bm9kZSkgaW5cclxuICAgICAgICAgICAgLy8gYmVmb3JlTW91bnQvYmVmb3JlVXBkYXRlIGhvb2tzLlxyXG4gICAgICAgICAgICBwZW5kaW5nQ2FjaGVLZXkgPSBrZXk7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRWTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29weSBvdmVyIG1vdW50ZWQgc3RhdGVcclxuICAgICAgICAgICAgICAgIHZub2RlLmVsID0gY2FjaGVkVk5vZGUuZWw7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5jb21wb25lbnQgPSBjYWNoZWRWTm9kZS5jb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodm5vZGUudHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IHVwZGF0ZSB0cmFuc2l0aW9uIGhvb2tzIG9uIHN1YlRyZWVcclxuICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3Modm5vZGUsIHZub2RlLnRyYW5zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgdm5vZGUgYmVpbmcgbW91bnRlZCBhcyBmcmVzaFxyXG4gICAgICAgICAgICAgICAgdm5vZGUuc2hhcGVGbGFnIHw9IDUxMiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9LRVBUX0FMSVZFICovO1xyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSB0aGlzIGtleSB0aGUgZnJlc2hlc3RcclxuICAgICAgICAgICAgICAgIGtleXMuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgICAgICAgICBrZXlzLmFkZChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAga2V5cy5hZGQoa2V5KTtcclxuICAgICAgICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxyXG4gICAgICAgICAgICAgICAgaWYgKG1heCAmJiBrZXlzLnNpemUgPiBwYXJzZUludChtYXgsIDEwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShrZXlzLnZhbHVlcygpLm5leHQoKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYXZvaWQgdm5vZGUgYmVpbmcgdW5tb3VudGVkXHJcbiAgICAgICAgICAgIHZub2RlLnNoYXBlRmxhZyB8PSAyNTYgLyogU2hhcGVGbGFncy5DT01QT05FTlRfU0hPVUxEX0tFRVBfQUxJVkUgKi87XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSB2bm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzU3VzcGVuc2UocmF3Vk5vZGUudHlwZSkgPyByYXdWTm9kZSA6IHZub2RlO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcbi8vIGV4cG9ydCB0aGUgcHVibGljIHR5cGUgZm9yIGgvdHN4IGluZmVyZW5jZVxyXG4vLyBhbHNvIHRvIGF2b2lkIGlubGluZSBpbXBvcnQoKSBpbiBnZW5lcmF0ZWQgZC50cyBmaWxlc1xyXG5jb25zdCBLZWVwQWxpdmUgPSBLZWVwQWxpdmVJbXBsO1xyXG5mdW5jdGlvbiBtYXRjaGVzKHBhdHRlcm4sIG5hbWUpIHtcclxuICAgIGlmIChpc0FycmF5KHBhdHRlcm4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uc29tZSgocCkgPT4gbWF0Y2hlcyhwLCBuYW1lKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyhwYXR0ZXJuKSkge1xyXG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwYXR0ZXJuLnRlc3QpIHtcclxuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBvbkFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcclxuICAgIHJlZ2lzdGVyS2VlcEFsaXZlSG9vayhob29rLCBcImFcIiAvKiBMaWZlY3ljbGVIb29rcy5BQ1RJVkFURUQgKi8sIHRhcmdldCk7XHJcbn1cclxuZnVuY3Rpb24gb25EZWFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcclxuICAgIHJlZ2lzdGVyS2VlcEFsaXZlSG9vayhob29rLCBcImRhXCIgLyogTGlmZWN5Y2xlSG9va3MuREVBQ1RJVkFURUQgKi8sIHRhcmdldCk7XHJcbn1cclxuZnVuY3Rpb24gcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIHR5cGUsIHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZSkge1xyXG4gICAgLy8gY2FjaGUgdGhlIGRlYWN0aXZhdGUgYnJhbmNoIGNoZWNrIHdyYXBwZXIgZm9yIGluamVjdGVkIGhvb2tzIHNvIHRoZSBzYW1lXHJcbiAgICAvLyBob29rIGNhbiBiZSBwcm9wZXJseSBkZWR1cGVkIGJ5IHRoZSBzY2hlZHVsZXIuIFwiX193ZGNcIiBzdGFuZHMgZm9yIFwid2l0aFxyXG4gICAgLy8gZGVhY3RpdmF0aW9uIGNoZWNrXCIuXHJcbiAgICBjb25zdCB3cmFwcGVkSG9vayA9IGhvb2suX193ZGMgfHxcclxuICAgICAgICAoaG9vay5fX3dkYyA9ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gb25seSBmaXJlIHRoZSBob29rIGlmIHRoZSB0YXJnZXQgaW5zdGFuY2UgaXMgTk9UIGluIGEgZGVhY3RpdmF0ZWQgYnJhbmNoLlxyXG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IHRhcmdldDtcclxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmlzRGVhY3RpdmF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhvb2soKTtcclxuICAgICAgICB9KTtcclxuICAgIGluamVjdEhvb2sodHlwZSwgd3JhcHBlZEhvb2ssIHRhcmdldCk7XHJcbiAgICAvLyBJbiBhZGRpdGlvbiB0byByZWdpc3RlcmluZyBpdCBvbiB0aGUgdGFyZ2V0IGluc3RhbmNlLCB3ZSB3YWxrIHVwIHRoZSBwYXJlbnRcclxuICAgIC8vIGNoYWluIGFuZCByZWdpc3RlciBpdCBvbiBhbGwgYW5jZXN0b3IgaW5zdGFuY2VzIHRoYXQgYXJlIGtlZXAtYWxpdmUgcm9vdHMuXHJcbiAgICAvLyBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0byB3YWxrIHRoZSBlbnRpcmUgY29tcG9uZW50IHRyZWUgd2hlbiBpbnZva2luZyB0aGVzZVxyXG4gICAgLy8gaG9va3MsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBhdm9pZHMgdGhlIG5lZWQgdG8gdHJhY2sgY2hpbGQgY29tcG9uZW50cyBpblxyXG4gICAgLy8gYXJyYXlzLlxyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgIGxldCBjdXJyZW50ID0gdGFyZ2V0LnBhcmVudDtcclxuICAgICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAoaXNLZWVwQWxpdmUoY3VycmVudC5wYXJlbnQudm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpbmplY3RUb0tlZXBBbGl2ZVJvb3Qod3JhcHBlZEhvb2ssIHR5cGUsIHRhcmdldCwgY3VycmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbmplY3RUb0tlZXBBbGl2ZVJvb3QoaG9vaywgdHlwZSwgdGFyZ2V0LCBrZWVwQWxpdmVSb290KSB7XHJcbiAgICAvLyBpbmplY3RIb29rIHdyYXBzIHRoZSBvcmlnaW5hbCBmb3IgZXJyb3IgaGFuZGxpbmcsIHNvIG1ha2Ugc3VyZSB0byByZW1vdmVcclxuICAgIC8vIHRoZSB3cmFwcGVkIHZlcnNpb24uXHJcbiAgICBjb25zdCBpbmplY3RlZCA9IGluamVjdEhvb2sodHlwZSwgaG9vaywga2VlcEFsaXZlUm9vdCwgdHJ1ZSAvKiBwcmVwZW5kICovKTtcclxuICAgIG9uVW5tb3VudGVkKCgpID0+IHtcclxuICAgICAgICByZW1vdmUoa2VlcEFsaXZlUm9vdFt0eXBlXSwgaW5qZWN0ZWQpO1xyXG4gICAgfSwgdGFyZ2V0KTtcclxufVxyXG5mdW5jdGlvbiByZXNldFNoYXBlRmxhZyh2bm9kZSkge1xyXG4gICAgbGV0IHNoYXBlRmxhZyA9IHZub2RlLnNoYXBlRmxhZztcclxuICAgIGlmIChzaGFwZUZsYWcgJiAyNTYgLyogU2hhcGVGbGFncy5DT01QT05FTlRfU0hPVUxEX0tFRVBfQUxJVkUgKi8pIHtcclxuICAgICAgICBzaGFwZUZsYWcgLT0gMjU2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFICovO1xyXG4gICAgfVxyXG4gICAgaWYgKHNoYXBlRmxhZyAmIDUxMiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9LRVBUX0FMSVZFICovKSB7XHJcbiAgICAgICAgc2hhcGVGbGFnIC09IDUxMiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9LRVBUX0FMSVZFICovO1xyXG4gICAgfVxyXG4gICAgdm5vZGUuc2hhcGVGbGFnID0gc2hhcGVGbGFnO1xyXG59XHJcbmZ1bmN0aW9uIGdldElubmVyQ2hpbGQodm5vZGUpIHtcclxuICAgIHJldHVybiB2bm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLyA/IHZub2RlLnNzQ29udGVudCA6IHZub2RlO1xyXG59XG5cbmZ1bmN0aW9uIGluamVjdEhvb2sodHlwZSwgaG9vaywgdGFyZ2V0ID0gY3VycmVudEluc3RhbmNlLCBwcmVwZW5kID0gZmFsc2UpIHtcclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBob29rcyA9IHRhcmdldFt0eXBlXSB8fCAodGFyZ2V0W3R5cGVdID0gW10pO1xyXG4gICAgICAgIC8vIGNhY2hlIHRoZSBlcnJvciBoYW5kbGluZyB3cmFwcGVyIGZvciBpbmplY3RlZCBob29rcyBzbyB0aGUgc2FtZSBob29rXHJcbiAgICAgICAgLy8gY2FuIGJlIHByb3Blcmx5IGRlZHVwZWQgYnkgdGhlIHNjaGVkdWxlci4gXCJfX3dlaFwiIHN0YW5kcyBmb3IgXCJ3aXRoIGVycm9yXHJcbiAgICAgICAgLy8gaGFuZGxpbmdcIi5cclxuICAgICAgICBjb25zdCB3cmFwcGVkSG9vayA9IGhvb2suX193ZWggfHxcclxuICAgICAgICAgICAgKGhvb2suX193ZWggPSAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5pc1VubW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgdHJhY2tpbmcgaW5zaWRlIGFsbCBsaWZlY3ljbGUgaG9va3NcclxuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkgY2FuIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBpbnNpZGUgZWZmZWN0cy5cclxuICAgICAgICAgICAgICAgIHBhdXNlVHJhY2tpbmcoKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBjdXJyZW50SW5zdGFuY2UgZHVyaW5nIGhvb2sgaW52b2NhdGlvbi5cclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGUgaG9vayBkb2VzIG5vdCBzeW5jaHJvbm91c2x5IHRyaWdnZXIgb3RoZXIgaG9va3MsIHdoaWNoXHJcbiAgICAgICAgICAgICAgICAvLyBjYW4gb25seSBiZSBmYWxzZSB3aGVuIHRoZSB1c2VyIGRvZXMgc29tZXRoaW5nIHJlYWxseSBmdW5reS5cclxuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaG9vaywgdGFyZ2V0LCB0eXBlLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICByZXNldFRyYWNraW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAocHJlcGVuZCkge1xyXG4gICAgICAgICAgICBob29rcy51bnNoaWZ0KHdyYXBwZWRIb29rKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhvb2tzLnB1c2god3JhcHBlZEhvb2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd3JhcHBlZEhvb2s7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjb25zdCBhcGlOYW1lID0gdG9IYW5kbGVyS2V5KEVycm9yVHlwZVN0cmluZ3NbdHlwZV0ucmVwbGFjZSgvIGhvb2skLywgJycpKTtcclxuICAgICAgICB3YXJuKGAke2FwaU5hbWV9IGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgYCArXHJcbiAgICAgICAgICAgIGBhc3NvY2lhdGVkIHdpdGguIGAgK1xyXG4gICAgICAgICAgICBgTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLmAgK1xyXG4gICAgICAgICAgICAoYCBJZiB5b3UgYXJlIHVzaW5nIGFzeW5jIHNldHVwKCksIG1ha2Ugc3VyZSB0byByZWdpc3RlciBsaWZlY3ljbGUgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYGhvb2tzIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQgc3RhdGVtZW50LmBcclxuICAgICAgICAgICAgICAgICkpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGNyZWF0ZUhvb2sgPSAobGlmZWN5Y2xlKSA9PiAoaG9vaywgdGFyZ2V0ID0gY3VycmVudEluc3RhbmNlKSA9PiBcclxuLy8gcG9zdC1jcmVhdGUgbGlmZWN5Y2xlIHJlZ2lzdHJhdGlvbnMgYXJlIG5vb3BzIGR1cmluZyBTU1IgKGV4Y2VwdCBmb3Igc2VydmVyUHJlZmV0Y2gpXHJcbighaXNJblNTUkNvbXBvbmVudFNldHVwIHx8IGxpZmVjeWNsZSA9PT0gXCJzcFwiIC8qIExpZmVjeWNsZUhvb2tzLlNFUlZFUl9QUkVGRVRDSCAqLykgJiZcclxuICAgIGluamVjdEhvb2sobGlmZWN5Y2xlLCBob29rLCB0YXJnZXQpO1xyXG5jb25zdCBvbkJlZm9yZU1vdW50ID0gY3JlYXRlSG9vayhcImJtXCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX01PVU5UICovKTtcclxuY29uc3Qgb25Nb3VudGVkID0gY3JlYXRlSG9vayhcIm1cIiAvKiBMaWZlY3ljbGVIb29rcy5NT1VOVEVEICovKTtcclxuY29uc3Qgb25CZWZvcmVVcGRhdGUgPSBjcmVhdGVIb29rKFwiYnVcIiAvKiBMaWZlY3ljbGVIb29rcy5CRUZPUkVfVVBEQVRFICovKTtcclxuY29uc3Qgb25VcGRhdGVkID0gY3JlYXRlSG9vayhcInVcIiAvKiBMaWZlY3ljbGVIb29rcy5VUERBVEVEICovKTtcclxuY29uc3Qgb25CZWZvcmVVbm1vdW50ID0gY3JlYXRlSG9vayhcImJ1bVwiIC8qIExpZmVjeWNsZUhvb2tzLkJFRk9SRV9VTk1PVU5UICovKTtcclxuY29uc3Qgb25Vbm1vdW50ZWQgPSBjcmVhdGVIb29rKFwidW1cIiAvKiBMaWZlY3ljbGVIb29rcy5VTk1PVU5URUQgKi8pO1xyXG5jb25zdCBvblNlcnZlclByZWZldGNoID0gY3JlYXRlSG9vayhcInNwXCIgLyogTGlmZWN5Y2xlSG9va3MuU0VSVkVSX1BSRUZFVENIICovKTtcclxuY29uc3Qgb25SZW5kZXJUcmlnZ2VyZWQgPSBjcmVhdGVIb29rKFwicnRnXCIgLyogTGlmZWN5Y2xlSG9va3MuUkVOREVSX1RSSUdHRVJFRCAqLyk7XHJcbmNvbnN0IG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUhvb2soXCJydGNcIiAvKiBMaWZlY3ljbGVIb29rcy5SRU5ERVJfVFJBQ0tFRCAqLyk7XHJcbmZ1bmN0aW9uIG9uRXJyb3JDYXB0dXJlZChob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgIGluamVjdEhvb2soXCJlY1wiIC8qIExpZmVjeWNsZUhvb2tzLkVSUk9SX0NBUFRVUkVEICovLCBob29rLCB0YXJnZXQpO1xyXG59XG5cbi8qKlxyXG5SdW50aW1lIGhlbHBlciBmb3IgYXBwbHlpbmcgZGlyZWN0aXZlcyB0byBhIHZub2RlLiBFeGFtcGxlIHVzYWdlOlxyXG5cbmNvbnN0IGNvbXAgPSByZXNvbHZlQ29tcG9uZW50KCdjb21wJylcclxuY29uc3QgZm9vID0gcmVzb2x2ZURpcmVjdGl2ZSgnZm9vJylcclxuY29uc3QgYmFyID0gcmVzb2x2ZURpcmVjdGl2ZSgnYmFyJylcclxuXG5yZXR1cm4gd2l0aERpcmVjdGl2ZXMoaChjb21wKSwgW1xyXG4gIFtmb28sIHRoaXMueF0sXHJcbiAgW2JhciwgdGhpcy55XVxyXG5dKVxyXG4qL1xyXG5mdW5jdGlvbiB2YWxpZGF0ZURpcmVjdGl2ZU5hbWUobmFtZSkge1xyXG4gICAgaWYgKGlzQnVpbHRJbkRpcmVjdGl2ZShuYW1lKSkge1xyXG4gICAgICAgIHdhcm4oJ0RvIG5vdCB1c2UgYnVpbHQtaW4gZGlyZWN0aXZlIGlkcyBhcyBjdXN0b20gZGlyZWN0aXZlIGlkOiAnICsgbmFtZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEFkZHMgZGlyZWN0aXZlcyB0byBhIFZOb2RlLlxyXG4gKi9cclxuZnVuY3Rpb24gd2l0aERpcmVjdGl2ZXModm5vZGUsIGRpcmVjdGl2ZXMpIHtcclxuICAgIGNvbnN0IGludGVybmFsSW5zdGFuY2UgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XHJcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGB3aXRoRGlyZWN0aXZlcyBjYW4gb25seSBiZSB1c2VkIGluc2lkZSByZW5kZXIgZnVuY3Rpb25zLmApO1xyXG4gICAgICAgIHJldHVybiB2bm9kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0RXhwb3NlUHJveHkoaW50ZXJuYWxJbnN0YW5jZSkgfHxcclxuICAgICAgICBpbnRlcm5hbEluc3RhbmNlLnByb3h5O1xyXG4gICAgY29uc3QgYmluZGluZ3MgPSB2bm9kZS5kaXJzIHx8ICh2bm9kZS5kaXJzID0gW10pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXJlY3RpdmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IFtkaXIsIHZhbHVlLCBhcmcsIG1vZGlmaWVycyA9IEVNUFRZX09CSl0gPSBkaXJlY3RpdmVzW2ldO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRpcikpIHtcclxuICAgICAgICAgICAgZGlyID0ge1xyXG4gICAgICAgICAgICAgICAgbW91bnRlZDogZGlyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZDogZGlyXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXIuZGVlcCkge1xyXG4gICAgICAgICAgICB0cmF2ZXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpbmRpbmdzLnB1c2goe1xyXG4gICAgICAgICAgICBkaXIsXHJcbiAgICAgICAgICAgIGluc3RhbmNlLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgb2xkVmFsdWU6IHZvaWQgMCxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICBtb2RpZmllcnNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB2bm9kZTtcclxufVxyXG5mdW5jdGlvbiBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBwcmV2Vk5vZGUsIGluc3RhbmNlLCBuYW1lKSB7XHJcbiAgICBjb25zdCBiaW5kaW5ncyA9IHZub2RlLmRpcnM7XHJcbiAgICBjb25zdCBvbGRCaW5kaW5ncyA9IHByZXZWTm9kZSAmJiBwcmV2Vk5vZGUuZGlycztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ3NbaV07XHJcbiAgICAgICAgaWYgKG9sZEJpbmRpbmdzKSB7XHJcbiAgICAgICAgICAgIGJpbmRpbmcub2xkVmFsdWUgPSBvbGRCaW5kaW5nc1tpXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGhvb2sgPSBiaW5kaW5nLmRpcltuYW1lXTtcclxuICAgICAgICBpZiAoaG9vaykge1xyXG4gICAgICAgICAgICAvLyBkaXNhYmxlIHRyYWNraW5nIGluc2lkZSBhbGwgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkgY2FuIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBpbnNpZGUgZWZmZWN0cy5cclxuICAgICAgICAgICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgICAgICAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCBpbnN0YW5jZSwgOCAvKiBFcnJvckNvZGVzLkRJUkVDVElWRV9IT09LICovLCBbXHJcbiAgICAgICAgICAgICAgICB2bm9kZS5lbCxcclxuICAgICAgICAgICAgICAgIGJpbmRpbmcsXHJcbiAgICAgICAgICAgICAgICB2bm9kZSxcclxuICAgICAgICAgICAgICAgIHByZXZWTm9kZVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmVzZXRUcmFja2luZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jb25zdCBDT01QT05FTlRTID0gJ2NvbXBvbmVudHMnO1xyXG5jb25zdCBESVJFQ1RJVkVTID0gJ2RpcmVjdGl2ZXMnO1xyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnQobmFtZSwgbWF5YmVTZWxmUmVmZXJlbmNlKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZUFzc2V0KENPTVBPTkVOVFMsIG5hbWUsIHRydWUsIG1heWJlU2VsZlJlZmVyZW5jZSkgfHwgbmFtZTtcclxufVxyXG5jb25zdCBOVUxMX0RZTkFNSUNfQ09NUE9ORU5UID0gU3ltYm9sKCk7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQoY29tcG9uZW50KSB7XHJcbiAgICBpZiAoaXNTdHJpbmcoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQXNzZXQoQ09NUE9ORU5UUywgY29tcG9uZW50LCBmYWxzZSkgfHwgY29tcG9uZW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gaW52YWxpZCB0eXBlcyB3aWxsIGZhbGx0aHJvdWdoIHRvIGNyZWF0ZVZOb2RlIGFuZCByYWlzZSB3YXJuaW5nXHJcbiAgICAgICAgcmV0dXJuIChjb21wb25lbnQgfHwgTlVMTF9EWU5BTUlDX0NPTVBPTkVOVCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlRGlyZWN0aXZlKG5hbWUpIHtcclxuICAgIHJldHVybiByZXNvbHZlQXNzZXQoRElSRUNUSVZFUywgbmFtZSk7XHJcbn1cclxuLy8gaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0KHR5cGUsIG5hbWUsIHdhcm5NaXNzaW5nID0gdHJ1ZSwgbWF5YmVTZWxmUmVmZXJlbmNlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZTtcclxuICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIGNvbnN0IENvbXBvbmVudCA9IGluc3RhbmNlLnR5cGU7XHJcbiAgICAgICAgLy8gZXhwbGljaXQgc2VsZiBuYW1lIGhhcyBoaWdoZXN0IHByaW9yaXR5XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IENPTVBPTkVOVFMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZk5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCwgZmFsc2UgLyogZG8gbm90IGluY2x1ZGUgaW5mZXJyZWQgbmFtZSB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyBjb2RlICovKTtcclxuICAgICAgICAgICAgaWYgKHNlbGZOYW1lICYmXHJcbiAgICAgICAgICAgICAgICAoc2VsZk5hbWUgPT09IG5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICBzZWxmTmFtZSA9PT0gY2FtZWxpemUobmFtZSkgfHxcclxuICAgICAgICAgICAgICAgICAgICBzZWxmTmFtZSA9PT0gY2FwaXRhbGl6ZShjYW1lbGl6ZShuYW1lKSkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IFxyXG4gICAgICAgIC8vIGxvY2FsIHJlZ2lzdHJhdGlvblxyXG4gICAgICAgIC8vIGNoZWNrIGluc3RhbmNlW3R5cGVdIGZpcnN0IHdoaWNoIGlzIHJlc29sdmVkIGZvciBvcHRpb25zIEFQSVxyXG4gICAgICAgIHJlc29sdmUoaW5zdGFuY2VbdHlwZV0gfHwgQ29tcG9uZW50W3R5cGVdLCBuYW1lKSB8fFxyXG4gICAgICAgICAgICAvLyBnbG9iYWwgcmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgIHJlc29sdmUoaW5zdGFuY2UuYXBwQ29udGV4dFt0eXBlXSwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFyZXMgJiYgbWF5YmVTZWxmUmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIGltcGxpY2l0IHNlbGYtcmVmZXJlbmNlXHJcbiAgICAgICAgICAgIHJldHVybiBDb21wb25lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2Fybk1pc3NpbmcgJiYgIXJlcykge1xyXG4gICAgICAgICAgICBjb25zdCBleHRyYSA9IHR5cGUgPT09IENPTVBPTkVOVFNcclxuICAgICAgICAgICAgICAgID8gYFxcbklmIHRoaXMgaXMgYSBuYXRpdmUgY3VzdG9tIGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBleGNsdWRlIGl0IGZyb20gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYGNvbXBvbmVudCByZXNvbHV0aW9uIHZpYSBjb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50LmBcclxuICAgICAgICAgICAgICAgIDogYGA7XHJcbiAgICAgICAgICAgIHdhcm4oYEZhaWxlZCB0byByZXNvbHZlICR7dHlwZS5zbGljZSgwLCAtMSl9OiAke25hbWV9JHtleHRyYX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIHdhcm4oYHJlc29sdmUke2NhcGl0YWxpemUodHlwZS5zbGljZSgwLCAtMSkpfSBgICtcclxuICAgICAgICAgICAgYGNhbiBvbmx5IGJlIHVzZWQgaW4gcmVuZGVyKCkgb3Igc2V0dXAoKS5gKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZXNvbHZlKHJlZ2lzdHJ5LCBuYW1lKSB7XHJcbiAgICByZXR1cm4gKHJlZ2lzdHJ5ICYmXHJcbiAgICAgICAgKHJlZ2lzdHJ5W25hbWVdIHx8XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5W2NhbWVsaXplKG5hbWUpXSB8fFxyXG4gICAgICAgICAgICByZWdpc3RyeVtjYXBpdGFsaXplKGNhbWVsaXplKG5hbWUpKV0pKTtcclxufVxuXG4vKipcclxuICogQWN0dWFsIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJMaXN0KHNvdXJjZSwgcmVuZGVySXRlbSwgY2FjaGUsIGluZGV4KSB7XHJcbiAgICBsZXQgcmV0O1xyXG4gICAgY29uc3QgY2FjaGVkID0gKGNhY2hlICYmIGNhY2hlW2luZGV4XSk7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpIHx8IGlzU3RyaW5nKHNvdXJjZSkpIHtcclxuICAgICAgICByZXQgPSBuZXcgQXJyYXkoc291cmNlLmxlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBzb3VyY2UubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlckl0ZW0oc291cmNlW2ldLCBpLCB1bmRlZmluZWQsIGNhY2hlZCAmJiBjYWNoZWRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihzb3VyY2UpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYFRoZSB2LWZvciByYW5nZSBleHBlY3QgYW4gaW50ZWdlciB2YWx1ZSBidXQgZ290ICR7c291cmNlfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0ID0gbmV3IEFycmF5KHNvdXJjZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2U7IGkrKykge1xyXG4gICAgICAgICAgICByZXRbaV0gPSByZW5kZXJJdGVtKGkgKyAxLCBpLCB1bmRlZmluZWQsIGNhY2hlZCAmJiBjYWNoZWRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcclxuICAgICAgICBpZiAoc291cmNlW1N5bWJvbC5pdGVyYXRvcl0pIHtcclxuICAgICAgICAgICAgcmV0ID0gQXJyYXkuZnJvbShzb3VyY2UsIChpdGVtLCBpKSA9PiByZW5kZXJJdGVtKGl0ZW0sIGksIHVuZGVmaW5lZCwgY2FjaGVkICYmIGNhY2hlZFtpXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XHJcbiAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXJJdGVtKHNvdXJjZVtrZXldLCBrZXksIGksIGNhY2hlZCAmJiBjYWNoZWRbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0ID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUpIHtcclxuICAgICAgICBjYWNoZVtpbmRleF0gPSByZXQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XG5cbi8qKlxyXG4gKiBDb21waWxlciBydW50aW1lIGhlbHBlciBmb3IgY3JlYXRpbmcgZHluYW1pYyBzbG90cyBvYmplY3RcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVNsb3RzKHNsb3RzLCBkeW5hbWljU2xvdHMpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHluYW1pY1Nsb3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgc2xvdCA9IGR5bmFtaWNTbG90c1tpXTtcclxuICAgICAgICAvLyBhcnJheSBvZiBkeW5hbWljIHNsb3QgZ2VuZXJhdGVkIGJ5IDx0ZW1wbGF0ZSB2LWZvcj1cIi4uLlwiICNbLi4uXT5cclxuICAgICAgICBpZiAoaXNBcnJheShzbG90KSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNsb3QubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHNsb3RzW3Nsb3Rbal0ubmFtZV0gPSBzbG90W2pdLmZuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNsb3QpIHtcclxuICAgICAgICAgICAgLy8gY29uZGl0aW9uYWwgc2luZ2xlIHNsb3QgZ2VuZXJhdGVkIGJ5IDx0ZW1wbGF0ZSB2LWlmPVwiLi4uXCIgI2Zvbz5cclxuICAgICAgICAgICAgc2xvdHNbc2xvdC5uYW1lXSA9IHNsb3Qua2V5XHJcbiAgICAgICAgICAgICAgICA/ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gc2xvdC5mbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMua2V5ID0gc2xvdC5rZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogc2xvdC5mbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2xvdHM7XHJcbn1cblxuLyoqXHJcbiAqIENvbXBpbGVyIHJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgYDxzbG90Lz5gXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJTbG90KHNsb3RzLCBuYW1lLCBwcm9wcyA9IHt9LCBcclxuLy8gdGhpcyBpcyBub3QgYSB1c2VyLWZhY2luZyBmdW5jdGlvbiwgc28gdGhlIGZhbGxiYWNrIGlzIGFsd2F5cyBnZW5lcmF0ZWQgYnlcclxuLy8gdGhlIGNvbXBpbGVyIGFuZCBndWFyYW50ZWVkIHRvIGJlIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGFuIGFycmF5XHJcbmZhbGxiYWNrLCBub1Nsb3R0ZWQpIHtcclxuICAgIGlmIChjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UuaXNDRSB8fFxyXG4gICAgICAgIChjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UucGFyZW50ICYmXHJcbiAgICAgICAgICAgIGlzQXN5bmNXcmFwcGVyKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5wYXJlbnQpICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5wYXJlbnQuaXNDRSkpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoJ3Nsb3QnLCBuYW1lID09PSAnZGVmYXVsdCcgPyBudWxsIDogeyBuYW1lIH0sIGZhbGxiYWNrICYmIGZhbGxiYWNrKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNsb3QgPSBzbG90c1tuYW1lXTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgc2xvdCAmJiBzbG90Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB3YXJuKGBTU1Itb3B0aW1pemVkIHNsb3QgZnVuY3Rpb24gZGV0ZWN0ZWQgaW4gYSBub24tU1NSLW9wdGltaXplZCByZW5kZXIgYCArXHJcbiAgICAgICAgICAgIGBmdW5jdGlvbi4gWW91IG5lZWQgdG8gbWFyayB0aGlzIGNvbXBvbmVudCB3aXRoICRkeW5hbWljLXNsb3RzIGluIHRoZSBgICtcclxuICAgICAgICAgICAgYHBhcmVudCB0ZW1wbGF0ZS5gKTtcclxuICAgICAgICBzbG90ID0gKCkgPT4gW107XHJcbiAgICB9XHJcbiAgICAvLyBhIGNvbXBpbGVkIHNsb3QgZGlzYWJsZXMgYmxvY2sgdHJhY2tpbmcgYnkgZGVmYXVsdCB0byBhdm9pZCBtYW51YWxcclxuICAgIC8vIGludm9jYXRpb24gaW50ZXJmZXJpbmcgd2l0aCB0ZW1wbGF0ZS1iYXNlZCBibG9jayB0cmFja2luZywgYnV0IGluXHJcbiAgICAvLyBgcmVuZGVyU2xvdGAgd2UgY2FuIGJlIHN1cmUgdGhhdCBpdCdzIHRlbXBsYXRlLWJhc2VkIHNvIHdlIGNhbiBmb3JjZVxyXG4gICAgLy8gZW5hYmxlIGl0LlxyXG4gICAgaWYgKHNsb3QgJiYgc2xvdC5fYykge1xyXG4gICAgICAgIHNsb3QuX2QgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIG9wZW5CbG9jaygpO1xyXG4gICAgY29uc3QgdmFsaWRTbG90Q29udGVudCA9IHNsb3QgJiYgZW5zdXJlVmFsaWRWTm9kZShzbG90KHByb3BzKSk7XHJcbiAgICBjb25zdCByZW5kZXJlZCA9IGNyZWF0ZUJsb2NrKEZyYWdtZW50LCB7XHJcbiAgICAgICAga2V5OiBwcm9wcy5rZXkgfHxcclxuICAgICAgICAgICAgLy8gc2xvdCBjb250ZW50IGFycmF5IG9mIGEgZHluYW1pYyBjb25kaXRpb25hbCBzbG90IG1heSBoYXZlIGEgYnJhbmNoXHJcbiAgICAgICAgICAgIC8vIGtleSBhdHRhY2hlZCBpbiB0aGUgYGNyZWF0ZVNsb3RzYCBoZWxwZXIsIHJlc3BlY3QgdGhhdFxyXG4gICAgICAgICAgICAodmFsaWRTbG90Q29udGVudCAmJiB2YWxpZFNsb3RDb250ZW50LmtleSkgfHxcclxuICAgICAgICAgICAgYF8ke25hbWV9YFxyXG4gICAgfSwgdmFsaWRTbG90Q29udGVudCB8fCAoZmFsbGJhY2sgPyBmYWxsYmFjaygpIDogW10pLCB2YWxpZFNsb3RDb250ZW50ICYmIHNsb3RzLl8gPT09IDEgLyogU2xvdEZsYWdzLlNUQUJMRSAqL1xyXG4gICAgICAgID8gNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi9cclxuICAgICAgICA6IC0yIC8qIFBhdGNoRmxhZ3MuQkFJTCAqLyk7XHJcbiAgICBpZiAoIW5vU2xvdHRlZCAmJiByZW5kZXJlZC5zY29wZUlkKSB7XHJcbiAgICAgICAgcmVuZGVyZWQuc2xvdFNjb3BlSWRzID0gW3JlbmRlcmVkLnNjb3BlSWQgKyAnLXMnXTtcclxuICAgIH1cclxuICAgIGlmIChzbG90ICYmIHNsb3QuX2MpIHtcclxuICAgICAgICBzbG90Ll9kID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZW5kZXJlZDtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVWYWxpZFZOb2RlKHZub2Rlcykge1xyXG4gICAgcmV0dXJuIHZub2Rlcy5zb21lKGNoaWxkID0+IHtcclxuICAgICAgICBpZiAoIWlzVk5vZGUoY2hpbGQpKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gQ29tbWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSBGcmFnbWVudCAmJlxyXG4gICAgICAgICAgICAhZW5zdXJlVmFsaWRWTm9kZShjaGlsZC5jaGlsZHJlbikpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pXHJcbiAgICAgICAgPyB2bm9kZXNcclxuICAgICAgICA6IG51bGw7XHJcbn1cblxuLyoqXHJcbiAqIEZvciBwcmVmaXhpbmcga2V5cyBpbiB2LW9uPVwib2JqXCIgd2l0aCBcIm9uXCJcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHRvSGFuZGxlcnMob2JqLCBwcmVzZXJ2ZUNhc2VJZk5lY2Vzc2FyeSkge1xyXG4gICAgY29uc3QgcmV0ID0ge307XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc09iamVjdChvYmopKSB7XHJcbiAgICAgICAgd2Fybihgdi1vbiB3aXRoIG5vIGFyZ3VtZW50IGV4cGVjdHMgYW4gb2JqZWN0IHZhbHVlLmApO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICByZXRbcHJlc2VydmVDYXNlSWZOZWNlc3NhcnkgJiYgL1tBLVpdLy50ZXN0KGtleSlcclxuICAgICAgICAgICAgPyBgb246JHtrZXl9YFxyXG4gICAgICAgICAgICA6IHRvSGFuZGxlcktleShrZXkpXSA9IG9ialtrZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxuXG4vKipcclxuICogIzI0MzcgSW4gVnVlIDMsIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBhIHB1YmxpYyBpbnN0YW5jZSBwcm94eSBidXRcclxuICogdGhleSBleGlzdCBpbiB0aGUgaW50ZXJuYWwgcGFyZW50IGNoYWluLiBGb3IgY29kZSB0aGF0IHJlbGllcyBvbiB0cmF2ZXJzaW5nXHJcbiAqIHB1YmxpYyAkcGFyZW50IGNoYWlucywgc2tpcCBmdW5jdGlvbmFsIG9uZXMgYW5kIGdvIHRvIHRoZSBwYXJlbnQgaW5zdGVhZC5cclxuICovXHJcbmNvbnN0IGdldFB1YmxpY0luc3RhbmNlID0gKGkpID0+IHtcclxuICAgIGlmICghaSlcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc1N0YXRlZnVsQ29tcG9uZW50KGkpKVxyXG4gICAgICAgIHJldHVybiBnZXRFeHBvc2VQcm94eShpKSB8fCBpLnByb3h5O1xyXG4gICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGkucGFyZW50KTtcclxufTtcclxuY29uc3QgcHVibGljUHJvcGVydGllc01hcCA9IFxyXG4vLyBNb3ZlIFBVUkUgbWFya2VyIHRvIG5ldyBsaW5lIHRvIHdvcmthcm91bmQgY29tcGlsZXIgZGlzY2FyZGluZyBpdFxyXG4vLyBkdWUgdG8gdHlwZSBhbm5vdGF0aW9uXHJcbi8qI19fUFVSRV9fKi8gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIHtcclxuICAgICQ6IGkgPT4gaSxcclxuICAgICRlbDogaSA9PiBpLnZub2RlLmVsLFxyXG4gICAgJGRhdGE6IGkgPT4gaS5kYXRhLFxyXG4gICAgJHByb3BzOiBpID0+ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBzaGFsbG93UmVhZG9ubHkoaS5wcm9wcykgOiBpLnByb3BzKSxcclxuICAgICRhdHRyczogaSA9PiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gc2hhbGxvd1JlYWRvbmx5KGkuYXR0cnMpIDogaS5hdHRycyksXHJcbiAgICAkc2xvdHM6IGkgPT4gKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IHNoYWxsb3dSZWFkb25seShpLnNsb3RzKSA6IGkuc2xvdHMpLFxyXG4gICAgJHJlZnM6IGkgPT4gKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IHNoYWxsb3dSZWFkb25seShpLnJlZnMpIDogaS5yZWZzKSxcclxuICAgICRwYXJlbnQ6IGkgPT4gZ2V0UHVibGljSW5zdGFuY2UoaS5wYXJlbnQpLFxyXG4gICAgJHJvb3Q6IGkgPT4gZ2V0UHVibGljSW5zdGFuY2UoaS5yb290KSxcclxuICAgICRlbWl0OiBpID0+IGkuZW1pdCxcclxuICAgICRvcHRpb25zOiBpID0+IChfX1ZVRV9PUFRJT05TX0FQSV9fID8gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaSkgOiBpLnR5cGUpLFxyXG4gICAgJGZvcmNlVXBkYXRlOiBpID0+IGkuZiB8fCAoaS5mID0gKCkgPT4gcXVldWVKb2IoaS51cGRhdGUpKSxcclxuICAgICRuZXh0VGljazogaSA9PiBpLm4gfHwgKGkubiA9IG5leHRUaWNrLmJpbmQoaS5wcm94eSkpLFxyXG4gICAgJHdhdGNoOiBpID0+IChfX1ZVRV9PUFRJT05TX0FQSV9fID8gaW5zdGFuY2VXYXRjaC5iaW5kKGkpIDogTk9PUClcclxufSk7XHJcbmNvbnN0IGlzUmVzZXJ2ZWRQcmVmaXggPSAoa2V5KSA9PiBrZXkgPT09ICdfJyB8fCBrZXkgPT09ICckJztcclxuY29uc3QgUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzID0ge1xyXG4gICAgZ2V0KHsgXzogaW5zdGFuY2UgfSwga2V5KSB7XHJcbiAgICAgICAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUsIGRhdGEsIHByb3BzLCBhY2Nlc3NDYWNoZSwgdHlwZSwgYXBwQ29udGV4dCB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgLy8gZm9yIGludGVybmFsIGZvcm1hdHRlcnMgdG8ga25vdyB0aGF0IHRoaXMgaXMgYSBWdWUgaW5zdGFuY2VcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGtleSA9PT0gJ19faXNWdWUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwcmlvcml0aXplIDxzY3JpcHQgc2V0dXA+IGJpbmRpbmdzIGR1cmluZyBkZXYuXHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgZXZlbiBwcm9wZXJ0aWVzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQgdG8gYmUgdXNlZCAtIHNvIHRoYXRcclxuICAgICAgICAvLyBpdCBhbGlnbnMgd2l0aCB0aGUgcHJvZHVjdGlvbiBiZWhhdmlvciB3aGVyZSB0aGUgcmVuZGVyIGZuIGlzIGlubGluZWQgYW5kXHJcbiAgICAgICAgLy8gaW5kZWVkIGhhcyBhY2Nlc3MgdG8gYWxsIGRlY2xhcmVkIHZhcmlhYmxlcy5cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIHNldHVwU3RhdGUgIT09IEVNUFRZX09CSiAmJlxyXG4gICAgICAgICAgICBzZXR1cFN0YXRlLl9faXNTY3JpcHRTZXR1cCAmJlxyXG4gICAgICAgICAgICBoYXNPd24oc2V0dXBTdGF0ZSwga2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0dXBTdGF0ZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkYXRhIC8gcHJvcHMgLyBjdHhcclxuICAgICAgICAvLyBUaGlzIGdldHRlciBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgcHJvcGVydHkgYWNjZXNzIG9uIHRoZSByZW5kZXIgY29udGV4dFxyXG4gICAgICAgIC8vIGR1cmluZyByZW5kZXIgYW5kIGlzIGEgbWFqb3IgaG90c3BvdC4gVGhlIG1vc3QgZXhwZW5zaXZlIHBhcnQgb2YgdGhpc1xyXG4gICAgICAgIC8vIGlzIHRoZSBtdWx0aXBsZSBoYXNPd24oKSBjYWxscy4gSXQncyBtdWNoIGZhc3RlciB0byBkbyBhIHNpbXBsZSBwcm9wZXJ0eVxyXG4gICAgICAgIC8vIGFjY2VzcyBvbiBhIHBsYWluIG9iamVjdCwgc28gd2UgdXNlIGFuIGFjY2Vzc0NhY2hlIG9iamVjdCAod2l0aCBudWxsXHJcbiAgICAgICAgLy8gcHJvdG90eXBlKSB0byBtZW1vaXplIHdoYXQgYWNjZXNzIHR5cGUgYSBrZXkgY29ycmVzcG9uZHMgdG8uXHJcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRQcm9wcztcclxuICAgICAgICBpZiAoa2V5WzBdICE9PSAnJCcpIHtcclxuICAgICAgICAgICAgY29uc3QgbiA9IGFjY2Vzc0NhY2hlW2tleV07XHJcbiAgICAgICAgICAgIGlmIChuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMSAvKiBBY2Nlc3NUeXBlcy5TRVRVUCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldHVwU3RhdGVba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIgLyogQWNjZXNzVHlwZXMuREFUQSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQgLyogQWNjZXNzVHlwZXMuQ09OVEVYVCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMyAvKiBBY2Nlc3NUeXBlcy5QUk9QUyAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDoganVzdCBmYWxsdGhyb3VnaFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNldHVwU3RhdGUgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oc2V0dXBTdGF0ZSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDEgLyogQWNjZXNzVHlwZXMuU0VUVVAgKi87XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dXBTdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oZGF0YSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDIgLyogQWNjZXNzVHlwZXMuREFUQSAqLztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIC8vIG9ubHkgY2FjaGUgb3RoZXIgcHJvcGVydGllcyB3aGVuIGluc3RhbmNlIGhhcyBkZWNsYXJlZCAodGh1cyBzdGFibGUpXHJcbiAgICAgICAgICAgIC8vIHByb3BzXHJcbiAgICAgICAgICAgIChub3JtYWxpemVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wc09wdGlvbnNbMF0pICYmXHJcbiAgICAgICAgICAgICAgICBoYXNPd24obm9ybWFsaXplZFByb3BzLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMyAvKiBBY2Nlc3NUeXBlcy5QUk9QUyAqLztcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wc1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN0eCAhPT0gRU1QVFlfT0JKICYmIGhhc093bihjdHgsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSA0IC8qIEFjY2Vzc1R5cGVzLkNPTlRFWFQgKi87XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIV9fVlVFX09QVElPTlNfQVBJX18gfHwgc2hvdWxkQ2FjaGVBY2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSAwIC8qIEFjY2Vzc1R5cGVzLk9USEVSICovO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHB1YmxpY0dldHRlciA9IHB1YmxpY1Byb3BlcnRpZXNNYXBba2V5XTtcclxuICAgICAgICBsZXQgY3NzTW9kdWxlLCBnbG9iYWxQcm9wZXJ0aWVzO1xyXG4gICAgICAgIC8vIHB1YmxpYyAkeHh4IHByb3BlcnRpZXNcclxuICAgICAgICBpZiAocHVibGljR2V0dGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICckYXR0cnMnKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFjayhpbnN0YW5jZSwgXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG1hcmtBdHRyc0FjY2Vzc2VkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0dldHRlcihpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgIC8vIGNzcyBtb2R1bGUgKGluamVjdGVkIGJ5IHZ1ZS1sb2FkZXIpXHJcbiAgICAgICAgKGNzc01vZHVsZSA9IHR5cGUuX19jc3NNb2R1bGVzKSAmJlxyXG4gICAgICAgICAgICAoY3NzTW9kdWxlID0gY3NzTW9kdWxlW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjc3NNb2R1bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGN0eCAhPT0gRU1QVFlfT0JKICYmIGhhc093bihjdHgsIGtleSkpIHtcclxuICAgICAgICAgICAgLy8gdXNlciBtYXkgc2V0IGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGB0aGlzYCB0aGF0IHN0YXJ0IHdpdGggYCRgXHJcbiAgICAgICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSA0IC8qIEFjY2Vzc1R5cGVzLkNPTlRFWFQgKi87XHJcbiAgICAgICAgICAgIHJldHVybiBjdHhba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgLy8gZ2xvYmFsIHByb3BlcnRpZXNcclxuICAgICAgICAoKGdsb2JhbFByb3BlcnRpZXMgPSBhcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzKSxcclxuICAgICAgICAgICAgaGFzT3duKGdsb2JhbFByb3BlcnRpZXMsIGtleSkpKSB7XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0aWVzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSAmJlxyXG4gICAgICAgICAgICAoIWlzU3RyaW5nKGtleSkgfHxcclxuICAgICAgICAgICAgICAgIC8vICMxMDkxIGF2b2lkIGludGVybmFsIGlzUmVmL2lzVk5vZGUgY2hlY2tzIG9uIGNvbXBvbmVudCBpbnN0YW5jZSBsZWFkaW5nXHJcbiAgICAgICAgICAgICAgICAvLyB0byBpbmZpbml0ZSB3YXJuaW5nIGxvb3BcclxuICAgICAgICAgICAgICAgIGtleS5pbmRleE9mKCdfX3YnKSAhPT0gMCkpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBpc1Jlc2VydmVkUHJlZml4KGtleVswXSkgJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYFByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gbXVzdCBiZSBhY2Nlc3NlZCB2aWEgJGRhdGEgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBjaGFyYWN0ZXIgKFwiJFwiIG9yIFwiX1wiKSBhbmQgaXMgbm90IHByb3hpZWQgb24gdGhlIHJlbmRlciBjb250ZXh0LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlID09PSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYFByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gd2FzIGFjY2Vzc2VkIGR1cmluZyByZW5kZXIgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYGJ1dCBpcyBub3QgZGVmaW5lZCBvbiBpbnN0YW5jZS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZXQoeyBfOiBpbnN0YW5jZSB9LCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBzZXR1cFN0YXRlLCBjdHggfSA9IGluc3RhbmNlO1xyXG4gICAgICAgIGlmIChzZXR1cFN0YXRlICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKHNldHVwU3RhdGUsIGtleSkpIHtcclxuICAgICAgICAgICAgc2V0dXBTdGF0ZVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkYXRhICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcclxuICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoYXNPd24oaW5zdGFuY2UucHJvcHMsIGtleSkpIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuKGBBdHRlbXB0aW5nIHRvIG11dGF0ZSBwcm9wIFwiJHtrZXl9XCIuIFByb3BzIGFyZSByZWFkb25seS5gLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVswXSA9PT0gJyQnICYmIGtleS5zbGljZSgxKSBpbiBpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4oYEF0dGVtcHRpbmcgdG8gbXV0YXRlIHB1YmxpYyBwcm9wZXJ0eSBcIiR7a2V5fVwiLiBgICtcclxuICAgICAgICAgICAgICAgICAgICBgUHJvcGVydGllcyBzdGFydGluZyB3aXRoICQgYXJlIHJlc2VydmVkIGFuZCByZWFkb25seS5gLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYga2V5IGluIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG4gICAgaGFzKHsgXzogeyBkYXRhLCBzZXR1cFN0YXRlLCBhY2Nlc3NDYWNoZSwgY3R4LCBhcHBDb250ZXh0LCBwcm9wc09wdGlvbnMgfSB9LCBrZXkpIHtcclxuICAgICAgICBsZXQgbm9ybWFsaXplZFByb3BzO1xyXG4gICAgICAgIHJldHVybiAoISFhY2Nlc3NDYWNoZVtrZXldIHx8XHJcbiAgICAgICAgICAgIChkYXRhICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGRhdGEsIGtleSkpIHx8XHJcbiAgICAgICAgICAgIChzZXR1cFN0YXRlICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKHNldHVwU3RhdGUsIGtleSkpIHx8XHJcbiAgICAgICAgICAgICgobm9ybWFsaXplZFByb3BzID0gcHJvcHNPcHRpb25zWzBdKSAmJiBoYXNPd24obm9ybWFsaXplZFByb3BzLCBrZXkpKSB8fFxyXG4gICAgICAgICAgICBoYXNPd24oY3R4LCBrZXkpIHx8XHJcbiAgICAgICAgICAgIGhhc093bihwdWJsaWNQcm9wZXJ0aWVzTWFwLCBrZXkpIHx8XHJcbiAgICAgICAgICAgIGhhc093bihhcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLCBrZXkpKTtcclxuICAgIH0sXHJcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xyXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIGludmFsaWRhdGUga2V5IGNhY2hlIG9mIGEgZ2V0dGVyIGJhc2VkIHByb3BlcnR5ICM1NDE3XHJcbiAgICAgICAgICAgIHRhcmdldC5fLmFjY2Vzc0NhY2hlW2tleV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoYXNPd24oZGVzY3JpcHRvciwgJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXQodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IudmFsdWUsIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XHJcbiAgICB9XHJcbn07XHJcbmlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWZhbHNlKSB7XHJcbiAgICBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMub3duS2V5cyA9ICh0YXJnZXQpID0+IHtcclxuICAgICAgICB3YXJuKGBBdm9pZCBhcHAgbG9naWMgdGhhdCByZWxpZXMgb24gZW51bWVyYXRpbmcga2V5cyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZS4gYCArXHJcbiAgICAgICAgICAgIGBUaGUga2V5cyB3aWxsIGJlIGVtcHR5IGluIHByb2R1Y3Rpb24gbW9kZSB0byBhdm9pZCBwZXJmb3JtYW5jZSBvdmVyaGVhZC5gKTtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCk7XHJcbiAgICB9O1xyXG59XHJcbmNvbnN0IFJ1bnRpbWVDb21waWxlZFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyA9IC8qI19fUFVSRV9fKi8gZXh0ZW5kKHt9LCBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMsIHtcclxuICAgIGdldCh0YXJnZXQsIGtleSkge1xyXG4gICAgICAgIC8vIGZhc3QgcGF0aCBmb3IgdW5zY29wYWJsZXMgd2hlbiB1c2luZyBgd2l0aGAgYmxvY2tcclxuICAgICAgICBpZiAoa2V5ID09PSBTeW1ib2wudW5zY29wYWJsZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzLmdldCh0YXJnZXQsIGtleSwgdGFyZ2V0KTtcclxuICAgIH0sXHJcbiAgICBoYXMoXywga2V5KSB7XHJcbiAgICAgICAgY29uc3QgaGFzID0ga2V5WzBdICE9PSAnXycgJiYgIWlzR2xvYmFsbHlXaGl0ZWxpc3RlZChrZXkpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWhhcyAmJiBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMuaGFzKF8sIGtleSkpIHtcclxuICAgICAgICAgICAgd2FybihgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBzaG91bGQgbm90IHN0YXJ0IHdpdGggXyB3aGljaCBpcyBhIHJlc2VydmVkIHByZWZpeCBmb3IgVnVlIGludGVybmFscy5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhhcztcclxuICAgIH1cclxufSk7XHJcbi8vIGRldiBvbmx5XHJcbi8vIEluIGRldiBtb2RlLCB0aGUgcHJveHkgdGFyZ2V0IGV4cG9zZXMgdGhlIHNhbWUgcHJvcGVydGllcyBhcyBzZWVuIG9uIGB0aGlzYFxyXG4vLyBmb3IgZWFzaWVyIGNvbnNvbGUgaW5zcGVjdGlvbi4gSW4gcHJvZCBtb2RlIGl0IHdpbGwgYmUgYW4gZW1wdHkgb2JqZWN0IHNvXHJcbi8vIHRoZXNlIHByb3BlcnRpZXMgZGVmaW5pdGlvbnMgY2FuIGJlIHNraXBwZWQuXHJcbmZ1bmN0aW9uIGNyZWF0ZURldlJlbmRlckNvbnRleHQoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xyXG4gICAgLy8gZXhwb3NlIGludGVybmFsIGluc3RhbmNlIGZvciBwcm94eSBoYW5kbGVyc1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9gLCB7XHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGdldDogKCkgPT4gaW5zdGFuY2VcclxuICAgIH0pO1xyXG4gICAgLy8gZXhwb3NlIHB1YmxpYyBwcm9wZXJ0aWVzXHJcbiAgICBPYmplY3Qua2V5cyhwdWJsaWNQcm9wZXJ0aWVzTWFwKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gcHVibGljUHJvcGVydGllc01hcFtrZXldKGluc3RhbmNlKSxcclxuICAgICAgICAgICAgLy8gaW50ZXJjZXB0ZWQgYnkgdGhlIHByb3h5IHNvIG5vIG5lZWQgZm9yIGltcGxlbWVudGF0aW9uLFxyXG4gICAgICAgICAgICAvLyBidXQgbmVlZGVkIHRvIHByZXZlbnQgc2V0IGVycm9yc1xyXG4gICAgICAgICAgICBzZXQ6IE5PT1BcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vLyBkZXYgb25seVxyXG5mdW5jdGlvbiBleHBvc2VQcm9wc09uUmVuZGVyQ29udGV4dChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgeyBjdHgsIHByb3BzT3B0aW9uczogW3Byb3BzT3B0aW9uc10gfSA9IGluc3RhbmNlO1xyXG4gICAgaWYgKHByb3BzT3B0aW9ucykge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BzT3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IGluc3RhbmNlLnByb3BzW2tleV0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IE5PT1BcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuLy8gZGV2IG9ubHlcclxuZnVuY3Rpb24gZXhwb3NlU2V0dXBTdGF0ZU9uUmVuZGVyQ29udGV4dChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUgfSA9IGluc3RhbmNlO1xyXG4gICAgT2JqZWN0LmtleXModG9SYXcoc2V0dXBTdGF0ZSkpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBpZiAoIXNldHVwU3RhdGUuX19pc1NjcmlwdFNldHVwKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkUHJlZml4KGtleVswXSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYHNldHVwKCkgcmV0dXJuIHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gc2hvdWxkIG5vdCBzdGFydCB3aXRoIFwiJFwiIG9yIFwiX1wiIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGB3aGljaCBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMgZm9yIFZ1ZSBpbnRlcm5hbHMuYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBzZXR1cFN0YXRlW2tleV0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IE5PT1BcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cblxuZnVuY3Rpb24gY3JlYXRlRHVwbGljYXRlQ2hlY2tlcigpIHtcclxuICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHJldHVybiAodHlwZSwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGNhY2hlW2tleV0pIHtcclxuICAgICAgICAgICAgd2FybihgJHt0eXBlfSBwcm9wZXJ0eSBcIiR7a2V5fVwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAke2NhY2hlW2tleV19LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2FjaGVba2V5XSA9IHR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5sZXQgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xyXG5mdW5jdGlvbiBhcHBseU9wdGlvbnMoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSk7XHJcbiAgICBjb25zdCBwdWJsaWNUaGlzID0gaW5zdGFuY2UucHJveHk7XHJcbiAgICBjb25zdCBjdHggPSBpbnN0YW5jZS5jdHg7XHJcbiAgICAvLyBkbyBub3QgY2FjaGUgcHJvcGVydHkgYWNjZXNzIG9uIHB1YmxpYyBwcm94eSBkdXJpbmcgc3RhdGUgaW5pdGlhbGl6YXRpb25cclxuICAgIHNob3VsZENhY2hlQWNjZXNzID0gZmFsc2U7XHJcbiAgICAvLyBjYWxsIGJlZm9yZUNyZWF0ZSBmaXJzdCBiZWZvcmUgYWNjZXNzaW5nIG90aGVyIG9wdGlvbnMgc2luY2VcclxuICAgIC8vIHRoZSBob29rIG1heSBtdXRhdGUgcmVzb2x2ZWQgb3B0aW9ucyAoIzI3OTEpXHJcbiAgICBpZiAob3B0aW9ucy5iZWZvcmVDcmVhdGUpIHtcclxuICAgICAgICBjYWxsSG9vayhvcHRpb25zLmJlZm9yZUNyZWF0ZSwgaW5zdGFuY2UsIFwiYmNcIiAvKiBMaWZlY3ljbGVIb29rcy5CRUZPUkVfQ1JFQVRFICovKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgXHJcbiAgICAvLyBzdGF0ZVxyXG4gICAgZGF0YTogZGF0YU9wdGlvbnMsIGNvbXB1dGVkOiBjb21wdXRlZE9wdGlvbnMsIG1ldGhvZHMsIHdhdGNoOiB3YXRjaE9wdGlvbnMsIHByb3ZpZGU6IHByb3ZpZGVPcHRpb25zLCBpbmplY3Q6IGluamVjdE9wdGlvbnMsIFxyXG4gICAgLy8gbGlmZWN5Y2xlXHJcbiAgICBjcmVhdGVkLCBiZWZvcmVNb3VudCwgbW91bnRlZCwgYmVmb3JlVXBkYXRlLCB1cGRhdGVkLCBhY3RpdmF0ZWQsIGRlYWN0aXZhdGVkLCBiZWZvcmVEZXN0cm95LCBiZWZvcmVVbm1vdW50LCBkZXN0cm95ZWQsIHVubW91bnRlZCwgcmVuZGVyLCByZW5kZXJUcmFja2VkLCByZW5kZXJUcmlnZ2VyZWQsIGVycm9yQ2FwdHVyZWQsIHNlcnZlclByZWZldGNoLCBcclxuICAgIC8vIHB1YmxpYyBBUElcclxuICAgIGV4cG9zZSwgaW5oZXJpdEF0dHJzLCBcclxuICAgIC8vIGFzc2V0c1xyXG4gICAgY29tcG9uZW50cywgZGlyZWN0aXZlcywgZmlsdGVycyB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGNyZWF0ZUR1cGxpY2F0ZUNoZWNrZXIoKSA6IG51bGw7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgY29uc3QgW3Byb3BzT3B0aW9uc10gPSBpbnN0YW5jZS5wcm9wc09wdGlvbnM7XHJcbiAgICAgICAgaWYgKHByb3BzT3B0aW9ucykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wc09wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIlByb3BzXCIgLyogT3B0aW9uVHlwZXMuUFJPUFMgKi8sIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBvcHRpb25zIGluaXRpYWxpemF0aW9uIG9yZGVyICh0byBiZSBjb25zaXN0ZW50IHdpdGggVnVlIDIpOlxyXG4gICAgLy8gLSBwcm9wcyAoYWxyZWFkeSBkb25lIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbilcclxuICAgIC8vIC0gaW5qZWN0XHJcbiAgICAvLyAtIG1ldGhvZHNcclxuICAgIC8vIC0gZGF0YSAoZGVmZXJyZWQgc2luY2UgaXQgcmVsaWVzIG9uIGB0aGlzYCBhY2Nlc3MpXHJcbiAgICAvLyAtIGNvbXB1dGVkXHJcbiAgICAvLyAtIHdhdGNoIChkZWZlcnJlZCBzaW5jZSBpdCByZWxpZXMgb24gYHRoaXNgIGFjY2VzcylcclxuICAgIGlmIChpbmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgcmVzb2x2ZUluamVjdGlvbnMoaW5qZWN0T3B0aW9ucywgY3R4LCBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMsIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLnVud3JhcEluamVjdGVkUmVmKTtcclxuICAgIH1cclxuICAgIGlmIChtZXRob2RzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWV0aG9kcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2RIYW5kbGVyID0gbWV0aG9kc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihtZXRob2RIYW5kbGVyKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gZGV2IG1vZGUsIHdlIHVzZSB0aGUgYGNyZWF0ZVJlbmRlckNvbnRleHRgIGZ1bmN0aW9uIHRvIGRlZmluZVxyXG4gICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byB0aGUgcHJveHkgdGFyZ2V0LCBhbmQgdGhvc2UgYXJlIHJlYWQtb25seSBidXRcclxuICAgICAgICAgICAgICAgIC8vIHJlY29uZmlndXJhYmxlLCBzbyBpdCBuZWVkcyB0byBiZSByZWRlZmluZWQgaGVyZVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWV0aG9kSGFuZGxlci5iaW5kKHB1YmxpY1RoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHhba2V5XSA9IG1ldGhvZEhhbmRsZXIuYmluZChwdWJsaWNUaGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJNZXRob2RzXCIgLyogT3B0aW9uVHlwZXMuTUVUSE9EUyAqLywga2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYE1ldGhvZCBcIiR7a2V5fVwiIGhhcyB0eXBlIFwiJHt0eXBlb2YgbWV0aG9kSGFuZGxlcn1cIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNGdW5jdGlvbihkYXRhT3B0aW9ucykpIHtcclxuICAgICAgICAgICAgd2FybihgVGhlIGRhdGEgb3B0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4gYCArXHJcbiAgICAgICAgICAgICAgICBgUGxhaW4gb2JqZWN0IHVzYWdlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhT3B0aW9ucy5jYWxsKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNQcm9taXNlKGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYGRhdGEoKSByZXR1cm5lZCBhIFByb21pc2UgLSBub3RlIGRhdGEoKSBjYW5ub3QgYmUgYXN5bmM7IElmIHlvdSBgICtcclxuICAgICAgICAgICAgICAgIGBpbnRlbmQgdG8gcGVyZm9ybSBkYXRhIGZldGNoaW5nIGJlZm9yZSBjb21wb25lbnQgcmVuZGVycywgdXNlIGAgK1xyXG4gICAgICAgICAgICAgICAgYGFzeW5jIHNldHVwKCkgKyA8U3VzcGVuc2U+LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGBkYXRhKCkgc2hvdWxkIHJldHVybiBhbiBvYmplY3QuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5kYXRhID0gcmVhY3RpdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJEYXRhXCIgLyogT3B0aW9uVHlwZXMuREFUQSAqLywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBleHBvc2UgZGF0YSBvbiBjdHggZHVyaW5nIGRldlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZXNlcnZlZFByZWZpeChrZXlbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gZGF0YVtrZXldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBOT09QXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHN0YXRlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGF0IHRoaXMgcG9pbnQgLSBzdGFydCBjYWNoaW5nIGFjY2Vzc1xyXG4gICAgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xyXG4gICAgaWYgKGNvbXB1dGVkT3B0aW9ucykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXB1dGVkT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBvcHQgPSBjb21wdXRlZE9wdGlvbnNba2V5XTtcclxuICAgICAgICAgICAgY29uc3QgZ2V0ID0gaXNGdW5jdGlvbihvcHQpXHJcbiAgICAgICAgICAgICAgICA/IG9wdC5iaW5kKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpXHJcbiAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb24ob3B0LmdldClcclxuICAgICAgICAgICAgICAgICAgICA/IG9wdC5nZXQuYmluZChwdWJsaWNUaGlzLCBwdWJsaWNUaGlzKVxyXG4gICAgICAgICAgICAgICAgICAgIDogTk9PUDtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBnZXQgPT09IE5PT1ApIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYENvbXB1dGVkIHByb3BlcnR5IFwiJHtrZXl9XCIgaGFzIG5vIGdldHRlci5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZXQgPSAhaXNGdW5jdGlvbihvcHQpICYmIGlzRnVuY3Rpb24ob3B0LnNldClcclxuICAgICAgICAgICAgICAgID8gb3B0LnNldC5iaW5kKHB1YmxpY1RoaXMpXHJcbiAgICAgICAgICAgICAgICA6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgICAgID8gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKGBXcml0ZSBvcGVyYXRpb24gZmFpbGVkOiBjb21wdXRlZCBwcm9wZXJ0eSBcIiR7a2V5fVwiIGlzIHJlYWRvbmx5LmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IE5PT1A7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjb21wdXRlZCh7XHJcbiAgICAgICAgICAgICAgICBnZXQsXHJcbiAgICAgICAgICAgICAgICBzZXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gYy52YWx1ZSxcclxuICAgICAgICAgICAgICAgIHNldDogdiA9PiAoYy52YWx1ZSA9IHYpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJDb21wdXRlZFwiIC8qIE9wdGlvblR5cGVzLkNPTVBVVEVEICovLCBrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdhdGNoT3B0aW9ucykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHdhdGNoT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjcmVhdGVXYXRjaGVyKHdhdGNoT3B0aW9uc1trZXldLCBjdHgsIHB1YmxpY1RoaXMsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb3ZpZGVPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXMgPSBpc0Z1bmN0aW9uKHByb3ZpZGVPcHRpb25zKVxyXG4gICAgICAgICAgICA/IHByb3ZpZGVPcHRpb25zLmNhbGwocHVibGljVGhpcylcclxuICAgICAgICAgICAgOiBwcm92aWRlT3B0aW9ucztcclxuICAgICAgICBSZWZsZWN0Lm93bktleXMocHJvdmlkZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgcHJvdmlkZShrZXksIHByb3ZpZGVzW2tleV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGNyZWF0ZWQpIHtcclxuICAgICAgICBjYWxsSG9vayhjcmVhdGVkLCBpbnN0YW5jZSwgXCJjXCIgLyogTGlmZWN5Y2xlSG9va3MuQ1JFQVRFRCAqLyk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZWdpc3RlckxpZmVjeWNsZUhvb2socmVnaXN0ZXIsIGhvb2spIHtcclxuICAgICAgICBpZiAoaXNBcnJheShob29rKSkge1xyXG4gICAgICAgICAgICBob29rLmZvckVhY2goX2hvb2sgPT4gcmVnaXN0ZXIoX2hvb2suYmluZChwdWJsaWNUaGlzKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChob29rKSB7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVyKGhvb2suYmluZChwdWJsaWNUaGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uQmVmb3JlTW91bnQsIGJlZm9yZU1vdW50KTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbk1vdW50ZWQsIG1vdW50ZWQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uQmVmb3JlVXBkYXRlLCBiZWZvcmVVcGRhdGUpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uVXBkYXRlZCwgdXBkYXRlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25BY3RpdmF0ZWQsIGFjdGl2YXRlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25EZWFjdGl2YXRlZCwgZGVhY3RpdmF0ZWQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uRXJyb3JDYXB0dXJlZCwgZXJyb3JDYXB0dXJlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25SZW5kZXJUcmFja2VkLCByZW5kZXJUcmFja2VkKTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblJlbmRlclRyaWdnZXJlZCwgcmVuZGVyVHJpZ2dlcmVkKTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkJlZm9yZVVubW91bnQsIGJlZm9yZVVubW91bnQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uVW5tb3VudGVkLCB1bm1vdW50ZWQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uU2VydmVyUHJlZmV0Y2gsIHNlcnZlclByZWZldGNoKTtcclxuICAgIGlmIChpc0FycmF5KGV4cG9zZSkpIHtcclxuICAgICAgICBpZiAoZXhwb3NlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBleHBvc2VkID0gaW5zdGFuY2UuZXhwb3NlZCB8fCAoaW5zdGFuY2UuZXhwb3NlZCA9IHt9KTtcclxuICAgICAgICAgICAgZXhwb3NlLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvc2VkLCBrZXksIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHB1YmxpY1RoaXNba2V5XSxcclxuICAgICAgICAgICAgICAgICAgICBzZXQ6IHZhbCA9PiAocHVibGljVGhpc1trZXldID0gdmFsKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaW5zdGFuY2UuZXhwb3NlZCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5leHBvc2VkID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIHdoZW4gY3JlYXRpbmcgdGhlIGluc3RhbmNlIGJ1dCBhbHNvIG5lZWQgdG8gYmVcclxuICAgIC8vIGFwcGxpZWQgZnJvbSBtaXhpbnNcclxuICAgIGlmIChyZW5kZXIgJiYgaW5zdGFuY2UucmVuZGVyID09PSBOT09QKSB7XHJcbiAgICAgICAgaW5zdGFuY2UucmVuZGVyID0gcmVuZGVyO1xyXG4gICAgfVxyXG4gICAgaWYgKGluaGVyaXRBdHRycyAhPSBudWxsKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuaW5oZXJpdEF0dHJzID0gaW5oZXJpdEF0dHJzO1xyXG4gICAgfVxyXG4gICAgLy8gYXNzZXQgb3B0aW9ucy5cclxuICAgIGlmIChjb21wb25lbnRzKVxyXG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xyXG4gICAgaWYgKGRpcmVjdGl2ZXMpXHJcbiAgICAgICAgaW5zdGFuY2UuZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXM7XHJcbn1cclxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdGlvbnMoaW5qZWN0T3B0aW9ucywgY3R4LCBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMgPSBOT09QLCB1bndyYXBSZWYgPSBmYWxzZSkge1xyXG4gICAgaWYgKGlzQXJyYXkoaW5qZWN0T3B0aW9ucykpIHtcclxuICAgICAgICBpbmplY3RPcHRpb25zID0gbm9ybWFsaXplSW5qZWN0KGluamVjdE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5qZWN0T3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IGluamVjdE9wdGlvbnNba2V5XTtcclxuICAgICAgICBsZXQgaW5qZWN0ZWQ7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KG9wdCkpIHtcclxuICAgICAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBvcHQpIHtcclxuICAgICAgICAgICAgICAgIGluamVjdGVkID0gaW5qZWN0KG9wdC5mcm9tIHx8IGtleSwgb3B0LmRlZmF1bHQsIHRydWUgLyogdHJlYXQgZGVmYXVsdCBmdW5jdGlvbiBhcyBmYWN0b3J5ICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluamVjdGVkID0gaW5qZWN0KG9wdC5mcm9tIHx8IGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGluamVjdGVkID0gaW5qZWN0KG9wdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1JlZihpbmplY3RlZCkpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyByZW1vdmUgdGhlIGNoZWNrIGluIDMuM1xyXG4gICAgICAgICAgICBpZiAodW53cmFwUmVmKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IGluamVjdGVkLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNldDogdiA9PiAoaW5qZWN0ZWQudmFsdWUgPSB2KVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgaW5qZWN0ZWQgcHJvcGVydHkgXCIke2tleX1cIiBpcyBhIHJlZiBhbmQgd2lsbCBiZSBhdXRvLXVud3JhcHBlZCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCBubyBsb25nZXIgbmVlZHMgXFxgLnZhbHVlXFxgIGluIHRoZSBuZXh0IG1pbm9yIHJlbGVhc2UuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgVG8gb3B0LWluIHRvIHRoZSBuZXcgYmVoYXZpb3Igbm93LCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHNldCBcXGBhcHAuY29uZmlnLnVud3JhcEluamVjdGVkUmVmID0gdHJ1ZVxcYCAodGhpcyBjb25maWcgaXMgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB0ZW1wb3JhcnkgYW5kIHdpbGwgbm90IGJlIG5lZWRlZCBpbiB0aGUgZnV0dXJlLilgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN0eFtrZXldID0gaW5qZWN0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGN0eFtrZXldID0gaW5qZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKFwiSW5qZWN0XCIgLyogT3B0aW9uVHlwZXMuSU5KRUNUICovLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjYWxsSG9vayhob29rLCBpbnN0YW5jZSwgdHlwZSkge1xyXG4gICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaXNBcnJheShob29rKVxyXG4gICAgICAgID8gaG9vay5tYXAoaCA9PiBoLmJpbmQoaW5zdGFuY2UucHJveHkpKVxyXG4gICAgICAgIDogaG9vay5iaW5kKGluc3RhbmNlLnByb3h5KSwgaW5zdGFuY2UsIHR5cGUpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIocmF3LCBjdHgsIHB1YmxpY1RoaXMsIGtleSkge1xyXG4gICAgY29uc3QgZ2V0dGVyID0ga2V5LmluY2x1ZGVzKCcuJylcclxuICAgICAgICA/IGNyZWF0ZVBhdGhHZXR0ZXIocHVibGljVGhpcywga2V5KVxyXG4gICAgICAgIDogKCkgPT4gcHVibGljVGhpc1trZXldO1xyXG4gICAgaWYgKGlzU3RyaW5nKHJhdykpIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gY3R4W3Jhd107XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcclxuICAgICAgICAgICAgd2F0Y2goZ2V0dGVyLCBoYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYEludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5IFwiJHtyYXd9XCJgLCBoYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHJhdykpIHtcclxuICAgICAgICB3YXRjaChnZXR0ZXIsIHJhdy5iaW5kKHB1YmxpY1RoaXMpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHJhdykpIHtcclxuICAgICAgICBpZiAoaXNBcnJheShyYXcpKSB7XHJcbiAgICAgICAgICAgIHJhdy5mb3JFYWNoKHIgPT4gY3JlYXRlV2F0Y2hlcihyLCBjdHgsIHB1YmxpY1RoaXMsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGlzRnVuY3Rpb24ocmF3LmhhbmRsZXIpXHJcbiAgICAgICAgICAgICAgICA/IHJhdy5oYW5kbGVyLmJpbmQocHVibGljVGhpcylcclxuICAgICAgICAgICAgICAgIDogY3R4W3Jhdy5oYW5kbGVyXTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcclxuICAgICAgICAgICAgICAgIHdhdGNoKGdldHRlciwgaGFuZGxlciwgcmF3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYEludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5IFwiJHtyYXcuaGFuZGxlcn1cImAsIGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FybihgSW52YWxpZCB3YXRjaCBvcHRpb246IFwiJHtrZXl9XCJgLCByYXcpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXNvbHZlIG1lcmdlZCBvcHRpb25zIGFuZCBjYWNoZSBpdCBvbiB0aGUgY29tcG9uZW50LlxyXG4gKiBUaGlzIGlzIGRvbmUgb25seSBvbmNlIHBlci1jb21wb25lbnQgc2luY2UgdGhlIG1lcmdpbmcgZG9lcyBub3QgaW52b2x2ZVxyXG4gKiBpbnN0YW5jZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgYmFzZSA9IGluc3RhbmNlLnR5cGU7XHJcbiAgICBjb25zdCB7IG1peGlucywgZXh0ZW5kczogZXh0ZW5kc09wdGlvbnMgfSA9IGJhc2U7XHJcbiAgICBjb25zdCB7IG1peGluczogZ2xvYmFsTWl4aW5zLCBvcHRpb25zQ2FjaGU6IGNhY2hlLCBjb25maWc6IHsgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzIH0gfSA9IGluc3RhbmNlLmFwcENvbnRleHQ7XHJcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoYmFzZSk7XHJcbiAgICBsZXQgcmVzb2x2ZWQ7XHJcbiAgICBpZiAoY2FjaGVkKSB7XHJcbiAgICAgICAgcmVzb2x2ZWQgPSBjYWNoZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghZ2xvYmFsTWl4aW5zLmxlbmd0aCAmJiAhbWl4aW5zICYmICFleHRlbmRzT3B0aW9ucykge1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVzb2x2ZWQgPSBiYXNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmVkID0ge307XHJcbiAgICAgICAgaWYgKGdsb2JhbE1peGlucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZ2xvYmFsTWl4aW5zLmZvckVhY2gobSA9PiBtZXJnZU9wdGlvbnMocmVzb2x2ZWQsIG0sIG9wdGlvbk1lcmdlU3RyYXRlZ2llcywgdHJ1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZXJnZU9wdGlvbnMocmVzb2x2ZWQsIGJhc2UsIG9wdGlvbk1lcmdlU3RyYXRlZ2llcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNPYmplY3QoYmFzZSkpIHtcclxuICAgICAgICBjYWNoZS5zZXQoYmFzZSwgcmVzb2x2ZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc29sdmVkO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSwgc3RyYXRzLCBhc01peGluID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gZnJvbTtcclxuICAgIGlmIChleHRlbmRzT3B0aW9ucykge1xyXG4gICAgICAgIG1lcmdlT3B0aW9ucyh0bywgZXh0ZW5kc09wdGlvbnMsIHN0cmF0cywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWl4aW5zKSB7XHJcbiAgICAgICAgbWl4aW5zLmZvckVhY2goKG0pID0+IG1lcmdlT3B0aW9ucyh0bywgbSwgc3RyYXRzLCB0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKSB7XHJcbiAgICAgICAgaWYgKGFzTWl4aW4gJiYga2V5ID09PSAnZXhwb3NlJykge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4oYFwiZXhwb3NlXCIgb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiBkZWNsYXJlZCBpbiBtaXhpbnMgb3IgZXh0ZW5kcy4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYEl0IHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBiYXNlIGNvbXBvbmVudCBpdHNlbGYuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzdHJhdCA9IGludGVybmFsT3B0aW9uTWVyZ2VTdHJhdHNba2V5XSB8fCAoc3RyYXRzICYmIHN0cmF0c1trZXldKTtcclxuICAgICAgICAgICAgdG9ba2V5XSA9IHN0cmF0ID8gc3RyYXQodG9ba2V5XSwgZnJvbVtrZXldKSA6IGZyb21ba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuY29uc3QgaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0cyA9IHtcclxuICAgIGRhdGE6IG1lcmdlRGF0YUZuLFxyXG4gICAgcHJvcHM6IG1lcmdlT2JqZWN0T3B0aW9ucyxcclxuICAgIGVtaXRzOiBtZXJnZU9iamVjdE9wdGlvbnMsXHJcbiAgICAvLyBvYmplY3RzXHJcbiAgICBtZXRob2RzOiBtZXJnZU9iamVjdE9wdGlvbnMsXHJcbiAgICBjb21wdXRlZDogbWVyZ2VPYmplY3RPcHRpb25zLFxyXG4gICAgLy8gbGlmZWN5Y2xlXHJcbiAgICBiZWZvcmVDcmVhdGU6IG1lcmdlQXNBcnJheSxcclxuICAgIGNyZWF0ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGJlZm9yZU1vdW50OiBtZXJnZUFzQXJyYXksXHJcbiAgICBtb3VudGVkOiBtZXJnZUFzQXJyYXksXHJcbiAgICBiZWZvcmVVcGRhdGU6IG1lcmdlQXNBcnJheSxcclxuICAgIHVwZGF0ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGJlZm9yZURlc3Ryb3k6IG1lcmdlQXNBcnJheSxcclxuICAgIGJlZm9yZVVubW91bnQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGRlc3Ryb3llZDogbWVyZ2VBc0FycmF5LFxyXG4gICAgdW5tb3VudGVkOiBtZXJnZUFzQXJyYXksXHJcbiAgICBhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGRlYWN0aXZhdGVkOiBtZXJnZUFzQXJyYXksXHJcbiAgICBlcnJvckNhcHR1cmVkOiBtZXJnZUFzQXJyYXksXHJcbiAgICBzZXJ2ZXJQcmVmZXRjaDogbWVyZ2VBc0FycmF5LFxyXG4gICAgLy8gYXNzZXRzXHJcbiAgICBjb21wb25lbnRzOiBtZXJnZU9iamVjdE9wdGlvbnMsXHJcbiAgICBkaXJlY3RpdmVzOiBtZXJnZU9iamVjdE9wdGlvbnMsXHJcbiAgICAvLyB3YXRjaFxyXG4gICAgd2F0Y2g6IG1lcmdlV2F0Y2hPcHRpb25zLFxyXG4gICAgLy8gcHJvdmlkZSAvIGluamVjdFxyXG4gICAgcHJvdmlkZTogbWVyZ2VEYXRhRm4sXHJcbiAgICBpbmplY3Q6IG1lcmdlSW5qZWN0XHJcbn07XHJcbmZ1bmN0aW9uIG1lcmdlRGF0YUZuKHRvLCBmcm9tKSB7XHJcbiAgICBpZiAoIWZyb20pIHtcclxuICAgICAgICByZXR1cm4gdG87XHJcbiAgICB9XHJcbiAgICBpZiAoIXRvKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb207XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuKCkge1xyXG4gICAgICAgIHJldHVybiAoZXh0ZW5kKShpc0Z1bmN0aW9uKHRvKSA/IHRvLmNhbGwodGhpcywgdGhpcykgOiB0bywgaXNGdW5jdGlvbihmcm9tKSA/IGZyb20uY2FsbCh0aGlzLCB0aGlzKSA6IGZyb20pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBtZXJnZUluamVjdCh0bywgZnJvbSkge1xyXG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0T3B0aW9ucyhub3JtYWxpemVJbmplY3QodG8pLCBub3JtYWxpemVJbmplY3QoZnJvbSkpO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUluamVjdChyYXcpIHtcclxuICAgIGlmIChpc0FycmF5KHJhdykpIHtcclxuICAgICAgICBjb25zdCByZXMgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhdy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXNbcmF3W2ldXSA9IHJhd1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHJldHVybiByYXc7XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VBc0FycmF5KHRvLCBmcm9tKSB7XHJcbiAgICByZXR1cm4gdG8gPyBbLi4ubmV3IFNldChbXS5jb25jYXQodG8sIGZyb20pKV0gOiBmcm9tO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlT2JqZWN0T3B0aW9ucyh0bywgZnJvbSkge1xyXG4gICAgcmV0dXJuIHRvID8gZXh0ZW5kKGV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLCB0byksIGZyb20pIDogZnJvbTtcclxufVxyXG5mdW5jdGlvbiBtZXJnZVdhdGNoT3B0aW9ucyh0bywgZnJvbSkge1xyXG4gICAgaWYgKCF0bylcclxuICAgICAgICByZXR1cm4gZnJvbTtcclxuICAgIGlmICghZnJvbSlcclxuICAgICAgICByZXR1cm4gdG87XHJcbiAgICBjb25zdCBtZXJnZWQgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSwgdG8pO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xyXG4gICAgICAgIG1lcmdlZFtrZXldID0gbWVyZ2VBc0FycmF5KHRvW2tleV0sIGZyb21ba2V5XSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIGlzU3RhdGVmdWwsIC8vIHJlc3VsdCBvZiBiaXR3aXNlIGZsYWcgY29tcGFyaXNvblxyXG5pc1NTUiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBwcm9wcyA9IHt9O1xyXG4gICAgY29uc3QgYXR0cnMgPSB7fTtcclxuICAgIGRlZihhdHRycywgSW50ZXJuYWxPYmplY3RLZXksIDEpO1xyXG4gICAgaW5zdGFuY2UucHJvcHNEZWZhdWx0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICBzZXRGdWxsUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCBwcm9wcywgYXR0cnMpO1xyXG4gICAgLy8gZW5zdXJlIGFsbCBkZWNsYXJlZCBwcm9wIGtleXMgYXJlIHByZXNlbnRcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGluc3RhbmNlLnByb3BzT3B0aW9uc1swXSkge1xyXG4gICAgICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcclxuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB2YWxpZGF0aW9uXHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgdmFsaWRhdGVQcm9wcyhyYXdQcm9wcyB8fCB7fSwgcHJvcHMsIGluc3RhbmNlKTtcclxuICAgIH1cclxuICAgIGlmIChpc1N0YXRlZnVsKSB7XHJcbiAgICAgICAgLy8gc3RhdGVmdWxcclxuICAgICAgICBpbnN0YW5jZS5wcm9wcyA9IGlzU1NSID8gcHJvcHMgOiBzaGFsbG93UmVhY3RpdmUocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpbnN0YW5jZS50eXBlLnByb3BzKSB7XHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uYWwgdy8gb3B0aW9uYWwgcHJvcHMsIHByb3BzID09PSBhdHRyc1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5wcm9wcyA9IGF0dHJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb25hbCB3LyBkZWNsYXJlZCBwcm9wc1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5wcm9wcyA9IHByb3BzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGluc3RhbmNlLmF0dHJzID0gYXR0cnM7XHJcbn1cclxuZnVuY3Rpb24gaXNJbkhtckNvbnRleHQoaW5zdGFuY2UpIHtcclxuICAgIHdoaWxlIChpbnN0YW5jZSkge1xyXG4gICAgICAgIGlmIChpbnN0YW5jZS50eXBlLl9faG1ySWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UucGFyZW50O1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcmF3UHJldlByb3BzLCBvcHRpbWl6ZWQpIHtcclxuICAgIGNvbnN0IHsgcHJvcHMsIGF0dHJzLCB2bm9kZTogeyBwYXRjaEZsYWcgfSB9ID0gaW5zdGFuY2U7XHJcbiAgICBjb25zdCByYXdDdXJyZW50UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XHJcbiAgICBjb25zdCBbb3B0aW9uc10gPSBpbnN0YW5jZS5wcm9wc09wdGlvbnM7XHJcbiAgICBsZXQgaGFzQXR0cnNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAvLyBhbHdheXMgZm9yY2UgZnVsbCBkaWZmIGluIGRldlxyXG4gICAgLy8gLSAjMTk0MiBpZiBobXIgaXMgZW5hYmxlZCB3aXRoIHNmYyBjb21wb25lbnRcclxuICAgIC8vIC0gdml0ZSM4NzIgbm9uLXNmYyBjb21wb25lbnQgdXNlZCBieSBzZmMgY29tcG9uZW50XHJcbiAgICAhKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBpc0luSG1yQ29udGV4dChpbnN0YW5jZSkpICYmXHJcbiAgICAgICAgKG9wdGltaXplZCB8fCBwYXRjaEZsYWcgPiAwKSAmJlxyXG4gICAgICAgICEocGF0Y2hGbGFnICYgMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovKSkge1xyXG4gICAgICAgIGlmIChwYXRjaEZsYWcgJiA4IC8qIFBhdGNoRmxhZ3MuUFJPUFMgKi8pIHtcclxuICAgICAgICAgICAgLy8gQ29tcGlsZXItZ2VuZXJhdGVkIHByb3BzICYgbm8ga2V5cyBjaGFuZ2UsIGp1c3Qgc2V0IHRoZSB1cGRhdGVkXHJcbiAgICAgICAgICAgIC8vIHRoZSBwcm9wcy5cclxuICAgICAgICAgICAgY29uc3QgcHJvcHNUb1VwZGF0ZSA9IGluc3RhbmNlLnZub2RlLmR5bmFtaWNQcm9wcztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1RvVXBkYXRlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gcHJvcHNUb1VwZGF0ZVtpXTtcclxuICAgICAgICAgICAgICAgIC8vIHNraXAgaWYgdGhlIHByb3Aga2V5IGlzIGEgZGVjbGFyZWQgZW1pdCBldmVudCBsaXN0ZW5lclxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRW1pdExpc3RlbmVyKGluc3RhbmNlLmVtaXRzT3B0aW9ucywga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gUFJPUFMgZmxhZyBndWFyYW50ZWVzIHJhd1Byb3BzIHRvIGJlIG5vbi1udWxsXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1Byb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dHIgLyBwcm9wcyBzZXBhcmF0aW9uIHdhcyBkb25lIG9uIGluaXQgYW5kIHdpbGwgYmUgY29uc2lzdGVudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY29kZSBwYXRoLCBzbyBqdXN0IGNoZWNrIGlmIGF0dHJzIGhhdmUgaXQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093bihhdHRycywga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IGF0dHJzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVsaXplZEtleSA9IGNhbWVsaXplKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzW2NhbWVsaXplZEtleV0gPSByZXNvbHZlUHJvcFZhbHVlKG9wdGlvbnMsIHJhd0N1cnJlbnRQcm9wcywgY2FtZWxpemVkS2V5LCB2YWx1ZSwgaW5zdGFuY2UsIGZhbHNlIC8qIGlzQWJzZW50ICovKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IGF0dHJzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGZ1bGwgcHJvcHMgdXBkYXRlLlxyXG4gICAgICAgIGlmIChzZXRGdWxsUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCBwcm9wcywgYXR0cnMpKSB7XHJcbiAgICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluIGNhc2Ugb2YgZHluYW1pYyBwcm9wcywgY2hlY2sgaWYgd2UgbmVlZCB0byBkZWxldGUga2V5cyBmcm9tXHJcbiAgICAgICAgLy8gdGhlIHByb3BzIG9iamVjdFxyXG4gICAgICAgIGxldCBrZWJhYktleTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByYXdDdXJyZW50UHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKCFyYXdQcm9wcyB8fFxyXG4gICAgICAgICAgICAgICAgLy8gZm9yIGNhbWVsQ2FzZVxyXG4gICAgICAgICAgICAgICAgKCFoYXNPd24ocmF3UHJvcHMsIGtleSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoZSBvcmlnaW5hbCBwcm9wcyB3YXMgcGFzc2VkIGluIGFzIGtlYmFiLWNhc2VcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgY29udmVydGVkIHRvIGNhbWVsQ2FzZSAoIzk1NSlcclxuICAgICAgICAgICAgICAgICAgICAoKGtlYmFiS2V5ID0gaHlwaGVuYXRlKGtleSkpID09PSBrZXkgfHwgIWhhc093bihyYXdQcm9wcywga2ViYWJLZXkpKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhd1ByZXZQcm9wcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgY2FtZWxDYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyYXdQcmV2UHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Iga2ViYWItY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3UHJldlByb3BzW2tlYmFiS2V5XSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1trZXldID0gcmVzb2x2ZVByb3BWYWx1ZShvcHRpb25zLCByYXdDdXJyZW50UHJvcHMsIGtleSwgdW5kZWZpbmVkLCBpbnN0YW5jZSwgdHJ1ZSAvKiBpc0Fic2VudCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgZnVuY3Rpb25hbCBjb21wb25lbnQgdy9vIHByb3BzIGRlY2xhcmF0aW9uLCBwcm9wcyBhbmRcclxuICAgICAgICAvLyBhdHRycyBwb2ludCB0byB0aGUgc2FtZSBvYmplY3Qgc28gaXQgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHVwZGF0ZWQuXHJcbiAgICAgICAgaWYgKGF0dHJzICE9PSByYXdDdXJyZW50UHJvcHMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcmF3UHJvcHMgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIWhhc093bihyYXdQcm9wcywga2V5KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoIWZhbHNlICkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGF0dHJzW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRyaWdnZXIgdXBkYXRlcyBmb3IgJGF0dHJzIGluIGNhc2UgaXQncyB1c2VkIGluIGNvbXBvbmVudCBzbG90c1xyXG4gICAgaWYgKGhhc0F0dHJzQ2hhbmdlZCkge1xyXG4gICAgICAgIHRyaWdnZXIoaW5zdGFuY2UsIFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLCAnJGF0dHJzJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgdmFsaWRhdGVQcm9wcyhyYXdQcm9wcyB8fCB7fSwgcHJvcHMsIGluc3RhbmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzZXRGdWxsUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCBwcm9wcywgYXR0cnMpIHtcclxuICAgIGNvbnN0IFtvcHRpb25zLCBuZWVkQ2FzdEtleXNdID0gaW5zdGFuY2UucHJvcHNPcHRpb25zO1xyXG4gICAgbGV0IGhhc0F0dHJzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgbGV0IHJhd0Nhc3RWYWx1ZXM7XHJcbiAgICBpZiAocmF3UHJvcHMpIHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmF3UHJvcHMpIHtcclxuICAgICAgICAgICAgLy8ga2V5LCByZWYgYXJlIHJlc2VydmVkIGFuZCBuZXZlciBwYXNzZWQgZG93blxyXG4gICAgICAgICAgICBpZiAoaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByYXdQcm9wc1trZXldO1xyXG4gICAgICAgICAgICAvLyBwcm9wIG9wdGlvbiBuYW1lcyBhcmUgY2FtZWxpemVkIGR1cmluZyBub3JtYWxpemF0aW9uLCBzbyB0byBzdXBwb3J0XHJcbiAgICAgICAgICAgIC8vIGtlYmFiIC0+IGNhbWVsIGNvbnZlcnNpb24gaGVyZSB3ZSBuZWVkIHRvIGNhbWVsaXplIHRoZSBrZXkuXHJcbiAgICAgICAgICAgIGxldCBjYW1lbEtleTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsIChjYW1lbEtleSA9IGNhbWVsaXplKGtleSkpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZWVkQ2FzdEtleXMgfHwgIW5lZWRDYXN0S2V5cy5pbmNsdWRlcyhjYW1lbEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wc1tjYW1lbEtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIChyYXdDYXN0VmFsdWVzIHx8IChyYXdDYXN0VmFsdWVzID0ge30pKVtjYW1lbEtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghaXNFbWl0TGlzdGVuZXIoaW5zdGFuY2UuZW1pdHNPcHRpb25zLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gYXR0cnMpIHx8IHZhbHVlICE9PSBhdHRyc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobmVlZENhc3RLZXlzKSB7XHJcbiAgICAgICAgY29uc3QgcmF3Q3VycmVudFByb3BzID0gdG9SYXcocHJvcHMpO1xyXG4gICAgICAgIGNvbnN0IGNhc3RWYWx1ZXMgPSByYXdDYXN0VmFsdWVzIHx8IEVNUFRZX09CSjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lZWRDYXN0S2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuZWVkQ2FzdEtleXNbaV07XHJcbiAgICAgICAgICAgIHByb3BzW2tleV0gPSByZXNvbHZlUHJvcFZhbHVlKG9wdGlvbnMsIHJhd0N1cnJlbnRQcm9wcywga2V5LCBjYXN0VmFsdWVzW2tleV0sIGluc3RhbmNlLCAhaGFzT3duKGNhc3RWYWx1ZXMsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoYXNBdHRyc0NoYW5nZWQ7XHJcbn1cclxuZnVuY3Rpb24gcmVzb2x2ZVByb3BWYWx1ZShvcHRpb25zLCBwcm9wcywga2V5LCB2YWx1ZSwgaW5zdGFuY2UsIGlzQWJzZW50KSB7XHJcbiAgICBjb25zdCBvcHQgPSBvcHRpb25zW2tleV07XHJcbiAgICBpZiAob3B0ICE9IG51bGwpIHtcclxuICAgICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdCwgJ2RlZmF1bHQnKTtcclxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlc1xyXG4gICAgICAgIGlmIChoYXNEZWZhdWx0ICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gb3B0LmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChvcHQudHlwZSAhPT0gRnVuY3Rpb24gJiYgaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHByb3BzRGVmYXVsdHMgfSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBwcm9wc0RlZmF1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc0RlZmF1bHRzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcHNEZWZhdWx0c1trZXldID0gZGVmYXVsdFZhbHVlLmNhbGwobnVsbCwgcHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBib29sZWFuIGNhc3RpbmdcclxuICAgICAgICBpZiAob3B0WzAgLyogQm9vbGVhbkZsYWdzLnNob3VsZENhc3QgKi9dKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Fic2VudCAmJiAhaGFzRGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRbMSAvKiBCb29sZWFuRmxhZ3Muc2hvdWxkQ2FzdFRydWUgKi9dICYmXHJcbiAgICAgICAgICAgICAgICAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wc09wdGlvbnMoY29tcCwgYXBwQ29udGV4dCwgYXNNaXhpbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBjYWNoZSA9IGFwcENvbnRleHQucHJvcHNDYWNoZTtcclxuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChjb21wKTtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXR1cm4gY2FjaGVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmF3ID0gY29tcC5wcm9wcztcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcclxuICAgIGNvbnN0IG5lZWRDYXN0S2V5cyA9IFtdO1xyXG4gICAgLy8gYXBwbHkgbWl4aW4vZXh0ZW5kcyBwcm9wc1xyXG4gICAgbGV0IGhhc0V4dGVuZHMgPSBmYWxzZTtcclxuICAgIGlmIChfX1ZVRV9PUFRJT05TX0FQSV9fICYmICFpc0Z1bmN0aW9uKGNvbXApKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5kUHJvcHMgPSAocmF3KSA9PiB7XHJcbiAgICAgICAgICAgIGhhc0V4dGVuZHMgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBbcHJvcHMsIGtleXNdID0gbm9ybWFsaXplUHJvcHNPcHRpb25zKHJhdywgYXBwQ29udGV4dCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGV4dGVuZChub3JtYWxpemVkLCBwcm9wcyk7XHJcbiAgICAgICAgICAgIGlmIChrZXlzKVxyXG4gICAgICAgICAgICAgICAgbmVlZENhc3RLZXlzLnB1c2goLi4ua2V5cyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWFzTWl4aW4gJiYgYXBwQ29udGV4dC5taXhpbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGFwcENvbnRleHQubWl4aW5zLmZvckVhY2goZXh0ZW5kUHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tcC5leHRlbmRzKSB7XHJcbiAgICAgICAgICAgIGV4dGVuZFByb3BzKGNvbXAuZXh0ZW5kcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21wLm1peGlucykge1xyXG4gICAgICAgICAgICBjb21wLm1peGlucy5mb3JFYWNoKGV4dGVuZFByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXJhdyAmJiAhaGFzRXh0ZW5kcykge1xyXG4gICAgICAgIGlmIChpc09iamVjdChjb21wKSkge1xyXG4gICAgICAgICAgICBjYWNoZS5zZXQoY29tcCwgRU1QVFlfQVJSKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0FSUjtcclxuICAgIH1cclxuICAgIGlmIChpc0FycmF5KHJhdykpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhdy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1N0cmluZyhyYXdbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKGBwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguYCwgcmF3W2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gY2FtZWxpemUocmF3W2ldKTtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlUHJvcE5hbWUobm9ybWFsaXplZEtleSkpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplZEtleV0gPSBFTVBUWV9PQko7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyYXcpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc09iamVjdChyYXcpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYGludmFsaWQgcHJvcHMgb3B0aW9uc2AsIHJhdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJhdykge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlUHJvcE5hbWUobm9ybWFsaXplZEtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IHJhd1trZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IChub3JtYWxpemVkW25vcm1hbGl6ZWRLZXldID1cclxuICAgICAgICAgICAgICAgICAgICBpc0FycmF5KG9wdCkgfHwgaXNGdW5jdGlvbihvcHQpID8geyB0eXBlOiBvcHQgfSA6IG9wdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wWzAgLyogQm9vbGVhbkZsYWdzLnNob3VsZENhc3QgKi9dID0gYm9vbGVhbkluZGV4ID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcFsxIC8qIEJvb2xlYW5GbGFncy5zaG91bGRDYXN0VHJ1ZSAqL10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHByb3AgbmVlZHMgYm9vbGVhbiBjYXN0aW5nIG9yIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbGVhbkluZGV4ID4gLTEgfHwgaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZENhc3RLZXlzLnB1c2gobm9ybWFsaXplZEtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzID0gW25vcm1hbGl6ZWQsIG5lZWRDYXN0S2V5c107XHJcbiAgICBpZiAoaXNPYmplY3QoY29tcCkpIHtcclxuICAgICAgICBjYWNoZS5zZXQoY29tcCwgcmVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wTmFtZShrZXkpIHtcclxuICAgIGlmIChrZXlbMF0gIT09ICckJykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FybihgSW52YWxpZCBwcm9wIG5hbWU6IFwiJHtrZXl9XCIgaXMgYSByZXNlcnZlZCBwcm9wZXJ0eS5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vLyB1c2UgZnVuY3Rpb24gc3RyaW5nIG5hbWUgdG8gY2hlY2sgdHlwZSBjb25zdHJ1Y3RvcnNcclxuLy8gc28gdGhhdCBpdCB3b3JrcyBhY3Jvc3Mgdm1zIC8gaWZyYW1lcy5cclxuZnVuY3Rpb24gZ2V0VHlwZShjdG9yKSB7XHJcbiAgICBjb25zdCBtYXRjaCA9IGN0b3IgJiYgY3Rvci50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBjdG9yID09PSBudWxsID8gJ251bGwnIDogJyc7XHJcbn1cclxuZnVuY3Rpb24gaXNTYW1lVHlwZShhLCBiKSB7XHJcbiAgICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKTtcclxufVxyXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xyXG4gICAgaWYgKGlzQXJyYXkoZXhwZWN0ZWRUeXBlcykpIHtcclxuICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlcy5maW5kSW5kZXgodCA9PiBpc1NhbWVUeXBlKHQsIHR5cGUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZXhwZWN0ZWRUeXBlcykpIHtcclxuICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMocmF3UHJvcHMsIHByb3BzLCBpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSB0b1Jhdyhwcm9wcyk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gaW5zdGFuY2UucHJvcHNPcHRpb25zWzBdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xyXG4gICAgICAgIGxldCBvcHQgPSBvcHRpb25zW2tleV07XHJcbiAgICAgICAgaWYgKG9wdCA9PSBudWxsKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB2YWxpZGF0ZVByb3Aoa2V5LCByZXNvbHZlZFZhbHVlc1trZXldLCBvcHQsICFoYXNPd24ocmF3UHJvcHMsIGtleSkgJiYgIWhhc093bihyYXdQcm9wcywgaHlwaGVuYXRlKGtleSkpKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcChuYW1lLCB2YWx1ZSwgcHJvcCwgaXNBYnNlbnQpIHtcclxuICAgIGNvbnN0IHsgdHlwZSwgcmVxdWlyZWQsIHZhbGlkYXRvciB9ID0gcHJvcDtcclxuICAgIC8vIHJlcXVpcmVkIVxyXG4gICAgaWYgKHJlcXVpcmVkICYmIGlzQWJzZW50KSB7XHJcbiAgICAgICAgd2FybignTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gbWlzc2luZyBidXQgb3B0aW9uYWxcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gdHlwZSBjaGVja1xyXG4gICAgaWYgKHR5cGUgIT0gbnVsbCAmJiB0eXBlICE9PSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCB0eXBlcyA9IGlzQXJyYXkodHlwZSkgPyB0eXBlIDogW3R5cGVdO1xyXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZXMgPSBbXTtcclxuICAgICAgICAvLyB2YWx1ZSBpcyB2YWxpZCBhcyBsb25nIGFzIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVzIG1hdGNoXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGggJiYgIWlzVmFsaWQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBleHBlY3RlZFR5cGUgfSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVzW2ldKTtcclxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGV4cGVjdGVkVHlwZSB8fCAnJyk7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSB2YWxpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHdhcm4oZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjdXN0b20gdmFsaWRhdG9yXHJcbiAgICBpZiAodmFsaWRhdG9yICYmICF2YWxpZGF0b3IodmFsdWUpKSB7XHJcbiAgICAgICAgd2FybignSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGlzU2ltcGxlVHlwZSA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcCgnU3RyaW5nLE51bWJlcixCb29sZWFuLEZ1bmN0aW9uLFN5bWJvbCxCaWdJbnQnKTtcclxuLyoqXHJcbiAqIGRldiBvbmx5XHJcbiAqL1xyXG5mdW5jdGlvbiBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBsZXQgdmFsaWQ7XHJcbiAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xyXG4gICAgaWYgKGlzU2ltcGxlVHlwZShleHBlY3RlZFR5cGUpKSB7XHJcbiAgICAgICAgY29uc3QgdCA9IHR5cGVvZiB2YWx1ZTtcclxuICAgICAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXHJcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdPYmplY3QnKSB7XHJcbiAgICAgICAgdmFsaWQgPSBpc09iamVjdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcclxuICAgICAgICB2YWxpZCA9IGlzQXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnbnVsbCcpIHtcclxuICAgICAgICB2YWxpZCA9IHZhbHVlID09PSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbGlkLFxyXG4gICAgICAgIGV4cGVjdGVkVHlwZVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xyXG4gICAgbGV0IG1lc3NhZ2UgPSBgSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIiR7bmFtZX1cIi5gICtcclxuICAgICAgICBgIEV4cGVjdGVkICR7ZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignIHwgJyl9YDtcclxuICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XHJcbiAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xyXG4gICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICBjb25zdCByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcclxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxyXG4gICAgaWYgKGV4cGVjdGVkVHlwZXMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcclxuICAgICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xyXG4gICAgICAgIG1lc3NhZ2UgKz0gYCB3aXRoIHZhbHVlICR7ZXhwZWN0ZWRWYWx1ZX1gO1xyXG4gICAgfVxyXG4gICAgbWVzc2FnZSArPSBgLCBnb3QgJHtyZWNlaXZlZFR5cGV9IGA7XHJcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcclxuICAgIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xyXG4gICAgICAgIG1lc3NhZ2UgKz0gYHdpdGggdmFsdWUgJHtyZWNlaXZlZFZhbHVlfS5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lc3NhZ2U7XHJcbn1cclxuLyoqXHJcbiAqIGRldiBvbmx5XHJcbiAqL1xyXG5mdW5jdGlvbiBzdHlsZVZhbHVlKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xyXG4gICAgICAgIHJldHVybiBgJHtOdW1iZXIodmFsdWUpfWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSh0eXBlKSB7XHJcbiAgICBjb25zdCBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcclxuICAgIHJldHVybiBleHBsaWNpdFR5cGVzLnNvbWUoZWxlbSA9PiB0eXBlLnRvTG93ZXJDYXNlKCkgPT09IGVsZW0pO1xyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKi9cclxuZnVuY3Rpb24gaXNCb29sZWFuKC4uLmFyZ3MpIHtcclxuICAgIHJldHVybiBhcmdzLnNvbWUoZWxlbSA9PiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJyk7XHJcbn1cblxuY29uc3QgaXNJbnRlcm5hbEtleSA9IChrZXkpID0+IGtleVswXSA9PT0gJ18nIHx8IGtleSA9PT0gJyRzdGFibGUnO1xyXG5jb25zdCBub3JtYWxpemVTbG90VmFsdWUgPSAodmFsdWUpID0+IGlzQXJyYXkodmFsdWUpXHJcbiAgICA/IHZhbHVlLm1hcChub3JtYWxpemVWTm9kZSlcclxuICAgIDogW25vcm1hbGl6ZVZOb2RlKHZhbHVlKV07XHJcbmNvbnN0IG5vcm1hbGl6ZVNsb3QgPSAoa2V5LCByYXdTbG90LCBjdHgpID0+IHtcclxuICAgIGlmIChyYXdTbG90Ll9uKSB7XHJcbiAgICAgICAgLy8gYWxyZWFkeSBub3JtYWxpemVkIC0gIzUzNTNcclxuICAgICAgICByZXR1cm4gcmF3U2xvdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB3aXRoQ3R4KCguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgd2FybihgU2xvdCBcIiR7a2V5fVwiIGludm9rZWQgb3V0c2lkZSBvZiB0aGUgcmVuZGVyIGZ1bmN0aW9uOiBgICtcclxuICAgICAgICAgICAgICAgIGB0aGlzIHdpbGwgbm90IHRyYWNrIGRlcGVuZGVuY2llcyB1c2VkIGluIHRoZSBzbG90LiBgICtcclxuICAgICAgICAgICAgICAgIGBJbnZva2UgdGhlIHNsb3QgZnVuY3Rpb24gaW5zaWRlIHRoZSByZW5kZXIgZnVuY3Rpb24gaW5zdGVhZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNsb3RWYWx1ZShyYXdTbG90KC4uLmFyZ3MpKTtcclxuICAgIH0sIGN0eCk7XHJcbiAgICBub3JtYWxpemVkLl9jID0gZmFsc2U7XHJcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcclxufTtcclxuY29uc3Qgbm9ybWFsaXplT2JqZWN0U2xvdHMgPSAocmF3U2xvdHMsIHNsb3RzLCBpbnN0YW5jZSkgPT4ge1xyXG4gICAgY29uc3QgY3R4ID0gcmF3U2xvdHMuX2N0eDtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd1Nsb3RzKSB7XHJcbiAgICAgICAgaWYgKGlzSW50ZXJuYWxLZXkoa2V5KSlcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByYXdTbG90c1trZXldO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBzbG90c1trZXldID0gbm9ybWFsaXplU2xvdChrZXksIHZhbHVlLCBjdHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgICEoZmFsc2UgKSkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgTm9uLWZ1bmN0aW9uIHZhbHVlIGVuY291bnRlcmVkIGZvciBzbG90IFwiJHtrZXl9XCIuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBQcmVmZXIgZnVuY3Rpb24gc2xvdHMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU2xvdFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgc2xvdHNba2V5XSA9ICgpID0+IG5vcm1hbGl6ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5jb25zdCBub3JtYWxpemVWTm9kZVNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbikgPT4ge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICFpc0tlZXBBbGl2ZShpbnN0YW5jZS52bm9kZSkgJiZcclxuICAgICAgICAhKGZhbHNlICkpIHtcclxuICAgICAgICB3YXJuKGBOb24tZnVuY3Rpb24gdmFsdWUgZW5jb3VudGVyZWQgZm9yIGRlZmF1bHQgc2xvdC4gYCArXHJcbiAgICAgICAgICAgIGBQcmVmZXIgZnVuY3Rpb24gc2xvdHMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5gKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVTbG90VmFsdWUoY2hpbGRyZW4pO1xyXG4gICAgaW5zdGFuY2Uuc2xvdHMuZGVmYXVsdCA9ICgpID0+IG5vcm1hbGl6ZWQ7XHJcbn07XHJcbmNvbnN0IGluaXRTbG90cyA9IChpbnN0YW5jZSwgY2hpbGRyZW4pID0+IHtcclxuICAgIGlmIChpbnN0YW5jZS52bm9kZS5zaGFwZUZsYWcgJiAzMiAvKiBTaGFwZUZsYWdzLlNMT1RTX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNoaWxkcmVuLl87XHJcbiAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgLy8gdXNlcnMgY2FuIGdldCB0aGUgc2hhbGxvdyByZWFkb25seSB2ZXJzaW9uIG9mIHRoZSBzbG90cyBvYmplY3QgdGhyb3VnaCBgdGhpcy4kc2xvdHNgLFxyXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGQgYXZvaWQgdGhlIHByb3h5IG9iamVjdCBwb2xsdXRpbmcgdGhlIHNsb3RzIG9mIHRoZSBpbnRlcm5hbCBpbnN0YW5jZVxyXG4gICAgICAgICAgICBpbnN0YW5jZS5zbG90cyA9IHRvUmF3KGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgLy8gbWFrZSBjb21waWxlciBtYXJrZXIgbm9uLWVudW1lcmFibGVcclxuICAgICAgICAgICAgZGVmKGNoaWxkcmVuLCAnXycsIHR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplT2JqZWN0U2xvdHMoY2hpbGRyZW4sIChpbnN0YW5jZS5zbG90cyA9IHt9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaW5zdGFuY2Uuc2xvdHMgPSB7fTtcclxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplVk5vZGVTbG90cyhpbnN0YW5jZSwgY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRlZihpbnN0YW5jZS5zbG90cywgSW50ZXJuYWxPYmplY3RLZXksIDEpO1xyXG59O1xyXG5jb25zdCB1cGRhdGVTbG90cyA9IChpbnN0YW5jZSwgY2hpbGRyZW4sIG9wdGltaXplZCkgPT4ge1xyXG4gICAgY29uc3QgeyB2bm9kZSwgc2xvdHMgfSA9IGluc3RhbmNlO1xyXG4gICAgbGV0IG5lZWREZWxldGlvbkNoZWNrID0gdHJ1ZTtcclxuICAgIGxldCBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSBFTVBUWV9PQko7XHJcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMzIgLyogU2hhcGVGbGFncy5TTE9UU19DSElMRFJFTiAqLykge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjaGlsZHJlbi5fO1xyXG4gICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbXBpbGVkIHNsb3RzLlxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGlzSG1yVXBkYXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIFBhcmVudCB3YXMgSE1SIHVwZGF0ZWQgc28gc2xvdCBjb250ZW50IG1heSBoYXZlIGNoYW5nZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBmb3JjZSB1cGRhdGUgc2xvdHMgYW5kIG1hcmsgaW5zdGFuY2UgZm9yIGhtciBhcyB3ZWxsXHJcbiAgICAgICAgICAgICAgICBleHRlbmQoc2xvdHMsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpbWl6ZWQgJiYgdHlwZSA9PT0gMSAvKiBTbG90RmxhZ3MuU1RBQkxFICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb21waWxlZCBBTkQgc3RhYmxlLlxyXG4gICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUsIGFuZCBza2lwIHN0YWxlIHNsb3RzIHJlbW92YWwuXHJcbiAgICAgICAgICAgICAgICBuZWVkRGVsZXRpb25DaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29tcGlsZWQgYnV0IGR5bmFtaWMgKHYtaWYvdi1mb3Igb24gc2xvdHMpIC0gdXBkYXRlIHNsb3RzLCBidXQgc2tpcFxyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsaXphdGlvbi5cclxuICAgICAgICAgICAgICAgIGV4dGVuZChzbG90cywgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgLy8gIzI4OTNcclxuICAgICAgICAgICAgICAgIC8vIHdoZW4gcmVuZGVyaW5nIHRoZSBvcHRpbWl6ZWQgc2xvdHMgYnkgbWFudWFsbHkgd3JpdHRlbiByZW5kZXIgZnVuY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgYHNsb3RzLl9gIGZsYWcgaWYgbmVjZXNzYXJ5IHRvIG1ha2Ugc3Vic2VxdWVudCB1cGRhdGVzIHJlbGlhYmxlLFxyXG4gICAgICAgICAgICAgICAgLy8gaS5lLiBsZXQgdGhlIGByZW5kZXJTbG90YCBjcmVhdGUgdGhlIGJhaWxlZCBGcmFnbWVudFxyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWQgJiYgdHlwZSA9PT0gMSAvKiBTbG90RmxhZ3MuU1RBQkxFICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNsb3RzLl87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gIWNoaWxkcmVuLiRzdGFibGU7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZU9iamVjdFNsb3RzKGNoaWxkcmVuLCBzbG90cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCA9IGNoaWxkcmVuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgICAvLyBub24gc2xvdCBvYmplY3QgY2hpbGRyZW4gKGRpcmVjdCB2YWx1ZSkgcGFzc2VkIHRvIGEgY29tcG9uZW50XHJcbiAgICAgICAgbm9ybWFsaXplVk5vZGVTbG90cyhpbnN0YW5jZSwgY2hpbGRyZW4pO1xyXG4gICAgICAgIGRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCA9IHsgZGVmYXVsdDogMSB9O1xyXG4gICAgfVxyXG4gICAgLy8gZGVsZXRlIHN0YWxlIHNsb3RzXHJcbiAgICBpZiAobmVlZERlbGV0aW9uQ2hlY2spIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzbG90cykge1xyXG4gICAgICAgICAgICBpZiAoIWlzSW50ZXJuYWxLZXkoa2V5KSAmJiAhKGtleSBpbiBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgc2xvdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcblxuZnVuY3Rpb24gY3JlYXRlQXBwQ29udGV4dCgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgYXBwOiBudWxsLFxyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgICBpc05hdGl2ZVRhZzogTk8sXHJcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgZ2xvYmFsUHJvcGVydGllczoge30sXHJcbiAgICAgICAgICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczoge30sXHJcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB3YXJuSGFuZGxlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjb21waWxlck9wdGlvbnM6IHt9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtaXhpbnM6IFtdLFxyXG4gICAgICAgIGNvbXBvbmVudHM6IHt9LFxyXG4gICAgICAgIGRpcmVjdGl2ZXM6IHt9LFxyXG4gICAgICAgIHByb3ZpZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxyXG4gICAgICAgIG9wdGlvbnNDYWNoZTogbmV3IFdlYWtNYXAoKSxcclxuICAgICAgICBwcm9wc0NhY2hlOiBuZXcgV2Vha01hcCgpLFxyXG4gICAgICAgIGVtaXRzQ2FjaGU6IG5ldyBXZWFrTWFwKClcclxuICAgIH07XHJcbn1cclxubGV0IHVpZCA9IDA7XHJcbmZ1bmN0aW9uIGNyZWF0ZUFwcEFQSShyZW5kZXIsIGh5ZHJhdGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVBcHAocm9vdENvbXBvbmVudCwgcm9vdFByb3BzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghaXNGdW5jdGlvbihyb290Q29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICByb290Q29tcG9uZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcm9vdENvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyb290UHJvcHMgIT0gbnVsbCAmJiAhaXNPYmplY3Qocm9vdFByb3BzKSkge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2Fybihgcm9vdCBwcm9wcyBwYXNzZWQgdG8gYXBwLm1vdW50KCkgbXVzdCBiZSBhbiBvYmplY3QuYCk7XHJcbiAgICAgICAgICAgIHJvb3RQcm9wcyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVBcHBDb250ZXh0KCk7XHJcbiAgICAgICAgY29uc3QgaW5zdGFsbGVkUGx1Z2lucyA9IG5ldyBTZXQoKTtcclxuICAgICAgICBsZXQgaXNNb3VudGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgYXBwID0gKGNvbnRleHQuYXBwID0ge1xyXG4gICAgICAgICAgICBfdWlkOiB1aWQrKyxcclxuICAgICAgICAgICAgX2NvbXBvbmVudDogcm9vdENvbXBvbmVudCxcclxuICAgICAgICAgICAgX3Byb3BzOiByb290UHJvcHMsXHJcbiAgICAgICAgICAgIF9jb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICAgICAgICBfaW5zdGFuY2U6IG51bGwsXHJcbiAgICAgICAgICAgIHZlcnNpb24sXHJcbiAgICAgICAgICAgIGdldCBjb25maWcoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25maWc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldCBjb25maWcodikge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYGFwcC5jb25maWcgY2Fubm90IGJlIHJlcGxhY2VkLiBNb2RpZnkgaW5kaXZpZHVhbCBvcHRpb25zIGluc3RlYWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHVzZShwbHVnaW4sIC4uLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmhhcyhwbHVnaW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm4oYFBsdWdpbiBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8gdGFyZ2V0IGFwcC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBsdWdpbiAmJiBpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMuYWRkKHBsdWdpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmluc3RhbGwoYXBwLCAuLi5vcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGx1Z2luKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMuYWRkKHBsdWdpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luKGFwcCwgLi4ub3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBBIHBsdWdpbiBtdXN0IGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCB3aXRoIGFuIFwiaW5zdGFsbFwiIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZnVuY3Rpb24uYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaXhpbihtaXhpbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQubWl4aW5zLmluY2x1ZGVzKG1peGluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1peGlucy5wdXNoKG1peGluKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oJ01peGluIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWl4aW4ubmFtZSA/IGA6ICR7bWl4aW4ubmFtZX1gIDogJycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKCdNaXhpbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJ1aWxkcyBzdXBwb3J0aW5nIE9wdGlvbnMgQVBJJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wb25lbnQobmFtZSwgY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUsIGNvbnRleHQuY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29tcG9uZW50c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgY29udGV4dC5jb21wb25lbnRzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgQ29tcG9uZW50IFwiJHtuYW1lfVwiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBpbiB0YXJnZXQgYXBwLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5jb21wb25lbnRzW25hbWVdID0gY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGlyZWN0aXZlKG5hbWUsIGRpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRGlyZWN0aXZlTmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghZGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlyZWN0aXZlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgY29udGV4dC5kaXJlY3RpdmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgRGlyZWN0aXZlIFwiJHtuYW1lfVwiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBpbiB0YXJnZXQgYXBwLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5kaXJlY3RpdmVzW25hbWVdID0gZGlyZWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW91bnQocm9vdENvbnRhaW5lciwgaXNIeWRyYXRlLCBpc1NWRykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc01vdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAjNTU3MVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgcm9vdENvbnRhaW5lci5fX3Z1ZV9hcHBfXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFwcCBpbnN0YW5jZSBtb3VudGVkIG9uIHRoZSBob3N0IGNvbnRhaW5lci5cXG5gICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgSWYgeW91IHdhbnQgdG8gbW91bnQgYW5vdGhlciBhcHAgb24gdGhlIHNhbWUgaG9zdCBjb250YWluZXIsYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgIHlvdSBuZWVkIHRvIHVubW91bnQgdGhlIHByZXZpb3VzIGFwcCBieSBjYWxsaW5nIFxcYGFwcC51bm1vdW50KClcXGAgZmlyc3QuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUocm9vdENvbXBvbmVudCwgcm9vdFByb3BzKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSBhcHAgY29udGV4dCBvbiB0aGUgcm9vdCBWTm9kZS5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgYmUgc2V0IG9uIHRoZSByb290IGluc3RhbmNlIG9uIGluaXRpYWwgbW91bnQuXHJcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUuYXBwQ29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSE1SIHJvb3QgcmVsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihjbG9uZVZOb2RlKHZub2RlKSwgcm9vdENvbnRhaW5lciwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNIeWRyYXRlICYmIGh5ZHJhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0ZSh2bm9kZSwgcm9vdENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIodm5vZGUsIHJvb3RDb250YWluZXIsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBhcHAuX2NvbnRhaW5lciA9IHJvb3RDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdENvbnRhaW5lci5fX3Z1ZV9hcHBfXyA9IGFwcDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAuX2luc3RhbmNlID0gdm5vZGUuY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZ0b29sc0luaXRBcHAoYXBwLCB2ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEV4cG9zZVByb3h5KHZub2RlLmNvbXBvbmVudCkgfHwgdm5vZGUuY29tcG9uZW50LnByb3h5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgQXBwIGhhcyBhbHJlYWR5IGJlZW4gbW91bnRlZC5cXG5gICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYElmIHlvdSB3YW50IHRvIHJlbW91bnQgdGhlIHNhbWUgYXBwLCBtb3ZlIHlvdXIgYXBwIGNyZWF0aW9uIGxvZ2ljIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgaW50byBhIGZhY3RvcnkgZnVuY3Rpb24gYW5kIGNyZWF0ZSBmcmVzaCBhcHAgaW5zdGFuY2VzIGZvciBlYWNoIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgbW91bnQgLSBlLmcuIFxcYGNvbnN0IGNyZWF0ZU15QXBwID0gKCkgPT4gY3JlYXRlQXBwKEFwcClcXGBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5tb3VudCgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc01vdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXIobnVsbCwgYXBwLl9jb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5faW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZ0b29sc1VubW91bnRBcHAoYXBwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFwcC5fY29udGFpbmVyLl9fdnVlX2FwcF9fO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgQ2Fubm90IHVubW91bnQgYW4gYXBwIHRoYXQgaXMgbm90IG1vdW50ZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByb3ZpZGUoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBrZXkgaW4gY29udGV4dC5wcm92aWRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYEFwcCBhbHJlYWR5IHByb3ZpZGVzIHByb3BlcnR5IHdpdGgga2V5IFwiJHtTdHJpbmcoa2V5KX1cIi4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5ldyB2YWx1ZS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvdmlkZXNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhcHA7XHJcbiAgICB9O1xyXG59XG5cbi8qKlxyXG4gKiBGdW5jdGlvbiBmb3IgaGFuZGxpbmcgYSB0ZW1wbGF0ZSByZWZcclxuICovXHJcbmZ1bmN0aW9uIHNldFJlZihyYXdSZWYsIG9sZFJhd1JlZiwgcGFyZW50U3VzcGVuc2UsIHZub2RlLCBpc1VubW91bnQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGlzQXJyYXkocmF3UmVmKSkge1xyXG4gICAgICAgIHJhd1JlZi5mb3JFYWNoKChyLCBpKSA9PiBzZXRSZWYociwgb2xkUmF3UmVmICYmIChpc0FycmF5KG9sZFJhd1JlZikgPyBvbGRSYXdSZWZbaV0gOiBvbGRSYXdSZWYpLCBwYXJlbnRTdXNwZW5zZSwgdm5vZGUsIGlzVW5tb3VudCkpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc0FzeW5jV3JhcHBlcih2bm9kZSkgJiYgIWlzVW5tb3VudCkge1xyXG4gICAgICAgIC8vIHdoZW4gbW91bnRpbmcgYXN5bmMgY29tcG9uZW50cywgbm90aGluZyBuZWVkcyB0byBiZSBkb25lLFxyXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIHRlbXBsYXRlIHJlZiBpcyBmb3J3YXJkZWQgdG8gaW5uZXIgY29tcG9uZW50XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVmVmFsdWUgPSB2bm9kZS5zaGFwZUZsYWcgJiA0IC8qIFNoYXBlRmxhZ3MuU1RBVEVGVUxfQ09NUE9ORU5UICovXHJcbiAgICAgICAgPyBnZXRFeHBvc2VQcm94eSh2bm9kZS5jb21wb25lbnQpIHx8IHZub2RlLmNvbXBvbmVudC5wcm94eVxyXG4gICAgICAgIDogdm5vZGUuZWw7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGlzVW5tb3VudCA/IG51bGwgOiByZWZWYWx1ZTtcclxuICAgIGNvbnN0IHsgaTogb3duZXIsIHI6IHJlZiB9ID0gcmF3UmVmO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhb3duZXIpIHtcclxuICAgICAgICB3YXJuKGBNaXNzaW5nIHJlZiBvd25lciBjb250ZXh0LiByZWYgY2Fubm90IGJlIHVzZWQgb24gaG9pc3RlZCB2bm9kZXMuIGAgK1xyXG4gICAgICAgICAgICBgQSB2bm9kZSB3aXRoIHJlZiBtdXN0IGJlIGNyZWF0ZWQgaW5zaWRlIHRoZSByZW5kZXIgZnVuY3Rpb24uYCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2xkUmVmID0gb2xkUmF3UmVmICYmIG9sZFJhd1JlZi5yO1xyXG4gICAgY29uc3QgcmVmcyA9IG93bmVyLnJlZnMgPT09IEVNUFRZX09CSiA/IChvd25lci5yZWZzID0ge30pIDogb3duZXIucmVmcztcclxuICAgIGNvbnN0IHNldHVwU3RhdGUgPSBvd25lci5zZXR1cFN0YXRlO1xyXG4gICAgLy8gZHluYW1pYyByZWYgY2hhbmdlZC4gdW5zZXQgb2xkIHJlZlxyXG4gICAgaWYgKG9sZFJlZiAhPSBudWxsICYmIG9sZFJlZiAhPT0gcmVmKSB7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKG9sZFJlZikpIHtcclxuICAgICAgICAgICAgcmVmc1tvbGRSZWZdID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGhhc093bihzZXR1cFN0YXRlLCBvbGRSZWYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR1cFN0YXRlW29sZFJlZl0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzUmVmKG9sZFJlZikpIHtcclxuICAgICAgICAgICAgb2xkUmVmLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXNGdW5jdGlvbihyZWYpKSB7XHJcbiAgICAgICAgY2FsbFdpdGhFcnJvckhhbmRsaW5nKHJlZiwgb3duZXIsIDEyIC8qIEVycm9yQ29kZXMuRlVOQ1RJT05fUkVGICovLCBbdmFsdWUsIHJlZnNdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IF9pc1N0cmluZyA9IGlzU3RyaW5nKHJlZik7XHJcbiAgICAgICAgY29uc3QgX2lzUmVmID0gaXNSZWYocmVmKTtcclxuICAgICAgICBpZiAoX2lzU3RyaW5nIHx8IF9pc1JlZikge1xyXG4gICAgICAgICAgICBjb25zdCBkb1NldCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyYXdSZWYuZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gX2lzU3RyaW5nID8gcmVmc1tyZWZdIDogcmVmLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VubW91bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheShleGlzdGluZykgJiYgcmVtb3ZlKGV4aXN0aW5nLCByZWZWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkoZXhpc3RpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gW3JlZlZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duKHNldHVwU3RhdGUsIHJlZikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBTdGF0ZVtyZWZdID0gcmVmc1tyZWZdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi52YWx1ZSA9IFtyZWZWYWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd1JlZi5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3Jhd1JlZi5rXSA9IHJlZi52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocmVmVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5wdXNoKHJlZlZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9pc1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZnNbcmVmXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24oc2V0dXBTdGF0ZSwgcmVmKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR1cFN0YXRlW3JlZl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfaXNSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3UmVmLmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnNbcmF3UmVmLmtdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKCdJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOicsIHJlZiwgYCgke3R5cGVvZiByZWZ9KWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGRvU2V0LmlkID0gLTE7XHJcbiAgICAgICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoZG9TZXQsIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvU2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oJ0ludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6JywgcmVmLCBgKCR7dHlwZW9mIHJlZn0pYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmxldCBoYXNNaXNtYXRjaCA9IGZhbHNlO1xyXG5jb25zdCBpc1NWR0NvbnRhaW5lciA9IChjb250YWluZXIpID0+IC9zdmcvLnRlc3QoY29udGFpbmVyLm5hbWVzcGFjZVVSSSkgJiYgY29udGFpbmVyLnRhZ05hbWUgIT09ICdmb3JlaWduT2JqZWN0JztcclxuY29uc3QgaXNDb21tZW50ID0gKG5vZGUpID0+IG5vZGUubm9kZVR5cGUgPT09IDggLyogRE9NTm9kZVR5cGVzLkNPTU1FTlQgKi87XHJcbi8vIE5vdGU6IGh5ZHJhdGlvbiBpcyBET00tc3BlY2lmaWNcclxuLy8gQnV0IHdlIGhhdmUgdG8gcGxhY2UgaXQgaW4gY29yZSBkdWUgdG8gdGlnaHQgY291cGxpbmcgd2l0aCBjb3JlIC0gc3BsaXR0aW5nXHJcbi8vIGl0IG91dCBjcmVhdGVzIGEgdG9uIG9mIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuXHJcbi8vIEh5ZHJhdGlvbiBhbHNvIGRlcGVuZHMgb24gc29tZSByZW5kZXJlciBpbnRlcm5hbCBsb2dpYyB3aGljaCBuZWVkcyB0byBiZVxyXG4vLyBwYXNzZWQgaW4gdmlhIGFyZ3VtZW50cy5cclxuZnVuY3Rpb24gY3JlYXRlSHlkcmF0aW9uRnVuY3Rpb25zKHJlbmRlcmVySW50ZXJuYWxzKSB7XHJcbiAgICBjb25zdCB7IG10OiBtb3VudENvbXBvbmVudCwgcDogcGF0Y2gsIG86IHsgcGF0Y2hQcm9wLCBjcmVhdGVUZXh0LCBuZXh0U2libGluZywgcGFyZW50Tm9kZSwgcmVtb3ZlLCBpbnNlcnQsIGNyZWF0ZUNvbW1lbnQgfSB9ID0gcmVuZGVyZXJJbnRlcm5hbHM7XHJcbiAgICBjb25zdCBoeWRyYXRlID0gKHZub2RlLCBjb250YWluZXIpID0+IHtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuKGBBdHRlbXB0aW5nIHRvIGh5ZHJhdGUgZXhpc3RpbmcgbWFya3VwIGJ1dCBjb250YWluZXIgaXMgZW1wdHkuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBQZXJmb3JtaW5nIGZ1bGwgbW91bnQgaW5zdGVhZC5gKTtcclxuICAgICAgICAgICAgcGF0Y2gobnVsbCwgdm5vZGUsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGZsdXNoUG9zdEZsdXNoQ2JzKCk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5fdm5vZGUgPSB2bm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoYXNNaXNtYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgIGh5ZHJhdGVOb2RlKGNvbnRhaW5lci5maXJzdENoaWxkLCB2bm9kZSwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgZmx1c2hQb3N0Rmx1c2hDYnMoKTtcclxuICAgICAgICBjb250YWluZXIuX3Zub2RlID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKGhhc01pc21hdGNoICYmICFmYWxzZSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzIGVycm9yIHNob3VsZCBzaG93IHVwIGluIHByb2R1Y3Rpb25cclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSHlkcmF0aW9uIGNvbXBsZXRlZCBidXQgY29udGFpbnMgbWlzbWF0Y2hlcy5gKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaHlkcmF0ZU5vZGUgPSAobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkID0gZmFsc2UpID0+IHtcclxuICAgICAgICBjb25zdCBpc0ZyYWdtZW50U3RhcnQgPSBpc0NvbW1lbnQobm9kZSkgJiYgbm9kZS5kYXRhID09PSAnWyc7XHJcbiAgICAgICAgY29uc3Qgb25NaXNtYXRjaCA9ICgpID0+IGhhbmRsZU1pc21hdGNoKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIGlzRnJhZ21lbnRTdGFydCk7XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCByZWYsIHNoYXBlRmxhZywgcGF0Y2hGbGFnIH0gPSB2bm9kZTtcclxuICAgICAgICBjb25zdCBkb21UeXBlID0gbm9kZS5ub2RlVHlwZTtcclxuICAgICAgICB2bm9kZS5lbCA9IG5vZGU7XHJcbiAgICAgICAgaWYgKHBhdGNoRmxhZyA9PT0gLTIgLyogUGF0Y2hGbGFncy5CQUlMICovKSB7XHJcbiAgICAgICAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2bm9kZS5keW5hbWljQ2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbmV4dE5vZGUgPSBudWxsO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRleHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gMyAvKiBET01Ob2RlVHlwZXMuVEVYVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICM1NzI4IGVtcHR5IHRleHQgbm9kZSBpbnNpZGUgYSBzbG90IGNhbiBjYXVzZSBoeWRyYXRpb24gZmFpbHVyZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIHdvbid0IGNvbnRhaW4gYSB0ZXh0IG5vZGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAodm5vZGUuY2hpbGRyZW4gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCgodm5vZGUuZWwgPSBjcmVhdGVUZXh0KCcnKSksIHBhcmVudE5vZGUobm9kZSksIG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhICE9PSB2bm9kZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihgSHlkcmF0aW9uIHRleHQgbWlzbWF0Y2g6YCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcbi0gQ2xpZW50OiAke0pTT04uc3RyaW5naWZ5KG5vZGUuZGF0YSl9YCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcbi0gU2VydmVyOiAke0pTT04uc3RyaW5naWZ5KHZub2RlLmNoaWxkcmVuKX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhID0gdm5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb21tZW50OlxyXG4gICAgICAgICAgICAgICAgaWYgKGRvbVR5cGUgIT09IDggLyogRE9NTm9kZVR5cGVzLkNPTU1FTlQgKi8gfHwgaXNGcmFnbWVudFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3RhdGljOlxyXG4gICAgICAgICAgICAgICAgaWYgKGRvbVR5cGUgIT09IDEgLyogRE9NTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiYgZG9tVHlwZSAhPT0gMyAvKiBET01Ob2RlVHlwZXMuVEVYVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGFuY2hvciwgYWRvcHQgY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgc3RhdGljIHZub2RlIGhhcyBpdHMgY29udGVudCBzdHJpcHBlZCBkdXJpbmcgYnVpbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRvcHQgaXQgZnJvbSB0aGUgc2VydmVyLXJlbmRlcmVkIEhUTUwuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZFRvQWRvcHRDb250ZW50ID0gIXZub2RlLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZub2RlLnN0YXRpY0NvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRUb0Fkb3B0Q29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZub2RlLmNoaWxkcmVuICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUubm9kZVR5cGUgPT09IDEgLyogRE9NTm9kZVR5cGVzLkVMRU1FTlQgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0Tm9kZS5vdXRlckhUTUxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXh0Tm9kZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gdm5vZGUuc3RhdGljQ291bnQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bm9kZS5hbmNob3IgPSBuZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nKG5leHROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRnJhZ21lbnRTdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBoeWRyYXRlRnJhZ21lbnQobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbVR5cGUgIT09IDEgLyogRE9NTm9kZVR5cGVzLkVMRU1FTlQgKi8gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdm5vZGUudHlwZS50b0xvd2VyQ2FzZSgpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGh5ZHJhdGVFbGVtZW50KG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gc2V0dGluZyB1cCB0aGUgcmVuZGVyIGVmZmVjdCwgaWYgdGhlIGluaXRpYWwgdm5vZGUgYWxyZWFkeVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhcyAuZWwgc2V0LCB0aGUgY29tcG9uZW50IHdpbGwgcGVyZm9ybSBoeWRyYXRpb24gaW5zdGVhZCBvZiBtb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGl0cyBzdWItdHJlZS5cclxuICAgICAgICAgICAgICAgICAgICB2bm9kZS5zbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBtb3VudENvbXBvbmVudCh2bm9kZSwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWR0NvbnRhaW5lcihjb250YWluZXIpLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudCBtYXkgYmUgYXN5bmMsIHNvIGluIHRoZSBjYXNlIG9mIGZyYWdtZW50cyB3ZSBjYW5ub3QgcmVseVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbXBvbmVudCdzIHJlbmRlcmVkIG91dHB1dCB0byBkZXRlcm1pbmUgdGhlIGVuZCBvZiB0aGUgZnJhZ21lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkLCB3ZSBkbyBhIGxvb2thaGVhZCB0byBmaW5kIHRoZSBlbmQgYW5jaG9yIG5vZGUuXHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBpc0ZyYWdtZW50U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBsb2NhdGVDbG9zaW5nQXN5bmNBbmNob3Iobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAjNDI5MyB0ZWxlcG9ydCBhcyBjb21wb25lbnQgcm9vdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Tm9kZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvbW1lbnQobmV4dE5vZGUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLmRhdGEgPT09ICd0ZWxlcG9ydCBlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobmV4dE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyAjMzc4N1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGNvbXBvbmVudCBpcyBhc3luYywgaXQgbWF5IGdldCBtb3ZlZCAvIHVubW91bnRlZCBiZWZvcmUgaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5uZXIgY29tcG9uZW50IGlzIGxvYWRlZCwgc28gd2UgbmVlZCB0byBnaXZlIGl0IGEgcGxhY2Vob2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAvLyB2bm9kZSB0aGF0IG1hdGNoZXMgaXRzIGFkb3B0ZWQgRE9NLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jV3JhcHBlcih2bm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlRyZWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZyYWdtZW50U3RhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWUgPSBjcmVhdGVWTm9kZShGcmFnbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJUcmVlLmFuY2hvciA9IG5leHROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnRhaW5lci5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJUcmVlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVUeXBlID09PSAzID8gY3JlYXRlVGV4dFZOb2RlKCcnKSA6IGNyZWF0ZVZOb2RlKCdkaXYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJUcmVlLmVsID0gbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdm5vZGUuY29tcG9uZW50LnN1YlRyZWUgPSBzdWJUcmVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlRmxhZyAmIDY0IC8qIFNoYXBlRmxhZ3MuVEVMRVBPUlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gOCAvKiBET01Ob2RlVHlwZXMuQ09NTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIGh5ZHJhdGVDaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IHZub2RlLnR5cGUuaHlkcmF0ZShub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkdDb250YWluZXIocGFyZW50Tm9kZShub2RlKSksIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscywgaHlkcmF0ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybignSW52YWxpZCBIb3N0Vk5vZGUgdHlwZTonLCB0eXBlLCBgKCR7dHlwZW9mIHR5cGV9KWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVmICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2V0UmVmKHJlZiwgbnVsbCwgcGFyZW50U3VzcGVuc2UsIHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGh5ZHJhdGVFbGVtZW50ID0gKGVsLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBvcHRpbWl6ZWQgPSBvcHRpbWl6ZWQgfHwgISF2bm9kZS5keW5hbWljQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCBwcm9wcywgcGF0Y2hGbGFnLCBzaGFwZUZsYWcsIGRpcnMgfSA9IHZub2RlO1xyXG4gICAgICAgIC8vICM0MDA2IGZvciBmb3JtIGVsZW1lbnRzIHdpdGggbm9uLXN0cmluZyB2LW1vZGVsIHZhbHVlIGJpbmRpbmdzXHJcbiAgICAgICAgLy8gZS5nLiA8b3B0aW9uIDp2YWx1ZT1cIm9ialwiPiwgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIDp0cnVlLXZhbHVlPVwiMVwiPlxyXG4gICAgICAgIGNvbnN0IGZvcmNlUGF0Y2hWYWx1ZSA9ICh0eXBlID09PSAnaW5wdXQnICYmIGRpcnMpIHx8IHR5cGUgPT09ICdvcHRpb24nO1xyXG4gICAgICAgIC8vIHNraXAgcHJvcHMgJiBjaGlsZHJlbiBpZiB0aGlzIGlzIGhvaXN0ZWQgc3RhdGljIG5vZGVzXHJcbiAgICAgICAgLy8gIzU0MDUgaW4gZGV2LCBhbHdheXMgaHlkcmF0ZSBjaGlsZHJlbiBmb3IgSE1SXHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBmb3JjZVBhdGNoVmFsdWUgfHwgcGF0Y2hGbGFnICE9PSAtMSAvKiBQYXRjaEZsYWdzLkhPSVNURUQgKi8pIHtcclxuICAgICAgICAgICAgaWYgKGRpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ2NyZWF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBwcm9wc1xyXG4gICAgICAgICAgICBpZiAocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JjZVBhdGNoVmFsdWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAhb3B0aW1pemVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hGbGFnICYgKDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqLyB8IDMyIC8qIFBhdGNoRmxhZ3MuSFlEUkFURV9FVkVOVFMgKi8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmb3JjZVBhdGNoVmFsdWUgJiYga2V5LmVuZHNXaXRoKCd2YWx1ZScpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzT24oa2V5KSAmJiAhaXNSZXNlcnZlZFByb3Aoa2V5KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoUHJvcChlbCwga2V5LCBudWxsLCBwcm9wc1trZXldLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJlbnRDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgY2xpY2sgbGlzdGVuZXJzICh3aGljaCBpcyBtb3N0IG9mdGVuKSB0byBhdm9pZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGluZyB0aHJvdWdoIHByb3BzLlxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoUHJvcChlbCwgJ29uQ2xpY2snLCBudWxsLCBwcm9wcy5vbkNsaWNrLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJlbnRDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHZub2RlIC8gZGlyZWN0aXZlIGhvb2tzXHJcbiAgICAgICAgICAgIGxldCB2bm9kZUhvb2tzO1xyXG4gICAgICAgICAgICBpZiAoKHZub2RlSG9va3MgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlQmVmb3JlTW91bnQpKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rcywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ2JlZm9yZU1vdW50Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCh2bm9kZUhvb2tzID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpIHx8IGRpcnMpIHtcclxuICAgICAgICAgICAgICAgIHF1ZXVlRWZmZWN0V2l0aFN1c3BlbnNlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZUhvb2tzICYmIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2tzLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXJzICYmIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ21vdW50ZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjaGlsZHJlblxyXG4gICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLyAmJlxyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBpZiBlbGVtZW50IGhhcyBpbm5lckhUTUwgLyB0ZXh0Q29udGVudFxyXG4gICAgICAgICAgICAgICAgIShwcm9wcyAmJiAocHJvcHMuaW5uZXJIVE1MIHx8IHByb3BzLnRleHRDb250ZW50KSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gaHlkcmF0ZUNoaWxkcmVuKGVsLmZpcnN0Q2hpbGQsIHZub2RlLCBlbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaGFzV2FybmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYEh5ZHJhdGlvbiBjaGlsZHJlbiBtaXNtYXRjaCBpbiA8JHt2bm9kZS50eXBlfT46IGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlcnZlciByZW5kZXJlZCBlbGVtZW50IGNvbnRhaW5zIG1vcmUgY2hpbGQgbm9kZXMgdGhhbiBjbGllbnQgdmRvbS5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFNTUmVkIERPTSBjb250YWlucyBtb3JlIG5vZGVzIHRoYW4gaXQgc2hvdWxkLiBSZW1vdmUgdGhlbS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXIgPSBuZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShjdXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlRmxhZyAmIDggLyogU2hhcGVGbGFncy5URVhUX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWwudGV4dENvbnRlbnQgIT09IHZub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzTWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKGBIeWRyYXRpb24gdGV4dCBjb250ZW50IG1pc21hdGNoIGluIDwke3Zub2RlLnR5cGV9PjpcXG5gICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtIENsaWVudDogJHtlbC50ZXh0Q29udGVudH1cXG5gICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtIFNlcnZlcjogJHt2bm9kZS5jaGlsZHJlbn1gKTtcclxuICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHZub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbC5uZXh0U2libGluZztcclxuICAgIH07XHJcbiAgICBjb25zdCBoeWRyYXRlQ2hpbGRyZW4gPSAobm9kZSwgcGFyZW50Vk5vZGUsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBvcHRpbWl6ZWQgPSBvcHRpbWl6ZWQgfHwgISFwYXJlbnRWTm9kZS5keW5hbWljQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRWTm9kZS5jaGlsZHJlbjtcclxuICAgICAgICBjb25zdCBsID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGxldCBoYXNXYXJuZWQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2bm9kZSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgPyBjaGlsZHJlbltpXVxyXG4gICAgICAgICAgICAgICAgOiAoY2hpbGRyZW5baV0gPSBub3JtYWxpemVWTm9kZShjaGlsZHJlbltpXSkpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IGh5ZHJhdGVOb2RlKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gVGV4dCAmJiAhdm5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaGFzTWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaGFzV2FybmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgSHlkcmF0aW9uIGNoaWxkcmVuIG1pc21hdGNoIGluIDwke2NvbnRhaW5lci50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PjogYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBzZXJ2ZXIgcmVuZGVyZWQgZWxlbWVudCBjb250YWlucyBmZXdlciBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc1dhcm5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgU1NSZWQgRE9NIGRpZG4ndCBjb250YWluIGVub3VnaCBub2Rlcy4gTW91bnQgdGhlIG1pc3Npbmcgb25lcy5cclxuICAgICAgICAgICAgICAgIHBhdGNoKG51bGwsIHZub2RlLCBjb250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHQ29udGFpbmVyKGNvbnRhaW5lciksIHNsb3RTY29wZUlkcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaHlkcmF0ZUZyYWdtZW50ID0gKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgc2xvdFNjb3BlSWRzOiBmcmFnbWVudFNsb3RTY29wZUlkcyB9ID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50U2xvdFNjb3BlSWRzKSB7XHJcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyA9IHNsb3RTY29wZUlkc1xyXG4gICAgICAgICAgICAgICAgPyBzbG90U2NvcGVJZHMuY29uY2F0KGZyYWdtZW50U2xvdFNjb3BlSWRzKVxyXG4gICAgICAgICAgICAgICAgOiBmcmFnbWVudFNsb3RTY29wZUlkcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcclxuICAgICAgICBjb25zdCBuZXh0ID0gaHlkcmF0ZUNoaWxkcmVuKG5leHRTaWJsaW5nKG5vZGUpLCB2bm9kZSwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgaWYgKG5leHQgJiYgaXNDb21tZW50KG5leHQpICYmIG5leHQuZGF0YSA9PT0gJ10nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZygodm5vZGUuYW5jaG9yID0gbmV4dCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZnJhZ21lbnQgZGlkbid0IGh5ZHJhdGUgc3VjY2Vzc2Z1bGx5LCBzaW5jZSB3ZSBkaWRuJ3QgZ2V0IGEgZW5kIGFuY2hvclxyXG4gICAgICAgICAgICAvLyBiYWNrLiBUaGlzIHNob3VsZCBoYXZlIGxlZCB0byBub2RlL2NoaWxkcmVuIG1pc21hdGNoIHdhcm5pbmdzLlxyXG4gICAgICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBhbmNob3IgaXMgbWlzc2luZywgd2UgbmVlZCB0byBjcmVhdGUgb25lIGFuZCBpbnNlcnQgaXRcclxuICAgICAgICAgICAgaW5zZXJ0KCh2bm9kZS5hbmNob3IgPSBjcmVhdGVDb21tZW50KGBdYCkpLCBjb250YWluZXIsIG5leHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlTWlzbWF0Y2ggPSAobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgaXNGcmFnbWVudCkgPT4ge1xyXG4gICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcclxuICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgd2FybihgSHlkcmF0aW9uIG5vZGUgbWlzbWF0Y2g6XFxuLSBDbGllbnQgdm5vZGU6YCwgdm5vZGUudHlwZSwgYFxcbi0gU2VydmVyIHJlbmRlcmVkIERPTTpgLCBub2RlLCBub2RlLm5vZGVUeXBlID09PSAzIC8qIERPTU5vZGVUeXBlcy5URVhUICovXHJcbiAgICAgICAgICAgICAgICA/IGAodGV4dClgXHJcbiAgICAgICAgICAgICAgICA6IGlzQ29tbWVudChub2RlKSAmJiBub2RlLmRhdGEgPT09ICdbJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gYChzdGFydCBvZiBmcmFnbWVudClgXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgYCk7XHJcbiAgICAgICAgdm5vZGUuZWwgPSBudWxsO1xyXG4gICAgICAgIGlmIChpc0ZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBleGNlc3NpdmUgZnJhZ21lbnQgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gbG9jYXRlQ2xvc2luZ0FzeW5jQW5jaG9yKG5vZGUpO1xyXG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5leHRTaWJsaW5nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dCAhPT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IG5leHRTaWJsaW5nKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUobm9kZSk7XHJcbiAgICAgICAgcmVtb3ZlKG5vZGUpO1xyXG4gICAgICAgIHBhdGNoKG51bGwsIHZub2RlLCBjb250YWluZXIsIG5leHQsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHQ29udGFpbmVyKGNvbnRhaW5lciksIHNsb3RTY29wZUlkcyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgbG9jYXRlQ2xvc2luZ0FzeW5jQW5jaG9yID0gKG5vZGUpID0+IHtcclxuICAgICAgICBsZXQgbWF0Y2ggPSAwO1xyXG4gICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgaWYgKG5vZGUgJiYgaXNDb21tZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhID09PSAnWycpXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2grKztcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGEgPT09ICddJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXTtcclxufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cclxubGV0IHN1cHBvcnRlZDtcclxubGV0IHBlcmY7XHJcbmZ1bmN0aW9uIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgdHlwZSkge1xyXG4gICAgaWYgKGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLnBlcmZvcm1hbmNlICYmIGlzU3VwcG9ydGVkKCkpIHtcclxuICAgICAgICBwZXJmLm1hcmsoYHZ1ZS0ke3R5cGV9LSR7aW5zdGFuY2UudWlkfWApO1xyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICBkZXZ0b29sc1BlcmZTdGFydChpbnN0YW5jZSwgdHlwZSwgaXNTdXBwb3J0ZWQoKSA/IHBlcmYubm93KCkgOiBEYXRlLm5vdygpKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBlbmRNZWFzdXJlKGluc3RhbmNlLCB0eXBlKSB7XHJcbiAgICBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcucGVyZm9ybWFuY2UgJiYgaXNTdXBwb3J0ZWQoKSkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGFnID0gYHZ1ZS0ke3R5cGV9LSR7aW5zdGFuY2UudWlkfWA7XHJcbiAgICAgICAgY29uc3QgZW5kVGFnID0gc3RhcnRUYWcgKyBgOmVuZGA7XHJcbiAgICAgICAgcGVyZi5tYXJrKGVuZFRhZyk7XHJcbiAgICAgICAgcGVyZi5tZWFzdXJlKGA8JHtmb3JtYXRDb21wb25lbnROYW1lKGluc3RhbmNlLCBpbnN0YW5jZS50eXBlKX0+ICR7dHlwZX1gLCBzdGFydFRhZywgZW5kVGFnKTtcclxuICAgICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xyXG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICBkZXZ0b29sc1BlcmZFbmQoaW5zdGFuY2UsIHR5cGUsIGlzU3VwcG9ydGVkKCkgPyBwZXJmLm5vdygpIDogRGF0ZS5ub3coKSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNTdXBwb3J0ZWQoKSB7XHJcbiAgICBpZiAoc3VwcG9ydGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwcG9ydGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wZXJmb3JtYW5jZSkge1xyXG4gICAgICAgIHN1cHBvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBvcnRlZDtcclxufVxuXG4vKipcclxuICogVGhpcyBpcyBvbmx5IGNhbGxlZCBpbiBlc20tYnVuZGxlciBidWlsZHMuXHJcbiAqIEl0IGlzIGNhbGxlZCB3aGVuIGEgcmVuZGVyZXIgaXMgY3JlYXRlZCwgaW4gYGJhc2VDcmVhdGVSZW5kZXJlcmAgc28gdGhhdFxyXG4gKiBpbXBvcnRpbmcgcnVudGltZS1jb3JlIGlzIHNpZGUtZWZmZWN0cyBmcmVlLlxyXG4gKlxyXG4gKiBpc3RhbmJ1bC1pZ25vcmUtbmV4dFxyXG4gKi9cclxuZnVuY3Rpb24gaW5pdEZlYXR1cmVGbGFncygpIHtcclxuICAgIGNvbnN0IG5lZWRXYXJuID0gW107XHJcbiAgICBpZiAodHlwZW9mIF9fVlVFX09QVElPTlNfQVBJX18gIT09ICdib29sZWFuJykge1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBuZWVkV2Fybi5wdXNoKGBfX1ZVRV9PUFRJT05TX0FQSV9fYCk7XHJcbiAgICAgICAgZ2V0R2xvYmFsVGhpcygpLl9fVlVFX09QVElPTlNfQVBJX18gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18gIT09ICdib29sZWFuJykge1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBuZWVkV2Fybi5wdXNoKGBfX1ZVRV9QUk9EX0RFVlRPT0xTX19gKTtcclxuICAgICAgICBnZXRHbG9iYWxUaGlzKCkuX19WVUVfUFJPRF9ERVZUT09MU19fID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG5lZWRXYXJuLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IG11bHRpID0gbmVlZFdhcm4ubGVuZ3RoID4gMTtcclxuICAgICAgICBjb25zb2xlLndhcm4oYEZlYXR1cmUgZmxhZyR7bXVsdGkgPyBgc2AgOiBgYH0gJHtuZWVkV2Fybi5qb2luKCcsICcpfSAke211bHRpID8gYGFyZWAgOiBgaXNgfSBub3QgZXhwbGljaXRseSBkZWZpbmVkLiBZb3UgYXJlIHJ1bm5pbmcgdGhlIGVzbS1idW5kbGVyIGJ1aWxkIG9mIFZ1ZSwgYCArXHJcbiAgICAgICAgICAgIGB3aGljaCBleHBlY3RzIHRoZXNlIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWdzIHRvIGJlIGdsb2JhbGx5IGluamVjdGVkIGAgK1xyXG4gICAgICAgICAgICBgdmlhIHRoZSBidW5kbGVyIGNvbmZpZyBpbiBvcmRlciB0byBnZXQgYmV0dGVyIHRyZWUtc2hha2luZyBpbiB0aGUgYCArXHJcbiAgICAgICAgICAgIGBwcm9kdWN0aW9uIGJ1bmRsZS5cXG5cXG5gICtcclxuICAgICAgICAgICAgYEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2xpbmsudnVlanMub3JnL2ZlYXR1cmUtZmxhZ3MuYCk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgcXVldWVQb3N0UmVuZGVyRWZmZWN0ID0gcXVldWVFZmZlY3RXaXRoU3VzcGVuc2VcclxuICAgIDtcclxuLyoqXHJcbiAqIFRoZSBjcmVhdGVSZW5kZXJlciBmdW5jdGlvbiBhY2NlcHRzIHR3byBnZW5lcmljIGFyZ3VtZW50czpcclxuICogSG9zdE5vZGUgYW5kIEhvc3RFbGVtZW50LCBjb3JyZXNwb25kaW5nIHRvIE5vZGUgYW5kIEVsZW1lbnQgdHlwZXMgaW4gdGhlXHJcbiAqIGhvc3QgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBmb3IgcnVudGltZS1kb20sIEhvc3ROb2RlIHdvdWxkIGJlIHRoZSBET01cclxuICogYE5vZGVgIGludGVyZmFjZSBhbmQgSG9zdEVsZW1lbnQgd291bGQgYmUgdGhlIERPTSBgRWxlbWVudGAgaW50ZXJmYWNlLlxyXG4gKlxyXG4gKiBDdXN0b20gcmVuZGVyZXJzIGNhbiBwYXNzIGluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyB0eXBlcyBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIGBgYCBqc1xyXG4gKiBjb25zdCB7IHJlbmRlciwgY3JlYXRlQXBwIH0gPSBjcmVhdGVSZW5kZXJlcjxOb2RlLCBFbGVtZW50Pih7XHJcbiAqICAgcGF0Y2hQcm9wLFxyXG4gKiAgIC4uLm5vZGVPcHNcclxuICogfSlcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZW5kZXJlcihvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gYmFzZUNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMpO1xyXG59XHJcbi8vIFNlcGFyYXRlIEFQSSBmb3IgY3JlYXRpbmcgaHlkcmF0aW9uLWVuYWJsZWQgcmVuZGVyZXIuXHJcbi8vIEh5ZHJhdGlvbiBsb2dpYyBpcyBvbmx5IHVzZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2luZyBpdFxyXG4vLyB0cmVlLXNoYWthYmxlLlxyXG5mdW5jdGlvbiBjcmVhdGVIeWRyYXRpb25SZW5kZXJlcihvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gYmFzZUNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMsIGNyZWF0ZUh5ZHJhdGlvbkZ1bmN0aW9ucyk7XHJcbn1cclxuLy8gaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gYmFzZUNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMsIGNyZWF0ZUh5ZHJhdGlvbkZucykge1xyXG4gICAgLy8gY29tcGlsZS10aW1lIGZlYXR1cmUgZmxhZ3MgY2hlY2tcclxuICAgIHtcclxuICAgICAgICBpbml0RmVhdHVyZUZsYWdzKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRHbG9iYWxUaGlzKCk7XHJcbiAgICB0YXJnZXQuX19WVUVfXyA9IHRydWU7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgIHNldERldnRvb2xzSG9vayh0YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywgdGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgaW5zZXJ0OiBob3N0SW5zZXJ0LCByZW1vdmU6IGhvc3RSZW1vdmUsIHBhdGNoUHJvcDogaG9zdFBhdGNoUHJvcCwgY3JlYXRlRWxlbWVudDogaG9zdENyZWF0ZUVsZW1lbnQsIGNyZWF0ZVRleHQ6IGhvc3RDcmVhdGVUZXh0LCBjcmVhdGVDb21tZW50OiBob3N0Q3JlYXRlQ29tbWVudCwgc2V0VGV4dDogaG9zdFNldFRleHQsIHNldEVsZW1lbnRUZXh0OiBob3N0U2V0RWxlbWVudFRleHQsIHBhcmVudE5vZGU6IGhvc3RQYXJlbnROb2RlLCBuZXh0U2libGluZzogaG9zdE5leHRTaWJsaW5nLCBzZXRTY29wZUlkOiBob3N0U2V0U2NvcGVJZCA9IE5PT1AsIGNsb25lTm9kZTogaG9zdENsb25lTm9kZSwgaW5zZXJ0U3RhdGljQ29udGVudDogaG9zdEluc2VydFN0YXRpY0NvbnRlbnQgfSA9IG9wdGlvbnM7XHJcbiAgICAvLyBOb3RlOiBmdW5jdGlvbnMgaW5zaWRlIHRoaXMgY2xvc3VyZSBzaG91bGQgdXNlIGBjb25zdCB4eHggPSAoKSA9PiB7fWBcclxuICAgIC8vIHN0eWxlIGluIG9yZGVyIHRvIHByZXZlbnQgYmVpbmcgaW5saW5lZCBieSBtaW5pZmllcnMuXHJcbiAgICBjb25zdCBwYXRjaCA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yID0gbnVsbCwgcGFyZW50Q29tcG9uZW50ID0gbnVsbCwgcGFyZW50U3VzcGVuc2UgPSBudWxsLCBpc1NWRyA9IGZhbHNlLCBzbG90U2NvcGVJZHMgPSBudWxsLCBvcHRpbWl6ZWQgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNIbXJVcGRhdGluZyA/IGZhbHNlIDogISFuMi5keW5hbWljQ2hpbGRyZW4pID0+IHtcclxuICAgICAgICBpZiAobjEgPT09IG4yKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcGF0Y2hpbmcgJiBub3Qgc2FtZSB0eXBlLCB1bm1vdW50IG9sZCB0cmVlXHJcbiAgICAgICAgaWYgKG4xICYmICFpc1NhbWVWTm9kZVR5cGUobjEsIG4yKSkge1xyXG4gICAgICAgICAgICBhbmNob3IgPSBnZXROZXh0SG9zdE5vZGUobjEpO1xyXG4gICAgICAgICAgICB1bm1vdW50KG4xLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcclxuICAgICAgICAgICAgbjEgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobjIucGF0Y2hGbGFnID09PSAtMiAvKiBQYXRjaEZsYWdzLkJBSUwgKi8pIHtcclxuICAgICAgICAgICAgb3B0aW1pemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG4yLmR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcmVmLCBzaGFwZUZsYWcgfSA9IG4yO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRleHQ6XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzVGV4dChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbW1lbnQ6XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWVudE5vZGUobjEsIG4yLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdGF0aWM6XHJcbiAgICAgICAgICAgICAgICBpZiAobjEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdW50U3RhdGljTm9kZShuMiwgY29udGFpbmVyLCBhbmNob3IsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGljTm9kZShuMSwgbjIsIGNvbnRhaW5lciwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnJhZ21lbnQobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0VsZW1lbnQobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQ29tcG9uZW50KG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFwZUZsYWcgJiA2NCAvKiBTaGFwZUZsYWdzLlRFTEVQT1JUICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZS5wcm9jZXNzKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgaW50ZXJuYWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZS5wcm9jZXNzKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgaW50ZXJuYWxzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ0ludmFsaWQgVk5vZGUgdHlwZTonLCB0eXBlLCBgKCR7dHlwZW9mIHR5cGV9KWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgcmVmXHJcbiAgICAgICAgaWYgKHJlZiAhPSBudWxsICYmIHBhcmVudENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBzZXRSZWYocmVmLCBuMSAmJiBuMS5yZWYsIHBhcmVudFN1c3BlbnNlLCBuMiB8fCBuMSwgIW4yKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvY2Vzc1RleHQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvcikgPT4ge1xyXG4gICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoKG4yLmVsID0gaG9zdENyZWF0ZVRleHQobjIuY2hpbGRyZW4pKSwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSAobjIuZWwgPSBuMS5lbCk7XHJcbiAgICAgICAgICAgIGlmIChuMi5jaGlsZHJlbiAhPT0gbjEuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGhvc3RTZXRUZXh0KGVsLCBuMi5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvY2Vzc0NvbW1lbnROb2RlID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IpID0+IHtcclxuICAgICAgICBpZiAobjEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBob3N0SW5zZXJ0KChuMi5lbCA9IGhvc3RDcmVhdGVDb21tZW50KG4yLmNoaWxkcmVuIHx8ICcnKSksIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3IgZHluYW1pYyBjb21tZW50c1xyXG4gICAgICAgICAgICBuMi5lbCA9IG4xLmVsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBtb3VudFN0YXRpY05vZGUgPSAobjIsIGNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRykgPT4ge1xyXG4gICAgICAgIFtuMi5lbCwgbjIuYW5jaG9yXSA9IGhvc3RJbnNlcnRTdGF0aWNDb250ZW50KG4yLmNoaWxkcmVuLCBjb250YWluZXIsIGFuY2hvciwgaXNTVkcsIG4yLmVsLCBuMi5hbmNob3IpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGV2IC8gSE1SIG9ubHlcclxuICAgICAqL1xyXG4gICAgY29uc3QgcGF0Y2hTdGF0aWNOb2RlID0gKG4xLCBuMiwgY29udGFpbmVyLCBpc1NWRykgPT4ge1xyXG4gICAgICAgIC8vIHN0YXRpYyBub2RlcyBhcmUgb25seSBwYXRjaGVkIGR1cmluZyBkZXYgZm9yIEhNUlxyXG4gICAgICAgIGlmIChuMi5jaGlsZHJlbiAhPT0gbjEuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gaG9zdE5leHRTaWJsaW5nKG4xLmFuY2hvcik7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBleGlzdGluZ1xyXG4gICAgICAgICAgICByZW1vdmVTdGF0aWNOb2RlKG4xKTtcclxuICAgICAgICAgICAgW24yLmVsLCBuMi5hbmNob3JdID0gaG9zdEluc2VydFN0YXRpY0NvbnRlbnQobjIuY2hpbGRyZW4sIGNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuMi5lbCA9IG4xLmVsO1xyXG4gICAgICAgICAgICBuMi5hbmNob3IgPSBuMS5hbmNob3I7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vdmVTdGF0aWNOb2RlID0gKHsgZWwsIGFuY2hvciB9LCBjb250YWluZXIsIG5leHRTaWJsaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IG5leHQ7XHJcbiAgICAgICAgd2hpbGUgKGVsICYmIGVsICE9PSBhbmNob3IpIHtcclxuICAgICAgICAgICAgbmV4dCA9IGhvc3ROZXh0U2libGluZyhlbCk7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgbmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICBlbCA9IG5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhvc3RJbnNlcnQoYW5jaG9yLCBjb250YWluZXIsIG5leHRTaWJsaW5nKTtcclxuICAgIH07XHJcbiAgICBjb25zdCByZW1vdmVTdGF0aWNOb2RlID0gKHsgZWwsIGFuY2hvciB9KSA9PiB7XHJcbiAgICAgICAgbGV0IG5leHQ7XHJcbiAgICAgICAgd2hpbGUgKGVsICYmIGVsICE9PSBhbmNob3IpIHtcclxuICAgICAgICAgICAgbmV4dCA9IGhvc3ROZXh0U2libGluZyhlbCk7XHJcbiAgICAgICAgICAgIGhvc3RSZW1vdmUoZWwpO1xyXG4gICAgICAgICAgICBlbCA9IG5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhvc3RSZW1vdmUoYW5jaG9yKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBwcm9jZXNzRWxlbWVudCA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBpc1NWRyA9IGlzU1ZHIHx8IG4yLnR5cGUgPT09ICdzdmcnO1xyXG4gICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1vdW50RWxlbWVudChuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwYXRjaEVsZW1lbnQobjEsIG4yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBtb3VudEVsZW1lbnQgPSAodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBsZXQgZWw7XHJcbiAgICAgICAgbGV0IHZub2RlSG9vaztcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzaGFwZUZsYWcsIHRyYW5zaXRpb24sIHBhdGNoRmxhZywgZGlycyB9ID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgdm5vZGUuZWwgJiZcclxuICAgICAgICAgICAgaG9zdENsb25lTm9kZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyA9PT0gLTEgLyogUGF0Y2hGbGFncy5IT0lTVEVEICovKSB7XHJcbiAgICAgICAgICAgIC8vIElmIGEgdm5vZGUgaGFzIG5vbi1udWxsIGVsLCBpdCBtZWFucyBpdCdzIGJlaW5nIHJldXNlZC5cclxuICAgICAgICAgICAgLy8gT25seSBzdGF0aWMgdm5vZGVzIGNhbiBiZSByZXVzZWQsIHNvIGl0cyBtb3VudGVkIERPTSBub2RlcyBzaG91bGQgYmVcclxuICAgICAgICAgICAgLy8gZXhhY3RseSB0aGUgc2FtZSwgYW5kIHdlIGNhbiBzaW1wbHkgZG8gYSBjbG9uZSBoZXJlLlxyXG4gICAgICAgICAgICAvLyBvbmx5IGRvIHRoaXMgaW4gcHJvZHVjdGlvbiBzaW5jZSBjbG9uZWQgdHJlZXMgY2Fubm90IGJlIEhNUiB1cGRhdGVkLlxyXG4gICAgICAgICAgICBlbCA9IHZub2RlLmVsID0gaG9zdENsb25lTm9kZSh2bm9kZS5lbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbCA9IHZub2RlLmVsID0gaG9zdENyZWF0ZUVsZW1lbnQodm5vZGUudHlwZSwgaXNTVkcsIHByb3BzICYmIHByb3BzLmlzLCBwcm9wcyk7XHJcbiAgICAgICAgICAgIC8vIG1vdW50IGNoaWxkcmVuIGZpcnN0LCBzaW5jZSBzb21lIHByb3BzIG1heSByZWx5IG9uIGNoaWxkIGNvbnRlbnRcclxuICAgICAgICAgICAgLy8gYmVpbmcgYWxyZWFkeSByZW5kZXJlZCwgZS5nLiBgPHNlbGVjdCB2YWx1ZT5gXHJcbiAgICAgICAgICAgIGlmIChzaGFwZUZsYWcgJiA4IC8qIFNoYXBlRmxhZ3MuVEVYVF9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGVsLCB2bm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAgICAgbW91bnRDaGlsZHJlbih2bm9kZS5jaGlsZHJlbiwgZWwsIG51bGwsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHICYmIHR5cGUgIT09ICdmb3JlaWduT2JqZWN0Jywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsICdjcmVhdGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJvcHNcclxuICAgICAgICAgICAgaWYgKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd2YWx1ZScgJiYgIWlzUmVzZXJ2ZWRQcm9wKGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwga2V5LCBudWxsLCBwcm9wc1trZXldLCBpc1NWRywgdm5vZGUuY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBTcGVjaWFsIGNhc2UgZm9yIHNldHRpbmcgdmFsdWUgb24gRE9NIGVsZW1lbnRzOlxyXG4gICAgICAgICAgICAgICAgICogLSBpdCBjYW4gYmUgb3JkZXItc2Vuc2l0aXZlIChlLmcuIHNob3VsZCBiZSBzZXQgKmFmdGVyKiBtaW4vbWF4LCAjMjMyNSwgIzQwMjQpXHJcbiAgICAgICAgICAgICAgICAgKiAtIGl0IG5lZWRzIHRvIGJlIGZvcmNlZCAoIzE0NzEpXHJcbiAgICAgICAgICAgICAgICAgKiAjMjM1MyBwcm9wb3NlcyBhZGRpbmcgYW5vdGhlciByZW5kZXJlciBvcHRpb24gdG8gY29uZmlndXJlIHRoaXMsIGJ1dFxyXG4gICAgICAgICAgICAgICAgICogdGhlIHByb3BlcnRpZXMgYWZmZWN0cyBhcmUgc28gZmluaXRlIGl0IGlzIHdvcnRoIHNwZWNpYWwgY2FzaW5nIGl0XHJcbiAgICAgICAgICAgICAgICAgKiBoZXJlIHRvIHJlZHVjZSB0aGUgY29tcGxleGl0eS4gKFNwZWNpYWwgY2FzaW5nIGl0IGFsc28gc2hvdWxkIG5vdFxyXG4gICAgICAgICAgICAgICAgICogYWZmZWN0IG5vbi1ET00gcmVuZGVyZXJzKVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsICd2YWx1ZScsIG51bGwsIHByb3BzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgodm5vZGVIb29rID0gcHJvcHMub25Wbm9kZUJlZm9yZU1vdW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNjb3BlSWRcclxuICAgICAgICAgICAgc2V0U2NvcGVJZChlbCwgdm5vZGUsIHZub2RlLnNjb3BlSWQsIHNsb3RTY29wZUlkcywgcGFyZW50Q29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnX192bm9kZScsIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2bm9kZSxcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdfX3Z1ZVBhcmVudENvbXBvbmVudCcsIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJlbnRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpcnMpIHtcclxuICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAnYmVmb3JlTW91bnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIzE1ODMgRm9yIGluc2lkZSBzdXNwZW5zZSArIHN1c3BlbnNlIG5vdCByZXNvbHZlZCBjYXNlLCBlbnRlciBob29rIHNob3VsZCBjYWxsIHdoZW4gc3VzcGVuc2UgcmVzb2x2ZWRcclxuICAgICAgICAvLyAjMTY4OSBGb3IgaW5zaWRlIHN1c3BlbnNlICsgc3VzcGVuc2UgcmVzb2x2ZWQgY2FzZSwganVzdCBjYWxsIGl0XHJcbiAgICAgICAgY29uc3QgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgPSAoIXBhcmVudFN1c3BlbnNlIHx8IChwYXJlbnRTdXNwZW5zZSAmJiAhcGFyZW50U3VzcGVuc2UucGVuZGluZ0JyYW5jaCkpICYmXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24gJiZcclxuICAgICAgICAgICAgIXRyYW5zaXRpb24ucGVyc2lzdGVkO1xyXG4gICAgICAgIGlmIChuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcykge1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgIGlmICgodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpIHx8XHJcbiAgICAgICAgICAgIG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzIHx8XHJcbiAgICAgICAgICAgIGRpcnMpIHtcclxuICAgICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHZub2RlSG9vayAmJiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcclxuICAgICAgICAgICAgICAgIG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzICYmIHRyYW5zaXRpb24uZW50ZXIoZWwpO1xyXG4gICAgICAgICAgICAgICAgZGlycyAmJiBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsICdtb3VudGVkJyk7XHJcbiAgICAgICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc2V0U2NvcGVJZCA9IChlbCwgdm5vZGUsIHNjb3BlSWQsIHNsb3RTY29wZUlkcywgcGFyZW50Q29tcG9uZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHNjb3BlSWQpIHtcclxuICAgICAgICAgICAgaG9zdFNldFNjb3BlSWQoZWwsIHNjb3BlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xvdFNjb3BlSWRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xvdFNjb3BlSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBob3N0U2V0U2NvcGVJZChlbCwgc2xvdFNjb3BlSWRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIGxldCBzdWJUcmVlID0gcGFyZW50Q29tcG9uZW50LnN1YlRyZWU7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHN1YlRyZWUucGF0Y2hGbGFnID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgc3ViVHJlZS5wYXRjaEZsYWcgJiAyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIHN1YlRyZWUgPVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclNpbmdsZVJvb3Qoc3ViVHJlZS5jaGlsZHJlbikgfHwgc3ViVHJlZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodm5vZGUgPT09IHN1YlRyZWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gcGFyZW50Q29tcG9uZW50LnZub2RlO1xyXG4gICAgICAgICAgICAgICAgc2V0U2NvcGVJZChlbCwgcGFyZW50Vk5vZGUsIHBhcmVudFZOb2RlLnNjb3BlSWQsIHBhcmVudFZOb2RlLnNsb3RTY29wZUlkcywgcGFyZW50Q29tcG9uZW50LnBhcmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgbW91bnRDaGlsZHJlbiA9IChjaGlsZHJlbiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgc3RhcnQgPSAwKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSAoY2hpbGRyZW5baV0gPSBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgID8gY2xvbmVJZk1vdW50ZWQoY2hpbGRyZW5baV0pXHJcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZVZOb2RlKGNoaWxkcmVuW2ldKSk7XHJcbiAgICAgICAgICAgIHBhdGNoKG51bGwsIGNoaWxkLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGF0Y2hFbGVtZW50ID0gKG4xLCBuMiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSAobjIuZWwgPSBuMS5lbCk7XHJcbiAgICAgICAgbGV0IHsgcGF0Y2hGbGFnLCBkeW5hbWljQ2hpbGRyZW4sIGRpcnMgfSA9IG4yO1xyXG4gICAgICAgIC8vICMxNDI2IHRha2UgdGhlIG9sZCB2bm9kZSdzIHBhdGNoIGZsYWcgaW50byBhY2NvdW50IHNpbmNlIHVzZXIgbWF5IGNsb25lIGFcclxuICAgICAgICAvLyBjb21waWxlci1nZW5lcmF0ZWQgdm5vZGUsIHdoaWNoIGRlLW9wdHMgdG8gRlVMTF9QUk9QU1xyXG4gICAgICAgIHBhdGNoRmxhZyB8PSBuMS5wYXRjaEZsYWcgJiAxNiAvKiBQYXRjaEZsYWdzLkZVTExfUFJPUFMgKi87XHJcbiAgICAgICAgY29uc3Qgb2xkUHJvcHMgPSBuMS5wcm9wcyB8fCBFTVBUWV9PQko7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSBuMi5wcm9wcyB8fCBFTVBUWV9PQko7XHJcbiAgICAgICAgbGV0IHZub2RlSG9vaztcclxuICAgICAgICAvLyBkaXNhYmxlIHJlY3Vyc2UgaW4gYmVmb3JlVXBkYXRlIGhvb2tzXHJcbiAgICAgICAgcGFyZW50Q29tcG9uZW50ICYmIHRvZ2dsZVJlY3Vyc2UocGFyZW50Q29tcG9uZW50LCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKCh2bm9kZUhvb2sgPSBuZXdQcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSkge1xyXG4gICAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnRDb21wb25lbnQsIG4yLCBuMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJzKSB7XHJcbiAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sobjIsIG4xLCBwYXJlbnRDb21wb25lbnQsICdiZWZvcmVVcGRhdGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyZW50Q29tcG9uZW50ICYmIHRvZ2dsZVJlY3Vyc2UocGFyZW50Q29tcG9uZW50LCB0cnVlKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGlzSG1yVXBkYXRpbmcpIHtcclxuICAgICAgICAgICAgLy8gSE1SIHVwZGF0ZWQsIGZvcmNlIGZ1bGwgZGlmZlxyXG4gICAgICAgICAgICBwYXRjaEZsYWcgPSAwO1xyXG4gICAgICAgICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZHluYW1pY0NoaWxkcmVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJlQ2hpbGRyZW5TVkcgPSBpc1NWRyAmJiBuMi50eXBlICE9PSAnZm9yZWlnbk9iamVjdCc7XHJcbiAgICAgICAgaWYgKGR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICBwYXRjaEJsb2NrQ2hpbGRyZW4objEuZHluYW1pY0NoaWxkcmVuLCBkeW5hbWljQ2hpbGRyZW4sIGVsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBhcmVDaGlsZHJlblNWRywgc2xvdFNjb3BlSWRzKTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBwYXJlbnRDb21wb25lbnQgJiYgcGFyZW50Q29tcG9uZW50LnR5cGUuX19obXJJZCkge1xyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFvcHRpbWl6ZWQpIHtcclxuICAgICAgICAgICAgLy8gZnVsbCBkaWZmXHJcbiAgICAgICAgICAgIHBhdGNoQ2hpbGRyZW4objEsIG4yLCBlbCwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgYXJlQ2hpbGRyZW5TVkcsIHNsb3RTY29wZUlkcywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0Y2hGbGFnID4gMCkge1xyXG4gICAgICAgICAgICAvLyB0aGUgcHJlc2VuY2Ugb2YgYSBwYXRjaEZsYWcgbWVhbnMgdGhpcyBlbGVtZW50J3MgcmVuZGVyIGNvZGUgd2FzXHJcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgYW5kIGNhbiB0YWtlIHRoZSBmYXN0IHBhdGguXHJcbiAgICAgICAgICAgIC8vIGluIHRoaXMgcGF0aCBvbGQgbm9kZSBhbmQgbmV3IG5vZGUgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgc2FtZSBzaGFwZVxyXG4gICAgICAgICAgICAvLyAoaS5lLiBhdCB0aGUgZXhhY3Qgc2FtZSBwb3NpdGlvbiBpbiB0aGUgc291cmNlIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAocGF0Y2hGbGFnICYgMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50IHByb3BzIGNvbnRhaW4gZHluYW1pYyBrZXlzLCBmdWxsIGRpZmYgbmVlZGVkXHJcbiAgICAgICAgICAgICAgICBwYXRjaFByb3BzKGVsLCBuMiwgb2xkUHJvcHMsIG5ld1Byb3BzLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGFzc1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBmbGFnIGlzIG1hdGNoZWQgd2hlbiB0aGUgZWxlbWVudCBoYXMgZHluYW1pYyBjbGFzcyBiaW5kaW5ncy5cclxuICAgICAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgJiAyIC8qIFBhdGNoRmxhZ3MuQ0xBU1MgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkUHJvcHMuY2xhc3MgIT09IG5ld1Byb3BzLmNsYXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsICdjbGFzcycsIG51bGwsIG5ld1Byb3BzLmNsYXNzLCBpc1NWRyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gc3R5bGVcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZmxhZyBpcyBtYXRjaGVkIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGR5bmFtaWMgc3R5bGUgYmluZGluZ3NcclxuICAgICAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgJiA0IC8qIFBhdGNoRmxhZ3MuU1RZTEUgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCAnc3R5bGUnLCBvbGRQcm9wcy5zdHlsZSwgbmV3UHJvcHMuc3R5bGUsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHByb3BzXHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZsYWcgaXMgbWF0Y2hlZCB3aGVuIHRoZSBlbGVtZW50IGhhcyBkeW5hbWljIHByb3AvYXR0ciBiaW5kaW5nc1xyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhhbiBjbGFzcyBhbmQgc3R5bGUuIFRoZSBrZXlzIG9mIGR5bmFtaWMgcHJvcC9hdHRycyBhcmUgc2F2ZWQgZm9yXHJcbiAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICAgICAgLy8gTm90ZSBkeW5hbWljIGtleXMgbGlrZSA6W2Zvb109XCJiYXJcIiB3aWxsIGNhdXNlIHRoaXMgb3B0aW1pemF0aW9uIHRvXHJcbiAgICAgICAgICAgICAgICAvLyBiYWlsIG91dCBhbmQgZ28gdGhyb3VnaCBhIGZ1bGwgZGlmZiBiZWNhdXNlIHdlIG5lZWQgdG8gdW5zZXQgdGhlIG9sZCBrZXlcclxuICAgICAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgJiA4IC8qIFBhdGNoRmxhZ3MuUFJPUFMgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZmxhZyBpcyBwcmVzZW50IHRoZW4gZHluYW1pY1Byb3BzIG11c3QgYmUgbm9uLW51bGxcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1RvVXBkYXRlID0gbjIuZHluYW1pY1Byb3BzO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wc1RvVXBkYXRlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gb2xkUHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5ld1Byb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICMxNDcxIGZvcmNlIHBhdGNoIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSBwcmV2IHx8IGtleSA9PT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwga2V5LCBwcmV2LCBuZXh0LCBpc1NWRywgbjEuY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgICAgICAvLyBUaGlzIGZsYWcgaXMgbWF0Y2hlZCB3aGVuIHRoZSBlbGVtZW50IGhhcyBvbmx5IGR5bmFtaWMgdGV4dCBjaGlsZHJlbi5cclxuICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDEgLyogUGF0Y2hGbGFncy5URVhUICovKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobjEuY2hpbGRyZW4gIT09IG4yLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGVsLCBuMi5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIW9wdGltaXplZCAmJiBkeW5hbWljQ2hpbGRyZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyB1bm9wdGltaXplZCwgZnVsbCBkaWZmXHJcbiAgICAgICAgICAgIHBhdGNoUHJvcHMoZWwsIG4yLCBvbGRQcm9wcywgbmV3UHJvcHMsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh2bm9kZUhvb2sgPSBuZXdQcm9wcy5vblZub2RlVXBkYXRlZCkgfHwgZGlycykge1xyXG4gICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVIb29rICYmIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgbjIsIG4xKTtcclxuICAgICAgICAgICAgICAgIGRpcnMgJiYgaW52b2tlRGlyZWN0aXZlSG9vayhuMiwgbjEsIHBhcmVudENvbXBvbmVudCwgJ3VwZGF0ZWQnKTtcclxuICAgICAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBUaGUgZmFzdCBwYXRoIGZvciBibG9ja3MuXHJcbiAgICBjb25zdCBwYXRjaEJsb2NrQ2hpbGRyZW4gPSAob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuLCBmYWxsYmFja0NvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcykgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkVk5vZGUgPSBvbGRDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Vk5vZGUgPSBuZXdDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjb250YWluZXIgKHBhcmVudCBlbGVtZW50KSBmb3IgdGhlIHBhdGNoLlxyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBcclxuICAgICAgICAgICAgLy8gb2xkVk5vZGUgbWF5IGJlIGFuIGVycm9yZWQgYXN5bmMgc2V0dXAoKSBjb21wb25lbnQgaW5zaWRlIFN1c3BlbnNlXHJcbiAgICAgICAgICAgIC8vIHdoaWNoIHdpbGwgbm90IGhhdmUgYSBtb3VudGVkIGVsZW1lbnRcclxuICAgICAgICAgICAgb2xkVk5vZGUuZWwgJiZcclxuICAgICAgICAgICAgICAgIC8vIC0gSW4gdGhlIGNhc2Ugb2YgYSBGcmFnbWVudCwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBhY3R1YWwgcGFyZW50XHJcbiAgICAgICAgICAgICAgICAvLyBvZiB0aGUgRnJhZ21lbnQgaXRzZWxmIHNvIGl0IGNhbiBtb3ZlIGl0cyBjaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIChvbGRWTm9kZS50eXBlID09PSBGcmFnbWVudCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIC0gSW4gdGhlIGNhc2Ugb2YgZGlmZmVyZW50IG5vZGVzLCB0aGVyZSBpcyBnb2luZyB0byBiZSBhIHJlcGxhY2VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggYWxzbyByZXF1aXJlcyB0aGUgY29ycmVjdCBwYXJlbnQgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgIWlzU2FtZVZOb2RlVHlwZShvbGRWTm9kZSwgbmV3Vk5vZGUpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLSBJbiB0aGUgY2FzZSBvZiBhIGNvbXBvbmVudCwgaXQgY291bGQgY29udGFpbiBhbnl0aGluZy5cclxuICAgICAgICAgICAgICAgICAgICBvbGRWTm9kZS5zaGFwZUZsYWcgJiAoNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLyB8IDY0IC8qIFNoYXBlRmxhZ3MuVEVMRVBPUlQgKi8pKVxyXG4gICAgICAgICAgICAgICAgPyBob3N0UGFyZW50Tm9kZShvbGRWTm9kZS5lbClcclxuICAgICAgICAgICAgICAgIDogLy8gSW4gb3RoZXIgY2FzZXMsIHRoZSBwYXJlbnQgY29udGFpbmVyIGlzIG5vdCBhY3R1YWxseSB1c2VkIHNvIHdlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBwYXNzIHRoZSBibG9jayBlbGVtZW50IGhlcmUgdG8gYXZvaWQgYSBET00gcGFyZW50Tm9kZSBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBwYXRjaChvbGRWTm9kZSwgbmV3Vk5vZGUsIGNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHBhdGNoUHJvcHMgPSAoZWwsIHZub2RlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHKSA9PiB7XHJcbiAgICAgICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIGlzIG5vdCB2YWxpZCBwcm9wXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZXNlcnZlZFByb3Aoa2V5KSlcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXdQcm9wc1trZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IG9sZFByb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICAvLyBkZWZlciBwYXRjaGluZyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHByZXYgJiYga2V5ICE9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwga2V5LCBwcmV2LCBuZXh0LCBpc1NWRywgdm5vZGUuY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9sZFByb3BzICE9PSBFTVBUWV9PQkopIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1Jlc2VydmVkUHJvcChrZXkpICYmICEoa2V5IGluIG5ld1Byb3BzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBrZXksIG9sZFByb3BzW2tleV0sIG51bGwsIGlzU1ZHLCB2bm9kZS5jaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCd2YWx1ZScgaW4gbmV3UHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsICd2YWx1ZScsIG9sZFByb3BzLnZhbHVlLCBuZXdQcm9wcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvY2Vzc0ZyYWdtZW50ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50U3RhcnRBbmNob3IgPSAobjIuZWwgPSBuMSA/IG4xLmVsIDogaG9zdENyZWF0ZVRleHQoJycpKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudEVuZEFuY2hvciA9IChuMi5hbmNob3IgPSBuMSA/IG4xLmFuY2hvciA6IGhvc3RDcmVhdGVUZXh0KCcnKSk7XHJcbiAgICAgICAgbGV0IHsgcGF0Y2hGbGFnLCBkeW5hbWljQ2hpbGRyZW4sIHNsb3RTY29wZUlkczogZnJhZ21lbnRTbG90U2NvcGVJZHMgfSA9IG4yO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgLy8gIzU1MjMgZGV2IHJvb3QgZnJhZ21lbnQgbWF5IGluaGVyaXQgZGlyZWN0aXZlc1xyXG4gICAgICAgICAgICAoaXNIbXJVcGRhdGluZyB8fCBwYXRjaEZsYWcgJiAyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi8pKSB7XHJcbiAgICAgICAgICAgIC8vIEhNUiB1cGRhdGVkIC8gRGV2IHJvb3QgZnJhZ21lbnQgKHcvIGNvbW1lbnRzKSwgZm9yY2UgZnVsbCBkaWZmXHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyA9IDA7XHJcbiAgICAgICAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIGEgc2xvdCBmcmFnbWVudCB3aXRoIDpzbG90dGVkIHNjb3BlIGlkc1xyXG4gICAgICAgIGlmIChmcmFnbWVudFNsb3RTY29wZUlkcykge1xyXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHNcclxuICAgICAgICAgICAgICAgID8gc2xvdFNjb3BlSWRzLmNvbmNhdChmcmFnbWVudFNsb3RTY29wZUlkcylcclxuICAgICAgICAgICAgICAgIDogZnJhZ21lbnRTbG90U2NvcGVJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoZnJhZ21lbnRTdGFydEFuY2hvciwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICBob3N0SW5zZXJ0KGZyYWdtZW50RW5kQW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIC8vIGEgZnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBhcnJheSBjaGlsZHJlblxyXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGV5IGFyZSBlaXRoZXIgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciwgb3IgaW1wbGljaXRseSBjcmVhdGVkXHJcbiAgICAgICAgICAgIC8vIGZyb20gYXJyYXlzLlxyXG4gICAgICAgICAgICBtb3VudENoaWxkcmVuKG4yLmNoaWxkcmVuLCBjb250YWluZXIsIGZyYWdtZW50RW5kQW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHBhdGNoRmxhZyAmIDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovICYmXHJcbiAgICAgICAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4gJiZcclxuICAgICAgICAgICAgICAgIC8vICMyNzE1IHRoZSBwcmV2aW91cyBmcmFnbWVudCBjb3VsZCd2ZSBiZWVuIGEgQkFJTGVkIG9uZSBhcyBhIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgLy8gb2YgcmVuZGVyU2xvdCgpIHdpdGggbm8gdmFsaWQgY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIG4xLmR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgLy8gYSBzdGFibGUgZnJhZ21lbnQgKHRlbXBsYXRlIHJvb3Qgb3IgPHRlbXBsYXRlIHYtZm9yPikgZG9lc24ndCBuZWVkIHRvXHJcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBjaGlsZHJlbiBvcmRlciwgYnV0IGl0IG1heSBjb250YWluIGR5bmFtaWNDaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihuMS5keW5hbWljQ2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgcGFyZW50Q29tcG9uZW50ICYmIHBhcmVudENvbXBvbmVudC50eXBlLl9faG1ySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgIC8vICMyMDgwIGlmIHRoZSBzdGFibGUgZnJhZ21lbnQgaGFzIGEga2V5LCBpdCdzIGEgPHRlbXBsYXRlIHYtZm9yPiB0aGF0IG1heVxyXG4gICAgICAgICAgICAgICAgLy8gIGdldCBtb3ZlZCBhcm91bmQuIE1ha2Ugc3VyZSBhbGwgcm9vdCBsZXZlbCB2bm9kZXMgaW5oZXJpdCBlbC5cclxuICAgICAgICAgICAgICAgIC8vICMyMTM0IG9yIGlmIGl0J3MgYSBjb21wb25lbnQgcm9vdCwgaXQgbWF5IGFsc28gZ2V0IG1vdmVkIGFyb3VuZFxyXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGNvbXBvbmVudCBpcyBiZWluZyBtb3ZlZC5cclxuICAgICAgICAgICAgICAgIG4yLmtleSAhPSBudWxsIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHBhcmVudENvbXBvbmVudCAmJiBuMiA9PT0gcGFyZW50Q29tcG9uZW50LnN1YlRyZWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsIHRydWUgLyogc2hhbGxvdyAqLyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBrZXllZCAvIHVua2V5ZWQsIG9yIG1hbnVhbCBmcmFnbWVudHMuXHJcbiAgICAgICAgICAgICAgICAvLyBmb3Iga2V5ZWQgJiB1bmtleWVkLCBzaW5jZSB0aGV5IGFyZSBjb21waWxlciBnZW5lcmF0ZWQgZnJvbSB2LWZvcixcclxuICAgICAgICAgICAgICAgIC8vIGVhY2ggY2hpbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGJsb2NrIHNvIHRoZSBmcmFnbWVudCB3aWxsIG5ldmVyXHJcbiAgICAgICAgICAgICAgICAvLyBoYXZlIGR5bmFtaWNDaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIHBhdGNoQ2hpbGRyZW4objEsIG4yLCBjb250YWluZXIsIGZyYWdtZW50RW5kQW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHByb2Nlc3NDb21wb25lbnQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgbjIuc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzO1xyXG4gICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChuMi5zaGFwZUZsYWcgJiA1MTIgLyogU2hhcGVGbGFncy5DT01QT05FTlRfS0VQVF9BTElWRSAqLykge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LmN0eC5hY3RpdmF0ZShuMiwgY29udGFpbmVyLCBhbmNob3IsIGlzU1ZHLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbW91bnRDb21wb25lbnQobjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50KG4xLCBuMiwgb3B0aW1pemVkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgbW91bnRDb21wb25lbnQgPSAoaW5pdGlhbFZOb2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKGluaXRpYWxWTm9kZS5jb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZShpbml0aWFsVk5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UpKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGluc3RhbmNlLnR5cGUuX19obXJJZCkge1xyXG4gICAgICAgICAgICByZWdpc3RlckhNUihpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgcHVzaFdhcm5pbmdDb250ZXh0KGluaXRpYWxWTm9kZSk7XHJcbiAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYG1vdW50YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluamVjdCByZW5kZXJlciBpbnRlcm5hbHMgZm9yIGtlZXBBbGl2ZVxyXG4gICAgICAgIGlmIChpc0tlZXBBbGl2ZShpbml0aWFsVk5vZGUpKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmN0eC5yZW5kZXJlciA9IGludGVybmFscztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVzb2x2ZSBwcm9wcyBhbmQgc2xvdHMgZm9yIHNldHVwIGNvbnRleHRcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYGluaXRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXR1cENvbXBvbmVudChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBpbml0YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0dXAoKSBpcyBhc3luYy4gVGhpcyBjb21wb25lbnQgcmVsaWVzIG9uIGFzeW5jIGxvZ2ljIHRvIGJlIHJlc29sdmVkXHJcbiAgICAgICAgLy8gYmVmb3JlIHByb2NlZWRpbmdcclxuICAgICAgICBpZiAoaW5zdGFuY2UuYXN5bmNEZXApIHtcclxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UgJiYgcGFyZW50U3VzcGVuc2UucmVnaXN0ZXJEZXAoaW5zdGFuY2UsIHNldHVwUmVuZGVyRWZmZWN0KTtcclxuICAgICAgICAgICAgLy8gR2l2ZSBpdCBhIHBsYWNlaG9sZGVyIGlmIHRoaXMgaXMgbm90IGh5ZHJhdGlvblxyXG4gICAgICAgICAgICAvLyBUT0RPIGhhbmRsZSBzZWxmLWRlZmluZWQgZmFsbGJhY2tcclxuICAgICAgICAgICAgaWYgKCFpbml0aWFsVk5vZGUuZWwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gKGluc3RhbmNlLnN1YlRyZWUgPSBjcmVhdGVWTm9kZShDb21tZW50KSk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWVudE5vZGUobnVsbCwgcGxhY2Vob2xkZXIsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldHVwUmVuZGVyRWZmZWN0KGluc3RhbmNlLCBpbml0aWFsVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIG9wdGltaXplZCk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xyXG4gICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgbW91bnRgKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdXBkYXRlQ29tcG9uZW50ID0gKG4xLCBuMiwgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAobjIuY29tcG9uZW50ID0gbjEuY29tcG9uZW50KTtcclxuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlQ29tcG9uZW50KG4xLCBuMiwgb3B0aW1pemVkKSkge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UuYXN5bmNEZXAgJiZcclxuICAgICAgICAgICAgICAgICFpbnN0YW5jZS5hc3luY1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhc3luYyAmIHN0aWxsIHBlbmRpbmcgLSBqdXN0IHVwZGF0ZSBwcm9wcyBhbmQgc2xvdHNcclxuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBjb21wb25lbnQncyByZWFjdGl2ZSBlZmZlY3QgZm9yIHJlbmRlciBpc24ndCBzZXQtdXAgeWV0XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHVzaFdhcm5pbmdDb250ZXh0KG4yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUNvbXBvbmVudFByZVJlbmRlcihpbnN0YW5jZSwgbjIsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wV2FybmluZ0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vcm1hbCB1cGRhdGVcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLm5leHQgPSBuMjtcclxuICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBhbHNvIHF1ZXVlZCwgcmVtb3ZlIGl0IHRvIGF2b2lkXHJcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUgdXBkYXRpbmcgdGhlIHNhbWUgY2hpbGQgY29tcG9uZW50IGluIHRoZSBzYW1lIGZsdXNoLlxyXG4gICAgICAgICAgICAgICAgaW52YWxpZGF0ZUpvYihpbnN0YW5jZS51cGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UudXBkYXRlIGlzIHRoZSByZWFjdGl2ZSBlZmZlY3QuXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS51cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbm8gdXBkYXRlIG5lZWRlZC4ganVzdCBjb3B5IG92ZXIgcHJvcGVydGllc1xyXG4gICAgICAgICAgICBuMi5lbCA9IG4xLmVsO1xyXG4gICAgICAgICAgICBpbnN0YW5jZS52bm9kZSA9IG4yO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBzZXR1cFJlbmRlckVmZmVjdCA9IChpbnN0YW5jZSwgaW5pdGlhbFZOb2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRVcGRhdGVGbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5pc01vdW50ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2bm9kZUhvb2s7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVsLCBwcm9wcyB9ID0gaW5pdGlhbFZOb2RlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBibSwgbSwgcGFyZW50IH0gPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXN5bmNXcmFwcGVyVk5vZGUgPSBpc0FzeW5jV3JhcHBlcihpbml0aWFsVk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlTW91bnQgaG9va1xyXG4gICAgICAgICAgICAgICAgaWYgKGJtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlQXJyYXlGbnMoYm0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gb25Wbm9kZUJlZm9yZU1vdW50XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXN5bmNXcmFwcGVyVk5vZGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZUJlZm9yZU1vdW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgaW5pdGlhbFZOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRvZ2dsZVJlY3Vyc2UoaW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsICYmIGh5ZHJhdGVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdm5vZGUgaGFzIGFkb3B0ZWQgaG9zdCBub2RlIC0gcGVyZm9ybSBoeWRyYXRpb24gaW5zdGVhZCBvZiBtb3VudC5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlU3ViVHJlZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc3ViVHJlZSA9IHJlbmRlckNvbXBvbmVudFJvb3QoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgaHlkcmF0ZWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVOb2RlKGVsLCBpbnN0YW5jZS5zdWJUcmVlLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgaHlkcmF0ZWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3luY1dyYXBwZXJWTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsVk5vZGUudHlwZS5fX2FzeW5jTG9hZGVyKCkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogd2UgYXJlIG1vdmluZyB0aGUgcmVuZGVyIGNhbGwgaW50byBhbiBhc3luYyBjYWxsYmFjayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggbWVhbnMgaXQgd29uJ3QgdHJhY2sgZGVwZW5kZW5jaWVzIC0gYnV0IGl0J3Mgb2sgYmVjYXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHNlcnZlci1yZW5kZXJlZCBhc3luYyB3cmFwcGVyIGlzIGFscmVhZHkgaW4gcmVzb2x2ZWQgc3RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IHdpbGwgbmV2ZXIgbmVlZCB0byBjaGFuZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgpID0+ICFpbnN0YW5jZS5pc1VubW91bnRlZCAmJiBoeWRyYXRlU3ViVHJlZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTdWJUcmVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IChpbnN0YW5jZS5zdWJUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoKG51bGwsIHN1YlRyZWUsIGNvbnRhaW5lciwgYW5jaG9yLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVk5vZGUuZWwgPSBzdWJUcmVlLmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gbW91bnRlZCBob29rXHJcbiAgICAgICAgICAgICAgICBpZiAobSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChtLCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBvblZub2RlTW91bnRlZFxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0FzeW5jV3JhcHBlclZOb2RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVNb3VudGVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZEluaXRpYWxWTm9kZSA9IGluaXRpYWxWTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4gaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50LCBzY29wZWRJbml0aWFsVk5vZGUpLCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBhY3RpdmF0ZWQgaG9vayBmb3Iga2VlcC1hbGl2ZSByb290cy5cclxuICAgICAgICAgICAgICAgIC8vICMxNzQyIGFjdGl2YXRlZCBob29rIG11c3QgYmUgYWNjZXNzZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyXHJcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgaG9vayBtYXkgYmUgaW5qZWN0ZWQgYnkgYSBjaGlsZCBrZWVwLWFsaXZlXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbFZOb2RlLnNoYXBlRmxhZyAmIDI1NiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9TSE9VTERfS0VFUF9BTElWRSAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChwYXJlbnQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc3luY1dyYXBwZXIocGFyZW50LnZub2RlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQudm5vZGUuc2hhcGVGbGFnICYgMjU2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFICovKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmEgJiYgcXVldWVQb3N0UmVuZGVyRWZmZWN0KGluc3RhbmNlLmEsIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmlzTW91bnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gIzI0NTg6IGRlZmVyZW5jZSBtb3VudC1vbmx5IG9iamVjdCBwYXJhbWV0ZXJzIHRvIHByZXZlbnQgbWVtbGVha3NcclxuICAgICAgICAgICAgICAgIGluaXRpYWxWTm9kZSA9IGNvbnRhaW5lciA9IGFuY2hvciA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGVDb21wb25lbnRcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IG11dGF0aW9uIG9mIGNvbXBvbmVudCdzIG93biBzdGF0ZSAobmV4dDogbnVsbClcclxuICAgICAgICAgICAgICAgIC8vIE9SIHBhcmVudCBjYWxsaW5nIHByb2Nlc3NDb21wb25lbnQgKG5leHQ6IFZOb2RlKVxyXG4gICAgICAgICAgICAgICAgbGV0IHsgbmV4dCwgYnUsIHUsIHBhcmVudCwgdm5vZGUgfSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9yaWdpbk5leHQgPSBuZXh0O1xyXG4gICAgICAgICAgICAgICAgbGV0IHZub2RlSG9vaztcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQobmV4dCB8fCBpbnN0YW5jZS52bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyBjb21wb25lbnQgZWZmZWN0IHJlY3Vyc2lvbiBkdXJpbmcgcHJlLWxpZmVjeWNsZSBob29rcy5cclxuICAgICAgICAgICAgICAgIHRvZ2dsZVJlY3Vyc2UoaW5zdGFuY2UsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5lbCA9IHZub2RlLmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbXBvbmVudFByZVJlbmRlcihpbnN0YW5jZSwgbmV4dCwgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSB2bm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZVVwZGF0ZSBob29rXHJcbiAgICAgICAgICAgICAgICBpZiAoYnUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnZva2VBcnJheUZucyhidSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBvblZub2RlQmVmb3JlVXBkYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoKHZub2RlSG9vayA9IG5leHQucHJvcHMgJiYgbmV4dC5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgbmV4dCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlRyZWUgPSBpbnN0YW5jZS5zdWJUcmVlO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc3ViVHJlZSA9IG5leHRUcmVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXRjaChwcmV2VHJlZSwgbmV4dFRyZWUsIFxyXG4gICAgICAgICAgICAgICAgLy8gcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgaWYgaXQncyBpbiBhIHRlbGVwb3J0XHJcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50Tm9kZShwcmV2VHJlZS5lbCksIFxyXG4gICAgICAgICAgICAgICAgLy8gYW5jaG9yIG1heSBoYXZlIGNoYW5nZWQgaWYgaXQncyBpbiBhIGZyYWdtZW50XHJcbiAgICAgICAgICAgICAgICBnZXROZXh0SG9zdE5vZGUocHJldlRyZWUpLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcGF0Y2hgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5leHQuZWwgPSBuZXh0VHJlZS5lbDtcclxuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5OZXh0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi10cmlnZ2VyZWQgdXBkYXRlLiBJbiBjYXNlIG9mIEhPQywgdXBkYXRlIHBhcmVudCBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyB2bm9kZSBlbC4gSE9DIGlzIGluZGljYXRlZCBieSBwYXJlbnQgaW5zdGFuY2UncyBzdWJUcmVlIHBvaW50aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gY2hpbGQgY29tcG9uZW50J3Mgdm5vZGVcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVIT0NIb3N0RWwoaW5zdGFuY2UsIG5leHRUcmVlLmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgaWYgKHUpIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QodSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gb25Wbm9kZVVwZGF0ZWRcclxuICAgICAgICAgICAgICAgIGlmICgodm5vZGVIb29rID0gbmV4dC5wcm9wcyAmJiBuZXh0LnByb3BzLm9uVm5vZGVVcGRhdGVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnQsIG5leHQsIHZub2RlKSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXZ0b29sc0NvbXBvbmVudFVwZGF0ZWQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcFdhcm5pbmdDb250ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIGNyZWF0ZSByZWFjdGl2ZSBlZmZlY3QgZm9yIHJlbmRlcmluZ1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IChpbnN0YW5jZS5lZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoY29tcG9uZW50VXBkYXRlRm4sICgpID0+IHF1ZXVlSm9iKHVwZGF0ZSksIGluc3RhbmNlLnNjb3BlIC8vIHRyYWNrIGl0IGluIGNvbXBvbmVudCdzIGVmZmVjdCBzY29wZVxyXG4gICAgICAgICkpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IChpbnN0YW5jZS51cGRhdGUgPSAoKSA9PiBlZmZlY3QucnVuKCkpO1xyXG4gICAgICAgIHVwZGF0ZS5pZCA9IGluc3RhbmNlLnVpZDtcclxuICAgICAgICAvLyBhbGxvd1JlY3Vyc2VcclxuICAgICAgICAvLyAjMTgwMSwgIzIwNDMgY29tcG9uZW50IHJlbmRlciBlZmZlY3RzIHNob3VsZCBhbGxvdyByZWN1cnNpdmUgdXBkYXRlc1xyXG4gICAgICAgIHRvZ2dsZVJlY3Vyc2UoaW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgZWZmZWN0Lm9uVHJhY2sgPSBpbnN0YW5jZS5ydGNcclxuICAgICAgICAgICAgICAgID8gZSA9PiBpbnZva2VBcnJheUZucyhpbnN0YW5jZS5ydGMsIGUpXHJcbiAgICAgICAgICAgICAgICA6IHZvaWQgMDtcclxuICAgICAgICAgICAgZWZmZWN0Lm9uVHJpZ2dlciA9IGluc3RhbmNlLnJ0Z1xyXG4gICAgICAgICAgICAgICAgPyBlID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0ZywgZSlcclxuICAgICAgICAgICAgICAgIDogdm9pZCAwO1xyXG4gICAgICAgICAgICB1cGRhdGUub3duZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGUoKTtcclxuICAgIH07XHJcbiAgICBjb25zdCB1cGRhdGVDb21wb25lbnRQcmVSZW5kZXIgPSAoaW5zdGFuY2UsIG5leHRWTm9kZSwgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgbmV4dFZOb2RlLmNvbXBvbmVudCA9IGluc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IHByZXZQcm9wcyA9IGluc3RhbmNlLnZub2RlLnByb3BzO1xyXG4gICAgICAgIGluc3RhbmNlLnZub2RlID0gbmV4dFZOb2RlO1xyXG4gICAgICAgIGluc3RhbmNlLm5leHQgPSBudWxsO1xyXG4gICAgICAgIHVwZGF0ZVByb3BzKGluc3RhbmNlLCBuZXh0Vk5vZGUucHJvcHMsIHByZXZQcm9wcywgb3B0aW1pemVkKTtcclxuICAgICAgICB1cGRhdGVTbG90cyhpbnN0YW5jZSwgbmV4dFZOb2RlLmNoaWxkcmVuLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIHBhdXNlVHJhY2tpbmcoKTtcclxuICAgICAgICAvLyBwcm9wcyB1cGRhdGUgbWF5IGhhdmUgdHJpZ2dlcmVkIHByZS1mbHVzaCB3YXRjaGVycy5cclxuICAgICAgICAvLyBmbHVzaCB0aGVtIGJlZm9yZSB0aGUgcmVuZGVyIHVwZGF0ZS5cclxuICAgICAgICBmbHVzaFByZUZsdXNoQ2JzKCk7XHJcbiAgICAgICAgcmVzZXRUcmFja2luZygpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHBhdGNoQ2hpbGRyZW4gPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkID0gZmFsc2UpID0+IHtcclxuICAgICAgICBjb25zdCBjMSA9IG4xICYmIG4xLmNoaWxkcmVuO1xyXG4gICAgICAgIGNvbnN0IHByZXZTaGFwZUZsYWcgPSBuMSA/IG4xLnNoYXBlRmxhZyA6IDA7XHJcbiAgICAgICAgY29uc3QgYzIgPSBuMi5jaGlsZHJlbjtcclxuICAgICAgICBjb25zdCB7IHBhdGNoRmxhZywgc2hhcGVGbGFnIH0gPSBuMjtcclxuICAgICAgICAvLyBmYXN0IHBhdGhcclxuICAgICAgICBpZiAocGF0Y2hGbGFnID4gMCkge1xyXG4gICAgICAgICAgICBpZiAocGF0Y2hGbGFnICYgMTI4IC8qIFBhdGNoRmxhZ3MuS0VZRURfRlJBR01FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgY291bGQgYmUgZWl0aGVyIGZ1bGx5LWtleWVkIG9yIG1peGVkIChzb21lIGtleWVkIHNvbWUgbm90KVxyXG4gICAgICAgICAgICAgICAgLy8gcHJlc2VuY2Ugb2YgcGF0Y2hGbGFnIG1lYW5zIGNoaWxkcmVuIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFycmF5c1xyXG4gICAgICAgICAgICAgICAgcGF0Y2hLZXllZENoaWxkcmVuKGMxLCBjMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocGF0Y2hGbGFnICYgMjU2IC8qIFBhdGNoRmxhZ3MuVU5LRVlFRF9GUkFHTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgLy8gdW5rZXllZFxyXG4gICAgICAgICAgICAgICAgcGF0Y2hVbmtleWVkQ2hpbGRyZW4oYzEsIGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGlsZHJlbiBoYXMgMyBwb3NzaWJpbGl0aWVzOiB0ZXh0LCBhcnJheSBvciBubyBjaGlsZHJlbi5cclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgOCAvKiBTaGFwZUZsYWdzLlRFWFRfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgLy8gdGV4dCBjaGlsZHJlbiBmYXN0IHBhdGhcclxuICAgICAgICAgICAgaWYgKHByZXZTaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4oYzEsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjMiAhPT0gYzEpIHtcclxuICAgICAgICAgICAgICAgIGhvc3RTZXRFbGVtZW50VGV4dChjb250YWluZXIsIGMyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHByZXZTaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2IGNoaWxkcmVuIHdhcyBhcnJheVxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0d28gYXJyYXlzLCBjYW5ub3QgYXNzdW1lIGFueXRoaW5nLCBkbyBmdWxsIGRpZmZcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaEtleWVkQ2hpbGRyZW4oYzEsIGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIG5ldyBjaGlsZHJlbiwganVzdCB1bm1vdW50IG9sZFxyXG4gICAgICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihjMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2IGNoaWxkcmVuIHdhcyB0ZXh0IE9SIG51bGxcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBjaGlsZHJlbiBpcyBhcnJheSBPUiBudWxsXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlNoYXBlRmxhZyAmIDggLyogU2hhcGVGbGFncy5URVhUX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGNvbnRhaW5lciwgJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gbW91bnQgbmV3IGlmIGFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdW50Q2hpbGRyZW4oYzIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHBhdGNoVW5rZXllZENoaWxkcmVuID0gKGMxLCBjMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGMxID0gYzEgfHwgRU1QVFlfQVJSO1xyXG4gICAgICAgIGMyID0gYzIgfHwgRU1QVFlfQVJSO1xyXG4gICAgICAgIGNvbnN0IG9sZExlbmd0aCA9IGMxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBjMi5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgY29tbW9uTGVuZ3RoID0gTWF0aC5taW4ob2xkTGVuZ3RoLCBuZXdMZW5ndGgpO1xyXG4gICAgICAgIGxldCBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21tb25MZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0Q2hpbGQgPSAoYzJbaV0gPSBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgID8gY2xvbmVJZk1vdW50ZWQoYzJbaV0pXHJcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZVZOb2RlKGMyW2ldKSk7XHJcbiAgICAgICAgICAgIHBhdGNoKGMxW2ldLCBuZXh0Q2hpbGQsIGNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9sZExlbmd0aCA+IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgb2xkXHJcbiAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihjMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSwgZmFsc2UsIGNvbW1vbkxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBtb3VudCBuZXdcclxuICAgICAgICAgICAgbW91bnRDaGlsZHJlbihjMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgY29tbW9uTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gY2FuIGJlIGFsbC1rZXllZCBvciBtaXhlZFxyXG4gICAgY29uc3QgcGF0Y2hLZXllZENoaWxkcmVuID0gKGMxLCBjMiwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICBjb25zdCBsMiA9IGMyLmxlbmd0aDtcclxuICAgICAgICBsZXQgZTEgPSBjMS5sZW5ndGggLSAxOyAvLyBwcmV2IGVuZGluZyBpbmRleFxyXG4gICAgICAgIGxldCBlMiA9IGwyIC0gMTsgLy8gbmV4dCBlbmRpbmcgaW5kZXhcclxuICAgICAgICAvLyAxLiBzeW5jIGZyb20gc3RhcnRcclxuICAgICAgICAvLyAoYSBiKSBjXHJcbiAgICAgICAgLy8gKGEgYikgZCBlXHJcbiAgICAgICAgd2hpbGUgKGkgPD0gZTEgJiYgaSA8PSBlMikge1xyXG4gICAgICAgICAgICBjb25zdCBuMSA9IGMxW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBuMiA9IChjMltpXSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgPyBjbG9uZUlmTW91bnRlZChjMltpXSlcclxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pKTtcclxuICAgICAgICAgICAgaWYgKGlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaChuMSwgbjIsIGNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMi4gc3luYyBmcm9tIGVuZFxyXG4gICAgICAgIC8vIGEgKGIgYylcclxuICAgICAgICAvLyBkIGUgKGIgYylcclxuICAgICAgICB3aGlsZSAoaSA8PSBlMSAmJiBpIDw9IGUyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG4xID0gYzFbZTFdO1xyXG4gICAgICAgICAgICBjb25zdCBuMiA9IChjMltlMl0gPSBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgID8gY2xvbmVJZk1vdW50ZWQoYzJbZTJdKVxyXG4gICAgICAgICAgICAgICAgOiBub3JtYWxpemVWTm9kZShjMltlMl0pKTtcclxuICAgICAgICAgICAgaWYgKGlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaChuMSwgbjIsIGNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUxLS07XHJcbiAgICAgICAgICAgIGUyLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDMuIGNvbW1vbiBzZXF1ZW5jZSArIG1vdW50XHJcbiAgICAgICAgLy8gKGEgYilcclxuICAgICAgICAvLyAoYSBiKSBjXHJcbiAgICAgICAgLy8gaSA9IDIsIGUxID0gMSwgZTIgPSAyXHJcbiAgICAgICAgLy8gKGEgYilcclxuICAgICAgICAvLyBjIChhIGIpXHJcbiAgICAgICAgLy8gaSA9IDAsIGUxID0gLTEsIGUyID0gMFxyXG4gICAgICAgIGlmIChpID4gZTEpIHtcclxuICAgICAgICAgICAgaWYgKGkgPD0gZTIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQb3MgPSBlMiArIDE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXh0UG9zIDwgbDIgPyBjMltuZXh0UG9zXS5lbCA6IHBhcmVudEFuY2hvcjtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChpIDw9IGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgKGMyW2ldID0gb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2xvbmVJZk1vdW50ZWQoYzJbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pKSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDQuIGNvbW1vbiBzZXF1ZW5jZSArIHVubW91bnRcclxuICAgICAgICAvLyAoYSBiKSBjXHJcbiAgICAgICAgLy8gKGEgYilcclxuICAgICAgICAvLyBpID0gMiwgZTEgPSAyLCBlMiA9IDFcclxuICAgICAgICAvLyBhIChiIGMpXHJcbiAgICAgICAgLy8gKGIgYylcclxuICAgICAgICAvLyBpID0gMCwgZTEgPSAwLCBlMiA9IC0xXHJcbiAgICAgICAgZWxzZSBpZiAoaSA+IGUyKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChpIDw9IGUxKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50KGMxW2ldLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA1LiB1bmtub3duIHNlcXVlbmNlXHJcbiAgICAgICAgLy8gW2kgLi4uIGUxICsgMV06IGEgYiBbYyBkIGVdIGYgZ1xyXG4gICAgICAgIC8vIFtpIC4uLiBlMiArIDFdOiBhIGIgW2UgZCBjIGhdIGYgZ1xyXG4gICAgICAgIC8vIGkgPSAyLCBlMSA9IDQsIGUyID0gNVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzMSA9IGk7IC8vIHByZXYgc3RhcnRpbmcgaW5kZXhcclxuICAgICAgICAgICAgY29uc3QgczIgPSBpOyAvLyBuZXh0IHN0YXJ0aW5nIGluZGV4XHJcbiAgICAgICAgICAgIC8vIDUuMSBidWlsZCBrZXk6aW5kZXggbWFwIGZvciBuZXdDaGlsZHJlblxyXG4gICAgICAgICAgICBjb25zdCBrZXlUb05ld0luZGV4TWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBzMjsgaSA8PSBlMjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2hpbGQgPSAoYzJbaV0gPSBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGNsb25lSWZNb3VudGVkKGMyW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hpbGQua2V5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGtleVRvTmV3SW5kZXhNYXAuaGFzKG5leHRDaGlsZC5rZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYER1cGxpY2F0ZSBrZXlzIGZvdW5kIGR1cmluZyB1cGRhdGU6YCwgSlNPTi5zdHJpbmdpZnkobmV4dENoaWxkLmtleSksIGBNYWtlIHN1cmUga2V5cyBhcmUgdW5pcXVlLmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBrZXlUb05ld0luZGV4TWFwLnNldChuZXh0Q2hpbGQua2V5LCBpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyA1LjIgbG9vcCB0aHJvdWdoIG9sZCBjaGlsZHJlbiBsZWZ0IHRvIGJlIHBhdGNoZWQgYW5kIHRyeSB0byBwYXRjaFxyXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBub2RlcyAmIHJlbW92ZSBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudFxyXG4gICAgICAgICAgICBsZXQgajtcclxuICAgICAgICAgICAgbGV0IHBhdGNoZWQgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCB0b0JlUGF0Y2hlZCA9IGUyIC0gczIgKyAxO1xyXG4gICAgICAgICAgICBsZXQgbW92ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gdXNlZCB0byB0cmFjayB3aGV0aGVyIGFueSBub2RlIGhhcyBtb3ZlZFxyXG4gICAgICAgICAgICBsZXQgbWF4TmV3SW5kZXhTb0ZhciA9IDA7XHJcbiAgICAgICAgICAgIC8vIHdvcmtzIGFzIE1hcDxuZXdJbmRleCwgb2xkSW5kZXg+XHJcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBvbGRJbmRleCBpcyBvZmZzZXQgYnkgKzFcclxuICAgICAgICAgICAgLy8gYW5kIG9sZEluZGV4ID0gMCBpcyBhIHNwZWNpYWwgdmFsdWUgaW5kaWNhdGluZyB0aGUgbmV3IG5vZGUgaGFzXHJcbiAgICAgICAgICAgIC8vIG5vIGNvcnJlc3BvbmRpbmcgb2xkIG5vZGUuXHJcbiAgICAgICAgICAgIC8vIHVzZWQgZm9yIGRldGVybWluaW5nIGxvbmdlc3Qgc3RhYmxlIHN1YnNlcXVlbmNlXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4VG9PbGRJbmRleE1hcCA9IG5ldyBBcnJheSh0b0JlUGF0Y2hlZCk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b0JlUGF0Y2hlZDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgbmV3SW5kZXhUb09sZEluZGV4TWFwW2ldID0gMDtcclxuICAgICAgICAgICAgZm9yIChpID0gczE7IGkgPD0gZTE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldkNoaWxkID0gYzFbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2hlZCA+PSB0b0JlUGF0Y2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsbCBuZXcgY2hpbGRyZW4gaGF2ZSBiZWVuIHBhdGNoZWQgc28gdGhpcyBjYW4gb25seSBiZSBhIHJlbW92YWxcclxuICAgICAgICAgICAgICAgICAgICB1bm1vdW50KHByZXZDaGlsZCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5kZXg7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldkNoaWxkLmtleSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3SW5kZXggPSBrZXlUb05ld0luZGV4TWFwLmdldChwcmV2Q2hpbGQua2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtleS1sZXNzIG5vZGUsIHRyeSB0byBsb2NhdGUgYSBrZXktbGVzcyBub2RlIG9mIHRoZSBzYW1lIHR5cGVcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBzMjsgaiA8PSBlMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRleFRvT2xkSW5kZXhNYXBbaiAtIHMyXSA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTYW1lVk5vZGVUeXBlKHByZXZDaGlsZCwgYzJbal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCA9IGo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuZXdJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5tb3VudChwcmV2Q2hpbGQsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3SW5kZXhUb09sZEluZGV4TWFwW25ld0luZGV4IC0gczJdID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGV4ID49IG1heE5ld0luZGV4U29GYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4TmV3SW5kZXhTb0ZhciA9IG5ld0luZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwYXRjaChwcmV2Q2hpbGQsIGMyW25ld0luZGV4XSwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyA1LjMgbW92ZSBhbmQgbW91bnRcclxuICAgICAgICAgICAgLy8gZ2VuZXJhdGUgbG9uZ2VzdCBzdGFibGUgc3Vic2VxdWVuY2Ugb25seSB3aGVuIG5vZGVzIGhhdmUgbW92ZWRcclxuICAgICAgICAgICAgY29uc3QgaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2UgPSBtb3ZlZFxyXG4gICAgICAgICAgICAgICAgPyBnZXRTZXF1ZW5jZShuZXdJbmRleFRvT2xkSW5kZXhNYXApXHJcbiAgICAgICAgICAgICAgICA6IEVNUFRZX0FSUjtcclxuICAgICAgICAgICAgaiA9IGluY3JlYXNpbmdOZXdJbmRleFNlcXVlbmNlLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIC8vIGxvb3BpbmcgYmFja3dhcmRzIHNvIHRoYXQgd2UgY2FuIHVzZSBsYXN0IHBhdGNoZWQgbm9kZSBhcyBhbmNob3JcclxuICAgICAgICAgICAgZm9yIChpID0gdG9CZVBhdGNoZWQgLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gczIgKyBpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENoaWxkID0gYzJbbmV4dEluZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5leHRJbmRleCArIDEgPCBsMiA/IGMyW25leHRJbmRleCArIDFdLmVsIDogcGFyZW50QW5jaG9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0luZGV4VG9PbGRJbmRleE1hcFtpXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdW50IG5ld1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoKG51bGwsIG5leHRDaGlsZCwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgaWY6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gc3RhYmxlIHN1YnNlcXVlbmNlIChlLmcuIGEgcmV2ZXJzZSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBPUiBjdXJyZW50IG5vZGUgaXMgbm90IGFtb25nIHRoZSBzdGFibGUgc2VxdWVuY2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IDAgfHwgaSAhPT0gaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2Vbal0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShuZXh0Q2hpbGQsIGNvbnRhaW5lciwgYW5jaG9yLCAyIC8qIE1vdmVUeXBlLlJFT1JERVIgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgai0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBtb3ZlID0gKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgbW92ZVR5cGUsIHBhcmVudFN1c3BlbnNlID0gbnVsbCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgZWwsIHR5cGUsIHRyYW5zaXRpb24sIGNoaWxkcmVuLCBzaGFwZUZsYWcgfSA9IHZub2RlO1xyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgIG1vdmUodm5vZGUuY29tcG9uZW50LnN1YlRyZWUsIGNvbnRhaW5lciwgYW5jaG9yLCBtb3ZlVHlwZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSB7XHJcbiAgICAgICAgICAgIHZub2RlLnN1c3BlbnNlLm1vdmUoY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykge1xyXG4gICAgICAgICAgICB0eXBlLm1vdmUodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBpbnRlcm5hbHMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBGcmFnbWVudCkge1xyXG4gICAgICAgICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG1vdmUoY2hpbGRyZW5baV0sIGNvbnRhaW5lciwgYW5jaG9yLCBtb3ZlVHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaG9zdEluc2VydCh2bm9kZS5hbmNob3IsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PT0gU3RhdGljKSB7XHJcbiAgICAgICAgICAgIG1vdmVTdGF0aWNOb2RlKHZub2RlLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2luZ2xlIG5vZGVzXHJcbiAgICAgICAgY29uc3QgbmVlZFRyYW5zaXRpb24gPSBtb3ZlVHlwZSAhPT0gMiAvKiBNb3ZlVHlwZS5SRU9SREVSICovICYmXHJcbiAgICAgICAgICAgIHNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb247XHJcbiAgICAgICAgaWYgKG5lZWRUcmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChtb3ZlVHlwZSA9PT0gMCAvKiBNb3ZlVHlwZS5FTlRFUiAqLykge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5iZWZvcmVFbnRlcihlbCk7XHJcbiAgICAgICAgICAgICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4gdHJhbnNpdGlvbi5lbnRlcihlbCksIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbGVhdmUsIGRlbGF5TGVhdmUsIGFmdGVyTGVhdmUgfSA9IHRyYW5zaXRpb247XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmUgPSAoKSA9PiBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmb3JtTGVhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVhdmUoZWwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWxheUxlYXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXlMZWF2ZShlbCwgcmVtb3ZlLCBwZXJmb3JtTGVhdmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybUxlYXZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdW5tb3VudCA9ICh2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUgPSBmYWxzZSwgb3B0aW1pemVkID0gZmFsc2UpID0+IHtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCByZWYsIGNoaWxkcmVuLCBkeW5hbWljQ2hpbGRyZW4sIHNoYXBlRmxhZywgcGF0Y2hGbGFnLCBkaXJzIH0gPSB2bm9kZTtcclxuICAgICAgICAvLyB1bnNldCByZWZcclxuICAgICAgICBpZiAocmVmICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2V0UmVmKHJlZiwgbnVsbCwgcGFyZW50U3VzcGVuc2UsIHZub2RlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDI1NiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9TSE9VTERfS0VFUF9BTElWRSAqLykge1xyXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQuY3R4LmRlYWN0aXZhdGUodm5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNob3VsZEludm9rZURpcnMgPSBzaGFwZUZsYWcgJiAxIC8qIFNoYXBlRmxhZ3MuRUxFTUVOVCAqLyAmJiBkaXJzO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZEludm9rZVZub2RlSG9vayA9ICFpc0FzeW5jV3JhcHBlcih2bm9kZSk7XHJcbiAgICAgICAgbGV0IHZub2RlSG9vaztcclxuICAgICAgICBpZiAoc2hvdWxkSW52b2tlVm5vZGVIb29rICYmXHJcbiAgICAgICAgICAgICh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlQmVmb3JlVW5tb3VudCkpIHtcclxuICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgIHVubW91bnRDb21wb25lbnQodm5vZGUuY29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5zdXNwZW5zZS51bm1vdW50KHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNob3VsZEludm9rZURpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ2JlZm9yZVVubW91bnQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUudHlwZS5yZW1vdmUodm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG9wdGltaXplZCwgaW50ZXJuYWxzLCBkb1JlbW92ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZHluYW1pY0NoaWxkcmVuICYmXHJcbiAgICAgICAgICAgICAgICAvLyAjMTE1MzogZmFzdCBwYXRoIHNob3VsZCBub3QgYmUgdGFrZW4gZm9yIG5vbi1zdGFibGUgKHYtZm9yKSBmcmFnbWVudHNcclxuICAgICAgICAgICAgICAgICh0eXBlICE9PSBGcmFnbWVudCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChwYXRjaEZsYWcgPiAwICYmIHBhdGNoRmxhZyAmIDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovKSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZhc3QgcGF0aCBmb3IgYmxvY2sgbm9kZXM6IG9ubHkgbmVlZCB0byB1bm1vdW50IGR5bmFtaWMgY2hpbGRyZW4uXHJcbiAgICAgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4oZHluYW1pY0NoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKHR5cGUgPT09IEZyYWdtZW50ICYmXHJcbiAgICAgICAgICAgICAgICBwYXRjaEZsYWcgJlxyXG4gICAgICAgICAgICAgICAgICAgICgxMjggLyogUGF0Y2hGbGFncy5LRVlFRF9GUkFHTUVOVCAqLyB8IDI1NiAvKiBQYXRjaEZsYWdzLlVOS0VZRURfRlJBR01FTlQgKi8pKSB8fFxyXG4gICAgICAgICAgICAgICAgKCFvcHRpbWl6ZWQgJiYgc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLykpIHtcclxuICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihjaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRvUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmUodm5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoc2hvdWxkSW52b2tlVm5vZGVIb29rICYmXHJcbiAgICAgICAgICAgICh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlVW5tb3VudGVkKSkgfHxcclxuICAgICAgICAgICAgc2hvdWxkSW52b2tlRGlycykge1xyXG4gICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVIb29rICYmIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgc2hvdWxkSW52b2tlRGlycyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ3VubW91bnRlZCcpO1xyXG4gICAgICAgICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlbW92ZSA9IHZub2RlID0+IHtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIGVsLCBhbmNob3IsIHRyYW5zaXRpb24gfSA9IHZub2RlO1xyXG4gICAgICAgIGlmICh0eXBlID09PSBGcmFnbWVudCkge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICB2bm9kZS5wYXRjaEZsYWcgPiAwICYmXHJcbiAgICAgICAgICAgICAgICB2bm9kZS5wYXRjaEZsYWcgJiAyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi8gJiZcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gJiZcclxuICAgICAgICAgICAgICAgICF0cmFuc2l0aW9uLnBlcnNpc3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IENvbW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFJlbW92ZShjaGlsZC5lbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlRnJhZ21lbnQoZWwsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PT0gU3RhdGljKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVN0YXRpY05vZGUodm5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBlcmZvcm1SZW1vdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGhvc3RSZW1vdmUoZWwpO1xyXG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQgJiYgdHJhbnNpdGlvbi5hZnRlckxlYXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmFmdGVyTGVhdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24gJiZcclxuICAgICAgICAgICAgIXRyYW5zaXRpb24ucGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgbGVhdmUsIGRlbGF5TGVhdmUgfSA9IHRyYW5zaXRpb247XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcmZvcm1MZWF2ZSA9ICgpID0+IGxlYXZlKGVsLCBwZXJmb3JtUmVtb3ZlKTtcclxuICAgICAgICAgICAgaWYgKGRlbGF5TGVhdmUpIHtcclxuICAgICAgICAgICAgICAgIGRlbGF5TGVhdmUodm5vZGUuZWwsIHBlcmZvcm1SZW1vdmUsIHBlcmZvcm1MZWF2ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtTGVhdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGVyZm9ybVJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCByZW1vdmVGcmFnbWVudCA9IChjdXIsIGVuZCkgPT4ge1xyXG4gICAgICAgIC8vIEZvciBmcmFnbWVudHMsIGRpcmVjdGx5IHJlbW92ZSBhbGwgY29udGFpbmVkIERPTSBub2Rlcy5cclxuICAgICAgICAvLyAoZnJhZ21lbnQgY2hpbGQgbm9kZXMgY2Fubm90IGhhdmUgdHJhbnNpdGlvbilcclxuICAgICAgICBsZXQgbmV4dDtcclxuICAgICAgICB3aGlsZSAoY3VyICE9PSBlbmQpIHtcclxuICAgICAgICAgICAgbmV4dCA9IGhvc3ROZXh0U2libGluZyhjdXIpO1xyXG4gICAgICAgICAgICBob3N0UmVtb3ZlKGN1cik7XHJcbiAgICAgICAgICAgIGN1ciA9IG5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhvc3RSZW1vdmUoZW5kKTtcclxuICAgIH07XHJcbiAgICBjb25zdCB1bm1vdW50Q29tcG9uZW50ID0gKGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpID0+IHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGluc3RhbmNlLnR5cGUuX19obXJJZCkge1xyXG4gICAgICAgICAgICB1bnJlZ2lzdGVySE1SKGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyBidW0sIHNjb3BlLCB1cGRhdGUsIHN1YlRyZWUsIHVtIH0gPSBpbnN0YW5jZTtcclxuICAgICAgICAvLyBiZWZvcmVVbm1vdW50IGhvb2tcclxuICAgICAgICBpZiAoYnVtKSB7XHJcbiAgICAgICAgICAgIGludm9rZUFycmF5Rm5zKGJ1bSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3AgZWZmZWN0cyBpbiBjb21wb25lbnQgc2NvcGVcclxuICAgICAgICBzY29wZS5zdG9wKCk7XHJcbiAgICAgICAgLy8gdXBkYXRlIG1heSBiZSBudWxsIGlmIGEgY29tcG9uZW50IGlzIHVubW91bnRlZCBiZWZvcmUgaXRzIGFzeW5jXHJcbiAgICAgICAgLy8gc2V0dXAgaGFzIHJlc29sdmVkLlxyXG4gICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgLy8gc28gdGhhdCBzY2hlZHVsZXIgd2lsbCBubyBsb25nZXIgaW52b2tlIGl0XHJcbiAgICAgICAgICAgIHVwZGF0ZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdW5tb3VudChzdWJUcmVlLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdW5tb3VudGVkIGhvb2tcclxuICAgICAgICBpZiAodW0pIHtcclxuICAgICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KHVtLCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmlzVW5tb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgLy8gQSBjb21wb25lbnQgd2l0aCBhc3luYyBkZXAgaW5zaWRlIGEgcGVuZGluZyBzdXNwZW5zZSBpcyB1bm1vdW50ZWQgYmVmb3JlXHJcbiAgICAgICAgLy8gaXRzIGFzeW5jIGRlcCByZXNvbHZlcy4gVGhpcyBzaG91bGQgcmVtb3ZlIHRoZSBkZXAgZnJvbSB0aGUgc3VzcGVuc2UsIGFuZFxyXG4gICAgICAgIC8vIGNhdXNlIHRoZSBzdXNwZW5zZSB0byByZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHRoYXQgd2FzIHRoZSBsYXN0IGRlcC5cclxuICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UgJiZcclxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UucGVuZGluZ0JyYW5jaCAmJlxyXG4gICAgICAgICAgICAhcGFyZW50U3VzcGVuc2UuaXNVbm1vdW50ZWQgJiZcclxuICAgICAgICAgICAgaW5zdGFuY2UuYXN5bmNEZXAgJiZcclxuICAgICAgICAgICAgIWluc3RhbmNlLmFzeW5jUmVzb2x2ZWQgJiZcclxuICAgICAgICAgICAgaW5zdGFuY2Uuc3VzcGVuc2VJZCA9PT0gcGFyZW50U3VzcGVuc2UucGVuZGluZ0lkKSB7XHJcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLmRlcHMtLTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudFN1c3BlbnNlLmRlcHMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICBkZXZ0b29sc0NvbXBvbmVudFJlbW92ZWQoaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB1bm1vdW50Q2hpbGRyZW4gPSAoY2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlID0gZmFsc2UsIG9wdGltaXplZCA9IGZhbHNlLCBzdGFydCA9IDApID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB1bm1vdW50KGNoaWxkcmVuW2ldLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSwgb3B0aW1pemVkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZ2V0TmV4dEhvc3ROb2RlID0gdm5vZGUgPT4ge1xyXG4gICAgICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXROZXh0SG9zdE5vZGUodm5vZGUuY29tcG9uZW50LnN1YlRyZWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZub2RlLnN1c3BlbnNlLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhvc3ROZXh0U2libGluZygodm5vZGUuYW5jaG9yIHx8IHZub2RlLmVsKSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVuZGVyID0gKHZub2RlLCBjb250YWluZXIsIGlzU1ZHKSA9PiB7XHJcbiAgICAgICAgaWYgKHZub2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5fdm5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHVubW91bnQoY29udGFpbmVyLl92bm9kZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGNoKGNvbnRhaW5lci5fdm5vZGUgfHwgbnVsbCwgdm5vZGUsIGNvbnRhaW5lciwgbnVsbCwgbnVsbCwgbnVsbCwgaXNTVkcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbHVzaFByZUZsdXNoQ2JzKCk7XHJcbiAgICAgICAgZmx1c2hQb3N0Rmx1c2hDYnMoKTtcclxuICAgICAgICBjb250YWluZXIuX3Zub2RlID0gdm5vZGU7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaW50ZXJuYWxzID0ge1xyXG4gICAgICAgIHA6IHBhdGNoLFxyXG4gICAgICAgIHVtOiB1bm1vdW50LFxyXG4gICAgICAgIG06IG1vdmUsXHJcbiAgICAgICAgcjogcmVtb3ZlLFxyXG4gICAgICAgIG10OiBtb3VudENvbXBvbmVudCxcclxuICAgICAgICBtYzogbW91bnRDaGlsZHJlbixcclxuICAgICAgICBwYzogcGF0Y2hDaGlsZHJlbixcclxuICAgICAgICBwYmM6IHBhdGNoQmxvY2tDaGlsZHJlbixcclxuICAgICAgICBuOiBnZXROZXh0SG9zdE5vZGUsXHJcbiAgICAgICAgbzogb3B0aW9uc1xyXG4gICAgfTtcclxuICAgIGxldCBoeWRyYXRlO1xyXG4gICAgbGV0IGh5ZHJhdGVOb2RlO1xyXG4gICAgaWYgKGNyZWF0ZUh5ZHJhdGlvbkZucykge1xyXG4gICAgICAgIFtoeWRyYXRlLCBoeWRyYXRlTm9kZV0gPSBjcmVhdGVIeWRyYXRpb25GbnMoaW50ZXJuYWxzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVuZGVyLFxyXG4gICAgICAgIGh5ZHJhdGUsXHJcbiAgICAgICAgY3JlYXRlQXBwOiBjcmVhdGVBcHBBUEkocmVuZGVyLCBoeWRyYXRlKVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0b2dnbGVSZWN1cnNlKHsgZWZmZWN0LCB1cGRhdGUgfSwgYWxsb3dlZCkge1xyXG4gICAgZWZmZWN0LmFsbG93UmVjdXJzZSA9IHVwZGF0ZS5hbGxvd1JlY3Vyc2UgPSBhbGxvd2VkO1xyXG59XHJcbi8qKlxyXG4gKiAjMTE1NlxyXG4gKiBXaGVuIGEgY29tcG9uZW50IGlzIEhNUi1lbmFibGVkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBzdGF0aWMgbm9kZXNcclxuICogaW5zaWRlIGEgYmxvY2sgYWxzbyBpbmhlcml0IHRoZSBET00gZWxlbWVudCBmcm9tIHRoZSBwcmV2aW91cyB0cmVlIHNvIHRoYXRcclxuICogSE1SIHVwZGF0ZXMgKHdoaWNoIGFyZSBmdWxsIHVwZGF0ZXMpIGNhbiByZXRyaWV2ZSB0aGUgZWxlbWVudCBmb3IgcGF0Y2hpbmcuXHJcbiAqXHJcbiAqICMyMDgwXHJcbiAqIEluc2lkZSBrZXllZCBgdGVtcGxhdGVgIGZyYWdtZW50IHN0YXRpYyBjaGlsZHJlbiwgaWYgYSBmcmFnbWVudCBpcyBtb3ZlZCxcclxuICogdGhlIGNoaWxkcmVuIHdpbGwgYWx3YXlzIGJlIG1vdmVkLiBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIGVuc3VyZSBjb3JyZWN0IG1vdmVcclxuICogcG9zaXRpb24sIGVsIHNob3VsZCBiZSBpbmhlcml0ZWQgZnJvbSBwcmV2aW91cyBub2Rlcy5cclxuICovXHJcbmZ1bmN0aW9uIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4objEsIG4yLCBzaGFsbG93ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGNoMSA9IG4xLmNoaWxkcmVuO1xyXG4gICAgY29uc3QgY2gyID0gbjIuY2hpbGRyZW47XHJcbiAgICBpZiAoaXNBcnJheShjaDEpICYmIGlzQXJyYXkoY2gyKSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2gxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb25seSBjYWxsZWQgaW4gdGhlIG9wdGltaXplZCBwYXRoIHNvIGFycmF5IGNoaWxkcmVuIGFyZVxyXG4gICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHZub2Rlc1xyXG4gICAgICAgICAgICBjb25zdCBjMSA9IGNoMVtpXTtcclxuICAgICAgICAgICAgbGV0IGMyID0gY2gyW2ldO1xyXG4gICAgICAgICAgICBpZiAoYzIuc2hhcGVGbGFnICYgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8gJiYgIWMyLmR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGMyLnBhdGNoRmxhZyA8PSAwIHx8IGMyLnBhdGNoRmxhZyA9PT0gMzIgLyogUGF0Y2hGbGFncy5IWURSQVRFX0VWRU5UUyAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGMyID0gY2gyW2ldID0gY2xvbmVJZk1vdW50ZWQoY2gyW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBjMi5lbCA9IGMxLmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzaGFsbG93KVxyXG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4oYzEsIGMyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhbHNvIGluaGVyaXQgZm9yIGNvbW1lbnQgbm9kZXMsIGJ1dCBub3QgcGxhY2Vob2xkZXJzIChlLmcuIHYtaWYgd2hpY2hcclxuICAgICAgICAgICAgLy8gd291bGQgaGF2ZSByZWNlaXZlZCAuZWwgZHVyaW5nIGJsb2NrIHBhdGNoKVxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGMyLnR5cGUgPT09IENvbW1lbnQgJiYgIWMyLmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjMi5lbCA9IGMxLmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvbmdlc3RfaW5jcmVhc2luZ19zdWJzZXF1ZW5jZVxyXG5mdW5jdGlvbiBnZXRTZXF1ZW5jZShhcnIpIHtcclxuICAgIGNvbnN0IHAgPSBhcnIuc2xpY2UoKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFswXTtcclxuICAgIGxldCBpLCBqLCB1LCB2LCBjO1xyXG4gICAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGFyckkgPSBhcnJbaV07XHJcbiAgICAgICAgaWYgKGFyckkgIT09IDApIHtcclxuICAgICAgICAgICAgaiA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmIChhcnJbal0gPCBhcnJJKSB7XHJcbiAgICAgICAgICAgICAgICBwW2ldID0gajtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdSA9IDA7XHJcbiAgICAgICAgICAgIHYgPSByZXN1bHQubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgd2hpbGUgKHUgPCB2KSB7XHJcbiAgICAgICAgICAgICAgICBjID0gKHUgKyB2KSA+PiAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycltyZXN1bHRbY11dIDwgYXJySSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHUgPSBjICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSBjO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhcnJJIDwgYXJyW3Jlc3VsdFt1XV0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBbaV0gPSByZXN1bHRbdSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0W3VdID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHUgPSByZXN1bHQubGVuZ3RoO1xyXG4gICAgdiA9IHJlc3VsdFt1IC0gMV07XHJcbiAgICB3aGlsZSAodS0tID4gMCkge1xyXG4gICAgICAgIHJlc3VsdFt1XSA9IHY7XHJcbiAgICAgICAgdiA9IHBbdl07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XG5cbmNvbnN0IGlzVGVsZXBvcnQgPSAodHlwZSkgPT4gdHlwZS5fX2lzVGVsZXBvcnQ7XHJcbmNvbnN0IGlzVGVsZXBvcnREaXNhYmxlZCA9IChwcm9wcykgPT4gcHJvcHMgJiYgKHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmRpc2FibGVkID09PSAnJyk7XHJcbmNvbnN0IGlzVGFyZ2V0U1ZHID0gKHRhcmdldCkgPT4gdHlwZW9mIFNWR0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ7XHJcbmNvbnN0IHJlc29sdmVUYXJnZXQgPSAocHJvcHMsIHNlbGVjdCkgPT4ge1xyXG4gICAgY29uc3QgdGFyZ2V0U2VsZWN0b3IgPSBwcm9wcyAmJiBwcm9wcy50bztcclxuICAgIGlmIChpc1N0cmluZyh0YXJnZXRTZWxlY3RvcikpIHtcclxuICAgICAgICBpZiAoIXNlbGVjdCkge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4oYEN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJpbmcgdGFyZ2V0IGZvciBUZWxlcG9ydHMuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGAobWlzc2luZyBxdWVyeVNlbGVjdG9yIHJlbmRlcmVyIG9wdGlvbilgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBzZWxlY3QodGFyZ2V0U2VsZWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgRmFpbGVkIHRvIGxvY2F0ZSBUZWxlcG9ydCB0YXJnZXQgd2l0aCBzZWxlY3RvciBcIiR7dGFyZ2V0U2VsZWN0b3J9XCIuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgTm90ZSB0aGUgdGFyZ2V0IGVsZW1lbnQgbXVzdCBleGlzdCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkIC0gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBpLmUuIHRoZSB0YXJnZXQgY2Fubm90IGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb25lbnQgaXRzZWxmLCBhbmQgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBpZGVhbGx5IHNob3VsZCBiZSBvdXRzaWRlIG9mIHRoZSBlbnRpcmUgVnVlIGNvbXBvbmVudCB0cmVlLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhdGFyZ2V0U2VsZWN0b3IgJiYgIWlzVGVsZXBvcnREaXNhYmxlZChwcm9wcykpIHtcclxuICAgICAgICAgICAgd2FybihgSW52YWxpZCBUZWxlcG9ydCB0YXJnZXQ6ICR7dGFyZ2V0U2VsZWN0b3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXRTZWxlY3RvcjtcclxuICAgIH1cclxufTtcclxuY29uc3QgVGVsZXBvcnRJbXBsID0ge1xyXG4gICAgX19pc1RlbGVwb3J0OiB0cnVlLFxyXG4gICAgcHJvY2VzcyhuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIGludGVybmFscykge1xyXG4gICAgICAgIGNvbnN0IHsgbWM6IG1vdW50Q2hpbGRyZW4sIHBjOiBwYXRjaENoaWxkcmVuLCBwYmM6IHBhdGNoQmxvY2tDaGlsZHJlbiwgbzogeyBpbnNlcnQsIHF1ZXJ5U2VsZWN0b3IsIGNyZWF0ZVRleHQsIGNyZWF0ZUNvbW1lbnQgfSB9ID0gaW50ZXJuYWxzO1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNUZWxlcG9ydERpc2FibGVkKG4yLnByb3BzKTtcclxuICAgICAgICBsZXQgeyBzaGFwZUZsYWcsIGNoaWxkcmVuLCBkeW5hbWljQ2hpbGRyZW4gfSA9IG4yO1xyXG4gICAgICAgIC8vICMzMzAyXHJcbiAgICAgICAgLy8gSE1SIHVwZGF0ZWQsIGZvcmNlIGZ1bGwgZGlmZlxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNIbXJVcGRhdGluZykge1xyXG4gICAgICAgICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZHluYW1pY0NoaWxkcmVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gaW5zZXJ0IGFuY2hvcnMgaW4gdGhlIG1haW4gdmlld1xyXG4gICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IChuMi5lbCA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDb21tZW50KCd0ZWxlcG9ydCBzdGFydCcpXHJcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZVRleHQoJycpKTtcclxuICAgICAgICAgICAgY29uc3QgbWFpbkFuY2hvciA9IChuMi5hbmNob3IgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICAgICAgICAgID8gY3JlYXRlQ29tbWVudCgndGVsZXBvcnQgZW5kJylcclxuICAgICAgICAgICAgICAgIDogY3JlYXRlVGV4dCgnJykpO1xyXG4gICAgICAgICAgICBpbnNlcnQocGxhY2Vob2xkZXIsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgaW5zZXJ0KG1haW5BbmNob3IsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gKG4yLnRhcmdldCA9IHJlc29sdmVUYXJnZXQobjIucHJvcHMsIHF1ZXJ5U2VsZWN0b3IpKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0QW5jaG9yID0gKG4yLnRhcmdldEFuY2hvciA9IGNyZWF0ZVRleHQoJycpKTtcclxuICAgICAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHRhcmdldEFuY2hvciwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIC8vICMyNjUyIHdlIGNvdWxkIGJlIHRlbGVwb3J0aW5nIGZyb20gYSBub24tU1ZHIHRyZWUgaW50byBhbiBTVkcgdHJlZVxyXG4gICAgICAgICAgICAgICAgaXNTVkcgPSBpc1NWRyB8fCBpc1RhcmdldFNWRyh0YXJnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oJ0ludmFsaWQgVGVsZXBvcnQgdGFyZ2V0IG9uIG1vdW50OicsIHRhcmdldCwgYCgke3R5cGVvZiB0YXJnZXR9KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdW50ID0gKGNvbnRhaW5lciwgYW5jaG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBUZWxlcG9ydCAqYWx3YXlzKiBoYXMgQXJyYXkgY2hpbGRyZW4uIFRoaXMgaXMgZW5mb3JjZWQgaW4gYm90aCB0aGVcclxuICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVyIGFuZCB2bm9kZSBjaGlsZHJlbiBub3JtYWxpemF0aW9uLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBtb3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudChjb250YWluZXIsIG1haW5BbmNob3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgbW91bnQodGFyZ2V0LCB0YXJnZXRBbmNob3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgY29udGVudFxyXG4gICAgICAgICAgICBuMi5lbCA9IG4xLmVsO1xyXG4gICAgICAgICAgICBjb25zdCBtYWluQW5jaG9yID0gKG4yLmFuY2hvciA9IG4xLmFuY2hvcik7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IChuMi50YXJnZXQgPSBuMS50YXJnZXQpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRBbmNob3IgPSAobjIudGFyZ2V0QW5jaG9yID0gbjEudGFyZ2V0QW5jaG9yKTtcclxuICAgICAgICAgICAgY29uc3Qgd2FzRGlzYWJsZWQgPSBpc1RlbGVwb3J0RGlzYWJsZWQobjEucHJvcHMpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVyID0gd2FzRGlzYWJsZWQgPyBjb250YWluZXIgOiB0YXJnZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBbmNob3IgPSB3YXNEaXNhYmxlZCA/IG1haW5BbmNob3IgOiB0YXJnZXRBbmNob3I7XHJcbiAgICAgICAgICAgIGlzU1ZHID0gaXNTVkcgfHwgaXNUYXJnZXRTVkcodGFyZ2V0KTtcclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgLy8gZmFzdCBwYXRoIHdoZW4gdGhlIHRlbGVwb3J0IGhhcHBlbnMgdG8gYmUgYSBibG9jayByb290XHJcbiAgICAgICAgICAgICAgICBwYXRjaEJsb2NrQ2hpbGRyZW4objEuZHluYW1pY0NoaWxkcmVuLCBkeW5hbWljQ2hpbGRyZW4sIGN1cnJlbnRDb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMpO1xyXG4gICAgICAgICAgICAgICAgLy8gZXZlbiBpbiBibG9jayB0cmVlIG1vZGUgd2UgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHJvb3QtbGV2ZWwgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIGluIHRoZSB0ZWxlcG9ydCBpbmhlcml0IHByZXZpb3VzIERPTSByZWZlcmVuY2VzIHNvIHRoYXQgdGhleSBjYW5cclxuICAgICAgICAgICAgICAgIC8vIGJlIG1vdmVkIGluIGZ1dHVyZSBwYXRjaGVzLlxyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFvcHRpbWl6ZWQpIHtcclxuICAgICAgICAgICAgICAgIHBhdGNoQ2hpbGRyZW4objEsIG4yLCBjdXJyZW50Q29udGFpbmVyLCBjdXJyZW50QW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXdhc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlZCAtPiBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgaW50byBtYWluIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUZWxlcG9ydChuMiwgY29udGFpbmVyLCBtYWluQW5jaG9yLCBpbnRlcm5hbHMsIDEgLyogVGVsZXBvcnRNb3ZlVHlwZXMuVE9HR0xFICovKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHRhcmdldCBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICBpZiAoKG4yLnByb3BzICYmIG4yLnByb3BzLnRvKSAhPT0gKG4xLnByb3BzICYmIG4xLnByb3BzLnRvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSAobjIudGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChuMi5wcm9wcywgcXVlcnlTZWxlY3RvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUZWxlcG9ydChuMiwgbmV4dFRhcmdldCwgbnVsbCwgaW50ZXJuYWxzLCAwIC8qIFRlbGVwb3J0TW92ZVR5cGVzLlRBUkdFVF9DSEFOR0UgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybignSW52YWxpZCBUZWxlcG9ydCB0YXJnZXQgb24gdXBkYXRlOicsIHRhcmdldCwgYCgke3R5cGVvZiB0YXJnZXR9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdhc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgLT4gZW5hYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgaW50byB0ZWxlcG9ydCB0YXJnZXRcclxuICAgICAgICAgICAgICAgICAgICBtb3ZlVGVsZXBvcnQobjIsIHRhcmdldCwgdGFyZ2V0QW5jaG9yLCBpbnRlcm5hbHMsIDEgLyogVGVsZXBvcnRNb3ZlVHlwZXMuVE9HR0xFICovKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZW1vdmUodm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG9wdGltaXplZCwgeyB1bTogdW5tb3VudCwgbzogeyByZW1vdmU6IGhvc3RSZW1vdmUgfSB9LCBkb1JlbW92ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGVGbGFnLCBjaGlsZHJlbiwgYW5jaG9yLCB0YXJnZXRBbmNob3IsIHRhcmdldCwgcHJvcHMgfSA9IHZub2RlO1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgaG9zdFJlbW92ZSh0YXJnZXRBbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhbiB1bm1vdW50ZWQgdGVsZXBvcnQgc2hvdWxkIGFsd2F5cyByZW1vdmUgaXRzIGNoaWxkcmVuIGlmIG5vdCBkaXNhYmxlZFxyXG4gICAgICAgIGlmIChkb1JlbW92ZSB8fCAhaXNUZWxlcG9ydERpc2FibGVkKHByb3BzKSkge1xyXG4gICAgICAgICAgICBob3N0UmVtb3ZlKGFuY2hvcik7XHJcbiAgICAgICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGNoaWxkLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlLCAhIWNoaWxkLmR5bmFtaWNDaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW92ZTogbW92ZVRlbGVwb3J0LFxyXG4gICAgaHlkcmF0ZTogaHlkcmF0ZVRlbGVwb3J0XHJcbn07XHJcbmZ1bmN0aW9uIG1vdmVUZWxlcG9ydCh2bm9kZSwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IsIHsgbzogeyBpbnNlcnQgfSwgbTogbW92ZSB9LCBtb3ZlVHlwZSA9IDIgLyogVGVsZXBvcnRNb3ZlVHlwZXMuUkVPUkRFUiAqLykge1xyXG4gICAgLy8gbW92ZSB0YXJnZXQgYW5jaG9yIGlmIHRoaXMgaXMgYSB0YXJnZXQgY2hhbmdlLlxyXG4gICAgaWYgKG1vdmVUeXBlID09PSAwIC8qIFRlbGVwb3J0TW92ZVR5cGVzLlRBUkdFVF9DSEFOR0UgKi8pIHtcclxuICAgICAgICBpbnNlcnQodm5vZGUudGFyZ2V0QW5jaG9yLCBjb250YWluZXIsIHBhcmVudEFuY2hvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGVsLCBhbmNob3IsIHNoYXBlRmxhZywgY2hpbGRyZW4sIHByb3BzIH0gPSB2bm9kZTtcclxuICAgIGNvbnN0IGlzUmVvcmRlciA9IG1vdmVUeXBlID09PSAyIC8qIFRlbGVwb3J0TW92ZVR5cGVzLlJFT1JERVIgKi87XHJcbiAgICAvLyBtb3ZlIG1haW4gdmlldyBhbmNob3IgaWYgdGhpcyBpcyBhIHJlLW9yZGVyLlxyXG4gICAgaWYgKGlzUmVvcmRlcikge1xyXG4gICAgICAgIGluc2VydChlbCwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgdGhpcyBpcyBhIHJlLW9yZGVyIGFuZCB0ZWxlcG9ydCBpcyBlbmFibGVkIChjb250ZW50IGlzIGluIHRhcmdldClcclxuICAgIC8vIGRvIG5vdCBtb3ZlIGNoaWxkcmVuLiBTbyB0aGUgb3Bwb3NpdGUgaXM6IG9ubHkgbW92ZSBjaGlsZHJlbiBpZiB0aGlzXHJcbiAgICAvLyBpcyBub3QgYSByZW9yZGVyLCBvciB0aGUgdGVsZXBvcnQgaXMgZGlzYWJsZWRcclxuICAgIGlmICghaXNSZW9yZGVyIHx8IGlzVGVsZXBvcnREaXNhYmxlZChwcm9wcykpIHtcclxuICAgICAgICAvLyBUZWxlcG9ydCBoYXMgZWl0aGVyIEFycmF5IGNoaWxkcmVuIG9yIG5vIGNoaWxkcmVuLlxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG1vdmUoY2hpbGRyZW5baV0sIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yLCAyIC8qIE1vdmVUeXBlLlJFT1JERVIgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbW92ZSBtYWluIHZpZXcgYW5jaG9yIGlmIHRoaXMgaXMgYSByZS1vcmRlci5cclxuICAgIGlmIChpc1Jlb3JkZXIpIHtcclxuICAgICAgICBpbnNlcnQoYW5jaG9yLCBjb250YWluZXIsIHBhcmVudEFuY2hvcik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaHlkcmF0ZVRlbGVwb3J0KG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgeyBvOiB7IG5leHRTaWJsaW5nLCBwYXJlbnROb2RlLCBxdWVyeVNlbGVjdG9yIH0gfSwgaHlkcmF0ZUNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSAodm5vZGUudGFyZ2V0ID0gcmVzb2x2ZVRhcmdldCh2bm9kZS5wcm9wcywgcXVlcnlTZWxlY3RvcikpO1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgIC8vIGlmIG11bHRpcGxlIHRlbGVwb3J0cyByZW5kZXJlZCB0byB0aGUgc2FtZSB0YXJnZXQgZWxlbWVudCwgd2UgbmVlZCB0b1xyXG4gICAgICAgIC8vIHBpY2sgdXAgZnJvbSB3aGVyZSB0aGUgbGFzdCB0ZWxlcG9ydCBmaW5pc2hlZCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBub2RlXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldC5fbHBhIHx8IHRhcmdldC5maXJzdENoaWxkO1xyXG4gICAgICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1RlbGVwb3J0RGlzYWJsZWQodm5vZGUucHJvcHMpKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5hbmNob3IgPSBoeWRyYXRlQ2hpbGRyZW4obmV4dFNpYmxpbmcobm9kZSksIHZub2RlLCBwYXJlbnROb2RlKG5vZGUpLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS50YXJnZXRBbmNob3IgPSB0YXJnZXROb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUuYW5jaG9yID0gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBsb29rYWhlYWQgdW50aWwgd2UgZmluZCB0aGUgdGFyZ2V0IGFuY2hvclxyXG4gICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IHJlbHkgb24gcmV0dXJuIHZhbHVlIG9mIGh5ZHJhdGVDaGlsZHJlbigpIGJlY2F1c2UgdGhlcmVcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGJlIG5lc3RlZCB0ZWxlcG9ydHNcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRBbmNob3IgPSB0YXJnZXROb2RlO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRhcmdldEFuY2hvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEFuY2hvciA9IG5leHRTaWJsaW5nKHRhcmdldEFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEFuY2hvciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBbmNob3Iubm9kZVR5cGUgPT09IDggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QW5jaG9yLmRhdGEgPT09ICd0ZWxlcG9ydCBhbmNob3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZub2RlLnRhcmdldEFuY2hvciA9IHRhcmdldEFuY2hvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Ll9scGEgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFyZ2V0QW5jaG9yICYmIG5leHRTaWJsaW5nKHZub2RlLnRhcmdldEFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGh5ZHJhdGVDaGlsZHJlbih0YXJnZXROb2RlLCB2bm9kZSwgdGFyZ2V0LCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdm5vZGUuYW5jaG9yICYmIG5leHRTaWJsaW5nKHZub2RlLmFuY2hvcik7XHJcbn1cclxuLy8gRm9yY2UtY2FzdGVkIHB1YmxpYyB0eXBpbmcgZm9yIGggYW5kIFRTWCBwcm9wcyBpbmZlcmVuY2VcclxuY29uc3QgVGVsZXBvcnQgPSBUZWxlcG9ydEltcGw7XG5cbmNvbnN0IEZyYWdtZW50ID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/ICdGcmFnbWVudCcgOiB1bmRlZmluZWQpO1xyXG5jb25zdCBUZXh0ID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/ICdUZXh0JyA6IHVuZGVmaW5lZCk7XHJcbmNvbnN0IENvbW1lbnQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gJ0NvbW1lbnQnIDogdW5kZWZpbmVkKTtcclxuY29uc3QgU3RhdGljID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/ICdTdGF0aWMnIDogdW5kZWZpbmVkKTtcclxuLy8gU2luY2Ugdi1pZiBhbmQgdi1mb3IgYXJlIHRoZSB0d28gcG9zc2libGUgd2F5cyBub2RlIHN0cnVjdHVyZSBjYW4gZHluYW1pY2FsbHlcclxuLy8gY2hhbmdlLCBvbmNlIHdlIGNvbnNpZGVyIHYtaWYgYnJhbmNoZXMgYW5kIGVhY2ggdi1mb3IgZnJhZ21lbnQgYSBibG9jaywgd2VcclxuLy8gY2FuIGRpdmlkZSBhIHRlbXBsYXRlIGludG8gbmVzdGVkIGJsb2NrcywgYW5kIHdpdGhpbiBlYWNoIGJsb2NrIHRoZSBub2RlXHJcbi8vIHN0cnVjdHVyZSB3b3VsZCBiZSBzdGFibGUuIFRoaXMgYWxsb3dzIHVzIHRvIHNraXAgbW9zdCBjaGlsZHJlbiBkaWZmaW5nXHJcbi8vIGFuZCBvbmx5IHdvcnJ5IGFib3V0IHRoZSBkeW5hbWljIG5vZGVzIChpbmRpY2F0ZWQgYnkgcGF0Y2ggZmxhZ3MpLlxyXG5jb25zdCBibG9ja1N0YWNrID0gW107XHJcbmxldCBjdXJyZW50QmxvY2sgPSBudWxsO1xyXG4vKipcclxuICogT3BlbiBhIGJsb2NrLlxyXG4gKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBgY3JlYXRlQmxvY2tgLiBJdCBjYW5ub3QgYmUgcGFydCBvZiBgY3JlYXRlQmxvY2tgXHJcbiAqIGJlY2F1c2UgdGhlIGNoaWxkcmVuIG9mIHRoZSBibG9jayBhcmUgZXZhbHVhdGVkIGJlZm9yZSBgY3JlYXRlQmxvY2tgIGl0c2VsZlxyXG4gKiBpcyBjYWxsZWQuIFRoZSBnZW5lcmF0ZWQgY29kZSB0eXBpY2FsbHkgbG9va3MgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBmdW5jdGlvbiByZW5kZXIoKSB7XHJcbiAqICAgcmV0dXJuIChvcGVuQmxvY2soKSxjcmVhdGVCbG9jaygnZGl2JywgbnVsbCwgWy4uLl0pKVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKiBkaXNhYmxlVHJhY2tpbmcgaXMgdHJ1ZSB3aGVuIGNyZWF0aW5nIGEgdi1mb3IgZnJhZ21lbnQgYmxvY2ssIHNpbmNlIGEgdi1mb3JcclxuICogZnJhZ21lbnQgYWx3YXlzIGRpZmZzIGl0cyBjaGlsZHJlbi5cclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIG9wZW5CbG9jayhkaXNhYmxlVHJhY2tpbmcgPSBmYWxzZSkge1xyXG4gICAgYmxvY2tTdGFjay5wdXNoKChjdXJyZW50QmxvY2sgPSBkaXNhYmxlVHJhY2tpbmcgPyBudWxsIDogW10pKTtcclxufVxyXG5mdW5jdGlvbiBjbG9zZUJsb2NrKCkge1xyXG4gICAgYmxvY2tTdGFjay5wb3AoKTtcclxuICAgIGN1cnJlbnRCbG9jayA9IGJsb2NrU3RhY2tbYmxvY2tTdGFjay5sZW5ndGggLSAxXSB8fCBudWxsO1xyXG59XHJcbi8vIFdoZXRoZXIgd2Ugc2hvdWxkIGJlIHRyYWNraW5nIGR5bmFtaWMgY2hpbGQgbm9kZXMgaW5zaWRlIGEgYmxvY2suXHJcbi8vIE9ubHkgdHJhY2tzIHdoZW4gdGhpcyB2YWx1ZSBpcyA+IDBcclxuLy8gV2UgYXJlIG5vdCB1c2luZyBhIHNpbXBsZSBib29sZWFuIGJlY2F1c2UgdGhpcyB2YWx1ZSBtYXkgbmVlZCB0byBiZVxyXG4vLyBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCBieSBuZXN0ZWQgdXNhZ2Ugb2Ygdi1vbmNlIChzZWUgYmVsb3cpXHJcbmxldCBpc0Jsb2NrVHJlZUVuYWJsZWQgPSAxO1xyXG4vKipcclxuICogQmxvY2sgdHJhY2tpbmcgc29tZXRpbWVzIG5lZWRzIHRvIGJlIGRpc2FibGVkLCBmb3IgZXhhbXBsZSBkdXJpbmcgdGhlXHJcbiAqIGNyZWF0aW9uIG9mIGEgdHJlZSB0aGF0IG5lZWRzIHRvIGJlIGNhY2hlZCBieSB2LW9uY2UuIFRoZSBjb21waWxlciBnZW5lcmF0ZXNcclxuICogY29kZSBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIGBgYCBqc1xyXG4gKiBfY2FjaGVbMV0gfHwgKFxyXG4gKiAgIHNldEJsb2NrVHJhY2tpbmcoLTEpLFxyXG4gKiAgIF9jYWNoZVsxXSA9IGNyZWF0ZVZOb2RlKC4uLiksXHJcbiAqICAgc2V0QmxvY2tUcmFja2luZygxKSxcclxuICogICBfY2FjaGVbMV1cclxuICogKVxyXG4gKiBgYGBcclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHNldEJsb2NrVHJhY2tpbmcodmFsdWUpIHtcclxuICAgIGlzQmxvY2tUcmVlRW5hYmxlZCArPSB2YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBzZXR1cEJsb2NrKHZub2RlKSB7XHJcbiAgICAvLyBzYXZlIGN1cnJlbnQgYmxvY2sgY2hpbGRyZW4gb24gdGhlIGJsb2NrIHZub2RlXHJcbiAgICB2bm9kZS5keW5hbWljQ2hpbGRyZW4gPVxyXG4gICAgICAgIGlzQmxvY2tUcmVlRW5hYmxlZCA+IDAgPyBjdXJyZW50QmxvY2sgfHwgRU1QVFlfQVJSIDogbnVsbDtcclxuICAgIC8vIGNsb3NlIGJsb2NrXHJcbiAgICBjbG9zZUJsb2NrKCk7XHJcbiAgICAvLyBhIGJsb2NrIGlzIGFsd2F5cyBnb2luZyB0byBiZSBwYXRjaGVkLCBzbyB0cmFjayBpdCBhcyBhIGNoaWxkIG9mIGl0c1xyXG4gICAgLy8gcGFyZW50IGJsb2NrXHJcbiAgICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJiBjdXJyZW50QmxvY2spIHtcclxuICAgICAgICBjdXJyZW50QmxvY2sucHVzaCh2bm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdm5vZGU7XHJcbn1cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50QmxvY2sodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgc2hhcGVGbGFnKSB7XHJcbiAgICByZXR1cm4gc2V0dXBCbG9jayhjcmVhdGVCYXNlVk5vZGUodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgc2hhcGVGbGFnLCB0cnVlIC8qIGlzQmxvY2sgKi8pKTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIGEgYmxvY2sgcm9vdCB2bm9kZS4gVGFrZXMgdGhlIHNhbWUgZXhhY3QgYXJndW1lbnRzIGFzIGBjcmVhdGVWTm9kZWAuXHJcbiAqIEEgYmxvY2sgcm9vdCBrZWVwcyB0cmFjayBvZiBkeW5hbWljIG5vZGVzIHdpdGhpbiB0aGUgYmxvY2sgaW4gdGhlXHJcbiAqIGBkeW5hbWljQ2hpbGRyZW5gIGFycmF5LlxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQmxvY2sodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcykge1xyXG4gICAgcmV0dXJuIHNldHVwQmxvY2soY3JlYXRlVk5vZGUodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgdHJ1ZSAvKiBpc0Jsb2NrOiBwcmV2ZW50IGEgYmxvY2sgZnJvbSB0cmFja2luZyBpdHNlbGYgKi8pKTtcclxufVxyXG5mdW5jdGlvbiBpc1ZOb2RlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5fX3ZfaXNWTm9kZSA9PT0gdHJ1ZSA6IGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGlzU2FtZVZOb2RlVHlwZShuMSwgbjIpIHtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICBuMi5zaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovICYmXHJcbiAgICAgICAgaG1yRGlydHlDb21wb25lbnRzLmhhcyhuMi50eXBlKSkge1xyXG4gICAgICAgIC8vIEhNUiBvbmx5OiBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGhvdC11cGRhdGVkLCBmb3JjZSBhIHJlbG9hZC5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjEudHlwZSA9PT0gbjIudHlwZSAmJiBuMS5rZXkgPT09IG4yLmtleTtcclxufVxyXG5sZXQgdm5vZGVBcmdzVHJhbnNmb3JtZXI7XHJcbi8qKlxyXG4gKiBJbnRlcm5hbCBBUEkgZm9yIHJlZ2lzdGVyaW5nIGFuIGFyZ3VtZW50cyB0cmFuc2Zvcm0gZm9yIGNyZWF0ZVZOb2RlXHJcbiAqIHVzZWQgZm9yIGNyZWF0aW5nIHN0dWJzIGluIHRoZSB0ZXN0LXV0aWxzXHJcbiAqIEl0IGlzICppbnRlcm5hbCogYnV0IG5lZWRzIHRvIGJlIGV4cG9zZWQgZm9yIHRlc3QtdXRpbHMgdG8gcGljayB1cCBwcm9wZXJcclxuICogdHlwaW5nc1xyXG4gKi9cclxuZnVuY3Rpb24gdHJhbnNmb3JtVk5vZGVBcmdzKHRyYW5zZm9ybWVyKSB7XHJcbiAgICB2bm9kZUFyZ3NUcmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xyXG59XHJcbmNvbnN0IGNyZWF0ZVZOb2RlV2l0aEFyZ3NUcmFuc2Zvcm0gPSAoLi4uYXJncykgPT4ge1xyXG4gICAgcmV0dXJuIF9jcmVhdGVWTm9kZSguLi4odm5vZGVBcmdzVHJhbnNmb3JtZXJcclxuICAgICAgICA/IHZub2RlQXJnc1RyYW5zZm9ybWVyKGFyZ3MsIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSlcclxuICAgICAgICA6IGFyZ3MpKTtcclxufTtcclxuY29uc3QgSW50ZXJuYWxPYmplY3RLZXkgPSBgX192SW50ZXJuYWxgO1xyXG5jb25zdCBub3JtYWxpemVLZXkgPSAoeyBrZXkgfSkgPT4ga2V5ICE9IG51bGwgPyBrZXkgOiBudWxsO1xyXG5jb25zdCBub3JtYWxpemVSZWYgPSAoeyByZWYsIHJlZl9rZXksIHJlZl9mb3IgfSkgPT4ge1xyXG4gICAgcmV0dXJuIChyZWYgIT0gbnVsbFxyXG4gICAgICAgID8gaXNTdHJpbmcocmVmKSB8fCBpc1JlZihyZWYpIHx8IGlzRnVuY3Rpb24ocmVmKVxyXG4gICAgICAgICAgICA/IHsgaTogY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLCByOiByZWYsIGs6IHJlZl9rZXksIGY6ICEhcmVmX2ZvciB9XHJcbiAgICAgICAgICAgIDogcmVmXHJcbiAgICAgICAgOiBudWxsKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlQmFzZVZOb2RlKHR5cGUsIHByb3BzID0gbnVsbCwgY2hpbGRyZW4gPSBudWxsLCBwYXRjaEZsYWcgPSAwLCBkeW5hbWljUHJvcHMgPSBudWxsLCBzaGFwZUZsYWcgPSB0eXBlID09PSBGcmFnbWVudCA/IDAgOiAxIC8qIFNoYXBlRmxhZ3MuRUxFTUVOVCAqLywgaXNCbG9ja05vZGUgPSBmYWxzZSwgbmVlZEZ1bGxDaGlsZHJlbk5vcm1hbGl6YXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgdm5vZGUgPSB7XHJcbiAgICAgICAgX192X2lzVk5vZGU6IHRydWUsXHJcbiAgICAgICAgX192X3NraXA6IHRydWUsXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwcm9wcyxcclxuICAgICAgICBrZXk6IHByb3BzICYmIG5vcm1hbGl6ZUtleShwcm9wcyksXHJcbiAgICAgICAgcmVmOiBwcm9wcyAmJiBub3JtYWxpemVSZWYocHJvcHMpLFxyXG4gICAgICAgIHNjb3BlSWQ6IGN1cnJlbnRTY29wZUlkLFxyXG4gICAgICAgIHNsb3RTY29wZUlkczogbnVsbCxcclxuICAgICAgICBjaGlsZHJlbixcclxuICAgICAgICBjb21wb25lbnQ6IG51bGwsXHJcbiAgICAgICAgc3VzcGVuc2U6IG51bGwsXHJcbiAgICAgICAgc3NDb250ZW50OiBudWxsLFxyXG4gICAgICAgIHNzRmFsbGJhY2s6IG51bGwsXHJcbiAgICAgICAgZGlyczogbnVsbCxcclxuICAgICAgICB0cmFuc2l0aW9uOiBudWxsLFxyXG4gICAgICAgIGVsOiBudWxsLFxyXG4gICAgICAgIGFuY2hvcjogbnVsbCxcclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAgICAgdGFyZ2V0QW5jaG9yOiBudWxsLFxyXG4gICAgICAgIHN0YXRpY0NvdW50OiAwLFxyXG4gICAgICAgIHNoYXBlRmxhZyxcclxuICAgICAgICBwYXRjaEZsYWcsXHJcbiAgICAgICAgZHluYW1pY1Byb3BzLFxyXG4gICAgICAgIGR5bmFtaWNDaGlsZHJlbjogbnVsbCxcclxuICAgICAgICBhcHBDb250ZXh0OiBudWxsXHJcbiAgICB9O1xyXG4gICAgaWYgKG5lZWRGdWxsQ2hpbGRyZW5Ob3JtYWxpemF0aW9uKSB7XHJcbiAgICAgICAgbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuKTtcclxuICAgICAgICAvLyBub3JtYWxpemUgc3VzcGVuc2UgY2hpbGRyZW5cclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgdHlwZS5ub3JtYWxpemUodm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgLy8gY29tcGlsZWQgZWxlbWVudCB2bm9kZSAtIGlmIGNoaWxkcmVuIGlzIHBhc3NlZCwgb25seSBwb3NzaWJsZSB0eXBlcyBhcmVcclxuICAgICAgICAvLyBzdHJpbmcgb3IgQXJyYXkuXHJcbiAgICAgICAgdm5vZGUuc2hhcGVGbGFnIHw9IGlzU3RyaW5nKGNoaWxkcmVuKVxyXG4gICAgICAgICAgICA/IDggLyogU2hhcGVGbGFncy5URVhUX0NISUxEUkVOICovXHJcbiAgICAgICAgICAgIDogMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLztcclxuICAgIH1cclxuICAgIC8vIHZhbGlkYXRlIGtleVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB2bm9kZS5rZXkgIT09IHZub2RlLmtleSkge1xyXG4gICAgICAgIHdhcm4oYFZOb2RlIGNyZWF0ZWQgd2l0aCBpbnZhbGlkIGtleSAoTmFOKS4gVk5vZGUgdHlwZTpgLCB2bm9kZS50eXBlKTtcclxuICAgIH1cclxuICAgIC8vIHRyYWNrIHZub2RlIGZvciBibG9jayB0cmVlXHJcbiAgICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJlxyXG4gICAgICAgIC8vIGF2b2lkIGEgYmxvY2sgbm9kZSBmcm9tIHRyYWNraW5nIGl0c2VsZlxyXG4gICAgICAgICFpc0Jsb2NrTm9kZSAmJlxyXG4gICAgICAgIC8vIGhhcyBjdXJyZW50IHBhcmVudCBibG9ja1xyXG4gICAgICAgIGN1cnJlbnRCbG9jayAmJlxyXG4gICAgICAgIC8vIHByZXNlbmNlIG9mIGEgcGF0Y2ggZmxhZyBpbmRpY2F0ZXMgdGhpcyBub2RlIG5lZWRzIHBhdGNoaW5nIG9uIHVwZGF0ZXMuXHJcbiAgICAgICAgLy8gY29tcG9uZW50IG5vZGVzIGFsc28gc2hvdWxkIGFsd2F5cyBiZSBwYXRjaGVkLCBiZWNhdXNlIGV2ZW4gaWYgdGhlXHJcbiAgICAgICAgLy8gY29tcG9uZW50IGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUsIGl0IG5lZWRzIHRvIHBlcnNpc3QgdGhlIGluc3RhbmNlIG9uIHRvXHJcbiAgICAgICAgLy8gdGhlIG5leHQgdm5vZGUgc28gdGhhdCBpdCBjYW4gYmUgcHJvcGVybHkgdW5tb3VudGVkIGxhdGVyLlxyXG4gICAgICAgICh2bm9kZS5wYXRjaEZsYWcgPiAwIHx8IHNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pICYmXHJcbiAgICAgICAgLy8gdGhlIEVWRU5UUyBmbGFnIGlzIG9ubHkgZm9yIGh5ZHJhdGlvbiBhbmQgaWYgaXQgaXMgdGhlIG9ubHkgZmxhZywgdGhlXHJcbiAgICAgICAgLy8gdm5vZGUgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGR5bmFtaWMgZHVlIHRvIGhhbmRsZXIgY2FjaGluZy5cclxuICAgICAgICB2bm9kZS5wYXRjaEZsYWcgIT09IDMyIC8qIFBhdGNoRmxhZ3MuSFlEUkFURV9FVkVOVFMgKi8pIHtcclxuICAgICAgICBjdXJyZW50QmxvY2sucHVzaCh2bm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdm5vZGU7XHJcbn1cclxuY29uc3QgY3JlYXRlVk5vZGUgPSAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gY3JlYXRlVk5vZGVXaXRoQXJnc1RyYW5zZm9ybSA6IF9jcmVhdGVWTm9kZSk7XHJcbmZ1bmN0aW9uIF9jcmVhdGVWTm9kZSh0eXBlLCBwcm9wcyA9IG51bGwsIGNoaWxkcmVuID0gbnVsbCwgcGF0Y2hGbGFnID0gMCwgZHluYW1pY1Byb3BzID0gbnVsbCwgaXNCbG9ja05vZGUgPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0eXBlIHx8IHR5cGUgPT09IE5VTExfRFlOQU1JQ19DT01QT05FTlQpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICF0eXBlKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYEludmFsaWQgdm5vZGUgdHlwZSB3aGVuIGNyZWF0aW5nIHZub2RlOiAke3R5cGV9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0eXBlID0gQ29tbWVudDtcclxuICAgIH1cclxuICAgIGlmIChpc1ZOb2RlKHR5cGUpKSB7XHJcbiAgICAgICAgLy8gY3JlYXRlVk5vZGUgcmVjZWl2aW5nIGFuIGV4aXN0aW5nIHZub2RlLiBUaGlzIGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxyXG4gICAgICAgIC8vIDxjb21wb25lbnQgOmlzPVwidm5vZGVcIi8+XHJcbiAgICAgICAgLy8gIzIwNzggbWFrZSBzdXJlIHRvIG1lcmdlIHJlZnMgZHVyaW5nIHRoZSBjbG9uZSBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIGl0XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZSh0eXBlLCBwcm9wcywgdHJ1ZSAvKiBtZXJnZVJlZjogdHJ1ZSAqLyk7XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZUNoaWxkcmVuKGNsb25lZCwgY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJiAhaXNCbG9ja05vZGUgJiYgY3VycmVudEJsb2NrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZWQuc2hhcGVGbGFnICYgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrW2N1cnJlbnRCbG9jay5pbmRleE9mKHR5cGUpXSA9IGNsb25lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5wdXNoKGNsb25lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2xvbmVkLnBhdGNoRmxhZyB8PSAtMiAvKiBQYXRjaEZsYWdzLkJBSUwgKi87XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuICAgIC8vIGNsYXNzIGNvbXBvbmVudCBub3JtYWxpemF0aW9uLlxyXG4gICAgaWYgKGlzQ2xhc3NDb21wb25lbnQodHlwZSkpIHtcclxuICAgICAgICB0eXBlID0gdHlwZS5fX3ZjY09wdHM7XHJcbiAgICB9XHJcbiAgICAvLyBjbGFzcyAmIHN0eWxlIG5vcm1hbGl6YXRpb24uXHJcbiAgICBpZiAocHJvcHMpIHtcclxuICAgICAgICAvLyBmb3IgcmVhY3RpdmUgb3IgcHJveHkgb2JqZWN0cywgd2UgbmVlZCB0byBjbG9uZSBpdCB0byBlbmFibGUgbXV0YXRpb24uXHJcbiAgICAgICAgcHJvcHMgPSBndWFyZFJlYWN0aXZlUHJvcHMocHJvcHMpO1xyXG4gICAgICAgIGxldCB7IGNsYXNzOiBrbGFzcywgc3R5bGUgfSA9IHByb3BzO1xyXG4gICAgICAgIGlmIChrbGFzcyAmJiAhaXNTdHJpbmcoa2xhc3MpKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmNsYXNzID0gbm9ybWFsaXplQ2xhc3Moa2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNPYmplY3Qoc3R5bGUpKSB7XHJcbiAgICAgICAgICAgIC8vIHJlYWN0aXZlIHN0YXRlIG9iamVjdHMgbmVlZCB0byBiZSBjbG9uZWQgc2luY2UgdGhleSBhcmUgbGlrZWx5IHRvIGJlXHJcbiAgICAgICAgICAgIC8vIG11dGF0ZWRcclxuICAgICAgICAgICAgaWYgKGlzUHJveHkoc3R5bGUpICYmICFpc0FycmF5KHN0eWxlKSkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGUgPSBleHRlbmQoe30sIHN0eWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wcy5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKHN0eWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBlbmNvZGUgdGhlIHZub2RlIHR5cGUgaW5mb3JtYXRpb24gaW50byBhIGJpdG1hcFxyXG4gICAgY29uc3Qgc2hhcGVGbGFnID0gaXNTdHJpbmcodHlwZSlcclxuICAgICAgICA/IDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovXHJcbiAgICAgICAgOiBpc1N1c3BlbnNlKHR5cGUpXHJcbiAgICAgICAgICAgID8gMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi9cclxuICAgICAgICAgICAgOiBpc1RlbGVwb3J0KHR5cGUpXHJcbiAgICAgICAgICAgICAgICA/IDY0IC8qIFNoYXBlRmxhZ3MuVEVMRVBPUlQgKi9cclxuICAgICAgICAgICAgICAgIDogaXNPYmplY3QodHlwZSlcclxuICAgICAgICAgICAgICAgICAgICA/IDQgLyogU2hhcGVGbGFncy5TVEFURUZVTF9DT01QT05FTlQgKi9cclxuICAgICAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb24odHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAyIC8qIFNoYXBlRmxhZ3MuRlVOQ1RJT05BTF9DT01QT05FTlQgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBzaGFwZUZsYWcgJiA0IC8qIFNoYXBlRmxhZ3MuU1RBVEVGVUxfQ09NUE9ORU5UICovICYmIGlzUHJveHkodHlwZSkpIHtcclxuICAgICAgICB0eXBlID0gdG9SYXcodHlwZSk7XHJcbiAgICAgICAgd2FybihgVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmUgb2JqZWN0LiBUaGlzIGNhbiBgICtcclxuICAgICAgICAgICAgYGxlYWQgdG8gdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIGFuZCBzaG91bGQgYmUgYXZvaWRlZCBieSBgICtcclxuICAgICAgICAgICAgYG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIFxcYG1hcmtSYXdcXGAgb3IgdXNpbmcgXFxgc2hhbGxvd1JlZlxcYCBgICtcclxuICAgICAgICAgICAgYGluc3RlYWQgb2YgXFxgcmVmXFxgLmAsIGBcXG5Db21wb25lbnQgdGhhdCB3YXMgbWFkZSByZWFjdGl2ZTogYCwgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlQmFzZVZOb2RlKHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgcGF0Y2hGbGFnLCBkeW5hbWljUHJvcHMsIHNoYXBlRmxhZywgaXNCbG9ja05vZGUsIHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIGd1YXJkUmVhY3RpdmVQcm9wcyhwcm9wcykge1xyXG4gICAgaWYgKCFwcm9wcylcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc1Byb3h5KHByb3BzKSB8fCBJbnRlcm5hbE9iamVjdEtleSBpbiBwcm9wc1xyXG4gICAgICAgID8gZXh0ZW5kKHt9LCBwcm9wcylcclxuICAgICAgICA6IHByb3BzO1xyXG59XHJcbmZ1bmN0aW9uIGNsb25lVk5vZGUodm5vZGUsIGV4dHJhUHJvcHMsIG1lcmdlUmVmID0gZmFsc2UpIHtcclxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBOT1QgdXNpbmcgc3ByZWFkIG9yIGV4dGVuZCB0byBhdm9pZCB0aGUgcnVudGltZVxyXG4gICAgLy8ga2V5IGVudW1lcmF0aW9uIGNvc3QuXHJcbiAgICBjb25zdCB7IHByb3BzLCByZWYsIHBhdGNoRmxhZywgY2hpbGRyZW4gfSA9IHZub2RlO1xyXG4gICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBleHRyYVByb3BzID8gbWVyZ2VQcm9wcyhwcm9wcyB8fCB7fSwgZXh0cmFQcm9wcykgOiBwcm9wcztcclxuICAgIGNvbnN0IGNsb25lZCA9IHtcclxuICAgICAgICBfX3ZfaXNWTm9kZTogdHJ1ZSxcclxuICAgICAgICBfX3Zfc2tpcDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiB2bm9kZS50eXBlLFxyXG4gICAgICAgIHByb3BzOiBtZXJnZWRQcm9wcyxcclxuICAgICAgICBrZXk6IG1lcmdlZFByb3BzICYmIG5vcm1hbGl6ZUtleShtZXJnZWRQcm9wcyksXHJcbiAgICAgICAgcmVmOiBleHRyYVByb3BzICYmIGV4dHJhUHJvcHMucmVmXHJcbiAgICAgICAgICAgID8gLy8gIzIwNzggaW4gdGhlIGNhc2Ugb2YgPGNvbXBvbmVudCA6aXM9XCJ2bm9kZVwiIHJlZj1cImV4dHJhXCIvPlxyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZub2RlIGl0c2VsZiBhbHJlYWR5IGhhcyBhIHJlZiwgY2xvbmVWTm9kZSB3aWxsIG5lZWQgdG8gbWVyZ2VcclxuICAgICAgICAgICAgICAgIC8vIHRoZSByZWZzIHNvIHRoZSBzaW5nbGUgdm5vZGUgY2FuIGJlIHNldCBvbiBtdWx0aXBsZSByZWZzXHJcbiAgICAgICAgICAgICAgICBtZXJnZVJlZiAmJiByZWZcclxuICAgICAgICAgICAgICAgICAgICA/IGlzQXJyYXkocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlZi5jb25jYXQobm9ybWFsaXplUmVmKGV4dHJhUHJvcHMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtyZWYsIG5vcm1hbGl6ZVJlZihleHRyYVByb3BzKV1cclxuICAgICAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZVJlZihleHRyYVByb3BzKVxyXG4gICAgICAgICAgICA6IHJlZixcclxuICAgICAgICBzY29wZUlkOiB2bm9kZS5zY29wZUlkLFxyXG4gICAgICAgIHNsb3RTY29wZUlkczogdm5vZGUuc2xvdFNjb3BlSWRzLFxyXG4gICAgICAgIGNoaWxkcmVuOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgcGF0Y2hGbGFnID09PSAtMSAvKiBQYXRjaEZsYWdzLkhPSVNURUQgKi8gJiYgaXNBcnJheShjaGlsZHJlbilcclxuICAgICAgICAgICAgPyBjaGlsZHJlbi5tYXAoZGVlcENsb25lVk5vZGUpXHJcbiAgICAgICAgICAgIDogY2hpbGRyZW4sXHJcbiAgICAgICAgdGFyZ2V0OiB2bm9kZS50YXJnZXQsXHJcbiAgICAgICAgdGFyZ2V0QW5jaG9yOiB2bm9kZS50YXJnZXRBbmNob3IsXHJcbiAgICAgICAgc3RhdGljQ291bnQ6IHZub2RlLnN0YXRpY0NvdW50LFxyXG4gICAgICAgIHNoYXBlRmxhZzogdm5vZGUuc2hhcGVGbGFnLFxyXG4gICAgICAgIC8vIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgd2l0aCBleHRyYSBwcm9wcywgd2UgY2FuIG5vIGxvbmdlciBhc3N1bWUgaXRzXHJcbiAgICAgICAgLy8gZXhpc3RpbmcgcGF0Y2ggZmxhZyB0byBiZSByZWxpYWJsZSBhbmQgbmVlZCB0byBhZGQgdGhlIEZVTExfUFJPUFMgZmxhZy5cclxuICAgICAgICAvLyBub3RlOiBwcmVzZXJ2ZSBmbGFnIGZvciBmcmFnbWVudHMgc2luY2UgdGhleSB1c2UgdGhlIGZsYWcgZm9yIGNoaWxkcmVuXHJcbiAgICAgICAgLy8gZmFzdCBwYXRocyBvbmx5LlxyXG4gICAgICAgIHBhdGNoRmxhZzogZXh0cmFQcm9wcyAmJiB2bm9kZS50eXBlICE9PSBGcmFnbWVudFxyXG4gICAgICAgICAgICA/IHBhdGNoRmxhZyA9PT0gLTEgLy8gaG9pc3RlZCBub2RlXHJcbiAgICAgICAgICAgICAgICA/IDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqL1xyXG4gICAgICAgICAgICAgICAgOiBwYXRjaEZsYWcgfCAxNiAvKiBQYXRjaEZsYWdzLkZVTExfUFJPUFMgKi9cclxuICAgICAgICAgICAgOiBwYXRjaEZsYWcsXHJcbiAgICAgICAgZHluYW1pY1Byb3BzOiB2bm9kZS5keW5hbWljUHJvcHMsXHJcbiAgICAgICAgZHluYW1pY0NoaWxkcmVuOiB2bm9kZS5keW5hbWljQ2hpbGRyZW4sXHJcbiAgICAgICAgYXBwQ29udGV4dDogdm5vZGUuYXBwQ29udGV4dCxcclxuICAgICAgICBkaXJzOiB2bm9kZS5kaXJzLFxyXG4gICAgICAgIHRyYW5zaXRpb246IHZub2RlLnRyYW5zaXRpb24sXHJcbiAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIHRlY2huaWNhbGx5IG9ubHkgYmUgbm9uLW51bGwgb24gbW91bnRlZCBWTm9kZXMuIEhvd2V2ZXIsXHJcbiAgICAgICAgLy8gdGhleSAqc2hvdWxkKiBiZSBjb3BpZWQgZm9yIGtlcHQtYWxpdmUgdm5vZGVzLiBTbyB3ZSBqdXN0IGFsd2F5cyBjb3B5XHJcbiAgICAgICAgLy8gdGhlbSBzaW5jZSB0aGVtIGJlaW5nIG5vbi1udWxsIGR1cmluZyBhIG1vdW50IGRvZXNuJ3QgYWZmZWN0IHRoZSBsb2dpYyBhc1xyXG4gICAgICAgIC8vIHRoZXkgd2lsbCBzaW1wbHkgYmUgb3ZlcndyaXR0ZW4uXHJcbiAgICAgICAgY29tcG9uZW50OiB2bm9kZS5jb21wb25lbnQsXHJcbiAgICAgICAgc3VzcGVuc2U6IHZub2RlLnN1c3BlbnNlLFxyXG4gICAgICAgIHNzQ29udGVudDogdm5vZGUuc3NDb250ZW50ICYmIGNsb25lVk5vZGUodm5vZGUuc3NDb250ZW50KSxcclxuICAgICAgICBzc0ZhbGxiYWNrOiB2bm9kZS5zc0ZhbGxiYWNrICYmIGNsb25lVk5vZGUodm5vZGUuc3NGYWxsYmFjayksXHJcbiAgICAgICAgZWw6IHZub2RlLmVsLFxyXG4gICAgICAgIGFuY2hvcjogdm5vZGUuYW5jaG9yXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNsb25lZDtcclxufVxyXG4vKipcclxuICogRGV2IG9ubHksIGZvciBITVIgb2YgaG9pc3RlZCB2bm9kZXMgcmV1c2VkIGluIHYtZm9yXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9pc3N1ZXMvMjAyMlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcENsb25lVk5vZGUodm5vZGUpIHtcclxuICAgIGNvbnN0IGNsb25lZCA9IGNsb25lVk5vZGUodm5vZGUpO1xyXG4gICAgaWYgKGlzQXJyYXkodm5vZGUuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgY2xvbmVkLmNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW4ubWFwKGRlZXBDbG9uZVZOb2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbG9uZWQ7XHJcbn1cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUodGV4dCA9ICcgJywgZmxhZyA9IDApIHtcclxuICAgIHJldHVybiBjcmVhdGVWTm9kZShUZXh0LCBudWxsLCB0ZXh0LCBmbGFnKTtcclxufVxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY1ZOb2RlKGNvbnRlbnQsIG51bWJlck9mTm9kZXMpIHtcclxuICAgIC8vIEEgc3RhdGljIHZub2RlIGNhbiBjb250YWluIG11bHRpcGxlIHN0cmluZ2lmaWVkIGVsZW1lbnRzLCBhbmQgdGhlIG51bWJlclxyXG4gICAgLy8gb2YgZWxlbWVudHMgaXMgbmVjZXNzYXJ5IGZvciBoeWRyYXRpb24uXHJcbiAgICBjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKFN0YXRpYywgbnVsbCwgY29udGVudCk7XHJcbiAgICB2bm9kZS5zdGF0aWNDb3VudCA9IG51bWJlck9mTm9kZXM7XHJcbiAgICByZXR1cm4gdm5vZGU7XHJcbn1cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21tZW50Vk5vZGUodGV4dCA9ICcnLCBcclxuLy8gd2hlbiB1c2VkIGFzIHRoZSB2LWVsc2UgYnJhbmNoLCB0aGUgY29tbWVudCBub2RlIG11c3QgYmUgY3JlYXRlZCBhcyBhXHJcbi8vIGJsb2NrIHRvIGVuc3VyZSBjb3JyZWN0IHVwZGF0ZXMuXHJcbmFzQmxvY2sgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIGFzQmxvY2tcclxuICAgICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlQmxvY2soQ29tbWVudCwgbnVsbCwgdGV4dCkpXHJcbiAgICAgICAgOiBjcmVhdGVWTm9kZShDb21tZW50LCBudWxsLCB0ZXh0KTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVWTm9kZShjaGlsZCkge1xyXG4gICAgaWYgKGNoaWxkID09IG51bGwgfHwgdHlwZW9mIGNoaWxkID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAvLyBlbXB0eSBwbGFjZWhvbGRlclxyXG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShDb21tZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkoY2hpbGQpKSB7XHJcbiAgICAgICAgLy8gZnJhZ21lbnRcclxuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoRnJhZ21lbnQsIG51bGwsIFxyXG4gICAgICAgIC8vICMzNjY2LCBhdm9pZCByZWZlcmVuY2UgcG9sbHV0aW9uIHdoZW4gcmV1c2luZyB2bm9kZVxyXG4gICAgICAgIGNoaWxkLnNsaWNlKCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIC8vIGFscmVhZHkgdm5vZGUsIHRoaXMgc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiBzaW5jZSBjb21waWxlZCB0ZW1wbGF0ZXNcclxuICAgICAgICAvLyBhbHdheXMgcHJvZHVjZSBhbGwtdm5vZGUgY2hpbGRyZW4gYXJyYXlzXHJcbiAgICAgICAgcmV0dXJuIGNsb25lSWZNb3VudGVkKGNoaWxkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIHN0cmluZ3MgYW5kIG51bWJlcnNcclxuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoVGV4dCwgbnVsbCwgU3RyaW5nKGNoaWxkKSk7XHJcbiAgICB9XHJcbn1cclxuLy8gb3B0aW1pemVkIG5vcm1hbGl6YXRpb24gZm9yIHRlbXBsYXRlLWNvbXBpbGVkIHJlbmRlciBmbnNcclxuZnVuY3Rpb24gY2xvbmVJZk1vdW50ZWQoY2hpbGQpIHtcclxuICAgIHJldHVybiBjaGlsZC5lbCA9PT0gbnVsbCB8fCBjaGlsZC5tZW1vID8gY2hpbGQgOiBjbG9uZVZOb2RlKGNoaWxkKTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4pIHtcclxuICAgIGxldCB0eXBlID0gMDtcclxuICAgIGNvbnN0IHsgc2hhcGVGbGFnIH0gPSB2bm9kZTtcclxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgICB0eXBlID0gMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgKDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovIHwgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykpIHtcclxuICAgICAgICAgICAgLy8gTm9ybWFsaXplIHNsb3QgdG8gcGxhaW4gY2hpbGRyZW4gZm9yIHBsYWluIGVsZW1lbnQgYW5kIFRlbGVwb3J0XHJcbiAgICAgICAgICAgIGNvbnN0IHNsb3QgPSBjaGlsZHJlbi5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAoc2xvdCkge1xyXG4gICAgICAgICAgICAgICAgLy8gX2MgbWFya2VyIGlzIGFkZGVkIGJ5IHdpdGhDdHgoKSBpbmRpY2F0aW5nIHRoaXMgaXMgYSBjb21waWxlZCBzbG90XHJcbiAgICAgICAgICAgICAgICBzbG90Ll9jICYmIChzbG90Ll9kID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUsIHNsb3QoKSk7XHJcbiAgICAgICAgICAgICAgICBzbG90Ll9jICYmIChzbG90Ll9kID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHlwZSA9IDMyIC8qIFNoYXBlRmxhZ3MuU0xPVFNfQ0hJTERSRU4gKi87XHJcbiAgICAgICAgICAgIGNvbnN0IHNsb3RGbGFnID0gY2hpbGRyZW4uXztcclxuICAgICAgICAgICAgaWYgKCFzbG90RmxhZyAmJiAhKEludGVybmFsT2JqZWN0S2V5IGluIGNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uX2N0eCA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzbG90RmxhZyA9PT0gMyAvKiBTbG90RmxhZ3MuRk9SV0FSREVEICovICYmIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYSBjaGlsZCBjb21wb25lbnQgcmVjZWl2ZXMgZm9yd2FyZGVkIHNsb3RzIGZyb20gdGhlIHBhcmVudC5cclxuICAgICAgICAgICAgICAgIC8vIGl0cyBzbG90IHR5cGUgaXMgZGV0ZXJtaW5lZCBieSBpdHMgcGFyZW50J3Mgc2xvdCB0eXBlLlxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5zbG90cy5fID09PSAxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5fID0gMSAvKiBTbG90RmxhZ3MuU1RBQkxFICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uXyA9IDIgLyogU2xvdEZsYWdzLkRZTkFNSUMgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUucGF0Y2hGbGFnIHw9IDEwMjQgLyogUGF0Y2hGbGFncy5EWU5BTUlDX1NMT1RTICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbihjaGlsZHJlbikpIHtcclxuICAgICAgICBjaGlsZHJlbiA9IHsgZGVmYXVsdDogY2hpbGRyZW4sIF9jdHg6IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSB9O1xyXG4gICAgICAgIHR5cGUgPSAzMiAvKiBTaGFwZUZsYWdzLlNMT1RTX0NISUxEUkVOICovO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2hpbGRyZW4gPSBTdHJpbmcoY2hpbGRyZW4pO1xyXG4gICAgICAgIC8vIGZvcmNlIHRlbGVwb3J0IGNoaWxkcmVuIHRvIGFycmF5IHNvIGl0IGNhbiBiZSBtb3ZlZCBhcm91bmRcclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykge1xyXG4gICAgICAgICAgICB0eXBlID0gMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLztcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0eXBlID0gOCAvKiBTaGFwZUZsYWdzLlRFWFRfQ0hJTERSRU4gKi87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdm5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIHZub2RlLnNoYXBlRmxhZyB8PSB0eXBlO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlUHJvcHMoLi4uYXJncykge1xyXG4gICAgY29uc3QgcmV0ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0b01lcmdlID0gYXJnc1tpXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0b01lcmdlKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXQuY2xhc3MgIT09IHRvTWVyZ2UuY2xhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXQuY2xhc3MgPSBub3JtYWxpemVDbGFzcyhbcmV0LmNsYXNzLCB0b01lcmdlLmNsYXNzXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXQuc3R5bGUgPSBub3JtYWxpemVTdHlsZShbcmV0LnN0eWxlLCB0b01lcmdlLnN0eWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNPbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJldFtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5jb21pbmcgPSB0b01lcmdlW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmcgJiZcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZyAhPT0gaW5jb21pbmcgJiZcclxuICAgICAgICAgICAgICAgICAgICAhKGlzQXJyYXkoZXhpc3RpbmcpICYmIGV4aXN0aW5nLmluY2x1ZGVzKGluY29taW5nKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IGV4aXN0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBpbmNvbWluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpbmNvbWluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IHRvTWVyZ2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuZnVuY3Rpb24gaW52b2tlVk5vZGVIb29rKGhvb2ssIGluc3RhbmNlLCB2bm9kZSwgcHJldlZOb2RlID0gbnVsbCkge1xyXG4gICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaG9vaywgaW5zdGFuY2UsIDcgLyogRXJyb3JDb2Rlcy5WTk9ERV9IT09LICovLCBbXHJcbiAgICAgICAgdm5vZGUsXHJcbiAgICAgICAgcHJldlZOb2RlXHJcbiAgICBdKTtcclxufVxuXG5jb25zdCBlbXB0eUFwcENvbnRleHQgPSBjcmVhdGVBcHBDb250ZXh0KCk7XHJcbmxldCB1aWQkMSA9IDA7XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlKHZub2RlLCBwYXJlbnQsIHN1c3BlbnNlKSB7XHJcbiAgICBjb25zdCB0eXBlID0gdm5vZGUudHlwZTtcclxuICAgIC8vIGluaGVyaXQgcGFyZW50IGFwcCBjb250ZXh0IC0gb3IgLSBpZiByb290LCBhZG9wdCBmcm9tIHJvb3Qgdm5vZGVcclxuICAgIGNvbnN0IGFwcENvbnRleHQgPSAocGFyZW50ID8gcGFyZW50LmFwcENvbnRleHQgOiB2bm9kZS5hcHBDb250ZXh0KSB8fCBlbXB0eUFwcENvbnRleHQ7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHtcclxuICAgICAgICB1aWQ6IHVpZCQxKyssXHJcbiAgICAgICAgdm5vZGUsXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgYXBwQ29udGV4dCxcclxuICAgICAgICByb290OiBudWxsLFxyXG4gICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgc3ViVHJlZTogbnVsbCxcclxuICAgICAgICBlZmZlY3Q6IG51bGwsXHJcbiAgICAgICAgdXBkYXRlOiBudWxsLFxyXG4gICAgICAgIHNjb3BlOiBuZXcgRWZmZWN0U2NvcGUodHJ1ZSAvKiBkZXRhY2hlZCAqLyksXHJcbiAgICAgICAgcmVuZGVyOiBudWxsLFxyXG4gICAgICAgIHByb3h5OiBudWxsLFxyXG4gICAgICAgIGV4cG9zZWQ6IG51bGwsXHJcbiAgICAgICAgZXhwb3NlUHJveHk6IG51bGwsXHJcbiAgICAgICAgd2l0aFByb3h5OiBudWxsLFxyXG4gICAgICAgIHByb3ZpZGVzOiBwYXJlbnQgPyBwYXJlbnQucHJvdmlkZXMgOiBPYmplY3QuY3JlYXRlKGFwcENvbnRleHQucHJvdmlkZXMpLFxyXG4gICAgICAgIGFjY2Vzc0NhY2hlOiBudWxsLFxyXG4gICAgICAgIHJlbmRlckNhY2hlOiBbXSxcclxuICAgICAgICAvLyBsb2NhbCByZXNvbHZlZCBhc3NldHNcclxuICAgICAgICBjb21wb25lbnRzOiBudWxsLFxyXG4gICAgICAgIGRpcmVjdGl2ZXM6IG51bGwsXHJcbiAgICAgICAgLy8gcmVzb2x2ZWQgcHJvcHMgYW5kIGVtaXRzIG9wdGlvbnNcclxuICAgICAgICBwcm9wc09wdGlvbnM6IG5vcm1hbGl6ZVByb3BzT3B0aW9ucyh0eXBlLCBhcHBDb250ZXh0KSxcclxuICAgICAgICBlbWl0c09wdGlvbnM6IG5vcm1hbGl6ZUVtaXRzT3B0aW9ucyh0eXBlLCBhcHBDb250ZXh0KSxcclxuICAgICAgICAvLyBlbWl0XHJcbiAgICAgICAgZW1pdDogbnVsbCxcclxuICAgICAgICBlbWl0dGVkOiBudWxsLFxyXG4gICAgICAgIC8vIHByb3BzIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBwcm9wc0RlZmF1bHRzOiBFTVBUWV9PQkosXHJcbiAgICAgICAgLy8gaW5oZXJpdEF0dHJzXHJcbiAgICAgICAgaW5oZXJpdEF0dHJzOiB0eXBlLmluaGVyaXRBdHRycyxcclxuICAgICAgICAvLyBzdGF0ZVxyXG4gICAgICAgIGN0eDogRU1QVFlfT0JKLFxyXG4gICAgICAgIGRhdGE6IEVNUFRZX09CSixcclxuICAgICAgICBwcm9wczogRU1QVFlfT0JKLFxyXG4gICAgICAgIGF0dHJzOiBFTVBUWV9PQkosXHJcbiAgICAgICAgc2xvdHM6IEVNUFRZX09CSixcclxuICAgICAgICByZWZzOiBFTVBUWV9PQkosXHJcbiAgICAgICAgc2V0dXBTdGF0ZTogRU1QVFlfT0JKLFxyXG4gICAgICAgIHNldHVwQ29udGV4dDogbnVsbCxcclxuICAgICAgICAvLyBzdXNwZW5zZSByZWxhdGVkXHJcbiAgICAgICAgc3VzcGVuc2UsXHJcbiAgICAgICAgc3VzcGVuc2VJZDogc3VzcGVuc2UgPyBzdXNwZW5zZS5wZW5kaW5nSWQgOiAwLFxyXG4gICAgICAgIGFzeW5jRGVwOiBudWxsLFxyXG4gICAgICAgIGFzeW5jUmVzb2x2ZWQ6IGZhbHNlLFxyXG4gICAgICAgIC8vIGxpZmVjeWNsZSBob29rc1xyXG4gICAgICAgIC8vIG5vdCB1c2luZyBlbnVtcyBoZXJlIGJlY2F1c2UgaXQgcmVzdWx0cyBpbiBjb21wdXRlZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgaXNNb3VudGVkOiBmYWxzZSxcclxuICAgICAgICBpc1VubW91bnRlZDogZmFsc2UsXHJcbiAgICAgICAgaXNEZWFjdGl2YXRlZDogZmFsc2UsXHJcbiAgICAgICAgYmM6IG51bGwsXHJcbiAgICAgICAgYzogbnVsbCxcclxuICAgICAgICBibTogbnVsbCxcclxuICAgICAgICBtOiBudWxsLFxyXG4gICAgICAgIGJ1OiBudWxsLFxyXG4gICAgICAgIHU6IG51bGwsXHJcbiAgICAgICAgdW06IG51bGwsXHJcbiAgICAgICAgYnVtOiBudWxsLFxyXG4gICAgICAgIGRhOiBudWxsLFxyXG4gICAgICAgIGE6IG51bGwsXHJcbiAgICAgICAgcnRnOiBudWxsLFxyXG4gICAgICAgIHJ0YzogbnVsbCxcclxuICAgICAgICBlYzogbnVsbCxcclxuICAgICAgICBzcDogbnVsbFxyXG4gICAgfTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBpbnN0YW5jZS5jdHggPSBjcmVhdGVEZXZSZW5kZXJDb250ZXh0KGluc3RhbmNlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGluc3RhbmNlLmN0eCA9IHsgXzogaW5zdGFuY2UgfTtcclxuICAgIH1cclxuICAgIGluc3RhbmNlLnJvb3QgPSBwYXJlbnQgPyBwYXJlbnQucm9vdCA6IGluc3RhbmNlO1xyXG4gICAgaW5zdGFuY2UuZW1pdCA9IGVtaXQkMS5iaW5kKG51bGwsIGluc3RhbmNlKTtcclxuICAgIC8vIGFwcGx5IGN1c3RvbSBlbGVtZW50IHNwZWNpYWwgaGFuZGxpbmdcclxuICAgIGlmICh2bm9kZS5jZSkge1xyXG4gICAgICAgIHZub2RlLmNlKGluc3RhbmNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxufVxyXG5sZXQgY3VycmVudEluc3RhbmNlID0gbnVsbDtcclxuY29uc3QgZ2V0Q3VycmVudEluc3RhbmNlID0gKCkgPT4gY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcclxuY29uc3Qgc2V0Q3VycmVudEluc3RhbmNlID0gKGluc3RhbmNlKSA9PiB7XHJcbiAgICBjdXJyZW50SW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgIGluc3RhbmNlLnNjb3BlLm9uKCk7XHJcbn07XHJcbmNvbnN0IHVuc2V0Q3VycmVudEluc3RhbmNlID0gKCkgPT4ge1xyXG4gICAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5zY29wZS5vZmYoKTtcclxuICAgIGN1cnJlbnRJbnN0YW5jZSA9IG51bGw7XHJcbn07XHJcbmNvbnN0IGlzQnVpbHRJblRhZyA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnKTtcclxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUsIGNvbmZpZykge1xyXG4gICAgY29uc3QgYXBwSXNOYXRpdmVUYWcgPSBjb25maWcuaXNOYXRpdmVUYWcgfHwgTk87XHJcbiAgICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGFwcElzTmF0aXZlVGFnKG5hbWUpKSB7XHJcbiAgICAgICAgd2FybignRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCBpZDogJyArIG5hbWUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBpbnN0YW5jZS52bm9kZS5zaGFwZUZsYWcgJiA0IC8qIFNoYXBlRmxhZ3MuU1RBVEVGVUxfQ09NUE9ORU5UICovO1xyXG59XHJcbmxldCBpc0luU1NSQ29tcG9uZW50U2V0dXAgPSBmYWxzZTtcclxuZnVuY3Rpb24gc2V0dXBDb21wb25lbnQoaW5zdGFuY2UsIGlzU1NSID0gZmFsc2UpIHtcclxuICAgIGlzSW5TU1JDb21wb25lbnRTZXR1cCA9IGlzU1NSO1xyXG4gICAgY29uc3QgeyBwcm9wcywgY2hpbGRyZW4gfSA9IGluc3RhbmNlLnZub2RlO1xyXG4gICAgY29uc3QgaXNTdGF0ZWZ1bCA9IGlzU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UpO1xyXG4gICAgaW5pdFByb3BzKGluc3RhbmNlLCBwcm9wcywgaXNTdGF0ZWZ1bCwgaXNTU1IpO1xyXG4gICAgaW5pdFNsb3RzKGluc3RhbmNlLCBjaGlsZHJlbik7XHJcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGlzU3RhdGVmdWxcclxuICAgICAgICA/IHNldHVwU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UsIGlzU1NSKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgaXNJblNTUkNvbXBvbmVudFNldHVwID0gZmFsc2U7XHJcbiAgICByZXR1cm4gc2V0dXBSZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gc2V0dXBTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSwgaXNTU1IpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGNvbnN0IENvbXBvbmVudCA9IGluc3RhbmNlLnR5cGU7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgaWYgKENvbXBvbmVudC5uYW1lKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShDb21wb25lbnQubmFtZSwgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQ29tcG9uZW50LmNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhDb21wb25lbnQuY29tcG9uZW50cyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lc1tpXSwgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChDb21wb25lbnQuZGlyZWN0aXZlcykge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKENvbXBvbmVudC5kaXJlY3RpdmVzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQ29tcG9uZW50LmNvbXBpbGVyT3B0aW9ucyAmJiBpc1J1bnRpbWVPbmx5KCkpIHtcclxuICAgICAgICAgICAgd2FybihgXCJjb21waWxlck9wdGlvbnNcIiBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgYnVpbGQgb2YgVnVlIHRoYXQgYCArXHJcbiAgICAgICAgICAgICAgICBgaW5jbHVkZXMgdGhlIHJ1bnRpbWUgY29tcGlsZXIuIFNpbmNlIHlvdSBhcmUgdXNpbmcgYSBydW50aW1lLW9ubHkgYCArXHJcbiAgICAgICAgICAgICAgICBgYnVpbGQsIHRoZSBvcHRpb25zIHNob3VsZCBiZSBwYXNzZWQgdmlhIHlvdXIgYnVpbGQgdG9vbCBjb25maWcgaW5zdGVhZC5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAwLiBjcmVhdGUgcmVuZGVyIHByb3h5IHByb3BlcnR5IGFjY2VzcyBjYWNoZVxyXG4gICAgaW5zdGFuY2UuYWNjZXNzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgLy8gMS4gY3JlYXRlIHB1YmxpYyBpbnN0YW5jZSAvIHJlbmRlciBwcm94eVxyXG4gICAgLy8gYWxzbyBtYXJrIGl0IHJhdyBzbyBpdCdzIG5ldmVyIG9ic2VydmVkXHJcbiAgICBpbnN0YW5jZS5wcm94eSA9IG1hcmtSYXcobmV3IFByb3h5KGluc3RhbmNlLmN0eCwgUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzKSk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgZXhwb3NlUHJvcHNPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gICAgLy8gMi4gY2FsbCBzZXR1cCgpXHJcbiAgICBjb25zdCB7IHNldHVwIH0gPSBDb21wb25lbnQ7XHJcbiAgICBpZiAoc2V0dXApIHtcclxuICAgICAgICBjb25zdCBzZXR1cENvbnRleHQgPSAoaW5zdGFuY2Uuc2V0dXBDb250ZXh0ID1cclxuICAgICAgICAgICAgc2V0dXAubGVuZ3RoID4gMSA/IGNyZWF0ZVNldHVwQ29udGV4dChpbnN0YW5jZSkgOiBudWxsKTtcclxuICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoaW5zdGFuY2UpO1xyXG4gICAgICAgIHBhdXNlVHJhY2tpbmcoKTtcclxuICAgICAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhzZXR1cCwgaW5zdGFuY2UsIDAgLyogRXJyb3JDb2Rlcy5TRVRVUF9GVU5DVElPTiAqLywgWyhwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IHNoYWxsb3dSZWFkb25seShpbnN0YW5jZS5wcm9wcykgOiBpbnN0YW5jZS5wcm9wcywgc2V0dXBDb250ZXh0XSk7XHJcbiAgICAgICAgcmVzZXRUcmFja2luZygpO1xyXG4gICAgICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZShzZXR1cFJlc3VsdCkpIHtcclxuICAgICAgICAgICAgc2V0dXBSZXN1bHQudGhlbih1bnNldEN1cnJlbnRJbnN0YW5jZSwgdW5zZXRDdXJyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBpZiAoaXNTU1IpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgcHJvbWlzZSBzbyBzZXJ2ZXItcmVuZGVyZXIgY2FuIHdhaXQgb24gaXRcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZXR1cFJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNvbHZlZFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNldHVwUmVzdWx0KGluc3RhbmNlLCByZXNvbHZlZFJlc3VsdCwgaXNTU1IpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgaW5zdGFuY2UsIDAgLyogRXJyb3JDb2Rlcy5TRVRVUF9GVU5DVElPTiAqLyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGFzeW5jIHNldHVwIHJldHVybmVkIFByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAvLyBiYWlsIGhlcmUgYW5kIHdhaXQgZm9yIHJlLWVudHJ5LlxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuYXN5bmNEZXAgPSBzZXR1cFJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWluc3RhbmNlLnN1c3BlbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IChfYSA9IENvbXBvbmVudC5uYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnQW5vbnltb3VzJztcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBDb21wb25lbnQgPCR7bmFtZX0+OiBzZXR1cCBmdW5jdGlvbiByZXR1cm5lZCBhIHByb21pc2UsIGJ1dCBubyBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYDxTdXNwZW5zZT4gYm91bmRhcnkgd2FzIGZvdW5kIGluIHRoZSBwYXJlbnQgY29tcG9uZW50IHRyZWUuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgQSBjb21wb25lbnQgd2l0aCBhc3luYyBzZXR1cCgpIG11c3QgYmUgbmVzdGVkIGluIGEgPFN1c3BlbnNlPiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGluIG9yZGVyIHRvIGJlIHJlbmRlcmVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoYW5kbGVTZXR1cFJlc3VsdChpbnN0YW5jZSwgc2V0dXBSZXN1bHQsIGlzU1NSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmaW5pc2hDb21wb25lbnRTZXR1cChpbnN0YW5jZSwgaXNTU1IpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGhhbmRsZVNldHVwUmVzdWx0KGluc3RhbmNlLCBzZXR1cFJlc3VsdCwgaXNTU1IpIHtcclxuICAgIGlmIChpc0Z1bmN0aW9uKHNldHVwUmVzdWx0KSkge1xyXG4gICAgICAgIC8vIHNldHVwIHJldHVybmVkIGFuIGlubGluZSByZW5kZXIgZnVuY3Rpb25cclxuICAgICAgICBpZiAoaW5zdGFuY2UudHlwZS5fX3NzcklubGluZVJlbmRlcikge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgYHNzclJlbmRlcmAgKGNvbXBpbGVkIGJ5IFNGQyBpbmxpbmUgbW9kZSksXHJcbiAgICAgICAgICAgIC8vIHNldCBpdCBhcyBzc3JSZW5kZXIgaW5zdGVhZC5cclxuICAgICAgICAgICAgaW5zdGFuY2Uuc3NyUmVuZGVyID0gc2V0dXBSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIgPSBzZXR1cFJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc09iamVjdChzZXR1cFJlc3VsdCkpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGlzVk5vZGUoc2V0dXBSZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYHNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gYCArXHJcbiAgICAgICAgICAgICAgICBgcmV0dXJuIGEgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldHVwIHJldHVybmVkIGJpbmRpbmdzLlxyXG4gICAgICAgIC8vIGFzc3VtaW5nIGEgcmVuZGVyIGZ1bmN0aW9uIGNvbXBpbGVkIGZyb20gdGVtcGxhdGUgaXMgcHJlc2VudC5cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUgPSBzZXR1cFJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2Uuc2V0dXBTdGF0ZSA9IHByb3h5UmVmcyhzZXR1cFJlc3VsdCk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBleHBvc2VTZXR1cFN0YXRlT25SZW5kZXJDb250ZXh0KGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgc2V0dXBSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHdhcm4oYHNldHVwKCkgc2hvdWxkIHJldHVybiBhbiBvYmplY3QuIFJlY2VpdmVkOiAke3NldHVwUmVzdWx0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHNldHVwUmVzdWx0fWApO1xyXG4gICAgfVxyXG4gICAgZmluaXNoQ29tcG9uZW50U2V0dXAoaW5zdGFuY2UsIGlzU1NSKTtcclxufVxyXG5sZXQgY29tcGlsZTtcclxubGV0IGluc3RhbGxXaXRoUHJveHk7XHJcbi8qKlxyXG4gKiBGb3IgcnVudGltZS1kb20gdG8gcmVnaXN0ZXIgdGhlIGNvbXBpbGVyLlxyXG4gKiBOb3RlIHRoZSBleHBvcnRlZCBtZXRob2QgdXNlcyBhbnkgdG8gYXZvaWQgZC50cyByZWx5aW5nIG9uIHRoZSBjb21waWxlciB0eXBlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlZ2lzdGVyUnVudGltZUNvbXBpbGVyKF9jb21waWxlKSB7XHJcbiAgICBjb21waWxlID0gX2NvbXBpbGU7XHJcbiAgICBpbnN0YWxsV2l0aFByb3h5ID0gaSA9PiB7XHJcbiAgICAgICAgaWYgKGkucmVuZGVyLl9yYykge1xyXG4gICAgICAgICAgICBpLndpdGhQcm94eSA9IG5ldyBQcm94eShpLmN0eCwgUnVudGltZUNvbXBpbGVkUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIGRldiBvbmx5XHJcbmNvbnN0IGlzUnVudGltZU9ubHkgPSAoKSA9PiAhY29tcGlsZTtcclxuZnVuY3Rpb24gZmluaXNoQ29tcG9uZW50U2V0dXAoaW5zdGFuY2UsIGlzU1NSLCBza2lwT3B0aW9ucykge1xyXG4gICAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcclxuICAgIC8vIHRlbXBsYXRlIC8gcmVuZGVyIGZ1bmN0aW9uIG5vcm1hbGl6YXRpb25cclxuICAgIC8vIGNvdWxkIGJlIGFscmVhZHkgc2V0IHdoZW4gcmV0dXJuZWQgZnJvbSBzZXR1cCgpXHJcbiAgICBpZiAoIWluc3RhbmNlLnJlbmRlcikge1xyXG4gICAgICAgIC8vIG9ubHkgZG8gb24tdGhlLWZseSBjb21waWxlIGlmIG5vdCBpbiBTU1IgLSBTU1Igb24tdGhlLWZseSBjb21waWxhdGlvblxyXG4gICAgICAgIC8vIGlzIGRvbmUgYnkgc2VydmVyLXJlbmRlcmVyXHJcbiAgICAgICAgaWYgKCFpc1NTUiAmJiBjb21waWxlICYmICFDb21wb25lbnQucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gQ29tcG9uZW50LnRlbXBsYXRlO1xyXG4gICAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzQ3VzdG9tRWxlbWVudCwgY29tcGlsZXJPcHRpb25zIH0gPSBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGVsaW1pdGVycywgY29tcGlsZXJPcHRpb25zOiBjb21wb25lbnRDb21waWxlck9wdGlvbnMgfSA9IENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsQ29tcGlsZXJPcHRpb25zID0gZXh0ZW5kKGV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNDdXN0b21FbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlcnNcclxuICAgICAgICAgICAgICAgIH0sIGNvbXBpbGVyT3B0aW9ucyksIGNvbXBvbmVudENvbXBpbGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBDb21wb25lbnQucmVuZGVyID0gY29tcGlsZSh0ZW1wbGF0ZSwgZmluYWxDb21waWxlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2UucmVuZGVyID0gKENvbXBvbmVudC5yZW5kZXIgfHwgTk9PUCk7XHJcbiAgICAgICAgLy8gZm9yIHJ1bnRpbWUtY29tcGlsZWQgcmVuZGVyIGZ1bmN0aW9ucyB1c2luZyBgd2l0aGAgYmxvY2tzLCB0aGUgcmVuZGVyXHJcbiAgICAgICAgLy8gcHJveHkgdXNlZCBuZWVkcyBhIGRpZmZlcmVudCBgaGFzYCBoYW5kbGVyIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBhbmRcclxuICAgICAgICAvLyBhbHNvIG9ubHkgYWxsb3dzIGEgd2hpdGVsaXN0IG9mIGdsb2JhbHMgdG8gZmFsbHRocm91Z2guXHJcbiAgICAgICAgaWYgKGluc3RhbGxXaXRoUHJveHkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbFdpdGhQcm94eShpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gc3VwcG9ydCBmb3IgMi54IG9wdGlvbnNcclxuICAgIGlmIChfX1ZVRV9PUFRJT05TX0FQSV9fICYmICEoZmFsc2UgKSkge1xyXG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICAgICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgICAgIGFwcGx5T3B0aW9ucyhpbnN0YW5jZSk7XHJcbiAgICAgICAgcmVzZXRUcmFja2luZygpO1xyXG4gICAgICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICB9XHJcbiAgICAvLyB3YXJuIG1pc3NpbmcgdGVtcGxhdGUvcmVuZGVyXHJcbiAgICAvLyB0aGUgcnVudGltZSBjb21waWxhdGlvbiBvZiB0ZW1wbGF0ZSBpbiBTU1IgaXMgZG9uZSBieSBzZXJ2ZXItcmVuZGVyXHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFDb21wb25lbnQucmVuZGVyICYmIGluc3RhbmNlLnJlbmRlciA9PT0gTk9PUCAmJiAhaXNTU1IpIHtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgICAgICBpZiAoIWNvbXBpbGUgJiYgQ29tcG9uZW50LnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYENvbXBvbmVudCBwcm92aWRlZCB0ZW1wbGF0ZSBvcHRpb24gYnV0IGAgK1xyXG4gICAgICAgICAgICAgICAgYHJ1bnRpbWUgY29tcGlsYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIG9mIFZ1ZS5gICtcclxuICAgICAgICAgICAgICAgIChgIENvbmZpZ3VyZSB5b3VyIGJ1bmRsZXIgdG8gYWxpYXMgXCJ2dWVcIiB0byBcInZ1ZS9kaXN0L3Z1ZS5lc20tYnVuZGxlci5qc1wiLmBcclxuICAgICAgICAgICAgICAgICAgICApIC8qIHNob3VsZCBub3QgaGFwcGVuICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdhcm4oYENvbXBvbmVudCBpcyBtaXNzaW5nIHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbi5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQXR0cnNQcm94eShpbnN0YW5jZSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eShpbnN0YW5jZS5hdHRycywgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGdldCh0YXJnZXQsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrKGluc3RhbmNlLCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sICckYXR0cnMnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0KCkge1xyXG4gICAgICAgICAgICAgICAgd2Fybihgc2V0dXBDb250ZXh0LmF0dHJzIGlzIHJlYWRvbmx5LmApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWxldGVQcm9wZXJ0eSgpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYHNldHVwQ29udGV4dC5hdHRycyBpcyByZWFkb25seS5gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgZ2V0KHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgICAgICAgICB0cmFjayhpbnN0YW5jZSwgXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLCAnJGF0dHJzJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXR1cENvbnRleHQoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IGV4cG9zZSA9IGV4cG9zZWQgPT4ge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaW5zdGFuY2UuZXhwb3NlZCkge1xyXG4gICAgICAgICAgICB3YXJuKGBleHBvc2UoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc2V0dXAoKS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2UuZXhwb3NlZCA9IGV4cG9zZWQgfHwge307XHJcbiAgICB9O1xyXG4gICAgbGV0IGF0dHJzO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIC8vIFdlIHVzZSBnZXR0ZXJzIGluIGRldiBpbiBjYXNlIGxpYnMgbGlrZSB0ZXN0LXV0aWxzIG92ZXJ3cml0ZSBpbnN0YW5jZVxyXG4gICAgICAgIC8vIHByb3BlcnRpZXMgKG92ZXJ3cml0ZXMgc2hvdWxkIG5vdCBiZSBkb25lIGluIHByb2QpXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xyXG4gICAgICAgICAgICBnZXQgYXR0cnMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0cnMgfHwgKGF0dHJzID0gY3JlYXRlQXR0cnNQcm94eShpbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXQgc2xvdHMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhbGxvd1JlYWRvbmx5KGluc3RhbmNlLnNsb3RzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0IGVtaXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGV2ZW50LCAuLi5hcmdzKSA9PiBpbnN0YW5jZS5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhwb3NlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBnZXQgYXR0cnMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0cnMgfHwgKGF0dHJzID0gY3JlYXRlQXR0cnNQcm94eShpbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzbG90czogaW5zdGFuY2Uuc2xvdHMsXHJcbiAgICAgICAgICAgIGVtaXQ6IGluc3RhbmNlLmVtaXQsXHJcbiAgICAgICAgICAgIGV4cG9zZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0RXhwb3NlUHJveHkoaW5zdGFuY2UpIHtcclxuICAgIGlmIChpbnN0YW5jZS5leHBvc2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIChpbnN0YW5jZS5leHBvc2VQcm94eSB8fFxyXG4gICAgICAgICAgICAoaW5zdGFuY2UuZXhwb3NlUHJveHkgPSBuZXcgUHJveHkocHJveHlSZWZzKG1hcmtSYXcoaW5zdGFuY2UuZXhwb3NlZCkpLCB7XHJcbiAgICAgICAgICAgICAgICBnZXQodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBwdWJsaWNQcm9wZXJ0aWVzTWFwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWJsaWNQcm9wZXJ0aWVzTWFwW2tleV0oaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpKTtcclxuICAgIH1cclxufVxyXG5jb25zdCBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xyXG5jb25zdCBjbGFzc2lmeSA9IChzdHIpID0+IHN0ci5yZXBsYWNlKGNsYXNzaWZ5UkUsIGMgPT4gYy50b1VwcGVyQ2FzZSgpKS5yZXBsYWNlKC9bLV9dL2csICcnKTtcclxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQsIGluY2x1ZGVJbmZlcnJlZCA9IHRydWUpIHtcclxuICAgIHJldHVybiBpc0Z1bmN0aW9uKENvbXBvbmVudClcclxuICAgICAgICA/IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZVxyXG4gICAgICAgIDogQ29tcG9uZW50Lm5hbWUgfHwgKGluY2x1ZGVJbmZlcnJlZCAmJiBDb21wb25lbnQuX19uYW1lKTtcclxufVxyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG5mdW5jdGlvbiBmb3JtYXRDb21wb25lbnROYW1lKGluc3RhbmNlLCBDb21wb25lbnQsIGlzUm9vdCA9IGZhbHNlKSB7XHJcbiAgICBsZXQgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KTtcclxuICAgIGlmICghbmFtZSAmJiBDb21wb25lbnQuX19maWxlKSB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBDb21wb25lbnQuX19maWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLlxcdyskLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBtYXRjaFsxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIW5hbWUgJiYgaW5zdGFuY2UgJiYgaW5zdGFuY2UucGFyZW50KSB7XHJcbiAgICAgICAgLy8gdHJ5IHRvIGluZmVyIHRoZSBuYW1lIGJhc2VkIG9uIHJldmVyc2UgcmVzb2x1dGlvblxyXG4gICAgICAgIGNvbnN0IGluZmVyRnJvbVJlZ2lzdHJ5ID0gKHJlZ2lzdHJ5KSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnlba2V5XSA9PT0gQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbmFtZSA9XHJcbiAgICAgICAgICAgIGluZmVyRnJvbVJlZ2lzdHJ5KGluc3RhbmNlLmNvbXBvbmVudHMgfHxcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnBhcmVudC50eXBlLmNvbXBvbmVudHMpIHx8IGluZmVyRnJvbVJlZ2lzdHJ5KGluc3RhbmNlLmFwcENvbnRleHQuY29tcG9uZW50cyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZSA/IGNsYXNzaWZ5KG5hbWUpIDogaXNSb290ID8gYEFwcGAgOiBgQW5vbnltb3VzYDtcclxufVxyXG5mdW5jdGlvbiBpc0NsYXNzQ29tcG9uZW50KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSkgJiYgJ19fdmNjT3B0cycgaW4gdmFsdWU7XHJcbn1cblxuY29uc3QgY29tcHV0ZWQgPSAoKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zKSA9PiB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICByZXR1cm4gY29tcHV0ZWQkMShnZXR0ZXJPck9wdGlvbnMsIGRlYnVnT3B0aW9ucywgaXNJblNTUkNvbXBvbmVudFNldHVwKTtcclxufSk7XG5cbi8vIGRldiBvbmx5XHJcbmNvbnN0IHdhcm5SdW50aW1lVXNhZ2UgPSAobWV0aG9kKSA9PiB3YXJuKGAke21ldGhvZH0oKSBpcyBhIGNvbXBpbGVyLWhpbnQgaGVscGVyIHRoYXQgaXMgb25seSB1c2FibGUgaW5zaWRlIGAgK1xyXG4gICAgYDxzY3JpcHQgc2V0dXA+IG9mIGEgc2luZ2xlIGZpbGUgY29tcG9uZW50LiBJdHMgYXJndW1lbnRzIHNob3VsZCBiZSBgICtcclxuICAgIGBjb21waWxlZCBhd2F5IGFuZCBwYXNzaW5nIGl0IGF0IHJ1bnRpbWUgaGFzIG5vIGVmZmVjdC5gKTtcclxuLy8gaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gZGVmaW5lUHJvcHMoKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lUHJvcHNgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbi8vIGltcGxlbWVudGF0aW9uXHJcbmZ1bmN0aW9uIGRlZmluZUVtaXRzKCkge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIHdhcm5SdW50aW1lVXNhZ2UoYGRlZmluZUVtaXRzYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4vKipcclxuICogVnVlIGA8c2NyaXB0IHNldHVwPmAgY29tcGlsZXIgbWFjcm8gZm9yIGRlY2xhcmluZyBhIGNvbXBvbmVudCdzIGV4cG9zZWRcclxuICogaW5zdGFuY2UgcHJvcGVydGllcyB3aGVuIGl0IGlzIGFjY2Vzc2VkIGJ5IGEgcGFyZW50IGNvbXBvbmVudCB2aWEgdGVtcGxhdGVcclxuICogcmVmcy5cclxuICpcclxuICogYDxzY3JpcHQgc2V0dXA+YCBjb21wb25lbnRzIGFyZSBjbG9zZWQgYnkgZGVmYXVsdCAtIGkuZS4gdmFyaWFibGVzIGluc2lkZVxyXG4gKiB0aGUgYDxzY3JpcHQgc2V0dXA+YCBzY29wZSBpcyBub3QgZXhwb3NlZCB0byBwYXJlbnQgdW5sZXNzIGV4cGxpY2l0bHkgZXhwb3NlZFxyXG4gKiB2aWEgYGRlZmluZUV4cG9zZWAuXHJcbiAqXHJcbiAqIFRoaXMgaXMgb25seSB1c2FibGUgaW5zaWRlIGA8c2NyaXB0IHNldHVwPmAsIGlzIGNvbXBpbGVkIGF3YXkgaW4gdGhlXHJcbiAqIG91dHB1dCBhbmQgc2hvdWxkICoqbm90KiogYmUgYWN0dWFsbHkgY2FsbGVkIGF0IHJ1bnRpbWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZpbmVFeHBvc2UoZXhwb3NlZCkge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIHdhcm5SdW50aW1lVXNhZ2UoYGRlZmluZUV4cG9zZWApO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBWdWUgYDxzY3JpcHQgc2V0dXA+YCBjb21waWxlciBtYWNybyBmb3IgcHJvdmlkaW5nIHByb3BzIGRlZmF1bHQgdmFsdWVzIHdoZW5cclxuICogdXNpbmcgdHlwZS1iYXNlZCBgZGVmaW5lUHJvcHNgIGRlY2xhcmF0aW9uLlxyXG4gKlxyXG4gKiBFeGFtcGxlIHVzYWdlOlxyXG4gKiBgYGB0c1xyXG4gKiB3aXRoRGVmYXVsdHMoZGVmaW5lUHJvcHM8e1xyXG4gKiAgIHNpemU/OiBudW1iZXJcclxuICogICBsYWJlbHM/OiBzdHJpbmdbXVxyXG4gKiB9PigpLCB7XHJcbiAqICAgc2l6ZTogMyxcclxuICogICBsYWJlbHM6ICgpID0+IFsnZGVmYXVsdCBsYWJlbCddXHJcbiAqIH0pXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGlzIGlzIG9ubHkgdXNhYmxlIGluc2lkZSBgPHNjcmlwdCBzZXR1cD5gLCBpcyBjb21waWxlZCBhd2F5IGluIHRoZSBvdXRwdXRcclxuICogYW5kIHNob3VsZCAqKm5vdCoqIGJlIGFjdHVhbGx5IGNhbGxlZCBhdCBydW50aW1lLlxyXG4gKi9cclxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHByb3BzLCBkZWZhdWx0cykge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIHdhcm5SdW50aW1lVXNhZ2UoYHdpdGhEZWZhdWx0c2ApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuZnVuY3Rpb24gdXNlU2xvdHMoKSB7XHJcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLnNsb3RzO1xyXG59XHJcbmZ1bmN0aW9uIHVzZUF0dHJzKCkge1xyXG4gICAgcmV0dXJuIGdldENvbnRleHQoKS5hdHRycztcclxufVxyXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xyXG4gICAgY29uc3QgaSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaSkge1xyXG4gICAgICAgIHdhcm4oYHVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaS5zZXR1cENvbnRleHQgfHwgKGkuc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KGkpKTtcclxufVxyXG4vKipcclxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgZGVmYXVsdCBkZWNsYXJhdGlvbnMuIEltcG9ydGVkIGJ5IGNvbXBpbGVkIGNvZGVcclxuICogb25seS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5mdW5jdGlvbiBtZXJnZURlZmF1bHRzKHJhdywgZGVmYXVsdHMpIHtcclxuICAgIGNvbnN0IHByb3BzID0gaXNBcnJheShyYXcpXHJcbiAgICAgICAgPyByYXcucmVkdWNlKChub3JtYWxpemVkLCBwKSA9PiAoKG5vcm1hbGl6ZWRbcF0gPSB7fSksIG5vcm1hbGl6ZWQpLCB7fSlcclxuICAgICAgICA6IHJhdztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0gcHJvcHNba2V5XTtcclxuICAgICAgICBpZiAob3B0KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdCkgfHwgaXNGdW5jdGlvbihvcHQpKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wc1trZXldID0geyB0eXBlOiBvcHQsIGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdC5kZWZhdWx0ID0gZGVmYXVsdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvcHQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHsgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgcHJvcHMgZGVmYXVsdCBrZXkgXCIke2tleX1cIiBoYXMgbm8gY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbi5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gY3JlYXRlIGEgcHJveHkgZm9yIHRoZSByZXN0IGVsZW1lbnQgd2hlbiBkZXN0cnVjdHVyaW5nIHByb3BzIHdpdGhcclxuICogZGVmaW5lUHJvcHMoKS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVQcm9wc1Jlc3RQcm94eShwcm9wcywgZXhjbHVkZWRLZXlzKSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XHJcbiAgICAgICAgaWYgKCFleGNsdWRlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCBrZXksIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHByb3BzW2tleV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG4vKipcclxuICogYDxzY3JpcHQgc2V0dXA+YCBoZWxwZXIgZm9yIHBlcnNpc3RpbmcgdGhlIGN1cnJlbnQgaW5zdGFuY2UgY29udGV4dCBvdmVyXHJcbiAqIGFzeW5jL2F3YWl0IGZsb3dzLlxyXG4gKlxyXG4gKiBgQHZ1ZS9jb21waWxlci1zZmNgIGNvbnZlcnRzIHRoZSBmb2xsb3dpbmc6XHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIGNvbnN0IHggPSBhd2FpdCBmb28oKVxyXG4gKiBgYGBcclxuICpcclxuICogaW50bzpcclxuICpcclxuICogYGBgdHNcclxuICogbGV0IF9fdGVtcCwgX19yZXN0b3JlXHJcbiAqIGNvbnN0IHggPSAoKFtfX3RlbXAsIF9fcmVzdG9yZV0gPSB3aXRoQXN5bmNDb250ZXh0KCgpID0+IGZvbygpKSksX190ZW1wPWF3YWl0IF9fdGVtcCxfX3Jlc3RvcmUoKSxfX3RlbXApXHJcbiAqIGBgYFxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmZ1bmN0aW9uIHdpdGhBc3luY0NvbnRleHQoZ2V0QXdhaXRhYmxlKSB7XHJcbiAgICBjb25zdCBjdHggPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWN0eCkge1xyXG4gICAgICAgIHdhcm4oYHdpdGhBc3luY0NvbnRleHQgY2FsbGVkIHdpdGhvdXQgYWN0aXZlIGN1cnJlbnQgaW5zdGFuY2UuIGAgK1xyXG4gICAgICAgICAgICBgVGhpcyBpcyBsaWtlbHkgYSBidWcuYCk7XHJcbiAgICB9XHJcbiAgICBsZXQgYXdhaXRhYmxlID0gZ2V0QXdhaXRhYmxlKCk7XHJcbiAgICB1bnNldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgaWYgKGlzUHJvbWlzZShhd2FpdGFibGUpKSB7XHJcbiAgICAgICAgYXdhaXRhYmxlID0gYXdhaXRhYmxlLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoY3R4KTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBbYXdhaXRhYmxlLCAoKSA9PiBzZXRDdXJyZW50SW5zdGFuY2UoY3R4KV07XHJcbn1cblxuLy8gQWN0dWFsIGltcGxlbWVudGF0aW9uXHJcbmZ1bmN0aW9uIGgodHlwZSwgcHJvcHNPckNoaWxkcmVuLCBjaGlsZHJlbikge1xyXG4gICAgY29uc3QgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICBpZiAobCA9PT0gMikge1xyXG4gICAgICAgIGlmIChpc09iamVjdChwcm9wc09yQ2hpbGRyZW4pICYmICFpc0FycmF5KHByb3BzT3JDaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgLy8gc2luZ2xlIHZub2RlIHdpdGhvdXQgcHJvcHNcclxuICAgICAgICAgICAgaWYgKGlzVk5vZGUocHJvcHNPckNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG51bGwsIFtwcm9wc09yQ2hpbGRyZW5dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBwcm9wcyB3aXRob3V0IGNoaWxkcmVuXHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wc09yQ2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gb21pdCBwcm9wc1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgbnVsbCwgcHJvcHNPckNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAobCA+IDMpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsID09PSAzICYmIGlzVk5vZGUoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIHByb3BzT3JDaGlsZHJlbiwgY2hpbGRyZW4pO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHNzckNvbnRleHRLZXkgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHNzckNvbnRleHRgIDogYGApO1xyXG5jb25zdCB1c2VTU1JDb250ZXh0ID0gKCkgPT4ge1xyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IGluamVjdChzc3JDb250ZXh0S2V5KTtcclxuICAgICAgICBpZiAoIWN0eCkge1xyXG4gICAgICAgICAgICB3YXJuKGBTZXJ2ZXIgcmVuZGVyaW5nIGNvbnRleHQgbm90IHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gb25seSBjYWxsIGAgK1xyXG4gICAgICAgICAgICAgICAgYHVzZVNTUkNvbnRleHQoKSBjb25kaXRpb25hbGx5IGluIHRoZSBzZXJ2ZXIgYnVpbGQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdHg7XHJcbiAgICB9XHJcbn07XG5cbmZ1bmN0aW9uIGlzU2hhbGxvdyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqL10pO1xyXG59XG5cbmZ1bmN0aW9uIGluaXRDdXN0b21Gb3JtYXR0ZXIoKSB7XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cclxuICAgIGlmICghKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdnVlU3R5bGUgPSB7IHN0eWxlOiAnY29sb3I6IzNiYTc3NicgfTtcclxuICAgIGNvbnN0IG51bWJlclN0eWxlID0geyBzdHlsZTogJ2NvbG9yOiMwYjFiYzknIH07XHJcbiAgICBjb25zdCBzdHJpbmdTdHlsZSA9IHsgc3R5bGU6ICdjb2xvcjojYjYyZTI0JyB9O1xyXG4gICAgY29uc3Qga2V5d29yZFN0eWxlID0geyBzdHlsZTogJ2NvbG9yOiM5ZDI4OGMnIH07XHJcbiAgICAvLyBjdXN0b20gZm9ybWF0dGVyIGZvciBDaHJvbWVcclxuICAgIC8vIGh0dHBzOi8vd3d3Lm1hdHR6ZXVuZXJ0LmNvbS8yMDE2LzAyLzE5L2N1c3RvbS1jaHJvbWUtZGV2dG9vbHMtb2JqZWN0LWZvcm1hdHRlcnMuaHRtbFxyXG4gICAgY29uc3QgZm9ybWF0dGVyID0ge1xyXG4gICAgICAgIGhlYWRlcihvYmopIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBhbHNvIGZvcm1hdCBDb21wb25lbnRQdWJsaWNJbnN0YW5jZSAmIGN0eC5zbG90cy9hdHRycyBpbiBzZXR1cFxyXG4gICAgICAgICAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvYmouX19pc1Z1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnZGl2JywgdnVlU3R5bGUsIGBWdWVJbnN0YW5jZWBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmKG9iaikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICAgWydzcGFuJywgdnVlU3R5bGUsIGdlblJlZkZsYWcob2JqKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgJzwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFZhbHVlKG9iai52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgYD5gXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUob2JqKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICBbJ3NwYW4nLCB2dWVTdHlsZSwgaXNTaGFsbG93KG9iaikgPyAnU2hhbGxvd1JlYWN0aXZlJyA6ICdSZWFjdGl2ZSddLFxyXG4gICAgICAgICAgICAgICAgICAgICc8JyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRWYWx1ZShvYmopLFxyXG4gICAgICAgICAgICAgICAgICAgIGA+JHtpc1JlYWRvbmx5KG9iaikgPyBgIChyZWFkb25seSlgIDogYGB9YFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlYWRvbmx5KG9iaikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICAgWydzcGFuJywgdnVlU3R5bGUsIGlzU2hhbGxvdyhvYmopID8gJ1NoYWxsb3dSZWFkb25seScgOiAnUmVhZG9ubHknXSxcclxuICAgICAgICAgICAgICAgICAgICAnPCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0VmFsdWUob2JqKSxcclxuICAgICAgICAgICAgICAgICAgICAnPidcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYXNCb2R5KG9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9iai5fX2lzVnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keShvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmouX19pc1Z1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5mb3JtYXRJbnN0YW5jZShvYmouJClcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0SW5zdGFuY2UoaW5zdGFuY2UpIHtcclxuICAgICAgICBjb25zdCBibG9ja3MgPSBbXTtcclxuICAgICAgICBpZiAoaW5zdGFuY2UudHlwZS5wcm9wcyAmJiBpbnN0YW5jZS5wcm9wcykge1xyXG4gICAgICAgICAgICBibG9ja3MucHVzaChjcmVhdGVJbnN0YW5jZUJsb2NrKCdwcm9wcycsIHRvUmF3KGluc3RhbmNlLnByb3BzKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5zdGFuY2Uuc2V0dXBTdGF0ZSAhPT0gRU1QVFlfT0JKKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soJ3NldHVwJywgaW5zdGFuY2Uuc2V0dXBTdGF0ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5zdGFuY2UuZGF0YSAhPT0gRU1QVFlfT0JKKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soJ2RhdGEnLCB0b1JhdyhpbnN0YW5jZS5kYXRhKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb21wdXRlZCA9IGV4dHJhY3RLZXlzKGluc3RhbmNlLCAnY29tcHV0ZWQnKTtcclxuICAgICAgICBpZiAoY29tcHV0ZWQpIHtcclxuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jaygnY29tcHV0ZWQnLCBjb21wdXRlZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbmplY3RlZCA9IGV4dHJhY3RLZXlzKGluc3RhbmNlLCAnaW5qZWN0Jyk7XHJcbiAgICAgICAgaWYgKGluamVjdGVkKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soJ2luamVjdGVkJywgaW5qZWN0ZWQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmxvY2tzLnB1c2goW1xyXG4gICAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICdzcGFuJyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZToga2V5d29yZFN0eWxlLnN0eWxlICsgJztvcGFjaXR5OjAuNjYnXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJyQgKGludGVybmFsKTogJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBbJ29iamVjdCcsIHsgb2JqZWN0OiBpbnN0YW5jZSB9XVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHJldHVybiBibG9ja3M7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZUJsb2NrKHR5cGUsIHRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV4dGVuZCh7fSwgdGFyZ2V0KTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ3NwYW4nLCB7fV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICB7IHN0eWxlOiAnbGluZS1oZWlnaHQ6MS4yNWVtO21hcmdpbi1ib3R0b206MC42ZW0nIH0sXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiAnY29sb3I6IzQ3NjU4MidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0eXBlXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiAncGFkZGluZy1sZWZ0OjEuMjVlbSdcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyh0YXJnZXQpLm1hcChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgWydzcGFuJywga2V5d29yZFN0eWxlLCBrZXkgKyAnOiAnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0VmFsdWUodGFyZ2V0W2tleV0sIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKHYsIGFzUmF3ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnc3BhbicsIG51bWJlclN0eWxlLCB2XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ3NwYW4nLCBzdHJpbmdTdHlsZSwgSlNPTi5zdHJpbmdpZnkodildO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ3NwYW4nLCBrZXl3b3JkU3R5bGUsIHZdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gWydvYmplY3QnLCB7IG9iamVjdDogYXNSYXcgPyB0b1Jhdyh2KSA6IHYgfV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gWydzcGFuJywgc3RyaW5nU3R5bGUsIFN0cmluZyh2KV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZXh0cmFjdEtleXMoaW5zdGFuY2UsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBDb21wID0gaW5zdGFuY2UudHlwZTtcclxuICAgICAgICBpZiAoaXNGdW5jdGlvbihDb21wKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZCA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluc3RhbmNlLmN0eCkge1xyXG4gICAgICAgICAgICBpZiAoaXNLZXlPZlR5cGUoQ29tcCwga2V5LCB0eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgZXh0cmFjdGVkW2tleV0gPSBpbnN0YW5jZS5jdHhba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0cmFjdGVkO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaXNLZXlPZlR5cGUoQ29tcCwga2V5LCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0cyA9IENvbXBbdHlwZV07XHJcbiAgICAgICAgaWYgKChpc0FycmF5KG9wdHMpICYmIG9wdHMuaW5jbHVkZXMoa2V5KSkgfHxcclxuICAgICAgICAgICAgKGlzT2JqZWN0KG9wdHMpICYmIGtleSBpbiBvcHRzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKENvbXAuZXh0ZW5kcyAmJiBpc0tleU9mVHlwZShDb21wLmV4dGVuZHMsIGtleSwgdHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChDb21wLm1peGlucyAmJiBDb21wLm1peGlucy5zb21lKG0gPT4gaXNLZXlPZlR5cGUobSwga2V5LCB0eXBlKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZ2VuUmVmRmxhZyh2KSB7XHJcbiAgICAgICAgaWYgKGlzU2hhbGxvdyh2KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYFNoYWxsb3dSZWZgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodi5lZmZlY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBDb21wdXRlZFJlZmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgUmVmYDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cuZGV2dG9vbHNGb3JtYXR0ZXJzKSB7XHJcbiAgICAgICAgd2luZG93LmRldnRvb2xzRm9ybWF0dGVycy5wdXNoKGZvcm1hdHRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB3aW5kb3cuZGV2dG9vbHNGb3JtYXR0ZXJzID0gW2Zvcm1hdHRlcl07XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gd2l0aE1lbW8obWVtbywgcmVuZGVyLCBjYWNoZSwgaW5kZXgpIHtcclxuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlW2luZGV4XTtcclxuICAgIGlmIChjYWNoZWQgJiYgaXNNZW1vU2FtZShjYWNoZWQsIG1lbW8pKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldCA9IHJlbmRlcigpO1xyXG4gICAgLy8gc2hhbGxvdyBjbG9uZVxyXG4gICAgcmV0Lm1lbW8gPSBtZW1vLnNsaWNlKCk7XHJcbiAgICByZXR1cm4gKGNhY2hlW2luZGV4XSA9IHJldCk7XHJcbn1cclxuZnVuY3Rpb24gaXNNZW1vU2FtZShjYWNoZWQsIG1lbW8pIHtcclxuICAgIGNvbnN0IHByZXYgPSBjYWNoZWQubWVtbztcclxuICAgIGlmIChwcmV2Lmxlbmd0aCAhPSBtZW1vLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKHByZXZbaV0sIG1lbW9baV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBtYWtlIHN1cmUgdG8gbGV0IHBhcmVudCBibG9jayB0cmFjayBpdCB3aGVuIHJldHVybmluZyBjYWNoZWRcclxuICAgIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmIGN1cnJlbnRCbG9jaykge1xyXG4gICAgICAgIGN1cnJlbnRCbG9jay5wdXNoKGNhY2hlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxuXG4vLyBDb3JlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuY29uc3QgdmVyc2lvbiA9IFwiMy4yLjM4XCI7XHJcbmNvbnN0IF9zc3JVdGlscyA9IHtcclxuICAgIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlLFxyXG4gICAgc2V0dXBDb21wb25lbnQsXHJcbiAgICByZW5kZXJDb21wb25lbnRSb290LFxyXG4gICAgc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlLFxyXG4gICAgaXNWTm9kZSxcclxuICAgIG5vcm1hbGl6ZVZOb2RlXHJcbn07XHJcbi8qKlxyXG4gKiBTU1IgdXRpbHMgZm9yIFxcQHZ1ZS9zZXJ2ZXItcmVuZGVyZXIuIE9ubHkgZXhwb3NlZCBpbiBzc3ItcG9zc2libGUgYnVpbGRzLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IHNzclV0aWxzID0gKF9zc3JVdGlscyApO1xyXG4vKipcclxuICogQGludGVybmFsIG9ubHkgZXhwb3NlZCBpbiBjb21wYXQgYnVpbGRzXHJcbiAqL1xyXG5jb25zdCByZXNvbHZlRmlsdGVyID0gbnVsbDtcclxuLyoqXHJcbiAqIEBpbnRlcm5hbCBvbmx5IGV4cG9zZWQgaW4gY29tcGF0IGJ1aWxkcy5cclxuICovXHJcbmNvbnN0IGNvbXBhdFV0aWxzID0gKG51bGwpO1xuXG5leHBvcnQgeyBCYXNlVHJhbnNpdGlvbiwgQ29tbWVudCwgRnJhZ21lbnQsIEtlZXBBbGl2ZSwgU3RhdGljLCBTdXNwZW5zZSwgVGVsZXBvcnQsIFRleHQsIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nLCBjYWxsV2l0aEVycm9ySGFuZGxpbmcsIGNsb25lVk5vZGUsIGNvbXBhdFV0aWxzLCBjb21wdXRlZCwgY3JlYXRlQmxvY2ssIGNyZWF0ZUNvbW1lbnRWTm9kZSwgY3JlYXRlRWxlbWVudEJsb2NrLCBjcmVhdGVCYXNlVk5vZGUgYXMgY3JlYXRlRWxlbWVudFZOb2RlLCBjcmVhdGVIeWRyYXRpb25SZW5kZXJlciwgY3JlYXRlUHJvcHNSZXN0UHJveHksIGNyZWF0ZVJlbmRlcmVyLCBjcmVhdGVTbG90cywgY3JlYXRlU3RhdGljVk5vZGUsIGNyZWF0ZVRleHRWTm9kZSwgY3JlYXRlVk5vZGUsIGRlZmluZUFzeW5jQ29tcG9uZW50LCBkZWZpbmVDb21wb25lbnQsIGRlZmluZUVtaXRzLCBkZWZpbmVFeHBvc2UsIGRlZmluZVByb3BzLCBkZXZ0b29scywgZ2V0Q3VycmVudEluc3RhbmNlLCBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4sIGd1YXJkUmVhY3RpdmVQcm9wcywgaCwgaGFuZGxlRXJyb3IsIGluaXRDdXN0b21Gb3JtYXR0ZXIsIGluamVjdCwgaXNNZW1vU2FtZSwgaXNSdW50aW1lT25seSwgaXNWTm9kZSwgbWVyZ2VEZWZhdWx0cywgbWVyZ2VQcm9wcywgbmV4dFRpY2ssIG9uQWN0aXZhdGVkLCBvbkJlZm9yZU1vdW50LCBvbkJlZm9yZVVubW91bnQsIG9uQmVmb3JlVXBkYXRlLCBvbkRlYWN0aXZhdGVkLCBvbkVycm9yQ2FwdHVyZWQsIG9uTW91bnRlZCwgb25SZW5kZXJUcmFja2VkLCBvblJlbmRlclRyaWdnZXJlZCwgb25TZXJ2ZXJQcmVmZXRjaCwgb25Vbm1vdW50ZWQsIG9uVXBkYXRlZCwgb3BlbkJsb2NrLCBwb3BTY29wZUlkLCBwcm92aWRlLCBwdXNoU2NvcGVJZCwgcXVldWVQb3N0Rmx1c2hDYiwgcmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIsIHJlbmRlckxpc3QsIHJlbmRlclNsb3QsIHJlc29sdmVDb21wb25lbnQsIHJlc29sdmVEaXJlY3RpdmUsIHJlc29sdmVEeW5hbWljQ29tcG9uZW50LCByZXNvbHZlRmlsdGVyLCByZXNvbHZlVHJhbnNpdGlvbkhvb2tzLCBzZXRCbG9ja1RyYWNraW5nLCBzZXREZXZ0b29sc0hvb2ssIHNldFRyYW5zaXRpb25Ib29rcywgc3NyQ29udGV4dEtleSwgc3NyVXRpbHMsIHRvSGFuZGxlcnMsIHRyYW5zZm9ybVZOb2RlQXJncywgdXNlQXR0cnMsIHVzZVNTUkNvbnRleHQsIHVzZVNsb3RzLCB1c2VUcmFuc2l0aW9uU3RhdGUsIHZlcnNpb24sIHdhcm4sIHdhdGNoLCB3YXRjaEVmZmVjdCwgd2F0Y2hQb3N0RWZmZWN0LCB3YXRjaFN5bmNFZmZlY3QsIHdpdGhBc3luY0NvbnRleHQsIHdpdGhDdHgsIHdpdGhEZWZhdWx0cywgd2l0aERpcmVjdGl2ZXMsIHdpdGhNZW1vLCB3aXRoU2NvcGVJZCB9O1xuIiwiaW1wb3J0IHsgY2FtZWxpemUsIHdhcm4sIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nLCBkZWZpbmVDb21wb25lbnQsIG5leHRUaWNrLCBjcmVhdGVWTm9kZSwgZ2V0Q3VycmVudEluc3RhbmNlLCB3YXRjaFBvc3RFZmZlY3QsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIEZyYWdtZW50LCBTdGF0aWMsIGgsIEJhc2VUcmFuc2l0aW9uLCB1c2VUcmFuc2l0aW9uU3RhdGUsIG9uVXBkYXRlZCwgdG9SYXcsIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbiwgc2V0VHJhbnNpdGlvbkhvb2tzLCByZXNvbHZlVHJhbnNpdGlvbkhvb2tzLCBjcmVhdGVSZW5kZXJlciwgaXNSdW50aW1lT25seSwgY3JlYXRlSHlkcmF0aW9uUmVuZGVyZXIgfSBmcm9tICdAdnVlL3J1bnRpbWUtY29yZSc7XG5leHBvcnQgKiBmcm9tICdAdnVlL3J1bnRpbWUtY29yZSc7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNBcnJheSwgaHlwaGVuYXRlLCBjYXBpdGFsaXplLCBpc1NwZWNpYWxCb29sZWFuQXR0ciwgaW5jbHVkZUJvb2xlYW5BdHRyLCBpc09uLCBpc01vZGVsTGlzdGVuZXIsIGlzRnVuY3Rpb24sIHRvTnVtYmVyLCBjYW1lbGl6ZSBhcyBjYW1lbGl6ZSQxLCBleHRlbmQsIEVNUFRZX09CSiwgaXNPYmplY3QsIGludm9rZUFycmF5Rm5zLCBsb29zZUluZGV4T2YsIGlzU2V0LCBsb29zZUVxdWFsLCBpc0hUTUxUYWcsIGlzU1ZHVGFnIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5jb25zdCBzdmdOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XHJcbmNvbnN0IGRvYyA9ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiBudWxsKTtcclxuY29uc3QgdGVtcGxhdGVDb250YWluZXIgPSBkb2MgJiYgLyojX19QVVJFX18qLyBkb2MuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcclxuY29uc3Qgbm9kZU9wcyA9IHtcclxuICAgIGluc2VydDogKGNoaWxkLCBwYXJlbnQsIGFuY2hvcikgPT4ge1xyXG4gICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIGFuY2hvciB8fCBudWxsKTtcclxuICAgIH0sXHJcbiAgICByZW1vdmU6IGNoaWxkID0+IHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlRWxlbWVudDogKHRhZywgaXNTVkcsIGlzLCBwcm9wcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsID0gaXNTVkdcclxuICAgICAgICAgICAgPyBkb2MuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCB0YWcpXHJcbiAgICAgICAgICAgIDogZG9jLmNyZWF0ZUVsZW1lbnQodGFnLCBpcyA/IHsgaXMgfSA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgaWYgKHRhZyA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMgJiYgcHJvcHMubXVsdGlwbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgcHJvcHMubXVsdGlwbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlVGV4dDogdGV4dCA9PiBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCksXHJcbiAgICBjcmVhdGVDb21tZW50OiB0ZXh0ID0+IGRvYy5jcmVhdGVDb21tZW50KHRleHQpLFxyXG4gICAgc2V0VGV4dDogKG5vZGUsIHRleHQpID0+IHtcclxuICAgICAgICBub2RlLm5vZGVWYWx1ZSA9IHRleHQ7XHJcbiAgICB9LFxyXG4gICAgc2V0RWxlbWVudFRleHQ6IChlbCwgdGV4dCkgPT4ge1xyXG4gICAgICAgIGVsLnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIH0sXHJcbiAgICBwYXJlbnROb2RlOiBub2RlID0+IG5vZGUucGFyZW50Tm9kZSxcclxuICAgIG5leHRTaWJsaW5nOiBub2RlID0+IG5vZGUubmV4dFNpYmxpbmcsXHJcbiAgICBxdWVyeVNlbGVjdG9yOiBzZWxlY3RvciA9PiBkb2MucXVlcnlTZWxlY3RvcihzZWxlY3RvciksXHJcbiAgICBzZXRTY29wZUlkKGVsLCBpZCkge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShpZCwgJycpO1xyXG4gICAgfSxcclxuICAgIGNsb25lTm9kZShlbCkge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IGVsLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAvLyAjMzA3MlxyXG4gICAgICAgIC8vIC0gaW4gYHBhdGNoRE9NUHJvcGAsIHdlIHN0b3JlIHRoZSBhY3R1YWwgdmFsdWUgaW4gdGhlIGBlbC5fdmFsdWVgIHByb3BlcnR5LlxyXG4gICAgICAgIC8vIC0gbm9ybWFsbHksIGVsZW1lbnRzIHVzaW5nIGA6dmFsdWVgIGJpbmRpbmdzIHdpbGwgbm90IGJlIGhvaXN0ZWQsIGJ1dCBpZlxyXG4gICAgICAgIC8vICAgdGhlIGJvdW5kIHZhbHVlIGlzIGEgY29uc3RhbnQsIGUuZy4gYDp2YWx1ZT1cInRydWVcImAgLSB0aGV5IGRvIGdldFxyXG4gICAgICAgIC8vICAgaG9pc3RlZC5cclxuICAgICAgICAvLyAtIGluIHByb2R1Y3Rpb24sIGhvaXN0ZWQgbm9kZXMgYXJlIGNsb25lZCB3aGVuIHN1YnNlcXVlbnQgaW5zZXJ0cywgYnV0XHJcbiAgICAgICAgLy8gICBjbG9uZU5vZGUoKSBkb2VzIG5vdCBjb3B5IHRoZSBjdXN0b20gcHJvcGVydHkgd2UgYXR0YWNoZWQuXHJcbiAgICAgICAgLy8gLSBUaGlzIG1heSBuZWVkIHRvIGFjY291bnQgZm9yIG90aGVyIGN1c3RvbSBET00gcHJvcGVydGllcyB3ZSBhdHRhY2ggdG9cclxuICAgICAgICAvLyAgIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIGBfdmFsdWVgIGluIHRoZSBmdXR1cmUuXHJcbiAgICAgICAgaWYgKGBfdmFsdWVgIGluIGVsKSB7XHJcbiAgICAgICAgICAgIGNsb25lZC5fdmFsdWUgPSBlbC5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9LFxyXG4gICAgLy8gX19VTlNBRkVfX1xyXG4gICAgLy8gUmVhc29uOiBpbm5lckhUTUwuXHJcbiAgICAvLyBTdGF0aWMgY29udGVudCBoZXJlIGNhbiBvbmx5IGNvbWUgZnJvbSBjb21waWxlZCB0ZW1wbGF0ZXMuXHJcbiAgICAvLyBBcyBsb25nIGFzIHRoZSB1c2VyIG9ubHkgdXNlcyB0cnVzdGVkIHRlbXBsYXRlcywgdGhpcyBpcyBzYWZlLlxyXG4gICAgaW5zZXJ0U3RhdGljQ29udGVudChjb250ZW50LCBwYXJlbnQsIGFuY2hvciwgaXNTVkcsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICAvLyA8cGFyZW50PiBiZWZvcmUgfCBmaXJzdCAuLi4gbGFzdCB8IGFuY2hvciA8L3BhcmVudD5cclxuICAgICAgICBjb25zdCBiZWZvcmUgPSBhbmNob3IgPyBhbmNob3IucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZDtcclxuICAgICAgICAvLyAjNTMwOCBjYW4gb25seSB0YWtlIGNhY2hlZCBwYXRoIGlmOlxyXG4gICAgICAgIC8vIC0gaGFzIGEgc2luZ2xlIHJvb3Qgbm9kZVxyXG4gICAgICAgIC8vIC0gbmV4dFNpYmxpbmcgaW5mbyBpcyBzdGlsbCBhdmFpbGFibGVcclxuICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0ID09PSBlbmQgfHwgc3RhcnQubmV4dFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgIC8vIGNhY2hlZFxyXG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShzdGFydC5jbG9uZU5vZGUodHJ1ZSksIGFuY2hvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCB8fCAhKHN0YXJ0ID0gc3RhcnQubmV4dFNpYmxpbmcpKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmcmVzaCBpbnNlcnRcclxuICAgICAgICAgICAgdGVtcGxhdGVDb250YWluZXIuaW5uZXJIVE1MID0gaXNTVkcgPyBgPHN2Zz4ke2NvbnRlbnR9PC9zdmc+YCA6IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVDb250YWluZXIuY29udGVudDtcclxuICAgICAgICAgICAgaWYgKGlzU1ZHKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgb3V0ZXIgc3ZnIHdyYXBwZXJcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0ZW1wbGF0ZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHdyYXBwZXIuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLmFwcGVuZENoaWxkKHdyYXBwZXIuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHRlbXBsYXRlLCBhbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAvLyBmaXJzdFxyXG4gICAgICAgICAgICBiZWZvcmUgPyBiZWZvcmUubmV4dFNpYmxpbmcgOiBwYXJlbnQuZmlyc3RDaGlsZCxcclxuICAgICAgICAgICAgLy8gbGFzdFxyXG4gICAgICAgICAgICBhbmNob3IgPyBhbmNob3IucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbn07XG5cbi8vIGNvbXBpbGVyIHNob3VsZCBub3JtYWxpemUgY2xhc3MgKyA6Y2xhc3MgYmluZGluZ3Mgb24gdGhlIHNhbWUgZWxlbWVudFxyXG4vLyBpbnRvIGEgc2luZ2xlIGJpbmRpbmcgWydzdGF0aWNDbGFzcycsIGR5bmFtaWNdXHJcbmZ1bmN0aW9uIHBhdGNoQ2xhc3MoZWwsIHZhbHVlLCBpc1NWRykge1xyXG4gICAgLy8gZGlyZWN0bHkgc2V0dGluZyBjbGFzc05hbWUgc2hvdWxkIGJlIGZhc3RlciB0aGFuIHNldEF0dHJpYnV0ZSBpbiB0aGVvcnlcclxuICAgIC8vIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBkdXJpbmcgYSB0cmFuc2l0aW9uLCB0YWtlIHRoZSB0ZW1wb3JhcnkgdHJhbnNpdGlvblxyXG4gICAgLy8gY2xhc3NlcyBpbnRvIGFjY291bnQuXHJcbiAgICBjb25zdCB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl92dGM7XHJcbiAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMpIHtcclxuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA/IFt2YWx1ZSwgLi4udHJhbnNpdGlvbkNsYXNzZXNdIDogWy4uLnRyYW5zaXRpb25DbGFzc2VzXSkuam9pbignICcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1NWRykge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBlbC5jbGFzc05hbWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBwYXRjaFN0eWxlKGVsLCBwcmV2LCBuZXh0KSB7XHJcbiAgICBjb25zdCBzdHlsZSA9IGVsLnN0eWxlO1xyXG4gICAgY29uc3QgaXNDc3NTdHJpbmcgPSBpc1N0cmluZyhuZXh0KTtcclxuICAgIGlmIChuZXh0ICYmICFpc0Nzc1N0cmluZykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5leHQpIHtcclxuICAgICAgICAgICAgc2V0U3R5bGUoc3R5bGUsIGtleSwgbmV4dFtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZXYgJiYgIWlzU3RyaW5nKHByZXYpKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByZXYpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0W2tleV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFN0eWxlKHN0eWxlLCBrZXksICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcclxuICAgICAgICBpZiAoaXNDc3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYgIT09IG5leHQpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlLmNzc1RleHQgPSBuZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByZXYpIHtcclxuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbmRpY2F0ZXMgdGhhdCB0aGUgYGRpc3BsYXlgIG9mIHRoZSBlbGVtZW50IGlzIGNvbnRyb2xsZWQgYnkgYHYtc2hvd2AsXHJcbiAgICAgICAgLy8gc28gd2UgYWx3YXlzIGtlZXAgdGhlIGN1cnJlbnQgYGRpc3BsYXlgIHZhbHVlIHJlZ2FyZGxlc3Mgb2YgdGhlIGBzdHlsZWBcclxuICAgICAgICAvLyB2YWx1ZSwgdGh1cyBoYW5kaW5nIG92ZXIgY29udHJvbCB0byBgdi1zaG93YC5cclxuICAgICAgICBpZiAoJ192b2QnIGluIGVsKSB7XHJcbiAgICAgICAgICAgIHN0eWxlLmRpc3BsYXkgPSBjdXJyZW50RGlzcGxheTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuY29uc3QgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcclxuZnVuY3Rpb24gc2V0U3R5bGUoc3R5bGUsIG5hbWUsIHZhbCkge1xyXG4gICAgaWYgKGlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIHZhbC5mb3JFYWNoKHYgPT4gc2V0U3R5bGUoc3R5bGUsIG5hbWUsIHYpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT0gbnVsbClcclxuICAgICAgICAgICAgdmFsID0gJyc7XHJcbiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnLS0nKSkge1xyXG4gICAgICAgICAgICAvLyBjdXN0b20gcHJvcGVydHkgZGVmaW5pdGlvblxyXG4gICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlZml4ZWQgPSBhdXRvUHJlZml4KHN0eWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gIWltcG9ydGFudFxyXG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKHByZWZpeGVkKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbcHJlZml4ZWRdID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IHByZWZpeGVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XHJcbmNvbnN0IHByZWZpeENhY2hlID0ge307XHJcbmZ1bmN0aW9uIGF1dG9QcmVmaXgoc3R5bGUsIHJhd05hbWUpIHtcclxuICAgIGNvbnN0IGNhY2hlZCA9IHByZWZpeENhY2hlW3Jhd05hbWVdO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjYWNoZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgbmFtZSA9IGNhbWVsaXplKHJhd05hbWUpO1xyXG4gICAgaWYgKG5hbWUgIT09ICdmaWx0ZXInICYmIG5hbWUgaW4gc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gKHByZWZpeENhY2hlW3Jhd05hbWVdID0gbmFtZSk7XHJcbiAgICB9XHJcbiAgICBuYW1lID0gY2FwaXRhbGl6ZShuYW1lKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwcmVmaXhlZCA9IHByZWZpeGVzW2ldICsgbmFtZTtcclxuICAgICAgICBpZiAocHJlZml4ZWQgaW4gc3R5bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChwcmVmaXhDYWNoZVtyYXdOYW1lXSA9IHByZWZpeGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmF3TmFtZTtcclxufVxuXG5jb25zdCB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xyXG5mdW5jdGlvbiBwYXRjaEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzU1ZHLCBpbnN0YW5jZSkge1xyXG4gICAgaWYgKGlzU1ZHICYmIGtleS5zdGFydHNXaXRoKCd4bGluazonKSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleS5zbGljZSg2LCBrZXkubGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBub3RlIHdlIGFyZSBvbmx5IGNoZWNraW5nIGJvb2xlYW4gYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYVxyXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZG9tIHByb3Agb2YgdGhlIHNhbWUgbmFtZSBoZXJlLlxyXG4gICAgICAgIGNvbnN0IGlzQm9vbGVhbiA9IGlzU3BlY2lhbEJvb2xlYW5BdHRyKGtleSk7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgKGlzQm9vbGVhbiAmJiAhaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBpc0Jvb2xlYW4gPyAnJyA6IHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLy8gX19VTlNBRkVfX1xyXG4vLyBmdW5jdGlvbnMuIFRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciB1c2luZyB0aGVtIHdpdGggb25seSB0cnVzdGVkIGNvbnRlbnQuXHJcbmZ1bmN0aW9uIHBhdGNoRE9NUHJvcChlbCwga2V5LCB2YWx1ZSwgXHJcbi8vIHRoZSBmb2xsb3dpbmcgYXJncyBhcmUgcGFzc2VkIG9ubHkgZHVlIHRvIHBvdGVudGlhbCBpbm5lckhUTUwvdGV4dENvbnRlbnRcclxuLy8gb3ZlcnJpZGluZyBleGlzdGluZyBWTm9kZXMsIGluIHdoaWNoIGNhc2UgdGhlIG9sZCB0cmVlIG11c3QgYmUgcHJvcGVybHlcclxuLy8gdW5tb3VudGVkLlxyXG5wcmV2Q2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbikge1xyXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgfHwga2V5ID09PSAndGV4dENvbnRlbnQnKSB7XHJcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xyXG4gICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4ocHJldkNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxba2V5XSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiZcclxuICAgICAgICBlbC50YWdOYW1lICE9PSAnUFJPR1JFU1MnICYmXHJcbiAgICAgICAgLy8gY3VzdG9tIGVsZW1lbnRzIG1heSB1c2UgX3ZhbHVlIGludGVybmFsbHlcclxuICAgICAgICAhZWwudGFnTmFtZS5pbmNsdWRlcygnLScpKSB7XHJcbiAgICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcclxuICAgICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxyXG4gICAgICAgIGVsLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XHJcbiAgICAgICAgaWYgKGVsLnZhbHVlICE9PSBuZXdWYWx1ZSB8fFxyXG4gICAgICAgICAgICAvLyAjNDk1NjogYWx3YXlzIHNldCBmb3IgT1BUSU9OIGVsZW1lbnRzIGJlY2F1c2UgaXRzIHZhbHVlIGZhbGxzIGJhY2sgdG9cclxuICAgICAgICAgICAgLy8gdGV4dENvbnRlbnQgaWYgbm8gdmFsdWUgYXR0cmlidXRlIGlzIHByZXNlbnQuIEFuZCBzZXR0aW5nIC52YWx1ZSBmb3JcclxuICAgICAgICAgICAgLy8gT1BUSU9OIGhhcyBubyBzaWRlIGVmZmVjdFxyXG4gICAgICAgICAgICBlbC50YWdOYW1lID09PSAnT1BUSU9OJykge1xyXG4gICAgICAgICAgICBlbC52YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG5lZWRSZW1vdmUgPSBmYWxzZTtcclxuICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZWxba2V5XTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gPHNlbGVjdCBtdWx0aXBsZT4gY29tcGlsZXMgdG8geyBtdWx0aXBsZTogJycgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IGluY2x1ZGVCb29sZWFuQXR0cih2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IG51bGwgJiYgdHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgLy8gZS5nLiA8ZGl2IDppZD1cIm51bGxcIj5cclxuICAgICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICAgICAgbmVlZFJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gPGltZyA6d2lkdGg9XCJudWxsXCI+XHJcbiAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBzb21lIElETCBhdHRyIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAsIGUuZy4gaW5wdXQuc2l6ZSA9IDAgLT4gZXJyb3JcclxuICAgICAgICAgICAgdmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBuZWVkUmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzb21lIHByb3BlcnRpZXMgcGVyZm9ybSB2YWx1ZSB2YWxpZGF0aW9uIGFuZCB0aHJvdyxcclxuICAgIC8vIHNvbWUgcHJvcGVydGllcyBoYXMgZ2V0dGVyLCBubyBzZXR0ZXIsIHdpbGwgZXJyb3IgaW4gJ3VzZSBzdHJpY3QnXHJcbiAgICAvLyBlZy4gPHNlbGVjdCA6dHlwZT1cIm51bGxcIj48L3NlbGVjdD4gPHNlbGVjdCA6d2lsbFZhbGlkYXRlPVwibnVsbFwiPjwvc2VsZWN0PlxyXG4gICAgdHJ5IHtcclxuICAgICAgICBlbFtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgRmFpbGVkIHNldHRpbmcgcHJvcCBcIiR7a2V5fVwiIG9uIDwke2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKX0+OiBgICtcclxuICAgICAgICAgICAgICAgIGB2YWx1ZSAke3ZhbHVlfSBpcyBpbnZhbGlkLmAsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5lZWRSZW1vdmUgJiYgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XHJcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cclxuY29uc3QgW19nZXROb3csIHNraXBUaW1lc3RhbXBDaGVja10gPSAvKiNfX1BVUkVfXyovICgoKSA9PiB7XHJcbiAgICBsZXQgX2dldE5vdyA9IERhdGUubm93O1xyXG4gICAgbGV0IHNraXBUaW1lc3RhbXBDaGVjayA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQgZXZlbnQgdGltZXN0YW1wIHRoZSBicm93c2VyIGlzIHVzaW5nLiBBbm5veWluZ2x5LCB0aGVcclxuICAgICAgICAvLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xyXG4gICAgICAgIC8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxyXG4gICAgICAgIC8vIHNhbWUgdGltZXN0YW1wIHR5cGUgd2hlbiBzYXZpbmcgdGhlIGZsdXNoIHRpbWVzdGFtcC5cclxuICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcCkge1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgbG93LXJlcyB0aW1lc3RhbXAgd2hpY2ggaXMgYmlnZ2VyIHRoYW4gdGhlIGV2ZW50IHRpbWVzdGFtcFxyXG4gICAgICAgICAgICAvLyAod2hpY2ggaXMgZXZhbHVhdGVkIEFGVEVSKSBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxyXG4gICAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lcnMgYXMgd2VsbC5cclxuICAgICAgICAgICAgX2dldE5vdyA9IHBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIzM0ODU6IEZpcmVmb3ggPD0gNTMgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25cclxuICAgICAgICAvLyBhbmQgZG9lcyBub3QgZmlyZSBtaWNyb3Rhc2tzIGluIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24sIHNvIHNhZmUgdG8gZXhjbHVkZS5cclxuICAgICAgICBjb25zdCBmZk1hdGNoID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcclxuICAgICAgICBza2lwVGltZXN0YW1wQ2hlY2sgPSAhIShmZk1hdGNoICYmIE51bWJlcihmZk1hdGNoWzFdKSA8PSA1Myk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW19nZXROb3csIHNraXBUaW1lc3RhbXBDaGVja107XHJcbn0pKCk7XHJcbi8vIFRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiByZXBlYXRlZGx5IGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCksIHdlIGNhY2hlXHJcbi8vIGFuZCB1c2UgdGhlIHNhbWUgdGltZXN0YW1wIGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzIGF0dGFjaGVkIGluIHRoZSBzYW1lIHRpY2suXHJcbmxldCBjYWNoZWROb3cgPSAwO1xyXG5jb25zdCBwID0gLyojX19QVVJFX18qLyBQcm9taXNlLnJlc29sdmUoKTtcclxuY29uc3QgcmVzZXQgPSAoKSA9PiB7XHJcbiAgICBjYWNoZWROb3cgPSAwO1xyXG59O1xyXG5jb25zdCBnZXROb3cgPSAoKSA9PiBjYWNoZWROb3cgfHwgKHAudGhlbihyZXNldCksIChjYWNoZWROb3cgPSBfZ2V0Tm93KCkpKTtcclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWwsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XHJcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcclxufVxyXG5mdW5jdGlvbiBwYXRjaEV2ZW50KGVsLCByYXdOYW1lLCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgaW5zdGFuY2UgPSBudWxsKSB7XHJcbiAgICAvLyB2ZWkgPSB2dWUgZXZlbnQgaW52b2tlcnNcclxuICAgIGNvbnN0IGludm9rZXJzID0gZWwuX3ZlaSB8fCAoZWwuX3ZlaSA9IHt9KTtcclxuICAgIGNvbnN0IGV4aXN0aW5nSW52b2tlciA9IGludm9rZXJzW3Jhd05hbWVdO1xyXG4gICAgaWYgKG5leHRWYWx1ZSAmJiBleGlzdGluZ0ludm9rZXIpIHtcclxuICAgICAgICAvLyBwYXRjaFxyXG4gICAgICAgIGV4aXN0aW5nSW52b2tlci52YWx1ZSA9IG5leHRWYWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IFtuYW1lLCBvcHRpb25zXSA9IHBhcnNlTmFtZShyYXdOYW1lKTtcclxuICAgICAgICBpZiAobmV4dFZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8vIGFkZFxyXG4gICAgICAgICAgICBjb25zdCBpbnZva2VyID0gKGludm9rZXJzW3Jhd05hbWVdID0gY3JlYXRlSW52b2tlcihuZXh0VmFsdWUsIGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIG5hbWUsIGludm9rZXIsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChleGlzdGluZ0ludm9rZXIpIHtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlXHJcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWwsIG5hbWUsIGV4aXN0aW5nSW52b2tlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGludm9rZXJzW3Jhd05hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5jb25zdCBvcHRpb25zTW9kaWZpZXJSRSA9IC8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztcclxuZnVuY3Rpb24gcGFyc2VOYW1lKG5hbWUpIHtcclxuICAgIGxldCBvcHRpb25zO1xyXG4gICAgaWYgKG9wdGlvbnNNb2RpZmllclJFLnRlc3QobmFtZSkpIHtcclxuICAgICAgICBvcHRpb25zID0ge307XHJcbiAgICAgICAgbGV0IG07XHJcbiAgICAgICAgd2hpbGUgKChtID0gbmFtZS5tYXRjaChvcHRpb25zTW9kaWZpZXJSRSkpKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIG5hbWUubGVuZ3RoIC0gbVswXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBvcHRpb25zW21bMF0udG9Mb3dlckNhc2UoKV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGV2ZW50ID0gbmFtZVsyXSA9PT0gJzonID8gbmFtZS5zbGljZSgzKSA6IGh5cGhlbmF0ZShuYW1lLnNsaWNlKDIpKTtcclxuICAgIHJldHVybiBbZXZlbnQsIG9wdGlvbnNdO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXIoaW5pdGlhbFZhbHVlLCBpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgaW52b2tlciA9IChlKSA9PiB7XHJcbiAgICAgICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxyXG4gICAgICAgIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXHJcbiAgICAgICAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXHJcbiAgICAgICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxyXG4gICAgICAgIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcclxuICAgICAgICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXHJcbiAgICAgICAgY29uc3QgdGltZVN0YW1wID0gZS50aW1lU3RhbXAgfHwgX2dldE5vdygpO1xyXG4gICAgICAgIGlmIChza2lwVGltZXN0YW1wQ2hlY2sgfHwgdGltZVN0YW1wID49IGludm9rZXIuYXR0YWNoZWQgLSAxKSB7XHJcbiAgICAgICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKHBhdGNoU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGUsIGludm9rZXIudmFsdWUpLCBpbnN0YW5jZSwgNSAvKiBFcnJvckNvZGVzLk5BVElWRV9FVkVOVF9IQU5ETEVSICovLCBbZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbnZva2VyLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xyXG4gICAgaW52b2tlci5hdHRhY2hlZCA9IGdldE5vdygpO1xyXG4gICAgcmV0dXJuIGludm9rZXI7XHJcbn1cclxuZnVuY3Rpb24gcGF0Y2hTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZSwgdmFsdWUpIHtcclxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3RvcCA9IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO1xyXG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0b3AuY2FsbChlKTtcclxuICAgICAgICAgICAgZS5fc3RvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZuID0+IChlKSA9PiAhZS5fc3RvcHBlZCAmJiBmbiAmJiBmbihlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgbmF0aXZlT25SRSA9IC9eb25bYS16XS87XHJcbmNvbnN0IHBhdGNoUHJvcCA9IChlbCwga2V5LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgaXNTVkcgPSBmYWxzZSwgcHJldkNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB1bm1vdW50Q2hpbGRyZW4pID0+IHtcclxuICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcclxuICAgICAgICBwYXRjaENsYXNzKGVsLCBuZXh0VmFsdWUsIGlzU1ZHKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xyXG4gICAgICAgIHBhdGNoU3R5bGUoZWwsIHByZXZWYWx1ZSwgbmV4dFZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT24oa2V5KSkge1xyXG4gICAgICAgIC8vIGlnbm9yZSB2LW1vZGVsIGxpc3RlbmVyc1xyXG4gICAgICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkpIHtcclxuICAgICAgICAgICAgcGF0Y2hFdmVudChlbCwga2V5LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgcGFyZW50Q29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChrZXlbMF0gPT09ICcuJ1xyXG4gICAgICAgID8gKChrZXkgPSBrZXkuc2xpY2UoMSkpLCB0cnVlKVxyXG4gICAgICAgIDoga2V5WzBdID09PSAnXidcclxuICAgICAgICAgICAgPyAoKGtleSA9IGtleS5zbGljZSgxKSksIGZhbHNlKVxyXG4gICAgICAgICAgICA6IHNob3VsZFNldEFzUHJvcChlbCwga2V5LCBuZXh0VmFsdWUsIGlzU1ZHKSkge1xyXG4gICAgICAgIHBhdGNoRE9NUHJvcChlbCwga2V5LCBuZXh0VmFsdWUsIHByZXZDaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgPGlucHV0IHYtbW9kZWwgdHlwZT1cImNoZWNrYm94XCI+IHdpdGhcclxuICAgICAgICAvLyA6dHJ1ZS12YWx1ZSAmIDpmYWxzZS12YWx1ZVxyXG4gICAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIGRvbSBwcm9wZXJ0aWVzIHNpbmNlIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmVcclxuICAgICAgICAvLyBzdHJpbmdpZmllZC5cclxuICAgICAgICBpZiAoa2V5ID09PSAndHJ1ZS12YWx1ZScpIHtcclxuICAgICAgICAgICAgZWwuX3RydWVWYWx1ZSA9IG5leHRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnZmFsc2UtdmFsdWUnKSB7XHJcbiAgICAgICAgICAgIGVsLl9mYWxzZVZhbHVlID0gbmV4dFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRjaEF0dHIoZWwsIGtleSwgbmV4dFZhbHVlLCBpc1NWRyk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHNob3VsZFNldEFzUHJvcChlbCwga2V5LCB2YWx1ZSwgaXNTVkcpIHtcclxuICAgIGlmIChpc1NWRykge1xyXG4gICAgICAgIC8vIG1vc3Qga2V5cyBtdXN0IGJlIHNldCBhcyBhdHRyaWJ1dGUgb24gc3ZnIGVsZW1lbnRzIHRvIHdvcmtcclxuICAgICAgICAvLyAuLi5leGNlcHQgaW5uZXJIVE1MICYgdGV4dENvbnRlbnRcclxuICAgICAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyB8fCBrZXkgPT09ICd0ZXh0Q29udGVudCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG9yIG5hdGl2ZSBvbmNsaWNrIHdpdGggZnVuY3Rpb24gdmFsdWVzXHJcbiAgICAgICAgaWYgKGtleSBpbiBlbCAmJiBuYXRpdmVPblJFLnRlc3Qoa2V5KSAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gdGhlc2UgYXJlIGVudW1lcmF0ZWQgYXR0cnMsIGhvd2V2ZXIgdGhlaXIgY29ycmVzcG9uZGluZyBET00gcHJvcGVydGllc1xyXG4gICAgLy8gYXJlIGFjdHVhbGx5IGJvb2xlYW5zIC0gdGhpcyBsZWFkcyB0byBzZXR0aW5nIGl0IHdpdGggYSBzdHJpbmcgXCJmYWxzZVwiXHJcbiAgICAvLyB2YWx1ZSBsZWFkaW5nIGl0IHRvIGJlIGNvZXJjZWQgdG8gYHRydWVgLCBzbyB3ZSBuZWVkIHRvIGFsd2F5cyB0cmVhdFxyXG4gICAgLy8gdGhlbSBhcyBhdHRyaWJ1dGVzLlxyXG4gICAgLy8gTm90ZSB0aGF0IGBjb250ZW50RWRpdGFibGVgIGRvZXNuJ3QgaGF2ZSB0aGlzIHByb2JsZW06IGl0cyBET01cclxuICAgIC8vIHByb3BlcnR5IGlzIGFsc28gZW51bWVyYXRlZCBzdHJpbmcgdmFsdWVzLlxyXG4gICAgaWYgKGtleSA9PT0gJ3NwZWxsY2hlY2snIHx8IGtleSA9PT0gJ2RyYWdnYWJsZScgfHwga2V5ID09PSAndHJhbnNsYXRlJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vICMxNzg3LCAjMjg0MCBmb3JtIHByb3BlcnR5IG9uIGZvcm0gZWxlbWVudHMgaXMgcmVhZG9ubHkgYW5kIG11c3QgYmUgc2V0IGFzXHJcbiAgICAvLyBhdHRyaWJ1dGUuXHJcbiAgICBpZiAoa2V5ID09PSAnZm9ybScpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyAjMTUyNiA8aW5wdXQgbGlzdD4gbXVzdCBiZSBzZXQgYXMgYXR0cmlidXRlXHJcbiAgICBpZiAoa2V5ID09PSAnbGlzdCcgJiYgZWwudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vICMyNzY2IDx0ZXh0YXJlYSB0eXBlPiBtdXN0IGJlIHNldCBhcyBhdHRyaWJ1dGVcclxuICAgIGlmIChrZXkgPT09ICd0eXBlJyAmJiBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gbmF0aXZlIG9uY2xpY2sgd2l0aCBzdHJpbmcgdmFsdWUsIG11c3QgYmUgc2V0IGFzIGF0dHJpYnV0ZVxyXG4gICAgaWYgKG5hdGl2ZU9uUkUudGVzdChrZXkpICYmIGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXkgaW4gZWw7XHJcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRWxlbWVudChvcHRpb25zLCBoeWRyYXRlKSB7XHJcbiAgICBjb25zdCBDb21wID0gZGVmaW5lQ29tcG9uZW50KG9wdGlvbnMpO1xyXG4gICAgY2xhc3MgVnVlQ3VzdG9tRWxlbWVudCBleHRlbmRzIFZ1ZUVsZW1lbnQge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxQcm9wcykge1xyXG4gICAgICAgICAgICBzdXBlcihDb21wLCBpbml0aWFsUHJvcHMsIGh5ZHJhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFZ1ZUN1c3RvbUVsZW1lbnQuZGVmID0gQ29tcDtcclxuICAgIHJldHVybiBWdWVDdXN0b21FbGVtZW50O1xyXG59XHJcbmNvbnN0IGRlZmluZVNTUkN1c3RvbUVsZW1lbnQgPSAoKG9wdGlvbnMpID0+IHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHJldHVybiBkZWZpbmVDdXN0b21FbGVtZW50KG9wdGlvbnMsIGh5ZHJhdGUpO1xyXG59KTtcclxuY29uc3QgQmFzZUNsYXNzID0gKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBIVE1MRWxlbWVudCA6IGNsYXNzIHtcclxufSk7XHJcbmNsYXNzIFZ1ZUVsZW1lbnQgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgY29uc3RydWN0b3IoX2RlZiwgX3Byb3BzID0ge30sIGh5ZHJhdGUpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX2RlZiA9IF9kZWY7XHJcbiAgICAgICAgdGhpcy5fcHJvcHMgPSBfcHJvcHM7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGludGVybmFsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fbnVtYmVyUHJvcHMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QgJiYgaHlkcmF0ZSkge1xyXG4gICAgICAgICAgICBoeWRyYXRlKHRoaXMuX2NyZWF0ZVZOb2RlKCksIHRoaXMuc2hhZG93Um9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRoaXMuc2hhZG93Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgQ3VzdG9tIGVsZW1lbnQgaGFzIHByZS1yZW5kZXJlZCBkZWNsYXJhdGl2ZSBzaGFkb3cgcm9vdCBidXQgaXMgbm90IGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBkZWZpbmVkIGFzIGh5ZHJhdGFibGUuIFVzZSBcXGBkZWZpbmVTU1JDdXN0b21FbGVtZW50XFxgLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlRGVmKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyKG51bGwsIHRoaXMuc2hhZG93Um9vdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogcmVzb2x2ZSBpbm5lciBjb21wb25lbnQgZGVmaW5pdGlvbiAoaGFuZGxlIHBvc3NpYmxlIGFzeW5jIGNvbXBvbmVudClcclxuICAgICAqL1xyXG4gICAgX3Jlc29sdmVEZWYoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHNldCBpbml0aWFsIGF0dHJzXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0QXR0cih0aGlzLmF0dHJpYnV0ZXNbaV0ubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdhdGNoIGZ1dHVyZSBhdHRyIGNoYW5nZXNcclxuICAgICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbXV0YXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBdHRyKG0uYXR0cmlidXRlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5vYnNlcnZlKHRoaXMsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCByZXNvbHZlID0gKGRlZikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IHByb3BzLCBzdHlsZXMgfSA9IGRlZjtcclxuICAgICAgICAgICAgY29uc3QgaGFzT3B0aW9ucyA9ICFpc0FycmF5KHByb3BzKTtcclxuICAgICAgICAgICAgY29uc3QgcmF3S2V5cyA9IHByb3BzID8gKGhhc09wdGlvbnMgPyBPYmplY3Qua2V5cyhwcm9wcykgOiBwcm9wcykgOiBbXTtcclxuICAgICAgICAgICAgLy8gY2FzdCBOdW1iZXItdHlwZSBwcm9wcyBzZXQgYmVmb3JlIHJlc29sdmVcclxuICAgICAgICAgICAgbGV0IG51bWJlclByb3BzO1xyXG4gICAgICAgICAgICBpZiAoaGFzT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fcHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSBwcm9wc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHQgPT09IE51bWJlciB8fCAob3B0ICYmIG9wdC50eXBlID09PSBOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BzW2tleV0gPSB0b051bWJlcih0aGlzLl9wcm9wc1trZXldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bWJlclByb3BzIHx8IChudW1iZXJQcm9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCkpKVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fbnVtYmVyUHJvcHMgPSBudW1iZXJQcm9wcztcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb3BzIHNldCBwcmUtdXBncmFkZSBvciBjb25uZWN0XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5WzBdICE9PSAnXycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQcm9wKGtleSwgdGhpc1trZXldLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZGVmaW5pbmcgZ2V0dGVyL3NldHRlcnMgb24gcHJvdG90eXBlXHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJhd0tleXMubWFwKGNhbWVsaXplJDEpKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJvcChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0KHZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQcm9wKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhcHBseSBDU1NcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlTdHlsZXMoc3R5bGVzKTtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbCByZW5kZXJcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBhc3luY0RlZiA9IHRoaXMuX2RlZi5fX2FzeW5jTG9hZGVyO1xyXG4gICAgICAgIGlmIChhc3luY0RlZikge1xyXG4gICAgICAgICAgICBhc3luY0RlZigpLnRoZW4ocmVzb2x2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2RlZik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX3NldEF0dHIoa2V5KSB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoa2V5KTtcclxuICAgICAgICBpZiAodGhpcy5fbnVtYmVyUHJvcHMgJiYgdGhpcy5fbnVtYmVyUHJvcHNba2V5XSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2V0UHJvcChjYW1lbGl6ZSQxKGtleSksIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICovXHJcbiAgICBfZ2V0UHJvcChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcHNba2V5XTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9zZXRQcm9wKGtleSwgdmFsLCBzaG91bGRSZWZsZWN0ID0gdHJ1ZSwgc2hvdWxkVXBkYXRlID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh2YWwgIT09IHRoaXMuX3Byb3BzW2tleV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvcHNba2V5XSA9IHZhbDtcclxuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSAmJiB0aGlzLl9pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmVmbGVjdFxyXG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVmbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGh5cGhlbmF0ZShrZXkpLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGh5cGhlbmF0ZShrZXkpLCB2YWwgKyAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX3VwZGF0ZSgpIHtcclxuICAgICAgICByZW5kZXIodGhpcy5fY3JlYXRlVk5vZGUoKSwgdGhpcy5zaGFkb3dSb290KTtcclxuICAgIH1cclxuICAgIF9jcmVhdGVWTm9kZSgpIHtcclxuICAgICAgICBjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKHRoaXMuX2RlZiwgZXh0ZW5kKHt9LCB0aGlzLl9wcm9wcykpO1xyXG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdm5vZGUuY2UgPSBpbnN0YW5jZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaXNDRSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyBITVJcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jZVJlbG9hZCA9IG5ld1N0eWxlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyByZXNldCBzdHlsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0eWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3R5bGVzLmZvckVhY2gocyA9PiB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlQ2hpbGQocykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3R5bGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlTdHlsZXMobmV3U3R5bGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhc3luYyBjb21wb25lbnQsIGNlUmVsb2FkIGlzIGNhbGxlZCBmcm9tIHRoZSBpbm5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc28gbm8gbmVlZCB0byByZWxvYWQgdGhlIGFzeW5jIHdyYXBwZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWYuX19hc3luY0xvYWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpbnRlcmNlcHQgZW1pdFxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZW1pdCA9IChldmVudCwgLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmdzXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIGxvY2F0ZSBuZWFyZXN0IFZ1ZSBjdXN0b20gZWxlbWVudCBwYXJlbnQgZm9yIHByb3ZpZGUvaW5qZWN0XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHdoaWxlICgocGFyZW50ID1cclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQgJiYgKHBhcmVudC5wYXJlbnROb2RlIHx8IHBhcmVudC5ob3N0KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVnVlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5wYXJlbnQgPSBwYXJlbnQuX2luc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2bm9kZTtcclxuICAgIH1cclxuICAgIF9hcHBseVN0eWxlcyhzdHlsZXMpIHtcclxuICAgICAgICBpZiAoc3R5bGVzKSB7XHJcbiAgICAgICAgICAgIHN0eWxlcy5mb3JFYWNoKGNzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgIHMudGV4dENvbnRlbnQgPSBjc3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocyk7XHJcbiAgICAgICAgICAgICAgICAvLyByZWNvcmQgZm9yIEhNUlxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9zdHlsZXMgfHwgKHRoaXMuX3N0eWxlcyA9IFtdKSkucHVzaChzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIHVzZUNzc01vZHVsZShuYW1lID0gJyRzdHlsZScpIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGB1c2VDc3NNb2R1bGUgbXVzdCBiZSBjYWxsZWQgaW5zaWRlIHNldHVwKClgKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX09CSjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGluc3RhbmNlLnR5cGUuX19jc3NNb2R1bGVzO1xyXG4gICAgICAgIGlmICghbW9kdWxlcykge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2FybihgQ3VycmVudCBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIENTUyBtb2R1bGVzIGluamVjdGVkLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfT0JKO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2QgPSBtb2R1bGVzW25hbWVdO1xyXG4gICAgICAgIGlmICghbW9kKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgd2FybihgQ3VycmVudCBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIENTUyBtb2R1bGUgbmFtZWQgXCIke25hbWV9XCIuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9PQko7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBTRkMncyBDU1MgdmFyaWFibGUgaW5qZWN0aW9uIGZlYXR1cmUuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiB1c2VDc3NWYXJzKGdldHRlcikge1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICBpZiAoIWluc3RhbmNlKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIHdhcm4oYHVzZUNzc1ZhcnMgaXMgY2FsbGVkIHdpdGhvdXQgY3VycmVudCBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlLmApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNldFZhcnMgPSAoKSA9PiBzZXRWYXJzT25WTm9kZShpbnN0YW5jZS5zdWJUcmVlLCBnZXR0ZXIoaW5zdGFuY2UucHJveHkpKTtcclxuICAgIHdhdGNoUG9zdEVmZmVjdChzZXRWYXJzKTtcclxuICAgIG9uTW91bnRlZCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2IgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihzZXRWYXJzKTtcclxuICAgICAgICBvYi5vYnNlcnZlKGluc3RhbmNlLnN1YlRyZWUuZWwucGFyZW50Tm9kZSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XHJcbiAgICAgICAgb25Vbm1vdW50ZWQoKCkgPT4gb2IuZGlzY29ubmVjdCgpKTtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIHNldFZhcnNPblZOb2RlKHZub2RlLCB2YXJzKSB7XHJcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICBjb25zdCBzdXNwZW5zZSA9IHZub2RlLnN1c3BlbnNlO1xyXG4gICAgICAgIHZub2RlID0gc3VzcGVuc2UuYWN0aXZlQnJhbmNoO1xyXG4gICAgICAgIGlmIChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoICYmICFzdXNwZW5zZS5pc0h5ZHJhdGluZykge1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFyc09uVk5vZGUoc3VzcGVuc2UuYWN0aXZlQnJhbmNoLCB2YXJzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZHJpbGwgZG93biBIT0NzIHVudGlsIGl0J3MgYSBub24tY29tcG9uZW50IHZub2RlXHJcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50KSB7XHJcbiAgICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnQuc3ViVHJlZTtcclxuICAgIH1cclxuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxIC8qIFNoYXBlRmxhZ3MuRUxFTUVOVCAqLyAmJiB2bm9kZS5lbCkge1xyXG4gICAgICAgIHNldFZhcnNPbk5vZGUodm5vZGUuZWwsIHZhcnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gRnJhZ21lbnQpIHtcclxuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gc2V0VmFyc09uVk5vZGUoYywgdmFycykpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gU3RhdGljKSB7XHJcbiAgICAgICAgbGV0IHsgZWwsIGFuY2hvciB9ID0gdm5vZGU7XHJcbiAgICAgICAgd2hpbGUgKGVsKSB7XHJcbiAgICAgICAgICAgIHNldFZhcnNPbk5vZGUoZWwsIHZhcnMpO1xyXG4gICAgICAgICAgICBpZiAoZWwgPT09IGFuY2hvcilcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBlbCA9IGVsLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzZXRWYXJzT25Ob2RlKGVsLCB2YXJzKSB7XHJcbiAgICBpZiAoZWwubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IGVsLnN0eWxlO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhcnMpIHtcclxuICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoYC0tJHtrZXl9YCwgdmFyc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY29uc3QgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcclxuY29uc3QgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XHJcbi8vIERPTSBUcmFuc2l0aW9uIGlzIGEgaGlnaGVyLW9yZGVyLWNvbXBvbmVudCBiYXNlZCBvbiB0aGUgcGxhdGZvcm0tYWdub3N0aWNcclxuLy8gYmFzZSBUcmFuc2l0aW9uIGNvbXBvbmVudCwgd2l0aCBET00tc3BlY2lmaWMgbG9naWMuXHJcbmNvbnN0IFRyYW5zaXRpb24gPSAocHJvcHMsIHsgc2xvdHMgfSkgPT4gaChCYXNlVHJhbnNpdGlvbiwgcmVzb2x2ZVRyYW5zaXRpb25Qcm9wcyhwcm9wcyksIHNsb3RzKTtcclxuVHJhbnNpdGlvbi5kaXNwbGF5TmFtZSA9ICdUcmFuc2l0aW9uJztcclxuY29uc3QgRE9NVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyA9IHtcclxuICAgIG5hbWU6IFN0cmluZyxcclxuICAgIHR5cGU6IFN0cmluZyxcclxuICAgIGNzczoge1xyXG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIGR1cmF0aW9uOiBbU3RyaW5nLCBOdW1iZXIsIE9iamVjdF0sXHJcbiAgICBlbnRlckZyb21DbGFzczogU3RyaW5nLFxyXG4gICAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxyXG4gICAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXHJcbiAgICBhcHBlYXJGcm9tQ2xhc3M6IFN0cmluZyxcclxuICAgIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXHJcbiAgICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXHJcbiAgICBsZWF2ZUZyb21DbGFzczogU3RyaW5nLFxyXG4gICAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxyXG4gICAgbGVhdmVUb0NsYXNzOiBTdHJpbmdcclxufTtcclxuY29uc3QgVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyA9IChUcmFuc2l0aW9uLnByb3BzID1cclxuICAgIC8qI19fUFVSRV9fKi8gZXh0ZW5kKHt9LCBCYXNlVHJhbnNpdGlvbi5wcm9wcywgRE9NVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycykpO1xyXG4vKipcclxuICogIzMyMjcgSW5jb21pbmcgaG9va3MgbWF5IGJlIG1lcmdlZCBpbnRvIGFycmF5cyB3aGVuIHdyYXBwaW5nIFRyYW5zaXRpb25cclxuICogd2l0aCBjdXN0b20gSE9Dcy5cclxuICovXHJcbmNvbnN0IGNhbGxIb29rID0gKGhvb2ssIGFyZ3MgPSBbXSkgPT4ge1xyXG4gICAgaWYgKGlzQXJyYXkoaG9vaykpIHtcclxuICAgICAgICBob29rLmZvckVhY2goaCA9PiBoKC4uLmFyZ3MpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGhvb2spIHtcclxuICAgICAgICBob29rKC4uLmFyZ3MpO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQ2hlY2sgaWYgYSBob29rIGV4cGVjdHMgYSBjYWxsYmFjayAoMm5kIGFyZyksIHdoaWNoIG1lYW5zIHRoZSB1c2VyXHJcbiAqIGludGVuZHMgdG8gZXhwbGljaXRseSBjb250cm9sIHRoZSBlbmQgb2YgdGhlIHRyYW5zaXRpb24uXHJcbiAqL1xyXG5jb25zdCBoYXNFeHBsaWNpdENhbGxiYWNrID0gKGhvb2spID0+IHtcclxuICAgIHJldHVybiBob29rXHJcbiAgICAgICAgPyBpc0FycmF5KGhvb2spXHJcbiAgICAgICAgICAgID8gaG9vay5zb21lKGggPT4gaC5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICA6IGhvb2subGVuZ3RoID4gMVxyXG4gICAgICAgIDogZmFsc2U7XHJcbn07XHJcbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uUHJvcHMocmF3UHJvcHMpIHtcclxuICAgIGNvbnN0IGJhc2VQcm9wcyA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3UHJvcHMpIHtcclxuICAgICAgICBpZiAoIShrZXkgaW4gRE9NVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycykpIHtcclxuICAgICAgICAgICAgYmFzZVByb3BzW2tleV0gPSByYXdQcm9wc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyYXdQcm9wcy5jc3MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VQcm9wcztcclxuICAgIH1cclxuICAgIGNvbnN0IHsgbmFtZSA9ICd2JywgdHlwZSwgZHVyYXRpb24sIGVudGVyRnJvbUNsYXNzID0gYCR7bmFtZX0tZW50ZXItZnJvbWAsIGVudGVyQWN0aXZlQ2xhc3MgPSBgJHtuYW1lfS1lbnRlci1hY3RpdmVgLCBlbnRlclRvQ2xhc3MgPSBgJHtuYW1lfS1lbnRlci10b2AsIGFwcGVhckZyb21DbGFzcyA9IGVudGVyRnJvbUNsYXNzLCBhcHBlYXJBY3RpdmVDbGFzcyA9IGVudGVyQWN0aXZlQ2xhc3MsIGFwcGVhclRvQ2xhc3MgPSBlbnRlclRvQ2xhc3MsIGxlYXZlRnJvbUNsYXNzID0gYCR7bmFtZX0tbGVhdmUtZnJvbWAsIGxlYXZlQWN0aXZlQ2xhc3MgPSBgJHtuYW1lfS1sZWF2ZS1hY3RpdmVgLCBsZWF2ZVRvQ2xhc3MgPSBgJHtuYW1lfS1sZWF2ZS10b2AgfSA9IHJhd1Byb3BzO1xyXG4gICAgY29uc3QgZHVyYXRpb25zID0gbm9ybWFsaXplRHVyYXRpb24oZHVyYXRpb24pO1xyXG4gICAgY29uc3QgZW50ZXJEdXJhdGlvbiA9IGR1cmF0aW9ucyAmJiBkdXJhdGlvbnNbMF07XHJcbiAgICBjb25zdCBsZWF2ZUR1cmF0aW9uID0gZHVyYXRpb25zICYmIGR1cmF0aW9uc1sxXTtcclxuICAgIGNvbnN0IHsgb25CZWZvcmVFbnRlciwgb25FbnRlciwgb25FbnRlckNhbmNlbGxlZCwgb25MZWF2ZSwgb25MZWF2ZUNhbmNlbGxlZCwgb25CZWZvcmVBcHBlYXIgPSBvbkJlZm9yZUVudGVyLCBvbkFwcGVhciA9IG9uRW50ZXIsIG9uQXBwZWFyQ2FuY2VsbGVkID0gb25FbnRlckNhbmNlbGxlZCB9ID0gYmFzZVByb3BzO1xyXG4gICAgY29uc3QgZmluaXNoRW50ZXIgPSAoZWwsIGlzQXBwZWFyLCBkb25lKSA9PiB7XHJcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3MpO1xyXG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgaXNBcHBlYXIgPyBhcHBlYXJBY3RpdmVDbGFzcyA6IGVudGVyQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIGRvbmUgJiYgZG9uZSgpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGZpbmlzaExlYXZlID0gKGVsLCBkb25lKSA9PiB7XHJcbiAgICAgICAgZWwuX2lzTGVhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVGcm9tQ2xhc3MpO1xyXG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcclxuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIGRvbmUgJiYgZG9uZSgpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IG1ha2VFbnRlckhvb2sgPSAoaXNBcHBlYXIpID0+IHtcclxuICAgICAgICByZXR1cm4gKGVsLCBkb25lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBpc0FwcGVhciA/IG9uQXBwZWFyIDogb25FbnRlcjtcclxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGZpbmlzaEVudGVyKGVsLCBpc0FwcGVhciwgZG9uZSk7XHJcbiAgICAgICAgICAgIGNhbGxIb29rKGhvb2ssIFtlbCwgcmVzb2x2ZV0pO1xyXG4gICAgICAgICAgICBuZXh0RnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhckZyb21DbGFzcyA6IGVudGVyRnJvbUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgaXNBcHBlYXIgPyBhcHBlYXJUb0NsYXNzIDogZW50ZXJUb0NsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzRXhwbGljaXRDYWxsYmFjayhob29rKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgZW50ZXJEdXJhdGlvbiwgcmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZChiYXNlUHJvcHMsIHtcclxuICAgICAgICBvbkJlZm9yZUVudGVyKGVsKSB7XHJcbiAgICAgICAgICAgIGNhbGxIb29rKG9uQmVmb3JlRW50ZXIsIFtlbF0pO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGVudGVyRnJvbUNsYXNzKTtcclxuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBlbnRlckFjdGl2ZUNsYXNzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQmVmb3JlQXBwZWFyKGVsKSB7XHJcbiAgICAgICAgICAgIGNhbGxIb29rKG9uQmVmb3JlQXBwZWFyLCBbZWxdKTtcclxuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhcHBlYXJGcm9tQ2xhc3MpO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFwcGVhckFjdGl2ZUNsYXNzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRW50ZXI6IG1ha2VFbnRlckhvb2soZmFsc2UpLFxyXG4gICAgICAgIG9uQXBwZWFyOiBtYWtlRW50ZXJIb29rKHRydWUpLFxyXG4gICAgICAgIG9uTGVhdmUoZWwsIGRvbmUpIHtcclxuICAgICAgICAgICAgZWwuX2lzTGVhdmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBmaW5pc2hMZWF2ZShlbCwgZG9uZSk7XHJcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVGcm9tQ2xhc3MpO1xyXG4gICAgICAgICAgICAvLyBmb3JjZSByZWZsb3cgc28gKi1sZWF2ZS1mcm9tIGNsYXNzZXMgaW1tZWRpYXRlbHkgdGFrZSBlZmZlY3QgKCMyNTkzKVxyXG4gICAgICAgICAgICBmb3JjZVJlZmxvdygpO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgICAgICBuZXh0RnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbC5faXNMZWF2aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUZyb21DbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0V4cGxpY2l0Q2FsbGJhY2sob25MZWF2ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGxlYXZlRHVyYXRpb24sIHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2FsbEhvb2sob25MZWF2ZSwgW2VsLCByZXNvbHZlXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkVudGVyQ2FuY2VsbGVkKGVsKSB7XHJcbiAgICAgICAgICAgIGZpbmlzaEVudGVyKGVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNhbGxIb29rKG9uRW50ZXJDYW5jZWxsZWQsIFtlbF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BcHBlYXJDYW5jZWxsZWQoZWwpIHtcclxuICAgICAgICAgICAgZmluaXNoRW50ZXIoZWwsIHRydWUpO1xyXG4gICAgICAgICAgICBjYWxsSG9vayhvbkFwcGVhckNhbmNlbGxlZCwgW2VsXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkxlYXZlQ2FuY2VsbGVkKGVsKSB7XHJcbiAgICAgICAgICAgIGZpbmlzaExlYXZlKGVsKTtcclxuICAgICAgICAgICAgY2FsbEhvb2sob25MZWF2ZUNhbmNlbGxlZCwgW2VsXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplRHVyYXRpb24oZHVyYXRpb24pIHtcclxuICAgIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc09iamVjdChkdXJhdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gW051bWJlck9mKGR1cmF0aW9uLmVudGVyKSwgTnVtYmVyT2YoZHVyYXRpb24ubGVhdmUpXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG4gPSBOdW1iZXJPZihkdXJhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIFtuLCBuXTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBOdW1iZXJPZih2YWwpIHtcclxuICAgIGNvbnN0IHJlcyA9IHRvTnVtYmVyKHZhbCk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKVxyXG4gICAgICAgIHZhbGlkYXRlRHVyYXRpb24ocmVzKTtcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gdmFsaWRhdGVEdXJhdGlvbih2YWwpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHdhcm4oYDx0cmFuc2l0aW9uPiBleHBsaWNpdCBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBgICtcclxuICAgICAgICAgICAgYGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbCl9LmApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNOYU4odmFsKSkge1xyXG4gICAgICAgIHdhcm4oYDx0cmFuc2l0aW9uPiBleHBsaWNpdCBkdXJhdGlvbiBpcyBOYU4gLSBgICtcclxuICAgICAgICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xyXG4gICAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChjID0+IGMgJiYgZWwuY2xhc3NMaXN0LmFkZChjKSk7XHJcbiAgICAoZWwuX3Z0YyB8fFxyXG4gICAgICAgIChlbC5fdnRjID0gbmV3IFNldCgpKSkuYWRkKGNscyk7XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcclxuICAgIGNscy5zcGxpdCgvXFxzKy8pLmZvckVhY2goYyA9PiBjICYmIGVsLmNsYXNzTGlzdC5yZW1vdmUoYykpO1xyXG4gICAgY29uc3QgeyBfdnRjIH0gPSBlbDtcclxuICAgIGlmIChfdnRjKSB7XHJcbiAgICAgICAgX3Z0Yy5kZWxldGUoY2xzKTtcclxuICAgICAgICBpZiAoIV92dGMuc2l6ZSkge1xyXG4gICAgICAgICAgICBlbC5fdnRjID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBuZXh0RnJhbWUoY2IpIHtcclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKTtcclxuICAgIH0pO1xyXG59XHJcbmxldCBlbmRJZCA9IDA7XHJcbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgZXhwZWN0ZWRUeXBlLCBleHBsaWNpdFRpbWVvdXQsIHJlc29sdmUpIHtcclxuICAgIGNvbnN0IGlkID0gKGVsLl9lbmRJZCA9ICsrZW5kSWQpO1xyXG4gICAgY29uc3QgcmVzb2x2ZUlmTm90U3RhbGUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlkID09PSBlbC5fZW5kSWQpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoZXhwbGljaXRUaW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZUlmTm90U3RhbGUsIGV4cGxpY2l0VGltZW91dCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHR5cGUsIHRpbWVvdXQsIHByb3BDb3VudCB9ID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW5kRXZlbnQgPSB0eXBlICsgJ2VuZCc7XHJcbiAgICBsZXQgZW5kZWQgPSAwO1xyXG4gICAgY29uc3QgZW5kID0gKCkgPT4ge1xyXG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZW5kRXZlbnQsIG9uRW5kKTtcclxuICAgICAgICByZXNvbHZlSWZOb3RTdGFsZSgpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uRW5kID0gKGUpID0+IHtcclxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IGVsICYmICsrZW5kZWQgPj0gcHJvcENvdW50KSB7XHJcbiAgICAgICAgICAgIGVuZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcclxuICAgICAgICAgICAgZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgdGltZW91dCArIDEpO1xyXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlbmRFdmVudCwgb25FbmQpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpIHtcclxuICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcclxuICAgIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcclxuICAgIGNvbnN0IGdldFN0eWxlUHJvcGVydGllcyA9IChrZXkpID0+IChzdHlsZXNba2V5XSB8fCAnJykuc3BsaXQoJywgJyk7XHJcbiAgICBjb25zdCB0cmFuc2l0aW9uRGVsYXlzID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKFRSQU5TSVRJT04gKyAnRGVsYXknKTtcclxuICAgIGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbnMgPSBnZXRTdHlsZVByb3BlcnRpZXMoVFJBTlNJVElPTiArICdEdXJhdGlvbicpO1xyXG4gICAgY29uc3QgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRyYW5zaXRpb25EdXJhdGlvbnMpO1xyXG4gICAgY29uc3QgYW5pbWF0aW9uRGVsYXlzID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKEFOSU1BVElPTiArICdEZWxheScpO1xyXG4gICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb25zID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKEFOSU1BVElPTiArICdEdXJhdGlvbicpO1xyXG4gICAgY29uc3QgYW5pbWF0aW9uVGltZW91dCA9IGdldFRpbWVvdXQoYW5pbWF0aW9uRGVsYXlzLCBhbmltYXRpb25EdXJhdGlvbnMpO1xyXG4gICAgbGV0IHR5cGUgPSBudWxsO1xyXG4gICAgbGV0IHRpbWVvdXQgPSAwO1xyXG4gICAgbGV0IHByb3BDb3VudCA9IDA7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcclxuICAgICAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xyXG4gICAgICAgICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XHJcbiAgICAgICAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XHJcbiAgICAgICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBBTklNQVRJT047XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xyXG4gICAgICAgICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XHJcbiAgICAgICAgdHlwZSA9XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPiAwXHJcbiAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxyXG4gICAgICAgICAgICAgICAgICAgID8gVFJBTlNJVElPTlxyXG4gICAgICAgICAgICAgICAgICAgIDogQU5JTUFUSU9OXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcHJvcENvdW50ID0gdHlwZVxyXG4gICAgICAgICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cclxuICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYXNUcmFuc2Zvcm0gPSB0eXBlID09PSBUUkFOU0lUSU9OICYmXHJcbiAgICAgICAgL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KHN0eWxlc1tUUkFOU0lUSU9OICsgJ1Byb3BlcnR5J10pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHRpbWVvdXQsXHJcbiAgICAgICAgcHJvcENvdW50LFxyXG4gICAgICAgIGhhc1RyYW5zZm9ybVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXRUaW1lb3V0KGRlbGF5cywgZHVyYXRpb25zKSB7XHJcbiAgICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZHVyYXRpb25zLm1hcCgoZCwgaSkgPT4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKSkpO1xyXG59XHJcbi8vIE9sZCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSAoYmVsb3cgNjEuMC4zMTYzLjEwMCkgZm9ybWF0cyBmbG9hdGluZyBwb2ludGVyXHJcbi8vIG51bWJlcnMgaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxyXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duXHJcbi8vIChpLmUuIGFjdGluZyBhcyBhIGZsb29yIGZ1bmN0aW9uKSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3JzXHJcbmZ1bmN0aW9uIHRvTXMocykge1xyXG4gICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwO1xyXG59XHJcbi8vIHN5bmNocm9ub3VzbHkgZm9yY2UgbGF5b3V0IHRvIHB1dCBlbGVtZW50cyBpbnRvIGEgY2VydGFpbiBzdGF0ZVxyXG5mdW5jdGlvbiBmb3JjZVJlZmxvdygpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcclxufVxuXG5jb25zdCBwb3NpdGlvbk1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IG5ld1Bvc2l0aW9uTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgVHJhbnNpdGlvbkdyb3VwSW1wbCA9IHtcclxuICAgIG5hbWU6ICdUcmFuc2l0aW9uR3JvdXAnLFxyXG4gICAgcHJvcHM6IC8qI19fUFVSRV9fKi8gZXh0ZW5kKHt9LCBUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzLCB7XHJcbiAgICAgICAgdGFnOiBTdHJpbmcsXHJcbiAgICAgICAgbW92ZUNsYXNzOiBTdHJpbmdcclxuICAgIH0pLFxyXG4gICAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB1c2VUcmFuc2l0aW9uU3RhdGUoKTtcclxuICAgICAgICBsZXQgcHJldkNoaWxkcmVuO1xyXG4gICAgICAgIGxldCBjaGlsZHJlbjtcclxuICAgICAgICBvblVwZGF0ZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBjaGlsZHJlbiBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IGFmdGVyIGluaXRpYWwgcmVuZGVyXHJcbiAgICAgICAgICAgIGlmICghcHJldkNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmVDbGFzcyA9IHByb3BzLm1vdmVDbGFzcyB8fCBgJHtwcm9wcy5uYW1lIHx8ICd2J30tbW92ZWA7XHJcbiAgICAgICAgICAgIGlmICghaGFzQ1NTVHJhbnNmb3JtKHByZXZDaGlsZHJlblswXS5lbCwgaW5zdGFuY2Uudm5vZGUuZWwsIG1vdmVDbGFzcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcclxuICAgICAgICAgICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXHJcbiAgICAgICAgICAgIHByZXZDaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcclxuICAgICAgICAgICAgcHJldkNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlZENoaWxkcmVuID0gcHJldkNoaWxkcmVuLmZpbHRlcihhcHBseVRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXHJcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KCk7XHJcbiAgICAgICAgICAgIG1vdmVkQ2hpbGRyZW4uZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gYy5lbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNiID0gKGVsLl9tb3ZlQ2IgPSAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGNiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjYik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhd1Byb3BzID0gdG9SYXcocHJvcHMpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3NUcmFuc2l0aW9uUHJvcHMgPSByZXNvbHZlVHJhbnNpdGlvblByb3BzKHJhd1Byb3BzKTtcclxuICAgICAgICAgICAgbGV0IHRhZyA9IHJhd1Byb3BzLnRhZyB8fCBGcmFnbWVudDtcclxuICAgICAgICAgICAgcHJldkNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCA/IGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihzbG90cy5kZWZhdWx0KCkpIDogW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQua2V5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3MoY2hpbGQsIHJlc29sdmVUcmFuc2l0aW9uSG9va3MoY2hpbGQsIGNzc1RyYW5zaXRpb25Qcm9wcywgc3RhdGUsIGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGA8VHJhbnNpdGlvbkdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldkNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwcmV2Q2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKGNoaWxkLCByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKGNoaWxkLCBjc3NUcmFuc2l0aW9uUHJvcHMsIHN0YXRlLCBpbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChjaGlsZCwgY2hpbGQuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0YWcsIG51bGwsIGNoaWxkcmVuKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBUcmFuc2l0aW9uR3JvdXAgPSBUcmFuc2l0aW9uR3JvdXBJbXBsO1xyXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyhjKSB7XHJcbiAgICBjb25zdCBlbCA9IGMuZWw7XHJcbiAgICBpZiAoZWwuX21vdmVDYikge1xyXG4gICAgICAgIGVsLl9tb3ZlQ2IoKTtcclxuICAgIH1cclxuICAgIGlmIChlbC5fZW50ZXJDYikge1xyXG4gICAgICAgIGVsLl9lbnRlckNiKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24oYykge1xyXG4gICAgbmV3UG9zaXRpb25NYXAuc2V0KGMsIGMuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xyXG59XHJcbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24oYykge1xyXG4gICAgY29uc3Qgb2xkUG9zID0gcG9zaXRpb25NYXAuZ2V0KGMpO1xyXG4gICAgY29uc3QgbmV3UG9zID0gbmV3UG9zaXRpb25NYXAuZ2V0KGMpO1xyXG4gICAgY29uc3QgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xyXG4gICAgY29uc3QgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcclxuICAgIGlmIChkeCB8fCBkeSkge1xyXG4gICAgICAgIGNvbnN0IHMgPSBjLmVsLnN0eWxlO1xyXG4gICAgICAgIHMudHJhbnNmb3JtID0gcy53ZWJraXRUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7ZHh9cHgsJHtkeX1weClgO1xyXG4gICAgICAgIHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcclxuICAgICAgICByZXR1cm4gYztcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBoYXNDU1NUcmFuc2Zvcm0oZWwsIHJvb3QsIG1vdmVDbGFzcykge1xyXG4gICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXHJcbiAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcclxuICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcclxuICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xyXG4gICAgLy8gaXMgYXBwbGllZC5cclxuICAgIGNvbnN0IGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XHJcbiAgICBpZiAoZWwuX3Z0Yykge1xyXG4gICAgICAgIGVsLl92dGMuZm9yRWFjaChjbHMgPT4ge1xyXG4gICAgICAgICAgICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKGMgPT4gYyAmJiBjbG9uZS5jbGFzc0xpc3QucmVtb3ZlKGMpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG1vdmVDbGFzcy5zcGxpdCgvXFxzKy8pLmZvckVhY2goYyA9PiBjICYmIGNsb25lLmNsYXNzTGlzdC5hZGQoYykpO1xyXG4gICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IChyb290Lm5vZGVUeXBlID09PSAxID8gcm9vdCA6IHJvb3QucGFyZW50Tm9kZSk7XHJcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG4gICAgY29uc3QgeyBoYXNUcmFuc2Zvcm0gfSA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjbG9uZSk7XHJcbiAgICByZXR1cm4gaGFzVHJhbnNmb3JtO1xyXG59XG5cbmNvbnN0IGdldE1vZGVsQXNzaWduZXIgPSAodm5vZGUpID0+IHtcclxuICAgIGNvbnN0IGZuID0gdm5vZGUucHJvcHNbJ29uVXBkYXRlOm1vZGVsVmFsdWUnXSB8fFxyXG4gICAgICAgIChmYWxzZSApO1xyXG4gICAgcmV0dXJuIGlzQXJyYXkoZm4pID8gdmFsdWUgPT4gaW52b2tlQXJyYXlGbnMoZm4sIHZhbHVlKSA6IGZuO1xyXG59O1xyXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQoZSkge1xyXG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKGUpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgaWYgKHRhcmdldC5jb21wb3NpbmcpIHtcclxuICAgICAgICB0YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTtcclxuICAgIH1cclxufVxyXG4vLyBXZSBhcmUgZXhwb3J0aW5nIHRoZSB2LW1vZGVsIHJ1bnRpbWUgZGlyZWN0bHkgYXMgdm5vZGUgaG9va3Mgc28gdGhhdCBpdCBjYW5cclxuLy8gYmUgdHJlZS1zaGFrZW4gaW4gY2FzZSB2LW1vZGVsIGlzIG5ldmVyIHVzZWQuXHJcbmNvbnN0IHZNb2RlbFRleHQgPSB7XHJcbiAgICBjcmVhdGVkKGVsLCB7IG1vZGlmaWVyczogeyBsYXp5LCB0cmltLCBudW1iZXIgfSB9LCB2bm9kZSkge1xyXG4gICAgICAgIGVsLl9hc3NpZ24gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcclxuICAgICAgICBjb25zdCBjYXN0VG9OdW1iZXIgPSBudW1iZXIgfHwgKHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnR5cGUgPT09ICdudW1iZXInKTtcclxuICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBsYXp5ID8gJ2NoYW5nZScgOiAnaW5wdXQnLCBlID0+IHtcclxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmNvbXBvc2luZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IGRvbVZhbHVlID0gZWwudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgICAgICAgICBkb21WYWx1ZSA9IGRvbVZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2FzdFRvTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBkb21WYWx1ZSA9IHRvTnVtYmVyKGRvbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbC5fYXNzaWduKGRvbVZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodHJpbSkge1xyXG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCAnY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwudmFsdWUgPSBlbC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxhenkpIHtcclxuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCAnY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcclxuICAgICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxyXG4gICAgICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXHJcbiAgICAgICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcclxuICAgICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXHJcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gc2V0IHZhbHVlIG9uIG1vdW50ZWQgc28gaXQncyBhZnRlciBtaW4vbWF4IGZvciB0eXBlPVwicmFuZ2VcIlxyXG4gICAgbW91bnRlZChlbCwgeyB2YWx1ZSB9KSB7XHJcbiAgICAgICAgZWwudmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVVcGRhdGUoZWwsIHsgdmFsdWUsIG1vZGlmaWVyczogeyBsYXp5LCB0cmltLCBudW1iZXIgfSB9LCB2bm9kZSkge1xyXG4gICAgICAgIGVsLl9hc3NpZ24gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcclxuICAgICAgICAvLyBhdm9pZCBjbGVhcmluZyB1bnJlc29sdmVkIHRleHQuICMyMzAyXHJcbiAgICAgICAgaWYgKGVsLmNvbXBvc2luZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbCAmJiBlbC50eXBlICE9PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICAgIGlmIChsYXp5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRyaW0gJiYgZWwudmFsdWUudHJpbSgpID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgobnVtYmVyIHx8IGVsLnR5cGUgPT09ICdudW1iZXInKSAmJiB0b051bWJlcihlbC52YWx1ZSkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcclxuICAgICAgICBpZiAoZWwudmFsdWUgIT09IG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGVsLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5jb25zdCB2TW9kZWxDaGVja2JveCA9IHtcclxuICAgIC8vICM0MDk2IGFycmF5IGNoZWNrYm94ZXMgbmVlZCB0byBiZSBkZWVwIHRyYXZlcnNlZFxyXG4gICAgZGVlcDogdHJ1ZSxcclxuICAgIGNyZWF0ZWQoZWwsIF8sIHZub2RlKSB7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSBlbC5fbW9kZWxWYWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZ2V0VmFsdWUoZWwpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gZWwuY2hlY2tlZDtcclxuICAgICAgICAgICAgY29uc3QgYXNzaWduID0gZWwuX2Fzc2lnbjtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkobW9kZWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbG9vc2VJbmRleE9mKG1vZGVsVmFsdWUsIGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGluZGV4ICE9PSAtMTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkICYmICFmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbihtb2RlbFZhbHVlLmNvbmNhdChlbGVtZW50VmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjaGVja2VkICYmIGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBbLi4ubW9kZWxWYWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oZmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU2V0KG1vZGVsVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgU2V0KG1vZGVsVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWQuYWRkKGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWQuZGVsZXRlKGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhc3NpZ24oY2xvbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFzc2lnbihnZXRDaGVja2JveFZhbHVlKGVsLCBjaGVja2VkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAvLyBzZXQgaW5pdGlhbCBjaGVja2VkIG9uIG1vdW50IHRvIHdhaXQgZm9yIHRydWUtdmFsdWUvZmFsc2UtdmFsdWVcclxuICAgIG1vdW50ZWQ6IHNldENoZWNrZWQsXHJcbiAgICBiZWZvcmVVcGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlKSB7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIHNldENoZWNrZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gc2V0Q2hlY2tlZChlbCwgeyB2YWx1ZSwgb2xkVmFsdWUgfSwgdm5vZGUpIHtcclxuICAgIGVsLl9tb2RlbFZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBlbC5jaGVja2VkID0gbG9vc2VJbmRleE9mKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSkgPiAtMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU2V0KHZhbHVlKSkge1xyXG4gICAgICAgIGVsLmNoZWNrZWQgPSB2YWx1ZS5oYXModm5vZGUucHJvcHMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWUgIT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgZWwuY2hlY2tlZCA9IGxvb3NlRXF1YWwodmFsdWUsIGdldENoZWNrYm94VmFsdWUoZWwsIHRydWUpKTtcclxuICAgIH1cclxufVxyXG5jb25zdCB2TW9kZWxSYWRpbyA9IHtcclxuICAgIGNyZWF0ZWQoZWwsIHsgdmFsdWUgfSwgdm5vZGUpIHtcclxuICAgICAgICBlbC5jaGVja2VkID0gbG9vc2VFcXVhbCh2YWx1ZSwgdm5vZGUucHJvcHMudmFsdWUpO1xyXG4gICAgICAgIGVsLl9hc3NpZ24gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcclxuICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCAnY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBlbC5fYXNzaWduKGdldFZhbHVlKGVsKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgYmVmb3JlVXBkYXRlKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB2bm9kZSkge1xyXG4gICAgICAgIGVsLl9hc3NpZ24gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGVsLmNoZWNrZWQgPSBsb29zZUVxdWFsKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5jb25zdCB2TW9kZWxTZWxlY3QgPSB7XHJcbiAgICAvLyA8c2VsZWN0IG11bHRpcGxlPiB2YWx1ZSBuZWVkIHRvIGJlIGRlZXAgdHJhdmVyc2VkXHJcbiAgICBkZWVwOiB0cnVlLFxyXG4gICAgY3JlYXRlZChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzOiB7IG51bWJlciB9IH0sIHZub2RlKSB7XHJcbiAgICAgICAgY29uc3QgaXNTZXRNb2RlbCA9IGlzU2V0KHZhbHVlKTtcclxuICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCAnY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXJcclxuICAgICAgICAgICAgICAgIC5jYWxsKGVsLm9wdGlvbnMsIChvKSA9PiBvLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgobykgPT4gbnVtYmVyID8gdG9OdW1iZXIoZ2V0VmFsdWUobykpIDogZ2V0VmFsdWUobykpO1xyXG4gICAgICAgICAgICBlbC5fYXNzaWduKGVsLm11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICA/IGlzU2V0TW9kZWxcclxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBTZXQoc2VsZWN0ZWRWYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZFZhbFxyXG4gICAgICAgICAgICAgICAgOiBzZWxlY3RlZFZhbFswXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgfSxcclxuICAgIC8vIHNldCB2YWx1ZSBpbiBtb3VudGVkICYgdXBkYXRlZCBiZWNhdXNlIDxzZWxlY3Q+IHJlbGllcyBvbiBpdHMgY2hpbGRyZW5cclxuICAgIC8vIDxvcHRpb24+cy5cclxuICAgIG1vdW50ZWQoZWwsIHsgdmFsdWUgfSkge1xyXG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgYmVmb3JlVXBkYXRlKGVsLCBfYmluZGluZywgdm5vZGUpIHtcclxuICAgICAgICBlbC5fYXNzaWduID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlZChlbCwgeyB2YWx1ZSB9KSB7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIHZhbHVlKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gc2V0U2VsZWN0ZWQoZWwsIHZhbHVlKSB7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XHJcbiAgICBpZiAoaXNNdWx0aXBsZSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgIWlzU2V0KHZhbHVlKSkge1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICB3YXJuKGA8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw+IGV4cGVjdHMgYW4gQXJyYXkgb3IgU2V0IHZhbHVlIGZvciBpdHMgYmluZGluZywgYCArXHJcbiAgICAgICAgICAgICAgICBgYnV0IGdvdCAke09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpfS5gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcclxuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IGdldFZhbHVlKG9wdGlvbik7XHJcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIG9wdGlvblZhbHVlKSA+IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdmFsdWUuaGFzKG9wdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSlcclxuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNNdWx0aXBsZSAmJiBlbC5zZWxlY3RlZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIH1cclxufVxyXG4vLyByZXRyaWV2ZSByYXcgdmFsdWUgc2V0IHZpYSA6dmFsdWUgYmluZGluZ3NcclxuZnVuY3Rpb24gZ2V0VmFsdWUoZWwpIHtcclxuICAgIHJldHVybiAnX3ZhbHVlJyBpbiBlbCA/IGVsLl92YWx1ZSA6IGVsLnZhbHVlO1xyXG59XHJcbi8vIHJldHJpZXZlIHJhdyB2YWx1ZSBmb3IgdHJ1ZS12YWx1ZSBhbmQgZmFsc2UtdmFsdWUgc2V0IHZpYSA6dHJ1ZS12YWx1ZSBvciA6ZmFsc2UtdmFsdWUgYmluZGluZ3NcclxuZnVuY3Rpb24gZ2V0Q2hlY2tib3hWYWx1ZShlbCwgY2hlY2tlZCkge1xyXG4gICAgY29uc3Qga2V5ID0gY2hlY2tlZCA/ICdfdHJ1ZVZhbHVlJyA6ICdfZmFsc2VWYWx1ZSc7XHJcbiAgICByZXR1cm4ga2V5IGluIGVsID8gZWxba2V5XSA6IGNoZWNrZWQ7XHJcbn1cclxuY29uc3Qgdk1vZGVsRHluYW1pYyA9IHtcclxuICAgIGNyZWF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XHJcbiAgICAgICAgY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIG51bGwsICdjcmVhdGVkJyk7XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZChlbCwgYmluZGluZywgdm5vZGUpIHtcclxuICAgICAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgbnVsbCwgJ21vdW50ZWQnKTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVVcGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUpIHtcclxuICAgICAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlLCAnYmVmb3JlVXBkYXRlJyk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSkge1xyXG4gICAgICAgIGNhbGxNb2RlbEhvb2soZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUsICd1cGRhdGVkJyk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljTW9kZWwodGFnTmFtZSwgdHlwZSkge1xyXG4gICAgc3dpdGNoICh0YWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnU0VMRUNUJzpcclxuICAgICAgICAgICAgcmV0dXJuIHZNb2RlbFNlbGVjdDtcclxuICAgICAgICBjYXNlICdURVhUQVJFQSc6XHJcbiAgICAgICAgICAgIHJldHVybiB2TW9kZWxUZXh0O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2TW9kZWxDaGVja2JveDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdk1vZGVsUmFkaW87XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2TW9kZWxUZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSwgaG9vaykge1xyXG4gICAgY29uc3QgbW9kZWxUb1VzZSA9IHJlc29sdmVEeW5hbWljTW9kZWwoZWwudGFnTmFtZSwgdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMudHlwZSk7XHJcbiAgICBjb25zdCBmbiA9IG1vZGVsVG9Vc2VbaG9va107XHJcbiAgICBmbiAmJiBmbihlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSk7XHJcbn1cclxuLy8gU1NSIHZub2RlIHRyYW5zZm9ybXMsIG9ubHkgdXNlZCB3aGVuIHVzZXIgaW5jbHVkZXMgY2xpZW50LW9yaWVudGVkIHJlbmRlclxyXG4vLyBmdW5jdGlvbiBpbiBTU1JcclxuZnVuY3Rpb24gaW5pdFZNb2RlbEZvclNTUigpIHtcclxuICAgIHZNb2RlbFRleHQuZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9KSA9PiAoeyB2YWx1ZSB9KTtcclxuICAgIHZNb2RlbFJhZGlvLmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSwgdm5vZGUpID0+IHtcclxuICAgICAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VFcXVhbCh2bm9kZS5wcm9wcy52YWx1ZSwgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGNoZWNrZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdk1vZGVsQ2hlY2tib3guZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9LCB2bm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VJbmRleE9mKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY2hlY2tlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzU2V0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAodm5vZGUucHJvcHMgJiYgdmFsdWUuaGFzKHZub2RlLnByb3BzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY2hlY2tlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGNoZWNrZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdk1vZGVsRHluYW1pYy5nZXRTU1JQcm9wcyA9IChiaW5kaW5nLCB2bm9kZSkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygdm5vZGUudHlwZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RlbFRvVXNlID0gcmVzb2x2ZUR5bmFtaWNNb2RlbChcclxuICAgICAgICAvLyByZXNvbHZlRHluYW1pY01vZGVsIGV4cGVjdHMgYW4gdXBwZXJjYXNlIHRhZyBuYW1lLCBidXQgdm5vZGUudHlwZSBpcyBsb3dlcmNhc2VcclxuICAgICAgICB2bm9kZS50eXBlLnRvVXBwZXJDYXNlKCksIHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnR5cGUpO1xyXG4gICAgICAgIGlmIChtb2RlbFRvVXNlLmdldFNTUlByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RlbFRvVXNlLmdldFNTUlByb3BzKGJpbmRpbmcsIHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbmNvbnN0IHN5c3RlbU1vZGlmaWVycyA9IFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddO1xyXG5jb25zdCBtb2RpZmllckd1YXJkcyA9IHtcclxuICAgIHN0b3A6IGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSxcclxuICAgIHByZXZlbnQ6IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpLFxyXG4gICAgc2VsZjogZSA9PiBlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0LFxyXG4gICAgY3RybDogZSA9PiAhZS5jdHJsS2V5LFxyXG4gICAgc2hpZnQ6IGUgPT4gIWUuc2hpZnRLZXksXHJcbiAgICBhbHQ6IGUgPT4gIWUuYWx0S2V5LFxyXG4gICAgbWV0YTogZSA9PiAhZS5tZXRhS2V5LFxyXG4gICAgbGVmdDogZSA9PiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uICE9PSAwLFxyXG4gICAgbWlkZGxlOiBlID0+ICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gIT09IDEsXHJcbiAgICByaWdodDogZSA9PiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uICE9PSAyLFxyXG4gICAgZXhhY3Q6IChlLCBtb2RpZmllcnMpID0+IHN5c3RlbU1vZGlmaWVycy5zb21lKG0gPT4gZVtgJHttfUtleWBdICYmICFtb2RpZmllcnMuaW5jbHVkZXMobSkpXHJcbn07XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3Qgd2l0aE1vZGlmaWVycyA9IChmbiwgbW9kaWZpZXJzKSA9PiB7XHJcbiAgICByZXR1cm4gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZ3VhcmQgPSBtb2RpZmllckd1YXJkc1ttb2RpZmllcnNbaV1dO1xyXG4gICAgICAgICAgICBpZiAoZ3VhcmQgJiYgZ3VhcmQoZXZlbnQsIG1vZGlmaWVycykpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbihldmVudCwgLi4uYXJncyk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBLZXB0IGZvciAyLnggY29tcGF0LlxyXG4vLyBOb3RlOiBJRTExIGNvbXBhdCBmb3IgYHNwYWNlYmFyYCBhbmQgYGRlbGAgaXMgcmVtb3ZlZCBmb3Igbm93LlxyXG5jb25zdCBrZXlOYW1lcyA9IHtcclxuICAgIGVzYzogJ2VzY2FwZScsXHJcbiAgICBzcGFjZTogJyAnLFxyXG4gICAgdXA6ICdhcnJvdy11cCcsXHJcbiAgICBsZWZ0OiAnYXJyb3ctbGVmdCcsXHJcbiAgICByaWdodDogJ2Fycm93LXJpZ2h0JyxcclxuICAgIGRvd246ICdhcnJvdy1kb3duJyxcclxuICAgIGRlbGV0ZTogJ2JhY2tzcGFjZSdcclxufTtcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCB3aXRoS2V5cyA9IChmbiwgbW9kaWZpZXJzKSA9PiB7XHJcbiAgICByZXR1cm4gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCEoJ2tleScgaW4gZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXZlbnRLZXkgPSBoeXBoZW5hdGUoZXZlbnQua2V5KTtcclxuICAgICAgICBpZiAobW9kaWZpZXJzLnNvbWUoayA9PiBrID09PSBldmVudEtleSB8fCBrZXlOYW1lc1trXSA9PT0gZXZlbnRLZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufTtcblxuY29uc3QgdlNob3cgPSB7XHJcbiAgICBiZWZvcmVNb3VudChlbCwgeyB2YWx1ZSB9LCB7IHRyYW5zaXRpb24gfSkge1xyXG4gICAgICAgIGVsLl92b2QgPSBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XHJcbiAgICAgICAgaWYgKHRyYW5zaXRpb24gJiYgdmFsdWUpIHtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbi5iZWZvcmVFbnRlcihlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXREaXNwbGF5KGVsLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoZWwsIHsgdmFsdWUgfSwgeyB0cmFuc2l0aW9uIH0pIHtcclxuICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uLmVudGVyKGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlZChlbCwgeyB2YWx1ZSwgb2xkVmFsdWUgfSwgeyB0cmFuc2l0aW9uIH0pIHtcclxuICAgICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xyXG4gICAgICAgICAgICAgICAgc2V0RGlzcGxheShlbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmVudGVyKGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24ubGVhdmUoZWwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXREaXNwbGF5KGVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0RGlzcGxheShlbCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBiZWZvcmVVbm1vdW50KGVsLCB7IHZhbHVlIH0pIHtcclxuICAgICAgICBzZXREaXNwbGF5KGVsLCB2YWx1ZSk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHNldERpc3BsYXkoZWwsIHZhbHVlKSB7XHJcbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fdm9kIDogJ25vbmUnO1xyXG59XHJcbi8vIFNTUiB2bm9kZSB0cmFuc2Zvcm1zLCBvbmx5IHVzZWQgd2hlbiB1c2VyIGluY2x1ZGVzIGNsaWVudC1vcmllbnRlZCByZW5kZXJcclxuLy8gZnVuY3Rpb24gaW4gU1NSXHJcbmZ1bmN0aW9uIGluaXRWU2hvd0ZvclNTUigpIHtcclxuICAgIHZTaG93LmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbmNvbnN0IHJlbmRlcmVyT3B0aW9ucyA9IC8qI19fUFVSRV9fKi8gZXh0ZW5kKHsgcGF0Y2hQcm9wIH0sIG5vZGVPcHMpO1xyXG4vLyBsYXp5IGNyZWF0ZSB0aGUgcmVuZGVyZXIgLSB0aGlzIG1ha2VzIGNvcmUgcmVuZGVyZXIgbG9naWMgdHJlZS1zaGFrYWJsZVxyXG4vLyBpbiBjYXNlIHRoZSB1c2VyIG9ubHkgaW1wb3J0cyByZWFjdGl2aXR5IHV0aWxpdGllcyBmcm9tIFZ1ZS5cclxubGV0IHJlbmRlcmVyO1xyXG5sZXQgZW5hYmxlZEh5ZHJhdGlvbiA9IGZhbHNlO1xyXG5mdW5jdGlvbiBlbnN1cmVSZW5kZXJlcigpIHtcclxuICAgIHJldHVybiAocmVuZGVyZXIgfHxcclxuICAgICAgICAocmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihyZW5kZXJlck9wdGlvbnMpKSk7XHJcbn1cclxuZnVuY3Rpb24gZW5zdXJlSHlkcmF0aW9uUmVuZGVyZXIoKSB7XHJcbiAgICByZW5kZXJlciA9IGVuYWJsZWRIeWRyYXRpb25cclxuICAgICAgICA/IHJlbmRlcmVyXHJcbiAgICAgICAgOiBjcmVhdGVIeWRyYXRpb25SZW5kZXJlcihyZW5kZXJlck9wdGlvbnMpO1xyXG4gICAgZW5hYmxlZEh5ZHJhdGlvbiA9IHRydWU7XHJcbiAgICByZXR1cm4gcmVuZGVyZXI7XHJcbn1cclxuLy8gdXNlIGV4cGxpY2l0IHR5cGUgY2FzdHMgaGVyZSB0byBhdm9pZCBpbXBvcnQoKSBjYWxscyBpbiByb2xsZWQtdXAgZC50c1xyXG5jb25zdCByZW5kZXIgPSAoKC4uLmFyZ3MpID0+IHtcclxuICAgIGVuc3VyZVJlbmRlcmVyKCkucmVuZGVyKC4uLmFyZ3MpO1xyXG59KTtcclxuY29uc3QgaHlkcmF0ZSA9ICgoLi4uYXJncykgPT4ge1xyXG4gICAgZW5zdXJlSHlkcmF0aW9uUmVuZGVyZXIoKS5oeWRyYXRlKC4uLmFyZ3MpO1xyXG59KTtcclxuY29uc3QgY3JlYXRlQXBwID0gKCguLi5hcmdzKSA9PiB7XHJcbiAgICBjb25zdCBhcHAgPSBlbnN1cmVSZW5kZXJlcigpLmNyZWF0ZUFwcCguLi5hcmdzKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBpbmplY3ROYXRpdmVUYWdDaGVjayhhcHApO1xyXG4gICAgICAgIGluamVjdENvbXBpbGVyT3B0aW9uc0NoZWNrKGFwcCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IG1vdW50IH0gPSBhcHA7XHJcbiAgICBhcHAubW91bnQgPSAoY29udGFpbmVyT3JTZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IG5vcm1hbGl6ZUNvbnRhaW5lcihjb250YWluZXJPclNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGFwcC5fY29tcG9uZW50O1xyXG4gICAgICAgIGlmICghaXNGdW5jdGlvbihjb21wb25lbnQpICYmICFjb21wb25lbnQucmVuZGVyICYmICFjb21wb25lbnQudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgLy8gX19VTlNBRkVfX1xyXG4gICAgICAgICAgICAvLyBSZWFzb246IHBvdGVudGlhbCBleGVjdXRpb24gb2YgSlMgZXhwcmVzc2lvbnMgaW4gaW4tRE9NIHRlbXBsYXRlLlxyXG4gICAgICAgICAgICAvLyBUaGUgdXNlciBtdXN0IG1ha2Ugc3VyZSB0aGUgaW4tRE9NIHRlbXBsYXRlIGlzIHRydXN0ZWQuIElmIGl0J3NcclxuICAgICAgICAgICAgLy8gcmVuZGVyZWQgYnkgdGhlIHNlcnZlciwgdGhlIHRlbXBsYXRlIHNob3VsZCBub3QgY29udGFpbiBhbnkgdXNlciBkYXRhLlxyXG4gICAgICAgICAgICBjb21wb25lbnQudGVtcGxhdGUgPSBjb250YWluZXIuaW5uZXJIVE1MO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjbGVhciBjb250ZW50IGJlZm9yZSBtb3VudGluZ1xyXG4gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBjb25zdCBwcm94eSA9IG1vdW50KGNvbnRhaW5lciwgZmFsc2UsIGNvbnRhaW5lciBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpO1xyXG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ3YtY2xvYWsnKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS12LWFwcCcsICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3h5O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBhcHA7XHJcbn0pO1xyXG5jb25zdCBjcmVhdGVTU1JBcHAgPSAoKC4uLmFyZ3MpID0+IHtcclxuICAgIGNvbnN0IGFwcCA9IGVuc3VyZUh5ZHJhdGlvblJlbmRlcmVyKCkuY3JlYXRlQXBwKC4uLmFyZ3MpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGluamVjdE5hdGl2ZVRhZ0NoZWNrKGFwcCk7XHJcbiAgICAgICAgaW5qZWN0Q29tcGlsZXJPcHRpb25zQ2hlY2soYXBwKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgbW91bnQgfSA9IGFwcDtcclxuICAgIGFwcC5tb3VudCA9IChjb250YWluZXJPclNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbm9ybWFsaXplQ29udGFpbmVyKGNvbnRhaW5lck9yU2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vdW50KGNvbnRhaW5lciwgdHJ1ZSwgY29udGFpbmVyIGluc3RhbmNlb2YgU1ZHRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBhcHA7XHJcbn0pO1xyXG5mdW5jdGlvbiBpbmplY3ROYXRpdmVUYWdDaGVjayhhcHApIHtcclxuICAgIC8vIEluamVjdCBgaXNOYXRpdmVUYWdgXHJcbiAgICAvLyB0aGlzIGlzIHVzZWQgZm9yIGNvbXBvbmVudCBuYW1lIHZhbGlkYXRpb24gKGRldiBvbmx5KVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcC5jb25maWcsICdpc05hdGl2ZVRhZycsIHtcclxuICAgICAgICB2YWx1ZTogKHRhZykgPT4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkdUYWcodGFnKSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2VcclxuICAgIH0pO1xyXG59XHJcbi8vIGRldiBvbmx5XHJcbmZ1bmN0aW9uIGluamVjdENvbXBpbGVyT3B0aW9uc0NoZWNrKGFwcCkge1xyXG4gICAgaWYgKGlzUnVudGltZU9ubHkoKSkge1xyXG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tRWxlbWVudCA9IGFwcC5jb25maWcuaXNDdXN0b21FbGVtZW50O1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcHAuY29uZmlnLCAnaXNDdXN0b21FbGVtZW50Jywge1xyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNDdXN0b21FbGVtZW50O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKGBUaGUgXFxgaXNDdXN0b21FbGVtZW50XFxgIGNvbmZpZyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gVXNlIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBcXGBjb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50XFxgIGluc3RlYWQuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSBhcHAuY29uZmlnLmNvbXBpbGVyT3B0aW9ucztcclxuICAgICAgICBjb25zdCBtc2cgPSBgVGhlIFxcYGNvbXBpbGVyT3B0aW9uc1xcYCBjb25maWcgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgYCArXHJcbiAgICAgICAgICAgIGBhIGJ1aWxkIG9mIFZ1ZS5qcyB0aGF0IGluY2x1ZGVzIHRoZSBydW50aW1lIGNvbXBpbGVyIChha2EgXCJmdWxsIGJ1aWxkXCIpLiBgICtcclxuICAgICAgICAgICAgYFNpbmNlIHlvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCwgXFxgY29tcGlsZXJPcHRpb25zXFxgIGAgK1xyXG4gICAgICAgICAgICBgbXVzdCBiZSBwYXNzZWQgdG8gXFxgQHZ1ZS9jb21waWxlci1kb21cXGAgaW4gdGhlIGJ1aWxkIHNldHVwIGluc3RlYWQuXFxuYCArXHJcbiAgICAgICAgICAgIGAtIEZvciB2dWUtbG9hZGVyOiBwYXNzIGl0IHZpYSB2dWUtbG9hZGVyJ3MgXFxgY29tcGlsZXJPcHRpb25zXFxgIGxvYWRlciBvcHRpb24uXFxuYCArXHJcbiAgICAgICAgICAgIGAtIEZvciB2dWUtY2xpOiBzZWUgaHR0cHM6Ly9jbGkudnVlanMub3JnL2d1aWRlL3dlYnBhY2suaHRtbCNtb2RpZnlpbmctb3B0aW9ucy1vZi1hLWxvYWRlclxcbmAgK1xyXG4gICAgICAgICAgICBgLSBGb3Igdml0ZTogcGFzcyBpdCB2aWEgQHZpdGVqcy9wbHVnaW4tdnVlIG9wdGlvbnMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUvdHJlZS9tYWluL3BhY2thZ2VzL3BsdWdpbi12dWUjZXhhbXBsZS1mb3ItcGFzc2luZy1vcHRpb25zLXRvLXZ1ZWNvbXBpbGVyLWRvbWA7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcC5jb25maWcsICdjb21waWxlck9wdGlvbnMnLCB7XHJcbiAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4obXNnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlck9wdGlvbnM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldCgpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4obXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRhaW5lcihjb250YWluZXIpIHtcclxuICAgIGlmIChpc1N0cmluZyhjb250YWluZXIpKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihjb250YWluZXIpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIXJlcykge1xyXG4gICAgICAgICAgICB3YXJuKGBGYWlsZWQgdG8gbW91bnQgYXBwOiBtb3VudCB0YXJnZXQgc2VsZWN0b3IgXCIke2NvbnRhaW5lcn1cIiByZXR1cm5lZCBudWxsLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgIHdpbmRvdy5TaGFkb3dSb290ICYmXHJcbiAgICAgICAgY29udGFpbmVyIGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QgJiZcclxuICAgICAgICBjb250YWluZXIubW9kZSA9PT0gJ2Nsb3NlZCcpIHtcclxuICAgICAgICB3YXJuKGBtb3VudGluZyBvbiBhIFNoYWRvd1Jvb3Qgd2l0aCBcXGB7bW9kZTogXCJjbG9zZWRcIn1cXGAgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBidWdzYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGFpbmVyO1xyXG59XHJcbmxldCBzc3JEaXJlY3RpdmVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5jb25zdCBpbml0RGlyZWN0aXZlc0ZvclNTUiA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXNzckRpcmVjdGl2ZUluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHNzckRpcmVjdGl2ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaW5pdFZNb2RlbEZvclNTUigpO1xyXG4gICAgICAgICAgICBpbml0VlNob3dGb3JTU1IoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICA7XG5cbmV4cG9ydCB7IFRyYW5zaXRpb24sIFRyYW5zaXRpb25Hcm91cCwgVnVlRWxlbWVudCwgY3JlYXRlQXBwLCBjcmVhdGVTU1JBcHAsIGRlZmluZUN1c3RvbUVsZW1lbnQsIGRlZmluZVNTUkN1c3RvbUVsZW1lbnQsIGh5ZHJhdGUsIGluaXREaXJlY3RpdmVzRm9yU1NSLCByZW5kZXIsIHVzZUNzc01vZHVsZSwgdXNlQ3NzVmFycywgdk1vZGVsQ2hlY2tib3gsIHZNb2RlbER5bmFtaWMsIHZNb2RlbFJhZGlvLCB2TW9kZWxTZWxlY3QsIHZNb2RlbFRleHQsIHZTaG93LCB3aXRoS2V5cywgd2l0aE1vZGlmaWVycyB9O1xuIiwiLyoqXHJcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxyXG4gKiBpcyBpbiB0aGF0IG1hcC5cclxuICogSU1QT1JUQU5UOiBhbGwgY2FsbHMgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByZWZpeGVkIHdpdGhcclxuICogXFwvXFwqI1xcX1xcX1BVUkVcXF9cXF9cXCpcXC9cclxuICogU28gdGhhdCByb2xsdXAgY2FuIHRyZWUtc2hha2UgdGhlbSBpZiBuZWNlc3NhcnkuXHJcbiAqL1xyXG5mdW5jdGlvbiBtYWtlTWFwKHN0ciwgZXhwZWN0c0xvd2VyQ2FzZSkge1xyXG4gICAgY29uc3QgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIGNvbnN0IGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZSA/IHZhbCA9PiAhIW1hcFt2YWwudG9Mb3dlckNhc2UoKV0gOiB2YWwgPT4gISFtYXBbdmFsXTtcclxufVxuXG4vKipcclxuICogZGV2IG9ubHkgZmxhZyAtPiBuYW1lIG1hcHBpbmdcclxuICovXHJcbmNvbnN0IFBhdGNoRmxhZ05hbWVzID0ge1xyXG4gICAgWzEgLyogUGF0Y2hGbGFncy5URVhUICovXTogYFRFWFRgLFxyXG4gICAgWzIgLyogUGF0Y2hGbGFncy5DTEFTUyAqL106IGBDTEFTU2AsXHJcbiAgICBbNCAvKiBQYXRjaEZsYWdzLlNUWUxFICovXTogYFNUWUxFYCxcclxuICAgIFs4IC8qIFBhdGNoRmxhZ3MuUFJPUFMgKi9dOiBgUFJPUFNgLFxyXG4gICAgWzE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqL106IGBGVUxMX1BST1BTYCxcclxuICAgIFszMiAvKiBQYXRjaEZsYWdzLkhZRFJBVEVfRVZFTlRTICovXTogYEhZRFJBVEVfRVZFTlRTYCxcclxuICAgIFs2NCAvKiBQYXRjaEZsYWdzLlNUQUJMRV9GUkFHTUVOVCAqL106IGBTVEFCTEVfRlJBR01FTlRgLFxyXG4gICAgWzEyOCAvKiBQYXRjaEZsYWdzLktFWUVEX0ZSQUdNRU5UICovXTogYEtFWUVEX0ZSQUdNRU5UYCxcclxuICAgIFsyNTYgLyogUGF0Y2hGbGFncy5VTktFWUVEX0ZSQUdNRU5UICovXTogYFVOS0VZRURfRlJBR01FTlRgLFxyXG4gICAgWzUxMiAvKiBQYXRjaEZsYWdzLk5FRURfUEFUQ0ggKi9dOiBgTkVFRF9QQVRDSGAsXHJcbiAgICBbMTAyNCAvKiBQYXRjaEZsYWdzLkRZTkFNSUNfU0xPVFMgKi9dOiBgRFlOQU1JQ19TTE9UU2AsXHJcbiAgICBbMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovXTogYERFVl9ST09UX0ZSQUdNRU5UYCxcclxuICAgIFstMSAvKiBQYXRjaEZsYWdzLkhPSVNURUQgKi9dOiBgSE9JU1RFRGAsXHJcbiAgICBbLTIgLyogUGF0Y2hGbGFncy5CQUlMICovXTogYEJBSUxgXHJcbn07XG5cbi8qKlxyXG4gKiBEZXYgb25seVxyXG4gKi9cclxuY29uc3Qgc2xvdEZsYWdzVGV4dCA9IHtcclxuICAgIFsxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi9dOiAnU1RBQkxFJyxcclxuICAgIFsyIC8qIFNsb3RGbGFncy5EWU5BTUlDICovXTogJ0RZTkFNSUMnLFxyXG4gICAgWzMgLyogU2xvdEZsYWdzLkZPUldBUkRFRCAqL106ICdGT1JXQVJERUQnXHJcbn07XG5cbmNvbnN0IEdMT0JBTFNfV0hJVEVfTElTVEVEID0gJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4scGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksJyArXHJcbiAgICAnZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSwnICtcclxuICAgICdPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCc7XHJcbmNvbnN0IGlzR2xvYmFsbHlXaGl0ZWxpc3RlZCA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChHTE9CQUxTX1dISVRFX0xJU1RFRCk7XG5cbmNvbnN0IHJhbmdlID0gMjtcclxuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUoc291cmNlLCBzdGFydCA9IDAsIGVuZCA9IHNvdXJjZS5sZW5ndGgpIHtcclxuICAgIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gaW5kaXZpZHVhbCBsaW5lcyBidXQgY2FwdHVyZSB0aGUgbmV3bGluZSBzZXF1ZW5jZVxyXG4gICAgLy8gdGhhdCBzZXBhcmF0ZWQgZWFjaCBsaW5lLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBhY3R1YWwgc2VxdWVuY2UgaXNcclxuICAgIC8vIG5lZWRlZCB0byBwcm9wZXJseSB0YWtlIGludG8gYWNjb3VudCB0aGUgZnVsbCBsaW5lIGxlbmd0aCBmb3Igb2Zmc2V0XHJcbiAgICAvLyBjb21wYXJpc29uXHJcbiAgICBsZXQgbGluZXMgPSBzb3VyY2Uuc3BsaXQoLyhcXHI/XFxuKS8pO1xyXG4gICAgLy8gU2VwYXJhdGUgdGhlIGxpbmVzIGFuZCBuZXdsaW5lIHNlcXVlbmNlcyBpbnRvIHNlcGFyYXRlIGFycmF5cyBmb3IgZWFzaWVyIHJlZmVyZW5jaW5nXHJcbiAgICBjb25zdCBuZXdsaW5lU2VxdWVuY2VzID0gbGluZXMuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAlIDIgPT09IDEpO1xyXG4gICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ICUgMiA9PT0gMCk7XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgY29uc3QgcmVzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY291bnQgKz1cclxuICAgICAgICAgICAgbGluZXNbaV0ubGVuZ3RoICtcclxuICAgICAgICAgICAgICAgICgobmV3bGluZVNlcXVlbmNlc1tpXSAmJiBuZXdsaW5lU2VxdWVuY2VzW2ldLmxlbmd0aCkgfHwgMCk7XHJcbiAgICAgICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpIC0gcmFuZ2U7IGogPD0gaSArIHJhbmdlIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBqICsgMTtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGAke2xpbmV9JHsnICcucmVwZWF0KE1hdGgubWF4KDMgLSBTdHJpbmcobGluZSkubGVuZ3RoLCAwKSl9fCAgJHtsaW5lc1tqXX1gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMaW5lU2VxTGVuZ3RoID0gKG5ld2xpbmVTZXF1ZW5jZXNbal0gJiYgbmV3bGluZVNlcXVlbmNlc1tqXS5sZW5ndGgpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHB1c2ggdW5kZXJsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFkID0gc3RhcnQgLSAoY291bnQgLSAobGluZUxlbmd0aCArIG5ld0xpbmVTZXFMZW5ndGgpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgxLCBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYCAgIHwgIGAgKyAnICcucmVwZWF0KHBhZCkgKyAnXicucmVwZWF0KGxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYCAgIHwgIGAgKyAnXicucmVwZWF0KGxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgbmV3TGluZVNlcUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLmpvaW4oJ1xcbicpO1xyXG59XG5cbi8qKlxyXG4gKiBPbiB0aGUgY2xpZW50IHdlIG9ubHkgbmVlZCB0byBvZmZlciBzcGVjaWFsIGNhc2VzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMgdGhhdFxyXG4gKiBoYXZlIGRpZmZlcmVudCBuYW1lcyBmcm9tIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG9tIHByb3BlcnRpZXM6XHJcbiAqIC0gaXRlbXNjb3BlIC0+IE4vQVxyXG4gKiAtIGFsbG93ZnVsbHNjcmVlbiAtPiBhbGxvd0Z1bGxzY3JlZW5cclxuICogLSBmb3Jtbm92YWxpZGF0ZSAtPiBmb3JtTm9WYWxpZGF0ZVxyXG4gKiAtIGlzbWFwIC0+IGlzTWFwXHJcbiAqIC0gbm9tb2R1bGUgLT4gbm9Nb2R1bGVcclxuICogLSBub3ZhbGlkYXRlIC0+IG5vVmFsaWRhdGVcclxuICogLSByZWFkb25seSAtPiByZWFkT25seVxyXG4gKi9cclxuY29uc3Qgc3BlY2lhbEJvb2xlYW5BdHRycyA9IGBpdGVtc2NvcGUsYWxsb3dmdWxsc2NyZWVuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZG9ubHlgO1xyXG5jb25zdCBpc1NwZWNpYWxCb29sZWFuQXR0ciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChzcGVjaWFsQm9vbGVhbkF0dHJzKTtcclxuLyoqXHJcbiAqIFRoZSBmdWxsIGxpc3QgaXMgbmVlZGVkIGR1cmluZyBTU1IgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBpbml0aWFsIG1hcmt1cC5cclxuICovXHJcbmNvbnN0IGlzQm9vbGVhbkF0dHIgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoc3BlY2lhbEJvb2xlYW5BdHRycyArXHJcbiAgICBgLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjb250cm9scyxkZWZhdWx0LGRlZmVyLGRpc2FibGVkLGhpZGRlbixgICtcclxuICAgIGBsb29wLG9wZW4scmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLGAgK1xyXG4gICAgYGNoZWNrZWQsbXV0ZWQsbXVsdGlwbGUsc2VsZWN0ZWRgKTtcclxuLyoqXHJcbiAqIEJvb2xlYW4gYXR0cmlidXRlcyBzaG91bGQgYmUgaW5jbHVkZWQgaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBvciAnJy5cclxuICogZS5nLiBgPHNlbGVjdCBtdWx0aXBsZT5gIGNvbXBpbGVzIHRvIGB7IG11bHRpcGxlOiAnJyB9YFxyXG4gKi9cclxuZnVuY3Rpb24gaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gISF2YWx1ZSB8fCB2YWx1ZSA9PT0gJyc7XHJcbn1cclxuY29uc3QgdW5zYWZlQXR0ckNoYXJSRSA9IC9bPi89XCInXFx1MDAwOVxcdTAwMGFcXHUwMDBjXFx1MDAyMF0vO1xyXG5jb25zdCBhdHRyVmFsaWRhdGlvbkNhY2hlID0ge307XHJcbmZ1bmN0aW9uIGlzU1NSU2FmZUF0dHJOYW1lKG5hbWUpIHtcclxuICAgIGlmIChhdHRyVmFsaWRhdGlvbkNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJWYWxpZGF0aW9uQ2FjaGVbbmFtZV07XHJcbiAgICB9XHJcbiAgICBjb25zdCBpc1Vuc2FmZSA9IHVuc2FmZUF0dHJDaGFyUkUudGVzdChuYW1lKTtcclxuICAgIGlmIChpc1Vuc2FmZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYHVuc2FmZSBhdHRyaWJ1dGUgbmFtZTogJHtuYW1lfWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChhdHRyVmFsaWRhdGlvbkNhY2hlW25hbWVdID0gIWlzVW5zYWZlKTtcclxufVxyXG5jb25zdCBwcm9wc1RvQXR0ck1hcCA9IHtcclxuICAgIGFjY2VwdENoYXJzZXQ6ICdhY2NlcHQtY2hhcnNldCcsXHJcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXHJcbiAgICBodG1sRm9yOiAnZm9yJyxcclxuICAgIGh0dHBFcXVpdjogJ2h0dHAtZXF1aXYnXHJcbn07XHJcbi8qKlxyXG4gKiBDU1MgcHJvcGVydGllcyB0aGF0IGFjY2VwdCBwbGFpbiBudW1iZXJzXHJcbiAqL1xyXG5jb25zdCBpc05vVW5pdE51bWVyaWNTdHlsZVByb3AgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoYGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsYm9yZGVyLWltYWdlLW91dHNldCxib3JkZXItaW1hZ2Utc2xpY2UsYCArXHJcbiAgICBgYm9yZGVyLWltYWdlLXdpZHRoLGJveC1mbGV4LGJveC1mbGV4LWdyb3VwLGJveC1vcmRpbmFsLWdyb3VwLGNvbHVtbi1jb3VudCxgICtcclxuICAgIGBjb2x1bW5zLGZsZXgsZmxleC1ncm93LGZsZXgtcG9zaXRpdmUsZmxleC1zaHJpbmssZmxleC1uZWdhdGl2ZSxmbGV4LW9yZGVyLGAgK1xyXG4gICAgYGdyaWQtcm93LGdyaWQtcm93LWVuZCxncmlkLXJvdy1zcGFuLGdyaWQtcm93LXN0YXJ0LGdyaWQtY29sdW1uLGAgK1xyXG4gICAgYGdyaWQtY29sdW1uLWVuZCxncmlkLWNvbHVtbi1zcGFuLGdyaWQtY29sdW1uLXN0YXJ0LGZvbnQtd2VpZ2h0LGxpbmUtY2xhbXAsYCArXHJcbiAgICBgbGluZS1oZWlnaHQsb3BhY2l0eSxvcmRlcixvcnBoYW5zLHRhYi1zaXplLHdpZG93cyx6LWluZGV4LHpvb20sYCArXHJcbiAgICAvLyBTVkdcclxuICAgIGBmaWxsLW9wYWNpdHksZmxvb2Qtb3BhY2l0eSxzdG9wLW9wYWNpdHksc3Ryb2tlLWRhc2hhcnJheSxzdHJva2UtZGFzaG9mZnNldCxgICtcclxuICAgIGBzdHJva2UtbWl0ZXJsaW1pdCxzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGhgKTtcclxuLyoqXHJcbiAqIEtub3duIGF0dHJpYnV0ZXMsIHRoaXMgaXMgdXNlZCBmb3Igc3RyaW5naWZpY2F0aW9uIG9mIHJ1bnRpbWUgc3RhdGljIG5vZGVzXHJcbiAqIHNvIHRoYXQgd2UgZG9uJ3Qgc3RyaW5naWZ5IGJpbmRpbmdzIHRoYXQgY2Fubm90IGJlIHNldCBmcm9tIEhUTUwuXHJcbiAqIERvbid0IGFsc28gZm9yZ2V0IHRvIGFsbG93IGBkYXRhLSpgIGFuZCBgYXJpYS0qYCFcclxuICogR2VuZXJhdGVkIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzXHJcbiAqL1xyXG5jb25zdCBpc0tub3duSHRtbEF0dHIgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoYGFjY2VwdCxhY2NlcHQtY2hhcnNldCxhY2Nlc3NrZXksYWN0aW9uLGFsaWduLGFsbG93LGFsdCxhc3luYyxgICtcclxuICAgIGBhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsYXV0b2ZvY3VzLGF1dG9wbGF5LGJhY2tncm91bmQsYmdjb2xvcixgICtcclxuICAgIGBib3JkZXIsYnVmZmVyZWQsY2FwdHVyZSxjaGFsbGVuZ2UsY2hhcnNldCxjaGVja2VkLGNpdGUsY2xhc3MsY29kZSxgICtcclxuICAgIGBjb2RlYmFzZSxjb2xvcixjb2xzLGNvbHNwYW4sY29udGVudCxjb250ZW50ZWRpdGFibGUsY29udGV4dG1lbnUsY29udHJvbHMsYCArXHJcbiAgICBgY29vcmRzLGNyb3Nzb3JpZ2luLGNzcCxkYXRhLGRhdGV0aW1lLGRlY29kaW5nLGRlZmF1bHQsZGVmZXIsZGlyLGRpcm5hbWUsYCArXHJcbiAgICBgZGlzYWJsZWQsZG93bmxvYWQsZHJhZ2dhYmxlLGRyb3B6b25lLGVuY3R5cGUsZW50ZXJrZXloaW50LGZvcixmb3JtLGAgK1xyXG4gICAgYGZvcm1hY3Rpb24sZm9ybWVuY3R5cGUsZm9ybW1ldGhvZCxmb3Jtbm92YWxpZGF0ZSxmb3JtdGFyZ2V0LGhlYWRlcnMsYCArXHJcbiAgICBgaGVpZ2h0LGhpZGRlbixoaWdoLGhyZWYsaHJlZmxhbmcsaHR0cC1lcXVpdixpY29uLGlkLGltcG9ydGFuY2UsaW50ZWdyaXR5LGAgK1xyXG4gICAgYGlzbWFwLGl0ZW1wcm9wLGtleXR5cGUsa2luZCxsYWJlbCxsYW5nLGxhbmd1YWdlLGxvYWRpbmcsbGlzdCxsb29wLGxvdyxgICtcclxuICAgIGBtYW5pZmVzdCxtYXgsbWF4bGVuZ3RoLG1pbmxlbmd0aCxtZWRpYSxtaW4sbXVsdGlwbGUsbXV0ZWQsbmFtZSxub3ZhbGlkYXRlLGAgK1xyXG4gICAgYG9wZW4sb3B0aW11bSxwYXR0ZXJuLHBpbmcscGxhY2Vob2xkZXIscG9zdGVyLHByZWxvYWQscmFkaW9ncm91cCxyZWFkb25seSxgICtcclxuICAgIGByZWZlcnJlcnBvbGljeSxyZWwscmVxdWlyZWQscmV2ZXJzZWQscm93cyxyb3dzcGFuLHNhbmRib3gsc2NvcGUsc2NvcGVkLGAgK1xyXG4gICAgYHNlbGVjdGVkLHNoYXBlLHNpemUsc2l6ZXMsc2xvdCxzcGFuLHNwZWxsY2hlY2ssc3JjLHNyY2RvYyxzcmNsYW5nLHNyY3NldCxgICtcclxuICAgIGBzdGFydCxzdGVwLHN0eWxlLHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCxgICtcclxuICAgIGB2YWx1ZSx3aWR0aCx3cmFwYCk7XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZWQgZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlXHJcbiAqL1xyXG5jb25zdCBpc0tub3duU3ZnQXR0ciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgeG1sbnMsYWNjZW50LWhlaWdodCxhY2N1bXVsYXRlLGFkZGl0aXZlLGFsaWdubWVudC1iYXNlbGluZSxhbHBoYWJldGljLGFtcGxpdHVkZSxgICtcclxuICAgIGBhcmFiaWMtZm9ybSxhc2NlbnQsYXR0cmlidXRlTmFtZSxhdHRyaWJ1dGVUeXBlLGF6aW11dGgsYmFzZUZyZXF1ZW5jeSxgICtcclxuICAgIGBiYXNlbGluZS1zaGlmdCxiYXNlUHJvZmlsZSxiYm94LGJlZ2luLGJpYXMsYnksY2FsY01vZGUsY2FwLWhlaWdodCxjbGFzcyxgICtcclxuICAgIGBjbGlwLGNsaXBQYXRoVW5pdHMsY2xpcC1wYXRoLGNsaXAtcnVsZSxjb2xvcixjb2xvci1pbnRlcnBvbGF0aW9uLGAgK1xyXG4gICAgYGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyxjb2xvci1wcm9maWxlLGNvbG9yLXJlbmRlcmluZyxgICtcclxuICAgIGBjb250ZW50U2NyaXB0VHlwZSxjb250ZW50U3R5bGVUeXBlLGNyb3Nzb3JpZ2luLGN1cnNvcixjeCxjeSxkLGRlY2VsZXJhdGUsYCArXHJcbiAgICBgZGVzY2VudCxkaWZmdXNlQ29uc3RhbnQsZGlyZWN0aW9uLGRpc3BsYXksZGl2aXNvcixkb21pbmFudC1iYXNlbGluZSxkdXIsZHgsYCArXHJcbiAgICBgZHksZWRnZU1vZGUsZWxldmF0aW9uLGVuYWJsZS1iYWNrZ3JvdW5kLGVuZCxleHBvbmVudCxmaWxsLGZpbGwtb3BhY2l0eSxgICtcclxuICAgIGBmaWxsLXJ1bGUsZmlsdGVyLGZpbHRlclJlcyxmaWx0ZXJVbml0cyxmbG9vZC1jb2xvcixmbG9vZC1vcGFjaXR5LGAgK1xyXG4gICAgYGZvbnQtZmFtaWx5LGZvbnQtc2l6ZSxmb250LXNpemUtYWRqdXN0LGZvbnQtc3RyZXRjaCxmb250LXN0eWxlLGAgK1xyXG4gICAgYGZvbnQtdmFyaWFudCxmb250LXdlaWdodCxmb3JtYXQsZnJvbSxmcixmeCxmeSxnMSxnMixnbHlwaC1uYW1lLGAgK1xyXG4gICAgYGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwsZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwsZ2x5cGhSZWYsYCArXHJcbiAgICBgZ3JhZGllbnRUcmFuc2Zvcm0sZ3JhZGllbnRVbml0cyxoYW5naW5nLGhlaWdodCxocmVmLGhyZWZsYW5nLGhvcml6LWFkdi14LGAgK1xyXG4gICAgYGhvcml6LW9yaWdpbi14LGlkLGlkZW9ncmFwaGljLGltYWdlLXJlbmRlcmluZyxpbixpbjIsaW50ZXJjZXB0LGssazEsazIsazMsYCArXHJcbiAgICBgazQsa2VybmVsTWF0cml4LGtlcm5lbFVuaXRMZW5ndGgsa2VybmluZyxrZXlQb2ludHMsa2V5U3BsaW5lcyxrZXlUaW1lcyxgICtcclxuICAgIGBsYW5nLGxlbmd0aEFkanVzdCxsZXR0ZXItc3BhY2luZyxsaWdodGluZy1jb2xvcixsaW1pdGluZ0NvbmVBbmdsZSxsb2NhbCxgICtcclxuICAgIGBtYXJrZXItZW5kLG1hcmtlci1taWQsbWFya2VyLXN0YXJ0LG1hcmtlckhlaWdodCxtYXJrZXJVbml0cyxtYXJrZXJXaWR0aCxgICtcclxuICAgIGBtYXNrLG1hc2tDb250ZW50VW5pdHMsbWFza1VuaXRzLG1hdGhlbWF0aWNhbCxtYXgsbWVkaWEsbWV0aG9kLG1pbixtb2RlLGAgK1xyXG4gICAgYG5hbWUsbnVtT2N0YXZlcyxvZmZzZXQsb3BhY2l0eSxvcGVyYXRvcixvcmRlcixvcmllbnQsb3JpZW50YXRpb24sb3JpZ2luLGAgK1xyXG4gICAgYG92ZXJmbG93LG92ZXJsaW5lLXBvc2l0aW9uLG92ZXJsaW5lLXRoaWNrbmVzcyxwYW5vc2UtMSxwYWludC1vcmRlcixwYXRoLGAgK1xyXG4gICAgYHBhdGhMZW5ndGgscGF0dGVybkNvbnRlbnRVbml0cyxwYXR0ZXJuVHJhbnNmb3JtLHBhdHRlcm5Vbml0cyxwaW5nLGAgK1xyXG4gICAgYHBvaW50ZXItZXZlbnRzLHBvaW50cyxwb2ludHNBdFgscG9pbnRzQXRZLHBvaW50c0F0WixwcmVzZXJ2ZUFscGhhLGAgK1xyXG4gICAgYHByZXNlcnZlQXNwZWN0UmF0aW8scHJpbWl0aXZlVW5pdHMscixyYWRpdXMscmVmZXJyZXJQb2xpY3kscmVmWCxyZWZZLHJlbCxgICtcclxuICAgIGByZW5kZXJpbmctaW50ZW50LHJlcGVhdENvdW50LHJlcGVhdER1cixyZXF1aXJlZEV4dGVuc2lvbnMscmVxdWlyZWRGZWF0dXJlcyxgICtcclxuICAgIGByZXN0YXJ0LHJlc3VsdCxyb3RhdGUscngscnksc2NhbGUsc2VlZCxzaGFwZS1yZW5kZXJpbmcsc2xvcGUsc3BhY2luZyxgICtcclxuICAgIGBzcGVjdWxhckNvbnN0YW50LHNwZWN1bGFyRXhwb25lbnQsc3BlZWQsc3ByZWFkTWV0aG9kLHN0YXJ0T2Zmc2V0LGAgK1xyXG4gICAgYHN0ZERldmlhdGlvbixzdGVtaCxzdGVtdixzdGl0Y2hUaWxlcyxzdG9wLWNvbG9yLHN0b3Atb3BhY2l0eSxgICtcclxuICAgIGBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uLHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzLHN0cmluZyxzdHJva2UsYCArXHJcbiAgICBgc3Ryb2tlLWRhc2hhcnJheSxzdHJva2UtZGFzaG9mZnNldCxzdHJva2UtbGluZWNhcCxzdHJva2UtbGluZWpvaW4sYCArXHJcbiAgICBgc3Ryb2tlLW1pdGVybGltaXQsc3Ryb2tlLW9wYWNpdHksc3Ryb2tlLXdpZHRoLHN0eWxlLHN1cmZhY2VTY2FsZSxgICtcclxuICAgIGBzeXN0ZW1MYW5ndWFnZSx0YWJpbmRleCx0YWJsZVZhbHVlcyx0YXJnZXQsdGFyZ2V0WCx0YXJnZXRZLHRleHQtYW5jaG9yLGAgK1xyXG4gICAgYHRleHQtZGVjb3JhdGlvbix0ZXh0LXJlbmRlcmluZyx0ZXh0TGVuZ3RoLHRvLHRyYW5zZm9ybSx0cmFuc2Zvcm0tb3JpZ2luLGAgK1xyXG4gICAgYHR5cGUsdTEsdTIsdW5kZXJsaW5lLXBvc2l0aW9uLHVuZGVybGluZS10aGlja25lc3MsdW5pY29kZSx1bmljb2RlLWJpZGksYCArXHJcbiAgICBgdW5pY29kZS1yYW5nZSx1bml0cy1wZXItZW0sdi1hbHBoYWJldGljLHYtaGFuZ2luZyx2LWlkZW9ncmFwaGljLGAgK1xyXG4gICAgYHYtbWF0aGVtYXRpY2FsLHZhbHVlcyx2ZWN0b3ItZWZmZWN0LHZlcnNpb24sdmVydC1hZHYteSx2ZXJ0LW9yaWdpbi14LGAgK1xyXG4gICAgYHZlcnQtb3JpZ2luLXksdmlld0JveCx2aWV3VGFyZ2V0LHZpc2liaWxpdHksd2lkdGgsd2lkdGhzLHdvcmQtc3BhY2luZyxgICtcclxuICAgIGB3cml0aW5nLW1vZGUseCx4LWhlaWdodCx4MSx4Mix4Q2hhbm5lbFNlbGVjdG9yLHhsaW5rOmFjdHVhdGUseGxpbms6YXJjcm9sZSxgICtcclxuICAgIGB4bGluazpocmVmLHhsaW5rOnJvbGUseGxpbms6c2hvdyx4bGluazp0aXRsZSx4bGluazp0eXBlLHhtbDpiYXNlLHhtbDpsYW5nLGAgK1xyXG4gICAgYHhtbDpzcGFjZSx5LHkxLHkyLHlDaGFubmVsU2VsZWN0b3Iseix6b29tQW5kUGFuYCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBjb25zdCByZXMgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGlzU3RyaW5nKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICA/IHBhcnNlU3RyaW5nU3R5bGUoaXRlbSlcclxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplU3R5bGUoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBub3JtYWxpemVkW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5jb25zdCBsaXN0RGVsaW1pdGVyUkUgPSAvOyg/IVteKF0qXFwpKS9nO1xyXG5jb25zdCBwcm9wZXJ0eURlbGltaXRlclJFID0gLzooLispLztcclxuZnVuY3Rpb24gcGFyc2VTdHJpbmdTdHlsZShjc3NUZXh0KSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuICAgIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlclJFKS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXJSRSk7XHJcbiAgICAgICAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXRbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5U3R5bGUoc3R5bGVzKSB7XHJcbiAgICBsZXQgcmV0ID0gJyc7XHJcbiAgICBpZiAoIXN0eWxlcyB8fCBpc1N0cmluZyhzdHlsZXMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW2tleV07XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IGtleS5zdGFydHNXaXRoKGAtLWApID8ga2V5IDogaHlwaGVuYXRlKGtleSk7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fFxyXG4gICAgICAgICAgICAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05vVW5pdE51bWVyaWNTdHlsZVByb3Aobm9ybWFsaXplZEtleSkpKSB7XHJcbiAgICAgICAgICAgIC8vIG9ubHkgcmVuZGVyIHZhbGlkIHZhbHVlc1xyXG4gICAgICAgICAgICByZXQgKz0gYCR7bm9ybWFsaXplZEtleX06JHt2YWx1ZX07YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUNsYXNzKHZhbHVlKSB7XHJcbiAgICBsZXQgcmVzID0gJyc7XHJcbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgcmVzID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNsYXNzKHZhbHVlW2ldKTtcclxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlcyArPSBub3JtYWxpemVkICsgJyAnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZVtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgcmVzICs9IG5hbWUgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzLnRyaW0oKTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyhwcm9wcykge1xyXG4gICAgaWYgKCFwcm9wcylcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCB7IGNsYXNzOiBrbGFzcywgc3R5bGUgfSA9IHByb3BzO1xyXG4gICAgaWYgKGtsYXNzICYmICFpc1N0cmluZyhrbGFzcykpIHtcclxuICAgICAgICBwcm9wcy5jbGFzcyA9IG5vcm1hbGl6ZUNsYXNzKGtsYXNzKTtcclxuICAgIH1cclxuICAgIGlmIChzdHlsZSkge1xyXG4gICAgICAgIHByb3BzLnN0eWxlID0gbm9ybWFsaXplU3R5bGUoc3R5bGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BzO1xyXG59XG5cbi8vIFRoZXNlIHRhZyBjb25maWdzIGFyZSBzaGFyZWQgYmV0d2VlbiBjb21waWxlci1kb20gYW5kIHJ1bnRpbWUtZG9tLCBzbyB0aGV5XHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudFxyXG5jb25zdCBIVE1MX1RBR1MgPSAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlciwnICtcclxuICAgICdoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sJyArXHJcbiAgICAnZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsJyArXHJcbiAgICAnZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ1YnkscyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsJyArXHJcbiAgICAndGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSwnICtcclxuICAgICdjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsJyArXHJcbiAgICAndGgsdHIsYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLCcgK1xyXG4gICAgJ29wdGlvbixvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLGRldGFpbHMsZGlhbG9nLG1lbnUsJyArXHJcbiAgICAnc3VtbWFyeSx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCc7XHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9FbGVtZW50XHJcbmNvbnN0IFNWR19UQUdTID0gJ3N2ZyxhbmltYXRlLGFuaW1hdGVNb3Rpb24sYW5pbWF0ZVRyYW5zZm9ybSxjaXJjbGUsY2xpcFBhdGgsY29sb3ItcHJvZmlsZSwnICtcclxuICAgICdkZWZzLGRlc2MsZGlzY2FyZCxlbGxpcHNlLGZlQmxlbmQsZmVDb2xvck1hdHJpeCxmZUNvbXBvbmVudFRyYW5zZmVyLCcgK1xyXG4gICAgJ2ZlQ29tcG9zaXRlLGZlQ29udm9sdmVNYXRyaXgsZmVEaWZmdXNlTGlnaHRpbmcsZmVEaXNwbGFjZW1lbnRNYXAsJyArXHJcbiAgICAnZmVEaXN0YW5jZUxpZ2h0LGZlRHJvcFNoYWRvdyxmZUZsb29kLGZlRnVuY0EsZmVGdW5jQixmZUZ1bmNHLGZlRnVuY1IsJyArXHJcbiAgICAnZmVHYXVzc2lhbkJsdXIsZmVJbWFnZSxmZU1lcmdlLGZlTWVyZ2VOb2RlLGZlTW9ycGhvbG9neSxmZU9mZnNldCwnICtcclxuICAgICdmZVBvaW50TGlnaHQsZmVTcGVjdWxhckxpZ2h0aW5nLGZlU3BvdExpZ2h0LGZlVGlsZSxmZVR1cmJ1bGVuY2UsZmlsdGVyLCcgK1xyXG4gICAgJ2ZvcmVpZ25PYmplY3QsZyxoYXRjaCxoYXRjaHBhdGgsaW1hZ2UsbGluZSxsaW5lYXJHcmFkaWVudCxtYXJrZXIsbWFzaywnICtcclxuICAgICdtZXNoLG1lc2hncmFkaWVudCxtZXNocGF0Y2gsbWVzaHJvdyxtZXRhZGF0YSxtcGF0aCxwYXRoLHBhdHRlcm4sJyArXHJcbiAgICAncG9seWdvbixwb2x5bGluZSxyYWRpYWxHcmFkaWVudCxyZWN0LHNldCxzb2xpZGNvbG9yLHN0b3Asc3dpdGNoLHN5bWJvbCwnICtcclxuICAgICd0ZXh0LHRleHRQYXRoLHRpdGxlLHRzcGFuLHVua25vd24sdXNlLHZpZXcnO1xyXG5jb25zdCBWT0lEX1RBR1MgPSAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxocixpbWcsaW5wdXQsbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnInO1xyXG4vKipcclxuICogQ29tcGlsZXIgb25seS5cclxuICogRG8gTk9UIHVzZSBpbiBydW50aW1lIGNvZGUgcGF0aHMgdW5sZXNzIGJlaGluZCBgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpYCBmbGFnLlxyXG4gKi9cclxuY29uc3QgaXNIVE1MVGFnID0gLyojX19QVVJFX18qLyBtYWtlTWFwKEhUTUxfVEFHUyk7XHJcbi8qKlxyXG4gKiBDb21waWxlciBvbmx5LlxyXG4gKiBEbyBOT1QgdXNlIGluIHJ1bnRpbWUgY29kZSBwYXRocyB1bmxlc3MgYmVoaW5kIGAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylgIGZsYWcuXHJcbiAqL1xyXG5jb25zdCBpc1NWR1RhZyA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChTVkdfVEFHUyk7XHJcbi8qKlxyXG4gKiBDb21waWxlciBvbmx5LlxyXG4gKiBEbyBOT1QgdXNlIGluIHJ1bnRpbWUgY29kZSBwYXRocyB1bmxlc3MgYmVoaW5kIGAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylgIGZsYWcuXHJcbiAqL1xyXG5jb25zdCBpc1ZvaWRUYWcgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoVk9JRF9UQUdTKTtcblxuY29uc3QgZXNjYXBlUkUgPSAvW1wiJyY8Pl0vO1xyXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHN0cmluZykge1xyXG4gICAgY29uc3Qgc3RyID0gJycgKyBzdHJpbmc7XHJcbiAgICBjb25zdCBtYXRjaCA9IGVzY2FwZVJFLmV4ZWMoc3RyKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG4gICAgbGV0IGh0bWwgPSAnJztcclxuICAgIGxldCBlc2NhcGVkO1xyXG4gICAgbGV0IGluZGV4O1xyXG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XHJcbiAgICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMzQ6IC8vIFwiXHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gJyZxdW90Oyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzODogLy8gJlxyXG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9ICcmYW1wOyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOTogLy8gJ1xyXG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9ICcmIzM5Oyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2MDogLy8gPFxyXG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9ICcmbHQ7JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDYyOiAvLyA+XHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gJyZndDsnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxhc3RJbmRleCAhPT0gaW5kZXgpIHtcclxuICAgICAgICAgICAgaHRtbCArPSBzdHIuc2xpY2UobGFzdEluZGV4LCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcclxuICAgICAgICBodG1sICs9IGVzY2FwZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGFzdEluZGV4ICE9PSBpbmRleCA/IGh0bWwgKyBzdHIuc2xpY2UobGFzdEluZGV4LCBpbmRleCkgOiBodG1sO1xyXG59XHJcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTIvc3ludGF4Lmh0bWwjY29tbWVudHNcclxuY29uc3QgY29tbWVudFN0cmlwUkUgPSAvXi0/Pnw8IS0tfC0tPnwtLSE+fDwhLSQvZztcclxuZnVuY3Rpb24gZXNjYXBlSHRtbENvbW1lbnQoc3JjKSB7XHJcbiAgICByZXR1cm4gc3JjLnJlcGxhY2UoY29tbWVudFN0cmlwUkUsICcnKTtcclxufVxuXG5mdW5jdGlvbiBsb29zZUNvbXBhcmVBcnJheXMoYSwgYikge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgZXF1YWwgPSB0cnVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGVxdWFsICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZXF1YWwgPSBsb29zZUVxdWFsKGFbaV0sIGJbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVxdWFsO1xyXG59XHJcbmZ1bmN0aW9uIGxvb3NlRXF1YWwoYSwgYikge1xyXG4gICAgaWYgKGEgPT09IGIpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBsZXQgYVZhbGlkVHlwZSA9IGlzRGF0ZShhKTtcclxuICAgIGxldCBiVmFsaWRUeXBlID0gaXNEYXRlKGIpO1xyXG4gICAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xyXG4gICAgICAgIHJldHVybiBhVmFsaWRUeXBlICYmIGJWYWxpZFR5cGUgPyBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCkgOiBmYWxzZTtcclxuICAgIH1cclxuICAgIGFWYWxpZFR5cGUgPSBpc1N5bWJvbChhKTtcclxuICAgIGJWYWxpZFR5cGUgPSBpc1N5bWJvbChiKTtcclxuICAgIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcclxuICAgICAgICByZXR1cm4gYSA9PT0gYjtcclxuICAgIH1cclxuICAgIGFWYWxpZFR5cGUgPSBpc0FycmF5KGEpO1xyXG4gICAgYlZhbGlkVHlwZSA9IGlzQXJyYXkoYik7XHJcbiAgICBpZiAoYVZhbGlkVHlwZSB8fCBiVmFsaWRUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGFWYWxpZFR5cGUgJiYgYlZhbGlkVHlwZSA/IGxvb3NlQ29tcGFyZUFycmF5cyhhLCBiKSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgYVZhbGlkVHlwZSA9IGlzT2JqZWN0KGEpO1xyXG4gICAgYlZhbGlkVHlwZSA9IGlzT2JqZWN0KGIpO1xyXG4gICAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGhpcyBpZiB3aWxsIHByb2JhYmx5IG5ldmVyIGJlIGNhbGxlZCAqL1xyXG4gICAgICAgIGlmICghYVZhbGlkVHlwZSB8fCAhYlZhbGlkVHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFLZXlzQ291bnQgPSBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgYktleXNDb3VudCA9IE9iamVjdC5rZXlzKGIpLmxlbmd0aDtcclxuICAgICAgICBpZiAoYUtleXNDb3VudCAhPT0gYktleXNDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYUhhc0tleSA9IGEuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgICAgICAgICAgY29uc3QgYkhhc0tleSA9IGIuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgICAgICAgICAgaWYgKChhSGFzS2V5ICYmICFiSGFzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKCFhSGFzS2V5ICYmIGJIYXNLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICAhbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcclxufVxyXG5mdW5jdGlvbiBsb29zZUluZGV4T2YoYXJyLCB2YWwpIHtcclxuICAgIHJldHVybiBhcnIuZmluZEluZGV4KGl0ZW0gPT4gbG9vc2VFcXVhbChpdGVtLCB2YWwpKTtcclxufVxuXG4vKipcclxuICogRm9yIGNvbnZlcnRpbmcge3sgaW50ZXJwb2xhdGlvbiB9fSB2YWx1ZXMgdG8gZGlzcGxheWVkIHN0cmluZ3MuXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCB0b0Rpc3BsYXlTdHJpbmcgPSAodmFsKSA9PiB7XHJcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsKVxyXG4gICAgICAgID8gdmFsXHJcbiAgICAgICAgOiB2YWwgPT0gbnVsbFxyXG4gICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgIDogaXNBcnJheSh2YWwpIHx8XHJcbiAgICAgICAgICAgICAgICAoaXNPYmplY3QodmFsKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWwudG9TdHJpbmcgPT09IG9iamVjdFRvU3RyaW5nIHx8ICFpc0Z1bmN0aW9uKHZhbC50b1N0cmluZykpKVxyXG4gICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIHJlcGxhY2VyLCAyKVxyXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcodmFsKTtcclxufTtcclxuY29uc3QgcmVwbGFjZXIgPSAoX2tleSwgdmFsKSA9PiB7XHJcbiAgICAvLyBjYW4ndCB1c2UgaXNSZWYgaGVyZSBzaW5jZSBAdnVlL3NoYXJlZCBoYXMgbm8gZGVwc1xyXG4gICAgaWYgKHZhbCAmJiB2YWwuX192X2lzUmVmKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VyKF9rZXksIHZhbC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc01hcCh2YWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgW2BNYXAoJHt2YWwuc2l6ZX0pYF06IFsuLi52YWwuZW50cmllcygpXS5yZWR1Y2UoKGVudHJpZXMsIFtrZXksIHZhbF0pID0+IHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXNbYCR7a2V5fSA9PmBdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJpZXM7XHJcbiAgICAgICAgICAgIH0sIHt9KVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1NldCh2YWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgW2BTZXQoJHt2YWwuc2l6ZX0pYF06IFsuLi52YWwudmFsdWVzKCldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkgJiYgIWlzQXJyYXkodmFsKSAmJiAhaXNQbGFpbk9iamVjdCh2YWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufTtcblxuY29uc3QgRU1QVFlfT0JKID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICA/IE9iamVjdC5mcmVlemUoe30pXHJcbiAgICA6IHt9O1xyXG5jb25zdCBFTVBUWV9BUlIgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBPYmplY3QuZnJlZXplKFtdKSA6IFtdO1xyXG5jb25zdCBOT09QID0gKCkgPT4geyB9O1xyXG4vKipcclxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cclxuICovXHJcbmNvbnN0IE5PID0gKCkgPT4gZmFsc2U7XHJcbmNvbnN0IG9uUkUgPSAvXm9uW15hLXpdLztcclxuY29uc3QgaXNPbiA9IChrZXkpID0+IG9uUkUudGVzdChrZXkpO1xyXG5jb25zdCBpc01vZGVsTGlzdGVuZXIgPSAoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnb25VcGRhdGU6Jyk7XHJcbmNvbnN0IGV4dGVuZCA9IE9iamVjdC5hc3NpZ247XHJcbmNvbnN0IHJlbW92ZSA9IChhcnIsIGVsKSA9PiB7XHJcbiAgICBjb25zdCBpID0gYXJyLmluZGV4T2YoZWwpO1xyXG4gICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuY29uc3QgaGFzT3duID0gKHZhbCwga2V5KSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwga2V5KTtcclxuY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XHJcbmNvbnN0IGlzTWFwID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IE1hcF0nO1xyXG5jb25zdCBpc1NldCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSAnW29iamVjdCBTZXRdJztcclxuY29uc3QgaXNEYXRlID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcclxuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XHJcbmNvbnN0IGlzU3RyaW5nID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XHJcbmNvbnN0IGlzU3ltYm9sID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCc7XHJcbmNvbnN0IGlzT2JqZWN0ID0gKHZhbCkgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xyXG5jb25zdCBpc1Byb21pc2UgPSAodmFsKSA9PiB7XHJcbiAgICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC50aGVuKSAmJiBpc0Z1bmN0aW9uKHZhbC5jYXRjaCk7XHJcbn07XHJcbmNvbnN0IG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcclxuY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlKSA9PiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcclxuY29uc3QgdG9SYXdUeXBlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAvLyBleHRyYWN0IFwiUmF3VHlwZVwiIGZyb20gc3RyaW5ncyBsaWtlIFwiW29iamVjdCBSYXdUeXBlXVwiXHJcbiAgICByZXR1cm4gdG9UeXBlU3RyaW5nKHZhbHVlKS5zbGljZSg4LCAtMSk7XHJcbn07XHJcbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XHJcbmNvbnN0IGlzSW50ZWdlcktleSA9IChrZXkpID0+IGlzU3RyaW5nKGtleSkgJiZcclxuICAgIGtleSAhPT0gJ05hTicgJiZcclxuICAgIGtleVswXSAhPT0gJy0nICYmXHJcbiAgICAnJyArIHBhcnNlSW50KGtleSwgMTApID09PSBrZXk7XHJcbmNvbnN0IGlzUmVzZXJ2ZWRQcm9wID0gLyojX19QVVJFX18qLyBtYWtlTWFwKFxyXG4vLyB0aGUgbGVhZGluZyBjb21tYSBpcyBpbnRlbnRpb25hbCBzbyBlbXB0eSBzdHJpbmcgXCJcIiBpcyBhbHNvIGluY2x1ZGVkXHJcbicsa2V5LHJlZixyZWZfZm9yLHJlZl9rZXksJyArXHJcbiAgICAnb25Wbm9kZUJlZm9yZU1vdW50LG9uVm5vZGVNb3VudGVkLCcgK1xyXG4gICAgJ29uVm5vZGVCZWZvcmVVcGRhdGUsb25Wbm9kZVVwZGF0ZWQsJyArXHJcbiAgICAnb25Wbm9kZUJlZm9yZVVubW91bnQsb25Wbm9kZVVubW91bnRlZCcpO1xyXG5jb25zdCBpc0J1aWx0SW5EaXJlY3RpdmUgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoJ2JpbmQsY2xvYWssZWxzZS1pZixlbHNlLGZvcixodG1sLGlmLG1vZGVsLG9uLG9uY2UscHJlLHNob3csc2xvdCx0ZXh0LG1lbW8nKTtcclxuY29uc3QgY2FjaGVTdHJpbmdGdW5jdGlvbiA9IChmbikgPT4ge1xyXG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgcmV0dXJuICgoc3RyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gY2FjaGVbc3RyXTtcclxuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XHJcbiAgICB9KTtcclxufTtcclxuY29uc3QgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBjYW1lbGl6ZSA9IGNhY2hlU3RyaW5nRnVuY3Rpb24oKHN0cikgPT4ge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIChfLCBjKSA9PiAoYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKSk7XHJcbn0pO1xyXG5jb25zdCBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgaHlwaGVuYXRlID0gY2FjaGVTdHJpbmdGdW5jdGlvbigoc3RyKSA9PiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCkpO1xyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IGNhcGl0YWxpemUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSk7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgdG9IYW5kbGVyS2V5ID0gY2FjaGVTdHJpbmdGdW5jdGlvbigoc3RyKSA9PiBzdHIgPyBgb24ke2NhcGl0YWxpemUoc3RyKX1gIDogYGApO1xyXG4vLyBjb21wYXJlIHdoZXRoZXIgYSB2YWx1ZSBoYXMgY2hhbmdlZCwgYWNjb3VudGluZyBmb3IgTmFOLlxyXG5jb25zdCBoYXNDaGFuZ2VkID0gKHZhbHVlLCBvbGRWYWx1ZSkgPT4gIU9iamVjdC5pcyh2YWx1ZSwgb2xkVmFsdWUpO1xyXG5jb25zdCBpbnZva2VBcnJheUZucyA9IChmbnMsIGFyZykgPT4ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmbnNbaV0oYXJnKTtcclxuICAgIH1cclxufTtcclxuY29uc3QgZGVmID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxufTtcclxuY29uc3QgdG9OdW1iZXIgPSAodmFsKSA9PiB7XHJcbiAgICBjb25zdCBuID0gcGFyc2VGbG9hdCh2YWwpO1xyXG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogbjtcclxufTtcclxubGV0IF9nbG9iYWxUaGlzO1xyXG5jb25zdCBnZXRHbG9iYWxUaGlzID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIChfZ2xvYmFsVGhpcyB8fFxyXG4gICAgICAgIChfZ2xvYmFsVGhpcyA9XHJcbiAgICAgICAgICAgIHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxUaGlzXHJcbiAgICAgICAgICAgICAgICA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZlxyXG4gICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnbG9iYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pKTtcclxufTtcclxuY29uc3QgaWRlbnRSRSA9IC9eW18kYS16QS1aXFx4QTAtXFx1RkZGRl1bXyRhLXpBLVowLTlcXHhBMC1cXHVGRkZGXSokLztcclxuZnVuY3Rpb24gZ2VuUHJvcHNBY2Nlc3NFeHAobmFtZSkge1xyXG4gICAgcmV0dXJuIGlkZW50UkUudGVzdChuYW1lKVxyXG4gICAgICAgID8gYF9fcHJvcHMuJHtuYW1lfWBcclxuICAgICAgICA6IGBfX3Byb3BzWyR7SlNPTi5zdHJpbmdpZnkobmFtZSl9XWA7XHJcbn1cblxuZXhwb3J0IHsgRU1QVFlfQVJSLCBFTVBUWV9PQkosIE5PLCBOT09QLCBQYXRjaEZsYWdOYW1lcywgY2FtZWxpemUsIGNhcGl0YWxpemUsIGRlZiwgZXNjYXBlSHRtbCwgZXNjYXBlSHRtbENvbW1lbnQsIGV4dGVuZCwgZ2VuUHJvcHNBY2Nlc3NFeHAsIGdlbmVyYXRlQ29kZUZyYW1lLCBnZXRHbG9iYWxUaGlzLCBoYXNDaGFuZ2VkLCBoYXNPd24sIGh5cGhlbmF0ZSwgaW5jbHVkZUJvb2xlYW5BdHRyLCBpbnZva2VBcnJheUZucywgaXNBcnJheSwgaXNCb29sZWFuQXR0ciwgaXNCdWlsdEluRGlyZWN0aXZlLCBpc0RhdGUsIGlzRnVuY3Rpb24sIGlzR2xvYmFsbHlXaGl0ZWxpc3RlZCwgaXNIVE1MVGFnLCBpc0ludGVnZXJLZXksIGlzS25vd25IdG1sQXR0ciwgaXNLbm93blN2Z0F0dHIsIGlzTWFwLCBpc01vZGVsTGlzdGVuZXIsIGlzTm9Vbml0TnVtZXJpY1N0eWxlUHJvcCwgaXNPYmplY3QsIGlzT24sIGlzUGxhaW5PYmplY3QsIGlzUHJvbWlzZSwgaXNSZXNlcnZlZFByb3AsIGlzU1NSU2FmZUF0dHJOYW1lLCBpc1NWR1RhZywgaXNTZXQsIGlzU3BlY2lhbEJvb2xlYW5BdHRyLCBpc1N0cmluZywgaXNTeW1ib2wsIGlzVm9pZFRhZywgbG9vc2VFcXVhbCwgbG9vc2VJbmRleE9mLCBtYWtlTWFwLCBub3JtYWxpemVDbGFzcywgbm9ybWFsaXplUHJvcHMsIG5vcm1hbGl6ZVN0eWxlLCBvYmplY3RUb1N0cmluZywgcGFyc2VTdHJpbmdTdHlsZSwgcHJvcHNUb0F0dHJNYXAsIHJlbW92ZSwgc2xvdEZsYWdzVGV4dCwgc3RyaW5naWZ5U3R5bGUsIHRvRGlzcGxheVN0cmluZywgdG9IYW5kbGVyS2V5LCB0b051bWJlciwgdG9SYXdUeXBlLCB0b1R5cGVTdHJpbmcgfTtcbiIsImltcG9ydCB7IHRvUmVmcywgZ2V0Q3VycmVudEluc3RhbmNlLCByZWYsIGNvbXB1dGVkLCB3YXRjaCwgbmV4dFRpY2ssIG9uTW91bnRlZCwgb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2ssIG5vcm1hbGl6ZUNsYXNzLCBjcmVhdGVDb21tZW50Vk5vZGUsIG1lcmdlUHJvcHMsIHdpdGhNb2RpZmllcnMsIEZyYWdtZW50LCByZW5kZXJMaXN0LCByZW5kZXJTbG90LCBjcmVhdGVUZXh0Vk5vZGUsIHRvRGlzcGxheVN0cmluZywgY3JlYXRlRWxlbWVudFZOb2RlIH0gZnJvbSAndnVlJztcblxuZnVuY3Rpb24gaXNOdWxsaXNoICh2YWwpIHtcbiAgcmV0dXJuIFtudWxsLCB1bmRlZmluZWRdLmluZGV4T2YodmFsKSAhPT0gLTFcbn1cblxuZnVuY3Rpb24gdXNlRGF0YSAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBvYmplY3QsIHZhbHVlUHJvcCwgbW9kZSB9ID0gdG9SZWZzKHByb3BzKTtcblxuICBjb25zdCAkdGhpcyA9IGdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O1xuXG4gIC8vID09PT09PT09PT09PSBERVBFTkRFTkNJRVMgPT09PT09PT09PT09XG5cbiAgY29uc3QgaXYgPSBkZXAuaXY7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICBjb25zdCB1cGRhdGUgPSAodmFsKSA9PiB7XG4gICAgLy8gU2V0dGluZyBvYmplY3QocykgYXMgaW50ZXJuYWwgdmFsdWVcbiAgICBpdi52YWx1ZSA9IG1ha2VJbnRlcm5hbCh2YWwpO1xuXG4gICAgLy8gU2V0dGluZyBvYmplY3Qocykgb3IgcGxhaW4gdmFsdWUgYXMgZXh0ZXJuYWwgXG4gICAgLy8gdmFsdWUgYmFzZWQgb24gYG9wdGlvbmAgc2V0dGluZ1xuICAgIGNvbnN0IGV4dGVybmFsVmFsID0gbWFrZUV4dGVybmFsKHZhbCk7XG5cbiAgICBjb250ZXh0LmVtaXQoJ2NoYW5nZScsIGV4dGVybmFsVmFsLCAkdGhpcyk7XG4gICAgY29udGV4dC5lbWl0KCdpbnB1dCcsIGV4dGVybmFsVmFsKTtcbiAgICBjb250ZXh0LmVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZXh0ZXJuYWxWYWwpO1xuICB9OyBcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgbWFrZUV4dGVybmFsID0gKHZhbCkgPT4ge1xuICAgIC8vIElmIGV4dGVybmFsIHZhbHVlIHNob3VsZCBiZSBvYmplY3RcbiAgICAvLyBubyB0cmFuc2Zvcm1hdGlvbiBpcyByZXF1aXJlZFxuICAgIGlmIChvYmplY3QudmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICAvLyBObyBuZWVkIHRvIHRyYW5zZm9ybSBpZiBlbXB0eSB2YWx1ZVxuICAgIGlmIChpc051bGxpc2godmFsKSkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgIH1cblxuICAgIC8vIElmIGV4dGVybmFsIHNob3VsZCBiZSBwbGFpbiB0cmFuc2Zvcm1cbiAgICAvLyB2YWx1ZSBvYmplY3QgdG8gcGxhaW4gdmFsdWVzXG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbCkgPyB2YWxbdmFsdWVQcm9wLnZhbHVlXSA6IHZhbC5tYXAodiA9PiB2W3ZhbHVlUHJvcC52YWx1ZV0pXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IG1ha2VJbnRlcm5hbCA9ICh2YWwpID0+IHtcbiAgICBpZiAoaXNOdWxsaXNoKHZhbCkpIHtcbiAgICAgIHJldHVybiBtb2RlLnZhbHVlID09PSAnc2luZ2xlJyA/IHt9IDogW11cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGUsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlVmFsdWUgKHByb3BzLCBjb250ZXh0KVxue1xuICBjb25zdCB7IHZhbHVlLCBtb2RlbFZhbHVlLCBtb2RlLCB2YWx1ZVByb3AgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICAvLyBpbnRlcm5hbFZhbHVlXG4gIGNvbnN0IGl2ID0gcmVmKG1vZGUudmFsdWUgIT09ICdzaW5nbGUnID8gW10gOiB7fSk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAvLyBleHRlcm5hbFZhbHVlXG4gIGNvbnN0IGV2ID0gbW9kZWxWYWx1ZSAmJiBtb2RlbFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgPyBtb2RlbFZhbHVlIDogdmFsdWU7XG5cbiAgY29uc3QgcGxhaW5WYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gbW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScgPyBpdi52YWx1ZVt2YWx1ZVByb3AudmFsdWVdIDogaXYudmFsdWUubWFwKHY9PnZbdmFsdWVQcm9wLnZhbHVlXSlcbiAgfSk7XG5cbiAgY29uc3QgdGV4dFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBtb2RlLnZhbHVlICE9PSAnc2luZ2xlJyA/IGl2LnZhbHVlLm1hcCh2PT52W3ZhbHVlUHJvcC52YWx1ZV0pLmpvaW4oJywnKSA6IGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpdixcbiAgICBpbnRlcm5hbFZhbHVlOiBpdixcbiAgICBldixcbiAgICBleHRlcm5hbFZhbHVlOiBldixcbiAgICB0ZXh0VmFsdWUsXG4gICAgcGxhaW5WYWx1ZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VTZWFyY2ggKHByb3BzLCBjb250ZXh0LCBkZXApXG57ICBjb25zdCB7IHJlZ2V4IH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIGNvbnN0ICR0aGlzID0gZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpc09wZW4gPSBkZXAuaXNPcGVuO1xuICBjb25zdCBvcGVuID0gZGVwLm9wZW47XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICBjb25zdCBzZWFyY2ggPSByZWYobnVsbCk7XG5cbiAgY29uc3QgaW5wdXQgPSByZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICBjb25zdCBjbGVhclNlYXJjaCA9ICgpID0+IHtcbiAgICBzZWFyY2gudmFsdWUgPSAnJztcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dCA9IChlKSA9PiB7XG4gICAgc2VhcmNoLnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5cHJlc3MgPSAoZSkgPT4ge1xuICAgIGlmIChyZWdleCAmJiByZWdleC52YWx1ZSkge1xuICAgICAgbGV0IHJlZ2V4cCA9IHJlZ2V4LnZhbHVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZ2V4cCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWUua2V5Lm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9IChlKSA9PiB7XG4gICAgaWYgKHJlZ2V4ICYmIHJlZ2V4LnZhbHVlKSB7XG4gICAgICBsZXQgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgIGxldCBwYXN0ZWREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG5cbiAgICAgIGxldCByZWdleHAgPSByZWdleC52YWx1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZWdleHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFwYXN0ZWREYXRhLnNwbGl0KCcnKS5ldmVyeShjID0+ICEhYy5tYXRjaChyZWdleHApKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5lbWl0KCdwYXN0ZScsIGUsICR0aGlzKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PSBXQVRDSEVSUyA9PT09PT09PT09PT09PVxuXG4gIHdhdGNoKHNlYXJjaCwgKHZhbCkgPT4ge1xuICAgIGlmICghaXNPcGVuLnZhbHVlICYmIHZhbCkge1xuICAgICAgb3BlbigpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZW1pdCgnc2VhcmNoLWNoYW5nZScsIHZhbCwgJHRoaXMpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHNlYXJjaCxcbiAgICBpbnB1dCxcbiAgICBjbGVhclNlYXJjaCxcbiAgICBoYW5kbGVTZWFyY2hJbnB1dCxcbiAgICBoYW5kbGVLZXlwcmVzcyxcbiAgICBoYW5kbGVQYXN0ZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VQb2ludGVyJDEgKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHsgZ3JvdXBTZWxlY3QsIG1vZGUsIGdyb3VwcywgZGlzYWJsZWRQcm9wIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIC8vID09PT09PT09PT09PT09PT0gREFUQSA9PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgcG9pbnRlciA9IHJlZihudWxsKTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IHNldFBvaW50ZXIgPSAob3B0aW9uKSA9PiB7XG4gICAgaWYgKG9wdGlvbiA9PT0gdW5kZWZpbmVkIHx8IChvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uW2Rpc2FibGVkUHJvcC52YWx1ZV0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXBzLnZhbHVlICYmIG9wdGlvbiAmJiBvcHRpb24uZ3JvdXAgJiYgKG1vZGUudmFsdWUgPT09ICdzaW5nbGUnIHx8ICFncm91cFNlbGVjdC52YWx1ZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHBvaW50ZXIudmFsdWUgPSBvcHRpb247XG4gIH07XG5cbiAgY29uc3QgY2xlYXJQb2ludGVyID0gKCkgPT4ge1xuICAgIHNldFBvaW50ZXIobnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwb2ludGVyLFxuICAgIHNldFBvaW50ZXIsXG4gICAgY2xlYXJQb2ludGVyLFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyLCBzdHJpY3QgPSB0cnVlKSB7XG4gIHJldHVybiBzdHJpY3RcbiAgICA/IFN0cmluZyhzdHIpLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gICAgOiBTdHJpbmcoc3RyKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1xccHtEaWFjcml0aWN9L2d1LCAnJykudG9Mb3dlckNhc2UoKS50cmltKClcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QgKHZhcmlhYmxlKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFyaWFibGUpID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBhcnJheXNFcXVhbCAoYXJyYXkxLCBhcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyU29ydGVkID0gYXJyYXkyLnNsaWNlKCkuc29ydCgpO1xuXG4gIHJldHVybiBhcnJheTEubGVuZ3RoID09PSBhcnJheTIubGVuZ3RoICYmIGFycmF5MS5zbGljZSgpLnNvcnQoKS5ldmVyeShmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJyYXkyU29ydGVkW2luZGV4XTtcbiAgfSlcbn1cblxuZnVuY3Rpb24gdXNlT3B0aW9ucyAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBcbiAgICBvcHRpb25zLCBtb2RlLCB0cmFja0J5OiB0cmFja0J5XywgbGltaXQsIGhpZGVTZWxlY3RlZCwgY3JlYXRlVGFnLCBjcmVhdGVPcHRpb246IGNyZWF0ZU9wdGlvbl8sIGxhYmVsLFxuICAgIGFwcGVuZE5ld1RhZywgYXBwZW5kTmV3T3B0aW9uOiBhcHBlbmROZXdPcHRpb25fLCBtdWx0aXBsZUxhYmVsLCBvYmplY3QsIGxvYWRpbmcsIGRlbGF5LCByZXNvbHZlT25Mb2FkLFxuICAgIG1pbkNoYXJzLCBmaWx0ZXJSZXN1bHRzLCBjbGVhck9uU2VhcmNoLCBjbGVhck9uU2VsZWN0LCB2YWx1ZVByb3AsXG4gICAgY2FuRGVzZWxlY3QsIG1heCwgc3RyaWN0LCBjbG9zZU9uU2VsZWN0LCBncm91cHM6IGdyb3VwcGVkLCByZXZlcnNlLCBpbmZpbml0ZSxcbiAgICBncm91cE9wdGlvbnMsIGdyb3VwSGlkZUVtcHR5LCBncm91cFNlbGVjdCwgb25DcmVhdGUsIGRpc2FibGVkUHJvcCwgc2VhcmNoU3RhcnQsXG4gIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIGNvbnN0ICR0aGlzID0gZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpdiA9IGRlcC5pdjtcbiAgY29uc3QgZXYgPSBkZXAuZXY7XG4gIGNvbnN0IHNlYXJjaCA9IGRlcC5zZWFyY2g7XG4gIGNvbnN0IGNsZWFyU2VhcmNoID0gZGVwLmNsZWFyU2VhcmNoO1xuICBjb25zdCB1cGRhdGUgPSBkZXAudXBkYXRlO1xuICBjb25zdCBwb2ludGVyID0gZGVwLnBvaW50ZXI7XG4gIGNvbnN0IGNsZWFyUG9pbnRlciA9IGRlcC5jbGVhclBvaW50ZXI7XG4gIGNvbnN0IGZvY3VzID0gZGVwLmZvY3VzO1xuICBjb25zdCBkZWFjdGl2YXRlID0gZGVwLmRlYWN0aXZhdGU7XG4gIGNvbnN0IGNsb3NlID0gZGVwLmNsb3NlO1xuXG4gIC8vID09PT09PT09PT09PT09PT0gREFUQSA9PT09PT09PT09PT09PT09XG5cbiAgLy8gbm8gZXhwb3J0XG4gIC8vIGFwcGVuZGVkT3B0aW9uc1xuICBjb25zdCBhcCA9IHJlZihbXSk7XG5cbiAgLy8gbm8gZXhwb3J0XG4gIC8vIHJlc29sdmVkT3B0aW9uc1xuICBjb25zdCBybyA9IHJlZihbXSk7XG5cbiAgY29uc3QgcmVzb2x2aW5nID0gcmVmKGZhbHNlKTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3Qgc2VhcmNoV2F0Y2hlciA9IHJlZihudWxsKTtcblxuICBjb25zdCBvZmZzZXQgPSByZWYoaW5maW5pdGUudmFsdWUgJiYgbGltaXQudmFsdWUgPT09IC0xID8gMTAgOiBsaW1pdC52YWx1ZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgY3JlYXRlT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBjcmVhdGVUYWcudmFsdWUgfHwgY3JlYXRlT3B0aW9uXy52YWx1ZSB8fCBmYWxzZVxuICB9KTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgYXBwZW5kTmV3T3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChhcHBlbmROZXdUYWcudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFwcGVuZE5ld1RhZy52YWx1ZVxuICAgIH0gZWxzZSBpZiAoYXBwZW5kTmV3T3B0aW9uXy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXBwZW5kTmV3T3B0aW9uXy52YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH0pO1xuXG4gIC8vIG5vIGV4cG9ydFxuICAvLyBleHRlbmRlZE9wdGlvbnNcbiAgY29uc3QgZW8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKGdyb3VwcGVkLnZhbHVlKSB7XG4gICAgICBsZXQgZ3JvdXBzID0gcm8udmFsdWUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107XG5cbiAgICAgIGxldCBlbyA9IFtdO1xuXG4gICAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgb3B0aW9uc1RvQXJyYXkoZ3JvdXBbZ3JvdXBPcHRpb25zLnZhbHVlXSkuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgZW8ucHVzaChPYmplY3QuYXNzaWduKHt9LCBvcHRpb24sIGdyb3VwW2Rpc2FibGVkUHJvcC52YWx1ZV0gPyB7IFtkaXNhYmxlZFByb3AudmFsdWVdOiB0cnVlIH0gOiB7fSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZW9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVvID0gb3B0aW9uc1RvQXJyYXkocm8udmFsdWUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW10pO1xuXG4gICAgICBpZiAoYXAudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGVvID0gZW8uY29uY2F0KGFwLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVvXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBmZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWdyb3VwcGVkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyR3JvdXBzKChyby52YWx1ZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBbXSkubWFwKChncm91cCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlPcHRpb25zID0gb3B0aW9uc1RvQXJyYXkoZ3JvdXBbZ3JvdXBPcHRpb25zLnZhbHVlXSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBncm91cDogdHJ1ZSxcbiAgICAgICAgW2dyb3VwT3B0aW9ucy52YWx1ZV06IGZpbHRlck9wdGlvbnMoYXJyYXlPcHRpb25zLCBmYWxzZSkubWFwKG8gPT4gT2JqZWN0LmFzc2lnbih7fSwgbywgZ3JvdXBbZGlzYWJsZWRQcm9wLnZhbHVlXSA/IHsgW2Rpc2FibGVkUHJvcC52YWx1ZV06IHRydWUgfSA6IHt9KSksXG4gICAgICAgIF9fVklTSUJMRV9fOiBmaWx0ZXJPcHRpb25zKGFycmF5T3B0aW9ucykubWFwKG8gPT4gT2JqZWN0LmFzc2lnbih7fSwgbywgZ3JvdXBbZGlzYWJsZWRQcm9wLnZhbHVlXSA/IHsgW2Rpc2FibGVkUHJvcC52YWx1ZV06IHRydWUgfSA6IHt9KSksXG4gICAgICB9XG4gICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gX19WSVNJQkxFX18gYW5kIHtncm91cE9wdGlvbnN9OiB2aXNpYmxlIGRvZXMgbm90IGNvbnRhaW4gc2VsZWN0ZWQgb3B0aW9ucyB3aGVuIGhpZGVTZWxlY3RlZD10cnVlXG4gICAgfSkpXG4gIH0pO1xuXG4gIC8vIHByZUZpbHRlcmVkT3B0aW9uc1xuICBjb25zdCBwZm8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IG9wdGlvbnMgPSBlby52YWx1ZTtcblxuICAgIGlmIChyZXZlcnNlLnZhbHVlKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZWRPcHRpb24udmFsdWUubGVuZ3RoKSB7XG4gICAgICBvcHRpb25zID0gY3JlYXRlZE9wdGlvbi52YWx1ZS5jb25jYXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlck9wdGlvbnMob3B0aW9ucylcbiAgfSk7XG5cbiAgLy8gZmlsdGVyZWRPcHRpb25zXG4gIGNvbnN0IGZvID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gcGZvLnZhbHVlO1xuXG4gICAgaWYgKG9mZnNldC52YWx1ZSA+IDApIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnNsaWNlKDAsIG9mZnNldC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfSk7XG5cbiAgY29uc3QgaGFzU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICByZXR1cm4gIWlzTnVsbGlzaChpdi52YWx1ZVt2YWx1ZVByb3AudmFsdWVdKVxuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICBjYXNlICd0YWdzJzpcbiAgICAgICAgcmV0dXJuICFpc051bGxpc2goaXYudmFsdWUpICYmIGl2LnZhbHVlLmxlbmd0aCA+IDBcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG11bHRpcGxlTGFiZWxUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBtdWx0aXBsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgbXVsdGlwbGVMYWJlbC52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IG11bHRpcGxlTGFiZWwudmFsdWUoaXYudmFsdWUsICR0aGlzKVxuICAgICAgOiAoaXYudmFsdWUgJiYgaXYudmFsdWUubGVuZ3RoID4gMSA/IGAke2l2LnZhbHVlLmxlbmd0aH0gb3B0aW9ucyBzZWxlY3RlZGAgOiBgMSBvcHRpb24gc2VsZWN0ZWRgKVxuICB9KTtcblxuICBjb25zdCBub09wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICFlby52YWx1ZS5sZW5ndGggJiYgIXJlc29sdmluZy52YWx1ZSAmJiAhY3JlYXRlZE9wdGlvbi52YWx1ZS5sZW5ndGhcbiAgfSk7XG5cblxuICBjb25zdCBub1Jlc3VsdHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGVvLnZhbHVlLmxlbmd0aCA+IDAgJiYgZm8udmFsdWUubGVuZ3RoID09IDAgJiYgKChzZWFyY2gudmFsdWUgJiYgZ3JvdXBwZWQudmFsdWUpIHx8ICFncm91cHBlZC52YWx1ZSlcbiAgfSk7XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGNyZWF0ZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKGNyZWF0ZU9wdGlvbi52YWx1ZSA9PT0gZmFsc2UgfHwgIXNlYXJjaC52YWx1ZSkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE9wdGlvbkJ5VHJhY2tCeShzZWFyY2gudmFsdWUpICE9PSAtMSA/IFtdIDogW3tcbiAgICAgIFt2YWx1ZVByb3AudmFsdWVdOiBzZWFyY2gudmFsdWUsXG4gICAgICBbbGFiZWwudmFsdWVdOiBzZWFyY2gudmFsdWUsXG4gICAgICBbdHJhY2tCeS52YWx1ZV06IHNlYXJjaC52YWx1ZSxcbiAgICAgIF9fQ1JFQVRFX186IHRydWUsXG4gICAgfV1cbiAgfSk7XG5cbiAgY29uc3QgdHJhY2tCeSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdHJhY2tCeV8udmFsdWUgfHwgbGFiZWwudmFsdWVcbiAgfSk7XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IG51bGxWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKG1vZGUudmFsdWUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGJ1c3kgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGxvYWRpbmcudmFsdWUgfHwgcmVzb2x2aW5nLnZhbHVlXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fHN0cmluZ3xudW1iZXJ9IG9wdGlvbiBcbiAgICovXG4gIGNvbnN0IHNlbGVjdCA9IChvcHRpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbiA9IGdldE9wdGlvbihvcHRpb24pO1xuICAgIH1cblxuICAgIHN3aXRjaCAobW9kZS52YWx1ZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgdXBkYXRlKG9wdGlvbik7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICB1cGRhdGUoKGl2LnZhbHVlKS5jb25jYXQob3B0aW9uKSk7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29udGV4dC5lbWl0KCdzZWxlY3QnLCBmaW5hbFZhbHVlKG9wdGlvbiksIG9wdGlvbiwgJHRoaXMpO1xuICB9O1xuXG4gIGNvbnN0IGRlc2VsZWN0ID0gKG9wdGlvbikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9uID0gZ2V0T3B0aW9uKG9wdGlvbik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICBjbGVhcigpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICd0YWdzJzpcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgdXBkYXRlKEFycmF5LmlzQXJyYXkob3B0aW9uKVxuICAgICAgICAgID8gaXYudmFsdWUuZmlsdGVyKHYgPT4gb3B0aW9uLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZih2W3ZhbHVlUHJvcC52YWx1ZV0pID09PSAtMSlcbiAgICAgICAgICA6IGl2LnZhbHVlLmZpbHRlcih2ID0+IHZbdmFsdWVQcm9wLnZhbHVlXSAhPSBvcHRpb25bdmFsdWVQcm9wLnZhbHVlXSkpO1xuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIGNvbnRleHQuZW1pdCgnZGVzZWxlY3QnLCBmaW5hbFZhbHVlKG9wdGlvbiksIG9wdGlvbiwgJHRoaXMpO1xuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBmaW5hbFZhbHVlID0gKG9wdGlvbikgPT4ge1xuICAgIHJldHVybiBvYmplY3QudmFsdWUgPyBvcHRpb24gOiBvcHRpb25bdmFsdWVQcm9wLnZhbHVlXVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9IChvcHRpb24pID0+IHtcbiAgICBkZXNlbGVjdChvcHRpb24pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVRhZ1JlbW92ZSA9IChvcHRpb24sIGUpID0+IHtcbiAgICBpZiAoZS5idXR0b24gIT09IDApIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJlbW92ZShvcHRpb24pO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgIGNvbnRleHQuZW1pdCgnY2xlYXInLCAkdGhpcyk7XG4gICAgdXBkYXRlKG51bGxWYWx1ZS52YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgaXNTZWxlY3RlZCA9IChvcHRpb24pID0+IHtcbiAgICBpZiAob3B0aW9uLmdyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtb2RlLnZhbHVlID09PSAnc2luZ2xlJyA/IGZhbHNlIDogYXJlQWxsU2VsZWN0ZWQob3B0aW9uW2dyb3VwT3B0aW9ucy52YWx1ZV0pICYmIG9wdGlvbltncm91cE9wdGlvbnMudmFsdWVdLmxlbmd0aFxuICAgIH1cblxuICAgIHN3aXRjaCAobW9kZS52YWx1ZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgcmV0dXJuICFpc051bGxpc2goaXYudmFsdWUpICYmIGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0gPT0gb3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV1cblxuICAgICAgY2FzZSAndGFncyc6XG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICAgIHJldHVybiAhaXNOdWxsaXNoKGl2LnZhbHVlKSAmJiBpdi52YWx1ZS5tYXAobyA9PiBvW3ZhbHVlUHJvcC52YWx1ZV0pLmluZGV4T2Yob3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV0pICE9PSAtMVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gKG9wdGlvbikgPT4ge1xuICAgIHJldHVybiBvcHRpb25bZGlzYWJsZWRQcm9wLnZhbHVlXSA9PT0gdHJ1ZVxuICB9O1xuXG4gIGNvbnN0IGlzTWF4ID0gKCkgPT4ge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCB8fCBtYXgudmFsdWUgPT09IC0xIHx8ICghaGFzU2VsZWN0ZWQudmFsdWUgJiYgbWF4LnZhbHVlID4gMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaXYudmFsdWUubGVuZ3RoID49IG1heC52YWx1ZVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU9wdGlvbkNsaWNrID0gKG9wdGlvbikgPT4ge1xuICAgIGlmIChpc0Rpc2FibGVkKG9wdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChvbkNyZWF0ZSAmJiBvbkNyZWF0ZS52YWx1ZSAmJiAhaXNTZWxlY3RlZChvcHRpb24pICYmIG9wdGlvbi5fX0NSRUFURV9fKSB7XG4gICAgICBvcHRpb24gPSB7IC4uLm9wdGlvbiB9O1xuICAgICAgZGVsZXRlIG9wdGlvbi5fX0NSRUFURV9fO1xuXG4gICAgICBvcHRpb24gPSBvbkNyZWF0ZS52YWx1ZShvcHRpb24sICR0aGlzKTtcbiAgICAgIFxuICAgICAgaWYgKG9wdGlvbiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmVzb2x2aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgb3B0aW9uLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIGhhbmRsZU9wdGlvblNlbGVjdChyZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm5cbiAgICAgIH0gXG4gICAgfVxuXG4gICAgaGFuZGxlT3B0aW9uU2VsZWN0KG9wdGlvbik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3B0aW9uU2VsZWN0ID0gKG9wdGlvbikgPT4ge1xuICAgIGlmIChvcHRpb24uX19DUkVBVEVfXykge1xuICAgICAgb3B0aW9uID0geyAuLi5vcHRpb24gfTtcbiAgICAgIGRlbGV0ZSBvcHRpb24uX19DUkVBVEVfXztcbiAgICB9XG4gICAgXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICBpZiAob3B0aW9uICYmIGlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgICAgIGlmIChjYW5EZXNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgICAgZGVzZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlT3B0aW9uQXBwZW5kKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoY2xlYXJPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyU2VhcmNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyUG9pbnRlcigpO1xuICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgc2VsZWN0KG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICBpZiAob3B0aW9uICYmIGlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgICAgIGRlc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXgoKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGhhbmRsZU9wdGlvbkFwcGVuZChvcHRpb24pO1xuICAgICAgICAgIHNlbGVjdChvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsZWFyT25TZWxlY3QudmFsdWUpIHtcbiAgICAgICAgICBjbGVhclNlYXJjaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhpZGVTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyUG9pbnRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3NlT25TZWxlY3QudmFsdWUpIHtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICBpZiAob3B0aW9uICYmIGlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgICAgIGRlc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXgoKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGhhbmRsZU9wdGlvbkFwcGVuZChvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsZWFyT25TZWxlY3QudmFsdWUpIHtcbiAgICAgICAgICBjbGVhclNlYXJjaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIHNlbGVjdChvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhpZGVTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyUG9pbnRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3NlT25TZWxlY3QudmFsdWUpIHtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgaWYgKCFjbG9zZU9uU2VsZWN0LnZhbHVlKSB7XG4gICAgICBmb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gKGdyb3VwKSA9PiB7XG4gICAgaWYgKGlzRGlzYWJsZWQoZ3JvdXApIHx8IG1vZGUudmFsdWUgPT09ICdzaW5nbGUnIHx8ICFncm91cFNlbGVjdC52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICBjYXNlICd0YWdzJzpcbiAgICAgICAgaWYgKGFyZUFsbEVuYWJsZWRTZWxlY3RlZChncm91cFtncm91cE9wdGlvbnMudmFsdWVdKSkge1xuICAgICAgICAgIGRlc2VsZWN0KGdyb3VwW2dyb3VwT3B0aW9ucy52YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdChncm91cFtncm91cE9wdGlvbnMudmFsdWVdXG4gICAgICAgICAgICAuZmlsdGVyKG8gPT4gaXYudmFsdWUubWFwKHYgPT4gdlt2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKG9bdmFsdWVQcm9wLnZhbHVlXSkgPT09IC0xKVxuICAgICAgICAgICAgLmZpbHRlcihvID0+ICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pXG4gICAgICAgICAgICAuZmlsdGVyKChvLCBrKSA9PiBpdi52YWx1ZS5sZW5ndGggKyAxICsgayA8PSBtYXgudmFsdWUgfHwgbWF4LnZhbHVlID09PSAtMSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgaWYgKGNsb3NlT25TZWxlY3QudmFsdWUpIHtcbiAgICAgIGRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3B0aW9uQXBwZW5kID0gKG9wdGlvbikgPT4ge1xuICAgIGlmIChnZXRPcHRpb24ob3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV0pID09PSB1bmRlZmluZWQgJiYgY3JlYXRlT3B0aW9uLnZhbHVlKSB7XG4gICAgICBjb250ZXh0LmVtaXQoJ3RhZycsIG9wdGlvblt2YWx1ZVByb3AudmFsdWVdLCAkdGhpcyk7XG4gICAgICBjb250ZXh0LmVtaXQoJ29wdGlvbicsIG9wdGlvblt2YWx1ZVByb3AudmFsdWVdLCAkdGhpcyk7XG5cbiAgICAgIGlmIChhcHBlbmROZXdPcHRpb24udmFsdWUpIHtcbiAgICAgICAgYXBwZW5kT3B0aW9uKG9wdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNsZWFyU2VhcmNoKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNlbGVjdEFsbCA9ICgpID0+IHtcbiAgICBpZiAobW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNlbGVjdChmby52YWx1ZSk7XG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGFyZUFsbEVuYWJsZWRTZWxlY3RlZCA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChvID0+ICFpc1NlbGVjdGVkKG8pICYmICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pID09PSB1bmRlZmluZWRcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgYXJlQWxsU2VsZWN0ZWQgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiAhaXNTZWxlY3RlZChvKSkgPT09IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IGdldE9wdGlvbiA9ICh2YWwpID0+IHtcbiAgICByZXR1cm4gZW8udmFsdWVbZW8udmFsdWUubWFwKG8gPT4gU3RyaW5nKG9bdmFsdWVQcm9wLnZhbHVlXSkpLmluZGV4T2YoU3RyaW5nKHZhbCkpXVxuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBnZXRPcHRpb25CeVRyYWNrQnkgPSAodmFsLCBub3JtID0gdHJ1ZSkgPT4ge1xuICAgIHJldHVybiBlby52YWx1ZS5tYXAobyA9PiBwYXJzZUludChvW3RyYWNrQnkudmFsdWVdKSA9PSBvW3RyYWNrQnkudmFsdWVdID8gcGFyc2VJbnQob1t0cmFja0J5LnZhbHVlXSkgOiBvW3RyYWNrQnkudmFsdWVdKS5pbmRleE9mKFxuICAgICAgcGFyc2VJbnQodmFsKSA9PSB2YWwgPyBwYXJzZUludCh2YWwpIDogdmFsXG4gICAgKVxuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBzaG91bGRIaWRlT3B0aW9uID0gKG9wdGlvbikgPT4ge1xuICAgIHJldHVybiBbJ3RhZ3MnLCAnbXVsdGlwbGUnXS5pbmRleE9mKG1vZGUudmFsdWUpICE9PSAtMSAmJiBoaWRlU2VsZWN0ZWQudmFsdWUgJiYgaXNTZWxlY3RlZChvcHRpb24pXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGFwcGVuZE9wdGlvbiA9IChvcHRpb24pID0+IHtcbiAgICBhcC52YWx1ZS5wdXNoKG9wdGlvbik7XG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGZpbHRlckdyb3VwcyA9IChncm91cHMpID0+IHtcbiAgICAvLyBJZiB0aGUgc2VhcmNoIGhhcyB2YWx1ZSB3ZSBuZWVkIHRvIGZpbHRlciBhbW9uZyBcbiAgICAvLyBoZSBvbmVzIHRoYXQgYXJlIHZpc2libGUgdG8gdGhlIHVzZXIgdG8gYXZvaWRcbiAgICAvLyBkaXNwbGF5aW5nIGdyb3VwcyB3aGljaCB0ZWNobmljYWxseSBoYXZlIG9wdGlvbnNcbiAgICAvLyBiYXNlZCBvbiBzZWFyY2ggYnV0IHRoYXQgb3B0aW9uIGlzIGFscmVhZHkgc2VsZWN0ZWQuXG4gICAgcmV0dXJuIGdyb3VwSGlkZUVtcHR5LnZhbHVlXG4gICAgICA/IGdyb3Vwcy5maWx0ZXIoZyA9PiBzZWFyY2gudmFsdWVcbiAgICAgICAgICA/IGcuX19WSVNJQkxFX18ubGVuZ3RoXG4gICAgICAgICAgOiBnW2dyb3VwT3B0aW9ucy52YWx1ZV0ubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIDogZ3JvdXBzLmZpbHRlcihnID0+IHNlYXJjaC52YWx1ZSA/IGcuX19WSVNJQkxFX18ubGVuZ3RoIDogdHJ1ZSlcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IChvcHRpb25zLCBleGNsdWRlSGlkZVNlbGVjdGVkID0gdHJ1ZSkgPT4ge1xuICAgIGxldCBmbyA9IG9wdGlvbnM7XG4gICAgXG4gICAgaWYgKHNlYXJjaC52YWx1ZSAmJiBmaWx0ZXJSZXN1bHRzLnZhbHVlKSB7XG4gICAgICBmbyA9IGZvLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBzZWFyY2hTdGFydC52YWx1ZVxuICAgICAgICAgID8gbm9ybWFsaXplKG9wdGlvblt0cmFja0J5LnZhbHVlXSwgc3RyaWN0LnZhbHVlKS5zdGFydHNXaXRoKG5vcm1hbGl6ZShzZWFyY2gudmFsdWUsIHN0cmljdC52YWx1ZSkpXG4gICAgICAgICAgOiBub3JtYWxpemUob3B0aW9uW3RyYWNrQnkudmFsdWVdLCBzdHJpY3QudmFsdWUpLmluZGV4T2Yobm9ybWFsaXplKHNlYXJjaC52YWx1ZSwgc3RyaWN0LnZhbHVlKSkgIT09IC0xXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZVNlbGVjdGVkLnZhbHVlICYmIGV4Y2x1ZGVIaWRlU2VsZWN0ZWQpIHtcbiAgICAgIGZvID0gZm8uZmlsdGVyKChvcHRpb24pID0+ICFzaG91bGRIaWRlT3B0aW9uKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHJldHVybiBmb1xuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBvcHRpb25zVG9BcnJheSA9IChvcHRpb25zKSA9PiB7XG4gICAgbGV0IHVvID0gb3B0aW9ucztcbiAgICBcbiAgICAvLyBUcmFuc2Zvcm1pbmcgYW4gb2JqZWN0IHRvIGFuIGFycmF5IG9mIG9iamVjdHNcbiAgICBpZiAoaXNPYmplY3QodW8pKSB7XG4gICAgICB1byA9IE9iamVjdC5rZXlzKHVvKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsID0gdW9ba2V5XTtcblxuICAgICAgICByZXR1cm4geyBbdmFsdWVQcm9wLnZhbHVlXToga2V5LCBbdHJhY2tCeS52YWx1ZV06IHZhbCwgW2xhYmVsLnZhbHVlXTogdmFsfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtaW5nIGFuIHBsYWluIGFycmF5cyB0byBhbiBhcnJheSBvZiBvYmplY3RzXG4gICAgdW8gPSB1by5tYXAoKHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsIDogeyBbdmFsdWVQcm9wLnZhbHVlXTogdmFsLCBbdHJhY2tCeS52YWx1ZV06IHZhbCwgW2xhYmVsLnZhbHVlXTogdmFsfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVvXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGluaXRJbnRlcm5hbFZhbHVlID0gKCkgPT4ge1xuICAgIGlmICghaXNOdWxsaXNoKGV2LnZhbHVlKSkge1xuICAgICAgaXYudmFsdWUgPSBtYWtlSW50ZXJuYWwoZXYudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXNvbHZlT3B0aW9ucyA9IChjYWxsYmFjaykgPT4ge1xuICAgIHJlc29sdmluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb3B0aW9ucy52YWx1ZShzZWFyY2gudmFsdWUsICR0aGlzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICByby52YWx1ZSA9IHJlc3BvbnNlIHx8IFtdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcblxuICAgICAgICByby52YWx1ZSA9IFtdO1xuXG4gICAgICAgIHJlc29sdmluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IHJlZnJlc2hMYWJlbHMgPSAoKSA9PiB7XG4gICAgaWYgKCFoYXNTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG1vZGUudmFsdWUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBsZXQgb3B0aW9uID0gZ2V0T3B0aW9uKGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBuZXdMYWJlbCA9IG9wdGlvbltsYWJlbC52YWx1ZV07XG5cbiAgICAgICAgaXYudmFsdWVbbGFiZWwudmFsdWVdID0gbmV3TGFiZWw7XG5cbiAgICAgICAgaWYgKG9iamVjdC52YWx1ZSkge1xuICAgICAgICAgIGV2LnZhbHVlW2xhYmVsLnZhbHVlXSA9IG5ld0xhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl2LnZhbHVlLmZvckVhY2goKHZhbCwgaSkgPT4ge1xuICAgICAgICBsZXQgb3B0aW9uID0gZ2V0T3B0aW9uKGl2LnZhbHVlW2ldW3ZhbHVlUHJvcC52YWx1ZV0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChvcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBuZXdMYWJlbCA9IG9wdGlvbltsYWJlbC52YWx1ZV07XG5cbiAgICAgICAgICBpdi52YWx1ZVtpXVtsYWJlbC52YWx1ZV0gPSBuZXdMYWJlbDtcblxuICAgICAgICAgIGlmIChvYmplY3QudmFsdWUpIHtcbiAgICAgICAgICAgIGV2LnZhbHVlW2ldW2xhYmVsLnZhbHVlXSA9IG5ld0xhYmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlZnJlc2hPcHRpb25zID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgcmVzb2x2ZU9wdGlvbnMoY2FsbGJhY2spO1xuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBtYWtlSW50ZXJuYWwgPSAodmFsKSA9PiB7XG4gICAgaWYgKGlzTnVsbGlzaCh2YWwpKSB7XG4gICAgICByZXR1cm4gbW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScgPyB7fSA6IFtdXG4gICAgfVxuXG4gICAgaWYgKG9iamVjdC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgIH1cblxuICAgIC8vIElmIGV4dGVybmFsIHNob3VsZCBiZSBwbGFpbiB0cmFuc2Zvcm1cbiAgICAvLyB2YWx1ZSBvYmplY3QgdG8gcGxhaW4gdmFsdWVzXG4gICAgcmV0dXJuIG1vZGUudmFsdWUgPT09ICdzaW5nbGUnID8gZ2V0T3B0aW9uKHZhbCkgfHwge30gOiB2YWwuZmlsdGVyKHYgPT4gISEgZ2V0T3B0aW9uKHYpKS5tYXAodiA9PiBnZXRPcHRpb24odikpXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGluaXRTZWFyY2hXYXRjaGVyID0gKCkgPT4ge1xuICAgIHNlYXJjaFdhdGNoZXIudmFsdWUgPSB3YXRjaChzZWFyY2gsIChxdWVyeSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IG1pbkNoYXJzLnZhbHVlIHx8ICghcXVlcnkgJiYgbWluQ2hhcnMudmFsdWUgIT09IDApKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNvbHZpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICBpZiAoY2xlYXJPblNlYXJjaC52YWx1ZSkge1xuICAgICAgICByby52YWx1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSAhPSBzZWFyY2gudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMudmFsdWUoc2VhcmNoLnZhbHVlLCAkdGhpcykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocXVlcnkgPT0gc2VhcmNoLnZhbHVlIHx8ICFzZWFyY2gudmFsdWUpIHtcbiAgICAgICAgICAgIHJvLnZhbHVlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBwb2ludGVyLnZhbHVlID0gZm8udmFsdWUuZmlsdGVyKG8gPT4gb1tkaXNhYmxlZFByb3AudmFsdWVdICE9PSB0cnVlKVswXSB8fCBudWxsO1xuICAgICAgICAgICAgcmVzb2x2aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCggLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gKGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5LnZhbHVlKTtcblxuICAgIH0sIHsgZmx1c2g6ICdzeW5jJyB9KTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09IEhPT0tTID09PT09PT09PT09PT09PVxuXG4gIGlmIChtb2RlLnZhbHVlICE9PSAnc2luZ2xlJyAmJiAhaXNOdWxsaXNoKGV2LnZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShldi52YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHYtbW9kZWwgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIFwiJHttb2RlLnZhbHVlfVwiIG1vZGVgKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMudmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChyZXNvbHZlT25Mb2FkLnZhbHVlKSB7XG4gICAgICByZXNvbHZlT3B0aW9ucyhpbml0SW50ZXJuYWxWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChvYmplY3QudmFsdWUgPT0gdHJ1ZSkge1xuICAgICAgaW5pdEludGVybmFsVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgcm8udmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXG4gICAgaW5pdEludGVybmFsVmFsdWUoKTtcbiAgfVxuICBcbiAgLy8gPT09PT09PT09PT09PT0gV0FUQ0hFUlMgPT09PT09PT09PT09PT1cblxuICBpZiAoZGVsYXkudmFsdWUgPiAtMSkge1xuICAgIGluaXRTZWFyY2hXYXRjaGVyKCk7XG4gIH1cblxuICB3YXRjaChkZWxheSwgKHZhbHVlLCBvbGQpID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChzZWFyY2hXYXRjaGVyLnZhbHVlKSB7XG4gICAgICBzZWFyY2hXYXRjaGVyLnZhbHVlKCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgIGluaXRTZWFyY2hXYXRjaGVyKCk7XG4gICAgfVxuICB9KTtcblxuICB3YXRjaChldiwgKG5ld1ZhbHVlKSA9PiB7XG4gICAgaWYgKGlzTnVsbGlzaChuZXdWYWx1ZSkpIHtcbiAgICAgIGl2LnZhbHVlID0gbWFrZUludGVybmFsKG5ld1ZhbHVlKTtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHN3aXRjaCAobW9kZS52YWx1ZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgaWYgKG9iamVjdC52YWx1ZSA/IG5ld1ZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0gIT0gaXYudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSA6IG5ld1ZhbHVlICE9IGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pIHtcbiAgICAgICAgICBpdi52YWx1ZSA9IG1ha2VJbnRlcm5hbChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgY2FzZSAndGFncyc6XG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwob2JqZWN0LnZhbHVlID8gbmV3VmFsdWUubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKSA6IG5ld1ZhbHVlLCBpdi52YWx1ZS5tYXAobyA9PiBvW3ZhbHVlUHJvcC52YWx1ZV0pKSkge1xuICAgICAgICAgIGl2LnZhbHVlID0gbWFrZUludGVybmFsKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuXG4gIHdhdGNoKG9wdGlvbnMsIChuLCBvKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5vcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAocmVzb2x2ZU9uTG9hZC52YWx1ZSkge1xuICAgICAgICByZXNvbHZlT3B0aW9ucygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByby52YWx1ZSA9IHByb3BzLm9wdGlvbnM7XG5cbiAgICAgIGlmICghT2JqZWN0LmtleXMoaXYudmFsdWUpLmxlbmd0aCkge1xuICAgICAgICBpbml0SW50ZXJuYWxWYWx1ZSgpO1xuICAgICAgfVxuXG4gICAgICByZWZyZXNoTGFiZWxzKCk7XG4gICAgfVxuICB9KTtcblxuICB3YXRjaChsYWJlbCwgcmVmcmVzaExhYmVscyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwZm8sXG4gICAgZm8sXG4gICAgZmlsdGVyZWRPcHRpb25zOiBmbyxcbiAgICBoYXNTZWxlY3RlZCxcbiAgICBtdWx0aXBsZUxhYmVsVGV4dCxcbiAgICBlbyxcbiAgICBleHRlbmRlZE9wdGlvbnM6IGVvLFxuICAgIGZnLFxuICAgIGZpbHRlcmVkR3JvdXBzOiBmZyxcbiAgICBub09wdGlvbnMsXG4gICAgbm9SZXN1bHRzLFxuICAgIHJlc29sdmluZyxcbiAgICBidXN5LFxuICAgIG9mZnNldCxcbiAgICBzZWxlY3QsXG4gICAgZGVzZWxlY3QsXG4gICAgcmVtb3ZlLFxuICAgIHNlbGVjdEFsbCxcbiAgICBjbGVhcixcbiAgICBpc1NlbGVjdGVkLFxuICAgIGlzRGlzYWJsZWQsXG4gICAgaXNNYXgsXG4gICAgZ2V0T3B0aW9uLFxuICAgIGhhbmRsZU9wdGlvbkNsaWNrLFxuICAgIGhhbmRsZUdyb3VwQ2xpY2ssXG4gICAgaGFuZGxlVGFnUmVtb3ZlLFxuICAgIHJlZnJlc2hPcHRpb25zLFxuICAgIHJlc29sdmVPcHRpb25zLFxuICAgIHJlZnJlc2hMYWJlbHMsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlUG9pbnRlciAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3Qge1xuICAgIHZhbHVlUHJvcCwgc2hvd09wdGlvbnMsIHNlYXJjaGFibGUsIGdyb3VwTGFiZWwsXG4gICAgZ3JvdXBzOiBncm91cHBlZCwgbW9kZSwgZ3JvdXBTZWxlY3QsIGRpc2FibGVkUHJvcCxcbiAgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBmbyA9IGRlcC5mbztcbiAgY29uc3QgZmcgPSBkZXAuZmc7XG4gIGNvbnN0IGhhbmRsZU9wdGlvbkNsaWNrID0gZGVwLmhhbmRsZU9wdGlvbkNsaWNrO1xuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gZGVwLmhhbmRsZUdyb3VwQ2xpY2s7XG4gIGNvbnN0IHNlYXJjaCA9IGRlcC5zZWFyY2g7XG4gIGNvbnN0IHBvaW50ZXIgPSBkZXAucG9pbnRlcjtcbiAgY29uc3Qgc2V0UG9pbnRlciA9IGRlcC5zZXRQb2ludGVyO1xuICBjb25zdCBjbGVhclBvaW50ZXIgPSBkZXAuY2xlYXJQb2ludGVyO1xuICBjb25zdCBtdWx0aXNlbGVjdCA9IGRlcC5tdWx0aXNlbGVjdDtcbiAgY29uc3QgaXNPcGVuID0gZGVwLmlzT3BlbjtcblxuICAvLyA9PT09PT09PT09PT09PSBDT01QVVRFRCA9PT09PT09PT09PT09PVxuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBmby52YWx1ZS5maWx0ZXIobyA9PiAhb1tkaXNhYmxlZFByb3AudmFsdWVdKVxuICB9KTtcblxuICBjb25zdCBncm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGZnLnZhbHVlLmZpbHRlcihvID0+ICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pXG4gIH0pO1xuXG4gIGNvbnN0IGNhblBvaW50R3JvdXBzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBtb2RlLnZhbHVlICE9PSAnc2luZ2xlJyAmJiBncm91cFNlbGVjdC52YWx1ZVxuICB9KTtcblxuICBjb25zdCBpc1BvaW50ZXJHcm91cCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gcG9pbnRlci52YWx1ZSAmJiBwb2ludGVyLnZhbHVlLmdyb3VwXG4gIH0pO1xuXG4gIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZ2V0UGFyZW50R3JvdXAocG9pbnRlci52YWx1ZSlcbiAgfSk7XG5cbiAgY29uc3QgcHJldkdyb3VwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwID0gaXNQb2ludGVyR3JvdXAudmFsdWUgPyBwb2ludGVyLnZhbHVlIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZ2V0UGFyZW50R3JvdXAocG9pbnRlci52YWx1ZSk7XG4gICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3Vwcy52YWx1ZS5tYXAoZyA9PiBnW2dyb3VwTGFiZWwudmFsdWVdKS5pbmRleE9mKGdyb3VwW2dyb3VwTGFiZWwudmFsdWVdKTtcbiAgICBsZXQgcHJldkdyb3VwID0gZ3JvdXBzLnZhbHVlW2dyb3VwSW5kZXggLSAxXTtcblxuICAgIGlmIChwcmV2R3JvdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJldkdyb3VwID0gbGFzdEdyb3VwLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBwcmV2R3JvdXBcbiAgfSk7XG4gIFxuICBjb25zdCBuZXh0R3JvdXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IG5leHRJbmRleCA9IGdyb3Vwcy52YWx1ZS5tYXAoZyA9PiBnLmxhYmVsKS5pbmRleE9mKGlzUG9pbnRlckdyb3VwLnZhbHVlXG4gICAgICA/IHBvaW50ZXIudmFsdWVbZ3JvdXBMYWJlbC52YWx1ZV1cbiAgICAgIDogZ2V0UGFyZW50R3JvdXAocG9pbnRlci52YWx1ZSlbZ3JvdXBMYWJlbC52YWx1ZV0pICsgMTtcblxuICAgIGlmIChncm91cHMudmFsdWUubGVuZ3RoIDw9IG5leHRJbmRleCkge1xuICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzLnZhbHVlW25leHRJbmRleF1cbiAgfSk7XG5cbiAgY29uc3QgbGFzdEdyb3VwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBbLi4uZ3JvdXBzLnZhbHVlXS5zbGljZSgtMSlbMF1cbiAgfSk7XG4gIFxuICBjb25zdCBjdXJyZW50R3JvdXBGaXJzdEVuYWJsZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHBvaW50ZXIudmFsdWUuX19WSVNJQkxFX18uZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSlbMF1cbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudEdyb3VwUHJldkVuYWJsZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGN1cnJlbnRHcm91cC52YWx1ZS5fX1ZJU0lCTEVfXy5maWx0ZXIobyA9PiAhb1tkaXNhYmxlZFByb3AudmFsdWVdKTtcbiAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25zLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pIC0gMV1cbiAgfSk7XG4gIFxuICBjb25zdCBjdXJyZW50R3JvdXBOZXh0RW5hYmxlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0UGFyZW50R3JvdXAocG9pbnRlci52YWx1ZSkuX19WSVNJQkxFX18uZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSk7XG4gICAgcmV0dXJuIG9wdGlvbnNbb3B0aW9ucy5tYXAobyA9PiBvW3ZhbHVlUHJvcC52YWx1ZV0pLmluZGV4T2YocG9pbnRlci52YWx1ZVt2YWx1ZVByb3AudmFsdWVdKSArIDFdXG4gIH0pO1xuXG4gIGNvbnN0IHByZXZHcm91cExhc3RFbmFibGVkT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBbLi4ucHJldkdyb3VwLnZhbHVlLl9fVklTSUJMRV9fLmZpbHRlcihvID0+ICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pXS5zbGljZSgtMSlbMF1cbiAgfSk7XG5cbiAgY29uc3QgbGFzdEdyb3VwTGFzdEVuYWJsZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5sYXN0R3JvdXAudmFsdWUuX19WSVNJQkxFX18uZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSldLnNsaWNlKC0xKVswXVxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGlzUG9pbnRlZCA9IChvcHRpb24pID0+IHtcbiAgICByZXR1cm4gKCEhcG9pbnRlci52YWx1ZSAmJiAoXG4gICAgICAoIW9wdGlvbi5ncm91cCAmJsKgcG9pbnRlci52YWx1ZVt2YWx1ZVByb3AudmFsdWVdID09IG9wdGlvblt2YWx1ZVByb3AudmFsdWVdKSB8fFxuICAgICAgKG9wdGlvbi5ncm91cCAhPT0gdW5kZWZpbmVkICYmwqBwb2ludGVyLnZhbHVlW2dyb3VwTGFiZWwudmFsdWVdID09IG9wdGlvbltncm91cExhYmVsLnZhbHVlXSlcbiAgICApKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgfTtcblxuICBjb25zdCBzZXRQb2ludGVyRmlyc3QgPSAoKSA9PiB7XG4gICAgc2V0UG9pbnRlcihvcHRpb25zLnZhbHVlWzBdIHx8IG51bGwpO1xuICB9O1xuXG4gIGNvbnN0IHNlbGVjdFBvaW50ZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFwb2ludGVyLnZhbHVlIHx8IHBvaW50ZXIudmFsdWVbZGlzYWJsZWRQcm9wLnZhbHVlXSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzUG9pbnRlckdyb3VwLnZhbHVlKSB7XG4gICAgICBoYW5kbGVHcm91cENsaWNrKHBvaW50ZXIudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVPcHRpb25DbGljayhwb2ludGVyLnZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZm9yd2FyZFBvaW50ZXIgPSAoKSA9PiB7XG4gICAgaWYgKHBvaW50ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHNldFBvaW50ZXIoKGdyb3VwcGVkLnZhbHVlICYmIGNhblBvaW50R3JvdXBzLnZhbHVlID8gZ3JvdXBzLnZhbHVlWzBdIDogb3B0aW9ucy52YWx1ZVswXSkgfHwgbnVsbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGdyb3VwcGVkLnZhbHVlICYmIGNhblBvaW50R3JvdXBzLnZhbHVlKSB7XG4gICAgICBsZXQgbmV4dFBvaW50ZXIgPSBpc1BvaW50ZXJHcm91cC52YWx1ZSA/IGN1cnJlbnRHcm91cEZpcnN0RW5hYmxlZE9wdGlvbi52YWx1ZSA6IGN1cnJlbnRHcm91cE5leHRFbmFibGVkT3B0aW9uLnZhbHVlO1xuXG4gICAgICBpZiAobmV4dFBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXh0UG9pbnRlciA9IG5leHRHcm91cC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0UG9pbnRlcihuZXh0UG9pbnRlciB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5leHQgPSBvcHRpb25zLnZhbHVlLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pICsgMTtcblxuICAgICAgaWYgKG9wdGlvbnMudmFsdWUubGVuZ3RoIDw9IG5leHQpIHtcbiAgICAgICAgbmV4dCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHNldFBvaW50ZXIob3B0aW9ucy52YWx1ZVtuZXh0XSB8fCBudWxsKTtcbiAgICB9XG5cbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBhZGp1c3RXcmFwcGVyU2Nyb2xsVG9Qb2ludGVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYmFja3dhcmRQb2ludGVyID0gKCkgPT4ge1xuICAgIGlmIChwb2ludGVyLnZhbHVlID09PSBudWxsKSB7XG4gICAgICBsZXQgcHJldlBvaW50ZXIgPSBvcHRpb25zLnZhbHVlW29wdGlvbnMudmFsdWUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChncm91cHBlZC52YWx1ZSAmJiBjYW5Qb2ludEdyb3Vwcy52YWx1ZSkge1xuICAgICAgICBwcmV2UG9pbnRlciA9IGxhc3RHcm91cExhc3RFbmFibGVkT3B0aW9uLnZhbHVlO1xuXG4gICAgICAgIGlmIChwcmV2UG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJldlBvaW50ZXIgPSBsYXN0R3JvdXAudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0UG9pbnRlcihwcmV2UG9pbnRlciAgfHwgbnVsbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGdyb3VwcGVkLnZhbHVlICYmIGNhblBvaW50R3JvdXBzLnZhbHVlKSB7XG4gICAgICBsZXQgcHJldlBvaW50ZXIgPSBpc1BvaW50ZXJHcm91cC52YWx1ZSA/IHByZXZHcm91cExhc3RFbmFibGVkT3B0aW9uLnZhbHVlIDogY3VycmVudEdyb3VwUHJldkVuYWJsZWRPcHRpb24udmFsdWU7XG5cbiAgICAgIGlmIChwcmV2UG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByZXZQb2ludGVyID0gaXNQb2ludGVyR3JvdXAudmFsdWUgPyBwcmV2R3JvdXAudmFsdWUgOiBjdXJyZW50R3JvdXAudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHNldFBvaW50ZXIocHJldlBvaW50ZXIgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcmV2SW5kZXggPSBvcHRpb25zLnZhbHVlLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pIC0gMTtcblxuICAgICAgaWYgKHByZXZJbmRleCA8IDApIHtcbiAgICAgICAgcHJldkluZGV4ID0gb3B0aW9ucy52YWx1ZS5sZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICBzZXRQb2ludGVyKG9wdGlvbnMudmFsdWVbcHJldkluZGV4XSB8fCBudWxsKTtcbiAgICB9XG5cbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBhZGp1c3RXcmFwcGVyU2Nyb2xsVG9Qb2ludGVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0UGFyZW50R3JvdXAgPSAob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIGdyb3Vwcy52YWx1ZS5maW5kKChncm91cCkgPT4ge1xuICAgICAgcmV0dXJuIGdyb3VwLl9fVklTSUJMRV9fLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihvcHRpb25bdmFsdWVQcm9wLnZhbHVlXSkgIT09IC0xXG4gICAgfSlcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3QgYWRqdXN0V3JhcHBlclNjcm9sbFRvUG9pbnRlciA9ICgpID0+IHtcbiAgICBsZXQgcG9pbnRlZE9wdGlvbiA9IG11bHRpc2VsZWN0LnZhbHVlLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXBvaW50ZWRdYCk7XG5cbiAgICBpZiAoIXBvaW50ZWRPcHRpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCB3cmFwcGVyID0gcG9pbnRlZE9wdGlvbi5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoZ3JvdXBwZWQudmFsdWUpIHtcbiAgICAgIHdyYXBwZXIgPSBpc1BvaW50ZXJHcm91cC52YWx1ZVxuICAgICAgICA/IHBvaW50ZWRPcHRpb24ucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgICAgOiBwb2ludGVkT3B0aW9uLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50ZWRPcHRpb24ub2Zmc2V0VG9wICsgcG9pbnRlZE9wdGlvbi5vZmZzZXRIZWlnaHQgPiB3cmFwcGVyLmNsaWVudEhlaWdodCArIHdyYXBwZXIuc2Nyb2xsVG9wKSB7XG4gICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHBvaW50ZWRPcHRpb24ub2Zmc2V0VG9wICsgcG9pbnRlZE9wdGlvbi5vZmZzZXRIZWlnaHQgLSB3cmFwcGVyLmNsaWVudEhlaWdodDtcbiAgICB9XG4gICAgXG4gICAgaWYgKHBvaW50ZWRPcHRpb24ub2Zmc2V0VG9wIDwgd3JhcHBlci5zY3JvbGxUb3ApIHtcbiAgICAgIHdyYXBwZXIuc2Nyb2xsVG9wID0gcG9pbnRlZE9wdGlvbi5vZmZzZXRUb3A7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09IFdBVENIRVJTID09PT09PT09PT09PT09XG5cbiAgd2F0Y2goc2VhcmNoLCAodmFsKSA9PiB7XG4gICAgaWYgKHNlYXJjaGFibGUudmFsdWUpIHtcbiAgICAgIGlmICh2YWwubGVuZ3RoICYmIHNob3dPcHRpb25zLnZhbHVlKSB7XG4gICAgICAgIHNldFBvaW50ZXJGaXJzdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xlYXJQb2ludGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB3YXRjaChpc09wZW4sICh2YWwpID0+IHtcbiAgICBpZiAodmFsKSB7XG4gICAgICBsZXQgZmlyc3RTZWxlY3RlZCA9IG11bHRpc2VsZWN0LnZhbHVlLnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXNlbGVjdGVkXWApWzBdO1xuXG4gICAgICBpZiAoIWZpcnN0U2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCB3cmFwcGVyID0gZmlyc3RTZWxlY3RlZC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICBcbiAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKHdyYXBwZXIuc2Nyb2xsVG9wID4gMCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgd3JhcHBlci5zY3JvbGxUb3AgPSBmaXJzdFNlbGVjdGVkLm9mZnNldFRvcDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwb2ludGVyLFxuICAgIGNhblBvaW50R3JvdXBzLFxuICAgIGlzUG9pbnRlZCxcbiAgICBzZXRQb2ludGVyRmlyc3QsXG4gICAgc2VsZWN0UG9pbnRlcixcbiAgICBmb3J3YXJkUG9pbnRlcixcbiAgICBiYWNrd2FyZFBvaW50ZXIsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlRHJvcGRvd24gKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHsgZGlzYWJsZWQgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgY29uc3QgJHRoaXMgPSBnZXRDdXJyZW50SW5zdGFuY2UoKS5wcm94eTtcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGlzT3BlbiA9IHJlZihmYWxzZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW4udmFsdWUgfHwgZGlzYWJsZWQudmFsdWUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gICAgY29udGV4dC5lbWl0KCdvcGVuJywgJHRoaXMpO1xuICB9O1xuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIGlmICghaXNPcGVuLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICBjb250ZXh0LmVtaXQoJ2Nsb3NlJywgJHRoaXMpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTXVsdGlzZWxlY3QgKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHsgc2VhcmNoYWJsZSwgZGlzYWJsZWQgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpbnB1dCA9IGRlcC5pbnB1dDtcbiAgY29uc3Qgb3BlbiA9IGRlcC5vcGVuO1xuICBjb25zdCBjbG9zZSA9IGRlcC5jbG9zZTtcbiAgY29uc3QgY2xlYXJTZWFyY2ggPSBkZXAuY2xlYXJTZWFyY2g7XG4gIGNvbnN0IGlzT3BlbiA9IGRlcC5pc09wZW47XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICBjb25zdCBtdWx0aXNlbGVjdCA9IHJlZihudWxsKTtcbiAgY29uc3QgdGFncyA9IHJlZihudWxsKTtcblxuICBjb25zdCBpc0FjdGl2ZSA9IHJlZihmYWxzZSk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICBjb25zdCB0YWJpbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gc2VhcmNoYWJsZS52YWx1ZSB8fCBkaXNhYmxlZC52YWx1ZSA/IC0xIDogMFxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGJsdXIgPSAoKSA9PiB7XG4gICAgaWYgKHNlYXJjaGFibGUudmFsdWUpIHtcbiAgICAgIGlucHV0LnZhbHVlLmJsdXIoKTtcbiAgICB9XG5cbiAgICBtdWx0aXNlbGVjdC52YWx1ZS5ibHVyKCk7XG4gIH07XG5cbiAgY29uc3QgZm9jdXMgPSAoKSA9PiB7XG4gICAgaWYgKHNlYXJjaGFibGUudmFsdWUgJiYgIWRpc2FibGVkLnZhbHVlKSB7XG4gICAgICBpbnB1dC52YWx1ZS5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICBmb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZC52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaXNBY3RpdmUudmFsdWUgPSB0cnVlO1xuXG4gICAgb3BlbigpO1xuICB9O1xuXG4gIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB7XG4gICAgaXNBY3RpdmUudmFsdWUgPSBmYWxzZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFpc0FjdGl2ZS52YWx1ZSkge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgICBjbGVhclNlYXJjaCgpO1xuICAgICAgfVxuICAgIH0sIDEpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNhcmV0Q2xpY2sgPSAoKSA9PiB7XG4gICAgZGVhY3RpdmF0ZSgpO1xuICAgIGJsdXIoKTtcbiAgfTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdCBoYW5kbGVNb3VzZWRvd24gPSAoZSkgPT4ge1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgKGUudGFyZ2V0LmlzRXF1YWxOb2RlKG11bHRpc2VsZWN0LnZhbHVlKSB8fCBlLnRhcmdldC5pc0VxdWFsTm9kZSh0YWdzLnZhbHVlKSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkZWFjdGl2YXRlKCk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaXNFcXVhbE5vZGUobXVsdGlzZWxlY3QudmFsdWUpICYmICFpc09wZW4udmFsdWUpIHtcbiAgICAgIGFjdGl2YXRlKCk7ICAgIFxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG11bHRpc2VsZWN0LFxuICAgIHRhZ3MsXG4gICAgdGFiaW5kZXgsXG4gICAgaXNBY3RpdmUsXG4gICAgYmx1cixcbiAgICBmb2N1cyxcbiAgICBoYW5kbGVGb2N1cyxcbiAgICBhY3RpdmF0ZSxcbiAgICBkZWFjdGl2YXRlLFxuICAgIGhhbmRsZUNhcmV0Q2xpY2ssXG4gICAgaGFuZGxlTW91c2Vkb3duLFxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZUtleWJvYXJkIChwcm9wcywgY29udGV4dCwgZGVwKVxue1xuICBjb25zdCB7XG4gICAgbW9kZSwgYWRkVGFnT24sIG9wZW5EaXJlY3Rpb24sIHNlYXJjaGFibGUsXG4gICAgc2hvd09wdGlvbnMsIHZhbHVlUHJvcCwgZ3JvdXBzOiBncm91cHBlZCxcbiAgICBhZGRPcHRpb25PbjogYWRkT3B0aW9uT25fLCBjcmVhdGVUYWcsIGNyZWF0ZU9wdGlvbjogY3JlYXRlT3B0aW9uXyxcbiAgICByZXZlcnNlLFxuICB9ID0gdG9SZWZzKHByb3BzKTtcblxuICBjb25zdCAkdGhpcyA9IGdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O1xuXG4gIC8vID09PT09PT09PT09PSBERVBFTkRFTkNJRVMgPT09PT09PT09PT09XG5cbiAgY29uc3QgaXYgPSBkZXAuaXY7XG4gIGNvbnN0IHVwZGF0ZSA9IGRlcC51cGRhdGU7XG4gIGNvbnN0IHNlYXJjaCA9IGRlcC5zZWFyY2g7XG4gIGNvbnN0IHNldFBvaW50ZXIgPSBkZXAuc2V0UG9pbnRlcjtcbiAgY29uc3Qgc2VsZWN0UG9pbnRlciA9IGRlcC5zZWxlY3RQb2ludGVyO1xuICBjb25zdCBiYWNrd2FyZFBvaW50ZXIgPSBkZXAuYmFja3dhcmRQb2ludGVyO1xuICBjb25zdCBmb3J3YXJkUG9pbnRlciA9IGRlcC5mb3J3YXJkUG9pbnRlcjtcbiAgY29uc3QgaXNPcGVuID0gZGVwLmlzT3BlbjtcbiAgY29uc3Qgb3BlbiA9IGRlcC5vcGVuO1xuICBjb25zdCBibHVyID0gZGVwLmJsdXI7XG4gIGNvbnN0IGZvID0gZGVwLmZvO1xuXG4gIC8vID09PT09PT09PT09PT09IENPTVBVVEVEID09PT09PT09PT09PT09XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGNyZWF0ZU9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlVGFnLnZhbHVlIHx8IGNyZWF0ZU9wdGlvbl8udmFsdWUgfHwgZmFsc2VcbiAgfSk7XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGFkZE9wdGlvbk9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChhZGRUYWdPbi52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYWRkVGFnT24udmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZiAoYWRkT3B0aW9uT25fLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhZGRPcHRpb25Pbl8udmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gWydlbnRlciddXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IHByZXBhcmVQb2ludGVyID0gKCkgPT4ge1xuICAgIC8vIFdoZW4gb3B0aW9ucyBhcmUgaGlkZGVuIGFuZCBjcmVhdGluZyB0YWdzIGlzIGFsbG93ZWRcbiAgICAvLyBubyBwb2ludGVyIHdpbGwgYmUgc2V0IChiZWNhdXNlIG9wdGlvbnMgYXJlIGhpZGRlbikuXG4gICAgLy8gSW4gc3VjaCBjYXNlIHdlIG5lZWQgdG8gc2V0IHRoZSBwb2ludGVyIG1hbnVhbGx5IHRvIHRoZSBcbiAgICAvLyBmaXJzdCBvcHRpb24sIHdoaWNoIGVxdWFscyB0byB0aGUgb3B0aW9uIGNyZWF0ZWQgZnJvbVxuICAgIC8vIHRoZSBzZWFyY2ggdmFsdWUuXG4gICAgaWYgKG1vZGUudmFsdWUgPT09ICd0YWdzJyAmJiAhc2hvd09wdGlvbnMudmFsdWUgJiYgY3JlYXRlT3B0aW9uLnZhbHVlICYmIHNlYXJjaGFibGUudmFsdWUgJiYgIWdyb3VwcGVkLnZhbHVlKSB7XG4gICAgICBzZXRQb2ludGVyKGZvLnZhbHVlW2ZvLnZhbHVlLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihzZWFyY2gudmFsdWUpXSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleWRvd24gPSAoZSkgPT4ge1xuICAgIGNvbnRleHQuZW1pdCgna2V5ZG93bicsIGUsICR0aGlzKTtcblxuICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgIGlmIChtb2RlLnZhbHVlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaGFibGUudmFsdWUgJiYgW251bGwsICcnXS5pbmRleE9mKHNlYXJjaC52YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXYudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHVwZGF0ZShbLi4uaXYudmFsdWVdLnNsaWNlKDAsLTEpKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGFkZE9wdGlvbk9uLnZhbHVlLmluZGV4T2YoJ2VudGVyJykgPT09IC0xICYmIGNyZWF0ZU9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBwcmVwYXJlUG9pbnRlcigpO1xuICAgICAgICBzZWxlY3RQb2ludGVyKCk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICBpZiAoIWNyZWF0ZU9wdGlvbi52YWx1ZSAmJiAhc2VhcmNoYWJsZS52YWx1ZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBwcmVwYXJlUG9pbnRlcigpO1xuICAgICAgICAgIHNlbGVjdFBvaW50ZXIoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY3JlYXRlT3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH0gXG5cbiAgICAgICAgaWYgKGFkZE9wdGlvbk9uLnZhbHVlLmluZGV4T2YoJ3NwYWNlJykgPT09IC0xICYmIGNyZWF0ZU9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBcbiAgICAgICAgcHJlcGFyZVBvaW50ZXIoKTtcbiAgICAgICAgc2VsZWN0UG9pbnRlcigpO1xuICAgICAgICBicmVha1xuICAgICAgXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnOyc6XG4gICAgICBjYXNlICcsJzpcbiAgICAgICAgaWYgKGFkZE9wdGlvbk9uLnZhbHVlLmluZGV4T2YoZS5rZXkudG9Mb3dlckNhc2UoKSkgPT09IC0xIHx8ICFjcmVhdGVPcHRpb24udmFsdWUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHByZXBhcmVQb2ludGVyKCk7XG4gICAgICAgIHNlbGVjdFBvaW50ZXIoKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBibHVyKCk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCFzaG93T3B0aW9ucy52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHtcbiAgICAgICAgICBvcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGJhY2t3YXJkUG9pbnRlcigpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCFzaG93T3B0aW9ucy52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHtcbiAgICAgICAgICBvcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkUG9pbnRlcigpO1xuICAgICAgICBicmVha1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXl1cCA9IChlKSA9PiB7XG4gICAgY29udGV4dC5lbWl0KCdrZXl1cCcsIGUsICR0aGlzKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGhhbmRsZUtleWRvd24sXG4gICAgaGFuZGxlS2V5dXAsXG4gICAgcHJlcGFyZVBvaW50ZXIsXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlQ2xhc3NlcyAocHJvcHMsIGNvbnRleHQsIGRlcGVuZGVuY2llcylcbntjb25zdCB7IFxuICAgIGNsYXNzZXM6IGNsYXNzZXNfLCBkaXNhYmxlZCwgb3BlbkRpcmVjdGlvbiwgc2hvd09wdGlvbnNcbiAgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpc09wZW4gPSBkZXBlbmRlbmNpZXMuaXNPcGVuO1xuICBjb25zdCBpc1BvaW50ZWQgPSBkZXBlbmRlbmNpZXMuaXNQb2ludGVkO1xuICBjb25zdCBpc1NlbGVjdGVkID0gZGVwZW5kZW5jaWVzLmlzU2VsZWN0ZWQ7XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSBkZXBlbmRlbmNpZXMuaXNEaXNhYmxlZDtcbiAgY29uc3QgaXNBY3RpdmUgPSBkZXBlbmRlbmNpZXMuaXNBY3RpdmU7XG4gIGNvbnN0IGNhblBvaW50R3JvdXBzID0gZGVwZW5kZW5jaWVzLmNhblBvaW50R3JvdXBzO1xuICBjb25zdCByZXNvbHZpbmcgPSBkZXBlbmRlbmNpZXMucmVzb2x2aW5nO1xuICBjb25zdCBmbyA9IGRlcGVuZGVuY2llcy5mbztcblxuICBjb25zdCBjbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICBjb250YWluZXI6ICdtdWx0aXNlbGVjdCcsXG4gICAgY29udGFpbmVyRGlzYWJsZWQ6ICdpcy1kaXNhYmxlZCcsXG4gICAgY29udGFpbmVyT3BlbjogJ2lzLW9wZW4nLFxuICAgIGNvbnRhaW5lck9wZW5Ub3A6ICdpcy1vcGVuLXRvcCcsXG4gICAgY29udGFpbmVyQWN0aXZlOiAnaXMtYWN0aXZlJyxcbiAgICBzaW5nbGVMYWJlbDogJ211bHRpc2VsZWN0LXNpbmdsZS1sYWJlbCcsXG4gICAgc2luZ2xlTGFiZWxUZXh0OiAnbXVsdGlzZWxlY3Qtc2luZ2xlLWxhYmVsLXRleHQnLFxuICAgIG11bHRpcGxlTGFiZWw6ICdtdWx0aXNlbGVjdC1tdWx0aXBsZS1sYWJlbCcsXG4gICAgc2VhcmNoOiAnbXVsdGlzZWxlY3Qtc2VhcmNoJyxcbiAgICB0YWdzOiAnbXVsdGlzZWxlY3QtdGFncycsXG4gICAgdGFnOiAnbXVsdGlzZWxlY3QtdGFnJyxcbiAgICB0YWdEaXNhYmxlZDogJ2lzLWRpc2FibGVkJyxcbiAgICB0YWdSZW1vdmU6ICdtdWx0aXNlbGVjdC10YWctcmVtb3ZlJyxcbiAgICB0YWdSZW1vdmVJY29uOiAnbXVsdGlzZWxlY3QtdGFnLXJlbW92ZS1pY29uJyxcbiAgICB0YWdzU2VhcmNoV3JhcHBlcjogJ211bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoLXdyYXBwZXInLFxuICAgIHRhZ3NTZWFyY2g6ICdtdWx0aXNlbGVjdC10YWdzLXNlYXJjaCcsXG4gICAgdGFnc1NlYXJjaENvcHk6ICdtdWx0aXNlbGVjdC10YWdzLXNlYXJjaC1jb3B5JyxcbiAgICBwbGFjZWhvbGRlcjogJ211bHRpc2VsZWN0LXBsYWNlaG9sZGVyJyxcbiAgICBjYXJldDogJ211bHRpc2VsZWN0LWNhcmV0JyxcbiAgICBjYXJldE9wZW46ICdpcy1vcGVuJyxcbiAgICBjbGVhcjogJ211bHRpc2VsZWN0LWNsZWFyJyxcbiAgICBjbGVhckljb246ICdtdWx0aXNlbGVjdC1jbGVhci1pY29uJyxcbiAgICBzcGlubmVyOiAnbXVsdGlzZWxlY3Qtc3Bpbm5lcicsXG4gICAgaW5pZmluaXRlOiAnbXVsdGlzZWxlY3QtaW5pZml0ZScsXG4gICAgaW5pZmluaXRlU3Bpbm5lcjogJ211bHRpc2VsZWN0LWluaWZpdGUtc3Bpbm5lcicsXG4gICAgZHJvcGRvd246ICdtdWx0aXNlbGVjdC1kcm9wZG93bicsXG4gICAgZHJvcGRvd25Ub3A6ICdpcy10b3AnLFxuICAgIGRyb3Bkb3duSGlkZGVuOiAnaXMtaGlkZGVuJyxcbiAgICBvcHRpb25zOiAnbXVsdGlzZWxlY3Qtb3B0aW9ucycsXG4gICAgb3B0aW9uc1RvcDogJ2lzLXRvcCcsXG4gICAgZ3JvdXA6ICdtdWx0aXNlbGVjdC1ncm91cCcsXG4gICAgZ3JvdXBMYWJlbDogJ211bHRpc2VsZWN0LWdyb3VwLWxhYmVsJyxcbiAgICBncm91cExhYmVsUG9pbnRhYmxlOiAnaXMtcG9pbnRhYmxlJyxcbiAgICBncm91cExhYmVsUG9pbnRlZDogJ2lzLXBvaW50ZWQnLFxuICAgIGdyb3VwTGFiZWxTZWxlY3RlZDogJ2lzLXNlbGVjdGVkJyxcbiAgICBncm91cExhYmVsRGlzYWJsZWQ6ICdpcy1kaXNhYmxlZCcsXG4gICAgZ3JvdXBMYWJlbFNlbGVjdGVkUG9pbnRlZDogJ2lzLXNlbGVjdGVkIGlzLXBvaW50ZWQnLFxuICAgIGdyb3VwTGFiZWxTZWxlY3RlZERpc2FibGVkOiAnaXMtc2VsZWN0ZWQgaXMtZGlzYWJsZWQnLFxuICAgIGdyb3VwT3B0aW9uczogJ211bHRpc2VsZWN0LWdyb3VwLW9wdGlvbnMnLFxuICAgIG9wdGlvbjogJ211bHRpc2VsZWN0LW9wdGlvbicsXG4gICAgb3B0aW9uUG9pbnRlZDogJ2lzLXBvaW50ZWQnLFxuICAgIG9wdGlvblNlbGVjdGVkOiAnaXMtc2VsZWN0ZWQnLFxuICAgIG9wdGlvbkRpc2FibGVkOiAnaXMtZGlzYWJsZWQnLFxuICAgIG9wdGlvblNlbGVjdGVkUG9pbnRlZDogJ2lzLXNlbGVjdGVkIGlzLXBvaW50ZWQnLFxuICAgIG9wdGlvblNlbGVjdGVkRGlzYWJsZWQ6ICdpcy1zZWxlY3RlZCBpcy1kaXNhYmxlZCcsXG4gICAgbm9PcHRpb25zOiAnbXVsdGlzZWxlY3Qtbm8tb3B0aW9ucycsXG4gICAgbm9SZXN1bHRzOiAnbXVsdGlzZWxlY3Qtbm8tcmVzdWx0cycsXG4gICAgZmFrZUlucHV0OiAnbXVsdGlzZWxlY3QtZmFrZS1pbnB1dCcsXG4gICAgc3BhY2VyOiAnbXVsdGlzZWxlY3Qtc3BhY2VyJyxcbiAgICAuLi5jbGFzc2VzXy52YWx1ZSxcbiAgfSkpO1xuXG4gIC8vID09PT09PT09PT09PT09IENPTVBVVEVEID09PT09PT09PT09PT09XG5cbiAgY29uc3Qgc2hvd0Ryb3Bkb3duID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAhIShpc09wZW4udmFsdWUgJiYgc2hvd09wdGlvbnMudmFsdWUgJiYgKCFyZXNvbHZpbmcudmFsdWUgfHwgKHJlc29sdmluZy52YWx1ZSAmJiBmby52YWx1ZS5sZW5ndGgpKSlcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGMgPSBjbGFzc2VzLnZhbHVlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5lcjogW2MuY29udGFpbmVyXVxuICAgICAgICAuY29uY2F0KGRpc2FibGVkLnZhbHVlID8gYy5jb250YWluZXJEaXNhYmxlZCA6IFtdKVxuICAgICAgICAuY29uY2F0KHNob3dEcm9wZG93bi52YWx1ZSAmJiBvcGVuRGlyZWN0aW9uLnZhbHVlID09PSAndG9wJyAgPyBjLmNvbnRhaW5lck9wZW5Ub3AgOiBbXSlcbiAgICAgICAgLmNvbmNhdChzaG93RHJvcGRvd24udmFsdWUgJiYgb3BlbkRpcmVjdGlvbi52YWx1ZSAhPT0gJ3RvcCcgPyBjLmNvbnRhaW5lck9wZW4gOiBbXSlcbiAgICAgICAgLmNvbmNhdChpc0FjdGl2ZS52YWx1ZSA/IGMuY29udGFpbmVyQWN0aXZlIDogW10pLFxuICAgICAgc3BhY2VyOiBjLnNwYWNlcixcbiAgICAgIHNpbmdsZUxhYmVsOiBjLnNpbmdsZUxhYmVsLFxuICAgICAgc2luZ2xlTGFiZWxUZXh0OiBjLnNpbmdsZUxhYmVsVGV4dCxcbiAgICAgIG11bHRpcGxlTGFiZWw6IGMubXVsdGlwbGVMYWJlbCxcbiAgICAgIHNlYXJjaDogYy5zZWFyY2gsXG4gICAgICB0YWdzOiBjLnRhZ3MsXG4gICAgICB0YWc6IFtjLnRhZ11cbiAgICAgICAgLmNvbmNhdChkaXNhYmxlZC52YWx1ZSA/IGMudGFnRGlzYWJsZWQgOiBbXSksXG4gICAgICB0YWdSZW1vdmU6IGMudGFnUmVtb3ZlLFxuICAgICAgdGFnUmVtb3ZlSWNvbjogYy50YWdSZW1vdmVJY29uLFxuICAgICAgdGFnc1NlYXJjaFdyYXBwZXI6IGMudGFnc1NlYXJjaFdyYXBwZXIsXG4gICAgICB0YWdzU2VhcmNoOiBjLnRhZ3NTZWFyY2gsXG4gICAgICB0YWdzU2VhcmNoQ29weTogYy50YWdzU2VhcmNoQ29weSxcbiAgICAgIHBsYWNlaG9sZGVyOiBjLnBsYWNlaG9sZGVyLFxuICAgICAgY2FyZXQ6IFtjLmNhcmV0XVxuICAgICAgICAuY29uY2F0KGlzT3Blbi52YWx1ZSA/IGMuY2FyZXRPcGVuIDogW10pLFxuICAgICAgY2xlYXI6IGMuY2xlYXIsXG4gICAgICBjbGVhckljb246IGMuY2xlYXJJY29uLFxuICAgICAgc3Bpbm5lcjogYy5zcGlubmVyLFxuICAgICAgaW5pZmluaXRlOiBjLmluaWZpbml0ZSxcbiAgICAgIGluaWZpbml0ZVNwaW5uZXI6IGMuaW5pZmluaXRlU3Bpbm5lcixcbiAgICAgIGRyb3Bkb3duOiBbYy5kcm9wZG93bl1cbiAgICAgICAgLmNvbmNhdChvcGVuRGlyZWN0aW9uLnZhbHVlID09PSAndG9wJyA/IGMuZHJvcGRvd25Ub3AgOiBbXSlcbiAgICAgICAgLmNvbmNhdCghaXNPcGVuLnZhbHVlIHx8ICFzaG93T3B0aW9ucy52YWx1ZSB8fCAhc2hvd0Ryb3Bkb3duLnZhbHVlID8gYy5kcm9wZG93bkhpZGRlbiA6IFtdKSxcbiAgICAgIG9wdGlvbnM6IFtjLm9wdGlvbnNdXG4gICAgICAgIC5jb25jYXQob3BlbkRpcmVjdGlvbi52YWx1ZSA9PT0gJ3RvcCcgPyBjLm9wdGlvbnNUb3AgOiBbXSksXG4gICAgICBncm91cDogYy5ncm91cCxcbiAgICAgIGdyb3VwTGFiZWw6IChnKSA9PiB7XG4gICAgICAgIGxldCBncm91cExhYmVsID0gW2MuZ3JvdXBMYWJlbF07XG5cbiAgICAgICAgaWYgKGlzUG9pbnRlZChnKSkge1xuICAgICAgICAgIGdyb3VwTGFiZWwucHVzaChpc1NlbGVjdGVkKGcpID8gYy5ncm91cExhYmVsU2VsZWN0ZWRQb2ludGVkIDogYy5ncm91cExhYmVsUG9pbnRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTZWxlY3RlZChnKSAmJiBjYW5Qb2ludEdyb3Vwcy52YWx1ZSkge1xuICAgICAgICAgIGdyb3VwTGFiZWwucHVzaChpc0Rpc2FibGVkKGcpID8gYy5ncm91cExhYmVsU2VsZWN0ZWREaXNhYmxlZCA6IGMuZ3JvdXBMYWJlbFNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Rpc2FibGVkKGcpKSB7XG4gICAgICAgICAgZ3JvdXBMYWJlbC5wdXNoKGMuZ3JvdXBMYWJlbERpc2FibGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5Qb2ludEdyb3Vwcy52YWx1ZSkge1xuICAgICAgICAgIGdyb3VwTGFiZWwucHVzaChjLmdyb3VwTGFiZWxQb2ludGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwTGFiZWxcbiAgICAgIH0sXG4gICAgICBncm91cE9wdGlvbnM6IGMuZ3JvdXBPcHRpb25zLFxuICAgICAgb3B0aW9uOiAobywgZykgPT4ge1xuICAgICAgICBsZXQgb3B0aW9uID0gW2Mub3B0aW9uXTtcblxuICAgICAgICBpZiAoaXNQb2ludGVkKG8pKSB7XG4gICAgICAgICAgb3B0aW9uLnB1c2goaXNTZWxlY3RlZChvKSA/IGMub3B0aW9uU2VsZWN0ZWRQb2ludGVkIDogYy5vcHRpb25Qb2ludGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKG8pKSB7XG4gICAgICAgICAgb3B0aW9uLnB1c2goaXNEaXNhYmxlZChvKSA/IGMub3B0aW9uU2VsZWN0ZWREaXNhYmxlZCA6IGMub3B0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQobykgfHwgKGcgJiYgaXNEaXNhYmxlZChnKSkpIHtcbiAgICAgICAgICBvcHRpb24ucHVzaChjLm9wdGlvbkRpc2FibGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH0sXG4gICAgICBub09wdGlvbnM6IGMubm9PcHRpb25zLFxuICAgICAgbm9SZXN1bHRzOiBjLm5vUmVzdWx0cyxcbiAgICAgIGZha2VJbnB1dDogYy5mYWtlSW5wdXQsXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNsYXNzTGlzdCxcbiAgICBzaG93RHJvcGRvd24sXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlU2Nyb2xsJDEgKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHtcbiAgICBsaW1pdCwgaW5maW5pdGUsXG4gIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIC8vID09PT09PT09PT09PSBERVBFTkRFTkNJRVMgPT09PT09PT09PT09XG5cbiAgY29uc3QgaXNPcGVuID0gZGVwLmlzT3BlbjtcbiAgY29uc3Qgb2Zmc2V0ID0gZGVwLm9mZnNldDtcbiAgY29uc3Qgc2VhcmNoID0gZGVwLnNlYXJjaDtcbiAgY29uc3QgcGZvID0gZGVwLnBmbztcbiAgY29uc3QgZW8gPSBkZXAuZW87XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgY29uc3Qgb2JzZXJ2ZXIgPSByZWYobnVsbCk7XG5cbiAgY29uc3QgaW5maW5pdGVMb2FkZXIgPSByZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICBjb25zdCBoYXNNb3JlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBvZmZzZXQudmFsdWUgPCBwZm8udmFsdWUubGVuZ3RoXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgLy8gbm8gZXhwb3J0XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGNvbnN0IGhhbmRsZUludGVyc2VjdGlvbk9ic2VydmVyID0gKGVudHJpZXMpID0+IHtcbiAgICBjb25zdCB7IGlzSW50ZXJzZWN0aW5nLCB0YXJnZXQgfSA9IGVudHJpZXNbMF07XG5cbiAgICBpZiAoaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5vZmZzZXRQYXJlbnQ7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSBwYXJlbnQuc2Nyb2xsVG9wO1xuXG4gICAgICBvZmZzZXQudmFsdWUgKz0gbGltaXQudmFsdWUgPT0gLTEgPyAxMCA6IGxpbWl0LnZhbHVlO1xuXG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHBhcmVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb2JzZXJ2ZSA9ICgpID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgb2Zmc2V0LnZhbHVlIDwgcGZvLnZhbHVlLmxlbmd0aCkge1xuICAgICAgb2JzZXJ2ZXIudmFsdWUub2JzZXJ2ZShpbmZpbml0ZUxvYWRlci52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICghaXNPcGVuLnZhbHVlICYmIG9ic2VydmVyLnZhbHVlKSB7XG4gICAgICBvYnNlcnZlci52YWx1ZS5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09IFdBVENIRVJTID09PT09PT09PT09PT09XG5cbiAgd2F0Y2goaXNPcGVuLCAoKSA9PiB7XG4gICAgaWYgKCFpbmZpbml0ZS52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgb2JzZXJ2ZSgpO1xuICB9KTtcblxuICB3YXRjaChzZWFyY2gsICgpID0+IHtcbiAgICBpZiAoIWluZmluaXRlLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvZmZzZXQudmFsdWUgPSBsaW1pdC52YWx1ZTtcblxuICAgIG9ic2VydmUoKTtcbiAgfSwgeyBmbHVzaDogJ3Bvc3QnIH0pO1xuXG4gIHdhdGNoKGVvLCAoKSA9PiB7XG4gICAgaWYgKCFpbmZpbml0ZS52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgb2JzZXJ2ZSgpO1xuICB9LCB7IGltbWVkaWF0ZTogZmFsc2UsIGZsdXNoOiAncG9zdCcgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBIT09LUyA9PT09PT09PT09PT09PT1cblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnZhbHVlID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZUludGVyc2VjdGlvbk9ic2VydmVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaGFzTW9yZSxcbiAgICBpbmZpbml0ZUxvYWRlcixcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGwgKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHsgcGxhY2Vob2xkZXIsIGlkLCB2YWx1ZVByb3AsIGxhYmVsOiBsYWJlbFByb3AsIG1vZGUsIGdyb3VwTGFiZWwgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBwb2ludGVyID0gZGVwLnBvaW50ZXI7XG4gIGNvbnN0IGl2ID0gZGVwLml2O1xuICBjb25zdCBpc1NlbGVjdGVkID0gZGVwLmlzU2VsZWN0ZWQ7XG4gIGNvbnN0IGhhc1NlbGVjdGVkID0gZGVwLmhhc1NlbGVjdGVkO1xuICBjb25zdCBtdWx0aXBsZUxhYmVsVGV4dCA9IGRlcC5tdWx0aXBsZUxhYmVsVGV4dDtcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGxhYmVsID0gcmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09IENPTVBVVEVEID09PT09PT09PT09PT09XG5cbiAgY29uc3QgYXJpYU93bnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRleHRzID0gW107XG5cbiAgICBpZiAoaWQgJiYgaWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2goaWQudmFsdWUpO1xuICAgIH1cblxuICAgIHRleHRzLnB1c2goJ211bHRpc2VsZWN0LW9wdGlvbnMnKTtcblxuICAgIHJldHVybiB0ZXh0cy5qb2luKCctJylcbiAgfSk7XG5cbiAgY29uc3QgYXJpYUFjdGl2ZURlc2NlbmRhbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRleHRzID0gW107XG5cbiAgICBpZiAoaWQgJiYgaWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2goaWQudmFsdWUpO1xuICAgIH1cblxuICAgIHRleHRzLnB1c2goJ211bHRpc2VsZWN0LW9wdGlvbicpO1xuXG4gICAgaWYgKHBvaW50ZXIudmFsdWUgJiYgcG9pbnRlci52YWx1ZVt2YWx1ZVByb3AudmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHRzLnB1c2gocG9pbnRlci52YWx1ZVt2YWx1ZVByb3AudmFsdWVdKTtcblxuICAgICAgcmV0dXJuIHRleHRzLmpvaW4oJy0nKVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCB0ZXh0cyA9IFtdO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAobGFiZWwudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2gobGFiZWwudmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChwbGFjZWhvbGRlci52YWx1ZSAmJiAhaGFzU2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2gocGxhY2Vob2xkZXIudmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnZhbHVlID09PSAnc2luZ2xlJyAmJiBpdi52YWx1ZSAmJiBpdi52YWx1ZVtsYWJlbFByb3AudmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHRzLnB1c2goaXYudmFsdWVbbGFiZWxQcm9wLnZhbHVlXSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUudmFsdWUgPT09ICdtdWx0aXBsZScgJiYgaGFzU2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2gobXVsdGlwbGVMYWJlbFRleHQudmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnZhbHVlID09PSAndGFncycgJiYgaGFzU2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2goLi4uaXYudmFsdWUubWFwKHYgPT4gdltsYWJlbFByb3AudmFsdWVdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHRzLmpvaW4oJywgJylcbiAgfSk7XG5cbiAgY29uc3QgYXJpYVBsYWNlaG9sZGVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBhcmlhTGFiZWwudmFsdWVcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICBjb25zdCBhcmlhT3B0aW9uSWQgPSAob3B0aW9uKSA9PiB7XG4gICAgbGV0IHRleHRzID0gW107XG5cbiAgICBpZiAoaWQgJiYgaWQudmFsdWUpIHtcbiAgICAgIHRleHRzLnB1c2goaWQudmFsdWUpO1xuICAgIH1cblxuICAgIHRleHRzLnB1c2goJ211bHRpc2VsZWN0LW9wdGlvbicpO1xuXG4gICAgdGV4dHMucHVzaChvcHRpb25bdmFsdWVQcm9wLnZhbHVlXSk7XG5cbiAgICByZXR1cm4gdGV4dHMuam9pbignLScpXG4gIH07XG5cbiAgY29uc3QgYXJpYU9wdGlvbkxhYmVsID0gKG9wdGlvbikgPT4ge1xuICAgIGxldCB0ZXh0cyA9IFtdO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgdGV4dHMucHVzaCgn4pyTJyk7XG4gICAgfVxuXG4gICAgdGV4dHMucHVzaChvcHRpb25bbGFiZWxQcm9wLnZhbHVlXSk7XG5cbiAgICByZXR1cm4gdGV4dHMuam9pbignICcpXG4gIH07XG5cbiAgY29uc3QgYXJpYUdyb3VwTGFiZWwgPSAoZ3JvdXApID0+IHtcbiAgICBsZXQgdGV4dHMgPSBbXTtcblxuICAgIHRleHRzLnB1c2goZ3JvdXBbZ3JvdXBMYWJlbC52YWx1ZV0pO1xuXG4gICAgcmV0dXJuIHRleHRzLmpvaW4oJyAnKVxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PSBIT09LUyA9PT09PT09PT09PT09PT09XG5cbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpZCAmJiBpZC52YWx1ZSAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICBsZXQgZm9yVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2Zvcj1cIiR7aWQudmFsdWV9XCJdYCk7XG4gICAgICBsYWJlbC52YWx1ZSA9IGZvclRhZyA/IGZvclRhZy5pbm5lclRleHQgOiBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhcmlhT3ducyxcbiAgICBhcmlhTGFiZWwsXG4gICAgYXJpYVBsYWNlaG9sZGVyLFxuICAgIGFyaWFBY3RpdmVEZXNjZW5kYW50LFxuICAgIGFyaWFPcHRpb25JZCxcbiAgICBhcmlhT3B0aW9uTGFiZWwsXG4gICAgYXJpYUdyb3VwTGFiZWwsXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlcHMgKHByb3BzLCBjb250ZXh0LCBmZWF0dXJlcywgZGVwcyA9IHt9KSB7XG4gIGZlYXR1cmVzLmZvckVhY2goKGNvbXBvc2FibGUpID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjb21wb3NhYmxlKSB7XG4gICAgICBkZXBzID0ge1xuICAgICAgICAuLi5kZXBzLFxuICAgICAgICAuLi5jb21wb3NhYmxlKHByb3BzLCBjb250ZXh0LCBkZXBzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVwc1xufVxuXG52YXIgc2NyaXB0ID0ge1xuICAgIG5hbWU6ICdNdWx0aXNlbGVjdCcsXG4gICAgZW1pdHM6IFtcbiAgICAgICdwYXN0ZScsICdvcGVuJywgJ2Nsb3NlJywgJ3NlbGVjdCcsICdkZXNlbGVjdCcsIFxuICAgICAgJ2lucHV0JywgJ3NlYXJjaC1jaGFuZ2UnLCAndGFnJywgJ29wdGlvbicsICd1cGRhdGU6bW9kZWxWYWx1ZScsXG4gICAgICAnY2hhbmdlJywgJ2NsZWFyJywgJ2tleWRvd24nLCAna2V5dXAnLFxuICAgIF0sXG4gICAgcHJvcHM6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBtb2RlbFZhbHVlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKFtdKVxuICAgICAgfSxcbiAgICAgIGlkOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ211bHRpc2VsZWN0JyxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnbGFiZWwnLFxuICAgICAgfSxcbiAgICAgIHRyYWNrQnk6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB2YWx1ZVByb3A6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICd2YWx1ZScsXG4gICAgICB9LFxuICAgICAgcGxhY2Vob2xkZXI6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgbW9kZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ3NpbmdsZScsIC8vIHNpbmdsZXxtdWx0aXBsZXx0YWdzXG4gICAgICB9LFxuICAgICAgc2VhcmNoYWJsZToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGxpbWl0OiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAtMSxcbiAgICAgIH0sXG4gICAgICBoaWRlU2VsZWN0ZWQ6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNyZWF0ZVRhZzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBjcmVhdGVPcHRpb246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgYXBwZW5kTmV3VGFnOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGFwcGVuZE5ld09wdGlvbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBhZGRUYWdPbjoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgYWRkT3B0aW9uT246IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGNhcmV0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsb2FkaW5nOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbm9PcHRpb25zVGV4dDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ1RoZSBsaXN0IGlzIGVtcHR5JyxcbiAgICAgIH0sXG4gICAgICBub1Jlc3VsdHNUZXh0OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnTm8gcmVzdWx0cyBmb3VuZCcsXG4gICAgICB9LFxuICAgICAgbXVsdGlwbGVMYWJlbDoge1xuICAgICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG9iamVjdDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGRlbGF5OiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAtMSxcbiAgICAgIH0sXG4gICAgICBtaW5DaGFyczoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlT25Mb2FkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBmaWx0ZXJSZXN1bHRzOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjbGVhck9uU2VhcmNoOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgY2xlYXJPblNlbGVjdDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2FuRGVzZWxlY3Q6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNhbkNsZWFyOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBtYXg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgfSxcbiAgICAgIHNob3dPcHRpb25zOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG9wZW5EaXJlY3Rpb246IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICdib3R0b20nLFxuICAgICAgfSxcbiAgICAgIG5hdGl2ZVN1cHBvcnQ6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICB9LFxuICAgICAgc3RyaWN0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjbG9zZU9uU2VsZWN0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBhdXRvY29tcGxldGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZ3JvdXBzOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZ3JvdXBMYWJlbDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ2xhYmVsJyxcbiAgICAgIH0sXG4gICAgICBncm91cE9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICdvcHRpb25zJyxcbiAgICAgIH0sXG4gICAgICBncm91cEhpZGVFbXB0eToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGdyb3VwU2VsZWN0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBpbnB1dFR5cGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICd0ZXh0JyxcbiAgICAgIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgIH0sXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkUHJvcDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ2Rpc2FibGVkJyxcbiAgICAgIH0sXG4gICAgICBzZWFyY2hTdGFydDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHJldmVyc2U6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICByZWdleDoge1xuICAgICAgICB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIFJlZ0V4cF0sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHJ0bDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGluZmluaXRlOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXAocHJvcHMsIGNvbnRleHQpXG4gICAgeyBcbiAgICAgIHJldHVybiByZXNvbHZlRGVwcyhwcm9wcywgY29udGV4dCwgW1xuICAgICAgICB1c2VWYWx1ZSxcbiAgICAgICAgdXNlUG9pbnRlciQxLFxuICAgICAgICB1c2VEcm9wZG93bixcbiAgICAgICAgdXNlU2VhcmNoLFxuICAgICAgICB1c2VEYXRhLFxuICAgICAgICB1c2VNdWx0aXNlbGVjdCxcbiAgICAgICAgdXNlT3B0aW9ucyxcbiAgICAgICAgdXNlU2Nyb2xsJDEsXG4gICAgICAgIHVzZVBvaW50ZXIsXG4gICAgICAgIHVzZUtleWJvYXJkLFxuICAgICAgICB1c2VDbGFzc2VzLFxuICAgICAgICB1c2VTY3JvbGwsXG4gICAgICBdKVxuICAgIH1cbiAgfTtcblxuY29uc3QgX2hvaXN0ZWRfMSA9IFtcInRhYmluZGV4XCIsIFwiaWRcIiwgXCJkaXJcIiwgXCJhcmlhLW93bnNcIiwgXCJhcmlhLWV4cGFuZGVkXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtcGxhY2Vob2xkZXJcIiwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIl07XG5jb25zdCBfaG9pc3RlZF8yID0gW1widHlwZVwiLCBcIm1vZGVsVmFsdWVcIiwgXCJ2YWx1ZVwiLCBcImF1dG9jb21wbGV0ZVwiLCBcImlkXCIsIFwiYXJpYS1vd25zXCIsIFwiYXJpYS1leHBhbmRlZFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLXBsYWNlaG9sZGVyXCIsIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCJdO1xuY29uc3QgX2hvaXN0ZWRfMyA9IFtcIm9uQ2xpY2tcIl07XG5jb25zdCBfaG9pc3RlZF80ID0gW1widHlwZVwiLCBcIm1vZGVsVmFsdWVcIiwgXCJ2YWx1ZVwiLCBcImlkXCIsIFwiYXV0b2NvbXBsZXRlXCIsIFwiYXJpYS1vd25zXCIsIFwiYXJpYS1leHBhbmRlZFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLXBsYWNlaG9sZGVyXCIsIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCJdO1xuY29uc3QgX2hvaXN0ZWRfNSA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzYgPSBbXCJpbm5lckhUTUxcIl07XG5jb25zdCBfaG9pc3RlZF83ID0gW1wiaWRcIl07XG5jb25zdCBfaG9pc3RlZF84ID0gW1wiZGF0YS1wb2ludGVkXCIsIFwib25Nb3VzZWVudGVyXCIsIFwib25DbGlja1wiXTtcbmNvbnN0IF9ob2lzdGVkXzkgPSBbXCJpbm5lckhUTUxcIl07XG5jb25zdCBfaG9pc3RlZF8xMCA9IFtcImFyaWEtbGFiZWxcIl07XG5jb25zdCBfaG9pc3RlZF8xMSA9IFtcImRhdGEtcG9pbnRlZFwiLCBcImRhdGEtc2VsZWN0ZWRcIiwgXCJpZFwiLCBcImFyaWEtbGFiZWxcIiwgXCJvbk1vdXNlZW50ZXJcIiwgXCJvbkNsaWNrXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTIgPSBbXCJpbm5lckhUTUxcIl07XG5jb25zdCBfaG9pc3RlZF8xMyA9IFtcImlkXCIsIFwiYXJpYS1sYWJlbFwiLCBcImRhdGEtcG9pbnRlZFwiLCBcImRhdGEtc2VsZWN0ZWRcIiwgXCJvbk1vdXNlZW50ZXJcIiwgXCJvbkNsaWNrXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTQgPSBbXCJpbm5lckhUTUxcIl07XG5jb25zdCBfaG9pc3RlZF8xNSA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzE2ID0gW1wiaW5uZXJIVE1MXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTcgPSBbXCJ2YWx1ZVwiXTtcbmNvbnN0IF9ob2lzdGVkXzE4ID0gW1wibmFtZVwiLCBcInZhbHVlXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTkgPSBbXCJuYW1lXCIsIFwidmFsdWVcIl07XG5cbmZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICByZWY6IFwibXVsdGlzZWxlY3RcIixcbiAgICB0YWJpbmRleDogX2N0eC50YWJpbmRleCxcbiAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuY29udGFpbmVyKSxcbiAgICBpZDogJHByb3BzLnNlYXJjaGFibGUgPyB1bmRlZmluZWQgOiAkcHJvcHMuaWQsXG4gICAgZGlyOiAkcHJvcHMucnRsID8gJ3J0bCcgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLW93bnNcIjogX2N0eC5hcmlhT3ducyxcbiAgICBcImFyaWEtZXhwYW5kZWRcIjogX2N0eC5pc09wZW4sXG4gICAgXCJhcmlhLWxhYmVsXCI6IF9jdHguYXJpYUxhYmVsLFxuICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiBfY3R4LmFyaWFQbGFjZWhvbGRlcixcbiAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfY3R4LmFyaWFBY3RpdmVEZXNjZW5kYW50LFxuICAgIG9uRm9jdXNpbjogX2NhY2hlWzhdIHx8IChfY2FjaGVbOF0gPSAoLi4uYXJncykgPT4gKF9jdHguYWN0aXZhdGUgJiYgX2N0eC5hY3RpdmF0ZSguLi5hcmdzKSkpLFxuICAgIG9uRm9jdXNvdXQ6IF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gKC4uLmFyZ3MpID0+IChfY3R4LmRlYWN0aXZhdGUgJiYgX2N0eC5kZWFjdGl2YXRlKC4uLmFyZ3MpKSksXG4gICAgb25LZXlkb3duOiBfY2FjaGVbMTBdIHx8IChfY2FjaGVbMTBdID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZUtleWRvd24gJiYgX2N0eC5oYW5kbGVLZXlkb3duKC4uLmFyZ3MpKSksXG4gICAgb25LZXl1cDogX2NhY2hlWzExXSB8fCAoX2NhY2hlWzExXSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVLZXl1cCAmJiBfY3R4LmhhbmRsZUtleXVwKC4uLmFyZ3MpKSksXG4gICAgb25Gb2N1czogX2NhY2hlWzEyXSB8fCAoX2NhY2hlWzEyXSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVGb2N1cyAmJiBfY3R4LmhhbmRsZUZvY3VzKC4uLmFyZ3MpKSksXG4gICAgb25Nb3VzZWRvd246IF9jYWNoZVsxM10gfHwgKF9jYWNoZVsxM10gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlTW91c2Vkb3duICYmIF9jdHguaGFuZGxlTW91c2Vkb3duKC4uLmFyZ3MpKSksXG4gICAgcm9sZTogXCJjb21ib2JveFwiXG4gIH0sIFtcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgU2VhcmNoIFwiKSxcbiAgICAoJHByb3BzLm1vZGUgIT09ICd0YWdzJyAmJiAkcHJvcHMuc2VhcmNoYWJsZSAmJiAhJHByb3BzLmRpc2FibGVkKVxuICAgICAgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImlucHV0XCIsIG1lcmdlUHJvcHMoe1xuICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICB0eXBlOiAkcHJvcHMuaW5wdXRUeXBlLFxuICAgICAgICAgIG1vZGVsVmFsdWU6IF9jdHguc2VhcmNoLFxuICAgICAgICAgIHZhbHVlOiBfY3R4LnNlYXJjaCxcbiAgICAgICAgICBjbGFzczogX2N0eC5jbGFzc0xpc3Quc2VhcmNoLFxuICAgICAgICAgIGF1dG9jb21wbGV0ZTogJHByb3BzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICBpZDogJHByb3BzLnNlYXJjaGFibGUgPyAkcHJvcHMuaWQgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgJHByb3BzLmF0dHJzLCB7XG4gICAgICAgICAgXCJhcmlhLW93bnNcIjogX2N0eC5hcmlhT3ducyxcbiAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX2N0eC5pc09wZW4sXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF9jdHguYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiBfY3R4LmFyaWFQbGFjZWhvbGRlcixcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfY3R4LmFyaWFBY3RpdmVEZXNjZW5kYW50LFxuICAgICAgICAgIG9uSW5wdXQ6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZVNlYXJjaElucHV0ICYmIF9jdHguaGFuZGxlU2VhcmNoSW5wdXQoLi4uYXJncykpKSxcbiAgICAgICAgICBvbktleXByZXNzOiBfY2FjaGVbMV0gfHwgKF9jYWNoZVsxXSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVLZXlwcmVzcyAmJiBfY3R4LmhhbmRsZUtleXByZXNzKC4uLmFyZ3MpKSksXG4gICAgICAgICAgb25QYXN0ZTogX2NhY2hlWzJdIHx8IChfY2FjaGVbMl0gPSB3aXRoTW9kaWZpZXJzKCguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVQYXN0ZSAmJiBfY3R4LmhhbmRsZVBhc3RlKC4uLmFyZ3MpKSwgW1wic3RvcFwiXSkpLFxuICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIlxuICAgICAgICB9KSwgbnVsbCwgMTYgLyogRlVMTF9QUk9QUyAqLywgX2hvaXN0ZWRfMikpXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIFRhZ3MgKHdpdGggc2VhcmNoKSBcIiksXG4gICAgKCRwcm9wcy5tb2RlID09ICd0YWdzJylcbiAgICAgID8gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QudGFncylcbiAgICAgICAgfSwgW1xuICAgICAgICAgIChvcGVuQmxvY2sodHJ1ZSksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgbnVsbCwgcmVuZGVyTGlzdChfY3R4Lml2LCAob3B0aW9uLCBpLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcInRhZ1wiLCB7XG4gICAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgICAgICBoYW5kbGVUYWdSZW1vdmU6IF9jdHguaGFuZGxlVGFnUmVtb3ZlLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogJHByb3BzLmRpc2FibGVkXG4gICAgICAgICAgICB9LCAoKSA9PiBbXG4gICAgICAgICAgICAgIChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnRhZyksXG4gICAgICAgICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgIGNyZWF0ZVRleHRWTm9kZSh0b0Rpc3BsYXlTdHJpbmcob3B0aW9uWyRwcm9wcy5sYWJlbF0pICsgXCIgXCIsIDEgLyogVEVYVCAqLyksXG4gICAgICAgICAgICAgICAgKCEkcHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC50YWdSZW1vdmUpLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRldmVudCA9PiAoX2N0eC5oYW5kbGVUYWdSZW1vdmUob3B0aW9uLCAkZXZlbnQpKVxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QudGFnUmVtb3ZlSWNvbilcbiAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCAyIC8qIENMQVNTICovKVxuICAgICAgICAgICAgICAgICAgICBdLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzMpKVxuICAgICAgICAgICAgICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9KSwgMjU2IC8qIFVOS0VZRURfRlJBR01FTlQgKi8pKSxcbiAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnRhZ3NTZWFyY2hXcmFwcGVyKSxcbiAgICAgICAgICAgIHJlZjogXCJ0YWdzXCJcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgVXNlZCBmb3IgbWVhc3VyaW5nIHNlYXJjaCB3aWR0aCBcIiksXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnRhZ3NTZWFyY2hDb3B5KVxuICAgICAgICAgICAgfSwgdG9EaXNwbGF5U3RyaW5nKF9jdHguc2VhcmNoKSwgMyAvKiBURVhULCBDTEFTUyAqLyksXG4gICAgICAgICAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgQWN0dWFsIHNlYXJjaCBpbnB1dCBcIiksXG4gICAgICAgICAgICAoJHByb3BzLnNlYXJjaGFibGUgJiYgISRwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICAgICAgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImlucHV0XCIsIG1lcmdlUHJvcHMoe1xuICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJHByb3BzLmlucHV0VHlwZSxcbiAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IF9jdHguc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF9jdHguc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF9jdHguY2xhc3NMaXN0LnRhZ3NTZWFyY2gsXG4gICAgICAgICAgICAgICAgICBpZDogJHByb3BzLnNlYXJjaGFibGUgPyAkcHJvcHMuaWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6ICRwcm9wcy5hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICB9LCAkcHJvcHMuYXR0cnMsIHtcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1vd25zXCI6IF9jdHguYXJpYU93bnMsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX2N0eC5pc09wZW4sXG4gICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX2N0eC5hcmlhTGFiZWwsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtcGxhY2Vob2xkZXJcIjogX2N0eC5hcmlhUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfY3R4LmFyaWFBY3RpdmVEZXNjZW5kYW50LFxuICAgICAgICAgICAgICAgICAgb25JbnB1dDogX2NhY2hlWzNdIHx8IChfY2FjaGVbM10gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlU2VhcmNoSW5wdXQgJiYgX2N0eC5oYW5kbGVTZWFyY2hJbnB1dCguLi5hcmdzKSkpLFxuICAgICAgICAgICAgICAgICAgb25LZXlwcmVzczogX2NhY2hlWzRdIHx8IChfY2FjaGVbNF0gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlS2V5cHJlc3MgJiYgX2N0eC5oYW5kbGVLZXlwcmVzcyguLi5hcmdzKSkpLFxuICAgICAgICAgICAgICAgICAgb25QYXN0ZTogX2NhY2hlWzVdIHx8IChfY2FjaGVbNV0gPSB3aXRoTW9kaWZpZXJzKCguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVQYXN0ZSAmJiBfY3R4LmhhbmRsZVBhc3RlKC4uLmFyZ3MpKSwgW1wic3RvcFwiXSkpLFxuICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICByb2xlOiBcImNvbWJvYm94XCJcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCwgMTYgLyogRlVMTF9QUk9QUyAqLywgX2hvaXN0ZWRfNCkpXG4gICAgICAgICAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pKVxuICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBTaW5nbGUgbGFiZWwgXCIpLFxuICAgICgkcHJvcHMubW9kZSA9PSAnc2luZ2xlJyAmJiBfY3R4Lmhhc1NlbGVjdGVkICYmICFfY3R4LnNlYXJjaCAmJiBfY3R4Lml2KVxuICAgICAgPyByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcInNpbmdsZWxhYmVsXCIsIHtcbiAgICAgICAgICBrZXk6IDIsXG4gICAgICAgICAgdmFsdWU6IF9jdHguaXZcbiAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Quc2luZ2xlTGFiZWwpXG4gICAgICAgICAgfSwgW1xuICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5zaW5nbGVMYWJlbFRleHQpLFxuICAgICAgICAgICAgICBpbm5lckhUTUw6IF9jdHguaXZbJHByb3BzLmxhYmVsXVxuICAgICAgICAgICAgfSwgbnVsbCwgMTAgLyogQ0xBU1MsIFBST1BTICovLCBfaG9pc3RlZF81KVxuICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIE11bHRpcGxlIGxhYmVsIFwiKSxcbiAgICAoJHByb3BzLm1vZGUgPT0gJ211bHRpcGxlJyAmJiBfY3R4Lmhhc1NlbGVjdGVkICYmICFfY3R4LnNlYXJjaClcbiAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJtdWx0aXBsZWxhYmVsXCIsIHtcbiAgICAgICAgICBrZXk6IDMsXG4gICAgICAgICAgdmFsdWVzOiBfY3R4Lml2XG4gICAgICAgIH0sICgpID0+IFtcbiAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lm11bHRpcGxlTGFiZWwpLFxuICAgICAgICAgICAgaW5uZXJIVE1MOiBfY3R4Lm11bHRpcGxlTGFiZWxUZXh0XG4gICAgICAgICAgfSwgbnVsbCwgMTAgLyogQ0xBU1MsIFBST1BTICovLCBfaG9pc3RlZF82KVxuICAgICAgICBdKVxuICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBQbGFjZWhvbGRlciBcIiksXG4gICAgKCRwcm9wcy5wbGFjZWhvbGRlciAmJiAhX2N0eC5oYXNTZWxlY3RlZCAmJiAhX2N0eC5zZWFyY2gpXG4gICAgICA/IHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwicGxhY2Vob2xkZXJcIiwgeyBrZXk6IDQgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QucGxhY2Vob2xkZXIpXG4gICAgICAgICAgfSwgdG9EaXNwbGF5U3RyaW5nKCRwcm9wcy5wbGFjZWhvbGRlciksIDMgLyogVEVYVCwgQ0xBU1MgKi8pXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIFNwaW5uZXIgXCIpLFxuICAgICgkcHJvcHMubG9hZGluZyB8fCBfY3R4LnJlc29sdmluZylcbiAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJzcGlubmVyXCIsIHsga2V5OiA1IH0sICgpID0+IFtcbiAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5zcGlubmVyKVxuICAgICAgICAgIH0sIG51bGwsIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIENsZWFyIFwiKSxcbiAgICAoX2N0eC5oYXNTZWxlY3RlZCAmJiAhJHByb3BzLmRpc2FibGVkICYmICRwcm9wcy5jYW5DbGVhciAmJiAhX2N0eC5idXN5KVxuICAgICAgPyByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImNsZWFyXCIsIHtcbiAgICAgICAgICBrZXk6IDYsXG4gICAgICAgICAgY2xlYXI6IF9jdHguY2xlYXJcbiAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmNsZWFyKSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVs2XSB8fCAoX2NhY2hlWzZdID0gKC4uLmFyZ3MpID0+IChfY3R4LmNsZWFyICYmIF9jdHguY2xlYXIoLi4uYXJncykpKVxuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuY2xlYXJJY29uKVxuICAgICAgICAgICAgfSwgbnVsbCwgMiAvKiBDTEFTUyAqLylcbiAgICAgICAgICBdLCAyIC8qIENMQVNTICovKVxuICAgICAgICBdKVxuICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBDYXJldCBcIiksXG4gICAgKCRwcm9wcy5jYXJldCAmJiAkcHJvcHMuc2hvd09wdGlvbnMpXG4gICAgICA/IHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiY2FyZXRcIiwgeyBrZXk6IDcgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmNhcmV0KSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IF9jYWNoZVs3XSB8fCAoX2NhY2hlWzddID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZUNhcmV0Q2xpY2sgJiYgX2N0eC5oYW5kbGVDYXJldENsaWNrKC4uLmFyZ3MpKSlcbiAgICAgICAgICB9LCBudWxsLCAyIC8qIENMQVNTICovKVxuICAgICAgICBdKVxuICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBPcHRpb25zIFwiKSxcbiAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmRyb3Bkb3duKSxcbiAgICAgIHRhYmluZGV4OiBcIi0xXCJcbiAgICB9LCBbXG4gICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImJlZm9yZWxpc3RcIiwgeyBvcHRpb25zOiBfY3R4LmZvIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwidWxcIiwge1xuICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Qub3B0aW9ucyksXG4gICAgICAgIGlkOiBfY3R4LmFyaWFPd25zLFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIlxuICAgICAgfSwgW1xuICAgICAgICAoJHByb3BzLmdyb3VwcylcbiAgICAgICAgICA/IChvcGVuQmxvY2sodHJ1ZSksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgeyBrZXk6IDAgfSwgcmVuZGVyTGlzdChfY3R4LmZnLCAoZ3JvdXAsIGksIGtleSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJsaVwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lmdyb3VwKSxcbiAgICAgICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5ncm91cExhYmVsKGdyb3VwKSksXG4gICAgICAgICAgICAgICAgICBcImRhdGEtcG9pbnRlZFwiOiBfY3R4LmlzUG9pbnRlZChncm91cCksXG4gICAgICAgICAgICAgICAgICBvbk1vdXNlZW50ZXI6ICRldmVudCA9PiAoX2N0eC5zZXRQb2ludGVyKGdyb3VwKSksXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiAkZXZlbnQgPT4gKF9jdHguaGFuZGxlR3JvdXBDbGljayhncm91cCkpLFxuICAgICAgICAgICAgICAgICAgcm9sZTogXCJub25lXCJcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImdyb3VwbGFiZWxcIiwge1xuICAgICAgICAgICAgICAgICAgICBncm91cDogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IF9jdHguaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgaXNQb2ludGVkOiBfY3R4LmlzUG9pbnRlZFxuICAgICAgICAgICAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGdyb3VwWyRwcm9wcy5ncm91cExhYmVsXVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF85KVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdLCA0MiAvKiBDTEFTUywgUFJPUFMsIEhZRFJBVEVfRVZFTlRTICovLCBfaG9pc3RlZF84KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJ1bFwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuZ3JvdXBPcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfY3R4LmFyaWFHcm91cExhYmVsKGdyb3VwKSxcbiAgICAgICAgICAgICAgICAgIHJvbGU6IFwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgIChvcGVuQmxvY2sodHJ1ZSksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgbnVsbCwgcmVuZGVyTGlzdChncm91cC5fX1ZJU0lCTEVfXywgKG9wdGlvbiwgaSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImxpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Qub3B0aW9uKG9wdGlvbiwgZ3JvdXApKSxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtcG9pbnRlZFwiOiBfY3R4LmlzUG9pbnRlZChvcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1zZWxlY3RlZFwiOiBfY3R4LmlzU2VsZWN0ZWQob3B0aW9uKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IF9jdHguYXJpYU9wdGlvbklkKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF9jdHguYXJpYU9wdGlvbkxhYmVsKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZWVudGVyOiAkZXZlbnQgPT4gKF9jdHguc2V0UG9pbnRlcihvcHRpb24pKSxcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAkZXZlbnQgPT4gKF9jdHguaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uKSksXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBfY3R4LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BvaW50ZWQ6IF9jdHguaXNQb2ludGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiBfY3R4LnNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IG9wdGlvblskcHJvcHMubGFiZWxdXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xMilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdLCA0MiAvKiBDTEFTUywgUFJPUFMsIEhZRFJBVEVfRVZFTlRTICovLCBfaG9pc3RlZF8xMSkpXG4gICAgICAgICAgICAgICAgICB9KSwgMTI4IC8qIEtFWUVEX0ZSQUdNRU5UICovKSlcbiAgICAgICAgICAgICAgICBdLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzEwKVxuICAgICAgICAgICAgICBdLCAyIC8qIENMQVNTICovKSlcbiAgICAgICAgICAgIH0pLCAxMjggLyogS0VZRURfRlJBR01FTlQgKi8pKVxuICAgICAgICAgIDogKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMSB9LCByZW5kZXJMaXN0KF9jdHguZm8sIChvcHRpb24sIGksIGtleSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJsaVwiLCB7XG4gICAgICAgICAgICAgICAgaWQ6IF9jdHguYXJpYU9wdGlvbklkKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF9jdHguYXJpYU9wdGlvbkxhYmVsKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lm9wdGlvbihvcHRpb24pKSxcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICBcImRhdGEtcG9pbnRlZFwiOiBfY3R4LmlzUG9pbnRlZChvcHRpb24pLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1zZWxlY3RlZFwiOiBfY3R4LmlzU2VsZWN0ZWQob3B0aW9uKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb25Nb3VzZWVudGVyOiAkZXZlbnQgPT4gKF9jdHguc2V0UG9pbnRlcihvcHRpb24pKSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAkZXZlbnQgPT4gKF9jdHguaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uKSksXG4gICAgICAgICAgICAgICAgcm9sZTogXCJvcHRpb25cIlxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJvcHRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBfY3R4LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICBpc1BvaW50ZWQ6IF9jdHguaXNQb2ludGVkLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiBfY3R4LnNlYXJjaFxuICAgICAgICAgICAgICAgIH0sICgpID0+IFtcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IG9wdGlvblskcHJvcHMubGFiZWxdXG4gICAgICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xNClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdLCA0MiAvKiBDTEFTUywgUFJPUFMsIEhZRFJBVEVfRVZFTlRTICovLCBfaG9pc3RlZF8xMykpXG4gICAgICAgICAgICB9KSwgMTI4IC8qIEtFWUVEX0ZSQUdNRU5UICovKSlcbiAgICAgIF0sIDEwIC8qIENMQVNTLCBQUk9QUyAqLywgX2hvaXN0ZWRfNyksXG4gICAgICAoX2N0eC5ub09wdGlvbnMpXG4gICAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJub29wdGlvbnNcIiwgeyBrZXk6IDAgfSwgKCkgPT4gW1xuICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lm5vT3B0aW9ucyksXG4gICAgICAgICAgICAgIGlubmVySFRNTDogJHByb3BzLm5vT3B0aW9uc1RleHRcbiAgICAgICAgICAgIH0sIG51bGwsIDEwIC8qIENMQVNTLCBQUk9QUyAqLywgX2hvaXN0ZWRfMTUpXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgICAgKF9jdHgubm9SZXN1bHRzKVxuICAgICAgICA/IHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwibm9yZXN1bHRzXCIsIHsga2V5OiAxIH0sICgpID0+IFtcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5ub1Jlc3VsdHMpLFxuICAgICAgICAgICAgICBpbm5lckhUTUw6ICRwcm9wcy5ub1Jlc3VsdHNUZXh0XG4gICAgICAgICAgICB9LCBudWxsLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzE2KVxuICAgICAgICAgIF0pXG4gICAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICAgICgkcHJvcHMuaW5maW5pdGUgJiYgX2N0eC5oYXNNb3JlKVxuICAgICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGtleTogMixcbiAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5pbmlmaW5pdGUpLFxuICAgICAgICAgICAgcmVmOiBcImluZmluaXRlTG9hZGVyXCJcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImluZmluaXRlXCIsIHt9LCAoKSA9PiBbXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5pbmlmaW5pdGVTcGlubmVyKVxuICAgICAgICAgICAgICB9LCBudWxsLCAyIC8qIENMQVNTICovKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdLCAyIC8qIENMQVNTICovKSlcbiAgICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgICAgcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJhZnRlcmxpc3RcIiwgeyBvcHRpb25zOiBfY3R4LmZvIH0pXG4gICAgXSwgMiAvKiBDTEFTUyAqLyksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIEhhY2t5IGlucHV0IGVsZW1lbnQgdG8gc2hvdyBIVE1MNSByZXF1aXJlZCB3YXJuaW5nIFwiKSxcbiAgICAoJHByb3BzLnJlcXVpcmVkKVxuICAgICAgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImlucHV0XCIsIHtcbiAgICAgICAgICBrZXk6IDgsXG4gICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmZha2VJbnB1dCksXG4gICAgICAgICAgdGFiaW5kZXg6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogX2N0eC50ZXh0VmFsdWUsXG4gICAgICAgICAgcmVxdWlyZWQ6IFwiXCJcbiAgICAgICAgfSwgbnVsbCwgMTAgLyogQ0xBU1MsIFBST1BTICovLCBfaG9pc3RlZF8xNykpXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIE5hdGl2ZSBpbnB1dCBzdXBwb3J0IFwiKSxcbiAgICAoJHByb3BzLm5hdGl2ZVN1cHBvcnQpXG4gICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogOSB9LCBbXG4gICAgICAgICAgKCRwcm9wcy5tb2RlID09ICdzaW5nbGUnKVxuICAgICAgICAgICAgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICBuYW1lOiAkcHJvcHMubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogX2N0eC5wbGFpblZhbHVlICE9PSB1bmRlZmluZWQgPyBfY3R4LnBsYWluVmFsdWUgOiAnJ1xuICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xOCkpXG4gICAgICAgICAgICA6IChvcGVuQmxvY2sodHJ1ZSksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgeyBrZXk6IDEgfSwgcmVuZGVyTGlzdChfY3R4LnBsYWluVmFsdWUsICh2LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGAkeyRwcm9wcy5uYW1lfVtdYCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAga2V5OiBpXG4gICAgICAgICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfMTkpKVxuICAgICAgICAgICAgICB9KSwgMTI4IC8qIEtFWUVEX0ZSQUdNRU5UICovKSlcbiAgICAgICAgXSwgNjQgLyogU1RBQkxFX0ZSQUdNRU5UICovKSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgQ3JlYXRlIGhlaWdodCBmb3IgZW1wdHkgaW5wdXQgXCIpLFxuICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Quc3BhY2VyKVxuICAgIH0sIG51bGwsIDIgLyogQ0xBU1MgKi8pXG4gIF0sIDQyIC8qIENMQVNTLCBQUk9QUywgSFlEUkFURV9FVkVOVFMgKi8sIF9ob2lzdGVkXzEpKVxufVxuXG5zY3JpcHQucmVuZGVyID0gcmVuZGVyO1xuc2NyaXB0Ll9fZmlsZSA9IFwic3JjL011bHRpc2VsZWN0LnZ1ZVwiO1xuXG5leHBvcnQgeyBzY3JpcHQgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB2YXIgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uID0gJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/ICdFVElNRURPVVQnIDogJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgKGNhbmNlbCAmJiBjYW5jZWwudHlwZSkgPyBuZXcgQ2FuY2VsKCdjYW5jZWxlZCcpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWQnKTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGlmICghY29uZmlnLnVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWQnKTtcbiAgfVxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsKCdjYW5jZWxlZCcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDoge1xuICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG4gIH0sXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGVuaGFuY2VFcnJvcihlLCB0aGlzLCAnRV9KU09OX1BBUlNFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjUuMFwiXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTVxufTtcbiIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIExvb2t1cCB0YWJsZXNcblx0ICAgIHZhciBTQk9YID0gW107XG5cdCAgICB2YXIgSU5WX1NCT1ggPSBbXTtcblx0ICAgIHZhciBTVUJfTUlYXzAgPSBbXTtcblx0ICAgIHZhciBTVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBTVUJfTUlYXzIgPSBbXTtcblx0ICAgIHZhciBTVUJfTUlYXzMgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMSA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzIgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8zID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgbG9va3VwIHRhYmxlc1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIGRvdWJsZSB0YWJsZVxuXHQgICAgICAgIHZhciBkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoaSA8IDEyOCkge1xuXHQgICAgICAgICAgICAgICAgZFtpXSA9IGkgPDwgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSAoaSA8PCAxKSBeIDB4MTFiO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gV2FsayBHRigyXjgpXG5cdCAgICAgICAgdmFyIHggPSAwO1xuXHQgICAgICAgIHZhciB4aSA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHNib3hcblx0ICAgICAgICAgICAgdmFyIHN4ID0geGkgXiAoeGkgPDwgMSkgXiAoeGkgPDwgMikgXiAoeGkgPDwgMykgXiAoeGkgPDwgNCk7XG5cdCAgICAgICAgICAgIHN4ID0gKHN4ID4+PiA4KSBeIChzeCAmIDB4ZmYpIF4gMHg2Mztcblx0ICAgICAgICAgICAgU0JPWFt4XSA9IHN4O1xuXHQgICAgICAgICAgICBJTlZfU0JPWFtzeF0gPSB4O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbXVsdGlwbGljYXRpb25cblx0ICAgICAgICAgICAgdmFyIHgyID0gZFt4XTtcblx0ICAgICAgICAgICAgdmFyIHg0ID0gZFt4Ml07XG5cdCAgICAgICAgICAgIHZhciB4OCA9IGRbeDRdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgc3ViIGJ5dGVzLCBtaXggY29sdW1ucyB0YWJsZXNcblx0ICAgICAgICAgICAgdmFyIHQgPSAoZFtzeF0gKiAweDEwMSkgXiAoc3ggKiAweDEwMTAxMDApO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzBbeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfMVt4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNik7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfMlt4XSA9ICh0IDw8IDgpICB8ICh0ID4+PiAyNCk7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfM1t4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnYgc3ViIGJ5dGVzLCBpbnYgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKHg4ICogMHgxMDEwMTAxKSBeICh4NCAqIDB4MTAwMDEpIF4gKHgyICogMHgxMDEpIF4gKHggKiAweDEwMTAxMDApO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8wW3N4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMVtzeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8yW3N4XSA9ICh0IDw8IDgpICB8ICh0ID4+PiAyNCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzNbc3hdID0gdDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgY291bnRlclxuXHQgICAgICAgICAgICBpZiAoIXgpIHtcblx0ICAgICAgICAgICAgICAgIHggPSB4aSA9IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geDIgXiBkW2RbZFt4OCBeIHgyXV1dO1xuXHQgICAgICAgICAgICAgICAgeGkgXj0gZFtkW3hpXV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvLyBQcmVjb21wdXRlZCBSY29uIGxvb2t1cFxuXHQgICAgdmFyIFJDT04gPSBbMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNl07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQUVTIGJsb2NrIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBBRVMgPSBDX2FsZ28uQUVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgdDtcblxuXHQgICAgICAgICAgICAvLyBTa2lwIHJlc2V0IG9mIG5Sb3VuZHMgaGFzIGJlZW4gc2V0IGJlZm9yZSBhbmQga2V5IGRpZCBub3QgY2hhbmdlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9uUm91bmRzICYmIHRoaXMuX2tleVByaW9yUmVzZXQgPT09IHRoaXMuX2tleSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXlQcmlvclJlc2V0ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBrZXlTaXplID0ga2V5LnNpZ0J5dGVzIC8gNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG51bWJlciBvZiByb3VuZHNcblx0ICAgICAgICAgICAgdmFyIG5Sb3VuZHMgPSB0aGlzLl9uUm91bmRzID0ga2V5U2l6ZSArIDY7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Yga2V5IHNjaGVkdWxlIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIGtzUm93cyA9IChuUm91bmRzICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUga2V5IHNjaGVkdWxlXG5cdCAgICAgICAgICAgIHZhciBrZXlTY2hlZHVsZSA9IHRoaXMuX2tleVNjaGVkdWxlID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGtzUm93ID0gMDsga3NSb3cgPCBrc1Jvd3M7IGtzUm93KyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChrc1JvdyA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlXb3Jkc1trc1Jvd107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgPSBrZXlTY2hlZHVsZVtrc1JvdyAtIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKCEoa3NSb3cgJSBrZXlTaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3Qgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiB3b3JkXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFt0ICYgMHhmZl07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IFJjb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCBePSBSQ09OWyhrc1JvdyAvIGtleVNpemUpIHwgMF0gPDwgMjQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlTaXplID4gNiAmJiBrc1JvdyAlIGtleVNpemUgPT0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVNjaGVkdWxlW2tzUm93IC0ga2V5U2l6ZV0gXiB0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnYga2V5IHNjaGVkdWxlXG5cdCAgICAgICAgICAgIHZhciBpbnZLZXlTY2hlZHVsZSA9IHRoaXMuX2ludktleVNjaGVkdWxlID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrc1JvdyA9IGtzUm93cyAtIGludktzUm93O1xuXG5cdCAgICAgICAgICAgICAgICBpZiAoaW52S3NSb3cgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1Jvd107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSA0XTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93IDwgNCB8fCBrc1JvdyA8PSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gdDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gSU5WX1NVQl9NSVhfMFtTQk9YW3QgPj4+IDI0XV0gXiBJTlZfU1VCX01JWF8xW1NCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIElOVl9TVUJfTUlYXzNbU0JPWFt0ICYgMHhmZl1dO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9rZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgMm5kIGFuZCA0dGggcm93c1xuXHQgICAgICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDtcblxuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgSU5WX1NVQl9NSVhfMCwgSU5WX1NVQl9NSVhfMSwgSU5WX1NVQl9NSVhfMiwgSU5WX1NVQl9NSVhfMywgSU5WX1NCT1gpO1xuXG5cdCAgICAgICAgICAgIC8vIEludiBzd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIGtleVNjaGVkdWxlLCBTVUJfTUlYXzAsIFNVQl9NSVhfMSwgU1VCX01JWF8yLCBTVUJfTUlYXzMsIFNCT1gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIG5Sb3VuZHMgPSB0aGlzLl9uUm91bmRzO1xuXG5cdCAgICAgICAgICAgIC8vIEdldCBpbnB1dCwgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgczAgPSBNW29mZnNldF0gICAgIF4ga2V5U2NoZWR1bGVbMF07XG5cdCAgICAgICAgICAgIHZhciBzMSA9IE1bb2Zmc2V0ICsgMV0gXiBrZXlTY2hlZHVsZVsxXTtcblx0ICAgICAgICAgICAgdmFyIHMyID0gTVtvZmZzZXQgKyAyXSBeIGtleVNjaGVkdWxlWzJdO1xuXHQgICAgICAgICAgICB2YXIgczMgPSBNW29mZnNldCArIDNdIF4ga2V5U2NoZWR1bGVbM107XG5cblx0ICAgICAgICAgICAgLy8gS2V5IHNjaGVkdWxlIHJvdyBjb3VudGVyXG5cdCAgICAgICAgICAgIHZhciBrc1JvdyA9IDQ7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMTsgcm91bmQgPCBuUm91bmRzOyByb3VuZCsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zLCBhZGQgcm91bmQga2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgdDAgPSBTVUJfTUlYXzBbczAgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczEgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMiA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBTVUJfTUlYXzBbczEgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMyA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDIgPSBTVUJfTUlYXzBbczIgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczMgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMCA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDMgPSBTVUJfTUlYXzBbczMgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczAgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMSA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgczAgPSB0MDtcblx0ICAgICAgICAgICAgICAgIHMxID0gdDE7XG5cdCAgICAgICAgICAgICAgICBzMiA9IHQyO1xuXHQgICAgICAgICAgICAgICAgczMgPSB0Mztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MiA9ICgoU0JPWFtzMiA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMyA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMwID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMSAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSAgICAgPSB0MDtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHQxO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDJdID0gdDI7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0Mztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuQUVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihBRVMpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLkFFUztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZXZwa2RmXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdENyeXB0b0pTLmxpYi5DaXBoZXIgfHwgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGlzIGNpcGhlcidzIGtleSBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfRU5DX1hGT1JNX01PREUgQSBjb25zdGFudCByZXByZXNlbnRpbmcgZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9ERUNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRW5jcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRGVjcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHhmb3JtTW9kZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXHQgICAgICAgICAgICB0aGlzLl94Zm9ybU1vZGUgPSB4Zm9ybU1vZGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBjaXBoZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGNpcGhlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgYnVmZmVyXG5cdCAgICAgICAgICAgIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0ucmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB0aGlzLl9kb1Jlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgZGF0YSB0byBiZSBlbmNyeXB0ZWQgb3IgZGVjcnlwdGVkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIucHJvY2Vzcyh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBhdmFpbGFibGUgYmxvY2tzXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzKCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHByb2Nlc3MuXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YVVwZGF0ZSBUaGUgZmluYWwgZGF0YSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuXG5cdCAgICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBzaG9ydGN1dCBmdW5jdGlvbnMgdG8gYSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNpcGhlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAobWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZW5jcnlwdChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpLmRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9KCkpXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIHN0cmVhbSBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RlIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlck1vZGUgPSBDX2xpYi5CbG9ja0NpcGhlck1vZGUgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIG1vZGUgZm9yIGVuY3J5cHRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5jcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdi53b3Jkcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIgPSBjaXBoZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gaXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHZhciBDQkMgPSBCbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBYT1IgYW5kIGVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZGVjcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5EZWNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIERlY3J5cHQgYW5kIFhPUlxuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBmdW5jdGlvbiB4b3JCbG9jayh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXG5cdCAgICAgICAgICAgIC8vIENob29zZSBtaXhpbmcgYmxvY2tcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBibG9jayA9IGl2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gdGhpcy5fcHJldkJsb2NrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gWE9SIGJsb2Nrc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBibG9ja1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBDQkM7XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBhZGRpbmcgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19wYWQgPSBDLnBhZCA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBLQ1MgIzUvNyBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGtjczcgPSBDX3BhZC5Qa2NzNyA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQYWRzIGRhdGEgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHBhZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tTaXplIFRoZSBtdWx0aXBsZSB0aGF0IHRoZSBkYXRhIHNob3VsZCBiZSBwYWRkZWQgdG8uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy5wYWQod29yZEFycmF5LCA0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmcgd29yZFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmQgPSAoblBhZGRpbmdCeXRlcyA8PCAyNCkgfCAoblBhZGRpbmdCeXRlcyA8PCAxNikgfCAoblBhZGRpbmdCeXRlcyA8PCA4KSB8IG5QYWRkaW5nQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdXb3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5QYWRkaW5nQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgcGFkZGluZ1dvcmRzLnB1c2gocGFkZGluZ1dvcmQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nID0gV29yZEFycmF5LmNyZWF0ZShwYWRkaW5nV29yZHMsIG5QYWRkaW5nQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuY29uY2F0KHBhZGRpbmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVbnBhZHMgZGF0YSB0aGF0IGhhZCBiZWVuIHBhZGRlZCB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gdW5wYWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIENyeXB0b0pTLnBhZC5Qa2NzNy51bnBhZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGJsb2NrIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXIgPSBDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge01vZGV9IG1vZGUgVGhlIGJsb2NrIG1vZGUgdG8gdXNlLiBEZWZhdWx0OiBDQkNcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBQa2NzN1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBtb2RlOiBDQkMsXG5cdCAgICAgICAgICAgIHBhZGRpbmc6IFBrY3M3XG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbW9kZUNyZWF0b3I7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXQgY2lwaGVyXG5cdCAgICAgICAgICAgIENpcGhlci5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IGNmZy5pdjtcblx0ICAgICAgICAgICAgdmFyIG1vZGUgPSBjZmcubW9kZTtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBibG9jayBtb2RlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVFbmNyeXB0b3I7XG5cdCAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0RFQ19YRk9STV9NT0RFKSAqLyB7XG5cdCAgICAgICAgICAgICAgICBtb2RlQ3JlYXRvciA9IG1vZGUuY3JlYXRlRGVjcnlwdG9yO1xuXHQgICAgICAgICAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBvbmUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBmb3IgdW5wYWRkaW5nXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9taW5CdWZmZXJTaXplID0gMTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlICYmIHRoaXMuX21vZGUuX19jcmVhdG9yID09IG1vZGVDcmVhdG9yKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLmluaXQodGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG1vZGVDcmVhdG9yLmNhbGwobW9kZSwgdGhpcywgaXYgJiYgaXYud29yZHMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPSBtb2RlQ3JlYXRvcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLmNmZy5wYWRkaW5nO1xuXG5cdCAgICAgICAgICAgIC8vIEZpbmFsaXplXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnBhZCh0aGlzLl9kYXRhLCB0aGlzLmJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVW5wYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNvbGxlY3Rpb24gb2YgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGtleSBUaGUga2V5IHRvIHRoaXMgY2lwaGVydGV4dC5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBpdiBUaGUgSVYgdXNlZCBpbiB0aGUgY2lwaGVyaW5nIG9wZXJhdGlvbi5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtDaXBoZXJ9IGFsZ29yaXRobSBUaGUgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyLlxuXHQgICAgICogQHByb3BlcnR5IHtGb3JtYXR9IGZvcm1hdHRlciBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2lwaGVyUGFyYW1zIEFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgcG9zc2libGUgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAga2V5OiBrZXlXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBpdjogaXZXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAgYWxnb3JpdGhtOiBDcnlwdG9KUy5hbGdvLkFFUyxcblx0ICAgICAgICAgKiAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuXHQgICAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuXHQgICAgICAgICAqICAgICAgICAgYmxvY2tTaXplOiA0LFxuXHQgICAgICAgICAqICAgICAgICAgZm9ybWF0dGVyOiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTFxuXHQgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWl4SW4oY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCBjaXBoZXIgcGFyYW1zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHRocm93cyBFcnJvciBJZiBuZWl0aGVyIHRoZSBmb3JtYXR0ZXIgbm9yIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBpcyBzZXQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMgKyAnJztcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKGZvcm1hdHRlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGZvcm1hdHRlciB8fCB0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEZvcm1hdCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEZvcm1hdHRlciA9IENfZm9ybWF0Lk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3BlblNTTFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMLnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZEFycmF5O1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB2YXIgc2FsdCA9IGNpcGhlclBhcmFtcy5zYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIEZvcm1hdFxuXHQgICAgICAgICAgICBpZiAoc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgd29yZEFycmF5ID0gV29yZEFycmF5LmNyZWF0ZShbMHg1MzYxNmM3NCwgMHg2NTY0NWY1Zl0pLmNvbmNhdChzYWx0KS5jb25jYXQoY2lwaGVydGV4dCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHdvcmRBcnJheS50b1N0cmluZyhCYXNlNjQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlblNTTFN0ciBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChvcGVuU1NMU3RyKSB7XG5cdCAgICAgICAgICAgIHZhciBzYWx0O1xuXG5cdCAgICAgICAgICAgIC8vIFBhcnNlIGJhc2U2NFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBUZXN0IGZvciBzYWx0XG5cdCAgICAgICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuXHQgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBzYWx0XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LmNyZWF0ZShjaXBoZXJ0ZXh0V29yZHMuc2xpY2UoMiwgNCkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc2FsdCBmcm9tIGNpcGhlcnRleHRcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHRXb3Jkcy5zcGxpY2UoMCwgNCk7XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LnNpZ0J5dGVzIC09IDE2O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBjaXBoZXIgd3JhcHBlciB0aGF0IHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNlcmlhbGl6YWJsZUNpcGhlciA9IENfbGliLlNlcmlhbGl6YWJsZUNpcGhlciA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgY2lwaGVyIHBhcmFtIG9iamVjdHMgdG8gYW5kIGZyb20gYSBzdHJpbmcuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgZm9ybWF0OiBPcGVuU1NMRm9ybWF0dGVyXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgZW5jcnlwdG9yID0gY2lwaGVyLmNyZWF0ZUVuY3J5cHRvcihrZXksIGNmZyk7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdG9yLmZpbmFsaXplKG1lc3NhZ2UpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJDZmcgPSBlbmNyeXB0b3IuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsXG5cdCAgICAgICAgICAgICAgICBrZXk6IGtleSxcblx0ICAgICAgICAgICAgICAgIGl2OiBjaXBoZXJDZmcuaXYsXG5cdCAgICAgICAgICAgICAgICBhbGdvcml0aG06IGNpcGhlcixcblx0ICAgICAgICAgICAgICAgIG1vZGU6IGNpcGhlckNmZy5tb2RlLFxuXHQgICAgICAgICAgICAgICAgcGFkZGluZzogY2lwaGVyQ2ZnLnBhZGRpbmcsXG5cdCAgICAgICAgICAgICAgICBibG9ja1NpemU6IGNpcGhlci5ibG9ja1NpemUsXG5cdCAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNmZy5mb3JtYXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IGNpcGhlci5jcmVhdGVEZWNyeXB0b3Ioa2V5LCBjZmcpLmZpbmFsaXplKGNpcGhlcnRleHQuY2lwaGVydGV4dCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHRvIENpcGhlclBhcmFtcyxcblx0ICAgICAgICAgKiBlbHNlIGFzc3VtZWQgQ2lwaGVyUGFyYW1zIGFscmVhZHkgYW5kIHJldHVybnMgY2lwaGVydGV4dCB1bmNoYW5nZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UgdG8gcGFyc2Ugc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgdW5zZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5fcGFyc2UoY2lwaGVydGV4dFN0cmluZ09yUGFyYW1zLCBmb3JtYXQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9wYXJzZTogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGZvcm1hdCkge1xuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNpcGhlcnRleHQgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQucGFyc2UoY2lwaGVydGV4dCwgdGhpcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfa2RmID0gQy5rZGYgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEtkZiA9IENfa2RmLk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZCB0byBkZXJpdmUgZnJvbS5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUga2V5IHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpdlNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIElWIHRvIGdlbmVyYXRlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCAoT3B0aW9uYWwpIEEgNjQtYml0IHNhbHQgdG8gdXNlLiBJZiBvbWl0dGVkLCBhIHNhbHQgd2lsbCBiZSBnZW5lcmF0ZWQgcmFuZG9tbHkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3Qgd2l0aCB0aGUga2V5LCBJViwgYW5kIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMik7XG5cdCAgICAgICAgICogICAgIHZhciBkZXJpdmVkUGFyYW1zID0gQ3J5cHRvSlMua2RmLk9wZW5TU0wuZXhlY3V0ZSgnUGFzc3dvcmQnLCAyNTYvMzIsIDEyOC8zMiwgJ3NhbHRzYWx0Jyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBrZXlTaXplLCBpdlNpemUsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgcmFuZG9tIHNhbHRcblx0ICAgICAgICAgICAgaWYgKCFzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICBzYWx0ID0gV29yZEFycmF5LnJhbmRvbSg2NC84KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSBFdnBLREYuY3JlYXRlKHsga2V5U2l6ZToga2V5U2l6ZSArIGl2U2l6ZSB9KS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblxuXHQgICAgICAgICAgICAvLyBTZXBhcmF0ZSBrZXkgYW5kIElWXG5cdCAgICAgICAgICAgIHZhciBpdiA9IFdvcmRBcnJheS5jcmVhdGUoa2V5LndvcmRzLnNsaWNlKGtleVNpemUpLCBpdlNpemUgKiA0KTtcblx0ICAgICAgICAgICAga2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHBhcmFtc1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGtleToga2V5LCBpdjogaXYsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIHNlcmlhbGl6YWJsZSBjaXBoZXIgd3JhcHBlciB0aGF0IGRlcml2ZXMgdGhlIGtleSBmcm9tIGEgcGFzc3dvcmQsXG5cdCAgICAgKiBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgUGFzc3dvcmRCYXNlZENpcGhlciA9IENfbGliLlBhc3N3b3JkQmFzZWRDaXBoZXIgPSBTZXJpYWxpemFibGVDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0tERn0ga2RmIFRoZSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiB0byB1c2UgdG8gZ2VuZXJhdGUgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogU2VyaWFsaXphYmxlQ2lwaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZGY6IE9wZW5TU0xLZGZcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZSB1c2luZyBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcpO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBtZXNzYWdlLCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplKTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgSVYgdG8gY29uZmlnXG5cdCAgICAgICAgICAgIGNmZy5pdiA9IGRlcml2ZWRQYXJhbXMuaXY7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBtZXNzYWdlLCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBNaXggaW4gZGVyaXZlZCBwYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dC5taXhJbihkZXJpdmVkUGFyYW1zKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVydGV4dDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0IHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQgdG8gZGVjcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBmb3JtYXR0ZWRDaXBoZXJ0ZXh0LCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5kZWNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBjaXBoZXJ0ZXh0UGFyYW1zLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLl9wYXJzZShjaXBoZXJ0ZXh0LCBjZmcuZm9ybWF0KTtcblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBvdGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBjZmcua2RmLmV4ZWN1dGUocGFzc3dvcmQsIGNpcGhlci5rZXlTaXplLCBjaXBoZXIuaXZTaXplLCBjaXBoZXJ0ZXh0LnNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBEZWNyeXB0XG5cdCAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgY2lwaGVydGV4dCwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdHJvb3QuQ3J5cHRvSlMgPSBmYWN0b3J5KCk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG5cdC8qZ2xvYmFscyB3aW5kb3csIGdsb2JhbCwgcmVxdWlyZSovXG5cblx0LyoqXG5cdCAqIENyeXB0b0pTIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdHZhciBDcnlwdG9KUyA9IENyeXB0b0pTIHx8IChmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG5cblx0ICAgIHZhciBjcnlwdG87XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHdpbmRvdy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gaW4gd2ViIHdvcmtlciAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBzZWxmLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdvcmtlclxuXHQgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IGdsb2JhbFRoaXMuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1zQ3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93Lm1zQ3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gZ2xvYmFsIChOb2RlSlMpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbXBvcnQgdmlhIHJlcXVpcmUgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cdCAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgfVxuXG5cdCAgICAvKlxuXHQgICAgICogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG5cdCAgICAgKlxuXHQgICAgICogQXMgTWF0aC5yYW5kb20oKSBpcyBjcnlwdG9ncmFwaGljYWxseSBub3Qgc2FmZSB0byB1c2Vcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyeXB0b1NlY3VyZVJhbmRvbUludCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoY3J5cHRvKSB7XG5cdCAgICAgICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVzZSByYW5kb21CeXRlcyBtZXRob2QgKE5vZGVKUylcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuJyk7XG5cdCAgICB9O1xuXG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ3J5cHRvSlMgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExpYnJhcnkgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2UgPSAoZnVuY3Rpb24gKCkge1xuXG5cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIFByb3BlcnRpZXMgdG8gY29weSBpbnRvIHRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgTXlUeXBlID0gQ3J5cHRvSlMubGliLkJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKG92ZXJyaWRlcykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3Bhd25cblx0ICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBdWdtZW50XG5cdCAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5taXhJbihvdmVycmlkZXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXHQgICAgICAgICAgICAgICAgaWYgKCFzdWJ0eXBlLmhhc093blByb3BlcnR5KCdpbml0JykgfHwgdGhpcy5pbml0ID09PSBzdWJ0eXBlLmluaXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplcidzIHByb3RvdHlwZSBpcyB0aGUgc3VidHlwZSBvYmplY3Rcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cdCAgICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBFeHRlbmRzIHRoaXMgb2JqZWN0IGFuZCBydW5zIHRoZSBpbml0IG1ldGhvZC5cblx0ICAgICAgICAgICAgICogQXJndW1lbnRzIHRvIGNyZWF0ZSgpIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKS5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGluc3RhbmNlID0gTXlUeXBlLmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5pdC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG5cdCAgICAgICAgICAgICAqICAgICAgICAgfVxuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgbWl4SW46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSUUgd29uJ3QgY29weSB0b1N0cmluZyB1c2luZyB0aGUgbG9vcCBhYm92ZVxuXHQgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGNsb25lID0gaW5zdGFuY2UuY2xvbmUoKTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSk7XG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMDAxMDIwMywgMHgwNDA1MDYwN10sIDYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyB3b3JkIGFycmF5IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZW5jb2Rlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmNhdGVuYXRlcyBhIHdvcmQgYXJyYXkgdG8gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5MS5jb25jYXQod29yZEFycmF5Mik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29uY2F0OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgdGhpcy5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbmNhdFxuXHQgICAgICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgYnl0ZSBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdEJ5dGUgPSAodGhhdFdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAoMjQgLSAoKHRoaXNTaWdCeXRlcyArIGkpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIENvcHkgb25lIHdvcmQgYXQgYSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoYXRTaWdCeXRlczsgaiArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpc1dvcmRzWyh0aGlzU2lnQnl0ZXMgKyBqKSA+Pj4gMl0gPSB0aGF0V29yZHNbaiA+Pj4gMl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xhbXA6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXBcblx0ICAgICAgICAgICAgd29yZHNbc2lnQnl0ZXMgPj4+IDJdICY9IDB4ZmZmZmZmZmYgPDwgKDMyIC0gKHNpZ0J5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgd29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHNpZ0J5dGVzIC8gNCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB3b3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSB3b3JkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBieXRlcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSByYW5kb20gd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByYW5kb206IGZ1bmN0aW9uIChuQnl0ZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgd29yZHMucHVzaChjcnlwdG9TZWN1cmVSYW5kb21JbnQoKSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhleCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlID4+PiA0KS50b1N0cmluZygxNikpO1xuXHQgICAgICAgICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSAmIDB4MGYpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gaGV4Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGhleFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGV4U3RyTGVuZ3RoID0gaGV4U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAzXSB8PSBwYXJzZUludChoZXhTdHIuc3Vic3RyKGksIDIpLCAxNikgPDwgKDI0IC0gKGkgJSA4KSAqIDQpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBMYXRpbjEgPSBDX2VuYy5MYXRpbjEgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbGF0aW4xU3RyaW5nID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMUNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdGUgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXRpbjFTdHIgVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShsYXRpbjFTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAobGF0aW4xU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBsYXRpbjFTdHJMZW5ndGggPSBsYXRpbjFTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0aW4xU3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IChsYXRpbjFTdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIGxhdGluMVN0ckxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtOCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGY4U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShMYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSkpKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgVVRGLTggZGF0YScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodXRmOFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGY4U3RyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBMYXRpbjEucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHV0ZjhTdHIpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBidWZmZXJlZCBibG9jayBhbGdvcml0aG0gdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX21pbkJ1ZmZlclNpemUgVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBzaG91bGQgYmUga2VwdCB1bnByb2Nlc3NlZCBpbiB0aGUgYnVmZmVyLiBEZWZhdWx0OiAwXG5cdCAgICAgKi9cblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBibG9jayBhbGdvcml0aG0ncyBkYXRhIGJ1ZmZlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYXBwZW5kLiBTdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gYSBXb3JkQXJyYXkgdXNpbmcgVVRGLTguXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9hcHBlbmQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfYXBwZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBcHBlbmRcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YS5jb25jYXQoZGF0YSk7XG5cdCAgICAgICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgX2RvUHJvY2Vzc0Jsb2NrKG9mZnNldCksIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBkb0ZsdXNoIFdoZXRoZXIgYWxsIGJsb2NrcyBhbmQgcGFydGlhbCBibG9ja3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHByb2Nlc3NlZERhdGEgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3Byb2Nlc3M6IGZ1bmN0aW9uIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgIHZhciBwcm9jZXNzZWRXb3JkcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGRhdGFTaWdCeXRlcyA9IGRhdGEuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSB0aGlzLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBibG9ja3MgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CbG9ja3NSZWFkeSA9IGRhdGFTaWdCeXRlcyAvIGJsb2NrU2l6ZUJ5dGVzO1xuXHQgICAgICAgICAgICBpZiAoZG9GbHVzaCkge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAgdG8gaW5jbHVkZSBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5jZWlsKG5CbG9ja3NSZWFkeSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duIHRvIGluY2x1ZGUgb25seSBmdWxsIGJsb2Nrcyxcblx0ICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYnVmZmVyXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLm1heCgobkJsb2Nrc1JlYWR5IHwgMCkgLSB0aGlzLl9taW5CdWZmZXJTaXplLCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHdvcmRzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuV29yZHNSZWFkeSA9IG5CbG9ja3NSZWFkeSAqIGJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBieXRlcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJ5dGVzUmVhZHkgPSBNYXRoLm1pbihuV29yZHNSZWFkeSAqIDQsIGRhdGFTaWdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3Ncblx0ICAgICAgICAgICAgaWYgKG5Xb3Jkc1JlYWR5KSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSAwOyBvZmZzZXQgPCBuV29yZHNSZWFkeTsgb2Zmc2V0ICs9IGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtYWxnb3JpdGhtIGxvZ2ljXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9Qcm9jZXNzQmxvY2soZGF0YVdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcHJvY2Vzc2VkIHdvcmRzXG5cdCAgICAgICAgICAgICAgICBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuQnl0ZXNSZWFkeTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9taW5CdWZmZXJTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBoYXNoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyID0gQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggY29tcHV0YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoZXIgPSBDcnlwdG9KUy5hbGdvLlNIQTI1Ni5jcmVhdGUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIGhhc2hlciB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtIYXNoZXJ9IFRoaXMgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBoYXNoXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIG1lc3NhZ2UgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWhhc2hlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2RvRmluYWxpemUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA1MTIvMzIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgc2hvcnRjdXQgZnVuY3Rpb24gdG8gYSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlIGluIHRoaXMgSE1BQyBoZWxwZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgSG1hY1NIQTI1NiA9IENyeXB0b0pTLmxpYi5IYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ28gPSB7fTtcblxuXHQgICAgcmV0dXJuIEM7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGJhc2U2NFN0cmluZyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMSA9ICh3b3Jkc1tpID4+PiAyXSAgICAgICA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAgICAgICAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTIgPSAod29yZHNbKGkgKyAxKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDEpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUzID0gKHdvcmRzWyhpICsgMikgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAyKSAlIDQpICogOCkpICYgMHhmZjtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHRyaXBsZXQgPSAoYnl0ZTEgPDwgMTYpIHwgKGJ5dGUyIDw8IDgpIHwgYnl0ZTM7XG5cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyAoaiA8IDQpICYmIChpICsgaiAqIDAuNzUgPCBzaWdCeXRlcyk7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gobWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gKDYgKiAoMyAtIGopKSkgJiAweDNmKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZTY0Q2hhcnMubGVuZ3RoICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NENoYXJzLnB1c2gocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFN0ciBUaGUgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRTdHJMZW5ndGggPSBiYXNlNjRTdHIubGVuZ3RoO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXHQgICAgICAgICAgICB2YXIgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXA7XG5cblx0ICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXAgPSBbXTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwW21hcC5jaGFyQ29kZUF0KGopXSA9IGo7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSWdub3JlIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhZGRpbmdJbmRleCA9IGJhc2U2NFN0ci5pbmRleE9mKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nSW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0U3RyTGVuZ3RoID0gcGFkZGluZ0luZGV4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICByZXR1cm4gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKTtcblxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApIHtcblx0ICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NFN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAoaSAlIDQpIHtcblx0ICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB2YXIgYml0czIgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXSA+Pj4gKDYgLSAoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHNDb21iaW5lZCA9IGJpdHMxIHwgYml0czI7XG5cdCAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgbkJ5dGVzKys7XG5cdCAgICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIG5CeXRlcyk7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLkJhc2U2NDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2U2NHVybCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJhc2U2NHVybCA9IENfZW5jLkJhc2U2NHVybCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBCYXNlNjR1cmwgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXJsU2FmZSBXaGV0aGVyIHRvIHVzZSB1cmwgc2FmZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgQmFzZTY0dXJsIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGJhc2U2NFN0cmluZyA9IENyeXB0b0pTLmVuYy5CYXNlNjR1cmwuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5LCB1cmxTYWZlPXRydWUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdXJsU2FmZSA/IHRoaXMuX3NhZmVfbWFwIDogdGhpcy5fbWFwO1xuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIHdvcmRBcnJheS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NENoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUxID0gKHdvcmRzW2kgPj4+IDJdICAgICAgID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICAgICAgICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMiA9ICh3b3Jkc1soaSArIDEpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMSkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTMgPSAod29yZHNbKGkgKyAyKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDIpICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlMSA8PCAxNikgfCAoYnl0ZTIgPDwgOCkgfCBieXRlMztcblxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IChqIDwgNCkgJiYgKGkgKyBqICogMC43NSA8IHNpZ0J5dGVzKTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiAoNiAqICgzIC0gaikpKSAmIDB4M2YpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRDaGFycy5sZW5ndGggJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gYmFzZTY0Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgQmFzZTY0dXJsIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0U3RyIFRoZSBCYXNlNjR1cmwgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1cmxTYWZlIFdoZXRoZXIgdG8gdXNlIHVybCBzYWZlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybC5wYXJzZShiYXNlNjRTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoYmFzZTY0U3RyLCB1cmxTYWZlPXRydWUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBiYXNlNjRTdHJMZW5ndGggPSBiYXNlNjRTdHIubGVuZ3RoO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdXJsU2FmZSA/IHRoaXMuX3NhZmVfbWFwIDogdGhpcy5fbWFwO1xuXHQgICAgICAgICAgICB2YXIgcmV2ZXJzZU1hcCA9IHRoaXMuX3JldmVyc2VNYXA7XG5cblx0ICAgICAgICAgICAgaWYgKCFyZXZlcnNlTWFwKSB7XG5cdCAgICAgICAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwW21hcC5jaGFyQ29kZUF0KGopXSA9IGo7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJZ25vcmUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFkZGluZ0luZGV4ID0gYmFzZTY0U3RyLmluZGV4T2YocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdJbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRTdHJMZW5ndGggPSBwYWRkaW5nSW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHJldHVybiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApO1xuXG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPScsXG5cdCAgICAgICAgX3NhZmVfbWFwOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXycsXG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApIHtcblx0ICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICB2YXIgbkJ5dGVzID0gMDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2U2NFN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpICUgNCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdHMxID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpIC0gMSldIDw8ICgoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0czIgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkpXSA+Pj4gKDYgLSAoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0c0NvbWJpbmVkID0gYml0czEgfCBiaXRzMjtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW25CeXRlcyA+Pj4gMl0gfD0gYml0c0NvbWJpbmVkIDw8ICgyNCAtIChuQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgbkJ5dGVzKys7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIG5CeXRlcyk7XG5cdCAgICB9XG5cdH0oKSk7XG5cblx0cmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjR1cmw7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgQkUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBVdGYxNkJFID0gQ19lbmMuVXRmMTYgPSBDX2VuYy5VdGYxNkJFID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjE2U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0ZjE2LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmY7XG5cdCAgICAgICAgICAgICAgICB1dGYxNkNoYXJzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiB1dGYxNkNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIFVURi0xNiBCRSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjE2U3RyIFRoZSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5VdGYxNi5wYXJzZSh1dGYxNlN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSB1dGYxNlN0ci5jaGFyQ29kZUF0KGkpIDw8ICgxNiAtIChpICUgMikgKiAxNik7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi0xNiBMRSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgQ19lbmMuVXRmMTZMRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0ciA9IENyeXB0b0pTLmVuYy5VdGYxNkxFLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBzd2FwRW5kaWFuKCh3b3Jkc1tpID4+PiAyXSA+Pj4gKDE2IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmZmZik7XG5cdCAgICAgICAgICAgICAgICB1dGYxNkNoYXJzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiB1dGYxNkNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIFVURi0xNiBMRSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjE2U3RyIFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5VdGYxNkxFLnBhcnNlKHV0ZjE2U3RyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjE2U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNlN0ckxlbmd0aCA9IHV0ZjE2U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDFdIHw9IHN3YXBFbmRpYW4odXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHN3YXBFbmRpYW4od29yZCkge1xuXHQgICAgICAgIHJldHVybiAoKHdvcmQgPDwgOCkgJiAweGZmMDBmZjAwKSB8ICgod29yZCA+Pj4gOCkgJiAweDAwZmYwMGZmKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5lbmMuVXRmMTY7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGExXCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuXHQgICAgICogd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL0VWUF9CeXRlc1RvS2V5Lmh0bWxcblx0ICAgICAqL1xuXHQgICAgdmFyIEV2cEtERiA9IENfYWxnby5FdnBLREYgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBNRDUsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIHZhciBibG9jaztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIudXBkYXRlKHBhc3N3b3JkKS5maW5hbGl6ZShzYWx0KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLmZpbmFsaXplKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gRXZwS0RGLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5FdnBLREY7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBDaXBoZXJQYXJhbXMgPSBDX2xpYi5DaXBoZXJQYXJhbXM7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBIZXggPSBDX2VuYy5IZXg7XG5cdCAgICB2YXIgQ19mb3JtYXQgPSBDLmZvcm1hdDtcblxuXHQgICAgdmFyIEhleEZvcm1hdHRlciA9IENfZm9ybWF0LkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGUgY2lwaGVydGV4dCBvZiBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfSBjaXBoZXJQYXJhbXMgVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5IZXguc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJQYXJhbXMuY2lwaGVydGV4dC50b1N0cmluZyhIZXgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBjaXBoZXJ0ZXh0IHN0cmluZyB0byBhIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnBhcnNlKGhleFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChpbnB1dCkge1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEhleC5wYXJzZShpbnB1dCk7XG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsgY2lwaGVydGV4dDogY2lwaGVydGV4dCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmZvcm1hdC5IZXg7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBITUFDIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhNQUMgPSBDX2FsZ28uSE1BQyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWNIYXNoZXIgPSBDcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKENyeXB0b0pTLmFsZ28uU0hBMjU2LCBrZXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoYXNoZXIsIGtleSkge1xuXHQgICAgICAgICAgICAvLyBJbml0IGhhc2hlclxuXHQgICAgICAgICAgICBoYXNoZXIgPSB0aGlzLl9oYXNoZXIgPSBuZXcgaGFzaGVyLmluaXQoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBVdGY4LnBhcnNlKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2hlckJsb2NrU2l6ZSA9IGhhc2hlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemVCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQWxsb3cgYXJiaXRyYXJ5IGxlbmd0aCBrZXlzXG5cdCAgICAgICAgICAgIGlmIChrZXkuc2lnQnl0ZXMgPiBoYXNoZXJCbG9ja1NpemVCeXRlcykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gaGFzaGVyLmZpbmFsaXplKGtleSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICBrZXkuY2xhbXAoKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBrZXkgZm9yIGlubmVyIGFuZCBvdXRlciBwYWRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5ID0gdGhpcy5fb0tleSA9IGtleS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB2YXIgaUtleSA9IHRoaXMuX2lLZXkgPSBrZXkuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIG9LZXlXb3JkcyA9IG9LZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpS2V5V29yZHMgPSBpS2V5LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFhPUiBrZXlzIHdpdGggcGFkIGNvbnN0YW50c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhc2hlckJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvS2V5V29yZHNbaV0gXj0gMHg1YzVjNWM1Yztcblx0ICAgICAgICAgICAgICAgIGlLZXlXb3Jkc1tpXSBePSAweDM2MzYzNjM2O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9LZXkuc2lnQnl0ZXMgPSBpS2V5LnNpZ0J5dGVzID0gaGFzaGVyQmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgSE1BQyB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7XG5cblx0ICAgICAgICAgICAgLy8gUmVzZXRcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIGhhc2hlci51cGRhdGUodGhpcy5faUtleSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVwZGF0ZXMgdGhpcyBITUFDIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hNQUN9IFRoaXMgSE1BQyBpbnN0YW5jZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaG1hY0hhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2hlci51cGRhdGUobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBGaW5hbGl6ZXMgdGhlIEhNQUMgY29tcHV0YXRpb24uXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSAoT3B0aW9uYWwpIEEgZmluYWwgbWVzc2FnZSB1cGRhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGZpbmFsaXplOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaW5uZXJIYXNoID0gaGFzaGVyLmZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpO1xuXHQgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgdmFyIGhtYWMgPSBoYXNoZXIuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChpbm5lckhhc2gpKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaG1hYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9saWItdHlwZWRhcnJheXNcIiksIHJlcXVpcmUoXCIuL2VuYy11dGYxNlwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NHVybFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9zaGExXCIpLCByZXF1aXJlKFwiLi9zaGEyNTZcIiksIHJlcXVpcmUoXCIuL3NoYTIyNFwiKSwgcmVxdWlyZShcIi4vc2hhNTEyXCIpLCByZXF1aXJlKFwiLi9zaGEzODRcIiksIHJlcXVpcmUoXCIuL3NoYTNcIiksIHJlcXVpcmUoXCIuL3JpcGVtZDE2MFwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSwgcmVxdWlyZShcIi4vcGJrZGYyXCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpLCByZXF1aXJlKFwiLi9tb2RlLWNmYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1jdHJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyLWdsYWRtYW5cIiksIHJlcXVpcmUoXCIuL21vZGUtb2ZiXCIpLCByZXF1aXJlKFwiLi9tb2RlLWVjYlwiKSwgcmVxdWlyZShcIi4vcGFkLWFuc2l4OTIzXCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvMTAxMjZcIiksIHJlcXVpcmUoXCIuL3BhZC1pc285Nzk3MVwiKSwgcmVxdWlyZShcIi4vcGFkLXplcm9wYWRkaW5nXCIpLCByZXF1aXJlKFwiLi9wYWQtbm9wYWRkaW5nXCIpLCByZXF1aXJlKFwiLi9mb3JtYXQtaGV4XCIpLCByZXF1aXJlKFwiLi9hZXNcIiksIHJlcXVpcmUoXCIuL3RyaXBsZWRlc1wiKSwgcmVxdWlyZShcIi4vcmM0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXRcIiksIHJlcXVpcmUoXCIuL3JhYmJpdC1sZWdhY3lcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL2xpYi10eXBlZGFycmF5c1wiLCBcIi4vZW5jLXV0ZjE2XCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9lbmMtYmFzZTY0dXJsXCIsIFwiLi9tZDVcIiwgXCIuL3NoYTFcIiwgXCIuL3NoYTI1NlwiLCBcIi4vc2hhMjI0XCIsIFwiLi9zaGE1MTJcIiwgXCIuL3NoYTM4NFwiLCBcIi4vc2hhM1wiLCBcIi4vcmlwZW1kMTYwXCIsIFwiLi9obWFjXCIsIFwiLi9wYmtkZjJcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIiwgXCIuL21vZGUtY2ZiXCIsIFwiLi9tb2RlLWN0clwiLCBcIi4vbW9kZS1jdHItZ2xhZG1hblwiLCBcIi4vbW9kZS1vZmJcIiwgXCIuL21vZGUtZWNiXCIsIFwiLi9wYWQtYW5zaXg5MjNcIiwgXCIuL3BhZC1pc28xMDEyNlwiLCBcIi4vcGFkLWlzbzk3OTcxXCIsIFwiLi9wYWQtemVyb3BhZGRpbmdcIiwgXCIuL3BhZC1ub3BhZGRpbmdcIiwgXCIuL2Zvcm1hdC1oZXhcIiwgXCIuL2Flc1wiLCBcIi4vdHJpcGxlZGVzXCIsIFwiLi9yYzRcIiwgXCIuL3JhYmJpdFwiLCBcIi4vcmFiYml0LWxlZ2FjeVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdHJvb3QuQ3J5cHRvSlMgPSBmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdHJldHVybiBDcnlwdG9KUztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIENoZWNrIGlmIHR5cGVkIGFycmF5cyBhcmUgc3VwcG9ydGVkXG5cdCAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblx0ICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDtcblxuXHQgICAgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cdCAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0ICAgICAgICAvLyBDb252ZXJ0IGJ1ZmZlcnMgdG8gdWludDhcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb252ZXJ0IG90aGVyIGFycmF5IHZpZXdzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5IHx8XG5cdCAgICAgICAgICAgICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheS5idWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5ieXRlTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBIYW5kbGUgVWludDhBcnJheVxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gRXh0cmFjdCBieXRlc1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZEFycmF5Qnl0ZUxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5jYWxsKHRoaXMsIHdvcmRzLCB0eXBlZEFycmF5Qnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIHN1YkluaXQucHJvdG90eXBlID0gV29yZEFycmF5O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmxpYi5Xb3JkQXJyYXk7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIFQgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSAoTWF0aC5hYnMoTWF0aC5zaW4oaSArIDEpKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNRDUgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NlxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8wICA9IE1bb2Zmc2V0ICsgMF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xICA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8yICA9IE1bb2Zmc2V0ICsgMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8zICA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF80ICA9IE1bb2Zmc2V0ICsgNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF81ICA9IE1bb2Zmc2V0ICsgNV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF82ICA9IE1bb2Zmc2V0ICsgNl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF83ICA9IE1bb2Zmc2V0ICsgN107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF84ICA9IE1bb2Zmc2V0ICsgOF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF85ICA9IE1bb2Zmc2V0ICsgOV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMCA9IE1bb2Zmc2V0ICsgMTBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTEgPSBNW29mZnNldCArIDExXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEyID0gTVtvZmZzZXQgKyAxMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMyA9IE1bb2Zmc2V0ICsgMTNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTQgPSBNW29mZnNldCArIDE0XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE1ID0gTVtvZmZzZXQgKyAxNV07XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWxiZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNywgIFRbMF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMSwgIDEyLCBUWzFdKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzIsICAxNywgVFsyXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8zLCAgMjIsIFRbM10pO1xuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfNCwgIDcsICBUWzRdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzUsICAxMiwgVFs1XSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF82LCAgMTcsIFRbNl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfNywgIDIyLCBUWzddKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzgsICA3LCAgVFs4XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF85LCAgMTIsIFRbOV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTAsIDE3LCBUWzEwXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xMSwgMjIsIFRbMTFdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA3LCAgVFsxMl0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTMsIDEyLCBUWzEzXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTcsIFRbMTRdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE1LCAyMiwgVFsxNV0pO1xuXG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNSwgIFRbMTZdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzYsICA5LCAgVFsxN10pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE0LCBUWzE4XSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8wLCAgMjAsIFRbMTldKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA1LCAgVFsyMF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTAsIDksICBUWzIxXSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTQsIFRbMjJdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzQsICAyMCwgVFsyM10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDUsICBUWzI0XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8xNCwgOSwgIFRbMjVdKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzMsICAxNCwgVFsyNl0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfOCwgIDIwLCBUWzI3XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNSwgIFRbMjhdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzIsICA5LCAgVFsyOV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE0LCBUWzMwXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8xMiwgMjAsIFRbMzFdKTtcblxuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfNSwgIDQsICBUWzMyXSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF84LCAgMTEsIFRbMzNdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNiwgVFszNF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTQsIDIzLCBUWzM1XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNCwgIFRbMzZdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzQsICAxMSwgVFszN10pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE2LCBUWzM4XSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8xMCwgMjMsIFRbMzldKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEzLCA0LCAgVFs0MF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMCwgIDExLCBUWzQxXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTYsIFRbNDJdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzYsICAyMywgVFs0M10pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDQsICBUWzQ0XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF8xMiwgMTEsIFRbNDVdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE1LCAxNiwgVFs0Nl0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMiwgIDIzLCBUWzQ3XSk7XG5cblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzAsICA2LCAgVFs0OF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfNywgIDEwLCBUWzQ5XSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTUsIFRbNTBdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzUsICAyMSwgVFs1MV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTIsIDYsICBUWzUyXSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8zLCAgMTAsIFRbNTNdKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNSwgVFs1NF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMSwgIDIxLCBUWzU1XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNiwgIFRbNTZdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzE1LCAxMCwgVFs1N10pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE1LCBUWzU4XSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF8xMywgMjEsIFRbNTldKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA2LCAgVFs2MF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTEsIDEwLCBUWzYxXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTUsIFRbNjJdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzksICAyMSwgVFs2M10pO1xuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsSCA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWxMID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCA4KSAgfCAobkJpdHNUb3RhbEggPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCAyNCkgfCAobkJpdHNUb3RhbEggPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDgpICB8IChuQml0c1RvdGFsTCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDI0KSB8IChuQml0c1RvdGFsTCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gRkYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGMpIHwgKH5iICYgZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gR0coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGQpIHwgKGMgJiB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSEgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChiIF4gYyBeIGQpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSUkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuTUQ1KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuTUQ1ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoTUQ1KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNNRDUobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjTUQ1ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKE1ENSk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLk1ENTtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIENpcGhlciBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENGQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIENGQi5FbmNyeXB0b3IgPSBDRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQuY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcik7XG5cblx0ICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX3ByZXZCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ0ZCLkRlY3J5cHRvciA9IENGQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICB2YXIgdGhpc0Jsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdC5jYWxsKHRoaXMsIHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKTtcblxuXHQgICAgICAgICAgICAvLyBUaGlzIGJsb2NrIGJlY29tZXMgdGhlIHByZXZpb3VzIGJsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX3ByZXZCbG9jayA9IHRoaXNCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0KHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKSB7XG5cdCAgICAgICAgdmFyIGtleXN0cmVhbTtcblxuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAga2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBrZXlzdHJlYW0gPSB0aGlzLl9wcmV2QmxvY2s7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiBDRkI7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5DRkI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKiBAcHJlc2VydmVcblx0ICogQ291bnRlciBibG9jayBtb2RlIGNvbXBhdGlibGUgd2l0aCAgRHIgQnJpYW4gR2xhZG1hbiBmaWxlZW5jLmNcblx0ICogZGVyaXZlZCBmcm9tIENyeXB0b0pTLm1vZGUuQ1RSXG5cdCAqIEphbiBIcnVieSBqaHJ1Ynkud2ViQGdtYWlsLmNvbVxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDVFJHbGFkbWFuID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHRcdGZ1bmN0aW9uIGluY1dvcmQod29yZClcblx0XHR7XG5cdFx0XHRpZiAoKCh3b3JkID4+IDI0KSAmIDB4ZmYpID09PSAweGZmKSB7IC8vb3ZlcmZsb3dcblx0XHRcdHZhciBiMSA9ICh3b3JkID4+IDE2KSYweGZmO1xuXHRcdFx0dmFyIGIyID0gKHdvcmQgPj4gOCkmMHhmZjtcblx0XHRcdHZhciBiMyA9IHdvcmQgJiAweGZmO1xuXG5cdFx0XHRpZiAoYjEgPT09IDB4ZmYpIC8vIG92ZXJmbG93IGIxXG5cdFx0XHR7XG5cdFx0XHRiMSA9IDA7XG5cdFx0XHRpZiAoYjIgPT09IDB4ZmYpXG5cdFx0XHR7XG5cdFx0XHRcdGIyID0gMDtcblx0XHRcdFx0aWYgKGIzID09PSAweGZmKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YjMgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdCsrYjM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0KytiMjtcblx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdCsrYjE7XG5cdFx0XHR9XG5cblx0XHRcdHdvcmQgPSAwO1xuXHRcdFx0d29yZCArPSAoYjEgPDwgMTYpO1xuXHRcdFx0d29yZCArPSAoYjIgPDwgOCk7XG5cdFx0XHR3b3JkICs9IGIzO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0d29yZCArPSAoMHgwMSA8PCAyNCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gd29yZDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpbmNDb3VudGVyKGNvdW50ZXIpXG5cdFx0e1xuXHRcdFx0aWYgKChjb3VudGVyWzBdID0gaW5jV29yZChjb3VudGVyWzBdKSkgPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGVuY3JfZGF0YSBpbiBmaWxlZW5jLmMgZnJvbSAgRHIgQnJpYW4gR2xhZG1hbidzIGNvdW50cyBvbmx5IHdpdGggRFdPUkQgaiA8IDhcblx0XHRcdFx0Y291bnRlclsxXSA9IGluY1dvcmQoY291bnRlclsxXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlcjtcblx0XHR9XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFJHbGFkbWFuLkVuY3J5cHRvciA9IENUUkdsYWRtYW4uZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cblx0XHRcdFx0aW5jQ291bnRlcihjb3VudGVyKTtcblxuXHRcdFx0XHR2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUkdsYWRtYW4uRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gQ1RSR2xhZG1hbjtcblx0fSgpKTtcblxuXG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ291bnRlciBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFIuRW5jcnlwdG9yID0gQ1RSLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fY291bnRlcjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEluY3JlbWVudCBjb3VudGVyXG5cdCAgICAgICAgICAgIGNvdW50ZXJbYmxvY2tTaXplIC0gMV0gPSAoY291bnRlcltibG9ja1NpemUgLSAxXSArIDEpIHwgMFxuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFI7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBFbGVjdHJvbmljIENvZGVib29rIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkVDQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgRUNCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgRUNCLkVuY3J5cHRvciA9IEVDQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgRUNCLkRlY3J5cHRvciA9IEVDQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgcmV0dXJuIEVDQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkVDQjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuT0ZCO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQU5TSSBYLjkyMyBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLkFuc2lYOTIzID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgdmFyIGRhdGFTaWdCeXRlcyA9IGRhdGEuc2lnQnl0ZXM7XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YVNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXM7XG5cblx0ICAgICAgICAvLyBDb21wdXRlIGxhc3QgYnl0ZSBwb3NpdGlvblxuXHQgICAgICAgIHZhciBsYXN0Qnl0ZVBvcyA9IGRhdGFTaWdCeXRlcyArIG5QYWRkaW5nQnl0ZXMgLSAxO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jbGFtcCgpO1xuXHQgICAgICAgIGRhdGEud29yZHNbbGFzdEJ5dGVQb3MgPj4+IDJdIHw9IG5QYWRkaW5nQnl0ZXMgPDwgKDI0IC0gKGxhc3RCeXRlUG9zICUgNCkgKiA4KTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIHBhZGRpbmdcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLkFuc2l4OTIzO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogSVNPIDEwMTI2IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuSXNvMTAxMjYgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKG5QYWRkaW5nQnl0ZXMgLSAxKSkuXG5cdCAgICAgICAgICAgICBjb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoW25QYWRkaW5nQnl0ZXMgPDwgMjRdLCAxKSk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIHBhZGRpbmdcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLklzbzEwMTI2O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogSVNPL0lFQyA5Nzk3LTEgUGFkZGluZyBNZXRob2QgMi5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc285Nzk3MSA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIEFkZCAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLmNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHg4MDAwMDAwMF0sIDEpKTtcblxuXHQgICAgICAgIC8vIFplcm8gcGFkIHRoZSByZXN0XG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnBhZChkYXRhLCBibG9ja1NpemUpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gUmVtb3ZlIHplcm8gcGFkZGluZ1xuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy51bnBhZChkYXRhKTtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBvbmUgbW9yZSBieXRlIC0tIHRoZSAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzLS07XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLklzbzk3OTcxO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQSBub29wIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuTm9QYWRkaW5nID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoKSB7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5Ob1BhZGRpbmc7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBaZXJvIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNsYW1wKCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBibG9ja1NpemVCeXRlcyAtICgoZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzKSB8fCBibG9ja1NpemVCeXRlcyk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgLy8gVW5wYWRcblx0ICAgICAgICB2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBkYXRhLnNpZ0J5dGVzIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgaWYgKCgoZGF0YVdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZikpIHtcblx0ICAgICAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBpICsgMTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGExXCIpLCByZXF1aXJlKFwiLi9obWFjXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3NoYTFcIiwgXCIuL2htYWNcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMTtcblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBQQktERjIgPSBDX2FsZ28uUEJLREYyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZS4gRGVmYXVsdDogU0hBMVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEExLFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBITUFDXG5cdCAgICAgICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGhtYWMudXBkYXRlKHNhbHQpLmZpbmFsaXplKGJsb2NrSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzID0gYmxvY2sud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSA9IGhtYWMuZmluYWxpemUoaW50ZXJtZWRpYXRlKTtcblx0ICAgICAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGVXb3JkcyA9IGludGVybWVkaWF0ZS53b3JkcztcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmxvY2tXb3Jkc0xlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrV29yZHNbal0gXj0gaW50ZXJtZWRpYXRlV29yZHNbal07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIFBCS0RGMi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUEJLREYyO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICpcblx0ICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cblx0ICAgICAqIFRoaXMgZXJyb3IgZG9lc24ndCBhZmZlY3QgdGhlIGNpcGhlcidzIHNlY3VyaXR5LFxuXHQgICAgICogYnV0IGl0IGRvZXMgYWZmZWN0IGl0cyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLlxuXHQgICAgICovXG5cdCAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSyA9IHRoaXMuX2tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5jZmcuaXY7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0TGVnYWN5O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXQgPSBDX2FsZ28uUmFiYml0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgS1tpXSA9ICgoKEtbaV0gPDwgOCkgIHwgKEtbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoS1tpXSA8PCAyNCkgfCAoS1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNCA9IENfYWxnby5SQzQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2lnQnl0ZXMgPSBrZXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBzYm94XG5cdCAgICAgICAgICAgIHZhciBTID0gdGhpcy5fUyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBTW2ldID0gaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEtleSBzZXR1cFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJ5dGVJbmRleCA9IGkgJSBrZXlTaWdCeXRlcztcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlID0gKGtleVdvcmRzW2tleUJ5dGVJbmRleCA+Pj4gMl0gPj4+ICgyNCAtIChrZXlCeXRlSW5kZXggJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIGogPSAoaiArIFNbaV0gKyBrZXlCeXRlKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgICAgICBTW2pdID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50ZXJzXG5cdCAgICAgICAgICAgIHRoaXMuX2kgPSB0aGlzLl9qID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSBePSBnZW5lcmF0ZUtleXN0cmVhbVdvcmQuY2FsbCh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBTID0gdGhpcy5fUztcblx0ICAgICAgICB2YXIgaSA9IHRoaXMuX2k7XG5cdCAgICAgICAgdmFyIGogPSB0aGlzLl9qO1xuXG5cdCAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtIHdvcmRcblx0ICAgICAgICB2YXIga2V5c3RyZWFtV29yZCA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCA0OyBuKyspIHtcblx0ICAgICAgICAgICAgaSA9IChpICsgMSkgJSAyNTY7XG5cdCAgICAgICAgICAgIGogPSAoaiArIFNbaV0pICUgMjU2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICBTW2ldID0gU1tqXTtcblx0ICAgICAgICAgICAgU1tqXSA9IHQ7XG5cblx0ICAgICAgICAgICAga2V5c3RyZWFtV29yZCB8PSBTWyhTW2ldICsgU1tqXSkgJSAyNTZdIDw8ICgyNCAtIG4gKiA4KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBVcGRhdGUgY291bnRlcnNcblx0ICAgICAgICB0aGlzLl9pID0gaTtcblx0ICAgICAgICB0aGlzLl9qID0gajtcblxuXHQgICAgICAgIHJldHVybiBrZXlzdHJlYW1Xb3JkO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJDNC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzQgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGlmaWVkIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNERyb3AgPSBDX2FsZ28uUkM0RHJvcCA9IFJDNC5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkcm9wIFRoZSBudW1iZXIgb2Yga2V5c3RyZWFtIHdvcmRzIHRvIGRyb3AuIERlZmF1bHQgMTkyXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBSQzQuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGRyb3A6IDE5MlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgUkM0Ll9kb1Jlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gRHJvcFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jZmcuZHJvcDsgaSA+IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzREcm9wLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUkM0RHJvcC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzREcm9wID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0RHJvcCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUkM0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdChjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cdFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuXHRUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cdCovXG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gQ29uc3RhbnRzIHRhYmxlXG5cdCAgICB2YXIgX3psID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcblx0ICAgICAgICA3LCAgNCwgMTMsICAxLCAxMCwgIDYsIDE1LCAgMywgMTIsICAwLCAgOSwgIDUsICAyLCAxNCwgMTEsICA4LFxuXHQgICAgICAgIDMsIDEwLCAxNCwgIDQsICA5LCAxNSwgIDgsICAxLCAgMiwgIDcsICAwLCAgNiwgMTMsIDExLCAgNSwgMTIsXG5cdCAgICAgICAgMSwgIDksIDExLCAxMCwgIDAsICA4LCAxMiwgIDQsIDEzLCAgMywgIDcsIDE1LCAxNCwgIDUsICA2LCAgMixcblx0ICAgICAgICA0LCAgMCwgIDUsICA5LCAgNywgMTIsICAyLCAxMCwgMTQsICAxLCAgMywgIDgsIDExLCAgNiwgMTUsIDEzXSk7XG5cdCAgICB2YXIgX3pyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgNSwgMTQsICA3LCAgMCwgIDksICAyLCAxMSwgIDQsIDEzLCAgNiwgMTUsICA4LCAgMSwgMTAsICAzLCAxMixcblx0ICAgICAgICA2LCAxMSwgIDMsICA3LCAgMCwgMTMsICA1LCAxMCwgMTQsIDE1LCAgOCwgMTIsICA0LCAgOSwgIDEsICAyLFxuXHQgICAgICAgIDE1LCAgNSwgIDEsICAzLCAgNywgMTQsICA2LCAgOSwgMTEsICA4LCAxMiwgIDIsIDEwLCAgMCwgIDQsIDEzLFxuXHQgICAgICAgIDgsICA2LCAgNCwgIDEsICAzLCAxMSwgMTUsICAwLCAgNSwgMTIsICAyLCAxMywgIDksICA3LCAxMCwgMTQsXG5cdCAgICAgICAgMTIsIDE1LCAxMCwgIDQsICAxLCAgNSwgIDgsICA3LCAgNiwgIDIsIDEzLCAxNCwgIDAsICAzLCAgOSwgMTFdKTtcblx0ICAgIHZhciBfc2wgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgMTEsIDE0LCAxNSwgMTIsICA1LCAgOCwgIDcsICA5LCAxMSwgMTMsIDE0LCAxNSwgIDYsICA3LCAgOSwgIDgsXG5cdCAgICAgICAgNywgNiwgICA4LCAxMywgMTEsICA5LCAgNywgMTUsICA3LCAxMiwgMTUsICA5LCAxMSwgIDcsIDEzLCAxMixcblx0ICAgICAgICAxMSwgMTMsICA2LCAgNywgMTQsICA5LCAxMywgMTUsIDE0LCAgOCwgMTMsICA2LCAgNSwgMTIsICA3LCAgNSxcblx0ICAgICAgICAgIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsICA5LCAgOCwgIDksIDE0LCAgNSwgIDYsICA4LCAgNiwgIDUsIDEyLFxuXHQgICAgICAgIDksIDE1LCAgNSwgMTEsICA2LCAgOCwgMTMsIDEyLCAgNSwgMTIsIDEzLCAxNCwgMTEsICA4LCAgNSwgIDYgXSk7XG5cdCAgICB2YXIgX3NyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgOCwgIDksICA5LCAxMSwgMTMsIDE1LCAxNSwgIDUsICA3LCAgNywgIDgsIDExLCAxNCwgMTQsIDEyLCAgNixcblx0ICAgICAgICA5LCAxMywgMTUsICA3LCAxMiwgIDgsICA5LCAxMSwgIDcsICA3LCAxMiwgIDcsICA2LCAxNSwgMTMsIDExLFxuXHQgICAgICAgIDksICA3LCAxNSwgMTEsICA4LCAgNiwgIDYsIDE0LCAxMiwgMTMsICA1LCAxNCwgMTMsIDEzLCAgNywgIDUsXG5cdCAgICAgICAgMTUsICA1LCAgOCwgMTEsIDE0LCAxNCwgIDYsIDE0LCAgNiwgIDksIDEyLCAgOSwgMTIsICA1LCAxNSwgIDgsXG5cdCAgICAgICAgOCwgIDUsIDEyLCAgOSwgMTIsICA1LCAxNCwgIDYsICA4LCAxMywgIDYsICA1LCAxNSwgMTMsIDExLCAxMSBdKTtcblxuXHQgICAgdmFyIF9obCA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHgwMDAwMDAwMCwgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSwgMHg4RjFCQkNEQywgMHhBOTUzRkQ0RV0pO1xuXHQgICAgdmFyIF9ociA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHg1MEEyOEJFNiwgMHg1QzRERDEyNCwgMHg2RDcwM0VGMywgMHg3QTZENzZFOSwgMHgwMDAwMDAwMF0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJJUEVNRDE2MCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJJUEVNRDE2MCA9IENfYWxnby5SSVBFTUQxNjAgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoICA9IFdvcmRBcnJheS5jcmVhdGUoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzYsIDB4QzNEMkUxRjBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG5cdCAgICAgICAgICAgICAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBNW29mZnNldF9pXSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDgpICB8IChNX29mZnNldF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgMjQpIHwgKE1fb2Zmc2V0X2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCAgPSB0aGlzLl9oYXNoLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBfaGwud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBociA9IF9oci53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpsID0gX3psLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgenIgPSBfenIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzbCA9IF9zbC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNyID0gX3NyLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhbCwgYmwsIGNsLCBkbCwgZWw7XG5cdCAgICAgICAgICAgIHZhciBhciwgYnIsIGNyLCBkciwgZXI7XG5cblx0ICAgICAgICAgICAgYXIgPSBhbCA9IEhbMF07XG5cdCAgICAgICAgICAgIGJyID0gYmwgPSBIWzFdO1xuXHQgICAgICAgICAgICBjciA9IGNsID0gSFsyXTtcblx0ICAgICAgICAgICAgZHIgPSBkbCA9IEhbM107XG5cdCAgICAgICAgICAgIGVyID0gZWwgPSBIWzRdO1xuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICB2YXIgdDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSArPSAxKSB7XG5cdCAgICAgICAgICAgICAgICB0ID0gKGFsICsgIE1bb2Zmc2V0K3psW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShibCxjbCxkbCkgKyBobFswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYyKGJsLGNsLGRsKSArIGhsWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYmwsY2wsZGwpICsgaGxbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChibCxjbCxkbCkgKyBobFszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShibCxjbCxkbCkgKyBobFs0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzbFtpXSk7XG5cdCAgICAgICAgICAgICAgICB0ID0gKHQrZWwpfDA7XG5cdCAgICAgICAgICAgICAgICBhbCA9IGVsO1xuXHQgICAgICAgICAgICAgICAgZWwgPSBkbDtcblx0ICAgICAgICAgICAgICAgIGRsID0gcm90bChjbCwgMTApO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJsID0gdDtcblxuXHQgICAgICAgICAgICAgICAgdCA9IChhciArIE1bb2Zmc2V0K3pyW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShicixjcixkcikgKyBoclswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY0KGJyLGNyLGRyKSArIGhyWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYnIsY3IsZHIpICsgaHJbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihicixjcixkcikgKyBoclszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShicixjcixkcikgKyBocls0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzcltpXSkgO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VyKXwwO1xuXHQgICAgICAgICAgICAgICAgYXIgPSBlcjtcblx0ICAgICAgICAgICAgICAgIGVyID0gZHI7XG5cdCAgICAgICAgICAgICAgICBkciA9IHJvdGwoY3IsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNyID0gYnI7XG5cdCAgICAgICAgICAgICAgICBiciA9IHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgdCAgICA9IChIWzFdICsgY2wgKyBkcil8MDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzJdICsgZGwgKyBlcil8MDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzNdICsgZWwgKyBhcil8MDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzRdICsgYWwgKyBicil8MDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzBdICsgYmwgKyBjcil8MDtcblx0ICAgICAgICAgICAgSFswXSA9ICB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbCA8PCA4KSAgfCAobkJpdHNUb3RhbCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgMjQpIHwgKG5CaXRzVG90YWwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2g7XG5cdCAgICAgICAgICAgIHZhciBIID0gaGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBIX2kgPSBIW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBIW2ldID0gKCgoSF9pIDw8IDgpICB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoSF9pIDw8IDI0KSB8IChIX2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cblx0ICAgIGZ1bmN0aW9uIGYxKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCh4KSBeICh5KSBeICh6KSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjIoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSYoeSkpIHwgKCh+eCkmKHopKSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYzKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgfCAofih5KSkpIF4gKHopKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjQoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSAmICh6KSkgfCAoKHkpJih+KHopKSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmNSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoKHkpIHwofih6KSkpKTtcblxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiByb3RsKHgsbikge1xuXHQgICAgICAgIHJldHVybiAoeDw8bikgfCAoeD4+PigzMi1uKSk7XG5cdCAgICB9XG5cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuUklQRU1EMTYwKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoUklQRU1EMTYwKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNSSVBFTUQxNjAobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFJJUEVNRDE2MCk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlJJUEVNRDE2MDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3Rcblx0ICAgIHZhciBXID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTEgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTEgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksXG5cdCAgICAgICAgICAgICAgICAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LFxuXHQgICAgICAgICAgICAgICAgMHhjM2QyZTFmMFxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gKG4gPDwgMSkgfCAobiA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgdCA9ICgoYSA8PCA1KSB8IChhID4+PiAyNykpICsgZSArIFdbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDIwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIDB4NWE4Mjc5OTk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA0MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgKyAweDZlZDllYmExO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpIC0gMHg3MGU0NDMyNDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAoaSA8IDgwKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSAtIDB4MzU5ZDNlMmE7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGUgPSBkO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gKGIgPDwgMzApIHwgKGIgPj4+IDIpO1xuXHQgICAgICAgICAgICAgICAgYiA9IGE7XG5cdCAgICAgICAgICAgICAgICBhID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzRdICsgZSkgfCAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE1XSA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTEpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTEobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEExKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEExO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTI1NlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGEyNTZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjI0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTI1NjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJob09mZnNldCA9IFJIT19PRkZTRVRTW2xhbmVJbmRleF07XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBSb3RhdGUgbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmhvT2Zmc2V0IDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTXN3IDw8IHJob09mZnNldCkgfCAobGFuZUxzdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRNc3cgPSAobGFuZUxzdyA8PCAocmhvT2Zmc2V0IC0gMzIpKSB8IChsYW5lTXN3ID4+PiAoNjQgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTXN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVMc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zcG9zZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUUGlMYW5lID0gVFtQSV9JTkRFWEVTW2xhbmVJbmRleF1dO1xuXHQgICAgICAgICAgICAgICAgICAgIFRQaUxhbmUuaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmhvIHBpIGF0IHggPSB5ID0gMFxuXHQgICAgICAgICAgICAgICAgdmFyIFQwID0gVFswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZTAgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIFQwLmhpZ2ggPSBzdGF0ZTAuaGlnaDtcblx0ICAgICAgICAgICAgICAgIFQwLmxvdyAgPSBzdGF0ZTAubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBDaGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lSW5kZXggPSB4ICsgNSAqIHk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRMYW5lID0gVFtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTGFuZSA9IFRbKCh4ICsgMSkgJSA1KSArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFR4MkxhbmUgPSBUWygoeCArIDIpICUgNSkgKyA1ICogeV07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHJvd3Ncblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5oaWdoID0gVExhbmUuaGlnaCBeICh+VHgxTGFuZS5oaWdoICYgVHgyTGFuZS5oaWdoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgID0gVExhbmUubG93ICBeICh+VHgxTGFuZS5sb3cgICYgVHgyTGFuZS5sb3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSW90YVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50ID0gUk9VTkRfQ09OU1RBTlRTW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSByb3VuZENvbnN0YW50LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gcm91bmRDb25zdGFudC5sb3c7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL3NoYTUxMlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBNTEyID0gQ19hbGdvLlNIQTUxMjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMzg0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMzg0ID0gQ19hbGdvLlNIQTM4NCA9IFNIQTUxMi5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KSwgbmV3IFg2NFdvcmQuaW5pdCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpLCBuZXcgWDY0V29yZC5pbml0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KVxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEE1MTIuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDE2O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhlbHBlcihTSEEzODQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTM4NChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMzg0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciBXaWg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgV2kgPSBXW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFeHRlbmQgbWVzc2FnZVxuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpLmxvdyAgPSBNW29mZnNldCArIGkgKiAyICsgMV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTBcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCAgPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhoID0gZ2FtbWEweC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4bCA9IGdhbW1hMHgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBoICA9ICgoZ2FtbWEweGggPj4+IDEpIHwgKGdhbW1hMHhsIDw8IDMxKSkgXiAoKGdhbW1hMHhoID4+PiA4KSB8IChnYW1tYTB4bCA8PCAyNCkpIF4gKGdhbW1hMHhoID4+PiA3KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwbCAgPSAoKGdhbW1hMHhsID4+PiAxKSB8IChnYW1tYTB4aCA8PCAzMSkpIF4gKChnYW1tYTB4bCA+Pj4gOCkgfCAoZ2FtbWEweGggPDwgMjQpKSBeICgoZ2FtbWEweGwgPj4+IDcpIHwgKGdhbW1hMHhoIDw8IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTFcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCAgPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhsID0gZ2FtbWExeC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWggID0gKChnYW1tYTF4aCA+Pj4gMTkpIHwgKGdhbW1hMXhsIDw8IDEzKSkgXiAoKGdhbW1hMXhoIDw8IDMpIHwgKGdhbW1hMXhsID4+PiAyOSkpIF4gKGdhbW1hMXhoID4+PiA2KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExbCAgPSAoKGdhbW1hMXhsID4+PiAxOSkgfCAoZ2FtbWExeGggPDwgMTMpKSBeICgoZ2FtbWExeGwgPDwgMykgfCAoZ2FtbWExeGggPj4+IDI5KSkgXiAoKGdhbW1hMXhsID4+PiA2KSB8IChnYW1tYTF4aCA8PCAyNikpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpNyAgPSBXW2kgLSA3XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3aCA9IFdpNy5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2ICA9IFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmggPSBXaTE2LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpaCArIGdhbW1hMWggKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgV2kxNmggKyAoKFdpbCA+Pj4gMCkgPCAoV2kxNmwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV2kuaGlnaCA9IFdpaDtcblx0ICAgICAgICAgICAgICAgICAgICBXaS5sb3cgID0gV2lsO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2hoICA9IChlaCAmIGZoKSBeICh+ZWggJiBnaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hsICA9IChlbCAmIGZsKSBeICh+ZWwgJiBnbCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqaCA9IChhaCAmIGJoKSBeIChhaCAmIGNoKSBeIChiaCAmIGNoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpsID0gKGFsICYgYmwpIF4gKGFsICYgY2wpIF4gKGJsICYgY2wpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwaCA9ICgoYWggPj4+IDI4KSB8IChhbCA8PCA0KSkgIF4gKChhaCA8PCAzMCkgIHwgKGFsID4+PiAyKSkgXiAoKGFoIDw8IDI1KSB8IChhbCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGwgPSAoKGFsID4+PiAyOCkgfCAoYWggPDwgNCkpICBeICgoYWwgPDwgMzApICB8IChhaCA+Pj4gMikpIF4gKChhbCA8PCAyNSkgfCAoYWggPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFoID0gKChlaCA+Pj4gMTQpIHwgKGVsIDw8IDE4KSkgXiAoKGVoID4+PiAxOCkgfCAoZWwgPDwgMTQpKSBeICgoZWggPDwgMjMpIHwgKGVsID4+PiA5KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExbCA9ICgoZWwgPj4+IDE0KSB8IChlaCA8PCAxOCkpIF4gKChlbCA+Pj4gMTgpIHwgKGVoIDw8IDE0KSkgXiAoKGVsIDw8IDIzKSB8IChlaCA+Pj4gOSkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG5cdCAgICAgICAgICAgICAgICB2YXIgS2kgID0gS1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWggPSBLaS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpbCA9IEtpLmxvdztcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IGhsICsgc2lnbWExbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSBoaCArIHNpZ21hMWggKyAoKHQxbCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIGNobDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgS2loICsgKCh0MWwgPj4+IDApIDwgKEtpbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIFdpaCArICgodDFsID4+PiAwKSA8IChXaWwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuXHQgICAgICAgICAgICAgICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyaCA9IHNpZ21hMGggKyBtYWpoICsgKCh0MmwgPj4+IDApIDwgKHNpZ21hMGwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgICAgIGhoID0gZ2g7XG5cdCAgICAgICAgICAgICAgICBobCA9IGdsO1xuXHQgICAgICAgICAgICAgICAgZ2ggPSBmaDtcblx0ICAgICAgICAgICAgICAgIGdsID0gZmw7XG5cdCAgICAgICAgICAgICAgICBmaCA9IGVoO1xuXHQgICAgICAgICAgICAgICAgZmwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gKGRsICsgdDFsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBlaCA9IChkaCArIHQxaCArICgoZWwgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZGggPSBjaDtcblx0ICAgICAgICAgICAgICAgIGRsID0gY2w7XG5cdCAgICAgICAgICAgICAgICBjaCA9IGJoO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJoID0gYWg7XG5cdCAgICAgICAgICAgICAgICBibCA9IGFsO1xuXHQgICAgICAgICAgICAgICAgYWwgPSAodDFsICsgdDJsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBhaCA9ICh0MWggKyB0MmggKyAoKGFsID4+PiAwKSA8ICh0MWwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIMGwgPSBIMC5sb3cgID0gKEgwbCArIGFsKTtcblx0ICAgICAgICAgICAgSDAuaGlnaCA9IChIMGggKyBhaCArICgoSDBsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMWwgPSBIMS5sb3cgID0gKEgxbCArIGJsKTtcblx0ICAgICAgICAgICAgSDEuaGlnaCA9IChIMWggKyBiaCArICgoSDFsID4+PiAwKSA8IChibCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMmwgPSBIMi5sb3cgID0gKEgybCArIGNsKTtcblx0ICAgICAgICAgICAgSDIuaGlnaCA9IChIMmggKyBjaCArICgoSDJsID4+PiAwKSA8IChjbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIM2wgPSBIMy5sb3cgID0gKEgzbCArIGRsKTtcblx0ICAgICAgICAgICAgSDMuaGlnaCA9IChIM2ggKyBkaCArICgoSDNsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINGwgPSBINC5sb3cgID0gKEg0bCArIGVsKTtcblx0ICAgICAgICAgICAgSDQuaGlnaCA9IChINGggKyBlaCArICgoSDRsID4+PiAwKSA8IChlbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINWwgPSBINS5sb3cgID0gKEg1bCArIGZsKTtcblx0ICAgICAgICAgICAgSDUuaGlnaCA9IChINWggKyBmaCArICgoSDVsID4+PiAwKSA8IChmbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINmwgPSBINi5sb3cgID0gKEg2bCArIGdsKTtcblx0ICAgICAgICAgICAgSDYuaGlnaCA9IChINmggKyBnaCArICgoSDZsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIN2wgPSBINy5sb3cgID0gKEg3bCArIGhsKTtcblx0ICAgICAgICAgICAgSDcuaGlnaCA9IChIN2ggKyBoaCArICgoSDdsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byAzMi1iaXQgd29yZCBhcnJheSBiZWZvcmUgcmV0dXJuaW5nXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaC50b1gzMigpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEwMjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEE1MTIpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTUxMihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBNTEyKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEE1MTI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDEgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMxID0gW1xuXHQgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksICAxLFxuXHQgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxuXHQgICAgICAgIDU5LCA1MSwgNDMsIDM1LCAyNywgMTksIDExLCAzLFxuXHQgICAgICAgIDYwLCA1MiwgNDQsIDM2LCA2MywgNTUsIDQ3LCAzOSxcblx0ICAgICAgICAzMSwgMjMsIDE1LCA3LCAgNjIsIDU0LCA0NiwgMzgsXG5cdCAgICAgICAgMzAsIDIyLCAxNCwgNiwgIDYxLCA1MywgNDUsIDM3LFxuXHQgICAgICAgIDI5LCAyMSwgMTMsIDUsICAyOCwgMjAsIDEyLCA0XG5cdCAgICBdO1xuXG5cdCAgICAvLyBQZXJtdXRlZCBDaG9pY2UgMiBjb25zdGFudHNcblx0ICAgIHZhciBQQzIgPSBbXG5cdCAgICAgICAgMTQsIDE3LCAxMSwgMjQsIDEsICA1LFxuXHQgICAgICAgIDMsICAyOCwgMTUsIDYsICAyMSwgMTAsXG5cdCAgICAgICAgMjMsIDE5LCAxMiwgNCwgIDI2LCA4LFxuXHQgICAgICAgIDE2LCA3LCAgMjcsIDIwLCAxMywgMixcblx0ICAgICAgICA0MSwgNTIsIDMxLCAzNywgNDcsIDU1LFxuXHQgICAgICAgIDMwLCA0MCwgNTEsIDQ1LCAzMywgNDgsXG5cdCAgICAgICAgNDQsIDQ5LCAzOSwgNTYsIDM0LCA1Myxcblx0ICAgICAgICA0NiwgNDIsIDUwLCAzNiwgMjksIDMyXG5cdCAgICBdO1xuXG5cdCAgICAvLyBDdW11bGF0aXZlIGJpdCBzaGlmdCBjb25zdGFudHNcblx0ICAgIHZhciBCSVRfU0hJRlRTID0gWzEsICAyLCAgNCwgIDYsICA4LCAgMTAsIDEyLCAxNCwgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI4XTtcblxuXHQgICAgLy8gU0JPWGVzIGFuZCByb3VuZCBwZXJtdXRhdGlvbiBjb25zdGFudHNcblx0ICAgIHZhciBTQk9YX1AgPSBbXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwMDA6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDMwMDAwMDAwOiAweDIsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDAwOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHg2MDAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4NzAwMDAwMDA6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDIwMixcblx0ICAgICAgICAgICAgMHg5MDAwMDAwMDogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDAwMDA6IDB4ODIwMCxcblx0ICAgICAgICAgICAgMHhiMDAwMDAwMDogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDA6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhkMDAwMDAwMDogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhmMDAwMDAwMDogMHg4MjAyLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHgzODAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDAwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDAwMDogMHgyMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwMDA6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAwOiAweDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweDk4MDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAwOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHhjODAwMDAwMDogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDA6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhlODAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDA6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDE6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMTogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwMDE6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDUwMDAwMDAxOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDE6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAxOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDE6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHhiMDAwMDAwMTogMHg4MjAyLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAxOiAweDIwMixcblx0ICAgICAgICAgICAgMHhkMDAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhmMDAwMDAwMTogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDE4MDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHgyODAwMDAwMTogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDE6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDAxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDE6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAxOiAweDIsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4ODAwMDAwMTogMHg4MDAyLFxuXHQgICAgICAgICAgICAweDk4MDAwMDAxOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHhhODAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwMDE6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweGM4MDAwMDAxOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwMTogMHgwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDAxOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDE6IDB4ODA4MDAyXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwMDogMHg4MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4NTAwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHg2MDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDcwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDogMHg4NDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweGQwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhlMDAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHgyODAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4NDgwMDAwMDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDk4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhhODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHhmODAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHgxMjAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHgxNDAwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHgxNTAwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHgxNzAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWIwMDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTA4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxNDgwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHgxNTgwMDAwMDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHgxNjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgxNzgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHgxOTgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHgxYjgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFkODAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWY4MDAwMDA6IDB4ODQwMDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDUwMDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDYwMDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDcwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDogMHgxMDEwMCxcblx0ICAgICAgICAgICAgMHhiMDAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHhjMDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHhkMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDI4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDU4MDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHg4ODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHg5ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHhjODAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwOiAweDQwMTAxMDQsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweDExMDAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDE2MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxNzAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweDE5MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4MWIwMDAwMDogMHgxMDEwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHgxZjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTA4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDExODAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDEyODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMzgwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHgxNTgwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDE4ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDFhODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDFjODAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFmODAwMDA6IDB4MTAxMDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDIwMDAwOiAweDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgzMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDUwMDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHg2MDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHg3MDAwMDogMHg0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweGEwMDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweGIwMDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweGQwMDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHhmMDAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE4MDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDI4MDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweDM4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHg2ODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDc4MDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweGU4MDAwOiAweDQwMTA0MCxcblx0ICAgICAgICAgICAgMHhmODAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDExMDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwOiAweDgwMDAwMDQwLFxuXHQgICAgICAgICAgICAweDEzMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNjAwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgxOTAwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDogMHg0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDEwODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxNDgwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDE1ODAwMDogMHg4MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjgwMDA6IDB4ODAwMDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDE4ODAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxOTgwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxYTgwMDA6IDB4ODAwMDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweDFjODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweDFkODAwMDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZTgwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwMDogMHg0MDEwNDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwLFxuXHQgICAgICAgICAgICAweDEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgyMDAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDMwMDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHg1MDAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NjAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHg3MDAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDgwMDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweGEwMDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4YjAwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHhjMDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweGQwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhlMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxODAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDI4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MzgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHg2ODAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODgwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHg5ODAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHhiODAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4YzgwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHhkODAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweGU4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhmODAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDEwMDAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDExMDAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDEyMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEzMDAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE0MDAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTUwMDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTcwMDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxOTAwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFiMDAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFjMDAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDFkMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFlMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxMTgwMDogMHgxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxNjgwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxNzgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxOTgwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxYTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFiODAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFjODAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MWQ4MDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWY4MDA6IDB4MjAwMDAwODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgzMDA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4NDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDUwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg3MDA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4OTAwOiAweDEwMDAyMDA4LFxuXHQgICAgICAgICAgICAweGEwMDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4YjAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4YzAwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGQwMDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4ZTAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ZjAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDgwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDE4MDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgyODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgzODA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4NTgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDY4MDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg3ODA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHg4ODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDk4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweGE4MDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhiODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4YzgwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZDgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweGU4MDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMjAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDEzMDA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHgxNDAwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNTAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTcwMDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTkwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFhMDA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxYjAwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDFjMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwOiAweDEwMDAyMDA4LFxuXHQgICAgICAgICAgICAweDFlMDA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTA4MDogMHg4LFxuXHQgICAgICAgICAgICAweDExODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDEyODA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDEzODA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTQ4MDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHgxNTgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTY4MDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxNzgwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDE4ODA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxYTgwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWI4MDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MWM4MDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWQ4MDogMHgwLFxuXHQgICAgICAgICAgICAweDFlODA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWY4MDogMHgxMDAwMjAwOFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDEwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDMwOiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg0MDogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDUwOiAweDAsXG5cdCAgICAgICAgICAgIDB4NjA6IDB4MSxcblx0ICAgICAgICAgICAgMHg3MDogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDgwOiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4OTA6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGEwOiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4YjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHhjMDogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweGQwOiAweDQwMSxcblx0ICAgICAgICAgICAgMHhlMDogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4ZjA6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgyODogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDM4OiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4NDg6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDU4OiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4Njg6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHg3ODogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ODg6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDk4OiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YTg6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODogMHgxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4Yzg6IDB4NDAwLFxuXHQgICAgICAgICAgICAweGQ4OiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4ZTg6IDB4MSxcblx0ICAgICAgICAgICAgMHhmODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTAwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTEwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjA6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgxMzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNDA6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweDE1MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDE2MDogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE3MDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTgwOiAweDQwMSxcblx0ICAgICAgICAgICAgMHgxOTA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxYTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDFiMDogMHgxLFxuXHQgICAgICAgICAgICAweDFjMDogMHgwLFxuXHQgICAgICAgICAgICAweDFkMDogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDFmMDogMHg0MDAsXG5cdCAgICAgICAgICAgIDB4MTA4OiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxMTg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgxMjg6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxMzg6IDB4MSxcblx0ICAgICAgICAgICAgMHgxNDg6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNTg6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDE2ODogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTc4OiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTg4OiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTk4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4MWI4OiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWM4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxZDg6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDFlODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDFmODogMHgxMDAwMDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MTogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgyOiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzogMHgyMCxcblx0ICAgICAgICAgICAgMHg0OiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDU6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHg2OiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4NzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDk6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHhhOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweGI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHhjOiAweDgyMCxcblx0ICAgICAgICAgICAgMHhkOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweGY6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDA6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAxOiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDI6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMzogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA0OiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDU6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDY6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDc6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDg6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGE6IDB4MjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGI6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwYzogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBkOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGU6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZjogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHgxMTogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDEyOiAweDIwLFxuXHQgICAgICAgICAgICAweDEzOiAweDgwMCxcblx0ICAgICAgICAgICAgMHgxNDogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweDE1OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4MTY6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHgxNzogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgxODogMHgwLFxuXHQgICAgICAgICAgICAweDE5OiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDFhOiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4MWI6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHgxYzogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDFkOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDFlOiAweDgyMCxcblx0ICAgICAgICAgICAgMHgxZjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDEwOiAweDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDExOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMjogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDEzOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE0OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE1OiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNzogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE4OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTk6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYTogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFiOiAweDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWM6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWQ6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFlOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFmOiAweDgwMjA4MDBcblx0ICAgICAgICB9XG5cdCAgICBdO1xuXG5cdCAgICAvLyBNYXNrcyB0aGF0IHNlbGVjdCB0aGUgU0JPWCBpbnB1dFxuXHQgICAgdmFyIFNCT1hfTUFTSyA9IFtcblx0ICAgICAgICAweGY4MDAwMDAxLCAweDFmODAwMDAwLCAweDAxZjgwMDAwLCAweDAwMWY4MDAwLFxuXHQgICAgICAgIDB4MDAwMWY4MDAsIDB4MDAwMDFmODAsIDB4MDAwMDAxZjgsIDB4ODAwMDAwMWZcblx0ICAgIF07XG5cblx0ICAgIC8qKlxuXHQgICAgICogREVTIGJsb2NrIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBERVMgPSBDX2FsZ28uREVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNlbGVjdCA1NiBiaXRzIGFjY29yZGluZyB0byBQQzFcblx0ICAgICAgICAgICAgdmFyIGtleUJpdHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qml0UG9zID0gUEMxW2ldIC0gMTtcblx0ICAgICAgICAgICAgICAgIGtleUJpdHNbaV0gPSAoa2V5V29yZHNba2V5Qml0UG9zID4+PiA1XSA+Pj4gKDMxIC0ga2V5Qml0UG9zICUgMzIpKSAmIDE7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBc3NlbWJsZSAxNiBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBzdWJLZXlzID0gdGhpcy5fc3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBuU3ViS2V5ID0gMDsgblN1YktleSA8IDE2OyBuU3ViS2V5KyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBzdWJrZXlcblx0ICAgICAgICAgICAgICAgIHZhciBzdWJLZXkgPSBzdWJLZXlzW25TdWJLZXldID0gW107XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0U2hpZnQgPSBCSVRfU0hJRlRTW25TdWJLZXldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTZWxlY3QgNDggYml0cyBhY2NvcmRpbmcgdG8gUEMyXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgbGVmdCAyOCBrZXkgYml0c1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVsoaSAvIDYpIHwgMF0gfD0ga2V5Qml0c1soKFBDMltpXSAtIDEpICsgYml0U2hpZnQpICUgMjhdIDw8ICgzMSAtIGkgJSA2KTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBmcm9tIHRoZSByaWdodCAyOCBrZXkgYml0c1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVs0ICsgKChpIC8gNikgfCAwKV0gfD0ga2V5Qml0c1syOCArICgoKFBDMltpICsgMjRdIC0gMSkgKyBiaXRTaGlmdCkgJSAyOCldIDw8ICgzMSAtIGkgJSA2KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gU2luY2UgZWFjaCBzdWJrZXkgaXMgYXBwbGllZCB0byBhbiBleHBhbmRlZCAzMi1iaXQgaW5wdXQsXG5cdCAgICAgICAgICAgICAgICAvLyB0aGUgc3Via2V5IGNhbiBiZSBicm9rZW4gaW50byA4IHZhbHVlcyBzY2FsZWQgdG8gMzItYml0cyxcblx0ICAgICAgICAgICAgICAgIC8vIHdoaWNoIGFsbG93cyB0aGUga2V5IHRvIGJlIHVzZWQgd2l0aG91dCBleHBhbnNpb25cblx0ICAgICAgICAgICAgICAgIHN1YktleVswXSA9IChzdWJLZXlbMF0gPDwgMSkgfCAoc3ViS2V5WzBdID4+PiAzMSk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVtpXSA9IHN1YktleVtpXSA+Pj4gKChpIC0gMSkgKiA0ICsgMyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbN10gPSAoc3ViS2V5WzddIDw8IDUpIHwgKHN1YktleVs3XSA+Pj4gMjcpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnZlcnNlIHN1YmtleXNcblx0ICAgICAgICAgICAgdmFyIGludlN1YktleXMgPSB0aGlzLl9pbnZTdWJLZXlzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaW52U3ViS2V5c1tpXSA9IHN1YktleXNbMTUgLSBpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fc3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZTdWJLZXlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvQ3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCwgc3ViS2V5cykge1xuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXRcblx0ICAgICAgICAgICAgdGhpcy5fbEJsb2NrID0gTVtvZmZzZXRdO1xuXHQgICAgICAgICAgICB0aGlzLl9yQmxvY2sgPSBNW29mZnNldCArIDFdO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblxuXHQgICAgICAgICAgICAvLyBSb3VuZHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgcm91bmQgPSAwOyByb3VuZCA8IDE2OyByb3VuZCsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBzdWJLZXkgPSBzdWJLZXlzW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIHZhciBsQmxvY2sgPSB0aGlzLl9sQmxvY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgckJsb2NrID0gdGhpcy5fckJsb2NrO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBGZWlzdGVsIGZ1bmN0aW9uXG5cdCAgICAgICAgICAgICAgICB2YXIgZiA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGYgfD0gU0JPWF9QW2ldWygockJsb2NrIF4gc3ViS2V5W2ldKSAmIFNCT1hfTUFTS1tpXSkgPj4+IDBdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fbEJsb2NrID0gckJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gbEJsb2NrIF4gZjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVuZG8gc3dhcCBmcm9tIGxhc3Qgcm91bmRcblx0ICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl9sQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gdDtcblxuXHQgICAgICAgICAgICAvLyBGaW5hbCBwZXJtdXRhdGlvblxuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMSwgIDB4NTU1NTU1NTUpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgOCwgIDB4MDBmZjAwZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgMiwgIDB4MzMzMzMzMzMpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMTYsIDB4MDAwMGZmZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgNCwgIDB4MGYwZjBmMGYpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBvdXRwdXRcblx0ICAgICAgICAgICAgTVtvZmZzZXRdID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gdGhpcy5fckJsb2NrO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBibG9ja1NpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLy8gU3dhcCBiaXRzIGFjcm9zcyB0aGUgbGVmdCBhbmQgcmlnaHQgd29yZHNcblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlTFIob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX2xCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX3JCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZXhjaGFuZ2VSTChvZmZzZXQsIG1hc2spIHtcblx0ICAgICAgICB2YXIgdCA9ICgodGhpcy5fckJsb2NrID4+PiBvZmZzZXQpIF4gdGhpcy5fbEJsb2NrKSAmIG1hc2s7XG5cdCAgICAgICAgdGhpcy5fbEJsb2NrIF49IHQ7XG5cdCAgICAgICAgdGhpcy5fckJsb2NrIF49IHQgPDwgb2Zmc2V0O1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkRFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLkRFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5ERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKERFUyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVHJpcGxlLURFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgVHJpcGxlREVTID0gQ19hbGdvLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBrZXkgbGVuZ3RoIGlzIHZhbGlkICg2NCwgMTI4IG9yID49IDE5MiBiaXQpXG5cdCAgICAgICAgICAgIGlmIChrZXlXb3Jkcy5sZW5ndGggIT09IDIgJiYga2V5V29yZHMubGVuZ3RoICE9PSA0ICYmIGtleVdvcmRzLmxlbmd0aCA8IDYpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgbGVuZ3RoIC0gM0RFUyByZXF1aXJlcyB0aGUga2V5IGxlbmd0aCB0byBiZSA2NCwgMTI4LCAxOTIgb3IgPjE5Mi4nKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUga2V5IGFjY29yZGluZyB0byB0aGUga2V5aW5nIG9wdGlvbnMgZGVmaW5lZCBpbiAzREVTIHN0YW5kYXJkXG5cdCAgICAgICAgICAgIHZhciBrZXkxID0ga2V5V29yZHMuc2xpY2UoMCwgMik7XG5cdCAgICAgICAgICAgIHZhciBrZXkyID0ga2V5V29yZHMubGVuZ3RoIDwgNCA/IGtleVdvcmRzLnNsaWNlKDAsIDIpIDoga2V5V29yZHMuc2xpY2UoMiwgNCk7XG5cdCAgICAgICAgICAgIHZhciBrZXkzID0ga2V5V29yZHMubGVuZ3RoIDwgNiA/IGtleVdvcmRzLnNsaWNlKDAsIDIpIDoga2V5V29yZHMuc2xpY2UoNCwgNik7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIERFUyBpbnN0YW5jZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMSA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkxKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MikpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTMpKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAxOTIvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoVHJpcGxlREVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5UcmlwbGVERVM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBYMzJXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogeDY0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIDY0LWJpdCB3b3JkLlxuXHQgICAgICovXG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDY0LWJpdCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGhpZ2ggVGhlIGhpZ2ggMzIgYml0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgMzIgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHg2NFdvcmQgPSBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGhpZ2gsIGxvdykge1xuXHQgICAgICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE5PVHMgdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIG5lZ2F0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbmVnYXRlZCA9IHg2NFdvcmQubm90KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gbm90OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gfnRoaXMuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IH50aGlzLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBBTkRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gQU5EIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIEFORGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFuZGVkID0geDY0V29yZC5hbmQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFuZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggJiB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyAmIHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIE9SIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3JlZCA9IHg2NFdvcmQub3IoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCB8IHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IHwgd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgWE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIFhPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBYT1JpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4b3JlZCA9IHg2NFdvcmQueG9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyB4b3I6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoIF4gd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgXiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoIDw8IG4pIHwgKHRoaXMubG93ID4+PiAoMzIgLSBuKSk7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgPDwgbjtcblx0ICAgICAgICAgICAgLy8gfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5sb3cgPDwgKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gc2hpZnRSOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyBpZiAobiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gKHRoaXMubG93ID4+PiBuKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggPj4+IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5oaWdoID4+PiAobiAtIDMyKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcm90YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHJvdGF0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcm90YXRlZCA9IHg2NFdvcmQucm90TCgyNSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRMKG4pLm9yKHRoaXMuc2hpZnRSKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRSKG4pLm9yKHRoaXMuc2hpZnRMKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBZGRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gYWRkIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIGFkZGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFkZGVkID0geDY0V29yZC5hZGQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFkZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyArIHdvcmQubG93KSB8IDA7XG5cdCAgICAgICAgICAgIC8vIHZhciBjYXJyeSA9IChsb3cgPj4+IDApIDwgKHRoaXMubG93ID4+PiAwKSA/IDEgOiAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggKyB3b3JkLmhpZ2ggKyBjYXJyeSkgfCAwO1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDY0LWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lnQnl0ZXMgKE9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoZSB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKCk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdKTtcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MTgxOTFhMWIsIDB4MWMxZDFlMWYpXG5cdCAgICAgICAgICogICAgIF0sIDEwKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAod29yZHMsIHNpZ0J5dGVzKSB7XG5cdCAgICAgICAgICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuXG5cdCAgICAgICAgICAgIGlmIChzaWdCeXRlcyAhPSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSB3b3Jkcy5sZW5ndGggKiA4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoaXMgNjQtYml0IHdvcmQgYXJyYXkgdG8gYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NyeXB0b0pTLmxpYi5Xb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheSdzIGRhdGEgYXMgYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHgzMldvcmRBcnJheSA9IHg2NFdvcmRBcnJheS50b1gzMigpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvWDMyOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHNMZW5ndGggPSB4NjRXb3Jkcy5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgeDMyV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4NjRXb3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeDY0V29yZCA9IHg2NFdvcmRzW2ldO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmxvdyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gWDMyV29yZEFycmF5LmNyZWF0ZSh4MzJXb3JkcywgdGhpcy5zaWdCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB4NjRXb3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgXCJ3b3Jkc1wiIGFycmF5XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBlYWNoIFg2NFdvcmQgb2JqZWN0XG5cdCAgICAgICAgICAgIHZhciB3b3Jkc0xlbmd0aCA9IHdvcmRzLmxlbmd0aDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpXSA9IHdvcmRzW2ldLmNsb25lKCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIubXVsdGlzZWxlY3R7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbXMtYmcsI2ZmZik7Ym9yZGVyOnZhcigtLW1zLWJvcmRlci13aWR0aCwxcHgpIHNvbGlkIHZhcigtLW1zLWJvcmRlci1jb2xvciwjZDFkNWRiKTtib3JkZXItcmFkaXVzOnZhcigtLW1zLXJhZGl1cyw0cHgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOnZhcigtLW1zLWZvbnQtc2l6ZSwxcmVtKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjAgYXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tbXMtYm9yZGVyLXdpZHRoLCAxcHgpKjIgKyB2YXIoLS1tcy1mb250LXNpemUsIDFyZW0pKnZhcigtLW1zLWxpbmUtaGVpZ2h0LCAxLjM3NSkgKyB2YXIoLS1tcy1weSwgLjVyZW0pKjIpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC5pcy1vcGVue2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtcmFkaXVzLDRweCkgdmFyKC0tbXMtcmFkaXVzLDRweCkgMCAwfS5tdWx0aXNlbGVjdC5pcy1vcGVuLXRvcHtib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1tcy1yYWRpdXMsNHB4KSB2YXIoLS1tcy1yYWRpdXMsNHB4KX0ubXVsdGlzZWxlY3QuaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1iZy1kaXNhYmxlZCwjZjNmNGY2KTtjdXJzb3I6ZGVmYXVsdH0ubXVsdGlzZWxlY3QuaXMtYWN0aXZle2JveC1zaGFkb3c6MCAwIDAgdmFyKC0tbXMtcmluZy13aWR0aCwzcHgpIHZhcigtLW1zLXJpbmctY29sb3IscmdiYSgxNiwxODUsMTI5LC4xODgpKX0ubXVsdGlzZWxlY3QtbXVsdGlwbGUtbGFiZWwsLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyLC5tdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTtsZWZ0OjA7bGluZS1oZWlnaHQ6dmFyKC0tbXMtbGluZS1oZWlnaHQsMS4zNzUpO21heC13aWR0aDoxMDAlO3BhZGRpbmctbGVmdDp2YXIoLS1tcy1weCwuODc1cmVtKTtwYWRkaW5nLXJpZ2h0OmNhbGMoMS4yNXJlbSArIHZhcigtLW1zLXB4LCAuODc1cmVtKSozKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1tcy1wbGFjZWhvbGRlci1jb2xvciwjOWNhM2FmKX0ubXVsdGlzZWxlY3Qtc2luZ2xlLWxhYmVsLXRleHR7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm11bHRpc2VsZWN0LXNlYXJjaHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZDp2YXIoLS1tcy1iZywjZmZmKTtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLW1zLXJhZGl1cyw0cHgpO2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoxMDAlO2xlZnQ6MDtvdXRsaW5lOm5vbmU7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXB4LC44NzVyZW0pO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC5tdWx0aXNlbGVjdC1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm11bHRpc2VsZWN0LXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm11bHRpc2VsZWN0LXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5tdWx0aXNlbGVjdC10YWdze2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7ZmxleC1zaHJpbms6MTtmbGV4LXdyYXA6d3JhcDttYXJnaW46dmFyKC0tbXMtdGFnLW15LC4yNXJlbSkgMCAwO3BhZGRpbmctbGVmdDp2YXIoLS1tcy1weSwuNXJlbSl9Lm11bHRpc2VsZWN0LXRhZ3thbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tcy10YWctYmcsIzEwYjk4MSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy10YWctcmFkaXVzLDRweCk7Y29sb3I6dmFyKC0tbXMtdGFnLWNvbG9yLCNmZmYpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6dmFyKC0tbXMtdGFnLWZvbnQtc2l6ZSwuODc1cmVtKTtmb250LXdlaWdodDp2YXIoLS1tcy10YWctZm9udC13ZWlnaHQsNjAwKTtsaW5lLWhlaWdodDp2YXIoLS1tcy10YWctbGluZS1oZWlnaHQsMS4yNXJlbSk7bWFyZ2luLWJvdHRvbTp2YXIoLS1tcy10YWctbXksLjI1cmVtKTttYXJnaW4tcmlnaHQ6dmFyKC0tbXMtdGFnLW14LC4yNXJlbSk7cGFkZGluZzp2YXIoLS1tcy10YWctcHksLjEyNXJlbSkgMCB2YXIoLS1tcy10YWctcHksLjEyNXJlbSkgdmFyKC0tbXMtdGFnLXB4LC41cmVtKTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm11bHRpc2VsZWN0LXRhZy5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLXRhZy1iZy1kaXNhYmxlZCwjOWNhM2FmKTtjb2xvcjp2YXIoLS1tcy10YWctY29sb3ItZGlzYWJsZWQsI2ZmZik7cGFkZGluZy1yaWdodDp2YXIoLS1tcy10YWctcHgsLjVyZW0pfS5tdWx0aXNlbGVjdC10YWctcmVtb3Zle2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOnZhcigtLW1zLXRhZy1yZW1vdmUtcmFkaXVzLDRweCk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOnZhcigtLW1zLXRhZy1yZW1vdmUtbXksMCkgdmFyKC0tbXMtdGFnLXJlbW92ZS1teCwuMTI1cmVtKTtwYWRkaW5nOnZhcigtLW1zLXRhZy1yZW1vdmUtcHksLjI1cmVtKSB2YXIoLS1tcy10YWctcmVtb3ZlLXB4LC4yNXJlbSl9Lm11bHRpc2VsZWN0LXRhZy1yZW1vdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNjMpfS5tdWx0aXNlbGVjdC10YWctcmVtb3ZlLWljb257YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi43NXJlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47b3BhY2l0eTouODt3aWR0aDouNzVyZW19Lm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7ZmxleC1zaHJpbms6MTtoZWlnaHQ6MTAwJTttYXJnaW46MCB2YXIoLS1tcy10YWctbXgsNHB4KSB2YXIoLS1tcy10YWctbXksNHB4KTtwb3NpdGlvbjpyZWxhdGl2ZX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2gtY29weXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MXB4O3Zpc2liaWxpdHk6aGlkZGVuO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtib3JkZXI6MDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsZWZ0OjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwubXVsdGlzZWxlY3QtdGFncy1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLC5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5tdWx0aXNlbGVjdC1pbmlmaXRle2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tbXMtYm9yZGVyLXdpZHRoLCAxcHgpKjIgKyB2YXIoLS1tcy1mb250LXNpemUsIDFyZW0pKnZhcigtLW1zLWxpbmUtaGVpZ2h0LCAxLjM3NSkgKyB2YXIoLS1tcy1weSwgLjVyZW0pKjIpO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LWluaWZpdGUtc3Bpbm5lciwubXVsdGlzZWxlY3Qtc3Bpbm5lcnstd2Via2l0LWFuaW1hdGlvbjptdWx0aXNlbGVjdC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246bXVsdGlzZWxlY3Qtc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tcy1zcGlubmVyLWNvbG9yLCMxMGI5ODEpO2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OjFyZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J200NTYuNDMzIDM3MS43Mi0yNy43OS0xNi4wNDVjLTcuMTkyLTQuMTUyLTEwLjA1Mi0xMy4xMzYtNi40ODctMjAuNjM2IDI1LjgyLTU0LjMyOCAyMy41NjYtMTE4LjYwMi02Ljc2OC0xNzEuMDMtMzAuMjY1LTUyLjUyOS04NC44MDItODYuNjIxLTE0NC43Ni05MS40MjRDMjYyLjM1IDcxLjkyMiAyNTYgNjQuOTUzIDI1NiA1Ni42NDlWMjQuNTZjMC05LjMxIDcuOTE2LTE2LjYwOSAxNy4yMDQtMTUuOTYgODEuNzk1IDUuNzE3IDE1Ni40MTIgNTEuOTAyIDE5Ny42MTEgMTIzLjQwOCA0MS4zMDEgNzEuMzg1IDQzLjk5IDE1OS4wOTYgOC4wNDIgMjMyLjc5Mi00LjA4MiA4LjM2OS0xNC4zNjEgMTEuNTc1LTIyLjQyNCA2LjkyeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDUxMiA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTQ1Ni40MzMgMzcxLjcyLTI3Ljc5LTE2LjA0NWMtNy4xOTItNC4xNTItMTAuMDUyLTEzLjEzNi02LjQ4Ny0yMC42MzYgMjUuODItNTQuMzI4IDIzLjU2Ni0xMTguNjAyLTYuNzY4LTE3MS4wMy0zMC4yNjUtNTIuNTI5LTg0LjgwMi04Ni42MjEtMTQ0Ljc2LTkxLjQyNEMyNjIuMzUgNzEuOTIyIDI1NiA2NC45NTMgMjU2IDU2LjY0OVYyNC41NmMwLTkuMzEgNy45MTYtMTYuNjA5IDE3LjIwNC0xNS45NiA4MS43OTUgNS43MTcgMTU2LjQxMiA1MS45MDIgMTk3LjYxMSAxMjMuNDA4IDQxLjMwMSA3MS4zODUgNDMuOTkgMTU5LjA5NiA4LjA0MiAyMzIuNzkyLTQuMDgyIDguMzY5LTE0LjM2MSAxMS41NzUtMjIuNDI0IDYuOTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxcmVtO3otaW5kZXg6MTB9Lm11bHRpc2VsZWN0LXNwaW5uZXJ7bWFyZ2luOjAgdmFyKC0tbXMtcHgsLjg3NXJlbSkgMCAwfS5tdWx0aXNlbGVjdC1jbGVhcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtvcGFjaXR5OjE7cGFkZGluZzowIHZhcigtLW1zLXB4LC44NzVyZW0pIDAgMDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOi4zczt6LWluZGV4OjEwfS5tdWx0aXNlbGVjdC1jbGVhcjpob3ZlciAubXVsdGlzZWxlY3QtY2xlYXItaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLWNsZWFyLWNvbG9yLWhvdmVyLCMwMDApfS5tdWx0aXNlbGVjdC1jbGVhci1pY29ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXMtY2xlYXItY29sb3IsIzk5OSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J20yMDcuNiAyNTYgMTA3LjcyLTEwNy43MmM2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4bC0yNS4wMy0yNS4wM2MtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEwxNjAgMjA4LjQgNTIuMjggMTAwLjY4Yy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDQuNjggMTI1LjdjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThMMTEyLjQgMjU2IDQuNjggMzYzLjcyYy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4bDI1LjAzIDI1LjAzYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBMMTYwIDMwMy42bDEwNy43MiAxMDcuNzJjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMGwyNS4wMy0yNS4wM2M2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4TDIwNy42IDI1NnonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J20yMDcuNiAyNTYgMTA3LjcyLTEwNy43MmM2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4bC0yNS4wMy0yNS4wM2MtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEwxNjAgMjA4LjQgNTIuMjggMTAwLjY4Yy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDQuNjggMTI1LjdjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThMMTEyLjQgMjU2IDQuNjggMzYzLjcyYy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4bDI1LjAzIDI1LjAzYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBMMTYwIDMwMy42bDEwNy43MiAxMDcuNzJjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMGwyNS4wMy0yNS4wM2M2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4TDIwNy42IDI1NnonLyUzRSUzQy9zdmclM0VcXFwiKTt0cmFuc2l0aW9uOi4zc30ubXVsdGlzZWxlY3QtY2FyZXQsLm11bHRpc2VsZWN0LWNsZWFyLWljb257aGVpZ2h0OjEuMTI1cmVtOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6LjYyNXJlbX0ubXVsdGlzZWxlY3QtY2FyZXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tcy1jYXJldC1jb2xvciwjOTk5KTtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO21hcmdpbjowIHZhcigtLW1zLXB4LC44NzVyZW0pIDAgMDstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTMxLjMgMTkyaDI1Ny4zYzE3LjggMCAyNi43IDIxLjUgMTQuMSAzNC4xTDE3NC4xIDM1NC44Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMEwxNy4yIDIyNi4xQzQuNiAyMTMuNSAxMy41IDE5MiAzMS4zIDE5MnonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zczt6LWluZGV4OjEwfS5tdWx0aXNlbGVjdC1jYXJldC5pcy1vcGVue3BvaW50ZXItZXZlbnRzOmF1dG87dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5tdWx0aXNlbGVjdC1kcm9wZG93bnstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtiYWNrZ3JvdW5kOnZhcigtLW1zLWRyb3Bkb3duLWJnLCNmZmYpO2JvcmRlcjp2YXIoLS1tcy1kcm9wZG93bi1ib3JkZXItd2lkdGgsMXB4KSBzb2xpZCB2YXIoLS1tcy1kcm9wZG93bi1ib3JkZXItY29sb3IsI2QxZDVkYik7Ym9yZGVyLXJhZGl1czowIDAgdmFyKC0tbXMtZHJvcGRvd24tcmFkaXVzLDRweCkgdmFyKC0tbXMtZHJvcGRvd24tcmFkaXVzLDRweCk7Ym90dG9tOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsZWZ0OmNhbGModmFyKC0tbXMtYm9yZGVyLXdpZHRoLCAxcHgpKi0xKTttYXJnaW4tdG9wOmNhbGModmFyKC0tbXMtYm9yZGVyLXdpZHRoLCAxcHgpKi0xKTttYXgtaGVpZ2h0OjE1cmVtO21heC1oZWlnaHQ6dmFyKC0tbXMtbWF4LWhlaWdodCwxMHJlbSk7b3V0bGluZTpub25lO292ZXJmbG93LXk6c2Nyb2xsO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OmNhbGModmFyKC0tbXMtYm9yZGVyLXdpZHRoLCAxcHgpKi0xKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKTt6LWluZGV4OjEwMH0ubXVsdGlzZWxlY3QtZHJvcGRvd24uaXMtdG9we2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtZHJvcGRvd24tcmFkaXVzLDRweCkgdmFyKC0tbXMtZHJvcGRvd24tcmFkaXVzLDRweCkgMCAwO2JvdHRvbTphdXRvO3RvcDp2YXIoLS1tcy1ib3JkZXItd2lkdGgsMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9Lm11bHRpc2VsZWN0LWRyb3Bkb3duLmlzLWhpZGRlbntkaXNwbGF5Om5vbmV9Lm11bHRpc2VsZWN0LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfS5tdWx0aXNlbGVjdC1ncm91cHttYXJnaW46MDtwYWRkaW5nOjB9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVse2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLCNlNWU3ZWIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvciwjMzc0MTUxKTtjdXJzb3I6ZGVmYXVsdDtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07Zm9udC13ZWlnaHQ6NjAwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xpbmUtaGVpZ2h0OnZhcigtLW1zLWdyb3VwLWxhYmVsLWxpbmUtaGVpZ2h0LDEuMzc1KTtwYWRkaW5nOnZhcigtLW1zLWdyb3VwLWxhYmVsLXB5LC4zcmVtKSB2YXIoLS1tcy1ncm91cC1sYWJlbC1weCwuNzVyZW0pO3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtcG9pbnRhYmxle2N1cnNvcjpwb2ludGVyfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctcG9pbnRlZCwjZDFkNWRiKTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1wb2ludGVkLCMzNzQxNTEpfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1zZWxlY3RlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLXNlbGVjdGVkLCMwNTk2NjkpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXNlbGVjdGVkLCNmZmYpfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLWRpc2FibGVkLCNmM2Y0ZjYpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLWRpc2FibGVkLCNkMWQ1ZGIpO2N1cnNvcjpub3QtYWxsb3dlZH0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtc2VsZWN0ZWQuaXMtcG9pbnRlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLXNlbGVjdGVkLXBvaW50ZWQsIzBjOWU3MCk7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3Itc2VsZWN0ZWQtcG9pbnRlZCwjZmZmKX0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtc2VsZWN0ZWQuaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1zZWxlY3RlZC1kaXNhYmxlZCwjNzVjZmIxKTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1zZWxlY3RlZC1kaXNhYmxlZCwjZDFmYWU1KX0ubXVsdGlzZWxlY3QtZ3JvdXAtb3B0aW9uc3ttYXJnaW46MDtwYWRkaW5nOjB9Lm11bHRpc2VsZWN0LW9wdGlvbnthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6dmFyKC0tbXMtb3B0aW9uLWZvbnQtc2l6ZSwxcmVtKTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtsaW5lLWhlaWdodDp2YXIoLS1tcy1vcHRpb24tbGluZS1oZWlnaHQsMS4zNzUpO3BhZGRpbmc6dmFyKC0tbXMtb3B0aW9uLXB5LC41cmVtKSB2YXIoLS1tcy1vcHRpb24tcHgsLjc1cmVtKTt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXBvaW50ZWQsI2YzZjRmNik7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLXBvaW50ZWQsIzFmMjkzNyl9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1zZWxlY3RlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1zZWxlY3RlZCwjMTBiOTgxKTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3Itc2VsZWN0ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1kaXNhYmxlZCwjZmZmKTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3ItZGlzYWJsZWQsI2QxZDVkYik7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQuaXMtcG9pbnRlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1zZWxlY3RlZC1wb2ludGVkLCMyNmMwOGUpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1zZWxlY3RlZC1wb2ludGVkLCNmZmYpfS5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWQuaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctc2VsZWN0ZWQtZGlzYWJsZWQsIzg3ZGNjMCk7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLXNlbGVjdGVkLWRpc2FibGVkLCNkMWZhZTUpfS5tdWx0aXNlbGVjdC1uby1vcHRpb25zLC5tdWx0aXNlbGVjdC1uby1yZXN1bHRze2NvbG9yOnZhcigtLW1zLWVtcHR5LWNvbG9yLCM0YjU1NjMpO3BhZGRpbmc6dmFyKC0tbXMtb3B0aW9uLXB5LC41cmVtKSB2YXIoLS1tcy1vcHRpb24tcHgsLjc1cmVtKX0ubXVsdGlzZWxlY3QtZmFrZS1pbnB1dHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2JvdHRvbTotMXB4O2ZvbnQtc2l6ZTowO2hlaWdodDoxcHg7bGVmdDowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC1mYWtlLWlucHV0OmFjdGl2ZSwubXVsdGlzZWxlY3QtZmFrZS1pbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm11bHRpc2VsZWN0LXNwYWNlcntkaXNwbGF5Om5vbmV9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1tdWx0aXBsZS1sYWJlbCxbZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyLFtkaXI9cnRsXSAubXVsdGlzZWxlY3Qtc2luZ2xlLWxhYmVse2xlZnQ6YXV0bztwYWRkaW5nLWxlZnQ6Y2FsYygxLjI1cmVtICsgdmFyKC0tbXMtcHgsIC44NzVyZW0pKjMpO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtcHgsLjg3NXJlbSk7cmlnaHQ6MH1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXNlYXJjaHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OnZhcigtLW1zLXB4LC44NzVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtdGFnc3twYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OnZhcigtLW1zLXB5LC41cmVtKX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXRhZ3ttYXJnaW4tbGVmdDp2YXIoLS1tcy10YWctbXgsLjI1cmVtKTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOnZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSB2YXIoLS1tcy10YWctcHgsLjVyZW0pIHZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSAwfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtdGFnLmlzLWRpc2FibGVke3BhZGRpbmctbGVmdDp2YXIoLS1tcy10YWctcHgsLjVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtY2FyZXQsW2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1zcGlubmVye21hcmdpbjowIDAgMCB2YXIoLS1tcy1weCwuODc1cmVtKX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LWNsZWFye3BhZGRpbmc6MCAwIDAgdmFyKC0tbXMtcHgsLjg3NXJlbSl9QC13ZWJraXQta2V5ZnJhbWVzIG11bHRpc2VsZWN0LXNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19QGtleWZyYW1lcyBtdWx0aXNlbGVjdC1zcGluezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9AdnVlZm9ybS9t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QixjQUFjLENBQUMsa0NBQWtDLENBQUMsNEJBQTRCLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQywyQkFBMkIsbUNBQW1DLENBQUMsY0FBYyxDQUFDLGtGQUFrRixDQUFDLHVDQUF1QyxtQ0FBbUMsQ0FBQyw0REFBNEQsaUNBQWlDLENBQUMsNkJBQTZCLGtDQUFrQyxDQUFDLG9DQUFvQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyw0QkFBNEIsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5tdWx0aXNlbGVjdHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tcy1iZywjZmZmKTtib3JkZXI6dmFyKC0tbXMtYm9yZGVyLXdpZHRoLDFweCkgc29saWQgdmFyKC0tbXMtYm9yZGVyLWNvbG9yLCNkMWQ1ZGIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtcmFkaXVzLDRweCk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6dmFyKC0tbXMtZm9udC1zaXplLDFyZW0pO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MCBhdXRvO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqMiArIHZhcigtLW1zLWZvbnQtc2l6ZSwgMXJlbSkqdmFyKC0tbXMtbGluZS1oZWlnaHQsIDEuMzc1KSArIHZhcigtLW1zLXB5LCAuNXJlbSkqMik7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LmlzLW9wZW57Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1yYWRpdXMsNHB4KSB2YXIoLS1tcy1yYWRpdXMsNHB4KSAwIDB9Lm11bHRpc2VsZWN0LmlzLW9wZW4tdG9we2JvcmRlci1yYWRpdXM6MCAwIHZhcigtLW1zLXJhZGl1cyw0cHgpIHZhcigtLW1zLXJhZGl1cyw0cHgpfS5tdWx0aXNlbGVjdC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWJnLWRpc2FibGVkLCNmM2Y0ZjYpO2N1cnNvcjpkZWZhdWx0fS5tdWx0aXNlbGVjdC5pcy1hY3RpdmV7Ym94LXNoYWRvdzowIDAgMCB2YXIoLS1tcy1yaW5nLXdpZHRoLDNweCkgdmFyKC0tbXMtcmluZy1jb2xvcixyZ2JhKDE2LDE4NSwxMjksLjE4OCkpfS5tdWx0aXNlbGVjdC1tdWx0aXBsZS1sYWJlbCwubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXIsLm11bHRpc2VsZWN0LXNpbmdsZS1sYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2xlZnQ6MDtsaW5lLWhlaWdodDp2YXIoLS1tcy1saW5lLWhlaWdodCwxLjM3NSk7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXB4LC44NzVyZW0pO3BhZGRpbmctcmlnaHQ6Y2FsYygxLjI1cmVtICsgdmFyKC0tbXMtcHgsIC44NzVyZW0pKjMpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9Lm11bHRpc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLW1zLXBsYWNlaG9sZGVyLWNvbG9yLCM5Y2EzYWYpfS5tdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWwtdGV4dHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubXVsdGlzZWxlY3Qtc2VhcmNoey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLW1zLWJnLCNmZmYpO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtcmFkaXVzLDRweCk7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwYWRkaW5nLWxlZnQ6dmFyKC0tbXMtcHgsLjg3NXJlbSk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm11bHRpc2VsZWN0LXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm11bHRpc2VsZWN0LXRhZ3N7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtmbGV4LXNocmluazoxO2ZsZXgtd3JhcDp3cmFwO21hcmdpbjp2YXIoLS1tcy10YWctbXksLjI1cmVtKSAwIDA7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXB5LC41cmVtKX0ubXVsdGlzZWxlY3QtdGFne2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1zLXRhZy1iZywjMTBiOTgxKTtib3JkZXItcmFkaXVzOnZhcigtLW1zLXRhZy1yYWRpdXMsNHB4KTtjb2xvcjp2YXIoLS1tcy10YWctY29sb3IsI2ZmZik7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTp2YXIoLS1tcy10YWctZm9udC1zaXplLC44NzVyZW0pO2ZvbnQtd2VpZ2h0OnZhcigtLW1zLXRhZy1mb250LXdlaWdodCw2MDApO2xpbmUtaGVpZ2h0OnZhcigtLW1zLXRhZy1saW5lLWhlaWdodCwxLjI1cmVtKTttYXJnaW4tYm90dG9tOnZhcigtLW1zLXRhZy1teSwuMjVyZW0pO21hcmdpbi1yaWdodDp2YXIoLS1tcy10YWctbXgsLjI1cmVtKTtwYWRkaW5nOnZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSAwIHZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSB2YXIoLS1tcy10YWctcHgsLjVyZW0pO3doaXRlLXNwYWNlOm5vd3JhcH0ubXVsdGlzZWxlY3QtdGFnLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtdGFnLWJnLWRpc2FibGVkLCM5Y2EzYWYpO2NvbG9yOnZhcigtLW1zLXRhZy1jb2xvci1kaXNhYmxlZCwjZmZmKTtwYWRkaW5nLXJpZ2h0OnZhcigtLW1zLXRhZy1weCwuNXJlbSl9Lm11bHRpc2VsZWN0LXRhZy1yZW1vdmV7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtdGFnLXJlbW92ZS1yYWRpdXMsNHB4KTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46dmFyKC0tbXMtdGFnLXJlbW92ZS1teSwwKSB2YXIoLS1tcy10YWctcmVtb3ZlLW14LC4xMjVyZW0pO3BhZGRpbmc6dmFyKC0tbXMtdGFnLXJlbW92ZS1weSwuMjVyZW0pIHZhcigtLW1zLXRhZy1yZW1vdmUtcHgsLjI1cmVtKX0ubXVsdGlzZWxlY3QtdGFnLXJlbW92ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2Myl9Lm11bHRpc2VsZWN0LXRhZy1yZW1vdmUtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6Ljc1cmVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjtvcGFjaXR5Oi44O3dpZHRoOi43NXJlbX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2gtd3JhcHBlcntkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTtmbGV4LXNocmluazoxO2hlaWdodDoxMDAlO21hcmdpbjowIHZhcigtLW1zLXRhZy1teCw0cHgpIHZhcigtLW1zLXRhZy1teSw0cHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaC1jb3B5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxcHg7dmlzaWJpbGl0eTpoaWRkZW47d2hpdGUtc3BhY2U6cHJlLXdyYXA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2h7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JvcmRlcjowO2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2xlZnQ6MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm11bHRpc2VsZWN0LWluaWZpdGV7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqMiArIHZhcigtLW1zLWZvbnQtc2l6ZSwgMXJlbSkqdmFyKC0tbXMtbGluZS1oZWlnaHQsIDEuMzc1KSArIHZhcigtLW1zLXB5LCAuNXJlbSkqMik7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtaW5pZml0ZS1zcGlubmVyLC5tdWx0aXNlbGVjdC1zcGlubmVyey13ZWJraXQtYW5pbWF0aW9uOm11bHRpc2VsZWN0LXNwaW4gMXMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjptdWx0aXNlbGVjdC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLXNwaW5uZXItY29sb3IsIzEwYjk4MSk7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtoZWlnaHQ6MXJlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDUxMiA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTQ1Ni40MzMgMzcxLjcyLTI3Ljc5LTE2LjA0NWMtNy4xOTItNC4xNTItMTAuMDUyLTEzLjEzNi02LjQ4Ny0yMC42MzYgMjUuODItNTQuMzI4IDIzLjU2Ni0xMTguNjAyLTYuNzY4LTE3MS4wMy0zMC4yNjUtNTIuNTI5LTg0LjgwMi04Ni42MjEtMTQ0Ljc2LTkxLjQyNEMyNjIuMzUgNzEuOTIyIDI1NiA2NC45NTMgMjU2IDU2LjY0OVYyNC41NmMwLTkuMzEgNy45MTYtMTYuNjA5IDE3LjIwNC0xNS45NiA4MS43OTUgNS43MTcgMTU2LjQxMiA1MS45MDIgMTk3LjYxMSAxMjMuNDA4IDQxLjMwMSA3MS4zODUgNDMuOTkgMTU5LjA5NiA4LjA0MiAyMzIuNzkyLTQuMDgyIDguMzY5LTE0LjM2MSAxMS41NzUtMjIuNDI0IDYuOTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgNTEyIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtNDU2LjQzMyAzNzEuNzItMjcuNzktMTYuMDQ1Yy03LjE5Mi00LjE1Mi0xMC4wNTItMTMuMTM2LTYuNDg3LTIwLjYzNiAyNS44Mi01NC4zMjggMjMuNTY2LTExOC42MDItNi43NjgtMTcxLjAzLTMwLjI2NS01Mi41MjktODQuODAyLTg2LjYyMS0xNDQuNzYtOTEuNDI0QzI2Mi4zNSA3MS45MjIgMjU2IDY0Ljk1MyAyNTYgNTYuNjQ5VjI0LjU2YzAtOS4zMSA3LjkxNi0xNi42MDkgMTcuMjA0LTE1Ljk2IDgxLjc5NSA1LjcxNyAxNTYuNDEyIDUxLjkwMiAxOTcuNjExIDEyMy40MDggNDEuMzAxIDcxLjM4NSA0My45OSAxNTkuMDk2IDguMDQyIDIzMi43OTItNC4wODIgOC4zNjktMTQuMzYxIDExLjU3NS0yMi40MjQgNi45MnonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFyZW07ei1pbmRleDoxMH0ubXVsdGlzZWxlY3Qtc3Bpbm5lcnttYXJnaW46MCB2YXIoLS1tcy1weCwuODc1cmVtKSAwIDB9Lm11bHRpc2VsZWN0LWNsZWFye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO29wYWNpdHk6MTtwYWRkaW5nOjAgdmFyKC0tbXMtcHgsLjg3NXJlbSkgMCAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246LjNzO3otaW5kZXg6MTB9Lm11bHRpc2VsZWN0LWNsZWFyOmhvdmVyIC5tdWx0aXNlbGVjdC1jbGVhci1pY29ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXMtY2xlYXItY29sb3ItaG92ZXIsIzAwMCl9Lm11bHRpc2VsZWN0LWNsZWFyLWljb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tcy1jbGVhci1jb2xvciwjOTk5KTtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpO3RyYW5zaXRpb246LjNzfS5tdWx0aXNlbGVjdC1jYXJldCwubXVsdGlzZWxlY3QtY2xlYXItaWNvbntoZWlnaHQ6MS4xMjVyZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDouNjI1cmVtfS5tdWx0aXNlbGVjdC1jYXJldHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLWNhcmV0LWNvbG9yLCM5OTkpO2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7bWFyZ2luOjAgdmFyKC0tbXMtcHgsLjg3NXJlbSkgMCAwOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMzEuMyAxOTJoMjU3LjNjMTcuOCAwIDI2LjcgMjEuNSAxNC4xIDM0LjFMMTc0LjEgMzU0LjhjLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwTDE3LjIgMjI2LjFDNC42IDIxMy41IDEzLjUgMTkyIDMxLjMgMTkyeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTMxLjMgMTkyaDI1Ny4zYzE3LjggMCAyNi43IDIxLjUgMTQuMSAzNC4xTDE3NC4xIDM1NC44Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMEwxNy4yIDIyNi4xQzQuNiAyMTMuNSAxMy41IDE5MiAzMS4zIDE5MnonLyUzRSUzQy9zdmclM0VcXFwiKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3otaW5kZXg6MTB9Lm11bHRpc2VsZWN0LWNhcmV0LmlzLW9wZW57cG9pbnRlci1ldmVudHM6YXV0bzt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9Lm11bHRpc2VsZWN0LWRyb3Bkb3duey13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2JhY2tncm91bmQ6dmFyKC0tbXMtZHJvcGRvd24tYmcsI2ZmZik7Ym9yZGVyOnZhcigtLW1zLWRyb3Bkb3duLWJvcmRlci13aWR0aCwxcHgpIHNvbGlkIHZhcigtLW1zLWRyb3Bkb3duLWJvcmRlci1jb2xvciwjZDFkNWRiKTtib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KTtib3R0b206MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xlZnQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO21heC1oZWlnaHQ6MTVyZW07bWF4LWhlaWdodDp2YXIoLS1tcy1tYXgtaGVpZ2h0LDEwcmVtKTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3cteTpzY3JvbGw7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpO3otaW5kZXg6MTAwfS5tdWx0aXNlbGVjdC1kcm9wZG93bi5pcy10b3B7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSAwIDA7Ym90dG9tOmF1dG87dG9wOnZhcigtLW1zLWJvcmRlci13aWR0aCwxcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0ubXVsdGlzZWxlY3QtZHJvcGRvd24uaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0ubXVsdGlzZWxlY3Qtb3B0aW9uc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9Lm11bHRpc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmcsI2U1ZTdlYik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLCMzNzQxNTEpO2N1cnNvcjpkZWZhdWx0O2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTtmb250LXdlaWdodDo2MDA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGluZS1oZWlnaHQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtbGluZS1oZWlnaHQsMS4zNzUpO3BhZGRpbmc6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtcHksLjNyZW0pIHZhcigtLW1zLWdyb3VwLWxhYmVsLXB4LC43NXJlbSk7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1wb2ludGFibGV7Y3Vyc29yOnBvaW50ZXJ9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1wb2ludGVkLCNkMWQ1ZGIpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXBvaW50ZWQsIzM3NDE1MSl9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctc2VsZWN0ZWQsIzA1OTY2OSk7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3Itc2VsZWN0ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctZGlzYWJsZWQsI2YzZjRmNik7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3ItZGlzYWJsZWQsI2QxZDVkYik7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1zZWxlY3RlZC5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctc2VsZWN0ZWQtcG9pbnRlZCwjMGM5ZTcwKTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1zZWxlY3RlZC1wb2ludGVkLCNmZmYpfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1zZWxlY3RlZC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLXNlbGVjdGVkLWRpc2FibGVkLCM3NWNmYjEpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXNlbGVjdGVkLWRpc2FibGVkLCNkMWZhZTUpfS5tdWx0aXNlbGVjdC1ncm91cC1vcHRpb25ze21hcmdpbjowO3BhZGRpbmc6MH0ubXVsdGlzZWxlY3Qtb3B0aW9ue2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTp2YXIoLS1tcy1vcHRpb24tZm9udC1zaXplLDFyZW0pO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xpbmUtaGVpZ2h0OnZhcigtLW1zLW9wdGlvbi1saW5lLWhlaWdodCwxLjM3NSk7cGFkZGluZzp2YXIoLS1tcy1vcHRpb24tcHksLjVyZW0pIHZhcigtLW1zLW9wdGlvbi1weCwuNzVyZW0pO3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctcG9pbnRlZCwjZjNmNGY2KTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3ItcG9pbnRlZCwjMWYyOTM3KX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXNlbGVjdGVkLCMxMGI5ODEpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1zZWxlY3RlZCwjZmZmKX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLWRpc2FibGVkLCNmZmYpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1kaXNhYmxlZCwjZDFkNWRiKTtjdXJzb3I6bm90LWFsbG93ZWR9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1zZWxlY3RlZC5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXNlbGVjdGVkLXBvaW50ZWQsIzI2YzA4ZSk7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLXNlbGVjdGVkLXBvaW50ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1zZWxlY3RlZC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1zZWxlY3RlZC1kaXNhYmxlZCwjODdkY2MwKTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3Itc2VsZWN0ZWQtZGlzYWJsZWQsI2QxZmFlNSl9Lm11bHRpc2VsZWN0LW5vLW9wdGlvbnMsLm11bHRpc2VsZWN0LW5vLXJlc3VsdHN7Y29sb3I6dmFyKC0tbXMtZW1wdHktY29sb3IsIzRiNTU2Myk7cGFkZGluZzp2YXIoLS1tcy1vcHRpb24tcHksLjVyZW0pIHZhcigtLW1zLW9wdGlvbi1weCwuNzVyZW0pfS5tdWx0aXNlbGVjdC1mYWtlLWlucHV0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7Ym90dG9tOi0xcHg7Zm9udC1zaXplOjA7aGVpZ2h0OjFweDtsZWZ0OjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LWZha2UtaW5wdXQ6YWN0aXZlLC5tdWx0aXNlbGVjdC1mYWtlLWlucHV0OmZvY3Vze291dGxpbmU6bm9uZX0ubXVsdGlzZWxlY3Qtc3BhY2Vye2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LW11bHRpcGxlLWxhYmVsLFtkaXI9cnRsXSAubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXIsW2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWx7bGVmdDphdXRvO3BhZGRpbmctbGVmdDpjYWxjKDEuMjVyZW0gKyB2YXIoLS1tcy1weCwgLjg3NXJlbSkqMyk7cGFkZGluZy1yaWdodDp2YXIoLS1tcy1weCwuODc1cmVtKTtyaWdodDowfVtkaXI9cnRsXSAubXVsdGlzZWxlY3Qtc2VhcmNoe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtcHgsLjg3NXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC10YWdze3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtcHksLjVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtdGFne21hcmdpbi1sZWZ0OnZhcigtLW1zLXRhZy1teCwuMjVyZW0pO21hcmdpbi1yaWdodDowO3BhZGRpbmc6dmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIHZhcigtLW1zLXRhZy1weCwuNXJlbSkgdmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIDB9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC10YWcuaXMtZGlzYWJsZWR7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXRhZy1weCwuNXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1jYXJldCxbZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXNwaW5uZXJ7bWFyZ2luOjAgMCAwIHZhcigtLW1zLXB4LC44NzVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtY2xlYXJ7cGFkZGluZzowIDAgMCB2YXIoLS1tcy1weCwuODc1cmVtKX1ALXdlYmtpdC1rZXlmcmFtZXMgbXVsdGlzZWxlY3Qtc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIG11bHRpc2VsZWN0LXNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciAmJiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdKTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNi4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjItMDgtMjZUMTc6NTJaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNi4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHRcdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjZcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjEtMDItMTZcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtICYmIGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDExKywgRWRnZSAxMiAtIDE4KywgQ2hyb21lIDw9MTYgLSAyNSBvbmx5LCBGaXJlZm94IDw9My42IC0gMzEgb25seSxcblx0Ly8gU2FmYXJpIDQgLSA1IG9ubHksIE9wZXJhIDw9MTEuNiAtIDEyLnggb25seVxuXHQvLyBJRS9FZGdlICYgb2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCBvbmx5XG5cdC8vIFNhZmFyaSA2LjAgc3VwcG9ydHMgOnNjb3BlIGJ1dCBpdCdzIGFuIGFsaWFzIG9mIDpyb290IHRoZXJlLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cdFx0cmV0dXJuIHR5cGVvZiBlbC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHQhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGUgZmllbGRzZXQgZGl2XCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NOYW1lXCIgKTtcblx0fSApO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCBcIlwiICkgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kWyBcIlRBR1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFsgXCJDTEFTU1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKCBzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApICkgKSB7XG5cblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdHZhciBpbnB1dDtcblxuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD0zLjYgLSA1IG9ubHlcblx0XHRcdC8vIE9sZCBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgb24gYSBiYWRseS1lc2NhcGVkIGlkZW50aWZpZXIuXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlxcXFxcXGZcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiW1xcXFxyXFxcXG5cXFxcZl1cIiApO1xuXHRcdH0gKTtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9ZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZW5hYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogT3BlcmEgMTAgLSAxMSBvbmx5XG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCIqLDp4XCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIiwuKjpcIiApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKCBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IgKSApICkgKSB7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCBcInxcIiApICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpICk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBiID0gYi5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0cmV0dXJuIGEgPT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFsgaSBdID09PSBicFsgaSBdICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwWyBpIF0sIGJwWyBpIF0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0YXBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFsgaSBdID09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8XG5cdFx0XHRcdG1hdGNoWyA1IF0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbIFwiQ0hJTERcIiBdLnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFx0XHRcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmIGNsYXNzQ2FjaGUoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcblx0XHRcdFx0KCAhZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSApICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zWyBcImVtcHR5XCIgXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zWyBcIm50aFwiIF0gPSBFeHByLnBzZXVkb3NbIFwiZXFcIiBdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKFxuXHRcdFx0XHRzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCxcblx0XHRcdFx0W11cblx0XHRcdCksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0dG9rZW5zXG5cdFx0XHRcdFx0XHQuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIFwiVEFHXCIgXSggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApXG5cdFx0KTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kWyBcIklEXCIgXSggdG9rZW4ubWF0Y2hlc1sgMCBdXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0ICkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwclsgXCJuZWVkc0NvbnRleHRcIiBdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICkgPT09IFwiI1wiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBfbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PSBudWxsO1xufSApICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSApO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59ICkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuXHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufVxudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKHRyYWMtOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKHRyYWMtMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgdHJhYy02NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKHRyYWMtOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlIHRyYWMtODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKHRyYWMtMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKHRyYWMtMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICh0cmFjLTE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICh0cmFjLTEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAodHJhYy0xNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKHRyYWMtMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKHRyYWMtMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICh0cmFjLTY5MTEsIHRyYWMtODE2NSwgdHJhYy0xMTM4MiwgdHJhYy0xMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICh0cmFjLTEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0XHRcdC8vIEluIENocm9tZSwgaWYgYW4gZWxlbWVudCBoYXZpbmcgYSBmb2N1c291dCBoYW5kbGVyIGlzIGJsdXJyZWQgYnlcblx0XHRcdFx0XHRcdC8vIGNsaWNraW5nIG91dHNpZGUgb2YgaXQsIGl0IGludm9rZXMgdGhlIGhhbmRsZXIgc3luY2hyb25vdXNseS4gSWZcblx0XHRcdFx0XHRcdC8vIHRoYXQgaGFuZGxlciBjYWxscyBgLnJlbW92ZSgpYCBvbiB0aGUgZWxlbWVudCwgdGhlIGRhdGEgaXMgY2xlYXJlZCxcblx0XHRcdFx0XHRcdC8vIGxlYXZpbmcgYHJlc3VsdGAgdW5kZWZpbmVkLiBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhpcy5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKHRyYWMtNTA0LCB0cmFjLTEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGVcblx0XHQvLyBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhXFxbQ0RBVEFcXFt8XFxdXFxdPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICh0cmFjLTgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cbnZhciB3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiO1xuXG5cbnZhciBydHJpbUNTUyA9IG5ldyBSZWdFeHAoXG5cdFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsXG5cdFwiZ1wiXG4pO1xuXG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGRpc3BsYXk6IGJsb2NrXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgdHJhYy0xMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoZ2gtMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdC8vIHRyaW0gd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnR5IChpc3N1ZSBnaC00OTI2KVxuXHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXG5cdFx0XHQvLyBydHJpbSB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gdHJhYy03NjUzLCB0cmFjLTgxMjUsIHRyYWMtODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAodHJhYy0xMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cbm9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyB0cmFjLTk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICh0cmFjLTEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0IHRyYWMtMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICh0cmFjLTE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gdHJhYy05NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICh0cmFjLTExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyB0cmFjLTE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSB0cmFjLTg2MDUsIHRyYWMtMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vIHRyYWMtMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQWZyaWthYW5zIFthZl1cbi8vISBhdXRob3IgOiBXZXJuZXIgTW9sbGVudHplIDogaHR0cHM6Ly9naXRodWIuY29tL3dlcm5lcm1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhZiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FmJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1NvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1Nvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19NYV9EaV9Xb19Eb19Wcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3ZtfG5tL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9ebm0kL2kudGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAndm0nIDogJ1ZNJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnbm0nIDogJ05NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tWYW5kYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTcO0cmUgb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbR2lzdGVyIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYWFzXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvb3IgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZScsXG4gICAgICAgICAgICBzOiBcIiduIHBhYXIgc2Vrb25kZXNcIixcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kZXMnLFxuICAgICAgICAgICAgbTogXCInbiBtaW51dXRcIixcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlJyxcbiAgICAgICAgICAgIGg6IFwiJ24gdXVyXCIsXG4gICAgICAgICAgICBoaDogJyVkIHVyZScsXG4gICAgICAgICAgICBkOiBcIiduIGRhZ1wiLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWUnLFxuICAgICAgICAgICAgTTogXCInbiBtYWFuZFwiLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGUnLFxuICAgICAgICAgICAgeTogXCInbiBqYWFyXCIsXG4gICAgICAgICAgICB5eTogJyVkIGphYXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApOyAvLyBUaGFua3MgdG8gSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qanVwaXRlclxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1hYW5kYWcgaXMgZGllIGVlcnN0ZSBkYWcgdmFuIGRpZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBEaWUgd2VlayB3YXQgZGllIDRkZSBKYW51YXJpZSBiZXZhdCBpcyBkaWUgZWVyc3RlIHdlZWsgdmFuIGRpZSBqYWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFmO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoQWxnZXJpYSkgW2FyLWR6XVxuLy8hIGF1dGhvciA6IEFtaW5lIFJvdWtoOiBodHRwczovL2dpdGh1Yi5jb20vQW1pbmUyN1xuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcbi8vISBhdXRob3IgOiBBaG1lZCBFbGtoYXRpYlxuLy8hIGF1dGhvciA6IGZvcmFiaSBodHRwczovL2dpdGh1Yi5jb20vZm9yYWJpXG4vLyEgYXV0aG9yIDogTm91cmVkZGluZSBMT1VBSEVESiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub3VyZWRkaW5lbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2KfZhtmB2YonLFxuICAgICAgICAgICAgJ9mB2YrZgdix2YonLFxuICAgICAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgICAgICfYo9mB2LHZitmEJyxcbiAgICAgICAgICAgICfZhdin2YonLFxuICAgICAgICAgICAgJ9is2YjYp9mGJyxcbiAgICAgICAgICAgICfYrNmI2YrZhNmK2KknLFxuICAgICAgICAgICAgJ9ij2YjYqicsXG4gICAgICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBhckR6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItZHonLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL1xcdTIwMEZNL1xcdTIwMEZZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyRHo7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChLdXdhaXQpIFthci1rd11cbi8vISBhdXRob3IgOiBOdXNyZXQgUGFybGFrOiBodHRwczovL2dpdGh1Yi5jb20vbnVzcmV0cGFybGFrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJLdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWt3Jywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYqtmG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyS3c7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChMaWJ5YSkgW2FyLWx5XVxuLy8hIGF1dGhvciA6IEFsaSBIbWVyOiBodHRwczovL2dpdGh1Yi5jb20va2lrb2FuaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAnMScsXG4gICAgICAgICAgICAyOiAnMicsXG4gICAgICAgICAgICAzOiAnMycsXG4gICAgICAgICAgICA0OiAnNCcsXG4gICAgICAgICAgICA1OiAnNScsXG4gICAgICAgICAgICA2OiAnNicsXG4gICAgICAgICAgICA3OiAnNycsXG4gICAgICAgICAgICA4OiAnOCcsXG4gICAgICAgICAgICA5OiAnOScsXG4gICAgICAgICAgICAwOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyTHkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1seScsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJMeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKE1vcm9jY28pIFthci1tYV1cbi8vISBhdXRob3IgOiBFbEZhZGlsaSBZYXNzaW5lIDogaHR0cHM6Ly9naXRodWIuY29tL0VsRmFkaWxpWVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJNYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLW1hJywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KfYrdivX9in2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhck1hO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoU2F1ZGkgQXJhYmlhKSBbYXItc2FdXG4vLyEgYXV0aG9yIDogU3VoYWlsIEFsa293YWlsZWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3hzb2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYXJTYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXNhJywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyU2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlICA6ICBBcmFiaWMgKFR1bmlzaWEpIFthci10bl1cbi8vISBhdXRob3IgOiBOYWRlciBUb3VrYWJyaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uYWRlcmlvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJUbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXRuJywge1xuICAgICAgICBtb250aHM6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJUbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgW2FyXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcbi8vISBhdXRob3IgOiBBaG1lZCBFbGtoYXRpYlxuLy8hIGF1dGhvciA6IGZvcmFiaSBodHRwczovL2dpdGh1Yi5jb20vZm9yYWJpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgICAgIDI6ICfZoicsXG4gICAgICAgICAgICAzOiAn2aMnLFxuICAgICAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgICAgIDU6ICfZpScsXG4gICAgICAgICAgICA2OiAn2aYnLFxuICAgICAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgICAgIDg6ICfZqCcsXG4gICAgICAgICAgICA5OiAn2aknLFxuICAgICAgICAgICAgMDogJ9mgJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAgICAgJ9mjJzogJzMnLFxuICAgICAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAgICAgJ9mmJzogJzYnLFxuICAgICAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAgICAgJ9mpJzogJzknLFxuICAgICAgICAgICAgJ9mgJzogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxGb3JtID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBuID09PSAxXG4gICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgOiBuID09PSAyXG4gICAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAxMVxuICAgICAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgICAgIDogNTtcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFscyA9IHtcbiAgICAgICAgICAgIHM6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYq9mI2KfZhicsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICfYr9mC2YrZgtipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBoOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAn2LPYp9i52Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYs9in2LnYqtin2YYnLCAn2LPYp9i52KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINmK2YjZhScsXG4gICAgICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBNOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi02YfYsScsXG4gICAgICAgICAgICAgICAgJ9i02YfYsSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LHYpycsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgICAgICfYudin2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LnYp9mF2KfZhicsICfYudin2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBwbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07XG4gICAgICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfZitmG2KfZitixJyxcbiAgICAgICAgICAgICfZgdio2LHYp9mK2LEnLFxuICAgICAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgICAgICfYo9io2LHZitmEJyxcbiAgICAgICAgICAgICfZhdin2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmG2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmE2YrZiCcsXG4gICAgICAgICAgICAn2KPYutiz2LfYsycsXG4gICAgICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBhciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBemVyYmFpamFuaSBbYXpdXG4vLyEgYXV0aG9yIDogdG9wY2hpeWV2IDogaHR0cHM6Ly9naXRodWIuY29tL3RvcGNoaXlldlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiAnLWluY2knLFxuICAgICAgICA1OiAnLWluY2knLFxuICAgICAgICA4OiAnLWluY2knLFxuICAgICAgICA3MDogJy1pbmNpJyxcbiAgICAgICAgODA6ICctaW5jaScsXG4gICAgICAgIDI6ICctbmNpJyxcbiAgICAgICAgNzogJy1uY2knLFxuICAgICAgICAyMDogJy1uY2knLFxuICAgICAgICA1MDogJy1uY2knLFxuICAgICAgICAzOiAnLcO8bmPDvCcsXG4gICAgICAgIDQ6ICctw7xuY8O8JyxcbiAgICAgICAgMTAwOiAnLcO8bmPDvCcsXG4gICAgICAgIDY6ICctbmPEsScsXG4gICAgICAgIDk6ICctdW5jdScsXG4gICAgICAgIDEwOiAnLXVuY3UnLFxuICAgICAgICAzMDogJy11bmN1JyxcbiAgICAgICAgNjA6ICctxLFuY8SxJyxcbiAgICAgICAgOTA6ICctxLFuY8SxJyxcbiAgICB9O1xuXG4gICAgdmFyIGF6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXonLCB7XG4gICAgICAgIG1vbnRoczogJ3lhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAneWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0JhemFyX0JhemFyIGVydMmZc2lfw4fJmXLFn8mZbmLJmSBheMWfYW3EsV/Dh8mZcsWfyZluYsmZX0PDvG3JmSBheMWfYW3EsV9Dw7xtyZlfxZ7JmW5iyZknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0Jhel9CekVfw4dBeF/Dh8mZcl9DQXhfQ8O8bV/FnsmZbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2J1Z8O8biBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3NhYmFoIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2fJmWzJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuyZluXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1trZcOnyZluIGjJmWZ0yZldIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMmZdnbJmWwnLFxuICAgICAgICAgICAgczogJ2JpciBuZcOnyZkgc2FuaXnJmScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5yZknLFxuICAgICAgICAgICAgbTogJ2JpciBkyZlxaXHJmScsXG4gICAgICAgICAgICBtbTogJyVkIGTJmXFpccmZJyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FhdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNhYXQnLFxuICAgICAgICAgICAgZDogJ2JpciBnw7xuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ8O8bicsXG4gICAgICAgICAgICBNOiAnYmlyIGF5JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYXknLFxuICAgICAgICAgICAgeTogJ2JpciBpbCcsXG4gICAgICAgICAgICB5eTogJyVkIGlsJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14oZ8O8bmTDvHp8YXjFn2FtKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnZWPJmSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc8mZaMmZcic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZ8O8bmTDvHonO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2F4xZ9hbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0oxLFuY8SxfGluY2l8bmNpfMO8bmPDvHxuY8SxfHVuY3UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLcSxbmPEsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZWxhcnVzaWFuIFtiZV1cbi8vISBhdXRob3IgOiBEbWl0cnkgRGVtaWRvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW1pZG92OTFcbi8vISBhdXRob3I6IFByYWxlc2thOiBodHRwOi8vcHJhbGVza2EucHJvL1xuLy8hIEF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfRhdCy0ZbQu9GW0L3QsF/RhdCy0ZbQu9GW0L3Ri1/RhdCy0ZbQu9GW0L0nIDogJ9GF0LLRltC70ZbQvdGDX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScsXG4gICAgICAgICAgICBoaDogd2l0aG91dFN1ZmZpeCA/ICfQs9Cw0LTQt9GW0L3QsF/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nIDogJ9Cz0LDQtNC30ZbQvdGDX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvScsXG4gICAgICAgICAgICBkZDogJ9C00LfQtdC90Yxf0LTQvdGWX9C00LfRkdC9JyxcbiAgICAgICAgICAgIE1NOiAn0LzQtdGB0Y/Rhl/QvNC10YHRj9GG0Ytf0LzQtdGB0Y/RhtCw0Z4nLFxuICAgICAgICAgICAgeXk6ICfQs9C+0LRf0LPQsNC00Ytf0LPQsNC00L7RnicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstGW0LvRltC90LAnIDogJ9GF0LLRltC70ZbQvdGDJztcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LAnIDogJ9Cz0LDQtNC30ZbQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYmUnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0YHRgtGD0LTQt9C10L3Rj1/Qu9GO0YLQsNCz0LBf0YHQsNC60LDQstGW0LrQsF/QutGA0LDRgdCw0LLRltC60LBf0YLRgNCw0Z7QvdGPX9GH0Y3RgNCy0LXQvdGPX9C70ZbQv9C10L3Rj1/QttC90ZbRntC90Y9f0LLQtdGA0LDRgdC90Y9f0LrQsNGB0YLRgNGL0YfQvdGW0LrQsF/Qu9GW0YHRgtCw0L/QsNC00LBf0YHQvdC10LbQvdGPJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfRgdGC0YPQtNC30LXQvdGMX9C70Y7RgtGLX9GB0LDQutCw0LLRltC6X9C60YDQsNGB0LDQstGW0Lpf0YLRgNCw0LLQtdC90Yxf0YfRjdGA0LLQtdC90Yxf0LvRltC/0LXQvdGMX9C20L3RltCy0LXQvdGMX9Cy0LXRgNCw0YHQtdC90Yxf0LrQsNGB0YLRgNGL0YfQvdGW0Lpf0LvRltGB0YLQsNC/0LDQtF/RgdC90LXQttCw0L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GB0YLRg9C0X9C70Y7Rgl/RgdCw0Lpf0LrRgNCw0YFf0YLRgNCw0LJf0YfRjdGA0LJf0LvRltC/X9C20L3RltCyX9Cy0LXRgF/QutCw0YHRgl/Qu9GW0YHRgl/RgdC90LXQticuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9C90Y/QtNC30LXQu9GOX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTRg1/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0YNf0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfQvdGP0LTQt9C10LvRj1/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00LBf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtCwX9GB0YPQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL1xcWyA/W9Cj0YPRnl0gPyg/OtC80ZbQvdGD0LvRg9GOfNC90LDRgdGC0YPQv9C90YPRjik/ID9cXF0gP2RkZGQvLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHRkdC90L3RjyDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0Z7RgtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0KPRh9C+0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vQo10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQv9GA0LDQtyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0YLQsNC80YMnLFxuICAgICAgICAgICAgczogJ9C90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6ICfQtNC30LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Yt80YDQsNC90ZbRhtGLfNC00L3Rj3zQstC10YfQsNGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LDRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRiyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90ZbRhtGLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9Cw0YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0ZZ80Yt80LPQsCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChudW1iZXIgJSAxMCA9PT0gMiB8fCBudW1iZXIgJSAxMCA9PT0gMykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCAhPT0gMTIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCAhPT0gMTNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbnVtYmVyICsgJy3RlidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyICsgJy3Riyc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0LAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBiZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdWxnYXJpYW4gW2JnXVxuLy8hIGF1dGhvciA6IEtyYXNlbiBCb3Jpc292IDogaHR0cHM6Ly9naXRodWIuY29tL2tyYXpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBiZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JnJywge1xuICAgICAgICBtb250aHM6ICfRj9C90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Rg1/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10LvRj1/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0Y/QtNCwX9GH0LXRgtCy0YrRgNGC0YrQul/Qv9C10YLRitC6X9GB0YrQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDRj1/Rh9C10YJf0L/QtdGCX9GB0YrQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQlNC90LXRgSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQsl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQktGH0LXRgNCwINCyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JzQuNC90LDQu9Cw0YLQsF0gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JzQuNC90LDQu9C40Y9dIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0YHQu9C10LQgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtdC00LggJXMnLFxuICAgICAgICAgICAgczogJ9C90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIHc6ICfRgdC10LTQvNC40YbQsCcsXG4gICAgICAgICAgICB3dzogJyVkINGB0LXQtNC80LjRhtC4JyxcbiAgICAgICAgICAgIE06ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtCwJyxcbiAgICAgICAgICAgIHk6ICfQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJnO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJhbWJhcmEgW2JtXVxuLy8hIGF1dGhvciA6IEVzdGVsbGUgQ29tbWVudCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lc3RlbGxlY29tbWVudFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGJtID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm0nLCB7XG4gICAgICAgIG1vbnRoczogJ1phbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX03Jm2thbG9fWnV3yZtua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU8mbdGFuYnVydWthbG9fyZRrdXTJlGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2Fsbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0thcmlfTnTJm27Jm25fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdLYXJfTnTJm19UYXJfQXJhX0FsYV9KdW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0thX050X1RhX0FyX0FsX0p1X1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1NpbmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2RvbiBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS3VudSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBryZRuyZQnLFxuICAgICAgICAgICAgcGFzdDogJ2EgYsmbICVzIGLJlCcsXG4gICAgICAgICAgICBzOiAnc2FuZ2EgZGFtYSBkYW1hJyxcbiAgICAgICAgICAgIHNzOiAnc2Vrb25kaSAlZCcsXG4gICAgICAgICAgICBtOiAnbWluaXRpIGtlbGVuJyxcbiAgICAgICAgICAgIG1tOiAnbWluaXRpICVkJyxcbiAgICAgICAgICAgIGg6ICdsyZtyyZsga2VsZW4nLFxuICAgICAgICAgICAgaGg6ICdsyZtyyZsgJWQnLFxuICAgICAgICAgICAgZDogJ3RpbGUga2VsZW4nLFxuICAgICAgICAgICAgZGQ6ICd0aWxlICVkJyxcbiAgICAgICAgICAgIE06ICdrYWxvIGtlbGVuJyxcbiAgICAgICAgICAgIE1NOiAna2FsbyAlZCcsXG4gICAgICAgICAgICB5OiAnc2FuIGtlbGVuJyxcbiAgICAgICAgICAgIHl5OiAnc2FuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJtO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbmdhbGkgKEJhbmdsYWRlc2gpIFtibi1iZF1cbi8vISBhdXRob3IgOiBBc3JhZiBIb3NzYWluIFBhdG9hcnkgOiBodHRwczovL2dpdGh1Yi5jb20vYXNod29vbGZvcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KenJyxcbiAgICAgICAgICAgIDI6ICfgp6gnLFxuICAgICAgICAgICAgMzogJ+CnqScsXG4gICAgICAgICAgICA0OiAn4KeqJyxcbiAgICAgICAgICAgIDU6ICfgp6snLFxuICAgICAgICAgICAgNjogJ+CnrCcsXG4gICAgICAgICAgICA3OiAn4KetJyxcbiAgICAgICAgICAgIDg6ICfgp64nLFxuICAgICAgICAgICAgOTogJ+CnrycsXG4gICAgICAgICAgICAwOiAn4KemJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cnpyc6ICcxJyxcbiAgICAgICAgICAgICfgp6gnOiAnMicsXG4gICAgICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAgICAgJ+Cnqic6ICc0JyxcbiAgICAgICAgICAgICfgp6snOiAnNScsXG4gICAgICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAgICAgJ+CnrSc6ICc3JyxcbiAgICAgICAgICAgICfgp64nOiAnOCcsXG4gICAgICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAgICAgJ+Cnpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibkJkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm4tYmQnLCB7XG4gICAgICAgIG1vbnRoczogJ+CmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka5X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CmhuCmnF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgppfgpqTgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpqrgprDgp4cnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzOiAn4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBzczogJyVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBtOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbTogJyVkIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBoOiAn4KaP4KaVIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBoaDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkOiAn4KaP4KaVIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBNOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTTogJyVkIOCmruCmvuCmuCcsXG4gICAgICAgICAgICB5OiAn4KaP4KaVIOCmrOCmm+CmsCcsXG4gICAgICAgICAgICB5eTogJyVkIOCmrOCmm+CmsCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgpq3gp4vgprB84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Ka44Kao4KeN4Kan4KeN4Kav4Ka+fOCmsOCmvuCmpC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmreCni+CmsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgprjgppXgpr7gprInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kam4KeB4Kaq4KeB4KawJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDMgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmuOCmqOCnjeCmp+CnjeCmr+CmvicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpq3gp4vgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kam4KeB4Kaq4KeB4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqzgpr/gppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmqOCnjeCmp+CnjeCmr+Cmvic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJuQmQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVuZ2FsaSBbYm5dXG4vLyEgYXV0aG9yIDogS2F1c2hpayBHYW5kaGkgOiBodHRwczovL2dpdGh1Yi5jb20va2F1c2hpa2dhbmRoaVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgp6cnLFxuICAgICAgICAgICAgMjogJ+CnqCcsXG4gICAgICAgICAgICAzOiAn4KepJyxcbiAgICAgICAgICAgIDQ6ICfgp6onLFxuICAgICAgICAgICAgNTogJ+CnqycsXG4gICAgICAgICAgICA2OiAn4KesJyxcbiAgICAgICAgICAgIDc6ICfgp60nLFxuICAgICAgICAgICAgODogJ+CnricsXG4gICAgICAgICAgICA5OiAn4KevJyxcbiAgICAgICAgICAgIDA6ICfgp6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAgICAgJ+CnqCc6ICcyJyxcbiAgICAgICAgICAgICfgp6knOiAnMycsXG4gICAgICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAgICAgJ+Cnqyc6ICc1JyxcbiAgICAgICAgICAgICfgp6wnOiAnNicsXG4gICAgICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAgICAgJ+Cnric6ICc4JyxcbiAgICAgICAgICAgICfgp68nOiAnOScsXG4gICAgICAgICAgICAn4KemJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm4nLCB7XG4gICAgICAgIG1vbnRoczogJ+CmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka5X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CmhuCmnF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgppfgpqTgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpqrgprDgp4cnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzOiAn4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBzczogJyVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBtOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbTogJyVkIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBoOiAn4KaP4KaVIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBoaDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkOiAn4KaP4KaVIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBNOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTTogJyVkIOCmruCmvuCmuCcsXG4gICAgICAgICAgICB5OiAn4KaP4KaVIOCmrOCmm+CmsCcsXG4gICAgICAgICAgICB5eTogJyVkIOCmrOCmm+CmsCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gprDgpr7gpqR84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Kaw4Ka+4KakLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpqzgpr/gppXgpr7gprInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmpuCngeCmquCngeCmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kas4Ka/4KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGliZXRhbiBbYm9dXG4vLyEgYXV0aG9yIDogVGh1cHRlbiBOLiBDaGFrcmlzaGFyIDogaHR0cHM6Ly9naXRodWIuY29tL3ZhanJhZG9nXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+C8oScsXG4gICAgICAgICAgICAyOiAn4LyiJyxcbiAgICAgICAgICAgIDM6ICfgvKMnLFxuICAgICAgICAgICAgNDogJ+C8pCcsXG4gICAgICAgICAgICA1OiAn4LylJyxcbiAgICAgICAgICAgIDY6ICfgvKYnLFxuICAgICAgICAgICAgNzogJ+C8pycsXG4gICAgICAgICAgICA4OiAn4LyoJyxcbiAgICAgICAgICAgIDk6ICfgvKknLFxuICAgICAgICAgICAgMDogJ+C8oCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgvKEnOiAnMScsXG4gICAgICAgICAgICAn4LyiJzogJzInLFxuICAgICAgICAgICAgJ+C8oyc6ICczJyxcbiAgICAgICAgICAgICfgvKQnOiAnNCcsXG4gICAgICAgICAgICAn4LylJzogJzUnLFxuICAgICAgICAgICAgJ+C8pic6ICc2JyxcbiAgICAgICAgICAgICfgvKcnOiAnNycsXG4gICAgICAgICAgICAn4LyoJzogJzgnLFxuICAgICAgICAgICAgJ+C8qSc6ICc5JyxcbiAgICAgICAgICAgICfgvKAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibycsIHtcbiAgICAgICAgbW9udGhzOiAn4L2f4L6z4LyL4L2W4LyL4L2R4L2E4LyL4L2U4L28X+C9n+C+s+C8i+C9luC8i+C9guC9ieC9suC9puC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvYLgvabgvbTgvZjgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2e4L2y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9o+C+lOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvrLgvbTgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2R4L204L2T4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9ouC+kuC+seC9keC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZHgvYLgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9heC9suC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYngvbLgvabgvIvgvZQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+C9n+C+s+C8izFf4L2f4L6z4LyLMl/gvZ/gvrPgvIszX+C9n+C+s+C8izRf4L2f4L6z4LyLNV/gvZ/gvrPgvIs2X+C9n+C+s+C8izdf4L2f4L6z4LyLOF/gvZ/gvrPgvIs5X+C9n+C+s+C8izEwX+C9n+C+s+C8izExX+C9n+C+s+C8izEyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC9eKOC9n+C+s+C8i1xcZHsxLDJ9KS8sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C9guC9n+C9oOC8i+C9ieC9suC8i+C9mOC8i1/gvYLgvZ/gvaDgvIvgvZ/gvrPgvIvgvZbgvItf4L2C4L2f4L2g4LyL4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9guC9n+C9oOC8i+C9o+C+t+C9guC8i+C9lOC8i1/gvYLgvZ/gvaDgvIvgvZXgvbTgvaLgvIvgvZbgvbRf4L2C4L2f4L2g4LyL4L2U4LyL4L2m4L2E4L2m4LyLX+C9guC9n+C9oOC8i+C9puC+pOC9uuC9k+C8i+C9lOC8iycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C9ieC9sl/gvZ/gvrNf4L2Y4L2y4L2CX+C9o+C+t+C9gl/gvZXgvbTgvaJf4L2m4L2E4L2mX+C9puC+pOC9uuC9kycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgvZHgvbLgvIvgvaLgvbLgvYRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4L2m4L2E4LyL4L2J4L2y4L2TXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvaLgvpfgvbrgvabgvIvgvZhdLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C9geC8i+C9puC9hF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2Y4L2Q4L2g4LyL4L2YXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOC9o+C8iycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4L2m4L6U4L2T4LyL4L2jJyxcbiAgICAgICAgICAgIHM6ICfgvaPgvZjgvIvgvabgvYQnLFxuICAgICAgICAgICAgc3M6ICclZCDgvabgvpDgvaLgvIvgvYbgvI0nLFxuICAgICAgICAgICAgbTogJ+C9puC+kOC9ouC8i+C9mOC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBtbTogJyVkIOC9puC+kOC9ouC8i+C9mCcsXG4gICAgICAgICAgICBoOiAn4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4L2G4L204LyL4L2a4L284L2RJyxcbiAgICAgICAgICAgIGQ6ICfgvYngvbLgvZPgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgZGQ6ICclZCDgvYngvbLgvZPgvIsnLFxuICAgICAgICAgICAgTTogJ+C9n+C+s+C8i+C9luC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBNTTogJyVkIOC9n+C+s+C8i+C9licsXG4gICAgICAgICAgICB5OiAn4L2j4L284LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4L2j4L28JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+C8oeC8ouC8o+C8pOC8peC8puC8p+C8qOC8qeC8oF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C9mOC9muC9k+C8i+C9mOC9vHzgvZ7gvbzgvYLgvabgvIvgvYDgvaZ84L2J4L2y4L2T4LyL4L2C4L204L2EfOC9keC9guC9vOC9hOC8i+C9keC9gnzgvZjgvZrgvZPgvIvgvZjgvbwvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4L2Y4L2a4L2T4LyL4L2Y4L28JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4L2J4L2y4L2T4LyL4L2C4L204L2EJyAmJiBob3VyIDwgNSkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C9keC9guC9vOC9hOC8i+C9keC9gidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9nuC9vOC9guC9puC8i+C9gOC9pic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2J4L2y4L2T4LyL4L2C4L204L2EJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCcmV0b24gW2JyXVxuLy8hIGF1dGhvciA6IEplYW4tQmFwdGlzdGUgTGUgRHVpZ291IDogaHR0cHM6Ly9naXRodWIuY29tL2pibGVkdWlnb3VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbW06ICdtdW51dGVubicsXG4gICAgICAgICAgICBNTTogJ21peicsXG4gICAgICAgICAgICBkZDogJ2RldmV6aCcsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBtdXRhdGlvbihmb3JtYXRba2V5XSwgbnVtYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMobnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAobGFzdE51bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgYmxvYXonO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyB2bG9heic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFzdE51bWJlcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA+IDkpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0TnVtYmVyKG51bWJlciAlIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtdXRhdGlvbih0ZXh0LCBudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHNvZnRNdXRhdGlvbih0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc29mdE11dGF0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG11dGF0aW9uVGFibGUgPSB7XG4gICAgICAgICAgICBtOiAndicsXG4gICAgICAgICAgICBiOiAndicsXG4gICAgICAgICAgICBkOiAneicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXV0YXRpb25UYWJsZVt0ZXh0LmNoYXJBdCgwKV0gKyB0ZXh0LnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmdlbi9pLFxuICAgICAgICAgICAgL15jW8q8XFwnXWh3ZS9pLFxuICAgICAgICAgICAgL15tZXUvaSxcbiAgICAgICAgICAgIC9eZWJyL2ksXG4gICAgICAgICAgICAvXm1hZS9pLFxuICAgICAgICAgICAgL14obWV6fGV2ZSkvaSxcbiAgICAgICAgICAgIC9eZ291L2ksXG4gICAgICAgICAgICAvXmVvcy9pLFxuICAgICAgICAgICAgL15nd2UvaSxcbiAgICAgICAgICAgIC9eaGVyL2ksXG4gICAgICAgICAgICAvXmR1L2ksXG4gICAgICAgICAgICAvXmtlci9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnZlcnxjW8q8XFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnxjW8q8XFwnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxcbiAgICAgICAgZnVsbFdlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXnN1bC9pLFxuICAgICAgICAgICAgL15sdW4vaSxcbiAgICAgICAgICAgIC9ebWV1cnpoL2ksXG4gICAgICAgICAgICAvXm1lcmNbyrxcXCddaGVyL2ksXG4gICAgICAgICAgICAvXnlhb3UvaSxcbiAgICAgICAgICAgIC9eZ3dlbmVyL2ksXG4gICAgICAgICAgICAvXnNhZG9ybi9pLFxuICAgICAgICBdLFxuICAgICAgICBzaG9ydFdlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXlN1bC9pLFxuICAgICAgICAgICAgL15MdW4vaSxcbiAgICAgICAgICAgIC9eTWV1L2ksXG4gICAgICAgICAgICAvXk1lci9pLFxuICAgICAgICAgICAgL15ZYW8vaSxcbiAgICAgICAgICAgIC9eR3dlL2ksXG4gICAgICAgICAgICAvXlNhZC9pLFxuICAgICAgICBdLFxuICAgICAgICBtaW5XZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAgICAgL15TdS9pLFxuICAgICAgICAgICAgL15MdS9pLFxuICAgICAgICAgICAgL15NZShbXnJdfCQpL2ksXG4gICAgICAgICAgICAvXk1lci9pLFxuICAgICAgICAgICAgL15ZYS9pLFxuICAgICAgICAgICAgL15Hdy9pLFxuICAgICAgICAgICAgL15TYS9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGJyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYnInLCB7XG4gICAgICAgIG1vbnRoczogJ0dlbnZlcl9Dyrxod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdHZW5fQ8q8aHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bF9MdW5fTWV1cnpoX01lcmPKvGhlcl9ZYW91X0d3ZW5lcl9TYWRvcm4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTHVfTWVfTWVyX1lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlOiBtaW5XZWVrZGF5c1BhcnNlLFxuICAgICAgICBmdWxsV2Vla2RheXNQYXJzZTogZnVsbFdlZWtkYXlzUGFyc2UsXG4gICAgICAgIHNob3J0V2Vla2RheXNQYXJzZTogc2hvcnRXZWVrZGF5c1BhcnNlLFxuICAgICAgICBtaW5XZWVrZGF5c1BhcnNlOiBtaW5XZWVrZGF5c1BhcnNlLFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiBtb250aHNTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogbW9udGhzU2hvcnRTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2Egdml6XSBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hpeml2IGRhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1dhcmPKvGhvYXpoIGRhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2RhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0RlY8q8aCBkYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtwYXNldCBkYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdhLWJlbm4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMq8em8nLFxuICAgICAgICAgICAgczogJ3VuIG5lYmV1ZCBzZWdvbmRlbm5vw7knLFxuICAgICAgICAgICAgc3M6ICclZCBlaWxlbm4nLFxuICAgICAgICAgICAgbTogJ3VyIHZ1bnV0ZW5uJyxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICBoOiAndW4gZXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZXVyJyxcbiAgICAgICAgICAgIGQ6ICd1biBkZXZlemgnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIE06ICd1ciBtaXonLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIHk6ICd1ciBibG9heicsXG4gICAgICAgICAgICB5eTogc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShhw7F8dmV0KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnYcOxJyA6ICd2ZXQnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvYS5tLnxnLm0uLywgLy8gZ291ZGUgbWVyZW5uIHwgYS1yYW9rIG1lcmVublxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiA9PT0gJ2cubS4nO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICdhLm0uJyA6ICdnLm0uJztcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBicjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCb3NuaWFuIFtic11cbi8vISBhdXRob3IgOiBOZWRpbSBDaG9saWNoIDogaHR0cHM6Ly9naXRodWIuY29tL2Zyb250eWFyZFxuLy8hIGJhc2VkIG9uIChocikgdHJhbnNsYXRpb24gYnkgQm9qYW4gTWFya292acSHXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRub2cgc2F0YSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2Rhbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5lJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYnMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdicycsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdcSNZXIgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWx1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGldIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBicztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDYXRhbGFuIFtjYV1cbi8vISBhdXRob3IgOiBKdWFuIEcuIEh1cnRhZG8gOiBodHRwczovL2dpdGh1Yi5jb20vanVhbmdodXJ0YWRvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjYScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdnZW5lcl9mZWJyZXJfbWFyw6dfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ2RpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGdfZGxfZHRfZGNfZGpfZHZfZHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F2dWkgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2RlbcOgIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYWhpciBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc3NhdCBhICcgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IFwiZCdhcXXDrSAlc1wiLFxuICAgICAgICAgICAgcGFzdDogJ2ZhICVzJyxcbiAgICAgICAgICAgIHM6ICd1bnMgc2Vnb25zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vnb25zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0cycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JlcycsXG4gICAgICAgICAgICBkOiAndW4gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGllcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzb3MnLFxuICAgICAgICAgICAgeTogJ3VuIGFueScsXG4gICAgICAgICAgICB5eTogJyVkIGFueXMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0ocnxufHR8w6h8YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIG51bWJlciA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gNFxuICAgICAgICAgICAgICAgICAgICA/ICd0J1xuICAgICAgICAgICAgICAgICAgICA6ICfDqCc7XG4gICAgICAgICAgICBpZiAocGVyaW9kID09PSAndycgfHwgcGVyaW9kID09PSAnVycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ3plY2ggW2NzXVxuLy8hIGF1dGhvciA6IHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0ge1xuICAgICAgICAgICAgZm9ybWF0OiAnbGVkZW5fw7pub3JfYsWZZXplbl9kdWJlbl9rdsSbdGVuX8SNZXJ2ZW5fxI1lcnZlbmVjX3NycGVuX3rDocWZw61fxZnDrWplbl9saXN0b3BhZF9wcm9zaW5lYycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnbGVkbmFfw7pub3JhX2LFmWV6bmFfZHVibmFfa3bEm3RuYV/EjWVydm5hX8SNZXJ2ZW5jZV9zcnBuYV96w6HFmcOtX8WZw61qbmFfbGlzdG9wYWR1X3Byb3NpbmNlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnbGVkX8O6bm9fYsWZZV9kdWJfa3bEm1/EjXZuX8SNdmNfc3JwX3rDocWZX8WZw61qX2xpc19wcm8nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15sZWQvaSxcbiAgICAgICAgICAgIC9ew7puby9pLFxuICAgICAgICAgICAgL15ixZllL2ksXG4gICAgICAgICAgICAvXmR1Yi9pLFxuICAgICAgICAgICAgL15rdsSbL2ksXG4gICAgICAgICAgICAvXijEjXZufMSNZXJ2ZW4kfMSNZXJ2bmEpL2ksXG4gICAgICAgICAgICAvXijEjXZjfMSNZXJ2ZW5lY3zEjWVydmVuY2UpL2ksXG4gICAgICAgICAgICAvXnNycC9pLFxuICAgICAgICAgICAgL156w6HFmS9pLFxuICAgICAgICAgICAgL17FmcOtai9pLFxuICAgICAgICAgICAgL15saXMvaSxcbiAgICAgICAgICAgIC9ecHJvL2ksXG4gICAgICAgIF0sXG4gICAgICAgIC8vIE5PVEU6ICfEjWVydmVuJyBpcyBzdWJzdHJpbmcgb2YgJ8SNZXJ2ZW5lYyc7IHRoZXJlZm9yZSAnxI1lcnZlbmVjJyBtdXN0IHByZWNlZGUgJ8SNZXJ2ZW4nIGluIHRoZSByZWdleCB0byBiZSBmdWxseSBtYXRjaGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UgcGFyc2VyIG1hdGNoZXMgJzEuIMSNZXJ2ZW5lYycgYXMgJzEuIMSNZXJ2ZW4nICsgJ2VjJy5cbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14obGVkZW58w7pub3J8YsWZZXplbnxkdWJlbnxrdsSbdGVufMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHrDocWZw618xZnDrWplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaTtcblxuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuID4gMSAmJiBuIDwgNSAmJiB+fihuIC8gMTApICE9PSAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3DDoXIgc2VrdW5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtJzogLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiBpc0Z1dHVyZSA/ICdtaW51dHUnIDogJ21pbnV0b3UnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaCc6IC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2RpbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2QnOiAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGVuJyA6ICdkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG55JyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkbnknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ00nOiAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcSbc8OtYycgOiAnbcSbc8OtY2VtJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbcSbc8OtY2UnIDogJ23Em3PDrWPFrycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcSbc8OtY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3knOiAvLyBhIHllYXIgLyBpbiBhIHllYXIgLyBhIHllYXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncm9rJyA6ICdyb2tlbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ2xldCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbGV0eSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3MnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIC8vIE5PVEU6ICfEjWVydmVuJyBpcyBzdWJzdHJpbmcgb2YgJ8SNZXJ2ZW5lYyc7IHRoZXJlZm9yZSAnxI1lcnZlbmVjJyBtdXN0IHByZWNlZGUgJ8SNZXJ2ZW4nIGluIHRoZSByZWdleCB0byBiZSBmdWxseSBtYXRjaGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UgcGFyc2VyIG1hdGNoZXMgJzEuIMSNZXJ2ZW5lYycgYXMgJzEuIMSNZXJ2ZW4nICsgJ2VjJy5cbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihsZWRlbnxsZWRuYXzDum5vcmF8w7pub3J8YsWZZXplbnxixZllem5hfGR1YmVufGR1Ym5hfGt2xJt0ZW58a3bEm3RuYXzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnxzcnBuYXx6w6HFmcOtfMWZw61qZW58xZnDrWpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWTEm2xlX3BvbmTEm2zDrV/DunRlcsO9X3N0xZllZGFfxI10dnJ0ZWtfcMOhdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX8O6dF9zdF/EjXRfcMOhX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX8O6dF9zdF/EjXRfcMOhX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgbDogJ0QuIE0uIFlZWVknLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIHZdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbesOtdHJhIHZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgxI10dnJ0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHDDoXRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgdl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMOpXSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3DFmWVkICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaHV2YXNoIFtjdl1cbi8vISBhdXRob3IgOiBBbmF0b2x5IE1pcm9ub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbWlyb250b2xpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjdicsIHtcbiAgICAgICAgbW9udGhzOiAn0LrTkdGA0LvQsNGHX9C90LDRgNOR0YFf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GA0YLQvNC1X9GD0YLTkV/Sq9GD0YDQu9CwX9Cw0LLTkdC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGI0YLQsNCyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9C605HRgF/QvdCw0YBf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GAX9GD0YLTkV/Sq9GD0YBf0LDQstC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfQstGL0YDRgdCw0YDQvdC40LrRg9C9X9GC0YPQvdGC0LjQutGD0L1f0YvRgtC70LDRgNC40LrRg9C9X9GO0L3QutGD0L1f0LrTl9Kr0L3QtdGA0L3QuNC60YPQvV/RjdGA0L3QtdC60YPQvV/RiNOR0LzQsNGC0LrRg9C9Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGL0YBf0YLRg9C9X9GL0YLQu1/RjtC9X9C605fSq1/RjdGA0L1f0YjTkdC8Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cy0YBf0YLQvV/Ri9GCX9GO0L1f0LrSq1/RjdGAX9GI0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQn9Cw0Y/QvV0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cr0YDQsNC9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb05bQvdC10YBdIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0qrQuNGC0LXRgV0gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9CY0YDRgtC905ddIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKG91dHB1dCkge1xuICAgICAgICAgICAgICAgIHZhciBhZmZpeCA9IC/RgdC10YXQtdGCJC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICA/ICfRgNC10L0nXG4gICAgICAgICAgICAgICAgICAgIDogL9Kr0YPQuyQvaS5leGVjKG91dHB1dClcbiAgICAgICAgICAgICAgICAgICAgPyAn0YLQsNC9J1xuICAgICAgICAgICAgICAgICAgICA6ICfRgNCw0L0nO1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBhZmZpeDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnJXMg0LrQsNGP0LvQu9CwJyxcbiAgICAgICAgICAgIHM6ICfQv9OX0YAt0LjQuiDSq9C10LrQutGD0L3RgicsXG4gICAgICAgICAgICBzczogJyVkINKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgICAgIG06ICfQv9OX0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaDogJ9C/05fRgCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQtdGF0LXRgicsXG4gICAgICAgICAgICBkOiAn0L/Tl9GAINC60YPQvScsXG4gICAgICAgICAgICBkZDogJyVkINC60YPQvScsXG4gICAgICAgICAgICBNOiAn0L/Tl9GAINGD0LnTkdGFJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0YPQudOR0YUnLFxuICAgICAgICAgICAgeTogJ9C/05fRgCDSq9GD0LsnLFxuICAgICAgICAgICAgeXk6ICclZCDSq9GD0LsnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0t0LzTl9GILyxcbiAgICAgICAgb3JkaW5hbDogJyVkLdC805fRiCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBXZWxzaCBbY3ldXG4vLyEgYXV0aG9yIDogUm9iZXJ0IEFsbGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmdhbGxlblxuLy8hIGF1dGhvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFuZ3JlYXZlc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGN5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3knLCB7XG4gICAgICAgIG1vbnRoczogJ0lvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0lvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X0xsX01hX01lX0lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIC8vIHRpbWUgZm9ybWF0cyBhcmUgdGhlIHNhbWUgYXMgZW4tZ2JcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIZWRkaXcgYW1dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbWWZvcnkgYW1dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYW1dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGRvZSBhbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkaXdldGhhZiBhbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdtZXduICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5biDDtGwnLFxuICAgICAgICAgICAgczogJ3ljaHlkaWcgZWlsaWFkYXUnLFxuICAgICAgICAgICAgc3M6ICclZCBlaWxpYWQnLFxuICAgICAgICAgICAgbTogJ211bnVkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbXVudWQnLFxuICAgICAgICAgICAgaDogJ2F3cicsXG4gICAgICAgICAgICBoaDogJyVkIGF3cicsXG4gICAgICAgICAgICBkOiAnZGl3cm5vZCcsXG4gICAgICAgICAgICBkZDogJyVkIGRpd3Jub2QnLFxuICAgICAgICAgICAgTTogJ21pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1pcycsXG4gICAgICAgICAgICB5OiAnYmx3eWRkeW4nLFxuICAgICAgICAgICAgeXk6ICclZCBmbHluZWRkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sXG4gICAgICAgIC8vIHRyYWRpdGlvbmFsIG9yZGluYWwgbnVtYmVycyBhYm92ZSAzMSBhcmUgbm90IGNvbW1vbmx5IHVzZWQgaW4gY29sbG9xdWlhbCBXZWxzaFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBsb29rdXAgPSBbXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAnYWYnLFxuICAgICAgICAgICAgICAgICAgICAnaWwnLFxuICAgICAgICAgICAgICAgICAgICAneWRkJyxcbiAgICAgICAgICAgICAgICAgICAgJ3lkZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsIC8vIDFhZiB0byAxMGZlZFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJywgLy8gMTFlZyB0byAyMGZlZFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoYiA+IDIwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGIgPT09IDQwIHx8IGIgPT09IDUwIHx8IGIgPT09IDYwIHx8IGIgPT09IDgwIHx8IGIgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnZmVkJzsgLy8gbm90IDMwYWluLCA3MGFpbiBvciA5MGFpblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhaW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYiA+IDApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBsb29rdXBbYl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3k7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRGFuaXNoIFtkYV1cbi8vISBhdXRob3IgOiBVbHJpayBOaWVsc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL21yYmFzZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGRhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGEnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7huX21hbl90aXJfb25zX3Rvcl9mcmVfbMO4cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ3DDpSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaSBnw6VyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbaV0gZGRkZFtzIGtsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ2bDpSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdldCBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2UnLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5lZGVyJyxcbiAgICAgICAgICAgIHk6ICdldCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoQXVzdHJpYSkgW2RlLWF0XVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNYXJ0aW4gR3JvbGxlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYWRNR1xuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlQXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1hdCcsIHtcbiAgICAgICAgbW9udGhzOiAnSsOkbm5lcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZUF0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoU3dpdHplcmxhbmQpIFtkZS1jaF1cbi8vISBhdXRob3IgOiBzc2NodWVsbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL3NzY2h1ZWxsZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlQ2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZUNoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGRpdmlhbiBbZHZdXG4vLyEgYXV0aG9yIDogSmF3aXNoIEhhbWVlZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXdpc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn3pberN6C3qreh96m3oPeqScsXG4gICAgICAgICAgICAn3orerN6E3rDeg96q3ofept6D3qknLFxuICAgICAgICAgICAgJ96J3qfeg96o3pfeqicsXG4gICAgICAgICAgICAn3oferd6V3rDeg96p3o3eqicsXG4gICAgICAgICAgICAn3onerScsXG4gICAgICAgICAgICAn3pbeq96C3rAnLFxuICAgICAgICAgICAgJ96W3qrejd6m3ofeqCcsXG4gICAgICAgICAgICAn3ofer96O3qbekN6w3pPeqicsXG4gICAgICAgICAgICAn3pDerN6V3rDek96s3onesN6E3qbeg96qJyxcbiAgICAgICAgICAgICfeh96u3obesN6T3q/ehN6m3oPeqicsXG4gICAgICAgICAgICAn3oLert6I3qzeid6w3oTept6D3qonLFxuICAgICAgICAgICAgJ96R3qjekN6s3onesN6E3qbeg96qJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXMgPSBbXG4gICAgICAgICAgICAn3ofep96L3qjeh96w3ozepicsXG4gICAgICAgICAgICAn3oDer96J3qYnLFxuICAgICAgICAgICAgJ96H3qbegt6w3o7ep96D3qYnLFxuICAgICAgICAgICAgJ96E3qrei96mJyxcbiAgICAgICAgICAgICfehN6q3oPep96Q3rDeit6m3ozeqCcsXG4gICAgICAgICAgICAn3oDeqt6G3qreg96qJyxcbiAgICAgICAgICAgICfegN6u3oLeqN6A3qjeg96qJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBkdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2R2Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46ICfeh96n3oveqF/egN6v3onepl/eh96m3oLesF/ehN6q3ovepl/ehN6q3oPep1/egN6q3obeql/egN6u3oLeqCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv3onehnzeid6KLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ96J3oonID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ96J3oYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ96J3oonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1veid6o3ofept6L3qpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb3onep96L3qbeid6nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1veh96o3ofesN6U3qxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW96K3qfeh96o3ozeqt6I3qhdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfejN6s3oPerd6O3qbeh96oICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfeht6q3oPeqN6C3rAgJXMnLFxuICAgICAgICAgICAgczogJ96Q3qjeht6q3oLesN6M3qreht6u3oXerN6H3rAnLFxuICAgICAgICAgICAgc3M6ICdkJSDekN6o3obeqt6C3rDejN6qJyxcbiAgICAgICAgICAgIG06ICfeid6o3oLeqN6T3qzeh96wJyxcbiAgICAgICAgICAgIG1tOiAn3oneqN6C3qjek96qICVkJyxcbiAgICAgICAgICAgIGg6ICfejt6m3pHeqN6H3qjeg96s3ofesCcsXG4gICAgICAgICAgICBoaDogJ96O3qbekd6o3ofeqN6D3qogJWQnLFxuICAgICAgICAgICAgZDogJ96L3qreiN6m3oDerN6H3rAnLFxuICAgICAgICAgICAgZGQ6ICfei96q3ojept6Q3rAgJWQnLFxuICAgICAgICAgICAgTTogJ96J3qbegN6s3ofesCcsXG4gICAgICAgICAgICBNTTogJ96J3qbekN6wICVkJyxcbiAgICAgICAgICAgIHk6ICfeh96m3oDept6D3qzeh96wJyxcbiAgICAgICAgICAgIHl5OiAn3ofept6A3qbeg96qICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDcsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHcmVlayBbZWxdXG4vLyEgYXV0aG9yIDogQWdnZWxvcyBLYXJhbGlhcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWhpZWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGVsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZWwnLCB7XG4gICAgICAgIG1vbnRoc05vbWluYXRpdmVFbDpcbiAgICAgICAgICAgICfOmc6xzr3Ov8+FzqzPgc65zr/Pgl/Ops61zrLPgc6/z4XOrM+BzrnOv8+CX86czqzPgc+EzrnOv8+CX86Rz4DPgc6vzrvOuc6/z4JfzpzOrM65zr/Pgl/Omc6/z43Ovc65zr/Pgl/Omc6/z43Ou865zr/Pgl/Okc+NzrPOv8+Fz4PPhM6/z4JfzqPOtc+Az4TOrc68zrLPgc65zr/Pgl/On866z4TPjs6yz4HOuc6/z4Jfzp3Ov86tzrzOss+BzrnOv8+CX86UzrXOus6tzrzOss+BzrnOv8+CJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc0dlbml0aXZlRWw6XG4gICAgICAgICAgICAnzpnOsc69zr/Phc6xz4HOr86/z4VfzqbOtc6yz4HOv8+FzrHPgc6vzr/PhV/OnM6xz4HPhM6vzr/PhV/Okc+Az4HOuc67zq/Ov8+FX86czrHOkM6/z4VfzpnOv8+Fzr3Or86/z4VfzpnOv8+FzrvOr86/z4VfzpHPhc6zzr/Pjc+Dz4TOv8+FX86jzrXPgM+EzrXOvM6yz4HOr86/z4Vfzp/Ous+Ez4nOss+Bzq/Ov8+FX86dzr/Otc68zrLPgc6vzr/PhV/OlM61zrrOtc68zrLPgc6vzr/PhScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHM6IGZ1bmN0aW9uIChtb21lbnRUb0Zvcm1hdCwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudFRvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc05vbWluYXRpdmVFbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1hdCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvRC8udGVzdChmb3JtYXQuc3Vic3RyaW5nKDAsIGZvcm1hdC5pbmRleE9mKCdNTU1NJykpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBkYXkgbnVtYmVyIGJlZm9yZSAnTU1NTSdcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzR2VuaXRpdmVFbFttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc05vbWluYXRpdmVFbFttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfOmc6xzr1fzqbOtc6yX86czrHPgV/Okc+Az4FfzpzOsc+KX86Zzr/Phc69X86Zzr/Phc67X86Rz4XOs1/Oo861z4Bfzp/Ous+EX86dzr/OtV/OlM61zronLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnzprPhc+BzrnOsc66zq5fzpTOtc+Fz4TOrc+BzrFfzqTPgc6vz4TOt1/OpM61z4TOrM+Bz4TOt1/OoM6tzrzPgM+EzrdfzqDOsc+BzrHPg866zrXPhc6uX86jzqzOss6yzrHPhM6/Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnzprPhc+BX86UzrXPhV/OpM+BzrlfzqTOtc+EX86gzrXOvF/OoM6xz4FfzqPOsc6yJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ86az4VfzpTOtV/OpM+BX86kzrVfzqDOtV/OoM6xX86jzrEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnzrzOvCcgOiAnzpzOnCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8+AzrwnIDogJ86gzpwnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKVswXSA9PT0gJ868JztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1vOoM6cXVxcLj/OnD9cXC4/L2ksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyRWw6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbzqPOrs68zrXPgc6xIHt9XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW86Rz43Pgc65zr8ge31dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbe31dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbzqfOuM61z4Ige31dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW8+Ezr8gz4DPgc6/zrfOs86/z43OvM61zr3Ov10gZGRkZCBbe31dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW8+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjogZnVuY3Rpb24gKGtleSwgbW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJFbFtrZXldLFxuICAgICAgICAgICAgICAgIGhvdXJzID0gbW9tICYmIG1vbS5ob3VycygpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob3V0cHV0KSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5hcHBseShtb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKCd7fScsIGhvdXJzICUgMTIgPT09IDEgPyAnz4PPhM63JyA6ICfPg8+EzrnPgicpO1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8+DzrUgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIM+Az4HOuc69JyxcbiAgICAgICAgICAgIHM6ICfOu86vzrPOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEnLFxuICAgICAgICAgICAgc3M6ICclZCDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEnLFxuICAgICAgICAgICAgbTogJ86tzr3OsSDOu861z4DPhM+MJyxcbiAgICAgICAgICAgIG1tOiAnJWQgzrvOtc+Az4TOrCcsXG4gICAgICAgICAgICBoOiAnzrzOr86xIM+Oz4HOsScsXG4gICAgICAgICAgICBoaDogJyVkIM+Oz4HOtc+CJyxcbiAgICAgICAgICAgIGQ6ICfOvM6vzrEgzrzOrc+BzrEnLFxuICAgICAgICAgICAgZGQ6ICclZCDOvM6tz4HOtc+CJyxcbiAgICAgICAgICAgIE06ICfOrc69zrHPgiDOvM6uzr3Osc+CJyxcbiAgICAgICAgICAgIE1NOiAnJWQgzrzOrs69zrXPgicsXG4gICAgICAgICAgICB5OiAnzq3Ovc6xz4Igz4fPgc+Mzr3Ov8+CJyxcbiAgICAgICAgICAgIHl5OiAnJWQgz4fPgc+Mzr3Ouc6xJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9zrcvLFxuICAgICAgICBvcmRpbmFsOiAnJWTOtycsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDRzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChBdXN0cmFsaWEpIFtlbi1hdV1cbi8vISBhdXRob3IgOiBKYXJlZCBNb3JzZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXJjb2FsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5BdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWF1Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkF1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKENhbmFkYSkgW2VuLWNhXVxuLy8hIGF1dGhvciA6IEpvbmF0aGFuIEFib3VyYmloIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmJjYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuQ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1jYScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQ2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pIFtlbi1nYl1cbi8vISBhdXRob3IgOiBDaHJpcyBHZWRyaW0gOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNnZWRyaW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkdiID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tZ2InLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5HYjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJcmVsYW5kKSBbZW4taWVdXG4vLyEgYXV0aG9yIDogQ2hyaXMgQ2FydGxpZGdlIDogaHR0cHM6Ly9naXRodWIuY29tL2NocmlzY2FydGxpZGdlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWllJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJc3JhZWwpIFtlbi1pbF1cbi8vISBhdXRob3IgOiBDaHJpcyBHZWRyaW0gOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNnZWRyaW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbklsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWwnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuSWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoSW5kaWEpIFtlbi1pbl1cbi8vISBhdXRob3IgOiBKYXRpbiBBZ3Jhd2FsIDogaHR0cHM6Ly9naXRodWIuY29tL2phdGluYWcyMlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChOZXcgWmVhbGFuZCkgW2VuLW56XVxuLy8hIGF1dGhvciA6IEx1a2UgTWNHcmVnb3IgOiBodHRwczovL2dpdGh1Yi5jb20vbHVrZW1jZ3JlZ29yXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5OeiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLW56Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbk56O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKFNpbmdhcG9yZSkgW2VuLXNnXVxuLy8hIGF1dGhvciA6IE1hdHRoZXcgQ2FzdHJpbGxvbi1NYWRyaWdhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS90ZWNoZGltZW5zaW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5TZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLXNnJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuU2c7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRXNwZXJhbnRvIFtlb11cbi8vISBhdXRob3IgOiBDb2xpbiBEZWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2NvbGluZGVhblxuLy8hIGF1dGhvciA6IE1pYSBOb3JkZW50b2Z0IEltcGVyYXRvcmkgOiBodHRwczovL2dpdGh1Yi5jb20vbWllc3Rhc21pYVxuLy8hIGNvbW1lbnQgOiBtaWVzdGFzbWlhIGNvcnJlY3RlZCB0aGUgdHJhbnNsYXRpb24gYnkgY29saW5kZWFuXG4vLyEgY29tbWVudCA6IFZpdmFrdm8gY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW4gYW5kIG1pZXN0YXNtaWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2HFrWd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxfYcWtZ19zZXB0X29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV/EtWFfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9bYXBdXFwudFxcLm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICdwJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwLnQubS4nIDogJ1AuVC5NLic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2EudC5tLicgOiAnQS5ULk0uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9kaWHFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNb3JnYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRbbiBqZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1twYXNpbnRhbl0gZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Bvc3QgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2FudGHFrSAlcycsXG4gICAgICAgICAgICBzOiAna2Vsa2FqIHNla3VuZG9qJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kb2onLFxuICAgICAgICAgICAgbTogJ3VudSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9qJyxcbiAgICAgICAgICAgIGg6ICd1bnUgaG9ybycsXG4gICAgICAgICAgICBoaDogJyVkIGhvcm9qJyxcbiAgICAgICAgICAgIGQ6ICd1bnUgdGFnbycsIC8vbmUgJ2RpdXJubycsIMSJYXIgZXN0YXMgdXppdGEgcG9yIHByb2tzaW11bW9cbiAgICAgICAgICAgIGRkOiAnJWQgdGFnb2onLFxuICAgICAgICAgICAgTTogJ3VudSBtb25hdG8nLFxuICAgICAgICAgICAgTU06ICclZCBtb25hdG9qJyxcbiAgICAgICAgICAgIHk6ICd1bnUgamFybycsXG4gICAgICAgICAgICB5eTogJyVkIGphcm9qJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9YS8sXG4gICAgICAgIG9yZGluYWw6ICclZGEnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKSBbZXMtZG9dXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc0RvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtZG8nLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzRG87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoTWV4aWNvKSBbZXMtbXhdXG4vLyEgYXV0aG9yIDogSkMgRnJhbmNvIDogaHR0cHM6Ly9naXRodWIuY29tL2pjZnJhbmNvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc014ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtbXgnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzTXg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoVW5pdGVkIFN0YXRlcykgW2VzLXVzXVxuLy8hIGF1dGhvciA6IGJ1c3R0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9idXN0dGFcbi8vISBhdXRob3IgOiBjaHJpc3JvZHogOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNyb2R6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc1VzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtdXMnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzVXM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCBbZXNdXG4vLyEgYXV0aG9yIDogSnVsaW8gTmFwdXLDrSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWxpb25jXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzJywge1xuICAgICAgICBtb250aHM6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21pX2p1X3ZpX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgICAgIGludmFsaWREYXRlOiAnRmVjaGEgaW52w6FsaWRhJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBlcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFc3RvbmlhbiBbZXRdXG4vLyEgYXV0aG9yIDogSGVucnkgS2VobG1hbm4gOiBodHRwczovL2dpdGh1Yi5jb20vbWFkaGVucnlcbi8vISBpbXByb3ZlbWVudHMgOiBJbGxpbWFyIFRhbWJlayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWd1bGthXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWydtw7VuZSBzZWt1bmRpJywgJ23DtW5pIHNla3VuZCcsICdwYWFyIHNla3VuZGl0J10sXG4gICAgICAgICAgICBzczogW251bWJlciArICdzZWt1bmRpJywgbnVtYmVyICsgJ3Nla3VuZGl0J10sXG4gICAgICAgICAgICBtOiBbJ8O8aGUgbWludXRpJywgJ8O8a3MgbWludXQnXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtaW51dGknLCBudW1iZXIgKyAnIG1pbnV0aXQnXSxcbiAgICAgICAgICAgIGg6IFsnw7xoZSB0dW5uaScsICd0dW5kIGFlZ2EnLCAnw7xrcyB0dW5kJ10sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcgdHVubmknLCBudW1iZXIgKyAnIHR1bmRpJ10sXG4gICAgICAgICAgICBkOiBbJ8O8aGUgcMOkZXZhJywgJ8O8a3MgcMOkZXYnXSxcbiAgICAgICAgICAgIE06IFsna3V1IGFqYScsICdrdXUgYWVnYScsICfDvGtzIGt1dSddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIGt1dScsIG51bWJlciArICcga3V1ZCddLFxuICAgICAgICAgICAgeTogWyfDvGhlIGFhc3RhJywgJ2Fhc3RhJywgJ8O8a3MgYWFzdGEnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBhYXN0YScsIG51bWJlciArICcgYWFzdGF0J10sXG4gICAgICAgIH07XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0W2tleV1bMl0gPyBmb3JtYXRba2V5XVsyXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZSA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGV0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ2phYW51YXJfdmVlYnJ1YXJfbcOkcnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3NlcHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdww7xoYXDDpGV2X2VzbWFzcMOkZXZfdGVpc2lww6Rldl9rb2xtYXDDpGV2X25lbGphcMOkZXZfcmVlZGVfbGF1cMOkZXYnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1BfRV9UX0tfTl9SX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnUF9FX1RfS19OX1JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1TDpG5hLF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tIb21tZSxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW0rDpHJnbWluZV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0VpbGUsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tFZWxtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkcmFzdCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdGFnYXNpJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogJyVkIHDDpGV2YScsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmFzcXVlIFtldV1cbi8vISBhdXRob3IgOiBFbmVrbyBJbGxhcnJhbWVuZGkgOiBodHRwczovL2dpdGh1Yi5jb20vZWlsbGFycmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBldSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2V1Jywge1xuICAgICAgICBtb250aHM6ICd1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2lnX2FsX2FyX2F6X29nX29sX2xyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU0tRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVlba29dIE1NTSBEW2FdJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZ2F1cl0gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tiaWhhcl0gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbYXR6b10gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYXVycmVrb10gZGRkZCBMVFtldGFuXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGJhcnJ1JyxcbiAgICAgICAgICAgIHBhc3Q6ICdkdWVsYSAlcycsXG4gICAgICAgICAgICBzOiAnc2VndW5kbyBiYXR6dWsnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdtaW51dHUgYmF0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR1JyxcbiAgICAgICAgICAgIGg6ICdvcmR1IGJhdCcsXG4gICAgICAgICAgICBoaDogJyVkIG9yZHUnLFxuICAgICAgICAgICAgZDogJ2VndW4gYmF0JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZWd1bicsXG4gICAgICAgICAgICBNOiAnaGlsYWJldGUgYmF0JyxcbiAgICAgICAgICAgIE1NOiAnJWQgaGlsYWJldGUnLFxuICAgICAgICAgICAgeTogJ3VydGUgYmF0JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdXJ0ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUGVyc2lhbiBbZmFdXG4vLyEgYXV0aG9yIDogRWJyYWhpbSBCeWFnb3dpIDogaHR0cHM6Ly9naXRodWIuY29tL2VicmFtaW5pb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfbsScsXG4gICAgICAgICAgICAyOiAn27InLFxuICAgICAgICAgICAgMzogJ9uzJyxcbiAgICAgICAgICAgIDQ6ICfbtCcsXG4gICAgICAgICAgICA1OiAn27UnLFxuICAgICAgICAgICAgNjogJ9u2JyxcbiAgICAgICAgICAgIDc6ICfbtycsXG4gICAgICAgICAgICA4OiAn27gnLFxuICAgICAgICAgICAgOTogJ9u5JyxcbiAgICAgICAgICAgIDA6ICfbsCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfbsSc6ICcxJyxcbiAgICAgICAgICAgICfbsic6ICcyJyxcbiAgICAgICAgICAgICfbsyc6ICczJyxcbiAgICAgICAgICAgICfbtCc6ICc0JyxcbiAgICAgICAgICAgICfbtSc6ICc1JyxcbiAgICAgICAgICAgICfbtic6ICc2JyxcbiAgICAgICAgICAgICfbtyc6ICc3JyxcbiAgICAgICAgICAgICfbuCc6ICc4JyxcbiAgICAgICAgICAgICfbuSc6ICc5JyxcbiAgICAgICAgICAgICfbsCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBmYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZhJywge1xuICAgICAgICBtb250aHM6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDpcbiAgICAgICAgICAgICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn24xf2K9f2LNf2oZf2b5f2Kxf2LQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2YLYqNmEINin2LIg2LjZh9ixfNio2LnYryDYp9iyINi42YfYsS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC/YqNi52K8g2KfYsiDYuNmH2LEvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YLYqNmEINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNi52K8g2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mF2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9mB2LHYr9inINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9iz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9iv24zYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2b7bjNi0XSBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2K/YsSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2b7bjNi0JyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2KvYp9mG24zZhycsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgbTogJ9uM2qkg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLbjNmC2YcnLFxuICAgICAgICAgICAgaDogJ9uM2qkg2LPYp9i52KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYqicsXG4gICAgICAgICAgICBkOiAn24zaqSDYsdmI2LInLFxuICAgICAgICAgICAgZGQ6ICclZCDYsdmI2LInLFxuICAgICAgICAgICAgTTogJ9uM2qkg2YXYp9mHJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9mHJyxcbiAgICAgICAgICAgIHk6ICfbjNqpINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vbsC3buV0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3ZhS8sXG4gICAgICAgIG9yZGluYWw6ICclZNmFJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGaW5uaXNoIFtmaV1cbi8vISBhdXRob3IgOiBUYXJtbyBBaWRhbnRhdXN0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ibGVhZG9mXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc1Bhc3QgPVxuICAgICAgICAgICAgJ25vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8Okbicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJyAnXG4gICAgICAgICAgICApLFxuICAgICAgICBudW1iZXJzRnV0dXJlID0gW1xuICAgICAgICAgICAgJ25vbGxhJyxcbiAgICAgICAgICAgICd5aGRlbicsXG4gICAgICAgICAgICAna2FoZGVuJyxcbiAgICAgICAgICAgICdrb2xtZW4nLFxuICAgICAgICAgICAgJ25lbGrDpG4nLFxuICAgICAgICAgICAgJ3ZpaWRlbicsXG4gICAgICAgICAgICAna3V1ZGVuJyxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzddLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOF0sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs5XSxcbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtdXV0YW1hbiBzZWt1bm5pbicgOiAnbXV1dGFtYSBzZWt1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdzZWt1bm5pbicgOiAnc2VrdW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpMOkJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXNpJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXR0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW9zaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW90dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSArICcgJyArIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciA8IDEwXG4gICAgICAgICAgICA/IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgPyBudW1iZXJzRnV0dXJlW251bWJlcl1cbiAgICAgICAgICAgICAgICA6IG51bWJlcnNQYXN0W251bWJlcl1cbiAgICAgICAgICAgIDogbnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpJywge1xuICAgICAgICBtb250aHM6ICd0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2Vzw6RfaGVpbsOkX2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTVt0YV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbDogJ0QuTS5ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRG8gTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3TDpG7DpMOkbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1todW9tZW5uYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZWlsZW5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHDDpMOkc3TDpCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2l0dGVuJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGaWxpcGlubyBbZmlsXVxuLy8hIGF1dGhvciA6IERhbiBIYWdtYW4gOiBodHRwczovL2dpdGh1Yi5jb20vaGFnbWFuZGFuXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0aGV3ZGVlY29cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmaWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaWwnLCB7XG4gICAgICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfTHVfTWFfTWlfSHVfQmlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgICAgICB5OiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZhcm9lc2UgW2ZvXVxuLy8hIGF1dGhvciA6IFJhZ25hciBKb2hhbm5lc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ25hcjEyM1xuLy8hIGF1dGhvciA6IEtyaXN0aWFuIFNha2FyaXNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vc2FrYXJpc3NvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGZvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZm8nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByw61sX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udWRhZ3VyX23DoW5hZGFndXJfdMO9c2RhZ3VyX21pa3VkYWd1cl9ow7NzZGFndXJfZnLDrWdnamFkYWd1cl9sZXlnYXJkYWd1cicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3VuX23DoW5fdMO9c19taWtfaMOzc19mcsOtX2xleScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tw6FfdMO9X21pX2jDs19mcl9sZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbw40gZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vDjSBtb3JnaW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vDjSBnasOhciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3PDrcOwc3R1XSBkZGRkIFtrbF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd1bSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc8Otw7BhbmknLFxuICAgICAgICAgICAgczogJ2bDoSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRpcicsXG4gICAgICAgICAgICBtOiAnZWluIG1pbnV0dHVyJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0aXInLFxuICAgICAgICAgICAgaDogJ2VpbiB0w61taScsXG4gICAgICAgICAgICBoaDogJyVkIHTDrW1hcicsXG4gICAgICAgICAgICBkOiAnZWluIGRhZ3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTTogJ2VpbiBtw6FuYcOwdXInLFxuICAgICAgICAgICAgTU06ICclZCBtw6FuYcOwaXInLFxuICAgICAgICAgICAgeTogJ2VpdHQgw6FyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6FyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmVuY2ggKENhbmFkYSkgW2ZyLWNhXVxuLy8hIGF1dGhvciA6IEpvbmF0aGFuIEFib3VyYmloIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmJjYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGZyQ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmci1jYScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbTogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGg6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmckNhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoU3dpdHplcmxhbmQpIFtmci1jaF1cbi8vISBhdXRob3IgOiBHYXNwYXJkIEJ1Y2hlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXNwYXJkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZnJDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNoJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmVuY2ggW2ZyXVxuLy8hIGF1dGhvciA6IEpvaG4gRmlzY2hlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qZnJvZmZpY2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvXihqYW52aWVyfGbDqXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb8O7dHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkw6ljZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXggPVxuICAgICAgICAgICAgLyhqYW52XFwuP3xmw6l2clxcLj98bWFyc3xhdnJcXC4/fG1haXxqdWlufGp1aWxcXC4/fGFvw7t0fHNlcHRcXC4/fG9jdFxcLj98bm92XFwuP3xkw6ljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgLyhqYW52XFwuP3xmw6l2clxcLj98bWFyc3xhdnJcXC4/fG1haXxqdWlufGp1aWxcXC4/fGFvw7t0fHNlcHRcXC4/fG9jdFxcLj98bm92XFwuP3xkw6ljXFwuP3xqYW52aWVyfGbDqXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb8O7dHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkw6ljZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW52L2ksXG4gICAgICAgICAgICAvXmbDqXZyL2ksXG4gICAgICAgICAgICAvXm1hcnMvaSxcbiAgICAgICAgICAgIC9eYXZyL2ksXG4gICAgICAgICAgICAvXm1haS9pLFxuICAgICAgICAgICAgL15qdWluL2ksXG4gICAgICAgICAgICAvXmp1aWwvaSxcbiAgICAgICAgICAgIC9eYW/Du3QvaSxcbiAgICAgICAgICAgIC9ec2VwdC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmTDqWMvaSxcbiAgICAgICAgXTtcblxuICAgIHZhciBmciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiBtb250aHNTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogbW9udGhzU2hvcnRTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgdzogJ3VuZSBzZW1haW5lJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYWluZXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnwpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFJldHVybiAnZScgd2hlbiBkYXkgb2YgbW9udGggPiAxLiBNb3ZlIHRoaXMgY2FzZSBpbnNpZGVcbiAgICAgICAgICAgICAgICAvLyBibG9jayBmb3IgbWFzY3VsaW5lIHdvcmRzIGJlbG93LlxuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMzM3NVxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmlzaWFuIFtmeV1cbi8vISBhdXRob3IgOiBSb2JpbiB2YW4gZGVyIFZsaWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmluMHZhbjBkZXIwdlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzJy5zcGxpdCgnXycpO1xuXG4gICAgdmFyIGZ5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnknLCB7XG4gICAgICAgIG1vbnRoczogJ2phbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3NuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NpX01vX1RpX1dvX1RvX0ZyX1NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toam9lZCBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb2FybiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW8O0ZnLDu25lXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGx5bicsXG4gICAgICAgICAgICBzOiAnaW4gcGVhciBzZWtvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGVuJyxcbiAgICAgICAgICAgIG06ICdpZW4gbWluw7p0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnaWVuIG9lcmUnLFxuICAgICAgICAgICAgaGg6ICclZCBvZXJlbicsXG4gICAgICAgICAgICBkOiAnaWVuIGRlaScsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE06ICdpZW4gbW9hbm5lJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9hbm5lbicsXG4gICAgICAgICAgICB5OiAnaWVuIGppZXInLFxuICAgICAgICAgICAgeXk6ICclZCBqaWVycmVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZ5O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IElyaXNoIG9yIElyaXNoIEdhZWxpYyBbZ2FdXG4vLyEgYXV0aG9yIDogQW5kcsOpIFNpbHZhIDogaHR0cHM6Ly9naXRodWIuY29tL2Fza3B0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ0VhbsOhaXInLFxuICAgICAgICAgICAgJ0ZlYWJocmEnLFxuICAgICAgICAgICAgJ03DoXJ0YScsXG4gICAgICAgICAgICAnQWlicmXDoW4nLFxuICAgICAgICAgICAgJ0JlYWx0YWluZScsXG4gICAgICAgICAgICAnTWVpdGhlYW1oJyxcbiAgICAgICAgICAgICdJw7ppbCcsXG4gICAgICAgICAgICAnTMO6bmFzYScsXG4gICAgICAgICAgICAnTWXDoW4gRsOzbWhhaXInLFxuICAgICAgICAgICAgJ0RlaXJlYWRoIEbDs21oYWlyJyxcbiAgICAgICAgICAgICdTYW1oYWluJyxcbiAgICAgICAgICAgICdOb2xsYWlnJyxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSBbXG4gICAgICAgICAgICAnRWFuJyxcbiAgICAgICAgICAgICdGZWFiaCcsXG4gICAgICAgICAgICAnTcOhcnQnLFxuICAgICAgICAgICAgJ0FpYicsXG4gICAgICAgICAgICAnQmVhbCcsXG4gICAgICAgICAgICAnTWVpdGgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puJyxcbiAgICAgICAgICAgICdNLkYuJyxcbiAgICAgICAgICAgICdELkYuJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdOb2xsJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXMgPSBbXG4gICAgICAgICAgICAnRMOpIERvbWhuYWlnaCcsXG4gICAgICAgICAgICAnRMOpIEx1YWluJyxcbiAgICAgICAgICAgICdEw6kgTcOhaXJ0JyxcbiAgICAgICAgICAgICdEw6kgQ8OpYWRhb2luJyxcbiAgICAgICAgICAgICdEw6lhcmRhb2luJyxcbiAgICAgICAgICAgICdEw6kgaEFvaW5lJyxcbiAgICAgICAgICAgICdEw6kgU2F0aGFpcm4nLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEb21oJywgJ0x1YW4nLCAnTcOhaXJ0JywgJ0PDqWFkJywgJ0TDqWFyJywgJ0FvaW5lJywgJ1NhdGgnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0RvJywgJ0x1JywgJ03DoScsICdDw6knLCAnRMOpJywgJ0EnLCAnU2EnXTtcblxuICAgIHZhciBnYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dhJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJbm5pdSBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbcOhcmFjaCBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbm7DqSBhZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDsyBzaGluJyxcbiAgICAgICAgICAgIHM6ICdjw7pwbGEgc29pY2luZCcsXG4gICAgICAgICAgICBzczogJyVkIHNvaWNpbmQnLFxuICAgICAgICAgICAgbTogJ27Ds2ltw6lhZCcsXG4gICAgICAgICAgICBtbTogJyVkIG7Ds2ltw6lhZCcsXG4gICAgICAgICAgICBoOiAndWFpciBhbiBjaGxvaWcnLFxuICAgICAgICAgICAgaGg6ICclZCB1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBkOiAnbMOhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbMOhJyxcbiAgICAgICAgICAgIE06ICdtw60nLFxuICAgICAgICAgICAgTU06ICclZCBtw61vbm5hJyxcbiAgICAgICAgICAgIHk6ICdibGlhaW4nLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhaW4nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZHxuYXxtaCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbnVtYmVyID09PSAxID8gJ2QnIDogbnVtYmVyICUgMTAgPT09IDIgPyAnbmEnIDogJ21oJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTY290dGlzaCBHYWVsaWMgW2dkXVxuLy8hIGF1dGhvciA6IEpvbiBBc2hkb3duIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmFzaGRvd25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAnQW0gRmFvaWxsZWFjaCcsXG4gICAgICAgICAgICAnQW4gR2VhcnJhbicsXG4gICAgICAgICAgICAnQW0gTcOgcnQnLFxuICAgICAgICAgICAgJ0FuIEdpYmxlYW4nLFxuICAgICAgICAgICAgJ0FuIEPDqGl0ZWFuJyxcbiAgICAgICAgICAgICdBbiB0LcOSZ21oaW9zJyxcbiAgICAgICAgICAgICdBbiB0LUl1Y2hhcicsXG4gICAgICAgICAgICAnQW4gTMO5bmFzdGFsJyxcbiAgICAgICAgICAgICdBbiB0LVN1bHRhaW4nLFxuICAgICAgICAgICAgJ0FuIETDoG1oYWlyJyxcbiAgICAgICAgICAgICdBbiB0LVNhbWhhaW4nLFxuICAgICAgICAgICAgJ0FuIETDuWJobGFjaGQnLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNTaG9ydCA9IFtcbiAgICAgICAgICAgICdGYW9pJyxcbiAgICAgICAgICAgICdHZWFyJyxcbiAgICAgICAgICAgICdNw6BydCcsXG4gICAgICAgICAgICAnR2libCcsXG4gICAgICAgICAgICAnQ8OoaXQnLFxuICAgICAgICAgICAgJ8OSZ21oJyxcbiAgICAgICAgICAgICdJdWNoJyxcbiAgICAgICAgICAgICdMw7luJyxcbiAgICAgICAgICAgICdTdWx0JyxcbiAgICAgICAgICAgICdEw6BtaCcsXG4gICAgICAgICAgICAnU2FtaCcsXG4gICAgICAgICAgICAnRMO5YmgnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICdEaWTDsm1obmFpY2gnLFxuICAgICAgICAgICAgJ0RpbHVhaW4nLFxuICAgICAgICAgICAgJ0RpbcOgaXJ0JyxcbiAgICAgICAgICAgICdEaWNpYWRhaW4nLFxuICAgICAgICAgICAgJ0RpYXJkYW9pbicsXG4gICAgICAgICAgICAnRGloYW9pbmUnLFxuICAgICAgICAgICAgJ0Rpc2F0aGFpcm5lJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA9IFsnRGlkJywgJ0RpbCcsICdEaW0nLCAnRGljJywgJ0RpYScsICdEaWgnLCAnRGlzJ10sXG4gICAgICAgIHdlZWtkYXlzTWluID0gWydEw7InLCAnTHUnLCAnTcOgJywgJ0NpJywgJ0FyJywgJ0hhJywgJ1NhJ107XG5cbiAgICB2YXIgZ2QgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnZCcsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiB3ZWVrZGF5c1Nob3J0LFxuICAgICAgICB3ZWVrZGF5c01pbjogd2Vla2RheXNNaW4sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQW4tZGl1Z2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0EtbcOgaXJlYWNoIGFpZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthaWddIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbQW4tZMOoIGFpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW8gY2hhaWRoXSBbYWlnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2FubiBhbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnYmhvIGNoaW9ubiAlcycsXG4gICAgICAgICAgICBzOiAnYmVhZ2FuIGRpb2dhbicsXG4gICAgICAgICAgICBzczogJyVkIGRpb2dhbicsXG4gICAgICAgICAgICBtOiAnbWlvbmFpZCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pb25haWRlYW4nLFxuICAgICAgICAgICAgaDogJ3VhaXInLFxuICAgICAgICAgICAgaGg6ICclZCB1YWlyZWFuJyxcbiAgICAgICAgICAgIGQ6ICdsYXRoYScsXG4gICAgICAgICAgICBkZDogJyVkIGxhdGhhJyxcbiAgICAgICAgICAgIE06ICdtw6xvcycsXG4gICAgICAgICAgICBNTTogJyVkIG3DrG9zYW4nLFxuICAgICAgICAgICAgeTogJ2JsaWFkaG5hJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYmxpYWRobmEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZHxuYXxtaCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbnVtYmVyID09PSAxID8gJ2QnIDogbnVtYmVyICUgMTAgPT09IDIgPyAnbmEnIDogJ21oJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnZDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHYWxpY2lhbiBbZ2xdXG4vLyEgYXV0aG9yIDogSnVhbiBHLiBIdXJ0YWRvIDogaHR0cHM6Ly9naXRodWIuY29tL2p1YW5naHVydGFkb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGdsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2wnLCB7XG4gICAgICAgIG1vbnRoczogJ3hhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dcOxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAneGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1w7EuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZG9taW5nb19sdW5zX21hcnRlc19tw6lyY29yZXNfeG92ZXNfdmVucmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tw6lyLl94b3YuX3Zlbi5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3hlICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDscOhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW29udGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6EnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbb10gZGRkZCBbcGFzYWRvICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnYScpICsgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHN0cikge1xuICAgICAgICAgICAgICAgIGlmIChzdHIuaW5kZXhPZigndW4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ24nICsgc3RyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuICcgKyBzdHI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogJ2hhaSAlcycsXG4gICAgICAgICAgICBzOiAndW5zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuaGEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb25rYW5pIERldmFuYWdhcmkgc2NyaXB0IFtnb20tZGV2YV1cbi8vISBhdXRob3IgOiBUaGUgRGlzY292ZXJlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpRGlzY292ZXJlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsn4KSl4KWL4KSh4KSv4KS+IOCkuOClheCkleCkguCkoeCkvuCkguCkqOClgCcsICfgpKXgpYvgpKHgpYcg4KS44KWF4KSV4KSC4KShJ10sXG4gICAgICAgICAgICBzczogW251bWJlciArICcg4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIG06IFsn4KSP4KSV4KS+IOCkruCkv+Cko+Ckn+CkvuCkqCcsICfgpI/gpJUg4KSu4KS/4KSo4KWC4KSfJ10sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcg4KSu4KS/4KSj4KSf4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpIInXSxcbiAgICAgICAgICAgIGg6IFsn4KSP4KSV4KS+IOCkteCksOCkvuCkqCcsICfgpI/gpJUg4KS14KSwJ10sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcg4KS14KSw4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpL7gpIInXSxcbiAgICAgICAgICAgIGQ6IFsn4KSP4KSV4KS+IOCkpuCkv+CkuOCkvuCkqCcsICfgpI/gpJUg4KSm4KWA4KS4J10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcg4KSm4KS/4KS44KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIE06IFsn4KSP4KSV4KS+IOCkruCljeCkueCkr+CkqOCljeCkr+CkvuCkqCcsICfgpI/gpJUg4KSu4KWN4KS54KSv4KSo4KWLJ10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcg4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSo4KWAJywgbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpYcnXSxcbiAgICAgICAgICAgIHk6IFsn4KSP4KSV4KS+IOCkteCksOCljeCkuOCkvuCkqCcsICfgpI/gpJUg4KS14KSw4KWN4KS4J10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcg4KS14KSw4KWN4KS44KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpIInXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZ29tRGV2YSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dvbS1kZXZhJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgOCksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCkr1/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSu4KS+4KSw4KWN4KSa4KS+4KSa4KWN4KSv4KS+X+Ckj+CkquCljeCksOClgOCksuCkvuCkmuCljeCkr+Ckvl/gpK7gpYfgpK/gpL7gpJrgpY3gpK/gpL5f4KSc4KWC4KSo4KS+4KSa4KWN4KSv4KS+X+CknOClgeCksuCkr+CkvuCkmuCljeCkr+Ckvl/gpJHgpJfgpLjgpY3gpJ/gpL7gpJrgpY3gpK/gpL5f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkkeCkleCljeCkn+Cli+CkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSh4KS/4KS44KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL01NTU0oXFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgC5f4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLIuX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CkhuCkr+CkpOCkvuCksF/gpLjgpYvgpK7gpL7gpLBf4KSu4KSC4KSX4KSz4KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpKzgpL/gpLDgpYfgpLjgpY3gpKTgpL7gpLBf4KS44KWB4KSV4KWN4KSw4KS+4KSwX+CktuClh+CkqOCkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CkhuCkr+CkpC5f4KS44KWL4KSuLl/gpK7gpILgpJfgpLMuX+CkrOClgeCkpy5f4KSs4KWN4KSw4KWH4KS44KWN4KSkLl/gpLjgpYHgpJXgpY3gpLAuX+CktuClh+CkqC4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSGX+CkuOCli1/gpK7gpIJf4KSs4KWBX+CkrOCljeCksOClh1/gpLjgpYFf4KS24KWHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MgW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpK/gpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSr4KS+4KSy4KWN4KSv4KS+4KSCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgpKvgpYHgpKHgpLLgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpL7gpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Ckq+CkvuCkn+CksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpIbgpKbgpYDgpIInLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o4KS14KWH4KSwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JkaW5hbCAn4KS14KWH4KSwJyBvbmx5IGFwcGxpZXMgdG8gZGF5IG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CkteClh+CksCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXG4gICAgICAgICAgICBkb3k6IDMsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciAoNyArIDAgLSA0KVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KWAfOCkuOCkleCkvuCks+ClgOCkgnzgpKbgpKjgpKrgpL7gpLDgpL7gpIJ84KS44KS+4KSC4KSc4KWHLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KSV4KS+4KSz4KWA4KSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCkqOCkquCkvuCksOCkvuCkgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpILgpJzgpYcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYDgpIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuCkqOCkquCkvuCksOCkvuCkgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSC4KSc4KWHJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpYAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdvbURldmE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS29ua2FuaSBMYXRpbiBzY3JpcHQgW2dvbS1sYXRuXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyd0aG9kZGVhIHNla29uZGFtbmknLCAndGhvZGRlIHNla29uZCddLFxuICAgICAgICAgICAgc3M6IFtudW1iZXIgKyAnIHNla29uZGFtbmknLCBudW1iZXIgKyAnIHNla29uZCddLFxuICAgICAgICAgICAgbTogWydla2EgbWludGFuJywgJ2VrIG1pbnV0J10sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcgbWludGFtbmknLCBudW1iZXIgKyAnIG1pbnRhbSddLFxuICAgICAgICAgICAgaDogWydla2Egdm9yYW4nLCAnZWsgdm9yJ10sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcgdm9yYW1uaScsIG51bWJlciArICcgdm9yYW0nXSxcbiAgICAgICAgICAgIGQ6IFsnZWthIGRpc2FuJywgJ2VrIGRpcyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIGRpc2FtbmknLCBudW1iZXIgKyAnIGRpcyddLFxuICAgICAgICAgICAgTTogWydla2EgbWhvaW5lYW4nLCAnZWsgbWhvaW5vJ10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgbWhvaW5lYW1uaScsIG51bWJlciArICcgbWhvaW5lJ10sXG4gICAgICAgICAgICB5OiBbJ2VrYSB2b3JzYW4nLCAnZWsgdm9yb3MnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyB2b3JzYW1uaScsIG51bWJlciArICcgdm9yc2FtJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZSA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGdvbUxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnb20tbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ0phbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6IFwiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhclwiLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0FpX1NtX01vX0J1X0JyX1N1X1NuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyBbdmF6dGFdJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQWl6XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ZhbGVhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbRnVkZGxvXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2FsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tGYXR0bG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWRpbScsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcikvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yZGluYWwgJ2VyJyBvbmx5IGFwcGxpZXMgdG8gZGF5IG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ2VyJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgICAgIGRveTogMywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyICg3ICsgMCAtIDQpXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncmF0aScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3Nva2FsbGltJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2RvbnBhcmFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID4gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NhbmplJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3JhdGknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Nva2FsbGltJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb25wYXJhbSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc2FuamUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3JhdGknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdvbUxhdG47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR3VqYXJhdGkgW2d1XVxuLy8hIGF1dGhvciA6IEthdXNoaWsgVGhhbmtpIDogaHR0cHM6Ly9naXRodWIuY29tL0thdXNoaWsxOTg3XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CrpycsXG4gICAgICAgICAgICAyOiAn4KuoJyxcbiAgICAgICAgICAgIDM6ICfgq6knLFxuICAgICAgICAgICAgNDogJ+CrqicsXG4gICAgICAgICAgICA1OiAn4KurJyxcbiAgICAgICAgICAgIDY6ICfgq6wnLFxuICAgICAgICAgICAgNzogJ+CrrScsXG4gICAgICAgICAgICA4OiAn4KuuJyxcbiAgICAgICAgICAgIDk6ICfgq68nLFxuICAgICAgICAgICAgMDogJ+CrpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgq6cnOiAnMScsXG4gICAgICAgICAgICAn4KuoJzogJzInLFxuICAgICAgICAgICAgJ+CrqSc6ICczJyxcbiAgICAgICAgICAgICfgq6onOiAnNCcsXG4gICAgICAgICAgICAn4KurJzogJzUnLFxuICAgICAgICAgICAgJ+CrrCc6ICc2JyxcbiAgICAgICAgICAgICfgq60nOiAnNycsXG4gICAgICAgICAgICAn4KuuJzogJzgnLFxuICAgICAgICAgICAgJ+Crryc6ICc5JyxcbiAgICAgICAgICAgICfgq6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgZ3UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdndScsIHtcbiAgICAgICAgbW9udGhzOiAn4Kqc4Kq+4Kqo4KuN4Kqv4KuB4KqG4Kqw4KuAX+Cqq+Crh+CqrOCrjeCqsOCrgeCqhuCqsOCrgF/gqq7gqr7gqrDgq43gqppf4KqP4Kqq4KuN4Kqw4Kq/4KqyX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+4KqIX+CqkeCql+CquOCrjeCqn1/gqrjgqqrgq43gqp/gq4fgqq7gq43gqqzgqrBf4KqR4KqV4KuN4Kqf4KuN4Kqs4KqwX+CqqOCqteCrh+CqruCrjeCqrOCqsF/gqqHgqr/gqrjgq4fgqq7gq43gqqzgqrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CqnOCqvuCqqOCrjeCqr+CrgS5f4Kqr4KuH4Kqs4KuN4Kqw4KuBLl/gqq7gqr7gqrDgq43gqppf4KqP4Kqq4KuN4Kqw4Kq/Ll/gqq7gq4df4Kqc4KuC4KqoX+CqnOCrgeCqsuCqvi5f4KqR4KqXLl/gqrjgqqrgq43gqp/gq4cuX+CqkeCqleCrjeCqn+CrjS5f4Kqo4Kq14KuHLl/gqqHgqr/gqrjgq4cuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4Kqw4Kq14Kq/4Kq14Kq+4KqwX+CquOCri+CqruCqteCqvuCqsF/gqq7gqoLgqpfgqrPgqrXgqr7gqrBf4Kqs4KuB4Kqn4KuN4Kq14Kq+4KqwX+Cql+CrgeCqsOCrgeCqteCqvuCqsF/gqrbgq4HgqpXgq43gqrDgqrXgqr7gqrBf4Kq24Kqo4Kq/4Kq14Kq+4KqwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kqw4Kq14Kq/X+CquOCri+Cqrl/gqq7gqoLgqpfgqrNf4Kqs4KuB4Kqn4KuNX+Cql+CrgeCqsOCrgV/gqrbgq4HgqpXgq43gqrBf4Kq24Kqo4Kq/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CqsF/gqrjgq4tf4Kqu4KqCX+CqrOCrgV/gqpfgq4Ff4Kq24KuBX+Cqticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KqG4KqcXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CqleCqvuCqsuCrh10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+Cql+Cqh+CqleCqvuCqsuCrh10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Kqq4Kq+4Kqb4Kqy4Kq+XSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCqruCqvicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4Kqq4Kq54KuH4Kqy4Kq+JyxcbiAgICAgICAgICAgIHM6ICfgqoXgqq7gq4HgqpUg4Kqq4Kqz4KuLJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Kq44KuH4KqV4KqC4KqhJyxcbiAgICAgICAgICAgIG06ICfgqo/gqpUg4Kqu4Kq/4Kqo4Kq/4KqfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kqu4Kq/4Kqo4Kq/4KqfJyxcbiAgICAgICAgICAgIGg6ICfgqo/gqpUg4KqV4Kqy4Kq+4KqVJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KqV4Kqy4Kq+4KqVJyxcbiAgICAgICAgICAgIGQ6ICfgqo/gqpUg4Kqm4Kq/4Kq14Kq4JyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kqm4Kq/4Kq14Kq4JyxcbiAgICAgICAgICAgIE06ICfgqo/gqpUg4Kqu4Kq54Kq/4Kqo4KuLJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kqu4Kq54Kq/4Kqo4KuLJyxcbiAgICAgICAgICAgIHk6ICfgqo/gqpUg4Kq14Kqw4KuN4Kq3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kq14Kqw4KuN4Kq3JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Crp+CrqOCrqeCrquCrq+CrrOCrreCrruCrr+Crpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gR3VqYXJhdGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gR3VqYXJhdGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gqrDgqr7gqqR84Kqs4Kqq4KuL4KqwfOCquOCqteCqvuCqsHzgqrjgqr7gqoLgqpwvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgqrDgqr7gqqQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqrjgqrXgqr7gqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kqs4Kqq4KuL4KqwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqrjgqr7gqoLgqpwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqw4Kq+4KqkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqrXgqr7gqrAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqrOCqquCri+CqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kq44Kq+4KqC4KqcJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSGVicmV3IFtoZV1cbi8vISBhdXRob3IgOiBUb21lciBDb2hlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS90b21lclxuLy8hIGF1dGhvciA6IE1vc2hlIFNpbWFudG92IDogaHR0cHM6Ly9naXRodWIuY29tL0RldmVsb3BtZW50SUxcbi8vISBhdXRob3IgOiBUYWwgQXRlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9UYWxBdGVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgaGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdoZScsIHtcbiAgICAgICAgbW9udGhzOiAn15nXoNeV15DXqF/XpNeR16jXldeQ16hf157XqNelX9eQ16TXqNeZ15xf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXkteV16HXmF/Xodek15jXnteR16hf15DXlden15jXldeR16hf16DXldeR157XkdeoX9eT16bXnteR16gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9eZ16DXldezX9ek15HXqNezX9ee16jXpV/XkNek16jXs1/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS17Nf16HXpNeY17Nf15DXlden17Nf16DXldeR17Nf15PXptee17MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn16jXkNep15XXn1/Xqdeg15lf16nXnNeZ16nXmV/XqNeR15nXoteZX9eX157Xmdep15lf16nXmdep15lf16nXkdeqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXsycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfXkF/XkV/Xkl/Xk1/XlF/XlV/XqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFvXkV1NTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBb15FdTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFvXkV1NTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vXlNeZ15XXnSDXkda+XUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb157Xl9eoINeR1r5dTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvXkdep16LXlF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vXkNeq157XldecINeR1r5dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb15HXmdeV151dIGRkZGQgW9eU15DXl9eo15XXnyDXkdep16LXlF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfXkdei15XXkyAlcycsXG4gICAgICAgICAgICBwYXN0OiAn15zXpNeg15kgJXMnLFxuICAgICAgICAgICAgczogJ9ee16HXpNeoINep16DXmdeV16onLFxuICAgICAgICAgICAgc3M6ICclZCDXqdeg15nXldeqJyxcbiAgICAgICAgICAgIG06ICfXk9en15QnLFxuICAgICAgICAgICAgbW06ICclZCDXk9en15XXqicsXG4gICAgICAgICAgICBoOiAn16nXoteUJyxcbiAgICAgICAgICAgIGhoOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9ep16LXqteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16LXldeqJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkOiAn15nXldedJyxcbiAgICAgICAgICAgIGRkOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9eZ15XXnteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeZ157XmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBNOiAn15fXldeT16knLFxuICAgICAgICAgICAgTU06IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn15fXldeT16nXmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXl9eV15PXqdeZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6ICfXqdeg15QnLFxuICAgICAgICAgICAgeXk6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn16nXoNeq15nXmdedJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciAlIDEwID09PSAwICYmIG51bWJlciAhPT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoNeUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoNeZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTpcbiAgICAgICAgICAgIC/XkNeX15RcItemfNec16TXoNeUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXnNek16DXmSDXlNem15TXqNeZ15nXnXzXnNek16DXldeqINeR15XXp9eofNeR15HXlden16h815HXoteo15EvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o15DXl9eUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXkdei16jXkSkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15zXpNeg15XXqiDXkdeV16fXqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15HXkdeV16fXqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9ec16TXoNeUXCLXpicgOiAn15zXpNeg15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfXkNeX15RcItemJyA6ICfXkNeX16jXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15HXoteo15EnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEhpbmRpIFtoaV1cbi8vISBhdXRob3IgOiBNYXlhbmsgU2luZ2hhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXlhbmtzaW5naGFsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL17gpJzgpKgvaSxcbiAgICAgICAgICAgIC9e4KSr4KS84KSwfOCkq+CksC9pLFxuICAgICAgICAgICAgL17gpK7gpL7gpLDgpY3gpJovaSxcbiAgICAgICAgICAgIC9e4KSF4KSq4KWN4KSw4KWIL2ksXG4gICAgICAgICAgICAvXuCkruCkiC9pLFxuICAgICAgICAgICAgL17gpJzgpYLgpKgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWB4KSyL2ksXG4gICAgICAgICAgICAvXuCkheCkly9pLFxuICAgICAgICAgICAgL17gpLjgpL/gpKTgpIJ84KS44KS/4KSkL2ksXG4gICAgICAgICAgICAvXuCkheCkleCljeCkn+Clgi9pLFxuICAgICAgICAgICAgL17gpKjgpLV84KSo4KS14KSCL2ksXG4gICAgICAgICAgICAvXuCkpuCkv+CkuOCkgnzgpKbgpL/gpLgvaSxcbiAgICAgICAgXSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9e4KSc4KSoL2ksXG4gICAgICAgICAgICAvXuCkq+CkvOCksC9pLFxuICAgICAgICAgICAgL17gpK7gpL7gpLDgpY3gpJovaSxcbiAgICAgICAgICAgIC9e4KSF4KSq4KWN4KSw4KWIL2ksXG4gICAgICAgICAgICAvXuCkruCkiC9pLFxuICAgICAgICAgICAgL17gpJzgpYLgpKgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWB4KSyL2ksXG4gICAgICAgICAgICAvXuCkheCkly9pLFxuICAgICAgICAgICAgL17gpLjgpL/gpKQvaSxcbiAgICAgICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgICAgICAvXuCkqOCktS9pLFxuICAgICAgICAgICAgL17gpKbgpL/gpLgvaSxcbiAgICAgICAgXTtcblxuICAgIHZhciBoaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hpJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ+CknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfgpJzgpKjgpLXgpLDgpYBf4KSr4KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkguCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSC4KSs4KSwX+CkpuCkv+CkuOCkguCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CknOCkqC5f4KSr4KS84KSwLl/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWILl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksi5f4KSF4KSXLl/gpLjgpL/gpKQuX+CkheCkleCljeCkn+Clgi5f4KSo4KS1Ll/gpKbgpL/gpLguJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSyX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpLBf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSX4KWBX+CktuClgV/gpLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCkrOCknOClhycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBzaG9ydE1vbnRoc1BhcnNlLFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKjgpLXgpLDgpYB84KSc4KSoXFwuP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAfOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIfOCknOClgeCkslxcLj984KSF4KSX4KS44KWN4KSkfOCkheCkl1xcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLB84KSo4KS1XFwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFxcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKjgpLXgpLDgpYA/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYA/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIP3zgpIXgpJfgpLjgpY3gpKQ/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkP1xcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksD984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksD8pL2ksXG5cbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqFxcLj984KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCkslxcLj984KSF4KSXXFwuP3zgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClglxcLj984KSo4KS1XFwuP3zgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpJXgpLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CkquCkv+Ckm+CksuClh10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpK7gpYfgpIInLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkquCkueCksuClhycsXG4gICAgICAgICAgICBzOiAn4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICAgICAgc3M6ICclZCDgpLjgpYfgpJXgpILgpKEnLFxuICAgICAgICAgICAgbTogJ+Ckj+CklSDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgbW06ICclZCDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgaDogJ+Ckj+CklSDgpJjgpILgpJ/gpL4nLFxuICAgICAgICAgICAgaGg6ICclZCDgpJjgpILgpJ/gpYcnLFxuICAgICAgICAgICAgZDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgTTogJ+Ckj+CklSDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgTU06ICclZCDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgeTogJ+Ckj+CklSDgpLXgpLDgpY3gpLcnLFxuICAgICAgICAgICAgeXk6ICclZCDgpLXgpLDgpY3gpLcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBIaW5kaSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBIaW5kaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpHzgpLjgpYHgpKzgpLl84KSm4KWL4KSq4KS54KSwfOCktuCkvuCkri8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOClgeCkrOCkuScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpYvgpKrgpLngpLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CktuCkvuCkricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOClgeCkrOCkuSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWL4KSq4KS54KSwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLbgpL7gpK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBoaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDcm9hdGlhbiBbaHJdXG4vLyEgYXV0aG9yIDogQm9qYW4gTWFya292acSHIDogaHR0cHM6Ly9naXRodWIuY29tL2JtYXJrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHInLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2lqZcSNYW5qX3ZlbGphxI1hX2/FvnVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnc2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWx1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSHVuZ2FyaWFuIFtodV1cbi8vISBhdXRob3IgOiBBZGFtIEJydW5uZXIgOiBodHRwczovL2dpdGh1Yi5jb20vYWRhbWJydW5uZXJcbi8vISBhdXRob3IgOiBQZXRlciBWaXN6dCAgOiBodHRwczovL2dpdGh1Yi5jb20vcGFzc2F0Z3RcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB3ZWVrRW5kaW5ncyA9XG4gICAgICAgICd2YXPDoXJuYXAgaMOpdGbFkW4ga2VkZGVuIHN6ZXJkw6FuIGNzw7x0w7ZydMO2a8O2biBww6ludGVrZW4gc3pvbWJhdG9uJy5zcGxpdCgnICcpO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bSA9IG51bWJlcjtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgID8gJ27DqWjDoW55IG3DoXNvZHBlcmMnXG4gICAgICAgICAgICAgICAgICAgIDogJ27DqWjDoW55IG3DoXNvZHBlcmNlJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXgpXG4gICAgICAgICAgICAgICAgICAgID8gJyBtw6Fzb2RwZXJjJ1xuICAgICAgICAgICAgICAgICAgICA6ICcgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOzcmEnIDogJyDDs3LDoWphJyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIG5hcCcgOiAnIG5hcGphJyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIGjDs25hcCcgOiAnIGjDs25hcGphJyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Vlayhpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGlzRnV0dXJlID8gJycgOiAnW23Dumx0XSAnKSArXG4gICAgICAgICAgICAnWycgK1xuICAgICAgICAgICAgd2Vla0VuZGluZ3NbdGhpcy5kYXkoKV0gK1xuICAgICAgICAgICAgJ10gTFRbLWtvcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGh1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnXDoXJfZmVicnXDoXJfbcOhcmNpdXNfw6FwcmlsaXNfbcOhanVzX2rDum5pdXNfasO6bGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX23DoXJjLl/DoXByLl9tw6FqLl9qw7puLl9qw7psLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3Zhc8Ohcm5hcF9ow6l0ZsWRX2tlZGRfc3plcmRhX2Nzw7x0w7ZydMO2a19ww6ludGVrX3N6b21iYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd2YXNfaMOpdF9rZWRkX3N6ZV9jc8O8dF9ww6luX3N6bycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd2X2hfa19zemVfY3NfcF9zem8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZLiBNTU1NIEQuJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkuIE1NTU0gRC4gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RlfGR1L2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAndSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZGUnIDogJ0RFJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZHUnIDogJ0RVJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbWFdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaG9sbmFwXSBMVFsta29yXScsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrLmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t0ZWduYXBdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBtw7psdmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBodTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcm1lbmlhbiBbaHktYW1dXG4vLyEgYXV0aG9yIDogQXJtZW5kYXJhYnlhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcm1lbmRhcmFieWFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgaHlBbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h5LWFtJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9Ww1bjWgtW21b7VodaA1atf1oPVpdW/1oDVvtWh1oDVq1/VtNWh1oDVv9WrX9Wh1brWgNWr1azVq1/VtNWh1bXVq9W91atf1bDVuNaC1bbVq9W91atf1bDVuNaC1azVq9W91atf1oXVo9W41b3Vv9W41b3Vq1/VvdWl1brVv9Wl1bTVotWl1oDVq1/VsNW41a/Vv9Wl1bTVotWl1oDVq1/VttW41bXVpdW01aLVpdaA1atf1aTVpdWv1b/VpdW01aLVpdaA1asnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9Ww1bjWgtW21b7VodaAX9aD1aXVv9aA1b7VodaAX9W01aHWgNW/X9Wh1brWgNWr1axf1bTVodW11avVvV/VsNW41oLVttWr1b1f1bDVuNaC1azVq9W9X9aF1aPVuNW91b/VuNW9X9W91aXVutW/1aXVtNWi1aXWgF/VsNW41a/Vv9Wl1bTVotWl1oBf1bbVuNW11aXVtNWi1aXWgF/VpNWl1a/Vv9Wl1bTVotWl1oAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9Ww1bbVvl/Wg9W/1oBf1bTWgNW/X9Wh1brWgF/VtNW11b1f1bDVttW9X9Ww1azVvV/WhdWj1b1f1b3VutW/X9Ww1a/Vv1/VttW01aJf1aTVr9W/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfVr9Wr1oDVodWv1atf1aXWgNWv1bjWgtW31aHVotWp1atf1aXWgNWl1oTVt9Wh1aLVqdWrX9W51bjWgNWl1oTVt9Wh1aLVqdWrX9Ww1avVttWj1bfVodWi1anVq1/VuNaC1oDVotWh1alf1bfVodWi1aHVqScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1aknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1aknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg1akuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vVodW11b3WhdaAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9W+1aHVstWoXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Wl1oDVpdWvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBb1oXWgNWoINWq1aHVtNWoXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vVodW21oHVodWuXSBkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINWw1aXVv9W4JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDVodW81aHVuycsXG4gICAgICAgICAgICBzOiAn1bTVqyDWhNWh1bbVqyDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIHNzOiAnJWQg1b7VodW11oDVr9W11aHVticsXG4gICAgICAgICAgICBtOiAn1oDVuNW61aUnLFxuICAgICAgICAgICAgbW06ICclZCDWgNW41brVpScsXG4gICAgICAgICAgICBoOiAn1arVodW0JyxcbiAgICAgICAgICAgIGhoOiAnJWQg1arVodW0JyxcbiAgICAgICAgICAgIGQ6ICfWhdaAJyxcbiAgICAgICAgICAgIGRkOiAnJWQg1oXWgCcsXG4gICAgICAgICAgICBNOiAn1aHVtNWr1b0nLFxuICAgICAgICAgICAgTU06ICclZCDVodW01avVvScsXG4gICAgICAgICAgICB5OiAn1b/VodaA1asnLFxuICAgICAgICAgICAgeXk6ICclZCDVv9Wh1oDVqycsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Vo9Wr1bfVpdaA1b7VoXzVodW81aHVvtW41b/VvtWhfNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijWgdWl1oDVpdWv1b7VoXzVpdaA1aXVr9W41bXVodW2KSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aPVq9W31aXWgNW+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wh1bzVodW+1bjVv9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9aB1aXWgNWl1a/VvtWhJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVpdaA1aXVr9W41bXVodW2JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9fFxcZHsxLDJ9LSjVq9W2fNaA1aQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREbyc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdWr1bYnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdaA1aQnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBoeUFtO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEluZG9uZXNpYW4gW2lkXVxuLy8hIGF1dGhvciA6IE1vaGFtbWFkIFNhdHJpbyBVdG9tbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS90eW9rXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vaWQud2lraXNvdXJjZS5vcmcvd2lraS9QZWRvbWFuX1VtdW1fRWphYW5fQmFoYXNhX0luZG9uZXNpYV95YW5nX0Rpc2VtcHVybmFrYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBpZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lkJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdNaW5fU2VuX1NlbF9SYWJfS2FtX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTWdfU25fU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NpYW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb3JlJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc2lhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb3JlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Jlc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGFsdSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsYWx1JyxcbiAgICAgICAgICAgIHM6ICdiZWJlcmFwYSBkZXRpaycsXG4gICAgICAgICAgICBzczogJyVkIGRldGlrJyxcbiAgICAgICAgICAgIG06ICdzZW1lbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpZDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJY2VsYW5kaWMgW2lzXVxuLy8hIGF1dGhvciA6IEhpbnJpayDDlnJuIFNpZ3Vyw7Bzc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2hpbnJpa1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgaWYgKG4gJSAxMDAgPT09IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChuICUgMTAgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPyAnbm9ra3JhciBzZWvDum5kdXInXG4gICAgICAgICAgICAgICAgICAgIDogJ25va2tydW0gc2Vrw7puZHVtJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArXG4gICAgICAgICAgICAgICAgICAgICAgICAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWvDum5kdXInIDogJ3Nla8O6bmR1bScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2Vrw7puZGEnO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbcOtbsO6dGEnIDogJ23DrW7DunR1JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ23DrW7DunR1cicgOiAnbcOtbsO6dHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAna2x1a2t1c3R1bmRpcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdrbHVra3VzdHVuZHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdrbHVra3VzdHVuZCc7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RhZ3VyJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2RhZ2FyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZ2EnIDogJ2TDtmd1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2RhZ3VyJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChpc0Z1dHVyZSA/ICdkYWcnIDogJ2RlZ2knKTtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbcOhbnXDsHVyJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ23DoW51w7AnIDogJ23DoW51w7BpJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOhbnXDsGlyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ23DoW51w7BpJyA6ICdtw6FudcOwdW0nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ23DoW51w7AnIDogJ23DoW51w7BpJyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnw6FyJyA6ICfDoXJ1bScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnw6FyJyA6ICfDoXJpJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpcycsIHtcbiAgICAgICAgbW9udGhzOiAnamFuw7phcl9mZWJyw7phcl9tYXJzX2FwcsOtbF9tYcOtX2rDum7DrV9qw7psw61fw6Fnw7pzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbsOzdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYcOtX2rDum5fasO6bF/DoWfDul9zZXBfb2t0X27Ds3ZfZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udWRhZ3VyX23DoW51ZGFndXJfw75yacOwanVkYWd1cl9tacOwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2bDtnN0dWRhZ3VyX2xhdWdhcmRhZ3VyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdW5fbcOhbl/DvnJpX21pw7BfZmltX2bDtnNfbGF1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X03DoV/DnnJfTWlfRmlfRsO2X0xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbw60gZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vDoSBtb3JndW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vDrSBnw6ZyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8Otw7Bhc3RhXSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZWZ0aXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2Z5cmlyICVzIHPDrcOwYW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiAna2x1a2t1c3R1bmQnLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIChTd2l0emVybGFuZCkgW2l0LWNoXVxuLy8hIGF1dGhvciA6IHhmaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS94ZmhcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBpdENoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQtY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT2dnaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RvbWFuaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWVyaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKC9eWzAtOV0uKyQvLnRlc3QocykgPyAndHJhJyA6ICdpbicpICsgJyAnICsgcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnJXMgZmEnLFxuICAgICAgICAgICAgczogJ2FsY3VuaSBzZWNvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kaScsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6IFwidW4nb3JhXCIsXG4gICAgICAgICAgICBoaDogJyVkIG9yZScsXG4gICAgICAgICAgICBkOiAndW4gZ2lvcm5vJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ2lvcm5pJyxcbiAgICAgICAgICAgIE06ICd1biBtZXNlJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzaScsXG4gICAgICAgICAgICB5OiAndW4gYW5ubycsXG4gICAgICAgICAgICB5eTogJyVkIGFubmknLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0Q2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXRhbGlhbiBbaXRdXG4vLyEgYXV0aG9yIDogTG9yZW56byA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGllbVxuLy8hIGF1dGhvcjogTWF0dGlhIExhcmVudGlzOiBodHRwczovL2dpdGh1Yi5jb20vbm9zdGFsZ2lhelxuLy8hIGF1dGhvcjogTWFyY28gOiBodHRwczovL2dpdGh1Yi5jb20vTWFuZnJlOThcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBpdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2l0Jywge1xuICAgICAgICBtb250aHM6ICdnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0bycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9tZV9naV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tPZ2dpIGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDEgPyAnbGxlICcgOiB0aGlzLmhvdXJzKCkgPT09IDAgPyAnICcgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tEb21hbmkgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ2RkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDEgPyAnbGxlICcgOiB0aGlzLmhvdXJzKCkgPT09IDAgPyAnICcgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tJZXJpIGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDEgPyAnbGxlICcgOiB0aGlzLmhvdXJzKCkgPT09IDAgPyAnICcgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbTGEgc2NvcnNhXSBkZGRkIFthJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGxlICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhvdXJzKCkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbTG8gc2NvcnNvXSBkZGRkIFthJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGxlICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhvdXJzKCkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAndHJhICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgICAgICBzOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQ6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgdzogJ3VuYSBzZXR0aW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZXR0aW1hbmUnLFxuICAgICAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSmFwYW5lc2UgW2phXVxuLy8hIGF1dGhvciA6IExJIExvbmcgOiBodHRwczovL2dpdGh1Yi5jb20vYmFyeW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgamEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdqYScsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMjAxOS0wNS0wMScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfku6TlkownLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ+OLvycsXG4gICAgICAgICAgICAgICAgYWJicjogJ1InLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzE5ODktMDEtMDgnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAnMjAxOS0wNC0zMCcsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICflubPmiJAnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ+ONuycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzE5MjYtMTItMjUnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAnMTk4OS0wMS0wNycsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfmmK3lkownLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ+ONvCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ1MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzE5MTItMDctMzAnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAnMTkyNi0xMi0yNCcsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICflpKfmraMnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ+ONvScsXG4gICAgICAgICAgICAgICAgYWJicjogJ1QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzE4NzMtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAnMTkxMi0wNy0yOScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiA2LFxuICAgICAgICAgICAgICAgIG5hbWU6ICfmmI7msrsnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ+ONvicsXG4gICAgICAgICAgICAgICAgYWJicjogJ00nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDEtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAnMTg3My0xMi0zMScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfopb/mmqYnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfntIDlhYPliY0nLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0JDJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQkMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZXJhWWVhck9yZGluYWxSZWdleDogLyjlhYN8XFxkKynlubQvLFxuICAgICAgICBlcmFZZWFyT3JkaW5hbFBhcnNlOiBmdW5jdGlvbiAoaW5wdXQsIG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV0gPT09ICflhYMnID8gMSA6IHBhcnNlSW50KG1hdGNoWzFdIHx8IGlucHV0LCAxMCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoczogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aXpeabnOaXpV/mnIjmm5zml6Vf54Gr5puc5pelX+awtOabnOaXpV/mnKjmm5zml6Vf6YeR5puc5pelX+Wcn+abnOaXpScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+aXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcnycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelIGRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6UoZGRkKSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/ljYjliY185Y2I5b6ML2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn5Y2I5b6MJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WNiOWJjSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Y2I5b6MJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5pelXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuaXpV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5p2l6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5pelXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSAhPT0gbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vlhYjpgLFdZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ95pelLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxID8gJ+WFg+W5tCcgOiBudW1iZXIgKyAn5bm0JztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+W+jCcsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+aVsOenkicsXG4gICAgICAgICAgICBzczogJyVk56eSJyxcbiAgICAgICAgICAgIG06ICcx5YiGJyxcbiAgICAgICAgICAgIG1tOiAnJWTliIYnLFxuICAgICAgICAgICAgaDogJzHmmYLplpMnLFxuICAgICAgICAgICAgaGg6ICclZOaZgumWkycsXG4gICAgICAgICAgICBkOiAnMeaXpScsXG4gICAgICAgICAgICBkZDogJyVk5pelJyxcbiAgICAgICAgICAgIE06ICcx44O25pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWTjg7bmnIgnLFxuICAgICAgICAgICAgeTogJzHlubQnLFxuICAgICAgICAgICAgeXk6ICclZOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gamE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSmF2YW5lc2UgW2p2XVxuLy8hIGF1dGhvciA6IFJvbnkgTGFudGlwIDogaHR0cHM6Ly9naXRodWIuY29tL2xhbnRpcFxuLy8hIHJlZmVyZW5jZTogaHR0cDovL2p2Lndpa2lwZWRpYS5vcmcvd2lraS9CYXNhX0phd2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBqdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2p2Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWdzX1NlcF9Pa3RfTm9wX0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ01pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdNZ19Tbl9TbF9SYl9LbV9KbV9TcCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAnZW5qaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NpeWFuZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29udGVuJyB8fCBtZXJpZGllbSA9PT0gJ25kYWx1Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbmppbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaXlhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb250ZW4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25kYWx1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbRGludGVuIHB1bmlrbyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNYmVuamFuZyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLYWxhIHdpbmdpIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd3b250ZW4gaW5nICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBpbmdrYW5nIGtlcGVuZ2tlcicsXG4gICAgICAgICAgICBzOiAnc2F3ZXRhd2lzIGRldGlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGV0aWsnLFxuICAgICAgICAgICAgbTogJ3NldHVuZ2dhbCBtZW5pdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1lbml0JyxcbiAgICAgICAgICAgIGg6ICdzZXR1bmdnYWwgamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWRpbnRlbicsXG4gICAgICAgICAgICBkZDogJyVkIGRpbnRlbicsXG4gICAgICAgICAgICBNOiAnc2V3dWxhbicsXG4gICAgICAgICAgICBNTTogJyVkIHd1bGFuJyxcbiAgICAgICAgICAgIHk6ICdzZXRhdW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YXVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGp2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlb3JnaWFuIFtrYV1cbi8vISBhdXRob3IgOiBJcmFrbGkgSmFuaWFzaHZpbGkgOiBodHRwczovL2dpdGh1Yi5jb20vSXJha2xpSmFuaVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGthID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2EnLCB7XG4gICAgICAgIG1vbnRoczogJ+GDmOGDkOGDnOGDleGDkOGDoOGDmF/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg5hf4YOb4YOQ4YOg4YOi4YOYX+GDkOGDnuGDoOGDmOGDmuGDmF/hg5vhg5Dhg5jhg6Hhg5hf4YOY4YOV4YOc4YOY4YOh4YOYX+GDmOGDleGDmuGDmOGDoeGDmF/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg51f4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDmF/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg5hf4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GDmOGDkOGDnF/hg5fhg5Thg5Ff4YOb4YOQ4YOgX+GDkOGDnuGDoF/hg5vhg5Dhg5hf4YOY4YOV4YOcX+GDmOGDleGDml/hg5Dhg5Lhg5Vf4YOh4YOU4YOlX+GDneGDpeGDol/hg5zhg53hg5Rf4YOT4YOU4YOZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4YOZ4YOV4YOY4YOg4YOQX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmF/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmF/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5hf4YOo4YOQ4YOR4YOQ4YOX4YOYJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ+GDmeGDleGDmOGDoOGDkOGDoV/hg53hg6Dhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOh4YOQ4YOb4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDneGDl+GDruGDqOGDkOGDkeGDkOGDl+GDoV/hg67hg6Phg5fhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOe4YOQ4YOg4YOQ4YOh4YOZ4YOU4YOV4YOhX+GDqOGDkOGDkeGDkOGDl+GDoScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC8o4YOs4YOY4YOc4YOQfOGDqOGDlOGDm+GDk+GDlOGDkikvLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4YOZ4YOV4YOYX+GDneGDoOGDqF/hg6Hhg5Dhg5tf4YOd4YOX4YOuX+GDruGDo+GDl1/hg57hg5Dhg6Bf4YOo4YOQ4YORJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+GDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4YOu4YOV4YOQ4YOaXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+GDkuGDo+GDqOGDmOGDnF0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+GDrOGDmOGDnOGDkF0gZGRkZCBMVC3hg5bhg5QnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgLyjhg6zhg5Dhg5t84YOs4YOj4YOXfOGDoeGDkOGDkOGDl3zhg6zhg5Thg5p84YOT4YOmfOGDl+GDlSko4YOYfOGDlCkvLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJDAsICQxLCAkMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQyID09PSAn4YOYJyA/ICQxICsgJ+GDqOGDmCcgOiAkMSArICQyICsgJ+GDqOGDmCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgaWYgKC8o4YOs4YOQ4YOb4YOYfOGDrOGDo+GDl+GDmHzhg6Hhg5Dhg5Dhg5fhg5h84YOT4YOm4YOUfOGDl+GDleGDlCkvLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKOGDmHzhg5QpJC8sICfhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgv4YOs4YOU4YOa4YOYLy50ZXN0KHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL+GDrOGDlOGDmuGDmCQvLCAn4YOs4YOa4YOY4YOhIOGDrOGDmOGDnCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiAn4YOg4YOQ4YOb4YOT4YOU4YOc4YOY4YOb4YOUIOGDrOGDkOGDm+GDmCcsXG4gICAgICAgICAgICBzczogJyVkIOGDrOGDkOGDm+GDmCcsXG4gICAgICAgICAgICBtOiAn4YOs4YOj4YOX4YOYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YOs4YOj4YOX4YOYJyxcbiAgICAgICAgICAgIGg6ICfhg6Hhg5Dhg5Dhg5fhg5gnLFxuICAgICAgICAgICAgaGg6ICclZCDhg6Hhg5Dhg5Dhg5fhg5gnLFxuICAgICAgICAgICAgZDogJ+GDk+GDpuGDlCcsXG4gICAgICAgICAgICBkZDogJyVkIOGDk+GDpuGDlCcsXG4gICAgICAgICAgICBNOiAn4YOX4YOV4YOUJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YOX4YOV4YOUJyxcbiAgICAgICAgICAgIHk6ICfhg6zhg5Thg5rhg5gnLFxuICAgICAgICAgICAgeXk6ICclZCDhg6zhg5Thg5rhg5gnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvMHwxLeGDmuGDmHzhg5vhg5QtXFxkezEsMn18XFxkezEsMn0t4YOULyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOa4YOYJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudW1iZXIgPCAyMCB8fFxuICAgICAgICAgICAgICAgIChudW1iZXIgPD0gMTAwICYmIG51bWJlciAlIDIwID09PSAwKSB8fFxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfhg5vhg5QtJyArIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLeGDlCc7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSxcbiAgICAgICAgICAgIGRveTogNyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLYXpha2ggW2trXVxuLy8hIGF1dGhvcnMgOiBOdXJsYW4gUmFraGltemhhbm92IDogaHR0cHM6Ly9naXRodWIuY29tL251cmxhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGI0ZYnLFxuICAgICAgICAxOiAnLdGI0ZYnLFxuICAgICAgICAyOiAnLdGI0ZYnLFxuICAgICAgICAzOiAnLdGI0ZYnLFxuICAgICAgICA0OiAnLdGI0ZYnLFxuICAgICAgICA1OiAnLdGI0ZYnLFxuICAgICAgICA2OiAnLdGI0YsnLFxuICAgICAgICA3OiAnLdGI0ZYnLFxuICAgICAgICA4OiAnLdGI0ZYnLFxuICAgICAgICA5OiAnLdGI0YsnLFxuICAgICAgICAxMDogJy3RiNGLJyxcbiAgICAgICAgMjA6ICct0YjRiycsXG4gICAgICAgIDMwOiAnLdGI0YsnLFxuICAgICAgICA0MDogJy3RiNGLJyxcbiAgICAgICAgNTA6ICct0YjRlicsXG4gICAgICAgIDYwOiAnLdGI0YsnLFxuICAgICAgICA3MDogJy3RiNGWJyxcbiAgICAgICAgODA6ICct0YjRlicsXG4gICAgICAgIDkwOiAnLdGI0YsnLFxuICAgICAgICAxMDA6ICct0YjRlicsXG4gICAgfTtcblxuICAgIHZhciBrayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2trJywge1xuICAgICAgICBtb250aHM6ICfSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L0nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0pvQsNKjX9Cw0pvQv1/QvdCw0YNf0YHTmdGDX9C80LDQvF/QvNCw0YNf0YjRltC7X9GC0LDQvF/Sm9GL0YBf0pvQsNC3X9Kb0LDRgF/QttC10LsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0LbQtdC60YHQtdC90LHRll/QtNKv0LnRgdC10L3QsdGWX9GB0LXQudGB0LXQvdCx0ZZf0YHTmdGA0YHQtdC90LHRll/QsdC10LnRgdC10L3QsdGWX9C20rHQvNCwX9GB0LXQvdCx0ZYnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQttC10Lpf0LTSr9C5X9GB0LXQuV/RgdOZ0YBf0LHQtdC5X9C20rHQvF/RgdC10L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LbQul/QtNC5X9GB0Llf0YHRgF/QsdC5X9C20Lxf0YHQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQkdKv0LPRltC9INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JXRgNGC0LXSoyDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JrQtdGI0LUg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb06jRgtC60LXQvSDQsNC/0YLQsNC90YvSo10gZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDRltGI0ZbQvdC00LUnLFxuICAgICAgICAgICAgcGFzdDogJyVzINCx0rHRgNGL0L0nLFxuICAgICAgICAgICAgczogJ9Cx0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtOiAn0LHRltGAINC80LjQvdGD0YInLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGg6ICfQsdGW0YAg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0LDSk9Cw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0ZbRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0ZbRgCDQsNC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5OiAn0LHRltGAINC20YvQuycsXG4gICAgICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YjRlnzRiNGLKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhbWJvZGlhbiBba21dXG4vLyEgYXV0aG9yIDogS3J1eSBWYW5uYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcnV5dmFubmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4Z+hJyxcbiAgICAgICAgICAgIDI6ICfhn6InLFxuICAgICAgICAgICAgMzogJ+GfoycsXG4gICAgICAgICAgICA0OiAn4Z+kJyxcbiAgICAgICAgICAgIDU6ICfhn6UnLFxuICAgICAgICAgICAgNjogJ+GfpicsXG4gICAgICAgICAgICA3OiAn4Z+nJyxcbiAgICAgICAgICAgIDg6ICfhn6gnLFxuICAgICAgICAgICAgOTogJ+GfqScsXG4gICAgICAgICAgICAwOiAn4Z+gJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GfoSc6ICcxJyxcbiAgICAgICAgICAgICfhn6InOiAnMicsXG4gICAgICAgICAgICAn4Z+jJzogJzMnLFxuICAgICAgICAgICAgJ+GfpCc6ICc0JyxcbiAgICAgICAgICAgICfhn6UnOiAnNScsXG4gICAgICAgICAgICAn4Z+mJzogJzYnLFxuICAgICAgICAgICAgJ+Gfpyc6ICc3JyxcbiAgICAgICAgICAgICfhn6gnOiAnOCcsXG4gICAgICAgICAgICAn4Z+pJzogJzknLFxuICAgICAgICAgICAgJ+GfoCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBrbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ttJywge1xuICAgICAgICBtb250aHM6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Z6Y4Z6A4Z6a4Z62X+GegOGeu+GemOGfkuGel+GfiF/hnpjhnrjhnpPhnrZf4Z6Y4Z+B4Z6f4Z62X+Gep+Gen+Gel+Getl/hnpjhnrfhnpDhnrvhnpPhnrZf4Z6A4Z6A4Z+S4Z6A4Z6K4Z62X+Gen+GeuOGeoOGetl/hnoDhnonhn5LhnonhnrZf4Z6P4Z674Z6b4Z62X+GenOGet+GeheGfkuGehuGet+GegOGetl/hnpLhn5LhnpPhnrwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfhnqLhnrbhnpHhnrfhno/hn5Lhnplf4Z6F4Z+Q4Z6T4Z+S4Z6RX+GeouGehOGfkuGeguGetuGeml/hnpbhnrvhnpJf4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z634Z+NX+Gen+Geu+GegOGfkuGeml/hnp/hn4Xhnprhn40nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Z6i4Z62X+GehV/hnqJf4Z6WX+GeluGfkuGeml/hnp/hnrtf4Z6fJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+GeluGfkuGemuGeueGegHzhnpvhn5LhnoThnrbhnoUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+Gem+GfkuGehOGetuGehSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfhnpbhn5LhnprhnrnhnoAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+Gem+GfkuGehOGetuGehSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GekOGfkuGehOGfg+Gek+GfgeGfhyDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4Z6f4Z+S4Z6i4Z+C4Z6AIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4Z6Y4Z+S4Z6f4Z634Z6b4Z6Y4Z634Z6JIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhnp/hnpThn5Lhno/hnrbhnqDhn43hnpjhnrvhnpNdIFvhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPhnpHhn4Dhno8nLFxuICAgICAgICAgICAgcGFzdDogJyVz4Z6Y4Z674Z6TJyxcbiAgICAgICAgICAgIHM6ICfhnpThn4nhnrvhnpPhn5LhnpjhnrbhnpPhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgc3M6ICclZCDhnpzhnrfhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgbTogJ+GemOGeveGemeGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBtbTogJyVkIOGek+GetuGekeGeuCcsXG4gICAgICAgICAgICBoOiAn4Z6Y4Z694Z6Z4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgICAgIGQ6ICfhnpjhnr3hnpnhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgZGQ6ICclZCDhnpDhn5LhnoThn4MnLFxuICAgICAgICAgICAgTTogJ+GemOGeveGemeGegeGfgicsXG4gICAgICAgICAgICBNTTogJyVkIOGegeGfgicsXG4gICAgICAgICAgICB5OiAn4Z6Y4Z694Z6Z4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL+GekeGeuFxcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJ+GekeGeuCVkJyxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+GfoeGfouGfo+GfpOGfpeGfpuGfp+GfqOGfqeGfoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGttO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEthbm5hZGEgW2tuXVxuLy8hIGF1dGhvciA6IFJhamVldiBOYWlrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhamVldm5haWt0ZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgs6cnLFxuICAgICAgICAgICAgMjogJ+CzqCcsXG4gICAgICAgICAgICAzOiAn4LOpJyxcbiAgICAgICAgICAgIDQ6ICfgs6onLFxuICAgICAgICAgICAgNTogJ+CzqycsXG4gICAgICAgICAgICA2OiAn4LOsJyxcbiAgICAgICAgICAgIDc6ICfgs60nLFxuICAgICAgICAgICAgODogJ+CzricsXG4gICAgICAgICAgICA5OiAn4LOvJyxcbiAgICAgICAgICAgIDA6ICfgs6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4LOnJzogJzEnLFxuICAgICAgICAgICAgJ+CzqCc6ICcyJyxcbiAgICAgICAgICAgICfgs6knOiAnMycsXG4gICAgICAgICAgICAn4LOqJzogJzQnLFxuICAgICAgICAgICAgJ+Czqyc6ICc1JyxcbiAgICAgICAgICAgICfgs6wnOiAnNicsXG4gICAgICAgICAgICAn4LOtJzogJzcnLFxuICAgICAgICAgICAgJ+Czric6ICc4JyxcbiAgICAgICAgICAgICfgs68nOiAnOScsXG4gICAgICAgICAgICAn4LOmJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGtuID0gbW9tZW50LmRlZmluZUxvY2FsZSgna24nLCB7XG4gICAgICAgIG1vbnRoczogJ+CynOCyqOCyteCysOCyv1/gsqvgs4bgsqzgs43gsrDgsrXgsrDgsr9f4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKC4LKs4LKw4LONX+CyheCyleCzjeCyn+CzhuCzguCzleCyrOCysOCzjV/gsqjgsrXgs4bgsoLgsqzgsrDgs41f4LKh4LK/4LK44LOG4LKC4LKs4LKw4LONJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgspzgsqhf4LKr4LOG4LKs4LON4LKwX+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCygl/gsoXgspXgs43gsp/gs4bgs4Lgs5Vf4LKo4LK14LOG4LKCX+CyoeCyv+CyuOCzhuCygicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CyreCyvuCyqOCzgeCyteCyvuCysF/gsrjgs4bgs4Lgs5Xgsq7gsrXgsr7gsrBf4LKu4LKC4LKX4LKz4LK14LK+4LKwX+CyrOCzgeCyp+CyteCyvuCysF/gspfgs4HgsrDgs4HgsrXgsr7gsrBf4LK24LOB4LKV4LON4LKw4LK14LK+4LKwX+CytuCyqOCyv+CyteCyvuCysCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CyreCyvuCyqOCzgV/gsrjgs4bgs4Lgs5Xgsq5f4LKu4LKC4LKX4LKzX+CyrOCzgeCyp1/gspfgs4HgsrDgs4Ff4LK24LOB4LKV4LON4LKwX+CytuCyqOCyvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgsq3gsr5f4LK44LOG4LOC4LOVX+CyruCygl/gsqzgs4Ff4LKX4LOBX+CytuCzgV/gsrYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LKH4LKC4LKm4LOBXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CyqOCyvuCys+Czhl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CyqOCyv+CyqOCzjeCyqOCzhl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4LKV4LOG4LOC4LKo4LOG4LKvXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCyqOCyguCypOCysCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4LK54LK/4LKC4LKm4LOGJyxcbiAgICAgICAgICAgIHM6ICfgspXgs4bgsrLgsrXgs4Eg4LKV4LON4LK34LKj4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4LK44LOG4LKV4LOG4LKC4LKh4LOB4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIG06ICfgspLgsoLgsqbgs4Eg4LKo4LK/4LKu4LK/4LK3JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LKo4LK/4LKu4LK/4LK3JyxcbiAgICAgICAgICAgIGg6ICfgspLgsoLgsqbgs4Eg4LKX4LKC4LKf4LOGJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LKX4LKC4LKf4LOGJyxcbiAgICAgICAgICAgIGQ6ICfgspLgsoLgsqbgs4Eg4LKm4LK/4LKoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4LKm4LK/4LKoJyxcbiAgICAgICAgICAgIE06ICfgspLgsoLgsqbgs4Eg4LKk4LK/4LKC4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LKk4LK/4LKC4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHk6ICfgspLgsoLgsqbgs4Eg4LK14LKw4LON4LK3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4LK14LKw4LON4LK3JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Czp+CzqOCzqeCzquCzq+CzrOCzreCzruCzr+Czpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CysOCyvuCypOCzjeCysOCyv3zgsqzgs4bgsrPgsr/gspfgs43gspfgs4Z84LKu4LKn4LON4LKv4LK+4LK54LON4LKofOCyuOCyguCynOCzhi8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CysOCyvuCypOCzjeCysOCyvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyrOCzhuCys+Cyv+Cyl+CzjeCyl+CzhicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsq7gsqfgs43gsq/gsr7gsrngs43gsqgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyuOCyguCynOCzhicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrDgsr7gsqTgs43gsrDgsr8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKu4LKn4LON4LKv4LK+4LK54LON4LKoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrjgsoLgspzgs4YnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgsqjgs4bgs5UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfgsqjgs4bgs5UnO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga247XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS29yZWFuIFtrb11cbi8vISBhdXRob3IgOiBLeXVuZ3dvb2ssIFBhcmsgOiBodHRwczovL2dpdGh1Yi5jb20va3l1bmd3MDBrXG4vLyEgYXV0aG9yIDogSmVlZXl1bCBMZWUgPGplZWV5dWxAZ21haWwuY29tPlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGtvID0gbW9tZW50LmRlZmluZUxvY2FsZSgna28nLCB7XG4gICAgICAgIG1vbnRoczogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+ydvOyalOydvF/sm5TsmpTsnbxf7ZmU7JqU7J28X+yImOyalOydvF/rqqnsmpTsnbxf6riI7JqU7J28X+2GoOyalOydvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+ydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeuFhCBNTU1NIETsnbwnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgbGw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICfsmKTripggTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ+uCtOydvCBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ+yWtOygnCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ+yngOuCnOyjvCBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg7ZuEJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDsoIQnLFxuICAgICAgICAgICAgczogJ+uqhyDstIgnLFxuICAgICAgICAgICAgc3M6ICclZOy0iCcsXG4gICAgICAgICAgICBtOiAnMeu2hCcsXG4gICAgICAgICAgICBtbTogJyVk67aEJyxcbiAgICAgICAgICAgIGg6ICftlZwg7Iuc6rCEJyxcbiAgICAgICAgICAgIGhoOiAnJWTsi5zqsIQnLFxuICAgICAgICAgICAgZDogJ+2VmOujqCcsXG4gICAgICAgICAgICBkZDogJyVk7J28JyxcbiAgICAgICAgICAgIE06ICftlZwg64usJyxcbiAgICAgICAgICAgIE1NOiAnJWTri6wnLFxuICAgICAgICAgICAgeTogJ+ydvCDrhYQnLFxuICAgICAgICAgICAgeXk6ICclZOuFhCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjsnbx87JuUfOyjvCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfsnbwnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+yblCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7KO8JztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv7Jik7KCEfOyYpO2bhC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuID09PSAn7Jik7ZuEJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzVXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgMTIgPyAn7Jik7KCEJyA6ICfsmKTtm4QnO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEt1cmRpc2ggW2t1XVxuLy8hIGF1dGhvciA6IFNoYWhyYW0gTWViYXNoYXIgOiBodHRwczovL2dpdGh1Yi5jb20vU2hhaHJhbU1lYmFzaGFyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgICAgIDI6ICfZoicsXG4gICAgICAgICAgICAzOiAn2aMnLFxuICAgICAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgICAgIDU6ICfZpScsXG4gICAgICAgICAgICA2OiAn2aYnLFxuICAgICAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgICAgIDg6ICfZqCcsXG4gICAgICAgICAgICA5OiAn2aknLFxuICAgICAgICAgICAgMDogJ9mgJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAgICAgJ9mjJzogJzMnLFxuICAgICAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAgICAgJ9mmJzogJzYnLFxuICAgICAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAgICAgJ9mpJzogJzknLFxuICAgICAgICAgICAgJ9mgJzogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2qnYp9mG2YjZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAgICAgJ9i02YjYqNin2KonLFxuICAgICAgICAgICAgJ9im2KfYstin2LEnLFxuICAgICAgICAgICAgJ9mG24zYs9in2YYnLFxuICAgICAgICAgICAgJ9im2KfbjNin2LEnLFxuICAgICAgICAgICAgJ9it2YjYstuV24zYsdin2YYnLFxuICAgICAgICAgICAgJ9iq25XZhdmF2YjYsicsXG4gICAgICAgICAgICAn2KbYp9ioJyxcbiAgICAgICAgICAgICfYptuV24zZhNmI2YjZhCcsXG4gICAgICAgICAgICAn2KrYtNix24zZhtuMINuM25XZg9uV2YUnLFxuICAgICAgICAgICAgJ9iq2LTYsduM2YbbjCDYr9mI2YjbldmFJyxcbiAgICAgICAgICAgICfZg9in2YbZiNmG24wg24zbldqp25XZhScsXG4gICAgICAgIF07XG5cbiAgICB2YXIga3UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrdScsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9uM2YfigIzZg9i02YfigIzZhdmF2YfigIxf2K/ZiNmI2LTZh+KAjNmF2YXZh+KAjF/Ys9uO2LTZh+KAjNmF2YXZh+KAjF/ahtmI2KfYsdi02YfigIzZhdmF2YfigIxf2b7bjtmG2KzYtNmH4oCM2YXZhdmH4oCMX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OlxuICAgICAgICAgICAgJ9uM2YfigIzZg9i02YfigIzZhV/Yr9mI2YjYtNmH4oCM2YVf2LPbjti02YfigIzZhV/ahtmI2KfYsdi02YfigIzZhV/ZvtuO2YbYrNi02YfigIzZhV/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn24xf2K9f2LNf2oZf2b5f2Ydf2LQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2KbbjtmI2KfYsdmH4oCMfNio2YfigIzbjNin2YbbjC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC/YptuO2YjYp9ix2YfigIwvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2KjZh+KAjNuM2KfZhtuMJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYptuO2YjYp9ix2YfigIwnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYptmH4oCM2YXYsduGINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9io2YfigIzbjNin2YbbjCDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYr9mI247ZhtuOINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9mD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mE2YfigIwgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzJyxcbiAgICAgICAgICAgIHM6ICfahtmH4oCM2YbYryDahtix2YPZh+KAjNuM2YfigIzZgycsXG4gICAgICAgICAgICBzczogJ9qG2LHZg9mH4oCMICVkJyxcbiAgICAgICAgICAgIG06ICfbjNmH4oCM2YMg2K7ZiNmE2YfigIzZgycsXG4gICAgICAgICAgICBtbTogJyVkINiu2YjZhNmH4oCM2YMnLFxuICAgICAgICAgICAgaDogJ9uM2YfigIzZgyDZg9in2KramNmF247YsScsXG4gICAgICAgICAgICBoaDogJyVkINmD2KfYqtqY2YXbjtixJyxcbiAgICAgICAgICAgIGQ6ICfbjNmH4oCM2YMg2pXbhtqYJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2pXbhtqYJyxcbiAgICAgICAgICAgIE06ICfbjNmH4oCM2YMg2YXYp9mG2q8nLFxuICAgICAgICAgICAgTU06ICclZCDZhdin2YbarycsXG4gICAgICAgICAgICB5OiAn24zZh+KAjNmDINiz2KfatScsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfatScsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGt1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEt5cmd5eiBba3ldXG4vLyEgYXV0aG9yIDogQ2h5bmd5eiBBcnlzdGFuIHV1bHUgOiBodHRwczovL2dpdGh1Yi5jb20vY2h5bmd5elxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGH0q8nLFxuICAgICAgICAxOiAnLdGH0LgnLFxuICAgICAgICAyOiAnLdGH0LgnLFxuICAgICAgICAzOiAnLdGH0q8nLFxuICAgICAgICA0OiAnLdGH0q8nLFxuICAgICAgICA1OiAnLdGH0LgnLFxuICAgICAgICA2OiAnLdGH0YsnLFxuICAgICAgICA3OiAnLdGH0LgnLFxuICAgICAgICA4OiAnLdGH0LgnLFxuICAgICAgICA5OiAnLdGH0YMnLFxuICAgICAgICAxMDogJy3Rh9GDJyxcbiAgICAgICAgMjA6ICct0YfRiycsXG4gICAgICAgIDMwOiAnLdGH0YMnLFxuICAgICAgICA0MDogJy3Rh9GLJyxcbiAgICAgICAgNTA6ICct0YfSrycsXG4gICAgICAgIDYwOiAnLdGH0YsnLFxuICAgICAgICA3MDogJy3Rh9C4JyxcbiAgICAgICAgODA6ICct0YfQuCcsXG4gICAgICAgIDkwOiAnLdGH0YMnLFxuICAgICAgICAxMDA6ICct0YfSrycsXG4gICAgfTtcblxuICAgIHZhciBreSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t5Jywge1xuICAgICAgICBtb250aHM6ICfRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YDRgl/QsNC/0YBf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn0JbQtdC60YjQtdC80LHQuF/QlNKv0LnRiNOp0LzQsdKvX9Co0LXQudGI0LXQvNCx0Lhf0KjQsNGA0YjQtdC80LHQuF/QkdC10LnRiNC10LzQsdC4X9CW0YPQvNCwX9CY0YjQtdC80LHQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9CW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQltC6X9CU0Llf0KjQuV/QqNGAX9CR0Llf0JbQvF/QmNGIJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0q/Qs9Kv0L0g0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0K3RgNGC0LXSoyDRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YfRjdGNINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrTqdC9INCw0L/RgtCw0L3Ri9C9XSBkZGRkIFvQutKv0L3Sr10gW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINC40YfQuNC90LTQtScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0LzRg9GA0YPQvScsXG4gICAgICAgICAgICBzOiAn0LHQuNGA0L3QtdGH0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06ICfQsdC40YAg0LzSr9C906nRgicsXG4gICAgICAgICAgICBtbTogJyVkINC80q/QvdOp0YInLFxuICAgICAgICAgICAgaDogJ9Cx0LjRgCDRgdCw0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGQ6ICfQsdC40YAg0LrSr9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrSr9C9JyxcbiAgICAgICAgICAgIE06ICfQsdC40YAg0LDQuScsXG4gICAgICAgICAgICBNTTogJyVkINCw0LknLFxuICAgICAgICAgICAgeTogJ9Cx0LjRgCDQttGL0LsnLFxuICAgICAgICAgICAgeXk6ICclZCDQttGL0LsnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGH0Lh80YfRi3zRh9KvfNGH0YMpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3k7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTHV4ZW1ib3VyZ2lzaCBbbGJdXG4vLyEgYXV0aG9yIDogbXdlaW1lcnNraXJjaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9td2VpbWVyc2tpcmNoXG4vLyEgYXV0aG9yIDogRGF2aWQgUmFpc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2t3aXNhdHpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VuZyBNaW51dHQnLCAnZW5nZXIgTWludXR0J10sXG4gICAgICAgICAgICBoOiBbJ2VuZyBTdG9ubicsICdlbmdlciBTdG9ubiddLFxuICAgICAgICAgICAgZDogWydlZW4gRGFnJywgJ2VuZ2VtIERhZyddLFxuICAgICAgICAgICAgTTogWydlZSBNb3VudCcsICdlbmdlbSBNb3VudCddLFxuICAgICAgICAgICAgeTogWydlZSBKb2VyJywgJ2VuZ2VtIEpvZXInXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnV0dXJlVGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICdhICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdhbiAnICsgc3RyaW5nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUGFzdFRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAndmlydSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndmlydW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JkIGJlZm9yZSB0aGUgZ2l2ZW4gbnVtYmVyIGxvc2VzIHRoZSAnLW4nIGVuZGluZy5cbiAgICAgKiBlLmcuICdhbiAxMCBEZWVnJyBidXQgJ2EgNSBEZWVnJ1xuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7aW50ZWdlcn1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSB7XG4gICAgICAgIG51bWJlciA9IHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyBOZWdhdGl2ZSBOdW1iZXIgLS0+IGFsd2F5cyB0cnVlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMCkge1xuICAgICAgICAgICAgLy8gT25seSAxIGRpZ2l0XG4gICAgICAgICAgICBpZiAoNCA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIC8vIDIgZGlnaXRzXG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgZmlyc3REaWdpdCA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgaWYgKGxhc3REaWdpdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIoZmlyc3REaWdpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGxhc3REaWdpdCk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTAwMDApIHtcbiAgICAgICAgICAgIC8vIDMgb3IgNCBkaWdpdHMgLS0+IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IGRpZ2l0XG4gICAgICAgICAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbnl0aGluZyBsYXJnZXIgdGhhbiA0IGRpZ2l0czogcmVjdXJzaXZlbHkgY2hlY2sgZmlyc3Qgbi0zIGRpZ2l0c1xuICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTAwMDtcbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xiJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6RlcnpfQWJyw6tsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm5kZWdfTcOpaW5kZWdfRMOrbnNjaGRlZ19Nw6t0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nw6kuX0TDqy5fTcOrLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nw6lfRMOrX03Dq19Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzIFtBdWVyXScsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhdXQgdW1dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW011ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbR8Orc2NodGVyIHVtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIERpZmZlcmVudCBkYXRlIHN0cmluZyBmb3IgJ0TDq25zY2hkZWcnIChUdWVzZGF5KSBhbmQgJ0Rvbm5lc2NoZGVnJyAoVGh1cnNkYXkpIGR1ZSB0byBwaG9ub2xvZ2ljYWwgcnVsZVxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZV0gZGRkZCBbdW1dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogcHJvY2Vzc0Z1dHVyZVRpbWUsXG4gICAgICAgICAgICBwYXN0OiBwcm9jZXNzUGFzdFRpbWUsXG4gICAgICAgICAgICBzOiAnZSBwdWVyIFNla29ubmVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2Vrb25uZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXR0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3Rvbm5lbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6ICclZCBEZWVnJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogJyVkIE3DqWludCcsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6ICclZCBKb2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsYjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMYW8gW2xvXVxuLy8hIGF1dGhvciA6IFJ5YW4gSGFydCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFuaGFydDJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBsbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xvJywge1xuICAgICAgICBtb250aHM6ICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfguq3gurLgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C6p+C6seC6mWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyfOC6leC6reC6meC7geC6peC6hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C6leC6reC6meC7gOC6iuC6u+C7ieC6sic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lqh4Lq34LuJ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C6oeC6t+C7ieC6reC6t+C7iOC6meC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C6oeC6t+C7ieC6p+C6suC6meC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4LuB4Lql4LuJ4Lqn4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C6reC6teC6gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPgupzgu4jgurLgupnguqHgurInLFxuICAgICAgICAgICAgczogJ+C6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBzczogJyVkIOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBtOiAnMSDgupngurLgupfgurUnLFxuICAgICAgICAgICAgbW06ICclZCDgupngurLgupfgurUnLFxuICAgICAgICAgICAgaDogJzEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBkZDogJyVkIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBNOiAnMSDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgTU06ICclZCDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgeTogJzEg4Lqb4Lq1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lqb4Lq1JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLyjgupfgurXgu4gpXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C6l+C6teC7iCcgKyBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbG87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGl0aHVhbmlhbiBbbHRdXG4vLyEgYXV0aG9yIDogTWluZGF1Z2FzIE1vesWrcmFzIDogaHR0cHM6Ly9naXRodWIuY29tL21tb3p1cmFzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdW5pdHMgPSB7XG4gICAgICAgIHNzOiAnc2VrdW5kxJdfc2VrdW5kxb5pxbNfc2VrdW5kZXMnLFxuICAgICAgICBtOiAnbWludXTEl19taW51dMSXc19taW51dMSZJyxcbiAgICAgICAgbW06ICdtaW51dMSXc19taW51xI1pxbNfbWludXRlcycsXG4gICAgICAgIGg6ICd2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZMSFJyxcbiAgICAgICAgaGg6ICd2YWxhbmRvc192YWxhbmTFs192YWxhbmRhcycsXG4gICAgICAgIGQ6ICdkaWVuYV9kaWVub3NfZGllbsSFJyxcbiAgICAgICAgZGQ6ICdkaWVub3NfZGllbsWzX2RpZW5hcycsXG4gICAgICAgIE06ICdtxJdudW9fbcSXbmVzaW9fbcSXbmVzxK8nLFxuICAgICAgICBNTTogJ23El25lc2lhaV9txJduZXNpxbNfbcSXbmVzaXVzJyxcbiAgICAgICAgeTogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICAgICAgeXk6ICdtZXRhaV9tZXTFs19tZXR1cycsXG4gICAgfTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuICdrZWxpb3Mgc2VrdW5kxJdzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrZWxpxbMgc2VrdW5kxb5pxbMnIDogJ2tlbGlhcyBzZWt1bmRlcyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICA/IGZvcm1zKGtleSlbMF1cbiAgICAgICAgICAgIDogaXNGdXR1cmVcbiAgICAgICAgICAgID8gZm9ybXMoa2V5KVsxXVxuICAgICAgICAgICAgOiBmb3JtcyhrZXkpWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDAgfHwgKG51bWJlciA+IDEwICYmIG51bWJlciA8IDIwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybXMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1bml0c1trZXldLnNwbGl0KCdfJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICByZXN1bHQgKyB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleVswXSwgaXNGdXR1cmUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoc3BlY2lhbChudW1iZXIpID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIGZvcm1zKGtleSlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoc3BlY2lhbChudW1iZXIpID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBsdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2x0Jywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ3NhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kxb5pb19nZWd1xb7El3NfYmlyxb5lbGlvX2xpZXBvc19ydWdwasWrxI1pb19ydWdzxJdqb19zcGFsaW9fbGFwa3JpxI1pb19ncnVvZMW+aW8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ3NhdXNpc192YXNhcmlzX2tvdmFzX2JhbGFuZGlzX2dlZ3XFvsSXX2JpcsW+ZWxpc19saWVwYV9ydWdwasWrdGlzX3J1Z3PEl2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/fE1NTU0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7Erycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlxI1pYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfxaFlxaF0YWRpZW5pcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL2RkZGQgSEg6bW0vLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fxaBlxaEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU19QX0FfVF9LX1BuX8WgJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8WgaWFuZGllbl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tSeXRval0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1ByYcSXanVzxK9dIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwbyAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpZcWhICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tb2ppLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctb2ppJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGx0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhdHZpYW4gW2x2XVxuLy8hIGF1dGhvciA6IEtyaXN0YXBzIEthcmxzb25zIDogaHR0cHM6Ly9naXRodWIuY29tL3NrYWtyaVxuLy8hIGF1dGhvciA6IErEgW5pcyBFbG1lcmlzIDogaHR0cHM6Ly9naXRodWIuY29tL0phbmlzRVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZGVzX3Nla3VuZMSTbV9zZWt1bmRlX3Nla3VuZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBtOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1tOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICBoaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGRkOiAnZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzJy5zcGxpdCgnXycpLFxuICAgICAgICBNOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgTU06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICB5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB5eTogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aXRob3V0U3VmZml4IGJvb2xlYW4gdHJ1ZSA9IGEgbGVuZ3RoIG9mIHRpbWU7IGZhbHNlID0gYmVmb3JlL2FmdGVyIGEgcGVyaW9kIG9mIHRpbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ybWF0KGZvcm1zLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1syXSA6IGZvcm1zWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICAvLyBFLmcuIFwiMyBtaW7Fq3TEk21cIiBhcyBpbiBcInDEk2MgMyBtaW7Fq3TEk21cIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiBmb3Jtc1sxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbiAgICB9XG5cbiAgICB2YXIgbHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N2xJN0ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZcWhZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVkuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vFoG9kaWVuIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1LEq3QgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXIgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwxJNjICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwaXJtcyAlcycsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9udGVuZWdyaW4gW21lXVxuLy8hIGF1dGhvciA6IE1pb2RyYWcgTmlrYcSNIDxtaW9kcmFnQHJlc3RhcnRpdC5tZT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlvZHJhZ25pa2FjXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmQnLCAnc2VrdW5kYScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtamVzZWMnLCAnbWplc2VjYScsICdtamVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzBdXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgICAgIDogd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldO1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciBtZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21lJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzanV0cmEgdV0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWUgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFdlZWtEYXlzID0gW1xuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtuZWRqZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmlqZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYW9yaSBbbWldXG4vLyEgYXV0aG9yIDogSm9obiBDb3JyaWdhbiA8cm9iYmllY2xvc2V0QGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vam9obmlkZWFsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaScsIHtcbiAgICAgICAgbW9udGhzOiAnS29oaS10xIF0ZV9IdWktdGFuZ3VydV9Qb3V0xastdGUtcmFuZ2lfUGFlbmdhLXdoxIF3aMSBX0hhcmF0dWFfUGlwaXJpX0jFjW5nb2luZ29pX0hlcmUtdHVyaS1rxY1rxIFfTWFodXJ1X1doaXJpbmdhLcSBLW51a3VfV2hpcmluZ2EtxIEtcmFuZ2lfSGFraWhlYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSMWNbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1JlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDJ9L2ksXG4gICAgICAgIHdlZWtkYXlzOiAnUsSBdGFwdV9NYW5lX1TFq3JlaV9XZW5lcmVpX1TEgWl0ZV9QYXJhaXJlX0jEgXRhcmVpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgdGVpZSBtYWhhbmEsIGldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXBvcG8gaV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2luYW5haGkgaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpIHJvdG8gaSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgaSBtdWEnLFxuICAgICAgICAgICAgczogJ3RlIGjEk2tvbmEgcnVhcnVhJyxcbiAgICAgICAgICAgIHNzOiAnJWQgaMSTa29uYScsXG4gICAgICAgICAgICBtOiAnaGUgbWVuZXRpJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuZXRpJyxcbiAgICAgICAgICAgIGg6ICd0ZSBoYW9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhhb3JhJyxcbiAgICAgICAgICAgIGQ6ICdoZSByYScsXG4gICAgICAgICAgICBkZDogJyVkIHJhJyxcbiAgICAgICAgICAgIE06ICdoZSBtYXJhbWEnLFxuICAgICAgICAgICAgTU06ICclZCBtYXJhbWEnLFxuICAgICAgICAgICAgeTogJ2hlIHRhdScsXG4gICAgICAgICAgICB5eTogJyVkIHRhdScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFjZWRvbmlhbiBbbWtdXG4vLyEgYXV0aG9yIDogQm9yaXNsYXYgTWlja292IDogaHR0cHM6Ly9naXRodWIuY29tL0IwazBcbi8vISBhdXRob3IgOiBTYXNoa28gVG9kb3JvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ia3ljZWhcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21rJywge1xuICAgICAgICBtb250aHM6ICfRmNCw0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvdC4X9GY0YPQu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GY0LDQvV/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10LvQsF/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtC+0Lpf0L/QtdGC0L7Qul/RgdCw0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0LVf0YfQtdGCX9C/0LXRgl/RgdCw0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L1lX9C/b1/QstGCX9GB0YBf0YfQtV/Qv9C1X9GBYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JTQtdC90LXRgSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cj0YLRgNC1INCy0L5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9CS0L5dIGRkZGQgW9Cy0L5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCDQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JjQt9C80LjQvdCw0YLQsNGC0LBdIGRkZGQgW9Cy0L5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JjQt9C80LjQvdCw0YLQuNC+0YJdIGRkZGQgW9Cy0L5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQv9GA0LXQtCAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C60YMg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBtOiAn0LXQtNC90LAg0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgtC4JyxcbiAgICAgICAgICAgIGg6ICfQtdC00LXQvSDRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkOiAn0LXQtNC10L0g0LTQtdC9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LTQtdC90LAnLFxuICAgICAgICAgICAgTTogJ9C10LTQtdC9INC80LXRgdC10YYnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC10YHQtdGG0LgnLFxuICAgICAgICAgICAgeTogJ9C10LTQvdCwINCz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eTogJyVkINCz0L7QtNC40L3QuCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGxhc3QyRGlnaXRzID0gbnVtYmVyICUgMTAwO1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10LInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10L0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA+IDEwICYmIGxhc3QyRGlnaXRzIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGA0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDcgfHwgbGFzdERpZ2l0ID09PSA4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LzQuCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXlhbGFtIFttbF1cbi8vISBhdXRob3IgOiBGbG95ZCBQaW5rIDogaHR0cHM6Ly9naXRodWIuY29tL2Zsb3lkcGlua1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1sID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWwnLCB7XG4gICAgICAgIG1vbnRoczogJ+C0nOC0qOC1geC0teC0sOC0v1/gtKvgtYbgtKzgtY3gtLDgtYHgtLXgtLDgtL9f4LSu4LS+4LW84LSa4LWN4LSa4LWNX+C0j+C0quC1jeC0sOC0v+C1vV/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iF/gtJPgtJfgtLjgtY3gtLHgtY3gtLHgtY1f4LS44LWG4LSq4LWN4LSx4LWN4LSx4LSC4LSs4LW8X+C0kuC0leC1jeC0n+C1i+C0rOC1vF/gtKjgtLXgtILgtKzgtbxf4LSh4LS/4LS44LSC4LSs4LW8Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn4LSe4LS+4LSv4LSx4LS+4LS04LWN4LSaX+C0pOC0v+C0meC1jeC0leC0s+C0vuC0tOC1jeC0ml/gtJrgtYrgtLXgtY3gtLXgtL7gtLTgtY3gtJpf4LSs4LWB4LSn4LSo4LS+4LS04LWN4LSaX+C0teC1jeC0r+C0vuC0tOC0vuC0tOC1jeC0ml/gtLXgtYbgtLPgtY3gtLPgtL/gtK/gtL7gtLTgtY3gtJpf4LS24LSo4LS/4LSv4LS+4LS04LWN4LSaJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgtJ7gtL7gtK/gtbxf4LSk4LS/4LSZ4LWN4LSV4LW+X+C0muC1iuC0teC1jeC0tV/gtKzgtYHgtKfgtbtf4LS14LWN4LSv4LS+4LS04LSCX+C0teC1huC0s+C1jeC0s+C0v1/gtLbgtKjgtL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LSe4LS+X+C0pOC0v1/gtJrgtYpf4LSs4LWBX+C0teC1jeC0r+C0vl/gtLXgtYZf4LS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MgLeC0qOC1gScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LSH4LSo4LWN4LSo4LWNXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C0qOC0vuC0s+C1hl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C0h+C0qOC1jeC0qOC0suC1hl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4LSV4LS04LS/4LSe4LWN4LSeXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOC0leC0tOC0v+C0nuC1jeC0nuC1jScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4LSu4LWB4LW74LSq4LWNJyxcbiAgICAgICAgICAgIHM6ICfgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4LS44LWG4LSV4LWN4LSV4LW74LSh4LWNJyxcbiAgICAgICAgICAgIG06ICfgtJLgtLDgtYEg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgICAgIGg6ICfgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8JyxcbiAgICAgICAgICAgIGQ6ICfgtJLgtLDgtYEg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIE06ICfgtJLgtLDgtYEg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgICAgIHk6ICfgtJLgtLDgtYEg4LS14LW84LS34LSCJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4LS14LW84LS34LSCJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C0sOC0vuC0pOC1jeC0sOC0v3zgtLDgtL7gtLXgtL/gtLLgtYZ84LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jXzgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIJ84LSw4LS+4LSk4LWN4LSw4LS/L2ksXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgtLDgtL7gtKTgtY3gtLDgtL8nICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtLXgtL/gtLLgtYYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNb25nb2xpYW4gW21uXVxuLy8hIGF1dGhvciA6IEphdmtobGFudHVncyBOeWFtZG9yaiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXZraGFhbmo3XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC0JyA6ICfRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC00YvQvSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRgdC10LrRg9C90LQnIDogJyDRgdC10LrRg9C90LTRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINC80LjQvdGD0YInIDogJyDQvNC40L3Rg9GC0YvQvScpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRhtCw0LMnIDogJyDRhtCw0LPQuNC50L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg06nQtNOp0YAnIDogJyDTqdC00YDQuNC50L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQsNGAJyA6ICcg0YHQsNGA0YvQvScpO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQttC40LsnIDogJyDQttC40LvQuNC50L0nKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21uJywge1xuICAgICAgICBtb250aHM6ICfQndGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9Cl0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgF/Qk9GD0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNOp0YDTqdCy0LTSr9Cz0Y3RjdGAINGB0LDRgF/QotCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CX0YPRgNCz0LDQtNGD0LPQsNCw0YAg0YHQsNGAX9CU0L7Qu9C00YPQs9Cw0LDRgCDRgdCw0YBf0J3QsNC50LzQtNGD0LPQsNCw0YAg0YHQsNGAX9CV0YHQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QkNGA0LLQsNC9INC90Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCy0LDQvSDRhdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJzEg0YHQsNGAXzIg0YHQsNGAXzMg0YHQsNGAXzQg0YHQsNGAXzUg0YHQsNGAXzYg0YHQsNGAXzcg0YHQsNGAXzgg0YHQsNGAXzkg0YHQsNGAXzEwINGB0LDRgF8xMSDRgdCw0YBfMTIg0YHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn0J3Rj9C8X9CU0LDQstCw0LBf0JzRj9Cz0LzQsNGAX9Cb0YXQsNCz0LLQsF/Qn9Kv0YDRjdCyX9CR0LDQsNGB0LDQvV/QkdGP0LzQsdCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0J3Rj9C8X9CU0LDQsl/QnNGP0LNf0JvRhdCwX9Cf0q/RgF/QkdCw0LBf0JHRj9C8Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cd0Y9f0JTQsF/QnNGPX9Cb0YVf0J/Sr1/QkdCwX9CR0Y8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZINC+0L3RiyBNTU1N0YvQvSBEJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkg0L7QvdGLIE1NTU3Ri9C9IEQgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVkg0L7QvdGLIE1NTU3Ri9C9IEQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0q7TqHzSrtClL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn0q7QpSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfSrtOoJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfSrtClJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb06jQvdOp06nQtNOp0YBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JzQsNGA0LPQsNCw0YhdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9CY0YDRjdGFXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb06jRh9C40LPQtNOp0YBdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Oo0L3Qs9Op0YDRgdOp0L1dIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDQtNCw0YDQsNCwJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDTqdC80L3TqScsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDTqdC006nRgC8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDTqdC006nRgCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYXJhdGhpIFttcl1cbi8vISBhdXRob3IgOiBIYXJzaGFkIEthbGUgOiBodHRwczovL2dpdGh1Yi5jb20va2FsZWh2XG4vLyEgYXV0aG9yIDogVml2ZWsgQXRoYWx5ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS92bmF0aGFseWVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZU1yKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkv+CkqOCkv+Cknyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+Clhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkueCkv+CkqOCkvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOClhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkteCksOCljeCktyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+Clhyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpL/gpKjgpL/gpJ/gpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKTgpL7gpLjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKbgpL/gpLXgpLjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpLngpL/gpKjgpY3gpK/gpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpLXgpLDgpY3gpLfgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpL7gpIInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIG1yID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXInLCB7XG4gICAgICAgIG1vbnRoczogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOCkv+Cksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCliF/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSz4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpLBf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSX4KWBX+CktuClgV/gpLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpIngpKbgpY3gpK/gpL5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpL7gpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CkruCkvuCkl+ClgOCksl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+CkruCkp+CljeCkr+ClhycsXG4gICAgICAgICAgICBwYXN0OiAnJXPgpKrgpYLgpLDgpY3gpLXgpYAnLFxuICAgICAgICAgICAgczogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGg6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHk6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSq4KS54KS+4KSf4KWHfOCkuOCkleCkvuCks+ClgHzgpKbgpYHgpKrgpL7gpLDgpYB84KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAfOCksOCkvuCkpOCljeCksOClgC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CkquCkueCkvuCkn+ClhycgfHwgbWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KSm4KWB4KSq4KS+4KSw4KWAJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KWN4KSw4KWAJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSq4KS54KS+4KSf4KWHJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuClgeCkquCkvuCksOClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpY3gpLDgpYAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXkgW21zLW15XVxuLy8hIG5vdGUgOiBERVBSRUNBVEVELCB0aGUgY29ycmVjdCBvbmUgaXMgW21zXVxuLy8hIGF1dGhvciA6IFdlbGRhbiBKYW1pbGkgOiBodHRwczovL2dpdGh1Yi5jb20vd2VsZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXNNeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21zLW15Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RlbmdhaGFyaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BldGFuZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tFc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlcGFzIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxlcGFzJyxcbiAgICAgICAgICAgIHM6ICdiZWJlcmFwYSBzYWF0JyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtOiAnc2VtaW5pdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbml0JyxcbiAgICAgICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgICAgICBkOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNOiAnc2VidWxhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFodW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXNNeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21zJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RlbmdhaGFyaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BldGFuZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tFc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlcGFzIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxlcGFzJyxcbiAgICAgICAgICAgIHM6ICdiZWJlcmFwYSBzYWF0JyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtOiAnc2VtaW5pdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbml0JyxcbiAgICAgICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgICAgICBkOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNOiAnc2VidWxhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFodW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsdGVzZSAoTWFsdGEpIFttdF1cbi8vISBhdXRob3IgOiBBbGVzc2FuZHJvIE1hcnVjY2lhIDogaHR0cHM6Ly9naXRodWIuY29tL2FsZXNtYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG10ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X8SgdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpxItlbWJydScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRnJhX01hcl9BcHJfTWVqX8SgdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EacSLJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfEpmFkX1RuZV9UbGlfRXJiX8SmYW1fxKBpbV9TaWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnxKZhX1RuX1RsX0VyX8SmYV/EoGlfU2knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWxsdW0gZmlsLV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0fEp2FkYSBmaWwtXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lsLWJpZXJhxKcgZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xpIGfEp2FkZGFdIFtmaWwtXUxUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZuKAmSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgaWx1JyxcbiAgICAgICAgICAgIHM6ICdmdGl0IHNla29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRpJyxcbiAgICAgICAgICAgIG06ICdtaW51dGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogJ3NpZWfEp2EnLFxuICAgICAgICAgICAgaGg6ICclZCBzaWVnxKdhdCcsXG4gICAgICAgICAgICBkOiAnxKF1cm5hdGEnLFxuICAgICAgICAgICAgZGQ6ICclZCDEoXJhbmV0JyxcbiAgICAgICAgICAgIE06ICd4YWhhcicsXG4gICAgICAgICAgICBNTTogJyVkIHhodXInLFxuICAgICAgICAgICAgeTogJ3NlbmEnLFxuICAgICAgICAgICAgeXk6ICclZCBzbmknLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG10O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1cm1lc2UgW215XVxuLy8hIGF1dGhvciA6IFNxdWFyIHRlYW0sIG15c3F1YXIuY29tXG4vLyEgYXV0aG9yIDogRGF2aWQgUm9zc2VsbGF0IDogaHR0cHM6Ly9naXRodWIuY29tL2dob2xhZHJcbi8vISBhdXRob3IgOiBUaW4gQXVuZyBMaW4gOiBodHRwczovL2dpdGh1Yi5jb20vdGhhbnlhd3ppbm1pblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfhgYEnLFxuICAgICAgICAgICAgMjogJ+GBgicsXG4gICAgICAgICAgICAzOiAn4YGDJyxcbiAgICAgICAgICAgIDQ6ICfhgYQnLFxuICAgICAgICAgICAgNTogJ+GBhScsXG4gICAgICAgICAgICA2OiAn4YGGJyxcbiAgICAgICAgICAgIDc6ICfhgYcnLFxuICAgICAgICAgICAgODogJ+GBiCcsXG4gICAgICAgICAgICA5OiAn4YGJJyxcbiAgICAgICAgICAgIDA6ICfhgYAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4YGBJzogJzEnLFxuICAgICAgICAgICAgJ+GBgic6ICcyJyxcbiAgICAgICAgICAgICfhgYMnOiAnMycsXG4gICAgICAgICAgICAn4YGEJzogJzQnLFxuICAgICAgICAgICAgJ+GBhSc6ICc1JyxcbiAgICAgICAgICAgICfhgYYnOiAnNicsXG4gICAgICAgICAgICAn4YGHJzogJzcnLFxuICAgICAgICAgICAgJ+GBiCc6ICc4JyxcbiAgICAgICAgICAgICfhgYknOiAnOScsXG4gICAgICAgICAgICAn4YGAJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIG15ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXknLCB7XG4gICAgICAgIG1vbnRoczogJ+GAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GAh+GAlOGAul/hgJbhgLFf4YCZ4YCQ4YC6X+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAnOGAreGAr+GAhOGAul/hgJ7hgLxf4YCF4YCA4YC6X+GAoeGAseGArOGAgOGAul/hgJThgK3hgK9f4YCS4YCuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ+GAkOGAlOGAhOGAuuGAueGAguGAlOGAveGAsV/hgJDhgJThgIThgLrhgLnhgJzhgKxf4YCh4YCE4YC64YC54YCC4YCrX+GAl+GAr+GAkuGAueGAk+GAn+GAsOGAuF/hgIDhgLzhgKzhgJ7hgJXhgJDhgLHhgLhf4YCe4YCx4YCs4YCA4YC84YCsX+GAheGAlOGAsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG5cbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GAmuGAlOGAsS5dIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4YCZ4YCU4YCA4YC64YCW4YC84YCU4YC6XSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhgJnhgJThgLEu4YCAXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vhgJXhgLzhgK7hgLjhgIHhgLLhgLfhgJ7hgLHhgKxdIGRkZGQgTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfhgJzhgKzhgJnhgIrhgLrhgLcgJXMg4YCZ4YC+4YCsJyxcbiAgICAgICAgICAgIHBhc3Q6ICfhgJzhgL3hgJThgLrhgIHhgLLhgLfhgJ7hgLHhgKwgJXMg4YCAJyxcbiAgICAgICAgICAgIHM6ICfhgIXhgIDhgLnhgIDhgJThgLou4YCh4YCU4YCK4YC64YC44YCE4YCa4YC6JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YCF4YCA4YC54YCA4YCU4YC34YC6JyxcbiAgICAgICAgICAgIG06ICfhgJDhgIXhgLrhgJnhgK3hgJThgIXhgLonLFxuICAgICAgICAgICAgbW06ICclZCDhgJnhgK3hgJThgIXhgLonLFxuICAgICAgICAgICAgaDogJ+GAkOGAheGAuuGAlOGArOGAm+GAricsXG4gICAgICAgICAgICBoaDogJyVkIOGAlOGArOGAm+GAricsXG4gICAgICAgICAgICBkOiAn4YCQ4YCF4YC64YCb4YCA4YC6JyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YCb4YCA4YC6JyxcbiAgICAgICAgICAgIE06ICfhgJDhgIXhgLrhgJwnLFxuICAgICAgICAgICAgTU06ICclZCDhgJwnLFxuICAgICAgICAgICAgeTogJ+GAkOGAheGAuuGAlOGAvuGAheGAuicsXG4gICAgICAgICAgICB5eTogJyVkIOGAlOGAvuGAheGAuicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhgYHhgYLhgYPhgYThgYXhgYbhgYfhgYjhgYnhgYBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBteTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J3ZWdpYW4gQm9rbcOlbCBbbmJdXG4vLyEgYXV0aG9ycyA6IEVzcGVuIEhvdmxhbmRzZGFsIDogaHR0cHM6Ly9naXRodWIuY29tL3JleHhhcnNcbi8vISAgICAgICAgICAgU2lndXJkIEdhcnRtYW5uIDogaHR0cHM6Ly9naXRodWIuY29tL3NpZ3VyZGdhXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG5iID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZXR0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VyJyxcbiAgICAgICAgICAgIHc6ICdlbiB1a2UnLFxuICAgICAgICAgICAgd3c6ICclZCB1a2VyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuZWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTmVwYWxlc2UgW25lXVxuLy8hIGF1dGhvciA6IHN1dmFzaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXZhc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBuZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25lJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpIfgpKQuX+CkuOCli+Ckri5f4KSu4KSZ4KWN4KSX4KSyLl/gpKzgpYHgpKcuX+CkrOCkv+CkueCkvy5f4KS24KWB4KSV4KWN4KSwLl/gpLbgpKjgpL8uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Ckhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCkvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkrOCkv+CkueCkvuCkqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpL/gpIngpIHgpLjgpYsnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkgeCknScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkrOCkv+CkueCkvuCkqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KS/4KSJ4KSB4KS44KWLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpIHgpJ0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpK3gpYvgpLLgpL9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkueCkv+CknOCli10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpL4nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkheCkl+CkvuCkoeCkvycsXG4gICAgICAgICAgICBzOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleClh+Cko+CljeCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkrOCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkrOCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEdXRjaCAoQmVsZ2l1bSkgW25sLWJlXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eamFuL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYWFydHxtcnQuPyQvaSxcbiAgICAgICAgICAgIC9eYXByL2ksXG4gICAgICAgICAgICAvXm1laSQvaSxcbiAgICAgICAgICAgIC9eanVuW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmp1bFtpLl0/JC9pLFxuICAgICAgICAgICAgL15hdWcvaSxcbiAgICAgICAgICAgIC9ec2VwL2ksXG4gICAgICAgICAgICAvXm9rdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZGVjL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubEJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmwtYmUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICd6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvdmVyICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBnZWxlZGVuJyxcbiAgICAgICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVuJyxcbiAgICAgICAgICAgIG06ICfDqcOpbiBtaW51dXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICfDqcOpbiB1dXInLFxuICAgICAgICAgICAgaGg6ICclZCB1dXInLFxuICAgICAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE06ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeTogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sQmU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggW25sXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eamFuL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYWFydHxtcnQuPyQvaSxcbiAgICAgICAgICAgIC9eYXByL2ksXG4gICAgICAgICAgICAvXm1laSQvaSxcbiAgICAgICAgICAgIC9eanVuW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmp1bFtpLl0/JC9pLFxuICAgICAgICAgICAgL15hdWcvaSxcbiAgICAgICAgICAgIC9ec2VwL2ksXG4gICAgICAgICAgICAvXm9rdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZGVjL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98bWVpfGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQ6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICB3OiAnw6nDqW4gd2VlaycsXG4gICAgICAgICAgICB3dzogJyVkIHdla2VuJyxcbiAgICAgICAgICAgIE06ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeTogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE55bm9yc2sgW25uXVxuLy8hIGF1dGhvcnMgOiBodHRwczovL2dpdGh1Yi5jb20vbWVjaHV3aW5kXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG5uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbm4nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc3VuZGFnX23DpW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3UuX23DpS5fdHkuX29uLl90by5fZnIuX2xhdS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbcOlX3R5X29uX3RvX2ZyX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0kgZGFnIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJIG1vcmdvbiBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xva2thXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0kgZ8OlciBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0bDuHJlZ8OlYW5kZV0gZGRkZCBba2xva2thXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRhbicsXG4gICAgICAgICAgICBzOiAnbm9rcmUgc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kJyxcbiAgICAgICAgICAgIG06ICdlaXQgbWludXR0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0JyxcbiAgICAgICAgICAgIGg6ICdlaW4gdGltZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlaW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgdzogJ2VpIHZla2UnLFxuICAgICAgICAgICAgd3c6ICclZCB2ZWtlcicsXG4gICAgICAgICAgICBNOiAnZWluIG3DpW5hZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHk6ICdlaXQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBPY2NpdGFuLCBsZW5nYWRvY2lhbiBkaWFsZWN0ZSBbb2MtbG5jXVxuLy8hIGF1dGhvciA6IFF1ZW50aW4gUEFHw4hTIDogaHR0cHM6Ly9naXRodWIuY29tL1F1ZW50eTMxXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgb2NMbmMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdvYy1sbmMnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnZ2VuacOocl9mZWJyacOocl9tYXLDp19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0w7JicmVfbm92ZW1icmVfZGVjZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlIGdlbmnDqHJfZGUgZmVicmnDqHJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdMOyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGdfZGxfZG1fZGNfZGpfZHZfZHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdcOoaSBhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbWFuIGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpw6hyIGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbcGFzc2F0IGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5hcyBzZWdvbmRhcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29uZGFzJyxcbiAgICAgICAgICAgIG06ICd1bmEgbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRhcycsXG4gICAgICAgICAgICBoOiAndW5hIG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvcm4nLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3JucycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBvY0xuYztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQdW5qYWJpIChJbmRpYSkgW3BhLWluXVxuLy8hIGF1dGhvciA6IEhhcnByZWV0IFNpbmdoIDogaHR0cHM6Ly9naXRodWIuY29tL2hhcnByZWV0a2hhbHNhZ3RiaXRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KmnJyxcbiAgICAgICAgICAgIDI6ICfgqagnLFxuICAgICAgICAgICAgMzogJ+CpqScsXG4gICAgICAgICAgICA0OiAn4KmqJyxcbiAgICAgICAgICAgIDU6ICfgqasnLFxuICAgICAgICAgICAgNjogJ+CprCcsXG4gICAgICAgICAgICA3OiAn4KmtJyxcbiAgICAgICAgICAgIDg6ICfgqa4nLFxuICAgICAgICAgICAgOTogJ+CprycsXG4gICAgICAgICAgICAwOiAn4KmmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cppyc6ICcxJyxcbiAgICAgICAgICAgICfgqagnOiAnMicsXG4gICAgICAgICAgICAn4KmpJzogJzMnLFxuICAgICAgICAgICAgJ+Cpqic6ICc0JyxcbiAgICAgICAgICAgICfgqasnOiAnNScsXG4gICAgICAgICAgICAn4KmsJzogJzYnLFxuICAgICAgICAgICAgJ+CprSc6ICc3JyxcbiAgICAgICAgICAgICfgqa4nOiAnOCcsXG4gICAgICAgICAgICAn4KmvJzogJzknLFxuICAgICAgICAgICAgJ+Cppic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBwYUluID0gbW9tZW50LmRlZmluZUxvY2FsZSgncGEtaW4nLCB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBtb250aHMgbmFtZSBhcyBwZXIgTmFuYWtzaGFoaSBDYWxlbmRhciBidXQgdGhleSBhcmUgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbW9udGhzOiAn4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4KiQ4Kik4Ki14Ki+4KiwX+CouOCpi+CoruCoteCovuCosF/gqK7gqbDgqJfgqLLgqLXgqL7gqLBf4Kis4KmB4Kin4Ki14Ki+4KiwX+CoteCpgOCosOCoteCovuCosF/gqLjgqLzgqYHgqbHgqJXgqLDgqLXgqL7gqLBf4Ki44Ki84Kio4KmA4Kia4Kiw4Ki14Ki+4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCoteConOCphycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KiF4KicXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4KiF4KiX4Kiy4Ki+XSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Kiq4Ki/4Kib4Kiy4KmHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCoteCov+CpseComicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4Kiq4Ki/4Kib4Kiy4KmHJyxcbiAgICAgICAgICAgIHM6ICfgqJXgqYHgqJ0g4Ki44KiV4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ki44KiV4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG06ICfgqIfgqJUg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIGg6ICfgqIfgqbHgqJUg4KiY4Kmw4Kif4Ki+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KiY4Kmw4Kif4KmHJyxcbiAgICAgICAgICAgIGQ6ICfgqIfgqbHgqJUg4Kim4Ki/4KioJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kim4Ki/4KioJyxcbiAgICAgICAgICAgIE06ICfgqIfgqbHgqJUg4Kiu4Ki54KmA4Kio4Ki+JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kiu4Ki54KmA4Kio4KmHJyxcbiAgICAgICAgICAgIHk6ICfgqIfgqbHgqJUg4Ki44Ki+4KiyJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Ki44Ki+4KiyJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cpp+CpqOCpqeCpquCpq+CprOCpreCpruCpr+Cppl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUHVuamFiaSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBQdW5qYWJpLlxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kiw4Ki+4KikfOCouOCoteCph+CosHzgqKbgqYHgqKrgqLngqL/gqLB84Ki44Ki84Ki+4KiuLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kiw4Ki+4KikJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki14KmH4KiwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CopuCpgeCoquCoueCov+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki84Ki+4KiuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ki44Ki14KmH4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqKbgqYHgqKrgqLngqL/gqLAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCovOCovuCoric7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kiw4Ki+4KikJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhSW47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9saXNoIFtwbF1cbi8vISBhdXRob3IgOiBSYWZhbCBIaXJzeiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldm9MXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzTm9taW5hdGl2ZSA9XG4gICAgICAgICAgICAnc3R5Y3plxYRfbHV0eV9tYXJ6ZWNfa3dpZWNpZcWEX21hal9jemVyd2llY19saXBpZWNfc2llcnBpZcWEX3dyemVzaWXFhF9wYcW6ZHppZXJuaWtfbGlzdG9wYWRfZ3J1ZHppZcWEJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1N1YmplY3RpdmUgPVxuICAgICAgICAgICAgJ3N0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZcWbbmlhX3Bhxbpkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXnN0eS9pLFxuICAgICAgICAgICAgL15sdXQvaSxcbiAgICAgICAgICAgIC9ebWFyL2ksXG4gICAgICAgICAgICAvXmt3aS9pLFxuICAgICAgICAgICAgL15tYWovaSxcbiAgICAgICAgICAgIC9eY3plL2ksXG4gICAgICAgICAgICAvXmxpcC9pLFxuICAgICAgICAgICAgL15zaWUvaSxcbiAgICAgICAgICAgIC9ed3J6L2ksXG4gICAgICAgICAgICAvXnBhxbovaSxcbiAgICAgICAgICAgIC9ebGlzL2ksXG4gICAgICAgICAgICAvXmdydS9pLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuICUgMTAgPCA1ICYmIG4gJSAxMCA+IDEgJiYgfn4obiAvIDEwKSAlIDEwICE9PSAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6ICdtaW51dMSZJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbnV0eScgOiAnbWludXQnKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2dvZHppbmEnIDogJ2dvZHppbsSZJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2dvZHppbnknIDogJ2dvZHppbicpO1xuICAgICAgICAgICAgY2FzZSAnd3cnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAndHlnb2RuaWUnIDogJ3R5Z29kbmknKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pZXNpxIVjZScgOiAnbWllc2nEmWN5Jyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdsYXRhJyA6ICdsYXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BsJywge1xuICAgICAgICBtb250aHM6IGZ1bmN0aW9uIChtb21lbnRUb0Zvcm1hdCwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudFRvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc05vbWluYXRpdmU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9EIE1NTU0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTdWJqZWN0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzTm9taW5hdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ25pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZHpfcG9uX3d0X8Wbcl9jendfcHRfc29iJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ05kX1BuX1d0X8Wacl9Del9QdF9Tbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEemnFmyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0p1dHJvIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgbmllZHppZWzEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV2Ugd3RvcmVrIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIMWbcm9kxJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgc29ib3TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1ddIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tXY3pvcmFqIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgxZtyb2TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgc29ib3TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgnldIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdGVtdScsXG4gICAgICAgICAgICBzOiAna2lsa2Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICcxIGR6aWXFhCcsXG4gICAgICAgICAgICBkZDogJyVkIGRuaScsXG4gICAgICAgICAgICB3OiAndHlkemllxYQnLFxuICAgICAgICAgICAgd3c6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtaWVzacSFYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ3JvaycsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgKEJyYXppbCkgW3B0LWJyXVxuLy8hIGF1dGhvciA6IENhaW8gUmliZWlybyBQZXJlaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NhaW8tcmliZWlyby1wZXJlaXJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHRCciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0LWJyJywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnZG9taW5nb19zZWd1bmRhLWZlaXJhX3RlcsOnYS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fMsKqXzPCql80wqpfNcKqXzbCql9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdwb3Vjb3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIGludmFsaWREYXRlOiAnRGF0YSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0QnI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9ydHVndWVzZSBbcHRdXG4vLyEgYXV0aG9yIDogSmVmZmVyc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2phbGV4NzlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0Jywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIHc6ICd1bWEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSb21hbmlhbiBbcm9dXG4vLyEgYXV0aG9yIDogVmxhZCBHdXJkaWdhIDogaHR0cHM6Ly9naXRodWIuY29tL2d1cmRpZ2Fcbi8vISBhdXRob3IgOiBWYWxlbnRpbiBBZ2FjaGkgOiBodHRwczovL2dpdGh1Yi5jb20vYXZhbHlcbi8vISBhdXRob3IgOiBFbWFudWVsIENlcG9pIDogaHR0cHM6Ly9naXRodWIuY29tL2NlcGVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAgICAgc3M6ICdzZWN1bmRlJyxcbiAgICAgICAgICAgICAgICBtbTogJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgaGg6ICdvcmUnLFxuICAgICAgICAgICAgICAgIGRkOiAnemlsZScsXG4gICAgICAgICAgICAgICAgd3c6ICdzxINwdMSDbcOibmknLFxuICAgICAgICAgICAgICAgIE1NOiAnbHVuaScsXG4gICAgICAgICAgICAgICAgeXk6ICdhbmknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgJztcbiAgICAgICAgaWYgKG51bWJlciAlIDEwMCA+PSAyMCB8fCAobnVtYmVyID49IDEwMCAmJiBudW1iZXIgJSAxMDAgPT09IDApKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSAnIGRlICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciArIHNlcGFyYXRvciArIGZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBybyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3JvJywge1xuICAgICAgICBtb250aHM6ICdpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkdW1pbmljxINfbHVuaV9tYXLIm2lfbWllcmN1cmlfam9pX3ZpbmVyaV9zw6JtYsSDdMSDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU8OibScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEdV9MdV9NYV9NaV9Kb19WaV9Tw6InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1themkgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbcOiaW5lIGxhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llcmkgbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2Zvc3RhXSBkZGRkIFtsYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwZXN0ZSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw65uIHVybcSDJyxcbiAgICAgICAgICAgIHM6ICdjw6J0ZXZhIHNlY3VuZGUnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAnbyBvcsSDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ28gemknLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAnbyBzxINwdMSDbcOibsSDJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ28gbHVuxIMnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBybztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSdXNzaWFuIFtydV1cbi8vISBhdXRob3IgOiBWaWt0b3JtaW5hdG9yIDogaHR0cHM6Ly9naXRodWIuY29tL1Zpa3Rvcm1pbmF0b3Jcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6INCa0L7RgNC10L3QsdC10YDQsyDQnNCw0YDQuiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb2NrZXRwYWlyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInIDogJ9C80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoaDogJ9GH0LDRgV/Rh9Cw0YHQsF/Rh9Cw0YHQvtCyJyxcbiAgICAgICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5JyxcbiAgICAgICAgICAgIHd3OiAn0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YwnLFxuICAgICAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQsicsXG4gICAgICAgICAgICB5eTogJ9Cz0L7QtF/Qs9C+0LTQsF/Qu9C10YInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsCcgOiAn0LzQuNC90YPRgtGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL17Rj9C90LIvaSxcbiAgICAgICAgL17RhNC10LIvaSxcbiAgICAgICAgL17QvNCw0YAvaSxcbiAgICAgICAgL17QsNC/0YAvaSxcbiAgICAgICAgL17QvNCwW9C50Y9dL2ksXG4gICAgICAgIC9e0LjRjtC9L2ksXG4gICAgICAgIC9e0LjRjtC7L2ksXG4gICAgICAgIC9e0LDQstCzL2ksXG4gICAgICAgIC9e0YHQtdC9L2ksXG4gICAgICAgIC9e0L7QutGCL2ksXG4gICAgICAgIC9e0L3QvtGPL2ksXG4gICAgICAgIC9e0LTQtdC6L2ksXG4gICAgXTtcblxuICAgIC8vIGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL3J1bGVzLzEzOS1wcm9wIDogwqcgMTAzXG4gICAgLy8g0KHQvtC60YDQsNGJ0LXQvdC40Y8g0LzQtdGB0Y/RhtC10LI6IGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL2J1cm8vc2VhcmNoLWFuc3dlcj9zPTI0MjYzN1xuICAgIC8vIENMRFIgZGF0YTogICAgICAgICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2NoYXJ0cy8yOC9zdW1tYXJ5L3J1Lmh0bWwjMTc1M1xuICAgIHZhciBydSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3J1Jywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDRj1/RhNC10LLRgNCw0LvRj1/QvNCw0YDRgtCwX9Cw0L/RgNC10LvRj1/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCz0YPRgdGC0LBf0YHQtdC90YLRj9Cx0YDRj1/QvtC60YLRj9Cx0YDRj1/QvdC+0Y/QsdGA0Y9f0LTQtdC60LDQsdGA0Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GP0L3QstCw0YDRjF/RhNC10LLRgNCw0LvRjF/QvNCw0YDRgl/QsNC/0YDQtdC70Yxf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgNGMX9C+0LrRgtGP0LHRgNGMX9C90L7Rj9Cx0YDRjF/QtNC10LrQsNCx0YDRjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiB7XG4gICAgICAgICAgICAvLyDQv9C+IENMRFIg0LjQvNC10L3QvdC+IFwi0LjRjtC7LlwiINC4IFwi0LjRjtC9LlwiLCDQvdC+INC60LDQutC+0Lkg0YHQvNGL0YHQuyDQvNC10L3Rj9GC0Ywg0LHRg9C60LLRgyDQvdCwINGC0L7Rh9C60YM/XG4gICAgICAgICAgICBmb3JtYXQ6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00YNf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0YNf0YHRg9Cx0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0JLQsl0gPyg/OtC/0YDQvtGI0LvRg9GOfNGB0LvQtdC00YPRjtGJ0YPRjnzRjdGC0YMpPyA/XSA/ZGRkZC8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuCwg0L/QviDRgtGA0Lgg0LHRg9C60LLRiywg0LTQu9GPINC90LXQutC+0YLQvtGA0YvRhSwg0L/QviA0INCx0YPQutCy0YssINGB0L7QutGA0LDRidC10L3QuNGPINGBINGC0L7Rh9C60L7QuSDQuCDQsdC10Lcg0YLQvtGH0LrQuFxuICAgICAgICBtb250aHNSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC60L7Qv9C40Y8g0L/RgNC10LTRi9C00YPRidC10LPQvlxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QstCw0YBb0Y/RjF180YTQtdCy0YDQsNC7W9GP0YxdfNC80LDRgNGC0LA/fNCw0L/RgNC10Ltb0Y/RjF180LzQsFvRj9C5XXzQuNGO0L1b0Y/RjF180LjRjtC7W9GP0YxdfNCw0LLQs9GD0YHRgtCwP3zRgdC10L3RgtGP0LHRgFvRj9GMXXzQvtC60YLRj9Cx0YBb0Y/RjF180L3QvtGP0LHRgFvRj9GMXXzQtNC10LrQsNCx0YBb0Y/RjF0pL2ksXG5cbiAgICAgICAgLy8g0JLRi9GA0LDQttC10L3QuNC1LCDQutC+0YLQvtGA0L7QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC+0LvRjNC60L4g0YHQvtC60YDQsNGJ0ZHQvdC90YvQvCDRhNC+0YDQvNCw0LxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKNGP0L3QslxcLnzRhNC10LLRgD9cXC580LzQsNGAW9GCLl180LDQv9GAXFwufNC80LBb0Y/QuV180LjRjtC9W9GM0Y8uXXzQuNGO0Ltb0YzRjy5dfNCw0LLQs1xcLnzRgdC10L3Rgj9cXC580L7QutGCXFwufNC90L7Rj9CxP1xcLnzQtNC10LpcXC4pL2ksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDQsy4sIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Ch0LXQs9C+0LTQvdGPLCDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0LLRgtGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LjQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70L7QtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GL0LldIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9GH0LXRgNC10LcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINC90LDQt9Cw0LQnLFxuICAgICAgICAgICAgczogJ9C90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgdzogJ9C90LXQtNC10LvRjycsXG4gICAgICAgICAgICB3dzogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9C4fNGD0YLRgNCwfNC00L3Rj3zQstC10YfQtdGA0LAvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GD0YLRgNCwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C10YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvnzRjykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0Y8nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBydTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5kaGkgW3NkXVxuLy8hIGF1dGhvciA6IE5hcmFpbiBTYWdhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uYXJhaW5zYWdhclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfYrNmG2YjYsdmKJyxcbiAgICAgICAgICAgICfZgdmK2KjYsdmI2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KbZiicsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9ih2ZAnLFxuICAgICAgICAgICAgJ9ii2q/Ys9m9JyxcbiAgICAgICAgICAgICfYs9mK2b7ZvdmF2KjYsScsXG4gICAgICAgICAgICAn2KLaqtm92YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgICAgICfaitiz2YXYqNixJyxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5cyA9IFsn2KLahtixJywgJ9iz2YjZhdixJywgJ9in2rHYp9ix2YgnLCAn2KfYsdio2LknLCAn2K7ZhdmK2LMnLCAn2KzZhdi5JywgJ9qH2Ybah9ixJ107XG5cbiAgICB2YXIgc2QgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZCcsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9qEXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9iz2oDYp9q72YpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2Kfas9mK2YYg2YfZgdiq2Yog2KrZil0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vaqtin2YTZh9mHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1var9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINm+2YjYoScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2KfasycsXG4gICAgICAgICAgICBzOiAn2obZhtivINiz2YraqtmG2oonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9mK2qrZhtqKJyxcbiAgICAgICAgICAgIG06ICfZh9qqINmF2YbZvScsXG4gICAgICAgICAgICBtbTogJyVkINmF2YbZvScsXG4gICAgICAgICAgICBoOiAn2YfaqiDaqtmE2KfaqicsXG4gICAgICAgICAgICBoaDogJyVkINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGQ6ICfZh9qqINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDaj9mK2YbZh9mGJyxcbiAgICAgICAgICAgIE06ICfZh9qqINmF2YfZitmG2YgnLFxuICAgICAgICAgICAgTU06ICclZCDZhdmH2YrZhtinJyxcbiAgICAgICAgICAgIHk6ICfZh9qqINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5vcnRoZXJuIFNhbWkgW3NlXVxuLy8hIGF1dGhvcnMgOiBCw6VyZCBSb2xzdGFkIEhlbnJpa3NlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJhbWVsbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHNlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2UnLCB7XG4gICAgICAgIG1vbnRoczogJ2/EkcSRYWphZ2Vtw6FubnVfZ3VvdnZhbcOhbm51X25qdWvEjWFtw6FubnVfY3VvxYtvbcOhbm51X21pZXNzZW3DoW5udV9nZWFzc2Vtw6FubnVfc3VvaWRuZW3DoW5udV9ib3JnZW3DoW5udV/EjWFrxI1hbcOhbm51X2dvbGdnb3Rtw6FubnVfc2vDoWJtYW3DoW5udV9qdW92bGFtw6FubnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc290bmFiZWFpdmlfdnVvc3PDoXJnYV9tYcWLxYtlYsOhcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbMOhdnZhcmRhdCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzX3ZfbV9nX2RfYl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRC4gW2IuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW290bmUgdGldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaWh0dGluIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2lrdGUgdGldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW292ZGRpdF0gZGRkZCBbdGldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgZ2Vhxb5lcycsXG4gICAgICAgICAgICBwYXN0OiAnbWHFi2l0ICVzJyxcbiAgICAgICAgICAgIHM6ICdtb2FkZGUgc2VrdW5kZGF0JyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZGF0JyxcbiAgICAgICAgICAgIG06ICdva3RhIG1pbnVodGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51aHRhdCcsXG4gICAgICAgICAgICBoOiAnb2t0YSBkaWltbXUnLFxuICAgICAgICAgICAgaGg6ICclZCBkaWltbXV0JyxcbiAgICAgICAgICAgIGQ6ICdva3RhIGJlYWl2aScsXG4gICAgICAgICAgICBkZDogJyVkIGJlYWl2dml0JyxcbiAgICAgICAgICAgIE06ICdva3RhIG3DoW5udScsXG4gICAgICAgICAgICBNTTogJyVkIG3DoW51dCcsXG4gICAgICAgICAgICB5OiAnb2t0YSBqYWhraScsXG4gICAgICAgICAgICB5eTogJyVkIGphZ2l0JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5oYWxlc2UgW3NpXVxuLy8hIGF1dGhvciA6IFNhbXBhdGggU2l0aW5hbWFsdXdhIDogaHR0cHM6Ly9naXRodWIuY29tL3NhbXBhdGhzcmlzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICAvKmpzaGludCAtVzEwMCovXG4gICAgdmFyIHNpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2knLCB7XG4gICAgICAgIG1vbnRoczogJ+C2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+C2ouC2sV/gtrTgt5ngtrZf4La44LeP4La74LeKX+C2heC2tOC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt51f4LeD4LeQ4La04LeKX+C2lOC2muC3il/gtrHgt5zgt4Dgt5Bf4Lav4LeZ4LeD4LeQJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgtolf4LeDX+C2hV/gtrZf4La24LeK4oCN4La7X+C3g+C3kl/gt4Pgt5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnYSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ2EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkgTU1NTSBEJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgTU1NTSBELCBhIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzcycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C2heC2r10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C3hOC3meC2p10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C2iuC2uuC3ml0gTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4Laa4LeS4Lax4LeKJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C2muC2pyDgtrTgt5ngtrsnLFxuICAgICAgICAgICAgczogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICAgICAgc3M6ICfgtq3gtq3gt4rgtrTgtrsgJWQnLFxuICAgICAgICAgICAgbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lOC3gCcsXG4gICAgICAgICAgICBtbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgICAgICBoOiAn4La04LeQ4La6JyxcbiAgICAgICAgICAgIGhoOiAn4La04LeQ4La6ICVkJyxcbiAgICAgICAgICAgIGQ6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICAgICAgZGQ6ICfgtq/gt5LgtrEgJWQnLFxuICAgICAgICAgICAgTTogJ+C2uOC3j+C3g+C2uicsXG4gICAgICAgICAgICBNTTogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgICAgICB5OiAn4LeA4LeD4La7JyxcbiAgICAgICAgICAgIHl5OiAn4LeA4LeD4La7ICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9IOC3gOC3kOC2seC3ki8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIOC3gOC3kOC2seC3kic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtrTgt5ngtrsg4LeA4La74LeUfOC2tOC3g+C3iiDgt4Dgtrvgt5R84La04LeZLuC3gHzgtrQu4LeALi8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4La0LuC3gC4nIHx8IGlucHV0ID09PSAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn4La0LuC3gC4nIDogJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrTgt5ku4LeALicgOiAn4La04LeZ4La7IOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2k7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2xvdmFrIFtza11cbi8vISBhdXRob3IgOiBNYXJ0aW4gTWlua2EgOiBodHRwczovL2dpdGh1Yi5jb20vazJzXG4vLyEgYmFzZWQgb24gd29yayBvZiBwZXRyYmVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRyYmVsYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9XG4gICAgICAgICAgICAnamFudcOhcl9mZWJydcOhcl9tYXJlY19hcHLDrWxfbcOhal9qw7puX2rDumxfYXVndXN0X3NlcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdqYW5fZmViX21hcl9hcHJfbcOhal9qw7puX2rDumxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiA+IDEgJiYgbiA8IDU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOiAvLyBhIGZldyBzZWNvbmRzIC8gaW4gYSBmZXcgc2Vjb25kcyAvIGEgZmV3IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncMOhciBzZWvDum5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla8O6bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW7DunRhJyA6IGlzRnV0dXJlID8gJ21pbsO6dHUnIDogJ21pbsO6dG91JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWluw7p0eScgOiAnbWluw7p0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW7DunRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2gnOiAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kw61uJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZCc6IC8vIGEgZGF5IC8gaW4gYSBkYXkgLyBhIGRheSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkZcWIJyA6ICdkxYhvbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RuaScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZMWIYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2lhYycgOiAnbWVzaWFjb20nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtZXNpYWNlJyA6ICdtZXNpYWNvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWVzaWFjbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3knOiAvLyBhIHllYXIgLyBpbiBhIHllYXIgLyBhIHllYXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncm9rJyA6ICdyb2tvbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ3Jva292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdyb2ttaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNrID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2snLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkZcS+YV9wb25kZWxva191dG9yb2tfc3RyZWRhX8WhdHZydG9rX3BpYXRva19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbemFqdHJhIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZvIMWhdHZydG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBwaWF0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNsb3ZlbmlhbiBbc2xdXG4vLyEgYXV0aG9yIDogUm9iZXJ0IFNlZG92xaFlayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWRvdnNla1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgICAgID8gJ25la2FqIHNla3VuZCdcbiAgICAgICAgICAgICAgICAgICAgOiAnbmVrYWogc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3Nla3VuZG8nIDogJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla3VuZGknIDogJ3Nla3VuZGFoJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kZScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSBtaW51dGEnIDogJ2VubyBtaW51dG8nO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6ICdtaW51dG8nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0aScgOiAnbWludXRhbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGUnIDogJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dCcgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZW5hIHVyYScgOiAnZW5vIHVybyc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICd1cmEnIDogJ3Vybyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJpJyA6ICd1cmFtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyZScgOiAndXJhbWknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyJyA6ICd1cmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdlbiBkYW4nIDogJ2VuaW0gZG5lbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkYW4nIDogJ2RuZW0nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RuaScgOiAnZG5ldm9tYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdlbiBtZXNlYycgOiAnZW5pbSBtZXNlY2VtJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjJyA6ICdtZXNlY2VtJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2EnIDogJ21lc2VjZW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNlJyA6ICdtZXNlY2knO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZXYnIDogJ21lc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdlbm8gbGV0bycgOiAnZW5pbSBsZXRvbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRvJyA6ICdsZXRvbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0aScgOiAnbGV0b21hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0YScgOiAnbGV0aSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0JyA6ICdsZXRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NsJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJlY19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV/EjWV0cnRla19wZXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdG9yLl9zcmUuX8SNZXQuX3BldC5fc29iLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb190b19zcl/EjWVfcGVfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC4gTU0uIFlZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuZXMgb2JdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbanV0cmkgb2JdIExUJyxcblxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbc3JlZG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmFqIG9iXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtuZWRlbGpvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc3JlZG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuamldIGRkZGQgW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnxI1leiAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlZCAlcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2w7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQWxiYW5pYW4gW3NxXVxuLy8hIGF1dGhvciA6IEZsYWvDq3JpbSBJc21hbmkgOiBodHRwczovL2dpdGh1Yi5jb20vZmxha2VyaW1pXG4vLyEgYXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBPZXJkIEN1a2FsbGEgOiBodHRwczovL2dpdGh1Yi5jb20vb2VyZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHNxID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3EnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX07Dq250b3JfRGhqZXRvcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTsOrbl9EaGonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRSBEaWVsX0UgSMOrbsOrX0UgTWFydMOrX0UgTcOrcmt1csOrX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1bsOrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRGllX0jDq25fTWFyX03Dq3JfRW5qX1ByZV9TaHQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRF9IX01hX03Dq19FX1BfU2gnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1BEfE1ELyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDApID09PSAnTSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VycyA8IDEyID8gJ1BEJyA6ICdNRCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbU290IG7Dq10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tOZXPDq3IgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW27Dq10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEamUgbsOrXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Uga2FsdWFyIG7Dq10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICduw6sgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIG3DqyBwYXLDqycsXG4gICAgICAgICAgICBzOiAnZGlzYSBzZWtvbmRhJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kYScsXG4gICAgICAgICAgICBtOiAnbmrDqyBtaW51dMOrJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRhJyxcbiAgICAgICAgICAgIGg6ICduasOrIG9yw6snLFxuICAgICAgICAgICAgaGg6ICclZCBvcsOrJyxcbiAgICAgICAgICAgIGQ6ICduasOrIGRpdMOrJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGl0w6snLFxuICAgICAgICAgICAgTTogJ25qw6sgbXVhaicsXG4gICAgICAgICAgICBNTTogJyVkIG11YWonLFxuICAgICAgICAgICAgeTogJ25qw6sgdml0JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdml0ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBDeXJpbGxpYyBbc3ItY3lybF1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ9GB0LXQutGD0L3QtNCwJywgJ9GB0LXQutGD0L3QtNC1JywgJ9GB0LXQutGD0L3QtNC4J10sXG4gICAgICAgICAgICBtOiBbJ9GY0LXQtNCw0L0g0LzQuNC90YPRgicsICfRmNC10LTQvdC+0LMg0LzQuNC90YPRgtCwJ10sXG4gICAgICAgICAgICBtbTogWyfQvNC40L3Rg9GCJywgJ9C80LjQvdGD0YLQsCcsICfQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIGg6IFsn0ZjQtdC00LDQvSDRgdCw0YInLCAn0ZjQtdC00L3QvtCzINGB0LDRgtCwJ10sXG4gICAgICAgICAgICBoaDogWyfRgdCw0YInLCAn0YHQsNGC0LAnLCAn0YHQsNGC0LgnXSxcbiAgICAgICAgICAgIGQ6IFsn0ZjQtdC00LDQvSDQtNCw0L0nLCAn0ZjQtdC00L3QvtCzINC00LDQvdCwJ10sXG4gICAgICAgICAgICBkZDogWyfQtNCw0L0nLCAn0LTQsNC90LAnLCAn0LTQsNC90LAnXSxcbiAgICAgICAgICAgIE06IFsn0ZjQtdC00LDQvSDQvNC10YHQtdGGJywgJ9GY0LXQtNC90L7QsyDQvNC10YHQtdGG0LAnXSxcbiAgICAgICAgICAgIE1NOiBbJ9C80LXRgdC10YYnLCAn0LzQtdGB0LXRhtCwJywgJ9C80LXRgdC10YbQuCddLFxuICAgICAgICAgICAgeTogWyfRmNC10LTQvdGDINCz0L7QtNC40L3RgycsICfRmNC10LTQvdC1INCz0L7QtNC40L3QtSddLFxuICAgICAgICAgICAgeXk6IFsn0LPQvtC00LjQvdGDJywgJ9Cz0L7QtNC40L3QtScsICfQs9C+0LTQuNC90LAnXSxcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwID49IDEgJiZcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMCA8PSA0ICYmXG4gICAgICAgICAgICAgICAgKG51bWJlciAlIDEwMCA8IDEwIHx8IG51bWJlciAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdvcmRLZXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV0sXG4gICAgICAgICAgICAgICAgd29yZDtcblxuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAneScgJiYgd2l0aG91dFN1ZmZpeCkgcmV0dXJuICfRmNC10LTQvdCwINCz0L7QtNC40L3QsCc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd29yZCA9IHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpO1xuICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAneXknICYmIHdpdGhvdXRTdWZmaXggJiYgd29yZCA9PT0gJ9Cz0L7QtNC40L3RgycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDQs9C+0LTQuNC90LAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgd29yZDtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIHNyQ3lybCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyLWN5cmwnLCB7XG4gICAgICAgIG1vbnRoczogJ9GY0LDQvdGD0LDRgF/RhNC10LHRgNGD0LDRgF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQsdCw0YBf0L7QutGC0L7QsdCw0YBf0L3QvtCy0LXQvNCx0LDRgF/QtNC10YbQtdC80LHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfRmNCw0L0uX9GE0LXQsS5f0LzQsNGALl/QsNC/0YAuX9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQsy5f0YHQtdC/Ll/QvtC60YIuX9C90L7Qsi5f0LTQtdGGLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdGZ0LBf0L/QvtC90LXQtNC10ZnQsNC6X9GD0YLQvtGA0LDQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtCw0Lpf0L/QtdGC0LDQul/RgdGD0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LQuX9C/0L7QvS5f0YPRgtC+Ll/RgdGA0LUuX9GH0LXRgi5f0L/QtdGCLl/RgdGD0LEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LVf0L/Qvl/Rg9GCX9GB0YBf0YfQtV/Qv9C1X9GB0YMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWS4nLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZLiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQtNCw0L3QsNGBINGDXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9GB0YPRgtGA0LAg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0L3QtdC00LXRmdGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvRgdGA0LXQtNGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvRgdGD0LHQvtGC0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gZGRkZCBb0YNdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vRmNGD0YfQtSDRg10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFdlZWtEYXlzID0gW1xuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9C90LXQtNC10ZnQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C+0L3QtdC00LXRmdC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YPRgtC+0YDQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGA0LXQtNC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9GH0LXRgtCy0YDRgtC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0L/QtdGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0YHRg9Cx0L7RgtC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQv9GA0LUgJXMnLFxuICAgICAgICAgICAgczogJ9C90LXQutC+0LvQuNC60L4g0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzckN5cmw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBbc3JdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmRhJywgJ3Nla3VuZGUnLCAnc2VrdW5kaSddLFxuICAgICAgICAgICAgbTogWydqZWRhbiBtaW51dCcsICdqZWRub2cgbWludXRhJ10sXG4gICAgICAgICAgICBtbTogWydtaW51dCcsICdtaW51dGEnLCAnbWludXRhJ10sXG4gICAgICAgICAgICBoOiBbJ2plZGFuIHNhdCcsICdqZWRub2cgc2F0YSddLFxuICAgICAgICAgICAgaGg6IFsnc2F0JywgJ3NhdGEnLCAnc2F0aSddLFxuICAgICAgICAgICAgZDogWydqZWRhbiBkYW4nLCAnamVkbm9nIGRhbmEnXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE06IFsnamVkYW4gbWVzZWMnLCAnamVkbm9nIG1lc2VjYSddLFxuICAgICAgICAgICAgTU06IFsnbWVzZWMnLCAnbWVzZWNhJywgJ21lc2VjaSddLFxuICAgICAgICAgICAgeTogWydqZWRudSBnb2RpbnUnLCAnamVkbmUgZ29kaW5lJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbnUnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPj0gMSAmJlxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAobnVtYmVyICUgMTAwIDwgMTAgfHwgbnVtYmVyICUgMTAwID49IDIwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XSxcbiAgICAgICAgICAgICAgICB3b3JkO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbWluYXRpdlxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd5JyAmJiB3aXRob3V0U3VmZml4KSByZXR1cm4gJ2plZG5hIGdvZGluYSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd29yZCA9IHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpO1xuICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAneXknICYmIHdpdGhvdXRTdWZmaXggJiYgd29yZCA9PT0gJ2dvZGludScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyBnb2RpbmEnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgd29yZDtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIHNyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3InLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWS4nLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZLiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRlbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JlZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdcSNZSB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZSAlcycsXG4gICAgICAgICAgICBzOiAnbmVrb2xpa28gc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IHNpU3dhdGkgW3NzXVxuLy8hIGF1dGhvciA6IE5pY29sYWkgRGF2aWVzPG1haWxAbmljb2xhaS5pbz4gOiBodHRwczovL2dpdGh1Yi5jb20vbmljb2xhaWRhdmllc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHNzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3MnLCB7XG4gICAgICAgIG1vbnRoczogXCJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pXCIuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX1VzX0xiX0x0X0xzX0xoX1VnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW05hbXVobGEgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0t1c2FzYSBuZ2FdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbmdhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0l0b2xvIG5nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICduZ2EgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3dlbnRla2EgbmdhICVzJyxcbiAgICAgICAgICAgIHM6ICdlbWl6dXp3YW5hIGxvbWNhbmUnLFxuICAgICAgICAgICAgc3M6ICclZCBtenV6d2FuYScsXG4gICAgICAgICAgICBtOiAndW16dXp1JyxcbiAgICAgICAgICAgIG1tOiAnJWQgZW1penV6dScsXG4gICAgICAgICAgICBoOiAnbGlob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZW1haG9yYScsXG4gICAgICAgICAgICBkOiAnbGlsYW5nYScsXG4gICAgICAgICAgICBkZDogJyVkIGVtYWxhbmdhJyxcbiAgICAgICAgICAgIE06ICdpbnlhbmdhJyxcbiAgICAgICAgICAgIE1NOiAnJWQgdGlueWFuZ2EnLFxuICAgICAgICAgICAgeTogJ3Vtbnlha2EnLFxuICAgICAgICAgICAgeXk6ICclZCBpbWlueWFrYScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdla3VzZW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW1pbmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbnRzYW1iYW1hJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlYnVzdWt1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAnZWt1c2VuaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbWluaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZW50c2FtYmFtYScgfHwgbWVyaWRpZW0gPT09ICdlYnVzdWt1Jykge1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiAnJWQnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3YWhpbGkgW3N3XVxuLy8hIGF1dGhvciA6IEZhaGFkIEthc3NpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWRzZWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N3Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2knLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0pwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnSjJfSjNfSjRfSjVfQWxfSWpfSjEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaGg6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2xlbyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1t3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2phbmFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGJhYWRheWUnLFxuICAgICAgICAgICAgcGFzdDogJ3Rva2VhICVzJyxcbiAgICAgICAgICAgIHM6ICdoaXZpIHB1bmRlJyxcbiAgICAgICAgICAgIHNzOiAnc2VrdW5kZSAlZCcsXG4gICAgICAgICAgICBtOiAnZGFraWthIG1vamEnLFxuICAgICAgICAgICAgbW06ICdkYWtpa2EgJWQnLFxuICAgICAgICAgICAgaDogJ3NhYSBsaW1vamEnLFxuICAgICAgICAgICAgaGg6ICdtYXNhYSAlZCcsXG4gICAgICAgICAgICBkOiAnc2lrdSBtb2phJyxcbiAgICAgICAgICAgIGRkOiAnc2lrdSAlZCcsXG4gICAgICAgICAgICBNOiAnbXdlemkgbW1vamEnLFxuICAgICAgICAgICAgTU06ICdtaWV6aSAlZCcsXG4gICAgICAgICAgICB5OiAnbXdha2EgbW1vamEnLFxuICAgICAgICAgICAgeXk6ICdtaWFrYSAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYW1pbCBbdGFdXG4vLyEgYXV0aG9yIDogQXJqdW5rdW1hciBLcmlzaG5hbW9vcnRoeSA6IGh0dHBzOi8vZ2l0aHViLmNvbS90azEyMDQwNFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgr6cnLFxuICAgICAgICAgICAgMjogJ+CvqCcsXG4gICAgICAgICAgICAzOiAn4K+pJyxcbiAgICAgICAgICAgIDQ6ICfgr6onLFxuICAgICAgICAgICAgNTogJ+CvqycsXG4gICAgICAgICAgICA2OiAn4K+sJyxcbiAgICAgICAgICAgIDc6ICfgr60nLFxuICAgICAgICAgICAgODogJ+CvricsXG4gICAgICAgICAgICA5OiAn4K+vJyxcbiAgICAgICAgICAgIDA6ICfgr6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4K+nJzogJzEnLFxuICAgICAgICAgICAgJ+CvqCc6ICcyJyxcbiAgICAgICAgICAgICfgr6knOiAnMycsXG4gICAgICAgICAgICAn4K+qJzogJzQnLFxuICAgICAgICAgICAgJ+Cvqyc6ICc1JyxcbiAgICAgICAgICAgICfgr6wnOiAnNicsXG4gICAgICAgICAgICAn4K+tJzogJzcnLFxuICAgICAgICAgICAgJ+Cvric6ICc4JyxcbiAgICAgICAgICAgICfgr68nOiAnOScsXG4gICAgICAgICAgICAn4K+mJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIHRhID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGEnLCB7XG4gICAgICAgIG1vbnRoczogJ+CunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4hf4K6k4K6/4K6Z4K+N4K6V4K6f4K+N4K6V4K6/4K604K6u4K+IX+CumuCvhuCuteCvjeCuteCuvuCur+CvjeCuleCuv+CutOCuruCviF/grqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4hf4K614K6/4K6v4K6+4K604K6V4K+N4K6V4K6/4K604K6u4K+IX+CuteCvhuCus+CvjeCus+Cuv+CuleCvjeCuleCuv+CutOCuruCviF/grprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4gnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CunuCuvuCur+Cuv+CuseCvgV/grqTgrr/grpngr43grpXgrrPgr41f4K6a4K+G4K614K+N4K614K6+4K6v4K+NX+CuquCvgeCupOCuqeCvjV/grrXgrr/grq/grr7grrTgrqngr41f4K614K+G4K6z4K+N4K6z4K6/X+CumuCuqeCuvycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgrp7grr5f4K6k4K6/X+CumuCvhl/grqrgr4Ff4K614K6/X+CuteCvhl/grponLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgrofgrqngr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4K6o4K6+4K6z4K+IXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4K6o4K+H4K6x4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgrpXgrp/grqjgr43grqQg4K614K6+4K6w4K6u4K+NXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCuh+CusuCvjScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4K6u4K+B4K6p4K+NJyxcbiAgICAgICAgICAgIHM6ICfgrpLgrrDgr4Eg4K6a4K6/4K6yIOCuteCuv+CuqOCuvuCun+Cuv+CuleCus+CvjScsXG4gICAgICAgICAgICBzczogJyVkIOCuteCuv+CuqOCuvuCun+Cuv+CuleCus+CvjScsXG4gICAgICAgICAgICBtOiAn4K6S4K6w4K+BIOCuqOCuv+CuruCuv+Cun+CuruCvjScsXG4gICAgICAgICAgICBtbTogJyVkIOCuqOCuv+CuruCuv+Cun+CumeCvjeCuleCus+CvjScsXG4gICAgICAgICAgICBoOiAn4K6S4K6w4K+BIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgaGg6ICclZCDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgICAgIGQ6ICfgrpLgrrDgr4Eg4K6o4K6+4K6z4K+NJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4K6o4K6+4K6f4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIE06ICfgrpLgrrDgr4Eg4K6u4K6+4K6k4K6u4K+NJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4K6u4K6+4K6k4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHk6ICfgrpLgrrDgr4Eg4K614K6w4K+B4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4K6G4K6j4K+N4K6f4K+B4K6V4K6z4K+NJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ94K614K6k4K+BLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfgrrXgrqTgr4EnO1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4K+n4K+o4K+p4K+q4K+r4K+s4K+t4K+u4K+v4K+mXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyByZWZlciBodHRwOi8vdGEud2lraXBlZGlhLm9yZy9zLzFlcjFcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+Cur+CuvuCuruCuruCvjXzgrrXgr4jgrpXgrrHgr4h84K6V4K6+4K6y4K+IfOCuqOCuo+CvjeCuquCuleCusuCvjXzgro7grrHgr43grqrgrr7grp/gr4F84K6u4K6+4K6y4K+ILyxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K614K+I4K6V4K6x4K+IJzsgLy8g4K614K+I4K6V4K6x4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuleCuvuCusuCviCc7IC8vIOCuleCuvuCusuCviFxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrqjgrqPgr43grqrgrpXgrrLgr40nOyAvLyDgrqjgrqPgr43grqrgrpXgrrLgr41cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6O4K6x4K+N4K6q4K6+4K6f4K+BJzsgLy8g4K6O4K6x4K+N4K6q4K6+4K6f4K+BXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuruCuvuCusuCviCc7IC8vIOCuruCuvuCusuCviFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq/grr7grq7grq7gr40nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgrq/grr7grq7grq7gr40nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgrrXgr4jgrpXgrrHgr4gnIHx8IG1lcmlkaWVtID09PSAn4K6V4K6+4K6y4K+IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuqOCuo+CvjeCuquCuleCusuCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0YTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUZWx1Z3UgW3RlXVxuLy8hIGF1dGhvciA6IEtyaXNobmEgQ2hhaXRhbnlhIFRob3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2tjdGhvdGFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RlJywge1xuICAgICAgICBtb250aHM6ICfgsJzgsKjgsLXgsLDgsL9f4LCr4LC/4LCs4LGN4LCw4LC14LCw4LC/X+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL/gsLLgsY1f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCX4LC44LGN4LCf4LGBX+CwuOCxhuCwquCxjeCwn+CxhuCwguCwrOCwsOCxjV/gsIXgsJXgsY3gsJ/gsYvgsKzgsLDgsY1f4LCo4LC14LCC4LCs4LCw4LGNX+CwoeCwv+CwuOCxhuCwguCwrOCwsOCxjScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgsIbgsKbgsL/gsLXgsL7gsLDgsIJf4LC44LGL4LCu4LC14LC+4LCw4LCCX+CwruCwguCwl+Cws+CwteCwvuCwsOCwgl/gsKzgsYHgsKfgsLXgsL7gsLDgsIJf4LCX4LGB4LCw4LGB4LC14LC+4LCw4LCCX+CwtuCxgeCwleCxjeCwsOCwteCwvuCwsOCwgl/gsLbgsKjgsL/gsLXgsL7gsLDgsIInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CwhuCwpuCwv1/gsLjgsYvgsK5f4LCu4LCC4LCX4LCzX+CwrOCxgeCwp1/gsJfgsYHgsLDgsYFf4LC24LGB4LCV4LGN4LCwX+CwtuCwqOCwvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgsIZf4LC44LGLX+CwruCwgl/gsKzgsYFf4LCX4LGBX+CwtuCxgV/gsLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LCo4LGH4LCh4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CwsOCxh+CwquCxgV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CwqOCwv+CwqOCxjeCwqF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4LCX4LCkXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCwsuCxiycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4LCV4LGN4LCw4LC/4LCk4LCCJyxcbiAgICAgICAgICAgIHM6ICfgsJXgsYrgsKjgsY3gsKjgsL8g4LCV4LGN4LC34LCj4LC+4LCy4LGBJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4LC44LGG4LCV4LCo4LGN4LCy4LGBJyxcbiAgICAgICAgICAgIG06ICfgsJLgsJUg4LCo4LC/4LCu4LC/4LC34LCCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LCo4LC/4LCu4LC/4LC34LC+4LCy4LGBJyxcbiAgICAgICAgICAgIGg6ICfgsJLgsJUg4LCX4LCC4LCfJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LCX4LCC4LCf4LCy4LGBJyxcbiAgICAgICAgICAgIGQ6ICfgsJLgsJUg4LCw4LGL4LCc4LGBJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4LCw4LGL4LCc4LGB4LCy4LGBJyxcbiAgICAgICAgICAgIE06ICfgsJLgsJUg4LCo4LGG4LCyJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LCo4LGG4LCy4LCy4LGBJyxcbiAgICAgICAgICAgIHk6ICfgsJLgsJUg4LC44LCC4LC14LCk4LGN4LC44LCw4LCCJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4LC44LCC4LC14LCk4LGN4LC44LCw4LC+4LCy4LGBJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ94LC1LyxcbiAgICAgICAgb3JkaW5hbDogJyVk4LC1JyxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CwsOCwvuCwpOCxjeCwsOCwv3zgsIngsKbgsK/gsIJ84LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCfOCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgi8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CwsOCwvuCwpOCxjeCwsOCwvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwieCwpuCwr+CwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsLDgsL7gsKTgsY3gsLDgsL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwieCwpuCwr+Cwgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUZXR1biBEaWxpIChFYXN0IFRpbW9yKSBbdGV0XVxuLy8hIGF1dGhvciA6IEpvc2h1YSBCcm9va3MgOiBodHRwczovL2dpdGh1Yi5jb20vam9zaGJyb29rc1xuLy8hIGF1dGhvciA6IE9ub3JpbyBEZSBKLiBBZm9uc28gOiBodHRwczovL2dpdGh1Yi5jb20vbWFyb2JvXG4vLyEgYXV0aG9yIDogU29uaWEgU2ltb2VzIDogaHR0cHM6Ly9naXRodWIuY29tL3Nvbmlhc2ltb2VzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGV0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGV0Jywge1xuICAgICAgICBtb250aHM6ICdKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1w7F1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0RvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RvX1NlZ19UZV9LdV9LaV9TZXNfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT2hpbiBpaGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQWJhbiBpaGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hvcmlzZWlrIGloYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaWhhICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBsaXViYScsXG4gICAgICAgICAgICBzOiAnc2VndW5kdSBiYWx1bicsXG4gICAgICAgICAgICBzczogJ3NlZ3VuZHUgJWQnLFxuICAgICAgICAgICAgbTogJ21pbnV0dSBpZGEnLFxuICAgICAgICAgICAgbW06ICdtaW51dHUgJWQnLFxuICAgICAgICAgICAgaDogJ29yYXMgaWRhJyxcbiAgICAgICAgICAgIGhoOiAnb3JhcyAlZCcsXG4gICAgICAgICAgICBkOiAnbG9yb24gaWRhJyxcbiAgICAgICAgICAgIGRkOiAnbG9yb24gJWQnLFxuICAgICAgICAgICAgTTogJ2Z1bGFuIGlkYScsXG4gICAgICAgICAgICBNTTogJ2Z1bGFuICVkJyxcbiAgICAgICAgICAgIHk6ICd0aW5hbiBpZGEnLFxuICAgICAgICAgICAgeXk6ICd0aW5hbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFqaWsgW3RnXVxuLy8hIGF1dGhvciA6IE9yaWYgTi4gSnIuIDogaHR0cHM6Ly9naXRodWIuY29tL29yaWYtanJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3Rg9C8JyxcbiAgICAgICAgMTogJy3Rg9C8JyxcbiAgICAgICAgMjogJy3RjtC8JyxcbiAgICAgICAgMzogJy3RjtC8JyxcbiAgICAgICAgNDogJy3Rg9C8JyxcbiAgICAgICAgNTogJy3Rg9C8JyxcbiAgICAgICAgNjogJy3Rg9C8JyxcbiAgICAgICAgNzogJy3Rg9C8JyxcbiAgICAgICAgODogJy3Rg9C8JyxcbiAgICAgICAgOTogJy3Rg9C8JyxcbiAgICAgICAgMTA6ICct0YPQvCcsXG4gICAgICAgIDEyOiAnLdGD0LwnLFxuICAgICAgICAxMzogJy3Rg9C8JyxcbiAgICAgICAgMjA6ICct0YPQvCcsXG4gICAgICAgIDMwOiAnLdGO0LwnLFxuICAgICAgICA0MDogJy3Rg9C8JyxcbiAgICAgICAgNTA6ICct0YPQvCcsXG4gICAgICAgIDYwOiAnLdGD0LwnLFxuICAgICAgICA3MDogJy3Rg9C8JyxcbiAgICAgICAgODA6ICct0YPQvCcsXG4gICAgICAgIDkwOiAnLdGD0LwnLFxuICAgICAgICAxMDA6ICct0YPQvCcsXG4gICAgfTtcblxuICAgIHZhciB0ZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RnJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDQuF/RhNC10LLRgNCw0LvQuF/QvNCw0YDRgtC4X9Cw0L/RgNC10LvQuF/QvNCw0LnQuF/QuNGO0L3QuF/QuNGO0LvQuF/QsNCy0LPRg9GB0YLQuF/RgdC10L3RgtGP0LHRgNC4X9C+0LrRgtGP0LHRgNC4X9C90L7Rj9Cx0YDQuF/QtNC10LrQsNCx0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfRj9C60YjQsNC90LHQtV/QtNGD0YjQsNC90LHQtV/RgdC10YjQsNC90LHQtV/Rh9C+0YDRiNCw0L3QsdC1X9C/0LDQvdK30YjQsNC90LHQtV/St9GD0LzRitCwX9GI0LDQvdCx0LUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0Y/RiF/QtNGIX9GB0Yhf0YfRiF/Qv9GIX9K30Lxf0YjQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQmNC80YDTr9C3INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KTQsNGA0LTQviDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CU0LjRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INC+0Y/QvdC00LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INCz0YPQt9Cw0YjRgtCwINGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LHQsNGK0LTQuCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0L/QtdGIJyxcbiAgICAgICAgICAgIHM6ICfRj9C60YfQsNC90LQg0YHQvtC90LjRjycsXG4gICAgICAgICAgICBtOiAn0Y/QuiDQtNCw0pvQuNKb0LAnLFxuICAgICAgICAgICAgbW06ICclZCDQtNCw0pvQuNKb0LAnLFxuICAgICAgICAgICAgaDogJ9GP0Log0YHQvtCw0YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC+0LDRgicsXG4gICAgICAgICAgICBkOiAn0Y/QuiDRgNOv0LcnLFxuICAgICAgICAgICAgZGQ6ICclZCDRgNOv0LcnLFxuICAgICAgICAgICAgTTogJ9GP0Log0LzQvtKzJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQvtKzJyxcbiAgICAgICAgICAgIHk6ICfRj9C6INGB0L7QuycsXG4gICAgICAgICAgICB5eTogJyVkINGB0L7QuycsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/RiNCw0LF80YHRg9Cx0rN80YDTr9C3fNCx0LXQs9C+0rMvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfRiNCw0LEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfRgdGD0LHSsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfRgNOv0LcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9Cx0LXQs9C+0rMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YjQsNCxJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgdGD0LHSsyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDTr9C3JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQsdC10LPQvtKzJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGD0Lx80Y7QvCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDF0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUaGFpIFt0aF1cbi8vISBhdXRob3IgOiBLcmlkc2FkYSBUaGFuYWJ1bHBvbmcgOiBodHRwczovL2dpdGh1Yi5jb20vc2lyblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGgnLCB7XG4gICAgICAgIG1vbnRoczogJ+C4oeC4geC4o+C4suC4hOC4oV/guIHguLjguKHguKDguLLguJ7guLHguJnguJjguYxf4Lih4Li14LiZ4Liy4LiE4LihX+C5gOC4oeC4qeC4suC4ouC4mV/guJ7guKTguKnguKDguLLguITguKFf4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZX+C4geC4o+C4geC4juC4suC4hOC4oV/guKrguLTguIfguKvguLLguITguKFf4LiB4Lix4LiZ4Lii4Liy4Lii4LiZX+C4leC4uOC4peC4suC4hOC4oV/guJ7guKTguKjguIjguLTguIHguLLguKLguJlf4LiY4Lix4LiZ4Lin4Liy4LiE4LihJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+C4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKrguJrguJTguLVf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKpf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jCcuc3BsaXQoJ18nKSwgLy8geWVzLCB0aHJlZSBjaGFyYWN0ZXJzIGRpZmZlcmVuY2VcbiAgICAgICAgd2Vla2RheXNNaW46ICfguK3guLIuX+C4iC5f4LitLl/guJ4uX+C4nuC4pC5f4LioLl/guKouJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICfguKfguLHguJlkZGRk4LiX4Li14LmIIEQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4h3zguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfguIHguYjguK3guJnguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C4p+C4seC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4Lie4Lij4Li44LmI4LiH4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkW+C4q+C4meC5ieC4siDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LmA4Lih4Li34LmI4Lit4Lin4Liy4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Lin4Lix4LiZXWRkZGRb4LiX4Li14LmI4LmB4Lil4LmJ4LinIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfguK3guLXguIEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVz4LiX4Li14LmI4LmB4Lil4LmJ4LinJyxcbiAgICAgICAgICAgIHM6ICfguYTguKHguYjguIHguLXguYjguKfguLTguJnguLLguJfguLUnLFxuICAgICAgICAgICAgc3M6ICclZCDguKfguLTguJnguLLguJfguLUnLFxuICAgICAgICAgICAgbTogJzEg4LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIGg6ICcxIOC4iuC4seC5iOC4p+C5guC4oeC4hycsXG4gICAgICAgICAgICBoaDogJyVkIOC4iuC4seC5iOC4p+C5guC4oeC4hycsXG4gICAgICAgICAgICBkOiAnMSDguKfguLHguJknLFxuICAgICAgICAgICAgZGQ6ICclZCDguKfguLHguJknLFxuICAgICAgICAgICAgdzogJzEg4Liq4Lix4Lib4LiU4Liy4Lir4LmMJyxcbiAgICAgICAgICAgIHd3OiAnJWQg4Liq4Lix4Lib4LiU4Liy4Lir4LmMJyxcbiAgICAgICAgICAgIE06ICcxIOC5gOC4lOC4t+C4reC4mScsXG4gICAgICAgICAgICBNTTogJyVkIOC5gOC4lOC4t+C4reC4mScsXG4gICAgICAgICAgICB5OiAnMSDguJvguLUnLFxuICAgICAgICAgICAgeXk6ICclZCDguJvguLUnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmttZW4gW3RrXVxuLy8hIGF1dGhvciA6IEF0YW15cmF0IEFiZHlyYWhtYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGFteXJhdGFiZHlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogXCInaW5qaVwiLFxuICAgICAgICA1OiBcIidpbmppXCIsXG4gICAgICAgIDg6IFwiJ2luamlcIixcbiAgICAgICAgNzA6IFwiJ2luamlcIixcbiAgICAgICAgODA6IFwiJ2luamlcIixcbiAgICAgICAgMjogXCInbmppXCIsXG4gICAgICAgIDc6IFwiJ25qaVwiLFxuICAgICAgICAyMDogXCInbmppXCIsXG4gICAgICAgIDUwOiBcIiduamlcIixcbiAgICAgICAgMzogXCInw7xuamlcIixcbiAgICAgICAgNDogXCInw7xuamlcIixcbiAgICAgICAgMTAwOiBcIifDvG5qaVwiLFxuICAgICAgICA2OiBcIiduanlcIixcbiAgICAgICAgOTogXCIndW5qeVwiLFxuICAgICAgICAxMDogXCIndW5qeVwiLFxuICAgICAgICAzMDogXCIndW5qeVwiLFxuICAgICAgICA2MDogXCIneW5qeVwiLFxuICAgICAgICA5MDogXCIneW5qeVwiLFxuICAgIH07XG5cbiAgICB2YXIgdGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aycsIHtcbiAgICAgICAgbW9udGhzOiAnw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnw51hbl9GZXdfTWFyX0Fwcl9NYcO9X0nDvW5fScO9bF9Bd2dfU2VuX09rdF9Ob8O9X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnw51la19EdcWfX1NpxZ9fw4dhcl9QZW5fQW5uX8WeZW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnw51rX0TFn19TxZ9fw4dyX1BuX0FuX8Webicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZXJ0aXIgc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2luZGlraV0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZMO8w71uXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHNvxYgnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2xYgnLFxuICAgICAgICAgICAgczogJ2Jpcm7DpMOnZSBzZWt1bnQnLFxuICAgICAgICAgICAgbTogJ2JpciBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0JyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FnYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWdhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYcO9JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYcO9JyxcbiAgICAgICAgICAgIHk6ICdiaXIgw715bCcsXG4gICAgICAgICAgICB5eTogJyVkIMO9eWwnLFxuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRG8nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHplcm9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBcIid1bmp5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFnYWxvZyAoUGhpbGlwcGluZXMpIFt0bC1waF1cbi8vISBhdXRob3IgOiBEYW4gSGFnbWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2hhZ21hbmRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRsUGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bC1waCcsIHtcbiAgICAgICAgbW9udGhzOiAnRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0VuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0xpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0xpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdMaV9MdV9NYV9NaV9IdV9CaV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdNTS9EL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdMVCBbbmdheW9uZyBhcmF3XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0J1a2FzIG5nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xUIFtzYSBzdXN1bm9kIG5hXSBkZGRkJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdMVCBba2FoYXBvbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnc2EgbG9vYiBuZyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYW5nIG5ha2FsaXBhcycsXG4gICAgICAgICAgICBzOiAnaWxhbmcgc2VndW5kbycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ2lzYW5nIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0bycsXG4gICAgICAgICAgICBoOiAnaXNhbmcgb3JhcycsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ2lzYW5nIGFyYXcnLFxuICAgICAgICAgICAgZGQ6ICclZCBhcmF3JyxcbiAgICAgICAgICAgIE06ICdpc2FuZyBidXdhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1d2FuJyxcbiAgICAgICAgICAgIHk6ICdpc2FuZyB0YW9uJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0bFBoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtsaW5nb24gW3RsaF1cbi8vISBhdXRob3IgOiBEb21pbmlrYSBLcnVrIDogaHR0cHM6Ly9naXRodWIuY29tL2FtYXJhbnRocm9zZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNOb3VucyA9ICdwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCcuc3BsaXQoJ18nKTtcblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZShvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgb3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbGVTJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnd2FRJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbmVtJ1xuICAgICAgICAgICAgICAgIDogdGltZSArICcgcElxJztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlUGFzdChvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgb3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnSHXigJknXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3ZW4nXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdiZW4nXG4gICAgICAgICAgICAgICAgOiB0aW1lICsgJyByZXQnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBudW1iZXJOb3VuID0gbnVtYmVyQXNOb3VuKG51bWJlcik7XG4gICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGx1cCc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIHR1cCc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIHJlcCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGphaic7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIGphcic7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIERJUyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBudW1iZXJBc05vdW4obnVtYmVyKSB7XG4gICAgICAgIHZhciBodW5kcmVkID0gTWF0aC5mbG9vcigobnVtYmVyICUgMTAwMCkgLyAxMDApLFxuICAgICAgICAgICAgdGVuID0gTWF0aC5mbG9vcigobnVtYmVyICUgMTAwKSAvIDEwKSxcbiAgICAgICAgICAgIG9uZSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgd29yZCA9ICcnO1xuICAgICAgICBpZiAoaHVuZHJlZCA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gbnVtYmVyc05vdW5zW2h1bmRyZWRdICsgJ3ZhdGxoJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVuID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSAod29yZCAhPT0gJycgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbdGVuXSArICdtYUgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbmUgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1tvbmVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JkID09PSAnJyA/ICdwYWdoJyA6IHdvcmQ7XG4gICAgfVxuXG4gICAgdmFyIHRsaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RsaCcsIHtcbiAgICAgICAgbW9udGhzOiAndGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OlxuICAgICAgICAgICAgJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjpcbiAgICAgICAgICAgICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEYUhqYWpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbd2HigJlsZVNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbd2HigJlIdeKAmV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IHRyYW5zbGF0ZUZ1dHVyZSxcbiAgICAgICAgICAgIHBhc3Q6IHRyYW5zbGF0ZVBhc3QsXG4gICAgICAgICAgICBzOiAncHVTIGx1cCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogJ3dh4oCZIHR1cCcsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogJ3dh4oCZIHJlcCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ3dh4oCZIGphaicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ3dh4oCZIGphcicsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ3dh4oCZIERJUycsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUdXJraXNoIFt0cl1cbi8vISBhdXRob3JzIDogRXJoYW4gR3VuZG9nYW4gOiBodHRwczovL2dpdGh1Yi5jb20vZXJoYW5ndW5kb2dhbixcbi8vISAgICAgICAgICAgQnVyYWsgWWnEn2l0IEtheWE6IGh0dHBzOi8vZ2l0aHViLmNvbS9CWUtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogXCInaW5jaVwiLFxuICAgICAgICA1OiBcIidpbmNpXCIsXG4gICAgICAgIDg6IFwiJ2luY2lcIixcbiAgICAgICAgNzA6IFwiJ2luY2lcIixcbiAgICAgICAgODA6IFwiJ2luY2lcIixcbiAgICAgICAgMjogXCInbmNpXCIsXG4gICAgICAgIDc6IFwiJ25jaVwiLFxuICAgICAgICAyMDogXCInbmNpXCIsXG4gICAgICAgIDUwOiBcIiduY2lcIixcbiAgICAgICAgMzogXCInw7xuY8O8XCIsXG4gICAgICAgIDQ6IFwiJ8O8bmPDvFwiLFxuICAgICAgICAxMDA6IFwiJ8O8bmPDvFwiLFxuICAgICAgICA2OiBcIiduY8SxXCIsXG4gICAgICAgIDk6IFwiJ3VuY3VcIixcbiAgICAgICAgMTA6IFwiJ3VuY3VcIixcbiAgICAgICAgMzA6IFwiJ3VuY3VcIixcbiAgICAgICAgNjA6IFwiJ8SxbmPEsVwiLFxuICAgICAgICA5MDogXCInxLFuY8SxXCIsXG4gICAgfTtcblxuICAgIHZhciB0ciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RyJywge1xuICAgICAgICBtb250aHM6ICdPY2FrX8WedWJhdF9NYXJ0X05pc2FuX01hecSxc19IYXppcmFuX1RlbW11el9BxJ91c3Rvc19FeWzDvGxfRWtpbV9LYXPEsW1fQXJhbMSxaycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdPY2FfxZ51Yl9NYXJfTmlzX01heV9IYXpfVGVtX0HEn3VfRXlsX0VraV9LYXNfQXJhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1BhemFyX1BhemFydGVzaV9TYWzEsV/Dh2FyxZ9hbWJhX1BlcsWfZW1iZV9DdW1hX0N1bWFydGVzaScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1Bhel9QenRfU2FsX8OHYXJfUGVyX0N1bV9DbXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnUHpfUHRfU2Ffw4dhX1BlX0N1X0N0Jy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2w7YnIDogJ8OWw5YnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfDtnMnIDogJ8OWUyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/DtsO2fMOWw5Z8w7ZzfMOWUy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAnw7ZzJyB8fCBpbnB1dCA9PT0gJ8OWUyc7XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbeWFyxLFuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZMO8bl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZ2XDp2VuXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHNvbnJhJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDtm5jZScsXG4gICAgICAgICAgICBzOiAnYmlya2HDpyBzYW5peWUnLFxuICAgICAgICAgICAgc3M6ICclZCBzYW5peWUnLFxuICAgICAgICAgICAgbTogJ2JpciBkYWtpa2EnLFxuICAgICAgICAgICAgbW06ICclZCBkYWtpa2EnLFxuICAgICAgICAgICAgaDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIHc6ICdiaXIgaGFmdGEnLFxuICAgICAgICAgICAgd3c6ICclZCBoYWZ0YScsXG4gICAgICAgICAgICBNOiAnYmlyIGF5JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYXknLFxuICAgICAgICAgICAgeTogJ2JpciB5xLFsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgecSxbCcsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEbyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIFwiJ8SxbmPEsVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gKG51bWJlciAlIDEwMCkgLSBhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbG9zc2FuIFt0emxdXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcbi8vISBhdXRob3IgOiBJdXN0w6wgQ2FudW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIC8vIEFmdGVyIHRoZSB5ZWFyIHRoZXJlIHNob3VsZCBiZSBhIHNsYXNoIGFuZCB0aGUgYW1vdW50IG9mIHllYXJzIHNpbmNlIERlY2VtYmVyIDI2LCAxOTc5IGluIFJvbWFuIG51bWVyYWxzLlxuICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IHRvbyBkaWZmaWN1bHQgKG1heWJlIGV2ZW4gaW1wb3NzaWJsZSkgdG8gYWRkLlxuICAgIHZhciB0emwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0emwnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZXZyYWdsaF9NYXLDp19BdnLDr3VfTWFpX0fDvG5fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcMOkdHNfTm9lbXZhcl9aZWNlbXZhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTw7psX0zDum5fTWFpX03DoXJfWGjDul9WacOpX1PDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RcXCdvfGRcXCdhL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiZCdvXCIgPT09IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnb1wiIDogXCJEJ09cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnYVwiIDogXCJEJ0FcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3hoaSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tkZW3DoCDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpZWlyaSDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8O8ciBlbF0gZGRkZCBbbGFzdGV1IMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29zcHJlaSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnamElcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyd2aWVuc2FzIHNlY3VuZHMnLCBcIidpZW5zYXMgc2VjdW5kc1wiXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWN1bmRzJywgJycgKyBudW1iZXIgKyAnIHNlY3VuZHMnXSxcbiAgICAgICAgICAgIG06IFtcIiduIG3DrXV0XCIsIFwiJ2llbnMgbcOtdXRcIl0sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcgbcOtdXRzJywgJycgKyBudW1iZXIgKyAnIG3DrXV0cyddLFxuICAgICAgICAgICAgaDogW1wiJ24gw75vcmFcIiwgXCInaWVuc2Egw75vcmFcIl0sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcgw75vcmFzJywgJycgKyBudW1iZXIgKyAnIMO+b3JhcyddLFxuICAgICAgICAgICAgZDogW1wiJ24geml1YVwiLCBcIidpZW5zYSB6aXVhXCJdLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIHppdWFzJywgJycgKyBudW1iZXIgKyAnIHppdWFzJ10sXG4gICAgICAgICAgICBNOiBbXCInbiBtZXNcIiwgXCInaWVucyBtZXNcIl0sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgbWVzZW4nLCAnJyArIG51bWJlciArICcgbWVzZW4nXSxcbiAgICAgICAgICAgIHk6IFtcIiduIGFyXCIsIFwiJ2llbnMgYXJcIl0sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgYXJzJywgJycgKyBudW1iZXIgKyAnIGFycyddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmVcbiAgICAgICAgICAgID8gZm9ybWF0W2tleV1bMF1cbiAgICAgICAgICAgIDogd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluIFt0em0tbGF0bl1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHR6bUxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0tbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1thc2RraCBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fza2EgZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2Fzc2FudCBnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFka2ggcyB5YW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3lhbiAlcycsXG4gICAgICAgICAgICBzOiAnaW1paycsXG4gICAgICAgICAgICBzczogJyVkIGltaWsnLFxuICAgICAgICAgICAgbTogJ21pbnXhuI0nLFxuICAgICAgICAgICAgbW06ICclZCBtaW514biNJyxcbiAgICAgICAgICAgIGg6ICdzYcmbYScsXG4gICAgICAgICAgICBoaDogJyVkIHRhc3NhyZtpbicsXG4gICAgICAgICAgICBkOiAnYXNzJyxcbiAgICAgICAgICAgIGRkOiAnJWQgb3NzYW4nLFxuICAgICAgICAgICAgTTogJ2F5b3dyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgaXl5aXJuJyxcbiAgICAgICAgICAgIHk6ICdhc2dhcycsXG4gICAgICAgICAgICB5eTogJyVkIGlzZ2FzbicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptTGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBbdHptXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHptID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptJywge1xuICAgICAgICBtb250aHM6ICfitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4rSw4rWZ4rS34rWFIOK0tF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vitLDitZnitL3itLAg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW+K0tF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vitLDitZritLDitY/itZwg4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+K0tF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBwYXN0OiAn4rWi4rSw4rWPICVzJyxcbiAgICAgICAgICAgIHM6ICfitYnitY7itYnitL0nLFxuICAgICAgICAgICAgc3M6ICclZCDitYnitY7itYnitL0nLFxuICAgICAgICAgICAgbTogJ+K1juK1ieK1j+K1k+K0uicsXG4gICAgICAgICAgICBtbTogJyVkIOK1juK1ieK1j+K1k+K0uicsXG4gICAgICAgICAgICBoOiAn4rWZ4rSw4rWE4rSwJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4rWc4rSw4rWZ4rWZ4rSw4rWE4rWJ4rWPJyxcbiAgICAgICAgICAgIGQ6ICfitLDitZnitZknLFxuICAgICAgICAgICAgZGQ6ICclZCBv4rWZ4rWZ4rSw4rWPJyxcbiAgICAgICAgICAgIE06ICfitLDitaJv4rWT4rWUJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4rWJ4rWi4rWi4rWJ4rWU4rWPJyxcbiAgICAgICAgICAgIHk6ICfitLDitZnitLPitLDitZknLFxuICAgICAgICAgICAgeXk6ICclZCDitYnitZnitLPitLDitZnitY8nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR6bTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVeWdodXIgKENoaW5hKSBbdWctY25dXG4vLyEgYXV0aG9yOiBib3lhcSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3lhcVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVnQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1Zy1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YknLFxuICAgICAgICAgICAgTExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9iz25XavtuV2LEnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJyB8fCBtZXJpZGllbSA9PT0gJ9mD25XahicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZituQ2LHZidmFINmD25DahtuVJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9iz25XavtuV2LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYqNuI2q/biNmGINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2Kbbldiq25Ug2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KrbhtmG24jar9uI2YZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9im2KfZhNiv2YnZhtmC2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2Kjbh9ix24fZhicsXG4gICAgICAgICAgICBzOiAn2YbbldqG2obblSDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgbTogJ9io2YnYsSDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZidmG24fYqicsXG4gICAgICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2KbbldiqJyxcbiAgICAgICAgICAgIGQ6ICfYqNmJ2LEg2YPbiNmGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgICAgIE06ICfYqNmJ2LEg2KbYp9mKJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KbYp9mKJyxcbiAgICAgICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2YrZidmEJyxcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdmD24jZhtmJJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2r7bldm+2KrblSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWdDbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVa3JhaW5pYW4gW3VrXVxuLy8hIGF1dGhvciA6IHplbWxhbmluIDogaHR0cHM6Ly9naXRodWIuY29tL3plbWxhbmluXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvScgOiAn0YXQstC40LvQuNC90YNf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyxcbiAgICAgICAgICAgIGhoOiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsF/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvScgOiAn0LPQvtC00LjQvdGDX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyxcbiAgICAgICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGWX9C00L3RltCyJyxcbiAgICAgICAgICAgIE1NOiAn0LzRltGB0Y/RhtGMX9C80ZbRgdGP0YbRll/QvNGW0YHRj9GG0ZbQsicsXG4gICAgICAgICAgICB5eTogJ9GA0ZbQul/RgNC+0LrQuF/RgNC+0LrRltCyJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfRhdCy0LjQu9C40L3QsCcgOiAn0YXQstC40LvQuNC90YMnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQs9C+0LTQuNC90LAnIDogJ9Cz0L7QtNC40L3Rgyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c0Nhc2VSZXBsYWNlKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSB7XG4gICAgICAgICAgICAgICAgbm9taW5hdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgJ9C90LXQtNGW0LvRj1/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00LBf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGPX9GB0YPQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhY2N1c2F0aXZlOlxuICAgICAgICAgICAgICAgICAgICAn0L3QtdC00ZbQu9GOX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTRg1/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y5f0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGdlbml0aXZlOlxuICAgICAgICAgICAgICAgICAgICAn0L3QtdC00ZbQu9GWX9C/0L7QvdC10LTRltC70LrQsF/QstGW0LLRgtC+0YDQutCwX9GB0LXRgNC10LTQuF/Rh9C10YLQstC10YDQs9CwX9C/4oCZ0Y/RgtC90LjRhtGWX9GB0YPQsdC+0YLQuCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3VuQ2FzZTtcblxuICAgICAgICBpZiAobSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ11cbiAgICAgICAgICAgICAgICAuc2xpY2UoMSwgNylcbiAgICAgICAgICAgICAgICAuY29uY2F0KHdlZWtkYXlzWydub21pbmF0aXZlJ10uc2xpY2UoMCwgMSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ107XG4gICAgICAgIH1cblxuICAgICAgICBub3VuQ2FzZSA9IC8oXFxbW9CS0LLQo9GDXVxcXSkgP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgPyAnYWNjdXNhdGl2ZSdcbiAgICAgICAgICAgIDogL1xcWz8oPzrQvNC40L3Rg9C70L7Rl3zQvdCw0YHRgtGD0L/QvdC+0ZcpPyA/XFxdID9kZGRkLy50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgID8gJ2dlbml0aXZlJ1xuICAgICAgICAgICAgOiAnbm9taW5hdGl2ZSc7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5c1tub3VuQ2FzZV1bbS5kYXkoKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKHN0cikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciArICfQvicgKyAodGhpcy5ob3VycygpID09PSAxMSA/ICfQsScgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHVrID0gbW9tZW50LmRlZmluZUxvY2FsZSgndWsnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0YHRltGH0L3Rj1/Qu9GO0YLQvtCz0L5f0LHQtdGA0LXQt9C90Y9f0LrQstGW0YLQvdGPX9GC0YDQsNCy0L3Rj1/Rh9C10YDQstC90Y9f0LvQuNC/0L3Rj1/RgdC10YDQv9C90Y9f0LLQtdGA0LXRgdC90Y9f0LbQvtCy0YLQvdGPX9C70LjRgdGC0L7Qv9Cw0LTQsF/Qs9GA0YPQtNC90Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0YHRltGHX9C70Y7Rgl/QsdC10YBf0LrQstGW0YJf0YLRgNCw0LJf0YfQtdGA0LJf0LvQuNC/X9GB0LXRgNC/X9Cy0LXRgF/QttC+0LLRgl/Qu9C40YHRgl/Qs9GA0YPQtCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzQ2FzZVJlcGxhY2UsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0YAuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQodGM0L7Qs9C+0LTQvdGWICcpLFxuICAgICAgICAgICAgbmV4dERheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQl9Cw0LLRgtGA0LAgJyksXG4gICAgICAgICAgICBsYXN0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CS0YfQvtGA0LAgJyksXG4gICAgICAgICAgICBuZXh0V2VlazogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQo10gZGRkZCBbJyksXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQnNC40L3Rg9C70L7Rl10gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtCz0L5dIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0YLQvtC80YMnLFxuICAgICAgICAgICAgczogJ9C00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogJ9Cz0L7QtNC40L3RgycsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6ICfQtNC10L3RjCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNGW0YHRj9GG0YwnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0YDRltC6JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICAvLyBNLiBFLjogdGhvc2UgdHdvIGFyZSB2aXJ0dWFsbHkgdW51c2VkIGJ1dCBhIHVzZXIgbWlnaHQgd2FudCB0byBpbXBsZW1lbnQgdGhlbSBmb3IgaGlzL2hlciB3ZWJzaXRlIGZvciBzb21lIHJlYXNvblxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0ZZ80YDQsNC90LrRg3zQtNC90Y980LLQtdGH0L7RgNCwLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0ZYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdC60YMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0L7RgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1aztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVcmR1IFt1cl1cbi8vISBhdXRob3IgOiBTYXdvb2QgQWxhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9pYm5lc2F5ZWVkXG4vLyEgYXV0aG9yIDogWmFjayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9aYWNrVmlzaW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2YbZiNix24wnLFxuICAgICAgICAgICAgJ9mB2LHZiNix24wnLFxuICAgICAgICAgICAgJ9mF2KfYsdqGJyxcbiAgICAgICAgICAgICfYp9m+2LHbjNmEJyxcbiAgICAgICAgICAgICfZhdim24wnLFxuICAgICAgICAgICAgJ9is2YjZhicsXG4gICAgICAgICAgICAn2KzZiNmE2KfYptuMJyxcbiAgICAgICAgICAgICfYp9qv2LPYqicsXG4gICAgICAgICAgICAn2LPYqtmF2KjYsScsXG4gICAgICAgICAgICAn2Kfaqdiq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgICAgICfYr9iz2YXYqNixJyxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5cyA9IFsn2KfYqtmI2KfYsScsICfZvtuM2LEnLCAn2YXZhtqv2YQnLCAn2KjYr9q+JywgJ9is2YXYudix2KfYqicsICfYrNmF2LnbgScsICfbgdmB2KrbgSddO1xuXG4gICAgdmFyIHVyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXInLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRheXMsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGTYjCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Ytdio2K182LTYp9mFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LXYqNitJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJztcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KLYrCDYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vaqdmEINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9qv2LDYtNiq24Eg2LHZiNiyINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1var9iw2LTYqtuBXSBkZGRkIFvYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDYqNi52K8nLFxuICAgICAgICAgICAgcGFzdDogJyVzINmC2KjZhCcsXG4gICAgICAgICAgICBzOiAn2obZhtivINiz24zaqdmG2ognLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uM2qnZhtqIJyxcbiAgICAgICAgICAgIG06ICfYp9uM2qkg2YXZhtm5JyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZhtm5JyxcbiAgICAgICAgICAgIGg6ICfYp9uM2qkg2q/avtmG2bnbgScsXG4gICAgICAgICAgICBoaDogJyVkINqv2r7Zhtm525InLFxuICAgICAgICAgICAgZDogJ9in24zaqSDYr9mGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2K/ZhicsXG4gICAgICAgICAgICBNOiAn2KfbjNqpINmF2KfbgScsXG4gICAgICAgICAgICBNTTogJyVkINmF2KfbgScsXG4gICAgICAgICAgICB5OiAn2KfbjNqpINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV6YmVrIExhdGluIFt1ei1sYXRuXVxuLy8hIGF1dGhvciA6IFJhc3VsYmVrIE1pcnpheWV2IDogZ2l0aHViLmNvbS9SYXN1bGJlZWVrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdXpMYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXotbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiAnWWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01heV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1lhX0R1X1NlX0Nob19QYV9KdV9TaGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ0QgTU1NTSBZWVlZLCBkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQnVndW4gc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0VydGFnYV0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2t1bmkgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlY2hhIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6IFwiW08ndGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdXCIsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ1lhcWluICVzIGljaGlkYScsXG4gICAgICAgICAgICBwYXN0OiAnQmlyIG5lY2hhICVzIG9sZGluJyxcbiAgICAgICAgICAgIHM6ICdzb25peWEnLFxuICAgICAgICAgICAgc3M6ICclZCBzb25peWEnLFxuICAgICAgICAgICAgbTogJ2JpciBkYXFpcWEnLFxuICAgICAgICAgICAgbW06ICclZCBkYXFpcWEnLFxuICAgICAgICAgICAgaDogJ2JpciBzb2F0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc29hdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGt1bicsXG4gICAgICAgICAgICBkZDogJyVkIGt1bicsXG4gICAgICAgICAgICBNOiAnYmlyIG95JyxcbiAgICAgICAgICAgIE1NOiAnJWQgb3knLFxuICAgICAgICAgICAgeTogJ2JpciB5aWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5aWwnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXpMYXRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV6YmVrIFt1el1cbi8vISBhdXRob3IgOiBTYXJkb3IgTXVtaW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdW1pbm9mZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHV6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXonLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQr9C6X9CU0YNf0KHQtV/Qp9C+X9Cf0LBf0JbRg1/QqNCwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0YPQs9GD0L0g0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9CwINGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9Cv0LrQuNC9ICVzINC40YfQuNC00LAnLFxuICAgICAgICAgICAgcGFzdDogJ9CR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9JyxcbiAgICAgICAgICAgIHM6ICfRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgc3M6ICclZCDRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgbW06ICclZCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgaDogJ9Cx0LjRgCDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfQsdC40YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQsdC40YAg0L7QuScsXG4gICAgICAgICAgICBNTTogJyVkINC+0LknLFxuICAgICAgICAgICAgeTogJ9Cx0LjRgCDQudC40LsnLFxuICAgICAgICAgICAgeXk6ICclZCDQudC40LsnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXo7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVmlldG5hbWVzZSBbdmldXG4vLyEgYXV0aG9yIDogQmFuZyBOZ3V5ZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmFuZ25rXG4vLyEgYXV0aG9yIDogQ2hpZW4gS2lyYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGllbmtpcmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB2aSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3ZpJywge1xuICAgICAgICBtb250aHM6ICd0aMOhbmcgMV90aMOhbmcgMl90aMOhbmcgM190aMOhbmcgNF90aMOhbmcgNV90aMOhbmcgNl90aMOhbmcgN190aMOhbmcgOF90aMOhbmcgOV90aMOhbmcgMTBfdGjDoW5nIDExX3Row6FuZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdjaOG7pyBuaOG6rXRfdGjhu6kgaGFpX3Ro4bupIGJhX3Ro4bupIHTGsF90aOG7qSBuxINtX3Ro4bupIHPDoXVfdGjhu6kgYuG6o3knLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvc2F8Y2gvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15jaCQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdjaCcgOiAnQ0gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnREQvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIw7RtIG5heSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW05nw6B5IG1haSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3R14bqnbiB04bubaSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0jDtG0gcXVhIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdHXhuqduIHRyxrDhu5tjIGzDumNdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgdOG7m2knLFxuICAgICAgICAgICAgcGFzdDogJyVzIHRyxrDhu5tjJyxcbiAgICAgICAgICAgIHM6ICd2w6BpIGdpw6J5JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZ2nDonknLFxuICAgICAgICAgICAgbTogJ23hu5l0IHBow7p0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgcGjDunQnLFxuICAgICAgICAgICAgaDogJ23hu5l0IGdp4budJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZ2nhu50nLFxuICAgICAgICAgICAgZDogJ23hu5l0IG5nw6B5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgbmfDoHknLFxuICAgICAgICAgICAgdzogJ23hu5l0IHR14bqnbicsXG4gICAgICAgICAgICB3dzogJyVkIHR14bqnbicsXG4gICAgICAgICAgICBNOiAnbeG7mXQgdGjDoW5nJyxcbiAgICAgICAgICAgIE1NOiAnJWQgdGjDoW5nJyxcbiAgICAgICAgICAgIHk6ICdt4buZdCBuxINtJyxcbiAgICAgICAgICAgIHl5OiAnJWQgbsSDbScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2aTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQc2V1ZG8gW3gtcHNldWRvXVxuLy8hIGF1dGhvciA6IEFuZHJldyBIb29kIDogaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld2hvb2QxMjVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB4UHNldWRvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneC1wc2V1ZG8nLCB7XG4gICAgICAgIG1vbnRoczogJ0p+w6HDscO6w6F+csO9X0Z+w6licsO6fsOhcsO9X35Nw6FyY35oX8OBcH5yw61sX35Nw6HDvV9+SsO6w7HDqX5fSsO6bH7DvV/DgcO6fmfDunN0fl9Tw6lwfnTDqW1ifsOpcl/Dk35jdMOzYn7DqXJfw5F+w7N2w6ltfmLDqXJffkTDqWPDqX5tYsOpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpYycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTfsO6w7Fkw6F+w71fTcOzfsOxZMOhw71+X1TDusOpfnNkw6HDvX5fV8OpZH7DscOpc2R+w6HDvV9UfmjDunJzfmTDocO9X35GcsOtZH7DocO9X1N+w6F0w7pyfmTDocO9Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTfsO6w7Fffk3Ds8OxX35Uw7rDqV9+V8OpZF9+VGjDul9+RnLDrV9+U8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTfsO6X03Ds35fVMO6X35Xw6lfVH5oX0Zyfl9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUfsOzZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUfsOzbcOzfnJyw7N+dyDDoXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OdfsOpc3R+w6lyZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTH7DoXN0XSBkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnw61+w7EgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOhfmfDsycsXG4gICAgICAgICAgICBzOiAnw6EgfmbDqXcgfnPDqWPDs37DsWRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc37DqWPDs8OxfmRzJyxcbiAgICAgICAgICAgIG06ICfDoSB+bcOtw7F+w7p0w6knLFxuICAgICAgICAgICAgbW06ICclZCBtfsOtw7HDun50w6lzJyxcbiAgICAgICAgICAgIGg6ICfDoX7DsSBow7N+w7pyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaH7Ds8O6cnMnLFxuICAgICAgICAgICAgZDogJ8OhIH5kw6HDvScsXG4gICAgICAgICAgICBkZDogJyVkIGR+w6HDvXMnLFxuICAgICAgICAgICAgTTogJ8OhIH5tw7PDsX50aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1+w7PDsXR+aHMnLFxuICAgICAgICAgICAgeTogJ8OhIH7DvcOpw6FyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw71+w6nDoXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhQc2V1ZG87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogWW9ydWJhIE5pZ2VyaWEgW3lvXVxuLy8hIGF1dGhvciA6IEF0b2xhZ2JlIEFiaXNveWUgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kZWxhLWJhdG9sYWdiZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHlvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneW8nLCB7XG4gICAgICAgIG1vbnRoczogJ1PhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1PhurnMgXJfRcyAcmxf4bq4cm5fScyAZ2JfRcyAYmlfT8yAa3XMgF9BZ+G6uV9PzIBndcyBX093ZV/hu4zMgHdhzIBfQmXMgWxf4buMzIBw4bq5zIDMgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQcyAacyAX0FqX0nMgHNf4buMcl/hu4xiX+G6uHRfQcyAYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT8yAbmnMgCBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhu4zMgGxhIG5pXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogXCJkZGRkIFvhu4xz4bq5zIAgdG/MgW4nYuG7jV0gW25pXSBMVFwiLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBzIBuYSBuaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhu4xz4bq5zIAgdG/MgWzhu43MgV0gW25pXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25pzIEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGvhu41qYcyBJyxcbiAgICAgICAgICAgIHM6ICdpzIBz4bq5anXMgSBhYXlhzIEgZGllJyxcbiAgICAgICAgICAgIHNzOiAnYWF5YcyBICVkJyxcbiAgICAgICAgICAgIG06ICdpzIBz4bq5anXMgSBrYW4nLFxuICAgICAgICAgICAgbW06ICdpzIBz4bq5anXMgSAlZCcsXG4gICAgICAgICAgICBoOiAnd2HMgWthdGkga2FuJyxcbiAgICAgICAgICAgIGhoOiAnd2HMgWthdGkgJWQnLFxuICAgICAgICAgICAgZDogJ+G7jWrhu43MgSBrYW4nLFxuICAgICAgICAgICAgZGQ6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICAgICAgTTogJ29zdcyAIGthbicsXG4gICAgICAgICAgICBNTTogJ29zdcyAICVkJyxcbiAgICAgICAgICAgIHk6ICfhu41kdcyBbiBrYW4nLFxuICAgICAgICAgICAgeXk6ICfhu41kdcyBbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC/hu41q4buNzIFcXHNcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geW87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoQ2hpbmEpIFt6aC1jbl1cbi8vISBhdXRob3IgOiBzdXVwaWMgOiBodHRwczovL2dpdGh1Yi5jb20vc3V1cGljXG4vLyEgYXV0aG9yIDogWmVubyBaZW5nIDogaHR0cHM6Ly9naXRodWIuY29tL3plbm96ZW5nXG4vLyEgYXV0aG9yIDogdXUxMDkgOiBodHRwczovL2dpdGh1Yi5jb20vdXUxMDlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aENuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtY24nLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+WRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpUFo54K5bW3liIYnLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICfkuK3ljYgnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+S4i11kZGRMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5pysXWRkZExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiKXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzlkagpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+WRqCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WQjicsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+WHoOenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkp8nLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkp8nLFxuICAgICAgICAgICAgaDogJzEg5bCP5pe2JyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pe2JyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICB3OiAnMSDlkagnLFxuICAgICAgICAgICAgd3c6ICclZCDlkagnLFxuICAgICAgICAgICAgTTogJzEg5Liq5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5Liq5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aENuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKEhvbmcgS29uZykgW3poLWhrXVxuLy8hIGF1dGhvciA6IEJlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZW4tbGluXG4vLyEgYXV0aG9yIDogQ2hyaXMgTGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2hlaGFjaHJpc1xuLy8hIGF1dGhvciA6IEtvbnN0YW50aW4gOiBodHRwczovL2dpdGh1Yi5jb20vc2tmZFxuLy8hIGF1dGhvciA6IEFudGhvbnkgOiBodHRwczovL2dpdGh1Yi5jb20vYW50aG9ueWxhdVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoSGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1oaycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtID09PSAxMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGRMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+W+jCcsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aEhrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKE1hY2F1KSBbemgtbW9dXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogVGFuIFl1YW5ob25nIDogaHR0cHM6Ly9naXRodWIuY29tL2xlMHRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoTW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1tbycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WFpycsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aE1vO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKFRhaXdhbikgW3poLXR3XVxuLy8hIGF1dGhvciA6IEJlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZW4tbGluXG4vLyEgYXV0aG9yIDogQ2hyaXMgTGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2hlaGFjaHJpc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoVHcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC10dycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+W+jCcsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aFR3O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjI5LjRcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKSxcbiAgICAgICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXModW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRQcmlvcml0eSh1bml0LCBwcmlvcml0eSkge1xuICAgICAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpXG4gICAgICAgICAgICA/IG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpXG4gICAgICAgICAgICA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB1bml0ID09PSAnRnVsbFllYXInICYmXG4gICAgICAgICAgICAgICAgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJlxuICAgICAgICAgICAgICAgIG1vbS5tb250aCgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgbW9tLmRhdGUoKSA9PT0gMjlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1vbS5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID1cbiAgICAgICAgICAgIC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjayxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkxlbiA9IHRva2VuLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPVxuICAgICAgICAgICAgJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID1cbiAgICAgICAgICAgICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9XG4gICAgICAgICAgICAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIHJldHVybiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSAhPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgICAgICAgICBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG5cbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS40JztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIVxuICogU2VsZWN0MiA0LjEuMC1yYy4wXG4gKiBodHRwczovL3NlbGVjdDIuZ2l0aHViLmlvXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2VsZWN0Mi9zZWxlY3QyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuOyhmdW5jdGlvbiAoZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIC8vIE5vZGUvQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCBqUXVlcnkpIHtcbiAgICAgIGlmIChqUXVlcnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyByZXF1aXJlKCdqUXVlcnknKSByZXR1cm5zIGEgZmFjdG9yeSB0aGF0IHJlcXVpcmVzIHdpbmRvdyB0b1xuICAgICAgICAvLyBidWlsZCBhIGpRdWVyeSBpbnN0YW5jZSwgd2Ugbm9ybWFsaXplIGhvdyB3ZSB1c2UgbW9kdWxlc1xuICAgICAgICAvLyB0aGF0IHJlcXVpcmUgdGhpcyBwYXR0ZXJuIGJ1dCB0aGUgd2luZG93IHByb3ZpZGVkIGlzIGEgbm9vcFxuICAgICAgICAvLyBpZiBpdCdzIGRlZmluZWQgKGhvdyBqcXVlcnkgd29ya3MpXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgICByZXR1cm4galF1ZXJ5O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzXG4gICAgZmFjdG9yeShqUXVlcnkpO1xuICB9XG59IChmdW5jdGlvbiAoalF1ZXJ5KSB7XG4gIC8vIFRoaXMgaXMgbmVlZGVkIHNvIHdlIGNhbiBjYXRjaCB0aGUgQU1EIGxvYWRlciBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXRcbiAgLy8gVGhlIGlubmVyIGZpbGUgc2hvdWxkIGJlIHdyYXBwZWQgKGJ5IGBiYW5uZXIuc3RhcnQuanNgKSBpbiBhIGZ1bmN0aW9uIHRoYXRcbiAgLy8gcmV0dXJucyB0aGUgQU1EIGxvYWRlciByZWZlcmVuY2VzLlxuICB2YXIgUzIgPShmdW5jdGlvbiAoKSB7XG4gIC8vIFJlc3RvcmUgdGhlIFNlbGVjdDIgQU1EIGxvYWRlciBzbyBpdCBjYW4gYmUgdXNlZFxuICAvLyBOZWVkZWQgbW9zdGx5IGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2hlcmUgdGhlIGxvYWRlciBpcyBub3QgaW5zZXJ0ZWRcbiAgaWYgKGpRdWVyeSAmJiBqUXVlcnkuZm4gJiYgalF1ZXJ5LmZuLnNlbGVjdDIgJiYgalF1ZXJ5LmZuLnNlbGVjdDIuYW1kKSB7XG4gICAgdmFyIFMyID0galF1ZXJ5LmZuLnNlbGVjdDIuYW1kO1xuICB9XG52YXIgUzI7KGZ1bmN0aW9uICgpIHsgaWYgKCFTMiB8fCAhUzIucmVxdWlyZWpzKSB7XG5pZiAoIVMyKSB7IFMyID0ge307IH0gZWxzZSB7IHJlcXVpcmUgPSBTMjsgfVxuLyoqXG4gKiBAbGljZW5zZSBhbG1vbmQgMC4zLjMgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuXG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cDovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL2FsbW9uZC9MSUNFTlNFXG4gKi9cbi8vR29pbmcgc2xvcHB5IHRvIGF2b2lkICd1c2Ugc3RyaWN0JyBzdHJpbmcgY29zdCwgYnV0IHN0cmljdCBwcmFjdGljZXMgc2hvdWxkXG4vL2JlIGZvbGxvd2VkLlxuLypnbG9iYWwgc2V0VGltZW91dDogZmFsc2UgKi9cblxudmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lO1xuKGZ1bmN0aW9uICh1bmRlZikge1xuICAgIHZhciBtYWluLCByZXEsIG1ha2VNYXAsIGhhbmRsZXJzLFxuICAgICAgICBkZWZpbmVkID0ge30sXG4gICAgICAgIHdhaXRpbmcgPSB7fSxcbiAgICAgICAgY29uZmlnID0ge30sXG4gICAgICAgIGRlZmluaW5nID0ge30sXG4gICAgICAgIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICAgIGFwcyA9IFtdLnNsaWNlLFxuICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cXC5qcyQvO1xuXG4gICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHtcbiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSwgbGlrZSAuL3NvbWV0aGluZywgbm9ybWFsaXplIGl0IHRvXG4gICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVsYXRpdmUgbmFtZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlTmFtZSBhIHJlYWwgbmFtZSB0aGF0IHRoZSBuYW1lIGFyZyBpcyByZWxhdGl2ZVxuICAgICAqIHRvLlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSkge1xuICAgICAgICB2YXIgbmFtZVBhcnRzLCBuYW1lU2VnbWVudCwgbWFwVmFsdWUsIGZvdW5kTWFwLCBsYXN0SW5kZXgsXG4gICAgICAgICAgICBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksIGksIGosIHBhcnQsIG5vcm1hbGl6ZWRCYXNlUGFydHMsXG4gICAgICAgICAgICBiYXNlUGFydHMgPSBiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdChcIi9cIiksXG4gICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLFxuICAgICAgICAgICAgc3Rhck1hcCA9IChtYXAgJiYgbWFwWycqJ10pIHx8IHt9O1xuXG4gICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy5cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmRcbiAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsXG4gICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXBcbiAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS5cbiAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lXG4gICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHtcbiAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsXG4gICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUnc1xuICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0b1xuICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yXG4gICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3N0YXJ0IHRyaW1Eb3RzXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuYW1lW2ldO1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLixcbiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGVtIHNvIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoIGl0IG1heVxuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2hcbiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVsZWFzZXMsIG1heSBiZSBiZXR0ZXIgdG8ganVzdCBraWNrIG91dCBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgbmFtZVsyXSA9PT0gJy4uJykgfHwgbmFtZVtpIC0gMV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnNwbGljZShpIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2VuZCB0cmltRG90c1xuXG4gICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLlxuICAgICAgICBpZiAoKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSAmJiBtYXApIHtcbiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTtcblxuICAgICAgICAgICAgZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oXCIvXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykge1xuICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLlxuICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBtYXBbYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcFZhbHVlW25hbWVTZWdtZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsXG4gICAgICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLlxuICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgc3Rhck1hcFtuYW1lU2VnbWVudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gc3Rhck1hcFtuYW1lU2VnbWVudF07XG4gICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7XG4gICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7XG4gICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3VuZE1hcCkge1xuICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlUmVxdWlyZShyZWxOYW1lLCBmb3JjZVN5bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vQSB2ZXJzaW9uIG9mIGEgcmVxdWlyZSBmdW5jdGlvbiB0aGF0IHBhc3NlcyBhIG1vZHVsZU5hbWVcbiAgICAgICAgICAgIC8vdmFsdWUgZm9yIGl0ZW1zIHRoYXQgbWF5IG5lZWQgdG9cbiAgICAgICAgICAgIC8vbG9vayB1cCBwYXRocyByZWxhdGl2ZSB0byB0aGUgbW9kdWxlTmFtZVxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcHMuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgICAgICAvL0lmIGZpcnN0IGFyZyBpcyBub3QgcmVxdWlyZSgnc3RyaW5nJyksIGFuZCB0aGVyZSBpcyBvbmx5XG4gICAgICAgICAgICAvL29uZSBhcmcsIGl0IGlzIHRoZSBhcnJheSBmb3JtIHdpdGhvdXQgYSBjYWxsYmFjay4gSW5zZXJ0XG4gICAgICAgICAgICAvL2EgbnVsbCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgY29uY2F0IGlzIGNvcnJlY3QuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcS5hcHBseSh1bmRlZiwgYXJncy5jb25jYXQoW3JlbE5hbWUsIGZvcmNlU3luY10pKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlTm9ybWFsaXplKHJlbE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHJlbE5hbWUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VMb2FkKGRlcE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgZGVmaW5lZFtkZXBOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxEZXAobmFtZSkge1xuICAgICAgICBpZiAoaGFzUHJvcCh3YWl0aW5nLCBuYW1lKSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSB3YWl0aW5nW25hbWVdO1xuICAgICAgICAgICAgZGVsZXRlIHdhaXRpbmdbbmFtZV07XG4gICAgICAgICAgICBkZWZpbmluZ1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICBtYWluLmFwcGx5KHVuZGVmLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBuYW1lKSAmJiAhaGFzUHJvcChkZWZpbmluZywgbmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gJyArIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZpbmVkW25hbWVdO1xuICAgIH1cblxuICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdXG4gICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lXG4gICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LlxuICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHtcbiAgICAgICAgdmFyIHByZWZpeCxcbiAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdO1xuICAgIH1cblxuICAgIC8vQ3JlYXRlcyBhIHBhcnRzIGFycmF5IGZvciBhIHJlbE5hbWUgd2hlcmUgZmlyc3QgcGFydCBpcyBwbHVnaW4gSUQsXG4gICAgLy9zZWNvbmQgcGFydCBpcyByZXNvdXJjZSBJRC4gQXNzdW1lcyByZWxOYW1lIGhhcyBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC5cbiAgICBmdW5jdGlvbiBtYWtlUmVsUGFydHMocmVsTmFtZSkge1xuICAgICAgICByZXR1cm4gcmVsTmFtZSA/IHNwbGl0UHJlZml4KHJlbE5hbWUpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgYSBuYW1lIG1hcCwgbm9ybWFsaXppbmcgdGhlIG5hbWUsIGFuZCB1c2luZyBhIHBsdWdpblxuICAgICAqIGZvciBub3JtYWxpemF0aW9uIGlmIG5lY2Vzc2FyeS4gR3JhYnMgYSByZWYgdG8gcGx1Z2luXG4gICAgICogdG9vLCBhcyBhbiBvcHRpbWl6YXRpb24uXG4gICAgICovXG4gICAgbWFrZU1hcCA9IGZ1bmN0aW9uIChuYW1lLCByZWxQYXJ0cykge1xuICAgICAgICB2YXIgcGx1Z2luLFxuICAgICAgICAgICAgcGFydHMgPSBzcGxpdFByZWZpeChuYW1lKSxcbiAgICAgICAgICAgIHByZWZpeCA9IHBhcnRzWzBdLFxuICAgICAgICAgICAgcmVsUmVzb3VyY2VOYW1lID0gcmVsUGFydHNbMV07XG5cbiAgICAgICAgbmFtZSA9IHBhcnRzWzFdO1xuXG4gICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHJlbFJlc291cmNlTmFtZSk7XG4gICAgICAgICAgICBwbHVnaW4gPSBjYWxsRGVwKHByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL05vcm1hbGl6ZSBhY2NvcmRpbmdcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgaWYgKHBsdWdpbiAmJiBwbHVnaW4ubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgbWFrZU5vcm1hbGl6ZShyZWxSZXNvdXJjZU5hbWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZShuYW1lLCByZWxSZXNvdXJjZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZShuYW1lLCByZWxSZXNvdXJjZU5hbWUpO1xuICAgICAgICAgICAgcGFydHMgPSBzcGxpdFByZWZpeChuYW1lKTtcbiAgICAgICAgICAgIHByZWZpeCA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgbmFtZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgICAgIHBsdWdpbiA9IGNhbGxEZXAocHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vVXNpbmcgcmlkaWN1bG91cyBwcm9wZXJ0eSBuYW1lcyBmb3Igc3BhY2UgcmVhc29uc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZjogcHJlZml4ID8gcHJlZml4ICsgJyEnICsgbmFtZSA6IG5hbWUsIC8vZnVsbE5hbWVcbiAgICAgICAgICAgIG46IG5hbWUsXG4gICAgICAgICAgICBwcjogcHJlZml4LFxuICAgICAgICAgICAgcDogcGx1Z2luXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG1ha2VDb25maWcobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChjb25maWcgJiYgY29uZmlnLmNvbmZpZyAmJiBjb25maWcuY29uZmlnW25hbWVdKSB8fCB7fTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVycyA9IHtcbiAgICAgICAgcmVxdWlyZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlUmVxdWlyZShuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0czogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBlID0gZGVmaW5lZFtuYW1lXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW25hbWVdID0ge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb2R1bGU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBuYW1lLFxuICAgICAgICAgICAgICAgIHVyaTogJycsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZGVmaW5lZFtuYW1lXSxcbiAgICAgICAgICAgICAgICBjb25maWc6IG1ha2VDb25maWcobmFtZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbWFpbiA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSkge1xuICAgICAgICB2YXIgY2pzTW9kdWxlLCBkZXBOYW1lLCByZXQsIG1hcCwgaSwgcmVsUGFydHMsXG4gICAgICAgICAgICBhcmdzID0gW10sXG4gICAgICAgICAgICBjYWxsYmFja1R5cGUgPSB0eXBlb2YgY2FsbGJhY2ssXG4gICAgICAgICAgICB1c2luZ0V4cG9ydHM7XG5cbiAgICAgICAgLy9Vc2UgbmFtZSBpZiBubyByZWxOYW1lXG4gICAgICAgIHJlbE5hbWUgPSByZWxOYW1lIHx8IG5hbWU7XG4gICAgICAgIHJlbFBhcnRzID0gbWFrZVJlbFBhcnRzKHJlbE5hbWUpO1xuXG4gICAgICAgIC8vQ2FsbCB0aGUgY2FsbGJhY2sgdG8gZGVmaW5lIHRoZSBtb2R1bGUsIGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKGNhbGxiYWNrVHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgY2FsbGJhY2tUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBkZWZpbmVkIGRlcGVuZGVuY2llcyBhbmQgcGFzcyB0aGUgb3JkZXJlZFxuICAgICAgICAgICAgLy92YWx1ZXMgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAgICAgICAgLy9EZWZhdWx0IHRvIFtyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGVdIGlmIG5vIGRlcHNcbiAgICAgICAgICAgIGRlcHMgPSAhZGVwcy5sZW5ndGggJiYgY2FsbGJhY2subGVuZ3RoID8gWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10gOiBkZXBzO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlcHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTWFwKGRlcHNbaV0sIHJlbFBhcnRzKTtcbiAgICAgICAgICAgICAgICBkZXBOYW1lID0gbWFwLmY7XG5cbiAgICAgICAgICAgICAgICAvL0Zhc3QgcGF0aCBDb21tb25KUyBzdGFuZGFyZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgaWYgKGRlcE5hbWUgPT09IFwicmVxdWlyZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBoYW5kbGVycy5yZXF1aXJlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwTmFtZSA9PT0gXCJleHBvcnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Db21tb25KUyBtb2R1bGUgc3BlYyAxLjFcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGhhbmRsZXJzLmV4cG9ydHMobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHVzaW5nRXhwb3J0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXBOYW1lID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vQ29tbW9uSlMgbW9kdWxlIHNwZWMgMS4xXG4gICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IGFyZ3NbaV0gPSBoYW5kbGVycy5tb2R1bGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNQcm9wKGRlZmluZWQsIGRlcE5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm9wKHdhaXRpbmcsIGRlcE5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm9wKGRlZmluaW5nLCBkZXBOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY2FsbERlcChkZXBOYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcC5wKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcC5wLmxvYWQobWFwLm4sIG1ha2VSZXF1aXJlKHJlbE5hbWUsIHRydWUpLCBtYWtlTG9hZChkZXBOYW1lKSwge30pO1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gZGVmaW5lZFtkZXBOYW1lXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbWlzc2luZyAnICsgZGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXQgPSBjYWxsYmFjayA/IGNhbGxiYWNrLmFwcGx5KGRlZmluZWRbbmFtZV0sIGFyZ3MpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgIC8vSWYgc2V0dGluZyBleHBvcnRzIHZpYSBcIm1vZHVsZVwiIGlzIGluIHBsYXksXG4gICAgICAgICAgICAgICAgLy9mYXZvciB0aGF0IG92ZXIgcmV0dXJuIHZhbHVlIGFuZCBleHBvcnRzLiBBZnRlciB0aGF0LFxuICAgICAgICAgICAgICAgIC8vZmF2b3IgYSBub24tdW5kZWZpbmVkIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMgdXNlLlxuICAgICAgICAgICAgICAgIGlmIChjanNNb2R1bGUgJiYgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHVuZGVmICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUuZXhwb3J0cyAhPT0gZGVmaW5lZFtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW25hbWVdID0gY2pzTW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXQgIT09IHVuZGVmIHx8ICF1c2luZ0V4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtuYW1lXSA9IHJldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmFtZSkge1xuICAgICAgICAgICAgLy9NYXkganVzdCBiZSBhbiBvYmplY3QgZGVmaW5pdGlvbiBmb3IgdGhlIG1vZHVsZS4gT25seVxuICAgICAgICAgICAgLy93b3JyeSBhYm91dCBkZWZpbmluZyBpZiBoYXZlIGEgbW9kdWxlIG5hbWUuXG4gICAgICAgICAgICBkZWZpbmVkW25hbWVdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWlyZWpzID0gcmVxdWlyZSA9IHJlcSA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSwgZm9yY2VTeW5jLCBhbHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbZGVwc10pIHtcbiAgICAgICAgICAgICAgICAvL2NhbGxiYWNrIGluIHRoaXMgY2FzZSBpcyByZWFsbHkgcmVsTmFtZVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL0p1c3QgcmV0dXJuIHRoZSBtb2R1bGUgd2FudGVkLiBJbiB0aGlzIHNjZW5hcmlvLCB0aGVcbiAgICAgICAgICAgIC8vZGVwcyBhcmcgaXMgdGhlIG1vZHVsZSBuYW1lLCBhbmQgc2Vjb25kIGFyZyAoaWYgcGFzc2VkKVxuICAgICAgICAgICAgLy9pcyBqdXN0IHRoZSByZWxOYW1lLlxuICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi5cbiAgICAgICAgICAgIHJldHVybiBjYWxsRGVwKG1ha2VNYXAoZGVwcywgbWFrZVJlbFBhcnRzKGNhbGxiYWNrKSkuZik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWRlcHMuc3BsaWNlKSB7XG4gICAgICAgICAgICAvL2RlcHMgaXMgYSBjb25maWcgb2JqZWN0LCBub3QgYW4gYXJyYXkuXG4gICAgICAgICAgICBjb25maWcgPSBkZXBzO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXBzKSB7XG4gICAgICAgICAgICAgICAgcmVxKGNvbmZpZy5kZXBzLCBjb25maWcuY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrLnNwbGljZSkge1xuICAgICAgICAgICAgICAgIC8vY2FsbGJhY2sgaXMgYW4gYXJyYXksIHdoaWNoIG1lYW5zIGl0IGlzIGEgZGVwZW5kZW5jeSBsaXN0LlxuICAgICAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHJlbE5hbWU7XG4gICAgICAgICAgICAgICAgcmVsTmFtZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlcHMgPSB1bmRlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vU3VwcG9ydCByZXF1aXJlKFsnYSddKVxuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgIC8vSWYgcmVsTmFtZSBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBhbiBlcnJiYWNrIGhhbmRsZXIsXG4gICAgICAgIC8vc28gcmVtb3ZlIGl0LlxuICAgICAgICBpZiAodHlwZW9mIHJlbE5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlbE5hbWUgPSBmb3JjZVN5bmM7XG4gICAgICAgICAgICBmb3JjZVN5bmMgPSBhbHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvL1NpbXVsYXRlIGFzeW5jIGNhbGxiYWNrO1xuICAgICAgICBpZiAoZm9yY2VTeW5jKSB7XG4gICAgICAgICAgICBtYWluKHVuZGVmLCBkZXBzLCBjYWxsYmFjaywgcmVsTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL1VzaW5nIGEgbm9uLXplcm8gdmFsdWUgYmVjYXVzZSBvZiBjb25jZXJuIGZvciB3aGF0IG9sZCBicm93c2Vyc1xuICAgICAgICAgICAgLy9kbywgYW5kIGxhdGVzdCBicm93c2VycyBcInVwZ3JhZGVcIiB0byA0IGlmIGxvd2VyIHZhbHVlIGlzIHVzZWQ6XG4gICAgICAgICAgICAvL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RpbWVycy5odG1sI2RvbS13aW5kb3d0aW1lcnMtc2V0dGltZW91dDpcbiAgICAgICAgICAgIC8vSWYgd2FudCBhIHZhbHVlIGltbWVkaWF0ZWx5LCB1c2UgcmVxdWlyZSgnaWQnKSBpbnN0ZWFkIC0tIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy90aGF0IHdvcmtzIGluIGFsbW9uZCBvbiB0aGUgZ2xvYmFsIGxldmVsLCBidXQgbm90IGd1YXJhbnRlZWQgYW5kXG4gICAgICAgICAgICAvL3VubGlrZWx5IHRvIHdvcmsgaW4gb3RoZXIgQU1EIGltcGxlbWVudGF0aW9ucy5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG1haW4odW5kZWYsIGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lKTtcbiAgICAgICAgICAgIH0sIDQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSnVzdCBkcm9wcyB0aGUgY29uZmlnIG9uIHRoZSBmbG9vciwgYnV0IHJldHVybnMgcmVxIGluIGNhc2VcbiAgICAgKiB0aGUgY29uZmlnIHJldHVybiB2YWx1ZSBpcyB1c2VkLlxuICAgICAqL1xuICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY2ZnKSB7XG4gICAgICAgIHJldHVybiByZXEoY2ZnKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRXhwb3NlIG1vZHVsZSByZWdpc3RyeSBmb3IgZGVidWdnaW5nIGFuZCB0b29saW5nXG4gICAgICovXG4gICAgcmVxdWlyZWpzLl9kZWZpbmVkID0gZGVmaW5lZDtcblxuICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlZSBhbG1vbmQgUkVBRE1FOiBpbmNvcnJlY3QgbW9kdWxlIGJ1aWxkLCBubyBtb2R1bGUgbmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzXG4gICAgICAgIGlmICghZGVwcy5zcGxpY2UpIHtcbiAgICAgICAgICAgIC8vZGVwcyBpcyBub3QgYW4gYXJyYXksIHNvIHByb2JhYmx5IG1lYW5zXG4gICAgICAgICAgICAvL2FuIG9iamVjdCBsaXRlcmFsIG9yIGZhY3RvcnkgZnVuY3Rpb24gZm9yXG4gICAgICAgICAgICAvL3RoZSB2YWx1ZS4gQWRqdXN0IGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7XG4gICAgICAgICAgICBkZXBzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgbmFtZSkgJiYgIWhhc1Byb3Aod2FpdGluZywgbmFtZSkpIHtcbiAgICAgICAgICAgIHdhaXRpbmdbbmFtZV0gPSBbbmFtZSwgZGVwcywgY2FsbGJhY2tdO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZS5hbWQgPSB7XG4gICAgICAgIGpRdWVyeTogdHJ1ZVxuICAgIH07XG59KCkpO1xuXG5TMi5yZXF1aXJlanMgPSByZXF1aXJlanM7UzIucmVxdWlyZSA9IHJlcXVpcmU7UzIuZGVmaW5lID0gZGVmaW5lO1xufVxufSgpKTtcblMyLmRlZmluZShcImFsbW9uZFwiLCBmdW5jdGlvbigpe30pO1xuXG4vKiBnbG9iYWwgalF1ZXJ5OmZhbHNlLCAkOmZhbHNlICovXG5TMi5kZWZpbmUoJ2pxdWVyeScsW10sZnVuY3Rpb24gKCkge1xuICB2YXIgXyQgPSBqUXVlcnkgfHwgJDtcblxuICBpZiAoXyQgPT0gbnVsbCAmJiBjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJ1NlbGVjdDI6IEFuIGluc3RhbmNlIG9mIGpRdWVyeSBvciBhIGpRdWVyeS1jb21wYXRpYmxlIGxpYnJhcnkgd2FzIG5vdCAnICtcbiAgICAgICdmb3VuZC4gTWFrZSBzdXJlIHRoYXQgeW91IGFyZSBpbmNsdWRpbmcgalF1ZXJ5IGJlZm9yZSBTZWxlY3QyIG9uIHlvdXIgJyArXG4gICAgICAnd2ViIHBhZ2UuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gXyQ7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3V0aWxzJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICB2YXIgVXRpbHMgPSB7fTtcblxuICBVdGlscy5FeHRlbmQgPSBmdW5jdGlvbiAoQ2hpbGRDbGFzcywgU3VwZXJDbGFzcykge1xuICAgIHZhciBfX2hhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIGZ1bmN0aW9uIEJhc2VDb25zdHJ1Y3RvciAoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gQ2hpbGRDbGFzcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gU3VwZXJDbGFzcykge1xuICAgICAgaWYgKF9faGFzUHJvcC5jYWxsKFN1cGVyQ2xhc3MsIGtleSkpIHtcbiAgICAgICAgQ2hpbGRDbGFzc1trZXldID0gU3VwZXJDbGFzc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJhc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBTdXBlckNsYXNzLnByb3RvdHlwZTtcbiAgICBDaGlsZENsYXNzLnByb3RvdHlwZSA9IG5ldyBCYXNlQ29uc3RydWN0b3IoKTtcbiAgICBDaGlsZENsYXNzLl9fc3VwZXJfXyA9IFN1cGVyQ2xhc3MucHJvdG90eXBlO1xuXG4gICAgcmV0dXJuIENoaWxkQ2xhc3M7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0TWV0aG9kcyAodGhlQ2xhc3MpIHtcbiAgICB2YXIgcHJvdG8gPSB0aGVDbGFzcy5wcm90b3R5cGU7XG5cbiAgICB2YXIgbWV0aG9kcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBwcm90bykge1xuICAgICAgdmFyIG0gPSBwcm90b1ttZXRob2ROYW1lXTtcblxuICAgICAgaWYgKHR5cGVvZiBtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWV0aG9kcy5wdXNoKG1ldGhvZE5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2RzO1xuICB9XG5cbiAgVXRpbHMuRGVjb3JhdGUgPSBmdW5jdGlvbiAoU3VwZXJDbGFzcywgRGVjb3JhdG9yQ2xhc3MpIHtcbiAgICB2YXIgZGVjb3JhdGVkTWV0aG9kcyA9IGdldE1ldGhvZHMoRGVjb3JhdG9yQ2xhc3MpO1xuICAgIHZhciBzdXBlck1ldGhvZHMgPSBnZXRNZXRob2RzKFN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gRGVjb3JhdGVkQ2xhc3MgKCkge1xuICAgICAgdmFyIHVuc2hpZnQgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdDtcblxuICAgICAgdmFyIGFyZ0NvdW50ID0gRGVjb3JhdG9yQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yLmxlbmd0aDtcblxuICAgICAgdmFyIGNhbGxlZENvbnN0cnVjdG9yID0gU3VwZXJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbiAgICAgIGlmIChhcmdDb3VudCA+IDApIHtcbiAgICAgICAgdW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgU3VwZXJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IpO1xuXG4gICAgICAgIGNhbGxlZENvbnN0cnVjdG9yID0gRGVjb3JhdG9yQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgICAgfVxuXG4gICAgICBjYWxsZWRDb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIERlY29yYXRvckNsYXNzLmRpc3BsYXlOYW1lID0gU3VwZXJDbGFzcy5kaXNwbGF5TmFtZTtcblxuICAgIGZ1bmN0aW9uIGN0ciAoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gRGVjb3JhdGVkQ2xhc3M7XG4gICAgfVxuXG4gICAgRGVjb3JhdGVkQ2xhc3MucHJvdG90eXBlID0gbmV3IGN0cigpO1xuXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzdXBlck1ldGhvZHMubGVuZ3RoOyBtKyspIHtcbiAgICAgIHZhciBzdXBlck1ldGhvZCA9IHN1cGVyTWV0aG9kc1ttXTtcblxuICAgICAgRGVjb3JhdGVkQ2xhc3MucHJvdG90eXBlW3N1cGVyTWV0aG9kXSA9XG4gICAgICAgIFN1cGVyQ2xhc3MucHJvdG90eXBlW3N1cGVyTWV0aG9kXTtcbiAgICB9XG5cbiAgICB2YXIgY2FsbGVkTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICAgIC8vIFN0dWIgb3V0IHRoZSBvcmlnaW5hbCBtZXRob2QgaWYgaXQncyBub3QgZGVjb3JhdGluZyBhbiBhY3R1YWwgbWV0aG9kXG4gICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgICAgaWYgKG1ldGhvZE5hbWUgaW4gRGVjb3JhdGVkQ2xhc3MucHJvdG90eXBlKSB7XG4gICAgICAgIG9yaWdpbmFsTWV0aG9kID0gRGVjb3JhdGVkQ2xhc3MucHJvdG90eXBlW21ldGhvZE5hbWVdO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVjb3JhdGVkTWV0aG9kID0gRGVjb3JhdG9yQ2xhc3MucHJvdG90eXBlW21ldGhvZE5hbWVdO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdW5zaGlmdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0O1xuXG4gICAgICAgIHVuc2hpZnQuY2FsbChhcmd1bWVudHMsIG9yaWdpbmFsTWV0aG9kKTtcblxuICAgICAgICByZXR1cm4gZGVjb3JhdGVkTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRlY29yYXRlZE1ldGhvZHMubGVuZ3RoOyBkKyspIHtcbiAgICAgIHZhciBkZWNvcmF0ZWRNZXRob2QgPSBkZWNvcmF0ZWRNZXRob2RzW2RdO1xuXG4gICAgICBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGVbZGVjb3JhdGVkTWV0aG9kXSA9IGNhbGxlZE1ldGhvZChkZWNvcmF0ZWRNZXRob2QpO1xuICAgIH1cblxuICAgIHJldHVybiBEZWNvcmF0ZWRDbGFzcztcbiAgfTtcblxuICB2YXIgT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHt9O1xuICB9O1xuXG4gIE9ic2VydmFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHRoaXMubGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnMgfHwge307XG5cbiAgICBpZiAoZXZlbnQgaW4gdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5lcnNbZXZlbnRdID0gW2NhbGxiYWNrXTtcbiAgICB9XG4gIH07XG5cbiAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgICB2YXIgcGFyYW1zID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyB8fCB7fTtcblxuICAgIC8vIFBhcmFtcyBzaG91bGQgYWx3YXlzIGNvbWUgaW4gYXMgYW4gYXJyYXlcbiAgICBpZiAocGFyYW1zID09IG51bGwpIHtcbiAgICAgIHBhcmFtcyA9IFtdO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMgdG8gdGhlIGV2ZW50LCB1c2UgYSB0ZW1wb3Jhcnkgb2JqZWN0XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHBhcmFtcy5wdXNoKHt9KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGBfdHlwZWAgb2YgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgZXZlbnRcbiAgICBwYXJhbXNbMF0uX3R5cGUgPSBldmVudDtcblxuICAgIGlmIChldmVudCBpbiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgdGhpcy5pbnZva2UodGhpcy5saXN0ZW5lcnNbZXZlbnRdLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIH1cblxuICAgIGlmICgnKicgaW4gdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuaW52b2tlKHRoaXMubGlzdGVuZXJzWycqJ10sIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xuXG4gIE9ic2VydmFibGUucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uIChsaXN0ZW5lcnMsIHBhcmFtcykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBwYXJhbXMpO1xuICAgIH1cbiAgfTtcblxuICBVdGlscy5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZTtcblxuICBVdGlscy5nZW5lcmF0ZUNoYXJzID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuICAgIHZhciBjaGFycyA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmRvbUNoYXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzNik7XG4gICAgICBjaGFycyArPSByYW5kb21DaGFyLnRvU3RyaW5nKDM2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnM7XG4gIH07XG5cbiAgVXRpbHMuYmluZCA9IGZ1bmN0aW9uIChmdW5jLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9O1xuXG4gIFV0aWxzLl9jb252ZXJ0RGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZm9yICh2YXIgb3JpZ2luYWxLZXkgaW4gZGF0YSkge1xuICAgICAgdmFyIGtleXMgPSBvcmlnaW5hbEtleS5zcGxpdCgnLScpO1xuXG4gICAgICB2YXIgZGF0YUxldmVsID0gZGF0YTtcblxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNba107XG5cbiAgICAgICAgLy8gTG93ZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXJcbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgZGFzaC1zZXBhcmF0ZWQgYmVjb21lcyBjYW1lbENhc2VcbiAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcblxuICAgICAgICBpZiAoIShrZXkgaW4gZGF0YUxldmVsKSkge1xuICAgICAgICAgIGRhdGFMZXZlbFtrZXldID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoayA9PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBkYXRhTGV2ZWxba2V5XSA9IGRhdGFbb3JpZ2luYWxLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YUxldmVsID0gZGF0YUxldmVsW2tleV07XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBkYXRhW29yaWdpbmFsS2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBVdGlscy5oYXNTY3JvbGwgPSBmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgLy8gQWRhcHRlZCBmcm9tIHRoZSBmdW5jdGlvbiBjcmVhdGVkIGJ5IEBTaGFkb3dTY3JpcHRlclxuICAgIC8vIGFuZCBhZGFwdGVkIGJ5IEBCaWxsQmFycnkgb24gdGhlIFN0YWNrIEV4Y2hhbmdlIENvZGUgUmV2aWV3IHdlYnNpdGUuXG4gICAgLy8gVGhlIG9yaWdpbmFsIGNvZGUgY2FuIGJlIGZvdW5kIGF0XG4gICAgLy8gaHR0cDovL2NvZGVyZXZpZXcuc3RhY2tleGNoYW5nZS5jb20vcS8xMzMzOFxuICAgIC8vIGFuZCB3YXMgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBTaXp6bGUgc2VsZWN0b3IgZW5naW5lLlxuXG4gICAgdmFyICRlbCA9ICQoZWwpO1xuICAgIHZhciBvdmVyZmxvd1ggPSBlbC5zdHlsZS5vdmVyZmxvd1g7XG4gICAgdmFyIG92ZXJmbG93WSA9IGVsLnN0eWxlLm92ZXJmbG93WTtcblxuICAgIC8vQ2hlY2sgYm90aCB4IGFuZCB5IGRlY2xhcmF0aW9uc1xuICAgIGlmIChvdmVyZmxvd1ggPT09IG92ZXJmbG93WSAmJlxuICAgICAgICAob3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCBvdmVyZmxvd1kgPT09ICd2aXNpYmxlJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3ZlcmZsb3dYID09PSAnc2Nyb2xsJyB8fCBvdmVyZmxvd1kgPT09ICdzY3JvbGwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCRlbC5pbm5lckhlaWdodCgpIDwgZWwuc2Nyb2xsSGVpZ2h0IHx8XG4gICAgICAkZWwuaW5uZXJXaWR0aCgpIDwgZWwuc2Nyb2xsV2lkdGgpO1xuICB9O1xuXG4gIFV0aWxzLmVzY2FwZU1hcmt1cCA9IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgcmVwbGFjZU1hcCA9IHtcbiAgICAgICdcXFxcJzogJyYjOTI7JyxcbiAgICAgICcmJzogJyZhbXA7JyxcbiAgICAgICc8JzogJyZsdDsnLFxuICAgICAgJz4nOiAnJmd0OycsXG4gICAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAgICdcXCcnOiAnJiMzOTsnLFxuICAgICAgJy8nOiAnJiM0NzsnXG4gICAgfTtcblxuICAgIC8vIERvIG5vdCB0cnkgdG8gZXNjYXBlIHRoZSBtYXJrdXAgaWYgaXQncyBub3QgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIG1hcmt1cCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtYXJrdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhtYXJrdXApLnJlcGxhY2UoL1smPD5cIidcXC9cXFxcXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiByZXBsYWNlTWFwW21hdGNoXTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDYWNoZSBvYmplY3RzIGluIFV0aWxzLl9fY2FjaGUgaW5zdGVhZCBvZiAkLmRhdGEgKHNlZSAjNDM0NilcbiAgVXRpbHMuX19jYWNoZSA9IHt9O1xuXG4gIHZhciBpZCA9IDA7XG4gIFV0aWxzLkdldFVuaXF1ZUVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgLy8gR2V0IGEgdW5pcXVlIGVsZW1lbnQgSWQuIElmIGVsZW1lbnQgaGFzIG5vIGlkLFxuICAgIC8vIGNyZWF0ZXMgYSBuZXcgdW5pcXVlIG51bWJlciwgc3RvcmVzIGl0IGluIHRoZSBpZFxuICAgIC8vIGF0dHJpYnV0ZSBhbmQgcmV0dXJucyB0aGUgbmV3IGlkIHdpdGggYSBwcmVmaXguXG4gICAgLy8gSWYgYW4gaWQgYWxyZWFkeSBleGlzdHMsIGl0IHNpbXBseSByZXR1cm5zIGl0IHdpdGggYSBwcmVmaXguXG5cbiAgICB2YXIgc2VsZWN0MklkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcpO1xuXG4gICAgaWYgKHNlbGVjdDJJZCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2VsZWN0MklkO1xuICAgIH1cblxuICAgIC8vIElmIGVsZW1lbnQgaGFzIGlkLCB1c2UgaXQuXG4gICAgaWYgKGVsZW1lbnQuaWQpIHtcbiAgICAgIHNlbGVjdDJJZCA9ICdzZWxlY3QyLWRhdGEtJyArIGVsZW1lbnQuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdDJJZCA9ICdzZWxlY3QyLWRhdGEtJyArICgrK2lkKS50b1N0cmluZygpICtcbiAgICAgICAgJy0nICsgVXRpbHMuZ2VuZXJhdGVDaGFycyg0KTtcbiAgICB9XG5cbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJywgc2VsZWN0MklkKTtcblxuICAgIHJldHVybiBzZWxlY3QySWQ7XG4gIH07XG5cbiAgVXRpbHMuU3RvcmVEYXRhID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gICAgLy8gU3RvcmVzIGFuIGl0ZW0gaW4gdGhlIGNhY2hlIGZvciBhIHNwZWNpZmllZCBlbGVtZW50LlxuICAgIC8vIG5hbWUgaXMgdGhlIGNhY2hlIGtleS5cbiAgICB2YXIgaWQgPSBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQoZWxlbWVudCk7XG4gICAgaWYgKCFVdGlscy5fX2NhY2hlW2lkXSkge1xuICAgICAgVXRpbHMuX19jYWNoZVtpZF0gPSB7fTtcbiAgICB9XG5cbiAgICBVdGlscy5fX2NhY2hlW2lkXVtuYW1lXSA9IHZhbHVlO1xuICB9O1xuXG4gIFV0aWxzLkdldERhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICAgIC8vIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGNhY2hlIGJ5IGl0cyBrZXkgKG5hbWUpXG4gICAgLy8gbmFtZSBpcyBvcHRpb25hbC4gSWYgbm8gbmFtZSBzcGVjaWZpZWQsIHJldHVyblxuICAgIC8vIGFsbCBjYWNoZSBpdGVtcyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuICAgIC8vIGFuZCBmb3IgYSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICB2YXIgaWQgPSBVdGlscy5HZXRVbmlxdWVFbGVtZW50SWQoZWxlbWVudCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGlmIChVdGlscy5fX2NhY2hlW2lkXSkge1xuICAgICAgICBpZiAoVXRpbHMuX19jYWNoZVtpZF1bbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBVdGlscy5fX2NhY2hlW2lkXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJChlbGVtZW50KS5kYXRhKG5hbWUpOyAvLyBGYWxsYmFjayB0byBIVE1MNSBkYXRhIGF0dHJpYnMuXG4gICAgICB9XG4gICAgICByZXR1cm4gJChlbGVtZW50KS5kYXRhKG5hbWUpOyAvLyBGYWxsYmFjayB0byBIVE1MNSBkYXRhIGF0dHJpYnMuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBVdGlscy5fX2NhY2hlW2lkXTtcbiAgICB9XG4gIH07XG5cbiAgVXRpbHMuUmVtb3ZlRGF0YSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgLy8gUmVtb3ZlcyBhbGwgY2FjaGVkIGl0ZW1zIGZvciBhIHNwZWNpZmllZCBlbGVtZW50LlxuICAgIHZhciBpZCA9IFV0aWxzLkdldFVuaXF1ZUVsZW1lbnRJZChlbGVtZW50KTtcbiAgICBpZiAoVXRpbHMuX19jYWNoZVtpZF0gIT0gbnVsbCkge1xuICAgICAgZGVsZXRlIFV0aWxzLl9fY2FjaGVbaWRdO1xuICAgIH1cblxuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNlbGVjdDItaWQnKTtcbiAgfTtcblxuICBVdGlscy5jb3B5Tm9uSW50ZXJuYWxDc3NDbGFzc2VzID0gZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICAgIHZhciBjbGFzc2VzO1xuXG4gICAgdmFyIGRlc3RpbmF0aW9uQ2xhc3NlcyA9IGRlc3QuZ2V0QXR0cmlidXRlKCdjbGFzcycpLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuXG4gICAgZGVzdGluYXRpb25DbGFzc2VzID0gZGVzdGluYXRpb25DbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhenopIHtcbiAgICAgIC8vIFNhdmUgYWxsIFNlbGVjdDIgY2xhc3Nlc1xuICAgICAgcmV0dXJuIGNsYXp6LmluZGV4T2YoJ3NlbGVjdDItJykgPT09IDA7XG4gICAgfSk7XG5cbiAgICB2YXIgc291cmNlQ2xhc3NlcyA9IHNyYy5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICBzb3VyY2VDbGFzc2VzID0gc291cmNlQ2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXp6KSB7XG4gICAgICAvLyBPbmx5IGNvcHkgbm9uLVNlbGVjdDIgY2xhc3Nlc1xuICAgICAgcmV0dXJuIGNsYXp6LmluZGV4T2YoJ3NlbGVjdDItJykgIT09IDA7XG4gICAgfSk7XG5cbiAgICB2YXIgcmVwbGFjZW1lbnRzID0gZGVzdGluYXRpb25DbGFzc2VzLmNvbmNhdChzb3VyY2VDbGFzc2VzKTtcblxuICAgIGRlc3Quc2V0QXR0cmlidXRlKCdjbGFzcycsIHJlcGxhY2VtZW50cy5qb2luKCcgJykpO1xuICB9O1xuXG4gIHJldHVybiBVdGlscztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvcmVzdWx0cycsW1xuICAnanF1ZXJ5JyxcbiAgJy4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgVXRpbHMpIHtcbiAgZnVuY3Rpb24gUmVzdWx0cyAoJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50O1xuICAgIHRoaXMuZGF0YSA9IGRhdGFBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBSZXN1bHRzLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuICB9XG5cbiAgVXRpbHMuRXh0ZW5kKFJlc3VsdHMsIFV0aWxzLk9ic2VydmFibGUpO1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHJlc3VsdHMgPSAkKFxuICAgICAgJzx1bCBjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uc1wiIHJvbGU9XCJsaXN0Ym94XCI+PC91bD4nXG4gICAgKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdtdWx0aXBsZScpKSB7XG4gICAgICAkcmVzdWx0cy5hdHRyKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kcmVzdWx0cyA9ICRyZXN1bHRzO1xuXG4gICAgcmV0dXJuICRyZXN1bHRzO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHJlc3VsdHMuZW1wdHkoKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5kaXNwbGF5TWVzc2FnZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICB2YXIgZXNjYXBlTWFya3VwID0gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJyk7XG5cbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5oaWRlTG9hZGluZygpO1xuXG4gICAgdmFyICRtZXNzYWdlID0gJChcbiAgICAgICc8bGkgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCInICtcbiAgICAgICcgY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvblwiPjwvbGk+J1xuICAgICk7XG5cbiAgICB2YXIgbWVzc2FnZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldChwYXJhbXMubWVzc2FnZSk7XG5cbiAgICAkbWVzc2FnZS5hcHBlbmQoXG4gICAgICBlc2NhcGVNYXJrdXAoXG4gICAgICAgIG1lc3NhZ2UocGFyYW1zLmFyZ3MpXG4gICAgICApXG4gICAgKTtcblxuICAgICRtZXNzYWdlWzBdLmNsYXNzTmFtZSArPSAnIHNlbGVjdDItcmVzdWx0c19fbWVzc2FnZSc7XG5cbiAgICB0aGlzLiRyZXN1bHRzLmFwcGVuZCgkbWVzc2FnZSk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuaGlkZU1lc3NhZ2VzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fbWVzc2FnZScpLnJlbW92ZSgpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhpcy5oaWRlTG9hZGluZygpO1xuXG4gICAgdmFyICRvcHRpb25zID0gW107XG5cbiAgICBpZiAoZGF0YS5yZXN1bHRzID09IG51bGwgfHwgZGF0YS5yZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuJHJlc3VsdHMuY2hpbGRyZW4oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7XG4gICAgICAgICAgbWVzc2FnZTogJ25vUmVzdWx0cydcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnJlc3VsdHMgPSB0aGlzLnNvcnQoZGF0YS5yZXN1bHRzKTtcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5yZXN1bHRzLmxlbmd0aDsgZCsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGRhdGEucmVzdWx0c1tkXTtcblxuICAgICAgdmFyICRvcHRpb24gPSB0aGlzLm9wdGlvbihpdGVtKTtcblxuICAgICAgJG9wdGlvbnMucHVzaCgkb3B0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLiRyZXN1bHRzLmFwcGVuZCgkb3B0aW9ucyk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoJHJlc3VsdHMsICRkcm9wZG93bikge1xuICAgIHZhciAkcmVzdWx0c0NvbnRhaW5lciA9ICRkcm9wZG93bi5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzJyk7XG4gICAgJHJlc3VsdHNDb250YWluZXIuYXBwZW5kKCRyZXN1bHRzKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5zb3J0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgc29ydGVyID0gdGhpcy5vcHRpb25zLmdldCgnc29ydGVyJyk7XG5cbiAgICByZXR1cm4gc29ydGVyKGRhdGEpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmhpZ2hsaWdodEZpcnN0SXRlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRyZXN1bHRzXG4gICAgICAuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG5cbiAgICB2YXIgJHNlbGVjdGVkID0gJG9wdGlvbnMuZmlsdGVyKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkJyk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlbGVjdGVkIG9wdGlvbnNcbiAgICBpZiAoJHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBzZWxlY3RlZCBvcHRpb25zLCBoaWdobGlnaHQgdGhlIGZpcnN0XG4gICAgICAkc2VsZWN0ZWQuZmlyc3QoKS50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBzZWxlY3RlZCBvcHRpb25zLCBoaWdobGlnaHQgdGhlIGZpcnN0IG9wdGlvblxuICAgICAgLy8gaW4gdGhlIGRyb3Bkb3duXG4gICAgICAkb3B0aW9ucy5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuc3VyZUhpZ2hsaWdodFZpc2libGUoKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5zZXRDbGFzc2VzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuZGF0YS5jdXJyZW50KGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgICAgdmFyIHNlbGVjdGVkSWRzID0gc2VsZWN0ZWQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiBzLmlkLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcblxuICAgICAgdmFyICRvcHRpb25zID0gc2VsZi4kcmVzdWx0c1xuICAgICAgICAuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG5cbiAgICAgICRvcHRpb25zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJG9wdGlvbiA9ICQodGhpcyk7XG5cbiAgICAgICAgdmFyIGl0ZW0gPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7XG5cbiAgICAgICAgLy8gaWQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHdoZW4gY29tcGFyaW5nXG4gICAgICAgIHZhciBpZCA9ICcnICsgaXRlbS5pZDtcblxuICAgICAgICBpZiAoKGl0ZW0uZWxlbWVudCAhPSBudWxsICYmIGl0ZW0uZWxlbWVudC5zZWxlY3RlZCkgfHxcbiAgICAgICAgICAgIChpdGVtLmVsZW1lbnQgPT0gbnVsbCAmJiBzZWxlY3RlZElkcy5pbmRleE9mKGlkKSA+IC0xKSkge1xuICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkJyk7XG4gICAgICAgICAgJG9wdGlvbi5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RlZCcpO1xuICAgICAgICAgICRvcHRpb24uYXR0cignYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLnNob3dMb2FkaW5nID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIHRoaXMuaGlkZUxvYWRpbmcoKTtcblxuICAgIHZhciBsb2FkaW5nTW9yZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgnc2VhcmNoaW5nJyk7XG5cbiAgICB2YXIgbG9hZGluZyA9IHtcbiAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIHRleHQ6IGxvYWRpbmdNb3JlKHBhcmFtcylcbiAgICB9O1xuICAgIHZhciAkbG9hZGluZyA9IHRoaXMub3B0aW9uKGxvYWRpbmcpO1xuICAgICRsb2FkaW5nLmNsYXNzTmFtZSArPSAnIGxvYWRpbmctcmVzdWx0cyc7XG5cbiAgICB0aGlzLiRyZXN1bHRzLnByZXBlbmQoJGxvYWRpbmcpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmhpZGVMb2FkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHJlc3VsdHMuZmluZCgnLmxvYWRpbmctcmVzdWx0cycpLnJlbW92ZSgpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLm9wdGlvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uJyk7XG4gICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG5cbiAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAncm9sZSc6ICdvcHRpb24nXG4gICAgfTtcblxuICAgIHZhciBtYXRjaGVzID0gd2luZG93LkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICAgIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgd2luZG93LkVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuICAgIGlmICgoZGF0YS5lbGVtZW50ICE9IG51bGwgJiYgbWF0Y2hlcy5jYWxsKGRhdGEuZWxlbWVudCwgJzpkaXNhYmxlZCcpKSB8fFxuICAgICAgICAoZGF0YS5lbGVtZW50ID09IG51bGwgJiYgZGF0YS5kaXNhYmxlZCkpIHtcbiAgICAgIGF0dHJzWydhcmlhLWRpc2FibGVkJ10gPSAndHJ1ZSc7XG5cbiAgICAgIG9wdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1kaXNhYmxlZCcpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmlkID09IG51bGwpIHtcbiAgICAgIG9wdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLl9yZXN1bHRJZCAhPSBudWxsKSB7XG4gICAgICBvcHRpb24uaWQgPSBkYXRhLl9yZXN1bHRJZDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgb3B0aW9uLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgYXR0cnMucm9sZSA9ICdncm91cCc7XG4gICAgICBhdHRyc1snYXJpYS1sYWJlbCddID0gZGF0YS50ZXh0O1xuXG4gICAgICBvcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcbiAgICAgIG9wdGlvbi5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tZ3JvdXAnKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBhdHRyIGluIGF0dHJzKSB7XG4gICAgICB2YXIgdmFsID0gYXR0cnNbYXR0cl07XG5cbiAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgdmFyICRvcHRpb24gPSAkKG9wdGlvbik7XG5cbiAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0cm9uZycpO1xuICAgICAgbGFiZWwuY2xhc3NOYW1lID0gJ3NlbGVjdDItcmVzdWx0c19fZ3JvdXAnO1xuXG4gICAgICB0aGlzLnRlbXBsYXRlKGRhdGEsIGxhYmVsKTtcblxuICAgICAgdmFyICRjaGlsZHJlbiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGRhdGEuY2hpbGRyZW4ubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gZGF0YS5jaGlsZHJlbltjXTtcblxuICAgICAgICB2YXIgJGNoaWxkID0gdGhpcy5vcHRpb24oY2hpbGQpO1xuXG4gICAgICAgICRjaGlsZHJlbi5wdXNoKCRjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciAkY2hpbGRyZW5Db250YWluZXIgPSAkKCc8dWw+PC91bD4nLCB7XG4gICAgICAgICdjbGFzcyc6ICdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWQnLFxuICAgICAgICAncm9sZSc6ICdub25lJ1xuICAgICAgfSk7XG5cbiAgICAgICRjaGlsZHJlbkNvbnRhaW5lci5hcHBlbmQoJGNoaWxkcmVuKTtcblxuICAgICAgJG9wdGlvbi5hcHBlbmQobGFiZWwpO1xuICAgICAgJG9wdGlvbi5hcHBlbmQoJGNoaWxkcmVuQ29udGFpbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wbGF0ZShkYXRhLCBvcHRpb24pO1xuICAgIH1cblxuICAgIFV0aWxzLlN0b3JlRGF0YShvcHRpb24sICdkYXRhJywgZGF0YSk7XG5cbiAgICByZXR1cm4gb3B0aW9uO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHRzJztcblxuICAgIHRoaXMuJHJlc3VsdHMuYXR0cignaWQnLCBpZCk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi5jbGVhcigpO1xuICAgICAgc2VsZi5hcHBlbmQocGFyYW1zLmRhdGEpO1xuXG4gICAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7XG4gICAgICAgIHNlbGYuc2V0Q2xhc3NlcygpO1xuICAgICAgICBzZWxmLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuYXBwZW5kKHBhcmFtcy5kYXRhKTtcblxuICAgICAgaWYgKGNvbnRhaW5lci5pc09wZW4oKSkge1xuICAgICAgICBzZWxmLnNldENsYXNzZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncXVlcnknLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmhpZGVNZXNzYWdlcygpO1xuICAgICAgc2VsZi5zaG93TG9hZGluZyhwYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuc2V0Q2xhc3NlcygpO1xuXG4gICAgICBpZiAoc2VsZi5vcHRpb25zLmdldCgnc2Nyb2xsQWZ0ZXJTZWxlY3QnKSkge1xuICAgICAgICBzZWxmLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCd1bnNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY29udGFpbmVyLmlzT3BlbigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7XG5cbiAgICAgIGlmIChzZWxmLm9wdGlvbnMuZ2V0KCdzY3JvbGxBZnRlclNlbGVjdCcpKSB7XG4gICAgICAgIHNlbGYuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXaGVuIHRoZSBkcm9wZG93biBpcyBvcGVuLCBhcmlhLWV4cGVuZGVkPVwidHJ1ZVwiXG4gICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgICAgc2VsZi4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuXG4gICAgICBzZWxmLnNldENsYXNzZXMoKTtcbiAgICAgIHNlbGYuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCwgYXJpYS1leHBlbmRlZD1cImZhbHNlXCJcbiAgICAgIHNlbGYuJHJlc3VsdHMuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgICAgc2VsZi4kcmVzdWx0cy5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICBzZWxmLiRyZXN1bHRzLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOnRvZ2dsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXG4gICAgICBpZiAoJGhpZ2hsaWdodGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICRoaWdobGlnaHRlZC50cmlnZ2VyKCdtb3VzZXVwJyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6c2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRoaWdobGlnaHRlZCA9IHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cbiAgICAgIGlmICgkaGlnaGxpZ2h0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRoaWdobGlnaHRlZFswXSwgJ2RhdGEnKTtcblxuICAgICAgaWYgKCRoaWdobGlnaHRlZC5oYXNDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkJykpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdjbG9zZScsIHt9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0Jywge1xuICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6cHJldmlvdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJGhpZ2hsaWdodGVkID0gc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblxuICAgICAgdmFyICRvcHRpb25zID0gc2VsZi4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcblxuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9ICRvcHRpb25zLmluZGV4KCRoaWdobGlnaHRlZCk7XG5cbiAgICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSB0b3AsIGRvbid0IG1vdmUgZnVydGhlclxuICAgICAgLy8gSWYgbm8gb3B0aW9ucywgY3VycmVudEluZGV4IHdpbGwgYmUgLTFcbiAgICAgIGlmIChjdXJyZW50SW5kZXggPD0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuXG4gICAgICAvLyBJZiBub25lIGFyZSBoaWdobGlnaHRlZCwgaGlnaGxpZ2h0IHRoZSBmaXJzdFxuICAgICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyICRuZXh0ID0gJG9wdGlvbnMuZXEobmV4dEluZGV4KTtcblxuICAgICAgJG5leHQudHJpZ2dlcignbW91c2VlbnRlcicpO1xuXG4gICAgICB2YXIgY3VycmVudE9mZnNldCA9IHNlbGYuJHJlc3VsdHMub2Zmc2V0KCkudG9wO1xuICAgICAgdmFyIG5leHRUb3AgPSAkbmV4dC5vZmZzZXQoKS50b3A7XG4gICAgICB2YXIgbmV4dE9mZnNldCA9IHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAobmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICBpZiAobmV4dEluZGV4ID09PSAwKSB7XG4gICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApO1xuICAgICAgfSBlbHNlIGlmIChuZXh0VG9wIC0gY3VycmVudE9mZnNldCA8IDApIHtcbiAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AobmV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6bmV4dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXG4gICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuXG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gJG9wdGlvbnMuaW5kZXgoJGhpZ2hsaWdodGVkKTtcblxuICAgICAgdmFyIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgbGFzdCBvcHRpb24sIHN0YXkgdGhlcmVcbiAgICAgIGlmIChuZXh0SW5kZXggPj0gJG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyICRuZXh0ID0gJG9wdGlvbnMuZXEobmV4dEluZGV4KTtcblxuICAgICAgJG5leHQudHJpZ2dlcignbW91c2VlbnRlcicpO1xuXG4gICAgICB2YXIgY3VycmVudE9mZnNldCA9IHNlbGYuJHJlc3VsdHMub2Zmc2V0KCkudG9wICtcbiAgICAgICAgc2VsZi4kcmVzdWx0cy5vdXRlckhlaWdodChmYWxzZSk7XG4gICAgICB2YXIgbmV4dEJvdHRvbSA9ICRuZXh0Lm9mZnNldCgpLnRvcCArICRuZXh0Lm91dGVySGVpZ2h0KGZhbHNlKTtcbiAgICAgIHZhciBuZXh0T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIG5leHRCb3R0b20gLSBjdXJyZW50T2Zmc2V0O1xuXG4gICAgICBpZiAobmV4dEluZGV4ID09PSAwKSB7XG4gICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApO1xuICAgICAgfSBlbHNlIGlmIChuZXh0Qm90dG9tID4gY3VycmVudE9mZnNldCkge1xuICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcChuZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5lbGVtZW50WzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpO1xuICAgICAgcGFyYW1zLmVsZW1lbnRbMF0uc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czptZXNzYWdlJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi5kaXNwbGF5TWVzc2FnZShwYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgaWYgKCQuZm4ubW91c2V3aGVlbCkge1xuICAgICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2V3aGVlbCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciB0b3AgPSBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgpO1xuXG4gICAgICAgIHZhciBib3R0b20gPSBzZWxmLiRyZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSB0b3AgKyBlLmRlbHRhWTtcblxuICAgICAgICB2YXIgaXNBdFRvcCA9IGUuZGVsdGFZID4gMCAmJiB0b3AgLSBlLmRlbHRhWSA8PSAwO1xuICAgICAgICB2YXIgaXNBdEJvdHRvbSA9IGUuZGVsdGFZIDwgMCAmJiBib3R0b20gPD0gc2VsZi4kcmVzdWx0cy5oZWlnaHQoKTtcblxuICAgICAgICBpZiAoaXNBdFRvcCkge1xuICAgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKDApO1xuXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBdEJvdHRvbSkge1xuICAgICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKFxuICAgICAgICAgICAgc2VsZi4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0IC0gc2VsZi4kcmVzdWx0cy5oZWlnaHQoKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2V1cCcsICcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcblxuICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7XG5cbiAgICAgIGlmICgkdGhpcy5oYXNDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkJykpIHtcbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5nZXQoJ211bHRpcGxlJykpIHtcbiAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Vuc2VsZWN0Jywge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0LFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcignY2xvc2UnLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0Jywge1xuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kcmVzdWx0cy5vbignbW91c2VlbnRlcicsICcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKHRoaXMsICdkYXRhJyk7XG5cbiAgICAgIHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKClcbiAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpXG4gICAgICAgICAgLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcblxuICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOmZvY3VzJywge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBlbGVtZW50OiAkKHRoaXMpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5nZXRIaWdobGlnaHRlZFJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRoaWdobGlnaHRlZCA9IHRoaXMuJHJlc3VsdHNcbiAgICAuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCcpO1xuXG4gICAgcmV0dXJuICRoaWdobGlnaHRlZDtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHJlc3VsdHMucmVtb3ZlKCk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGhpZ2hsaWdodGVkID0gdGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblxuICAgIGlmICgkaGlnaGxpZ2h0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyICRvcHRpb25zID0gdGhpcy4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcblxuICAgIHZhciBjdXJyZW50SW5kZXggPSAkb3B0aW9ucy5pbmRleCgkaGlnaGxpZ2h0ZWQpO1xuXG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcDtcbiAgICB2YXIgbmV4dFRvcCA9ICRoaWdobGlnaHRlZC5vZmZzZXQoKS50b3A7XG4gICAgdmFyIG5leHRPZmZzZXQgPSB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcCgpICsgKG5leHRUb3AgLSBjdXJyZW50T2Zmc2V0KTtcblxuICAgIHZhciBvZmZzZXREZWx0YSA9IG5leHRUb3AgLSBjdXJyZW50T2Zmc2V0O1xuICAgIG5leHRPZmZzZXQgLT0gJGhpZ2hsaWdodGVkLm91dGVySGVpZ2h0KGZhbHNlKSAqIDI7XG5cbiAgICBpZiAoY3VycmVudEluZGV4IDw9IDIpIHtcbiAgICAgIHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKDApO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0RGVsdGEgPiB0aGlzLiRyZXN1bHRzLm91dGVySGVpZ2h0KCkgfHwgb2Zmc2V0RGVsdGEgPCAwKSB7XG4gICAgICB0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChuZXh0T2Zmc2V0KTtcbiAgICB9XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUudGVtcGxhdGUgPSBmdW5jdGlvbiAocmVzdWx0LCBjb250YWluZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVJlc3VsdCcpO1xuICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblxuICAgIHZhciBjb250ZW50ID0gdGVtcGxhdGUocmVzdWx0LCBjb250YWluZXIpO1xuXG4gICAgaWYgKGNvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBlc2NhcGVNYXJrdXAoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoY29udGVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBSZXN1bHRzO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9rZXlzJyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIEtFWVMgPSB7XG4gICAgQkFDS1NQQUNFOiA4LFxuICAgIFRBQjogOSxcbiAgICBFTlRFUjogMTMsXG4gICAgU0hJRlQ6IDE2LFxuICAgIENUUkw6IDE3LFxuICAgIEFMVDogMTgsXG4gICAgRVNDOiAyNyxcbiAgICBTUEFDRTogMzIsXG4gICAgUEFHRV9VUDogMzMsXG4gICAgUEFHRV9ET1dOOiAzNCxcbiAgICBFTkQ6IDM1LFxuICAgIEhPTUU6IDM2LFxuICAgIExFRlQ6IDM3LFxuICAgIFVQOiAzOCxcbiAgICBSSUdIVDogMzksXG4gICAgRE9XTjogNDAsXG4gICAgREVMRVRFOiA0NlxuICB9O1xuXG4gIHJldHVybiBLRVlTO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYmFzZScsW1xuICAnanF1ZXJ5JyxcbiAgJy4uL3V0aWxzJyxcbiAgJy4uL2tleXMnXG5dLCBmdW5jdGlvbiAoJCwgVXRpbHMsIEtFWVMpIHtcbiAgZnVuY3Rpb24gQmFzZVNlbGVjdGlvbiAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIEJhc2VTZWxlY3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoQmFzZVNlbGVjdGlvbiwgVXRpbHMuT2JzZXJ2YWJsZSk7XG5cbiAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkc2VsZWN0aW9uID0gJChcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uXCIgcm9sZT1cImNvbWJvYm94XCIgJyArXG4gICAgICAnIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+JyArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuXG4gICAgdGhpcy5fdGFiaW5kZXggPSAwO1xuXG4gICAgaWYgKFV0aWxzLkdldERhdGEodGhpcy4kZWxlbWVudFswXSwgJ29sZC10YWJpbmRleCcpICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4Jyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSB0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4Jyk7XG4gICAgfVxuXG4gICAgJHNlbGVjdGlvbi5hdHRyKCd0aXRsZScsIHRoaXMuJGVsZW1lbnQuYXR0cigndGl0bGUnKSk7XG4gICAgJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcsIHRoaXMuX3RhYmluZGV4KTtcbiAgICAkc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbiA9ICRzZWxlY3Rpb247XG5cbiAgICByZXR1cm4gJHNlbGVjdGlvbjtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciByZXN1bHRzSWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdHMnO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLl9oYW5kbGVCbHVyKGV2dCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ2tleXByZXNzJywgZXZ0KTtcblxuICAgICAgaWYgKGV2dC53aGljaCA9PT0gS0VZUy5TUEFDRSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBwYXJhbXMuZGF0YS5fcmVzdWx0SWQpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdzZWxlY3Rpb246dXBkYXRlJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi51cGRhdGUocGFyYW1zLmRhdGEpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgb3BlbiwgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtb3ducycsIHJlc3VsdHNJZCk7XG5cbiAgICAgIHNlbGYuX2F0dGFjaENsb3NlSGFuZGxlcihjb250YWluZXIpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCwgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cignYXJpYS1vd25zJyk7XG5cbiAgICAgIHNlbGYuJHNlbGVjdGlvbi50cmlnZ2VyKCdmb2N1cycpO1xuXG4gICAgICBzZWxmLl9kZXRhY2hDbG9zZUhhbmRsZXIoY29udGFpbmVyKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4Jywgc2VsZi5fdGFiaW5kZXgpO1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZGlzYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgIH0pO1xuICB9O1xuXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLl9oYW5kbGVCbHVyID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZGVsYXllZCBhcyB0aGUgYWN0aXZlIGVsZW1lbnQgaXMgdGhlIGJvZHkgd2hlbiB0aGUgdGFiXG4gICAgLy8ga2V5IGlzIHByZXNzZWQsIHBvc3NpYmx5IGFsb25nIHdpdGggb3RoZXJzLlxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvbid0IHRyaWdnZXIgYGJsdXJgIGlmIHRoZSBmb2N1cyBpcyBzdGlsbCBpbiB0aGUgc2VsZWN0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IHNlbGYuJHNlbGVjdGlvblswXSkgfHxcbiAgICAgICAgKCQuY29udGFpbnMoc2VsZi4kc2VsZWN0aW9uWzBdLCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYudHJpZ2dlcignYmx1cicsIGV2dCk7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuX2F0dGFjaENsb3NlSGFuZGxlciA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcblxuICAgICQoZG9jdW1lbnQuYm9keSkub24oJ21vdXNlZG93bi5zZWxlY3QyLicgKyBjb250YWluZXIuaWQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgJHRhcmdldCA9ICQoZS50YXJnZXQpO1xuXG4gICAgICB2YXIgJHNlbGVjdCA9ICR0YXJnZXQuY2xvc2VzdCgnLnNlbGVjdDInKTtcblxuICAgICAgdmFyICRhbGwgPSAkKCcuc2VsZWN0Mi5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuXG4gICAgICAkYWxsLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyA9PSAkc2VsZWN0WzBdKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyICRlbGVtZW50ID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnZWxlbWVudCcpO1xuXG4gICAgICAgICRlbGVtZW50LnNlbGVjdDIoJ2Nsb3NlJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5fZGV0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICQoZG9jdW1lbnQuYm9keSkub2ZmKCdtb3VzZWRvd24uc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkKTtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uICgkc2VsZWN0aW9uLCAkY29udGFpbmVyKSB7XG4gICAgdmFyICRzZWxlY3Rpb25Db250YWluZXIgPSAkY29udGFpbmVyLmZpbmQoJy5zZWxlY3Rpb24nKTtcbiAgICAkc2VsZWN0aW9uQ29udGFpbmVyLmFwcGVuZCgkc2VsZWN0aW9uKTtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2RldGFjaENsb3NlSGFuZGxlcih0aGlzLmNvbnRhaW5lcik7XG4gIH07XG5cbiAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgdXBkYXRlYCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gYWJzdHJhY3QgdGhlIFwiZW5hYmxlZFwiIChub3QgXCJkaXNhYmxlZFwiKSBzdGF0ZSBvZiB0aGlzXG4gICAqIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybiB7dHJ1ZX0gaWYgdGhlIGluc3RhbmNlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICogQHJldHVybiB7ZmFsc2V9IGlmIHRoZSBpbnN0YW5jZSBpcyBkaXNhYmxlZC5cbiAgICovXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmlzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGFic3RyYWN0IHRoZSBcImRpc2FibGVkXCIgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm4ge3RydWV9IGlmIHRoZSBkaXNhYmxlZCBvcHRpb24gaXMgdHJ1ZS5cbiAgICogQHJldHVybiB7ZmFsc2V9IGlmIHRoZSBkaXNhYmxlZCBvcHRpb24gaXMgZmFsc2UuXG4gICAqL1xuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2V0KCdkaXNhYmxlZCcpO1xuICB9O1xuXG4gIHJldHVybiBCYXNlU2VsZWN0aW9uO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vc2luZ2xlJyxbXG4gICdqcXVlcnknLFxuICAnLi9iYXNlJyxcbiAgJy4uL3V0aWxzJyxcbiAgJy4uL2tleXMnXG5dLCBmdW5jdGlvbiAoJCwgQmFzZVNlbGVjdGlvbiwgVXRpbHMsIEtFWVMpIHtcbiAgZnVuY3Rpb24gU2luZ2xlU2VsZWN0aW9uICgpIHtcbiAgICBTaW5nbGVTZWxlY3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoU2luZ2xlU2VsZWN0aW9uLCBCYXNlU2VsZWN0aW9uKTtcblxuICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHNlbGVjdGlvbiA9IFNpbmdsZVNlbGVjdGlvbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7XG5cbiAgICAkc2VsZWN0aW9uWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUnKTtcblxuICAgICRzZWxlY3Rpb24uaHRtbChcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiPjwvc3Bhbj4nICtcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19hcnJvd1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj4nICtcbiAgICAgICAgJzxiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L2I+JyArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuXG4gICAgcmV0dXJuICRzZWxlY3Rpb247XG4gIH07XG5cbiAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIFNpbmdsZVNlbGVjdGlvbi5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1jb250YWluZXInO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKVxuICAgICAgLmF0dHIoJ2lkJywgaWQpXG4gICAgICAuYXR0cigncm9sZScsICd0ZXh0Ym94JylcbiAgICAgIC5hdHRyKCdhcmlhLXJlYWRvbmx5JywgJ3RydWUnKTtcbiAgICB0aGlzLiRzZWxlY3Rpb24uYXR0cignYXJpYS1sYWJlbGxlZGJ5JywgaWQpO1xuICAgIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWNvbnRyb2xzJywgaWQpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAvLyBPbmx5IHJlc3BvbmQgdG8gbGVmdCBjbGlja3NcbiAgICAgIGlmIChldnQud2hpY2ggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnRyaWdnZXIoJ3RvZ2dsZScsIHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAvLyBVc2VyIGZvY3VzZXMgb24gdGhlIGNvbnRhaW5lclxuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdibHVyJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgLy8gVXNlciBleGl0cyB0aGUgY29udGFpbmVyXG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgaWYgKCFjb250YWluZXIuaXNPcGVuKCkpIHtcbiAgICAgICAgc2VsZi4kc2VsZWN0aW9uLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcbiAgICAkcmVuZGVyZWQuZW1wdHkoKTtcbiAgICAkcmVuZGVyZWQucmVtb3ZlQXR0cigndGl0bGUnKTsgLy8gY2xlYXIgdG9vbHRpcCBvbiBlbXB0eVxuICB9O1xuXG4gIFNpbmdsZVNlbGVjdGlvbi5wcm90b3R5cGUuZGlzcGxheSA9IGZ1bmN0aW9uIChkYXRhLCBjb250YWluZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpO1xuICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblxuICAgIHJldHVybiBlc2NhcGVNYXJrdXAodGVtcGxhdGUoZGF0YSwgY29udGFpbmVyKSk7XG4gIH07XG5cbiAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICQoJzxzcGFuPjwvc3Bhbj4nKTtcbiAgfTtcblxuICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNlbGVjdGlvbiA9IGRhdGFbMF07XG5cbiAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcbiAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5KHNlbGVjdGlvbiwgJHJlbmRlcmVkKTtcblxuICAgICRyZW5kZXJlZC5lbXB0eSgpLmFwcGVuZChmb3JtYXR0ZWQpO1xuXG4gICAgdmFyIHRpdGxlID0gc2VsZWN0aW9uLnRpdGxlIHx8IHNlbGVjdGlvbi50ZXh0O1xuXG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICAkcmVuZGVyZWQuYXR0cigndGl0bGUnLCB0aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRyZW5kZXJlZC5yZW1vdmVBdHRyKCd0aXRsZScpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU2luZ2xlU2VsZWN0aW9uO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vbXVsdGlwbGUnLFtcbiAgJ2pxdWVyeScsXG4gICcuL2Jhc2UnLFxuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgQmFzZVNlbGVjdGlvbiwgVXRpbHMpIHtcbiAgZnVuY3Rpb24gTXVsdGlwbGVTZWxlY3Rpb24gKCRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgTXVsdGlwbGVTZWxlY3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoTXVsdGlwbGVTZWxlY3Rpb24sIEJhc2VTZWxlY3Rpb24pO1xuXG4gIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRzZWxlY3Rpb24gPSBNdWx0aXBsZVNlbGVjdGlvbi5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7XG5cbiAgICAkc2VsZWN0aW9uWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZScpO1xuXG4gICAgJHNlbGVjdGlvbi5odG1sKFxuICAgICAgJzx1bCBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiPjwvdWw+J1xuICAgICk7XG5cbiAgICByZXR1cm4gJHNlbGVjdGlvbjtcbiAgfTtcblxuICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBNdWx0aXBsZVNlbGVjdGlvbi5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1jb250YWluZXInO1xuICAgIHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJykuYXR0cignaWQnLCBpZCk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi50cmlnZ2VyKCd0b2dnbGUnLCB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IGlzIGRpc2FibGVkXG4gICAgICAgIGlmIChzZWxmLmlzRGlzYWJsZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciAkcmVtb3ZlID0gJCh0aGlzKTtcbiAgICAgICAgdmFyICRzZWxlY3Rpb24gPSAkcmVtb3ZlLnBhcmVudCgpO1xuXG4gICAgICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkc2VsZWN0aW9uWzBdLCAnZGF0YScpO1xuXG4gICAgICAgIHNlbGYudHJpZ2dlcigndW5zZWxlY3QnLCB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0LFxuICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlJyxcbiAgICAgIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBpdCBpcyBkaXNhYmxlZFxuICAgICAgICBpZiAoc2VsZi5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRyZW5kZXJlZCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyk7XG4gICAgJHJlbmRlcmVkLmVtcHR5KCk7XG4gICAgJHJlbmRlcmVkLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG4gIH07XG5cbiAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLmRpc3BsYXkgPSBmdW5jdGlvbiAoZGF0YSwgY29udGFpbmVyKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRpb25zLmdldCgndGVtcGxhdGVTZWxlY3Rpb24nKTtcbiAgICB2YXIgZXNjYXBlTWFya3VwID0gdGhpcy5vcHRpb25zLmdldCgnZXNjYXBlTWFya3VwJyk7XG5cbiAgICByZXR1cm4gZXNjYXBlTWFya3VwKHRlbXBsYXRlKGRhdGEsIGNvbnRhaW5lcikpO1xuICB9O1xuXG4gIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRjb250YWluZXIgPSAkKFxuICAgICAgJzxsaSBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VcIj4nICtcbiAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlXCIgJyArXG4gICAgICAgICd0YWJpbmRleD1cIi0xXCI+JyArXG4gICAgICAgICAgJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+JyArXG4gICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fZGlzcGxheVwiPjwvc3Bhbj4nICtcbiAgICAgICc8L2xpPidcbiAgICApO1xuXG4gICAgcmV0dXJuICRjb250YWluZXI7XG4gIH07XG5cbiAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyICRzZWxlY3Rpb25zID0gW107XG5cbiAgICB2YXIgc2VsZWN0aW9uSWRQcmVmaXggPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpXG4gICAgICAuYXR0cignaWQnKSArICctY2hvaWNlLSc7XG5cbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHtcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBkYXRhW2RdO1xuXG4gICAgICB2YXIgJHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyKCk7XG4gICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5KHNlbGVjdGlvbiwgJHNlbGVjdGlvbik7XG5cbiAgICAgIHZhciBzZWxlY3Rpb25JZCA9IHNlbGVjdGlvbklkUHJlZml4ICsgVXRpbHMuZ2VuZXJhdGVDaGFycyg0KSArICctJztcblxuICAgICAgaWYgKHNlbGVjdGlvbi5pZCkge1xuICAgICAgICBzZWxlY3Rpb25JZCArPSBzZWxlY3Rpb24uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3Rpb25JZCArPSBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpO1xuICAgICAgfVxuXG4gICAgICAkc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19kaXNwbGF5JylcbiAgICAgICAgLmFwcGVuZChmb3JtYXR0ZWQpXG4gICAgICAgIC5hdHRyKCdpZCcsIHNlbGVjdGlvbklkKTtcblxuICAgICAgdmFyIHRpdGxlID0gc2VsZWN0aW9uLnRpdGxlIHx8IHNlbGVjdGlvbi50ZXh0O1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgJHNlbGVjdGlvbi5hdHRyKCd0aXRsZScsIHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbW92ZUl0ZW0gPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ3JlbW92ZUl0ZW0nKTtcblxuICAgICAgdmFyICRyZW1vdmUgPSAkc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnKTtcblxuICAgICAgJHJlbW92ZS5hdHRyKCd0aXRsZScsIHJlbW92ZUl0ZW0oKSk7XG4gICAgICAkcmVtb3ZlLmF0dHIoJ2FyaWEtbGFiZWwnLCByZW1vdmVJdGVtKCkpO1xuICAgICAgJHJlbW92ZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5Jywgc2VsZWN0aW9uSWQpO1xuXG4gICAgICBVdGlscy5TdG9yZURhdGEoJHNlbGVjdGlvblswXSwgJ2RhdGEnLCBzZWxlY3Rpb24pO1xuXG4gICAgICAkc2VsZWN0aW9ucy5wdXNoKCRzZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHZhciAkcmVuZGVyZWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpO1xuXG4gICAgJHJlbmRlcmVkLmFwcGVuZCgkc2VsZWN0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE11bHRpcGxlU2VsZWN0aW9uO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQbGFjZWhvbGRlciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLm5vcm1hbGl6ZVBsYWNlaG9sZGVyKG9wdGlvbnMuZ2V0KCdwbGFjZWhvbGRlcicpKTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIFBsYWNlaG9sZGVyLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfLCBwbGFjZWhvbGRlcikge1xuICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IHtcbiAgICAgICAgaWQ6ICcnLFxuICAgICAgICB0ZXh0OiBwbGFjZWhvbGRlclxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgUGxhY2Vob2xkZXIucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgJHBsYWNlaG9sZGVyID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIoKTtcblxuICAgICRwbGFjZWhvbGRlci5odG1sKHRoaXMuZGlzcGxheShwbGFjZWhvbGRlcikpO1xuICAgICRwbGFjZWhvbGRlclswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXInKTtcbiAgICAkcGxhY2Vob2xkZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpO1xuXG4gICAgdmFyIHBsYWNlaG9sZGVyVGl0bGUgPSBwbGFjZWhvbGRlci50aXRsZSB8fFxuICAgICAgcGxhY2Vob2xkZXIudGV4dCB8fFxuICAgICAgJHBsYWNlaG9sZGVyLnRleHQoKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJykuYXR0cihcbiAgICAgICd0aXRsZScsXG4gICAgICBwbGFjZWhvbGRlclRpdGxlXG4gICAgKTtcblxuICAgIHJldHVybiAkcGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgUGxhY2Vob2xkZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHtcbiAgICB2YXIgc2luZ2xlUGxhY2Vob2xkZXIgPSAoXG4gICAgICBkYXRhLmxlbmd0aCA9PSAxICYmIGRhdGFbMF0uaWQgIT0gdGhpcy5wbGFjZWhvbGRlci5pZFxuICAgICk7XG4gICAgdmFyIG11bHRpcGxlU2VsZWN0aW9ucyA9IGRhdGEubGVuZ3RoID4gMTtcblxuICAgIGlmIChtdWx0aXBsZVNlbGVjdGlvbnMgfHwgc2luZ2xlUGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB2YXIgJHBsYWNlaG9sZGVyID0gdGhpcy5jcmVhdGVQbGFjZWhvbGRlcih0aGlzLnBsYWNlaG9sZGVyKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJykuYXBwZW5kKCRwbGFjZWhvbGRlcik7XG4gIH07XG5cbiAgcmV0dXJuIFBsYWNlaG9sZGVyO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsW1xuICAnanF1ZXJ5JyxcbiAgJy4uL2tleXMnLFxuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgS0VZUywgVXRpbHMpIHtcbiAgZnVuY3Rpb24gQWxsb3dDbGVhciAoKSB7IH1cblxuICBBbGxvd0NsZWFyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTtcblxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnU2VsZWN0MjogVGhlIGBhbGxvd0NsZWFyYCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gJyArXG4gICAgICAgICAgJ3dpdGggdGhlIGBwbGFjZWhvbGRlcmAgb3B0aW9uLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsICcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJyxcbiAgICAgIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgc2VsZi5faGFuZGxlQ2xlYXIoZXZ0KTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLl9oYW5kbGVLZXlib2FyZENsZWFyKGV2dCwgY29udGFpbmVyKTtcbiAgICB9KTtcbiAgfTtcblxuICBBbGxvd0NsZWFyLnByb3RvdHlwZS5faGFuZGxlQ2xlYXIgPSBmdW5jdGlvbiAoXywgZXZ0KSB7XG4gICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBpdCBpcyBkaXNhYmxlZFxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciAkY2xlYXIgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19jbGVhcicpO1xuXG4gICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBub3RoaW5nIGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgaWYgKCRjbGVhci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEoJGNsZWFyWzBdLCAnZGF0YScpO1xuXG4gICAgdmFyIHByZXZpb3VzVmFsID0gdGhpcy4kZWxlbWVudC52YWwoKTtcbiAgICB0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnBsYWNlaG9sZGVyLmlkKTtcblxuICAgIHZhciB1bnNlbGVjdERhdGEgPSB7XG4gICAgICBkYXRhOiBkYXRhXG4gICAgfTtcbiAgICB0aGlzLnRyaWdnZXIoJ2NsZWFyJywgdW5zZWxlY3REYXRhKTtcbiAgICBpZiAodW5zZWxlY3REYXRhLnByZXZlbnRlZCkge1xuICAgICAgdGhpcy4kZWxlbWVudC52YWwocHJldmlvdXNWYWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5sZW5ndGg7IGQrKykge1xuICAgICAgdW5zZWxlY3REYXRhID0ge1xuICAgICAgICBkYXRhOiBkYXRhW2RdXG4gICAgICB9O1xuXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBgdW5zZWxlY3RgIGV2ZW50LCBzbyBwZW9wbGUgY2FuIHByZXZlbnQgaXQgZnJvbSBiZWluZ1xuICAgICAgLy8gY2xlYXJlZC5cbiAgICAgIHRoaXMudHJpZ2dlcigndW5zZWxlY3QnLCB1bnNlbGVjdERhdGEpO1xuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgd2FzIHByZXZlbnRlZCwgZG9uJ3QgY2xlYXIgaXQgb3V0LlxuICAgICAgaWYgKHVuc2VsZWN0RGF0YS5wcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC52YWwocHJldmlvdXNWYWwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXG4gICAgdGhpcy50cmlnZ2VyKCd0b2dnbGUnLCB7fSk7XG4gIH07XG5cbiAgQWxsb3dDbGVhci5wcm90b3R5cGUuX2hhbmRsZUtleWJvYXJkQ2xlYXIgPSBmdW5jdGlvbiAoXywgZXZ0LCBjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2dC53aGljaCA9PSBLRVlTLkRFTEVURSB8fCBldnQud2hpY2ggPT0gS0VZUy5CQUNLU1BBQ0UpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsZWFyKGV2dCk7XG4gICAgfVxuICB9O1xuXG4gIEFsbG93Q2xlYXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHtcbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJykucmVtb3ZlKCk7XG4gICAgdGhpcy4kc2VsZWN0aW9uWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItc2VsZWN0aW9uLS1jbGVhcmFibGUnKTtcblxuICAgIGlmICh0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlcicpLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0aW9uSWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpXG4gICAgICAuYXR0cignaWQnKTtcblxuICAgIHZhciByZW1vdmVBbGwgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0cmFuc2xhdGlvbnMnKS5nZXQoJ3JlbW92ZUFsbEl0ZW1zJyk7XG5cbiAgICB2YXIgJHJlbW92ZSA9ICQoXG4gICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJcIiB0YWJpbmRleD1cIi0xXCI+JyArXG4gICAgICAgICc8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPicgK1xuICAgICAgJzwvYnV0dG9uPidcbiAgICApO1xuICAgICRyZW1vdmUuYXR0cigndGl0bGUnLCByZW1vdmVBbGwoKSk7XG4gICAgJHJlbW92ZS5hdHRyKCdhcmlhLWxhYmVsJywgcmVtb3ZlQWxsKCkpO1xuICAgICRyZW1vdmUuYXR0cignYXJpYS1kZXNjcmliZWRieScsIHNlbGVjdGlvbklkKTtcbiAgICBVdGlscy5TdG9yZURhdGEoJHJlbW92ZVswXSwgJ2RhdGEnLCBkYXRhKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5wcmVwZW5kKCRyZW1vdmUpO1xuICAgIHRoaXMuJHNlbGVjdGlvblswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLXNlbGVjdGlvbi0tY2xlYXJhYmxlJyk7XG4gIH07XG5cbiAgcmV0dXJuIEFsbG93Q2xlYXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9zZWFyY2gnLFtcbiAgJ2pxdWVyeScsXG4gICcuLi91dGlscycsXG4gICcuLi9rZXlzJ1xuXSwgZnVuY3Rpb24gKCQsIFV0aWxzLCBLRVlTKSB7XG4gIGZ1bmN0aW9uIFNlYXJjaCAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIFNlYXJjaC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCkge1xuICAgIHZhciBzZWFyY2hMYWJlbCA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgnc2VhcmNoJyk7XG4gICAgdmFyICRzZWFyY2ggPSAkKFxuICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWlubGluZVwiPicgK1xuICAgICAgICAnPHRleHRhcmVhIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCInK1xuICAgICAgICAnIHR5cGU9XCJzZWFyY2hcIiB0YWJpbmRleD1cIi0xXCInICtcbiAgICAgICAgJyBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiJyArXG4gICAgICAgICcgc3BlbGxjaGVjaz1cImZhbHNlXCIgcm9sZT1cInNlYXJjaGJveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiID4nICtcbiAgICAgICAgJzwvdGV4dGFyZWE+JyArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuXG4gICAgdGhpcy4kc2VhcmNoQ29udGFpbmVyID0gJHNlYXJjaDtcbiAgICB0aGlzLiRzZWFyY2ggPSAkc2VhcmNoLmZpbmQoJ3RleHRhcmVhJyk7XG5cbiAgICB0aGlzLiRzZWFyY2gucHJvcCgnYXV0b2NvbXBsZXRlJywgdGhpcy5vcHRpb25zLmdldCgnYXV0b2NvbXBsZXRlJykpO1xuICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdhcmlhLWxhYmVsJywgc2VhcmNoTGFiZWwoKSk7XG5cbiAgICB2YXIgJHJlbmRlcmVkID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLl90cmFuc2ZlclRhYkluZGV4KCk7XG4gICAgJHJlbmRlcmVkLmFwcGVuZCh0aGlzLiRzZWFyY2hDb250YWluZXIpO1xuXG4gICAgcmV0dXJuICRyZW5kZXJlZDtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcmVzdWx0c0lkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHRzJztcbiAgICB2YXIgc2VsZWN0aW9uSWQgPSBjb250YWluZXIuaWQgKyAnLWNvbnRhaW5lcic7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgc2VsZi4kc2VhcmNoLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCBzZWxlY3Rpb25JZCk7XG5cbiAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWFyY2guYXR0cignYXJpYS1jb250cm9scycsIHJlc3VsdHNJZCk7XG4gICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWFyY2gudmFsKCcnKTtcbiAgICAgIHNlbGYucmVzaXplU2VhcmNoKCk7XG4gICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1jb250cm9scycpO1xuICAgICAgc2VsZi4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2VuYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlYXJjaC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgc2VsZi5fdHJhbnNmZXJUYWJJbmRleCgpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLmRhdGEuX3Jlc3VsdElkKSB7XG4gICAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBwYXJhbXMuZGF0YS5fcmVzdWx0SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1c2luJywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3Vzb3V0JywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi5faGFuZGxlQmx1cihldnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdrZXlkb3duJywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBzZWxmLnRyaWdnZXIoJ2tleXByZXNzJywgZXZ0KTtcblxuICAgICAgc2VsZi5fa2V5VXBQcmV2ZW50ZWQgPSBldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG5cbiAgICAgIHZhciBrZXkgPSBldnQud2hpY2g7XG5cbiAgICAgIGlmIChrZXkgPT09IEtFWVMuQkFDS1NQQUNFICYmIHNlbGYuJHNlYXJjaC52YWwoKSA9PT0gJycpIHtcbiAgICAgICAgdmFyICRwcmV2aW91c0Nob2ljZSA9IHNlbGYuJHNlbGVjdGlvblxuICAgICAgICAgIC5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZScpLmxhc3QoKTtcblxuICAgICAgICBpZiAoJHByZXZpb3VzQ2hvaWNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IFV0aWxzLkdldERhdGEoJHByZXZpb3VzQ2hvaWNlWzBdLCAnZGF0YScpO1xuXG4gICAgICAgICAgc2VsZi5zZWFyY2hSZW1vdmVDaG9pY2UoaXRlbSk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdjbGljaycsICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIGlmIChzZWxmLiRzZWFyY2gudmFsKCkpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgSUUgdmVyc2lvbiBzaG91bGQgdGhlIGBkb2N1bWVudE1vZGVgIHByb3BlcnR5IHRoYXRcbiAgICAvLyBpcyBzdG9yZWQgb24gdGhlIGRvY3VtZW50LiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgaW4gSUUgYW5kIGlzXG4gICAgLy8gc2xpZ2h0bHkgY2xlYW5lciB0aGFuIGRvaW5nIGEgdXNlciBhZ2VudCBjaGVjay5cbiAgICAvLyBUaGlzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUgaW4gRWRnZSwgYnV0IEVkZ2UgYWxzbyBkb2Vzbid0IGhhdmVcbiAgICAvLyB0aGlzIGJ1Zy5cbiAgICB2YXIgbXNpZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbiAgICB2YXIgZGlzYWJsZUlucHV0RXZlbnRzID0gbXNpZSAmJiBtc2llIDw9IDExO1xuXG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgYnJvd3NlcnMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIGBpbnB1dGAgZXZlbnRcbiAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBkb3VibGUtdHJpZ2dlcmluZyBvZiBldmVudHMgZm9yIGJyb3dzZXJzIHdoaWNoIHN1cHBvcnRcbiAgICAvLyBib3RoIHRoZSBga2V5dXBgIGFuZCBgaW5wdXRgIGV2ZW50cy5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oXG4gICAgICAnaW5wdXQuc2VhcmNoY2hlY2snLFxuICAgICAgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJyxcbiAgICAgIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgLy8gSUUgd2lsbCB0cmlnZ2VyIHRoZSBgaW5wdXRgIGV2ZW50IHdoZW4gYSBwbGFjZWhvbGRlciBpcyB1c2VkIG9uIGFcbiAgICAgICAgLy8gc2VhcmNoIGJveC4gVG8gZ2V0IGFyb3VuZCB0aGlzIGlzc3VlLCB3ZSBhcmUgZm9yY2VkIHRvIGlnbm9yZSBhbGxcbiAgICAgICAgLy8gYGlucHV0YCBldmVudHMgaW4gSUUgYW5kIGtlZXAgdXNpbmcgYGtleXVwYC5cbiAgICAgICAgaWYgKGRpc2FibGVJbnB1dEV2ZW50cykge1xuICAgICAgICAgIHNlbGYuJHNlbGVjdGlvbi5vZmYoJ2lucHV0LnNlYXJjaCBpbnB1dC5zZWFyY2hjaGVjaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuYmluZCB0aGUgZHVwbGljYXRlZCBga2V5dXBgIGV2ZW50XG4gICAgICAgIHNlbGYuJHNlbGVjdGlvbi5vZmYoJ2tleXVwLnNlYXJjaCcpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oXG4gICAgICAna2V5dXAuc2VhcmNoIGlucHV0LnNlYXJjaCcsXG4gICAgICAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAvLyBJRSB3aWxsIHRyaWdnZXIgdGhlIGBpbnB1dGAgZXZlbnQgd2hlbiBhIHBsYWNlaG9sZGVyIGlzIHVzZWQgb24gYVxuICAgICAgICAvLyBzZWFyY2ggYm94LiBUbyBnZXQgYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGFyZSBmb3JjZWQgdG8gaWdub3JlIGFsbFxuICAgICAgICAvLyBgaW5wdXRgIGV2ZW50cyBpbiBJRSBhbmQga2VlcCB1c2luZyBga2V5dXBgLlxuICAgICAgICBpZiAoZGlzYWJsZUlucHV0RXZlbnRzICYmIGV2dC50eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleSA9IGV2dC53aGljaDtcblxuICAgICAgICAvLyBXZSBjYW4gZnJlZWx5IGlnbm9yZSBldmVudHMgZnJvbSBtb2RpZmllciBrZXlzXG4gICAgICAgIGlmIChrZXkgPT0gS0VZUy5TSElGVCB8fCBrZXkgPT0gS0VZUy5DVFJMIHx8IGtleSA9PSBLRVlTLkFMVCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRhYmJpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyB0aGUgYGtleWRvd25gIHBoYXNlXG4gICAgICAgIGlmIChrZXkgPT0gS0VZUy5UQUIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmhhbmRsZVNlYXJjaChldnQpO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJhbnNmZXIgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSBmcm9tIHRoZSByZW5kZXJlZFxuICAgKiBzZWxlY3Rpb24gdG8gdGhlIHNlYXJjaCBib3guIFRoaXMgYWxsb3dzIGZvciB0aGUgc2VhcmNoIGJveCB0byBiZSB1c2VkIGFzXG4gICAqIHRoZSBwcmltYXJ5IGZvY3VzIGluc3RlYWQgb2YgdGhlIHNlbGVjdGlvbiBjb250YWluZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBTZWFyY2gucHJvdG90eXBlLl90cmFuc2ZlclRhYkluZGV4ID0gZnVuY3Rpb24gKGRlY29yYXRlZCkge1xuICAgIHRoaXMuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcpKTtcbiAgICB0aGlzLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLmNyZWF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGxhY2Vob2xkZXIpIHtcbiAgICB0aGlzLiRzZWFyY2guYXR0cigncGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlci50ZXh0KTtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHtcbiAgICB2YXIgc2VhcmNoSGFkRm9jdXMgPSB0aGlzLiRzZWFyY2hbMF0gPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpO1xuXG4gICAgdGhpcy5yZXNpemVTZWFyY2goKTtcbiAgICBpZiAoc2VhcmNoSGFkRm9jdXMpIHtcbiAgICAgIHRoaXMuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuICAgIH1cbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLmhhbmRsZVNlYXJjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlc2l6ZVNlYXJjaCgpO1xuXG4gICAgaWYgKCF0aGlzLl9rZXlVcFByZXZlbnRlZCkge1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy4kc2VhcmNoLnZhbCgpO1xuXG4gICAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5Jywge1xuICAgICAgICB0ZXJtOiBpbnB1dFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fa2V5VXBQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLnNlYXJjaFJlbW92ZUNob2ljZSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGl0ZW0pIHtcbiAgICB0aGlzLnRyaWdnZXIoJ3Vuc2VsZWN0Jywge1xuICAgICAgZGF0YTogaXRlbVxuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VhcmNoLnZhbChpdGVtLnRleHQpO1xuICAgIHRoaXMuaGFuZGxlU2VhcmNoKCk7XG4gIH07XG5cbiAgU2VhcmNoLnByb3RvdHlwZS5yZXNpemVTZWFyY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kc2VhcmNoLmNzcygnd2lkdGgnLCAnMjVweCcpO1xuXG4gICAgdmFyIHdpZHRoID0gJzEwMCUnO1xuXG4gICAgaWYgKHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicpID09PSAnJykge1xuICAgICAgdmFyIG1pbmltdW1XaWR0aCA9IHRoaXMuJHNlYXJjaC52YWwoKS5sZW5ndGggKyAxO1xuXG4gICAgICB3aWR0aCA9IChtaW5pbXVtV2lkdGggKiAwLjc1KSArICdlbSc7XG4gICAgfVxuXG4gICAgdGhpcy4kc2VhcmNoLmNzcygnd2lkdGgnLCB3aWR0aCk7XG4gIH07XG5cbiAgcmV0dXJuIFNlYXJjaDtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3NlbGVjdGlvbkNzcycsW1xuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoVXRpbHMpIHtcbiAgZnVuY3Rpb24gU2VsZWN0aW9uQ1NTICgpIHsgfVxuXG4gIFNlbGVjdGlvbkNTUy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRlY29yYXRlZCkge1xuICAgIHZhciAkc2VsZWN0aW9uID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZWN0aW9uQ3NzQ2xhc3MgPSB0aGlzLm9wdGlvbnMuZ2V0KCdzZWxlY3Rpb25Dc3NDbGFzcycpIHx8ICcnO1xuXG4gICAgaWYgKHNlbGVjdGlvbkNzc0NsYXNzLmluZGV4T2YoJzphbGw6JykgIT09IC0xKSB7XG4gICAgICBzZWxlY3Rpb25Dc3NDbGFzcyA9IHNlbGVjdGlvbkNzc0NsYXNzLnJlcGxhY2UoJzphbGw6JywgJycpO1xuXG4gICAgICBVdGlscy5jb3B5Tm9uSW50ZXJuYWxDc3NDbGFzc2VzKCRzZWxlY3Rpb25bMF0sIHRoaXMuJGVsZW1lbnRbMF0pO1xuICAgIH1cblxuICAgICRzZWxlY3Rpb24uYWRkQ2xhc3Moc2VsZWN0aW9uQ3NzQ2xhc3MpO1xuXG4gICAgcmV0dXJuICRzZWxlY3Rpb247XG4gIH07XG5cbiAgcmV0dXJuIFNlbGVjdGlvbkNTUztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXknLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIGZ1bmN0aW9uIEV2ZW50UmVsYXkgKCkgeyB9XG5cbiAgRXZlbnRSZWxheS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcmVsYXlFdmVudHMgPSBbXG4gICAgICAnb3BlbicsICdvcGVuaW5nJyxcbiAgICAgICdjbG9zZScsICdjbG9zaW5nJyxcbiAgICAgICdzZWxlY3QnLCAnc2VsZWN0aW5nJyxcbiAgICAgICd1bnNlbGVjdCcsICd1bnNlbGVjdGluZycsXG4gICAgICAnY2xlYXInLCAnY2xlYXJpbmcnXG4gICAgXTtcblxuICAgIHZhciBwcmV2ZW50YWJsZUV2ZW50cyA9IFtcbiAgICAgICdvcGVuaW5nJywgJ2Nsb3NpbmcnLCAnc2VsZWN0aW5nJywgJ3Vuc2VsZWN0aW5nJywgJ2NsZWFyaW5nJ1xuICAgIF07XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgY29udGFpbmVyLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykge1xuICAgICAgLy8gSWdub3JlIGV2ZW50cyB0aGF0IHNob3VsZCBub3QgYmUgcmVsYXllZFxuICAgICAgaWYgKHJlbGF5RXZlbnRzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHBhcmFtZXRlcnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBvYmplY3RcbiAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuICAgICAgLy8gR2VuZXJhdGUgdGhlIGpRdWVyeSBldmVudCBmb3IgdGhlIFNlbGVjdDIgZXZlbnRcbiAgICAgIHZhciBldnQgPSAkLkV2ZW50KCdzZWxlY3QyOicgKyBuYW1lLCB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICB9KTtcblxuICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKGV2dCk7XG5cbiAgICAgIC8vIE9ubHkgaGFuZGxlIHByZXZlbnRhYmxlIGV2ZW50cyBpZiBpdCB3YXMgb25lXG4gICAgICBpZiAocHJldmVudGFibGVFdmVudHMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwYXJhbXMucHJldmVudGVkID0gZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBFdmVudFJlbGF5O1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi90cmFuc2xhdGlvbicsW1xuICAnanF1ZXJ5JyxcbiAgJ3JlcXVpcmUnXG5dLCBmdW5jdGlvbiAoJCwgcmVxdWlyZSkge1xuICBmdW5jdGlvbiBUcmFuc2xhdGlvbiAoZGljdCkge1xuICAgIHRoaXMuZGljdCA9IGRpY3QgfHwge307XG4gIH1cblxuICBUcmFuc2xhdGlvbi5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpY3Q7XG4gIH07XG5cbiAgVHJhbnNsYXRpb24ucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0W2tleV07XG4gIH07XG5cbiAgVHJhbnNsYXRpb24ucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uICh0cmFuc2xhdGlvbikge1xuICAgIHRoaXMuZGljdCA9ICQuZXh0ZW5kKHt9LCB0cmFuc2xhdGlvbi5hbGwoKSwgdGhpcy5kaWN0KTtcbiAgfTtcblxuICAvLyBTdGF0aWMgZnVuY3Rpb25zXG5cbiAgVHJhbnNsYXRpb24uX2NhY2hlID0ge307XG5cbiAgVHJhbnNsYXRpb24ubG9hZFBhdGggPSBmdW5jdGlvbiAocGF0aCkge1xuICAgIGlmICghKHBhdGggaW4gVHJhbnNsYXRpb24uX2NhY2hlKSkge1xuICAgICAgdmFyIHRyYW5zbGF0aW9ucyA9IHJlcXVpcmUocGF0aCk7XG5cbiAgICAgIFRyYW5zbGF0aW9uLl9jYWNoZVtwYXRoXSA9IHRyYW5zbGF0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uLl9jYWNoZVtwYXRoXSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zbGF0aW9uO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kaWFjcml0aWNzJyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRpYWNyaXRpY3MgPSB7XG4gICAgJ1xcdTI0QjYnOiAnQScsXG4gICAgJ1xcdUZGMjEnOiAnQScsXG4gICAgJ1xcdTAwQzAnOiAnQScsXG4gICAgJ1xcdTAwQzEnOiAnQScsXG4gICAgJ1xcdTAwQzInOiAnQScsXG4gICAgJ1xcdTFFQTYnOiAnQScsXG4gICAgJ1xcdTFFQTQnOiAnQScsXG4gICAgJ1xcdTFFQUEnOiAnQScsXG4gICAgJ1xcdTFFQTgnOiAnQScsXG4gICAgJ1xcdTAwQzMnOiAnQScsXG4gICAgJ1xcdTAxMDAnOiAnQScsXG4gICAgJ1xcdTAxMDInOiAnQScsXG4gICAgJ1xcdTFFQjAnOiAnQScsXG4gICAgJ1xcdTFFQUUnOiAnQScsXG4gICAgJ1xcdTFFQjQnOiAnQScsXG4gICAgJ1xcdTFFQjInOiAnQScsXG4gICAgJ1xcdTAyMjYnOiAnQScsXG4gICAgJ1xcdTAxRTAnOiAnQScsXG4gICAgJ1xcdTAwQzQnOiAnQScsXG4gICAgJ1xcdTAxREUnOiAnQScsXG4gICAgJ1xcdTFFQTInOiAnQScsXG4gICAgJ1xcdTAwQzUnOiAnQScsXG4gICAgJ1xcdTAxRkEnOiAnQScsXG4gICAgJ1xcdTAxQ0QnOiAnQScsXG4gICAgJ1xcdTAyMDAnOiAnQScsXG4gICAgJ1xcdTAyMDInOiAnQScsXG4gICAgJ1xcdTFFQTAnOiAnQScsXG4gICAgJ1xcdTFFQUMnOiAnQScsXG4gICAgJ1xcdTFFQjYnOiAnQScsXG4gICAgJ1xcdTFFMDAnOiAnQScsXG4gICAgJ1xcdTAxMDQnOiAnQScsXG4gICAgJ1xcdTAyM0EnOiAnQScsXG4gICAgJ1xcdTJDNkYnOiAnQScsXG4gICAgJ1xcdUE3MzInOiAnQUEnLFxuICAgICdcXHUwMEM2JzogJ0FFJyxcbiAgICAnXFx1MDFGQyc6ICdBRScsXG4gICAgJ1xcdTAxRTInOiAnQUUnLFxuICAgICdcXHVBNzM0JzogJ0FPJyxcbiAgICAnXFx1QTczNic6ICdBVScsXG4gICAgJ1xcdUE3MzgnOiAnQVYnLFxuICAgICdcXHVBNzNBJzogJ0FWJyxcbiAgICAnXFx1QTczQyc6ICdBWScsXG4gICAgJ1xcdTI0QjcnOiAnQicsXG4gICAgJ1xcdUZGMjInOiAnQicsXG4gICAgJ1xcdTFFMDInOiAnQicsXG4gICAgJ1xcdTFFMDQnOiAnQicsXG4gICAgJ1xcdTFFMDYnOiAnQicsXG4gICAgJ1xcdTAyNDMnOiAnQicsXG4gICAgJ1xcdTAxODInOiAnQicsXG4gICAgJ1xcdTAxODEnOiAnQicsXG4gICAgJ1xcdTI0QjgnOiAnQycsXG4gICAgJ1xcdUZGMjMnOiAnQycsXG4gICAgJ1xcdTAxMDYnOiAnQycsXG4gICAgJ1xcdTAxMDgnOiAnQycsXG4gICAgJ1xcdTAxMEEnOiAnQycsXG4gICAgJ1xcdTAxMEMnOiAnQycsXG4gICAgJ1xcdTAwQzcnOiAnQycsXG4gICAgJ1xcdTFFMDgnOiAnQycsXG4gICAgJ1xcdTAxODcnOiAnQycsXG4gICAgJ1xcdTAyM0InOiAnQycsXG4gICAgJ1xcdUE3M0UnOiAnQycsXG4gICAgJ1xcdTI0QjknOiAnRCcsXG4gICAgJ1xcdUZGMjQnOiAnRCcsXG4gICAgJ1xcdTFFMEEnOiAnRCcsXG4gICAgJ1xcdTAxMEUnOiAnRCcsXG4gICAgJ1xcdTFFMEMnOiAnRCcsXG4gICAgJ1xcdTFFMTAnOiAnRCcsXG4gICAgJ1xcdTFFMTInOiAnRCcsXG4gICAgJ1xcdTFFMEUnOiAnRCcsXG4gICAgJ1xcdTAxMTAnOiAnRCcsXG4gICAgJ1xcdTAxOEInOiAnRCcsXG4gICAgJ1xcdTAxOEEnOiAnRCcsXG4gICAgJ1xcdTAxODknOiAnRCcsXG4gICAgJ1xcdUE3NzknOiAnRCcsXG4gICAgJ1xcdTAxRjEnOiAnRFonLFxuICAgICdcXHUwMUM0JzogJ0RaJyxcbiAgICAnXFx1MDFGMic6ICdEeicsXG4gICAgJ1xcdTAxQzUnOiAnRHonLFxuICAgICdcXHUyNEJBJzogJ0UnLFxuICAgICdcXHVGRjI1JzogJ0UnLFxuICAgICdcXHUwMEM4JzogJ0UnLFxuICAgICdcXHUwMEM5JzogJ0UnLFxuICAgICdcXHUwMENBJzogJ0UnLFxuICAgICdcXHUxRUMwJzogJ0UnLFxuICAgICdcXHUxRUJFJzogJ0UnLFxuICAgICdcXHUxRUM0JzogJ0UnLFxuICAgICdcXHUxRUMyJzogJ0UnLFxuICAgICdcXHUxRUJDJzogJ0UnLFxuICAgICdcXHUwMTEyJzogJ0UnLFxuICAgICdcXHUxRTE0JzogJ0UnLFxuICAgICdcXHUxRTE2JzogJ0UnLFxuICAgICdcXHUwMTE0JzogJ0UnLFxuICAgICdcXHUwMTE2JzogJ0UnLFxuICAgICdcXHUwMENCJzogJ0UnLFxuICAgICdcXHUxRUJBJzogJ0UnLFxuICAgICdcXHUwMTFBJzogJ0UnLFxuICAgICdcXHUwMjA0JzogJ0UnLFxuICAgICdcXHUwMjA2JzogJ0UnLFxuICAgICdcXHUxRUI4JzogJ0UnLFxuICAgICdcXHUxRUM2JzogJ0UnLFxuICAgICdcXHUwMjI4JzogJ0UnLFxuICAgICdcXHUxRTFDJzogJ0UnLFxuICAgICdcXHUwMTE4JzogJ0UnLFxuICAgICdcXHUxRTE4JzogJ0UnLFxuICAgICdcXHUxRTFBJzogJ0UnLFxuICAgICdcXHUwMTkwJzogJ0UnLFxuICAgICdcXHUwMThFJzogJ0UnLFxuICAgICdcXHUyNEJCJzogJ0YnLFxuICAgICdcXHVGRjI2JzogJ0YnLFxuICAgICdcXHUxRTFFJzogJ0YnLFxuICAgICdcXHUwMTkxJzogJ0YnLFxuICAgICdcXHVBNzdCJzogJ0YnLFxuICAgICdcXHUyNEJDJzogJ0cnLFxuICAgICdcXHVGRjI3JzogJ0cnLFxuICAgICdcXHUwMUY0JzogJ0cnLFxuICAgICdcXHUwMTFDJzogJ0cnLFxuICAgICdcXHUxRTIwJzogJ0cnLFxuICAgICdcXHUwMTFFJzogJ0cnLFxuICAgICdcXHUwMTIwJzogJ0cnLFxuICAgICdcXHUwMUU2JzogJ0cnLFxuICAgICdcXHUwMTIyJzogJ0cnLFxuICAgICdcXHUwMUU0JzogJ0cnLFxuICAgICdcXHUwMTkzJzogJ0cnLFxuICAgICdcXHVBN0EwJzogJ0cnLFxuICAgICdcXHVBNzdEJzogJ0cnLFxuICAgICdcXHVBNzdFJzogJ0cnLFxuICAgICdcXHUyNEJEJzogJ0gnLFxuICAgICdcXHVGRjI4JzogJ0gnLFxuICAgICdcXHUwMTI0JzogJ0gnLFxuICAgICdcXHUxRTIyJzogJ0gnLFxuICAgICdcXHUxRTI2JzogJ0gnLFxuICAgICdcXHUwMjFFJzogJ0gnLFxuICAgICdcXHUxRTI0JzogJ0gnLFxuICAgICdcXHUxRTI4JzogJ0gnLFxuICAgICdcXHUxRTJBJzogJ0gnLFxuICAgICdcXHUwMTI2JzogJ0gnLFxuICAgICdcXHUyQzY3JzogJ0gnLFxuICAgICdcXHUyQzc1JzogJ0gnLFxuICAgICdcXHVBNzhEJzogJ0gnLFxuICAgICdcXHUyNEJFJzogJ0knLFxuICAgICdcXHVGRjI5JzogJ0knLFxuICAgICdcXHUwMENDJzogJ0knLFxuICAgICdcXHUwMENEJzogJ0knLFxuICAgICdcXHUwMENFJzogJ0knLFxuICAgICdcXHUwMTI4JzogJ0knLFxuICAgICdcXHUwMTJBJzogJ0knLFxuICAgICdcXHUwMTJDJzogJ0knLFxuICAgICdcXHUwMTMwJzogJ0knLFxuICAgICdcXHUwMENGJzogJ0knLFxuICAgICdcXHUxRTJFJzogJ0knLFxuICAgICdcXHUxRUM4JzogJ0knLFxuICAgICdcXHUwMUNGJzogJ0knLFxuICAgICdcXHUwMjA4JzogJ0knLFxuICAgICdcXHUwMjBBJzogJ0knLFxuICAgICdcXHUxRUNBJzogJ0knLFxuICAgICdcXHUwMTJFJzogJ0knLFxuICAgICdcXHUxRTJDJzogJ0knLFxuICAgICdcXHUwMTk3JzogJ0knLFxuICAgICdcXHUyNEJGJzogJ0onLFxuICAgICdcXHVGRjJBJzogJ0onLFxuICAgICdcXHUwMTM0JzogJ0onLFxuICAgICdcXHUwMjQ4JzogJ0onLFxuICAgICdcXHUyNEMwJzogJ0snLFxuICAgICdcXHVGRjJCJzogJ0snLFxuICAgICdcXHUxRTMwJzogJ0snLFxuICAgICdcXHUwMUU4JzogJ0snLFxuICAgICdcXHUxRTMyJzogJ0snLFxuICAgICdcXHUwMTM2JzogJ0snLFxuICAgICdcXHUxRTM0JzogJ0snLFxuICAgICdcXHUwMTk4JzogJ0snLFxuICAgICdcXHUyQzY5JzogJ0snLFxuICAgICdcXHVBNzQwJzogJ0snLFxuICAgICdcXHVBNzQyJzogJ0snLFxuICAgICdcXHVBNzQ0JzogJ0snLFxuICAgICdcXHVBN0EyJzogJ0snLFxuICAgICdcXHUyNEMxJzogJ0wnLFxuICAgICdcXHVGRjJDJzogJ0wnLFxuICAgICdcXHUwMTNGJzogJ0wnLFxuICAgICdcXHUwMTM5JzogJ0wnLFxuICAgICdcXHUwMTNEJzogJ0wnLFxuICAgICdcXHUxRTM2JzogJ0wnLFxuICAgICdcXHUxRTM4JzogJ0wnLFxuICAgICdcXHUwMTNCJzogJ0wnLFxuICAgICdcXHUxRTNDJzogJ0wnLFxuICAgICdcXHUxRTNBJzogJ0wnLFxuICAgICdcXHUwMTQxJzogJ0wnLFxuICAgICdcXHUwMjNEJzogJ0wnLFxuICAgICdcXHUyQzYyJzogJ0wnLFxuICAgICdcXHUyQzYwJzogJ0wnLFxuICAgICdcXHVBNzQ4JzogJ0wnLFxuICAgICdcXHVBNzQ2JzogJ0wnLFxuICAgICdcXHVBNzgwJzogJ0wnLFxuICAgICdcXHUwMUM3JzogJ0xKJyxcbiAgICAnXFx1MDFDOCc6ICdMaicsXG4gICAgJ1xcdTI0QzInOiAnTScsXG4gICAgJ1xcdUZGMkQnOiAnTScsXG4gICAgJ1xcdTFFM0UnOiAnTScsXG4gICAgJ1xcdTFFNDAnOiAnTScsXG4gICAgJ1xcdTFFNDInOiAnTScsXG4gICAgJ1xcdTJDNkUnOiAnTScsXG4gICAgJ1xcdTAxOUMnOiAnTScsXG4gICAgJ1xcdTI0QzMnOiAnTicsXG4gICAgJ1xcdUZGMkUnOiAnTicsXG4gICAgJ1xcdTAxRjgnOiAnTicsXG4gICAgJ1xcdTAxNDMnOiAnTicsXG4gICAgJ1xcdTAwRDEnOiAnTicsXG4gICAgJ1xcdTFFNDQnOiAnTicsXG4gICAgJ1xcdTAxNDcnOiAnTicsXG4gICAgJ1xcdTFFNDYnOiAnTicsXG4gICAgJ1xcdTAxNDUnOiAnTicsXG4gICAgJ1xcdTFFNEEnOiAnTicsXG4gICAgJ1xcdTFFNDgnOiAnTicsXG4gICAgJ1xcdTAyMjAnOiAnTicsXG4gICAgJ1xcdTAxOUQnOiAnTicsXG4gICAgJ1xcdUE3OTAnOiAnTicsXG4gICAgJ1xcdUE3QTQnOiAnTicsXG4gICAgJ1xcdTAxQ0EnOiAnTkonLFxuICAgICdcXHUwMUNCJzogJ05qJyxcbiAgICAnXFx1MjRDNCc6ICdPJyxcbiAgICAnXFx1RkYyRic6ICdPJyxcbiAgICAnXFx1MDBEMic6ICdPJyxcbiAgICAnXFx1MDBEMyc6ICdPJyxcbiAgICAnXFx1MDBENCc6ICdPJyxcbiAgICAnXFx1MUVEMic6ICdPJyxcbiAgICAnXFx1MUVEMCc6ICdPJyxcbiAgICAnXFx1MUVENic6ICdPJyxcbiAgICAnXFx1MUVENCc6ICdPJyxcbiAgICAnXFx1MDBENSc6ICdPJyxcbiAgICAnXFx1MUU0Qyc6ICdPJyxcbiAgICAnXFx1MDIyQyc6ICdPJyxcbiAgICAnXFx1MUU0RSc6ICdPJyxcbiAgICAnXFx1MDE0Qyc6ICdPJyxcbiAgICAnXFx1MUU1MCc6ICdPJyxcbiAgICAnXFx1MUU1Mic6ICdPJyxcbiAgICAnXFx1MDE0RSc6ICdPJyxcbiAgICAnXFx1MDIyRSc6ICdPJyxcbiAgICAnXFx1MDIzMCc6ICdPJyxcbiAgICAnXFx1MDBENic6ICdPJyxcbiAgICAnXFx1MDIyQSc6ICdPJyxcbiAgICAnXFx1MUVDRSc6ICdPJyxcbiAgICAnXFx1MDE1MCc6ICdPJyxcbiAgICAnXFx1MDFEMSc6ICdPJyxcbiAgICAnXFx1MDIwQyc6ICdPJyxcbiAgICAnXFx1MDIwRSc6ICdPJyxcbiAgICAnXFx1MDFBMCc6ICdPJyxcbiAgICAnXFx1MUVEQyc6ICdPJyxcbiAgICAnXFx1MUVEQSc6ICdPJyxcbiAgICAnXFx1MUVFMCc6ICdPJyxcbiAgICAnXFx1MUVERSc6ICdPJyxcbiAgICAnXFx1MUVFMic6ICdPJyxcbiAgICAnXFx1MUVDQyc6ICdPJyxcbiAgICAnXFx1MUVEOCc6ICdPJyxcbiAgICAnXFx1MDFFQSc6ICdPJyxcbiAgICAnXFx1MDFFQyc6ICdPJyxcbiAgICAnXFx1MDBEOCc6ICdPJyxcbiAgICAnXFx1MDFGRSc6ICdPJyxcbiAgICAnXFx1MDE4Nic6ICdPJyxcbiAgICAnXFx1MDE5Ric6ICdPJyxcbiAgICAnXFx1QTc0QSc6ICdPJyxcbiAgICAnXFx1QTc0Qyc6ICdPJyxcbiAgICAnXFx1MDE1Mic6ICdPRScsXG4gICAgJ1xcdTAxQTInOiAnT0knLFxuICAgICdcXHVBNzRFJzogJ09PJyxcbiAgICAnXFx1MDIyMic6ICdPVScsXG4gICAgJ1xcdTI0QzUnOiAnUCcsXG4gICAgJ1xcdUZGMzAnOiAnUCcsXG4gICAgJ1xcdTFFNTQnOiAnUCcsXG4gICAgJ1xcdTFFNTYnOiAnUCcsXG4gICAgJ1xcdTAxQTQnOiAnUCcsXG4gICAgJ1xcdTJDNjMnOiAnUCcsXG4gICAgJ1xcdUE3NTAnOiAnUCcsXG4gICAgJ1xcdUE3NTInOiAnUCcsXG4gICAgJ1xcdUE3NTQnOiAnUCcsXG4gICAgJ1xcdTI0QzYnOiAnUScsXG4gICAgJ1xcdUZGMzEnOiAnUScsXG4gICAgJ1xcdUE3NTYnOiAnUScsXG4gICAgJ1xcdUE3NTgnOiAnUScsXG4gICAgJ1xcdTAyNEEnOiAnUScsXG4gICAgJ1xcdTI0QzcnOiAnUicsXG4gICAgJ1xcdUZGMzInOiAnUicsXG4gICAgJ1xcdTAxNTQnOiAnUicsXG4gICAgJ1xcdTFFNTgnOiAnUicsXG4gICAgJ1xcdTAxNTgnOiAnUicsXG4gICAgJ1xcdTAyMTAnOiAnUicsXG4gICAgJ1xcdTAyMTInOiAnUicsXG4gICAgJ1xcdTFFNUEnOiAnUicsXG4gICAgJ1xcdTFFNUMnOiAnUicsXG4gICAgJ1xcdTAxNTYnOiAnUicsXG4gICAgJ1xcdTFFNUUnOiAnUicsXG4gICAgJ1xcdTAyNEMnOiAnUicsXG4gICAgJ1xcdTJDNjQnOiAnUicsXG4gICAgJ1xcdUE3NUEnOiAnUicsXG4gICAgJ1xcdUE3QTYnOiAnUicsXG4gICAgJ1xcdUE3ODInOiAnUicsXG4gICAgJ1xcdTI0QzgnOiAnUycsXG4gICAgJ1xcdUZGMzMnOiAnUycsXG4gICAgJ1xcdTFFOUUnOiAnUycsXG4gICAgJ1xcdTAxNUEnOiAnUycsXG4gICAgJ1xcdTFFNjQnOiAnUycsXG4gICAgJ1xcdTAxNUMnOiAnUycsXG4gICAgJ1xcdTFFNjAnOiAnUycsXG4gICAgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTFFNjYnOiAnUycsXG4gICAgJ1xcdTFFNjInOiAnUycsXG4gICAgJ1xcdTFFNjgnOiAnUycsXG4gICAgJ1xcdTAyMTgnOiAnUycsXG4gICAgJ1xcdTAxNUUnOiAnUycsXG4gICAgJ1xcdTJDN0UnOiAnUycsXG4gICAgJ1xcdUE3QTgnOiAnUycsXG4gICAgJ1xcdUE3ODQnOiAnUycsXG4gICAgJ1xcdTI0QzknOiAnVCcsXG4gICAgJ1xcdUZGMzQnOiAnVCcsXG4gICAgJ1xcdTFFNkEnOiAnVCcsXG4gICAgJ1xcdTAxNjQnOiAnVCcsXG4gICAgJ1xcdTFFNkMnOiAnVCcsXG4gICAgJ1xcdTAyMUEnOiAnVCcsXG4gICAgJ1xcdTAxNjInOiAnVCcsXG4gICAgJ1xcdTFFNzAnOiAnVCcsXG4gICAgJ1xcdTFFNkUnOiAnVCcsXG4gICAgJ1xcdTAxNjYnOiAnVCcsXG4gICAgJ1xcdTAxQUMnOiAnVCcsXG4gICAgJ1xcdTAxQUUnOiAnVCcsXG4gICAgJ1xcdTAyM0UnOiAnVCcsXG4gICAgJ1xcdUE3ODYnOiAnVCcsXG4gICAgJ1xcdUE3MjgnOiAnVFonLFxuICAgICdcXHUyNENBJzogJ1UnLFxuICAgICdcXHVGRjM1JzogJ1UnLFxuICAgICdcXHUwMEQ5JzogJ1UnLFxuICAgICdcXHUwMERBJzogJ1UnLFxuICAgICdcXHUwMERCJzogJ1UnLFxuICAgICdcXHUwMTY4JzogJ1UnLFxuICAgICdcXHUxRTc4JzogJ1UnLFxuICAgICdcXHUwMTZBJzogJ1UnLFxuICAgICdcXHUxRTdBJzogJ1UnLFxuICAgICdcXHUwMTZDJzogJ1UnLFxuICAgICdcXHUwMERDJzogJ1UnLFxuICAgICdcXHUwMURCJzogJ1UnLFxuICAgICdcXHUwMUQ3JzogJ1UnLFxuICAgICdcXHUwMUQ1JzogJ1UnLFxuICAgICdcXHUwMUQ5JzogJ1UnLFxuICAgICdcXHUxRUU2JzogJ1UnLFxuICAgICdcXHUwMTZFJzogJ1UnLFxuICAgICdcXHUwMTcwJzogJ1UnLFxuICAgICdcXHUwMUQzJzogJ1UnLFxuICAgICdcXHUwMjE0JzogJ1UnLFxuICAgICdcXHUwMjE2JzogJ1UnLFxuICAgICdcXHUwMUFGJzogJ1UnLFxuICAgICdcXHUxRUVBJzogJ1UnLFxuICAgICdcXHUxRUU4JzogJ1UnLFxuICAgICdcXHUxRUVFJzogJ1UnLFxuICAgICdcXHUxRUVDJzogJ1UnLFxuICAgICdcXHUxRUYwJzogJ1UnLFxuICAgICdcXHUxRUU0JzogJ1UnLFxuICAgICdcXHUxRTcyJzogJ1UnLFxuICAgICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUxRTc2JzogJ1UnLFxuICAgICdcXHUxRTc0JzogJ1UnLFxuICAgICdcXHUwMjQ0JzogJ1UnLFxuICAgICdcXHUyNENCJzogJ1YnLFxuICAgICdcXHVGRjM2JzogJ1YnLFxuICAgICdcXHUxRTdDJzogJ1YnLFxuICAgICdcXHUxRTdFJzogJ1YnLFxuICAgICdcXHUwMUIyJzogJ1YnLFxuICAgICdcXHVBNzVFJzogJ1YnLFxuICAgICdcXHUwMjQ1JzogJ1YnLFxuICAgICdcXHVBNzYwJzogJ1ZZJyxcbiAgICAnXFx1MjRDQyc6ICdXJyxcbiAgICAnXFx1RkYzNyc6ICdXJyxcbiAgICAnXFx1MUU4MCc6ICdXJyxcbiAgICAnXFx1MUU4Mic6ICdXJyxcbiAgICAnXFx1MDE3NCc6ICdXJyxcbiAgICAnXFx1MUU4Nic6ICdXJyxcbiAgICAnXFx1MUU4NCc6ICdXJyxcbiAgICAnXFx1MUU4OCc6ICdXJyxcbiAgICAnXFx1MkM3Mic6ICdXJyxcbiAgICAnXFx1MjRDRCc6ICdYJyxcbiAgICAnXFx1RkYzOCc6ICdYJyxcbiAgICAnXFx1MUU4QSc6ICdYJyxcbiAgICAnXFx1MUU4Qyc6ICdYJyxcbiAgICAnXFx1MjRDRSc6ICdZJyxcbiAgICAnXFx1RkYzOSc6ICdZJyxcbiAgICAnXFx1MUVGMic6ICdZJyxcbiAgICAnXFx1MDBERCc6ICdZJyxcbiAgICAnXFx1MDE3Nic6ICdZJyxcbiAgICAnXFx1MUVGOCc6ICdZJyxcbiAgICAnXFx1MDIzMic6ICdZJyxcbiAgICAnXFx1MUU4RSc6ICdZJyxcbiAgICAnXFx1MDE3OCc6ICdZJyxcbiAgICAnXFx1MUVGNic6ICdZJyxcbiAgICAnXFx1MUVGNCc6ICdZJyxcbiAgICAnXFx1MDFCMyc6ICdZJyxcbiAgICAnXFx1MDI0RSc6ICdZJyxcbiAgICAnXFx1MUVGRSc6ICdZJyxcbiAgICAnXFx1MjRDRic6ICdaJyxcbiAgICAnXFx1RkYzQSc6ICdaJyxcbiAgICAnXFx1MDE3OSc6ICdaJyxcbiAgICAnXFx1MUU5MCc6ICdaJyxcbiAgICAnXFx1MDE3Qic6ICdaJyxcbiAgICAnXFx1MDE3RCc6ICdaJyxcbiAgICAnXFx1MUU5Mic6ICdaJyxcbiAgICAnXFx1MUU5NCc6ICdaJyxcbiAgICAnXFx1MDFCNSc6ICdaJyxcbiAgICAnXFx1MDIyNCc6ICdaJyxcbiAgICAnXFx1MkM3Ric6ICdaJyxcbiAgICAnXFx1MkM2Qic6ICdaJyxcbiAgICAnXFx1QTc2Mic6ICdaJyxcbiAgICAnXFx1MjREMCc6ICdhJyxcbiAgICAnXFx1RkY0MSc6ICdhJyxcbiAgICAnXFx1MUU5QSc6ICdhJyxcbiAgICAnXFx1MDBFMCc6ICdhJyxcbiAgICAnXFx1MDBFMSc6ICdhJyxcbiAgICAnXFx1MDBFMic6ICdhJyxcbiAgICAnXFx1MUVBNyc6ICdhJyxcbiAgICAnXFx1MUVBNSc6ICdhJyxcbiAgICAnXFx1MUVBQic6ICdhJyxcbiAgICAnXFx1MUVBOSc6ICdhJyxcbiAgICAnXFx1MDBFMyc6ICdhJyxcbiAgICAnXFx1MDEwMSc6ICdhJyxcbiAgICAnXFx1MDEwMyc6ICdhJyxcbiAgICAnXFx1MUVCMSc6ICdhJyxcbiAgICAnXFx1MUVBRic6ICdhJyxcbiAgICAnXFx1MUVCNSc6ICdhJyxcbiAgICAnXFx1MUVCMyc6ICdhJyxcbiAgICAnXFx1MDIyNyc6ICdhJyxcbiAgICAnXFx1MDFFMSc6ICdhJyxcbiAgICAnXFx1MDBFNCc6ICdhJyxcbiAgICAnXFx1MDFERic6ICdhJyxcbiAgICAnXFx1MUVBMyc6ICdhJyxcbiAgICAnXFx1MDBFNSc6ICdhJyxcbiAgICAnXFx1MDFGQic6ICdhJyxcbiAgICAnXFx1MDFDRSc6ICdhJyxcbiAgICAnXFx1MDIwMSc6ICdhJyxcbiAgICAnXFx1MDIwMyc6ICdhJyxcbiAgICAnXFx1MUVBMSc6ICdhJyxcbiAgICAnXFx1MUVBRCc6ICdhJyxcbiAgICAnXFx1MUVCNyc6ICdhJyxcbiAgICAnXFx1MUUwMSc6ICdhJyxcbiAgICAnXFx1MDEwNSc6ICdhJyxcbiAgICAnXFx1MkM2NSc6ICdhJyxcbiAgICAnXFx1MDI1MCc6ICdhJyxcbiAgICAnXFx1QTczMyc6ICdhYScsXG4gICAgJ1xcdTAwRTYnOiAnYWUnLFxuICAgICdcXHUwMUZEJzogJ2FlJyxcbiAgICAnXFx1MDFFMyc6ICdhZScsXG4gICAgJ1xcdUE3MzUnOiAnYW8nLFxuICAgICdcXHVBNzM3JzogJ2F1JyxcbiAgICAnXFx1QTczOSc6ICdhdicsXG4gICAgJ1xcdUE3M0InOiAnYXYnLFxuICAgICdcXHVBNzNEJzogJ2F5JyxcbiAgICAnXFx1MjREMSc6ICdiJyxcbiAgICAnXFx1RkY0Mic6ICdiJyxcbiAgICAnXFx1MUUwMyc6ICdiJyxcbiAgICAnXFx1MUUwNSc6ICdiJyxcbiAgICAnXFx1MUUwNyc6ICdiJyxcbiAgICAnXFx1MDE4MCc6ICdiJyxcbiAgICAnXFx1MDE4Myc6ICdiJyxcbiAgICAnXFx1MDI1Myc6ICdiJyxcbiAgICAnXFx1MjREMic6ICdjJyxcbiAgICAnXFx1RkY0Myc6ICdjJyxcbiAgICAnXFx1MDEwNyc6ICdjJyxcbiAgICAnXFx1MDEwOSc6ICdjJyxcbiAgICAnXFx1MDEwQic6ICdjJyxcbiAgICAnXFx1MDEwRCc6ICdjJyxcbiAgICAnXFx1MDBFNyc6ICdjJyxcbiAgICAnXFx1MUUwOSc6ICdjJyxcbiAgICAnXFx1MDE4OCc6ICdjJyxcbiAgICAnXFx1MDIzQyc6ICdjJyxcbiAgICAnXFx1QTczRic6ICdjJyxcbiAgICAnXFx1MjE4NCc6ICdjJyxcbiAgICAnXFx1MjREMyc6ICdkJyxcbiAgICAnXFx1RkY0NCc6ICdkJyxcbiAgICAnXFx1MUUwQic6ICdkJyxcbiAgICAnXFx1MDEwRic6ICdkJyxcbiAgICAnXFx1MUUwRCc6ICdkJyxcbiAgICAnXFx1MUUxMSc6ICdkJyxcbiAgICAnXFx1MUUxMyc6ICdkJyxcbiAgICAnXFx1MUUwRic6ICdkJyxcbiAgICAnXFx1MDExMSc6ICdkJyxcbiAgICAnXFx1MDE4Qyc6ICdkJyxcbiAgICAnXFx1MDI1Nic6ICdkJyxcbiAgICAnXFx1MDI1Nyc6ICdkJyxcbiAgICAnXFx1QTc3QSc6ICdkJyxcbiAgICAnXFx1MDFGMyc6ICdkeicsXG4gICAgJ1xcdTAxQzYnOiAnZHonLFxuICAgICdcXHUyNEQ0JzogJ2UnLFxuICAgICdcXHVGRjQ1JzogJ2UnLFxuICAgICdcXHUwMEU4JzogJ2UnLFxuICAgICdcXHUwMEU5JzogJ2UnLFxuICAgICdcXHUwMEVBJzogJ2UnLFxuICAgICdcXHUxRUMxJzogJ2UnLFxuICAgICdcXHUxRUJGJzogJ2UnLFxuICAgICdcXHUxRUM1JzogJ2UnLFxuICAgICdcXHUxRUMzJzogJ2UnLFxuICAgICdcXHUxRUJEJzogJ2UnLFxuICAgICdcXHUwMTEzJzogJ2UnLFxuICAgICdcXHUxRTE1JzogJ2UnLFxuICAgICdcXHUxRTE3JzogJ2UnLFxuICAgICdcXHUwMTE1JzogJ2UnLFxuICAgICdcXHUwMTE3JzogJ2UnLFxuICAgICdcXHUwMEVCJzogJ2UnLFxuICAgICdcXHUxRUJCJzogJ2UnLFxuICAgICdcXHUwMTFCJzogJ2UnLFxuICAgICdcXHUwMjA1JzogJ2UnLFxuICAgICdcXHUwMjA3JzogJ2UnLFxuICAgICdcXHUxRUI5JzogJ2UnLFxuICAgICdcXHUxRUM3JzogJ2UnLFxuICAgICdcXHUwMjI5JzogJ2UnLFxuICAgICdcXHUxRTFEJzogJ2UnLFxuICAgICdcXHUwMTE5JzogJ2UnLFxuICAgICdcXHUxRTE5JzogJ2UnLFxuICAgICdcXHUxRTFCJzogJ2UnLFxuICAgICdcXHUwMjQ3JzogJ2UnLFxuICAgICdcXHUwMjVCJzogJ2UnLFxuICAgICdcXHUwMUREJzogJ2UnLFxuICAgICdcXHUyNEQ1JzogJ2YnLFxuICAgICdcXHVGRjQ2JzogJ2YnLFxuICAgICdcXHUxRTFGJzogJ2YnLFxuICAgICdcXHUwMTkyJzogJ2YnLFxuICAgICdcXHVBNzdDJzogJ2YnLFxuICAgICdcXHUyNEQ2JzogJ2cnLFxuICAgICdcXHVGRjQ3JzogJ2cnLFxuICAgICdcXHUwMUY1JzogJ2cnLFxuICAgICdcXHUwMTFEJzogJ2cnLFxuICAgICdcXHUxRTIxJzogJ2cnLFxuICAgICdcXHUwMTFGJzogJ2cnLFxuICAgICdcXHUwMTIxJzogJ2cnLFxuICAgICdcXHUwMUU3JzogJ2cnLFxuICAgICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMUU1JzogJ2cnLFxuICAgICdcXHUwMjYwJzogJ2cnLFxuICAgICdcXHVBN0ExJzogJ2cnLFxuICAgICdcXHUxRDc5JzogJ2cnLFxuICAgICdcXHVBNzdGJzogJ2cnLFxuICAgICdcXHUyNEQ3JzogJ2gnLFxuICAgICdcXHVGRjQ4JzogJ2gnLFxuICAgICdcXHUwMTI1JzogJ2gnLFxuICAgICdcXHUxRTIzJzogJ2gnLFxuICAgICdcXHUxRTI3JzogJ2gnLFxuICAgICdcXHUwMjFGJzogJ2gnLFxuICAgICdcXHUxRTI1JzogJ2gnLFxuICAgICdcXHUxRTI5JzogJ2gnLFxuICAgICdcXHUxRTJCJzogJ2gnLFxuICAgICdcXHUxRTk2JzogJ2gnLFxuICAgICdcXHUwMTI3JzogJ2gnLFxuICAgICdcXHUyQzY4JzogJ2gnLFxuICAgICdcXHUyQzc2JzogJ2gnLFxuICAgICdcXHUwMjY1JzogJ2gnLFxuICAgICdcXHUwMTk1JzogJ2h2JyxcbiAgICAnXFx1MjREOCc6ICdpJyxcbiAgICAnXFx1RkY0OSc6ICdpJyxcbiAgICAnXFx1MDBFQyc6ICdpJyxcbiAgICAnXFx1MDBFRCc6ICdpJyxcbiAgICAnXFx1MDBFRSc6ICdpJyxcbiAgICAnXFx1MDEyOSc6ICdpJyxcbiAgICAnXFx1MDEyQic6ICdpJyxcbiAgICAnXFx1MDEyRCc6ICdpJyxcbiAgICAnXFx1MDBFRic6ICdpJyxcbiAgICAnXFx1MUUyRic6ICdpJyxcbiAgICAnXFx1MUVDOSc6ICdpJyxcbiAgICAnXFx1MDFEMCc6ICdpJyxcbiAgICAnXFx1MDIwOSc6ICdpJyxcbiAgICAnXFx1MDIwQic6ICdpJyxcbiAgICAnXFx1MUVDQic6ICdpJyxcbiAgICAnXFx1MDEyRic6ICdpJyxcbiAgICAnXFx1MUUyRCc6ICdpJyxcbiAgICAnXFx1MDI2OCc6ICdpJyxcbiAgICAnXFx1MDEzMSc6ICdpJyxcbiAgICAnXFx1MjREOSc6ICdqJyxcbiAgICAnXFx1RkY0QSc6ICdqJyxcbiAgICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDFGMCc6ICdqJyxcbiAgICAnXFx1MDI0OSc6ICdqJyxcbiAgICAnXFx1MjREQSc6ICdrJyxcbiAgICAnXFx1RkY0Qic6ICdrJyxcbiAgICAnXFx1MUUzMSc6ICdrJyxcbiAgICAnXFx1MDFFOSc6ICdrJyxcbiAgICAnXFx1MUUzMyc6ICdrJyxcbiAgICAnXFx1MDEzNyc6ICdrJyxcbiAgICAnXFx1MUUzNSc6ICdrJyxcbiAgICAnXFx1MDE5OSc6ICdrJyxcbiAgICAnXFx1MkM2QSc6ICdrJyxcbiAgICAnXFx1QTc0MSc6ICdrJyxcbiAgICAnXFx1QTc0Myc6ICdrJyxcbiAgICAnXFx1QTc0NSc6ICdrJyxcbiAgICAnXFx1QTdBMyc6ICdrJyxcbiAgICAnXFx1MjREQic6ICdsJyxcbiAgICAnXFx1RkY0Qyc6ICdsJyxcbiAgICAnXFx1MDE0MCc6ICdsJyxcbiAgICAnXFx1MDEzQSc6ICdsJyxcbiAgICAnXFx1MDEzRSc6ICdsJyxcbiAgICAnXFx1MUUzNyc6ICdsJyxcbiAgICAnXFx1MUUzOSc6ICdsJyxcbiAgICAnXFx1MDEzQyc6ICdsJyxcbiAgICAnXFx1MUUzRCc6ICdsJyxcbiAgICAnXFx1MUUzQic6ICdsJyxcbiAgICAnXFx1MDE3Ric6ICdsJyxcbiAgICAnXFx1MDE0Mic6ICdsJyxcbiAgICAnXFx1MDE5QSc6ICdsJyxcbiAgICAnXFx1MDI2Qic6ICdsJyxcbiAgICAnXFx1MkM2MSc6ICdsJyxcbiAgICAnXFx1QTc0OSc6ICdsJyxcbiAgICAnXFx1QTc4MSc6ICdsJyxcbiAgICAnXFx1QTc0Nyc6ICdsJyxcbiAgICAnXFx1MDFDOSc6ICdsaicsXG4gICAgJ1xcdTI0REMnOiAnbScsXG4gICAgJ1xcdUZGNEQnOiAnbScsXG4gICAgJ1xcdTFFM0YnOiAnbScsXG4gICAgJ1xcdTFFNDEnOiAnbScsXG4gICAgJ1xcdTFFNDMnOiAnbScsXG4gICAgJ1xcdTAyNzEnOiAnbScsXG4gICAgJ1xcdTAyNkYnOiAnbScsXG4gICAgJ1xcdTI0REQnOiAnbicsXG4gICAgJ1xcdUZGNEUnOiAnbicsXG4gICAgJ1xcdTAxRjknOiAnbicsXG4gICAgJ1xcdTAxNDQnOiAnbicsXG4gICAgJ1xcdTAwRjEnOiAnbicsXG4gICAgJ1xcdTFFNDUnOiAnbicsXG4gICAgJ1xcdTAxNDgnOiAnbicsXG4gICAgJ1xcdTFFNDcnOiAnbicsXG4gICAgJ1xcdTAxNDYnOiAnbicsXG4gICAgJ1xcdTFFNEInOiAnbicsXG4gICAgJ1xcdTFFNDknOiAnbicsXG4gICAgJ1xcdTAxOUUnOiAnbicsXG4gICAgJ1xcdTAyNzInOiAnbicsXG4gICAgJ1xcdTAxNDknOiAnbicsXG4gICAgJ1xcdUE3OTEnOiAnbicsXG4gICAgJ1xcdUE3QTUnOiAnbicsXG4gICAgJ1xcdTAxQ0MnOiAnbmonLFxuICAgICdcXHUyNERFJzogJ28nLFxuICAgICdcXHVGRjRGJzogJ28nLFxuICAgICdcXHUwMEYyJzogJ28nLFxuICAgICdcXHUwMEYzJzogJ28nLFxuICAgICdcXHUwMEY0JzogJ28nLFxuICAgICdcXHUxRUQzJzogJ28nLFxuICAgICdcXHUxRUQxJzogJ28nLFxuICAgICdcXHUxRUQ3JzogJ28nLFxuICAgICdcXHUxRUQ1JzogJ28nLFxuICAgICdcXHUwMEY1JzogJ28nLFxuICAgICdcXHUxRTREJzogJ28nLFxuICAgICdcXHUwMjJEJzogJ28nLFxuICAgICdcXHUxRTRGJzogJ28nLFxuICAgICdcXHUwMTREJzogJ28nLFxuICAgICdcXHUxRTUxJzogJ28nLFxuICAgICdcXHUxRTUzJzogJ28nLFxuICAgICdcXHUwMTRGJzogJ28nLFxuICAgICdcXHUwMjJGJzogJ28nLFxuICAgICdcXHUwMjMxJzogJ28nLFxuICAgICdcXHUwMEY2JzogJ28nLFxuICAgICdcXHUwMjJCJzogJ28nLFxuICAgICdcXHUxRUNGJzogJ28nLFxuICAgICdcXHUwMTUxJzogJ28nLFxuICAgICdcXHUwMUQyJzogJ28nLFxuICAgICdcXHUwMjBEJzogJ28nLFxuICAgICdcXHUwMjBGJzogJ28nLFxuICAgICdcXHUwMUExJzogJ28nLFxuICAgICdcXHUxRUREJzogJ28nLFxuICAgICdcXHUxRURCJzogJ28nLFxuICAgICdcXHUxRUUxJzogJ28nLFxuICAgICdcXHUxRURGJzogJ28nLFxuICAgICdcXHUxRUUzJzogJ28nLFxuICAgICdcXHUxRUNEJzogJ28nLFxuICAgICdcXHUxRUQ5JzogJ28nLFxuICAgICdcXHUwMUVCJzogJ28nLFxuICAgICdcXHUwMUVEJzogJ28nLFxuICAgICdcXHUwMEY4JzogJ28nLFxuICAgICdcXHUwMUZGJzogJ28nLFxuICAgICdcXHUwMjU0JzogJ28nLFxuICAgICdcXHVBNzRCJzogJ28nLFxuICAgICdcXHVBNzREJzogJ28nLFxuICAgICdcXHUwMjc1JzogJ28nLFxuICAgICdcXHUwMTUzJzogJ29lJyxcbiAgICAnXFx1MDFBMyc6ICdvaScsXG4gICAgJ1xcdTAyMjMnOiAnb3UnLFxuICAgICdcXHVBNzRGJzogJ29vJyxcbiAgICAnXFx1MjRERic6ICdwJyxcbiAgICAnXFx1RkY1MCc6ICdwJyxcbiAgICAnXFx1MUU1NSc6ICdwJyxcbiAgICAnXFx1MUU1Nyc6ICdwJyxcbiAgICAnXFx1MDFBNSc6ICdwJyxcbiAgICAnXFx1MUQ3RCc6ICdwJyxcbiAgICAnXFx1QTc1MSc6ICdwJyxcbiAgICAnXFx1QTc1Myc6ICdwJyxcbiAgICAnXFx1QTc1NSc6ICdwJyxcbiAgICAnXFx1MjRFMCc6ICdxJyxcbiAgICAnXFx1RkY1MSc6ICdxJyxcbiAgICAnXFx1MDI0Qic6ICdxJyxcbiAgICAnXFx1QTc1Nyc6ICdxJyxcbiAgICAnXFx1QTc1OSc6ICdxJyxcbiAgICAnXFx1MjRFMSc6ICdyJyxcbiAgICAnXFx1RkY1Mic6ICdyJyxcbiAgICAnXFx1MDE1NSc6ICdyJyxcbiAgICAnXFx1MUU1OSc6ICdyJyxcbiAgICAnXFx1MDE1OSc6ICdyJyxcbiAgICAnXFx1MDIxMSc6ICdyJyxcbiAgICAnXFx1MDIxMyc6ICdyJyxcbiAgICAnXFx1MUU1Qic6ICdyJyxcbiAgICAnXFx1MUU1RCc6ICdyJyxcbiAgICAnXFx1MDE1Nyc6ICdyJyxcbiAgICAnXFx1MUU1Ric6ICdyJyxcbiAgICAnXFx1MDI0RCc6ICdyJyxcbiAgICAnXFx1MDI3RCc6ICdyJyxcbiAgICAnXFx1QTc1Qic6ICdyJyxcbiAgICAnXFx1QTdBNyc6ICdyJyxcbiAgICAnXFx1QTc4Myc6ICdyJyxcbiAgICAnXFx1MjRFMic6ICdzJyxcbiAgICAnXFx1RkY1Myc6ICdzJyxcbiAgICAnXFx1MDBERic6ICdzJyxcbiAgICAnXFx1MDE1Qic6ICdzJyxcbiAgICAnXFx1MUU2NSc6ICdzJyxcbiAgICAnXFx1MDE1RCc6ICdzJyxcbiAgICAnXFx1MUU2MSc6ICdzJyxcbiAgICAnXFx1MDE2MSc6ICdzJyxcbiAgICAnXFx1MUU2Nyc6ICdzJyxcbiAgICAnXFx1MUU2Myc6ICdzJyxcbiAgICAnXFx1MUU2OSc6ICdzJyxcbiAgICAnXFx1MDIxOSc6ICdzJyxcbiAgICAnXFx1MDE1Ric6ICdzJyxcbiAgICAnXFx1MDIzRic6ICdzJyxcbiAgICAnXFx1QTdBOSc6ICdzJyxcbiAgICAnXFx1QTc4NSc6ICdzJyxcbiAgICAnXFx1MUU5Qic6ICdzJyxcbiAgICAnXFx1MjRFMyc6ICd0JyxcbiAgICAnXFx1RkY1NCc6ICd0JyxcbiAgICAnXFx1MUU2Qic6ICd0JyxcbiAgICAnXFx1MUU5Nyc6ICd0JyxcbiAgICAnXFx1MDE2NSc6ICd0JyxcbiAgICAnXFx1MUU2RCc6ICd0JyxcbiAgICAnXFx1MDIxQic6ICd0JyxcbiAgICAnXFx1MDE2Myc6ICd0JyxcbiAgICAnXFx1MUU3MSc6ICd0JyxcbiAgICAnXFx1MUU2Ric6ICd0JyxcbiAgICAnXFx1MDE2Nyc6ICd0JyxcbiAgICAnXFx1MDFBRCc6ICd0JyxcbiAgICAnXFx1MDI4OCc6ICd0JyxcbiAgICAnXFx1MkM2Nic6ICd0JyxcbiAgICAnXFx1QTc4Nyc6ICd0JyxcbiAgICAnXFx1QTcyOSc6ICd0eicsXG4gICAgJ1xcdTI0RTQnOiAndScsXG4gICAgJ1xcdUZGNTUnOiAndScsXG4gICAgJ1xcdTAwRjknOiAndScsXG4gICAgJ1xcdTAwRkEnOiAndScsXG4gICAgJ1xcdTAwRkInOiAndScsXG4gICAgJ1xcdTAxNjknOiAndScsXG4gICAgJ1xcdTFFNzknOiAndScsXG4gICAgJ1xcdTAxNkInOiAndScsXG4gICAgJ1xcdTFFN0InOiAndScsXG4gICAgJ1xcdTAxNkQnOiAndScsXG4gICAgJ1xcdTAwRkMnOiAndScsXG4gICAgJ1xcdTAxREMnOiAndScsXG4gICAgJ1xcdTAxRDgnOiAndScsXG4gICAgJ1xcdTAxRDYnOiAndScsXG4gICAgJ1xcdTAxREEnOiAndScsXG4gICAgJ1xcdTFFRTcnOiAndScsXG4gICAgJ1xcdTAxNkYnOiAndScsXG4gICAgJ1xcdTAxNzEnOiAndScsXG4gICAgJ1xcdTAxRDQnOiAndScsXG4gICAgJ1xcdTAyMTUnOiAndScsXG4gICAgJ1xcdTAyMTcnOiAndScsXG4gICAgJ1xcdTAxQjAnOiAndScsXG4gICAgJ1xcdTFFRUInOiAndScsXG4gICAgJ1xcdTFFRTknOiAndScsXG4gICAgJ1xcdTFFRUYnOiAndScsXG4gICAgJ1xcdTFFRUQnOiAndScsXG4gICAgJ1xcdTFFRjEnOiAndScsXG4gICAgJ1xcdTFFRTUnOiAndScsXG4gICAgJ1xcdTFFNzMnOiAndScsXG4gICAgJ1xcdTAxNzMnOiAndScsXG4gICAgJ1xcdTFFNzcnOiAndScsXG4gICAgJ1xcdTFFNzUnOiAndScsXG4gICAgJ1xcdTAyODknOiAndScsXG4gICAgJ1xcdTI0RTUnOiAndicsXG4gICAgJ1xcdUZGNTYnOiAndicsXG4gICAgJ1xcdTFFN0QnOiAndicsXG4gICAgJ1xcdTFFN0YnOiAndicsXG4gICAgJ1xcdTAyOEInOiAndicsXG4gICAgJ1xcdUE3NUYnOiAndicsXG4gICAgJ1xcdTAyOEMnOiAndicsXG4gICAgJ1xcdUE3NjEnOiAndnknLFxuICAgICdcXHUyNEU2JzogJ3cnLFxuICAgICdcXHVGRjU3JzogJ3cnLFxuICAgICdcXHUxRTgxJzogJ3cnLFxuICAgICdcXHUxRTgzJzogJ3cnLFxuICAgICdcXHUwMTc1JzogJ3cnLFxuICAgICdcXHUxRTg3JzogJ3cnLFxuICAgICdcXHUxRTg1JzogJ3cnLFxuICAgICdcXHUxRTk4JzogJ3cnLFxuICAgICdcXHUxRTg5JzogJ3cnLFxuICAgICdcXHUyQzczJzogJ3cnLFxuICAgICdcXHUyNEU3JzogJ3gnLFxuICAgICdcXHVGRjU4JzogJ3gnLFxuICAgICdcXHUxRThCJzogJ3gnLFxuICAgICdcXHUxRThEJzogJ3gnLFxuICAgICdcXHUyNEU4JzogJ3knLFxuICAgICdcXHVGRjU5JzogJ3knLFxuICAgICdcXHUxRUYzJzogJ3knLFxuICAgICdcXHUwMEZEJzogJ3knLFxuICAgICdcXHUwMTc3JzogJ3knLFxuICAgICdcXHUxRUY5JzogJ3knLFxuICAgICdcXHUwMjMzJzogJ3knLFxuICAgICdcXHUxRThGJzogJ3knLFxuICAgICdcXHUwMEZGJzogJ3knLFxuICAgICdcXHUxRUY3JzogJ3knLFxuICAgICdcXHUxRTk5JzogJ3knLFxuICAgICdcXHUxRUY1JzogJ3knLFxuICAgICdcXHUwMUI0JzogJ3knLFxuICAgICdcXHUwMjRGJzogJ3knLFxuICAgICdcXHUxRUZGJzogJ3knLFxuICAgICdcXHUyNEU5JzogJ3onLFxuICAgICdcXHVGRjVBJzogJ3onLFxuICAgICdcXHUwMTdBJzogJ3onLFxuICAgICdcXHUxRTkxJzogJ3onLFxuICAgICdcXHUwMTdDJzogJ3onLFxuICAgICdcXHUwMTdFJzogJ3onLFxuICAgICdcXHUxRTkzJzogJ3onLFxuICAgICdcXHUxRTk1JzogJ3onLFxuICAgICdcXHUwMUI2JzogJ3onLFxuICAgICdcXHUwMjI1JzogJ3onLFxuICAgICdcXHUwMjQwJzogJ3onLFxuICAgICdcXHUyQzZDJzogJ3onLFxuICAgICdcXHVBNzYzJzogJ3onLFxuICAgICdcXHUwMzg2JzogJ1xcdTAzOTEnLFxuICAgICdcXHUwMzg4JzogJ1xcdTAzOTUnLFxuICAgICdcXHUwMzg5JzogJ1xcdTAzOTcnLFxuICAgICdcXHUwMzhBJzogJ1xcdTAzOTknLFxuICAgICdcXHUwM0FBJzogJ1xcdTAzOTknLFxuICAgICdcXHUwMzhDJzogJ1xcdTAzOUYnLFxuICAgICdcXHUwMzhFJzogJ1xcdTAzQTUnLFxuICAgICdcXHUwM0FCJzogJ1xcdTAzQTUnLFxuICAgICdcXHUwMzhGJzogJ1xcdTAzQTknLFxuICAgICdcXHUwM0FDJzogJ1xcdTAzQjEnLFxuICAgICdcXHUwM0FEJzogJ1xcdTAzQjUnLFxuICAgICdcXHUwM0FFJzogJ1xcdTAzQjcnLFxuICAgICdcXHUwM0FGJzogJ1xcdTAzQjknLFxuICAgICdcXHUwM0NBJzogJ1xcdTAzQjknLFxuICAgICdcXHUwMzkwJzogJ1xcdTAzQjknLFxuICAgICdcXHUwM0NDJzogJ1xcdTAzQkYnLFxuICAgICdcXHUwM0NEJzogJ1xcdTAzQzUnLFxuICAgICdcXHUwM0NCJzogJ1xcdTAzQzUnLFxuICAgICdcXHUwM0IwJzogJ1xcdTAzQzUnLFxuICAgICdcXHUwM0NFJzogJ1xcdTAzQzknLFxuICAgICdcXHUwM0MyJzogJ1xcdTAzQzMnLFxuICAgICdcXHUyMDE5JzogJ1xcJydcbiAgfTtcblxuICByZXR1cm4gZGlhY3JpdGljcztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9iYXNlJyxbXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uIChVdGlscykge1xuICBmdW5jdGlvbiBCYXNlQWRhcHRlciAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBCYXNlQWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChCYXNlQWRhcHRlciwgVXRpbHMuT2JzZXJ2YWJsZSk7XG5cbiAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgY3VycmVudGAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLicpO1xuICB9O1xuXG4gIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHF1ZXJ5YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7XG4gIH07XG5cbiAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgLy8gQ2FuIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfTtcblxuICBCYXNlQWRhcHRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9O1xuXG4gIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5nZW5lcmF0ZVJlc3VsdElkID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgZGF0YSkge1xuICAgIHZhciBpZCA9IGNvbnRhaW5lci5pZCArICctcmVzdWx0LSc7XG5cbiAgICBpZCArPSBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpO1xuXG4gICAgaWYgKGRhdGEuaWQgIT0gbnVsbCkge1xuICAgICAgaWQgKz0gJy0nICsgZGF0YS5pZC50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCArPSAnLScgKyBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpO1xuICAgIH1cbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgcmV0dXJuIEJhc2VBZGFwdGVyO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL3NlbGVjdCcsW1xuICAnLi9iYXNlJyxcbiAgJy4uL3V0aWxzJyxcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uIChCYXNlQWRhcHRlciwgVXRpbHMsICQpIHtcbiAgZnVuY3Rpb24gU2VsZWN0QWRhcHRlciAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIFNlbGVjdEFkYXB0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoU2VsZWN0QWRhcHRlciwgQmFzZUFkYXB0ZXIpO1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YSA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChcbiAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKSxcbiAgICAgIGZ1bmN0aW9uIChzZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaXRlbSgkKHNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjYWxsYmFjayhkYXRhKTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgLy8gSWYgZGF0YS5lbGVtZW50IGlzIGEgRE9NIG5vZGUsIHVzZSBpdCBpbnN0ZWFkXG4gICAgaWYgKFxuICAgICAgZGF0YS5lbGVtZW50ICE9IG51bGwgJiYgZGF0YS5lbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29wdGlvbidcbiAgICApIHtcbiAgICAgIGRhdGEuZWxlbWVudC5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaW5wdXQnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpIHtcbiAgICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHtcbiAgICAgICAgdmFyIHZhbCA9IFtdO1xuXG4gICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIGRhdGEucHVzaC5hcHBseShkYXRhLCBjdXJyZW50RGF0YSk7XG5cbiAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7XG4gICAgICAgICAgdmFyIGlkID0gZGF0YVtkXS5pZDtcblxuICAgICAgICAgIGlmICh2YWwuaW5kZXhPZihpZCkgPT09IC0xKSB7XG4gICAgICAgICAgICB2YWwucHVzaChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi4kZWxlbWVudC52YWwodmFsKTtcbiAgICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2YWwgPSBkYXRhLmlkO1xuXG4gICAgICB0aGlzLiRlbGVtZW50LnZhbCh2YWwpO1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS51bnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLiRlbGVtZW50LnByb3AoJ211bHRpcGxlJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnNlbGVjdGVkID0gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBkYXRhLmVsZW1lbnQgIT0gbnVsbCAmJlxuICAgICAgZGF0YS5lbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29wdGlvbidcbiAgICApIHtcbiAgICAgIGRhdGEuZWxlbWVudC5zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7XG4gICAgICB2YXIgdmFsID0gW107XG5cbiAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgY3VycmVudERhdGEubGVuZ3RoOyBkKyspIHtcbiAgICAgICAgdmFyIGlkID0gY3VycmVudERhdGFbZF0uaWQ7XG5cbiAgICAgICAgaWYgKGlkICE9PSBkYXRhLmlkICYmIHZhbC5pbmRleE9mKGlkKSA9PT0gLTEpIHtcbiAgICAgICAgICB2YWwucHVzaChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VsZi4kZWxlbWVudC52YWwodmFsKTtcblxuICAgICAgc2VsZi4kZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuc2VsZWN0KHBhcmFtcy5kYXRhKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLnVuc2VsZWN0KHBhcmFtcy5kYXRhKTtcbiAgICB9KTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlbW92ZSBhbnl0aGluZyBhZGRlZCB0byBjaGlsZCBlbGVtZW50c1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnKicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmVtb3ZlIGFueSBjdXN0b20gZGF0YSBzZXQgYnkgU2VsZWN0MlxuICAgICAgVXRpbHMuUmVtb3ZlRGF0YSh0aGlzKTtcbiAgICB9KTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGRhdGEgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCk7XG5cbiAgICAkb3B0aW9ucy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdvcHRpb24nICYmXG4gICAgICAgIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnb3B0Z3JvdXAnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgJG9wdGlvbiA9ICQodGhpcyk7XG5cbiAgICAgIHZhciBvcHRpb24gPSBzZWxmLml0ZW0oJG9wdGlvbik7XG5cbiAgICAgIHZhciBtYXRjaGVzID0gc2VsZi5tYXRjaGVzKHBhcmFtcywgb3B0aW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgZGF0YS5wdXNoKG1hdGNoZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2FsbGJhY2soe1xuICAgICAgcmVzdWx0czogZGF0YVxuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmFkZE9wdGlvbnMgPSBmdW5jdGlvbiAoJG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkb3B0aW9ucyk7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgb3B0aW9uO1xuXG4gICAgaWYgKGRhdGEuY2hpbGRyZW4pIHtcbiAgICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJyk7XG4gICAgICBvcHRpb24ubGFiZWwgPSBkYXRhLnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXG4gICAgICBpZiAob3B0aW9uLnRleHRDb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9uLnRleHRDb250ZW50ID0gZGF0YS50ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGRhdGEudGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb24udmFsdWUgPSBkYXRhLmlkO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRpc2FibGVkKSB7XG4gICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnNlbGVjdGVkKSB7XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICBvcHRpb24udGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkRGF0YSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZGF0YSk7XG4gICAgbm9ybWFsaXplZERhdGEuZWxlbWVudCA9IG9wdGlvbjtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBvcHRpb24ncyBkYXRhIHdpdGggdGhlIGNvbWJpbmVkIGRhdGFcbiAgICBVdGlscy5TdG9yZURhdGEob3B0aW9uLCAnZGF0YScsIG5vcm1hbGl6ZWREYXRhKTtcblxuICAgIHJldHVybiAkKG9wdGlvbik7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uICgkb3B0aW9uKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIGRhdGEgPSBVdGlscy5HZXREYXRhKCRvcHRpb25bMF0sICdkYXRhJyk7XG5cbiAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW9uID0gJG9wdGlvblswXTtcblxuICAgIGlmIChvcHRpb24udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb3B0aW9uJykge1xuICAgICAgZGF0YSA9IHtcbiAgICAgICAgaWQ6ICRvcHRpb24udmFsKCksXG4gICAgICAgIHRleHQ6ICRvcHRpb24udGV4dCgpLFxuICAgICAgICBkaXNhYmxlZDogJG9wdGlvbi5wcm9wKCdkaXNhYmxlZCcpLFxuICAgICAgICBzZWxlY3RlZDogJG9wdGlvbi5wcm9wKCdzZWxlY3RlZCcpLFxuICAgICAgICB0aXRsZTogJG9wdGlvbi5wcm9wKCd0aXRsZScpXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9uLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29wdGdyb3VwJykge1xuICAgICAgZGF0YSA9IHtcbiAgICAgICAgdGV4dDogJG9wdGlvbi5wcm9wKCdsYWJlbCcpLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHRpdGxlOiAkb3B0aW9uLnByb3AoJ3RpdGxlJylcbiAgICAgIH07XG5cbiAgICAgIHZhciAkY2hpbGRyZW4gPSAkb3B0aW9uLmNoaWxkcmVuKCdvcHRpb24nKTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBjID0gMDsgYyA8ICRjaGlsZHJlbi5sZW5ndGg7IGMrKykge1xuICAgICAgICB2YXIgJGNoaWxkID0gJCgkY2hpbGRyZW5bY10pO1xuXG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuaXRlbSgkY2hpbGQpO1xuXG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgZGF0YSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZGF0YSk7XG4gICAgZGF0YS5lbGVtZW50ID0gJG9wdGlvblswXTtcblxuICAgIFV0aWxzLlN0b3JlRGF0YSgkb3B0aW9uWzBdLCAnZGF0YScsIGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuX25vcm1hbGl6ZUl0ZW0gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtICE9PSBPYmplY3QoaXRlbSkpIHtcbiAgICAgIGl0ZW0gPSB7XG4gICAgICAgIGlkOiBpdGVtLFxuICAgICAgICB0ZXh0OiBpdGVtXG4gICAgICB9O1xuICAgIH1cblxuICAgIGl0ZW0gPSAkLmV4dGVuZCh7fSwge1xuICAgICAgdGV4dDogJydcbiAgICB9LCBpdGVtKTtcblxuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAoaXRlbS5pZCAhPSBudWxsKSB7XG4gICAgICBpdGVtLmlkID0gaXRlbS5pZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnRleHQgIT0gbnVsbCkge1xuICAgICAgaXRlbS50ZXh0ID0gaXRlbS50ZXh0LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0uX3Jlc3VsdElkID09IG51bGwgJiYgaXRlbS5pZCAmJiB0aGlzLmNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICBpdGVtLl9yZXN1bHRJZCA9IHRoaXMuZ2VuZXJhdGVSZXN1bHRJZCh0aGlzLmNvbnRhaW5lciwgaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgaXRlbSk7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uIChwYXJhbXMsIGRhdGEpIHtcbiAgICB2YXIgbWF0Y2hlciA9IHRoaXMub3B0aW9ucy5nZXQoJ21hdGNoZXInKTtcblxuICAgIHJldHVybiBtYXRjaGVyKHBhcmFtcywgZGF0YSk7XG4gIH07XG5cbiAgcmV0dXJuIFNlbGVjdEFkYXB0ZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvYXJyYXknLFtcbiAgJy4vc2VsZWN0JyxcbiAgJy4uL3V0aWxzJyxcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uIChTZWxlY3RBZGFwdGVyLCBVdGlscywgJCkge1xuICBmdW5jdGlvbiBBcnJheUFkYXB0ZXIgKCRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fZGF0YVRvQ29udmVydCA9IG9wdGlvbnMuZ2V0KCdkYXRhJykgfHwgW107XG5cbiAgICBBcnJheUFkYXB0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgVXRpbHMuRXh0ZW5kKEFycmF5QWRhcHRlciwgU2VsZWN0QWRhcHRlcik7XG5cbiAgQXJyYXlBZGFwdGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIEFycmF5QWRhcHRlci5fX3N1cGVyX18uYmluZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICB0aGlzLmFkZE9wdGlvbnModGhpcy5jb252ZXJ0VG9PcHRpb25zKHRoaXMuX2RhdGFUb0NvbnZlcnQpKTtcbiAgfTtcblxuICBBcnJheUFkYXB0ZXIucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyICRvcHRpb24gPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoaSwgZWxtKSB7XG4gICAgICByZXR1cm4gZWxtLnZhbHVlID09IGRhdGEuaWQudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmICgkb3B0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGRhdGEpO1xuXG4gICAgICB0aGlzLmFkZE9wdGlvbnMoJG9wdGlvbik7XG4gICAgfVxuXG4gICAgQXJyYXlBZGFwdGVyLl9fc3VwZXJfXy5zZWxlY3QuY2FsbCh0aGlzLCBkYXRhKTtcbiAgfTtcblxuICBBcnJheUFkYXB0ZXIucHJvdG90eXBlLmNvbnZlcnRUb09wdGlvbnMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciAkZXhpc3RpbmcgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpO1xuICAgIHZhciBleGlzdGluZ0lkcyA9ICRleGlzdGluZy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNlbGYuaXRlbSgkKHRoaXMpKS5pZDtcbiAgICB9KS5nZXQoKTtcblxuICAgIHZhciAkb3B0aW9ucyA9IFtdO1xuXG4gICAgLy8gRmlsdGVyIG91dCBhbGwgaXRlbXMgZXhjZXB0IGZvciB0aGUgb25lIHBhc3NlZCBpbiB0aGUgYXJndW1lbnRcbiAgICBmdW5jdGlvbiBvbmx5SXRlbSAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICQodGhpcykudmFsKCkgPT0gaXRlbS5pZDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0oZGF0YVtkXSk7XG5cbiAgICAgIC8vIFNraXAgaXRlbXMgd2hpY2ggd2VyZSBwcmUtbG9hZGVkLCBvbmx5IG1lcmdlIHRoZSBkYXRhXG4gICAgICBpZiAoZXhpc3RpbmdJZHMuaW5kZXhPZihpdGVtLmlkKSA+PSAwKSB7XG4gICAgICAgIHZhciAkZXhpc3RpbmdPcHRpb24gPSAkZXhpc3RpbmcuZmlsdGVyKG9ubHlJdGVtKGl0ZW0pKTtcblxuICAgICAgICB2YXIgZXhpc3RpbmdEYXRhID0gdGhpcy5pdGVtKCRleGlzdGluZ09wdGlvbik7XG4gICAgICAgIHZhciBuZXdEYXRhID0gJC5leHRlbmQodHJ1ZSwge30sIGl0ZW0sIGV4aXN0aW5nRGF0YSk7XG5cbiAgICAgICAgdmFyICRuZXdPcHRpb24gPSB0aGlzLm9wdGlvbihuZXdEYXRhKTtcblxuICAgICAgICAkZXhpc3RpbmdPcHRpb24ucmVwbGFjZVdpdGgoJG5ld09wdGlvbik7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciAkb3B0aW9uID0gdGhpcy5vcHRpb24oaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIHZhciAkY2hpbGRyZW4gPSB0aGlzLmNvbnZlcnRUb09wdGlvbnMoaXRlbS5jaGlsZHJlbik7XG5cbiAgICAgICAgJG9wdGlvbi5hcHBlbmQoJGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgJG9wdGlvbnMucHVzaCgkb3B0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJG9wdGlvbnM7XG4gIH07XG5cbiAgcmV0dXJuIEFycmF5QWRhcHRlcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9hamF4JyxbXG4gICcuL2FycmF5JyxcbiAgJy4uL3V0aWxzJyxcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uIChBcnJheUFkYXB0ZXIsIFV0aWxzLCAkKSB7XG4gIGZ1bmN0aW9uIEFqYXhBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuYWpheE9wdGlvbnMgPSB0aGlzLl9hcHBseURlZmF1bHRzKG9wdGlvbnMuZ2V0KCdhamF4JykpO1xuXG4gICAgaWYgKHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyA9IHRoaXMuYWpheE9wdGlvbnMucHJvY2Vzc1Jlc3VsdHM7XG4gICAgfVxuXG4gICAgQWpheEFkYXB0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgVXRpbHMuRXh0ZW5kKEFqYXhBZGFwdGVyLCBBcnJheUFkYXB0ZXIpO1xuXG4gIEFqYXhBZGFwdGVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgZGF0YTogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIHBhcmFtcywge1xuICAgICAgICAgIHE6IHBhcmFtcy50ZXJtXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHRyYW5zcG9ydDogZnVuY3Rpb24gKHBhcmFtcywgc3VjY2VzcywgZmFpbHVyZSkge1xuICAgICAgICB2YXIgJHJlcXVlc3QgPSAkLmFqYXgocGFyYW1zKTtcblxuICAgICAgICAkcmVxdWVzdC50aGVuKHN1Y2Nlc3MpO1xuICAgICAgICAkcmVxdWVzdC5mYWlsKGZhaWx1cmUpO1xuXG4gICAgICAgIHJldHVybiAkcmVxdWVzdDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgdHJ1ZSk7XG4gIH07XG5cbiAgQWpheEFkYXB0ZXIucHJvdG90eXBlLnByb2Nlc3NSZXN1bHRzID0gZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICBBamF4QWRhcHRlci5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuX3JlcXVlc3QgIT0gbnVsbCkge1xuICAgICAgLy8gSlNPTlAgcmVxdWVzdHMgY2Fubm90IGFsd2F5cyBiZSBhYm9ydGVkXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3JlcXVlc3QuYWJvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHtcbiAgICAgIHR5cGU6ICdHRVQnXG4gICAgfSwgdGhpcy5hamF4T3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsLmNhbGwodGhpcy4kZWxlbWVudCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5kYXRhLmNhbGwodGhpcy4kZWxlbWVudCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXF1ZXN0ICgpIHtcbiAgICAgIHZhciAkcmVxdWVzdCA9IG9wdGlvbnMudHJhbnNwb3J0KG9wdGlvbnMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gc2VsZi5wcm9jZXNzUmVzdWx0cyhkYXRhLCBwYXJhbXMpO1xuXG4gICAgICAgIGlmIChzZWxmLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzcG9uc2UgaW5jbHVkZWQgYSBgcmVzdWx0c2Aga2V5LlxuICAgICAgICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0cy5yZXN1bHRzIHx8ICFBcnJheS5pc0FycmF5KHJlc3VsdHMucmVzdWx0cykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdTZWxlY3QyOiBUaGUgQUpBWCByZXN1bHRzIGRpZCBub3QgcmV0dXJuIGFuIGFycmF5IGluIHRoZSAnICtcbiAgICAgICAgICAgICAgJ2ByZXN1bHRzYCBrZXkgb2YgdGhlIHJlc3BvbnNlLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2socmVzdWx0cyk7XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gZGV0ZWN0IGlmIGEgcmVxdWVzdCB3YXMgYWJvcnRlZFxuICAgICAgICAvLyBPbmx5IHdvcmtzIGlmIHRoZSB0cmFuc3BvcnQgZXhwb3NlcyBhIHN0YXR1cyBwcm9wZXJ0eVxuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gJHJlcXVlc3QgJiZcbiAgICAgICAgICAgICgkcmVxdWVzdC5zdGF0dXMgPT09IDAgfHwgJHJlcXVlc3Quc3RhdHVzID09PSAnMCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7XG4gICAgICAgICAgbWVzc2FnZTogJ2Vycm9yTG9hZGluZydcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fcmVxdWVzdCA9ICRyZXF1ZXN0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFqYXhPcHRpb25zLmRlbGF5ICYmIHBhcmFtcy50ZXJtICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLl9xdWVyeVRpbWVvdXQpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9xdWVyeVRpbWVvdXQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9xdWVyeVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChyZXF1ZXN0LCB0aGlzLmFqYXhPcHRpb25zLmRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQWpheEFkYXB0ZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvdGFncycsW1xuICAnanF1ZXJ5J1xuXSwgZnVuY3Rpb24gKCQpIHtcbiAgZnVuY3Rpb24gVGFncyAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciB0YWdzID0gb3B0aW9ucy5nZXQoJ3RhZ3MnKTtcblxuICAgIHZhciBjcmVhdGVUYWcgPSBvcHRpb25zLmdldCgnY3JlYXRlVGFnJyk7XG5cbiAgICBpZiAoY3JlYXRlVGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVGFnID0gY3JlYXRlVGFnO1xuICAgIH1cblxuICAgIHZhciBpbnNlcnRUYWcgPSBvcHRpb25zLmdldCgnaW5zZXJ0VGFnJyk7XG5cbiAgICBpZiAoaW5zZXJ0VGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRUYWcgPSBpbnNlcnRUYWc7XG4gICAgfVxuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFncykpIHtcbiAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGFncy5sZW5ndGg7IHQrKykge1xuICAgICAgICB2YXIgdGFnID0gdGFnc1t0XTtcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9ub3JtYWxpemVJdGVtKHRhZyk7XG5cbiAgICAgICAgdmFyICRvcHRpb24gPSB0aGlzLm9wdGlvbihpdGVtKTtcblxuICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkb3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBUYWdzLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLl9yZW1vdmVPbGRUYWdzKCk7XG5cbiAgICBpZiAocGFyYW1zLnRlcm0gPT0gbnVsbCB8fCBwYXJhbXMucGFnZSAhPSBudWxsKSB7XG4gICAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwcGVyIChvYmosIGNoaWxkKSB7XG4gICAgICB2YXIgZGF0YSA9IG9iai5yZXN1bHRzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaV07XG5cbiAgICAgICAgdmFyIGNoZWNrQ2hpbGRyZW4gPSAoXG4gICAgICAgICAgb3B0aW9uLmNoaWxkcmVuICE9IG51bGwgJiZcbiAgICAgICAgICAhd3JhcHBlcih7XG4gICAgICAgICAgICByZXN1bHRzOiBvcHRpb24uY2hpbGRyZW5cbiAgICAgICAgICB9LCB0cnVlKVxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBvcHRpb25UZXh0ID0gKG9wdGlvbi50ZXh0IHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB2YXIgcGFyYW1zVGVybSA9IChwYXJhbXMudGVybSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICAgICAgICB2YXIgY2hlY2tUZXh0ID0gb3B0aW9uVGV4dCA9PT0gcGFyYW1zVGVybTtcblxuICAgICAgICBpZiAoY2hlY2tUZXh0IHx8IGNoZWNrQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmouZGF0YSA9IGRhdGE7XG4gICAgICAgICAgY2FsbGJhY2sob2JqKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWcgPSBzZWxmLmNyZWF0ZVRhZyhwYXJhbXMpO1xuXG4gICAgICBpZiAodGFnICE9IG51bGwpIHtcbiAgICAgICAgdmFyICRvcHRpb24gPSBzZWxmLm9wdGlvbih0YWcpO1xuICAgICAgICAkb3B0aW9uLmF0dHIoJ2RhdGEtc2VsZWN0Mi10YWcnLCAndHJ1ZScpO1xuXG4gICAgICAgIHNlbGYuYWRkT3B0aW9ucyhbJG9wdGlvbl0pO1xuXG4gICAgICAgIHNlbGYuaW5zZXJ0VGFnKGRhdGEsIHRhZyk7XG4gICAgICB9XG5cbiAgICAgIG9iai5yZXN1bHRzID0gZGF0YTtcblxuICAgICAgY2FsbGJhY2sob2JqKTtcbiAgICB9XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIHdyYXBwZXIpO1xuICB9O1xuXG4gIFRhZ3MucHJvdG90eXBlLmNyZWF0ZVRhZyA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMudGVybSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdGVybSA9IHBhcmFtcy50ZXJtLnRyaW0oKTtcblxuICAgIGlmICh0ZXJtID09PSAnJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0ZXJtLFxuICAgICAgdGV4dDogdGVybVxuICAgIH07XG4gIH07XG5cbiAgVGFncy5wcm90b3R5cGUuaW5zZXJ0VGFnID0gZnVuY3Rpb24gKF8sIGRhdGEsIHRhZykge1xuICAgIGRhdGEudW5zaGlmdCh0YWcpO1xuICB9O1xuXG4gIFRhZ3MucHJvdG90eXBlLl9yZW1vdmVPbGRUYWdzID0gZnVuY3Rpb24gKF8pIHtcbiAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ29wdGlvbltkYXRhLXNlbGVjdDItdGFnXScpO1xuXG4gICAgJG9wdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICQodGhpcykucmVtb3ZlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRhZ3M7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvdG9rZW5pemVyJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdG9rZW5pemVyID0gb3B0aW9ucy5nZXQoJ3Rva2VuaXplcicpO1xuXG4gICAgaWYgKHRva2VuaXplciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjtcbiAgICB9XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cblxuICBUb2tlbml6ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgdGhpcy4kc2VhcmNoID0gIGNvbnRhaW5lci5kcm9wZG93bi4kc2VhcmNoIHx8IGNvbnRhaW5lci5zZWxlY3Rpb24uJHNlYXJjaCB8fFxuICAgICAgJGNvbnRhaW5lci5maW5kKCcuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkJyk7XG4gIH07XG5cbiAgVG9rZW5pemVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBbmRTZWxlY3QgKGRhdGEpIHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgZGF0YSBvYmplY3Qgc28gd2UgY2FuIHVzZSBpdCBmb3IgY2hlY2tzXG4gICAgICB2YXIgaXRlbSA9IHNlbGYuX25vcm1hbGl6ZUl0ZW0oZGF0YSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIG9iamVjdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHRhZ1xuICAgICAgLy8gU2VsZWN0IGl0IGlmIGl0IGRvZXNuJ3RcbiAgICAgIHZhciAkZXhpc3RpbmdPcHRpb25zID0gc2VsZi4kZWxlbWVudC5maW5kKCdvcHRpb24nKS5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKSA9PT0gaXRlbS5pZDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiBhbiBleGlzdGluZyBvcHRpb24gd2Fzbid0IGZvdW5kIGZvciBpdCwgY3JlYXRlIHRoZSBvcHRpb25cbiAgICAgIGlmICghJGV4aXN0aW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdmFyICRvcHRpb24gPSBzZWxmLm9wdGlvbihpdGVtKTtcbiAgICAgICAgJG9wdGlvbi5hdHRyKCdkYXRhLXNlbGVjdDItdGFnJywgdHJ1ZSk7XG5cbiAgICAgICAgc2VsZi5fcmVtb3ZlT2xkVGFncygpO1xuICAgICAgICBzZWxmLmFkZE9wdGlvbnMoWyRvcHRpb25dKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VsZWN0IHRoZSBpdGVtLCBub3cgdGhhdCB3ZSBrbm93IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3IgaXRcbiAgICAgIHNlbGVjdChpdGVtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3QgKGRhdGEpIHtcbiAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0Jywge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXJhbXMudGVybSA9IHBhcmFtcy50ZXJtIHx8ICcnO1xuXG4gICAgdmFyIHRva2VuRGF0YSA9IHRoaXMudG9rZW5pemVyKHBhcmFtcywgdGhpcy5vcHRpb25zLCBjcmVhdGVBbmRTZWxlY3QpO1xuXG4gICAgaWYgKHRva2VuRGF0YS50ZXJtICE9PSBwYXJhbXMudGVybSkge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgc2VhcmNoIHRlcm0gaWYgd2UgaGF2ZSB0aGUgc2VhcmNoIGJveFxuICAgICAgaWYgKHRoaXMuJHNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy4kc2VhcmNoLnZhbCh0b2tlbkRhdGEudGVybSk7XG4gICAgICAgIHRoaXMuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuICAgICAgfVxuXG4gICAgICBwYXJhbXMudGVybSA9IHRva2VuRGF0YS50ZXJtO1xuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spO1xuICB9O1xuXG4gIFRva2VuaXplci5wcm90b3R5cGUudG9rZW5pemVyID0gZnVuY3Rpb24gKF8sIHBhcmFtcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VwYXJhdG9ycyA9IG9wdGlvbnMuZ2V0KCd0b2tlblNlcGFyYXRvcnMnKSB8fCBbXTtcbiAgICB2YXIgdGVybSA9IHBhcmFtcy50ZXJtO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBjcmVhdGVUYWcgPSB0aGlzLmNyZWF0ZVRhZyB8fCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGFyYW1zLnRlcm0sXG4gICAgICAgIHRleHQ6IHBhcmFtcy50ZXJtXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB3aGlsZSAoaSA8IHRlcm0ubGVuZ3RoKSB7XG4gICAgICB2YXIgdGVybUNoYXIgPSB0ZXJtW2ldO1xuXG4gICAgICBpZiAoc2VwYXJhdG9ycy5pbmRleE9mKHRlcm1DaGFyKSA9PT0gLTEpIHtcbiAgICAgICAgaSsrO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFydCA9IHRlcm0uc3Vic3RyKDAsIGkpO1xuICAgICAgdmFyIHBhcnRQYXJhbXMgPSAkLmV4dGVuZCh7fSwgcGFyYW1zLCB7XG4gICAgICAgIHRlcm06IHBhcnRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZGF0YSA9IGNyZWF0ZVRhZyhwYXJ0UGFyYW1zKTtcblxuICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhkYXRhKTtcblxuICAgICAgLy8gUmVzZXQgdGhlIHRlcm0gdG8gbm90IGluY2x1ZGUgdGhlIHRva2VuaXplZCBwb3J0aW9uXG4gICAgICB0ZXJtID0gdGVybS5zdWJzdHIoaSArIDEpIHx8ICcnO1xuICAgICAgaSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlcm06IHRlcm1cbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBUb2tlbml6ZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoJyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWluaW11bUlucHV0TGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7XG4gICAgdGhpcy5taW5pbXVtSW5wdXRMZW5ndGggPSBvcHRpb25zLmdldCgnbWluaW11bUlucHV0TGVuZ3RoJyk7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZSwgb3B0aW9ucyk7XG4gIH1cblxuICBNaW5pbXVtSW5wdXRMZW5ndGgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7XG5cbiAgICBpZiAocGFyYW1zLnRlcm0ubGVuZ3RoIDwgdGhpcy5taW5pbXVtSW5wdXRMZW5ndGgpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuICAgICAgICBtZXNzYWdlOiAnaW5wdXRUb29TaG9ydCcsXG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBtaW5pbXVtOiB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCxcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLnRlcm0sXG4gICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gTWluaW11bUlucHV0TGVuZ3RoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1JbnB1dExlbmd0aCcsW1xuXG5dLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1heGltdW1JbnB1dExlbmd0aCAoZGVjb3JhdGVkLCAkZSwgb3B0aW9ucykge1xuICAgIHRoaXMubWF4aW11bUlucHV0TGVuZ3RoID0gb3B0aW9ucy5nZXQoJ21heGltdW1JbnB1dExlbmd0aCcpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgTWF4aW11bUlucHV0TGVuZ3RoLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICBwYXJhbXMudGVybSA9IHBhcmFtcy50ZXJtIHx8ICcnO1xuXG4gICAgaWYgKHRoaXMubWF4aW11bUlucHV0TGVuZ3RoID4gMCAmJlxuICAgICAgICBwYXJhbXMudGVybS5sZW5ndGggPiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCkge1xuICAgICAgdGhpcy50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdpbnB1dFRvb0xvbmcnLFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbWF4aW11bTogdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGgsXG4gICAgICAgICAgaW5wdXQ6IHBhcmFtcy50ZXJtLFxuICAgICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgcmV0dXJuIE1heGltdW1JbnB1dExlbmd0aDtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJyxbXG5cbl0sIGZ1bmN0aW9uICgpe1xuICBmdW5jdGlvbiBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7XG4gICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID0gb3B0aW9ucy5nZXQoJ21heGltdW1TZWxlY3Rpb25MZW5ndGgnKTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlLCBvcHRpb25zKTtcbiAgfVxuXG4gIE1heGltdW1TZWxlY3Rpb25MZW5ndGgucHJvdG90eXBlLmJpbmQgPVxuICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCgpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aC5wcm90b3R5cGUucXVlcnkgPVxuICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5fY2hlY2tJZk1heGltdW1TZWxlY3RlZChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlY29yYXRlZC5jYWxsKHNlbGYsIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gIH07XG5cbiAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aC5wcm90b3R5cGUuX2NoZWNrSWZNYXhpbXVtU2VsZWN0ZWQgPVxuICAgIGZ1bmN0aW9uIChfLCBzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5jdXJyZW50KGZ1bmN0aW9uIChjdXJyZW50RGF0YSkge1xuICAgICAgICB2YXIgY291bnQgPSBjdXJyZW50RGF0YSAhPSBudWxsID8gY3VycmVudERhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgaWYgKHNlbGYubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBjb3VudCA+PSBzZWxmLm1heGltdW1TZWxlY3Rpb25MZW5ndGgpIHtcbiAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdtYXhpbXVtU2VsZWN0ZWQnLFxuICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICBtYXhpbXVtOiBzZWxmLm1heGltdW1TZWxlY3Rpb25MZW5ndGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bicsW1xuICAnanF1ZXJ5JyxcbiAgJy4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgVXRpbHMpIHtcbiAgZnVuY3Rpb24gRHJvcGRvd24gKCRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9ICRlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBEcm9wZG93bi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChEcm9wZG93biwgVXRpbHMuT2JzZXJ2YWJsZSk7XG5cbiAgRHJvcGRvd24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGRyb3Bkb3duID0gJChcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDItZHJvcGRvd25cIj4nICtcbiAgICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzXCI+PC9zcGFuPicgK1xuICAgICAgJzwvc3Bhbj4nXG4gICAgKTtcblxuICAgICRkcm9wZG93bi5hdHRyKCdkaXInLCB0aGlzLm9wdGlvbnMuZ2V0KCdkaXInKSk7XG5cbiAgICB0aGlzLiRkcm9wZG93biA9ICRkcm9wZG93bjtcblxuICAgIHJldHVybiAkZHJvcGRvd247XG4gIH07XG5cbiAgRHJvcGRvd24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfTtcblxuICBEcm9wZG93bi5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoJGRyb3Bkb3duLCAkY29udGFpbmVyKSB7XG4gICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfTtcblxuICBEcm9wZG93bi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIGRyb3Bkb3duIGZyb20gdGhlIERPTVxuICAgIHRoaXMuJGRyb3Bkb3duLnJlbW92ZSgpO1xuICB9O1xuXG4gIHJldHVybiBEcm9wZG93bjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vc2VhcmNoJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICBmdW5jdGlvbiBTZWFyY2ggKCkgeyB9XG5cbiAgU2VhcmNoLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyICRyZW5kZXJlZCA9IGRlY29yYXRlZC5jYWxsKHRoaXMpO1xuICAgIHZhciBzZWFyY2hMYWJlbCA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgnc2VhcmNoJyk7XG5cbiAgICB2YXIgJHNlYXJjaCA9ICQoXG4gICAgICAnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlYXJjaCBzZWxlY3QyLXNlYXJjaC0tZHJvcGRvd25cIj4nICtcbiAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlbGVjdDItc2VhcmNoX19maWVsZFwiIHR5cGU9XCJzZWFyY2hcIiB0YWJpbmRleD1cIi0xXCInICtcbiAgICAgICAgJyBhdXRvY29ycmVjdD1cIm9mZlwiIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiJyArXG4gICAgICAgICcgc3BlbGxjaGVjaz1cImZhbHNlXCIgcm9sZT1cInNlYXJjaGJveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiIC8+JyArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuXG4gICAgdGhpcy4kc2VhcmNoQ29udGFpbmVyID0gJHNlYXJjaDtcbiAgICB0aGlzLiRzZWFyY2ggPSAkc2VhcmNoLmZpbmQoJ2lucHV0Jyk7XG5cbiAgICB0aGlzLiRzZWFyY2gucHJvcCgnYXV0b2NvbXBsZXRlJywgdGhpcy5vcHRpb25zLmdldCgnYXV0b2NvbXBsZXRlJykpO1xuICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdhcmlhLWxhYmVsJywgc2VhcmNoTGFiZWwoKSk7XG5cbiAgICAkcmVuZGVyZWQucHJlcGVuZCgkc2VhcmNoKTtcblxuICAgIHJldHVybiAkcmVuZGVyZWQ7XG4gIH07XG5cbiAgU2VhcmNoLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHJlc3VsdHNJZCA9IGNvbnRhaW5lci5pZCArICctcmVzdWx0cyc7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgdGhpcy4kc2VhcmNoLm9uKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdrZXlwcmVzcycsIGV2dCk7XG5cbiAgICAgIHNlbGYuX2tleVVwUHJldmVudGVkID0gZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgYnJvd3NlcnMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIGBpbnB1dGAgZXZlbnRcbiAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBkb3VibGUtdHJpZ2dlcmluZyBvZiBldmVudHMgZm9yIGJyb3dzZXJzIHdoaWNoIHN1cHBvcnRcbiAgICAvLyBib3RoIHRoZSBga2V5dXBgIGFuZCBgaW5wdXRgIGV2ZW50cy5cbiAgICB0aGlzLiRzZWFyY2gub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgLy8gVW5iaW5kIHRoZSBkdXBsaWNhdGVkIGBrZXl1cGAgZXZlbnRcbiAgICAgICQodGhpcykub2ZmKCdrZXl1cCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VhcmNoLm9uKCdrZXl1cCBpbnB1dCcsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIHNlbGYuaGFuZGxlU2VhcmNoKGV2dCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgcmVzdWx0c0lkKTtcblxuICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWFyY2guYXR0cigndGFiaW5kZXgnLCAtMSk7XG4gICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1jb250cm9scycpO1xuICAgICAgc2VsZi4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuXG4gICAgICBzZWxmLiRzZWFyY2gudmFsKCcnKTtcbiAgICAgIHNlbGYuJHNlYXJjaC50cmlnZ2VyKCdibHVyJyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFjb250YWluZXIuaXNPcGVuKCkpIHtcbiAgICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgaWYgKHBhcmFtcy5xdWVyeS50ZXJtID09IG51bGwgfHwgcGFyYW1zLnF1ZXJ5LnRlcm0gPT09ICcnKSB7XG4gICAgICAgIHZhciBzaG93U2VhcmNoID0gc2VsZi5zaG93U2VhcmNoKHBhcmFtcyk7XG5cbiAgICAgICAgaWYgKHNob3dTZWFyY2gpIHtcbiAgICAgICAgICBzZWxmLiRzZWFyY2hDb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1zZWFyY2gtLWhpZGUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLiRzZWFyY2hDb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1zZWFyY2gtLWhpZGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmZvY3VzJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgaWYgKHBhcmFtcy5kYXRhLl9yZXN1bHRJZCkge1xuICAgICAgICBzZWxmLiRzZWFyY2guYXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgcGFyYW1zLmRhdGEuX3Jlc3VsdElkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLmhhbmRsZVNlYXJjaCA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBpZiAoIXRoaXMuX2tleVVwUHJldmVudGVkKSB7XG4gICAgICB2YXIgaW5wdXQgPSB0aGlzLiRzZWFyY2gudmFsKCk7XG5cbiAgICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7XG4gICAgICAgIHRlcm06IGlucHV0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9rZXlVcFByZXZlbnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuc2hvd1NlYXJjaCA9IGZ1bmN0aW9uIChfLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gU2VhcmNoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXInLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBIaWRlUGxhY2Vob2xkZXIgKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIob3B0aW9ucy5nZXQoJ3BsYWNlaG9sZGVyJykpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKTtcbiAgfVxuXG4gIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkge1xuICAgIGRhdGEucmVzdWx0cyA9IHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoZGF0YS5yZXN1bHRzKTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpO1xuICB9O1xuXG4gIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUubm9ybWFsaXplUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoXywgcGxhY2Vob2xkZXIpIHtcbiAgICBpZiAodHlwZW9mIHBsYWNlaG9sZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgcGxhY2Vob2xkZXIgPSB7XG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgdGV4dDogcGxhY2Vob2xkZXJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyO1xuICB9O1xuXG4gIEhpZGVQbGFjZWhvbGRlci5wcm90b3R5cGUucmVtb3ZlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoXywgZGF0YSkge1xuICAgIHZhciBtb2RpZmllZERhdGEgPSBkYXRhLnNsaWNlKDApO1xuXG4gICAgZm9yICh2YXIgZCA9IGRhdGEubGVuZ3RoIC0gMTsgZCA+PSAwOyBkLS0pIHtcbiAgICAgIHZhciBpdGVtID0gZGF0YVtkXTtcblxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIuaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgbW9kaWZpZWREYXRhLnNwbGljZShkLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWREYXRhO1xuICB9O1xuXG4gIHJldHVybiBIaWRlUGxhY2Vob2xkZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2luZmluaXRlU2Nyb2xsJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICBmdW5jdGlvbiBJbmZpbml0ZVNjcm9sbCAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHtcbiAgICB0aGlzLmxhc3RQYXJhbXMgPSB7fTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcik7XG5cbiAgICB0aGlzLiRsb2FkaW5nTW9yZSA9IHRoaXMuY3JlYXRlTG9hZGluZ01vcmUoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBkYXRhKSB7XG4gICAgdGhpcy4kbG9hZGluZ01vcmUucmVtb3ZlKCk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBkYXRhKTtcblxuICAgIGlmICh0aGlzLnNob3dMb2FkaW5nTW9yZShkYXRhKSkge1xuICAgICAgdGhpcy4kcmVzdWx0cy5hcHBlbmQodGhpcy4kbG9hZGluZ01vcmUpO1xuICAgICAgdGhpcy5sb2FkTW9yZUlmTmVlZGVkKCk7XG4gICAgfVxuICB9O1xuXG4gIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTtcblxuICAgIGNvbnRhaW5lci5vbigncXVlcnknLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmxhc3RQYXJhbXMgPSBwYXJhbXM7XG4gICAgICBzZWxmLmxvYWRpbmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdxdWVyeTphcHBlbmQnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmxhc3RQYXJhbXMgPSBwYXJhbXM7XG4gICAgICBzZWxmLmxvYWRpbmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kcmVzdWx0cy5vbignc2Nyb2xsJywgdGhpcy5sb2FkTW9yZUlmTmVlZGVkLmJpbmQodGhpcykpO1xuICB9O1xuXG4gIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5sb2FkTW9yZUlmTmVlZGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpc0xvYWRNb3JlVmlzaWJsZSA9ICQuY29udGFpbnMoXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICB0aGlzLiRsb2FkaW5nTW9yZVswXVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8ICFpc0xvYWRNb3JlVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy4kcmVzdWx0cy5vZmZzZXQoKS50b3AgK1xuICAgICAgdGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodChmYWxzZSk7XG4gICAgdmFyIGxvYWRpbmdNb3JlT2Zmc2V0ID0gdGhpcy4kbG9hZGluZ01vcmUub2Zmc2V0KCkudG9wICtcbiAgICAgIHRoaXMuJGxvYWRpbmdNb3JlLm91dGVySGVpZ2h0KGZhbHNlKTtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ICsgNTAgPj0gbG9hZGluZ01vcmVPZmZzZXQpIHtcbiAgICAgIHRoaXMubG9hZE1vcmUoKTtcbiAgICB9XG4gIH07XG5cbiAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmxvYWRNb3JlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB2YXIgcGFyYW1zID0gJC5leHRlbmQoe30sIHtwYWdlOiAxfSwgdGhpcy5sYXN0UGFyYW1zKTtcblxuICAgIHBhcmFtcy5wYWdlKys7XG5cbiAgICB0aGlzLnRyaWdnZXIoJ3F1ZXJ5OmFwcGVuZCcsIHBhcmFtcyk7XG4gIH07XG5cbiAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLnNob3dMb2FkaW5nTW9yZSA9IGZ1bmN0aW9uIChfLCBkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEucGFnaW5hdGlvbiAmJiBkYXRhLnBhZ2luYXRpb24ubW9yZTtcbiAgfTtcblxuICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuY3JlYXRlTG9hZGluZ01vcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRvcHRpb24gPSAkKFxuICAgICAgJzxsaSAnICtcbiAgICAgICdjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1sb2FkLW1vcmVcIicgK1xuICAgICAgJ3JvbGU9XCJvcHRpb25cIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPjwvbGk+J1xuICAgICk7XG5cbiAgICB2YXIgbWVzc2FnZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgnbG9hZGluZ01vcmUnKTtcblxuICAgICRvcHRpb24uaHRtbChtZXNzYWdlKHRoaXMubGFzdFBhcmFtcykpO1xuXG4gICAgcmV0dXJuICRvcHRpb247XG4gIH07XG5cbiAgcmV0dXJuIEluZmluaXRlU2Nyb2xsO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9hdHRhY2hCb2R5JyxbXG4gICdqcXVlcnknLFxuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgVXRpbHMpIHtcbiAgZnVuY3Rpb24gQXR0YWNoQm9keSAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGRyb3Bkb3duUGFyZW50ID0gJChvcHRpb25zLmdldCgnZHJvcGRvd25QYXJlbnQnKSB8fCBkb2N1bWVudC5ib2R5KTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgY29udGFpbmVyLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fc2hvd0Ryb3Bkb3duKCk7XG4gICAgICBzZWxmLl9hdHRhY2hQb3NpdGlvbmluZ0hhbmRsZXIoY29udGFpbmVyKTtcblxuICAgICAgLy8gTXVzdCBiaW5kIGFmdGVyIHRoZSByZXN1bHRzIGhhbmRsZXJzIHRvIGVuc3VyZSBjb3JyZWN0IHNpemluZ1xuICAgICAgc2VsZi5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzKGNvbnRhaW5lcik7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5faGlkZURyb3Bkb3duKCk7XG4gICAgICBzZWxmLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXIoY29udGFpbmVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLnJlbW92ZSgpO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgJGRyb3Bkb3duLCAkY29udGFpbmVyKSB7XG4gICAgLy8gQ2xvbmUgYWxsIG9mIHRoZSBjb250YWluZXIgY2xhc3Nlc1xuICAgICRkcm9wZG93bi5hdHRyKCdjbGFzcycsICRjb250YWluZXIuYXR0cignY2xhc3MnKSk7XG5cbiAgICAkZHJvcGRvd25bMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0MicpO1xuICAgICRkcm9wZG93blswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuXG4gICAgJGRyb3Bkb3duLmNzcyh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogLTk5OTk5OVxuICAgIH0pO1xuXG4gICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lcjtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyICRjb250YWluZXIgPSAkKCc8c3Bhbj48L3NwYW4+Jyk7XG5cbiAgICB2YXIgJGRyb3Bkb3duID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7XG4gICAgJGNvbnRhaW5lci5hcHBlbmQoJGRyb3Bkb3duKTtcblxuICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyID0gJGNvbnRhaW5lcjtcblxuICAgIHJldHVybiAkY29udGFpbmVyO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLl9oaWRlRHJvcGRvd24gPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIuZGV0YWNoKCk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2JpbmRDb250YWluZXJSZXN1bHRIYW5kbGVycyA9XG4gICAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIpIHtcblxuICAgIC8vIFRoZXNlIHNob3VsZCBvbmx5IGJlIGJvdW5kIG9uY2VcbiAgICBpZiAodGhpcy5fY29udGFpbmVyUmVzdWx0c0hhbmRsZXJzQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphcHBlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICBzZWxmLl9yZXNpemVEcm9wZG93bigpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOm1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICBzZWxmLl9yZXNpemVEcm9wZG93bigpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICBzZWxmLl9yZXNpemVEcm9wZG93bigpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCd1bnNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb250YWluZXJSZXN1bHRzSGFuZGxlcnNCb3VuZCA9IHRydWU7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9XG4gICAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgc2Nyb2xsRXZlbnQgPSAnc2Nyb2xsLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcbiAgICB2YXIgcmVzaXplRXZlbnQgPSAncmVzaXplLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcbiAgICB2YXIgb3JpZW50YXRpb25FdmVudCA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyBjb250YWluZXIuaWQ7XG5cbiAgICB2YXIgJHdhdGNoZXJzID0gdGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoVXRpbHMuaGFzU2Nyb2xsKTtcbiAgICAkd2F0Y2hlcnMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy5TdG9yZURhdGEodGhpcywgJ3NlbGVjdDItc2Nyb2xsLXBvc2l0aW9uJywge1xuICAgICAgICB4OiAkKHRoaXMpLnNjcm9sbExlZnQoKSxcbiAgICAgICAgeTogJCh0aGlzKS5zY3JvbGxUb3AoKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkd2F0Y2hlcnMub24oc2Nyb2xsRXZlbnQsIGZ1bmN0aW9uIChldikge1xuICAgICAgdmFyIHBvc2l0aW9uID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nKTtcbiAgICAgICQodGhpcykuc2Nyb2xsVG9wKHBvc2l0aW9uLnkpO1xuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpLm9uKHNjcm9sbEV2ZW50ICsgJyAnICsgcmVzaXplRXZlbnQgKyAnICcgKyBvcmllbnRhdGlvbkV2ZW50LFxuICAgICAgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlciA9XG4gICAgICBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIpIHtcbiAgICB2YXIgc2Nyb2xsRXZlbnQgPSAnc2Nyb2xsLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcbiAgICB2YXIgcmVzaXplRXZlbnQgPSAncmVzaXplLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcbiAgICB2YXIgb3JpZW50YXRpb25FdmVudCA9ICdvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLicgKyBjb250YWluZXIuaWQ7XG5cbiAgICB2YXIgJHdhdGNoZXJzID0gdGhpcy4kY29udGFpbmVyLnBhcmVudHMoKS5maWx0ZXIoVXRpbHMuaGFzU2Nyb2xsKTtcbiAgICAkd2F0Y2hlcnMub2ZmKHNjcm9sbEV2ZW50KTtcblxuICAgICQod2luZG93KS5vZmYoc2Nyb2xsRXZlbnQgKyAnICcgKyByZXNpemVFdmVudCArICcgJyArIG9yaWVudGF0aW9uRXZlbnQpO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLl9wb3NpdGlvbkRyb3Bkb3duID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkd2luZG93ID0gJCh3aW5kb3cpO1xuXG4gICAgdmFyIGlzQ3VycmVudGx5QWJvdmUgPSB0aGlzLiRkcm9wZG93blswXS5jbGFzc0xpc3RcbiAgICAgIC5jb250YWlucygnc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKTtcbiAgICB2YXIgaXNDdXJyZW50bHlCZWxvdyA9IHRoaXMuJGRyb3Bkb3duWzBdLmNsYXNzTGlzdFxuICAgICAgLmNvbnRhaW5zKCdzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdycpO1xuXG4gICAgdmFyIG5ld0RpcmVjdGlvbiA9IG51bGw7XG5cbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy4kY29udGFpbmVyLm9mZnNldCgpO1xuXG4gICAgb2Zmc2V0LmJvdHRvbSA9IG9mZnNldC50b3AgKyB0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoZmFsc2UpO1xuXG4gICAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICAgIGhlaWdodDogdGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KGZhbHNlKVxuICAgIH07XG5cbiAgICBjb250YWluZXIudG9wID0gb2Zmc2V0LnRvcDtcbiAgICBjb250YWluZXIuYm90dG9tID0gb2Zmc2V0LnRvcCArIGNvbnRhaW5lci5oZWlnaHQ7XG5cbiAgICB2YXIgZHJvcGRvd24gPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMuJGRyb3Bkb3duLm91dGVySGVpZ2h0KGZhbHNlKVxuICAgIH07XG5cbiAgICB2YXIgdmlld3BvcnQgPSB7XG4gICAgICB0b3A6ICR3aW5kb3cuc2Nyb2xsVG9wKCksXG4gICAgICBib3R0b206ICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyAkd2luZG93LmhlaWdodCgpXG4gICAgfTtcblxuICAgIHZhciBlbm91Z2hSb29tQWJvdmUgPSB2aWV3cG9ydC50b3AgPCAob2Zmc2V0LnRvcCAtIGRyb3Bkb3duLmhlaWdodCk7XG4gICAgdmFyIGVub3VnaFJvb21CZWxvdyA9IHZpZXdwb3J0LmJvdHRvbSA+IChvZmZzZXQuYm90dG9tICsgZHJvcGRvd24uaGVpZ2h0KTtcblxuICAgIHZhciBjc3MgPSB7XG4gICAgICBsZWZ0OiBvZmZzZXQubGVmdCxcbiAgICAgIHRvcDogY29udGFpbmVyLmJvdHRvbVxuICAgIH07XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hhdCB0aGUgcGFyZW50IGVsZW1lbnQgaXMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0XG4gICAgdmFyICRvZmZzZXRQYXJlbnQgPSB0aGlzLiRkcm9wZG93blBhcmVudDtcblxuICAgIC8vIEZvciBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudHMsIHdlIG5lZWQgdG8gZ2V0IHRoZSBlbGVtZW50XG4gICAgLy8gdGhhdCBpcyBkZXRlcm1pbmluZyB0aGUgb2Zmc2V0XG4gICAgaWYgKCRvZmZzZXRQYXJlbnQuY3NzKCdwb3NpdGlvbicpID09PSAnc3RhdGljJykge1xuICAgICAgJG9mZnNldFBhcmVudCA9ICRvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50KCk7XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudE9mZnNldCA9IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDBcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgJC5jb250YWlucyhkb2N1bWVudC5ib2R5LCAkb2Zmc2V0UGFyZW50WzBdKSB8fFxuICAgICAgJG9mZnNldFBhcmVudFswXS5pc0Nvbm5lY3RlZFxuICAgICAgKSB7XG4gICAgICBwYXJlbnRPZmZzZXQgPSAkb2Zmc2V0UGFyZW50Lm9mZnNldCgpO1xuICAgIH1cblxuICAgIGNzcy50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICBjc3MubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcblxuICAgIGlmICghaXNDdXJyZW50bHlBYm92ZSAmJiAhaXNDdXJyZW50bHlCZWxvdykge1xuICAgICAgbmV3RGlyZWN0aW9uID0gJ2JlbG93JztcbiAgICB9XG5cbiAgICBpZiAoIWVub3VnaFJvb21CZWxvdyAmJiBlbm91Z2hSb29tQWJvdmUgJiYgIWlzQ3VycmVudGx5QWJvdmUpIHtcbiAgICAgIG5ld0RpcmVjdGlvbiA9ICdhYm92ZSc7XG4gICAgfSBlbHNlIGlmICghZW5vdWdoUm9vbUFib3ZlICYmIGVub3VnaFJvb21CZWxvdyAmJiBpc0N1cnJlbnRseUFib3ZlKSB7XG4gICAgICBuZXdEaXJlY3Rpb24gPSAnYmVsb3cnO1xuICAgIH1cblxuICAgIGlmIChuZXdEaXJlY3Rpb24gPT0gJ2Fib3ZlJyB8fFxuICAgICAgKGlzQ3VycmVudGx5QWJvdmUgJiYgbmV3RGlyZWN0aW9uICE9PSAnYmVsb3cnKSkge1xuICAgICAgY3NzLnRvcCA9IGNvbnRhaW5lci50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0gZHJvcGRvd24uaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChuZXdEaXJlY3Rpb24gIT0gbnVsbCkge1xuICAgICAgdGhpcy4kZHJvcGRvd25bMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3cnKTtcbiAgICAgIHRoaXMuJGRyb3Bkb3duWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItZHJvcGRvd24tLWFib3ZlJyk7XG4gICAgICB0aGlzLiRkcm9wZG93blswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLWRyb3Bkb3duLS0nICsgbmV3RGlyZWN0aW9uKTtcblxuICAgICAgdGhpcy4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItY29udGFpbmVyLS1iZWxvdycpO1xuICAgICAgdGhpcy4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItY29udGFpbmVyLS1hYm92ZScpO1xuICAgICAgdGhpcy4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS0nICsgbmV3RGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5jc3MoY3NzKTtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fcmVzaXplRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNzcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLiRjb250YWluZXIub3V0ZXJXaWR0aChmYWxzZSkgKyAncHgnXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkF1dG9XaWR0aCcpKSB7XG4gICAgICBjc3MubWluV2lkdGggPSBjc3Mud2lkdGg7XG4gICAgICBjc3MucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgY3NzLndpZHRoID0gJ2F1dG8nO1xuICAgIH1cblxuICAgIHRoaXMuJGRyb3Bkb3duLmNzcyhjc3MpO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLl9zaG93RHJvcGRvd24gPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIuYXBwZW5kVG8odGhpcy4kZHJvcGRvd25QYXJlbnQpO1xuXG4gICAgdGhpcy5fcG9zaXRpb25Ecm9wZG93bigpO1xuICAgIHRoaXMuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gIH07XG5cbiAgcmV0dXJuIEF0dGFjaEJvZHk7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoJyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gY291bnRSZXN1bHRzIChkYXRhKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5sZW5ndGg7IGQrKykge1xuICAgICAgdmFyIGl0ZW0gPSBkYXRhW2RdO1xuXG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICBjb3VudCArPSBjb3VudFJlc3VsdHMoaXRlbS5jaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcikge1xuICAgIHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPSBvcHRpb25zLmdldCgnbWluaW11bVJlc3VsdHNGb3JTZWFyY2gnKTtcblxuICAgIGlmICh0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwgMCkge1xuICAgICAgdGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcik7XG4gIH1cblxuICBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaC5wcm90b3R5cGUuc2hvd1NlYXJjaCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIHBhcmFtcykge1xuICAgIGlmIChjb3VudFJlc3VsdHMocGFyYW1zLmRhdGEucmVzdWx0cykgPCB0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcyk7XG4gIH07XG5cbiAgcmV0dXJuIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlJyxbXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uIChVdGlscykge1xuICBmdW5jdGlvbiBTZWxlY3RPbkNsb3NlICgpIHsgfVxuXG4gIFNlbGVjdE9uQ2xvc2UucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuX2hhbmRsZVNlbGVjdE9uQ2xvc2UocGFyYW1zKTtcbiAgICB9KTtcbiAgfTtcblxuICBTZWxlY3RPbkNsb3NlLnByb3RvdHlwZS5faGFuZGxlU2VsZWN0T25DbG9zZSA9IGZ1bmN0aW9uIChfLCBwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5vcmlnaW5hbFNlbGVjdDJFdmVudCAhPSBudWxsKSB7XG4gICAgICB2YXIgZXZlbnQgPSBwYXJhbXMub3JpZ2luYWxTZWxlY3QyRXZlbnQ7XG5cbiAgICAgIC8vIERvbid0IHNlbGVjdCBhbiBpdGVtIGlmIHRoZSBjbG9zZSBldmVudCB3YXMgdHJpZ2dlcmVkIGZyb20gYSBzZWxlY3Qgb3JcbiAgICAgIC8vIHVuc2VsZWN0IGV2ZW50XG4gICAgICBpZiAoZXZlbnQuX3R5cGUgPT09ICdzZWxlY3QnIHx8IGV2ZW50Ll90eXBlID09PSAndW5zZWxlY3QnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgJGhpZ2hsaWdodGVkUmVzdWx0cyA9IHRoaXMuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cbiAgICAvLyBPbmx5IHNlbGVjdCBoaWdobGlnaHRlZCByZXN1bHRzXG4gICAgaWYgKCRoaWdobGlnaHRlZFJlc3VsdHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkaGlnaGxpZ2h0ZWRSZXN1bHRzWzBdLCAnZGF0YScpO1xuXG4gICAgLy8gRG9uJ3QgcmUtc2VsZWN0IGFscmVhZHkgc2VsZWN0ZWQgcmVzdWx0ZVxuICAgIGlmIChcbiAgICAgIChkYXRhLmVsZW1lbnQgIT0gbnVsbCAmJiBkYXRhLmVsZW1lbnQuc2VsZWN0ZWQpIHx8XG4gICAgICAoZGF0YS5lbGVtZW50ID09IG51bGwgJiYgZGF0YS5zZWxlY3RlZClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXIoJ3NlbGVjdCcsIHtcbiAgICAgICAgZGF0YTogZGF0YVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTZWxlY3RPbkNsb3NlO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0JyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2xvc2VPblNlbGVjdCAoKSB7IH1cblxuICBDbG9zZU9uU2VsZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTtcblxuICAgIGNvbnRhaW5lci5vbignc2VsZWN0JywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi5fc2VsZWN0VHJpZ2dlcmVkKGV2dCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi5fc2VsZWN0VHJpZ2dlcmVkKGV2dCk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2xvc2VPblNlbGVjdC5wcm90b3R5cGUuX3NlbGVjdFRyaWdnZXJlZCA9IGZ1bmN0aW9uIChfLCBldnQpIHtcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2dC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgLy8gRG9uJ3QgY2xvc2UgaWYgdGhlIGNvbnRyb2wga2V5IGlzIGJlaW5nIGhlbGRcbiAgICBpZiAob3JpZ2luYWxFdmVudCAmJiAob3JpZ2luYWxFdmVudC5jdHJsS2V5IHx8IG9yaWdpbmFsRXZlbnQubWV0YUtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXIoJ2Nsb3NlJywge1xuICAgICAgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudCxcbiAgICAgIG9yaWdpbmFsU2VsZWN0MkV2ZW50OiBldnRcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gQ2xvc2VPblNlbGVjdDtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vZHJvcGRvd25Dc3MnLFtcbiAgJy4uL3V0aWxzJ1xuXSwgZnVuY3Rpb24gKFV0aWxzKSB7XG4gIGZ1bmN0aW9uIERyb3Bkb3duQ1NTICgpIHsgfVxuXG4gIERyb3Bkb3duQ1NTLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyICRkcm9wZG93biA9IGRlY29yYXRlZC5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIGRyb3Bkb3duQ3NzQ2xhc3MgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkNzc0NsYXNzJykgfHwgJyc7XG5cbiAgICBpZiAoZHJvcGRvd25Dc3NDbGFzcy5pbmRleE9mKCc6YWxsOicpICE9PSAtMSkge1xuICAgICAgZHJvcGRvd25Dc3NDbGFzcyA9IGRyb3Bkb3duQ3NzQ2xhc3MucmVwbGFjZSgnOmFsbDonLCAnJyk7XG5cbiAgICAgIFV0aWxzLmNvcHlOb25JbnRlcm5hbENzc0NsYXNzZXMoJGRyb3Bkb3duWzBdLCB0aGlzLiRlbGVtZW50WzBdKTtcbiAgICB9XG5cbiAgICAkZHJvcGRvd24uYWRkQ2xhc3MoZHJvcGRvd25Dc3NDbGFzcyk7XG5cbiAgICByZXR1cm4gJGRyb3Bkb3duO1xuICB9O1xuXG4gIHJldHVybiBEcm9wZG93bkNTUztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vdGFnc1NlYXJjaEhpZ2hsaWdodCcsW1xuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoVXRpbHMpIHtcbiAgZnVuY3Rpb24gVGFnc1NlYXJjaEhpZ2hsaWdodCAoKSB7IH1cblxuICBUYWdzU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZS5oaWdobGlnaHRGaXJzdEl0ZW0gPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyICRvcHRpb25zID0gdGhpcy4kcmVzdWx0c1xuICAgIC5maW5kKFxuICAgICAgJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScgK1xuICAgICAgJzpub3QoLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RlZCknXG4gICAgKTtcblxuICAgIGlmICgkb3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgJGZpcnN0T3B0aW9uID0gJG9wdGlvbnMuZmlyc3QoKTtcbiAgICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkZmlyc3RPcHRpb25bMF0sICdkYXRhJyk7XG4gICAgICB2YXIgZmlyc3RFbGVtZW50ID0gZGF0YS5lbGVtZW50O1xuXG4gICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC5nZXRBdHRyaWJ1dGUpIHtcbiAgICAgICAgaWYgKGZpcnN0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi10YWcnKSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgJGZpcnN0T3B0aW9uLnRyaWdnZXIoJ21vdXNlZW50ZXInKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIHJldHVybiBUYWdzU2VhcmNoSGlnaGxpZ2h0O1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9pMThuL2VuJyxbXSxmdW5jdGlvbiAoKSB7XG4gIC8vIEVuZ2xpc2hcbiAgcmV0dXJuIHtcbiAgICBlcnJvckxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nO1xuICAgIH0sXG4gICAgaW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgdmFyIG92ZXJDaGFycyA9IGFyZ3MuaW5wdXQubGVuZ3RoIC0gYXJncy5tYXhpbXVtO1xuXG4gICAgICB2YXIgbWVzc2FnZSA9ICdQbGVhc2UgZGVsZXRlICcgKyBvdmVyQ2hhcnMgKyAnIGNoYXJhY3Rlcic7XG5cbiAgICAgIGlmIChvdmVyQ2hhcnMgIT0gMSkge1xuICAgICAgICBtZXNzYWdlICs9ICdzJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSxcbiAgICBpbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgdmFyIHJlbWFpbmluZ0NoYXJzID0gYXJncy5taW5pbXVtIC0gYXJncy5pbnB1dC5sZW5ndGg7XG5cbiAgICAgIHZhciBtZXNzYWdlID0gJ1BsZWFzZSBlbnRlciAnICsgcmVtYWluaW5nQ2hhcnMgKyAnIG9yIG1vcmUgY2hhcmFjdGVycyc7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgbG9hZGluZ01vcmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAnTG9hZGluZyBtb3JlIHJlc3VsdHPigKYnO1xuICAgIH0sXG4gICAgbWF4aW11bVNlbGVjdGVkOiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnWW91IGNhbiBvbmx5IHNlbGVjdCAnICsgYXJncy5tYXhpbXVtICsgJyBpdGVtJztcblxuICAgICAgaWYgKGFyZ3MubWF4aW11bSAhPSAxKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ3MnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9LFxuICAgIG5vUmVzdWx0czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdObyByZXN1bHRzIGZvdW5kJztcbiAgICB9LFxuICAgIHNlYXJjaGluZzogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdTZWFyY2hpbmfigKYnO1xuICAgIH0sXG4gICAgcmVtb3ZlQWxsSXRlbXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAnUmVtb3ZlIGFsbCBpdGVtcyc7XG4gICAgfSxcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gJ1JlbW92ZSBpdGVtJztcbiAgICB9LFxuICAgIHNlYXJjaDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gJ1NlYXJjaCc7XG4gICAgfVxuICB9O1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kZWZhdWx0cycsW1xuICAnanF1ZXJ5JyxcblxuICAnLi9yZXN1bHRzJyxcblxuICAnLi9zZWxlY3Rpb24vc2luZ2xlJyxcbiAgJy4vc2VsZWN0aW9uL211bHRpcGxlJyxcbiAgJy4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyJyxcbiAgJy4vc2VsZWN0aW9uL2FsbG93Q2xlYXInLFxuICAnLi9zZWxlY3Rpb24vc2VhcmNoJyxcbiAgJy4vc2VsZWN0aW9uL3NlbGVjdGlvbkNzcycsXG4gICcuL3NlbGVjdGlvbi9ldmVudFJlbGF5JyxcblxuICAnLi91dGlscycsXG4gICcuL3RyYW5zbGF0aW9uJyxcbiAgJy4vZGlhY3JpdGljcycsXG5cbiAgJy4vZGF0YS9zZWxlY3QnLFxuICAnLi9kYXRhL2FycmF5JyxcbiAgJy4vZGF0YS9hamF4JyxcbiAgJy4vZGF0YS90YWdzJyxcbiAgJy4vZGF0YS90b2tlbml6ZXInLFxuICAnLi9kYXRhL21pbmltdW1JbnB1dExlbmd0aCcsXG4gICcuL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoJyxcbiAgJy4vZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoJyxcblxuICAnLi9kcm9wZG93bicsXG4gICcuL2Ryb3Bkb3duL3NlYXJjaCcsXG4gICcuL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlcicsXG4gICcuL2Ryb3Bkb3duL2luZmluaXRlU2Nyb2xsJyxcbiAgJy4vZHJvcGRvd24vYXR0YWNoQm9keScsXG4gICcuL2Ryb3Bkb3duL21pbmltdW1SZXN1bHRzRm9yU2VhcmNoJyxcbiAgJy4vZHJvcGRvd24vc2VsZWN0T25DbG9zZScsXG4gICcuL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QnLFxuICAnLi9kcm9wZG93bi9kcm9wZG93bkNzcycsXG4gICcuL2Ryb3Bkb3duL3RhZ3NTZWFyY2hIaWdobGlnaHQnLFxuXG4gICcuL2kxOG4vZW4nXG5dLCBmdW5jdGlvbiAoJCxcblxuICAgICAgICAgICAgIFJlc3VsdHNMaXN0LFxuXG4gICAgICAgICAgICAgU2luZ2xlU2VsZWN0aW9uLCBNdWx0aXBsZVNlbGVjdGlvbiwgUGxhY2Vob2xkZXIsIEFsbG93Q2xlYXIsXG4gICAgICAgICAgICAgU2VsZWN0aW9uU2VhcmNoLCBTZWxlY3Rpb25DU1MsIEV2ZW50UmVsYXksXG5cbiAgICAgICAgICAgICBVdGlscywgVHJhbnNsYXRpb24sIERJQUNSSVRJQ1MsXG5cbiAgICAgICAgICAgICBTZWxlY3REYXRhLCBBcnJheURhdGEsIEFqYXhEYXRhLCBUYWdzLCBUb2tlbml6ZXIsXG4gICAgICAgICAgICAgTWluaW11bUlucHV0TGVuZ3RoLCBNYXhpbXVtSW5wdXRMZW5ndGgsIE1heGltdW1TZWxlY3Rpb25MZW5ndGgsXG5cbiAgICAgICAgICAgICBEcm9wZG93biwgRHJvcGRvd25TZWFyY2gsIEhpZGVQbGFjZWhvbGRlciwgSW5maW5pdGVTY3JvbGwsXG4gICAgICAgICAgICAgQXR0YWNoQm9keSwgTWluaW11bVJlc3VsdHNGb3JTZWFyY2gsIFNlbGVjdE9uQ2xvc2UsIENsb3NlT25TZWxlY3QsXG4gICAgICAgICAgICAgRHJvcGRvd25DU1MsIFRhZ3NTZWFyY2hIaWdobGlnaHQsXG5cbiAgICAgICAgICAgICBFbmdsaXNoVHJhbnNsYXRpb24pIHtcbiAgZnVuY3Rpb24gRGVmYXVsdHMgKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIERlZmF1bHRzLnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLmRhdGFBZGFwdGVyID09IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmFqYXggIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gQWpheERhdGE7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBBcnJheURhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gU2VsZWN0RGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubWluaW11bUlucHV0TGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlcixcbiAgICAgICAgICBNaW5pbXVtSW5wdXRMZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubWF4aW11bUlucHV0TGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlcixcbiAgICAgICAgICBNYXhpbXVtSW5wdXRMZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIsXG4gICAgICAgICAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShvcHRpb25zLmRhdGFBZGFwdGVyLCBUYWdzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudG9rZW5TZXBhcmF0b3JzICE9IG51bGwgfHwgb3B0aW9ucy50b2tlbml6ZXIgIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlcixcbiAgICAgICAgICBUb2tlbml6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyID0gUmVzdWx0c0xpc3Q7XG5cbiAgICAgIGlmIChvcHRpb25zLmFqYXggIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlcixcbiAgICAgICAgICBJbmZpbml0ZVNjcm9sbFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLFxuICAgICAgICAgIEhpZGVQbGFjZWhvbGRlclxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zZWxlY3RPbkNsb3NlKSB7XG4gICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLFxuICAgICAgICAgIFNlbGVjdE9uQ2xvc2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGFncykge1xuICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlcixcbiAgICAgICAgICBUYWdzU2VhcmNoSGlnaGxpZ2h0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID09IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gRHJvcGRvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgU2VhcmNoYWJsZURyb3Bkb3duID0gVXRpbHMuRGVjb3JhdGUoRHJvcGRvd24sIERyb3Bkb3duU2VhcmNoKTtcblxuICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFNlYXJjaGFibGVEcm9wZG93bjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggIT09IDApIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlcixcbiAgICAgICAgICBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIsXG4gICAgICAgICAgQ2xvc2VPblNlbGVjdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kcm9wZG93bkNzc0NsYXNzICE9IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlcixcbiAgICAgICAgICBEcm9wZG93bkNTU1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlcixcbiAgICAgICAgQXR0YWNoQm9keVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID09IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IE11bHRpcGxlU2VsZWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gU2luZ2xlU2VsZWN0aW9uO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdGhlIHBsYWNlaG9sZGVyIG1peGluIGlmIGEgcGxhY2Vob2xkZXIgd2FzIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMucGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsXG4gICAgICAgICAgUGxhY2Vob2xkZXJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuYWxsb3dDbGVhcikge1xuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsXG4gICAgICAgICAgQWxsb3dDbGVhclxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsXG4gICAgICAgICAgU2VsZWN0aW9uU2VhcmNoXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNlbGVjdGlvbkNzc0NsYXNzICE9IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLFxuICAgICAgICAgIFNlbGVjdGlvbkNTU1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyLFxuICAgICAgICBFdmVudFJlbGF5XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBkZWZhdWx0cyB3ZXJlIG5vdCBwcmV2aW91c2x5IGFwcGxpZWQgZnJvbSBhbiBlbGVtZW50LCBpdCBpc1xuICAgIC8vIHBvc3NpYmxlIGZvciB0aGUgbGFuZ3VhZ2Ugb3B0aW9uIHRvIGhhdmUgbm90IGJlZW4gcmVzb2x2ZWRcbiAgICBvcHRpb25zLmxhbmd1YWdlID0gdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG9wdGlvbnMubGFuZ3VhZ2UpO1xuXG4gICAgLy8gQWx3YXlzIGZhbGwgYmFjayB0byBFbmdsaXNoIHNpbmNlIGl0IHdpbGwgYWx3YXlzIGJlIGNvbXBsZXRlXG4gICAgb3B0aW9ucy5sYW5ndWFnZS5wdXNoKCdlbicpO1xuXG4gICAgdmFyIHVuaXF1ZUxhbmd1YWdlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgbCA9IDA7IGwgPCBvcHRpb25zLmxhbmd1YWdlLmxlbmd0aDsgbCsrKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSBvcHRpb25zLmxhbmd1YWdlW2xdO1xuXG4gICAgICBpZiAodW5pcXVlTGFuZ3VhZ2VzLmluZGV4T2YobGFuZ3VhZ2UpID09PSAtMSkge1xuICAgICAgICB1bmlxdWVMYW5ndWFnZXMucHVzaChsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3B0aW9ucy5sYW5ndWFnZSA9IHVuaXF1ZUxhbmd1YWdlcztcblxuICAgIG9wdGlvbnMudHJhbnNsYXRpb25zID0gdGhpcy5fcHJvY2Vzc1RyYW5zbGF0aW9ucyhcbiAgICAgIG9wdGlvbnMubGFuZ3VhZ2UsXG4gICAgICBvcHRpb25zLmRlYnVnXG4gICAgKTtcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuXG4gIERlZmF1bHRzLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBzdHJpcERpYWNyaXRpY3MgKHRleHQpIHtcbiAgICAgIC8vIFVzZWQgJ3VuaSByYW5nZSArIG5hbWVkIGZ1bmN0aW9uJyBmcm9tIGh0dHA6Ly9qc3BlcmYuY29tL2RpYWNyaXRpY3MvMThcbiAgICAgIGZ1bmN0aW9uIG1hdGNoKGEpIHtcbiAgICAgICAgcmV0dXJuIERJQUNSSVRJQ1NbYV0gfHwgYTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvW15cXHUwMDAwLVxcdTAwN0VdL2csIG1hdGNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaGVyIChwYXJhbXMsIGRhdGEpIHtcbiAgICAgIC8vIEFsd2F5cyByZXR1cm4gdGhlIG9iamVjdCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBhcmVcbiAgICAgIGlmIChwYXJhbXMudGVybSA9PSBudWxsIHx8IHBhcmFtcy50ZXJtLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIERvIGEgcmVjdXJzaXZlIGNoZWNrIGZvciBvcHRpb25zIHdpdGggY2hpbGRyZW5cbiAgICAgIGlmIChkYXRhLmNoaWxkcmVuICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBDbG9uZSB0aGUgZGF0YSBvYmplY3QgaWYgdGhlcmUgYXJlIGNoaWxkcmVuXG4gICAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgd2UgbW9kaWZ5IHRoZSBvYmplY3QgdG8gcmVtb3ZlIGFueSBub24tbWF0Y2hlc1xuICAgICAgICB2YXIgbWF0Y2ggPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGF0YSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZWFjaCBjaGlsZCBvZiB0aGUgb3B0aW9uXG4gICAgICAgIGZvciAodmFyIGMgPSBkYXRhLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGMgPj0gMDsgYy0tKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gZGF0YS5jaGlsZHJlbltjXTtcblxuICAgICAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hlcihwYXJhbXMsIGNoaWxkKTtcblxuICAgICAgICAgIC8vIElmIHRoZXJlIHdhc24ndCBhIG1hdGNoLCByZW1vdmUgdGhlIG9iamVjdCBpbiB0aGUgYXJyYXlcbiAgICAgICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBtYXRjaC5jaGlsZHJlbi5zcGxpY2UoYywgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYW55IGNoaWxkcmVuIG1hdGNoZWQsIHJldHVybiB0aGUgbmV3IG9iamVjdFxuICAgICAgICBpZiAobWF0Y2guY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gbWF0Y2hpbmcgY2hpbGRyZW4sIGNoZWNrIGp1c3QgdGhlIHBsYWluIG9iamVjdFxuICAgICAgICByZXR1cm4gbWF0Y2hlcihwYXJhbXMsIG1hdGNoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9yaWdpbmFsID0gc3RyaXBEaWFjcml0aWNzKGRhdGEudGV4dCkudG9VcHBlckNhc2UoKTtcbiAgICAgIHZhciB0ZXJtID0gc3RyaXBEaWFjcml0aWNzKHBhcmFtcy50ZXJtKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgdGV4dCBjb250YWlucyB0aGUgdGVybVxuICAgICAgaWYgKG9yaWdpbmFsLmluZGV4T2YodGVybSkgPiAtMSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQgZG9lc24ndCBjb250YWluIHRoZSB0ZXJtLCBkb24ndCByZXR1cm4gYW55dGhpbmdcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICBhbWRMYW5ndWFnZUJhc2U6ICcuL2kxOG4vJyxcbiAgICAgIGF1dG9jb21wbGV0ZTogJ29mZicsXG4gICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgZHJvcGRvd25BdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgZXNjYXBlTWFya3VwOiBVdGlscy5lc2NhcGVNYXJrdXAsXG4gICAgICBsYW5ndWFnZToge30sXG4gICAgICBtYXRjaGVyOiBtYXRjaGVyLFxuICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAwLFxuICAgICAgbWF4aW11bUlucHV0TGVuZ3RoOiAwLFxuICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMCxcbiAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiAwLFxuICAgICAgc2VsZWN0T25DbG9zZTogZmFsc2UsXG4gICAgICBzY3JvbGxBZnRlclNlbGVjdDogZmFsc2UsXG4gICAgICBzb3J0ZXI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlUmVzdWx0OiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQudGV4dDtcbiAgICAgIH0sXG4gICAgICB0ZW1wbGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24gKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnRleHQ7XG4gICAgICB9LFxuICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcbiAgICAgIHdpZHRoOiAncmVzb2x2ZSdcbiAgICB9O1xuICB9O1xuXG4gIERlZmF1bHRzLnByb3RvdHlwZS5hcHBseUZyb21FbGVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMsICRlbGVtZW50KSB7XG4gICAgdmFyIG9wdGlvbkxhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZTtcbiAgICB2YXIgZGVmYXVsdExhbmd1YWdlID0gdGhpcy5kZWZhdWx0cy5sYW5ndWFnZTtcbiAgICB2YXIgZWxlbWVudExhbmd1YWdlID0gJGVsZW1lbnQucHJvcCgnbGFuZycpO1xuICAgIHZhciBwYXJlbnRMYW5ndWFnZSA9ICRlbGVtZW50LmNsb3Nlc3QoJ1tsYW5nXScpLnByb3AoJ2xhbmcnKTtcblxuICAgIHZhciBsYW5ndWFnZXMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoXG4gICAgICB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoZWxlbWVudExhbmd1YWdlKSxcbiAgICAgIHRoaXMuX3Jlc29sdmVMYW5ndWFnZShvcHRpb25MYW5ndWFnZSksXG4gICAgICB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoZGVmYXVsdExhbmd1YWdlKSxcbiAgICAgIHRoaXMuX3Jlc29sdmVMYW5ndWFnZShwYXJlbnRMYW5ndWFnZSlcbiAgICApO1xuXG4gICAgb3B0aW9ucy5sYW5ndWFnZSA9IGxhbmd1YWdlcztcblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuXG4gIERlZmF1bHRzLnByb3RvdHlwZS5fcmVzb2x2ZUxhbmd1YWdlID0gZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICgkLmlzRW1wdHlPYmplY3QobGFuZ3VhZ2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCQuaXNQbGFpbk9iamVjdChsYW5ndWFnZSkpIHtcbiAgICAgIHJldHVybiBbbGFuZ3VhZ2VdO1xuICAgIH1cblxuICAgIHZhciBsYW5ndWFnZXM7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobGFuZ3VhZ2UpKSB7XG4gICAgICBsYW5ndWFnZXMgPSBbbGFuZ3VhZ2VdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW5ndWFnZXMgPSBsYW5ndWFnZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x2ZWRMYW5ndWFnZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGFuZ3VhZ2VzLmxlbmd0aDsgbCsrKSB7XG4gICAgICByZXNvbHZlZExhbmd1YWdlcy5wdXNoKGxhbmd1YWdlc1tsXSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzW2xdID09PSAnc3RyaW5nJyAmJiBsYW5ndWFnZXNbbF0uaW5kZXhPZignLScpID4gMCkge1xuICAgICAgICAvLyBFeHRyYWN0IHRoZSByZWdpb24gaW5mb3JtYXRpb24gaWYgaXQgaXMgaW5jbHVkZWRcbiAgICAgICAgdmFyIGxhbmd1YWdlUGFydHMgPSBsYW5ndWFnZXNbbF0uc3BsaXQoJy0nKTtcbiAgICAgICAgdmFyIGJhc2VMYW5ndWFnZSA9IGxhbmd1YWdlUGFydHNbMF07XG5cbiAgICAgICAgcmVzb2x2ZWRMYW5ndWFnZXMucHVzaChiYXNlTGFuZ3VhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlZExhbmd1YWdlcztcbiAgfTtcblxuICBEZWZhdWx0cy5wcm90b3R5cGUuX3Byb2Nlc3NUcmFuc2xhdGlvbnMgPSBmdW5jdGlvbiAobGFuZ3VhZ2VzLCBkZWJ1Zykge1xuICAgIHZhciB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb24oKTtcblxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGFuZ3VhZ2VzLmxlbmd0aDsgbCsrKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2VEYXRhID0gbmV3IFRyYW5zbGF0aW9uKCk7XG5cbiAgICAgIHZhciBsYW5ndWFnZSA9IGxhbmd1YWdlc1tsXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBpdCB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lXG4gICAgICAgICAgbGFuZ3VhZ2VEYXRhID0gVHJhbnNsYXRpb24ubG9hZFBhdGgobGFuZ3VhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkbid0IGxvYWQgaXQsIGNoZWNrIGlmIGl0IHdhc24ndCB0aGUgZnVsbCBwYXRoXG4gICAgICAgICAgICBsYW5ndWFnZSA9IHRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlICsgbGFuZ3VhZ2U7XG4gICAgICAgICAgICBsYW5ndWFnZURhdGEgPSBUcmFuc2xhdGlvbi5sb2FkUGF0aChsYW5ndWFnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0cmFuc2xhdGlvbiBjb3VsZCBub3QgYmUgbG9hZGVkIGF0IGFsbC4gU29tZXRpbWVzIHRoaXMgaXNcbiAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgYSBjb25maWd1cmF0aW9uIHByb2JsZW0sIG90aGVyIHRpbWVzIHRoaXMgY2FuIGJlXG4gICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGhvdyBTZWxlY3QyIGhlbHBzIGxvYWQgYWxsIHBvc3NpYmxlIHRyYW5zbGF0aW9uIGZpbGVzXG4gICAgICAgICAgICBpZiAoZGVidWcgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yIFwiJyArIGxhbmd1YWdlICsgJ1wiIGNvdWxkICcgK1xuICAgICAgICAgICAgICAgICdub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkLmlzUGxhaW5PYmplY3QobGFuZ3VhZ2UpKSB7XG4gICAgICAgIGxhbmd1YWdlRGF0YSA9IG5ldyBUcmFuc2xhdGlvbihsYW5ndWFnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYW5ndWFnZURhdGEgPSBsYW5ndWFnZTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNsYXRpb25zLmV4dGVuZChsYW5ndWFnZURhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gIH07XG5cbiAgRGVmYXVsdHMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGNhbWVsS2V5ID0gJC5jYW1lbENhc2Uoa2V5KTtcblxuICAgIHZhciBkYXRhID0ge307XG4gICAgZGF0YVtjYW1lbEtleV0gPSB2YWx1ZTtcblxuICAgIHZhciBjb252ZXJ0ZWREYXRhID0gVXRpbHMuX2NvbnZlcnREYXRhKGRhdGEpO1xuXG4gICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5kZWZhdWx0cywgY29udmVydGVkRGF0YSk7XG4gIH07XG5cbiAgdmFyIGRlZmF1bHRzID0gbmV3IERlZmF1bHRzKCk7XG5cbiAgcmV0dXJuIGRlZmF1bHRzO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9vcHRpb25zJyxbXG4gICdqcXVlcnknLFxuICAnLi9kZWZhdWx0cycsXG4gICcuL3V0aWxzJ1xuXSwgZnVuY3Rpb24gKCQsIERlZmF1bHRzLCBVdGlscykge1xuICBmdW5jdGlvbiBPcHRpb25zIChvcHRpb25zLCAkZWxlbWVudCkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoJGVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mcm9tRWxlbWVudCgkZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKCRlbGVtZW50ICE9IG51bGwpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IERlZmF1bHRzLmFwcGx5RnJvbUVsZW1lbnQodGhpcy5vcHRpb25zLCAkZWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gRGVmYXVsdHMuYXBwbHkodGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIE9wdGlvbnMucHJvdG90eXBlLmZyb21FbGVtZW50ID0gZnVuY3Rpb24gKCRlKSB7XG4gICAgdmFyIGV4Y2x1ZGVkRGF0YSA9IFsnc2VsZWN0MiddO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubXVsdGlwbGUgPSAkZS5wcm9wKCdtdWx0aXBsZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVkID0gJGUucHJvcCgnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9jb21wbGV0ZSA9PSBudWxsICYmICRlLnByb3AoJ2F1dG9jb21wbGV0ZScpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuYXV0b2NvbXBsZXRlID0gJGUucHJvcCgnYXV0b2NvbXBsZXRlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXIgPT0gbnVsbCkge1xuICAgICAgaWYgKCRlLnByb3AoJ2RpcicpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kaXIgPSAkZS5wcm9wKCdkaXInKTtcbiAgICAgIH0gZWxzZSBpZiAoJGUuY2xvc2VzdCgnW2Rpcl0nKS5wcm9wKCdkaXInKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZGlyID0gJGUuY2xvc2VzdCgnW2Rpcl0nKS5wcm9wKCdkaXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kaXIgPSAnbHRyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkZS5wcm9wKCdkaXNhYmxlZCcsIHRoaXMub3B0aW9ucy5kaXNhYmxlZCk7XG4gICAgJGUucHJvcCgnbXVsdGlwbGUnLCB0aGlzLm9wdGlvbnMubXVsdGlwbGUpO1xuXG4gICAgaWYgKFV0aWxzLkdldERhdGEoJGVbMF0sICdzZWxlY3QyVGFncycpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1NlbGVjdDI6IFRoZSBgZGF0YS1zZWxlY3QyLXRhZ3NgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICcgK1xuICAgICAgICAgICd1c2UgdGhlIGBkYXRhLWRhdGFgIGFuZCBgZGF0YS10YWdzPVwidHJ1ZVwiYCBhdHRyaWJ1dGVzIGFuZCB3aWxsIGJlICcgK1xuICAgICAgICAgICdyZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuU3RvcmVEYXRhKCRlWzBdLCAnZGF0YScsIFV0aWxzLkdldERhdGEoJGVbMF0sICdzZWxlY3QyVGFncycpKTtcbiAgICAgIFV0aWxzLlN0b3JlRGF0YSgkZVswXSwgJ3RhZ3MnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdTZWxlY3QyOiBUaGUgYGRhdGEtYWpheC11cmxgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICcgK1xuICAgICAgICAgICdgZGF0YS1hamF4LS11cmxgIGFuZCBzdXBwb3J0IGZvciB0aGUgb2xkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQnICtcbiAgICAgICAgICAnIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgJGUuYXR0cignYWpheC0tdXJsJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSk7XG4gICAgICBVdGlscy5TdG9yZURhdGEoJGVbMF0sICdhamF4LVVybCcsIFV0aWxzLkdldERhdGEoJGVbMF0sICdhamF4VXJsJykpO1xuICAgIH1cblxuICAgIHZhciBkYXRhc2V0ID0ge307XG5cbiAgICBmdW5jdGlvbiB1cHBlckNhc2VMZXR0ZXIoXywgbGV0dGVyKSB7XG4gICAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gUHJlLWxvYWQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBwcmVmaXhlZCB3aXRoIGBkYXRhLWBcbiAgICBmb3IgKHZhciBhdHRyID0gMDsgYXR0ciA8ICRlWzBdLmF0dHJpYnV0ZXMubGVuZ3RoOyBhdHRyKyspIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gJGVbMF0uYXR0cmlidXRlc1thdHRyXS5uYW1lO1xuICAgICAgdmFyIHByZWZpeCA9ICdkYXRhLSc7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVOYW1lLnN1YnN0cigwLCBwcmVmaXgubGVuZ3RoKSA9PSBwcmVmaXgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgYXR0cmlidXRlIGFmdGVyIGBkYXRhLWBcbiAgICAgICAgdmFyIGRhdGFOYW1lID0gYXR0cmlidXRlTmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhIGNvbnRlbnRzIGZyb20gdGhlIGNvbnNpc3RlbnQgc291cmNlXG4gICAgICAgIC8vIFRoaXMgaXMgbW9yZSB0aGFuIGxpa2VseSB0aGUgalF1ZXJ5IGRhdGEgaGVscGVyXG4gICAgICAgIHZhciBkYXRhVmFsdWUgPSBVdGlscy5HZXREYXRhKCRlWzBdLCBkYXRhTmFtZSk7XG5cbiAgICAgICAgLy8gY2FtZWxDYXNlIHRoZSBhdHRyaWJ1dGUgbmFtZSB0byBtYXRjaCB0aGUgc3BlY1xuICAgICAgICB2YXIgY2FtZWxEYXRhTmFtZSA9IGRhdGFOYW1lLnJlcGxhY2UoLy0oW2Etel0pL2csIHVwcGVyQ2FzZUxldHRlcik7XG5cbiAgICAgICAgLy8gU3RvcmUgdGhlIGRhdGEgYXR0cmlidXRlIGNvbnRlbnRzIGludG8gdGhlIGRhdGFzZXQgc2luY2VcbiAgICAgICAgZGF0YXNldFtjYW1lbERhdGFOYW1lXSA9IGRhdGFWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgdGhlIGVsZW1lbnQncyBgZGF0YXNldGAgYXR0cmlidXRlIGlmIGl0IGV4aXN0c1xuICAgIC8vIGpRdWVyeSAxLnggZG9lcyBub3QgY29ycmVjdGx5IGhhbmRsZSBkYXRhIGF0dHJpYnV0ZXMgd2l0aCBtdWx0aXBsZSBkYXNoZXNcbiAgICBpZiAoJC5mbi5qcXVlcnkgJiYgJC5mbi5qcXVlcnkuc3Vic3RyKDAsIDIpID09ICcxLicgJiYgJGVbMF0uZGF0YXNldCkge1xuICAgICAgZGF0YXNldCA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkZVswXS5kYXRhc2V0LCBkYXRhc2V0KTtcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgb3VyIGludGVybmFsIGRhdGEgY2FjaGUgaWYgaXQgZXhpc3RzXG4gICAgdmFyIGRhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgVXRpbHMuR2V0RGF0YSgkZVswXSksIGRhdGFzZXQpO1xuXG4gICAgZGF0YSA9IFV0aWxzLl9jb252ZXJ0RGF0YShkYXRhKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoZXhjbHVkZWREYXRhLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJC5pc1BsYWluT2JqZWN0KHRoaXMub3B0aW9uc1trZXldKSkge1xuICAgICAgICAkLmV4dGVuZCh0aGlzLm9wdGlvbnNba2V5XSwgZGF0YVtrZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gZGF0YVtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIE9wdGlvbnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zW2tleV07XG4gIH07XG5cbiAgT3B0aW9ucy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsKSB7XG4gICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWw7XG4gIH07XG5cbiAgcmV0dXJuIE9wdGlvbnM7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2NvcmUnLFtcbiAgJ2pxdWVyeScsXG4gICcuL29wdGlvbnMnLFxuICAnLi91dGlscycsXG4gICcuL2tleXMnXG5dLCBmdW5jdGlvbiAoJCwgT3B0aW9ucywgVXRpbHMsIEtFWVMpIHtcbiAgdmFyIFNlbGVjdDIgPSBmdW5jdGlvbiAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZWxlbWVudFswXSwgJ3NlbGVjdDInKSAhPSBudWxsKSB7XG4gICAgICBVdGlscy5HZXREYXRhKCRlbGVtZW50WzBdLCAnc2VsZWN0MicpLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG5cbiAgICB0aGlzLmlkID0gdGhpcy5fZ2VuZXJhdGVJZCgkZWxlbWVudCk7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBPcHRpb25zKG9wdGlvbnMsICRlbGVtZW50KTtcblxuICAgIFNlbGVjdDIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG5cbiAgICAvLyBTZXQgdXAgdGhlIHRhYmluZGV4XG5cbiAgICB2YXIgdGFiaW5kZXggPSAkZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpIHx8IDA7XG4gICAgVXRpbHMuU3RvcmVEYXRhKCRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JywgdGFiaW5kZXgpO1xuICAgICRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG5cbiAgICAvLyBTZXQgdXAgY29udGFpbmVycyBhbmQgYWRhcHRlcnNcblxuICAgIHZhciBEYXRhQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ2RhdGFBZGFwdGVyJyk7XG4gICAgdGhpcy5kYXRhQWRhcHRlciA9IG5ldyBEYXRhQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIHZhciAkY29udGFpbmVyID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIHRoaXMuX3BsYWNlQ29udGFpbmVyKCRjb250YWluZXIpO1xuXG4gICAgdmFyIFNlbGVjdGlvbkFkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdzZWxlY3Rpb25BZGFwdGVyJyk7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLiRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5yZW5kZXIoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLnBvc2l0aW9uKHRoaXMuJHNlbGVjdGlvbiwgJGNvbnRhaW5lcik7XG5cbiAgICB2YXIgRHJvcGRvd25BZGFwdGVyID0gdGhpcy5vcHRpb25zLmdldCgnZHJvcGRvd25BZGFwdGVyJyk7XG4gICAgdGhpcy5kcm9wZG93biA9IG5ldyBEcm9wZG93bkFkYXB0ZXIoJGVsZW1lbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy4kZHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duLnJlbmRlcigpO1xuXG4gICAgdGhpcy5kcm9wZG93bi5wb3NpdGlvbih0aGlzLiRkcm9wZG93biwgJGNvbnRhaW5lcik7XG5cbiAgICB2YXIgUmVzdWx0c0FkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdyZXN1bHRzQWRhcHRlcicpO1xuICAgIHRoaXMucmVzdWx0cyA9IG5ldyBSZXN1bHRzQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zLCB0aGlzLmRhdGFBZGFwdGVyKTtcbiAgICB0aGlzLiRyZXN1bHRzID0gdGhpcy5yZXN1bHRzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5yZXN1bHRzLnBvc2l0aW9uKHRoaXMuJHJlc3VsdHMsIHRoaXMuJGRyb3Bkb3duKTtcblxuICAgIC8vIEJpbmQgZXZlbnRzXG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAvLyBCaW5kIHRoZSBjb250YWluZXIgdG8gYWxsIG9mIHRoZSBhZGFwdGVyc1xuICAgIHRoaXMuX2JpbmRBZGFwdGVycygpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYW55IERPTSBldmVudCBoYW5kbGVyc1xuICAgIHRoaXMuX3JlZ2lzdGVyRG9tRXZlbnRzKCk7XG5cbiAgICAvLyBSZWdpc3RlciBhbnkgaW50ZXJuYWwgZXZlbnQgaGFuZGxlcnNcbiAgICB0aGlzLl9yZWdpc3RlckRhdGFFdmVudHMoKTtcbiAgICB0aGlzLl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cygpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMoKTtcbiAgICB0aGlzLl9yZWdpc3RlclJlc3VsdHNFdmVudHMoKTtcbiAgICB0aGlzLl9yZWdpc3RlckV2ZW50cygpO1xuXG4gICAgLy8gU2V0IHRoZSBpbml0aWFsIHN0YXRlXG4gICAgdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChpbml0aWFsRGF0YSkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywge1xuICAgICAgICBkYXRhOiBpbml0aWFsRGF0YVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBIaWRlIHRoZSBvcmlnaW5hbCBzZWxlY3RcbiAgICAkZWxlbWVudFswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlJyk7XG4gICAgJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgLy8gU3luY2hyb25pemUgYW55IG1vbml0b3JlZCBhdHRyaWJ1dGVzXG4gICAgdGhpcy5fc3luY0F0dHJpYnV0ZXMoKTtcblxuICAgIFV0aWxzLlN0b3JlRGF0YSgkZWxlbWVudFswXSwgJ3NlbGVjdDInLCB0aGlzKTtcblxuICAgIC8vIEVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoICRlbGVtZW50LmRhdGEoJ3NlbGVjdDInKS5cbiAgICAkZWxlbWVudC5kYXRhKCdzZWxlY3QyJywgdGhpcyk7XG4gIH07XG5cbiAgVXRpbHMuRXh0ZW5kKFNlbGVjdDIsIFV0aWxzLk9ic2VydmFibGUpO1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9nZW5lcmF0ZUlkID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7XG4gICAgdmFyIGlkID0gJyc7XG5cbiAgICBpZiAoJGVsZW1lbnQuYXR0cignaWQnKSAhPSBudWxsKSB7XG4gICAgICBpZCA9ICRlbGVtZW50LmF0dHIoJ2lkJyk7XG4gICAgfSBlbHNlIGlmICgkZWxlbWVudC5hdHRyKCduYW1lJykgIT0gbnVsbCkge1xuICAgICAgaWQgPSAkZWxlbWVudC5hdHRyKCduYW1lJykgKyAnLScgKyBVdGlscy5nZW5lcmF0ZUNoYXJzKDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCA9IFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7XG4gICAgfVxuXG4gICAgaWQgPSBpZC5yZXBsYWNlKC8oOnxcXC58XFxbfFxcXXwsKS9nLCAnJyk7XG4gICAgaWQgPSAnc2VsZWN0Mi0nICsgaWQ7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3BsYWNlQ29udGFpbmVyID0gZnVuY3Rpb24gKCRjb250YWluZXIpIHtcbiAgICAkY29udGFpbmVyLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fcmVzb2x2ZVdpZHRoKHRoaXMuJGVsZW1lbnQsIHRoaXMub3B0aW9ucy5nZXQoJ3dpZHRoJykpO1xuXG4gICAgaWYgKHdpZHRoICE9IG51bGwpIHtcbiAgICAgICRjb250YWluZXIuY3NzKCd3aWR0aCcsIHdpZHRoKTtcbiAgICB9XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3Jlc29sdmVXaWR0aCA9IGZ1bmN0aW9uICgkZWxlbWVudCwgbWV0aG9kKSB7XG4gICAgdmFyIFdJRFRIID0gL153aWR0aDooKFstK10/KFswLTldKlxcLik/WzAtOV0rKShweHxlbXxleHwlfGlufGNtfG1tfHB0fHBjKSkvaTtcblxuICAgIGlmIChtZXRob2QgPT0gJ3Jlc29sdmUnKSB7XG4gICAgICB2YXIgc3R5bGVXaWR0aCA9IHRoaXMuX3Jlc29sdmVXaWR0aCgkZWxlbWVudCwgJ3N0eWxlJyk7XG5cbiAgICAgIGlmIChzdHlsZVdpZHRoICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlV2lkdGgoJGVsZW1lbnQsICdlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PSAnZWxlbWVudCcpIHtcbiAgICAgIHZhciBlbGVtZW50V2lkdGggPSAkZWxlbWVudC5vdXRlcldpZHRoKGZhbHNlKTtcblxuICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8PSAwKSB7XG4gICAgICAgIHJldHVybiAnYXV0byc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50V2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT0gJ3N0eWxlJykge1xuICAgICAgdmFyIHN0eWxlID0gJGVsZW1lbnQuYXR0cignc3R5bGUnKTtcblxuICAgICAgaWYgKHR5cGVvZihzdHlsZSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cnMgPSBzdHlsZS5zcGxpdCgnOycpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkgPSBpICsgMSkge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIHZhciBtYXRjaGVzID0gYXR0ci5tYXRjaChXSURUSCk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaGVzWzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT0gJ2NvbXB1dGVkc3R5bGUnKSB7XG4gICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRlbGVtZW50WzBdKTtcblxuICAgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUud2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZDtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fYmluZEFkYXB0ZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YUFkYXB0ZXIuYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpO1xuICAgIHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKTtcblxuICAgIHRoaXMuZHJvcGRvd24uYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpO1xuICAgIHRoaXMucmVzdWx0cy5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRG9tRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ2NoYW5nZS5zZWxlY3QyJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtcbiAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKCdmb2N1cy5zZWxlY3QyJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdmb2N1cycsIGV2dCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zeW5jQSA9IFV0aWxzLmJpbmQodGhpcy5fc3luY0F0dHJpYnV0ZXMsIHRoaXMpO1xuICAgIHRoaXMuX3N5bmNTID0gVXRpbHMuYmluZCh0aGlzLl9zeW5jU3VidHJlZSwgdGhpcyk7XG5cbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICBzZWxmLl9zeW5jQSgpO1xuICAgICAgc2VsZi5fc3luY1MobXV0YXRpb25zKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsZW1lbnRbMF0sIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckRhdGFFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5kYXRhQWRhcHRlci5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHtcbiAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlclNlbGVjdGlvbkV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG5vblJlbGF5RXZlbnRzID0gWyd0b2dnbGUnLCAnZm9jdXMnXTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLm9uKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmZvY3VzKHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHtcbiAgICAgIGlmIChub25SZWxheUV2ZW50cy5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuZHJvcGRvd24ub24oJyonLCBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7XG4gICAgICBzZWxmLnRyaWdnZXIobmFtZSwgcGFyYW1zKTtcbiAgICB9KTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucmVzdWx0cy5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHtcbiAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbignZGlzYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLWNvbnRhaW5lci0tZGlzYWJsZWQnKTtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2JsdXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1jb250YWluZXItLWZvY3VzJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdxdWVyeScsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIGlmICghc2VsZi5pc09wZW4oKSkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoJ29wZW4nLCB7fSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkocGFyYW1zLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6YWxsJywge1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgcXVlcnk6IHBhcmFtc1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbigncXVlcnk6YXBwZW5kJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgdGhpcy5kYXRhQWRhcHRlci5xdWVyeShwYXJhbXMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czphcHBlbmQnLCB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBxdWVyeTogcGFyYW1zXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdrZXlwcmVzcycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIHZhciBrZXkgPSBldnQud2hpY2g7XG5cbiAgICAgIGlmIChzZWxmLmlzT3BlbigpKSB7XG4gICAgICAgIGlmIChrZXkgPT09IEtFWVMuRVNDIHx8IChrZXkgPT09IEtFWVMuVVAgJiYgZXZ0LmFsdEtleSkpIHtcbiAgICAgICAgICBzZWxmLmNsb3NlKGV2dCk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtFWVMuRU5URVIgfHwga2V5ID09PSBLRVlTLlRBQikge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpzZWxlY3QnLCB7fSk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmICgoa2V5ID09PSBLRVlTLlNQQUNFICYmIGV2dC5jdHJsS2V5KSkge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czp0b2dnbGUnLCB7fSk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtFWVMuVVApIHtcbiAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6cHJldmlvdXMnLCB7fSk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtFWVMuRE9XTikge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpuZXh0Jywge30pO1xuXG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrZXkgPT09IEtFWVMuRU5URVIgfHwga2V5ID09PSBLRVlTLlNQQUNFIHx8XG4gICAgICAgICAgICAoa2V5ID09PSBLRVlTLkRPV04gJiYgZXZ0LmFsdEtleSkpIHtcbiAgICAgICAgICBzZWxmLm9wZW4oKTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3N5bmNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMub3B0aW9ucy5zZXQoJ2Rpc2FibGVkJywgdGhpcy4kZWxlbWVudC5wcm9wKCdkaXNhYmxlZCcpKTtcblxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyaWdnZXIoJ2Rpc2FibGUnLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlcignZW5hYmxlJywge30pO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5faXNDaGFuZ2VNdXRhdGlvbiA9IGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAobXV0YXRpb25zLmFkZGVkTm9kZXMgJiYgbXV0YXRpb25zLmFkZGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBtdXRhdGlvbnMuYWRkZWROb2Rlcy5sZW5ndGg7IG4rKykge1xuICAgICAgICB2YXIgbm9kZSA9IG11dGF0aW9ucy5hZGRlZE5vZGVzW25dO1xuXG4gICAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG11dGF0aW9ucy5yZW1vdmVkTm9kZXMgJiYgbXV0YXRpb25zLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobXV0YXRpb25zKSkge1xuICAgICAgcmV0dXJuIG11dGF0aW9ucy5zb21lKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gc2VsZi5faXNDaGFuZ2VNdXRhdGlvbihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3N5bmNTdWJ0cmVlID0gZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgIHZhciBjaGFuZ2VkID0gdGhpcy5faXNDaGFuZ2VNdXRhdGlvbihtdXRhdGlvbnMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIE9ubHkgcmUtcHVsbCB0aGUgZGF0YSBpZiB3ZSB0aGluayB0aGVyZSBpcyBhIGNoYW5nZVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcignc2VsZWN0aW9uOnVwZGF0ZScsIHtcbiAgICAgICAgICBkYXRhOiBjdXJyZW50RGF0YVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyaWdnZXIgbWV0aG9kIHRvIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciBwcmUtZXZlbnRzIHdoZW5cbiAgICogdGhlcmUgYXJlIGV2ZW50cyB0aGF0IGNhbiBiZSBwcmV2ZW50ZWQuXG4gICAqL1xuICBTZWxlY3QyLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24gKG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgYWN0dWFsVHJpZ2dlciA9IFNlbGVjdDIuX19zdXBlcl9fLnRyaWdnZXI7XG4gICAgdmFyIHByZVRyaWdnZXJNYXAgPSB7XG4gICAgICAnb3Blbic6ICdvcGVuaW5nJyxcbiAgICAgICdjbG9zZSc6ICdjbG9zaW5nJyxcbiAgICAgICdzZWxlY3QnOiAnc2VsZWN0aW5nJyxcbiAgICAgICd1bnNlbGVjdCc6ICd1bnNlbGVjdGluZycsXG4gICAgICAnY2xlYXInOiAnY2xlYXJpbmcnXG4gICAgfTtcblxuICAgIGlmIChhcmdzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSBpbiBwcmVUcmlnZ2VyTWFwKSB7XG4gICAgICB2YXIgcHJlVHJpZ2dlck5hbWUgPSBwcmVUcmlnZ2VyTWFwW25hbWVdO1xuICAgICAgdmFyIHByZVRyaWdnZXJBcmdzID0ge1xuICAgICAgICBwcmV2ZW50ZWQ6IGZhbHNlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBhcmdzOiBhcmdzXG4gICAgICB9O1xuXG4gICAgICBhY3R1YWxUcmlnZ2VyLmNhbGwodGhpcywgcHJlVHJpZ2dlck5hbWUsIHByZVRyaWdnZXJBcmdzKTtcblxuICAgICAgaWYgKHByZVRyaWdnZXJBcmdzLnByZXZlbnRlZCkge1xuICAgICAgICBhcmdzLnByZXZlbnRlZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFjdHVhbFRyaWdnZXIuY2FsbCh0aGlzLCBuYW1lLCBhcmdzKTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS50b2dnbGVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7fSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyKCdjbG9zZScsIHsgb3JpZ2luYWxFdmVudCA6IGV2dCB9KTtcbiAgfTtcblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBhYnN0cmFjdCB0aGUgXCJlbmFibGVkXCIgKG5vdCBcImRpc2FibGVkXCIpIHN0YXRlIG9mIHRoaXNcbiAgICogb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJuIHt0cnVlfSBpZiB0aGUgaW5zdGFuY2UgaXMgbm90IGRpc2FibGVkLlxuICAgKiBAcmV0dXJuIHtmYWxzZX0gaWYgdGhlIGluc3RhbmNlIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgU2VsZWN0Mi5wcm90b3R5cGUuaXNFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0Rpc2FibGVkKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gYWJzdHJhY3QgdGhlIFwiZGlzYWJsZWRcIiBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybiB7dHJ1ZX0gaWYgdGhlIGRpc2FibGVkIG9wdGlvbiBpcyB0cnVlLlxuICAgKiBAcmV0dXJuIHtmYWxzZX0gaWYgdGhlIGRpc2FibGVkIG9wdGlvbiBpcyBmYWxzZS5cbiAgICovXG4gIFNlbGVjdDIucHJvdG90eXBlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJyk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWxlY3QyLWNvbnRhaW5lci0tb3BlbicpO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLmhhc0ZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgLy8gTm8gbmVlZCB0byByZS10cmlnZ2VyIGZvY3VzIGV2ZW50cyBpZiB3ZSBhcmUgYWxyZWFkeSBmb2N1c2VkXG4gICAgaWYgKHRoaXMuaGFzRm9jdXMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTtcbiAgICB0aGlzLnRyaWdnZXIoJ2ZvY3VzJywge30pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoXCJlbmFibGVcIilgIG1ldGhvZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsJyArXG4gICAgICAgICcgYmUgcmVtb3ZlZCBpbiBsYXRlciBTZWxlY3QyIHZlcnNpb25zLiBVc2UgJGVsZW1lbnQucHJvcChcImRpc2FibGVkXCIpJyArXG4gICAgICAgICcgaW5zdGVhZC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIGFyZ3MgPSBbdHJ1ZV07XG4gICAgfVxuXG4gICAgdmFyIGRpc2FibGVkID0gIWFyZ3NbMF07XG5cbiAgICB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiZcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdTZWxlY3QyOiBEYXRhIGNhbiBubyBsb25nZXIgYmUgc2V0IHVzaW5nIGBzZWxlY3QyKFwiZGF0YVwiKWAuIFlvdSAnICtcbiAgICAgICAgJ3Nob3VsZCBjb25zaWRlciBzZXR0aW5nIHRoZSB2YWx1ZSBpbnN0ZWFkIHVzaW5nIGAkZWxlbWVudC52YWwoKWAuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IFtdO1xuXG4gICAgdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uIChjdXJyZW50RGF0YSkge1xuICAgICAgZGF0YSA9IGN1cnJlbnREYXRhO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUudmFsID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnZGVidWcnKSAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NlbGVjdDI6IFRoZSBgc2VsZWN0MihcInZhbFwiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUnICtcbiAgICAgICAgJyByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC52YWwoKSBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQudmFsKCk7XG4gICAgfVxuXG4gICAgdmFyIG5ld1ZhbCA9IGFyZ3NbMF07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICBuZXdWYWwgPSBuZXdWYWwubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC52YWwobmV3VmFsKS50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgVXRpbHMuUmVtb3ZlRGF0YSh0aGlzLiRjb250YWluZXJbMF0pO1xuICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcblxuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG5cbiAgICB0aGlzLl9zeW5jQSA9IG51bGw7XG4gICAgdGhpcy5fc3luY1MgPSBudWxsO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy5zZWxlY3QyJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcsXG4gICAgVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JykpO1xuXG4gICAgdGhpcy4kZWxlbWVudFswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuICAgIFV0aWxzLlJlbW92ZURhdGEodGhpcy4kZWxlbWVudFswXSk7XG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdzZWxlY3QyJyk7XG5cbiAgICB0aGlzLmRhdGFBZGFwdGVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgdGhpcy5kcm9wZG93bi5kZXN0cm95KCk7XG4gICAgdGhpcy5yZXN1bHRzLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZGF0YUFkYXB0ZXIgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmRyb3Bkb3duID0gbnVsbDtcbiAgICB0aGlzLnJlc3VsdHMgPSBudWxsO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGNvbnRhaW5lciA9ICQoXG4gICAgICAnPHNwYW4gY2xhc3M9XCJzZWxlY3QyIHNlbGVjdDItY29udGFpbmVyXCI+JyArXG4gICAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdGlvblwiPjwvc3Bhbj4nICtcbiAgICAgICAgJzxzcGFuIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj4nICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG5cbiAgICAkY29udGFpbmVyLmF0dHIoJ2RpcicsIHRoaXMub3B0aW9ucy5nZXQoJ2RpcicpKTtcblxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXI7XG5cbiAgICB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0XG4gICAgICAuYWRkKCdzZWxlY3QyLWNvbnRhaW5lci0tJyArIHRoaXMub3B0aW9ucy5nZXQoJ3RoZW1lJykpO1xuXG4gICAgVXRpbHMuU3RvcmVEYXRhKCRjb250YWluZXJbMF0sICdlbGVtZW50JywgdGhpcy4kZWxlbWVudCk7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcjtcbiAgfTtcblxuICByZXR1cm4gU2VsZWN0Mjtcbn0pO1xuXG5TMi5kZWZpbmUoJ2pxdWVyeS1tb3VzZXdoZWVsJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICAvLyBVc2VkIHRvIHNoaW0galF1ZXJ5Lm1vdXNld2hlZWwgZm9yIG5vbi1mdWxsIGJ1aWxkcy5cbiAgcmV0dXJuICQ7XG59KTtcblxuUzIuZGVmaW5lKCdqcXVlcnkuc2VsZWN0MicsW1xuICAnanF1ZXJ5JyxcbiAgJ2pxdWVyeS1tb3VzZXdoZWVsJyxcblxuICAnLi9zZWxlY3QyL2NvcmUnLFxuICAnLi9zZWxlY3QyL2RlZmF1bHRzJyxcbiAgJy4vc2VsZWN0Mi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBfLCBTZWxlY3QyLCBEZWZhdWx0cywgVXRpbHMpIHtcbiAgaWYgKCQuZm4uc2VsZWN0MiA9PSBudWxsKSB7XG4gICAgLy8gQWxsIG1ldGhvZHMgdGhhdCBzaG91bGQgcmV0dXJuIHRoZSBlbGVtZW50XG4gICAgdmFyIHRoaXNNZXRob2RzID0gWydvcGVuJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knXTtcblxuICAgICQuZm4uc2VsZWN0MiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBpbnN0YW5jZU9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgU2VsZWN0MigkKHRoaXMpLCBpbnN0YW5jZU9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciByZXQ7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IFV0aWxzLkdldERhdGEodGhpcywgJ3NlbGVjdDInKTtcblxuICAgICAgICAgIGlmIChpbnN0YW5jZSA9PSBudWxsICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdUaGUgc2VsZWN0MihcXCcnICsgb3B0aW9ucyArICdcXCcpIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuICcgK1xuICAgICAgICAgICAgICAnZWxlbWVudCB0aGF0IGlzIG5vdCB1c2luZyBTZWxlY3QyLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0ID0gaW5zdGFuY2Vbb3B0aW9uc10uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGB0aGlzYFxuICAgICAgICBpZiAodGhpc01ldGhvZHMuaW5kZXhPZihvcHRpb25zKSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyBmb3IgU2VsZWN0MjogJyArIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAoJC5mbi5zZWxlY3QyLmRlZmF1bHRzID09IG51bGwpIHtcbiAgICAkLmZuLnNlbGVjdDIuZGVmYXVsdHMgPSBEZWZhdWx0cztcbiAgfVxuXG4gIHJldHVybiBTZWxlY3QyO1xufSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBBTUQgbG9hZGVyIGNvbmZpZ3VyYXRpb24gc28gaXQgY2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGlzIGZpbGVcbiAgcmV0dXJuIHtcbiAgICBkZWZpbmU6IFMyLmRlZmluZSxcbiAgICByZXF1aXJlOiBTMi5yZXF1aXJlXG4gIH07XG59KCkpO1xuXG4gIC8vIEF1dG9sb2FkIHRoZSBqUXVlcnkgYmluZGluZ3NcbiAgLy8gV2Uga25vdyB0aGF0IGFsbCBvZiB0aGUgbW9kdWxlcyBleGlzdCBhYm92ZSB0aGlzLCBzbyB3ZSdyZSBzYWZlXG4gIHZhciBzZWxlY3QyID0gUzIucmVxdWlyZSgnanF1ZXJ5LnNlbGVjdDInKTtcblxuICAvLyBIb2xkIHRoZSBBTUQgbW9kdWxlIHJlZmVyZW5jZXMgb24gdGhlIGpRdWVyeSBmdW5jdGlvbiB0aGF0IHdhcyBqdXN0IGxvYWRlZFxuICAvLyBUaGlzIGFsbG93cyBTZWxlY3QyIHRvIHVzZSB0aGUgaW50ZXJuYWwgbG9hZGVyIG91dHNpZGUgb2YgdGhpcyBmaWxlLCBzdWNoXG4gIC8vIGFzIGluIHRoZSBsYW5ndWFnZSBmaWxlcy5cbiAgalF1ZXJ5LmZuLnNlbGVjdDIuYW1kID0gUzI7XG5cbiAgLy8gUmV0dXJuIHRoZSBTZWxlY3QyIGluc3RhbmNlIGZvciBhbnlvbmUgd2hvIGlzIGltcG9ydGluZyBpdC5cbiAgcmV0dXJuIHNlbGVjdDI7XG59KSk7XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTAudXNlWzFdIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvZGlzdC9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtMTAudXNlWzJdIS4vZGVmYXVsdC5jc3M/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiaW1wb3J0IHsgY29tcHV0ZWQsIG9wZW5CbG9jaywgY3JlYXRlQmxvY2ssIG1lcmdlUHJvcHMgfSBmcm9tICd2dWUnO1xuXG52YXIgc2NyaXB0ID0ge1xuICBuYW1lOiAnU3ZnVnVlJyxcbiAgcHJvcHM6IHtcbiAgICBpY29uOiBTdHJpbmdcbiAgfSxcblxuICBzZXR1cChwcm9wcykge1xuICAgIGNvbnN0IGljb25QYXRoID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuaWNvbi5yZXBsYWNlKG5ldyBSZWdFeHAoJy4nLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpLCAnZycpLCAnLycpICsgJy5zdmcnKTtcbiAgICBjb25zdCBzdmdTdHJpbmcgPSBjb21wdXRlZCgoKSA9PiByZXF1aXJlKGBzdmctZmlsZXMtcGF0aC8ke2ljb25QYXRoLnZhbHVlfWApLmRlZmF1bHQpO1xuICAgIGNvbnN0IHN2Z0F0dHJpYnV0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBpZiAoIXN2Z1N0cmluZykgcmV0dXJuIHt9O1xuICAgICAgbGV0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHdyYXBwZXIuaW5uZXJIVE1MID0gc3ZnU3RyaW5nLnZhbHVlO1xuICAgICAgbGV0IGF0dHJpYnV0ZXNMaXN0ID0gd3JhcHBlci5maXJzdEVsZW1lbnRDaGlsZC5hdHRyaWJ1dGVzO1xuICAgICAgbGV0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXNMaXN0KS5tYXAoaSA9PiBhdHRyaWJ1dGVzW2F0dHJpYnV0ZXNMaXN0W2ldLm5hbWVdID0gYXR0cmlidXRlc0xpc3RbaV0udmFsdWUpO1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gICAgY29uc3Qgc3ZnQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHN2Z1N0cmluZyA/IHN2Z1N0cmluZy52YWx1ZS5yZXBsYWNlKC9ePHN2Z1tePl0qPnw8XFwvc3ZnPiQvZywgJycpIDogbnVsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN2Z0F0dHJpYnV0ZXMsXG4gICAgICBzdmdDb250ZW50XG4gICAgfTtcbiAgfVxuXG59O1xuXG5mdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlQmxvY2soXCJzdmdcIiwgbWVyZ2VQcm9wcygkc2V0dXAuc3ZnQXR0cmlidXRlcywge1xuICAgIGlubmVySFRNTDogJHNldHVwLnN2Z0NvbnRlbnRcbiAgfSksIG51bGwsIDE2LCBbXCJpbm5lckhUTUxcIl0pO1xufVxuXG5zY3JpcHQucmVuZGVyID0gcmVuZGVyO1xuXG4vLyBJbXBvcnQgdnVlIGNvbXBvbmVudFxuLy8gSUlGRSBpbmplY3RzIGluc3RhbGwgZnVuY3Rpb24gaW50byBjb21wb25lbnQsIGFsbG93aW5nIGNvbXBvbmVudFxuLy8gdG8gYmUgcmVnaXN0ZXJlZCB2aWEgVnVlLnVzZSgpIGFzIHdlbGwgYXMgVnVlLmNvbXBvbmVudCgpLFxuXG52YXIgZW50cnlfZXNtID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIC8vIEdldCBjb21wb25lbnQgaW5zdGFuY2VcbiAgY29uc3QgaW5zdGFsbGFibGUgPSBzY3JpcHQ7IC8vIEF0dGFjaCBpbnN0YWxsIGZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IFZ1ZS51c2UoKVxuXG4gIGluc3RhbGxhYmxlLmluc3RhbGwgPSBhcHAgPT4ge1xuICAgIGFwcC5jb21wb25lbnQoJ1N2Z1Z1ZScsIGluc3RhbGxhYmxlKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFsbGFibGU7XG59KSgpOyAvLyBJdCdzIHBvc3NpYmxlIHRvIGV4cG9zZSBuYW1lZCBleHBvcnRzIHdoZW4gd3JpdGluZyBjb21wb25lbnRzIHRoYXQgY2FuXG4vLyBhbHNvIGJlIHVzZWQgYXMgZGlyZWN0aXZlcywgZXRjLiAtIGVnLiBpbXBvcnQgeyBSb2xsdXBEZW1vRGlyZWN0aXZlIH0gZnJvbSAncm9sbHVwLWRlbW8nO1xuLy8gZXhwb3J0IGNvbnN0IFJvbGx1cERlbW9EaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbmV4cG9ydCBkZWZhdWx0IGVudHJ5X2VzbTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gcnVudGltZSBoZWxwZXIgZm9yIHNldHRpbmcgcHJvcGVydGllcyBvbiBjb21wb25lbnRzXG4vLyBpbiBhIHRyZWUtc2hha2FibGUgd2F5XG5leHBvcnRzLmRlZmF1bHQgPSAoc2ZjLCBwcm9wcykgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHNmYy5fX3ZjY09wdHMgfHwgc2ZjO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBwcm9wcykge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMC51c2VbMV0hLi4vLi4vLi4vdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMC51c2VbMl0hLi9kZWZhdWx0LmNzcz92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9Y3NzXCIiLCJpbXBvcnQgKiBhcyBydW50aW1lRG9tIGZyb20gJ0B2dWUvcnVudGltZS1kb20nO1xuaW1wb3J0IHsgaW5pdEN1c3RvbUZvcm1hdHRlciwgd2FybiwgcmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIgfSBmcm9tICdAdnVlL3J1bnRpbWUtZG9tJztcbmV4cG9ydCAqIGZyb20gJ0B2dWUvcnVudGltZS1kb20nO1xuaW1wb3J0IHsgY29tcGlsZSB9IGZyb20gJ0B2dWUvY29tcGlsZXItZG9tJztcbmltcG9ydCB7IGlzU3RyaW5nLCBOT09QLCBleHRlbmQsIGdlbmVyYXRlQ29kZUZyYW1lIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5mdW5jdGlvbiBpbml0RGV2KCkge1xyXG4gICAge1xyXG4gICAgICAgIGluaXRDdXN0b21Gb3JtYXR0ZXIoKTtcclxuICAgIH1cclxufVxuXG4vLyBUaGlzIGVudHJ5IGlzIHRoZSBcImZ1bGwtYnVpbGRcIiB0aGF0IGluY2x1ZGVzIGJvdGggdGhlIHJ1bnRpbWVcclxuaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgaW5pdERldigpO1xyXG59XHJcbmNvbnN0IGNvbXBpbGVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbmZ1bmN0aW9uIGNvbXBpbGVUb0Z1bmN0aW9uKHRlbXBsYXRlLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoIWlzU3RyaW5nKHRlbXBsYXRlKSkge1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZS5ub2RlVHlwZSkge1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmlubmVySFRNTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGBpbnZhbGlkIHRlbXBsYXRlIG9wdGlvbjogYCwgdGVtcGxhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gTk9PUDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBrZXkgPSB0ZW1wbGF0ZTtcclxuICAgIGNvbnN0IGNhY2hlZCA9IGNvbXBpbGVDYWNoZVtrZXldO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjYWNoZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGVtcGxhdGVbMF0gPT09ICcjJykge1xyXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0ZW1wbGF0ZSk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhZWwpIHtcclxuICAgICAgICAgICAgd2FybihgVGVtcGxhdGUgZWxlbWVudCBub3QgZm91bmQgb3IgaXMgZW1wdHk6ICR7dGVtcGxhdGV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIF9fVU5TQUZFX19cclxuICAgICAgICAvLyBSZWFzb246IHBvdGVudGlhbCBleGVjdXRpb24gb2YgSlMgZXhwcmVzc2lvbnMgaW4gaW4tRE9NIHRlbXBsYXRlLlxyXG4gICAgICAgIC8vIFRoZSB1c2VyIG11c3QgbWFrZSBzdXJlIHRoZSBpbi1ET00gdGVtcGxhdGUgaXMgdHJ1c3RlZC4gSWYgaXQncyByZW5kZXJlZFxyXG4gICAgICAgIC8vIGJ5IHRoZSBzZXJ2ZXIsIHRoZSB0ZW1wbGF0ZSBzaG91bGQgbm90IGNvbnRhaW4gYW55IHVzZXIgZGF0YS5cclxuICAgICAgICB0ZW1wbGF0ZSA9IGVsID8gZWwuaW5uZXJIVE1MIDogYGA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvcHRzID0gZXh0ZW5kKHtcclxuICAgICAgICBob2lzdFN0YXRpYzogdHJ1ZSxcclxuICAgICAgICBvbkVycm9yOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBvbkVycm9yIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uV2FybjogKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gZSA9PiBvbkVycm9yKGUsIHRydWUpIDogTk9PUFxyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgICBpZiAoIW9wdHMuaXNDdXN0b21FbGVtZW50ICYmIHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBvcHRzLmlzQ3VzdG9tRWxlbWVudCA9IHRhZyA9PiAhIWN1c3RvbUVsZW1lbnRzLmdldCh0YWcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBjb2RlIH0gPSBjb21waWxlKHRlbXBsYXRlLCBvcHRzKTtcclxuICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyLCBhc1dhcm5pbmcgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhc1dhcm5pbmdcclxuICAgICAgICAgICAgPyBlcnIubWVzc2FnZVxyXG4gICAgICAgICAgICA6IGBUZW1wbGF0ZSBjb21waWxhdGlvbiBlcnJvcjogJHtlcnIubWVzc2FnZX1gO1xyXG4gICAgICAgIGNvbnN0IGNvZGVGcmFtZSA9IGVyci5sb2MgJiZcclxuICAgICAgICAgICAgZ2VuZXJhdGVDb2RlRnJhbWUodGVtcGxhdGUsIGVyci5sb2Muc3RhcnQub2Zmc2V0LCBlcnIubG9jLmVuZC5vZmZzZXQpO1xyXG4gICAgICAgIHdhcm4oY29kZUZyYW1lID8gYCR7bWVzc2FnZX1cXG4ke2NvZGVGcmFtZX1gIDogbWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgd2lsZGNhcmQgaW1wb3J0IHJlc3VsdHMgaW4gYSBodWdlIG9iamVjdCB3aXRoIGV2ZXJ5IGV4cG9ydFxyXG4gICAgLy8gd2l0aCBrZXlzIHRoYXQgY2Fubm90IGJlIG1hbmdsZWQsIGFuZCBjYW4gYmUgcXVpdGUgaGVhdnkgc2l6ZS13aXNlLlxyXG4gICAgLy8gSW4gdGhlIGdsb2JhbCBidWlsZCB3ZSBrbm93IGBWdWVgIGlzIGF2YWlsYWJsZSBnbG9iYWxseSBzbyB3ZSBjYW4gYXZvaWRcclxuICAgIC8vIHRoZSB3aWxkY2FyZCBvYmplY3QuXHJcbiAgICBjb25zdCByZW5kZXIgPSAobmV3IEZ1bmN0aW9uKCdWdWUnLCBjb2RlKShydW50aW1lRG9tKSk7XHJcbiAgICByZW5kZXIuX3JjID0gdHJ1ZTtcclxuICAgIHJldHVybiAoY29tcGlsZUNhY2hlW2tleV0gPSByZW5kZXIpO1xyXG59XHJcbnJlZ2lzdGVyUnVudGltZUNvbXBpbGVyKGNvbXBpbGVUb0Z1bmN0aW9uKTtcblxuZXhwb3J0IHsgY29tcGlsZVRvRnVuY3Rpb24gYXMgY29tcGlsZSB9O1xuIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWFjdGl2ZSwgcmVmLCBjb21wdXRlZCwgd2F0Y2gsIG9wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVTdHlsZSwgY3JlYXRlRWxlbWVudFZOb2RlLCByZW5kZXJTbG90IH0gZnJvbSAndnVlJztcblxuZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIpO1xufVxuXG52YXIgc2NyaXB0ID0gZGVmaW5lQ29tcG9uZW50KHtcbiAgcHJvcHM6IHtcbiAgICAvLyBTZXRzIHdpZHRoL2RpYW1ldGVyIG9mIHRoZSBpbm5lciBzdHJva2UuXG4gICAgZGlhbWV0ZXI6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgdG90YWwgc3RlcHMvcHJvZ3Jlc3MgdG8gdGhlIGVuZC5cbiAgICB0b3RhbFN0ZXBzOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IDEwXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBpbm5lciBzdHJva2UuXG4gICAgY29tcGxldGVkU3RlcHM6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgc3RhcnQgY29sb3Igb2YgdGhlIGlubmVyIHN0cm9rZSAoZ3JhZGllbnQpLlxuICAgIHN0YXJ0Q29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IFwiIzAwQzU4RVwiXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSBlbmQgY29sb3Igb2YgdGhlIGlubmVyIHN0cm9rZSAoZ3JhZGllbnQpLlxuICAgIHN0b3BDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogXCIjMDBFMEExXCJcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBpbm5lciBzdHJva2UgdG8gYmUgYXBwbGllZCB0byB0aGUgc2hhcGUuXG4gICAgaW5uZXJTdHJva2VDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogXCIjMkY0OTVFXCJcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBzdHJva2UgdG8gYmUgYXBwbGllZCB0byB0aGUgc2hhcGUuXG4gICAgLy8gUmVhZCBtb3JlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3N0cm9rZS13aWR0aFxuICAgIHN0cm9rZVdpZHRoOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAxMFxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgIHdpZHRoIG9mIHRoZSBpbm5lciBzdHJva2UgdG8gYmUgYXBwbGllZCB0byB0aGUgc2hhcGUuXG4gICAgaW5uZXJTdHJva2VXaWR0aDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMTBcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIHNoYXBlIHRvIGJlIHVzZWQgYXQgdGhlIGVuZCBvZiBzdHJva2VkLlxuICAgIC8vIFJlYWQgbW9yZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWNhcFxuICAgIHN0cm9rZUxpbmVjYXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IFwicm91bmRcIlxuICAgIH0sXG4gICAgLy8gU2V0cyBob3cgbG9uZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB0YWtlIHRvIGNvbXBsZXRlIG9uZSBjeWNsZS5cbiAgICAvLyBSZWFkIG1vcmU6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY3NzcmVmL2NzczNfcHJfYW5pbWF0aW9uLWR1cmF0aW9uLmFzcFxuICAgIGFuaW1hdGVTcGVlZDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMTAwMFxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgZnJhbWVzIHBlciBzZWNvbmRzIHRvIHVwZGF0ZSBpbm5lciBzdHJva2UgYW5pbWF0aW9uLlxuICAgIGZwczoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogNjBcbiAgICB9LFxuICAgIC8vIFNldHMgaG93IHRoZSBhbmltYXRpb24gcHJvZ3Jlc3NlcyB0aHJvdWdoIHRoZSBkdXJhdGlvbiBvZiBlYWNoIGN5Y2xlLlxuICAgIC8vIFJlYWQgbW9yZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cbiAgICB0aW1pbmdGdW5jOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBcImxpbmVhclwiXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSBpbm5lciBzdHJva2UgZGlyZWN0aW9uLlxuICAgIGlzQ2xvY2t3aXNlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBzZXR1cChwcm9wcykge1xuICAgIGNvbnN0IGdyYWRpZW50ID0gcmVhY3RpdmUoe1xuICAgICAgZng6IDAuOTksXG4gICAgICBmeTogMC41LFxuICAgICAgY3g6IDAuNSxcbiAgICAgIGN5OiAwLjUsXG4gICAgICByOiAwLjY1XG4gICAgfSk7XG4gICAgY29uc3QgcmFkaWFsR3JhZGllbnRJZCA9IGByZy0ke3JhbmRvbVN0cmluZygpfWA7XG4gICAgY29uc3Qgc3Ryb2tlRGFzaG9mZnNldCA9IHJlZigwKTtcbiAgICBjb25zdCBjdXJyZW50QW5nbGUgPSByZWYoMCk7XG4gICAgY29uc3QgZ3JhZGllbnRBbmltYXRpb24gPSByZWYobnVsbCk7XG4gICAgY29uc3QgcmFkaXVzID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuZGlhbWV0ZXIgLyAyKTtcbiAgICBjb25zdCBpbm5lckNpcmNsZURpYW1ldGVyID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuZGlhbWV0ZXIgLSBwcm9wcy5pbm5lclN0cm9rZVdpZHRoICogMik7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IGNvbXB1dGVkKCgpID0+IE1hdGguUEkgKiBpbm5lckNpcmNsZURpYW1ldGVyLnZhbHVlKTtcbiAgICBjb25zdCBzdGVwU2l6ZSA9IGNvbXB1dGVkKCgpID0+IHByb3BzLnRvdGFsU3RlcHMgPT09IDAgPyAwIDogMTAwIC8gcHJvcHMudG90YWxTdGVwcyk7XG4gICAgY29uc3QgZmluaXNoZWRQZXJjZW50YWdlID0gY29tcHV0ZWQoKCkgPT4gc3RlcFNpemUudmFsdWUgKiBwcm9wcy5jb21wbGV0ZWRTdGVwcyk7XG4gICAgY29uc3QgY2lyY2xlU2xpY2UgPSBjb21wdXRlZCgoKSA9PiAyICogTWF0aC5QSSAvIHByb3BzLnRvdGFsU3RlcHMpO1xuICAgIGNvbnN0IGFuaW1hdGlvbkluY3JlbWVudHMgPSBjb21wdXRlZCgoKSA9PiAxMDAgLyBwcm9wcy5mcHMpO1xuICAgIGNvbnN0IHRvdGFsUG9pbnRzID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuYW5pbWF0ZVNwZWVkIC8gYW5pbWF0aW9uSW5jcmVtZW50cy52YWx1ZSk7XG4gICAgY29uc3QgYW5pbWF0ZVNsaWNlID0gY29tcHV0ZWQoKCkgPT4gY2lyY2xlU2xpY2UudmFsdWUgLyB0b3RhbFBvaW50cy52YWx1ZSk7XG4gICAgY29uc3QgaW5uZXJDaXJjbGVSYWRpdXMgPSBjb21wdXRlZCgoKSA9PiBpbm5lckNpcmNsZURpYW1ldGVyLnZhbHVlIC8gMik7XG4gICAgY29uc3QgY29udGFpbmVyU3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgaGVpZ2h0OiBgJHtwcm9wcy5kaWFtZXRlcn1weGAsXG4gICAgICB3aWR0aDogYCR7cHJvcHMuZGlhbWV0ZXJ9cHhgXG4gICAgfSkpO1xuICAgIGNvbnN0IHByb2dyZXNzU3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgaGVpZ2h0OiBgJHtwcm9wcy5kaWFtZXRlcn1weGAsXG4gICAgICB3aWR0aDogYCR7cHJvcHMuZGlhbWV0ZXJ9cHhgLFxuICAgICAgc3Ryb2tlV2lkdGg6IGAke3Byb3BzLnN0cm9rZVdpZHRofXB4YCxcbiAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IHN0cm9rZURhc2hvZmZzZXQudmFsdWUsXG4gICAgICB0cmFuc2l0aW9uOiBgc3Ryb2tlLWRhc2hvZmZzZXQgJHtwcm9wcy5hbmltYXRlU3BlZWR9bXMgJHtwcm9wcy50aW1pbmdGdW5jfWBcbiAgICB9KSk7XG4gICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgaGVpZ2h0OiBgJHtwcm9wcy5kaWFtZXRlcn1weGAsXG4gICAgICB3aWR0aDogYCR7cHJvcHMuZGlhbWV0ZXJ9cHhgLFxuICAgICAgc3Ryb2tlV2lkdGg6IGAke3Byb3BzLmlubmVyU3Ryb2tlV2lkdGh9cHhgXG4gICAgfSkpO1xuICAgIGNvbnN0IGlubmVyQ2lyY2xlU3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgd2lkdGg6IGAke2lubmVyQ2lyY2xlRGlhbWV0ZXIudmFsdWV9cHhgXG4gICAgfSkpO1xuICAgIHdhdGNoKCgpID0+IFtwcm9wcy5kaWFtZXRlciwgcHJvcHMudG90YWxTdGVwcywgcHJvcHMuY29tcGxldGVkU3RlcHMsIHByb3BzLnN0cm9rZVdpZHRoXSwgY2hhbmdlUHJvZ3Jlc3MsIHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZ2V0UG9pbnRPZkNpcmNsZShhbmdsZSkge1xuICAgICAgY29uc3QgcmFkaXVzID0gMC41O1xuICAgICAgY29uc3QgeCA9IHJhZGl1cyArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICAgIGNvbnN0IHkgPSByYWRpdXMgKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdvdG9Qb2ludCgpIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gZ2V0UG9pbnRPZkNpcmNsZShjdXJyZW50QW5nbGUudmFsdWUpO1xuXG4gICAgICBpZiAocG9pbnQueCAmJiBwb2ludC55KSB7XG4gICAgICAgIGdyYWRpZW50LmZ4ID0gcG9pbnQueDtcbiAgICAgICAgZ3JhZGllbnQuZnkgPSBwb2ludC55O1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpcmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBwcm9wcy5pc0Nsb2Nrd2lzZSA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VQcm9ncmVzcygpIHtcbiAgICAgIHN0cm9rZURhc2hvZmZzZXQudmFsdWUgPSAoMTAwIC0gZmluaXNoZWRQZXJjZW50YWdlLnZhbHVlKSAvIDEwMCAqIGNpcmN1bWZlcmVuY2UudmFsdWUgKiBkaXJlY3Rpb24oKTtcblxuICAgICAgaWYgKGdyYWRpZW50QW5pbWF0aW9uLnZhbHVlKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZ3JhZGllbnRBbmltYXRpb24udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbmdsZU9mZnNldCA9IChwcm9wcy5jb21wbGV0ZWRTdGVwcyAtIDEpICogY2lyY2xlU2xpY2UudmFsdWU7XG4gICAgICBsZXQgaSA9IChjdXJyZW50QW5nbGUudmFsdWUgLSBhbmdsZU9mZnNldCkgLyBhbmltYXRlU2xpY2UudmFsdWU7XG4gICAgICBjb25zdCBpbmNyZW1lbnRlciA9IE1hdGguYWJzKGkgLSB0b3RhbFBvaW50cy52YWx1ZSkgLyB0b3RhbFBvaW50cy52YWx1ZTtcbiAgICAgIGNvbnN0IGlzTW92ZUZvcndhcmQgPSBpIDwgdG90YWxQb2ludHMudmFsdWU7XG4gICAgICBncmFkaWVudEFuaW1hdGlvbi52YWx1ZSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKGlzTW92ZUZvcndhcmQgJiYgaSA+PSB0b3RhbFBvaW50cy52YWx1ZSB8fCAhaXNNb3ZlRm9yd2FyZCAmJiBpIDwgdG90YWxQb2ludHMudmFsdWUpIHtcbiAgICAgICAgICBncmFkaWVudEFuaW1hdGlvbi52YWx1ZSAmJiBjbGVhckludGVydmFsKGdyYWRpZW50QW5pbWF0aW9uLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QW5nbGUudmFsdWUgPSBhbmdsZU9mZnNldCArIGFuaW1hdGVTbGljZS52YWx1ZSAqIGk7XG4gICAgICAgIGdvdG9Qb2ludCgpO1xuICAgICAgICBpICs9IGlzTW92ZUZvcndhcmQgPyBpbmNyZW1lbnRlciA6IC1pbmNyZW1lbnRlcjtcbiAgICAgIH0sIGFuaW1hdGlvbkluY3JlbWVudHMudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBncmFkaWVudEFuaW1hdGlvbixcbiAgICAgIGlubmVyQ2lyY2xlUmFkaXVzLFxuICAgICAgcmFkaWFsR3JhZGllbnRJZCxcbiAgICAgIHN0cm9rZURhc2hvZmZzZXQsXG4gICAgICBpbm5lckNpcmNsZVN0eWxlLFxuICAgICAgY29udGFpbmVyU3R5bGUsXG4gICAgICBjaXJjdW1mZXJlbmNlLFxuICAgICAgcHJvZ3Jlc3NTdHlsZSxcbiAgICAgIGN1cnJlbnRBbmdsZSxcbiAgICAgIHN0cm9rZVN0eWxlLFxuICAgICAgZ3JhZGllbnQsXG4gICAgICByYWRpdXNcbiAgICB9O1xuICB9XG5cbn0pO1xuXG5jb25zdCBfaG9pc3RlZF8xID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIl07XG5jb25zdCBfaG9pc3RlZF8yID0gW1wiaWRcIiwgXCJmeFwiLCBcImZ5XCIsIFwiY3hcIiwgXCJjeVwiLCBcInJcIl07XG5jb25zdCBfaG9pc3RlZF8zID0gW1wic3RvcC1jb2xvclwiXTtcbmNvbnN0IF9ob2lzdGVkXzQgPSBbXCJzdG9wLWNvbG9yXCJdO1xuY29uc3QgX2hvaXN0ZWRfNSA9IFtcInJcIiwgXCJjeFwiLCBcImN5XCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1saW5lY2FwXCJdO1xuY29uc3QgX2hvaXN0ZWRfNiA9IFtcInRyYW5zZm9ybVwiLCBcInJcIiwgXCJjeFwiLCBcImN5XCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWxpbmVjYXBcIl07XG5mdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJ2cnBfX3dyYXBwZXJcIixcbiAgICBzdHlsZTogbm9ybWFsaXplU3R5bGUoX2N0eC5jb250YWluZXJTdHlsZSlcbiAgfSwgW2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwidnJwX19pbm5lclwiLFxuICAgIHN0eWxlOiBub3JtYWxpemVTdHlsZShfY3R4LmlubmVyQ2lyY2xlU3R5bGUpXG4gIH0sIFtyZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImRlZmF1bHRcIildLCA0KSwgKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwge1xuICAgIHdpZHRoOiBfY3R4LmRpYW1ldGVyLFxuICAgIGhlaWdodDogX2N0eC5kaWFtZXRlcixcbiAgICB2ZXJzaW9uOiBcIjEuMVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgW2NyZWF0ZUVsZW1lbnRWTm9kZShcImRlZnNcIiwgbnVsbCwgW2NyZWF0ZUVsZW1lbnRWTm9kZShcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogX2N0eC5yYWRpYWxHcmFkaWVudElkLFxuICAgIGZ4OiBfY3R4LmdyYWRpZW50LmZ4LFxuICAgIGZ5OiBfY3R4LmdyYWRpZW50LmZ5LFxuICAgIGN4OiBfY3R4LmdyYWRpZW50LmN4LFxuICAgIGN5OiBfY3R4LmdyYWRpZW50LmN5LFxuICAgIHI6IF9jdHguZ3JhZGllbnQuclxuICB9LCBbY3JlYXRlRWxlbWVudFZOb2RlKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIFwic3RvcC1jb2xvclwiOiBfY3R4LnN0YXJ0Q29sb3JcbiAgfSwgbnVsbCwgOCwgX2hvaXN0ZWRfMyksIGNyZWF0ZUVsZW1lbnRWTm9kZShcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgXCJzdG9wLWNvbG9yXCI6IF9jdHguc3RvcENvbG9yXG4gIH0sIG51bGwsIDgsIF9ob2lzdGVkXzQpXSwgOCwgX2hvaXN0ZWRfMildKSwgY3JlYXRlRWxlbWVudFZOb2RlKFwiY2lyY2xlXCIsIHtcbiAgICByOiBfY3R4LmlubmVyQ2lyY2xlUmFkaXVzLFxuICAgIGN4OiBfY3R4LnJhZGl1cyxcbiAgICBjeTogX2N0eC5yYWRpdXMsXG4gICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIHN0cm9rZTogX2N0eC5pbm5lclN0cm9rZUNvbG9yLFxuICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBfY3R4LmNpcmN1bWZlcmVuY2UsXG4gICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcIjBcIixcbiAgICBcInN0cm9rZS1saW5lY2FwXCI6IF9jdHguc3Ryb2tlTGluZWNhcCxcbiAgICBzdHlsZTogbm9ybWFsaXplU3R5bGUoX2N0eC5zdHJva2VTdHlsZSlcbiAgfSwgbnVsbCwgMTIsIF9ob2lzdGVkXzUpLCBjcmVhdGVFbGVtZW50Vk5vZGUoXCJjaXJjbGVcIiwge1xuICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgyNzAsICcgKyBfY3R4LnJhZGl1cyArICcsJyArIF9jdHgucmFkaXVzICsgJyknLFxuICAgIHI6IF9jdHguaW5uZXJDaXJjbGVSYWRpdXMsXG4gICAgY3g6IF9jdHgucmFkaXVzLFxuICAgIGN5OiBfY3R4LnJhZGl1cyxcbiAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXG4gICAgc3Ryb2tlOiBgdXJsKCcjJHtfY3R4LnJhZGlhbEdyYWRpZW50SWR9JylgLFxuICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBfY3R4LmNpcmN1bWZlcmVuY2UsXG4gICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBfY3R4LmNpcmN1bWZlcmVuY2UsXG4gICAgXCJzdHJva2UtbGluZWNhcFwiOiBfY3R4LnN0cm9rZUxpbmVjYXAsXG4gICAgc3R5bGU6IG5vcm1hbGl6ZVN0eWxlKF9jdHgucHJvZ3Jlc3NTdHlsZSlcbiAgfSwgbnVsbCwgMTIsIF9ob2lzdGVkXzYpXSwgOCwgX2hvaXN0ZWRfMSkpXSwgNCk7XG59XG5cbmZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIGNzc18yNDh6ID0gXCJcXG4udnJwX193cmFwcGVyW2RhdGEtdi02YTBjZjFmNl0ge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udnJwX19pbm5lcltkYXRhLXYtNmEwY2YxZjZdIHtcXHJcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHJpZ2h0OiAwO1xcclxcbiAgYm90dG9tOiAwO1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gIG1hcmdpbjogMCBhdXRvO1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcclxcblwiO1xuc3R5bGVJbmplY3QoY3NzXzI0OHopO1xuXG5zY3JpcHQucmVuZGVyID0gcmVuZGVyO1xuc2NyaXB0Ll9fc2NvcGVJZCA9IFwiZGF0YS12LTZhMGNmMWY2XCI7XG5cbi8vIElJRkUgaW5qZWN0cyBpbnN0YWxsIGZ1bmN0aW9uIGludG8gY29tcG9uZW50LCBhbGxvd2luZyBjb21wb25lbnRcbi8vIHRvIGJlIHJlZ2lzdGVyZWQgdmlhIFZ1ZS51c2UoKSBhcyB3ZWxsIGFzIFZ1ZS5jb21wb25lbnQoKSxcblxudmFyIGVudHJ5X2VzbSA9IC8qI19fUFVSRV9fKi8oKCkgPT4ge1xuICAvLyBBc3NpZ24gSW5zdGFsbGFibGVDb21wb25lbnQgdHlwZVxuICBjb25zdCBpbnN0YWxsYWJsZSA9IHNjcmlwdDsgLy8gQXR0YWNoIGluc3RhbGwgZnVuY3Rpb24gZXhlY3V0ZWQgYnkgVnVlLnVzZSgpXG5cbiAgaW5zdGFsbGFibGUuaW5zdGFsbCA9IGFwcCA9PiB7XG4gICAgYXBwLmNvbXBvbmVudChcIlJhZGlhbFByb2dyZXNzQmFyXCIsIGluc3RhbGxhYmxlKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFsbGFibGU7XG59KSgpOyAvLyBJdCdzIHBvc3NpYmxlIHRvIGV4cG9zZSBuYW1lZCBleHBvcnRzIHdoZW4gd3JpdGluZyBjb21wb25lbnRzIHRoYXQgY2FuXG4vLyBhbHNvIGJlIHVzZWQgYXMgZGlyZWN0aXZlcywgZXRjLiAtIGVnLiBpbXBvcnQgeyBSb2xsdXBEZW1vRGlyZWN0aXZlIH0gZnJvbSAncm9sbHVwLWRlbW8nO1xuLy8gZXhwb3J0IGNvbnN0IFJvbGx1cERlbW9EaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbmV4cG9ydCB7IGVudHJ5X2VzbSBhcyBkZWZhdWx0IH07XG4iLCIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLlZ1ZVNtb290aFNjcm9sbD10KCk6ZS5WdWVTbW9vdGhTY3JvbGw9dCgpfSh0aGlzLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKG8pe2lmKHRbb10pcmV0dXJuIHRbb10uZXhwb3J0czt2YXIgcj10W29dPXtpOm8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtvXS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxuKSxyLmw9ITAsci5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LG8pe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpvfSl9LG4ucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG89T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIobyksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciByIGluIGUpbi5kKG8scixmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLHIpKTtyZXR1cm4gb30sbi5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBuLmQodCxcImFcIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD1cIlwiLG4obi5zPTApfShbZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuKHI9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfXZhciBpO24ucih0KTt2YXIgdT1mdW5jdGlvbihlKXtyZXR1cm4gZTwuNT80KmUqZSplOihlLTEpKigyKmUtMikqKDIqZS0yKSsxfSxjPWZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxvZmZzZXQ6MCxjb250YWluZXI6d2luZG93LHVwZGF0ZUhpc3Rvcnk6ITAsZWFzaW5nRnVuY3Rpb246bnVsbH19LGw9U3ltYm9sKFwic21vb3RoU2Nyb2xsQ3R4XCIpLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxUbyxuPWUub2Zmc2V0LG89ZS5kdXJhdGlvbixyPWUuY29udGFpbmVyLGM9ZS51cGRhdGVIaXN0b3J5LGw9ZS5oYXNoLGY9ZS5lYXNpbmdGdW5jdGlvbjtpfHwoaT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSwxNil9KSxjJiZ3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUmJmxvY2F0aW9uLmhhc2ghPT1sJiZ3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoXCJcIixcIlwiLGwpO3ZhciBhLHMsZD1cIm51bWJlclwiPT10eXBlb2YgdCxwPXIuc2Nyb2xsVG9wfHx3aW5kb3cucGFnZVlPZmZzZXQseT0oZD90OihzPXAsXCJIVE1MXCI9PT0oYT10KS5ub2RlTmFtZT8tczphLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtzKSkrbixiPVwiZnVuY3Rpb25cIj09dHlwZW9mIGY/Zjp1LG09RGF0ZS5ub3coKTshZnVuY3Rpb24gZSgpe3ZhciBuPURhdGUubm93KCktbSx1PW48byxsPXU/cCsoeS1wKSpiKG4vbyk6eTt1P2koZSk6YyYmIWQmJmxvY2F0aW9uLnJlcGxhY2UoXCIjXCIrdC5pZCkscj09PXdpbmRvdz9yLnNjcm9sbFRvKDAsbCk6ci5zY3JvbGxUb3A9bH0oKX0sYT17aW5zdGFsbDpmdW5jdGlvbihlLHQpe3ZhciBuLGk9IWUudmVyc2lvbi5zdGFydHNXaXRoKFwiM1wiKSx1PWZ1bmN0aW9uKCl7cmV0dXJuIHQ/T2JqZWN0LmFzc2lnbihjKCksdCk6YygpfTtlLmRpcmVjdGl2ZShcInNtb290aC1zY3JvbGxcIiwobyhuPXt9LGk/XCJpbnNlcnRlZFwiOlwibW91bnRlZFwiLChmdW5jdGlvbihlLHQsbil7aWYoXCJvYmplY3RcIj09PShcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P1widW5kZWZpbmVkXCI6cih3aW5kb3cpKSYmdm9pZCAwIT09d2luZG93LnBhZ2VZT2Zmc2V0KXt2YXIgbz1PYmplY3QuYXNzaWduKHUoKSx0LnZhbHVlKTtcInN0cmluZ1wiPT10eXBlb2Ygby5jb250YWluZXImJihvLmNvbnRhaW5lcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG8uY29udGFpbmVyKSk7dmFyIGM9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWk/bi5kYXRhLmF0dHJzLmhyZWY6bi5wcm9wcy5ocmVmLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodC5zdWJzdHJpbmcoMSkpO3ImJmYoT2JqZWN0LmFzc2lnbihvLHtzY3JvbGxUbzpyLGhhc2g6dH0pKX07ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixjKSxlW2xdPXtjbGlja0hhbmRsZXI6Y319fSkpLG8obixpP1widW5iaW5kXCI6XCJ1bm1vdW50ZWRcIiwoZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixlW2xdLmNsaWNrSGFuZGxlciksZVtsXT1udWxsfSkpLG4pKTt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuYXNzaWduKHUoKSxlKTtyZXR1cm4gZih0KX07KGk/ZS5wcm90b3R5cGU6ZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcykuJHNtb290aFNjcm9sbD1hLGl8fGUucHJvdmlkZShcInNtb290aFNjcm9sbFwiLGEpfX07dC5kZWZhdWx0PWF9XSkuZGVmYXVsdH0pKTsiLCIvKiFcbiAqIHZ1ZXggdjQuMC4yXG4gKiAoYykgMjAyMSBFdmFuIFlvdVxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmltcG9ydCB7IGluamVjdCwgcmVhY3RpdmUsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IHNldHVwRGV2dG9vbHNQbHVnaW4gfSBmcm9tICdAdnVlL2RldnRvb2xzLWFwaSc7XG5cbnZhciBzdG9yZUtleSA9ICdzdG9yZSc7XG5cbmZ1bmN0aW9uIHVzZVN0b3JlIChrZXkpIHtcbiAgaWYgKCBrZXkgPT09IHZvaWQgMCApIGtleSA9IG51bGw7XG5cbiAgcmV0dXJuIGluamVjdChrZXkgIT09IG51bGwgPyBrZXkgOiBzdG9yZUtleSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBmaW5kIChsaXN0LCBmKSB7XG4gIHJldHVybiBsaXN0LmZpbHRlcihmKVswXVxufVxuXG4vKipcbiAqIERlZXAgY29weSB0aGUgZ2l2ZW4gb2JqZWN0IGNvbnNpZGVyaW5nIGNpcmN1bGFyIHN0cnVjdHVyZS5cbiAqIFRoaXMgZnVuY3Rpb24gY2FjaGVzIGFsbCBuZXN0ZWQgb2JqZWN0cyBhbmQgaXRzIGNvcGllcy5cbiAqIElmIGl0IGRldGVjdHMgY2lyY3VsYXIgc3RydWN0dXJlLCB1c2UgY2FjaGVkIGNvcHkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjYWNoZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gZGVlcENvcHkgKG9iaiwgY2FjaGUpIHtcbiAgaWYgKCBjYWNoZSA9PT0gdm9pZCAwICkgY2FjaGUgPSBbXTtcblxuICAvLyBqdXN0IHJldHVybiBpZiBvYmogaXMgaW1tdXRhYmxlIHZhbHVlXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb2JqXG4gIH1cblxuICAvLyBpZiBvYmogaXMgaGl0LCBpdCBpcyBpbiBjaXJjdWxhciBzdHJ1Y3R1cmVcbiAgdmFyIGhpdCA9IGZpbmQoY2FjaGUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLm9yaWdpbmFsID09PSBvYmo7IH0pO1xuICBpZiAoaGl0KSB7XG4gICAgcmV0dXJuIGhpdC5jb3B5XG4gIH1cblxuICB2YXIgY29weSA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG4gIC8vIHB1dCB0aGUgY29weSBpbnRvIGNhY2hlIGF0IGZpcnN0XG4gIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byByZWZlciBpdCBpbiByZWN1cnNpdmUgZGVlcENvcHlcbiAgY2FjaGUucHVzaCh7XG4gICAgb3JpZ2luYWw6IG9iaixcbiAgICBjb3B5OiBjb3B5XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0sIGNhY2hlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvcHlcbn1cblxuLyoqXG4gKiBmb3JFYWNoIGZvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZm9yRWFjaFZhbHVlIChvYmosIGZuKSB7XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihvYmpba2V5XSwga2V5KTsgfSk7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gdmFsICYmIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbXNnKSB7XG4gIGlmICghY29uZGl0aW9uKSB7IHRocm93IG5ldyBFcnJvcigoXCJbdnVleF0gXCIgKyBtc2cpKSB9XG59XG5cbmZ1bmN0aW9uIHBhcnRpYWwgKGZuLCBhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZm4oYXJnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNTdWJzY3JpYmUgKGZuLCBzdWJzLCBvcHRpb25zKSB7XG4gIGlmIChzdWJzLmluZGV4T2YoZm4pIDwgMCkge1xuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5wcmVwZW5kXG4gICAgICA/IHN1YnMudW5zaGlmdChmbilcbiAgICAgIDogc3Vicy5wdXNoKGZuKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gc3Vicy5pbmRleE9mKGZuKTtcbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICBzdWJzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdG9yZSAoc3RvcmUsIGhvdCkge1xuICBzdG9yZS5fYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fd3JhcHBlZEdldHRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBzdGF0ZSA9IHN0b3JlLnN0YXRlO1xuICAvLyBpbml0IGFsbCBtb2R1bGVzXG4gIGluc3RhbGxNb2R1bGUoc3RvcmUsIHN0YXRlLCBbXSwgc3RvcmUuX21vZHVsZXMucm9vdCwgdHJ1ZSk7XG4gIC8vIHJlc2V0IHN0YXRlXG4gIHJlc2V0U3RvcmVTdGF0ZShzdG9yZSwgc3RhdGUsIGhvdCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RvcmVTdGF0ZSAoc3RvcmUsIHN0YXRlLCBob3QpIHtcbiAgdmFyIG9sZFN0YXRlID0gc3RvcmUuX3N0YXRlO1xuXG4gIC8vIGJpbmQgc3RvcmUgcHVibGljIGdldHRlcnNcbiAgc3RvcmUuZ2V0dGVycyA9IHt9O1xuICAvLyByZXNldCBsb2NhbCBnZXR0ZXJzIGNhY2hlXG4gIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgd3JhcHBlZEdldHRlcnMgPSBzdG9yZS5fd3JhcHBlZEdldHRlcnM7XG4gIHZhciBjb21wdXRlZE9iaiA9IHt9O1xuICBmb3JFYWNoVmFsdWUod3JhcHBlZEdldHRlcnMsIGZ1bmN0aW9uIChmbiwga2V5KSB7XG4gICAgLy8gdXNlIGNvbXB1dGVkIHRvIGxldmVyYWdlIGl0cyBsYXp5LWNhY2hpbmcgbWVjaGFuaXNtXG4gICAgLy8gZGlyZWN0IGlubGluZSBmdW5jdGlvbiB1c2Ugd2lsbCBsZWFkIHRvIGNsb3N1cmUgcHJlc2VydmluZyBvbGRTdGF0ZS5cbiAgICAvLyB1c2luZyBwYXJ0aWFsIHRvIHJldHVybiBmdW5jdGlvbiB3aXRoIG9ubHkgYXJndW1lbnRzIHByZXNlcnZlZCBpbiBjbG9zdXJlIGVudmlyb25tZW50LlxuICAgIGNvbXB1dGVkT2JqW2tleV0gPSBwYXJ0aWFsKGZuLCBzdG9yZSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLmdldHRlcnMsIGtleSwge1xuICAgICAgLy8gVE9ETzogdXNlIGBjb21wdXRlZGAgd2hlbiBpdCdzIHBvc3NpYmxlLiBhdCB0aGUgbW9tZW50IHdlIGNhbid0IGR1ZSB0b1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvcHVsbC8xODgzXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXB1dGVkT2JqW2tleV0oKTsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUgLy8gZm9yIGxvY2FsIGdldHRlcnNcbiAgICB9KTtcbiAgfSk7XG5cbiAgc3RvcmUuX3N0YXRlID0gcmVhY3RpdmUoe1xuICAgIGRhdGE6IHN0YXRlXG4gIH0pO1xuXG4gIC8vIGVuYWJsZSBzdHJpY3QgbW9kZSBmb3IgbmV3IHN0YXRlXG4gIGlmIChzdG9yZS5zdHJpY3QpIHtcbiAgICBlbmFibGVTdHJpY3RNb2RlKHN0b3JlKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSkge1xuICAgIGlmIChob3QpIHtcbiAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZXMgaW4gYWxsIHN1YnNjcmliZWQgd2F0Y2hlcnNcbiAgICAgIC8vIHRvIGZvcmNlIGdldHRlciByZS1ldmFsdWF0aW9uIGZvciBob3QgcmVsb2FkaW5nLlxuICAgICAgc3RvcmUuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbGRTdGF0ZS5kYXRhID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLCBtb2R1bGUsIGhvdCkge1xuICB2YXIgaXNSb290ID0gIXBhdGgubGVuZ3RoO1xuICB2YXIgbmFtZXNwYWNlID0gc3RvcmUuX21vZHVsZXMuZ2V0TmFtZXNwYWNlKHBhdGgpO1xuXG4gIC8vIHJlZ2lzdGVyIGluIG5hbWVzcGFjZSBtYXBcbiAgaWYgKG1vZHVsZS5uYW1lc3BhY2VkKSB7XG4gICAgaWYgKHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSBkdXBsaWNhdGUgbmFtZXNwYWNlIFwiICsgbmFtZXNwYWNlICsgXCIgZm9yIHRoZSBuYW1lc3BhY2VkIG1vZHVsZSBcIiArIChwYXRoLmpvaW4oJy8nKSkpKTtcbiAgICB9XG4gICAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSA9IG1vZHVsZTtcbiAgfVxuXG4gIC8vIHNldCBzdGF0ZVxuICBpZiAoIWlzUm9vdCAmJiAhaG90KSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUocm9vdFN0YXRlLCBwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgdmFyIG1vZHVsZU5hbWUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgc3RvcmUuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgICBpZiAobW9kdWxlTmFtZSBpbiBwYXJlbnRTdGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIChcIlt2dWV4XSBzdGF0ZSBmaWVsZCBcXFwiXCIgKyBtb2R1bGVOYW1lICsgXCJcXFwiIHdhcyBvdmVycmlkZGVuIGJ5IGEgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhdCBcXFwiXCIgKyAocGF0aC5qb2luKCcuJykpICsgXCJcXFwiXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50U3RhdGVbbW9kdWxlTmFtZV0gPSBtb2R1bGUuc3RhdGU7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgbG9jYWwgPSBtb2R1bGUuY29udGV4dCA9IG1ha2VMb2NhbENvbnRleHQoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCk7XG5cbiAgbW9kdWxlLmZvckVhY2hNdXRhdGlvbihmdW5jdGlvbiAobXV0YXRpb24sIGtleSkge1xuICAgIHZhciBuYW1lc3BhY2VkVHlwZSA9IG5hbWVzcGFjZSArIGtleTtcbiAgICByZWdpc3Rlck11dGF0aW9uKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgbXV0YXRpb24sIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hBY3Rpb24oZnVuY3Rpb24gKGFjdGlvbiwga2V5KSB7XG4gICAgdmFyIHR5cGUgPSBhY3Rpb24ucm9vdCA/IGtleSA6IG5hbWVzcGFjZSArIGtleTtcbiAgICB2YXIgaGFuZGxlciA9IGFjdGlvbi5oYW5kbGVyIHx8IGFjdGlvbjtcbiAgICByZWdpc3RlckFjdGlvbihzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaEdldHRlcihmdW5jdGlvbiAoZ2V0dGVyLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJHZXR0ZXIoc3RvcmUsIG5hbWVzcGFjZWRUeXBlLCBnZXR0ZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hDaGlsZChmdW5jdGlvbiAoY2hpbGQsIGtleSkge1xuICAgIGluc3RhbGxNb2R1bGUoc3RvcmUsIHJvb3RTdGF0ZSwgcGF0aC5jb25jYXQoa2V5KSwgY2hpbGQsIGhvdCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIG1ha2UgbG9jYWxpemVkIGRpc3BhdGNoLCBjb21taXQsIGdldHRlcnMgYW5kIHN0YXRlXG4gKiBpZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UsIGp1c3QgdXNlIHJvb3Qgb25lc1xuICovXG5mdW5jdGlvbiBtYWtlTG9jYWxDb250ZXh0IChzdG9yZSwgbmFtZXNwYWNlLCBwYXRoKSB7XG4gIHZhciBub05hbWVzcGFjZSA9IG5hbWVzcGFjZSA9PT0gJyc7XG5cbiAgdmFyIGxvY2FsID0ge1xuICAgIGRpc3BhdGNoOiBub05hbWVzcGFjZSA/IHN0b3JlLmRpc3BhdGNoIDogZnVuY3Rpb24gKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpIHtcbiAgICAgIHZhciBhcmdzID0gdW5pZnlPYmplY3RTdHlsZShfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKTtcbiAgICAgIHZhciBwYXlsb2FkID0gYXJncy5wYXlsb2FkO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmdzLm9wdGlvbnM7XG4gICAgICB2YXIgdHlwZSA9IGFyZ3MudHlwZTtcblxuICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnJvb3QpIHtcbiAgICAgICAgdHlwZSA9IG5hbWVzcGFjZSArIHR5cGU7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIXN0b3JlLl9hY3Rpb25zW3R5cGVdKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBsb2NhbCBhY3Rpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKHR5cGUsIHBheWxvYWQpXG4gICAgfSxcblxuICAgIGNvbW1pdDogbm9OYW1lc3BhY2UgPyBzdG9yZS5jb21taXQgOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgc3RhdGUgdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIGlmICghc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdKSB7XG4gICAgdmFyIGdldHRlcnNQcm94eSA9IHt9O1xuICAgIHZhciBzcGxpdFBvcyA9IG5hbWVzcGFjZS5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICAgIGlmICh0eXBlLnNsaWNlKDAsIHNwbGl0UG9zKSAhPT0gbmFtZXNwYWNlKSB7IHJldHVybiB9XG5cbiAgICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgICAgLy8gQWRkIGEgcG9ydCB0byB0aGUgZ2V0dGVycyBwcm94eS5cbiAgICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnNQcm94eSwgbG9jYWxUeXBlLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdID0gZ2V0dGVyc1Byb3h5O1xuICB9XG5cbiAgcmV0dXJuIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGVbbmFtZXNwYWNlXVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQpO1xuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgIH1cbiAgICBpZiAoc3RvcmUuX2RldnRvb2xIb29rKSB7XG4gICAgICByZXR1cm4gcmVzLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgc3RvcmUuX2RldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6ZXJyb3InLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckdldHRlciAoc3RvcmUsIHR5cGUsIHJhd0dldHRlciwgbG9jYWwpIHtcbiAgaWYgKHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSkge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIGR1cGxpY2F0ZSBnZXR0ZXIga2V5OiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdID0gZnVuY3Rpb24gd3JhcHBlZEdldHRlciAoc3RvcmUpIHtcbiAgICByZXR1cm4gcmF3R2V0dGVyKFxuICAgICAgbG9jYWwuc3RhdGUsIC8vIGxvY2FsIHN0YXRlXG4gICAgICBsb2NhbC5nZXR0ZXJzLCAvLyBsb2NhbCBnZXR0ZXJzXG4gICAgICBzdG9yZS5zdGF0ZSwgLy8gcm9vdCBzdGF0ZVxuICAgICAgc3RvcmUuZ2V0dGVycyAvLyByb290IGdldHRlcnNcbiAgICApXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuYWJsZVN0cmljdE1vZGUgKHN0b3JlKSB7XG4gIHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLl9zdGF0ZS5kYXRhOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgYXNzZXJ0KHN0b3JlLl9jb21taXR0aW5nLCBcImRvIG5vdCBtdXRhdGUgdnVleCBzdG9yZSBzdGF0ZSBvdXRzaWRlIG11dGF0aW9uIGhhbmRsZXJzLlwiKTtcbiAgICB9XG4gIH0sIHsgZGVlcDogdHJ1ZSwgZmx1c2g6ICdzeW5jJyB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TmVzdGVkU3RhdGUgKHN0YXRlLCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAoc3RhdGUsIGtleSkgeyByZXR1cm4gc3RhdGVba2V5XTsgfSwgc3RhdGUpXG59XG5cbmZ1bmN0aW9uIHVuaWZ5T2JqZWN0U3R5bGUgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KHR5cGUpICYmIHR5cGUudHlwZSkge1xuICAgIG9wdGlvbnMgPSBwYXlsb2FkO1xuICAgIHBheWxvYWQgPSB0eXBlO1xuICAgIHR5cGUgPSB0eXBlLnR5cGU7XG4gIH1cblxuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJywgKFwiZXhwZWN0cyBzdHJpbmcgYXMgdGhlIHR5cGUsIGJ1dCBmb3VuZCBcIiArICh0eXBlb2YgdHlwZSkgKyBcIi5cIikpO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCwgb3B0aW9uczogb3B0aW9ucyB9XG59XG5cbnZhciBMQUJFTF9WVUVYX0JJTkRJTkdTID0gJ3Z1ZXggYmluZGluZ3MnO1xudmFyIE1VVEFUSU9OU19MQVlFUl9JRCA9ICd2dWV4Om11dGF0aW9ucyc7XG52YXIgQUNUSU9OU19MQVlFUl9JRCA9ICd2dWV4OmFjdGlvbnMnO1xudmFyIElOU1BFQ1RPUl9JRCA9ICd2dWV4JztcblxudmFyIGFjdGlvbklkID0gMDtcblxuZnVuY3Rpb24gYWRkRGV2dG9vbHMgKGFwcCwgc3RvcmUpIHtcbiAgc2V0dXBEZXZ0b29sc1BsdWdpbihcbiAgICB7XG4gICAgICBpZDogJ29yZy52dWVqcy52dWV4JyxcbiAgICAgIGFwcDogYXBwLFxuICAgICAgbGFiZWw6ICdWdWV4JyxcbiAgICAgIGhvbWVwYWdlOiAnaHR0cHM6Ly9uZXh0LnZ1ZXgudnVlanMub3JnLycsXG4gICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICAgIHBhY2thZ2VOYW1lOiAndnVleCcsXG4gICAgICBjb21wb25lbnRTdGF0ZVR5cGVzOiBbTEFCRUxfVlVFWF9CSU5ESU5HU11cbiAgICB9LFxuICAgIGZ1bmN0aW9uIChhcGkpIHtcbiAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgaWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgbGFiZWw6ICdWdWV4IE11dGF0aW9ucycsXG4gICAgICAgIGNvbG9yOiBDT0xPUl9MSU1FXzUwMFxuICAgICAgfSk7XG5cbiAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgaWQ6IEFDVElPTlNfTEFZRVJfSUQsXG4gICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgY29sb3I6IENPTE9SX0xJTUVfNTAwXG4gICAgICB9KTtcblxuICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XG4gICAgICAgIGlkOiBJTlNQRUNUT1JfSUQsXG4gICAgICAgIGxhYmVsOiAnVnVleCcsXG4gICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgdHJlZUZpbHRlclBsYWNlaG9sZGVyOiAnRmlsdGVyIHN0b3Jlcy4uLidcbiAgICAgIH0pO1xuXG4gICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZShmdW5jdGlvbiAocGF5bG9hZCkge1xuICAgICAgICBpZiAocGF5bG9hZC5hcHAgPT09IGFwcCAmJiBwYXlsb2FkLmluc3BlY3RvcklkID09PSBJTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZC5maWx0ZXIpIHtcbiAgICAgICAgICAgIHZhciBub2RlcyA9IFtdO1xuICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gW1xuICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJycpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGFwaS5vbi5nZXRJbnNwZWN0b3JTdGF0ZShmdW5jdGlvbiAocGF5bG9hZCkge1xuICAgICAgICBpZiAocGF5bG9hZC5hcHAgPT09IGFwcCAmJiBwYXlsb2FkLmluc3BlY3RvcklkID09PSBJTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgIG1ha2VMb2NhbEdldHRlcnMoc3RvcmUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKFxuICAgICAgICAgICAgZ2V0U3RvcmVNb2R1bGUoc3RvcmUuX21vZHVsZXMsIG1vZHVsZVBhdGgpLFxuICAgICAgICAgICAgbW9kdWxlUGF0aCA9PT0gJ3Jvb3QnID8gc3RvcmUuZ2V0dGVycyA6IHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsXG4gICAgICAgICAgICBtb2R1bGVQYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGFwaS5vbi5lZGl0SW5zcGVjdG9yU3RhdGUoZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgICAgICAgaWYgKHBheWxvYWQuYXBwID09PSBhcHAgJiYgcGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgdmFyIG1vZHVsZVBhdGggPSBwYXlsb2FkLm5vZGVJZDtcbiAgICAgICAgICB2YXIgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICBpZiAobW9kdWxlUGF0aCAhPT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICBwYXRoID0gbW9kdWxlUGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKS5jb25jYXQoIHBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnNldChzdG9yZS5fc3RhdGUuZGF0YSwgcGF0aCwgcGF5bG9hZC5zdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZSkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgZGF0YS5wYXlsb2FkID0gbXV0YXRpb24ucGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XG4gICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShJTlNQRUNUT1JfSUQpO1xuICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XG5cbiAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHRpdGxlOiBtdXRhdGlvbi50eXBlLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc3RvcmUuc3Vic2NyaWJlQWN0aW9uKHtcbiAgICAgICAgYmVmb3JlOiBmdW5jdGlvbiAoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uLl9pZCA9IGFjdGlvbklkKys7XG4gICAgICAgICAgYWN0aW9uLl90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICBsYXllcklkOiBBQ1RJT05TX0xBWUVSX0lELFxuICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgdGltZTogYWN0aW9uLl90aW1lLFxuICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgIHN1YnRpdGxlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyOiBmdW5jdGlvbiAoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgdmFyIGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIGFjdGlvbi5fdGltZTtcbiAgICAgICAgICBkYXRhLmR1cmF0aW9uID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICB0eXBlOiAnZHVyYXRpb24nLFxuICAgICAgICAgICAgICBkaXNwbGF5OiAoZHVyYXRpb24gKyBcIm1zXCIpLFxuICAgICAgICAgICAgICB0b29sdGlwOiAnQWN0aW9uIGR1cmF0aW9uJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICBsYXllcklkOiBBQ1RJT05TX0xBWUVSX0lELFxuICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICBncm91cElkOiBhY3Rpb24uX2lkLFxuICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2VuZCcsXG4gICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICApO1xufVxuXG4vLyBleHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG52YXIgQ09MT1JfTElNRV81MDAgPSAweDg0Y2MxNjtcbnZhciBDT0xPUl9EQVJLID0gMHg2NjY2NjY7XG52YXIgQ09MT1JfV0hJVEUgPSAweGZmZmZmZjtcblxudmFyIFRBR19OQU1FU1BBQ0VEID0ge1xuICBsYWJlbDogJ25hbWVzcGFjZWQnLFxuICB0ZXh0Q29sb3I6IENPTE9SX1dISVRFLFxuICBiYWNrZ3JvdW5kQ29sb3I6IENPTE9SX0RBUktcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5hbWVGcm9tUGF0aCAocGF0aCkge1xuICByZXR1cm4gcGF0aCAmJiBwYXRoICE9PSAncm9vdCcgPyBwYXRoLnNwbGl0KCcvJykuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlXG4gKiBAcmV0dXJuIHtpbXBvcnQoJ0B2dWUvZGV2dG9vbHMtYXBpJykuQ3VzdG9tSW5zcGVjdG9yTm9kZX1cbiAqL1xuZnVuY3Rpb24gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlIChtb2R1bGUsIHBhdGgpIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGF0aCB8fCAncm9vdCcsXG4gICAgLy8gYWxsIG1vZHVsZXMgZW5kIHdpdGggYSBgL2AsIHdlIHdhbnQgdGhlIGxhc3Qgc2VnbWVudCBvbmx5XG4gICAgLy8gY2FydC8gLT4gY2FydFxuICAgIC8vIG5lc3RlZC9jYXJ0LyAtPiBjYXJ0XG4gICAgbGFiZWw6IGV4dHJhY3ROYW1lRnJvbVBhdGgocGF0aCksXG4gICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKG1vZHVsZS5fY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAobW9kdWxlTmFtZSkgeyByZXR1cm4gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKFxuICAgICAgICBtb2R1bGUuX2NoaWxkcmVuW21vZHVsZU5hbWVdLFxuICAgICAgICBwYXRoICsgbW9kdWxlTmFtZSArICcvJ1xuICAgICAgKTsgfVxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCdAdnVlL2RldnRvb2xzLWFwaScpLkN1c3RvbUluc3BlY3Rvck5vZGVbXX0gcmVzdWx0XG4gKiBAcGFyYW0geyp9IG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZSAocmVzdWx0LCBtb2R1bGUsIGZpbHRlciwgcGF0aCkge1xuICBpZiAocGF0aC5pbmNsdWRlcyhmaWx0ZXIpKSB7XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgaWQ6IHBhdGggfHwgJ3Jvb3QnLFxuICAgICAgbGFiZWw6IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW11cbiAgICB9KTtcbiAgfVxuICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIGZpbHRlciwgcGF0aCArIG1vZHVsZU5hbWUgKyAnLycpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IG1vZHVsZVxuICogQHJldHVybiB7aW1wb3J0KCdAdnVlL2RldnRvb2xzLWFwaScpLkN1c3RvbUluc3BlY3RvclN0YXRlfVxuICovXG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlIChtb2R1bGUsIGdldHRlcnMsIHBhdGgpIHtcbiAgZ2V0dGVycyA9IHBhdGggPT09ICdyb290JyA/IGdldHRlcnMgOiBnZXR0ZXJzW3BhdGhdO1xuICB2YXIgZ2V0dGVyc0tleXMgPSBPYmplY3Qua2V5cyhnZXR0ZXJzKTtcbiAgdmFyIHN0b3JlU3RhdGUgPSB7XG4gICAgc3RhdGU6IE9iamVjdC5rZXlzKG1vZHVsZS5zdGF0ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1vZHVsZS5zdGF0ZVtrZXldXG4gICAgfSk7IH0pXG4gIH07XG5cbiAgaWYgKGdldHRlcnNLZXlzLmxlbmd0aCkge1xuICAgIHZhciB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoZ2V0dGVycyk7XG4gICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7XG4gICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IGNhblRocm93KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyZWVba2V5XTsgfSlcbiAgICB9KTsgfSk7XG4gIH1cblxuICByZXR1cm4gc3RvcmVTdGF0ZVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZSAoZ2V0dGVycykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIE9iamVjdC5rZXlzKGdldHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIHRhcmdldCA9IHJlc3VsdDtcbiAgICAgIHZhciBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgIHBhdGguZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICBpZiAoIXRhcmdldFtwXSkge1xuICAgICAgICAgIHRhcmdldFtwXSA9IHtcbiAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICB0b29sdGlwOiAnTW9kdWxlJyxcbiAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldCA9IHRhcmdldFtwXS5fY3VzdG9tLnZhbHVlO1xuICAgICAgfSk7XG4gICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXR0ZXJzW2tleV07IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNhblRocm93KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldHRlcnNba2V5XTsgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBnZXRTdG9yZU1vZHVsZSAobW9kdWxlTWFwLCBwYXRoKSB7XG4gIHZhciBuYW1lcyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG47IH0pO1xuICByZXR1cm4gbmFtZXMucmVkdWNlKFxuICAgIGZ1bmN0aW9uIChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpIHtcbiAgICAgIHZhciBjaGlsZCA9IG1vZHVsZVttb2R1bGVOYW1lXTtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcIk1pc3NpbmcgbW9kdWxlIFxcXCJcIiArIG1vZHVsZU5hbWUgKyBcIlxcXCIgZm9yIHBhdGggXFxcIlwiICsgcGF0aCArIFwiXFxcIi5cIikpXG4gICAgICB9XG4gICAgICByZXR1cm4gaSA9PT0gbmFtZXMubGVuZ3RoIC0gMSA/IGNoaWxkIDogY2hpbGQuX2NoaWxkcmVuXG4gICAgfSxcbiAgICBwYXRoID09PSAncm9vdCcgPyBtb2R1bGVNYXAgOiBtb2R1bGVNYXAucm9vdC5fY2hpbGRyZW5cbiAgKVxufVxuXG5mdW5jdGlvbiBjYW5UaHJvdyAoY2IpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY2IoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGVcbiAgfVxufVxuXG4vLyBCYXNlIGRhdGEgc3RydWN0IGZvciBzdG9yZSdzIG1vZHVsZSwgcGFja2FnZSB3aXRoIHNvbWUgYXR0cmlidXRlIGFuZCBtZXRob2RcbnZhciBNb2R1bGUgPSBmdW5jdGlvbiBNb2R1bGUgKHJhd01vZHVsZSwgcnVudGltZSkge1xuICB0aGlzLnJ1bnRpbWUgPSBydW50aW1lO1xuICAvLyBTdG9yZSBzb21lIGNoaWxkcmVuIGl0ZW1cbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSBvYmplY3Qgd2hpY2ggcGFzc2VkIGJ5IHByb2dyYW1tZXJcbiAgdGhpcy5fcmF3TW9kdWxlID0gcmF3TW9kdWxlO1xuICB2YXIgcmF3U3RhdGUgPSByYXdNb2R1bGUuc3RhdGU7XG5cbiAgLy8gU3RvcmUgdGhlIG9yaWdpbiBtb2R1bGUncyBzdGF0ZVxuICB0aGlzLnN0YXRlID0gKHR5cGVvZiByYXdTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHJhd1N0YXRlKCkgOiByYXdTdGF0ZSkgfHwge307XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzJDEgPSB7IG5hbWVzcGFjZWQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzJDEubmFtZXNwYWNlZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhIXRoaXMuX3Jhd01vZHVsZS5uYW1lc3BhY2VkXG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24gYWRkQ2hpbGQgKGtleSwgbW9kdWxlKSB7XG4gIHRoaXMuX2NoaWxkcmVuW2tleV0gPSBtb2R1bGU7XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGQgKGtleSkge1xuICBkZWxldGUgdGhpcy5fY2hpbGRyZW5ba2V5XTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbiBnZXRDaGlsZCAoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9jaGlsZHJlbltrZXldXG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmhhc0NoaWxkID0gZnVuY3Rpb24gaGFzQ2hpbGQgKGtleSkge1xuICByZXR1cm4ga2V5IGluIHRoaXMuX2NoaWxkcmVuXG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAocmF3TW9kdWxlKSB7XG4gIHRoaXMuX3Jhd01vZHVsZS5uYW1lc3BhY2VkID0gcmF3TW9kdWxlLm5hbWVzcGFjZWQ7XG4gIGlmIChyYXdNb2R1bGUuYWN0aW9ucykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5hY3Rpb25zID0gcmF3TW9kdWxlLmFjdGlvbnM7XG4gIH1cbiAgaWYgKHJhd01vZHVsZS5tdXRhdGlvbnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zID0gcmF3TW9kdWxlLm11dGF0aW9ucztcbiAgfVxuICBpZiAocmF3TW9kdWxlLmdldHRlcnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycyA9IHJhd01vZHVsZS5nZXR0ZXJzO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hDaGlsZCA9IGZ1bmN0aW9uIGZvckVhY2hDaGlsZCAoZm4pIHtcbiAgZm9yRWFjaFZhbHVlKHRoaXMuX2NoaWxkcmVuLCBmbik7XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hHZXR0ZXIgPSBmdW5jdGlvbiBmb3JFYWNoR2V0dGVyIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLmdldHRlcnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLmdldHRlcnMsIGZuKTtcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoQWN0aW9uID0gZnVuY3Rpb24gZm9yRWFjaEFjdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5hY3Rpb25zKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5hY3Rpb25zLCBmbik7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaE11dGF0aW9uID0gZnVuY3Rpb24gZm9yRWFjaE11dGF0aW9uIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zLCBmbik7XG4gIH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBNb2R1bGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMkMSApO1xuXG52YXIgTW9kdWxlQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIE1vZHVsZUNvbGxlY3Rpb24gKHJhd1Jvb3RNb2R1bGUpIHtcbiAgLy8gcmVnaXN0ZXIgcm9vdCBtb2R1bGUgKFZ1ZXguU3RvcmUgb3B0aW9ucylcbiAgdGhpcy5yZWdpc3RlcihbXSwgcmF3Um9vdE1vZHVsZSwgZmFsc2UpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobW9kdWxlLCBrZXkpIHtcbiAgICByZXR1cm4gbW9kdWxlLmdldENoaWxkKGtleSlcbiAgfSwgdGhpcy5yb290KVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24gZ2V0TmFtZXNwYWNlIChwYXRoKSB7XG4gIHZhciBtb2R1bGUgPSB0aGlzLnJvb3Q7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBrZXkpIHtcbiAgICBtb2R1bGUgPSBtb2R1bGUuZ2V0Q2hpbGQoa2V5KTtcbiAgICByZXR1cm4gbmFtZXNwYWNlICsgKG1vZHVsZS5uYW1lc3BhY2VkID8ga2V5ICsgJy8nIDogJycpXG4gIH0sICcnKVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlJDEgKHJhd1Jvb3RNb2R1bGUpIHtcbiAgdXBkYXRlKFtdLCB0aGlzLnJvb3QsIHJhd1Jvb3RNb2R1bGUpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlciAocGF0aCwgcmF3TW9kdWxlLCBydW50aW1lKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcbiAgICBpZiAoIHJ1bnRpbWUgPT09IHZvaWQgMCApIHJ1bnRpbWUgPSB0cnVlO1xuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnRSYXdNb2R1bGUocGF0aCwgcmF3TW9kdWxlKTtcbiAgfVxuXG4gIHZhciBuZXdNb2R1bGUgPSBuZXcgTW9kdWxlKHJhd01vZHVsZSwgcnVudGltZSk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRoaXMucm9vdCA9IG5ld01vZHVsZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHBhcmVudC5hZGRDaGlsZChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyByZWdpc3RlciBuZXN0ZWQgbW9kdWxlc1xuICBpZiAocmF3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlLm1vZHVsZXMsIGZ1bmN0aW9uIChyYXdDaGlsZE1vZHVsZSwga2V5KSB7XG4gICAgICB0aGlzJDEkMS5yZWdpc3RlcihwYXRoLmNvbmNhdChrZXkpLCByYXdDaGlsZE1vZHVsZSwgcnVudGltZSk7XG4gICAgfSk7XG4gIH1cbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyIChwYXRoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gIHZhciBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChrZXkpO1xuXG4gIGlmICghY2hpbGQpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW3Z1ZXhdIHRyeWluZyB0byB1bnJlZ2lzdGVyIG1vZHVsZSAnXCIgKyBrZXkgKyBcIicsIHdoaWNoIGlzIFwiICtcbiAgICAgICAgXCJub3QgcmVnaXN0ZXJlZFwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghY2hpbGQucnVudGltZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgcGFyZW50LnJlbW92ZUNoaWxkKGtleSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbiBpc1JlZ2lzdGVyZWQgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5oYXNDaGlsZChrZXkpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZSAocGF0aCwgdGFyZ2V0TW9kdWxlLCBuZXdNb2R1bGUpIHtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRhcmdldCBtb2R1bGVcbiAgdGFyZ2V0TW9kdWxlLnVwZGF0ZShuZXdNb2R1bGUpO1xuXG4gIC8vIHVwZGF0ZSBuZXN0ZWQgbW9kdWxlc1xuICBpZiAobmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICAgIGlmICghdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSkpIHtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiW3Z1ZXhdIHRyeWluZyB0byBhZGQgYSBuZXcgbW9kdWxlICdcIiArIGtleSArIFwiJyBvbiBob3QgcmVsb2FkaW5nLCBcIiArXG4gICAgICAgICAgICAnbWFudWFsIHJlbG9hZCBpcyBuZWVkZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShcbiAgICAgICAgcGF0aC5jb25jYXQoa2V5KSxcbiAgICAgICAgdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSksXG4gICAgICAgIG5ld01vZHVsZS5tb2R1bGVzW2tleV1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmdW5jdGlvbkFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbidcbn07XG5cbnZhciBvYmplY3RBc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24gb3Igb2JqZWN0IHdpdGggXCJoYW5kbGVyXCIgZnVuY3Rpb24nXG59O1xuXG52YXIgYXNzZXJ0VHlwZXMgPSB7XG4gIGdldHRlcnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBtdXRhdGlvbnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBhY3Rpb25zOiBvYmplY3RBc3NlcnRcbn07XG5cbmZ1bmN0aW9uIGFzc2VydFJhd01vZHVsZSAocGF0aCwgcmF3TW9kdWxlKSB7XG4gIE9iamVjdC5rZXlzKGFzc2VydFR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIXJhd01vZHVsZVtrZXldKSB7IHJldHVybiB9XG5cbiAgICB2YXIgYXNzZXJ0T3B0aW9ucyA9IGFzc2VydFR5cGVzW2tleV07XG5cbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlW2tleV0sIGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBhc3NlcnRPcHRpb25zLmFzc2VydCh2YWx1ZSksXG4gICAgICAgIG1ha2VBc3NlcnRpb25NZXNzYWdlKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGFzc2VydE9wdGlvbnMuZXhwZWN0ZWQpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZUFzc2VydGlvbk1lc3NhZ2UgKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGV4cGVjdGVkKSB7XG4gIHZhciBidWYgPSBrZXkgKyBcIiBzaG91bGQgYmUgXCIgKyBleHBlY3RlZCArIFwiIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIi5cIiArIHR5cGUgKyBcIlxcXCJcIjtcbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgIGJ1ZiArPSBcIiBpbiBtb2R1bGUgXFxcIlwiICsgKHBhdGguam9pbignLicpKSArIFwiXFxcIlwiO1xuICB9XG4gIGJ1ZiArPSBcIiBpcyBcIiArIChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpICsgXCIuXCI7XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmUgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBTdG9yZShvcHRpb25zKVxufVxuXG52YXIgU3RvcmUgPSBmdW5jdGlvbiBTdG9yZSAob3B0aW9ucykge1xuICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJywgXCJ2dWV4IHJlcXVpcmVzIGEgUHJvbWlzZSBwb2x5ZmlsbCBpbiB0aGlzIGJyb3dzZXIuXCIpO1xuICAgIGFzc2VydCh0aGlzIGluc3RhbmNlb2YgU3RvcmUsIFwic3RvcmUgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yLlwiKTtcbiAgfVxuXG4gIHZhciBwbHVnaW5zID0gb3B0aW9ucy5wbHVnaW5zOyBpZiAoIHBsdWdpbnMgPT09IHZvaWQgMCApIHBsdWdpbnMgPSBbXTtcbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0OyBpZiAoIHN0cmljdCA9PT0gdm9pZCAwICkgc3RyaWN0ID0gZmFsc2U7XG4gIHZhciBkZXZ0b29scyA9IG9wdGlvbnMuZGV2dG9vbHM7XG5cbiAgLy8gc3RvcmUgaW50ZXJuYWwgc3RhdGVcbiAgdGhpcy5fY29tbWl0dGluZyA9IGZhbHNlO1xuICB0aGlzLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMgPSBbXTtcbiAgdGhpcy5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fd3JhcHBlZEdldHRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9tb2R1bGVzID0gbmV3IE1vZHVsZUNvbGxlY3Rpb24ob3B0aW9ucyk7XG4gIHRoaXMuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9kZXZ0b29scyA9IGRldnRvb2xzO1xuXG4gIC8vIGJpbmQgY29tbWl0IGFuZCBkaXNwYXRjaCB0byBzZWxmXG4gIHZhciBzdG9yZSA9IHRoaXM7XG4gIHZhciByZWYgPSB0aGlzO1xuICB2YXIgZGlzcGF0Y2ggPSByZWYuZGlzcGF0Y2g7XG4gIHZhciBjb21taXQgPSByZWYuY29tbWl0O1xuICB0aGlzLmRpc3BhdGNoID0gZnVuY3Rpb24gYm91bmREaXNwYXRjaCAodHlwZSwgcGF5bG9hZCkge1xuICAgIHJldHVybiBkaXNwYXRjaC5jYWxsKHN0b3JlLCB0eXBlLCBwYXlsb2FkKVxuICB9O1xuICB0aGlzLmNvbW1pdCA9IGZ1bmN0aW9uIGJvdW5kQ29tbWl0ICh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbW1pdC5jYWxsKHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBvcHRpb25zKVxuICB9O1xuXG4gIC8vIHN0cmljdCBtb2RlXG4gIHRoaXMuc3RyaWN0ID0gc3RyaWN0O1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX21vZHVsZXMucm9vdC5zdGF0ZTtcblxuICAvLyBpbml0IHJvb3QgbW9kdWxlLlxuICAvLyB0aGlzIGFsc28gcmVjdXJzaXZlbHkgcmVnaXN0ZXJzIGFsbCBzdWItbW9kdWxlc1xuICAvLyBhbmQgY29sbGVjdHMgYWxsIG1vZHVsZSBnZXR0ZXJzIGluc2lkZSB0aGlzLl93cmFwcGVkR2V0dGVyc1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHN0YXRlLCBbXSwgdGhpcy5fbW9kdWxlcy5yb290KTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBzdG9yZSBzdGF0ZSwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSByZWFjdGl2aXR5XG4gIC8vIChhbHNvIHJlZ2lzdGVycyBfd3JhcHBlZEdldHRlcnMgYXMgY29tcHV0ZWQgcHJvcGVydGllcylcbiAgcmVzZXRTdG9yZVN0YXRlKHRoaXMsIHN0YXRlKTtcblxuICAvLyBhcHBseSBwbHVnaW5zXG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7IHJldHVybiBwbHVnaW4odGhpcyQxJDEpOyB9KTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IHN0YXRlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblN0b3JlLnByb3RvdHlwZS5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbCAoYXBwLCBpbmplY3RLZXkpIHtcbiAgYXBwLnByb3ZpZGUoaW5qZWN0S2V5IHx8IHN0b3JlS2V5LCB0aGlzKTtcbiAgYXBwLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRzdG9yZSA9IHRoaXM7XG5cbiAgdmFyIHVzZURldnRvb2xzID0gdGhpcy5fZGV2dG9vbHMgIT09IHVuZGVmaW5lZFxuICAgID8gdGhpcy5fZGV2dG9vbHNcbiAgICA6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX187XG5cbiAgaWYgKHVzZURldnRvb2xzKSB7XG4gICAgYWRkRGV2dG9vbHMoYXBwLCB0aGlzKTtcbiAgfVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnN0YXRlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YXRlLmRhdGFcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5zdGF0ZS5zZXQgPSBmdW5jdGlvbiAodikge1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCBcInVzZSBzdG9yZS5yZXBsYWNlU3RhdGUoKSB0byBleHBsaWNpdCByZXBsYWNlIHN0b3JlIHN0YXRlLlwiKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIGNvbW1pdCAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgLy8gY2hlY2sgb2JqZWN0LXN0eWxlIGNvbW1pdFxuICB2YXIgcmVmID0gdW5pZnlPYmplY3RTdHlsZShfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG4gICAgdmFyIG9wdGlvbnMgPSByZWYub3B0aW9ucztcblxuICB2YXIgbXV0YXRpb24gPSB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgfTtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fbXV0YXRpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgZW50cnkuZm9yRWFjaChmdW5jdGlvbiBjb21taXRJdGVyYXRvciAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlcihwYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5fc3Vic2NyaWJlcnNcbiAgICAuc2xpY2UoKSAvLyBzaGFsbG93IGNvcHkgdG8gcHJldmVudCBpdGVyYXRvciBpbnZhbGlkYXRpb24gaWYgc3Vic2NyaWJlciBzeW5jaHJvbm91c2x5IGNhbGxzIHVuc3Vic2NyaWJlXG4gICAgLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViKG11dGF0aW9uLCB0aGlzJDEkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcbiAgICBvcHRpb25zICYmIG9wdGlvbnMuc2lsZW50XG4gICkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiW3Z1ZXhdIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiLiBTaWxlbnQgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIFwiICtcbiAgICAgICdVc2UgdGhlIGZpbHRlciBmdW5jdGlvbmFsaXR5IGluIHRoZSB2dWUtZGV2dG9vbHMnXG4gICAgKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2ggKF90eXBlLCBfcGF5bG9hZCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgLy8gY2hlY2sgb2JqZWN0LXN0eWxlIGRpc3BhdGNoXG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuXG4gIHZhciBhY3Rpb24gPSB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgfTtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fYWN0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gYWN0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgIC5zbGljZSgpIC8vIHNoYWxsb3cgY29weSB0byBwcmV2ZW50IGl0ZXJhdG9yIGludmFsaWRhdGlvbiBpZiBzdWJzY3JpYmVyIHN5bmNocm9ub3VzbHkgY2FsbHMgdW5zdWJzY3JpYmVcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmJlZm9yZTsgfSlcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmUoYWN0aW9uLCB0aGlzJDEkMS5zdGF0ZSk7IH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW3Z1ZXhdIGVycm9yIGluIGJlZm9yZSBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGVudHJ5Lmxlbmd0aCA+IDFcbiAgICA/IFByb21pc2UuYWxsKGVudHJ5Lm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcihwYXlsb2FkKTsgfSkpXG4gICAgOiBlbnRyeVswXShwYXlsb2FkKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMkMSQxLl9hY3Rpb25TdWJzY3JpYmVyc1xuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmFmdGVyOyB9KVxuICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5hZnRlcihhY3Rpb24sIHRoaXMkMSQxLnN0YXRlKTsgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYWZ0ZXIgYWN0aW9uIHN1YnNjcmliZXJzOiBcIik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzb2x2ZShyZXMpO1xuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcyQxJDEuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuZXJyb3I7IH0pXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmVycm9yKGFjdGlvbiwgdGhpcyQxJDEuc3RhdGUsIGVycm9yKTsgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gZXJyb3IgYWN0aW9uIHN1YnNjcmliZXJzOiBcIik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfSlcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUgKGZuLCBvcHRpb25zKSB7XG4gIHJldHVybiBnZW5lcmljU3Vic2NyaWJlKGZuLCB0aGlzLl9zdWJzY3JpYmVycywgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmVBY3Rpb24gPSBmdW5jdGlvbiBzdWJzY3JpYmVBY3Rpb24gKGZuLCBvcHRpb25zKSB7XG4gIHZhciBzdWJzID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8geyBiZWZvcmU6IGZuIH0gOiBmbjtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoc3VicywgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMsIG9wdGlvbnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUud2F0Y2ggPSBmdW5jdGlvbiB3YXRjaCQxIChnZXR0ZXIsIGNiLCBvcHRpb25zKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBnZXR0ZXIgPT09ICdmdW5jdGlvbicsIFwic3RvcmUud2F0Y2ggb25seSBhY2NlcHRzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIHJldHVybiB3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiBnZXR0ZXIodGhpcyQxJDEuc3RhdGUsIHRoaXMkMSQxLmdldHRlcnMpOyB9LCBjYiwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucykpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gcmVwbGFjZVN0YXRlIChzdGF0ZSkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxJDEuX3N0YXRlLmRhdGEgPSBzdGF0ZTtcbiAgfSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiByZWdpc3Rlck1vZHVsZSAocGF0aCwgcmF3TW9kdWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICAgIGFzc2VydChwYXRoLmxlbmd0aCA+IDAsICdjYW5ub3QgcmVnaXN0ZXIgdGhlIHJvb3QgbW9kdWxlIGJ5IHVzaW5nIHJlZ2lzdGVyTW9kdWxlLicpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy5yZWdpc3RlcihwYXRoLCByYXdNb2R1bGUpO1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHRoaXMuc3RhdGUsIHBhdGgsIHRoaXMuX21vZHVsZXMuZ2V0KHBhdGgpLCBvcHRpb25zLnByZXNlcnZlU3RhdGUpO1xuICAvLyByZXNldCBzdG9yZSB0byB1cGRhdGUgZ2V0dGVycy4uLlxuICByZXNldFN0b3JlU3RhdGUodGhpcywgdGhpcy5zdGF0ZSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUudW5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJNb2R1bGUgKHBhdGgpIHtcbiAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMudW5yZWdpc3RlcihwYXRoKTtcbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUodGhpcyQxJDEuc3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBkZWxldGUgcGFyZW50U3RhdGVbcGF0aFtwYXRoLmxlbmd0aCAtIDFdXTtcbiAgfSk7XG4gIHJlc2V0U3RvcmUodGhpcyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuaGFzTW9kdWxlID0gZnVuY3Rpb24gaGFzTW9kdWxlIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9tb2R1bGVzLmlzUmVnaXN0ZXJlZChwYXRoKVxufTtcblxuU3RvcmUucHJvdG90eXBlLmhvdFVwZGF0ZSA9IGZ1bmN0aW9uIGhvdFVwZGF0ZSAobmV3T3B0aW9ucykge1xuICB0aGlzLl9tb2R1bGVzLnVwZGF0ZShuZXdPcHRpb25zKTtcbiAgcmVzZXRTdG9yZSh0aGlzLCB0cnVlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5fd2l0aENvbW1pdCA9IGZ1bmN0aW9uIF93aXRoQ29tbWl0IChmbikge1xuICB2YXIgY29tbWl0dGluZyA9IHRoaXMuX2NvbW1pdHRpbmc7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSB0cnVlO1xuICBmbigpO1xuICB0aGlzLl9jb21taXR0aW5nID0gY29tbWl0dGluZztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTdG9yZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBzdGF0ZXMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBzdGF0ZSBhbmQgZ2V0dGVycyBmb3IgcGFyYW0sIHlvdSBjYW4gZG8gc29tZXRoaW5nIGZvciBzdGF0ZSBhbmQgZ2V0dGVycyBpbiBpdC5cbiAqIEBwYXJhbSB7T2JqZWN0fVxuICovXG52YXIgbWFwU3RhdGUgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgc3RhdGVzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNWYWxpZE1hcChzdGF0ZXMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcFN0YXRlOiBtYXBwZXIgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICB9XG4gIG5vcm1hbGl6ZU1hcChzdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRTdGF0ZSAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLiRzdG9yZS5zdGF0ZTtcbiAgICAgIHZhciBnZXR0ZXJzID0gdGhpcy4kc3RvcmUuZ2V0dGVycztcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwU3RhdGUnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gbW9kdWxlLmNvbnRleHQuc3RhdGU7XG4gICAgICAgIGdldHRlcnMgPSBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuY2FsbCh0aGlzLCBzdGF0ZSwgZ2V0dGVycylcbiAgICAgICAgOiBzdGF0ZVt2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBjb21taXR0aW5nIHRoZSBtdXRhdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gbXV0YXRpb25zICMgT2JqZWN0J3MgaXRlbSBjYW4gYmUgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHQgYGNvbW1pdGAgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtLCBpdCBjYW4gYWNjZXB0IGFub3RoZXIgcGFyYW1zLiBZb3UgY2FuIGNvbW1pdCBtdXRhdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNWYWxpZE1hcChtdXRhdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcE11dGF0aW9uczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAobXV0YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkTXV0YXRpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgIC8vIEdldCB0aGUgY29tbWl0IG1ldGhvZCBmcm9tIHN0b3JlXG4gICAgICB2YXIgY29tbWl0ID0gdGhpcy4kc3RvcmUuY29tbWl0O1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBNdXRhdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbW1pdCA9IG1vZHVsZS5jb250ZXh0LmNvbW1pdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtjb21taXRdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBjb21taXQuYXBwbHkodGhpcy4kc3RvcmUsIFt2YWxdLmNvbmNhdChhcmdzKSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBnZXR0aW5nIHRoZSBnZXR0ZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBnZXR0ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBHZXR0ZXJzID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGdldHRlcnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKGdldHRlcnMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcEdldHRlcnM6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKGdldHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgLy8gVGhlIG5hbWVzcGFjZSBoYXMgYmVlbiBtdXRhdGVkIGJ5IG5vcm1hbGl6ZU5hbWVzcGFjZVxuICAgIHZhbCA9IG5hbWVzcGFjZSArIHZhbDtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZEdldHRlciAoKSB7XG4gICAgICBpZiAobmFtZXNwYWNlICYmICFnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEdldHRlcnMnLCBuYW1lc3BhY2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhKHZhbCBpbiB0aGlzLiRzdG9yZS5nZXR0ZXJzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGdldHRlcjogXCIgKyB2YWwpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1t2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBkaXNwYXRjaCB0aGUgYWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBhY3Rpb25zICMgT2JqZWN0J3MgaXRlbSBjYW4gYmUgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHQgYGRpc3BhdGNoYCBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW0sIGl0IGNhbiBhY2NlcHQgYW50aG9yIHBhcmFtcy4gWW91IGNhbiBkaXNwYXRjaCBhY3Rpb24gYW5kIGRvIGFueSBvdGhlciB0aGluZ3MgaW4gdGhpcyBmdW5jdGlvbi4gc3BlY2lhbGx5LCBZb3UgbmVlZCB0byBwYXNzIGFudGhvciBwYXJhbXMgZnJvbSB0aGUgbWFwcGVkIGZ1bmN0aW9uLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwQWN0aW9ucyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBhY3Rpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNWYWxpZE1hcChhY3Rpb25zKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWV4XSBtYXBBY3Rpb25zOiBtYXBwZXIgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICB9XG4gIG5vcm1hbGl6ZU1hcChhY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkQWN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBnZXQgZGlzcGF0Y2ggZnVuY3Rpb24gZnJvbSBzdG9yZVxuICAgICAgdmFyIGRpc3BhdGNoID0gdGhpcy4kc3RvcmUuZGlzcGF0Y2g7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEFjdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoID0gbW9kdWxlLmNvbnRleHQuZGlzcGF0Y2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbZGlzcGF0Y2hdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBkaXNwYXRjaC5hcHBseSh0aGlzLiRzdG9yZSwgW3ZhbF0uY29uY2F0KGFyZ3MpKVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWJpbmRpbmcgbmFtZXNwYWNlIHBhcmFtIGZvciBtYXBYWFggZnVuY3Rpb24gaW4gc3BlY2lhbCBzY29wZWQsIGFuZCByZXR1cm4gdGhlbSBieSBzaW1wbGUgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBjcmVhdGVOYW1lc3BhY2VkSGVscGVycyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHsgcmV0dXJuICh7XG4gIG1hcFN0YXRlOiBtYXBTdGF0ZS5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucy5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpXG59KTsgfTtcblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIG1hcFxuICogbm9ybWFsaXplTWFwKFsxLCAyLCAzXSkgPT4gWyB7IGtleTogMSwgdmFsOiAxIH0sIHsga2V5OiAyLCB2YWw6IDIgfSwgeyBrZXk6IDMsIHZhbDogMyB9IF1cbiAqIG5vcm1hbGl6ZU1hcCh7YTogMSwgYjogMiwgYzogM30pID0+IFsgeyBrZXk6ICdhJywgdmFsOiAxIH0sIHsga2V5OiAnYicsIHZhbDogMiB9LCB7IGtleTogJ2MnLCB2YWw6IDMgfSBdXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gbWFwXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hcCAobWFwKSB7XG4gIGlmICghaXNWYWxpZE1hcChtYXApKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkobWFwKVxuICAgID8gbWFwLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAoeyBrZXk6IGtleSwgdmFsOiBrZXkgfSk7IH0pXG4gICAgOiBPYmplY3Qua2V5cyhtYXApLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAoeyBrZXk6IGtleSwgdmFsOiBtYXBba2V5XSB9KTsgfSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGdpdmVuIG1hcCBpcyB2YWxpZCBvciBub3RcbiAqIEBwYXJhbSB7Kn0gbWFwXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkTWFwIChtYXApIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkobWFwKSB8fCBpc09iamVjdChtYXApXG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnVuY3Rpb24gZXhwZWN0IHR3byBwYXJhbSBjb250YWlucyBuYW1lc3BhY2UgYW5kIG1hcC4gaXQgd2lsbCBub3JtYWxpemUgdGhlIG5hbWVzcGFjZSBhbmQgdGhlbiB0aGUgcGFyYW0ncyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIG1hcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZXNwYWNlIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWFwKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICBtYXAgPSBuYW1lc3BhY2U7XG4gICAgICBuYW1lc3BhY2UgPSAnJztcbiAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZS5jaGFyQXQobmFtZXNwYWNlLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgIG5hbWVzcGFjZSArPSAnLyc7XG4gICAgfVxuICAgIHJldHVybiBmbihuYW1lc3BhY2UsIG1hcClcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaCBhIHNwZWNpYWwgbW9kdWxlIGZyb20gc3RvcmUgYnkgbmFtZXNwYWNlLiBpZiBtb2R1bGUgbm90IGV4aXN0LCBwcmludCBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0b3JlXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVscGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZUJ5TmFtZXNwYWNlIChzdG9yZSwgaGVscGVyLCBuYW1lc3BhY2UpIHtcbiAgdmFyIG1vZHVsZSA9IHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV07XG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIW1vZHVsZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIG1vZHVsZSBuYW1lc3BhY2Ugbm90IGZvdW5kIGluIFwiICsgaGVscGVyICsgXCIoKTogXCIgKyBuYW1lc3BhY2UpKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlXG59XG5cbi8vIENyZWRpdHM6IGJvcnJvd2VkIGNvZGUgZnJvbSBmY29tYi9yZWR1eC1sb2dnZXJcblxuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyIChyZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgY29sbGFwc2VkID0gcmVmLmNvbGxhcHNlZDsgaWYgKCBjb2xsYXBzZWQgPT09IHZvaWQgMCApIGNvbGxhcHNlZCA9IHRydWU7XG4gIHZhciBmaWx0ZXIgPSByZWYuZmlsdGVyOyBpZiAoIGZpbHRlciA9PT0gdm9pZCAwICkgZmlsdGVyID0gZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZUJlZm9yZSwgc3RhdGVBZnRlcikgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdmFyIHRyYW5zZm9ybWVyID0gcmVmLnRyYW5zZm9ybWVyOyBpZiAoIHRyYW5zZm9ybWVyID09PSB2b2lkIDAgKSB0cmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGU7IH07XG4gIHZhciBtdXRhdGlvblRyYW5zZm9ybWVyID0gcmVmLm11dGF0aW9uVHJhbnNmb3JtZXI7IGlmICggbXV0YXRpb25UcmFuc2Zvcm1lciA9PT0gdm9pZCAwICkgbXV0YXRpb25UcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChtdXQpIHsgcmV0dXJuIG11dDsgfTtcbiAgdmFyIGFjdGlvbkZpbHRlciA9IHJlZi5hY3Rpb25GaWx0ZXI7IGlmICggYWN0aW9uRmlsdGVyID09PSB2b2lkIDAgKSBhY3Rpb25GaWx0ZXIgPSBmdW5jdGlvbiAoYWN0aW9uLCBzdGF0ZSkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdmFyIGFjdGlvblRyYW5zZm9ybWVyID0gcmVmLmFjdGlvblRyYW5zZm9ybWVyOyBpZiAoIGFjdGlvblRyYW5zZm9ybWVyID09PSB2b2lkIDAgKSBhY3Rpb25UcmFuc2Zvcm1lciA9IGZ1bmN0aW9uIChhY3QpIHsgcmV0dXJuIGFjdDsgfTtcbiAgdmFyIGxvZ011dGF0aW9ucyA9IHJlZi5sb2dNdXRhdGlvbnM7IGlmICggbG9nTXV0YXRpb25zID09PSB2b2lkIDAgKSBsb2dNdXRhdGlvbnMgPSB0cnVlO1xuICB2YXIgbG9nQWN0aW9ucyA9IHJlZi5sb2dBY3Rpb25zOyBpZiAoIGxvZ0FjdGlvbnMgPT09IHZvaWQgMCApIGxvZ0FjdGlvbnMgPSB0cnVlO1xuICB2YXIgbG9nZ2VyID0gcmVmLmxvZ2dlcjsgaWYgKCBsb2dnZXIgPT09IHZvaWQgMCApIGxvZ2dlciA9IGNvbnNvbGU7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZSkge1xuICAgIHZhciBwcmV2U3RhdGUgPSBkZWVwQ29weShzdG9yZS5zdGF0ZSk7XG5cbiAgICBpZiAodHlwZW9mIGxvZ2dlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChsb2dNdXRhdGlvbnMpIHtcbiAgICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAobXV0YXRpb24sIHN0YXRlKSB7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSBkZWVwQ29weShzdGF0ZSk7XG5cbiAgICAgICAgaWYgKGZpbHRlcihtdXRhdGlvbiwgcHJldlN0YXRlLCBuZXh0U3RhdGUpKSB7XG4gICAgICAgICAgdmFyIGZvcm1hdHRlZFRpbWUgPSBnZXRGb3JtYXR0ZWRUaW1lKCk7XG4gICAgICAgICAgdmFyIGZvcm1hdHRlZE11dGF0aW9uID0gbXV0YXRpb25UcmFuc2Zvcm1lcihtdXRhdGlvbik7XG4gICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIm11dGF0aW9uIFwiICsgKG11dGF0aW9uLnR5cGUpICsgZm9ybWF0dGVkVGltZTtcblxuICAgICAgICAgIHN0YXJ0TWVzc2FnZShsb2dnZXIsIG1lc3NhZ2UsIGNvbGxhcHNlZCk7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnJWMgcHJldiBzdGF0ZScsICdjb2xvcjogIzlFOUU5RTsgZm9udC13ZWlnaHQ6IGJvbGQnLCB0cmFuc2Zvcm1lcihwcmV2U3RhdGUpKTtcbiAgICAgICAgICBsb2dnZXIubG9nKCclYyBtdXRhdGlvbicsICdjb2xvcjogIzAzQTlGNDsgZm9udC13ZWlnaHQ6IGJvbGQnLCBmb3JtYXR0ZWRNdXRhdGlvbik7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnJWMgbmV4dCBzdGF0ZScsICdjb2xvcjogIzRDQUY1MDsgZm9udC13ZWlnaHQ6IGJvbGQnLCB0cmFuc2Zvcm1lcihuZXh0U3RhdGUpKTtcbiAgICAgICAgICBlbmRNZXNzYWdlKGxvZ2dlcik7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2U3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobG9nQWN0aW9ucykge1xuICAgICAgc3RvcmUuc3Vic2NyaWJlQWN0aW9uKGZ1bmN0aW9uIChhY3Rpb24sIHN0YXRlKSB7XG4gICAgICAgIGlmIChhY3Rpb25GaWx0ZXIoYWN0aW9uLCBzdGF0ZSkpIHtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkVGltZSA9IGdldEZvcm1hdHRlZFRpbWUoKTtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkQWN0aW9uID0gYWN0aW9uVHJhbnNmb3JtZXIoYWN0aW9uKTtcbiAgICAgICAgICB2YXIgbWVzc2FnZSA9IFwiYWN0aW9uIFwiICsgKGFjdGlvbi50eXBlKSArIGZvcm1hdHRlZFRpbWU7XG5cbiAgICAgICAgICBzdGFydE1lc3NhZ2UobG9nZ2VyLCBtZXNzYWdlLCBjb2xsYXBzZWQpO1xuICAgICAgICAgIGxvZ2dlci5sb2coJyVjIGFjdGlvbicsICdjb2xvcjogIzAzQTlGNDsgZm9udC13ZWlnaHQ6IGJvbGQnLCBmb3JtYXR0ZWRBY3Rpb24pO1xuICAgICAgICAgIGVuZE1lc3NhZ2UobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0TWVzc2FnZSAobG9nZ2VyLCBtZXNzYWdlLCBjb2xsYXBzZWQpIHtcbiAgdmFyIHN0YXJ0TWVzc2FnZSA9IGNvbGxhcHNlZFxuICAgID8gbG9nZ2VyLmdyb3VwQ29sbGFwc2VkXG4gICAgOiBsb2dnZXIuZ3JvdXA7XG5cbiAgLy8gcmVuZGVyXG4gIHRyeSB7XG4gICAgc3RhcnRNZXNzYWdlLmNhbGwobG9nZ2VyLCBtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5sb2cobWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kTWVzc2FnZSAobG9nZ2VyKSB7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIubG9nKCfigJTigJQgbG9nIGVuZCDigJTigJQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGb3JtYXR0ZWRUaW1lICgpIHtcbiAgdmFyIHRpbWUgPSBuZXcgRGF0ZSgpO1xuICByZXR1cm4gKFwiIEAgXCIgKyAocGFkKHRpbWUuZ2V0SG91cnMoKSwgMikpICsgXCI6XCIgKyAocGFkKHRpbWUuZ2V0TWludXRlcygpLCAyKSkgKyBcIjpcIiArIChwYWQodGltZS5nZXRTZWNvbmRzKCksIDIpKSArIFwiLlwiICsgKHBhZCh0aW1lLmdldE1pbGxpc2Vjb25kcygpLCAzKSkpXG59XG5cbmZ1bmN0aW9uIHJlcGVhdCAoc3RyLCB0aW1lcykge1xuICByZXR1cm4gKG5ldyBBcnJheSh0aW1lcyArIDEpKS5qb2luKHN0cilcbn1cblxuZnVuY3Rpb24gcGFkIChudW0sIG1heExlbmd0aCkge1xuICByZXR1cm4gcmVwZWF0KCcwJywgbWF4TGVuZ3RoIC0gbnVtLnRvU3RyaW5nKCkubGVuZ3RoKSArIG51bVxufVxuXG52YXIgaW5kZXggPSB7XG4gIHZlcnNpb246ICc0LjAuMicsXG4gIFN0b3JlOiBTdG9yZSxcbiAgc3RvcmVLZXk6IHN0b3JlS2V5LFxuICBjcmVhdGVTdG9yZTogY3JlYXRlU3RvcmUsXG4gIHVzZVN0b3JlOiB1c2VTdG9yZSxcbiAgbWFwU3RhdGU6IG1hcFN0YXRlLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucyxcbiAgbWFwR2V0dGVyczogbWFwR2V0dGVycyxcbiAgbWFwQWN0aW9uczogbWFwQWN0aW9ucyxcbiAgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnM6IGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzLFxuICBjcmVhdGVMb2dnZXI6IGNyZWF0ZUxvZ2dlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG5leHBvcnQgeyBTdG9yZSwgY3JlYXRlTG9nZ2VyLCBjcmVhdGVOYW1lc3BhY2VkSGVscGVycywgY3JlYXRlU3RvcmUsIG1hcEFjdGlvbnMsIG1hcEdldHRlcnMsIG1hcE11dGF0aW9ucywgbWFwU3RhdGUsIHN0b3JlS2V5LCB1c2VTdG9yZSB9O1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG52YXIgX19jb3B5UHJvcHMgPSAodG8sIGZyb20sIGV4Y2VwdCwgZGVzYykgPT4ge1xuICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdClcbiAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICB9XG4gIHJldHVybiB0bztcbn07XG52YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuLy8gc3JjL2luZGV4LnRzXG52YXIgc3JjX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNyY19leHBvcnRzLCB7XG4gIENvbWJvYm94OiAoKSA9PiBDb21ib2JveCxcbiAgQ29tYm9ib3hCdXR0b246ICgpID0+IENvbWJvYm94QnV0dG9uLFxuICBDb21ib2JveElucHV0OiAoKSA9PiBDb21ib2JveElucHV0LFxuICBDb21ib2JveExhYmVsOiAoKSA9PiBDb21ib2JveExhYmVsLFxuICBDb21ib2JveE9wdGlvbjogKCkgPT4gQ29tYm9ib3hPcHRpb24sXG4gIENvbWJvYm94T3B0aW9uczogKCkgPT4gQ29tYm9ib3hPcHRpb25zLFxuICBEaWFsb2c6ICgpID0+IERpYWxvZyxcbiAgRGlhbG9nQmFja2Ryb3A6ICgpID0+IERpYWxvZ0JhY2tkcm9wLFxuICBEaWFsb2dEZXNjcmlwdGlvbjogKCkgPT4gRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ092ZXJsYXk6ICgpID0+IERpYWxvZ092ZXJsYXksXG4gIERpYWxvZ1BhbmVsOiAoKSA9PiBEaWFsb2dQYW5lbCxcbiAgRGlhbG9nVGl0bGU6ICgpID0+IERpYWxvZ1RpdGxlLFxuICBEaXNjbG9zdXJlOiAoKSA9PiBEaXNjbG9zdXJlLFxuICBEaXNjbG9zdXJlQnV0dG9uOiAoKSA9PiBEaXNjbG9zdXJlQnV0dG9uLFxuICBEaXNjbG9zdXJlUGFuZWw6ICgpID0+IERpc2Nsb3N1cmVQYW5lbCxcbiAgRm9jdXNUcmFwOiAoKSA9PiBGb2N1c1RyYXAsXG4gIExpc3Rib3g6ICgpID0+IExpc3Rib3gsXG4gIExpc3Rib3hCdXR0b246ICgpID0+IExpc3Rib3hCdXR0b24sXG4gIExpc3Rib3hMYWJlbDogKCkgPT4gTGlzdGJveExhYmVsLFxuICBMaXN0Ym94T3B0aW9uOiAoKSA9PiBMaXN0Ym94T3B0aW9uLFxuICBMaXN0Ym94T3B0aW9uczogKCkgPT4gTGlzdGJveE9wdGlvbnMsXG4gIE1lbnU6ICgpID0+IE1lbnUsXG4gIE1lbnVCdXR0b246ICgpID0+IE1lbnVCdXR0b24sXG4gIE1lbnVJdGVtOiAoKSA9PiBNZW51SXRlbSxcbiAgTWVudUl0ZW1zOiAoKSA9PiBNZW51SXRlbXMsXG4gIFBvcG92ZXI6ICgpID0+IFBvcG92ZXIsXG4gIFBvcG92ZXJCdXR0b246ICgpID0+IFBvcG92ZXJCdXR0b24sXG4gIFBvcG92ZXJHcm91cDogKCkgPT4gUG9wb3Zlckdyb3VwLFxuICBQb3BvdmVyT3ZlcmxheTogKCkgPT4gUG9wb3Zlck92ZXJsYXksXG4gIFBvcG92ZXJQYW5lbDogKCkgPT4gUG9wb3ZlclBhbmVsLFxuICBQb3J0YWw6ICgpID0+IFBvcnRhbCxcbiAgUG9ydGFsR3JvdXA6ICgpID0+IFBvcnRhbEdyb3VwLFxuICBSYWRpb0dyb3VwOiAoKSA9PiBSYWRpb0dyb3VwLFxuICBSYWRpb0dyb3VwRGVzY3JpcHRpb246ICgpID0+IFJhZGlvR3JvdXBEZXNjcmlwdGlvbixcbiAgUmFkaW9Hcm91cExhYmVsOiAoKSA9PiBSYWRpb0dyb3VwTGFiZWwsXG4gIFJhZGlvR3JvdXBPcHRpb246ICgpID0+IFJhZGlvR3JvdXBPcHRpb24sXG4gIFN3aXRjaDogKCkgPT4gU3dpdGNoLFxuICBTd2l0Y2hEZXNjcmlwdGlvbjogKCkgPT4gU3dpdGNoRGVzY3JpcHRpb24sXG4gIFN3aXRjaEdyb3VwOiAoKSA9PiBTd2l0Y2hHcm91cCxcbiAgU3dpdGNoTGFiZWw6ICgpID0+IFN3aXRjaExhYmVsLFxuICBUYWI6ICgpID0+IFRhYixcbiAgVGFiR3JvdXA6ICgpID0+IFRhYkdyb3VwLFxuICBUYWJMaXN0OiAoKSA9PiBUYWJMaXN0LFxuICBUYWJQYW5lbDogKCkgPT4gVGFiUGFuZWwsXG4gIFRhYlBhbmVsczogKCkgPT4gVGFiUGFuZWxzLFxuICBUcmFuc2l0aW9uQ2hpbGQ6ICgpID0+IFRyYW5zaXRpb25DaGlsZCxcbiAgVHJhbnNpdGlvblJvb3Q6ICgpID0+IFRyYW5zaXRpb25Sb290XG59KTtcbm1vZHVsZS5leHBvcnRzID0gX190b0NvbW1vbkpTKHNyY19leHBvcnRzKTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY29tYm9ib3gvY29tYm9ib3gudHNcbnZhciBpbXBvcnRfdnVlOCA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8vIHNyYy91dGlscy9yZW5kZXIudHNcbnZhciBpbXBvcnRfdnVlID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL3V0aWxzL21hdGNoLnRzXG5mdW5jdGlvbiBtYXRjaCh2YWx1ZSwgbG9va3VwLCAuLi5hcmdzKSB7XG4gIGlmICh2YWx1ZSBpbiBsb29rdXApIHtcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBsb29rdXBbdmFsdWVdO1xuICAgIHJldHVybiB0eXBlb2YgcmV0dXJuVmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHJldHVyblZhbHVlKC4uLmFyZ3MpIDogcmV0dXJuVmFsdWU7XG4gIH1cbiAgbGV0IGVycm9yID0gbmV3IEVycm9yKGBUcmllZCB0byBoYW5kbGUgXCIke3ZhbHVlfVwiIGJ1dCB0aGVyZSBpcyBubyBoYW5kbGVyIGRlZmluZWQuIE9ubHkgZGVmaW5lZCBoYW5kbGVycyBhcmU6ICR7T2JqZWN0LmtleXMobG9va3VwKS5tYXAoKGtleSkgPT4gYFwiJHtrZXl9XCJgKS5qb2luKFwiLCBcIil9LmApO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIG1hdGNoKTtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbi8vIHNyYy91dGlscy9yZW5kZXIudHNcbmZ1bmN0aW9uIHJlbmRlcih7XG4gIHZpc2libGUgPSB0cnVlLFxuICBmZWF0dXJlcyA9IDAgLyogTm9uZSAqLyxcbiAgb3VyUHJvcHMsXG4gIHRoZWlyUHJvcHMsXG4gIC4uLm1haW5cbn0pIHtcbiAgdmFyIF9hO1xuICBsZXQgcHJvcHMgPSBtZXJnZVByb3BzKHRoZWlyUHJvcHMsIG91clByb3BzKTtcbiAgbGV0IG1haW5XaXRoUHJvcHMgPSBPYmplY3QuYXNzaWduKG1haW4sIHsgcHJvcHMgfSk7XG4gIGlmICh2aXNpYmxlKVxuICAgIHJldHVybiBfcmVuZGVyKG1haW5XaXRoUHJvcHMpO1xuICBpZiAoZmVhdHVyZXMgJiAyIC8qIFN0YXRpYyAqLykge1xuICAgIGlmIChwcm9wcy5zdGF0aWMpXG4gICAgICByZXR1cm4gX3JlbmRlcihtYWluV2l0aFByb3BzKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMgJiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovKSB7XG4gICAgbGV0IHN0cmF0ZWd5ID0gKChfYSA9IHByb3BzLnVubW91bnQpICE9IG51bGwgPyBfYSA6IHRydWUpID8gMCAvKiBVbm1vdW50ICovIDogMSAvKiBIaWRkZW4gKi87XG4gICAgcmV0dXJuIG1hdGNoKHN0cmF0ZWd5LCB7XG4gICAgICBbMCAvKiBVbm1vdW50ICovXSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgWzEgLyogSGlkZGVuICovXSgpIHtcbiAgICAgICAgcmV0dXJuIF9yZW5kZXIoe1xuICAgICAgICAgIC4uLm1haW4sXG4gICAgICAgICAgcHJvcHM6IHsgLi4ucHJvcHMsIGhpZGRlbjogdHJ1ZSwgc3R5bGU6IHsgZGlzcGxheTogXCJub25lXCIgfSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBfcmVuZGVyKG1haW5XaXRoUHJvcHMpO1xufVxuZnVuY3Rpb24gX3JlbmRlcih7XG4gIHByb3BzLFxuICBhdHRycyxcbiAgc2xvdHMsXG4gIHNsb3QsXG4gIG5hbWVcbn0pIHtcbiAgdmFyIF9hO1xuICBsZXQgeyBhcywgLi4uaW5jb21pbmdQcm9wcyB9ID0gb21pdChwcm9wcywgW1widW5tb3VudFwiLCBcInN0YXRpY1wiXSk7XG4gIGxldCBjaGlsZHJlbiA9IChfYSA9IHNsb3RzLmRlZmF1bHQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKHNsb3RzLCBzbG90KTtcbiAgbGV0IGRhdGFBdHRyaWJ1dGVzID0ge307XG4gIGlmIChhcyA9PT0gXCJ0ZW1wbGF0ZVwiKSB7XG4gICAgY2hpbGRyZW4gPSBmbGF0dGVuRnJhZ21lbnRzKGNoaWxkcmVuKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoaW5jb21pbmdQcm9wcykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IFtmaXJzdENoaWxkLCAuLi5vdGhlcl0gPSBjaGlsZHJlbiAhPSBudWxsID8gY2hpbGRyZW4gOiBbXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQoZmlyc3RDaGlsZCkgfHwgb3RoZXIubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAgICdQYXNzaW5nIHByb3BzIG9uIFwidGVtcGxhdGVcIiEnLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgYFRoZSBjdXJyZW50IGNvbXBvbmVudCA8JHtuYW1lfSAvPiBpcyByZW5kZXJpbmcgYSBcInRlbXBsYXRlXCIuYCxcbiAgICAgICAgICBgSG93ZXZlciB3ZSBuZWVkIHRvIHBhc3N0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcHJvcHM6YCxcbiAgICAgICAgICBPYmplY3Qua2V5cyhpbmNvbWluZ1Byb3BzKS5jb25jYXQoT2JqZWN0LmtleXMoYXR0cnMpKS5zb3J0KChhLCB6KSA9PiBhLmxvY2FsZUNvbXBhcmUoeikpLm1hcCgobGluZSkgPT4gYCAgLSAke2xpbmV9YCkuam9pbihcIlxcblwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIFwiWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6XCIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0FkZCBhbiBgYXM9XCIuLi5cImAgcHJvcCwgdG8gZW5zdXJlIHRoYXQgd2UgcmVuZGVyIGFuIGFjdHVhbCBlbGVtZW50IGluc3RlYWQgb2YgYSBcInRlbXBsYXRlXCIuJyxcbiAgICAgICAgICAgIFwiUmVuZGVyIGEgc2luZ2xlIGVsZW1lbnQgYXMgdGhlIGNoaWxkIHNvIHRoYXQgd2UgY2FuIGZvcndhcmQgdGhlIHByb3BzIG9udG8gdGhhdCBlbGVtZW50LlwiXG4gICAgICAgICAgXS5tYXAoKGxpbmUpID0+IGAgIC0gJHtsaW5lfWApLmpvaW4oXCJcXG5cIilcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3Z1ZS5jbG9uZVZOb2RlKShmaXJzdENoaWxkLCBPYmplY3QuYXNzaWduKHt9LCBpbmNvbWluZ1Byb3BzLCBkYXRhQXR0cmlidXRlcykpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5bMF07XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gKDAsIGltcG9ydF92dWUuaCkoYXMsIE9iamVjdC5hc3NpZ24oe30sIGluY29taW5nUHJvcHMsIGRhdGFBdHRyaWJ1dGVzKSwgY2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gZmxhdHRlbkZyYWdtZW50cyhjaGlsZHJlbikge1xuICByZXR1cm4gY2hpbGRyZW4uZmxhdE1hcCgoY2hpbGQpID0+IHtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gaW1wb3J0X3Z1ZS5GcmFnbWVudCkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW5GcmFnbWVudHMoY2hpbGQuY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gW2NoaWxkXTtcbiAgfSk7XG59XG5mdW5jdGlvbiBtZXJnZVByb3BzKC4uLmxpc3RPZlByb3BzKSB7XG4gIHZhciBfYTtcbiAgaWYgKGxpc3RPZlByb3BzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4ge307XG4gIGlmIChsaXN0T2ZQcm9wcy5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuIGxpc3RPZlByb3BzWzBdO1xuICBsZXQgdGFyZ2V0ID0ge307XG4gIGxldCBldmVudEhhbmRsZXJzID0ge307XG4gIGZvciAobGV0IHByb3BzIG9mIGxpc3RPZlByb3BzKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBwcm9wcykge1xuICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aChcIm9uXCIpICYmIHR5cGVvZiBwcm9wc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIChfYSA9IGV2ZW50SGFuZGxlcnNbcHJvcF0pICE9IG51bGwgPyBfYSA6IGV2ZW50SGFuZGxlcnNbcHJvcF0gPSBbXTtcbiAgICAgICAgZXZlbnRIYW5kbGVyc1twcm9wXS5wdXNoKHByb3BzW3Byb3BdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0LmRpc2FibGVkIHx8IHRhcmdldFtcImFyaWEtZGlzYWJsZWRcIl0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0YXJnZXQsIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhldmVudEhhbmRsZXJzKS5tYXAoKGV2ZW50TmFtZSkgPT4gW2V2ZW50TmFtZSwgdm9pZCAwXSkpKTtcbiAgfVxuICBmb3IgKGxldCBldmVudE5hbWUgaW4gZXZlbnRIYW5kbGVycykge1xuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7XG4gICAgICBbZXZlbnROYW1lXShldmVudCwgLi4uYXJncykge1xuICAgICAgICBsZXQgaGFuZGxlcnMgPSBldmVudEhhbmRsZXJzW2V2ZW50TmFtZV07XG4gICAgICAgIGZvciAobGV0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaGFuZGxlcihldmVudCwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gY29tcGFjdChvYmplY3QpIHtcbiAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqZWN0KTtcbiAgZm9yIChsZXQga2V5IGluIGNsb25lKSB7XG4gICAgaWYgKGNsb25lW2tleV0gPT09IHZvaWQgMClcbiAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xuICB9XG4gIHJldHVybiBjbG9uZTtcbn1cbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0ID0gW10pIHtcbiAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqZWN0KTtcbiAgZm9yIChsZXQga2V5IG9mIGtleXNUb09taXQpIHtcbiAgICBpZiAoa2V5IGluIGNsb25lKVxuICAgICAgZGVsZXRlIGNsb25lW2tleV07XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoaW5wdXQpIHtcbiAgaWYgKGlucHV0ID09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIGlucHV0LnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgaW5wdXQudHlwZSA9PT0gXCJvYmplY3RcIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBpbnB1dC50eXBlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS1pZC50c1xudmFyIGlkID0gMDtcbmZ1bmN0aW9uIGdlbmVyYXRlSWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuZnVuY3Rpb24gdXNlSWQoKSB7XG4gIHJldHVybiBnZW5lcmF0ZUlkKCk7XG59XG5cbi8vIHNyYy91dGlscy9jYWxjdWxhdGUtYWN0aXZlLWluZGV4LnRzXG5mdW5jdGlvbiBhc3NlcnROZXZlcih4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgb2JqZWN0OiBcIiArIHgpO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlQWN0aXZlSW5kZXgoYWN0aW9uLCByZXNvbHZlcnMpIHtcbiAgbGV0IGl0ZW1zID0gcmVzb2x2ZXJzLnJlc29sdmVJdGVtcygpO1xuICBpZiAoaXRlbXMubGVuZ3RoIDw9IDApXG4gICAgcmV0dXJuIG51bGw7XG4gIGxldCBjdXJyZW50QWN0aXZlSW5kZXggPSByZXNvbHZlcnMucmVzb2x2ZUFjdGl2ZUluZGV4KCk7XG4gIGxldCBhY3RpdmVJbmRleCA9IGN1cnJlbnRBY3RpdmVJbmRleCAhPSBudWxsID8gY3VycmVudEFjdGl2ZUluZGV4IDogLTE7XG4gIGxldCBuZXh0QWN0aXZlSW5kZXggPSAoKCkgPT4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLmZvY3VzKSB7XG4gICAgICBjYXNlIDAgLyogRmlyc3QgKi86XG4gICAgICAgIHJldHVybiBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+ICFyZXNvbHZlcnMucmVzb2x2ZURpc2FibGVkKGl0ZW0pKTtcbiAgICAgIGNhc2UgMSAvKiBQcmV2aW91cyAqLzoge1xuICAgICAgICBsZXQgaWR4ID0gaXRlbXMuc2xpY2UoKS5yZXZlcnNlKCkuZmluZEluZGV4KChpdGVtLCBpZHgyLCBhbGwpID0+IHtcbiAgICAgICAgICBpZiAoYWN0aXZlSW5kZXggIT09IC0xICYmIGFsbC5sZW5ndGggLSBpZHgyIC0gMSA+PSBhY3RpdmVJbmRleClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gIXJlc29sdmVycy5yZXNvbHZlRGlzYWJsZWQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaWR4ID09PSAtMSlcbiAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICByZXR1cm4gaXRlbXMubGVuZ3RoIC0gMSAtIGlkeDtcbiAgICAgIH1cbiAgICAgIGNhc2UgMiAvKiBOZXh0ICovOlxuICAgICAgICByZXR1cm4gaXRlbXMuZmluZEluZGV4KChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoaWR4IDw9IGFjdGl2ZUluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIHJldHVybiAhcmVzb2x2ZXJzLnJlc29sdmVEaXNhYmxlZChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIDMgLyogTGFzdCAqLzoge1xuICAgICAgICBsZXQgaWR4ID0gaXRlbXMuc2xpY2UoKS5yZXZlcnNlKCkuZmluZEluZGV4KChpdGVtKSA9PiAhcmVzb2x2ZXJzLnJlc29sdmVEaXNhYmxlZChpdGVtKSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGggLSAxIC0gaWR4O1xuICAgICAgfVxuICAgICAgY2FzZSA0IC8qIFNwZWNpZmljICovOlxuICAgICAgICByZXR1cm4gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiByZXNvbHZlcnMucmVzb2x2ZUlkKGl0ZW0pID09PSBhY3Rpb24uaWQpO1xuICAgICAgY2FzZSA1IC8qIE5vdGhpbmcgKi86XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0TmV2ZXIoYWN0aW9uKTtcbiAgICB9XG4gIH0pKCk7XG4gIHJldHVybiBuZXh0QWN0aXZlSW5kZXggPT09IC0xID8gY3VycmVudEFjdGl2ZUluZGV4IDogbmV4dEFjdGl2ZUluZGV4O1xufVxuXG4vLyBzcmMvdXRpbHMvZG9tLnRzXG5mdW5jdGlvbiBkb20ocmVmMTkpIHtcbiAgdmFyIF9hO1xuICBpZiAocmVmMTkgPT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKHJlZjE5LnZhbHVlID09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoX2EgPSByZWYxOS52YWx1ZS4kZWwpICE9IG51bGwgPyBfYSA6IHJlZjE5LnZhbHVlO1xufVxuXG4vLyBzcmMvaW50ZXJuYWwvb3Blbi1jbG9zZWQudHNcbnZhciBpbXBvcnRfdnVlMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQ29udGV4dCA9IFN5bWJvbChcIkNvbnRleHRcIik7XG5mdW5jdGlvbiBoYXNPcGVuQ2xvc2VkKCkge1xuICByZXR1cm4gdXNlT3BlbkNsb3NlZCgpICE9PSBudWxsO1xufVxuZnVuY3Rpb24gdXNlT3BlbkNsb3NlZCgpIHtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMi5pbmplY3QpKENvbnRleHQsIG51bGwpO1xufVxuZnVuY3Rpb24gdXNlT3BlbkNsb3NlZFByb3ZpZGVyKHZhbHVlKSB7XG4gICgwLCBpbXBvcnRfdnVlMi5wcm92aWRlKShDb250ZXh0LCB2YWx1ZSk7XG59XG5cbi8vIHNyYy9ob29rcy91c2UtcmVzb2x2ZS1idXR0b24tdHlwZS50c1xudmFyIGltcG9ydF92dWUzID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIHJlc29sdmVUeXBlKHR5cGUsIGFzKSB7XG4gIGlmICh0eXBlKVxuICAgIHJldHVybiB0eXBlO1xuICBsZXQgdGFnID0gYXMgIT0gbnVsbCA/IGFzIDogXCJidXR0b25cIjtcbiAgaWYgKHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIgJiYgdGFnLnRvTG93ZXJDYXNlKCkgPT09IFwiYnV0dG9uXCIpXG4gICAgcmV0dXJuIFwiYnV0dG9uXCI7XG4gIHJldHVybiB2b2lkIDA7XG59XG5mdW5jdGlvbiB1c2VSZXNvbHZlQnV0dG9uVHlwZShkYXRhLCByZWZFbGVtZW50KSB7XG4gIGxldCB0eXBlID0gKDAsIGltcG9ydF92dWUzLnJlZikocmVzb2x2ZVR5cGUoZGF0YS52YWx1ZS50eXBlLCBkYXRhLnZhbHVlLmFzKSk7XG4gICgwLCBpbXBvcnRfdnVlMy5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICB0eXBlLnZhbHVlID0gcmVzb2x2ZVR5cGUoZGF0YS52YWx1ZS50eXBlLCBkYXRhLnZhbHVlLmFzKTtcbiAgfSk7XG4gICgwLCBpbXBvcnRfdnVlMy53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAodHlwZS52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIWRvbShyZWZFbGVtZW50KSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZG9tKHJlZkVsZW1lbnQpIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgISgoX2EgPSBkb20ocmVmRWxlbWVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5oYXNBdHRyaWJ1dGUoXCJ0eXBlXCIpKSkge1xuICAgICAgdHlwZS52YWx1ZSA9IFwiYnV0dG9uXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbi8vIHNyYy9ob29rcy91c2UtdHJlZS13YWxrZXIudHNcbnZhciBpbXBvcnRfdnVlNCA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8vIHNyYy91dGlscy9vd25lci50c1xuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUpXG4gICAgcmV0dXJuIGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSkge1xuICAgIGxldCBkb21FbGVtZW50ID0gZG9tKGVsZW1lbnQpO1xuICAgIGlmIChkb21FbGVtZW50KVxuICAgICAgcmV0dXJuIGRvbUVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQ7XG59XG5cbi8vIHNyYy9ob29rcy91c2UtdHJlZS13YWxrZXIudHNcbmZ1bmN0aW9uIHVzZVRyZWVXYWxrZXIoe1xuICBjb250YWluZXIsXG4gIGFjY2VwdCxcbiAgd2FsayxcbiAgZW5hYmxlZFxufSkge1xuICAoMCwgaW1wb3J0X3Z1ZTQud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICBsZXQgcm9vdCA9IGNvbnRhaW5lci52YWx1ZTtcbiAgICBpZiAoIXJvb3QpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGVuYWJsZWQgIT09IHZvaWQgMCAmJiAhZW5hYmxlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBsZXQgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnQoY29udGFpbmVyKTtcbiAgICBpZiAoIW93bmVyRG9jdW1lbnQpXG4gICAgICByZXR1cm47XG4gICAgbGV0IGFjY2VwdE5vZGUgPSBPYmplY3QuYXNzaWduKChub2RlKSA9PiBhY2NlcHQobm9kZSksIHsgYWNjZXB0Tm9kZTogYWNjZXB0IH0pO1xuICAgIGxldCB3YWxrZXIgPSBvd25lckRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIGFjY2VwdE5vZGUsIGZhbHNlKTtcbiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpXG4gICAgICB3YWxrKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gIH0pO1xufVxuXG4vLyBzcmMvdXRpbHMvZm9jdXMtbWFuYWdlbWVudC50c1xudmFyIGZvY3VzYWJsZVNlbGVjdG9yID0gW1xuICBcIltjb250ZW50RWRpdGFibGU9dHJ1ZV1cIixcbiAgXCJbdGFiaW5kZXhdXCIsXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaWZyYW1lXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwic2VsZWN0Om5vdChbZGlzYWJsZWRdKVwiLFxuICBcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKVwiXG5dLm1hcChmYWxzZSA/IChzZWxlY3RvcikgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXg9Jy0xJ10pOm5vdChbc3R5bGUqPSdkaXNwbGF5OiBub25lJ10pYCA6IChzZWxlY3RvcikgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXg9Jy0xJ10pYCkuam9pbihcIixcIik7XG5mdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyhjb250YWluZXIgPSBkb2N1bWVudC5ib2R5KSB7XG4gIGlmIChjb250YWluZXIgPT0gbnVsbClcbiAgICByZXR1cm4gW107XG4gIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGZvY3VzYWJsZVNlbGVjdG9yKSk7XG59XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudCwgbW9kZSA9IDAgLyogU3RyaWN0ICovKSB7XG4gIHZhciBfYTtcbiAgaWYgKGVsZW1lbnQgPT09ICgoX2EgPSBnZXRPd25lckRvY3VtZW50KGVsZW1lbnQpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYm9keSkpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbWF0Y2gobW9kZSwge1xuICAgIFswIC8qIFN0cmljdCAqL10oKSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKGZvY3VzYWJsZVNlbGVjdG9yKTtcbiAgICB9LFxuICAgIFsxIC8qIExvb3NlICovXSgpIHtcbiAgICAgIGxldCBuZXh0ID0gZWxlbWVudDtcbiAgICAgIHdoaWxlIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0Lm1hdGNoZXMoZm9jdXNhYmxlU2VsZWN0b3IpKVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnRFbGVtZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBmb2N1c0VsZW1lbnQoZWxlbWVudCkge1xuICBlbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbn1cbnZhciBzZWxlY3RhYmxlU2VsZWN0b3IgPSBbXCJ0ZXh0YXJlYVwiLCBcImlucHV0XCJdLmpvaW4oXCIsXCIpO1xuZnVuY3Rpb24gaXNTZWxlY3RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBfYSwgX2I7XG4gIHJldHVybiAoX2IgPSAoX2EgPSBlbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbGVtZW50Lm1hdGNoZXMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKGVsZW1lbnQsIHNlbGVjdGFibGVTZWxlY3RvcikpICE9IG51bGwgPyBfYiA6IGZhbHNlO1xufVxuZnVuY3Rpb24gc29ydEJ5RG9tTm9kZShub2RlcywgcmVzb2x2ZUtleSA9IChpKSA9PiBpKSB7XG4gIHJldHVybiBub2Rlcy5zbGljZSgpLnNvcnQoKGFJdGVtLCB6SXRlbSkgPT4ge1xuICAgIGxldCBhID0gcmVzb2x2ZUtleShhSXRlbSk7XG4gICAgbGV0IHogPSByZXNvbHZlS2V5KHpJdGVtKTtcbiAgICBpZiAoYSA9PT0gbnVsbCB8fCB6ID09PSBudWxsKVxuICAgICAgcmV0dXJuIDA7XG4gICAgbGV0IHBvc2l0aW9uID0gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih6KTtcbiAgICBpZiAocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORylcbiAgICAgIHJldHVybiAtMTtcbiAgICBpZiAocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORylcbiAgICAgIHJldHVybiAxO1xuICAgIHJldHVybiAwO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZvY3VzSW4oY29udGFpbmVyLCBmb2N1cywgc29ydGVkID0gdHJ1ZSkge1xuICB2YXIgX2E7XG4gIGxldCBvd25lckRvY3VtZW50ID0gKF9hID0gQXJyYXkuaXNBcnJheShjb250YWluZXIpID8gY29udGFpbmVyLmxlbmd0aCA+IDAgPyBjb250YWluZXJbMF0ub3duZXJEb2N1bWVudCA6IGRvY3VtZW50IDogY29udGFpbmVyID09IG51bGwgPyB2b2lkIDAgOiBjb250YWluZXIub3duZXJEb2N1bWVudCkgIT0gbnVsbCA/IF9hIDogZG9jdW1lbnQ7XG4gIGxldCBlbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoY29udGFpbmVyKSA/IHNvcnRlZCA/IHNvcnRCeURvbU5vZGUoY29udGFpbmVyKSA6IGNvbnRhaW5lciA6IGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lcik7XG4gIGxldCBhY3RpdmUgPSBvd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGxldCBkaXJlY3Rpb24gPSAoKCkgPT4ge1xuICAgIGlmIChmb2N1cyAmICgxIC8qIEZpcnN0ICovIHwgNCAvKiBOZXh0ICovKSlcbiAgICAgIHJldHVybiAxIC8qIE5leHQgKi87XG4gICAgaWYgKGZvY3VzICYgKDIgLyogUHJldmlvdXMgKi8gfCA4IC8qIExhc3QgKi8pKVxuICAgICAgcmV0dXJuIC0xIC8qIFByZXZpb3VzICovO1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRm9jdXMuRmlyc3QsIEZvY3VzLlByZXZpb3VzLCBGb2N1cy5OZXh0IG9yIEZvY3VzLkxhc3RcIik7XG4gIH0pKCk7XG4gIGxldCBzdGFydEluZGV4ID0gKCgpID0+IHtcbiAgICBpZiAoZm9jdXMgJiAxIC8qIEZpcnN0ICovKVxuICAgICAgcmV0dXJuIDA7XG4gICAgaWYgKGZvY3VzICYgMiAvKiBQcmV2aW91cyAqLylcbiAgICAgIHJldHVybiBNYXRoLm1heCgwLCBlbGVtZW50cy5pbmRleE9mKGFjdGl2ZSkpIC0gMTtcbiAgICBpZiAoZm9jdXMgJiA0IC8qIE5leHQgKi8pXG4gICAgICByZXR1cm4gTWF0aC5tYXgoMCwgZWxlbWVudHMuaW5kZXhPZihhY3RpdmUpKSArIDE7XG4gICAgaWYgKGZvY3VzICYgOCAvKiBMYXN0ICovKVxuICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBGb2N1cy5GaXJzdCwgRm9jdXMuUHJldmlvdXMsIEZvY3VzLk5leHQgb3IgRm9jdXMuTGFzdFwiKTtcbiAgfSkoKTtcbiAgbGV0IGZvY3VzT3B0aW9ucyA9IGZvY3VzICYgMzIgLyogTm9TY3JvbGwgKi8gPyB7IHByZXZlbnRTY3JvbGw6IHRydWUgfSA6IHt9O1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IHRvdGFsID0gZWxlbWVudHMubGVuZ3RoO1xuICBsZXQgbmV4dCA9IHZvaWQgMDtcbiAgZG8ge1xuICAgIGlmIChvZmZzZXQgPj0gdG90YWwgfHwgb2Zmc2V0ICsgdG90YWwgPD0gMClcbiAgICAgIHJldHVybiAwIC8qIEVycm9yICovO1xuICAgIGxldCBuZXh0SWR4ID0gc3RhcnRJbmRleCArIG9mZnNldDtcbiAgICBpZiAoZm9jdXMgJiAxNiAvKiBXcmFwQXJvdW5kICovKSB7XG4gICAgICBuZXh0SWR4ID0gKG5leHRJZHggKyB0b3RhbCkgJSB0b3RhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5leHRJZHggPCAwKVxuICAgICAgICByZXR1cm4gMyAvKiBVbmRlcmZsb3cgKi87XG4gICAgICBpZiAobmV4dElkeCA+PSB0b3RhbClcbiAgICAgICAgcmV0dXJuIDEgLyogT3ZlcmZsb3cgKi87XG4gICAgfVxuICAgIG5leHQgPSBlbGVtZW50c1tuZXh0SWR4XTtcbiAgICBuZXh0ID09IG51bGwgPyB2b2lkIDAgOiBuZXh0LmZvY3VzKGZvY3VzT3B0aW9ucyk7XG4gICAgb2Zmc2V0ICs9IGRpcmVjdGlvbjtcbiAgfSB3aGlsZSAobmV4dCAhPT0gb3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgaWYgKCFuZXh0Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpKVxuICAgIG5leHQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCIwXCIpO1xuICBpZiAoZm9jdXMgJiAoNCAvKiBOZXh0ICovIHwgMiAvKiBQcmV2aW91cyAqLykgJiYgaXNTZWxlY3RhYmxlRWxlbWVudChuZXh0KSkge1xuICAgIG5leHQuc2VsZWN0KCk7XG4gIH1cbiAgcmV0dXJuIDIgLyogU3VjY2VzcyAqLztcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS13aW5kb3ctZXZlbnQudHNcbnZhciBpbXBvcnRfdnVlNSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5mdW5jdGlvbiB1c2VXaW5kb3dFdmVudCh0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICByZXR1cm47XG4gICgwLCBpbXBvcnRfdnVlNS53YXRjaEVmZmVjdCkoKG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvbkludmFsaWRhdGUoKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpKTtcbiAgfSk7XG59XG5cbi8vIHNyYy9ob29rcy91c2Utb3V0c2lkZS1jbGljay50c1xudmFyIGltcG9ydF92dWU2ID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjb250YWluZXJzLCBjYiwgZW5hYmxlZCA9ICgwLCBpbXBvcnRfdnVlNi5jb21wdXRlZCkoKCkgPT4gdHJ1ZSkpIHtcbiAgZnVuY3Rpb24gaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50LCByZXNvbHZlVGFyZ2V0KSB7XG4gICAgaWYgKCFlbmFibGVkLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCB0YXJnZXQgPSByZXNvbHZlVGFyZ2V0KGV2ZW50KTtcbiAgICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGFyZ2V0Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICByZXR1cm47XG4gICAgbGV0IF9jb250YWluZXJzID0gZnVuY3Rpb24gcmVzb2x2ZShjb250YWluZXJzMikge1xuICAgICAgaWYgKHR5cGVvZiBjb250YWluZXJzMiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGNvbnRhaW5lcnMyKCkpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGFpbmVyczIpKSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXJzMjtcbiAgICAgIH1cbiAgICAgIGlmIChjb250YWluZXJzMiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gY29udGFpbmVyczI7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2NvbnRhaW5lcnMyXTtcbiAgICB9KGNvbnRhaW5lcnMpO1xuICAgIGZvciAobGV0IGNvbnRhaW5lciBvZiBfY29udGFpbmVycykge1xuICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbnVsbClcbiAgICAgICAgY29udGludWU7XG4gICAgICBsZXQgZG9tTm9kZSA9IGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gY29udGFpbmVyIDogZG9tKGNvbnRhaW5lcik7XG4gICAgICBpZiAoZG9tTm9kZSA9PSBudWxsID8gdm9pZCAwIDogZG9tTm9kZS5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc0ZvY3VzYWJsZUVsZW1lbnQodGFyZ2V0LCAxIC8qIExvb3NlICovKSAmJiB0YXJnZXQudGFiSW5kZXggIT09IC0xKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2IoZXZlbnQsIHRhcmdldCk7XG4gIH1cbiAgdXNlV2luZG93RXZlbnQoXCJjbGlja1wiLCAoZXZlbnQpID0+IGhhbmRsZU91dHNpZGVDbGljayhldmVudCwgKGV2ZW50MikgPT4gZXZlbnQyLnRhcmdldCksIHRydWUpO1xuICB1c2VXaW5kb3dFdmVudChcImJsdXJcIiwgKGV2ZW50KSA9PiBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQsICgpID0+IHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IG51bGwpLCB0cnVlKTtcbn1cblxuLy8gc3JjL2ludGVybmFsL2hpZGRlbi50c1xudmFyIGltcG9ydF92dWU3ID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBIaWRkZW4gPSAoMCwgaW1wb3J0X3Z1ZTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiSGlkZGVuXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIGZlYXR1cmVzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSAvKiBOb25lICovIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzIH0pIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgZmVhdHVyZXMsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IChmZWF0dXJlcyAmIDIgLyogRm9jdXNhYmxlICovKSA9PT0gMiAvKiBGb2N1c2FibGUgKi8gPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgbWFyZ2luOiAtMSxcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICBjbGlwOiBcInJlY3QoMCwgMCwgMCwgMClcIixcbiAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiBcIjBcIixcbiAgICAgICAgICAuLi4oZmVhdHVyZXMgJiA0IC8qIEhpZGRlbiAqLykgPT09IDQgLyogSGlkZGVuICovICYmICEoKGZlYXR1cmVzICYgMiAvKiBGb2N1c2FibGUgKi8pID09PSAyIC8qIEZvY3VzYWJsZSAqLykgJiYgeyBkaXNwbGF5OiBcIm5vbmVcIiB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiSGlkZGVuXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvdXRpbHMvZm9ybS50c1xuZnVuY3Rpb24gb2JqZWN0VG9Gb3JtRW50cmllcyhzb3VyY2UgPSB7fSwgcGFyZW50S2V5ID0gbnVsbCwgZW50cmllcyA9IFtdKSB7XG4gIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgYXBwZW5kKGVudHJpZXMsIGNvbXBvc2VLZXkocGFyZW50S2V5LCBrZXkpLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBjb21wb3NlS2V5KHBhcmVudCwga2V5KSB7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQgKyBcIltcIiArIGtleSArIFwiXVwiIDoga2V5O1xufVxuZnVuY3Rpb24gYXBwZW5kKGVudHJpZXMsIGtleSwgdmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChsZXQgW3N1YmtleSwgc3VidmFsdWVdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgYXBwZW5kKGVudHJpZXMsIGNvbXBvc2VLZXkoa2V5LCBzdWJrZXkudG9TdHJpbmcoKSksIHN1YnZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlLnRvSVNPU3RyaW5nKCldKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlID8gXCIxXCIgOiBcIjBcIl0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGVudHJpZXMucHVzaChba2V5LCBgJHt2YWx1ZX1gXSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgIGVudHJpZXMucHVzaChba2V5LCBcIlwiXSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0VG9Gb3JtRW50cmllcyh2YWx1ZSwga2V5LCBlbnRyaWVzKTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0ZW1wdFN1Ym1pdChlbGVtZW50KSB7XG4gIHZhciBfYTtcbiAgbGV0IGZvcm0gPSAoX2EgPSBlbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbGVtZW50LmZvcm0pICE9IG51bGwgPyBfYSA6IGVsZW1lbnQuY2xvc2VzdChcImZvcm1cIik7XG4gIGlmICghZm9ybSlcbiAgICByZXR1cm47XG4gIGZvciAobGV0IGVsZW1lbnQyIG9mIGZvcm0uZWxlbWVudHMpIHtcbiAgICBpZiAoZWxlbWVudDIudGFnTmFtZSA9PT0gXCJJTlBVVFwiICYmIGVsZW1lbnQyLnR5cGUgPT09IFwic3VibWl0XCIgfHwgZWxlbWVudDIudGFnTmFtZSA9PT0gXCJCVVRUT05cIiAmJiBlbGVtZW50Mi50eXBlID09PSBcInN1Ym1pdFwiIHx8IGVsZW1lbnQyLm5vZGVOYW1lID09PSBcIklOUFVUXCIgJiYgZWxlbWVudDIudHlwZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBlbGVtZW50Mi5jbGljaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vLyBzcmMvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC50c1xudmFyIENvbWJvYm94Q29udGV4dCA9IFN5bWJvbChcIkNvbWJvYm94Q29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZUNvbWJvYm94Q29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTguaW5qZWN0KShDb21ib2JveENvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8Q29tYm9ib3ggLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlQ29tYm9ib3hDb250ZXh0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG52YXIgQ29tYm9ib3ggPSAoMCwgaW1wb3J0X3Z1ZTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiQ29tYm9ib3hcIixcbiAgZW1pdHM6IHsgXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiOiAoX3ZhbHVlKSA9PiB0cnVlIH0sXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW5dIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICBudWxsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG11bHRpcGxlOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGVtaXQgfSkge1xuICAgIGxldCBjb21ib2JveFN0YXRlID0gKDAsIGltcG9ydF92dWU4LnJlZikoMSAvKiBDbG9zZWQgKi8pO1xuICAgIGxldCBsYWJlbFJlZiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKG51bGwpO1xuICAgIGxldCBpbnB1dFJlZiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKG51bGwpO1xuICAgIGxldCBidXR0b25SZWYgPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKShudWxsKTtcbiAgICBsZXQgb3B0aW9uc1JlZiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKG51bGwpO1xuICAgIGxldCBvcHRpb25zUHJvcHNSZWYgPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKSh7XG4gICAgICBzdGF0aWM6IGZhbHNlLFxuICAgICAgaG9sZDogZmFsc2VcbiAgICB9KTtcbiAgICBsZXQgb3B0aW9ucyA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKFtdKTtcbiAgICBsZXQgYWN0aXZlT3B0aW9uSW5kZXggPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKShudWxsKTtcbiAgICBsZXQgYWN0aXZhdGlvblRyaWdnZXIgPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKSgxIC8qIE90aGVyICovKTtcbiAgICBsZXQgZGVmYXVsdFRvRmlyc3RPcHRpb24gPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKShmYWxzZSk7XG4gICAgZnVuY3Rpb24gYWRqdXN0T3JkZXJlZFN0YXRlKGFkanVzdG1lbnQgPSAoaSkgPT4gaSkge1xuICAgICAgbGV0IGN1cnJlbnRBY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCA/IG9wdGlvbnMudmFsdWVbYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdIDogbnVsbDtcbiAgICAgIGxldCBzb3J0ZWRPcHRpb25zID0gc29ydEJ5RG9tTm9kZShhZGp1c3RtZW50KG9wdGlvbnMudmFsdWUuc2xpY2UoKSksIChvcHRpb24pID0+IGRvbShvcHRpb24uZGF0YVJlZi5kb21SZWYpKTtcbiAgICAgIGxldCBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID0gY3VycmVudEFjdGl2ZU9wdGlvbiA/IHNvcnRlZE9wdGlvbnMuaW5kZXhPZihjdXJyZW50QWN0aXZlT3B0aW9uKSA6IG51bGw7XG4gICAgICBpZiAoYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpb25zOiBzb3J0ZWRPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tb2RlbFZhbHVlKTtcbiAgICBsZXQgbW9kZSA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gcHJvcHMubXVsdGlwbGUgPyAxIC8qIE11bHRpICovIDogMCAvKiBTaW5nbGUgKi8pO1xuICAgIGxldCBudWxsYWJsZSA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gcHJvcHMubnVsbGFibGUpO1xuICAgIGxldCBhcGkgPSB7XG4gICAgICBjb21ib2JveFN0YXRlLFxuICAgICAgdmFsdWUsXG4gICAgICBtb2RlLFxuICAgICAgY29tcGFyZShhLCB6KSB7XG4gICAgICAgIHJldHVybiBhID09PSB6O1xuICAgICAgfSxcbiAgICAgIG51bGxhYmxlLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsYWJlbFJlZixcbiAgICAgIGJ1dHRvblJlZixcbiAgICAgIG9wdGlvbnNSZWYsXG4gICAgICBkaXNhYmxlZDogKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5kaXNhYmxlZCksXG4gICAgICBvcHRpb25zLFxuICAgICAgY2hhbmdlKHZhbHVlMikge1xuICAgICAgICBlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgdmFsdWUyKTtcbiAgICAgIH0sXG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICAgIGlmIChkZWZhdWx0VG9GaXJzdE9wdGlvbi52YWx1ZSAmJiBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgbG9jYWxBY3RpdmVPcHRpb25JbmRleCA9IG9wdGlvbnMudmFsdWUuZmluZEluZGV4KChvcHRpb24pID0+ICFvcHRpb24uZGF0YVJlZi5kaXNhYmxlZCk7XG4gICAgICAgICAgaWYgKGxvY2FsQWN0aXZlT3B0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlO1xuICAgICAgfSksXG4gICAgICBhY3RpdmF0aW9uVHJpZ2dlcixcbiAgICAgIGlucHV0UHJvcHNSZWY6ICgwLCBpbXBvcnRfdnVlOC5yZWYpKHsgZGlzcGxheVZhbHVlOiB2b2lkIDAgfSksXG4gICAgICBvcHRpb25zUHJvcHNSZWYsXG4gICAgICBjbG9zZUNvbWJvYm94KCkge1xuICAgICAgICBkZWZhdWx0VG9GaXJzdE9wdGlvbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb21ib2JveFN0YXRlLnZhbHVlID0gMSAvKiBDbG9zZWQgKi87XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBvcGVuQ29tYm9ib3goKSB7XG4gICAgICAgIGRlZmF1bHRUb0ZpcnN0T3B0aW9uLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBvcHRpb25JZHggPSBvcHRpb25zLnZhbHVlLmZpbmRJbmRleCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IG9wdGlvblZhbHVlID0gKDAsIGltcG9ydF92dWU4LnRvUmF3KShvcHRpb24uZGF0YVJlZi52YWx1ZSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gbWF0Y2gobW9kZS52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKG9wdGlvblZhbHVlKSksXG4gICAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zb21lKCh2YWx1ZTIpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlOC50b1JhdykodmFsdWUyKSwgKDAsIGltcG9ydF92dWU4LnRvUmF3KShvcHRpb25WYWx1ZSkpKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25JZHggIT09IC0xKSB7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPSBvcHRpb25JZHg7XG4gICAgICAgIH1cbiAgICAgICAgY29tYm9ib3hTdGF0ZS52YWx1ZSA9IDAgLyogT3BlbiAqLztcbiAgICAgIH0sXG4gICAgICBnb1RvT3B0aW9uKGZvY3VzLCBpZDIsIHRyaWdnZXIpIHtcbiAgICAgICAgZGVmYXVsdFRvRmlyc3RPcHRpb24udmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG9wdGlvbnNSZWYudmFsdWUgJiYgIW9wdGlvbnNQcm9wc1JlZi52YWx1ZS5zdGF0aWMgJiYgY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFkanVzdGVkU3RhdGUgPSBhZGp1c3RPcmRlcmVkU3RhdGUoKTtcbiAgICAgICAgaWYgKGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICBsZXQgbG9jYWxBY3RpdmVPcHRpb25JbmRleCA9IGFkanVzdGVkU3RhdGUub3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gIW9wdGlvbi5kYXRhUmVmLmRpc2FibGVkKTtcbiAgICAgICAgICBpZiAobG9jYWxBY3RpdmVPcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSBsb2NhbEFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gY2FsY3VsYXRlQWN0aXZlSW5kZXgoZm9jdXMgPT09IDQgLyogU3BlY2lmaWMgKi8gPyB7IGZvY3VzOiA0IC8qIFNwZWNpZmljICovLCBpZDogaWQyIH0gOiB7IGZvY3VzIH0sIHtcbiAgICAgICAgICByZXNvbHZlSXRlbXM6ICgpID0+IGFkanVzdGVkU3RhdGUub3B0aW9ucyxcbiAgICAgICAgICByZXNvbHZlQWN0aXZlSW5kZXg6ICgpID0+IGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgcmVzb2x2ZUlkOiAob3B0aW9uKSA9PiBvcHRpb24uaWQsXG4gICAgICAgICAgcmVzb2x2ZURpc2FibGVkOiAob3B0aW9uKSA9PiBvcHRpb24uZGF0YVJlZi5kaXNhYmxlZFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gdHJpZ2dlciAhPSBudWxsID8gdHJpZ2dlciA6IDEgLyogT3RoZXIgKi87XG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLm9wdGlvbnM7XG4gICAgICB9LFxuICAgICAgc3luY0lucHV0VmFsdWUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgbGV0IHZhbHVlMiA9IGFwaS52YWx1ZS52YWx1ZTtcbiAgICAgICAgaWYgKCFkb20oYXBpLmlucHV0UmVmKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBkaXNwbGF5VmFsdWUgPSBhcGkuaW5wdXRQcm9wc1JlZi52YWx1ZS5kaXNwbGF5VmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgZGlzcGxheVZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBhcGkuaW5wdXRSZWYudmFsdWUudmFsdWUgPSAoX2EgPSBkaXNwbGF5VmFsdWUodmFsdWUyKSkgIT0gbnVsbCA/IF9hIDogXCJcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgYXBpLmlucHV0UmVmLnZhbHVlLnZhbHVlID0gdmFsdWUyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwaS5pbnB1dFJlZi52YWx1ZS52YWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZWxlY3RPcHRpb24oaWQyKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zLnZhbHVlLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkMik7XG4gICAgICAgIGlmICghb3B0aW9uKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHsgZGF0YVJlZiB9ID0gb3B0aW9uO1xuICAgICAgICBlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgbWF0Y2gobW9kZS52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IGRhdGFSZWYudmFsdWUsXG4gICAgICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29weSA9ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zbGljZSgpO1xuICAgICAgICAgICAgbGV0IHJhdyA9ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoZGF0YVJlZi52YWx1ZSk7XG4gICAgICAgICAgICBsZXQgaWR4ID0gY29weS5pbmRleE9mKHJhdyk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb3B5LnB1c2gocmF3KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvcHkuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgYXBpLnN5bmNJbnB1dFZhbHVlKCk7XG4gICAgICB9LFxuICAgICAgc2VsZWN0QWN0aXZlT3B0aW9uKCkge1xuICAgICAgICBpZiAoYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHsgZGF0YVJlZiwgaWQ6IGlkMiB9ID0gb3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdO1xuICAgICAgICBlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgbWF0Y2gobW9kZS52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IGRhdGFSZWYudmFsdWUsXG4gICAgICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29weSA9ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zbGljZSgpO1xuICAgICAgICAgICAgbGV0IHJhdyA9ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoZGF0YVJlZi52YWx1ZSk7XG4gICAgICAgICAgICBsZXQgaWR4ID0gY29weS5pbmRleE9mKHJhdyk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb3B5LnB1c2gocmF3KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvcHkuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgYXBpLnN5bmNJbnB1dFZhbHVlKCk7XG4gICAgICAgIGFwaS5nb1RvT3B0aW9uKDQgLyogU3BlY2lmaWMgKi8sIGlkMik7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJPcHRpb24oaWQyLCBkYXRhUmVmKSB7XG4gICAgICAgIGxldCBvcHRpb24gPSB7IGlkOiBpZDIsIGRhdGFSZWYgfTtcbiAgICAgICAgbGV0IGFkanVzdGVkU3RhdGUgPSBhZGp1c3RPcmRlcmVkU3RhdGUoKG9wdGlvbnMyKSA9PiBbLi4ub3B0aW9uczIsIG9wdGlvbl0pO1xuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBsZXQgb3B0aW9uVmFsdWUgPSBkYXRhUmVmLnZhbHVlLnZhbHVlO1xuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IG1hdGNoKG1vZGUudmFsdWUsIHtcbiAgICAgICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKSwgKDAsIGltcG9ydF92dWU4LnRvUmF3KShvcHRpb25WYWx1ZSkpLFxuICAgICAgICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSkuc29tZSgodmFsdWUyKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKHZhbHVlMiksICgwLCBpbXBvcnRfdnVlOC50b1Jhdykob3B0aW9uVmFsdWUpKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSBhZGp1c3RlZFN0YXRlLm9wdGlvbnMuaW5kZXhPZihvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gMSAvKiBPdGhlciAqLztcbiAgICAgIH0sXG4gICAgICB1bnJlZ2lzdGVyT3B0aW9uKGlkMikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgob3B0aW9uczIpID0+IHtcbiAgICAgICAgICBsZXQgaWR4ID0gb3B0aW9uczIuZmluZEluZGV4KChhKSA9PiBhLmlkID09PSBpZDIpO1xuICAgICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgICAgb3B0aW9uczIuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMyO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGFkanVzdGVkU3RhdGUub3B0aW9ucztcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPSBhZGp1c3RlZFN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IDEgLyogT3RoZXIgKi87XG4gICAgICB9XG4gICAgfTtcbiAgICB1c2VPdXRzaWRlQ2xpY2soW2lucHV0UmVmLCBidXR0b25SZWYsIG9wdGlvbnNSZWZdLCAoKSA9PiBhcGkuY2xvc2VDb21ib2JveCgpLCAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IGNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLykpO1xuICAgICgwLCBpbXBvcnRfdnVlOC53YXRjaCkoW2FwaS52YWx1ZSwgYXBpLmlucHV0UmVmXSwgKCkgPT4gYXBpLnN5bmNJbnB1dFZhbHVlKCksIHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlOC53YXRjaCkoYXBpLmNvbWJvYm94U3RhdGUsIChzdGF0ZSkgPT4ge1xuICAgICAgaWYgKHN0YXRlID09PSAxIC8qIENsb3NlZCAqLykge1xuICAgICAgICBhcGkuc3luY0lucHV0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTgucHJvdmlkZSkoQ29tYm9ib3hDb250ZXh0LCBhcGkpO1xuICAgIHVzZU9wZW5DbG9zZWRQcm92aWRlcigoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IG1hdGNoKGNvbWJvYm94U3RhdGUudmFsdWUsIHtcbiAgICAgIFswIC8qIE9wZW4gKi9dOiAwIC8qIE9wZW4gKi8sXG4gICAgICBbMSAvKiBDbG9zZWQgKi9dOiAxIC8qIENsb3NlZCAqL1xuICAgIH0pKSk7XG4gICAgbGV0IGFjdGl2ZU9wdGlvbiA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsID8gbnVsbCA6IG9wdGlvbnMudmFsdWVbYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlXS5kYXRhUmVmLnZhbHVlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSwgbW9kZWxWYWx1ZSwgZGlzYWJsZWQsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgbGV0IHNsb3QgPSB7XG4gICAgICAgIG9wZW46IGNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGFjdGl2ZUluZGV4OiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUsXG4gICAgICAgIGFjdGl2ZU9wdGlvbjogYWN0aXZlT3B0aW9uLnZhbHVlXG4gICAgICB9O1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlOC5oKShpbXBvcnRfdnVlOC5GcmFnbWVudCwgW1xuICAgICAgICAuLi5uYW1lICE9IG51bGwgJiYgbW9kZWxWYWx1ZSAhPSBudWxsID8gb2JqZWN0VG9Gb3JtRW50cmllcyh7IFtuYW1lXTogbW9kZWxWYWx1ZSB9KS5tYXAoKFtuYW1lMiwgdmFsdWUyXSkgPT4gKDAsIGltcG9ydF92dWU4LmgpKEhpZGRlbiwgY29tcGFjdCh7XG4gICAgICAgICAgZmVhdHVyZXM6IDQgLyogSGlkZGVuICovLFxuICAgICAgICAgIGtleTogbmFtZTIsXG4gICAgICAgICAgYXM6IFwiaW5wdXRcIixcbiAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiBuYW1lMixcbiAgICAgICAgICB2YWx1ZTogdmFsdWUyXG4gICAgICAgIH0pKSkgOiBbXSxcbiAgICAgICAgcmVuZGVyKHtcbiAgICAgICAgICB0aGVpclByb3BzOiB7XG4gICAgICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgICAgIC4uLm9taXQodGhlaXJQcm9wcywgW1wibnVsbGFibGVcIiwgXCJtdWx0aXBsZVwiLCBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJieVwiXSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgICBzbG90LFxuICAgICAgICAgIHNsb3RzLFxuICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgIG5hbWU6IFwiQ29tYm9ib3hcIlxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgQ29tYm9ib3hMYWJlbCA9ICgwLCBpbXBvcnRfdnVlOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJDb21ib2JveExhYmVsXCIsXG4gIHByb3BzOiB7IGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwibGFiZWxcIiB9IH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUNvbWJvYm94Q29udGV4dChcIkNvbWJvYm94TGFiZWxcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWNvbWJvYm94LWxhYmVsLSR7dXNlSWQoKX1gO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgKF9hID0gZG9tKGFwaS5pbnB1dFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHtcbiAgICAgICAgb3BlbjogYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgZGlzYWJsZWQ6IGFwaS5kaXNhYmxlZC52YWx1ZVxuICAgICAgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHsgaWQ6IGlkMiwgcmVmOiBhcGkubGFiZWxSZWYsIG9uQ2xpY2s6IGhhbmRsZUNsaWNrIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiQ29tYm9ib3hMYWJlbFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBDb21ib2JveEJ1dHRvbiA9ICgwLCBpbXBvcnRfdnVlOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJDb21ib2JveEJ1dHRvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiYnV0dG9uXCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUNvbWJvYm94Q29udGV4dChcIkNvbWJvYm94QnV0dG9uXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1jb21ib2JveC1idXR0b24tJHt1c2VJZCgpfWA7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5idXR0b25SZWYsICRlbDogYXBpLmJ1dHRvblJlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgaWYgKGFwaS5kaXNhYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pIHtcbiAgICAgICAgYXBpLmNsb3NlQ29tYm9ib3goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGFwaS5vcGVuQ29tYm9ib3goKTtcbiAgICAgIH1cbiAgICAgICgwLCBpbXBvcnRfdnVlOC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmlucHV0UmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCIgLyogQXJyb3dEb3duICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLykge1xuICAgICAgICAgICAgYXBpLm9wZW5Db21ib2JveCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTgubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBhcGkuaW5wdXRSZWYudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiQXJyb3dVcFwiIC8qIEFycm93VXAgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKSB7XG4gICAgICAgICAgICBhcGkub3BlbkNvbWJvYm94KCk7XG4gICAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTgubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhcGkudmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhcGkuZ29Ub09wdGlvbigzIC8qIExhc3QgKi8pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgKDAsIGltcG9ydF92dWU4Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gYXBpLmlucHV0UmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiIC8qIEVzY2FwZSAqLzpcbiAgICAgICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChhcGkub3B0aW9uc1JlZi52YWx1ZSAmJiAhYXBpLm9wdGlvbnNQcm9wc1JlZi52YWx1ZS5zdGF0aWMpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlOC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGFwaS5pbnB1dFJlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB0eXBlID0gdXNlUmVzb2x2ZUJ1dHRvblR5cGUoKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBhcGkuYnV0dG9uUmVmKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGxldCBzbG90ID0ge1xuICAgICAgICBvcGVuOiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBkaXNhYmxlZDogYXBpLmRpc2FibGVkLnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByZWY6IGFwaS5idXR0b25SZWYsXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHR5cGU6IHR5cGUudmFsdWUsXG4gICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiB0cnVlLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogKF9hID0gZG9tKGFwaS5vcHRpb25zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogYXBpLmRpc2FibGVkLnZhbHVlID8gdm9pZCAwIDogYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXBpLmxhYmVsUmVmLnZhbHVlID8gWyhfYiA9IGRvbShhcGkubGFiZWxSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQsIGlkMl0uam9pbihcIiBcIikgOiB2b2lkIDAsXG4gICAgICAgIGRpc2FibGVkOiBhcGkuZGlzYWJsZWQudmFsdWUgPT09IHRydWUgPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleWRvd24sXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIkNvbWJvYm94QnV0dG9uXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIENvbWJvYm94SW5wdXQgPSAoMCwgaW1wb3J0X3Z1ZTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiQ29tYm9ib3hJbnB1dFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiaW5wdXRcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc3BsYXlWYWx1ZTogeyB0eXBlOiBGdW5jdGlvbiB9XG4gIH0sXG4gIGVtaXRzOiB7XG4gICAgY2hhbmdlOiAoX3ZhbHVlKSA9PiB0cnVlXG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGVtaXQsIGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlQ29tYm9ib3hDb250ZXh0KFwiQ29tYm9ib3hJbnB1dFwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktY29tYm9ib3gtaW5wdXQtJHt1c2VJZCgpfWA7XG4gICAgYXBpLmlucHV0UHJvcHNSZWYgPSAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IHByb3BzKTtcbiAgICBleHBvc2UoeyBlbDogYXBpLmlucHV0UmVmLCAkZWw6IGFwaS5pbnB1dFJlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiQmFja3NwYWNlXCIgLyogQmFja3NwYWNlICovOlxuICAgICAgICBjYXNlIFwiRGVsZXRlXCIgLyogRGVsZXRlICovOlxuICAgICAgICAgIGlmIChhcGkubW9kZS52YWx1ZSAhPT0gMCAvKiBTaW5nbGUgKi8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKCFhcGkubnVsbGFibGUudmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbGV0IGlucHV0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgIGFwaS5jaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgIGxldCBvcHRpb25zID0gZG9tKGFwaS5vcHRpb25zUmVmKTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNjcm9sbFRvcCA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXBpLmdvVG9PcHRpb24oNSAvKiBOb3RoaW5nICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkVudGVyXCIgLyogRW50ZXIgKi86XG4gICAgICAgICAgaWYgKGFwaS5jb21ib2JveFN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcGkuc2VsZWN0QWN0aXZlT3B0aW9uKCk7XG4gICAgICAgICAgaWYgKGFwaS5tb2RlLnZhbHVlID09PSAwIC8qIFNpbmdsZSAqLykge1xuICAgICAgICAgICAgYXBpLmNsb3NlQ29tYm9ib3goKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2goYXBpLmNvbWJvYm94U3RhdGUudmFsdWUsIHtcbiAgICAgICAgICAgIFswIC8qIE9wZW4gKi9dOiAoKSA9PiBhcGkuZ29Ub09wdGlvbigyIC8qIE5leHQgKi8pLFxuICAgICAgICAgICAgWzEgLyogQ2xvc2VkICovXTogKCkgPT4gYXBpLm9wZW5Db21ib2JveCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCIgLyogQXJyb3dVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBtYXRjaChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogT3BlbiAqL106ICgpID0+IGFwaS5nb1RvT3B0aW9uKDEgLyogUHJldmlvdXMgKi8pLFxuICAgICAgICAgICAgWzEgLyogQ2xvc2VkICovXTogKCkgPT4ge1xuICAgICAgICAgICAgICBhcGkub3BlbkNvbWJvYm94KCk7XG4gICAgICAgICAgICAgICgwLCBpbXBvcnRfdnVlOC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXBpLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBhcGkuZ29Ub09wdGlvbigzIC8qIExhc3QgKi8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJIb21lXCIgLyogSG9tZSAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VVcFwiIC8qIFBhZ2VVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbigwIC8qIEZpcnN0ICovKTtcbiAgICAgICAgY2FzZSBcIkVuZFwiIC8qIEVuZCAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VEb3duXCIgLyogUGFnZURvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gYXBpLmdvVG9PcHRpb24oMyAvKiBMYXN0ICovKTtcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiIC8qIEVzY2FwZSAqLzpcbiAgICAgICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChhcGkub3B0aW9uc1JlZi52YWx1ZSAmJiAhYXBpLm9wdGlvbnNQcm9wc1JlZi52YWx1ZS5zdGF0aWMpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVGFiXCIgLyogVGFiICovOlxuICAgICAgICAgIGlmIChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGFwaS5zZWxlY3RBY3RpdmVPcHRpb24oKTtcbiAgICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICAgIGVtaXQoXCJjaGFuZ2VcIiwgZXZlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkge1xuICAgICAgYXBpLm9wZW5Db21ib2JveCgpO1xuICAgICAgZW1pdChcImNoYW5nZVwiLCBldmVudCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAoX2EgPSBhcGkub3B0aW9uc1JlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogYXBpLmRpc2FibGVkLnZhbHVlID8gdm9pZCAwIDogYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsID8gdm9pZCAwIDogKF9iID0gYXBpLm9wdGlvbnMudmFsdWVbYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkLFxuICAgICAgICBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCI6IGFwaS5tb2RlLnZhbHVlID09PSAxIC8qIE11bHRpICovID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogKF9lID0gKF9jID0gZG9tKGFwaS5sYWJlbFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYy5pZCkgIT0gbnVsbCA/IF9lIDogKF9kID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2QuaWQsXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgICAgb25JbnB1dDogaGFuZGxlSW5wdXQsXG4gICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgdHlwZTogKF9mID0gYXR0cnMudHlwZSkgIT0gbnVsbCA/IF9mIDogXCJ0ZXh0XCIsXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICByZWY6IGFwaS5pbnB1dFJlZlxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gb21pdChwcm9wcywgW1wiZGlzcGxheVZhbHVlXCJdKTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICBuYW1lOiBcIkNvbWJvYm94SW5wdXRcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgQ29tYm9ib3hPcHRpb25zID0gKDAsIGltcG9ydF92dWU4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkNvbWJvYm94T3B0aW9uc1wiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwidWxcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhvbGQ6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlQ29tYm9ib3hDb250ZXh0KFwiQ29tYm9ib3hPcHRpb25zXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1jb21ib2JveC1vcHRpb25zLSR7dXNlSWQoKX1gO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkub3B0aW9uc1JlZiwgJGVsOiBhcGkub3B0aW9uc1JlZiB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTgud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgIGFwaS5vcHRpb25zUHJvcHNSZWYudmFsdWUuc3RhdGljID0gcHJvcHMuc3RhdGljO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlOC53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgYXBpLm9wdGlvbnNQcm9wc1JlZi52YWx1ZS5ob2xkID0gcHJvcHMuaG9sZDtcbiAgICB9KTtcbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgdmlzaWJsZSA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgIH0pO1xuICAgIHVzZVRyZWVXYWxrZXIoe1xuICAgICAgY29udGFpbmVyOiAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IGRvbShhcGkub3B0aW9uc1JlZikpLFxuICAgICAgZW5hYmxlZDogKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSxcbiAgICAgIGFjY2VwdChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcInJvbGVcIikgPT09IFwib3B0aW9uXCIpXG4gICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKFwicm9sZVwiKSlcbiAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0sXG4gICAgICB3YWxrKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibm9uZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsID8gdm9pZCAwIDogKF9hID0gYXBpLm9wdGlvbnMudmFsdWVbYXBpLmFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAoX2QgPSAoX2IgPSBkb20oYXBpLmxhYmVsUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkKSAhPSBudWxsID8gX2QgOiAoX2MgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYy5pZCxcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBhcGkub3B0aW9uc1JlZixcbiAgICAgICAgcm9sZTogXCJsaXN0Ym94XCJcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IG9taXQocHJvcHMsIFtcImhvbGRcIl0pO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIHZpc2libGU6IHZpc2libGUudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiQ29tYm9ib3hPcHRpb25zXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIENvbWJvYm94T3B0aW9uID0gKDAsIGltcG9ydF92dWU4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkNvbWJvYm94T3B0aW9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJsaVwiIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW5dIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUNvbWJvYm94Q29udGV4dChcIkNvbWJvYm94T3B0aW9uXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1jb21ib2JveC1vcHRpb24tJHt1c2VJZCgpfWA7XG4gICAgbGV0IGludGVybmFsT3B0aW9uUmVmID0gKDAsIGltcG9ydF92dWU4LnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsT3B0aW9uUmVmLCAkZWw6IGludGVybmFsT3B0aW9uUmVmIH0pO1xuICAgIGxldCBhY3RpdmUgPSAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIHJldHVybiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgIT09IG51bGwgPyBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdLmlkID09PSBpZDIgOiBmYWxzZTtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0ZWQgPSAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IG1hdGNoKGFwaS5tb2RlLnZhbHVlLCB7XG4gICAgICBbMCAvKiBTaW5nbGUgKi9dOiAoKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSksICgwLCBpbXBvcnRfdnVlOC50b1JhdykocHJvcHMudmFsdWUpKSxcbiAgICAgIFsxIC8qIE11bHRpICovXTogKCkgPT4gKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLnNvbWUoKHZhbHVlKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKHZhbHVlKSwgKDAsIGltcG9ydF92dWU4LnRvUmF3KShwcm9wcy52YWx1ZSkpKVxuICAgIH0pKTtcbiAgICBsZXQgZGF0YVJlZiA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gKHtcbiAgICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIGRvbVJlZjogaW50ZXJuYWxPcHRpb25SZWZcbiAgICB9KSk7XG4gICAgKDAsIGltcG9ydF92dWU4Lm9uTW91bnRlZCkoKCkgPT4gYXBpLnJlZ2lzdGVyT3B0aW9uKGlkMiwgZGF0YVJlZikpO1xuICAgICgwLCBpbXBvcnRfdnVlOC5vblVubW91bnRlZCkoKCkgPT4gYXBpLnVucmVnaXN0ZXJPcHRpb24oaWQyKSk7XG4gICAgKDAsIGltcG9ydF92dWU4LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFhY3RpdmUudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkuYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPT09IDAgLyogUG9pbnRlciAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgKDAsIGltcG9ydF92dWU4Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBkb20oaW50ZXJuYWxPcHRpb25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc2Nyb2xsSW50b1ZpZXcpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB7IGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBpLnNlbGVjdE9wdGlvbihpZDIpO1xuICAgICAgaWYgKGFwaS5tb2RlLnZhbHVlID09PSAwIC8qIFNpbmdsZSAqLykge1xuICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAoX2EgPSBkb20oYXBpLmlucHV0UmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbig1IC8qIE5vdGhpbmcgKi8pO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlTW92ZSgpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyLCAwIC8qIFBvaW50ZXIgKi8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVMZWF2ZSgpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFhY3RpdmUudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkub3B0aW9uc1Byb3BzUmVmLnZhbHVlLmhvbGQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGFwaS5nb1RvT3B0aW9uKDUgLyogTm90aGluZyAqLyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBkaXNhYmxlZCB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgYWN0aXZlOiBhY3RpdmUudmFsdWUsIHNlbGVjdGVkOiBzZWxlY3RlZC52YWx1ZSwgZGlzYWJsZWQgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBpbnRlcm5hbE9wdGlvblJlZixcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdGFiSW5kZXg6IGRpc2FibGVkID09PSB0cnVlID8gdm9pZCAwIDogLTEsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA9PT0gdHJ1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZC52YWx1ZSA9PT0gdHJ1ZSA/IHNlbGVjdGVkLnZhbHVlIDogdm9pZCAwLFxuICAgICAgICBkaXNhYmxlZDogdm9pZCAwLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgIG9uUG9pbnRlcm1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uTW91c2Vtb3ZlOiBoYW5kbGVNb3ZlLFxuICAgICAgICBvblBvaW50ZXJsZWF2ZTogaGFuZGxlTGVhdmUsXG4gICAgICAgIG9uTW91c2VsZWF2ZTogaGFuZGxlTGVhdmVcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiQ29tYm9ib3hPcHRpb25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cudHNcbnZhciBpbXBvcnRfdnVlMTcgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mb2N1cy10cmFwL2ZvY3VzLXRyYXAudHNcbnZhciBpbXBvcnRfdnVlMTEgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvaG9va3MvdXNlLXRhYi1kaXJlY3Rpb24udHNcbnZhciBpbXBvcnRfdnVlOSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5mdW5jdGlvbiB1c2VUYWJEaXJlY3Rpb24oKSB7XG4gIGxldCBkaXJlY3Rpb24gPSAoMCwgaW1wb3J0X3Z1ZTkucmVmKSgwIC8qIEZvcndhcmRzICovKTtcbiAgdXNlV2luZG93RXZlbnQoXCJrZXlkb3duXCIsIChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIpIHtcbiAgICAgIGRpcmVjdGlvbi52YWx1ZSA9IGV2ZW50LnNoaWZ0S2V5ID8gMSAvKiBCYWNrd2FyZHMgKi8gOiAwIC8qIEZvcndhcmRzICovO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXJlY3Rpb247XG59XG5cbi8vIHNyYy9ob29rcy91c2UtZXZlbnQtbGlzdGVuZXIudHNcbnZhciBpbXBvcnRfdnVlMTAgPSByZXF1aXJlKFwidnVlXCIpO1xuZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICByZXR1cm47XG4gICgwLCBpbXBvcnRfdnVlMTAud2F0Y2hFZmZlY3QpKChvbkludmFsaWRhdGUpID0+IHtcbiAgICBlbGVtZW50ID0gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudCA6IHdpbmRvdztcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIG9uSW52YWxpZGF0ZSgoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpKTtcbiAgfSk7XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcC50c1xudmFyIEZlYXR1cmVzMyA9IC8qIEBfX1BVUkVfXyAqLyAoKEZlYXR1cmVzNCkgPT4ge1xuICBGZWF0dXJlczRbRmVhdHVyZXM0W1wiTm9uZVwiXSA9IDFdID0gXCJOb25lXCI7XG4gIEZlYXR1cmVzNFtGZWF0dXJlczRbXCJJbml0aWFsRm9jdXNcIl0gPSAyXSA9IFwiSW5pdGlhbEZvY3VzXCI7XG4gIEZlYXR1cmVzNFtGZWF0dXJlczRbXCJUYWJMb2NrXCJdID0gNF0gPSBcIlRhYkxvY2tcIjtcbiAgRmVhdHVyZXM0W0ZlYXR1cmVzNFtcIkZvY3VzTG9ja1wiXSA9IDhdID0gXCJGb2N1c0xvY2tcIjtcbiAgRmVhdHVyZXM0W0ZlYXR1cmVzNFtcIlJlc3RvcmVGb2N1c1wiXSA9IDE2XSA9IFwiUmVzdG9yZUZvY3VzXCI7XG4gIEZlYXR1cmVzNFtGZWF0dXJlczRbXCJBbGxcIl0gPSAzMF0gPSBcIkFsbFwiO1xuICByZXR1cm4gRmVhdHVyZXM0O1xufSkoRmVhdHVyZXMzIHx8IHt9KTtcbnZhciBGb2N1c1RyYXAgPSBPYmplY3QuYXNzaWduKCgwLCBpbXBvcnRfdnVlMTEuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRm9jdXNUcmFwXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIGluaXRpYWxGb2N1czogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBmZWF0dXJlczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDMwIC8qIEFsbCAqLyB9LFxuICAgIGNvbnRhaW5lcnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgwLCBpbXBvcnRfdnVlMTEucmVmKSgvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKVxuICAgIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBjb250YWluZXIgPSAoMCwgaW1wb3J0X3Z1ZTExLnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGNvbnRhaW5lciwgJGVsOiBjb250YWluZXIgfSk7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTExLmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICAgIHVzZVJlc3RvcmVGb2N1cyh7IG93bmVyRG9jdW1lbnQgfSwgKDAsIGltcG9ydF92dWUxMS5jb21wdXRlZCkoKCkgPT4gQm9vbGVhbihwcm9wcy5mZWF0dXJlcyAmIDE2IC8qIFJlc3RvcmVGb2N1cyAqLykpKTtcbiAgICBsZXQgcHJldmlvdXNBY3RpdmVFbGVtZW50ID0gdXNlSW5pdGlhbEZvY3VzKHsgb3duZXJEb2N1bWVudCwgY29udGFpbmVyLCBpbml0aWFsRm9jdXM6ICgwLCBpbXBvcnRfdnVlMTEuY29tcHV0ZWQpKCgpID0+IHByb3BzLmluaXRpYWxGb2N1cykgfSwgKDAsIGltcG9ydF92dWUxMS5jb21wdXRlZCkoKCkgPT4gQm9vbGVhbihwcm9wcy5mZWF0dXJlcyAmIDIgLyogSW5pdGlhbEZvY3VzICovKSkpO1xuICAgIHVzZUZvY3VzTG9jayh7XG4gICAgICBvd25lckRvY3VtZW50LFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29udGFpbmVyczogcHJvcHMuY29udGFpbmVycyxcbiAgICAgIHByZXZpb3VzQWN0aXZlRWxlbWVudFxuICAgIH0sICgwLCBpbXBvcnRfdnVlMTEuY29tcHV0ZWQpKCgpID0+IEJvb2xlYW4ocHJvcHMuZmVhdHVyZXMgJiA4IC8qIEZvY3VzTG9jayAqLykpKTtcbiAgICBsZXQgZGlyZWN0aW9uID0gdXNlVGFiRGlyZWN0aW9uKCk7XG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICBsZXQgZWwgPSBkb20oY29udGFpbmVyKTtcbiAgICAgIGlmICghZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBtaWNyb1Rhc2soKCkgPT4ge1xuICAgICAgICAgIG1hdGNoKGRpcmVjdGlvbi52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogRm9yd2FyZHMgKi9dOiAoKSA9PiBmb2N1c0luKGVsLCAxIC8qIEZpcnN0ICovKSxcbiAgICAgICAgICAgIFsxIC8qIEJhY2t3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDggLyogTGFzdCAqLylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXRjaChkaXJlY3Rpb24udmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBGb3J3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDEgLyogRmlyc3QgKi8pLFxuICAgICAgICAgIFsxIC8qIEJhY2t3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDggLyogTGFzdCAqLylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHt9O1xuICAgICAgbGV0IG91clByb3BzID0geyByZWY6IGNvbnRhaW5lciB9O1xuICAgICAgbGV0IHsgZmVhdHVyZXMsIGluaXRpYWxGb2N1cywgY29udGFpbmVyczogX2NvbnRhaW5lcnMsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTEuaCkoaW1wb3J0X3Z1ZTExLkZyYWdtZW50LCBbXG4gICAgICAgIEJvb2xlYW4oZmVhdHVyZXMgJiA0IC8qIFRhYkxvY2sgKi8pICYmICgwLCBpbXBvcnRfdnVlMTEuaCkoSGlkZGVuLCB7XG4gICAgICAgICAgYXM6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgICBmZWF0dXJlczogMiAvKiBGb2N1c2FibGUgKi9cbiAgICAgICAgfSksXG4gICAgICAgIHJlbmRlcih7XG4gICAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgICAgdGhlaXJQcm9wczogeyAuLi5hdHRycywgLi4udGhlaXJQcm9wcyB9LFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgbmFtZTogXCJGb2N1c1RyYXBcIlxuICAgICAgICB9KSxcbiAgICAgICAgQm9vbGVhbihmZWF0dXJlcyAmIDQgLyogVGFiTG9jayAqLykgJiYgKDAsIGltcG9ydF92dWUxMS5oKShIaWRkZW4sIHtcbiAgICAgICAgICBhczogXCJidXR0b25cIixcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqL1xuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSksIHsgZmVhdHVyZXM6IEZlYXR1cmVzMyB9KTtcbmZ1bmN0aW9uIHVzZVJlc3RvcmVGb2N1cyh7IG93bmVyRG9jdW1lbnQgfSwgZW5hYmxlZCkge1xuICBsZXQgcmVzdG9yZUVsZW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTExLnJlZikobnVsbCk7XG4gIGxldCBtb3VudGVkID0geyB2YWx1ZTogZmFsc2UgfTtcbiAgKDAsIGltcG9ydF92dWUxMS5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAoMCwgaW1wb3J0X3Z1ZTExLndhdGNoKShlbmFibGVkLCAobmV3VmFsdWUsIHByZXZWYWx1ZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcmV2VmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZW5hYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbW91bnRlZC52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoIXJlc3RvcmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHJlc3RvcmVFbGVtZW50LnZhbHVlID0gKF9hID0gb3duZXJEb2N1bWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gICAgKDAsIGltcG9ydF92dWUxMS53YXRjaCkoZW5hYmxlZCwgKG5ld1ZhbHVlLCBwcmV2VmFsdWUsIG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcmV2VmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZW5hYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgb25JbnZhbGlkYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKG1vdW50ZWQudmFsdWUgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbW91bnRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBmb2N1c0VsZW1lbnQocmVzdG9yZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICByZXN0b3JlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB1c2VJbml0aWFsRm9jdXMoe1xuICBvd25lckRvY3VtZW50LFxuICBjb250YWluZXIsXG4gIGluaXRpYWxGb2N1c1xufSwgZW5hYmxlZCkge1xuICBsZXQgcHJldmlvdXNBY3RpdmVFbGVtZW50ID0gKDAsIGltcG9ydF92dWUxMS5yZWYpKG51bGwpO1xuICAoMCwgaW1wb3J0X3Z1ZTExLm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICgwLCBpbXBvcnRfdnVlMTEud2F0Y2gpKFtjb250YWluZXIsIGluaXRpYWxGb2N1cywgZW5hYmxlZF0sIChuZXdWYWx1ZXMsIHByZXZWYWx1ZXMpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZXMuZXZlcnkoKHZhbHVlLCBpZHgpID0+IChwcmV2VmFsdWVzID09IG51bGwgPyB2b2lkIDAgOiBwcmV2VmFsdWVzW2lkeF0pID09PSB2YWx1ZSkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZW5hYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb20oY29udGFpbmVyKTtcbiAgICAgIGlmICghY29udGFpbmVyRWxlbWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IGluaXRpYWxGb2N1c0VsZW1lbnQgPSBkb20oaW5pdGlhbEZvY3VzKTtcbiAgICAgICAgbGV0IGFjdGl2ZUVsZW1lbnQgPSAoX2EgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGluaXRpYWxGb2N1c0VsZW1lbnQpIHtcbiAgICAgICAgICBpZiAoaW5pdGlhbEZvY3VzRWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVFbGVtZW50LnZhbHVlID0gYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyRWxlbWVudC5jb250YWlucyhhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIHByZXZpb3VzQWN0aXZlRWxlbWVudC52YWx1ZSA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbml0aWFsRm9jdXNFbGVtZW50KSB7XG4gICAgICAgICAgZm9jdXNFbGVtZW50KGluaXRpYWxGb2N1c0VsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb2N1c0luKGNvbnRhaW5lckVsZW1lbnQsIDEgLyogRmlyc3QgKi8gfCAzMiAvKiBOb1Njcm9sbCAqLykgPT09IDAgLyogRXJyb3IgKi8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZXJlIGFyZSBubyBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIHRoZSA8Rm9jdXNUcmFwIC8+XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0FjdGl2ZUVsZW1lbnQudmFsdWUgPSAoX2IgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuYWN0aXZlRWxlbWVudDtcbiAgICAgIH0pO1xuICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlLCBmbHVzaDogXCJwb3N0XCIgfSk7XG4gIH0pO1xuICByZXR1cm4gcHJldmlvdXNBY3RpdmVFbGVtZW50O1xufVxuZnVuY3Rpb24gdXNlRm9jdXNMb2NrKHtcbiAgb3duZXJEb2N1bWVudCxcbiAgY29udGFpbmVyLFxuICBjb250YWluZXJzLFxuICBwcmV2aW91c0FjdGl2ZUVsZW1lbnRcbn0sIGVuYWJsZWQpIHtcbiAgdmFyIF9hO1xuICB1c2VFdmVudExpc3RlbmVyKChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kZWZhdWx0VmlldywgXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgbGV0IGFsbENvbnRhaW5lcnMgPSBuZXcgU2V0KGNvbnRhaW5lcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRhaW5lcnMudmFsdWUpO1xuICAgIGFsbENvbnRhaW5lcnMuYWRkKGNvbnRhaW5lcik7XG4gICAgbGV0IHByZXZpb3VzID0gcHJldmlvdXNBY3RpdmVFbGVtZW50LnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpXG4gICAgICByZXR1cm47XG4gICAgbGV0IHRvRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAodG9FbGVtZW50ICYmIHRvRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBpZiAoIWNvbnRhaW5zKGFsbENvbnRhaW5lcnMsIHRvRWxlbWVudCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGZvY3VzRWxlbWVudChwcmV2aW91cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0FjdGl2ZUVsZW1lbnQudmFsdWUgPSB0b0VsZW1lbnQ7XG4gICAgICAgIGZvY3VzRWxlbWVudCh0b0VsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c0VsZW1lbnQocHJldmlvdXNBY3RpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuZnVuY3Rpb24gY29udGFpbnMoY29udGFpbmVycywgZWxlbWVudCkge1xuICB2YXIgX2E7XG4gIGZvciAobGV0IGNvbnRhaW5lciBvZiBjb250YWluZXJzKSB7XG4gICAgaWYgKChfYSA9IGNvbnRhaW5lci52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNvbnRhaW5zKGVsZW1lbnQpKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBzcmMvaG9va3MvdXNlLWluZXJ0LW90aGVycy50c1xudmFyIGltcG9ydF92dWUxMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgQ0hJTERSRU5fU0VMRUNUT1IgPSBmYWxzZSA/ICdbZGF0YS12LWFwcD1cIlwiXSA+IConIDogXCJib2R5ID4gKlwiO1xudmFyIGludGVyYWN0YWJsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xudmFyIG9yaWdpbmFscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiBpbmVydChlbGVtZW50KSB7XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBlbGVtZW50LmluZXJ0ID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmUoZWxlbWVudCkge1xuICBsZXQgb3JpZ2luYWwgPSBvcmlnaW5hbHMuZ2V0KGVsZW1lbnQpO1xuICBpZiAoIW9yaWdpbmFsKVxuICAgIHJldHVybjtcbiAgaWYgKG9yaWdpbmFsW1wiYXJpYS1oaWRkZW5cIl0gPT09IG51bGwpXG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKTtcbiAgZWxzZVxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgb3JpZ2luYWxbXCJhcmlhLWhpZGRlblwiXSk7XG4gIGVsZW1lbnQuaW5lcnQgPSBvcmlnaW5hbC5pbmVydDtcbn1cbmZ1bmN0aW9uIHVzZUluZXJ0T3RoZXJzKGNvbnRhaW5lciwgZW5hYmxlZCA9ICgwLCBpbXBvcnRfdnVlMTIucmVmKSh0cnVlKSkge1xuICAoMCwgaW1wb3J0X3Z1ZTEyLndhdGNoRWZmZWN0KSgob25JbnZhbGlkYXRlKSA9PiB7XG4gICAgaWYgKCFlbmFibGVkLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghY29udGFpbmVyLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCBlbGVtZW50ID0gY29udGFpbmVyLnZhbHVlO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KTtcbiAgICBpZiAoIW93bmVyRG9jdW1lbnQpXG4gICAgICByZXR1cm47XG4gICAgaW50ZXJhY3RhYmxlcy5hZGQoZWxlbWVudCk7XG4gICAgZm9yIChsZXQgb3JpZ2luYWwgb2Ygb3JpZ2luYWxzLmtleXMoKSkge1xuICAgICAgaWYgKG9yaWdpbmFsLmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgIHJlc3RvcmUob3JpZ2luYWwpO1xuICAgICAgICBvcmlnaW5hbHMuZGVsZXRlKG9yaWdpbmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKENISUxEUkVOX1NFTEVDVE9SKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGZvciAobGV0IGludGVyYWN0YWJsZSBvZiBpbnRlcmFjdGFibGVzKSB7XG4gICAgICAgIGlmIChjaGlsZC5jb250YWlucyhpbnRlcmFjdGFibGUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpbnRlcmFjdGFibGVzLnNpemUgPT09IDEpIHtcbiAgICAgICAgb3JpZ2luYWxzLnNldChjaGlsZCwge1xuICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogY2hpbGQuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiksXG4gICAgICAgICAgaW5lcnQ6IGNoaWxkLmluZXJ0XG4gICAgICAgIH0pO1xuICAgICAgICBpbmVydChjaGlsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb25JbnZhbGlkYXRlKCgpID0+IHtcbiAgICAgIGludGVyYWN0YWJsZXMuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgaWYgKGludGVyYWN0YWJsZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKENISUxEUkVOX1NFTEVDVE9SKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGlmIChvcmlnaW5hbHMuaGFzKGNoaWxkKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBmb3IgKGxldCBpbnRlcmFjdGFibGUgb2YgaW50ZXJhY3RhYmxlcykge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmNvbnRhaW5zKGludGVyYWN0YWJsZSkpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3JpZ2luYWxzLnNldChjaGlsZCwge1xuICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBjaGlsZC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSxcbiAgICAgICAgICAgIGluZXJ0OiBjaGlsZC5pbmVydFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGluZXJ0KGNoaWxkKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50MiBvZiBvcmlnaW5hbHMua2V5cygpKSB7XG4gICAgICAgICAgcmVzdG9yZShlbGVtZW50Mik7XG4gICAgICAgICAgb3JpZ2luYWxzLmRlbGV0ZShlbGVtZW50Mik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL3BvcnRhbC9wb3J0YWwudHNcbnZhciBpbXBvcnRfdnVlMTQgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvaW50ZXJuYWwvcG9ydGFsLWZvcmNlLXJvb3QudHNcbnZhciBpbXBvcnRfdnVlMTMgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEZvcmNlUG9ydGFsUm9vdENvbnRleHQgPSBTeW1ib2woXCJGb3JjZVBvcnRhbFJvb3RDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlUG9ydGFsUm9vdCgpIHtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTMuaW5qZWN0KShGb3JjZVBvcnRhbFJvb3RDb250ZXh0LCBmYWxzZSk7XG59XG52YXIgRm9yY2VQb3J0YWxSb290ID0gKDAsIGltcG9ydF92dWUxMy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJGb3JjZVBvcnRhbFJvb3RcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBmb3JjZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycyB9KSB7XG4gICAgKDAsIGltcG9ydF92dWUxMy5wcm92aWRlKShGb3JjZVBvcnRhbFJvb3RDb250ZXh0LCBwcm9wcy5mb3JjZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IGZvcmNlLCAuLi50aGVpclByb3BzIH0gPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBvdXJQcm9wczoge30sXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBzbG90cyxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIG5hbWU6IFwiRm9yY2VQb3J0YWxSb290XCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9wb3J0YWwvcG9ydGFsLnRzXG5mdW5jdGlvbiBnZXRQb3J0YWxSb290KGNvbnRleHRFbGVtZW50KSB7XG4gIGxldCBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudChjb250ZXh0RWxlbWVudCk7XG4gIGlmICghb3duZXJEb2N1bWVudCkge1xuICAgIGlmIChjb250ZXh0RWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgW0hlYWRsZXNzIFVJXTogQ2Fubm90IGZpbmQgb3duZXJEb2N1bWVudCBmb3IgY29udGV4dEVsZW1lbnQ6ICR7Y29udGV4dEVsZW1lbnR9YCk7XG4gIH1cbiAgbGV0IGV4aXN0aW5nUm9vdCA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWFkbGVzc3VpLXBvcnRhbC1yb290XCIpO1xuICBpZiAoZXhpc3RpbmdSb290KVxuICAgIHJldHVybiBleGlzdGluZ1Jvb3Q7XG4gIGxldCByb290ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICByb290LnNldEF0dHJpYnV0ZShcImlkXCIsIFwiaGVhZGxlc3N1aS1wb3J0YWwtcm9vdFwiKTtcbiAgcmV0dXJuIG93bmVyRG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTtcbn1cbnZhciBQb3J0YWwgPSAoMCwgaW1wb3J0X3Z1ZTE0LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcnRhbFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIGxldCBlbGVtZW50ID0gKDAsIGltcG9ydF92dWUxNC5yZWYpKG51bGwpO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gKDAsIGltcG9ydF92dWUxNC5jb21wdXRlZCkoKCkgPT4gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KSk7XG4gICAgbGV0IGZvcmNlUG9ydGFsUm9vdCA9IHVzZVBvcnRhbFJvb3QoKTtcbiAgICBsZXQgZ3JvdXBDb250ZXh0ID0gKDAsIGltcG9ydF92dWUxNC5pbmplY3QpKFBvcnRhbEdyb3VwQ29udGV4dCwgbnVsbCk7XG4gICAgbGV0IG15VGFyZ2V0ID0gKDAsIGltcG9ydF92dWUxNC5yZWYpKGZvcmNlUG9ydGFsUm9vdCA9PT0gdHJ1ZSA/IGdldFBvcnRhbFJvb3QoZWxlbWVudC52YWx1ZSkgOiBncm91cENvbnRleHQgPT0gbnVsbCA/IGdldFBvcnRhbFJvb3QoZWxlbWVudC52YWx1ZSkgOiBncm91cENvbnRleHQucmVzb2x2ZVRhcmdldCgpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE0LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoZm9yY2VQb3J0YWxSb290KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoZ3JvdXBDb250ZXh0ID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIG15VGFyZ2V0LnZhbHVlID0gZ3JvdXBDb250ZXh0LnJlc29sdmVUYXJnZXQoKTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE0Lm9uVW5tb3VudGVkKSgoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgbGV0IHJvb3QgPSAoX2EgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudEJ5SWQoXCJoZWFkbGVzc3VpLXBvcnRhbC1yb290XCIpO1xuICAgICAgaWYgKCFyb290KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAobXlUYXJnZXQudmFsdWUgIT09IHJvb3QpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChteVRhcmdldC52YWx1ZS5jaGlsZHJlbi5sZW5ndGggPD0gMCkge1xuICAgICAgICAoX2IgPSBteVRhcmdldC52YWx1ZS5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2IucmVtb3ZlQ2hpbGQobXlUYXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAobXlUYXJnZXQudmFsdWUgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByZWY6IGVsZW1lbnQsXG4gICAgICAgIFwiZGF0YS1oZWFkbGVzc3VpLXBvcnRhbFwiOiBcIlwiXG4gICAgICB9O1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTQuaCkoaW1wb3J0X3Z1ZTE0LlRlbGVwb3J0LCB7IHRvOiBteVRhcmdldC52YWx1ZSB9LCByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiUG9ydGFsXCJcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBQb3J0YWxHcm91cENvbnRleHQgPSBTeW1ib2woXCJQb3J0YWxHcm91cENvbnRleHRcIik7XG52YXIgUG9ydGFsR3JvdXAgPSAoMCwgaW1wb3J0X3Z1ZTE0LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcnRhbEdyb3VwXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9ICgwLCBpbXBvcnRfdnVlMTQucmVhY3RpdmUpKHtcbiAgICAgIHJlc29sdmVUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy50YXJnZXQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUxNC5wcm92aWRlKShQb3J0YWxHcm91cENvbnRleHQsIGFwaSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IHRhcmdldDogXywgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgb3VyUHJvcHM6IHt9LFxuICAgICAgICBzbG90OiB7fSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlBvcnRhbEdyb3VwXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvaW50ZXJuYWwvc3RhY2stY29udGV4dC50c1xudmFyIGltcG9ydF92dWUxNSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgU3RhY2tDb250ZXh0ID0gU3ltYm9sKFwiU3RhY2tDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlU3RhY2tDb250ZXh0KCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUxNS5pbmplY3QpKFN0YWNrQ29udGV4dCwgKCkgPT4ge1xuICB9KTtcbn1cbmZ1bmN0aW9uIHVzZVN0YWNrUHJvdmlkZXIoe1xuICB0eXBlLFxuICBlbGVtZW50LFxuICBvblVwZGF0ZVxufSkge1xuICBsZXQgcGFyZW50VXBkYXRlID0gdXNlU3RhY2tDb250ZXh0KCk7XG4gIGZ1bmN0aW9uIG5vdGlmeSguLi5hcmdzKSB7XG4gICAgb25VcGRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9uVXBkYXRlKC4uLmFyZ3MpO1xuICAgIHBhcmVudFVwZGF0ZSguLi5hcmdzKTtcbiAgfVxuICAoMCwgaW1wb3J0X3Z1ZTE1Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgIG5vdGlmeSgwIC8qIEFkZCAqLywgdHlwZSwgZWxlbWVudCk7XG4gICAgKDAsIGltcG9ydF92dWUxNS5vblVubW91bnRlZCkoKCkgPT4ge1xuICAgICAgbm90aWZ5KDEgLyogUmVtb3ZlICovLCB0eXBlLCBlbGVtZW50KTtcbiAgICB9KTtcbiAgfSk7XG4gICgwLCBpbXBvcnRfdnVlMTUucHJvdmlkZSkoU3RhY2tDb250ZXh0LCBub3RpZnkpO1xufVxuXG4vLyBzcmMvY29tcG9uZW50cy9kZXNjcmlwdGlvbi9kZXNjcmlwdGlvbi50c1xudmFyIGltcG9ydF92dWUxNiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgRGVzY3JpcHRpb25Db250ZXh0ID0gU3ltYm9sKFwiRGVzY3JpcHRpb25Db250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlRGVzY3JpcHRpb25Db250ZXh0KCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMTYuaW5qZWN0KShEZXNjcmlwdGlvbkNvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcGFyZW50XCIpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuZnVuY3Rpb24gdXNlRGVzY3JpcHRpb25zKHtcbiAgc2xvdCA9ICgwLCBpbXBvcnRfdnVlMTYucmVmKSh7fSksXG4gIG5hbWUgPSBcIkRlc2NyaXB0aW9uXCIsXG4gIHByb3BzID0ge31cbn0gPSB7fSkge1xuICBsZXQgZGVzY3JpcHRpb25JZHMgPSAoMCwgaW1wb3J0X3Z1ZTE2LnJlZikoW10pO1xuICBmdW5jdGlvbiByZWdpc3Rlcih2YWx1ZSkge1xuICAgIGRlc2NyaXB0aW9uSWRzLnZhbHVlLnB1c2godmFsdWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgaWR4ID0gZGVzY3JpcHRpb25JZHMudmFsdWUuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBpZiAoaWR4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVzY3JpcHRpb25JZHMudmFsdWUuc3BsaWNlKGlkeCwgMSk7XG4gICAgfTtcbiAgfVxuICAoMCwgaW1wb3J0X3Z1ZTE2LnByb3ZpZGUpKERlc2NyaXB0aW9uQ29udGV4dCwgeyByZWdpc3Rlciwgc2xvdCwgbmFtZSwgcHJvcHMgfSk7XG4gIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTE2LmNvbXB1dGVkKSgoKSA9PiBkZXNjcmlwdGlvbklkcy52YWx1ZS5sZW5ndGggPiAwID8gZGVzY3JpcHRpb25JZHMudmFsdWUuam9pbihcIiBcIikgOiB2b2lkIDApO1xufVxudmFyIERlc2NyaXB0aW9uID0gKDAsIGltcG9ydF92dWUxNi5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEZXNjcmlwdGlvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwicFwiIH1cbiAgfSxcbiAgc2V0dXAobXlQcm9wcywgeyBhdHRycywgc2xvdHMgfSkge1xuICAgIGxldCBjb250ZXh0ID0gdXNlRGVzY3JpcHRpb25Db250ZXh0KCk7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWRlc2NyaXB0aW9uLSR7dXNlSWQoKX1gO1xuICAgICgwLCBpbXBvcnRfdnVlMTYub25Nb3VudGVkKSgoKSA9PiAoMCwgaW1wb3J0X3Z1ZTE2Lm9uVW5tb3VudGVkKShjb250ZXh0LnJlZ2lzdGVyKGlkMikpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSA9IFwiRGVzY3JpcHRpb25cIiwgc2xvdCA9ICgwLCBpbXBvcnRfdnVlMTYucmVmKSh7fSksIHByb3BzID0ge30gfSA9IGNvbnRleHQ7XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IG15UHJvcHM7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiBPYmplY3QuYXNzaWduKGFjYywgeyBba2V5XTogKDAsIGltcG9ydF92dWUxNi51bnJlZikodmFsdWUpIH0pLCB7fSksXG4gICAgICAgIGlkOiBpZDJcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3Q6IHNsb3QudmFsdWUsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2cudHNcbnZhciBEaWFsb2dDb250ZXh0ID0gU3ltYm9sKFwiRGlhbG9nQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZURpYWxvZ0NvbnRleHQoY29tcG9uZW50KSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUxNy5pbmplY3QpKERpYWxvZ0NvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8RGlhbG9nIC8+IGNvbXBvbmVudC5gKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZURpYWxvZ0NvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBNaXNzaW5nID0gXCJEQzhGODkyRC0yRUJELTQ0N0MtQTRDOC1BMDMwNTg0MzZGRjRcIjtcbnZhciBEaWFsb2cgPSAoMCwgaW1wb3J0X3Z1ZTE3LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkRpYWxvZ1wiLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBzdGF0aWM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBvcGVuOiB7IHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLCBkZWZhdWx0OiBNaXNzaW5nIH0sXG4gICAgaW5pdGlhbEZvY3VzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG4gIGVtaXRzOiB7IGNsb3NlOiAoX2Nsb3NlKSA9PiB0cnVlIH0sXG4gIHNldHVwKHByb3BzLCB7IGVtaXQsIGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICB2YXIgX2E7XG4gICAgbGV0IHJlYWR5ID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKGZhbHNlKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE3Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgcmVhZHkudmFsdWUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGxldCBuZXN0ZWREaWFsb2dDb3VudCA9ICgwLCBpbXBvcnRfdnVlMTcucmVmKSgwKTtcbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgb3BlbiA9ICgwLCBpbXBvcnRfdnVlMTcuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5vcGVuID09PSBNaXNzaW5nICYmIHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoKHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBPcGVuICovXTogdHJ1ZSxcbiAgICAgICAgICBbMSAvKiBDbG9zZWQgKi9dOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcy5vcGVuO1xuICAgIH0pO1xuICAgIGxldCBjb250YWluZXJzID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xuICAgIGxldCBpbnRlcm5hbERpYWxvZ1JlZiA9ICgwLCBpbXBvcnRfdnVlMTcucmVmKShudWxsKTtcbiAgICBsZXQgbWFpblRyZWVOb2RlID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKG51bGwpO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4gZ2V0T3duZXJEb2N1bWVudChpbnRlcm5hbERpYWxvZ1JlZikpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbERpYWxvZ1JlZiwgJGVsOiBpbnRlcm5hbERpYWxvZ1JlZiB9KTtcbiAgICBsZXQgaGFzT3BlbiA9IHByb3BzLm9wZW4gIT09IE1pc3NpbmcgfHwgdXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICBpZiAoIWhhc09wZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IGZvcmdvdCB0byBwcm92aWRlIGFuIFxcYG9wZW5cXGAgcHJvcCB0byB0aGUgXFxgRGlhbG9nXFxgLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wZW4udmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBwcm92aWRlZCBhbiBcXGBvcGVuXFxgIHByb3AgdG8gdGhlIFxcYERpYWxvZ1xcYCwgYnV0IHRoZSB2YWx1ZSBpcyBub3QgYSBib29sZWFuLiBSZWNlaXZlZDogJHtvcGVuLnZhbHVlID09PSBNaXNzaW5nID8gdm9pZCAwIDogcHJvcHMub3Blbn1gKTtcbiAgICB9XG4gICAgbGV0IGRpYWxvZ1N0YXRlID0gKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4gIXJlYWR5LnZhbHVlID8gMSAvKiBDbG9zZWQgKi8gOiBvcGVuLnZhbHVlID8gMCAvKiBPcGVuICovIDogMSAvKiBDbG9zZWQgKi8pO1xuICAgIGxldCBlbmFibGVkID0gKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4gZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyk7XG4gICAgbGV0IGhhc05lc3RlZERpYWxvZ3MgPSAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiBuZXN0ZWREaWFsb2dDb3VudC52YWx1ZSA+IDEpO1xuICAgIGxldCBoYXNQYXJlbnREaWFsb2cgPSAoMCwgaW1wb3J0X3Z1ZTE3LmluamVjdCkoRGlhbG9nQ29udGV4dCwgbnVsbCkgIT09IG51bGw7XG4gICAgbGV0IHBvc2l0aW9uID0gKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4gIWhhc05lc3RlZERpYWxvZ3MudmFsdWUgPyBcImxlYWZcIiA6IFwicGFyZW50XCIpO1xuICAgIHVzZUluZXJ0T3RoZXJzKGludGVybmFsRGlhbG9nUmVmLCAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiBoYXNOZXN0ZWREaWFsb2dzLnZhbHVlID8gZW5hYmxlZC52YWx1ZSA6IGZhbHNlKSk7XG4gICAgdXNlU3RhY2tQcm92aWRlcih7XG4gICAgICB0eXBlOiBcIkRpYWxvZ1wiLFxuICAgICAgZWxlbWVudDogaW50ZXJuYWxEaWFsb2dSZWYsXG4gICAgICBvblVwZGF0ZTogKG1lc3NhZ2UsIHR5cGUsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgIT09IFwiRGlhbG9nXCIpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gbWF0Y2gobWVzc2FnZSwge1xuICAgICAgICAgIFswIC8qIEFkZCAqL10oKSB7XG4gICAgICAgICAgICBjb250YWluZXJzLnZhbHVlLmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIG5lc3RlZERpYWxvZ0NvdW50LnZhbHVlICs9IDE7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbMSAvKiBSZW1vdmUgKi9dKCkge1xuICAgICAgICAgICAgY29udGFpbmVycy52YWx1ZS5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgICAgICBuZXN0ZWREaWFsb2dDb3VudC52YWx1ZSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGRlc2NyaWJlZGJ5ID0gdXNlRGVzY3JpcHRpb25zKHtcbiAgICAgIG5hbWU6IFwiRGlhbG9nRGVzY3JpcHRpb25cIixcbiAgICAgIHNsb3Q6ICgwLCBpbXBvcnRfdnVlMTcuY29tcHV0ZWQpKCgpID0+ICh7IG9wZW46IG9wZW4udmFsdWUgfSkpXG4gICAgfSk7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWRpYWxvZy0ke3VzZUlkKCl9YDtcbiAgICBsZXQgdGl0bGVJZCA9ICgwLCBpbXBvcnRfdnVlMTcucmVmKShudWxsKTtcbiAgICBsZXQgYXBpID0ge1xuICAgICAgdGl0bGVJZCxcbiAgICAgIHBhbmVsUmVmOiAoMCwgaW1wb3J0X3Z1ZTE3LnJlZikobnVsbCksXG4gICAgICBkaWFsb2dTdGF0ZSxcbiAgICAgIHNldFRpdGxlSWQoaWQzKSB7XG4gICAgICAgIGlmICh0aXRsZUlkLnZhbHVlID09PSBpZDMpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aXRsZUlkLnZhbHVlID0gaWQzO1xuICAgICAgfSxcbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBlbWl0KFwiY2xvc2VcIiwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgKDAsIGltcG9ydF92dWUxNy5wcm92aWRlKShEaWFsb2dDb250ZXh0LCBhcGkpO1xuICAgIHVzZU91dHNpZGVDbGljaygoKSA9PiB7XG4gICAgICB2YXIgX2EyLCBfYiwgX2M7XG4gICAgICBsZXQgcm9vdENvbnRhaW5lcnMgPSBBcnJheS5mcm9tKChfYiA9IChfYTIgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKiwgW2RhdGEtaGVhZGxlc3N1aS1wb3J0YWxdXCIpKSAhPSBudWxsID8gX2IgOiBbXSkuZmlsdGVyKChjb250YWluZXIpID0+IHtcbiAgICAgICAgaWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRhaW5lci5jb250YWlucyhkb20obWFpblRyZWVOb2RlKSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYXBpLnBhbmVsUmVmLnZhbHVlICYmIGNvbnRhaW5lci5jb250YWlucyhhcGkucGFuZWxSZWYudmFsdWUpKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbLi4ucm9vdENvbnRhaW5lcnMsIChfYyA9IGFwaS5wYW5lbFJlZi52YWx1ZSkgIT0gbnVsbCA/IF9jIDogaW50ZXJuYWxEaWFsb2dSZWYudmFsdWVdO1xuICAgIH0sIChfZXZlbnQsIHRhcmdldCkgPT4ge1xuICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTE3Lm5leHRUaWNrKSgoKSA9PiB0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC5mb2N1cygpKTtcbiAgICB9LCAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiBkaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovICYmICFoYXNOZXN0ZWREaWFsb2dzLnZhbHVlKSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcigoX2EgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZGVmYXVsdFZpZXcsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVzY2FwZVwiIC8qIEVzY2FwZSAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChoYXNOZXN0ZWREaWFsb2dzLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBhcGkuY2xvc2UoKTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE3LndhdGNoRWZmZWN0KSgob25JbnZhbGlkYXRlKSA9PiB7XG4gICAgICB2YXIgX2EyO1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChoYXNQYXJlbnREaWFsb2cpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBvd25lciA9IG93bmVyRG9jdW1lbnQudmFsdWU7XG4gICAgICBpZiAoIW93bmVyKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgZG9jdW1lbnRFbGVtZW50ID0gb3duZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGxldCBvd25lcldpbmRvdyA9IChfYTIgPSBvd25lci5kZWZhdWx0VmlldykgIT0gbnVsbCA/IF9hMiA6IHdpbmRvdztcbiAgICAgIGxldCBvdmVyZmxvdyA9IGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdztcbiAgICAgIGxldCBwYWRkaW5nUmlnaHQgPSBkb2N1bWVudEVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgbGV0IHNjcm9sbGJhcldpZHRoQmVmb3JlID0gb3duZXJXaW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICBpZiAoc2Nyb2xsYmFyV2lkdGhCZWZvcmUgPiAwKSB7XG4gICAgICAgIGxldCBzY3JvbGxiYXJXaWR0aEFmdGVyID0gZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBsZXQgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxiYXJXaWR0aEJlZm9yZSAtIHNjcm9sbGJhcldpZHRoQWZ0ZXI7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgICBvbkludmFsaWRhdGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHBhZGRpbmdSaWdodDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTcud2F0Y2hFZmZlY3QpKChvbkludmFsaWRhdGUpID0+IHtcbiAgICAgIGlmIChkaWFsb2dTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgY29udGFpbmVyID0gZG9tKGludGVybmFsRGlhbG9nUmVmKTtcbiAgICAgIGlmICghY29udGFpbmVyKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QueCA9PT0gMCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QueSA9PT0gMCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPT09IDAgJiYgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgYXBpLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTtcbiAgICAgIG9uSW52YWxpZGF0ZSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICByZWY6IGludGVybmFsRGlhbG9nUmVmLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICBcImFyaWEtbW9kYWxcIjogZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWQudmFsdWUsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBkZXNjcmliZWRieS52YWx1ZVxuICAgICAgfTtcbiAgICAgIGxldCB7IG9wZW46IF8sIGluaXRpYWxGb2N1cywgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTcuaCkoRm9yY2VQb3J0YWxSb290LCB7IGZvcmNlOiB0cnVlIH0sICgpID0+IFtcbiAgICAgICAgKDAsIGltcG9ydF92dWUxNy5oKShQb3J0YWwsICgpID0+ICgwLCBpbXBvcnRfdnVlMTcuaCkoUG9ydGFsR3JvdXAsIHsgdGFyZ2V0OiBpbnRlcm5hbERpYWxvZ1JlZi52YWx1ZSB9LCAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTE3LmgpKEZvcmNlUG9ydGFsUm9vdCwgeyBmb3JjZTogZmFsc2UgfSwgKCkgPT4gKDAsIGltcG9ydF92dWUxNy5oKShGb2N1c1RyYXAsIHtcbiAgICAgICAgICBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBmZWF0dXJlczogZW5hYmxlZC52YWx1ZSA/IG1hdGNoKHBvc2l0aW9uLnZhbHVlLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IEZvY3VzVHJhcC5mZWF0dXJlcy5SZXN0b3JlRm9jdXMsXG4gICAgICAgICAgICBsZWFmOiBGb2N1c1RyYXAuZmVhdHVyZXMuQWxsICYgfkZvY3VzVHJhcC5mZWF0dXJlcy5Gb2N1c0xvY2tcbiAgICAgICAgICB9KSA6IEZvY3VzVHJhcC5mZWF0dXJlcy5Ob25lXG4gICAgICAgIH0sICgpID0+IHJlbmRlcih7XG4gICAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgICBzbG90LFxuICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgIHNsb3RzLFxuICAgICAgICAgIHZpc2libGU6IGRpYWxvZ1N0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgICAgZmVhdHVyZXM6IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8gfCAyIC8qIFN0YXRpYyAqLyxcbiAgICAgICAgICBuYW1lOiBcIkRpYWxvZ1wiXG4gICAgICAgIH0pKSkpKSxcbiAgICAgICAgKDAsIGltcG9ydF92dWUxNy5oKShIaWRkZW4sIHsgZmVhdHVyZXM6IDQgLyogSGlkZGVuICovLCByZWY6IG1haW5UcmVlTm9kZSB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgRGlhbG9nT3ZlcmxheSA9ICgwLCBpbXBvcnRfdnVlMTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlhbG9nT3ZlcmxheVwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMgfSkge1xuICAgIGxldCBhcGkgPSB1c2VEaWFsb2dDb250ZXh0KFwiRGlhbG9nT3ZlcmxheVwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktZGlhbG9nLW92ZXJsYXktJHt1c2VJZCgpfWA7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGFwaS5jbG9zZSgpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdDogeyBvcGVuOiBhcGkuZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiRGlhbG9nT3ZlcmxheVwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaWFsb2dCYWNrZHJvcCA9ICgwLCBpbXBvcnRfdnVlMTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlhbG9nQmFja2Ryb3BcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VEaWFsb2dDb250ZXh0KFwiRGlhbG9nQmFja2Ryb3BcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWRpYWxvZy1iYWNrZHJvcC0ke3VzZUlkKCl9YDtcbiAgICBsZXQgaW50ZXJuYWxCYWNrZHJvcFJlZiA9ICgwLCBpbXBvcnRfdnVlMTcucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxCYWNrZHJvcFJlZiwgJGVsOiBpbnRlcm5hbEJhY2tkcm9wUmVmIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICBpZiAoYXBpLnBhbmVsUmVmLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQSA8RGlhbG9nQmFja2Ryb3AgLz4gY29tcG9uZW50IGlzIGJlaW5nIHVzZWQsIGJ1dCBhIDxEaWFsb2dQYW5lbCAvPiBjb21wb25lbnQgaXMgbWlzc2luZy5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBpbnRlcm5hbEJhY2tkcm9wUmVmLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUxNy5oKShGb3JjZVBvcnRhbFJvb3QsIHsgZm9yY2U6IHRydWUgfSwgKCkgPT4gKDAsIGltcG9ydF92dWUxNy5oKShQb3J0YWwsICgpID0+IHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiB7IC4uLmF0dHJzLCAuLi50aGVpclByb3BzIH0sXG4gICAgICAgIHNsb3Q6IHsgb3BlbjogYXBpLmRpYWxvZ1N0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIkRpYWxvZ0JhY2tkcm9wXCJcbiAgICAgIH0pKSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgRGlhbG9nUGFuZWwgPSAoMCwgaW1wb3J0X3Z1ZTE3LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkRpYWxvZ1BhbmVsXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlRGlhbG9nQ29udGV4dChcIkRpYWxvZ1BhbmVsXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1kaWFsb2ctcGFuZWwtJHt1c2VJZCgpfWA7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5wYW5lbFJlZiwgJGVsOiBhcGkucGFuZWxSZWYgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IGFwaS5wYW5lbFJlZixcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90OiB7IG9wZW46IGFwaS5kaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH0sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJEaWFsb2dQYW5lbFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaWFsb2dUaXRsZSA9ICgwLCBpbXBvcnRfdnVlMTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlhbG9nVGl0bGVcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImgyXCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMgfSkge1xuICAgIGxldCBhcGkgPSB1c2VEaWFsb2dDb250ZXh0KFwiRGlhbG9nVGl0bGVcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWRpYWxvZy10aXRsZS0ke3VzZUlkKCl9YDtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE3Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgYXBpLnNldFRpdGxlSWQoaWQyKTtcbiAgICAgICgwLCBpbXBvcnRfdnVlMTcub25Vbm1vdW50ZWQpKCgpID0+IGFwaS5zZXRUaXRsZUlkKG51bGwpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IG91clByb3BzID0geyBpZDogaWQyIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90OiB7IG9wZW46IGFwaS5kaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH0sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJEaWFsb2dUaXRsZVwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaWFsb2dEZXNjcmlwdGlvbiA9IERlc2NyaXB0aW9uO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kaXNjbG9zdXJlL2Rpc2Nsb3N1cmUudHNcbnZhciBpbXBvcnRfdnVlMTggPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIERpc2Nsb3N1cmVDb250ZXh0ID0gU3ltYm9sKFwiRGlzY2xvc3VyZUNvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VEaXNjbG9zdXJlQ29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTE4LmluamVjdCkoRGlzY2xvc3VyZUNvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8RGlzY2xvc3VyZSAvPiBjb21wb25lbnQuYCk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VEaXNjbG9zdXJlQ29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIERpc2Nsb3N1cmVQYW5lbENvbnRleHQgPSBTeW1ib2woXCJEaXNjbG9zdXJlUGFuZWxDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlRGlzY2xvc3VyZVBhbmVsQ29udGV4dCgpIHtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTguaW5qZWN0KShEaXNjbG9zdXJlUGFuZWxDb250ZXh0LCBudWxsKTtcbn1cbnZhciBEaXNjbG9zdXJlID0gKDAsIGltcG9ydF92dWUxOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEaXNjbG9zdXJlXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0sXG4gICAgZGVmYXVsdE9wZW46IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycyB9KSB7XG4gICAgbGV0IGJ1dHRvbklkID0gYGhlYWRsZXNzdWktZGlzY2xvc3VyZS1idXR0b24tJHt1c2VJZCgpfWA7XG4gICAgbGV0IHBhbmVsSWQgPSBgaGVhZGxlc3N1aS1kaXNjbG9zdXJlLXBhbmVsLSR7dXNlSWQoKX1gO1xuICAgIGxldCBkaXNjbG9zdXJlU3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTE4LnJlZikocHJvcHMuZGVmYXVsdE9wZW4gPyAwIC8qIE9wZW4gKi8gOiAxIC8qIENsb3NlZCAqLyk7XG4gICAgbGV0IHBhbmVsUmVmID0gKDAsIGltcG9ydF92dWUxOC5yZWYpKG51bGwpO1xuICAgIGxldCBidXR0b25SZWYgPSAoMCwgaW1wb3J0X3Z1ZTE4LnJlZikobnVsbCk7XG4gICAgbGV0IGFwaSA9IHtcbiAgICAgIGJ1dHRvbklkLFxuICAgICAgcGFuZWxJZCxcbiAgICAgIGRpc2Nsb3N1cmVTdGF0ZSxcbiAgICAgIHBhbmVsOiBwYW5lbFJlZixcbiAgICAgIGJ1dHRvbjogYnV0dG9uUmVmLFxuICAgICAgdG9nZ2xlRGlzY2xvc3VyZSgpIHtcbiAgICAgICAgZGlzY2xvc3VyZVN0YXRlLnZhbHVlID0gbWF0Y2goZGlzY2xvc3VyZVN0YXRlLnZhbHVlLCB7XG4gICAgICAgICAgWzAgLyogT3BlbiAqL106IDEgLyogQ2xvc2VkICovLFxuICAgICAgICAgIFsxIC8qIENsb3NlZCAqL106IDAgLyogT3BlbiAqL1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjbG9zZURpc2Nsb3N1cmUoKSB7XG4gICAgICAgIGlmIChkaXNjbG9zdXJlU3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGlzY2xvc3VyZVN0YXRlLnZhbHVlID0gMSAvKiBDbG9zZWQgKi87XG4gICAgICB9LFxuICAgICAgY2xvc2UoZm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgICBhcGkuY2xvc2VEaXNjbG9zdXJlKCk7XG4gICAgICAgIGxldCByZXN0b3JlRWxlbWVudCA9ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFmb2N1c2FibGVFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuIGRvbShhcGkuYnV0dG9uKTtcbiAgICAgICAgICBpZiAoZm9jdXNhYmxlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZvY3VzYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGZvY3VzYWJsZUVsZW1lbnQudmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcbiAgICAgICAgICAgIHJldHVybiBkb20oZm9jdXNhYmxlRWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuIGRvbShhcGkuYnV0dG9uKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmVzdG9yZUVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHJlc3RvcmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE4LnByb3ZpZGUpKERpc2Nsb3N1cmVDb250ZXh0LCBhcGkpO1xuICAgIHVzZU9wZW5DbG9zZWRQcm92aWRlcigoMCwgaW1wb3J0X3Z1ZTE4LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICByZXR1cm4gbWF0Y2goZGlzY2xvc3VyZVN0YXRlLnZhbHVlLCB7XG4gICAgICAgIFswIC8qIE9wZW4gKi9dOiAwIC8qIE9wZW4gKi8sXG4gICAgICAgIFsxIC8qIENsb3NlZCAqL106IDEgLyogQ2xvc2VkICovXG4gICAgICB9KTtcbiAgICB9KSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IGRlZmF1bHRPcGVuOiBfLCAuLi50aGVpclByb3BzIH0gPSBwcm9wcztcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBkaXNjbG9zdXJlU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLywgY2xvc2U6IGFwaS5jbG9zZSB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBuYW1lOiBcIkRpc2Nsb3N1cmVcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgRGlzY2xvc3VyZUJ1dHRvbiA9ICgwLCBpbXBvcnRfdnVlMTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlzY2xvc3VyZUJ1dHRvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiYnV0dG9uXCIgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VEaXNjbG9zdXJlQ29udGV4dChcIkRpc2Nsb3N1cmVCdXR0b25cIik7XG4gICAgbGV0IHBhbmVsQ29udGV4dCA9IHVzZURpc2Nsb3N1cmVQYW5lbENvbnRleHQoKTtcbiAgICBsZXQgaXNXaXRoaW5QYW5lbCA9IHBhbmVsQ29udGV4dCA9PT0gbnVsbCA/IGZhbHNlIDogcGFuZWxDb250ZXh0ID09PSBhcGkucGFuZWxJZDtcbiAgICBsZXQgaW50ZXJuYWxCdXR0b25SZWYgPSAoMCwgaW1wb3J0X3Z1ZTE4LnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsQnV0dG9uUmVmLCAkZWw6IGludGVybmFsQnV0dG9uUmVmIH0pO1xuICAgIGlmICghaXNXaXRoaW5QYW5lbCkge1xuICAgICAgKDAsIGltcG9ydF92dWUxOC53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgICBhcGkuYnV0dG9uLnZhbHVlID0gaW50ZXJuYWxCdXR0b25SZWYudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTE4LmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBpbnRlcm5hbEJ1dHRvblJlZik7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc1dpdGhpblBhbmVsKSB7XG4gICAgICAgIGFwaS50b2dnbGVEaXNjbG9zdXJlKCk7XG4gICAgICAgIChfYSA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcGkudG9nZ2xlRGlzY2xvc3VyZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc1dpdGhpblBhbmVsKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGFwaS50b2dnbGVEaXNjbG9zdXJlKCk7XG4gICAgICAgICAgICAoX2EgPSBkb20oYXBpLmJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGFwaS50b2dnbGVEaXNjbG9zdXJlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5kaXNjbG9zdXJlU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgbGV0IG91clByb3BzID0gaXNXaXRoaW5QYW5lbCA/IHtcbiAgICAgICAgcmVmOiBpbnRlcm5hbEJ1dHRvblJlZixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93blxuICAgICAgfSA6IHtcbiAgICAgICAgaWQ6IGFwaS5idXR0b25JZCxcbiAgICAgICAgcmVmOiBpbnRlcm5hbEJ1dHRvblJlZixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IHByb3BzLmRpc2FibGVkID8gdm9pZCAwIDogYXBpLmRpc2Nsb3N1cmVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogZG9tKGFwaS5wYW5lbCkgPyBhcGkucGFuZWxJZCA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25LZXl1cDogaGFuZGxlS2V5VXBcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiRGlzY2xvc3VyZUJ1dHRvblwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaXNjbG9zdXJlUGFuZWwgPSAoMCwgaW1wb3J0X3Z1ZTE4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkRpc2Nsb3N1cmVQYW5lbFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBzdGF0aWM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZURpc2Nsb3N1cmVDb250ZXh0KFwiRGlzY2xvc3VyZVBhbmVsXCIpO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkucGFuZWwsICRlbDogYXBpLnBhbmVsIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTgucHJvdmlkZSkoRGlzY2xvc3VyZVBhbmVsQ29udGV4dCwgYXBpLnBhbmVsSWQpO1xuICAgIGxldCB1c2VzT3BlbkNsb3NlZFN0YXRlID0gdXNlT3BlbkNsb3NlZCgpO1xuICAgIGxldCB2aXNpYmxlID0gKDAsIGltcG9ydF92dWUxOC5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcGkuZGlzY2xvc3VyZVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBhcGkuZGlzY2xvc3VyZVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sIGNsb3NlOiBhcGkuY2xvc2UgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHsgaWQ6IGFwaS5wYW5lbElkLCByZWY6IGFwaS5wYW5lbCB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlLnZhbHVlLFxuICAgICAgICBuYW1lOiBcIkRpc2Nsb3N1cmVQYW5lbFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbGlzdGJveC9saXN0Ym94LnRzXG52YXIgaW1wb3J0X3Z1ZTE5ID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIG5leHRGcmFtZShjYikge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKSk7XG59XG52YXIgTGlzdGJveENvbnRleHQgPSBTeW1ib2woXCJMaXN0Ym94Q29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZUxpc3Rib3hDb250ZXh0KGNvbXBvbmVudCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMTkuaW5qZWN0KShMaXN0Ym94Q29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDxMaXN0Ym94IC8+IGNvbXBvbmVudC5gKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZUxpc3Rib3hDb250ZXh0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG52YXIgTGlzdGJveCA9ICgwLCBpbXBvcnRfdnVlMTkuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGlzdGJveFwiLFxuICBlbWl0czogeyBcInVwZGF0ZTptb2RlbFZhbHVlXCI6IChfdmFsdWUpID0+IHRydWUgfSxcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaG9yaXpvbnRhbDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbl0gfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSxcbiAgICBtdWx0aXBsZTogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzLCBlbWl0IH0pIHtcbiAgICBsZXQgbGlzdGJveFN0YXRlID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKDEgLyogQ2xvc2VkICovKTtcbiAgICBsZXQgbGFiZWxSZWYgPSAoMCwgaW1wb3J0X3Z1ZTE5LnJlZikobnVsbCk7XG4gICAgbGV0IGJ1dHRvblJlZiA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShudWxsKTtcbiAgICBsZXQgb3B0aW9uc1JlZiA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShudWxsKTtcbiAgICBsZXQgb3B0aW9ucyA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShbXSk7XG4gICAgbGV0IHNlYXJjaFF1ZXJ5ID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKFwiXCIpO1xuICAgIGxldCBhY3RpdmVPcHRpb25JbmRleCA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShudWxsKTtcbiAgICBsZXQgYWN0aXZhdGlvblRyaWdnZXIgPSAoMCwgaW1wb3J0X3Z1ZTE5LnJlZikoMSAvKiBPdGhlciAqLyk7XG4gICAgZnVuY3Rpb24gYWRqdXN0T3JkZXJlZFN0YXRlKGFkanVzdG1lbnQgPSAoaSkgPT4gaSkge1xuICAgICAgbGV0IGN1cnJlbnRBY3RpdmVPcHRpb24gPSBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCA/IG9wdGlvbnMudmFsdWVbYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdIDogbnVsbDtcbiAgICAgIGxldCBzb3J0ZWRPcHRpb25zID0gc29ydEJ5RG9tTm9kZShhZGp1c3RtZW50KG9wdGlvbnMudmFsdWUuc2xpY2UoKSksIChvcHRpb24pID0+IGRvbShvcHRpb24uZGF0YVJlZi5kb21SZWYpKTtcbiAgICAgIGxldCBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID0gY3VycmVudEFjdGl2ZU9wdGlvbiA/IHNvcnRlZE9wdGlvbnMuaW5kZXhPZihjdXJyZW50QWN0aXZlT3B0aW9uKSA6IG51bGw7XG4gICAgICBpZiAoYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpb25zOiBzb3J0ZWRPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWRqdXN0ZWRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4gcHJvcHMubW9kZWxWYWx1ZSk7XG4gICAgbGV0IG1vZGUgPSAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tdWx0aXBsZSA/IDEgLyogTXVsdGkgKi8gOiAwIC8qIFNpbmdsZSAqLyk7XG4gICAgbGV0IGFwaSA9IHtcbiAgICAgIGxpc3Rib3hTdGF0ZSxcbiAgICAgIHZhbHVlLFxuICAgICAgbW9kZSxcbiAgICAgIGNvbXBhcmUoYSwgeikge1xuICAgICAgICByZXR1cm4gYSA9PT0gejtcbiAgICAgIH0sXG4gICAgICBvcmllbnRhdGlvbjogKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4gcHJvcHMuaG9yaXpvbnRhbCA/IFwiaG9yaXpvbnRhbFwiIDogXCJ2ZXJ0aWNhbFwiKSxcbiAgICAgIGxhYmVsUmVmLFxuICAgICAgYnV0dG9uUmVmLFxuICAgICAgb3B0aW9uc1JlZixcbiAgICAgIGRpc2FibGVkOiAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5kaXNhYmxlZCksXG4gICAgICBvcHRpb25zLFxuICAgICAgc2VhcmNoUXVlcnksXG4gICAgICBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLFxuICAgICAgY2xvc2VMaXN0Ym94KCkge1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAobGlzdGJveFN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxpc3Rib3hTdGF0ZS52YWx1ZSA9IDEgLyogQ2xvc2VkICovO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgb3Blbkxpc3Rib3goKSB7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChsaXN0Ym94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxpc3Rib3hTdGF0ZS52YWx1ZSA9IDAgLyogT3BlbiAqLztcbiAgICAgIH0sXG4gICAgICBnb1RvT3B0aW9uKGZvY3VzLCBpZDIsIHRyaWdnZXIpIHtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgpO1xuICAgICAgICBsZXQgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gY2FsY3VsYXRlQWN0aXZlSW5kZXgoZm9jdXMgPT09IDQgLyogU3BlY2lmaWMgKi8gPyB7IGZvY3VzOiA0IC8qIFNwZWNpZmljICovLCBpZDogaWQyIH0gOiB7IGZvY3VzIH0sIHtcbiAgICAgICAgICByZXNvbHZlSXRlbXM6ICgpID0+IGFkanVzdGVkU3RhdGUub3B0aW9ucyxcbiAgICAgICAgICByZXNvbHZlQWN0aXZlSW5kZXg6ICgpID0+IGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgcmVzb2x2ZUlkOiAob3B0aW9uKSA9PiBvcHRpb24uaWQsXG4gICAgICAgICAgcmVzb2x2ZURpc2FibGVkOiAob3B0aW9uKSA9PiBvcHRpb24uZGF0YVJlZi5kaXNhYmxlZFxuICAgICAgICB9KTtcbiAgICAgICAgc2VhcmNoUXVlcnkudmFsdWUgPSBcIlwiO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IG5leHRBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSB0cmlnZ2VyICE9IG51bGwgPyB0cmlnZ2VyIDogMSAvKiBPdGhlciAqLztcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGFkanVzdGVkU3RhdGUub3B0aW9ucztcbiAgICAgIH0sXG4gICAgICBzZWFyY2godmFsdWUyKSB7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChsaXN0Ym94U3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHdhc0FscmVhZHlTZWFyY2hpbmcgPSBzZWFyY2hRdWVyeS52YWx1ZSAhPT0gXCJcIjtcbiAgICAgICAgbGV0IG9mZnNldCA9IHdhc0FscmVhZHlTZWFyY2hpbmcgPyAwIDogMTtcbiAgICAgICAgc2VhcmNoUXVlcnkudmFsdWUgKz0gdmFsdWUyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCByZU9yZGVyZWRPcHRpb25zID0gYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgIT09IG51bGwgPyBvcHRpb25zLnZhbHVlLnNsaWNlKGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlICsgb2Zmc2V0KS5jb25jYXQob3B0aW9ucy52YWx1ZS5zbGljZSgwLCBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSArIG9mZnNldCkpIDogb3B0aW9ucy52YWx1ZTtcbiAgICAgICAgbGV0IG1hdGNoaW5nT3B0aW9uID0gcmVPcmRlcmVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5kYXRhUmVmLnRleHRWYWx1ZS5zdGFydHNXaXRoKHNlYXJjaFF1ZXJ5LnZhbHVlKSAmJiAhb3B0aW9uLmRhdGFSZWYuZGlzYWJsZWQpO1xuICAgICAgICBsZXQgbWF0Y2hJZHggPSBtYXRjaGluZ09wdGlvbiA/IG9wdGlvbnMudmFsdWUuaW5kZXhPZihtYXRjaGluZ09wdGlvbikgOiAtMTtcbiAgICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSB8fCBtYXRjaElkeCA9PT0gYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IG1hdGNoSWR4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IDEgLyogT3RoZXIgKi87XG4gICAgICB9LFxuICAgICAgY2xlYXJTZWFyY2goKSB7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChsaXN0Ym94U3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5LnZhbHVlID09PSBcIlwiKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VhcmNoUXVlcnkudmFsdWUgPSBcIlwiO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKGlkMiwgZGF0YVJlZikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgob3B0aW9uczIpID0+IHtcbiAgICAgICAgICByZXR1cm4gWy4uLm9wdGlvbnMyLCB7IGlkOiBpZDIsIGRhdGFSZWYgfV07XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICB9LFxuICAgICAgdW5yZWdpc3Rlck9wdGlvbihpZDIpIHtcbiAgICAgICAgbGV0IGFkanVzdGVkU3RhdGUgPSBhZGp1c3RPcmRlcmVkU3RhdGUoKG9wdGlvbnMyKSA9PiB7XG4gICAgICAgICAgbGV0IGlkeCA9IG9wdGlvbnMyLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gaWQyKTtcbiAgICAgICAgICBpZiAoaWR4ICE9PSAtMSlcbiAgICAgICAgICAgIG9wdGlvbnMyLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zMjtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLm9wdGlvbnM7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSAxIC8qIE90aGVyICovO1xuICAgICAgfSxcbiAgICAgIHNlbGVjdCh2YWx1ZTIpIHtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIG1hdGNoKG1vZGUudmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBTaW5nbGUgKi9dOiAoKSA9PiB2YWx1ZTIsXG4gICAgICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29weSA9ICgwLCBpbXBvcnRfdnVlMTkudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSkuc2xpY2UoKTtcbiAgICAgICAgICAgIGxldCByYXcgPSAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KSh2YWx1ZTIpO1xuICAgICAgICAgICAgbGV0IGlkeCA9IGNvcHkuZmluZEluZGV4KCh2YWx1ZTMpID0+IGFwaS5jb21wYXJlKHJhdywgKDAsIGltcG9ydF92dWUxOS50b1JhdykodmFsdWUzKSkpO1xuICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgY29weS5wdXNoKHJhdyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb3B5LnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB1c2VPdXRzaWRlQ2xpY2soW2J1dHRvblJlZiwgb3B0aW9uc1JlZl0sIChldmVudCwgdGFyZ2V0KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBhcGkuY2xvc2VMaXN0Ym94KCk7XG4gICAgICBpZiAoIWlzRm9jdXNhYmxlRWxlbWVudCh0YXJnZXQsIDEgLyogTG9vc2UgKi8pKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIChfYSA9IGRvbShidXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBsaXN0Ym94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLykpO1xuICAgICgwLCBpbXBvcnRfdnVlMTkucHJvdmlkZSkoTGlzdGJveENvbnRleHQsIGFwaSk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IG1hdGNoKGxpc3Rib3hTdGF0ZS52YWx1ZSwge1xuICAgICAgWzAgLyogT3BlbiAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgIFsxIC8qIENsb3NlZCAqL106IDEgLyogQ2xvc2VkICovXG4gICAgfSkpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSwgbW9kZWxWYWx1ZSwgZGlzYWJsZWQsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLCBkaXNhYmxlZCB9O1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTkuaCkoaW1wb3J0X3Z1ZTE5LkZyYWdtZW50LCBbXG4gICAgICAgIC4uLm5hbWUgIT0gbnVsbCAmJiBtb2RlbFZhbHVlICE9IG51bGwgPyBvYmplY3RUb0Zvcm1FbnRyaWVzKHsgW25hbWVdOiBtb2RlbFZhbHVlIH0pLm1hcCgoW25hbWUyLCB2YWx1ZTJdKSA9PiAoMCwgaW1wb3J0X3Z1ZTE5LmgpKEhpZGRlbiwgY29tcGFjdCh7XG4gICAgICAgICAgZmVhdHVyZXM6IDQgLyogSGlkZGVuICovLFxuICAgICAgICAgIGtleTogbmFtZTIsXG4gICAgICAgICAgYXM6IFwiaW5wdXRcIixcbiAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiBuYW1lMixcbiAgICAgICAgICB2YWx1ZTogdmFsdWUyXG4gICAgICAgIH0pKSkgOiBbXSxcbiAgICAgICAgcmVuZGVyKHtcbiAgICAgICAgICBvdXJQcm9wczoge30sXG4gICAgICAgICAgdGhlaXJQcm9wczoge1xuICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICAuLi5vbWl0KHRoZWlyUHJvcHMsIFtcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJob3Jpem9udGFsXCIsIFwibXVsdGlwbGVcIiwgXCJieVwiXSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgbmFtZTogXCJMaXN0Ym94XCJcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIExpc3Rib3hMYWJlbCA9ICgwLCBpbXBvcnRfdnVlMTkuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGlzdGJveExhYmVsXCIsXG4gIHByb3BzOiB7IGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwibGFiZWxcIiB9IH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUxpc3Rib3hDb250ZXh0KFwiTGlzdGJveExhYmVsXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1saXN0Ym94LWxhYmVsLSR7dXNlSWQoKX1gO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgKF9hID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7XG4gICAgICAgIG9wZW46IGFwaS5saXN0Ym94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgZGlzYWJsZWQ6IGFwaS5kaXNhYmxlZC52YWx1ZVxuICAgICAgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHsgaWQ6IGlkMiwgcmVmOiBhcGkubGFiZWxSZWYsIG9uQ2xpY2s6IGhhbmRsZUNsaWNrIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiTGlzdGJveExhYmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIExpc3Rib3hCdXR0b24gPSAoMCwgaW1wb3J0X3Z1ZTE5LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkxpc3Rib3hCdXR0b25cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImJ1dHRvblwiIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VMaXN0Ym94Q29udGV4dChcIkxpc3Rib3hCdXR0b25cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWxpc3Rib3gtYnV0dG9uLSR7dXNlSWQoKX1gO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkuYnV0dG9uUmVmLCAkZWw6IGFwaS5idXR0b25SZWYgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgY2FzZSBcIkVudGVyXCIgLyogRW50ZXIgKi86XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBhcGkub3Blbkxpc3Rib3goKTtcbiAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSBkb20oYXBpLm9wdGlvbnNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgaWYgKCFhcGkudmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDAgLyogRmlyc3QgKi8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dVcFwiIC8qIEFycm93VXAgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBhcGkub3Blbkxpc3Rib3goKTtcbiAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSBkb20oYXBpLm9wdGlvbnNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgaWYgKCFhcGkudmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDMgLyogTGFzdCAqLyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVVwKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAoYXBpLmRpc2FibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSB7XG4gICAgICAgIGFwaS5jbG9zZUxpc3Rib3goKTtcbiAgICAgICAgKDAsIGltcG9ydF92dWUxOS5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGFwaS5vcGVuTGlzdGJveCgpO1xuICAgICAgICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5vcHRpb25zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB0eXBlID0gdXNlUmVzb2x2ZUJ1dHRvblR5cGUoKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4gKHsgYXM6IHByb3BzLmFzLCB0eXBlOiBhdHRycy50eXBlIH0pKSwgYXBpLmJ1dHRvblJlZik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgc2xvdCA9IHtcbiAgICAgICAgb3BlbjogYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBkaXNhYmxlZDogYXBpLmRpc2FibGVkLnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByZWY6IGFwaS5idXR0b25SZWYsXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHR5cGU6IHR5cGUudmFsdWUsXG4gICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiB0cnVlLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogKF9hID0gZG9tKGFwaS5vcHRpb25zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogYXBpLmRpc2FibGVkLnZhbHVlID8gdm9pZCAwIDogYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcGkubGFiZWxSZWYudmFsdWUgPyBbKF9iID0gZG9tKGFwaS5sYWJlbFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pZCwgaWQyXS5qb2luKFwiIFwiKSA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQ6IGFwaS5kaXNhYmxlZC52YWx1ZSA9PT0gdHJ1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25LZXl1cDogaGFuZGxlS2V5VXAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIkxpc3Rib3hCdXR0b25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTGlzdGJveE9wdGlvbnMgPSAoMCwgaW1wb3J0X3Z1ZTE5LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkxpc3Rib3hPcHRpb25zXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ1bFwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VMaXN0Ym94Q29udGV4dChcIkxpc3Rib3hPcHRpb25zXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1saXN0Ym94LW9wdGlvbnMtJHt1c2VJZCgpfWA7XG4gICAgbGV0IHNlYXJjaERlYm91bmNlID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkub3B0aW9uc1JlZiwgJGVsOiBhcGkub3B0aW9uc1JlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAoc2VhcmNoRGVib3VuY2UudmFsdWUpXG4gICAgICAgIGNsZWFyVGltZW91dChzZWFyY2hEZWJvdW5jZS52YWx1ZSk7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGlmIChhcGkuc2VhcmNoUXVlcnkudmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuc2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdO1xuICAgICAgICAgICAgYXBpLnNlbGVjdChhY3RpdmVPcHRpb24uZGF0YVJlZi52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcGkubW9kZS52YWx1ZSA9PT0gMCAvKiBTaW5nbGUgKi8pIHtcbiAgICAgICAgICAgIGFwaS5jbG9zZUxpc3Rib3goKTtcbiAgICAgICAgICAgICgwLCBpbXBvcnRfdnVlMTkubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG1hdGNoKGFwaS5vcmllbnRhdGlvbi52YWx1ZSwge1xuICAgICAgICAgIHZlcnRpY2FsOiBcIkFycm93RG93blwiIC8qIEFycm93RG93biAqLyxcbiAgICAgICAgICBob3Jpem9udGFsOiBcIkFycm93UmlnaHRcIiAvKiBBcnJvd1JpZ2h0ICovXG4gICAgICAgIH0pOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDIgLyogTmV4dCAqLyk7XG4gICAgICAgIGNhc2UgbWF0Y2goYXBpLm9yaWVudGF0aW9uLnZhbHVlLCB7IHZlcnRpY2FsOiBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovLCBob3Jpem9udGFsOiBcIkFycm93TGVmdFwiIC8qIEFycm93TGVmdCAqLyB9KTpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbigxIC8qIFByZXZpb3VzICovKTtcbiAgICAgICAgY2FzZSBcIkhvbWVcIiAvKiBIb21lICovOlxuICAgICAgICBjYXNlIFwiUGFnZVVwXCIgLyogUGFnZVVwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDAgLyogRmlyc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRW5kXCIgLyogRW5kICovOlxuICAgICAgICBjYXNlIFwiUGFnZURvd25cIiAvKiBQYWdlRG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbigzIC8qIExhc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCIgLyogRXNjYXBlICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXBpLmNsb3NlTGlzdGJveCgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMTkubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUYWJcIiAvKiBUYWIgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXBpLnNlYXJjaChldmVudC5rZXkpO1xuICAgICAgICAgICAgc2VhcmNoRGVib3VuY2UudmFsdWUgPSBzZXRUaW1lb3V0KCgpID0+IGFwaS5jbGVhclNlYXJjaCgpLCAzNTApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHVzZXNPcGVuQ2xvc2VkU3RhdGUgPSB1c2VPcGVuQ2xvc2VkKCk7XG4gICAgbGV0IHZpc2libGUgPSAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAodXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaS5saXN0Ym94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5saXN0Ym94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwgPyB2b2lkIDAgOiAoX2EgPSBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogYXBpLm1vZGUudmFsdWUgPT09IDEgLyogTXVsdGkgKi8gPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAoX2QgPSAoX2IgPSBkb20oYXBpLmxhYmVsUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkKSAhPSBudWxsID8gX2QgOiAoX2MgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYy5pZCxcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IGFwaS5vcmllbnRhdGlvbi52YWx1ZSxcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIixcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIHJlZjogYXBpLm9wdGlvbnNSZWZcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIHZpc2libGU6IHZpc2libGUudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiTGlzdGJveE9wdGlvbnNcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTGlzdGJveE9wdGlvbiA9ICgwLCBpbXBvcnRfdnVlMTkuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGlzdGJveE9wdGlvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwibGlcIiB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZywgTnVtYmVyLCBCb29sZWFuXSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VMaXN0Ym94Q29udGV4dChcIkxpc3Rib3hPcHRpb25cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWxpc3Rib3gtb3B0aW9uLSR7dXNlSWQoKX1gO1xuICAgIGxldCBpbnRlcm5hbE9wdGlvblJlZiA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxPcHRpb25SZWYsICRlbDogaW50ZXJuYWxPcHRpb25SZWYgfSk7XG4gICAgbGV0IGFjdGl2ZSA9ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIHJldHVybiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgIT09IG51bGwgPyBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdLmlkID09PSBpZDIgOiBmYWxzZTtcbiAgICB9KTtcbiAgICBsZXQgc2VsZWN0ZWQgPSAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBtYXRjaChhcGkubW9kZS52YWx1ZSwge1xuICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUxOS50b1JhdykoYXBpLnZhbHVlLnZhbHVlKSwgKDAsIGltcG9ydF92dWUxOS50b1JhdykocHJvcHMudmFsdWUpKSxcbiAgICAgIFsxIC8qIE11bHRpICovXTogKCkgPT4gKDAsIGltcG9ydF92dWUxOS50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zb21lKCh2YWx1ZSkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUxOS50b1JhdykodmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KShwcm9wcy52YWx1ZSkpKVxuICAgIH0pKTtcbiAgICBsZXQgaXNGaXJzdFNlbGVjdGVkID0gKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgcmV0dXJuIG1hdGNoKGFwaS5tb2RlLnZhbHVlLCB7XG4gICAgICAgIFsxIC8qIE11bHRpICovXTogKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9ICgwLCBpbXBvcnRfdnVlMTkudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuICgoX2EgPSBhcGkub3B0aW9ucy52YWx1ZS5maW5kKChvcHRpb24pID0+IGN1cnJlbnRWYWx1ZXMuc29tZSgodmFsdWUpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlMTkudG9SYXcpKHZhbHVlKSwgKDAsIGltcG9ydF92dWUxOS50b1Jhdykob3B0aW9uLmRhdGFSZWYudmFsdWUpKSkpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQpID09PSBpZDI7XG4gICAgICAgIH0sXG4gICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IHNlbGVjdGVkLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBsZXQgZGF0YVJlZiA9ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+ICh7XG4gICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICB0ZXh0VmFsdWU6IFwiXCIsXG4gICAgICBkb21SZWY6IGludGVybmFsT3B0aW9uUmVmXG4gICAgfSkpO1xuICAgICgwLCBpbXBvcnRfdnVlMTkub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgbGV0IHRleHRWYWx1ZSA9IChfYiA9IChfYSA9IGRvbShpbnRlcm5hbE9wdGlvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgaWYgKHRleHRWYWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgICBkYXRhUmVmLnZhbHVlLnRleHRWYWx1ZSA9IHRleHRWYWx1ZTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm9uTW91bnRlZCkoKCkgPT4gYXBpLnJlZ2lzdGVyT3B0aW9uKGlkMiwgZGF0YVJlZikpO1xuICAgICgwLCBpbXBvcnRfdnVlMTkub25Vbm1vdW50ZWQpKCgpID0+IGFwaS51bnJlZ2lzdGVyT3B0aW9uKGlkMikpO1xuICAgICgwLCBpbXBvcnRfdnVlMTkub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTE5LndhdGNoKShbYXBpLmxpc3Rib3hTdGF0ZSwgc2VsZWN0ZWRdLCAoKSA9PiB7XG4gICAgICAgIGlmIChhcGkubGlzdGJveFN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXNlbGVjdGVkLnZhbHVlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbWF0Y2goYXBpLm1vZGUudmFsdWUsIHtcbiAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ZpcnN0U2VsZWN0ZWQudmFsdWUpXG4gICAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDQgLyogU3BlY2lmaWMgKi8sIGlkMik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbMCAvKiBTaW5nbGUgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICBhcGkuZ29Ub09wdGlvbig0IC8qIFNwZWNpZmljICovLCBpZDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE5LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5hY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9PT0gMCAvKiBQb2ludGVyICovKVxuICAgICAgICByZXR1cm47XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBkb20oaW50ZXJuYWxPcHRpb25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc2Nyb2xsSW50b1ZpZXcpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB7IGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBpLnNlbGVjdChwcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoYXBpLm1vZGUudmFsdWUgPT09IDAgLyogU2luZ2xlICovKSB7XG4gICAgICAgIGFwaS5jbG9zZUxpc3Rib3goKTtcbiAgICAgICAgKDAsIGltcG9ydF92dWUxOS5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbig1IC8qIE5vdGhpbmcgKi8pO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlTW92ZSgpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyLCAwIC8qIFBvaW50ZXIgKi8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVMZWF2ZSgpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFhY3RpdmUudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGFwaS5nb1RvT3B0aW9uKDUgLyogTm90aGluZyAqLyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBkaXNhYmxlZCB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgYWN0aXZlOiBhY3RpdmUudmFsdWUsIHNlbGVjdGVkOiBzZWxlY3RlZC52YWx1ZSwgZGlzYWJsZWQgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBpbnRlcm5hbE9wdGlvblJlZixcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdGFiSW5kZXg6IGRpc2FibGVkID09PSB0cnVlID8gdm9pZCAwIDogLTEsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA9PT0gdHJ1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZC52YWx1ZSA9PT0gdHJ1ZSA/IHNlbGVjdGVkLnZhbHVlIDogdm9pZCAwLFxuICAgICAgICBkaXNhYmxlZDogdm9pZCAwLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgIG9uUG9pbnRlcm1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uTW91c2Vtb3ZlOiBoYW5kbGVNb3ZlLFxuICAgICAgICBvblBvaW50ZXJsZWF2ZTogaGFuZGxlTGVhdmUsXG4gICAgICAgIG9uTW91c2VsZWF2ZTogaGFuZGxlTGVhdmVcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IG9taXQocHJvcHMsIFtcInZhbHVlXCIsIFwiZGlzYWJsZWRcIl0pLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiTGlzdGJveE9wdGlvblwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbWVudS9tZW51LnRzXG52YXIgaW1wb3J0X3Z1ZTIwID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIG5leHRGcmFtZTIoY2IpIHtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYikpO1xufVxudmFyIE1lbnVDb250ZXh0ID0gU3ltYm9sKFwiTWVudUNvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VNZW51Q29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTIwLmluamVjdCkoTWVudUNvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8TWVudSAvPiBjb21wb25lbnQuYCk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VNZW51Q29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIE1lbnUgPSAoMCwgaW1wb3J0X3Z1ZTIwLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIk1lbnVcIixcbiAgcHJvcHM6IHsgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0gfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzIH0pIHtcbiAgICBsZXQgbWVudVN0YXRlID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKDEgLyogQ2xvc2VkICovKTtcbiAgICBsZXQgYnV0dG9uUmVmID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKG51bGwpO1xuICAgIGxldCBpdGVtc1JlZiA9ICgwLCBpbXBvcnRfdnVlMjAucmVmKShudWxsKTtcbiAgICBsZXQgaXRlbXMgPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikoW10pO1xuICAgIGxldCBzZWFyY2hRdWVyeSA9ICgwLCBpbXBvcnRfdnVlMjAucmVmKShcIlwiKTtcbiAgICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKG51bGwpO1xuICAgIGxldCBhY3RpdmF0aW9uVHJpZ2dlciA9ICgwLCBpbXBvcnRfdnVlMjAucmVmKSgxIC8qIE90aGVyICovKTtcbiAgICBmdW5jdGlvbiBhZGp1c3RPcmRlcmVkU3RhdGUoYWRqdXN0bWVudCA9IChpKSA9PiBpKSB7XG4gICAgICBsZXQgY3VycmVudEFjdGl2ZUl0ZW0gPSBhY3RpdmVJdGVtSW5kZXgudmFsdWUgIT09IG51bGwgPyBpdGVtcy52YWx1ZVthY3RpdmVJdGVtSW5kZXgudmFsdWVdIDogbnVsbDtcbiAgICAgIGxldCBzb3J0ZWRJdGVtcyA9IHNvcnRCeURvbU5vZGUoYWRqdXN0bWVudChpdGVtcy52YWx1ZS5zbGljZSgpKSwgKGl0ZW0pID0+IGRvbShpdGVtLmRhdGFSZWYuZG9tUmVmKSk7XG4gICAgICBsZXQgYWRqdXN0ZWRBY3RpdmVJdGVtSW5kZXggPSBjdXJyZW50QWN0aXZlSXRlbSA/IHNvcnRlZEl0ZW1zLmluZGV4T2YoY3VycmVudEFjdGl2ZUl0ZW0pIDogbnVsbDtcbiAgICAgIGlmIChhZGp1c3RlZEFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWRqdXN0ZWRBY3RpdmVJdGVtSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXRlbXM6IHNvcnRlZEl0ZW1zLFxuICAgICAgICBhY3RpdmVJdGVtSW5kZXg6IGFkanVzdGVkQWN0aXZlSXRlbUluZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgYXBpID0ge1xuICAgICAgbWVudVN0YXRlLFxuICAgICAgYnV0dG9uUmVmLFxuICAgICAgaXRlbXNSZWYsXG4gICAgICBpdGVtcyxcbiAgICAgIHNlYXJjaFF1ZXJ5LFxuICAgICAgYWN0aXZlSXRlbUluZGV4LFxuICAgICAgYWN0aXZhdGlvblRyaWdnZXIsXG4gICAgICBjbG9zZU1lbnU6ICgpID0+IHtcbiAgICAgICAgbWVudVN0YXRlLnZhbHVlID0gMSAvKiBDbG9zZWQgKi87XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSA9IG51bGw7XG4gICAgICB9LFxuICAgICAgb3Blbk1lbnU6ICgpID0+IG1lbnVTdGF0ZS52YWx1ZSA9IDAgLyogT3BlbiAqLyxcbiAgICAgIGdvVG9JdGVtKGZvY3VzLCBpZDIsIHRyaWdnZXIpIHtcbiAgICAgICAgbGV0IGFkanVzdGVkU3RhdGUgPSBhZGp1c3RPcmRlcmVkU3RhdGUoKTtcbiAgICAgICAgbGV0IG5leHRBY3RpdmVJdGVtSW5kZXggPSBjYWxjdWxhdGVBY3RpdmVJbmRleChmb2N1cyA9PT0gNCAvKiBTcGVjaWZpYyAqLyA/IHsgZm9jdXM6IDQgLyogU3BlY2lmaWMgKi8sIGlkOiBpZDIgfSA6IHsgZm9jdXMgfSwge1xuICAgICAgICAgIHJlc29sdmVJdGVtczogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5pdGVtcyxcbiAgICAgICAgICByZXNvbHZlQWN0aXZlSW5kZXg6ICgpID0+IGFkanVzdGVkU3RhdGUuYWN0aXZlSXRlbUluZGV4LFxuICAgICAgICAgIHJlc29sdmVJZDogKGl0ZW0pID0+IGl0ZW0uaWQsXG4gICAgICAgICAgcmVzb2x2ZURpc2FibGVkOiAoaXRlbSkgPT4gaXRlbS5kYXRhUmVmLmRpc2FibGVkXG4gICAgICAgIH0pO1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSA9IFwiXCI7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSA9IG5leHRBY3RpdmVJdGVtSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gdHJpZ2dlciAhPSBudWxsID8gdHJpZ2dlciA6IDEgLyogT3RoZXIgKi87XG4gICAgICAgIGl0ZW1zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5pdGVtcztcbiAgICAgIH0sXG4gICAgICBzZWFyY2godmFsdWUpIHtcbiAgICAgICAgbGV0IHdhc0FscmVhZHlTZWFyY2hpbmcgPSBzZWFyY2hRdWVyeS52YWx1ZSAhPT0gXCJcIjtcbiAgICAgICAgbGV0IG9mZnNldCA9IHdhc0FscmVhZHlTZWFyY2hpbmcgPyAwIDogMTtcbiAgICAgICAgc2VhcmNoUXVlcnkudmFsdWUgKz0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHJlT3JkZXJlZEl0ZW1zID0gYWN0aXZlSXRlbUluZGV4LnZhbHVlICE9PSBudWxsID8gaXRlbXMudmFsdWUuc2xpY2UoYWN0aXZlSXRlbUluZGV4LnZhbHVlICsgb2Zmc2V0KS5jb25jYXQoaXRlbXMudmFsdWUuc2xpY2UoMCwgYWN0aXZlSXRlbUluZGV4LnZhbHVlICsgb2Zmc2V0KSkgOiBpdGVtcy52YWx1ZTtcbiAgICAgICAgbGV0IG1hdGNoaW5nSXRlbSA9IHJlT3JkZXJlZEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGF0YVJlZi50ZXh0VmFsdWUuc3RhcnRzV2l0aChzZWFyY2hRdWVyeS52YWx1ZSkgJiYgIWl0ZW0uZGF0YVJlZi5kaXNhYmxlZCk7XG4gICAgICAgIGxldCBtYXRjaElkeCA9IG1hdGNoaW5nSXRlbSA/IGl0ZW1zLnZhbHVlLmluZGV4T2YobWF0Y2hpbmdJdGVtKSA6IC0xO1xuICAgICAgICBpZiAobWF0Y2hJZHggPT09IC0xIHx8IG1hdGNoSWR4ID09PSBhY3RpdmVJdGVtSW5kZXgudmFsdWUpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXgudmFsdWUgPSBtYXRjaElkeDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSAxIC8qIE90aGVyICovO1xuICAgICAgfSxcbiAgICAgIGNsZWFyU2VhcmNoKCkge1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSA9IFwiXCI7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJJdGVtKGlkMiwgZGF0YVJlZikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgoaXRlbXMyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pdGVtczIsIHsgaWQ6IGlkMiwgZGF0YVJlZiB9XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0ZW1zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5pdGVtcztcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVJdGVtSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gMSAvKiBPdGhlciAqLztcbiAgICAgIH0sXG4gICAgICB1bnJlZ2lzdGVySXRlbShpZDIpIHtcbiAgICAgICAgbGV0IGFkanVzdGVkU3RhdGUgPSBhZGp1c3RPcmRlcmVkU3RhdGUoKGl0ZW1zMikgPT4ge1xuICAgICAgICAgIGxldCBpZHggPSBpdGVtczIuZmluZEluZGV4KChhKSA9PiBhLmlkID09PSBpZDIpO1xuICAgICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgICAgaXRlbXMyLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgIHJldHVybiBpdGVtczI7XG4gICAgICAgIH0pO1xuICAgICAgICBpdGVtcy52YWx1ZSA9IGFkanVzdGVkU3RhdGUuaXRlbXM7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSA9IGFkanVzdGVkU3RhdGUuYWN0aXZlSXRlbUluZGV4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IDEgLyogT3RoZXIgKi87XG4gICAgICB9XG4gICAgfTtcbiAgICB1c2VPdXRzaWRlQ2xpY2soW2J1dHRvblJlZiwgaXRlbXNSZWZdLCAoZXZlbnQsIHRhcmdldCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgYXBpLmNsb3NlTWVudSgpO1xuICAgICAgaWYgKCFpc0ZvY3VzYWJsZUVsZW1lbnQodGFyZ2V0LCAxIC8qIExvb3NlICovKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAoX2EgPSBkb20oYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgKDAsIGltcG9ydF92dWUyMC5jb21wdXRlZCkoKCkgPT4gbWVudVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIwLnByb3ZpZGUpKE1lbnVDb250ZXh0LCBhcGkpO1xuICAgIHVzZU9wZW5DbG9zZWRQcm92aWRlcigoMCwgaW1wb3J0X3Z1ZTIwLmNvbXB1dGVkKSgoKSA9PiBtYXRjaChtZW51U3RhdGUudmFsdWUsIHtcbiAgICAgIFswIC8qIE9wZW4gKi9dOiAwIC8qIE9wZW4gKi8sXG4gICAgICBbMSAvKiBDbG9zZWQgKi9dOiAxIC8qIENsb3NlZCAqL1xuICAgIH0pKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBtZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7IG91clByb3BzOiB7fSwgdGhlaXJQcm9wczogcHJvcHMsIHNsb3QsIHNsb3RzLCBhdHRycywgbmFtZTogXCJNZW51XCIgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTWVudUJ1dHRvbiA9ICgwLCBpbXBvcnRfdnVlMjAuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTWVudUJ1dHRvblwiLFxuICBwcm9wczoge1xuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlTWVudUNvbnRleHQoXCJNZW51QnV0dG9uXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1tZW51LWJ1dHRvbi0ke3VzZUlkKCl9YDtcbiAgICBleHBvc2UoeyBlbDogYXBpLmJ1dHRvblJlZiwgJGVsOiBhcGkuYnV0dG9uUmVmIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCIgLyogQXJyb3dEb3duICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXBpLm9wZW5NZW51KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWUyMC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gZG9tKGFwaS5pdGVtc1JlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICBhcGkuZ29Ub0l0ZW0oMCAvKiBGaXJzdCAqLyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCIgLyogQXJyb3dVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGFwaS5vcGVuTWVudSgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMjAubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IGRvbShhcGkuaXRlbXNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgYXBpLmdvVG9JdGVtKDMgLyogTGFzdCAqLyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVVwKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkubWVudVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pIHtcbiAgICAgICAgYXBpLmNsb3NlTWVudSgpO1xuICAgICAgICAoMCwgaW1wb3J0X3Z1ZTIwLm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXBpLm9wZW5NZW51KCk7XG4gICAgICAgIG5leHRGcmFtZTIoKCkgPT4ge1xuICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5pdGVtc1JlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdHlwZSA9IHVzZVJlc29sdmVCdXR0b25UeXBlKCgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+ICh7IGFzOiBwcm9wcy5hcywgdHlwZTogYXR0cnMudHlwZSB9KSksIGFwaS5idXR0b25SZWYpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogYXBpLm1lbnVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogYXBpLmJ1dHRvblJlZixcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAoX2EgPSBkb20oYXBpLml0ZW1zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogcHJvcHMuZGlzYWJsZWQgPyB2b2lkIDAgOiBhcGkubWVudVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25LZXl1cDogaGFuZGxlS2V5VXAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIk1lbnVCdXR0b25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTWVudUl0ZW1zID0gKDAsIGltcG9ydF92dWUyMC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJNZW51SXRlbXNcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VNZW51Q29udGV4dChcIk1lbnVJdGVtc1wiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktbWVudS1pdGVtcy0ke3VzZUlkKCl9YDtcbiAgICBsZXQgc2VhcmNoRGVib3VuY2UgPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5pdGVtc1JlZiwgJGVsOiBhcGkuaXRlbXNSZWYgfSk7XG4gICAgdXNlVHJlZVdhbGtlcih7XG4gICAgICBjb250YWluZXI6ICgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+IGRvbShhcGkuaXRlbXNSZWYpKSxcbiAgICAgIGVuYWJsZWQ6ICgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+IGFwaS5tZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyksXG4gICAgICBhY2NlcHQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpID09PSBcIm1lbnVpdGVtXCIpXG4gICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKFwicm9sZVwiKSlcbiAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0sXG4gICAgICB3YWxrKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibm9uZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoc2VhcmNoRGVib3VuY2UudmFsdWUpXG4gICAgICAgIGNsZWFyVGltZW91dChzZWFyY2hEZWJvdW5jZS52YWx1ZSk7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGlmIChhcGkuc2VhcmNoUXVlcnkudmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuc2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChhcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgYWN0aXZlSXRlbSA9IGFwaS5pdGVtcy52YWx1ZVthcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlXTtcbiAgICAgICAgICAgIGxldCBfYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW07XG4gICAgICAgICAgICAoX2EgPSBkb20oX2FjdGl2ZUl0ZW0uZGF0YVJlZi5kb21SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBpLmNsb3NlTWVudSgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMjAubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTI7XG4gICAgICAgICAgICByZXR1cm4gKF9hMiA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gYXBpLmdvVG9JdGVtKDIgLyogTmV4dCAqLyk7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCIgLyogQXJyb3dVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub0l0ZW0oMSAvKiBQcmV2aW91cyAqLyk7XG4gICAgICAgIGNhc2UgXCJIb21lXCIgLyogSG9tZSAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VVcFwiIC8qIFBhZ2VVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub0l0ZW0oMCAvKiBGaXJzdCAqLyk7XG4gICAgICAgIGNhc2UgXCJFbmRcIiAvKiBFbmQgKi86XG4gICAgICAgIGNhc2UgXCJQYWdlRG93blwiIC8qIFBhZ2VEb3duICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvSXRlbSgzIC8qIExhc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCIgLyogRXNjYXBlICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXBpLmNsb3NlTWVudSgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMjAubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTI7XG4gICAgICAgICAgICByZXR1cm4gKF9hMiA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUYWJcIiAvKiBUYWIgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXBpLnNlYXJjaChldmVudC5rZXkpO1xuICAgICAgICAgICAgc2VhcmNoRGVib3VuY2UudmFsdWUgPSBzZXRUaW1lb3V0KCgpID0+IGFwaS5jbGVhclNlYXJjaCgpLCAzNTApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5VXAoZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHVzZXNPcGVuQ2xvc2VkU3RhdGUgPSB1c2VPcGVuQ2xvc2VkKCk7XG4gICAgbGV0IHZpc2libGUgPSAoMCwgaW1wb3J0X3Z1ZTIwLmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAodXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaS5tZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBhcGkubWVudVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogYXBpLmFjdGl2ZUl0ZW1JbmRleC52YWx1ZSA9PT0gbnVsbCA/IHZvaWQgMCA6IChfYSA9IGFwaS5pdGVtcy52YWx1ZVthcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAoX2IgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pZCxcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbktleXVwOiBoYW5kbGVLZXlVcCxcbiAgICAgICAgcm9sZTogXCJtZW51XCIsXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICByZWY6IGFwaS5pdGVtc1JlZlxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgZmVhdHVyZXM6IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8gfCAyIC8qIFN0YXRpYyAqLyxcbiAgICAgICAgdmlzaWJsZTogdmlzaWJsZS52YWx1ZSxcbiAgICAgICAgbmFtZTogXCJNZW51SXRlbXNcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTWVudUl0ZW0gPSAoMCwgaW1wb3J0X3Z1ZTIwLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIk1lbnVJdGVtXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZU1lbnVDb250ZXh0KFwiTWVudUl0ZW1cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLW1lbnUtaXRlbS0ke3VzZUlkKCl9YDtcbiAgICBsZXQgaW50ZXJuYWxJdGVtUmVmID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbEl0ZW1SZWYsICRlbDogaW50ZXJuYWxJdGVtUmVmIH0pO1xuICAgIGxldCBhY3RpdmUgPSAoMCwgaW1wb3J0X3Z1ZTIwLmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICByZXR1cm4gYXBpLmFjdGl2ZUl0ZW1JbmRleC52YWx1ZSAhPT0gbnVsbCA/IGFwaS5pdGVtcy52YWx1ZVthcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlXS5pZCA9PT0gaWQyIDogZmFsc2U7XG4gICAgfSk7XG4gICAgbGV0IGRhdGFSZWYgPSAoMCwgaW1wb3J0X3Z1ZTIwLmNvbXB1dGVkKSgoKSA9PiAoe1xuICAgICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgICAgdGV4dFZhbHVlOiBcIlwiLFxuICAgICAgZG9tUmVmOiBpbnRlcm5hbEl0ZW1SZWZcbiAgICB9KSk7XG4gICAgKDAsIGltcG9ydF92dWUyMC5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgdGV4dFZhbHVlID0gKF9iID0gKF9hID0gZG9tKGludGVybmFsSXRlbVJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgaWYgKHRleHRWYWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgICBkYXRhUmVmLnZhbHVlLnRleHRWYWx1ZSA9IHRleHRWYWx1ZTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIwLm9uTW91bnRlZCkoKCkgPT4gYXBpLnJlZ2lzdGVySXRlbShpZDIsIGRhdGFSZWYpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIwLm9uVW5tb3VudGVkKSgoKSA9PiBhcGkudW5yZWdpc3Rlckl0ZW0oaWQyKSk7XG4gICAgKDAsIGltcG9ydF92dWUyMC53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgaWYgKGFwaS5tZW51U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFhY3RpdmUudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkuYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPT09IDAgLyogUG9pbnRlciAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgKDAsIGltcG9ydF92dWUyMC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gZG9tKGludGVybmFsSXRlbVJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zY3JvbGxJbnRvVmlldykgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHsgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhcGkuY2xvc2VNZW51KCk7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTIwLm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGFwaS5nb1RvSXRlbSg1IC8qIE5vdGhpbmcgKi8pO1xuICAgICAgYXBpLmdvVG9JdGVtKDQgLyogU3BlY2lmaWMgKi8sIGlkMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdmUoKSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhY3RpdmUudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGFwaS5nb1RvSXRlbSg0IC8qIFNwZWNpZmljICovLCBpZDIsIDAgLyogUG9pbnRlciAqLyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUxlYXZlKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9JdGVtKDUgLyogTm90aGluZyAqLyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBkaXNhYmxlZCB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgYWN0aXZlOiBhY3RpdmUudmFsdWUsIGRpc2FibGVkIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHJlZjogaW50ZXJuYWxJdGVtUmVmLFxuICAgICAgICByb2xlOiBcIm1lbnVpdGVtXCIsXG4gICAgICAgIHRhYkluZGV4OiBkaXNhYmxlZCA9PT0gdHJ1ZSA/IHZvaWQgMCA6IC0xLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQgPT09IHRydWUgPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgIG9uUG9pbnRlcm1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uTW91c2Vtb3ZlOiBoYW5kbGVNb3ZlLFxuICAgICAgICBvblBvaW50ZXJsZWF2ZTogaGFuZGxlTGVhdmUsXG4gICAgICAgIG9uTW91c2VsZWF2ZTogaGFuZGxlTGVhdmVcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiTWVudUl0ZW1cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci50c1xudmFyIGltcG9ydF92dWUyMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgUG9wb3ZlckNvbnRleHQgPSBTeW1ib2woXCJQb3BvdmVyQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZVBvcG92ZXJDb250ZXh0KGNvbXBvbmVudCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMjEuaW5qZWN0KShQb3BvdmVyQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDwke1BvcG92ZXIubmFtZX0gLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlUG9wb3ZlckNvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBQb3BvdmVyR3JvdXBDb250ZXh0ID0gU3ltYm9sKFwiUG9wb3Zlckdyb3VwQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZVBvcG92ZXJHcm91cENvbnRleHQoKSB7XG4gIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTIxLmluamVjdCkoUG9wb3Zlckdyb3VwQ29udGV4dCwgbnVsbCk7XG59XG52YXIgUG9wb3ZlclBhbmVsQ29udGV4dCA9IFN5bWJvbChcIlBvcG92ZXJQYW5lbENvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VQb3BvdmVyUGFuZWxDb250ZXh0KCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUyMS5pbmplY3QpKFBvcG92ZXJQYW5lbENvbnRleHQsIG51bGwpO1xufVxudmFyIFBvcG92ZXIgPSAoMCwgaW1wb3J0X3Z1ZTIxLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcG92ZXJcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzLCBleHBvc2UgfSkge1xuICAgIHZhciBfYTtcbiAgICBsZXQgYnV0dG9uSWQgPSBgaGVhZGxlc3N1aS1wb3BvdmVyLWJ1dHRvbi0ke3VzZUlkKCl9YDtcbiAgICBsZXQgcGFuZWxJZCA9IGBoZWFkbGVzc3VpLXBvcG92ZXItcGFuZWwtJHt1c2VJZCgpfWA7XG4gICAgbGV0IGludGVybmFsUG9wb3ZlclJlZiA9ICgwLCBpbXBvcnRfdnVlMjEucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxQb3BvdmVyUmVmLCAkZWw6IGludGVybmFsUG9wb3ZlclJlZiB9KTtcbiAgICBsZXQgcG9wb3ZlclN0YXRlID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKDEgLyogQ2xvc2VkICovKTtcbiAgICBsZXQgYnV0dG9uID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGxldCBiZWZvcmVQYW5lbFNlbnRpbmVsID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGxldCBhZnRlclBhbmVsU2VudGluZWwgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IHBhbmVsID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4gZ2V0T3duZXJEb2N1bWVudChpbnRlcm5hbFBvcG92ZXJSZWYpKTtcbiAgICBsZXQgaXNQb3J0YWxsZWQgPSAoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAoIWRvbShidXR0b24pKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWRvbShwYW5lbCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAobGV0IHJvb3Qgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKSB7XG4gICAgICAgIGlmIChOdW1iZXIocm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5jb250YWlucyhkb20oYnV0dG9uKSkpIF4gTnVtYmVyKHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QuY29udGFpbnMoZG9tKHBhbmVsKSkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBsZXQgYXBpID0ge1xuICAgICAgcG9wb3ZlclN0YXRlLFxuICAgICAgYnV0dG9uSWQsXG4gICAgICBwYW5lbElkLFxuICAgICAgcGFuZWwsXG4gICAgICBidXR0b24sXG4gICAgICBpc1BvcnRhbGxlZCxcbiAgICAgIGJlZm9yZVBhbmVsU2VudGluZWwsXG4gICAgICBhZnRlclBhbmVsU2VudGluZWwsXG4gICAgICB0b2dnbGVQb3BvdmVyKCkge1xuICAgICAgICBwb3BvdmVyU3RhdGUudmFsdWUgPSBtYXRjaChwb3BvdmVyU3RhdGUudmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBPcGVuICovXTogMSAvKiBDbG9zZWQgKi8sXG4gICAgICAgICAgWzEgLyogQ2xvc2VkICovXTogMCAvKiBPcGVuICovXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNsb3NlUG9wb3ZlcigpIHtcbiAgICAgICAgaWYgKHBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwb3BvdmVyU3RhdGUudmFsdWUgPSAxIC8qIENsb3NlZCAqLztcbiAgICAgIH0sXG4gICAgICBjbG9zZShmb2N1c2FibGVFbGVtZW50KSB7XG4gICAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgbGV0IHJlc3RvcmVFbGVtZW50ID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWZvY3VzYWJsZUVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gZG9tKGFwaS5idXR0b24pO1xuICAgICAgICAgIGlmIChmb2N1c2FibGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudDtcbiAgICAgICAgICBpZiAoZm9jdXNhYmxlRWxlbWVudC52YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuIGRvbShmb2N1c2FibGVFbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gZG9tKGFwaS5idXR0b24pO1xuICAgICAgICB9KSgpO1xuICAgICAgICByZXN0b3JlRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcmVzdG9yZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgICgwLCBpbXBvcnRfdnVlMjEucHJvdmlkZSkoUG9wb3ZlckNvbnRleHQsIGFwaSk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IG1hdGNoKHBvcG92ZXJTdGF0ZS52YWx1ZSwge1xuICAgICAgWzAgLyogT3BlbiAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgIFsxIC8qIENsb3NlZCAqL106IDEgLyogQ2xvc2VkICovXG4gICAgfSkpKTtcbiAgICBsZXQgcmVnaXN0ZXJCYWcgPSB7XG4gICAgICBidXR0b25JZCxcbiAgICAgIHBhbmVsSWQsXG4gICAgICBjbG9zZSgpIHtcbiAgICAgICAgYXBpLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGdyb3VwQ29udGV4dCA9IHVzZVBvcG92ZXJHcm91cENvbnRleHQoKTtcbiAgICBsZXQgcmVnaXN0ZXJQb3BvdmVyID0gZ3JvdXBDb250ZXh0ID09IG51bGwgPyB2b2lkIDAgOiBncm91cENvbnRleHQucmVnaXN0ZXJQb3BvdmVyO1xuICAgIGZ1bmN0aW9uIGlzRm9jdXNXaXRoaW5Qb3BvdmVyR3JvdXAoKSB7XG4gICAgICB2YXIgX2EyLCBfYiwgX2MsIF9kO1xuICAgICAgcmV0dXJuIChfZCA9IGdyb3VwQ29udGV4dCA9PSBudWxsID8gdm9pZCAwIDogZ3JvdXBDb250ZXh0LmlzRm9jdXNXaXRoaW5Qb3BvdmVyR3JvdXAoKSkgIT0gbnVsbCA/IF9kIDogKChfYTIgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpICYmICgoKF9iID0gZG9tKGJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jb250YWlucyhvd25lckRvY3VtZW50LnZhbHVlLmFjdGl2ZUVsZW1lbnQpKSB8fCAoKF9jID0gZG9tKHBhbmVsKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmNvbnRhaW5zKG93bmVyRG9jdW1lbnQudmFsdWUuYWN0aXZlRWxlbWVudCkpKTtcbiAgICB9XG4gICAgKDAsIGltcG9ydF92dWUyMS53YXRjaEVmZmVjdCkoKCkgPT4gcmVnaXN0ZXJQb3BvdmVyID09IG51bGwgPyB2b2lkIDAgOiByZWdpc3RlclBvcG92ZXIocmVnaXN0ZXJCYWcpKTtcbiAgICB1c2VFdmVudExpc3RlbmVyKChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kZWZhdWx0VmlldywgXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIHZhciBfYTIsIF9iO1xuICAgICAgaWYgKHBvcG92ZXJTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNGb2N1c1dpdGhpblBvcG92ZXJHcm91cCgpKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWJ1dHRvbilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFwYW5lbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKChfYTIgPSBkb20oYXBpLmJlZm9yZVBhbmVsU2VudGluZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICgoX2IgPSBkb20oYXBpLmFmdGVyUGFuZWxTZW50aW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgICByZXR1cm47XG4gICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgdXNlT3V0c2lkZUNsaWNrKFtidXR0b24sIHBhbmVsXSwgKGV2ZW50LCB0YXJnZXQpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICBpZiAoIWlzRm9jdXNhYmxlRWxlbWVudCh0YXJnZXQsIDEgLyogTG9vc2UgKi8pKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIChfYTIgPSBkb20oYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IHBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBwb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLywgY2xvc2U6IGFwaS5jbG9zZSB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBvdXJQcm9wczogeyByZWY6IGludGVybmFsUG9wb3ZlclJlZiB9LFxuICAgICAgICBzbG90LFxuICAgICAgICBzbG90cyxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIG5hbWU6IFwiUG9wb3ZlclwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBQb3BvdmVyQnV0dG9uID0gKDAsIGltcG9ydF92dWUyMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJQb3BvdmVyQnV0dG9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVBvcG92ZXJDb250ZXh0KFwiUG9wb3ZlckJ1dHRvblwiKTtcbiAgICBsZXQgb3duZXJEb2N1bWVudCA9ICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IGdldE93bmVyRG9jdW1lbnQoYXBpLmJ1dHRvbikpO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkuYnV0dG9uLCAkZWw6IGFwaS5idXR0b24gfSk7XG4gICAgbGV0IGdyb3VwQ29udGV4dCA9IHVzZVBvcG92ZXJHcm91cENvbnRleHQoKTtcbiAgICBsZXQgY2xvc2VPdGhlcnMgPSBncm91cENvbnRleHQgPT0gbnVsbCA/IHZvaWQgMCA6IGdyb3VwQ29udGV4dC5jbG9zZU90aGVycztcbiAgICBsZXQgcGFuZWxDb250ZXh0ID0gdXNlUG9wb3ZlclBhbmVsQ29udGV4dCgpO1xuICAgIGxldCBpc1dpdGhpblBhbmVsID0gcGFuZWxDb250ZXh0ID09PSBudWxsID8gZmFsc2UgOiBwYW5lbENvbnRleHQgPT09IGFwaS5wYW5lbElkO1xuICAgIGxldCBlbGVtZW50UmVmID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGxldCBzZW50aW5lbElkID0gYGhlYWRsZXNzdWktZm9jdXMtc2VudGluZWwtJHt1c2VJZCgpfWA7XG4gICAgaWYgKCFpc1dpdGhpblBhbmVsKSB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTIxLndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICAgIGFwaS5idXR0b24udmFsdWUgPSBlbGVtZW50UmVmLnZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gdXNlUmVzb2x2ZUJ1dHRvblR5cGUoKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4gKHsgYXM6IHByb3BzLmFzLCB0eXBlOiBhdHRycy50eXBlIH0pKSwgZWxlbWVudFJlZik7XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgIGlmIChpc1dpdGhpblBhbmVsKSB7XG4gICAgICAgIGlmIChhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSBldmVudC50YXJnZXQpLmNsaWNrKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICAoX2MgPSBkb20oYXBpLmJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYy5mb2N1cygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICAgICAgY2xvc2VPdGhlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsb3NlT3RoZXJzKGFwaS5idXR0b25JZCk7XG4gICAgICAgICAgICBhcGkudG9nZ2xlUG9wb3ZlcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkVzY2FwZVwiIC8qIEVzY2FwZSAqLzpcbiAgICAgICAgICAgIGlmIChhcGkucG9wb3ZlclN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgICAgICAgIHJldHVybiBjbG9zZU90aGVycyA9PSBudWxsID8gdm9pZCAwIDogY2xvc2VPdGhlcnMoYXBpLmJ1dHRvbklkKTtcbiAgICAgICAgICAgIGlmICghZG9tKGFwaS5idXR0b24pKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoKChfZCA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfZC5hY3RpdmVFbGVtZW50KSAmJiAhKChfZSA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lLmNvbnRhaW5zKG93bmVyRG9jdW1lbnQudmFsdWUuYWN0aXZlRWxlbWVudCkpKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgaWYgKGlzV2l0aGluUGFuZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiIFwiIC8qIFNwYWNlICovKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNXaXRoaW5QYW5lbCkge1xuICAgICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIChfYSA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIGNsb3NlT3RoZXJzID09IG51bGwgPyB2b2lkIDAgOiBjbG9zZU90aGVycyhhcGkuYnV0dG9uSWQpO1xuICAgICAgICBhcGkudG9nZ2xlUG9wb3ZlcigpO1xuICAgICAgICAoX2IgPSBkb20oYXBpLmJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB2aXNpYmxlID0gYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IHZpc2libGUgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IGlzV2l0aGluUGFuZWwgPyB7XG4gICAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja1xuICAgICAgfSA6IHtcbiAgICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgICBpZDogYXBpLmJ1dHRvbklkLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogcHJvcHMuZGlzYWJsZWQgPyB2b2lkIDAgOiBhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBkb20oYXBpLnBhbmVsKSA/IGFwaS5wYW5lbElkIDogdm9pZCAwLFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgIG9uS2V5dXA6IGhhbmRsZUtleVVwLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25Nb3VzZWRvd246IGhhbmRsZU1vdXNlRG93blxuICAgICAgfTtcbiAgICAgIGxldCBkaXJlY3Rpb24gPSB1c2VUYWJEaXJlY3Rpb24oKTtcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBsZXQgZWwgPSBkb20oYXBpLnBhbmVsKTtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgICBtYXRjaChkaXJlY3Rpb24udmFsdWUsIHtcbiAgICAgICAgICAgIFswIC8qIEZvcndhcmRzICovXTogKCkgPT4gZm9jdXNJbihlbCwgMSAvKiBGaXJzdCAqLyksXG4gICAgICAgICAgICBbMSAvKiBCYWNrd2FyZHMgKi9dOiAoKSA9PiBmb2N1c0luKGVsLCA4IC8qIExhc3QgKi8pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgbWljcm9UYXNrKHJ1bik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTIxLmgpKGltcG9ydF92dWUyMS5GcmFnbWVudCwgW1xuICAgICAgICByZW5kZXIoe1xuICAgICAgICAgIG91clByb3BzLFxuICAgICAgICAgIHRoZWlyUHJvcHM6IHsgLi4uYXR0cnMsIC4uLnByb3BzIH0sXG4gICAgICAgICAgc2xvdCxcbiAgICAgICAgICBhdHRycyxcbiAgICAgICAgICBzbG90cyxcbiAgICAgICAgICBuYW1lOiBcIlBvcG92ZXJCdXR0b25cIlxuICAgICAgICB9KSxcbiAgICAgICAgdmlzaWJsZSAmJiAhaXNXaXRoaW5QYW5lbCAmJiBhcGkuaXNQb3J0YWxsZWQudmFsdWUgJiYgKDAsIGltcG9ydF92dWUyMS5oKShIaWRkZW4sIHtcbiAgICAgICAgICBpZDogc2VudGluZWxJZCxcbiAgICAgICAgICBmZWF0dXJlczogMiAvKiBGb2N1c2FibGUgKi8sXG4gICAgICAgICAgYXM6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1xuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgUG9wb3Zlck92ZXJsYXkgPSAoMCwgaW1wb3J0X3Z1ZTIxLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcG92ZXJPdmVybGF5XCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVBvcG92ZXJDb250ZXh0KFwiUG9wb3Zlck92ZXJsYXlcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLXBvcG92ZXItb3ZlcmxheS0ke3VzZUlkKCl9YDtcbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgdmlzaWJsZSA9ICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmICh1c2VzT3BlbkNsb3NlZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1c2VzT3BlbkNsb3NlZFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgYXBpLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlLnZhbHVlLFxuICAgICAgICBuYW1lOiBcIlBvcG92ZXJPdmVybGF5XCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFBvcG92ZXJQYW5lbCA9ICgwLCBpbXBvcnRfdnVlMjEuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9wb3ZlclBhbmVsXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCB7IGZvY3VzIH0gPSBwcm9wcztcbiAgICBsZXQgYXBpID0gdXNlUG9wb3ZlckNvbnRleHQoXCJQb3BvdmVyUGFuZWxcIik7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGFwaS5wYW5lbCkpO1xuICAgIGxldCBiZWZvcmVQYW5lbFNlbnRpbmVsSWQgPSBgaGVhZGxlc3N1aS1mb2N1cy1zZW50aW5lbC1iZWZvcmUtJHt1c2VJZCgpfWA7XG4gICAgbGV0IGFmdGVyUGFuZWxTZW50aW5lbElkID0gYGhlYWRsZXNzdWktZm9jdXMtc2VudGluZWwtYWZ0ZXItJHt1c2VJZCgpfWA7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5wYW5lbCwgJGVsOiBhcGkucGFuZWwgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyMS5wcm92aWRlKShQb3BvdmVyUGFuZWxDb250ZXh0LCBhcGkucGFuZWxJZCk7XG4gICAgKDAsIGltcG9ydF92dWUyMS53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGlmICghZm9jdXMpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkucG9wb3ZlclN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghYXBpLnBhbmVsKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgYWN0aXZlRWxlbWVudCA9IChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKChfYiA9IGRvbShhcGkucGFuZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY29udGFpbnMoYWN0aXZlRWxlbWVudCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGZvY3VzSW4oZG9tKGFwaS5wYW5lbCksIDEgLyogRmlyc3QgKi8pO1xuICAgIH0pO1xuICAgIGxldCB1c2VzT3BlbkNsb3NlZFN0YXRlID0gdXNlT3BlbkNsb3NlZCgpO1xuICAgIGxldCB2aXNpYmxlID0gKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCJFc2NhcGVcIiAvKiBFc2NhcGUgKi86XG4gICAgICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBpZiAoIWRvbShhcGkucGFuZWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGlmIChvd25lckRvY3VtZW50LnZhbHVlICYmICEoKF9hID0gZG9tKGFwaS5wYW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jb250YWlucyhvd25lckRvY3VtZW50LnZhbHVlLmFjdGl2ZUVsZW1lbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAoX2IgPSBkb20oYXBpLmJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgbGV0IGVsID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICAgIGlmICghZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZG9tKGFwaS5wYW5lbCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICgoX2EgPSBkb20oYXBpLnBhbmVsKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNvbnRhaW5zKGVsKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgaWYgKCgoX2MgPSAoX2IgPSBkb20oYXBpLmJlZm9yZVBhbmVsU2VudGluZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY29udGFpbnMpID09IG51bGwgPyB2b2lkIDAgOiBfYy5jYWxsKF9iLCBlbCkpIHx8ICgoX2UgPSAoX2QgPSBkb20oYXBpLmFmdGVyUGFuZWxTZW50aW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfZC5jb250YWlucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9lLmNhbGwoX2QsIGVsKSkpIHtcbiAgICAgICAgZWwuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZGlyZWN0aW9uID0gdXNlVGFiRGlyZWN0aW9uKCk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQmVmb3JlRm9jdXMoKSB7XG4gICAgICBsZXQgZWwgPSBkb20oYXBpLnBhbmVsKTtcbiAgICAgIGlmICghZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgbWF0Y2goZGlyZWN0aW9uLnZhbHVlLCB7XG4gICAgICAgICAgWzAgLyogRm9yd2FyZHMgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICBmb2N1c0luKGVsLCA0IC8qIE5leHQgKi8pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgWzEgLyogQmFja3dhcmRzICovXTogKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gZG9tKGFwaS5idXR0b24pKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgbWljcm9UYXNrKHJ1bik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBydW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQWZ0ZXJGb2N1cygpIHtcbiAgICAgIGxldCBlbCA9IGRvbShhcGkucGFuZWwpO1xuICAgICAgaWYgKCFlbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICBtYXRjaChkaXJlY3Rpb24udmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBGb3J3YXJkcyAqL106ICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBsZXQgYnV0dG9uID0gZG9tKGFwaS5idXR0b24pO1xuICAgICAgICAgICAgbGV0IHBhbmVsID0gZG9tKGFwaS5wYW5lbCk7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvbilcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICAgICAgICAgIGxldCBpZHggPSBlbGVtZW50cy5pbmRleE9mKGJ1dHRvbik7XG4gICAgICAgICAgICBsZXQgYmVmb3JlID0gZWxlbWVudHMuc2xpY2UoMCwgaWR4ICsgMSk7XG4gICAgICAgICAgICBsZXQgYWZ0ZXIgPSBlbGVtZW50cy5zbGljZShpZHggKyAxKTtcbiAgICAgICAgICAgIGxldCBjb21iaW5lZCA9IFsuLi5hZnRlciwgLi4uYmVmb3JlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgY29tYmluZWQuc2xpY2UoKSkge1xuICAgICAgICAgICAgICBpZiAoKChfYiA9IChfYSA9IGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQuaWQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdGFydHNXaXRoKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSwgXCJoZWFkbGVzc3VpLWZvY3VzLXNlbnRpbmVsLVwiKSkgfHwgKHBhbmVsID09IG51bGwgPyB2b2lkIDAgOiBwYW5lbC5jb250YWlucyhlbGVtZW50KSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaWR4MiA9IGNvbWJpbmVkLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGlkeDIgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgY29tYmluZWQuc3BsaWNlKGlkeDIsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2N1c0luKGNvbWJpbmVkLCAxIC8qIEZpcnN0ICovLCBmYWxzZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbMSAvKiBCYWNrd2FyZHMgKi9dOiAoKSA9PiBmb2N1c0luKGVsLCAyIC8qIFByZXZpb3VzICovKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBtaWNyb1Rhc2socnVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bigpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7XG4gICAgICAgIG9wZW46IGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgY2xvc2U6IGFwaS5jbG9zZVxuICAgICAgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgcmVmOiBhcGkucGFuZWwsXG4gICAgICAgIGlkOiBhcGkucGFuZWxJZCxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkZvY3Vzb3V0OiBmb2N1cyAmJiBhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gPyBoYW5kbGVCbHVyIDogdm9pZCAwLFxuICAgICAgICB0YWJJbmRleDogLTFcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHsgLi4uYXR0cnMsIC4uLnByb3BzIH0sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90LFxuICAgICAgICBzbG90czoge1xuICAgICAgICAgIC4uLnNsb3RzLFxuICAgICAgICAgIGRlZmF1bHQ6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTIxLmgpKGltcG9ydF92dWUyMS5GcmFnbWVudCwgW1xuICAgICAgICAgICAgICAgIHZpc2libGUudmFsdWUgJiYgYXBpLmlzUG9ydGFsbGVkLnZhbHVlICYmICgwLCBpbXBvcnRfdnVlMjEuaCkoSGlkZGVuLCB7XG4gICAgICAgICAgICAgICAgICBpZDogYmVmb3JlUGFuZWxTZW50aW5lbElkLFxuICAgICAgICAgICAgICAgICAgcmVmOiBhcGkuYmVmb3JlUGFuZWxTZW50aW5lbCxcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqLyxcbiAgICAgICAgICAgICAgICAgIGFzOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUJlZm9yZUZvY3VzXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKF9hID0gc2xvdHMuZGVmYXVsdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwoc2xvdHMsIC4uLmFyZ3MpLFxuICAgICAgICAgICAgICAgIHZpc2libGUudmFsdWUgJiYgYXBpLmlzUG9ydGFsbGVkLnZhbHVlICYmICgwLCBpbXBvcnRfdnVlMjEuaCkoSGlkZGVuLCB7XG4gICAgICAgICAgICAgICAgICBpZDogYWZ0ZXJQYW5lbFNlbnRpbmVsSWQsXG4gICAgICAgICAgICAgICAgICByZWY6IGFwaS5hZnRlclBhbmVsU2VudGluZWwsXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlczogMiAvKiBGb2N1c2FibGUgKi8sXG4gICAgICAgICAgICAgICAgICBhczogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICBvbkZvY3VzOiBoYW5kbGVBZnRlckZvY3VzXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlLnZhbHVlLFxuICAgICAgICBuYW1lOiBcIlBvcG92ZXJQYW5lbFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBQb3BvdmVyR3JvdXAgPSAoMCwgaW1wb3J0X3Z1ZTIxLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcG92ZXJHcm91cFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGdyb3VwUmVmID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGxldCBwb3BvdmVycyA9ICgwLCBpbXBvcnRfdnVlMjEucmVmKShbXSk7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGdyb3VwUmVmKSk7XG4gICAgZXhwb3NlKHsgZWw6IGdyb3VwUmVmLCAkZWw6IGdyb3VwUmVmIH0pO1xuICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXJQb3BvdmVyKHJlZ2lzdGVyQmFnKSB7XG4gICAgICBsZXQgaWR4ID0gcG9wb3ZlcnMudmFsdWUuaW5kZXhPZihyZWdpc3RlckJhZyk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSlcbiAgICAgICAgcG9wb3ZlcnMudmFsdWUuc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyUG9wb3ZlcihyZWdpc3RlckJhZykge1xuICAgICAgcG9wb3ZlcnMudmFsdWUucHVzaChyZWdpc3RlckJhZyk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnJlZ2lzdGVyUG9wb3ZlcihyZWdpc3RlckJhZyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0ZvY3VzV2l0aGluUG9wb3Zlckdyb3VwKCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgbGV0IG93bmVyID0gb3duZXJEb2N1bWVudC52YWx1ZTtcbiAgICAgIGlmICghb3duZXIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGxldCBlbGVtZW50ID0gb3duZXIuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmICgoX2EgPSBkb20oZ3JvdXBSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY29udGFpbnMoZWxlbWVudCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHBvcG92ZXJzLnZhbHVlLnNvbWUoKGJhZykgPT4ge1xuICAgICAgICB2YXIgX2EyLCBfYjtcbiAgICAgICAgcmV0dXJuICgoX2EyID0gb3duZXIuZ2V0RWxlbWVudEJ5SWQoYmFnLmJ1dHRvbklkKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jb250YWlucyhlbGVtZW50KSkgfHwgKChfYiA9IG93bmVyLmdldEVsZW1lbnRCeUlkKGJhZy5wYW5lbElkKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNvbnRhaW5zKGVsZW1lbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZU90aGVycyhidXR0b25JZCkge1xuICAgICAgZm9yIChsZXQgcG9wb3ZlciBvZiBwb3BvdmVycy52YWx1ZSkge1xuICAgICAgICBpZiAocG9wb3Zlci5idXR0b25JZCAhPT0gYnV0dG9uSWQpXG4gICAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICAoMCwgaW1wb3J0X3Z1ZTIxLnByb3ZpZGUpKFBvcG92ZXJHcm91cENvbnRleHQsIHtcbiAgICAgIHJlZ2lzdGVyUG9wb3ZlcixcbiAgICAgIHVucmVnaXN0ZXJQb3BvdmVyLFxuICAgICAgaXNGb2N1c1dpdGhpblBvcG92ZXJHcm91cCxcbiAgICAgIGNsb3NlT3RoZXJzXG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHsgcmVmOiBncm91cFJlZiB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdDoge30sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJQb3BvdmVyR3JvdXBcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLnRzXG52YXIgaW1wb3J0X3Z1ZTIzID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbGFiZWwvbGFiZWwudHNcbnZhciBpbXBvcnRfdnVlMjIgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIExhYmVsQ29udGV4dCA9IFN5bWJvbChcIkxhYmVsQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZUxhYmVsQ29udGV4dCgpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTIyLmluamVjdCkoTGFiZWxDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKFwiWW91IHVzZWQgYSA8TGFiZWwgLz4gY29tcG9uZW50LCBidXQgaXQgaXMgbm90IGluc2lkZSBhIHBhcmVudC5cIik7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VMYWJlbENvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbmZ1bmN0aW9uIHVzZUxhYmVscyh7XG4gIHNsb3QgPSB7fSxcbiAgbmFtZSA9IFwiTGFiZWxcIixcbiAgcHJvcHMgPSB7fVxufSA9IHt9KSB7XG4gIGxldCBsYWJlbElkcyA9ICgwLCBpbXBvcnRfdnVlMjIucmVmKShbXSk7XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhbHVlKSB7XG4gICAgbGFiZWxJZHMudmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBpZHggPSBsYWJlbElkcy52YWx1ZS5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgICByZXR1cm47XG4gICAgICBsYWJlbElkcy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICB9O1xuICB9XG4gICgwLCBpbXBvcnRfdnVlMjIucHJvdmlkZSkoTGFiZWxDb250ZXh0LCB7IHJlZ2lzdGVyLCBzbG90LCBuYW1lLCBwcm9wcyB9KTtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjIuY29tcHV0ZWQpKCgpID0+IGxhYmVsSWRzLnZhbHVlLmxlbmd0aCA+IDAgPyBsYWJlbElkcy52YWx1ZS5qb2luKFwiIFwiKSA6IHZvaWQgMCk7XG59XG52YXIgTGFiZWwgPSAoMCwgaW1wb3J0X3Z1ZTIyLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkxhYmVsXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJsYWJlbFwiIH0sXG4gICAgcGFzc2l2ZTogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAobXlQcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIGxldCBjb250ZXh0ID0gdXNlTGFiZWxDb250ZXh0KCk7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWxhYmVsLSR7dXNlSWQoKX1gO1xuICAgICgwLCBpbXBvcnRfdnVlMjIub25Nb3VudGVkKSgoKSA9PiAoMCwgaW1wb3J0X3Z1ZTIyLm9uVW5tb3VudGVkKShjb250ZXh0LnJlZ2lzdGVyKGlkMikpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSA9IFwiTGFiZWxcIiwgc2xvdCA9IHt9LCBwcm9wcyA9IHt9IH0gPSBjb250ZXh0O1xuICAgICAgbGV0IHsgcGFzc2l2ZSwgLi4udGhlaXJQcm9wcyB9ID0gbXlQcm9wcztcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiAoMCwgaW1wb3J0X3Z1ZTIyLnVucmVmKSh2YWx1ZSkgfSksIHt9KSxcbiAgICAgICAgaWQ6IGlkMlxuICAgICAgfTtcbiAgICAgIGlmIChwYXNzaXZlKSB7XG4gICAgICAgIGRlbGV0ZSBvdXJQcm9wc1tcIm9uQ2xpY2tcIl07XG4gICAgICAgIGRlbGV0ZSB0aGVpclByb3BzW1wib25DbGlja1wiXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmFkaW8tZ3JvdXAvcmFkaW8tZ3JvdXAudHNcbnZhciBSYWRpb0dyb3VwQ29udGV4dCA9IFN5bWJvbChcIlJhZGlvR3JvdXBDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlUmFkaW9Hcm91cENvbnRleHQoY29tcG9uZW50KSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUyMy5pbmplY3QpKFJhZGlvR3JvdXBDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKGA8JHtjb21wb25lbnR9IC8+IGlzIG1pc3NpbmcgYSBwYXJlbnQgPFJhZGlvR3JvdXAgLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlUmFkaW9Hcm91cENvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBSYWRpb0dyb3VwID0gKDAsIGltcG9ydF92dWUyMy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJSYWRpb0dyb3VwXCIsXG4gIGVtaXRzOiB7IFwidXBkYXRlOm1vZGVsVmFsdWVcIjogKF92YWx1ZSkgPT4gdHJ1ZSB9LFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbl0gfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgb3B0aW9uYWw6IHRydWUgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBlbWl0LCBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IHJhZGlvR3JvdXBSZWYgPSAoMCwgaW1wb3J0X3Z1ZTIzLnJlZikobnVsbCk7XG4gICAgbGV0IG9wdGlvbnMgPSAoMCwgaW1wb3J0X3Z1ZTIzLnJlZikoW10pO1xuICAgIGxldCBsYWJlbGxlZGJ5ID0gdXNlTGFiZWxzKHsgbmFtZTogXCJSYWRpb0dyb3VwTGFiZWxcIiB9KTtcbiAgICBsZXQgZGVzY3JpYmVkYnkgPSB1c2VEZXNjcmlwdGlvbnMoeyBuYW1lOiBcIlJhZGlvR3JvdXBEZXNjcmlwdGlvblwiIH0pO1xuICAgIGV4cG9zZSh7IGVsOiByYWRpb0dyb3VwUmVmLCAkZWw6IHJhZGlvR3JvdXBSZWYgfSk7XG4gICAgbGV0IHZhbHVlID0gKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4gcHJvcHMubW9kZWxWYWx1ZSk7XG4gICAgbGV0IGFwaSA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc2FibGVkOiAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5kaXNhYmxlZCksXG4gICAgICBmaXJzdE9wdGlvbjogKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4gb3B0aW9ucy52YWx1ZS5maW5kKChvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5wcm9wc1JlZi5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSkpLFxuICAgICAgY29udGFpbnNDaGVja2VkT3B0aW9uOiAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBvcHRpb25zLnZhbHVlLnNvbWUoKG9wdGlvbikgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUyMy50b1Jhdykob3B0aW9uLnByb3BzUmVmLnZhbHVlKSwgKDAsIGltcG9ydF92dWUyMy50b1JhdykocHJvcHMubW9kZWxWYWx1ZSkpKSksXG4gICAgICBjb21wYXJlKGEsIHopIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IHo7XG4gICAgICB9LFxuICAgICAgY2hhbmdlKG5leHRWYWx1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTIzLnRvUmF3KSh2YWx1ZS52YWx1ZSksICgwLCBpbXBvcnRfdnVlMjMudG9SYXcpKG5leHRWYWx1ZSkpKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IG5leHRPcHRpb24gPSAoX2EgPSBvcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUyMy50b1Jhdykob3B0aW9uLnByb3BzUmVmLnZhbHVlKSwgKDAsIGltcG9ydF92dWUyMy50b1JhdykobmV4dFZhbHVlKSkpKSA9PSBudWxsID8gdm9pZCAwIDogX2EucHJvcHNSZWY7XG4gICAgICAgIGlmIChuZXh0T3B0aW9uID09IG51bGwgPyB2b2lkIDAgOiBuZXh0T3B0aW9uLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIG5leHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyT3B0aW9uKGFjdGlvbikge1xuICAgICAgICBvcHRpb25zLnZhbHVlLnB1c2goYWN0aW9uKTtcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IHNvcnRCeURvbU5vZGUob3B0aW9ucy52YWx1ZSwgKG9wdGlvbikgPT4gb3B0aW9uLmVsZW1lbnQpO1xuICAgICAgfSxcbiAgICAgIHVucmVnaXN0ZXJPcHRpb24oaWQzKSB7XG4gICAgICAgIGxldCBpZHggPSBvcHRpb25zLnZhbHVlLmZpbmRJbmRleCgocmFkaW8pID0+IHJhZGlvLmlkID09PSBpZDMpO1xuICAgICAgICBpZiAoaWR4ID09PSAtMSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9wdGlvbnMudmFsdWUuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIzLnByb3ZpZGUpKFJhZGlvR3JvdXBDb250ZXh0LCBhcGkpO1xuICAgIHVzZVRyZWVXYWxrZXIoe1xuICAgICAgY29udGFpbmVyOiAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBkb20ocmFkaW9Hcm91cFJlZikpLFxuICAgICAgYWNjZXB0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKSA9PT0gXCJyYWRpb1wiKVxuICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4gICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpXG4gICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgICB9LFxuICAgICAgd2Fsayhub2RlKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcIm5vbmVcIik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKCFyYWRpb0dyb3VwUmVmLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIXJhZGlvR3JvdXBSZWYudmFsdWUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGFsbCA9IG9wdGlvbnMudmFsdWUuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5wcm9wc1JlZi5kaXNhYmxlZCA9PT0gZmFsc2UpLm1hcCgocmFkaW8pID0+IHJhZGlvLmVsZW1lbnQpO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIkVudGVyXCIgLyogRW50ZXIgKi86XG4gICAgICAgICAgYXR0ZW1wdFN1Ym1pdChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93TGVmdFwiIC8qIEFycm93TGVmdCAqLzpcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBmb2N1c0luKGFsbCwgMiAvKiBQcmV2aW91cyAqLyB8IDE2IC8qIFdyYXBBcm91bmQgKi8pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMiAvKiBTdWNjZXNzICovKSB7XG4gICAgICAgICAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBvcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmVsZW1lbnQgPT09ICgoX2EgPSBnZXRPd25lckRvY3VtZW50KHJhZGlvR3JvdXBSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKVxuICAgICAgICAgICAgICAgIGFwaS5jaGFuZ2UoYWN0aXZlT3B0aW9uLnByb3BzUmVmLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd1JpZ2h0XCIgLyogQXJyb3dSaWdodCAqLzpcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiIC8qIEFycm93RG93biAqLzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZm9jdXNJbihhbGwsIDQgLyogTmV4dCAqLyB8IDE2IC8qIFdyYXBBcm91bmQgKi8pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMiAvKiBTdWNjZXNzICovKSB7XG4gICAgICAgICAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBvcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmVsZW1lbnQgPT09ICgoX2EgPSBnZXRPd25lckRvY3VtZW50KG9wdGlvbi5lbGVtZW50KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbilcbiAgICAgICAgICAgICAgICBhcGkuY2hhbmdlKGFjdGl2ZU9wdGlvbi5wcm9wc1JlZi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGxldCBhY3RpdmVPcHRpb24gPSBvcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb24uZWxlbWVudCA9PT0gKChfYSA9IGdldE93bmVyRG9jdW1lbnQob3B0aW9uLmVsZW1lbnQpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pXG4gICAgICAgICAgICAgIGFwaS5jaGFuZ2UoYWN0aXZlT3B0aW9uLnByb3BzUmVmLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1yYWRpb2dyb3VwLSR7dXNlSWQoKX1gO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBtb2RlbFZhbHVlLCBkaXNhYmxlZCwgbmFtZSwgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogcmFkaW9Hcm91cFJlZixcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcm9sZTogXCJyYWRpb2dyb3VwXCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsbGVkYnkudmFsdWUsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBkZXNjcmliZWRieS52YWx1ZSxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duXG4gICAgICB9O1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjMuaCkoaW1wb3J0X3Z1ZTIzLkZyYWdtZW50LCBbXG4gICAgICAgIC4uLm5hbWUgIT0gbnVsbCAmJiBtb2RlbFZhbHVlICE9IG51bGwgPyBvYmplY3RUb0Zvcm1FbnRyaWVzKHsgW25hbWVdOiBtb2RlbFZhbHVlIH0pLm1hcCgoW25hbWUyLCB2YWx1ZTJdKSA9PiAoMCwgaW1wb3J0X3Z1ZTIzLmgpKEhpZGRlbiwgY29tcGFjdCh7XG4gICAgICAgICAgZmVhdHVyZXM6IDQgLyogSGlkZGVuICovLFxuICAgICAgICAgIGtleTogbmFtZTIsXG4gICAgICAgICAgYXM6IFwiaW5wdXRcIixcbiAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiBuYW1lMixcbiAgICAgICAgICB2YWx1ZTogdmFsdWUyXG4gICAgICAgIH0pKSkgOiBbXSxcbiAgICAgICAgcmVuZGVyKHtcbiAgICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgICB0aGVpclByb3BzOiB7IC4uLmF0dHJzLCAuLi50aGVpclByb3BzIH0sXG4gICAgICAgICAgc2xvdDoge30sXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgbmFtZTogXCJSYWRpb0dyb3VwXCJcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFJhZGlvR3JvdXBPcHRpb24gPSAoMCwgaW1wb3J0X3Z1ZTIzLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlJhZGlvR3JvdXBPcHRpb25cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW5dIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVJhZGlvR3JvdXBDb250ZXh0KFwiUmFkaW9Hcm91cE9wdGlvblwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktcmFkaW9ncm91cC1vcHRpb24tJHt1c2VJZCgpfWA7XG4gICAgbGV0IGxhYmVsbGVkYnkgPSB1c2VMYWJlbHMoeyBuYW1lOiBcIlJhZGlvR3JvdXBMYWJlbFwiIH0pO1xuICAgIGxldCBkZXNjcmliZWRieSA9IHVzZURlc2NyaXB0aW9ucyh7IG5hbWU6IFwiUmFkaW9Hcm91cERlc2NyaXB0aW9uXCIgfSk7XG4gICAgbGV0IG9wdGlvblJlZiA9ICgwLCBpbXBvcnRfdnVlMjMucmVmKShudWxsKTtcbiAgICBsZXQgcHJvcHNSZWYgPSAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiAoeyB2YWx1ZTogcHJvcHMudmFsdWUsIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCB9KSk7XG4gICAgbGV0IHN0YXRlID0gKDAsIGltcG9ydF92dWUyMy5yZWYpKDEgLyogRW1wdHkgKi8pO1xuICAgIGV4cG9zZSh7IGVsOiBvcHRpb25SZWYsICRlbDogb3B0aW9uUmVmIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMjMub25Nb3VudGVkKSgoKSA9PiBhcGkucmVnaXN0ZXJPcHRpb24oeyBpZDogaWQyLCBlbGVtZW50OiBvcHRpb25SZWYsIHByb3BzUmVmIH0pKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIzLm9uVW5tb3VudGVkKSgoKSA9PiBhcGkudW5yZWdpc3Rlck9wdGlvbihpZDIpKTtcbiAgICBsZXQgaXNGaXJzdE9wdGlvbiA9ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiAoKF9hID0gYXBpLmZpcnN0T3B0aW9uLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQpID09PSBpZDI7XG4gICAgfSk7XG4gICAgbGV0IGRpc2FibGVkID0gKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4gYXBpLmRpc2FibGVkLnZhbHVlIHx8IHByb3BzLmRpc2FibGVkKTtcbiAgICBsZXQgY2hlY2tlZCA9ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlMjMudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSksICgwLCBpbXBvcnRfdnVlMjMudG9SYXcpKHByb3BzLnZhbHVlKSkpO1xuICAgIGxldCB0YWJJbmRleCA9ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKGNoZWNrZWQudmFsdWUpXG4gICAgICAgIHJldHVybiAwO1xuICAgICAgaWYgKCFhcGkuY29udGFpbnNDaGVja2VkT3B0aW9uLnZhbHVlICYmIGlzRmlyc3RPcHRpb24udmFsdWUpXG4gICAgICAgIHJldHVybiAwO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKCFhcGkuY2hhbmdlKHByb3BzLnZhbHVlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgc3RhdGUudmFsdWUgfD0gMiAvKiBBY3RpdmUgKi87XG4gICAgICAoX2EgPSBvcHRpb25SZWYudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIHN0YXRlLnZhbHVlIHw9IDIgLyogQWN0aXZlICovO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgc3RhdGUudmFsdWUgJj0gfjIgLyogQWN0aXZlICovO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBvbWl0KHByb3BzLCBbXCJ2YWx1ZVwiLCBcImRpc2FibGVkXCJdKTtcbiAgICAgIGxldCBzbG90ID0ge1xuICAgICAgICBjaGVja2VkOiBjaGVja2VkLnZhbHVlLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQudmFsdWUsXG4gICAgICAgIGFjdGl2ZTogQm9vbGVhbihzdGF0ZS52YWx1ZSAmIDIgLyogQWN0aXZlICovKVxuICAgICAgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBvcHRpb25SZWYsXG4gICAgICAgIHJvbGU6IFwicmFkaW9cIixcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogY2hlY2tlZC52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBsYWJlbGxlZGJ5LnZhbHVlLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogZGVzY3JpYmVkYnkudmFsdWUsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZC52YWx1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleC52YWx1ZSxcbiAgICAgICAgb25DbGljazogZGlzYWJsZWQudmFsdWUgPyB2b2lkIDAgOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25Gb2N1czogZGlzYWJsZWQudmFsdWUgPyB2b2lkIDAgOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgb25CbHVyOiBkaXNhYmxlZC52YWx1ZSA/IHZvaWQgMCA6IGhhbmRsZUJsdXJcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJSYWRpb0dyb3VwT3B0aW9uXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFJhZGlvR3JvdXBMYWJlbCA9IExhYmVsO1xudmFyIFJhZGlvR3JvdXBEZXNjcmlwdGlvbiA9IERlc2NyaXB0aW9uO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zd2l0Y2gvc3dpdGNoLnRzXG52YXIgaW1wb3J0X3Z1ZTI0ID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBHcm91cENvbnRleHQgPSBTeW1ib2woXCJHcm91cENvbnRleHRcIik7XG52YXIgU3dpdGNoR3JvdXAgPSAoMCwgaW1wb3J0X3Z1ZTI0LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlN3aXRjaEdyb3VwXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzIH0pIHtcbiAgICBsZXQgc3dpdGNoUmVmID0gKDAsIGltcG9ydF92dWUyNC5yZWYpKG51bGwpO1xuICAgIGxldCBsYWJlbGxlZGJ5ID0gdXNlTGFiZWxzKHtcbiAgICAgIG5hbWU6IFwiU3dpdGNoTGFiZWxcIixcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIG9uQ2xpY2soKSB7XG4gICAgICAgICAgaWYgKCFzd2l0Y2hSZWYudmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgc3dpdGNoUmVmLnZhbHVlLmNsaWNrKCk7XG4gICAgICAgICAgc3dpdGNoUmVmLnZhbHVlLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBkZXNjcmliZWRieSA9IHVzZURlc2NyaXB0aW9ucyh7IG5hbWU6IFwiU3dpdGNoRGVzY3JpcHRpb25cIiB9KTtcbiAgICBsZXQgYXBpID0geyBzd2l0Y2hSZWYsIGxhYmVsbGVkYnksIGRlc2NyaWJlZGJ5IH07XG4gICAgKDAsIGltcG9ydF92dWUyNC5wcm92aWRlKShHcm91cENvbnRleHQsIGFwaSk7XG4gICAgcmV0dXJuICgpID0+IHJlbmRlcih7IHRoZWlyUHJvcHM6IHByb3BzLCBvdXJQcm9wczoge30sIHNsb3Q6IHt9LCBzbG90cywgYXR0cnMsIG5hbWU6IFwiU3dpdGNoR3JvdXBcIiB9KTtcbiAgfVxufSk7XG52YXIgU3dpdGNoID0gKDAsIGltcG9ydF92dWUyNC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJTd2l0Y2hcIixcbiAgZW1pdHM6IHsgXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiOiAoX3ZhbHVlKSA9PiB0cnVlIH0sXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9LFxuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSxcbiAgICB2YWx1ZTogeyB0eXBlOiBTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgZW1pdCwgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSAoMCwgaW1wb3J0X3Z1ZTI0LmluamVjdCkoR3JvdXBDb250ZXh0LCBudWxsKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktc3dpdGNoLSR7dXNlSWQoKX1gO1xuICAgIGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCAhcHJvcHMubW9kZWxWYWx1ZSk7XG4gICAgfVxuICAgIGxldCBpbnRlcm5hbFN3aXRjaFJlZiA9ICgwLCBpbXBvcnRfdnVlMjQucmVmKShudWxsKTtcbiAgICBsZXQgc3dpdGNoUmVmID0gYXBpID09PSBudWxsID8gaW50ZXJuYWxTd2l0Y2hSZWYgOiBhcGkuc3dpdGNoUmVmO1xuICAgIGxldCB0eXBlID0gdXNlUmVzb2x2ZUJ1dHRvblR5cGUoKDAsIGltcG9ydF92dWUyNC5jb21wdXRlZCkoKCkgPT4gKHsgYXM6IHByb3BzLmFzLCB0eXBlOiBhdHRycy50eXBlIH0pKSwgc3dpdGNoUmVmKTtcbiAgICBleHBvc2UoeyBlbDogc3dpdGNoUmVmLCAkZWw6IHN3aXRjaFJlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRvZ2dsZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCIgXCIgLyogU3BhY2UgKi8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdG9nZ2xlKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiIC8qIEVudGVyICovKSB7XG4gICAgICAgIGF0dGVtcHRTdWJtaXQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVByZXNzKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSwgdmFsdWUsIG1vZGVsVmFsdWUsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgbGV0IHNsb3QgPSB7IGNoZWNrZWQ6IG1vZGVsVmFsdWUgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBzd2l0Y2hSZWYsXG4gICAgICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgICAgIHR5cGU6IHR5cGUudmFsdWUsXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBtb2RlbFZhbHVlLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcGkgPT0gbnVsbCA/IHZvaWQgMCA6IGFwaS5sYWJlbGxlZGJ5LnZhbHVlLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXBpID09IG51bGwgPyB2b2lkIDAgOiBhcGkuZGVzY3JpYmVkYnkudmFsdWUsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbktleXVwOiBoYW5kbGVLZXlVcCxcbiAgICAgICAgb25LZXlwcmVzczogaGFuZGxlS2V5UHJlc3NcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUyNC5oKShpbXBvcnRfdnVlMjQuRnJhZ21lbnQsIFtcbiAgICAgICAgbmFtZSAhPSBudWxsICYmIG1vZGVsVmFsdWUgIT0gbnVsbCA/ICgwLCBpbXBvcnRfdnVlMjQuaCkoSGlkZGVuLCBjb21wYWN0KHtcbiAgICAgICAgICBmZWF0dXJlczogNCAvKiBIaWRkZW4gKi8sXG4gICAgICAgICAgYXM6IFwiaW5wdXRcIixcbiAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIGNoZWNrZWQ6IG1vZGVsVmFsdWUsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KSkgOiBudWxsLFxuICAgICAgICByZW5kZXIoe1xuICAgICAgICAgIG91clByb3BzLFxuICAgICAgICAgIHRoZWlyUHJvcHM6IHsgLi4uYXR0cnMsIC4uLnRoZWlyUHJvcHMgfSxcbiAgICAgICAgICBzbG90LFxuICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgIHNsb3RzLFxuICAgICAgICAgIG5hbWU6IFwiU3dpdGNoXCJcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFN3aXRjaExhYmVsID0gTGFiZWw7XG52YXIgU3dpdGNoRGVzY3JpcHRpb24gPSBEZXNjcmlwdGlvbjtcblxuLy8gc3JjL2NvbXBvbmVudHMvdGFicy90YWJzLnRzXG52YXIgaW1wb3J0X3Z1ZTI2ID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL2ludGVybmFsL2ZvY3VzLXNlbnRpbmVsLnRzXG52YXIgaW1wb3J0X3Z1ZTI1ID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBGb2N1c1NlbnRpbmVsID0gKDAsIGltcG9ydF92dWUyNS5kZWZpbmVDb21wb25lbnQpKHtcbiAgcHJvcHM6IHtcbiAgICBvbkZvY3VzOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcykge1xuICAgIGxldCBlbmFibGVkID0gKDAsIGltcG9ydF92dWUyNS5yZWYpKHRydWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoIWVuYWJsZWQudmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjUuaCkoSGlkZGVuLCB7XG4gICAgICAgIGFzOiBcImJ1dHRvblwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBmZWF0dXJlczogMiAvKiBGb2N1c2FibGUgKi8sXG4gICAgICAgIG9uRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGxldCBmcmFtZTtcbiAgICAgICAgICBsZXQgdHJpZXMgPSA1MDtcbiAgICAgICAgICBmdW5jdGlvbiBmb3J3YXJkRm9jdXMoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodHJpZXMtLSA8PSAwKSB7XG4gICAgICAgICAgICAgIGlmIChmcmFtZSlcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoX2EgPSBwcm9wcy5vbkZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChwcm9wcykpIHtcbiAgICAgICAgICAgICAgZW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZvcndhcmRGb2N1cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZvcndhcmRGb2N1cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90YWJzL3RhYnMudHNcbnZhciBUYWJzQ29udGV4dCA9IFN5bWJvbChcIlRhYnNDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlVGFic0NvbnRleHQoY29tcG9uZW50KSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUyNi5pbmplY3QpKFRhYnNDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKGA8JHtjb21wb25lbnR9IC8+IGlzIG1pc3NpbmcgYSBwYXJlbnQgPFRhYkdyb3VwIC8+IGNvbXBvbmVudC5gKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZVRhYnNDb250ZXh0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG52YXIgVGFiR3JvdXAgPSAoMCwgaW1wb3J0X3Z1ZTI2LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlRhYkdyb3VwXCIsXG4gIGVtaXRzOiB7XG4gICAgY2hhbmdlOiAoX2luZGV4KSA9PiB0cnVlXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ0ZW1wbGF0ZVwiIH0sXG4gICAgc2VsZWN0ZWRJbmRleDogeyB0eXBlOiBbTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRlZmF1bHRJbmRleDogeyB0eXBlOiBbTnVtYmVyXSwgZGVmYXVsdDogMCB9LFxuICAgIHZlcnRpY2FsOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtYW51YWw6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycywgZW1pdCB9KSB7XG4gICAgbGV0IHNlbGVjdGVkSW5kZXggPSAoMCwgaW1wb3J0X3Z1ZTI2LnJlZikobnVsbCk7XG4gICAgbGV0IHRhYnMgPSAoMCwgaW1wb3J0X3Z1ZTI2LnJlZikoW10pO1xuICAgIGxldCBwYW5lbHMgPSAoMCwgaW1wb3J0X3Z1ZTI2LnJlZikoW10pO1xuICAgIGxldCBhcGkgPSB7XG4gICAgICBzZWxlY3RlZEluZGV4LFxuICAgICAgb3JpZW50YXRpb246ICgwLCBpbXBvcnRfdnVlMjYuY29tcHV0ZWQpKCgpID0+IHByb3BzLnZlcnRpY2FsID8gXCJ2ZXJ0aWNhbFwiIDogXCJob3Jpem9udGFsXCIpLFxuICAgICAgYWN0aXZhdGlvbjogKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gcHJvcHMubWFudWFsID8gXCJtYW51YWxcIiA6IFwiYXV0b1wiKSxcbiAgICAgIHRhYnMsXG4gICAgICBwYW5lbHMsXG4gICAgICBzZXRTZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4LnZhbHVlID09PSBpbmRleClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGVjdGVkSW5kZXgudmFsdWUgPSBpbmRleDtcbiAgICAgICAgZW1pdChcImNoYW5nZVwiLCBpbmRleCk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJUYWIodGFiKSB7XG4gICAgICAgIGlmICghdGFicy52YWx1ZS5pbmNsdWRlcyh0YWIpKVxuICAgICAgICAgIHRhYnMudmFsdWUucHVzaCh0YWIpO1xuICAgICAgfSxcbiAgICAgIHVucmVnaXN0ZXJUYWIodGFiKSB7XG4gICAgICAgIGxldCBpZHggPSB0YWJzLnZhbHVlLmluZGV4T2YodGFiKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgdGFicy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlclBhbmVsKHBhbmVsKSB7XG4gICAgICAgIGlmICghcGFuZWxzLnZhbHVlLmluY2x1ZGVzKHBhbmVsKSlcbiAgICAgICAgICBwYW5lbHMudmFsdWUucHVzaChwYW5lbCk7XG4gICAgICB9LFxuICAgICAgdW5yZWdpc3RlclBhbmVsKHBhbmVsKSB7XG4gICAgICAgIGxldCBpZHggPSBwYW5lbHMudmFsdWUuaW5kZXhPZihwYW5lbCk7XG4gICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgIHBhbmVscy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgICgwLCBpbXBvcnRfdnVlMjYucHJvdmlkZSkoVGFic0NvbnRleHQsIGFwaSk7XG4gICAgKDAsIGltcG9ydF92dWUyNi53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKGFwaS50YWJzLnZhbHVlLmxlbmd0aCA8PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAocHJvcHMuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCAmJiBzZWxlY3RlZEluZGV4LnZhbHVlICE9PSBudWxsKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgdGFiczIgPSBhcGkudGFicy52YWx1ZS5tYXAoKHRhYikgPT4gZG9tKHRhYikpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGxldCBmb2N1c2FibGVUYWJzID0gdGFiczIuZmlsdGVyKCh0YWIpID0+ICF0YWIuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpO1xuICAgICAgbGV0IGluZGV4VG9TZXQgPSAoX2EgPSBwcm9wcy5zZWxlY3RlZEluZGV4KSAhPSBudWxsID8gX2EgOiBwcm9wcy5kZWZhdWx0SW5kZXg7XG4gICAgICBpZiAoaW5kZXhUb1NldCA8IDApIHtcbiAgICAgICAgc2VsZWN0ZWRJbmRleC52YWx1ZSA9IHRhYnMyLmluZGV4T2YoZm9jdXNhYmxlVGFic1swXSk7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4VG9TZXQgPiBhcGkudGFicy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgc2VsZWN0ZWRJbmRleC52YWx1ZSA9IHRhYnMyLmluZGV4T2YoZm9jdXNhYmxlVGFic1tmb2N1c2FibGVUYWJzLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBiZWZvcmUgPSB0YWJzMi5zbGljZSgwLCBpbmRleFRvU2V0KTtcbiAgICAgICAgbGV0IGFmdGVyID0gdGFiczIuc2xpY2UoaW5kZXhUb1NldCk7XG4gICAgICAgIGxldCBuZXh0ID0gWy4uLmFmdGVyLCAuLi5iZWZvcmVdLmZpbmQoKHRhYikgPT4gZm9jdXNhYmxlVGFicy5pbmNsdWRlcyh0YWIpKTtcbiAgICAgICAgaWYgKCFuZXh0KVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZWN0ZWRJbmRleC52YWx1ZSA9IHRhYnMyLmluZGV4T2YobmV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0geyBzZWxlY3RlZEluZGV4OiBzZWxlY3RlZEluZGV4LnZhbHVlIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUyNi5oKShpbXBvcnRfdnVlMjYuRnJhZ21lbnQsIFtcbiAgICAgICAgdGFicy52YWx1ZS5sZW5ndGggPD0gMCAmJiAoMCwgaW1wb3J0X3Z1ZTI2LmgpKEZvY3VzU2VudGluZWwsIHtcbiAgICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCB0YWIgb2YgdGFicy52YWx1ZSkge1xuICAgICAgICAgICAgICBsZXQgZWwgPSBkb20odGFiKTtcbiAgICAgICAgICAgICAgaWYgKChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGFiSW5kZXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJlbmRlcih7XG4gICAgICAgICAgdGhlaXJQcm9wczoge1xuICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICAuLi5vbWl0KHByb3BzLCBbXCJzZWxlY3RlZEluZGV4XCIsIFwiZGVmYXVsdEluZGV4XCIsIFwibWFudWFsXCIsIFwidmVydGljYWxcIiwgXCJvbkNoYW5nZVwiXSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgICBzbG90LFxuICAgICAgICAgIHNsb3RzLFxuICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgIG5hbWU6IFwiVGFiR3JvdXBcIlxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgVGFiTGlzdCA9ICgwLCBpbXBvcnRfdnVlMjYuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiVGFiTGlzdFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMgfSkge1xuICAgIGxldCBhcGkgPSB1c2VUYWJzQ29udGV4dChcIlRhYkxpc3RcIik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0geyBzZWxlY3RlZEluZGV4OiBhcGkuc2VsZWN0ZWRJbmRleC52YWx1ZSB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByb2xlOiBcInRhYmxpc3RcIixcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IGFwaS5vcmllbnRhdGlvbi52YWx1ZVxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJUYWJMaXN0XCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFRhYiA9ICgwLCBpbXBvcnRfdnVlMjYuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiVGFiXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVRhYnNDb250ZXh0KFwiVGFiXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS10YWJzLXRhYi0ke3VzZUlkKCl9YDtcbiAgICBsZXQgaW50ZXJuYWxUYWJSZWYgPSAoMCwgaW1wb3J0X3Z1ZTI2LnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsVGFiUmVmLCAkZWw6IGludGVybmFsVGFiUmVmIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMjYub25Nb3VudGVkKSgoKSA9PiBhcGkucmVnaXN0ZXJUYWIoaW50ZXJuYWxUYWJSZWYpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI2Lm9uVW5tb3VudGVkKSgoKSA9PiBhcGkudW5yZWdpc3RlclRhYihpbnRlcm5hbFRhYlJlZikpO1xuICAgIGxldCBteUluZGV4ID0gKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gYXBpLnRhYnMudmFsdWUuaW5kZXhPZihpbnRlcm5hbFRhYlJlZikpO1xuICAgIGxldCBzZWxlY3RlZCA9ICgwLCBpbXBvcnRfdnVlMjYuY29tcHV0ZWQpKCgpID0+IG15SW5kZXgudmFsdWUgPT09IGFwaS5zZWxlY3RlZEluZGV4LnZhbHVlKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBsZXQgbGlzdCA9IGFwaS50YWJzLnZhbHVlLm1hcCgodGFiKSA9PiBkb20odGFiKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCIgXCIgLyogU3BhY2UgKi8gfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIgLyogRW50ZXIgKi8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGFwaS5zZXRTZWxlY3RlZEluZGV4KG15SW5kZXgudmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiSG9tZVwiIC8qIEhvbWUgKi86XG4gICAgICAgIGNhc2UgXCJQYWdlVXBcIiAvKiBQYWdlVXAgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCAxIC8qIEZpcnN0ICovKTtcbiAgICAgICAgY2FzZSBcIkVuZFwiIC8qIEVuZCAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VEb3duXCIgLyogUGFnZURvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCA4IC8qIExhc3QgKi8pO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoKGFwaS5vcmllbnRhdGlvbi52YWx1ZSwge1xuICAgICAgICB2ZXJ0aWNhbCgpIHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovKVxuICAgICAgICAgICAgcmV0dXJuIGZvY3VzSW4obGlzdCwgMiAvKiBQcmV2aW91cyAqLyB8IDE2IC8qIFdyYXBBcm91bmQgKi8pO1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgLyogQXJyb3dEb3duICovKVxuICAgICAgICAgICAgcmV0dXJuIGZvY3VzSW4obGlzdCwgNCAvKiBOZXh0ICovIHwgMTYgLyogV3JhcEFyb3VuZCAqLyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9LFxuICAgICAgICBob3Jpem9udGFsKCkge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dMZWZ0XCIgLyogQXJyb3dMZWZ0ICovKVxuICAgICAgICAgICAgcmV0dXJuIGZvY3VzSW4obGlzdCwgMiAvKiBQcmV2aW91cyAqLyB8IDE2IC8qIFdyYXBBcm91bmQgKi8pO1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dSaWdodFwiIC8qIEFycm93UmlnaHQgKi8pXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCA0IC8qIE5leHQgKi8gfCAxNiAvKiBXcmFwQXJvdW5kICovKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIChfYSA9IGRvbShpbnRlcm5hbFRhYlJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVTZWxlY3Rpb24oKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIChfYSA9IGRvbShpbnRlcm5hbFRhYlJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgYXBpLnNldFNlbGVjdGVkSW5kZXgobXlJbmRleC52YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTI2LmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBpbnRlcm5hbFRhYlJlZik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgc2xvdCA9IHsgc2VsZWN0ZWQ6IHNlbGVjdGVkLnZhbHVlIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogaW50ZXJuYWxUYWJSZWYsXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25Gb2N1czogYXBpLmFjdGl2YXRpb24udmFsdWUgPT09IFwibWFudWFsXCIgPyBoYW5kbGVGb2N1cyA6IGhhbmRsZVNlbGVjdGlvbixcbiAgICAgICAgb25Nb3VzZWRvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICAgICAgb25DbGljazogaGFuZGxlU2VsZWN0aW9uLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICByb2xlOiBcInRhYlwiLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogKF9iID0gKF9hID0gYXBpLnBhbmVscy52YWx1ZVtteUluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZC52YWx1ZSxcbiAgICAgICAgdGFiSW5kZXg6IHNlbGVjdGVkLnZhbHVlID8gMCA6IC0xLFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgPyB0cnVlIDogdm9pZCAwXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlRhYlwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBUYWJQYW5lbHMgPSAoMCwgaW1wb3J0X3Z1ZTI2LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlRhYlBhbmVsc1wiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIGxldCBhcGkgPSB1c2VUYWJzQ29udGV4dChcIlRhYlBhbmVsc1wiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IHNlbGVjdGVkSW5kZXg6IGFwaS5zZWxlY3RlZEluZGV4LnZhbHVlIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlRhYlBhbmVsc1wiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBUYWJQYW5lbCA9ICgwLCBpbXBvcnRfdnVlMjYuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiVGFiUGFuZWxcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VUYWJzQ29udGV4dChcIlRhYlBhbmVsXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS10YWJzLXBhbmVsLSR7dXNlSWQoKX1gO1xuICAgIGxldCBpbnRlcm5hbFBhbmVsUmVmID0gKDAsIGltcG9ydF92dWUyNi5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbFBhbmVsUmVmLCAkZWw6IGludGVybmFsUGFuZWxSZWYgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNi5vbk1vdW50ZWQpKCgpID0+IGFwaS5yZWdpc3RlclBhbmVsKGludGVybmFsUGFuZWxSZWYpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI2Lm9uVW5tb3VudGVkKSgoKSA9PiBhcGkudW5yZWdpc3RlclBhbmVsKGludGVybmFsUGFuZWxSZWYpKTtcbiAgICBsZXQgbXlJbmRleCA9ICgwLCBpbXBvcnRfdnVlMjYuY29tcHV0ZWQpKCgpID0+IGFwaS5wYW5lbHMudmFsdWUuaW5kZXhPZihpbnRlcm5hbFBhbmVsUmVmKSk7XG4gICAgbGV0IHNlbGVjdGVkID0gKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gbXlJbmRleC52YWx1ZSA9PT0gYXBpLnNlbGVjdGVkSW5kZXgudmFsdWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgbGV0IHNsb3QgPSB7IHNlbGVjdGVkOiBzZWxlY3RlZC52YWx1ZSB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByZWY6IGludGVybmFsUGFuZWxSZWYsXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogKF9iID0gKF9hID0gYXBpLnRhYnMudmFsdWVbbXlJbmRleC52YWx1ZV0pID09IG51bGwgPyB2b2lkIDAgOiBfYS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkLFxuICAgICAgICB0YWJJbmRleDogc2VsZWN0ZWQudmFsdWUgPyAwIDogLTFcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAyIC8qIFN0YXRpYyAqLyB8IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8sXG4gICAgICAgIHZpc2libGU6IHNlbGVjdGVkLnZhbHVlLFxuICAgICAgICBuYW1lOiBcIlRhYlBhbmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLnRzXG52YXIgaW1wb3J0X3Z1ZTI3ID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL3V0aWxzL29uY2UudHNcbmZ1bmN0aW9uIG9uY2UoY2IpIHtcbiAgbGV0IHN0YXRlID0geyBjYWxsZWQ6IGZhbHNlIH07XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGlmIChzdGF0ZS5jYWxsZWQpXG4gICAgICByZXR1cm47XG4gICAgc3RhdGUuY2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2IoLi4uYXJncyk7XG4gIH07XG59XG5cbi8vIHNyYy91dGlscy9kaXNwb3NhYmxlcy50c1xuZnVuY3Rpb24gZGlzcG9zYWJsZXMoKSB7XG4gIGxldCBkaXNwb3NhYmxlczIgPSBbXTtcbiAgbGV0IHF1ZXVlID0gW107XG4gIGxldCBhcGkgPSB7XG4gICAgZW5xdWV1ZShmbikge1xuICAgICAgcXVldWUucHVzaChmbik7XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYXJncykge1xuICAgICAgbGV0IHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5hcmdzKTtcbiAgICAgIGFwaS5hZGQoKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKSk7XG4gICAgfSxcbiAgICBuZXh0RnJhbWUoLi4uYXJncykge1xuICAgICAgYXBpLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGFwaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNldFRpbWVvdXQoLi4uYXJncykge1xuICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCguLi5hcmdzKTtcbiAgICAgIGFwaS5hZGQoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gICAgfSxcbiAgICBhZGQoY2IpIHtcbiAgICAgIGRpc3Bvc2FibGVzMi5wdXNoKGNiKTtcbiAgICB9LFxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBmb3IgKGxldCBkaXNwb3NlIG9mIGRpc3Bvc2FibGVzMi5zcGxpY2UoMCkpIHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgd29ya1F1ZXVlKCkge1xuICAgICAgZm9yIChsZXQgaGFuZGxlIG9mIHF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgICBhd2FpdCBoYW5kbGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBhcGk7XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL3RyYW5zaXRpb25zL3V0aWxzL3RyYW5zaXRpb24udHNcbmZ1bmN0aW9uIGFkZENsYXNzZXMobm9kZSwgLi4uY2xhc3Nlcykge1xuICBub2RlICYmIGNsYXNzZXMubGVuZ3RoID4gMCAmJiBub2RlLmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XG59XG5mdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIC4uLmNsYXNzZXMpIHtcbiAgbm9kZSAmJiBjbGFzc2VzLmxlbmd0aCA+IDAgJiYgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xufVxuZnVuY3Rpb24gd2FpdEZvclRyYW5zaXRpb24obm9kZSwgZG9uZSkge1xuICBsZXQgZCA9IGRpc3Bvc2FibGVzKCk7XG4gIGlmICghbm9kZSlcbiAgICByZXR1cm4gZC5kaXNwb3NlO1xuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgbGV0IFtkdXJhdGlvbk1zLCBkZWxheXNNc10gPSBbdHJhbnNpdGlvbkR1cmF0aW9uLCB0cmFuc2l0aW9uRGVsYXldLm1hcCgodmFsdWUpID0+IHtcbiAgICBsZXQgW3Jlc29sdmVkVmFsdWUgPSAwXSA9IHZhbHVlLnNwbGl0KFwiLFwiKS5maWx0ZXIoQm9vbGVhbikubWFwKCh2KSA9PiB2LmluY2x1ZGVzKFwibXNcIikgPyBwYXJzZUZsb2F0KHYpIDogcGFyc2VGbG9hdCh2KSAqIDFlMykuc29ydCgoYSwgeikgPT4geiAtIGEpO1xuICAgIHJldHVybiByZXNvbHZlZFZhbHVlO1xuICB9KTtcbiAgaWYgKGR1cmF0aW9uTXMgIT09IDApIHtcbiAgICBkLnNldFRpbWVvdXQoKCkgPT4gZG9uZShcImZpbmlzaGVkXCIgLyogRmluaXNoZWQgKi8pLCBkdXJhdGlvbk1zICsgZGVsYXlzTXMpO1xuICB9IGVsc2Uge1xuICAgIGRvbmUoXCJmaW5pc2hlZFwiIC8qIEZpbmlzaGVkICovKTtcbiAgfVxuICBkLmFkZCgoKSA9PiBkb25lKFwiY2FuY2VsbGVkXCIgLyogQ2FuY2VsbGVkICovKSk7XG4gIHJldHVybiBkLmRpc3Bvc2U7XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uKG5vZGUsIGJhc2UsIGZyb20sIHRvLCBlbnRlcmVkLCBkb25lKSB7XG4gIGxldCBkID0gZGlzcG9zYWJsZXMoKTtcbiAgbGV0IF9kb25lID0gZG9uZSAhPT0gdm9pZCAwID8gb25jZShkb25lKSA6ICgpID0+IHtcbiAgfTtcbiAgcmVtb3ZlQ2xhc3Nlcyhub2RlLCAuLi5lbnRlcmVkKTtcbiAgYWRkQ2xhc3Nlcyhub2RlLCAuLi5iYXNlLCAuLi5mcm9tKTtcbiAgZC5uZXh0RnJhbWUoKCkgPT4ge1xuICAgIHJlbW92ZUNsYXNzZXMobm9kZSwgLi4uZnJvbSk7XG4gICAgYWRkQ2xhc3Nlcyhub2RlLCAuLi50byk7XG4gICAgZC5hZGQod2FpdEZvclRyYW5zaXRpb24obm9kZSwgKHJlYXNvbikgPT4ge1xuICAgICAgcmVtb3ZlQ2xhc3Nlcyhub2RlLCAuLi50bywgLi4uYmFzZSk7XG4gICAgICBhZGRDbGFzc2VzKG5vZGUsIC4uLmVudGVyZWQpO1xuICAgICAgcmV0dXJuIF9kb25lKHJlYXNvbik7XG4gICAgfSkpO1xuICB9KTtcbiAgZC5hZGQoKCkgPT4gcmVtb3ZlQ2xhc3Nlcyhub2RlLCAuLi5iYXNlLCAuLi5mcm9tLCAuLi50bywgLi4uZW50ZXJlZCkpO1xuICBkLmFkZCgoKSA9PiBfZG9uZShcImNhbmNlbGxlZFwiIC8qIENhbmNlbGxlZCAqLykpO1xuICByZXR1cm4gZC5kaXNwb3NlO1xufVxuXG4vLyBzcmMvY29tcG9uZW50cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLnRzXG5mdW5jdGlvbiBzcGxpdENsYXNzZXMoY2xhc3NlcyA9IFwiXCIpIHtcbiAgcmV0dXJuIGNsYXNzZXMuc3BsaXQoXCIgXCIpLmZpbHRlcigoY2xhc3NOYW1lKSA9PiBjbGFzc05hbWUudHJpbSgpLmxlbmd0aCA+IDEpO1xufVxudmFyIFRyYW5zaXRpb25Db250ZXh0ID0gU3ltYm9sKFwiVHJhbnNpdGlvbkNvbnRleHRcIik7XG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uQ29udGV4dCgpIHtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjcuaW5qZWN0KShUcmFuc2l0aW9uQ29udGV4dCwgbnVsbCkgIT09IG51bGw7XG59XG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uQ29udGV4dCgpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTI3LmluamVjdCkoVHJhbnNpdGlvbkNvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgPFRyYW5zaXRpb25DaGlsZCAvPiBpcyB1c2VkIGJ1dCBpdCBpcyBtaXNzaW5nIGEgcGFyZW50IDxUcmFuc2l0aW9uUm9vdCAvPi5cIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5mdW5jdGlvbiB1c2VQYXJlbnROZXN0aW5nKCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMjcuaW5qZWN0KShOZXN0aW5nQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSA8VHJhbnNpdGlvbkNoaWxkIC8+IGlzIHVzZWQgYnV0IGl0IGlzIG1pc3NpbmcgYSBwYXJlbnQgPFRyYW5zaXRpb25Sb290IC8+LlwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBOZXN0aW5nQ29udGV4dCA9IFN5bWJvbChcIk5lc3RpbmdDb250ZXh0XCIpO1xuZnVuY3Rpb24gaGFzQ2hpbGRyZW4oYmFnKSB7XG4gIGlmIChcImNoaWxkcmVuXCIgaW4gYmFnKVxuICAgIHJldHVybiBoYXNDaGlsZHJlbihiYWcuY2hpbGRyZW4pO1xuICByZXR1cm4gYmFnLnZhbHVlLmZpbHRlcigoeyBzdGF0ZSB9KSA9PiBzdGF0ZSA9PT0gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLykubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIHVzZU5lc3RpbmcoZG9uZSkge1xuICBsZXQgdHJhbnNpdGlvbmFibGVDaGlsZHJlbiA9ICgwLCBpbXBvcnRfdnVlMjcucmVmKShbXSk7XG4gIGxldCBtb3VudGVkID0gKDAsIGltcG9ydF92dWUyNy5yZWYpKGZhbHNlKTtcbiAgKDAsIGltcG9ydF92dWUyNy5vbk1vdW50ZWQpKCgpID0+IG1vdW50ZWQudmFsdWUgPSB0cnVlKTtcbiAgKDAsIGltcG9ydF92dWUyNy5vblVubW91bnRlZCkoKCkgPT4gbW91bnRlZC52YWx1ZSA9IGZhbHNlKTtcbiAgZnVuY3Rpb24gdW5yZWdpc3RlcihjaGlsZElkLCBzdHJhdGVneSA9IDEgLyogSGlkZGVuICovKSB7XG4gICAgbGV0IGlkeCA9IHRyYW5zaXRpb25hYmxlQ2hpbGRyZW4udmFsdWUuZmluZEluZGV4KCh7IGlkOiBpZDIgfSkgPT4gaWQyID09PSBjaGlsZElkKTtcbiAgICBpZiAoaWR4ID09PSAtMSlcbiAgICAgIHJldHVybjtcbiAgICBtYXRjaChzdHJhdGVneSwge1xuICAgICAgWzAgLyogVW5tb3VudCAqL10oKSB7XG4gICAgICAgIHRyYW5zaXRpb25hYmxlQ2hpbGRyZW4udmFsdWUuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9LFxuICAgICAgWzEgLyogSGlkZGVuICovXSgpIHtcbiAgICAgICAgdHJhbnNpdGlvbmFibGVDaGlsZHJlbi52YWx1ZVtpZHhdLnN0YXRlID0gXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi87XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFoYXNDaGlsZHJlbih0cmFuc2l0aW9uYWJsZUNoaWxkcmVuKSAmJiBtb3VudGVkLnZhbHVlKSB7XG4gICAgICBkb25lID09IG51bGwgPyB2b2lkIDAgOiBkb25lKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKGNoaWxkSWQpIHtcbiAgICBsZXQgY2hpbGQgPSB0cmFuc2l0aW9uYWJsZUNoaWxkcmVuLnZhbHVlLmZpbmQoKHsgaWQ6IGlkMiB9KSA9PiBpZDIgPT09IGNoaWxkSWQpO1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHRyYW5zaXRpb25hYmxlQ2hpbGRyZW4udmFsdWUucHVzaCh7IGlkOiBjaGlsZElkLCBzdGF0ZTogXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLyB9KTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkLnN0YXRlICE9PSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovKSB7XG4gICAgICBjaGlsZC5zdGF0ZSA9IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi87XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB1bnJlZ2lzdGVyKGNoaWxkSWQsIDAgLyogVW5tb3VudCAqLyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjaGlsZHJlbjogdHJhbnNpdGlvbmFibGVDaGlsZHJlbixcbiAgICByZWdpc3RlcixcbiAgICB1bnJlZ2lzdGVyXG4gIH07XG59XG52YXIgVHJhbnNpdGlvbkNoaWxkUmVuZGVyRmVhdHVyZXMgPSAxIC8qIFJlbmRlclN0cmF0ZWd5ICovO1xudmFyIFRyYW5zaXRpb25DaGlsZCA9ICgwLCBpbXBvcnRfdnVlMjcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIHNob3c6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhcHBlYXI6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVudGVyOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgZW50ZXJGcm9tOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgZW50ZXJUbzogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGVudGVyZWQ6IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBsZWF2ZTogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGxlYXZlRnJvbTogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGxlYXZlVG86IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfVxuICB9LFxuICBlbWl0czoge1xuICAgIGJlZm9yZUVudGVyOiAoKSA9PiB0cnVlLFxuICAgIGFmdGVyRW50ZXI6ICgpID0+IHRydWUsXG4gICAgYmVmb3JlTGVhdmU6ICgpID0+IHRydWUsXG4gICAgYWZ0ZXJMZWF2ZTogKCkgPT4gdHJ1ZVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBlbWl0LCBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgaWYgKCFoYXNUcmFuc2l0aW9uQ29udGV4dCgpICYmIGhhc09wZW5DbG9zZWQoKSkge1xuICAgICAgcmV0dXJuICgpID0+ICgwLCBpbXBvcnRfdnVlMjcuaCkoVHJhbnNpdGlvblJvb3QsIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIG9uQmVmb3JlRW50ZXI6ICgpID0+IGVtaXQoXCJiZWZvcmVFbnRlclwiKSxcbiAgICAgICAgb25BZnRlckVudGVyOiAoKSA9PiBlbWl0KFwiYWZ0ZXJFbnRlclwiKSxcbiAgICAgICAgb25CZWZvcmVMZWF2ZTogKCkgPT4gZW1pdChcImJlZm9yZUxlYXZlXCIpLFxuICAgICAgICBvbkFmdGVyTGVhdmU6ICgpID0+IGVtaXQoXCJhZnRlckxlYXZlXCIpXG4gICAgICB9LCBzbG90cyk7XG4gICAgfVxuICAgIGxldCBjb250YWluZXIgPSAoMCwgaW1wb3J0X3Z1ZTI3LnJlZikobnVsbCk7XG4gICAgbGV0IHN0YXRlID0gKDAsIGltcG9ydF92dWUyNy5yZWYpKFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8pO1xuICAgIGxldCBzdHJhdGVneSA9ICgwLCBpbXBvcnRfdnVlMjcuY29tcHV0ZWQpKCgpID0+IHByb3BzLnVubW91bnQgPyAwIC8qIFVubW91bnQgKi8gOiAxIC8qIEhpZGRlbiAqLyk7XG4gICAgZXhwb3NlKHsgZWw6IGNvbnRhaW5lciwgJGVsOiBjb250YWluZXIgfSk7XG4gICAgbGV0IHsgc2hvdywgYXBwZWFyIH0gPSB1c2VUcmFuc2l0aW9uQ29udGV4dCgpO1xuICAgIGxldCB7IHJlZ2lzdGVyLCB1bnJlZ2lzdGVyIH0gPSB1c2VQYXJlbnROZXN0aW5nKCk7XG4gICAgbGV0IGluaXRpYWwgPSB7IHZhbHVlOiB0cnVlIH07XG4gICAgbGV0IGlkMiA9IHVzZUlkKCk7XG4gICAgbGV0IGlzVHJhbnNpdGlvbmluZyA9IHsgdmFsdWU6IGZhbHNlIH07XG4gICAgbGV0IG5lc3RpbmcgPSB1c2VOZXN0aW5nKCgpID0+IHtcbiAgICAgIGlmICghaXNUcmFuc2l0aW9uaW5nLnZhbHVlKSB7XG4gICAgICAgIHN0YXRlLnZhbHVlID0gXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi87XG4gICAgICAgIHVucmVnaXN0ZXIoaWQyKTtcbiAgICAgICAgZW1pdChcImFmdGVyTGVhdmVcIik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNy5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgIGxldCB1bnJlZ2lzdGVyMiA9IHJlZ2lzdGVyKGlkMik7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uVW5tb3VudGVkKSh1bnJlZ2lzdGVyMik7XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNy53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgaWYgKHN0cmF0ZWd5LnZhbHVlICE9PSAxIC8qIEhpZGRlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFpZDIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChzaG93ICYmIHN0YXRlLnZhbHVlICE9PSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovKSB7XG4gICAgICAgIHN0YXRlLnZhbHVlID0gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWF0Y2goc3RhdGUudmFsdWUsIHtcbiAgICAgICAgW1wiaGlkZGVuXCIgLyogSGlkZGVuICovXTogKCkgPT4gdW5yZWdpc3RlcihpZDIpLFxuICAgICAgICBbXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqL106ICgpID0+IHJlZ2lzdGVyKGlkMilcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGxldCBlbnRlckNsYXNzZXMgPSBzcGxpdENsYXNzZXMocHJvcHMuZW50ZXIpO1xuICAgIGxldCBlbnRlckZyb21DbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmVudGVyRnJvbSk7XG4gICAgbGV0IGVudGVyVG9DbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmVudGVyVG8pO1xuICAgIGxldCBlbnRlcmVkQ2xhc3NlcyA9IHNwbGl0Q2xhc3Nlcyhwcm9wcy5lbnRlcmVkKTtcbiAgICBsZXQgbGVhdmVDbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmxlYXZlKTtcbiAgICBsZXQgbGVhdmVGcm9tQ2xhc3NlcyA9IHNwbGl0Q2xhc3Nlcyhwcm9wcy5sZWF2ZUZyb20pO1xuICAgIGxldCBsZWF2ZVRvQ2xhc3NlcyA9IHNwbGl0Q2xhc3Nlcyhwcm9wcy5sZWF2ZVRvKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgKDAsIGltcG9ydF92dWUyNy53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUudmFsdWUgPT09IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8pIHtcbiAgICAgICAgICBsZXQgZG9tRWxlbWVudCA9IGRvbShjb250YWluZXIpO1xuICAgICAgICAgIGxldCBpc0VtcHR5RE9NTm9kZSA9IGRvbUVsZW1lbnQgaW5zdGFuY2VvZiBDb21tZW50ICYmIGRvbUVsZW1lbnQuZGF0YSA9PT0gXCJcIjtcbiAgICAgICAgICBpZiAoaXNFbXB0eURPTU5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCB5b3UgZm9yZ2V0IHRvIHBhc3N0aHJvdWdoIHRoZSBgcmVmYCB0byB0aGUgYWN0dWFsIERPTSBub2RlP1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGV4ZWN1dGVUcmFuc2l0aW9uKG9uSW52YWxpZGF0ZSkge1xuICAgICAgbGV0IHNraXAgPSBpbml0aWFsLnZhbHVlICYmICFhcHBlYXIudmFsdWU7XG4gICAgICBsZXQgbm9kZSA9IGRvbShjb250YWluZXIpO1xuICAgICAgaWYgKCFub2RlIHx8ICEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKHNraXApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlzVHJhbnNpdGlvbmluZy52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoc2hvdy52YWx1ZSlcbiAgICAgICAgZW1pdChcImJlZm9yZUVudGVyXCIpO1xuICAgICAgaWYgKCFzaG93LnZhbHVlKVxuICAgICAgICBlbWl0KFwiYmVmb3JlTGVhdmVcIik7XG4gICAgICBvbkludmFsaWRhdGUoc2hvdy52YWx1ZSA/IHRyYW5zaXRpb24obm9kZSwgZW50ZXJDbGFzc2VzLCBlbnRlckZyb21DbGFzc2VzLCBlbnRlclRvQ2xhc3NlcywgZW50ZXJlZENsYXNzZXMsIChyZWFzb24pID0+IHtcbiAgICAgICAgaXNUcmFuc2l0aW9uaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChyZWFzb24gPT09IFwiZmluaXNoZWRcIiAvKiBGaW5pc2hlZCAqLylcbiAgICAgICAgICBlbWl0KFwiYWZ0ZXJFbnRlclwiKTtcbiAgICAgIH0pIDogdHJhbnNpdGlvbihub2RlLCBsZWF2ZUNsYXNzZXMsIGxlYXZlRnJvbUNsYXNzZXMsIGxlYXZlVG9DbGFzc2VzLCBlbnRlcmVkQ2xhc3NlcywgKHJlYXNvbikgPT4ge1xuICAgICAgICBpc1RyYW5zaXRpb25pbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJlYXNvbiAhPT0gXCJmaW5pc2hlZFwiIC8qIEZpbmlzaGVkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFoYXNDaGlsZHJlbihuZXN0aW5nKSkge1xuICAgICAgICAgIHN0YXRlLnZhbHVlID0gXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi87XG4gICAgICAgICAgdW5yZWdpc3RlcihpZDIpO1xuICAgICAgICAgIGVtaXQoXCJhZnRlckxlYXZlXCIpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICAgICgwLCBpbXBvcnRfdnVlMjcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTI3LndhdGNoKShbc2hvd10sIChfb2xkVmFsdWVzLCBfbmV3VmFsdWVzLCBvbkludmFsaWRhdGUpID0+IHtcbiAgICAgICAgZXhlY3V0ZVRyYW5zaXRpb24ob25JbnZhbGlkYXRlKTtcbiAgICAgICAgaW5pdGlhbC52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNy5wcm92aWRlKShOZXN0aW5nQ29udGV4dCwgbmVzdGluZyk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlMjcuY29tcHV0ZWQpKCgpID0+IG1hdGNoKHN0YXRlLnZhbHVlLCB7XG4gICAgICBbXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgIFtcImhpZGRlblwiIC8qIEhpZGRlbiAqL106IDEgLyogQ2xvc2VkICovXG4gICAgfSkpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgYXBwZWFyOiBhcHBlYXIyLFxuICAgICAgICBzaG93OiBzaG93MixcbiAgICAgICAgZW50ZXIsXG4gICAgICAgIGVudGVyRnJvbSxcbiAgICAgICAgZW50ZXJUbyxcbiAgICAgICAgZW50ZXJlZCxcbiAgICAgICAgbGVhdmUsXG4gICAgICAgIGxlYXZlRnJvbSxcbiAgICAgICAgbGVhdmVUbyxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IHByb3BzO1xuICAgICAgbGV0IG91clByb3BzID0geyByZWY6IGNvbnRhaW5lciB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSByZXN0O1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIG91clByb3BzLFxuICAgICAgICBzbG90OiB7fSxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBmZWF0dXJlczogVHJhbnNpdGlvbkNoaWxkUmVuZGVyRmVhdHVyZXMsXG4gICAgICAgIHZpc2libGU6IHN0YXRlLnZhbHVlID09PSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovLFxuICAgICAgICBuYW1lOiBcIlRyYW5zaXRpb25DaGlsZFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBfVHJhbnNpdGlvbkNoaWxkID0gVHJhbnNpdGlvbkNoaWxkO1xudmFyIFRyYW5zaXRpb25Sb290ID0gKDAsIGltcG9ydF92dWUyNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc2hvdzogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFwcGVhcjogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZW50ZXI6IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBlbnRlckZyb206IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBlbnRlclRvOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgZW50ZXJlZDogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGxlYXZlOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgbGVhdmVGcm9tOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgbGVhdmVUbzogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9XG4gIH0sXG4gIGVtaXRzOiB7XG4gICAgYmVmb3JlRW50ZXI6ICgpID0+IHRydWUsXG4gICAgYWZ0ZXJFbnRlcjogKCkgPT4gdHJ1ZSxcbiAgICBiZWZvcmVMZWF2ZTogKCkgPT4gdHJ1ZSxcbiAgICBhZnRlckxlYXZlOiAoKSA9PiB0cnVlXG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGVtaXQsIGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IHVzZXNPcGVuQ2xvc2VkU3RhdGUgPSB1c2VPcGVuQ2xvc2VkKCk7XG4gICAgbGV0IHNob3cgPSAoMCwgaW1wb3J0X3Z1ZTI3LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuc2hvdyA9PT0gbnVsbCAmJiB1c2VzT3BlbkNsb3NlZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBtYXRjaCh1c2VzT3BlbkNsb3NlZFN0YXRlLnZhbHVlLCB7XG4gICAgICAgICAgWzAgLyogT3BlbiAqL106IHRydWUsXG4gICAgICAgICAgWzEgLyogQ2xvc2VkICovXTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcHMuc2hvdztcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoIVt0cnVlLCBmYWxzZV0uaW5jbHVkZXMoc2hvdy52YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIDxUcmFuc2l0aW9uIC8+IGlzIHVzZWQgYnV0IGl0IGlzIG1pc3NpbmcgYSBgOnNob3c9XCJ0cnVlIHwgZmFsc2VcImAgcHJvcC4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgc3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTI3LnJlZikoc2hvdy52YWx1ZSA/IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8gOiBcImhpZGRlblwiIC8qIEhpZGRlbiAqLyk7XG4gICAgbGV0IG5lc3RpbmdCYWcgPSB1c2VOZXN0aW5nKCgpID0+IHtcbiAgICAgIHN0YXRlLnZhbHVlID0gXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi87XG4gICAgfSk7XG4gICAgbGV0IGluaXRpYWwgPSAoMCwgaW1wb3J0X3Z1ZTI3LnJlZikodHJ1ZSk7XG4gICAgbGV0IHRyYW5zaXRpb25CYWcgPSB7XG4gICAgICBzaG93LFxuICAgICAgYXBwZWFyOiAoMCwgaW1wb3J0X3Z1ZTI3LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5hcHBlYXIgfHwgIWluaXRpYWwudmFsdWUpXG4gICAgfTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgKDAsIGltcG9ydF92dWUyNy53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgICBpbml0aWFsLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG93LnZhbHVlKSB7XG4gICAgICAgICAgc3RhdGUudmFsdWUgPSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovO1xuICAgICAgICB9IGVsc2UgaWYgKCFoYXNDaGlsZHJlbihuZXN0aW5nQmFnKSkge1xuICAgICAgICAgIHN0YXRlLnZhbHVlID0gXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi87XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMjcucHJvdmlkZSkoTmVzdGluZ0NvbnRleHQsIG5lc3RpbmdCYWcpO1xuICAgICgwLCBpbXBvcnRfdnVlMjcucHJvdmlkZSkoVHJhbnNpdGlvbkNvbnRleHQsIHRyYW5zaXRpb25CYWcpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IG9taXQocHJvcHMsIFtcbiAgICAgICAgXCJzaG93XCIsXG4gICAgICAgIFwiYXBwZWFyXCIsXG4gICAgICAgIFwidW5tb3VudFwiLFxuICAgICAgICBcIm9uQmVmb3JlRW50ZXJcIixcbiAgICAgICAgXCJvbkJlZm9yZUxlYXZlXCIsXG4gICAgICAgIFwib25BZnRlckVudGVyXCIsXG4gICAgICAgIFwib25BZnRlckxlYXZlXCJcbiAgICAgIF0pO1xuICAgICAgbGV0IHNoYXJlZFByb3BzID0geyB1bm1vdW50OiBwcm9wcy51bm1vdW50IH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHM6IHtcbiAgICAgICAgICAuLi5zaGFyZWRQcm9wcyxcbiAgICAgICAgICBhczogXCJ0ZW1wbGF0ZVwiXG4gICAgICAgIH0sXG4gICAgICAgIHRoZWlyUHJvcHM6IHt9LFxuICAgICAgICBzbG90OiB7fSxcbiAgICAgICAgc2xvdHM6IHtcbiAgICAgICAgICAuLi5zbG90cyxcbiAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXG4gICAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTI3LmgpKF9UcmFuc2l0aW9uQ2hpbGQsIHtcbiAgICAgICAgICAgICAgb25CZWZvcmVFbnRlcjogKCkgPT4gZW1pdChcImJlZm9yZUVudGVyXCIpLFxuICAgICAgICAgICAgICBvbkFmdGVyRW50ZXI6ICgpID0+IGVtaXQoXCJhZnRlckVudGVyXCIpLFxuICAgICAgICAgICAgICBvbkJlZm9yZUxlYXZlOiAoKSA9PiBlbWl0KFwiYmVmb3JlTGVhdmVcIiksXG4gICAgICAgICAgICAgIG9uQWZ0ZXJMZWF2ZTogKCkgPT4gZW1pdChcImFmdGVyTGVhdmVcIiksXG4gICAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgICAuLi5zaGFyZWRQcm9wcyxcbiAgICAgICAgICAgICAgLi4udGhlaXJQcm9wc1xuICAgICAgICAgICAgfSwgc2xvdHMuZGVmYXVsdClcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7fSxcbiAgICAgICAgZmVhdHVyZXM6IFRyYW5zaXRpb25DaGlsZFJlbmRlckZlYXR1cmVzLFxuICAgICAgICB2aXNpYmxlOiBzdGF0ZS52YWx1ZSA9PT0gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLyxcbiAgICAgICAgbmFtZTogXCJUcmFuc2l0aW9uXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9oZWFkbGVzc3VpLnByb2QuY2pzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9oZWFkbGVzc3VpLmRldi5janMnKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgc2hhcmVkID0gcmVxdWlyZSgnQHZ1ZXVzZS9zaGFyZWQnKTtcbnZhciB2dWVEZW1pID0gcmVxdWlyZSgndnVlLWRlbWknKTtcblxuZnVuY3Rpb24gY29tcHV0ZWRBc3luYyhldmFsdWF0aW9uQ2FsbGJhY2ssIGluaXRpYWxTdGF0ZSwgb3B0aW9uc09yUmVmKSB7XG4gIGxldCBvcHRpb25zO1xuICBpZiAodnVlRGVtaS5pc1JlZihvcHRpb25zT3JSZWYpKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGV2YWx1YXRpbmc6IG9wdGlvbnNPclJlZlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnNPclJlZiB8fCB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgbGF6eSA9IGZhbHNlLFxuICAgIGV2YWx1YXRpbmcgPSB2b2lkIDAsXG4gICAgb25FcnJvciA9IHNoYXJlZC5ub29wXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGFydGVkID0gdnVlRGVtaS5yZWYoIWxhenkpO1xuICBjb25zdCBjdXJyZW50ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFN0YXRlKTtcbiAgbGV0IGNvdW50ZXIgPSAwO1xuICB2dWVEZW1pLndhdGNoRWZmZWN0KGFzeW5jIChvbkludmFsaWRhdGUpID0+IHtcbiAgICBpZiAoIXN0YXJ0ZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgY291bnRlcisrO1xuICAgIGNvbnN0IGNvdW50ZXJBdEJlZ2lubmluZyA9IGNvdW50ZXI7XG4gICAgbGV0IGhhc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgaWYgKGV2YWx1YXRpbmcpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBldmFsdWF0aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdGlvbkNhbGxiYWNrKChjYW5jZWxDYWxsYmFjaykgPT4ge1xuICAgICAgICBvbkludmFsaWRhdGUoKCkgPT4ge1xuICAgICAgICAgIGlmIChldmFsdWF0aW5nKVxuICAgICAgICAgICAgZXZhbHVhdGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIGlmICghaGFzRmluaXNoZWQpXG4gICAgICAgICAgICBjYW5jZWxDYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNvdW50ZXJBdEJlZ2lubmluZyA9PT0gY291bnRlcilcbiAgICAgICAgY3VycmVudC52YWx1ZSA9IHJlc3VsdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZXZhbHVhdGluZyAmJiBjb3VudGVyQXRCZWdpbm5pbmcgPT09IGNvdW50ZXIpXG4gICAgICAgIGV2YWx1YXRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIGhhc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAobGF6eSkge1xuICAgIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHN0YXJ0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIGN1cnJlbnQudmFsdWU7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZWRJbmplY3Qoa2V5LCBvcHRpb25zLCBkZWZhdWx0U291cmNlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpIHtcbiAgbGV0IHNvdXJjZSA9IHZ1ZURlbWkuaW5qZWN0KGtleSk7XG4gIGlmIChkZWZhdWx0U291cmNlKVxuICAgIHNvdXJjZSA9IHZ1ZURlbWkuaW5qZWN0KGtleSwgZGVmYXVsdFNvdXJjZSk7XG4gIGlmICh0cmVhdERlZmF1bHRBc0ZhY3RvcnkpXG4gICAgc291cmNlID0gdnVlRGVtaS5pbmplY3Qoa2V5LCBkZWZhdWx0U291cmNlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpO1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKChjdHgpID0+IG9wdGlvbnMoc291cmNlLCBjdHgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgICBnZXQ6IChjdHgpID0+IG9wdGlvbnMuZ2V0KHNvdXJjZSwgY3R4KSxcbiAgICAgIHNldDogb3B0aW9ucy5zZXRcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVVbnJlZkZuID0gKGZuKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MubWFwKChpKSA9PiB2dWVEZW1pLnVucmVmKGkpKSk7XG4gIH07XG59O1xuXG5mdW5jdGlvbiB1bnJlZkVsZW1lbnQoZWxSZWYpIHtcbiAgdmFyIF9hO1xuICBjb25zdCBwbGFpbiA9IHZ1ZURlbWkudW5yZWYoZWxSZWYpO1xuICByZXR1cm4gKF9hID0gcGxhaW4gPT0gbnVsbCA/IHZvaWQgMCA6IHBsYWluLiRlbCkgIT0gbnVsbCA/IF9hIDogcGxhaW47XG59XG5cbmNvbnN0IGRlZmF1bHRXaW5kb3cgPSBzaGFyZWQuaXNDbGllbnQgPyB3aW5kb3cgOiB2b2lkIDA7XG5jb25zdCBkZWZhdWx0RG9jdW1lbnQgPSBzaGFyZWQuaXNDbGllbnQgPyB3aW5kb3cuZG9jdW1lbnQgOiB2b2lkIDA7XG5jb25zdCBkZWZhdWx0TmF2aWdhdG9yID0gc2hhcmVkLmlzQ2xpZW50ID8gd2luZG93Lm5hdmlnYXRvciA6IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHRMb2NhdGlvbiA9IHNoYXJlZC5pc0NsaWVudCA/IHdpbmRvdy5sb2NhdGlvbiA6IHZvaWQgMDtcblxuZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lciguLi5hcmdzKSB7XG4gIGxldCB0YXJnZXQ7XG4gIGxldCBldmVudDtcbiAgbGV0IGxpc3RlbmVyO1xuICBsZXQgb3B0aW9ucztcbiAgaWYgKHNoYXJlZC5pc1N0cmluZyhhcmdzWzBdKSkge1xuICAgIFtldmVudCwgbGlzdGVuZXIsIG9wdGlvbnNdID0gYXJncztcbiAgICB0YXJnZXQgPSBkZWZhdWx0V2luZG93O1xuICB9IGVsc2Uge1xuICAgIFt0YXJnZXQsIGV2ZW50LCBsaXN0ZW5lciwgb3B0aW9uc10gPSBhcmdzO1xuICB9XG4gIGlmICghdGFyZ2V0KVxuICAgIHJldHVybiBzaGFyZWQubm9vcDtcbiAgbGV0IGNsZWFudXAgPSBzaGFyZWQubm9vcDtcbiAgY29uc3Qgc3RvcFdhdGNoID0gdnVlRGVtaS53YXRjaCgoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSwgKGVsKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgICBjbGVhbnVwID0gc2hhcmVkLm5vb3A7XG4gICAgfTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUsIGZsdXNoOiBcInBvc3RcIiB9KTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBzdG9wV2F0Y2goKTtcbiAgICBjbGVhbnVwKCk7XG4gIH07XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHN0b3A7XG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2tPdXRzaWRlKHRhcmdldCwgaGFuZGxlciwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdywgaWdub3JlLCBjYXB0dXJlID0gdHJ1ZSwgZGV0ZWN0SWZyYW1lID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGlmICghd2luZG93KVxuICAgIHJldHVybjtcbiAgY29uc3Qgc2hvdWxkTGlzdGVuID0gdnVlRGVtaS5yZWYodHJ1ZSk7XG4gIGxldCBmYWxsYmFjaztcbiAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGZhbGxiYWNrKTtcbiAgICBjb25zdCBlbCA9IHVucmVmRWxlbWVudCh0YXJnZXQpO1xuICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgIGlmICghZWwgfHwgZWwgPT09IGV2ZW50LnRhcmdldCB8fCBjb21wb3NlZFBhdGguaW5jbHVkZXMoZWwpIHx8ICFzaG91bGRMaXN0ZW4udmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGlnbm9yZSAmJiBpZ25vcmUubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGlnbm9yZS5zb21lKCh0YXJnZXQyKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsMiA9IHVucmVmRWxlbWVudCh0YXJnZXQyKTtcbiAgICAgICAgcmV0dXJuIGVsMiAmJiAoZXZlbnQudGFyZ2V0ID09PSBlbDIgfHwgY29tcG9zZWRQYXRoLmluY2x1ZGVzKGVsMikpO1xuICAgICAgfSkpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaGFuZGxlcihldmVudCk7XG4gIH07XG4gIGNvbnN0IGNsZWFudXAgPSBbXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiY2xpY2tcIiwgbGlzdGVuZXIsIHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZSB9KSxcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJwb2ludGVyZG93blwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgZWwgPSB1bnJlZkVsZW1lbnQodGFyZ2V0KTtcbiAgICAgIHNob3VsZExpc3Rlbi52YWx1ZSA9ICEhZWwgJiYgIWUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMoZWwpO1xuICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KSxcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJwb2ludGVydXBcIiwgKGUpID0+IHtcbiAgICAgIGlmIChlLmJ1dHRvbiA9PT0gMCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZS5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgZS5jb21wb3NlZFBhdGggPSAoKSA9PiBwYXRoO1xuICAgICAgICBmYWxsYmFjayA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGxpc3RlbmVyKGUpLCA1MCk7XG4gICAgICB9XG4gICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pLFxuICAgIGRldGVjdElmcmFtZSAmJiB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJibHVyXCIsIChldmVudCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgZWwgPSB1bnJlZkVsZW1lbnQodGFyZ2V0KTtcbiAgICAgIGlmICgoKF9hID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRhZ05hbWUpID09PSBcIklGUkFNRVwiICYmICEoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSlcbiAgICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgfSlcbiAgXS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiBjbGVhbnVwLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgcmV0dXJuIHN0b3A7XG59XG5cbnZhciBfX2RlZlByb3AkaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDggPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ4ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRsID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGwgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRqID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRqKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRqID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkbC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGooYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGwpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGwoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kbC5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkaihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDggPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ4KGEsIF9fZ2V0T3duUHJvcERlc2NzJDgoYikpO1xuY29uc3QgY3JlYXRlS2V5UHJlZGljYXRlID0gKGtleUZpbHRlcikgPT4ge1xuICBpZiAodHlwZW9mIGtleUZpbHRlciA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBrZXlGaWx0ZXI7XG4gIGVsc2UgaWYgKHR5cGVvZiBrZXlGaWx0ZXIgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIChldmVudCkgPT4gZXZlbnQua2V5ID09PSBrZXlGaWx0ZXI7XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5RmlsdGVyKSlcbiAgICByZXR1cm4gKGV2ZW50KSA9PiBrZXlGaWx0ZXIuaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgZWxzZSBpZiAoa2V5RmlsdGVyKVxuICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICBlbHNlXG4gICAgcmV0dXJuICgpID0+IGZhbHNlO1xufTtcbmZ1bmN0aW9uIG9uS2V5U3Ryb2tlKGtleSwgaGFuZGxlciwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgdGFyZ2V0ID0gZGVmYXVsdFdpbmRvdywgZXZlbnROYW1lID0gXCJrZXlkb3duXCIsIHBhc3NpdmUgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJlZGljYXRlID0gY3JlYXRlS2V5UHJlZGljYXRlKGtleSk7XG4gIGNvbnN0IGxpc3RlbmVyID0gKGUpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKGUpKVxuICAgICAgaGFuZGxlcihlKTtcbiAgfTtcbiAgcmV0dXJuIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyLCBwYXNzaXZlKTtcbn1cbmZ1bmN0aW9uIG9uS2V5RG93bihrZXksIGhhbmRsZXIsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gb25LZXlTdHJva2Uoa2V5LCBoYW5kbGVyLCBfX3NwcmVhZFByb3BzJDgoX19zcHJlYWRWYWx1ZXMkaih7fSwgb3B0aW9ucyksIHsgZXZlbnROYW1lOiBcImtleWRvd25cIiB9KSk7XG59XG5mdW5jdGlvbiBvbktleVByZXNzZWQoa2V5LCBoYW5kbGVyLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIG9uS2V5U3Ryb2tlKGtleSwgaGFuZGxlciwgX19zcHJlYWRQcm9wcyQ4KF9fc3ByZWFkVmFsdWVzJGooe30sIG9wdGlvbnMpLCB7IGV2ZW50TmFtZTogXCJrZXlwcmVzc1wiIH0pKTtcbn1cbmZ1bmN0aW9uIG9uS2V5VXAoa2V5LCBoYW5kbGVyLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIG9uS2V5U3Ryb2tlKGtleSwgaGFuZGxlciwgX19zcHJlYWRQcm9wcyQ4KF9fc3ByZWFkVmFsdWVzJGooe30sIG9wdGlvbnMpLCB7IGV2ZW50TmFtZTogXCJrZXl1cFwiIH0pKTtcbn1cblxuY29uc3QgREVGQVVMVF9ERUxBWSA9IDUwMDtcbmZ1bmN0aW9uIG9uTG9uZ1ByZXNzKHRhcmdldCwgaGFuZGxlciwgb3B0aW9ucykge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCBlbGVtZW50UmVmID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSk7XG4gIGxldCB0aW1lb3V0ID0gbnVsbDtcbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG9uRG93bihldikge1xuICAgIHZhciBfYTIsIF9iMiwgX2MsIF9kO1xuICAgIGlmICgoKF9hMiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubW9kaWZpZXJzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNlbGYpICYmIGV2LnRhcmdldCAhPT0gZWxlbWVudFJlZi52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBjbGVhcigpO1xuICAgIGlmICgoX2IyID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tb2RpZmllcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYjIucHJldmVudClcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKChfYyA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubW9kaWZpZXJzKSA9PSBudWxsID8gdm9pZCAwIDogX2Muc3RvcClcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGhhbmRsZXIoZXYpLCAoX2QgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmRlbGF5KSAhPSBudWxsID8gX2QgOiBERUZBVUxUX0RFTEFZKTtcbiAgfVxuICBjb25zdCBsaXN0ZW5lck9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogKF9hID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tb2RpZmllcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYXB0dXJlLFxuICAgIG9uY2U6IChfYiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubW9kaWZpZXJzKSA9PSBudWxsID8gdm9pZCAwIDogX2Iub25jZVxuICB9O1xuICB1c2VFdmVudExpc3RlbmVyKGVsZW1lbnRSZWYsIFwicG9pbnRlcmRvd25cIiwgb25Eb3duLCBsaXN0ZW5lck9wdGlvbnMpO1xuICB1c2VFdmVudExpc3RlbmVyKGVsZW1lbnRSZWYsIFwicG9pbnRlcnVwXCIsIGNsZWFyLCBsaXN0ZW5lck9wdGlvbnMpO1xuICB1c2VFdmVudExpc3RlbmVyKGVsZW1lbnRSZWYsIFwicG9pbnRlcmxlYXZlXCIsIGNsZWFyLCBsaXN0ZW5lck9wdGlvbnMpO1xufVxuXG5jb25zdCBpc0ZvY3VzZWRFbGVtZW50RWRpdGFibGUgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWN0aXZlRWxlbWVudCwgYm9keSB9ID0gZG9jdW1lbnQ7XG4gIGlmICghYWN0aXZlRWxlbWVudClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChhY3RpdmVFbGVtZW50ID09PSBib2R5KVxuICAgIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChhY3RpdmVFbGVtZW50LnRhZ05hbWUpIHtcbiAgICBjYXNlIFwiSU5QVVRcIjpcbiAgICBjYXNlIFwiVEVYVEFSRUFcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBhY3RpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKTtcbn07XG5jb25zdCBpc1R5cGVkQ2hhclZhbGlkID0gKHtcbiAga2V5Q29kZSxcbiAgbWV0YUtleSxcbiAgY3RybEtleSxcbiAgYWx0S2V5XG59KSA9PiB7XG4gIGlmIChtZXRhS2V5IHx8IGN0cmxLZXkgfHwgYWx0S2V5KVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGtleUNvZGUgPj0gNDggJiYga2V5Q29kZSA8PSA1NyB8fCBrZXlDb2RlID49IDk2ICYmIGtleUNvZGUgPD0gMTA1KVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoa2V5Q29kZSA+PSA2NSAmJiBrZXlDb2RlIDw9IDkwKVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59O1xuZnVuY3Rpb24gb25TdGFydFR5cGluZyhjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgZG9jdW1lbnQ6IGRvY3VtZW50MiA9IGRlZmF1bHREb2N1bWVudCB9ID0gb3B0aW9ucztcbiAgY29uc3Qga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICFpc0ZvY3VzZWRFbGVtZW50RWRpdGFibGUoKSAmJiBpc1R5cGVkQ2hhclZhbGlkKGV2ZW50KSAmJiBjYWxsYmFjayhldmVudCk7XG4gIH07XG4gIGlmIChkb2N1bWVudDIpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudDIsIFwia2V5ZG93blwiLCBrZXlkb3duLCB7IHBhc3NpdmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlUmVmKGtleSwgaW5pdGlhbFZhbHVlID0gbnVsbCkge1xuICBjb25zdCBpbnN0YW5jZSA9IHZ1ZURlbWkuZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGxldCBfdHJpZ2dlciA9ICgpID0+IHtcbiAgfTtcbiAgY29uc3QgZWxlbWVudCA9IHZ1ZURlbWkuY3VzdG9tUmVmKCh0cmFjaywgdHJpZ2dlcikgPT4ge1xuICAgIF90cmlnZ2VyID0gdHJpZ2dlcjtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0cmFjaygpO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gaW5zdGFuY2UgPT0gbnVsbCA/IHZvaWQgMCA6IGluc3RhbmNlLnByb3h5KSA9PSBudWxsID8gdm9pZCAwIDogX2EuJHJlZnNba2V5XSkgIT0gbnVsbCA/IF9iIDogaW5pdGlhbFZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldCgpIHtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZChfdHJpZ2dlcik7XG4gIHZ1ZURlbWkub25VcGRhdGVkKF90cmlnZ2VyKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHVzZUFjdGl2ZUVsZW1lbnQob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0gb3B0aW9ucztcbiAgY29uc3QgY291bnRlciA9IHZ1ZURlbWkucmVmKDApO1xuICBpZiAod2luZG93KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiYmx1clwiLCAoKSA9PiBjb3VudGVyLnZhbHVlICs9IDEsIHRydWUpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImZvY3VzXCIsICgpID0+IGNvdW50ZXIudmFsdWUgKz0gMSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvdW50ZXIudmFsdWU7XG4gICAgcmV0dXJuIHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VBc3luY1F1ZXVlKHRhc2tzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVycnVwdCA9IHRydWUsXG4gICAgb25FcnJvciA9IHNoYXJlZC5ub29wLFxuICAgIG9uRmluaXNoZWQgPSBzaGFyZWQubm9vcFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJvbWlzZVN0YXRlID0ge1xuICAgIHBlbmRpbmc6IFwicGVuZGluZ1wiLFxuICAgIHJlamVjdGVkOiBcInJlamVjdGVkXCIsXG4gICAgZnVsZmlsbGVkOiBcImZ1bGZpbGxlZFwiXG4gIH07XG4gIGNvbnN0IGluaXRpYWxSZXN1bHQgPSBBcnJheS5mcm9tKG5ldyBBcnJheSh0YXNrcy5sZW5ndGgpLCAoKSA9PiAoeyBzdGF0ZTogcHJvbWlzZVN0YXRlLnBlbmRpbmcsIGRhdGE6IG51bGwgfSkpO1xuICBjb25zdCByZXN1bHQgPSB2dWVEZW1pLnJlYWN0aXZlKGluaXRpYWxSZXN1bHQpO1xuICBjb25zdCBhY3RpdmVJbmRleCA9IHZ1ZURlbWkucmVmKC0xKTtcbiAgaWYgKCF0YXNrcyB8fCB0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICBvbkZpbmlzaGVkKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZUluZGV4LFxuICAgICAgcmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVSZXN1bHQoc3RhdGUsIHJlcykge1xuICAgIGFjdGl2ZUluZGV4LnZhbHVlKys7XG4gICAgcmVzdWx0W2FjdGl2ZUluZGV4LnZhbHVlXS5kYXRhID0gcmVzO1xuICAgIHJlc3VsdFthY3RpdmVJbmRleC52YWx1ZV0uc3RhdGUgPSBzdGF0ZTtcbiAgfVxuICB0YXNrcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICByZXR1cm4gcHJldi50aGVuKChwcmV2UmVzKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoKChfYSA9IHJlc3VsdFthY3RpdmVJbmRleC52YWx1ZV0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdGF0ZSkgPT09IHByb21pc2VTdGF0ZS5yZWplY3RlZCAmJiBpbnRlcnJ1cHQpIHtcbiAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycihwcmV2UmVzKS50aGVuKChjdXJyZW50UmVzKSA9PiB7XG4gICAgICAgIHVwZGF0ZVJlc3VsdChwcm9taXNlU3RhdGUuZnVsZmlsbGVkLCBjdXJyZW50UmVzKTtcbiAgICAgICAgYWN0aXZlSW5kZXgudmFsdWUgPT09IHRhc2tzLmxlbmd0aCAtIDEgJiYgb25GaW5pc2hlZCgpO1xuICAgICAgICByZXR1cm4gY3VycmVudFJlcztcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICB1cGRhdGVSZXN1bHQocHJvbWlzZVN0YXRlLnJlamVjdGVkLCBlKTtcbiAgICAgIG9uRXJyb3IoKTtcbiAgICAgIHJldHVybiBlO1xuICAgIH0pO1xuICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gIHJldHVybiB7XG4gICAgYWN0aXZlSW5kZXgsXG4gICAgcmVzdWx0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZUFzeW5jU3RhdGUocHJvbWlzZSwgaW5pdGlhbFN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBpbW1lZGlhdGUgPSB0cnVlLFxuICAgIGRlbGF5ID0gMCxcbiAgICBvbkVycm9yID0gc2hhcmVkLm5vb3AsXG4gICAgcmVzZXRPbkV4ZWN1dGUgPSB0cnVlLFxuICAgIHNoYWxsb3cgPSB0cnVlXG4gIH0gPSBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zIDoge307XG4gIGNvbnN0IHN0YXRlID0gc2hhbGxvdyA/IHZ1ZURlbWkuc2hhbGxvd1JlZihpbml0aWFsU3RhdGUpIDogdnVlRGVtaS5yZWYoaW5pdGlhbFN0YXRlKTtcbiAgY29uc3QgaXNSZWFkeSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgaXNMb2FkaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBlcnJvciA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUoZGVsYXkyID0gMCwgLi4uYXJncykge1xuICAgIGlmIChyZXNldE9uRXhlY3V0ZSlcbiAgICAgIHN0YXRlLnZhbHVlID0gaW5pdGlhbFN0YXRlO1xuICAgIGVycm9yLnZhbHVlID0gdm9pZCAwO1xuICAgIGlzUmVhZHkudmFsdWUgPSBmYWxzZTtcbiAgICBpc0xvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGlmIChkZWxheTIgPiAwKVxuICAgICAgYXdhaXQgc2hhcmVkLnByb21pc2VUaW1lb3V0KGRlbGF5Mik7XG4gICAgY29uc3QgX3Byb21pc2UgPSB0eXBlb2YgcHJvbWlzZSA9PT0gXCJmdW5jdGlvblwiID8gcHJvbWlzZSguLi5hcmdzKSA6IHByb21pc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBfcHJvbWlzZTtcbiAgICAgIHN0YXRlLnZhbHVlID0gZGF0YTtcbiAgICAgIGlzUmVhZHkudmFsdWUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gZTtcbiAgICAgIG9uRXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzTG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUudmFsdWU7XG4gIH1cbiAgaWYgKGltbWVkaWF0ZSlcbiAgICBleGVjdXRlKGRlbGF5KTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0ZSxcbiAgICBpc1JlYWR5LFxuICAgIGlzTG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBleGVjdXRlXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBhcnJheTogKHYpID0+IEpTT04uc3RyaW5naWZ5KHYpLFxuICBvYmplY3Q6ICh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KSxcbiAgc2V0OiAodikgPT4gSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh2KSksXG4gIG1hcDogKHYpID0+IEpTT04uc3RyaW5naWZ5KE9iamVjdC5mcm9tRW50cmllcyh2KSksXG4gIG51bGw6ICgpID0+IFwiXCJcbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0U2VyaWFsaXphdGlvbih0YXJnZXQpIHtcbiAgaWYgKCF0YXJnZXQpXG4gICAgcmV0dXJuIGRlZmF1bHRzLm51bGw7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBNYXApXG4gICAgcmV0dXJuIGRlZmF1bHRzLm1hcDtcbiAgZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2V0KVxuICAgIHJldHVybiBkZWZhdWx0cy5zZXQ7XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSlcbiAgICByZXR1cm4gZGVmYXVsdHMuYXJyYXk7XG4gIGVsc2VcbiAgICByZXR1cm4gZGVmYXVsdHMub2JqZWN0O1xufVxuXG5mdW5jdGlvbiB1c2VCYXNlNjQodGFyZ2V0LCBvcHRpb25zKSB7XG4gIGNvbnN0IGJhc2U2NCA9IHZ1ZURlbWkucmVmKFwiXCIpO1xuICBjb25zdCBwcm9taXNlID0gdnVlRGVtaS5yZWYoKTtcbiAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICBpZiAoIXNoYXJlZC5pc0NsaWVudClcbiAgICAgIHJldHVybjtcbiAgICBwcm9taXNlLnZhbHVlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgX3RhcmdldCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICAgICAgaWYgKF90YXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc29sdmUoXCJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXNvbHZlKGJsb2JUb0Jhc2U2NChuZXcgQmxvYihbX3RhcmdldF0sIHsgdHlwZTogXCJ0ZXh0L3BsYWluXCIgfSkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChfdGFyZ2V0IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgIHJlc29sdmUoYmxvYlRvQmFzZTY0KF90YXJnZXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChfdGFyZ2V0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXNvbHZlKHdpbmRvdy5idG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubmV3IFVpbnQ4QXJyYXkoX3RhcmdldCkpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RhcmdldCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgICAgICAgcmVzb2x2ZShfdGFyZ2V0LnRvRGF0YVVSTChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnR5cGUsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVhbGl0eSkpO1xuICAgICAgICB9IGVsc2UgaWYgKF90YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgaW1nID0gX3RhcmdldC5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9IFwiQW5vbnltb3VzXCI7XG4gICAgICAgICAgaW1nTG9hZGVkKGltZykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICByZXNvbHZlKGNhbnZhcy50b0RhdGFVUkwob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50eXBlLCBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1YWxpdHkpKTtcbiAgICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgX3NlcmlhbGl6ZUZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2VyaWFsaXplcikgfHwgZ2V0RGVmYXVsdFNlcmlhbGl6YXRpb24oX3RhcmdldCk7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IF9zZXJpYWxpemVGbihfdGFyZ2V0KTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShibG9iVG9CYXNlNjQobmV3IEJsb2IoW3NlcmlhbGl6ZWRdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiIH0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcInRhcmdldCBpcyB1bnN1cHBvcnRlZCB0eXBlc1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvbWlzZS52YWx1ZS50aGVuKChyZXMpID0+IGJhc2U2NC52YWx1ZSA9IHJlcyk7XG4gICAgcmV0dXJuIHByb21pc2UudmFsdWU7XG4gIH1cbiAgaWYgKHZ1ZURlbWkuaXNSZWYodGFyZ2V0KSlcbiAgICB2dWVEZW1pLndhdGNoKHRhcmdldCwgZXhlY3V0ZSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIGVsc2VcbiAgICBleGVjdXRlKCk7XG4gIHJldHVybiB7XG4gICAgYmFzZTY0LFxuICAgIHByb21pc2UsXG4gICAgZXhlY3V0ZVxuICB9O1xufVxuZnVuY3Rpb24gaW1nTG9hZGVkKGltZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghaW1nLmNvbXBsZXRlKSB7XG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gYmxvYlRvQmFzZTY0KGJsb2IpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBmciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgZnIub25sb2FkID0gKGUpID0+IHtcbiAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTtcbiAgICB9O1xuICAgIGZyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgZnIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZUJhdHRlcnkoeyBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yIH0gPSB7fSkge1xuICBjb25zdCBldmVudHMgPSBbXCJjaGFyZ2luZ2NoYW5nZVwiLCBcImNoYXJnaW5ndGltZWNoYW5nZVwiLCBcImRpc2NoYXJnaW5ndGltZWNoYW5nZVwiLCBcImxldmVsY2hhbmdlXCJdO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBcImdldEJhdHRlcnlcIiBpbiBuYXZpZ2F0b3I7XG4gIGNvbnN0IGNoYXJnaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBjaGFyZ2luZ1RpbWUgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgZGlzY2hhcmdpbmdUaW1lID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGxldmVsID0gdnVlRGVtaS5yZWYoMSk7XG4gIGxldCBiYXR0ZXJ5O1xuICBmdW5jdGlvbiB1cGRhdGVCYXR0ZXJ5SW5mbygpIHtcbiAgICBjaGFyZ2luZy52YWx1ZSA9IHRoaXMuY2hhcmdpbmc7XG4gICAgY2hhcmdpbmdUaW1lLnZhbHVlID0gdGhpcy5jaGFyZ2luZ1RpbWUgfHwgMDtcbiAgICBkaXNjaGFyZ2luZ1RpbWUudmFsdWUgPSB0aGlzLmRpc2NoYXJnaW5nVGltZSB8fCAwO1xuICAgIGxldmVsLnZhbHVlID0gdGhpcy5sZXZlbDtcbiAgfVxuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICBuYXZpZ2F0b3IuZ2V0QmF0dGVyeSgpLnRoZW4oKF9iYXR0ZXJ5KSA9PiB7XG4gICAgICBiYXR0ZXJ5ID0gX2JhdHRlcnk7XG4gICAgICB1cGRhdGVCYXR0ZXJ5SW5mby5jYWxsKGJhdHRlcnkpO1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpXG4gICAgICAgIHVzZUV2ZW50TGlzdGVuZXIoYmF0dGVyeSwgZXZlbnQsIHVwZGF0ZUJhdHRlcnlJbmZvLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBjaGFyZ2luZyxcbiAgICBjaGFyZ2luZ1RpbWUsXG4gICAgZGlzY2hhcmdpbmdUaW1lLFxuICAgIGxldmVsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZUJsdWV0b290aChvcHRpb25zKSB7XG4gIGxldCB7XG4gICAgYWNjZXB0QWxsRGV2aWNlcyA9IGZhbHNlXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCB7XG4gICAgZmlsdGVycyA9IHZvaWQgMCxcbiAgICBvcHRpb25hbFNlcnZpY2VzID0gdm9pZCAwLFxuICAgIG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3JcbiAgfSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIFwiYmx1ZXRvb3RoXCIgaW4gbmF2aWdhdG9yO1xuICBjb25zdCBkZXZpY2UgPSB2dWVEZW1pLnJlZih2b2lkIDApO1xuICBjb25zdCBlcnJvciA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICB2dWVEZW1pLndhdGNoKGRldmljZSwgKCkgPT4ge1xuICAgIGNvbm5lY3RUb0JsdWV0b290aEdBVFRTZXJ2ZXIoKTtcbiAgfSk7XG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REZXZpY2UoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBlcnJvci52YWx1ZSA9IG51bGw7XG4gICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5sZW5ndGggPiAwKVxuICAgICAgYWNjZXB0QWxsRGV2aWNlcyA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkZXZpY2UudmFsdWUgPSBhd2FpdCAobmF2aWdhdG9yID09IG51bGwgPyB2b2lkIDAgOiBuYXZpZ2F0b3IuYmx1ZXRvb3RoLnJlcXVlc3REZXZpY2Uoe1xuICAgICAgICBhY2NlcHRBbGxEZXZpY2VzLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBvcHRpb25hbFNlcnZpY2VzXG4gICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvci52YWx1ZSA9IGVycjtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2VydmVyID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3QgaXNDb25uZWN0ZWQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuICgoX2EgPSBzZXJ2ZXIudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jb25uZWN0ZWQpIHx8IGZhbHNlO1xuICB9KTtcbiAgYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvQmx1ZXRvb3RoR0FUVFNlcnZlcigpIHtcbiAgICBlcnJvci52YWx1ZSA9IG51bGw7XG4gICAgaWYgKGRldmljZS52YWx1ZSAmJiBkZXZpY2UudmFsdWUuZ2F0dCkge1xuICAgICAgZGV2aWNlLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoXCJnYXR0c2VydmVyZGlzY29ubmVjdGVkXCIsICgpID0+IHtcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VydmVyLnZhbHVlID0gYXdhaXQgZGV2aWNlLnZhbHVlLmdhdHQuY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycm9yLnZhbHVlID0gZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaGFyZWQudHJ5T25Nb3VudGVkKCgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGRldmljZS52YWx1ZSlcbiAgICAgIChfYSA9IGRldmljZS52YWx1ZS5nYXR0KSA9PSBudWxsID8gdm9pZCAwIDogX2EuY29ubmVjdCgpO1xuICB9KTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGRldmljZS52YWx1ZSlcbiAgICAgIChfYSA9IGRldmljZS52YWx1ZS5nYXR0KSA9PSBudWxsID8gdm9pZCAwIDogX2EuZGlzY29ubmVjdCgpO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBpc0Nvbm5lY3RlZCxcbiAgICBkZXZpY2UsXG4gICAgcmVxdWVzdERldmljZSxcbiAgICBzZXJ2ZXIsXG4gICAgZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTWVkaWFRdWVyeShxdWVyeSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKHdpbmRvdyAmJiBcIm1hdGNoTWVkaWFcIiBpbiB3aW5kb3cgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSBcImZ1bmN0aW9uXCIpO1xuICBsZXQgbWVkaWFRdWVyeTtcbiAgY29uc3QgbWF0Y2hlcyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFtZWRpYVF1ZXJ5KVxuICAgICAgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KTtcbiAgICBtYXRjaGVzLnZhbHVlID0gbWVkaWFRdWVyeS5tYXRjaGVzO1xuICB9O1xuICBzaGFyZWQudHJ5T25CZWZvcmVNb3VudCgoKSA9PiB7XG4gICAgdXBkYXRlKCk7XG4gICAgaWYgKCFtZWRpYVF1ZXJ5KVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChcImFkZEV2ZW50TGlzdGVuZXJcIiBpbiBtZWRpYVF1ZXJ5KVxuICAgICAgbWVkaWFRdWVyeS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHVwZGF0ZSk7XG4gICAgZWxzZVxuICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcih1cGRhdGUpO1xuICAgIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgICBpZiAoXCJyZW1vdmVFdmVudExpc3RlbmVyXCIgaW4gbWVkaWFRdWVyeSlcbiAgICAgICAgbWVkaWFRdWVyeS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIHVwZGF0ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIG1lZGlhUXVlcnkucmVtb3ZlTGlzdGVuZXIodXBkYXRlKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5jb25zdCBicmVha3BvaW50c1RhaWx3aW5kID0ge1xuICBcInNtXCI6IDY0MCxcbiAgXCJtZFwiOiA3NjgsXG4gIFwibGdcIjogMTAyNCxcbiAgXCJ4bFwiOiAxMjgwLFxuICBcIjJ4bFwiOiAxNTM2XG59O1xuY29uc3QgYnJlYWtwb2ludHNCb290c3RyYXBWNSA9IHtcbiAgc206IDU3NixcbiAgbWQ6IDc2OCxcbiAgbGc6IDk5MixcbiAgeGw6IDEyMDAsXG4gIHh4bDogMTQwMFxufTtcbmNvbnN0IGJyZWFrcG9pbnRzVnVldGlmeSA9IHtcbiAgeHM6IDYwMCxcbiAgc206IDk2MCxcbiAgbWQ6IDEyNjQsXG4gIGxnOiAxOTA0XG59O1xuY29uc3QgYnJlYWtwb2ludHNBbnREZXNpZ24gPSB7XG4gIHhzOiA0ODAsXG4gIHNtOiA1NzYsXG4gIG1kOiA3NjgsXG4gIGxnOiA5OTIsXG4gIHhsOiAxMjAwLFxuICB4eGw6IDE2MDBcbn07XG5jb25zdCBicmVha3BvaW50c1F1YXNhciA9IHtcbiAgeHM6IDYwMCxcbiAgc206IDEwMjQsXG4gIG1kOiAxNDQwLFxuICBsZzogMTkyMFxufTtcbmNvbnN0IGJyZWFrcG9pbnRzU2VtYXRpYyA9IHtcbiAgbW9iaWxlUzogMzIwLFxuICBtb2JpbGVNOiAzNzUsXG4gIG1vYmlsZUw6IDQyNSxcbiAgdGFibGV0OiA3NjgsXG4gIGxhcHRvcDogMTAyNCxcbiAgbGFwdG9wTDogMTQ0MCxcbiAgZGVza3RvcDRLOiAyNTYwXG59O1xuXG52YXIgX19kZWZQcm9wJGkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRrID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkayA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGsgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRpID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRpKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRpID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3Akay5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGkoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGspXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGsoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kay5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkaShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzLCBvcHRpb25zID0ge30pIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWUoaywgZGVsdGEpIHtcbiAgICBsZXQgdiA9IGJyZWFrcG9pbnRzW2tdO1xuICAgIGlmIChkZWx0YSAhPSBudWxsKVxuICAgICAgdiA9IHNoYXJlZC5pbmNyZWFzZVdpdGhVbml0KHYsIGRlbHRhKTtcbiAgICBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpXG4gICAgICB2ID0gYCR7dn1weGA7XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBmdW5jdGlvbiBtYXRjaChxdWVyeSkge1xuICAgIGlmICghd2luZG93KVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcbiAgfVxuICBjb25zdCBncmVhdGVyID0gKGspID0+IHtcbiAgICByZXR1cm4gdXNlTWVkaWFRdWVyeShgKG1pbi13aWR0aDogJHtnZXRWYWx1ZShrKX0pYCwgb3B0aW9ucyk7XG4gIH07XG4gIGNvbnN0IHNob3J0Y3V0TWV0aG9kcyA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5yZWR1Y2UoKHNob3J0Y3V0cywgaykgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaG9ydGN1dHMsIGssIHtcbiAgICAgIGdldDogKCkgPT4gZ3JlYXRlcihrKSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gc2hvcnRjdXRzO1xuICB9LCB7fSk7XG4gIHJldHVybiBfX3NwcmVhZFZhbHVlcyRpKHtcbiAgICBncmVhdGVyLFxuICAgIHNtYWxsZXIoaykge1xuICAgICAgcmV0dXJuIHVzZU1lZGlhUXVlcnkoYChtYXgtd2lkdGg6ICR7Z2V0VmFsdWUoaywgLTAuMSl9KWAsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgYmV0d2VlbihhLCBiKSB7XG4gICAgICByZXR1cm4gdXNlTWVkaWFRdWVyeShgKG1pbi13aWR0aDogJHtnZXRWYWx1ZShhKX0pIGFuZCAobWF4LXdpZHRoOiAke2dldFZhbHVlKGIsIC0wLjEpfSlgLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIGlzR3JlYXRlcihrKSB7XG4gICAgICByZXR1cm4gbWF0Y2goYChtaW4td2lkdGg6ICR7Z2V0VmFsdWUoayl9KWApO1xuICAgIH0sXG4gICAgaXNTbWFsbGVyKGspIHtcbiAgICAgIHJldHVybiBtYXRjaChgKG1heC13aWR0aDogJHtnZXRWYWx1ZShrLCAtMC4xKX0pYCk7XG4gICAgfSxcbiAgICBpc0luQmV0d2VlbihhLCBiKSB7XG4gICAgICByZXR1cm4gbWF0Y2goYChtaW4td2lkdGg6ICR7Z2V0VmFsdWUoYSl9KSBhbmQgKG1heC13aWR0aDogJHtnZXRWYWx1ZShiLCAtMC4xKX0pYCk7XG4gICAgfVxuICB9LCBzaG9ydGN1dE1ldGhvZHMpO1xufVxuXG5jb25zdCB1c2VCcm9hZGNhc3RDaGFubmVsID0gKG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSB3aW5kb3cgJiYgXCJCcm9hZGNhc3RDaGFubmVsXCIgaW4gd2luZG93O1xuICBjb25zdCBpc0Nsb3NlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhbm5lbCA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IGRhdGEgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBlcnJvciA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBwb3N0ID0gKGRhdGEyKSA9PiB7XG4gICAgaWYgKGNoYW5uZWwudmFsdWUpXG4gICAgICBjaGFubmVsLnZhbHVlLnBvc3RNZXNzYWdlKGRhdGEyKTtcbiAgfTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKGNoYW5uZWwudmFsdWUpXG4gICAgICBjaGFubmVsLnZhbHVlLmNsb3NlKCk7XG4gICAgaXNDbG9zZWQudmFsdWUgPSB0cnVlO1xuICB9O1xuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICBzaGFyZWQudHJ5T25Nb3VudGVkKCgpID0+IHtcbiAgICAgIGVycm9yLnZhbHVlID0gbnVsbDtcbiAgICAgIGNoYW5uZWwudmFsdWUgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChuYW1lKTtcbiAgICAgIGNoYW5uZWwudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgZGF0YS52YWx1ZSA9IGUuZGF0YTtcbiAgICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNoYW5uZWwudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICBlcnJvci52YWx1ZSA9IGU7XG4gICAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBjaGFubmVsLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlzQ2xvc2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgY2xvc2UoKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgY2hhbm5lbCxcbiAgICBkYXRhLFxuICAgIHBvc3QsXG4gICAgY2xvc2UsXG4gICAgZXJyb3IsXG4gICAgaXNDbG9zZWRcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHVzZUJyb3dzZXJMb2NhdGlvbih7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IHt9KSB7XG4gIGNvbnN0IGJ1aWxkU3RhdGUgPSAodHJpZ2dlcikgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGU6IHN0YXRlMiwgbGVuZ3RoIH0gPSAod2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuaGlzdG9yeSkgfHwge307XG4gICAgY29uc3QgeyBoYXNoLCBob3N0LCBob3N0bmFtZSwgaHJlZiwgb3JpZ2luLCBwYXRobmFtZSwgcG9ydCwgcHJvdG9jb2wsIHNlYXJjaCB9ID0gKHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93LmxvY2F0aW9uKSB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgdHJpZ2dlcixcbiAgICAgIHN0YXRlOiBzdGF0ZTIsXG4gICAgICBsZW5ndGgsXG4gICAgICBoYXNoLFxuICAgICAgaG9zdCxcbiAgICAgIGhvc3RuYW1lLFxuICAgICAgaHJlZixcbiAgICAgIG9yaWdpbixcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcG9ydCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgc2VhcmNoXG4gICAgfTtcbiAgfTtcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlZihidWlsZFN0YXRlKFwibG9hZFwiKSk7XG4gIGlmICh3aW5kb3cpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJwb3BzdGF0ZVwiLCAoKSA9PiBzdGF0ZS52YWx1ZSA9IGJ1aWxkU3RhdGUoXCJwb3BzdGF0ZVwiKSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImhhc2hjaGFuZ2VcIiwgKCkgPT4gc3RhdGUudmFsdWUgPSBidWlsZFN0YXRlKFwiaGFzaGNoYW5nZVwiKSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXNlQ2FjaGVkKHJlZlZhbHVlLCBjb21wYXJhdG9yID0gKGEsIGIpID0+IGEgPT09IGIsIHdhdGNoT3B0aW9ucykge1xuICBjb25zdCBjYWNoZWRWYWx1ZSA9IHZ1ZURlbWkucmVmKHJlZlZhbHVlLnZhbHVlKTtcbiAgdnVlRGVtaS53YXRjaCgoKSA9PiByZWZWYWx1ZS52YWx1ZSwgKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFjb21wYXJhdG9yKHZhbHVlLCBjYWNoZWRWYWx1ZS52YWx1ZSkpXG4gICAgICBjYWNoZWRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICB9LCB3YXRjaE9wdGlvbnMpO1xuICByZXR1cm4gY2FjaGVkVmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVzZUNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xuICBjb25zdCBfdmFsdWUgPSB2dWVEZW1pLnJlZih2YWx1ZSk7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLnZhbHVlID0gc2hhcmVkLmNsYW1wKF92YWx1ZS52YWx1ZSwgdnVlRGVtaS51bnJlZihtaW4pLCB2dWVEZW1pLnVucmVmKG1heCkpO1xuICAgIH0sXG4gICAgc2V0KHZhbHVlMikge1xuICAgICAgX3ZhbHVlLnZhbHVlID0gc2hhcmVkLmNsYW1wKHZhbHVlMiwgdnVlRGVtaS51bnJlZihtaW4pLCB2dWVEZW1pLnVucmVmKG1heCkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZUNsaXBib2FyZChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IsXG4gICAgcmVhZCA9IGZhbHNlLFxuICAgIHNvdXJjZSxcbiAgICBjb3BpZWREdXJpbmcgPSAxNTAwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBldmVudHMgPSBbXCJjb3B5XCIsIFwiY3V0XCJdO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IEJvb2xlYW4obmF2aWdhdG9yICYmIFwiY2xpcGJvYXJkXCIgaW4gbmF2aWdhdG9yKTtcbiAgY29uc3QgdGV4dCA9IHZ1ZURlbWkucmVmKFwiXCIpO1xuICBjb25zdCBjb3BpZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzaGFyZWQudXNlVGltZW91dEZuKCgpID0+IGNvcGllZC52YWx1ZSA9IGZhbHNlLCBjb3BpZWREdXJpbmcpO1xuICBmdW5jdGlvbiB1cGRhdGVUZXh0KCkge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgdGV4dC52YWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG4gIGlmIChpc1N1cHBvcnRlZCAmJiByZWFkKSB7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpXG4gICAgICB1c2VFdmVudExpc3RlbmVyKGV2ZW50LCB1cGRhdGVUZXh0KTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBjb3B5KHZhbHVlID0gdnVlRGVtaS51bnJlZihzb3VyY2UpKSB7XG4gICAgaWYgKGlzU3VwcG9ydGVkICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKTtcbiAgICAgIHRleHQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGNvcGllZC52YWx1ZSA9IHRydWU7XG4gICAgICB0aW1lb3V0LnN0YXJ0KCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgdGV4dCxcbiAgICBjb3BpZWQsXG4gICAgY29weVxuICB9O1xufVxuXG5jb25zdCBfZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB7fTtcbmNvbnN0IGdsb2JhbEtleSA9IFwiX192dWV1c2Vfc3NyX2hhbmRsZXJzX19cIjtcbl9nbG9iYWxbZ2xvYmFsS2V5XSA9IF9nbG9iYWxbZ2xvYmFsS2V5XSB8fCB7fTtcbmNvbnN0IGhhbmRsZXJzID0gX2dsb2JhbFtnbG9iYWxLZXldO1xuZnVuY3Rpb24gZ2V0U1NSSGFuZGxlcihrZXksIGZhbGxiYWNrKSB7XG4gIHJldHVybiBoYW5kbGVyc1trZXldIHx8IGZhbGxiYWNrO1xufVxuZnVuY3Rpb24gc2V0U1NSSGFuZGxlcihrZXksIGZuKSB7XG4gIGhhbmRsZXJzW2tleV0gPSBmbjtcbn1cblxuZnVuY3Rpb24gZ3Vlc3NTZXJpYWxpemVyVHlwZShyYXdJbml0KSB7XG4gIHJldHVybiByYXdJbml0ID09IG51bGwgPyBcImFueVwiIDogcmF3SW5pdCBpbnN0YW5jZW9mIFNldCA/IFwic2V0XCIgOiByYXdJbml0IGluc3RhbmNlb2YgTWFwID8gXCJtYXBcIiA6IHJhd0luaXQgaW5zdGFuY2VvZiBEYXRlID8gXCJkYXRlXCIgOiB0eXBlb2YgcmF3SW5pdCA9PT0gXCJib29sZWFuXCIgPyBcImJvb2xlYW5cIiA6IHR5cGVvZiByYXdJbml0ID09PSBcInN0cmluZ1wiID8gXCJzdHJpbmdcIiA6IHR5cGVvZiByYXdJbml0ID09PSBcIm9iamVjdFwiID8gXCJvYmplY3RcIiA6IEFycmF5LmlzQXJyYXkocmF3SW5pdCkgPyBcIm9iamVjdFwiIDogIU51bWJlci5pc05hTihyYXdJbml0KSA/IFwibnVtYmVyXCIgOiBcImFueVwiO1xufVxuXG5jb25zdCBTdG9yYWdlU2VyaWFsaXplcnMgPSB7XG4gIGJvb2xlYW46IHtcbiAgICByZWFkOiAodikgPT4gdiA9PT0gXCJ0cnVlXCIsXG4gICAgd3JpdGU6ICh2KSA9PiBTdHJpbmcodilcbiAgfSxcbiAgb2JqZWN0OiB7XG4gICAgcmVhZDogKHYpID0+IEpTT04ucGFyc2UodiksXG4gICAgd3JpdGU6ICh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KVxuICB9LFxuICBudW1iZXI6IHtcbiAgICByZWFkOiAodikgPT4gTnVtYmVyLnBhcnNlRmxvYXQodiksXG4gICAgd3JpdGU6ICh2KSA9PiBTdHJpbmcodilcbiAgfSxcbiAgYW55OiB7XG4gICAgcmVhZDogKHYpID0+IHYsXG4gICAgd3JpdGU6ICh2KSA9PiBTdHJpbmcodilcbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgcmVhZDogKHYpID0+IHYsXG4gICAgd3JpdGU6ICh2KSA9PiBTdHJpbmcodilcbiAgfSxcbiAgbWFwOiB7XG4gICAgcmVhZDogKHYpID0+IG5ldyBNYXAoSlNPTi5wYXJzZSh2KSksXG4gICAgd3JpdGU6ICh2KSA9PiBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHYuZW50cmllcygpKSlcbiAgfSxcbiAgc2V0OiB7XG4gICAgcmVhZDogKHYpID0+IG5ldyBTZXQoSlNPTi5wYXJzZSh2KSksXG4gICAgd3JpdGU6ICh2KSA9PiBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHYpKVxuICB9LFxuICBkYXRlOiB7XG4gICAgcmVhZDogKHYpID0+IG5ldyBEYXRlKHYpLFxuICAgIHdyaXRlOiAodikgPT4gdi50b0lTT1N0cmluZygpXG4gIH1cbn07XG5mdW5jdGlvbiB1c2VTdG9yYWdlKGtleSwgaW5pdGlhbFZhbHVlLCBzdG9yYWdlLCBvcHRpb25zID0ge30pIHtcbiAgdmFyIF9hO1xuICBjb25zdCB7XG4gICAgZmx1c2ggPSBcInByZVwiLFxuICAgIGRlZXAgPSB0cnVlLFxuICAgIGxpc3RlblRvU3RvcmFnZUNoYW5nZXMgPSB0cnVlLFxuICAgIHdyaXRlRGVmYXVsdHMgPSB0cnVlLFxuICAgIHNoYWxsb3csXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvdyxcbiAgICBldmVudEZpbHRlcixcbiAgICBvbkVycm9yID0gKGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGF0YSA9IChzaGFsbG93ID8gdnVlRGVtaS5zaGFsbG93UmVmIDogdnVlRGVtaS5yZWYpKGluaXRpYWxWYWx1ZSk7XG4gIGlmICghc3RvcmFnZSkge1xuICAgIHRyeSB7XG4gICAgICBzdG9yYWdlID0gZ2V0U1NSSGFuZGxlcihcImdldERlZmF1bHRTdG9yYWdlXCIsICgpID0+IHtcbiAgICAgICAgdmFyIF9hMjtcbiAgICAgICAgcmV0dXJuIChfYTIgPSBkZWZhdWx0V2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmxvY2FsU3RvcmFnZTtcbiAgICAgIH0pKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb25FcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFzdG9yYWdlKVxuICAgIHJldHVybiBkYXRhO1xuICBjb25zdCByYXdJbml0ID0gdnVlRGVtaS51bnJlZihpbml0aWFsVmFsdWUpO1xuICBjb25zdCB0eXBlID0gZ3Vlc3NTZXJpYWxpemVyVHlwZShyYXdJbml0KTtcbiAgY29uc3Qgc2VyaWFsaXplciA9IChfYSA9IG9wdGlvbnMuc2VyaWFsaXplcikgIT0gbnVsbCA/IF9hIDogU3RvcmFnZVNlcmlhbGl6ZXJzW3R5cGVdO1xuICBjb25zdCB7IHBhdXNlOiBwYXVzZVdhdGNoLCByZXN1bWU6IHJlc3VtZVdhdGNoIH0gPSBzaGFyZWQucGF1c2FibGVXYXRjaChkYXRhLCAoKSA9PiB3cml0ZShkYXRhLnZhbHVlKSwgeyBmbHVzaCwgZGVlcCwgZXZlbnRGaWx0ZXIgfSk7XG4gIGlmICh3aW5kb3cgJiYgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcylcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJzdG9yYWdlXCIsIHVwZGF0ZSk7XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gZGF0YTtcbiAgZnVuY3Rpb24gd3JpdGUodikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodiA9PSBudWxsKVxuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgc2VyaWFsaXplci53cml0ZSh2KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb25FcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVhZChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5rZXkgIT09IGtleSlcbiAgICAgIHJldHVybjtcbiAgICBwYXVzZVdhdGNoKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQgPyBldmVudC5uZXdWYWx1ZSA6IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHJhd1ZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHdyaXRlRGVmYXVsdHMgJiYgcmF3SW5pdCAhPT0gbnVsbClcbiAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBzZXJpYWxpemVyLndyaXRlKHJhd0luaXQpKTtcbiAgICAgICAgcmV0dXJuIHJhd0luaXQ7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYXdWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplci5yZWFkKHJhd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN1bWVXYXRjaCgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1cGRhdGUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5ICE9PSBrZXkpXG4gICAgICByZXR1cm47XG4gICAgZGF0YS52YWx1ZSA9IHJlYWQoZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVByZWZlcnJlZERhcmsob3B0aW9ucykge1xuICByZXR1cm4gdXNlTWVkaWFRdWVyeShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIiwgb3B0aW9ucyk7XG59XG5cbnZhciBfX2RlZlByb3AkaCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGogPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRqID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kaiA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJGggPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJGgob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJGggPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRqLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkaChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkailcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkaihiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRqLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCRoKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlQ29sb3JNb2RlKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgc2VsZWN0b3IgPSBcImh0bWxcIixcbiAgICBhdHRyaWJ1dGUgPSBcImNsYXNzXCIsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvdyxcbiAgICBzdG9yYWdlLFxuICAgIHN0b3JhZ2VLZXkgPSBcInZ1ZXVzZS1jb2xvci1zY2hlbWVcIixcbiAgICBsaXN0ZW5Ub1N0b3JhZ2VDaGFuZ2VzID0gdHJ1ZSxcbiAgICBzdG9yYWdlUmVmLFxuICAgIGVtaXRBdXRvXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBtb2RlcyA9IF9fc3ByZWFkVmFsdWVzJGgoe1xuICAgIGF1dG86IFwiXCIsXG4gICAgbGlnaHQ6IFwibGlnaHRcIixcbiAgICBkYXJrOiBcImRhcmtcIlxuICB9LCBvcHRpb25zLm1vZGVzIHx8IHt9KTtcbiAgY29uc3QgcHJlZmVycmVkRGFyayA9IHVzZVByZWZlcnJlZERhcmsoeyB3aW5kb3cgfSk7XG4gIGNvbnN0IHByZWZlcnJlZE1vZGUgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHByZWZlcnJlZERhcmsudmFsdWUgPyBcImRhcmtcIiA6IFwibGlnaHRcIik7XG4gIGNvbnN0IHN0b3JlID0gc3RvcmFnZVJlZiB8fCAoc3RvcmFnZUtleSA9PSBudWxsID8gdnVlRGVtaS5yZWYoXCJhdXRvXCIpIDogdXNlU3RvcmFnZShzdG9yYWdlS2V5LCBcImF1dG9cIiwgc3RvcmFnZSwgeyB3aW5kb3csIGxpc3RlblRvU3RvcmFnZUNoYW5nZXMgfSkpO1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkuY29tcHV0ZWQoe1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBzdG9yZS52YWx1ZSA9PT0gXCJhdXRvXCIgJiYgIWVtaXRBdXRvID8gcHJlZmVycmVkTW9kZS52YWx1ZSA6IHN0b3JlLnZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHYpIHtcbiAgICAgIHN0b3JlLnZhbHVlID0gdjtcbiAgICB9XG4gIH0pO1xuICBjb25zdCB1cGRhdGVIVE1MQXR0cnMgPSBnZXRTU1JIYW5kbGVyKFwidXBkYXRlSFRNTEF0dHJzXCIsIChzZWxlY3RvcjIsIGF0dHJpYnV0ZTIsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZWwgPSB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yMik7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoYXR0cmlidXRlMiA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdmFsdWUuc3BsaXQoL1xccy9nKTtcbiAgICAgIE9iamVjdC52YWx1ZXMobW9kZXMpLmZsYXRNYXAoKGkpID0+IChpIHx8IFwiXCIpLnNwbGl0KC9cXHMvZykpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50LmluY2x1ZGVzKHYpKVxuICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQodik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKHYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUyLCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgZnVuY3Rpb24gZGVmYXVsdE9uQ2hhbmdlZChtb2RlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlc29sdmVkTW9kZSA9IG1vZGUgPT09IFwiYXV0b1wiID8gcHJlZmVycmVkTW9kZS52YWx1ZSA6IG1vZGU7XG4gICAgdXBkYXRlSFRNTEF0dHJzKHNlbGVjdG9yLCBhdHRyaWJ1dGUsIChfYSA9IG1vZGVzW3Jlc29sdmVkTW9kZV0pICE9IG51bGwgPyBfYSA6IHJlc29sdmVkTW9kZSk7XG4gIH1cbiAgZnVuY3Rpb24gb25DaGFuZ2VkKG1vZGUpIHtcbiAgICBpZiAob3B0aW9ucy5vbkNoYW5nZWQpXG4gICAgICBvcHRpb25zLm9uQ2hhbmdlZChtb2RlLCBkZWZhdWx0T25DaGFuZ2VkKTtcbiAgICBlbHNlXG4gICAgICBkZWZhdWx0T25DaGFuZ2VkKG1vZGUpO1xuICB9XG4gIHZ1ZURlbWkud2F0Y2goc3RhdGUsIG9uQ2hhbmdlZCwgeyBmbHVzaDogXCJwb3N0XCIsIGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZCgoKSA9PiBvbkNoYW5nZWQoc3RhdGUudmFsdWUpKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1c2VDb25maXJtRGlhbG9nKHJldmVhbGVkID0gdnVlRGVtaS5yZWYoZmFsc2UpKSB7XG4gIGNvbnN0IGNvbmZpcm1Ib29rID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBjYW5jZWxIb29rID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCByZXZlYWxIb29rID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBsZXQgX3Jlc29sdmUgPSBzaGFyZWQubm9vcDtcbiAgY29uc3QgcmV2ZWFsID0gKGRhdGEpID0+IHtcbiAgICByZXZlYWxIb29rLnRyaWdnZXIoZGF0YSk7XG4gICAgcmV2ZWFsZWQudmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb25maXJtID0gKGRhdGEpID0+IHtcbiAgICByZXZlYWxlZC52YWx1ZSA9IGZhbHNlO1xuICAgIGNvbmZpcm1Ib29rLnRyaWdnZXIoZGF0YSk7XG4gICAgX3Jlc29sdmUoeyBkYXRhLCBpc0NhbmNlbGVkOiBmYWxzZSB9KTtcbiAgfTtcbiAgY29uc3QgY2FuY2VsID0gKGRhdGEpID0+IHtcbiAgICByZXZlYWxlZC52YWx1ZSA9IGZhbHNlO1xuICAgIGNhbmNlbEhvb2sudHJpZ2dlcihkYXRhKTtcbiAgICBfcmVzb2x2ZSh7IGRhdGEsIGlzQ2FuY2VsZWQ6IHRydWUgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNSZXZlYWxlZDogdnVlRGVtaS5jb21wdXRlZCgoKSA9PiByZXZlYWxlZC52YWx1ZSksXG4gICAgcmV2ZWFsLFxuICAgIGNvbmZpcm0sXG4gICAgY2FuY2VsLFxuICAgIG9uUmV2ZWFsOiByZXZlYWxIb29rLm9uLFxuICAgIG9uQ29uZmlybTogY29uZmlybUhvb2sub24sXG4gICAgb25DYW5jZWw6IGNhbmNlbEhvb2sub25cbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlQ3NzVmFyKHByb3AsIHRhcmdldCwgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93LCBpbml0aWFsVmFsdWUgPSBcIlwiIH0gPSB7fSkge1xuICBjb25zdCB2YXJpYWJsZSA9IHZ1ZURlbWkucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IGVsUmVmID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB1bnJlZkVsZW1lbnQodGFyZ2V0KSB8fCAoKF9hID0gd2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kb2N1bWVudEVsZW1lbnQpO1xuICB9KTtcbiAgdnVlRGVtaS53YXRjaChbZWxSZWYsICgpID0+IHZ1ZURlbWkudW5yZWYocHJvcCldLCAoW2VsLCBwcm9wMl0pID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGVsICYmIHdpbmRvdykge1xuICAgICAgY29uc3QgdmFsdWUgPSAoX2EgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wMikpID09IG51bGwgPyB2b2lkIDAgOiBfYS50cmltKCk7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlIHx8IGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICB2dWVEZW1pLndhdGNoKHZhcmlhYmxlLCAodmFsKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGlmICgoX2EgPSBlbFJlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN0eWxlKVxuICAgICAgZWxSZWYudmFsdWUuc3R5bGUuc2V0UHJvcGVydHkodnVlRGVtaS51bnJlZihwcm9wKSwgdmFsKTtcbiAgfSk7XG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdXNlQ3VycmVudEVsZW1lbnQoKSB7XG4gIGNvbnN0IHZtID0gdnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgY29uc3QgY291bnQgPSB2dWVEZW1pLnJlZigwKTtcbiAgdnVlRGVtaS5vblVwZGF0ZWQoKCkgPT4ge1xuICAgIGNvdW50LnZhbHVlICs9IDE7XG4gIH0pO1xuICB2dWVEZW1pLm9uTW91bnRlZCgoKSA9PiB7XG4gICAgY291bnQudmFsdWUgKz0gMTtcbiAgfSk7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBjb3VudC52YWx1ZTtcbiAgICByZXR1cm4gdm0ucHJveHkuJGVsO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlQ3ljbGVMaXN0KGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIF9hO1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkuc2hhbGxvd1JlZigoX2EgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmluaXRpYWxWYWx1ZSkgIT0gbnVsbCA/IF9hIDogbGlzdFswXSk7XG4gIGNvbnN0IGluZGV4ID0gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgdmFyIF9hMjtcbiAgICAgIGxldCBpbmRleDIgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRJbmRleE9mKSA/IG9wdGlvbnMuZ2V0SW5kZXhPZihzdGF0ZS52YWx1ZSwgbGlzdCkgOiBsaXN0LmluZGV4T2Yoc3RhdGUudmFsdWUpO1xuICAgICAgaWYgKGluZGV4MiA8IDApXG4gICAgICAgIGluZGV4MiA9IChfYTIgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmZhbGxiYWNrSW5kZXgpICE9IG51bGwgPyBfYTIgOiAwO1xuICAgICAgcmV0dXJuIGluZGV4MjtcbiAgICB9LFxuICAgIHNldCh2KSB7XG4gICAgICBzZXQodik7XG4gICAgfVxuICB9KTtcbiAgZnVuY3Rpb24gc2V0KGkpIHtcbiAgICBjb25zdCBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBpbmRleDIgPSAoaSAlIGxlbmd0aCArIGxlbmd0aCkgJSBsZW5ndGg7XG4gICAgY29uc3QgdmFsdWUgPSBsaXN0W2luZGV4Ml07XG4gICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgZnVuY3Rpb24gc2hpZnQoZGVsdGEgPSAxKSB7XG4gICAgcmV0dXJuIHNldChpbmRleC52YWx1ZSArIGRlbHRhKTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KG4gPSAxKSB7XG4gICAgcmV0dXJuIHNoaWZ0KG4pO1xuICB9XG4gIGZ1bmN0aW9uIHByZXYobiA9IDEpIHtcbiAgICByZXR1cm4gc2hpZnQoLW4pO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhdGUsXG4gICAgaW5kZXgsXG4gICAgbmV4dCxcbiAgICBwcmV2XG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkZyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDcgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ3ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRpID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkaSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGkgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRnID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRnKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRnID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkaS5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGcoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGkpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGkoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kaS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkZyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDcgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ3KGEsIF9fZ2V0T3duUHJvcERlc2NzJDcoYikpO1xuZnVuY3Rpb24gdXNlRGFyayhvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHZhbHVlRGFyayA9IFwiZGFya1wiLFxuICAgIHZhbHVlTGlnaHQgPSBcIlwiLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG1vZGUgPSB1c2VDb2xvck1vZGUoX19zcHJlYWRQcm9wcyQ3KF9fc3ByZWFkVmFsdWVzJGcoe30sIG9wdGlvbnMpLCB7XG4gICAgb25DaGFuZ2VkOiAobW9kZTIsIGRlZmF1bHRIYW5kbGVyKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAob3B0aW9ucy5vbkNoYW5nZWQpXG4gICAgICAgIChfYSA9IG9wdGlvbnMub25DaGFuZ2VkKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBtb2RlMiA9PT0gXCJkYXJrXCIpO1xuICAgICAgZWxzZVxuICAgICAgICBkZWZhdWx0SGFuZGxlcihtb2RlMik7XG4gICAgfSxcbiAgICBtb2Rlczoge1xuICAgICAgZGFyazogdmFsdWVEYXJrLFxuICAgICAgbGlnaHQ6IHZhbHVlTGlnaHRcbiAgICB9XG4gIH0pKTtcbiAgY29uc3QgcHJlZmVycmVkRGFyayA9IHVzZVByZWZlcnJlZERhcmsoeyB3aW5kb3cgfSk7XG4gIGNvbnN0IGlzRGFyayA9IHZ1ZURlbWkuY29tcHV0ZWQoe1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBtb2RlLnZhbHVlID09PSBcImRhcmtcIjtcbiAgICB9LFxuICAgIHNldCh2KSB7XG4gICAgICBpZiAodiA9PT0gcHJlZmVycmVkRGFyay52YWx1ZSlcbiAgICAgICAgbW9kZS52YWx1ZSA9IFwiYXV0b1wiO1xuICAgICAgZWxzZVxuICAgICAgICBtb2RlLnZhbHVlID0gdiA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc0Rhcms7XG59XG5cbmNvbnN0IGZuQ2xvbmUgPSAodikgPT4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2KSk7XG5jb25zdCBmbkJ5cGFzcyA9ICh2KSA9PiB2O1xuY29uc3QgZm5TZXRTb3VyY2UgPSAoc291cmNlLCB2YWx1ZSkgPT4gc291cmNlLnZhbHVlID0gdmFsdWU7XG5mdW5jdGlvbiBkZWZhdWx0RHVtcChjbG9uZSkge1xuICByZXR1cm4gY2xvbmUgPyBzaGFyZWQuaXNGdW5jdGlvbihjbG9uZSkgPyBjbG9uZSA6IGZuQ2xvbmUgOiBmbkJ5cGFzcztcbn1cbmZ1bmN0aW9uIGRlZmF1bHRQYXJzZShjbG9uZSkge1xuICByZXR1cm4gY2xvbmUgPyBzaGFyZWQuaXNGdW5jdGlvbihjbG9uZSkgPyBjbG9uZSA6IGZuQ2xvbmUgOiBmbkJ5cGFzcztcbn1cbmZ1bmN0aW9uIHVzZU1hbnVhbFJlZkhpc3Rvcnkoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNsb25lID0gZmFsc2UsXG4gICAgZHVtcCA9IGRlZmF1bHREdW1wKGNsb25lKSxcbiAgICBwYXJzZSA9IGRlZmF1bHRQYXJzZShjbG9uZSksXG4gICAgc2V0U291cmNlID0gZm5TZXRTb3VyY2VcbiAgfSA9IG9wdGlvbnM7XG4gIGZ1bmN0aW9uIF9jcmVhdGVIaXN0b3J5UmVjb3JkKCkge1xuICAgIHJldHVybiB2dWVEZW1pLm1hcmtSYXcoe1xuICAgICAgc25hcHNob3Q6IGR1bXAoc291cmNlLnZhbHVlKSxcbiAgICAgIHRpbWVzdGFtcDogc2hhcmVkLnRpbWVzdGFtcCgpXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbGFzdCA9IHZ1ZURlbWkucmVmKF9jcmVhdGVIaXN0b3J5UmVjb3JkKCkpO1xuICBjb25zdCB1bmRvU3RhY2sgPSB2dWVEZW1pLnJlZihbXSk7XG4gIGNvbnN0IHJlZG9TdGFjayA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgY29uc3QgX3NldFNvdXJjZSA9IChyZWNvcmQpID0+IHtcbiAgICBzZXRTb3VyY2Uoc291cmNlLCBwYXJzZShyZWNvcmQuc25hcHNob3QpKTtcbiAgICBsYXN0LnZhbHVlID0gcmVjb3JkO1xuICB9O1xuICBjb25zdCBjb21taXQgPSAoKSA9PiB7XG4gICAgdW5kb1N0YWNrLnZhbHVlLnVuc2hpZnQobGFzdC52YWx1ZSk7XG4gICAgbGFzdC52YWx1ZSA9IF9jcmVhdGVIaXN0b3J5UmVjb3JkKCk7XG4gICAgaWYgKG9wdGlvbnMuY2FwYWNpdHkgJiYgdW5kb1N0YWNrLnZhbHVlLmxlbmd0aCA+IG9wdGlvbnMuY2FwYWNpdHkpXG4gICAgICB1bmRvU3RhY2sudmFsdWUuc3BsaWNlKG9wdGlvbnMuY2FwYWNpdHksIEluZmluaXR5KTtcbiAgICBpZiAocmVkb1N0YWNrLnZhbHVlLmxlbmd0aClcbiAgICAgIHJlZG9TdGFjay52YWx1ZS5zcGxpY2UoMCwgcmVkb1N0YWNrLnZhbHVlLmxlbmd0aCk7XG4gIH07XG4gIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgIHVuZG9TdGFjay52YWx1ZS5zcGxpY2UoMCwgdW5kb1N0YWNrLnZhbHVlLmxlbmd0aCk7XG4gICAgcmVkb1N0YWNrLnZhbHVlLnNwbGljZSgwLCByZWRvU3RhY2sudmFsdWUubGVuZ3RoKTtcbiAgfTtcbiAgY29uc3QgdW5kbyA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHVuZG9TdGFjay52YWx1ZS5zaGlmdCgpO1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgcmVkb1N0YWNrLnZhbHVlLnVuc2hpZnQobGFzdC52YWx1ZSk7XG4gICAgICBfc2V0U291cmNlKHN0YXRlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlZG8gPSAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSByZWRvU3RhY2sudmFsdWUuc2hpZnQoKTtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHVuZG9TdGFjay52YWx1ZS51bnNoaWZ0KGxhc3QudmFsdWUpO1xuICAgICAgX3NldFNvdXJjZShzdGF0ZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBfc2V0U291cmNlKGxhc3QudmFsdWUpO1xuICB9O1xuICBjb25zdCBoaXN0b3J5ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBbbGFzdC52YWx1ZSwgLi4udW5kb1N0YWNrLnZhbHVlXSk7XG4gIGNvbnN0IGNhblVuZG8gPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHVuZG9TdGFjay52YWx1ZS5sZW5ndGggPiAwKTtcbiAgY29uc3QgY2FuUmVkbyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gcmVkb1N0YWNrLnZhbHVlLmxlbmd0aCA+IDApO1xuICByZXR1cm4ge1xuICAgIHNvdXJjZSxcbiAgICB1bmRvU3RhY2ssXG4gICAgcmVkb1N0YWNrLFxuICAgIGxhc3QsXG4gICAgaGlzdG9yeSxcbiAgICBjYW5VbmRvLFxuICAgIGNhblJlZG8sXG4gICAgY2xlYXIsXG4gICAgY29tbWl0LFxuICAgIHJlc2V0LFxuICAgIHVuZG8sXG4gICAgcmVkb1xuICB9O1xufVxuXG52YXIgX19kZWZQcm9wJGYgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQ2ID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkNiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkaCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGggPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRoID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkZiA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkZihvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkZiA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGguY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRmKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRoKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRoKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGguY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGYoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQ2ID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkNihhLCBfX2dldE93blByb3BEZXNjcyQ2KGIpKTtcbmZ1bmN0aW9uIHVzZVJlZkhpc3Rvcnkoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRlZXAgPSBmYWxzZSxcbiAgICBmbHVzaCA9IFwicHJlXCIsXG4gICAgZXZlbnRGaWx0ZXJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBldmVudEZpbHRlcjogY29tcG9zZWRGaWx0ZXIsXG4gICAgcGF1c2UsXG4gICAgcmVzdW1lOiByZXN1bWVUcmFja2luZyxcbiAgICBpc0FjdGl2ZTogaXNUcmFja2luZ1xuICB9ID0gc2hhcmVkLnBhdXNhYmxlRmlsdGVyKGV2ZW50RmlsdGVyKTtcbiAgY29uc3Qge1xuICAgIGlnbm9yZVVwZGF0ZXMsXG4gICAgaWdub3JlUHJldkFzeW5jVXBkYXRlcyxcbiAgICBzdG9wXG4gIH0gPSBzaGFyZWQud2F0Y2hJZ25vcmFibGUoc291cmNlLCBjb21taXQsIHsgZGVlcCwgZmx1c2gsIGV2ZW50RmlsdGVyOiBjb21wb3NlZEZpbHRlciB9KTtcbiAgZnVuY3Rpb24gc2V0U291cmNlKHNvdXJjZTIsIHZhbHVlKSB7XG4gICAgaWdub3JlUHJldkFzeW5jVXBkYXRlcygpO1xuICAgIGlnbm9yZVVwZGF0ZXMoKCkgPT4ge1xuICAgICAgc291cmNlMi52YWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1hbnVhbEhpc3RvcnkgPSB1c2VNYW51YWxSZWZIaXN0b3J5KHNvdXJjZSwgX19zcHJlYWRQcm9wcyQ2KF9fc3ByZWFkVmFsdWVzJGYoe30sIG9wdGlvbnMpLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIHx8IGRlZXAsIHNldFNvdXJjZSB9KSk7XG4gIGNvbnN0IHsgY2xlYXIsIGNvbW1pdDogbWFudWFsQ29tbWl0IH0gPSBtYW51YWxIaXN0b3J5O1xuICBmdW5jdGlvbiBjb21taXQoKSB7XG4gICAgaWdub3JlUHJldkFzeW5jVXBkYXRlcygpO1xuICAgIG1hbnVhbENvbW1pdCgpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc3VtZShjb21taXROb3cpIHtcbiAgICByZXN1bWVUcmFja2luZygpO1xuICAgIGlmIChjb21taXROb3cpXG4gICAgICBjb21taXQoKTtcbiAgfVxuICBmdW5jdGlvbiBiYXRjaChmbikge1xuICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IGNhbmNlbGVkID0gdHJ1ZTtcbiAgICBpZ25vcmVVcGRhdGVzKCgpID0+IHtcbiAgICAgIGZuKGNhbmNlbCk7XG4gICAgfSk7XG4gICAgaWYgKCFjYW5jZWxlZClcbiAgICAgIGNvbW1pdCgpO1xuICB9XG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgc3RvcCgpO1xuICAgIGNsZWFyKCk7XG4gIH1cbiAgcmV0dXJuIF9fc3ByZWFkUHJvcHMkNihfX3NwcmVhZFZhbHVlcyRmKHt9LCBtYW51YWxIaXN0b3J5KSwge1xuICAgIGlzVHJhY2tpbmcsXG4gICAgcGF1c2UsXG4gICAgcmVzdW1lLFxuICAgIGNvbW1pdCxcbiAgICBiYXRjaCxcbiAgICBkaXNwb3NlXG4gIH0pO1xufVxuXG52YXIgX19kZWZQcm9wJGUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQ1ID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkNSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkZyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGcgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRnID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkZSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkZShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkZSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGcuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRlKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRnKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRnKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGcuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGUoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQ1ID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkNShhLCBfX2dldE93blByb3BEZXNjcyQ1KGIpKTtcbmZ1bmN0aW9uIHVzZURlYm91bmNlZFJlZkhpc3Rvcnkoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZmlsdGVyID0gb3B0aW9ucy5kZWJvdW5jZSA/IHNoYXJlZC5kZWJvdW5jZUZpbHRlcihvcHRpb25zLmRlYm91bmNlKSA6IHZvaWQgMDtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZVJlZkhpc3Rvcnkoc291cmNlLCBfX3NwcmVhZFByb3BzJDUoX19zcHJlYWRWYWx1ZXMkZSh7fSwgb3B0aW9ucyksIHsgZXZlbnRGaWx0ZXI6IGZpbHRlciB9KSk7XG4gIHJldHVybiBfX3NwcmVhZFZhbHVlcyRlKHt9LCBoaXN0b3J5KTtcbn1cblxuZnVuY3Rpb24gdXNlRGV2aWNlTW90aW9uKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvdyxcbiAgICBldmVudEZpbHRlciA9IHNoYXJlZC5ieXBhc3NGaWx0ZXJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFjY2VsZXJhdGlvbiA9IHZ1ZURlbWkucmVmKHsgeDogbnVsbCwgeTogbnVsbCwgejogbnVsbCB9KTtcbiAgY29uc3Qgcm90YXRpb25SYXRlID0gdnVlRGVtaS5yZWYoeyBhbHBoYTogbnVsbCwgYmV0YTogbnVsbCwgZ2FtbWE6IG51bGwgfSk7XG4gIGNvbnN0IGludGVydmFsID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSB2dWVEZW1pLnJlZih7XG4gICAgeDogbnVsbCxcbiAgICB5OiBudWxsLFxuICAgIHo6IG51bGxcbiAgfSk7XG4gIGlmICh3aW5kb3cpIHtcbiAgICBjb25zdCBvbkRldmljZU1vdGlvbiA9IHNoYXJlZC5jcmVhdGVGaWx0ZXJXcmFwcGVyKGV2ZW50RmlsdGVyLCAoZXZlbnQpID0+IHtcbiAgICAgIGFjY2VsZXJhdGlvbi52YWx1ZSA9IGV2ZW50LmFjY2VsZXJhdGlvbjtcbiAgICAgIGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkudmFsdWUgPSBldmVudC5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5O1xuICAgICAgcm90YXRpb25SYXRlLnZhbHVlID0gZXZlbnQucm90YXRpb25SYXRlO1xuICAgICAgaW50ZXJ2YWwudmFsdWUgPSBldmVudC5pbnRlcnZhbDtcbiAgICB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJkZXZpY2Vtb3Rpb25cIiwgb25EZXZpY2VNb3Rpb24pO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWNjZWxlcmF0aW9uLFxuICAgIGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksXG4gICAgcm90YXRpb25SYXRlLFxuICAgIGludGVydmFsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZURldmljZU9yaWVudGF0aW9uKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbih3aW5kb3cgJiYgXCJEZXZpY2VPcmllbnRhdGlvbkV2ZW50XCIgaW4gd2luZG93KTtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgYWxwaGEgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgYmV0YSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBnYW1tYSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBpZiAod2luZG93ICYmIGlzU3VwcG9ydGVkKSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZGV2aWNlb3JpZW50YXRpb25cIiwgKGV2ZW50KSA9PiB7XG4gICAgICBpc0Fic29sdXRlLnZhbHVlID0gZXZlbnQuYWJzb2x1dGU7XG4gICAgICBhbHBoYS52YWx1ZSA9IGV2ZW50LmFscGhhO1xuICAgICAgYmV0YS52YWx1ZSA9IGV2ZW50LmJldGE7XG4gICAgICBnYW1tYS52YWx1ZSA9IGV2ZW50LmdhbW1hO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgaXNBYnNvbHV0ZSxcbiAgICBhbHBoYSxcbiAgICBiZXRhLFxuICAgIGdhbW1hXG4gIH07XG59XG5cbmNvbnN0IERFVklDRV9QSVhFTF9SQVRJT19TQ0FMRVMgPSBbXG4gIDEsXG4gIDEuMzI1LFxuICAxLjQsXG4gIDEuNSxcbiAgMS44LFxuICAyLFxuICAyLjQsXG4gIDIuNSxcbiAgMi43NSxcbiAgMyxcbiAgMy41LFxuICA0XG5dO1xuZnVuY3Rpb24gdXNlRGV2aWNlUGl4ZWxSYXRpbyh7XG4gIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbn0gPSB7fSkge1xuICBpZiAoIXdpbmRvdykge1xuICAgIHJldHVybiB7XG4gICAgICBwaXhlbFJhdGlvOiB2dWVEZW1pLnJlZigxKVxuICAgIH07XG4gIH1cbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHZ1ZURlbWkucmVmKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgY29uc3QgaGFuZGxlRGV2aWNlUGl4ZWxSYXRpbyA9ICgpID0+IHtcbiAgICBwaXhlbFJhdGlvLnZhbHVlID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIH07XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInJlc2l6ZVwiLCBoYW5kbGVEZXZpY2VQaXhlbFJhdGlvLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIERFVklDRV9QSVhFTF9SQVRJT19TQ0FMRVMuZm9yRWFjaCgoZHBweCkgPT4ge1xuICAgIGNvbnN0IG1xbE1pbiA9IHVzZU1lZGlhUXVlcnkoYHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAke2RwcHh9ZHBweClgKTtcbiAgICBjb25zdCBtcWxNYXggPSB1c2VNZWRpYVF1ZXJ5KGBzY3JlZW4gYW5kIChtYXgtcmVzb2x1dGlvbjogJHtkcHB4fWRwcHgpYCk7XG4gICAgdnVlRGVtaS53YXRjaChbbXFsTWluLCBtcWxNYXhdLCBoYW5kbGVEZXZpY2VQaXhlbFJhdGlvKTtcbiAgfSk7XG4gIHJldHVybiB7IHBpeGVsUmF0aW8gfTtcbn1cblxuZnVuY3Rpb24gdXNlUGVybWlzc2lvbihwZXJtaXNzaW9uRGVzYywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250cm9scyA9IGZhbHNlLFxuICAgIG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3JcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbihuYXZpZ2F0b3IgJiYgXCJwZXJtaXNzaW9uc1wiIGluIG5hdmlnYXRvcik7XG4gIGxldCBwZXJtaXNzaW9uU3RhdHVzO1xuICBjb25zdCBkZXNjID0gdHlwZW9mIHBlcm1pc3Npb25EZXNjID09PSBcInN0cmluZ1wiID8geyBuYW1lOiBwZXJtaXNzaW9uRGVzYyB9IDogcGVybWlzc2lvbkRlc2M7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYgKHBlcm1pc3Npb25TdGF0dXMpXG4gICAgICBzdGF0ZS52YWx1ZSA9IHBlcm1pc3Npb25TdGF0dXMuc3RhdGU7XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gc2hhcmVkLmNyZWF0ZVNpbmdsZXRvblByb21pc2UoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFwZXJtaXNzaW9uU3RhdHVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwZXJtaXNzaW9uU3RhdHVzID0gYXdhaXQgbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KGRlc2MpO1xuICAgICAgICB1c2VFdmVudExpc3RlbmVyKHBlcm1pc3Npb25TdGF0dXMsIFwiY2hhbmdlXCIsIG9uQ2hhbmdlKTtcbiAgICAgICAgb25DaGFuZ2UoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3RhdGUudmFsdWUgPSBcInByb21wdFwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGVybWlzc2lvblN0YXR1cztcbiAgfSk7XG4gIHF1ZXJ5KCk7XG4gIGlmIChjb250cm9scykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZSxcbiAgICAgIGlzU3VwcG9ydGVkLFxuICAgICAgcXVlcnlcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VEZXZpY2VzTGlzdChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IsXG4gICAgcmVxdWVzdFBlcm1pc3Npb25zID0gZmFsc2UsXG4gICAgY29uc3RyYWludHMgPSB7IGF1ZGlvOiB0cnVlLCB2aWRlbzogdHJ1ZSB9LFxuICAgIG9uVXBkYXRlZFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGV2aWNlcyA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgY29uc3QgdmlkZW9JbnB1dHMgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGRldmljZXMudmFsdWUuZmlsdGVyKChpKSA9PiBpLmtpbmQgPT09IFwidmlkZW9pbnB1dFwiKSk7XG4gIGNvbnN0IGF1ZGlvSW5wdXRzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBkZXZpY2VzLnZhbHVlLmZpbHRlcigoaSkgPT4gaS5raW5kID09PSBcImF1ZGlvaW5wdXRcIikpO1xuICBjb25zdCBhdWRpb091dHB1dHMgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGRldmljZXMudmFsdWUuZmlsdGVyKChpKSA9PiBpLmtpbmQgPT09IFwiYXVkaW9vdXRwdXRcIikpO1xuICBsZXQgaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgY29uc3QgcGVybWlzc2lvbkdyYW50ZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGRldmljZXMudmFsdWUgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKTtcbiAgICBvblVwZGF0ZWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uVXBkYXRlZChkZXZpY2VzLnZhbHVlKTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBlbnN1cmVQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwZXJtaXNzaW9uR3JhbnRlZC52YWx1ZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHsgc3RhdGUsIHF1ZXJ5IH0gPSB1c2VQZXJtaXNzaW9uKFwiY2FtZXJhXCIsIHsgY29udHJvbHM6IHRydWUgfSk7XG4gICAgYXdhaXQgcXVlcnkoKTtcbiAgICBpZiAoc3RhdGUudmFsdWUgIT09IFwiZ3JhbnRlZFwiKSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShjb25zdHJhaW50cyk7XG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCgodCkgPT4gdC5zdG9wKCkpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgICBwZXJtaXNzaW9uR3JhbnRlZC52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcm1pc3Npb25HcmFudGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBlcm1pc3Npb25HcmFudGVkLnZhbHVlO1xuICB9XG4gIGlmIChuYXZpZ2F0b3IpIHtcbiAgICBpc1N1cHBvcnRlZCA9IEJvb2xlYW4obmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMpO1xuICAgIGlmIChpc1N1cHBvcnRlZCkge1xuICAgICAgaWYgKHJlcXVlc3RQZXJtaXNzaW9ucylcbiAgICAgICAgZW5zdXJlUGVybWlzc2lvbnMoKTtcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIobmF2aWdhdG9yLm1lZGlhRGV2aWNlcywgXCJkZXZpY2VjaGFuZ2VcIiwgdXBkYXRlKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGRldmljZXMsXG4gICAgZW5zdXJlUGVybWlzc2lvbnMsXG4gICAgcGVybWlzc2lvbkdyYW50ZWQsXG4gICAgdmlkZW9JbnB1dHMsXG4gICAgYXVkaW9JbnB1dHMsXG4gICAgYXVkaW9PdXRwdXRzLFxuICAgIGlzU3VwcG9ydGVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZURpc3BsYXlNZWRpYShvcHRpb25zID0ge30pIHtcbiAgdmFyIF9hLCBfYjtcbiAgY29uc3QgZW5hYmxlZCA9IHZ1ZURlbWkucmVmKChfYSA9IG9wdGlvbnMuZW5hYmxlZCkgIT0gbnVsbCA/IF9hIDogZmFsc2UpO1xuICBjb25zdCB2aWRlbyA9IG9wdGlvbnMudmlkZW87XG4gIGNvbnN0IGF1ZGlvID0gb3B0aW9ucy5hdWRpbztcbiAgY29uc3QgeyBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IEJvb2xlYW4oKF9iID0gbmF2aWdhdG9yID09IG51bGwgPyB2b2lkIDAgOiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RGlzcGxheU1lZGlhKTtcbiAgY29uc3QgY29uc3RyYWludCA9IHsgYXVkaW8sIHZpZGVvIH07XG4gIGNvbnN0IHN0cmVhbSA9IHZ1ZURlbWkuc2hhbGxvd1JlZigpO1xuICBhc3luYyBmdW5jdGlvbiBfc3RhcnQoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZCB8fCBzdHJlYW0udmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgc3RyZWFtLnZhbHVlID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXREaXNwbGF5TWVkaWEoY29uc3RyYWludCk7XG4gICAgcmV0dXJuIHN0cmVhbS52YWx1ZTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBfc3RvcCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIChfYTIgPSBzdHJlYW0udmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodCkgPT4gdC5zdG9wKCkpO1xuICAgIHN0cmVhbS52YWx1ZSA9IHZvaWQgMDtcbiAgfVxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIF9zdG9wKCk7XG4gICAgZW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGF3YWl0IF9zdGFydCgpO1xuICAgIGlmIChzdHJlYW0udmFsdWUpXG4gICAgICBlbmFibGVkLnZhbHVlID0gdHJ1ZTtcbiAgICByZXR1cm4gc3RyZWFtLnZhbHVlO1xuICB9XG4gIHZ1ZURlbWkud2F0Y2goZW5hYmxlZCwgKHYpID0+IHtcbiAgICBpZiAodilcbiAgICAgIF9zdGFydCgpO1xuICAgIGVsc2VcbiAgICAgIF9zdG9wKCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIHN0cmVhbSxcbiAgICBzdGFydCxcbiAgICBzdG9wLFxuICAgIGVuYWJsZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRG9jdW1lbnRWaXNpYmlsaXR5KHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQgfSA9IHt9KSB7XG4gIGlmICghZG9jdW1lbnQpXG4gICAgcmV0dXJuIHZ1ZURlbWkucmVmKFwidmlzaWJsZVwiKTtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IHZ1ZURlbWkucmVmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCAoKSA9PiB7XG4gICAgdmlzaWJpbGl0eS52YWx1ZSA9IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgfSk7XG4gIHJldHVybiB2aXNpYmlsaXR5O1xufVxuXG52YXIgX19kZWZQcm9wJGQgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQ0ID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkNCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRmID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkZCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkZChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkZCA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGYuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRkKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRmKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRmKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGYuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGQoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQ0ID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkNChhLCBfX2dldE93blByb3BEZXNjcyQ0KGIpKTtcbmZ1bmN0aW9uIHVzZURyYWdnYWJsZSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCBkcmFnZ2luZ0VsZW1lbnQgPSAoX2EgPSBvcHRpb25zLmRyYWdnaW5nRWxlbWVudCkgIT0gbnVsbCA/IF9hIDogZGVmYXVsdFdpbmRvdztcbiAgY29uc3QgcG9zaXRpb24gPSB2dWVEZW1pLnJlZigoX2IgPSBvcHRpb25zLmluaXRpYWxWYWx1ZSkgIT0gbnVsbCA/IF9iIDogeyB4OiAwLCB5OiAwIH0pO1xuICBjb25zdCBwcmVzc2VkRGVsdGEgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBmaWx0ZXJFdmVudCA9IChlKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMucG9pbnRlclR5cGVzKVxuICAgICAgcmV0dXJuIG9wdGlvbnMucG9pbnRlclR5cGVzLmluY2x1ZGVzKGUucG9pbnRlclR5cGUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBjb25zdCBoYW5kbGVFdmVudCA9IChlKSA9PiB7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYob3B0aW9ucy5wcmV2ZW50RGVmYXVsdCkpXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYob3B0aW9ucy5zdG9wUHJvcGFnYXRpb24pKVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoZSkgPT4ge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCFmaWx0ZXJFdmVudChlKSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAodnVlRGVtaS51bnJlZihvcHRpb25zLmV4YWN0KSAmJiBlLnRhcmdldCAhPT0gdnVlRGVtaS51bnJlZih0YXJnZXQpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJlY3QgPSB2dWVEZW1pLnVucmVmKHRhcmdldCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcG9zID0ge1xuICAgICAgeDogZS5wYWdlWCAtIHJlY3QubGVmdCxcbiAgICAgIHk6IGUucGFnZVkgLSByZWN0LnRvcFxuICAgIH07XG4gICAgaWYgKCgoX2EyID0gb3B0aW9ucy5vblN0YXJ0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwob3B0aW9ucywgcG9zLCBlKSkgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuO1xuICAgIHByZXNzZWREZWx0YS52YWx1ZSA9IHBvcztcbiAgICBoYW5kbGVFdmVudChlKTtcbiAgfTtcbiAgY29uc3QgbW92ZSA9IChlKSA9PiB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoIWZpbHRlckV2ZW50KGUpKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghcHJlc3NlZERlbHRhLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHBvc2l0aW9uLnZhbHVlID0ge1xuICAgICAgeDogZS5wYWdlWCAtIHByZXNzZWREZWx0YS52YWx1ZS54LFxuICAgICAgeTogZS5wYWdlWSAtIHByZXNzZWREZWx0YS52YWx1ZS55XG4gICAgfTtcbiAgICAoX2EyID0gb3B0aW9ucy5vbk1vdmUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChvcHRpb25zLCBwb3NpdGlvbi52YWx1ZSwgZSk7XG4gICAgaGFuZGxlRXZlbnQoZSk7XG4gIH07XG4gIGNvbnN0IGVuZCA9IChlKSA9PiB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoIWZpbHRlckV2ZW50KGUpKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghcHJlc3NlZERlbHRhLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHByZXNzZWREZWx0YS52YWx1ZSA9IHZvaWQgMDtcbiAgICAoX2EyID0gb3B0aW9ucy5vbkVuZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG9wdGlvbnMsIHBvc2l0aW9uLnZhbHVlLCBlKTtcbiAgICBoYW5kbGVFdmVudChlKTtcbiAgfTtcbiAgaWYgKHNoYXJlZC5pc0NsaWVudCkge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBvaW50ZXJkb3duXCIsIHN0YXJ0LCB0cnVlKTtcbiAgICB1c2VFdmVudExpc3RlbmVyKGRyYWdnaW5nRWxlbWVudCwgXCJwb2ludGVybW92ZVwiLCBtb3ZlLCB0cnVlKTtcbiAgICB1c2VFdmVudExpc3RlbmVyKGRyYWdnaW5nRWxlbWVudCwgXCJwb2ludGVydXBcIiwgZW5kLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gX19zcHJlYWRQcm9wcyQ0KF9fc3ByZWFkVmFsdWVzJGQoe30sIHNoYXJlZC50b1JlZnMocG9zaXRpb24pKSwge1xuICAgIHBvc2l0aW9uLFxuICAgIGlzRHJhZ2dpbmc6IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gISFwcmVzc2VkRGVsdGEudmFsdWUpLFxuICAgIHN0eWxlOiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGBsZWZ0OiR7cG9zaXRpb24udmFsdWUueH1weDt0b3A6JHtwb3NpdGlvbi52YWx1ZS55fXB4O2ApXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VEcm9wWm9uZSh0YXJnZXQsIG9uRHJvcCkge1xuICBjb25zdCBpc092ZXJEcm9wWm9uZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgbGV0IGNvdW50ZXIgPSAwO1xuICBpZiAoc2hhcmVkLmlzQ2xpZW50KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZHJhZ2VudGVyXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvdW50ZXIgKz0gMTtcbiAgICAgIGlzT3ZlckRyb3Bab25lLnZhbHVlID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJkcmFnb3ZlclwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZHJhZ2xlYXZlXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvdW50ZXIgLT0gMTtcbiAgICAgIGlmIChjb3VudGVyID09PSAwKVxuICAgICAgICBpc092ZXJEcm9wWm9uZS52YWx1ZSA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImRyb3BcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvdW50ZXIgPSAwO1xuICAgICAgaXNPdmVyRHJvcFpvbmUudmFsdWUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSgoX2IgPSAoX2EgPSBldmVudC5kYXRhVHJhbnNmZXIpID09IG51bGwgPyB2b2lkIDAgOiBfYS5maWxlcykgIT0gbnVsbCA/IF9iIDogW10pO1xuICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBvbkRyb3AobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9uRHJvcChmaWxlcyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc092ZXJEcm9wWm9uZVxuICB9O1xufVxuXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRlID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fb2JqUmVzdCQyID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkZS5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkZSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkZShzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kZS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIodGFyZ2V0LCBjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBfYSwgb2JzZXJ2ZXJPcHRpb25zID0gX19vYmpSZXN0JDIoX2EsIFtcIndpbmRvd1wiXSk7XG4gIGxldCBvYnNlcnZlcjtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSB3aW5kb3cgJiYgXCJSZXNpemVPYnNlcnZlclwiIGluIHdpbmRvdztcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIG9ic2VydmVyID0gdm9pZCAwO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RvcFdhdGNoID0gdnVlRGVtaS53YXRjaCgoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSwgKGVsKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmIChpc1N1cHBvcnRlZCAmJiB3aW5kb3cgJiYgZWwpIHtcbiAgICAgIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWwsIG9ic2VydmVyT3B0aW9ucyk7XG4gICAgfVxuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSwgZmx1c2g6IFwicG9zdFwiIH0pO1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBzdG9wV2F0Y2goKTtcbiAgfTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIHN0b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRWxlbWVudEJvdW5kaW5nKHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICByZXNldCA9IHRydWUsXG4gICAgd2luZG93UmVzaXplID0gdHJ1ZSxcbiAgICB3aW5kb3dTY3JvbGwgPSB0cnVlLFxuICAgIGltbWVkaWF0ZSA9IHRydWVcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGhlaWdodCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBib3R0b20gPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgbGVmdCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCByaWdodCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCB0b3AgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3Qgd2lkdGggPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgeCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCB5ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBlbCA9IHVucmVmRWxlbWVudCh0YXJnZXQpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGlmIChyZXNldCkge1xuICAgICAgICBoZWlnaHQudmFsdWUgPSAwO1xuICAgICAgICBib3R0b20udmFsdWUgPSAwO1xuICAgICAgICBsZWZ0LnZhbHVlID0gMDtcbiAgICAgICAgcmlnaHQudmFsdWUgPSAwO1xuICAgICAgICB0b3AudmFsdWUgPSAwO1xuICAgICAgICB3aWR0aC52YWx1ZSA9IDA7XG4gICAgICAgIHgudmFsdWUgPSAwO1xuICAgICAgICB5LnZhbHVlID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhlaWdodC52YWx1ZSA9IHJlY3QuaGVpZ2h0O1xuICAgIGJvdHRvbS52YWx1ZSA9IHJlY3QuYm90dG9tO1xuICAgIGxlZnQudmFsdWUgPSByZWN0LmxlZnQ7XG4gICAgcmlnaHQudmFsdWUgPSByZWN0LnJpZ2h0O1xuICAgIHRvcC52YWx1ZSA9IHJlY3QudG9wO1xuICAgIHdpZHRoLnZhbHVlID0gcmVjdC53aWR0aDtcbiAgICB4LnZhbHVlID0gcmVjdC54O1xuICAgIHkudmFsdWUgPSByZWN0Lnk7XG4gIH1cbiAgdXNlUmVzaXplT2JzZXJ2ZXIodGFyZ2V0LCB1cGRhdGUpO1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLCAoZWxlKSA9PiAhZWxlICYmIHVwZGF0ZSgpKTtcbiAgaWYgKHdpbmRvd1Njcm9sbClcbiAgICB1c2VFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHVwZGF0ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICBpZiAod2luZG93UmVzaXplKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdXBkYXRlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIHNoYXJlZC50cnlPbk1vdW50ZWQoKCkgPT4ge1xuICAgIGlmIChpbW1lZGlhdGUpXG4gICAgICB1cGRhdGUoKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaGVpZ2h0LFxuICAgIGJvdHRvbSxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aCxcbiAgICB4LFxuICAgIHksXG4gICAgdXBkYXRlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVJhZkZuKGZuLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNBY3RpdmUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGxldCByYWZJZCA9IG51bGw7XG4gIGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgaWYgKCFpc0FjdGl2ZS52YWx1ZSB8fCAhd2luZG93KVxuICAgICAgcmV0dXJuO1xuICAgIGZuKCk7XG4gICAgcmFmSWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuICB9XG4gIGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICBpZiAoIWlzQWN0aXZlLnZhbHVlICYmIHdpbmRvdykge1xuICAgICAgaXNBY3RpdmUudmFsdWUgPSB0cnVlO1xuICAgICAgbG9vcCgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChyYWZJZCAhPSBudWxsICYmIHdpbmRvdykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgIHJhZklkID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgaWYgKGltbWVkaWF0ZSlcbiAgICByZXN1bWUoKTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHBhdXNlKTtcbiAgcmV0dXJuIHtcbiAgICBpc0FjdGl2ZSxcbiAgICBwYXVzZSxcbiAgICByZXN1bWVcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCRjID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRkID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkYyA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkYyhvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkYyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGQuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRjKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRkKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRkKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGQuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGMoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VFbGVtZW50QnlQb2ludChvcHRpb25zKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgeyB4LCB5IH0gPSBvcHRpb25zO1xuICBjb25zdCBjb250cm9scyA9IHVzZVJhZkZuKCgpID0+IHtcbiAgICBlbGVtZW50LnZhbHVlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh2dWVEZW1pLnVucmVmKHgpLCB2dWVEZW1pLnVucmVmKHkpKTtcbiAgfSk7XG4gIHJldHVybiBfX3NwcmVhZFZhbHVlcyRjKHtcbiAgICBlbGVtZW50XG4gIH0sIGNvbnRyb2xzKTtcbn1cblxuZnVuY3Rpb24gdXNlRWxlbWVudEhvdmVyKGVsKSB7XG4gIGNvbnN0IGlzSG92ZXJlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihlbCwgXCJtb3VzZWVudGVyXCIsICgpID0+IGlzSG92ZXJlZC52YWx1ZSA9IHRydWUpO1xuICB1c2VFdmVudExpc3RlbmVyKGVsLCBcIm1vdXNlbGVhdmVcIiwgKCkgPT4gaXNIb3ZlcmVkLnZhbHVlID0gZmFsc2UpO1xuICByZXR1cm4gaXNIb3ZlcmVkO1xufVxuXG5mdW5jdGlvbiB1c2VFbGVtZW50U2l6ZSh0YXJnZXQsIGluaXRpYWxTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB3aWR0aCA9IHZ1ZURlbWkucmVmKGluaXRpYWxTaXplLndpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFNpemUuaGVpZ2h0KTtcbiAgdXNlUmVzaXplT2JzZXJ2ZXIodGFyZ2V0LCAoW2VudHJ5XSkgPT4ge1xuICAgIHdpZHRoLnZhbHVlID0gZW50cnkuY29udGVudFJlY3Qud2lkdGg7XG4gICAgaGVpZ2h0LnZhbHVlID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICB9LCBvcHRpb25zKTtcbiAgdnVlRGVtaS53YXRjaCgoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSwgKGVsZSkgPT4ge1xuICAgIHdpZHRoLnZhbHVlID0gZWxlID8gaW5pdGlhbFNpemUud2lkdGggOiAwO1xuICAgIGhlaWdodC52YWx1ZSA9IGVsZSA/IGluaXRpYWxTaXplLmhlaWdodCA6IDA7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VFbGVtZW50VmlzaWJpbGl0eShlbGVtZW50LCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csIHNjcm9sbFRhcmdldCB9ID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgdGVzdEJvdW5kaW5nID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93KVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgIGlmICghdnVlRGVtaS51bnJlZihlbGVtZW50KSkge1xuICAgICAgZWxlbWVudElzVmlzaWJsZS52YWx1ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWN0ID0gdnVlRGVtaS51bnJlZihlbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGVsZW1lbnRJc1Zpc2libGUudmFsdWUgPSByZWN0LnRvcCA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmIHJlY3QubGVmdCA8PSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSAmJiByZWN0LmJvdHRvbSA+PSAwICYmIHJlY3QucmlnaHQgPj0gMDtcbiAgICB9XG4gIH07XG4gIHNoYXJlZC50cnlPbk1vdW50ZWQodGVzdEJvdW5kaW5nKTtcbiAgaWYgKHdpbmRvdylcbiAgICBzaGFyZWQudHJ5T25Nb3VudGVkKCgpID0+IHVzZUV2ZW50TGlzdGVuZXIodnVlRGVtaS51bnJlZihzY3JvbGxUYXJnZXQpIHx8IHdpbmRvdywgXCJzY3JvbGxcIiwgdGVzdEJvdW5kaW5nLCB7IGNhcHR1cmU6IGZhbHNlLCBwYXNzaXZlOiB0cnVlIH0pKTtcbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG59XG5cbmNvbnN0IGV2ZW50cyA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gdXNlRXZlbnRCdXMoa2V5KSB7XG4gIGNvbnN0IHNjb3BlID0gdnVlRGVtaS5nZXRDdXJyZW50U2NvcGUoKTtcbiAgZnVuY3Rpb24gb24obGlzdGVuZXIpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gZXZlbnRzLmdldChrZXkpIHx8IFtdO1xuICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICBldmVudHMuc2V0KGtleSwgbGlzdGVuZXJzKTtcbiAgICBjb25zdCBfb2ZmID0gKCkgPT4gb2ZmKGxpc3RlbmVyKTtcbiAgICAoX2EgPSBzY29wZSA9PSBudWxsID8gdm9pZCAwIDogc2NvcGUuY2xlYW51cHMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wdXNoKF9vZmYpO1xuICAgIHJldHVybiBfb2ZmO1xuICB9XG4gIGZ1bmN0aW9uIG9uY2UobGlzdGVuZXIpIHtcbiAgICBmdW5jdGlvbiBfbGlzdGVuZXIoLi4uYXJncykge1xuICAgICAgb2ZmKF9saXN0ZW5lcik7XG4gICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIG9uKF9saXN0ZW5lcik7XG4gIH1cbiAgZnVuY3Rpb24gb2ZmKGxpc3RlbmVyKSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gZXZlbnRzLmdldChrZXkpO1xuICAgIGlmICghbGlzdGVuZXJzKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgZXZlbnRzLmRlbGV0ZShrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGV2ZW50cy5kZWxldGUoa2V5KTtcbiAgfVxuICBmdW5jdGlvbiBlbWl0KGV2ZW50LCBwYXlsb2FkKSB7XG4gICAgdmFyIF9hO1xuICAgIChfYSA9IGV2ZW50cy5nZXQoa2V5KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKHYpID0+IHYoZXZlbnQsIHBheWxvYWQpKTtcbiAgfVxuICByZXR1cm4geyBvbiwgb25jZSwgb2ZmLCBlbWl0LCByZXNldCB9O1xufVxuXG5mdW5jdGlvbiB1c2VFdmVudFNvdXJjZSh1cmwsIGV2ZW50cyA9IFtdLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZXZlbnQgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBzdGF0dXMgPSB2dWVEZW1pLnJlZihcIkNPTk5FQ1RJTkdcIik7XG4gIGNvbnN0IGV2ZW50U291cmNlID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHtcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKGV2ZW50U291cmNlLnZhbHVlKSB7XG4gICAgICBldmVudFNvdXJjZS52YWx1ZS5jbG9zZSgpO1xuICAgICAgZXZlbnRTb3VyY2UudmFsdWUgPSBudWxsO1xuICAgICAgc3RhdHVzLnZhbHVlID0gXCJDTE9TRURcIjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGVzID0gbmV3IEV2ZW50U291cmNlKHVybCwgeyB3aXRoQ3JlZGVudGlhbHMgfSk7XG4gIGV2ZW50U291cmNlLnZhbHVlID0gZXM7XG4gIGVzLm9ub3BlbiA9ICgpID0+IHtcbiAgICBzdGF0dXMudmFsdWUgPSBcIk9QRU5cIjtcbiAgICBlcnJvci52YWx1ZSA9IG51bGw7XG4gIH07XG4gIGVzLm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgIHN0YXR1cy52YWx1ZSA9IFwiQ0xPU0VEXCI7XG4gICAgZXJyb3IudmFsdWUgPSBlO1xuICB9O1xuICBlcy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgIGV2ZW50LnZhbHVlID0gbnVsbDtcbiAgICBkYXRhLnZhbHVlID0gZS5kYXRhO1xuICB9O1xuICBmb3IgKGNvbnN0IGV2ZW50X25hbWUgb2YgZXZlbnRzKSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihlcywgZXZlbnRfbmFtZSwgKGUpID0+IHtcbiAgICAgIGV2ZW50LnZhbHVlID0gZXZlbnRfbmFtZTtcbiAgICAgIGRhdGEudmFsdWUgPSBlLmRhdGEgfHwgbnVsbDtcbiAgICB9KTtcbiAgfVxuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgIGNsb3NlKCk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGV2ZW50U291cmNlLFxuICAgIGV2ZW50LFxuICAgIGRhdGEsXG4gICAgc3RhdHVzLFxuICAgIGVycm9yLFxuICAgIGNsb3NlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZUV5ZURyb3BwZXIob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgaW5pdGlhbFZhbHVlID0gXCJcIiB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJFeWVEcm9wcGVyXCIgaW4gd2luZG93KTtcbiAgY29uc3Qgc1JHQkhleCA9IHZ1ZURlbWkucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW4ob3Blbk9wdGlvbnMpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGV5ZURyb3BwZXIgPSBuZXcgd2luZG93LkV5ZURyb3BwZXIoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleWVEcm9wcGVyLm9wZW4ob3Blbk9wdGlvbnMpO1xuICAgIHNSR0JIZXgudmFsdWUgPSByZXN1bHQuc1JHQkhleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiB7IGlzU3VwcG9ydGVkLCBzUkdCSGV4LCBvcGVuIH07XG59XG5cbmZ1bmN0aW9uIHVzZUZhdmljb24obmV3SWNvbiA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYmFzZVVybCA9IFwiXCIsXG4gICAgcmVsID0gXCJpY29uXCIsXG4gICAgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnRcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZhdmljb24gPSB2dWVEZW1pLmlzUmVmKG5ld0ljb24pID8gbmV3SWNvbiA6IHZ1ZURlbWkucmVmKG5ld0ljb24pO1xuICBjb25zdCBhcHBseUljb24gPSAoaWNvbikgPT4ge1xuICAgIGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoYGxpbmtbcmVsKj1cIiR7cmVsfVwiXWApLmZvckVhY2goKGVsKSA9PiBlbC5ocmVmID0gYCR7YmFzZVVybH0ke2ljb259YCk7XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goZmF2aWNvbiwgKGksIG8pID0+IHtcbiAgICBpZiAoc2hhcmVkLmlzU3RyaW5nKGkpICYmIGkgIT09IG8pXG4gICAgICBhcHBseUljb24oaSk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICByZXR1cm4gZmF2aWNvbjtcbn1cblxudmFyIF9fZGVmUHJvcCRiID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRjID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kYyA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJGIgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJGIob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJGIgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRjLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkYihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkYylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkYyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRjLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCRiKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMyA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDMoYSwgX19nZXRPd25Qcm9wRGVzY3MkMyhiKSk7XG5jb25zdCBwYXlsb2FkTWFwcGluZyA9IHtcbiAganNvbjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gIHRleHQ6IFwidGV4dC9wbGFpblwiLFxuICBmb3JtRGF0YTogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJcbn07XG5mdW5jdGlvbiBpc0ZldGNoT3B0aW9ucyhvYmopIHtcbiAgcmV0dXJuIHNoYXJlZC5jb250YWluc1Byb3Aob2JqLCBcImltbWVkaWF0ZVwiLCBcInJlZmV0Y2hcIiwgXCJpbml0aWFsRGF0YVwiLCBcInRpbWVvdXRcIiwgXCJiZWZvcmVGZXRjaFwiLCBcImFmdGVyRmV0Y2hcIiwgXCJvbkZldGNoRXJyb3JcIiwgXCJmZXRjaFwiKTtcbn1cbmZ1bmN0aW9uIGhlYWRlcnNUb09iamVjdChoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgSGVhZGVycyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycylcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFsuLi5oZWFkZXJzLmVudHJpZXMoKV0pO1xuICByZXR1cm4gaGVhZGVycztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoKGNvbmZpZyA9IHt9KSB7XG4gIGNvbnN0IF9vcHRpb25zID0gY29uZmlnLm9wdGlvbnMgfHwge307XG4gIGNvbnN0IF9mZXRjaE9wdGlvbnMgPSBjb25maWcuZmV0Y2hPcHRpb25zIHx8IHt9O1xuICBmdW5jdGlvbiB1c2VGYWN0b3J5RmV0Y2godXJsLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgY29tcHV0ZWRVcmwgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGNvbmZpZy5iYXNlVXJsID8gam9pblBhdGhzKHZ1ZURlbWkudW5yZWYoY29uZmlnLmJhc2VVcmwpLCB2dWVEZW1pLnVucmVmKHVybCkpIDogdnVlRGVtaS51bnJlZih1cmwpKTtcbiAgICBsZXQgb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIGxldCBmZXRjaE9wdGlvbnMgPSBfZmV0Y2hPcHRpb25zO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpc0ZldGNoT3B0aW9ucyhhcmdzWzBdKSkge1xuICAgICAgICBvcHRpb25zID0gX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBvcHRpb25zKSwgYXJnc1swXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaE9wdGlvbnMgPSBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBmZXRjaE9wdGlvbnMpLCBhcmdzWzBdKSwge1xuICAgICAgICAgIGhlYWRlcnM6IF9fc3ByZWFkVmFsdWVzJGIoX19zcHJlYWRWYWx1ZXMkYih7fSwgaGVhZGVyc1RvT2JqZWN0KGZldGNoT3B0aW9ucy5oZWFkZXJzKSB8fCB7fSksIGhlYWRlcnNUb09iamVjdChhcmdzWzBdLmhlYWRlcnMpIHx8IHt9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSAmJiBpc0ZldGNoT3B0aW9ucyhhcmdzWzFdKSlcbiAgICAgIG9wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIG9wdGlvbnMpLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdXNlRmV0Y2goY29tcHV0ZWRVcmwsIGZldGNoT3B0aW9ucywgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHVzZUZhY3RvcnlGZXRjaDtcbn1cbmZ1bmN0aW9uIHVzZUZldGNoKHVybCwgLi4uYXJncykge1xuICB2YXIgX2E7XG4gIGNvbnN0IHN1cHBvcnRzQWJvcnQgPSB0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSBcImZ1bmN0aW9uXCI7XG4gIGxldCBmZXRjaE9wdGlvbnMgPSB7fTtcbiAgbGV0IG9wdGlvbnMgPSB7IGltbWVkaWF0ZTogdHJ1ZSwgcmVmZXRjaDogZmFsc2UsIHRpbWVvdXQ6IDAgfTtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICB0eXBlOiBcInRleHRcIixcbiAgICBwYXlsb2FkOiB2b2lkIDBcbiAgfTtcbiAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgIGlmIChpc0ZldGNoT3B0aW9ucyhhcmdzWzBdKSlcbiAgICAgIG9wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIG9wdGlvbnMpLCBhcmdzWzBdKTtcbiAgICBlbHNlXG4gICAgICBmZXRjaE9wdGlvbnMgPSBhcmdzWzBdO1xuICB9XG4gIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoaXNGZXRjaE9wdGlvbnMoYXJnc1sxXSkpXG4gICAgICBvcHRpb25zID0gX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBvcHRpb25zKSwgYXJnc1sxXSk7XG4gIH1cbiAgY29uc3Qge1xuICAgIGZldGNoID0gKF9hID0gZGVmYXVsdFdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZldGNoLFxuICAgIGluaXRpYWxEYXRhLFxuICAgIHRpbWVvdXRcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IGVycm9yRXZlbnQgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IGZpbmFsbHlFdmVudCA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3QgaXNGaW5pc2hlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgaXNGZXRjaGluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgYWJvcnRlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3Qgc3RhdHVzQ29kZSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCByZXNwb25zZSA9IHZ1ZURlbWkuc2hhbGxvd1JlZihudWxsKTtcbiAgY29uc3QgZXJyb3IgPSB2dWVEZW1pLnNoYWxsb3dSZWYobnVsbCk7XG4gIGNvbnN0IGRhdGEgPSB2dWVEZW1pLnNoYWxsb3dSZWYoaW5pdGlhbERhdGEpO1xuICBjb25zdCBjYW5BYm9ydCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gc3VwcG9ydHNBYm9ydCAmJiBpc0ZldGNoaW5nLnZhbHVlKTtcbiAgbGV0IGNvbnRyb2xsZXI7XG4gIGxldCB0aW1lcjtcbiAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgaWYgKHN1cHBvcnRzQWJvcnQgJiYgY29udHJvbGxlcilcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfTtcbiAgY29uc3QgbG9hZGluZyA9IChpc0xvYWRpbmcpID0+IHtcbiAgICBpc0ZldGNoaW5nLnZhbHVlID0gaXNMb2FkaW5nO1xuICAgIGlzRmluaXNoZWQudmFsdWUgPSAhaXNMb2FkaW5nO1xuICB9O1xuICBpZiAodGltZW91dClcbiAgICB0aW1lciA9IHNoYXJlZC51c2VUaW1lb3V0Rm4oYWJvcnQsIHRpbWVvdXQsIHsgaW1tZWRpYXRlOiBmYWxzZSB9KTtcbiAgY29uc3QgZXhlY3V0ZSA9IGFzeW5jICh0aHJvd09uRmFpbGVkID0gZmFsc2UpID0+IHtcbiAgICB2YXIgX2EyO1xuICAgIGxvYWRpbmcodHJ1ZSk7XG4gICAgZXJyb3IudmFsdWUgPSBudWxsO1xuICAgIHN0YXR1c0NvZGUudmFsdWUgPSBudWxsO1xuICAgIGFib3J0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICBjb250cm9sbGVyID0gdm9pZCAwO1xuICAgIGlmIChzdXBwb3J0c0Fib3J0KSB7XG4gICAgICBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgY29udHJvbGxlci5zaWduYWwub25hYm9ydCA9ICgpID0+IGFib3J0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgZmV0Y2hPcHRpb25zID0gX19zcHJlYWRQcm9wcyQzKF9fc3ByZWFkVmFsdWVzJGIoe30sIGZldGNoT3B0aW9ucyksIHtcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QsXG4gICAgICBoZWFkZXJzOiB7fVxuICAgIH07XG4gICAgaWYgKGNvbmZpZy5wYXlsb2FkKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gaGVhZGVyc1RvT2JqZWN0KGRlZmF1bHRGZXRjaE9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAoY29uZmlnLnBheWxvYWRUeXBlKVxuICAgICAgICBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gKF9hMiA9IHBheWxvYWRNYXBwaW5nW2NvbmZpZy5wYXlsb2FkVHlwZV0pICE9IG51bGwgPyBfYTIgOiBjb25maWcucGF5bG9hZFR5cGU7XG4gICAgICBkZWZhdWx0RmV0Y2hPcHRpb25zLmJvZHkgPSBjb25maWcucGF5bG9hZFR5cGUgPT09IFwianNvblwiID8gSlNPTi5zdHJpbmdpZnkodnVlRGVtaS51bnJlZihjb25maWcucGF5bG9hZCkpIDogdnVlRGVtaS51bnJlZihjb25maWcucGF5bG9hZCk7XG4gICAgfVxuICAgIGxldCBpc0NhbmNlbGVkID0gZmFsc2U7XG4gICAgY29uc3QgY29udGV4dCA9IHsgdXJsOiB2dWVEZW1pLnVucmVmKHVybCksIG9wdGlvbnM6IF9fc3ByZWFkVmFsdWVzJGIoX19zcHJlYWRWYWx1ZXMkYih7fSwgZGVmYXVsdEZldGNoT3B0aW9ucyksIGZldGNoT3B0aW9ucyksIGNhbmNlbDogKCkgPT4ge1xuICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XG4gICAgfSB9O1xuICAgIGlmIChvcHRpb25zLmJlZm9yZUZldGNoKVxuICAgICAgT2JqZWN0LmFzc2lnbihjb250ZXh0LCBhd2FpdCBvcHRpb25zLmJlZm9yZUZldGNoKGNvbnRleHQpKTtcbiAgICBpZiAoaXNDYW5jZWxlZCB8fCAhZmV0Y2gpIHtcbiAgICAgIGxvYWRpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IG51bGw7XG4gICAgaWYgKHRpbWVyKVxuICAgICAgdGltZXIuc3RhcnQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGZldGNoKGNvbnRleHQudXJsLCBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBkZWZhdWx0RmV0Y2hPcHRpb25zKSwgY29udGV4dC5vcHRpb25zKSwge1xuICAgICAgICBoZWFkZXJzOiBfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIGhlYWRlcnNUb09iamVjdChkZWZhdWx0RmV0Y2hPcHRpb25zLmhlYWRlcnMpKSwgaGVhZGVyc1RvT2JqZWN0KChfYTMgPSBjb250ZXh0Lm9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuaGVhZGVycykpXG4gICAgICB9KSkudGhlbihhc3luYyAoZmV0Y2hSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXNwb25zZS52YWx1ZSA9IGZldGNoUmVzcG9uc2U7XG4gICAgICAgIHN0YXR1c0NvZGUudmFsdWUgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgcmVzcG9uc2VEYXRhID0gYXdhaXQgZmV0Y2hSZXNwb25zZVtjb25maWcudHlwZV0oKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJGZXRjaCAmJiBzdGF0dXNDb2RlLnZhbHVlID49IDIwMCAmJiBzdGF0dXNDb2RlLnZhbHVlIDwgMzAwKVxuICAgICAgICAgICh7IGRhdGE6IHJlc3BvbnNlRGF0YSB9ID0gYXdhaXQgb3B0aW9ucy5hZnRlckZldGNoKHsgZGF0YTogcmVzcG9uc2VEYXRhLCByZXNwb25zZTogZmV0Y2hSZXNwb25zZSB9KSk7XG4gICAgICAgIGRhdGEudmFsdWUgPSByZXNwb25zZURhdGE7XG4gICAgICAgIGlmICghZmV0Y2hSZXNwb25zZS5vaylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgcmVzcG9uc2VFdmVudC50cmlnZ2VyKGZldGNoUmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShmZXRjaFJlc3BvbnNlKTtcbiAgICAgIH0pLmNhdGNoKGFzeW5jIChmZXRjaEVycm9yKSA9PiB7XG4gICAgICAgIGxldCBlcnJvckRhdGEgPSBmZXRjaEVycm9yLm1lc3NhZ2UgfHwgZmV0Y2hFcnJvci5uYW1lO1xuICAgICAgICBpZiAob3B0aW9ucy5vbkZldGNoRXJyb3IpXG4gICAgICAgICAgKHsgZGF0YTogcmVzcG9uc2VEYXRhLCBlcnJvcjogZXJyb3JEYXRhIH0gPSBhd2FpdCBvcHRpb25zLm9uRmV0Y2hFcnJvcih7IGRhdGE6IHJlc3BvbnNlRGF0YSwgZXJyb3I6IGZldGNoRXJyb3IsIHJlc3BvbnNlOiByZXNwb25zZS52YWx1ZSB9KSk7XG4gICAgICAgIGRhdGEudmFsdWUgPSByZXNwb25zZURhdGE7XG4gICAgICAgIGVycm9yLnZhbHVlID0gZXJyb3JEYXRhO1xuICAgICAgICBlcnJvckV2ZW50LnRyaWdnZXIoZmV0Y2hFcnJvcik7XG4gICAgICAgIGlmICh0aHJvd09uRmFpbGVkKVxuICAgICAgICAgIHJldHVybiByZWplY3QoZmV0Y2hFcnJvcik7XG4gICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmcoZmFsc2UpO1xuICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgdGltZXIuc3RvcCgpO1xuICAgICAgICBmaW5hbGx5RXZlbnQudHJpZ2dlcihudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICB2dWVEZW1pLndhdGNoKCgpID0+IFtcbiAgICB2dWVEZW1pLnVucmVmKHVybCksXG4gICAgdnVlRGVtaS51bnJlZihvcHRpb25zLnJlZmV0Y2gpXG4gIF0sICgpID0+IHZ1ZURlbWkudW5yZWYob3B0aW9ucy5yZWZldGNoKSAmJiBleGVjdXRlKCksIHsgZGVlcDogdHJ1ZSB9KTtcbiAgY29uc3Qgc2hlbGwgPSB7XG4gICAgaXNGaW5pc2hlZCxcbiAgICBzdGF0dXNDb2RlLFxuICAgIHJlc3BvbnNlLFxuICAgIGVycm9yLFxuICAgIGRhdGEsXG4gICAgaXNGZXRjaGluZyxcbiAgICBjYW5BYm9ydCxcbiAgICBhYm9ydGVkLFxuICAgIGFib3J0LFxuICAgIGV4ZWN1dGUsXG4gICAgb25GZXRjaFJlc3BvbnNlOiByZXNwb25zZUV2ZW50Lm9uLFxuICAgIG9uRmV0Y2hFcnJvcjogZXJyb3JFdmVudC5vbixcbiAgICBvbkZldGNoRmluYWxseTogZmluYWxseUV2ZW50Lm9uLFxuICAgIGdldDogc2V0TWV0aG9kKFwiR0VUXCIpLFxuICAgIHB1dDogc2V0TWV0aG9kKFwiUFVUXCIpLFxuICAgIHBvc3Q6IHNldE1ldGhvZChcIlBPU1RcIiksXG4gICAgZGVsZXRlOiBzZXRNZXRob2QoXCJERUxFVEVcIiksXG4gICAgcGF0Y2g6IHNldE1ldGhvZChcIlBBVENIXCIpLFxuICAgIGhlYWQ6IHNldE1ldGhvZChcIkhFQURcIiksXG4gICAgb3B0aW9uczogc2V0TWV0aG9kKFwiT1BUSU9OU1wiKSxcbiAgICBqc29uOiBzZXRUeXBlKFwianNvblwiKSxcbiAgICB0ZXh0OiBzZXRUeXBlKFwidGV4dFwiKSxcbiAgICBibG9iOiBzZXRUeXBlKFwiYmxvYlwiKSxcbiAgICBhcnJheUJ1ZmZlcjogc2V0VHlwZShcImFycmF5QnVmZmVyXCIpLFxuICAgIGZvcm1EYXRhOiBzZXRUeXBlKFwiZm9ybURhdGFcIilcbiAgfTtcbiAgZnVuY3Rpb24gc2V0TWV0aG9kKG1ldGhvZCkge1xuICAgIHJldHVybiAocGF5bG9hZCwgcGF5bG9hZFR5cGUpID0+IHtcbiAgICAgIGlmICghaXNGZXRjaGluZy52YWx1ZSkge1xuICAgICAgICBjb25maWcubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICBjb25maWcucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIGNvbmZpZy5wYXlsb2FkVHlwZSA9IHBheWxvYWRUeXBlO1xuICAgICAgICBpZiAodnVlRGVtaS5pc1JlZihjb25maWcucGF5bG9hZCkpIHtcbiAgICAgICAgICB2dWVEZW1pLndhdGNoKCgpID0+IFtcbiAgICAgICAgICAgIHZ1ZURlbWkudW5yZWYoY29uZmlnLnBheWxvYWQpLFxuICAgICAgICAgICAgdnVlRGVtaS51bnJlZihvcHRpb25zLnJlZmV0Y2gpXG4gICAgICAgICAgXSwgKCkgPT4gdnVlRGVtaS51bnJlZihvcHRpb25zLnJlZmV0Y2gpICYmIGV4ZWN1dGUoKSwgeyBkZWVwOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZFR5cGUgJiYgdnVlRGVtaS51bnJlZihwYXlsb2FkKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodnVlRGVtaS51bnJlZihwYXlsb2FkKSkgPT09IE9iamVjdC5wcm90b3R5cGUpXG4gICAgICAgICAgY29uZmlnLnBheWxvYWRUeXBlID0gXCJqc29uXCI7XG4gICAgICAgIHJldHVybiBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYih7fSwgc2hlbGwpLCB7XG4gICAgICAgICAgdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHdhaXRVbnRpbEZpbmlzaGVkKCkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3YWl0VW50aWxGaW5pc2hlZCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2hhcmVkLnVudGlsKGlzRmluaXNoZWQpLnRvQmUodHJ1ZSkudGhlbigoKSA9PiByZXNvbHZlKHNoZWxsKSkuY2F0Y2goKGVycm9yMikgPT4gcmVqZWN0KGVycm9yMikpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHNldFR5cGUodHlwZSkge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoIWlzRmV0Y2hpbmcudmFsdWUpIHtcbiAgICAgICAgY29uZmlnLnR5cGUgPSB0eXBlO1xuICAgICAgICByZXR1cm4gX19zcHJlYWRQcm9wcyQzKF9fc3ByZWFkVmFsdWVzJGIoe30sIHNoZWxsKSwge1xuICAgICAgICAgIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB3YWl0VW50aWxGaW5pc2hlZCgpLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH07XG4gIH1cbiAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKVxuICAgIHNldFRpbWVvdXQoZXhlY3V0ZSwgMCk7XG4gIHJldHVybiBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYih7fSwgc2hlbGwpLCB7XG4gICAgdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHdhaXRVbnRpbEZpbmlzaGVkKCkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGpvaW5QYXRocyhzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQuZW5kc1dpdGgoXCIvXCIpICYmICFlbmQuc3RhcnRzV2l0aChcIi9cIikpXG4gICAgcmV0dXJuIGAke3N0YXJ0fS8ke2VuZH1gO1xuICByZXR1cm4gYCR7c3RhcnR9JHtlbmR9YDtcbn1cblxudmFyIF9fZGVmUHJvcCRhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkYiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRiID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkYSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkYShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkYSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGIuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRhKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRiKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRiKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGIuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGEoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XG4gIG11bHRpcGxlOiB0cnVlLFxuICBhY2NlcHQ6IFwiKlwiXG59O1xuZnVuY3Rpb24gdXNlRmlsZURpYWxvZyhvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBmaWxlcyA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBsZXQgaW5wdXQ7XG4gIGlmIChkb2N1bWVudCkge1xuICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcbiAgICBpbnB1dC5vbmNoYW5nZSA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgZmlsZXMudmFsdWUgPSByZXN1bHQuZmlsZXM7XG4gICAgfTtcbiAgfVxuICBjb25zdCBvcGVuID0gKGxvY2FsT3B0aW9ucykgPT4ge1xuICAgIGlmICghaW5wdXQpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgX29wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyRhKF9fc3ByZWFkVmFsdWVzJGEoX19zcHJlYWRWYWx1ZXMkYSh7fSwgREVGQVVMVF9PUFRJT05TKSwgb3B0aW9ucyksIGxvY2FsT3B0aW9ucyk7XG4gICAgaW5wdXQubXVsdGlwbGUgPSBfb3B0aW9ucy5tdWx0aXBsZTtcbiAgICBpbnB1dC5hY2NlcHQgPSBfb3B0aW9ucy5hY2NlcHQ7XG4gICAgaW5wdXQuY2FwdHVyZSA9IF9vcHRpb25zLmNhcHR1cmU7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgfTtcbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgZmlsZXMudmFsdWUgPSBudWxsO1xuICAgIGlmIChpbnB1dClcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBmaWxlczogdnVlRGVtaS5yZWFkb25seShmaWxlcyksXG4gICAgb3BlbixcbiAgICByZXNldFxuICB9O1xufVxuXG52YXIgX19kZWZQcm9wJDkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRhID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkYSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGEgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ5ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ5KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ5ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkYS5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDkoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGEpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGEoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kYS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkOShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3Mob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB3aW5kb3c6IF93aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGRhdGFUeXBlID0gXCJUZXh0XCJcbiAgfSA9IHZ1ZURlbWkudW5yZWYob3B0aW9ucyk7XG4gIGNvbnN0IHdpbmRvdyA9IF93aW5kb3c7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbih3aW5kb3cgJiYgXCJzaG93U2F2ZUZpbGVQaWNrZXJcIiBpbiB3aW5kb3cgJiYgXCJzaG93T3BlbkZpbGVQaWNrZXJcIiBpbiB3aW5kb3cpO1xuICBjb25zdCBmaWxlSGFuZGxlID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IGZpbGUgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBmaWxlTmFtZSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IGZpbGUudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5uYW1lKSAhPSBudWxsID8gX2IgOiBcIlwiO1xuICB9KTtcbiAgY29uc3QgZmlsZU1JTUUgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSBmaWxlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EudHlwZSkgIT0gbnVsbCA/IF9iIDogXCJcIjtcbiAgfSk7XG4gIGNvbnN0IGZpbGVTaXplID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gZmlsZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnNpemUpICE9IG51bGwgPyBfYiA6IDA7XG4gIH0pO1xuICBjb25zdCBmaWxlTGFzdE1vZGlmaWVkID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gZmlsZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmxhc3RNb2RpZmllZCkgIT0gbnVsbCA/IF9iIDogMDtcbiAgfSk7XG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW4oX29wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgW2hhbmRsZV0gPSBhd2FpdCB3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKF9fc3ByZWFkVmFsdWVzJDkoX19zcHJlYWRWYWx1ZXMkOSh7fSwgdnVlRGVtaS51bnJlZihvcHRpb25zKSksIF9vcHRpb25zKSk7XG4gICAgZmlsZUhhbmRsZS52YWx1ZSA9IGhhbmRsZTtcbiAgICBhd2FpdCB1cGRhdGVGaWxlKCk7XG4gICAgYXdhaXQgdXBkYXRlRGF0YSgpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZShfb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBmaWxlSGFuZGxlLnZhbHVlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlcihfX3NwcmVhZFZhbHVlcyQ5KF9fc3ByZWFkVmFsdWVzJDkoe30sIHZ1ZURlbWkudW5yZWYob3B0aW9ucykpLCBfb3B0aW9ucykpO1xuICAgIGRhdGEudmFsdWUgPSB2b2lkIDA7XG4gICAgYXdhaXQgdXBkYXRlRmlsZSgpO1xuICAgIGF3YWl0IHVwZGF0ZURhdGEoKTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBzYXZlKF9vcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghZmlsZUhhbmRsZS52YWx1ZSlcbiAgICAgIHJldHVybiBzYXZlQXMoX29wdGlvbnMpO1xuICAgIGlmIChkYXRhLnZhbHVlKSB7XG4gICAgICBjb25zdCB3cml0YWJsZVN0cmVhbSA9IGF3YWl0IGZpbGVIYW5kbGUudmFsdWUuY3JlYXRlV3JpdGFibGUoKTtcbiAgICAgIGF3YWl0IHdyaXRhYmxlU3RyZWFtLndyaXRlKGRhdGEudmFsdWUpO1xuICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW0uY2xvc2UoKTtcbiAgICB9XG4gICAgYXdhaXQgdXBkYXRlRmlsZSgpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHNhdmVBcyhfb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBmaWxlSGFuZGxlLnZhbHVlID0gYXdhaXQgd2luZG93LnNob3dTYXZlRmlsZVBpY2tlcihfX3NwcmVhZFZhbHVlcyQ5KF9fc3ByZWFkVmFsdWVzJDkoe30sIHZ1ZURlbWkudW5yZWYob3B0aW9ucykpLCBfb3B0aW9ucykpO1xuICAgIGlmIChkYXRhLnZhbHVlKSB7XG4gICAgICBjb25zdCB3cml0YWJsZVN0cmVhbSA9IGF3YWl0IGZpbGVIYW5kbGUudmFsdWUuY3JlYXRlV3JpdGFibGUoKTtcbiAgICAgIGF3YWl0IHdyaXRhYmxlU3RyZWFtLndyaXRlKGRhdGEudmFsdWUpO1xuICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW0uY2xvc2UoKTtcbiAgICB9XG4gICAgYXdhaXQgdXBkYXRlRmlsZSgpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUZpbGUoKSB7XG4gICAgdmFyIF9hO1xuICAgIGZpbGUudmFsdWUgPSBhd2FpdCAoKF9hID0gZmlsZUhhbmRsZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmdldEZpbGUoKSk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICh2dWVEZW1pLnVucmVmKGRhdGFUeXBlKSA9PT0gXCJUZXh0XCIpXG4gICAgICBkYXRhLnZhbHVlID0gYXdhaXQgKChfYSA9IGZpbGUudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS50ZXh0KCkpO1xuICAgIGlmICh2dWVEZW1pLnVucmVmKGRhdGFUeXBlKSA9PT0gXCJBcnJheUJ1ZmZlclwiKVxuICAgICAgZGF0YS52YWx1ZSA9IGF3YWl0ICgoX2IgPSBmaWxlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuYXJyYXlCdWZmZXIoKSk7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYoZGF0YVR5cGUpID09PSBcIkJsb2JcIilcbiAgICAgIGRhdGEudmFsdWUgPSBmaWxlLnZhbHVlO1xuICB9XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gdnVlRGVtaS51bnJlZihkYXRhVHlwZSksIHVwZGF0ZURhdGEpO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGRhdGEsXG4gICAgZmlsZSxcbiAgICBmaWxlTmFtZSxcbiAgICBmaWxlTUlNRSxcbiAgICBmaWxlU2l6ZSxcbiAgICBmaWxlTGFzdE1vZGlmaWVkLFxuICAgIG9wZW4sXG4gICAgY3JlYXRlLFxuICAgIHNhdmUsXG4gICAgc2F2ZUFzLFxuICAgIHVwZGF0ZURhdGFcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRm9jdXModGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBpbml0aWFsVmFsdWUgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHVzZUFjdGl2ZUVsZW1lbnQob3B0aW9ucyk7XG4gIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpKTtcbiAgY29uc3QgZm9jdXNlZCA9IHZ1ZURlbWkuY29tcHV0ZWQoe1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBzaGFyZWQuaXNEZWYoYWN0aXZlRWxlbWVudC52YWx1ZSkgJiYgc2hhcmVkLmlzRGVmKHRhcmdldEVsZW1lbnQudmFsdWUpICYmIGFjdGl2ZUVsZW1lbnQudmFsdWUgPT09IHRhcmdldEVsZW1lbnQudmFsdWU7XG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBpZiAoIXZhbHVlICYmIGZvY3VzZWQudmFsdWUpXG4gICAgICAgIChfYSA9IHRhcmdldEVsZW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5ibHVyKCk7XG4gICAgICBpZiAodmFsdWUgJiYgIWZvY3VzZWQudmFsdWUpXG4gICAgICAgIChfYiA9IHRhcmdldEVsZW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG4gIHZ1ZURlbWkud2F0Y2godGFyZ2V0RWxlbWVudCwgKCkgPT4ge1xuICAgIGZvY3VzZWQudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlLCBmbHVzaDogXCJwb3N0XCIgfSk7XG4gIHJldHVybiB7IGZvY3VzZWQgfTtcbn1cblxuZnVuY3Rpb24gdXNlRm9jdXNXaXRoaW4odGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHVzZUFjdGl2ZUVsZW1lbnQob3B0aW9ucyk7XG4gIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpKTtcbiAgY29uc3QgZm9jdXNlZCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gdGFyZ2V0RWxlbWVudC52YWx1ZSAmJiBhY3RpdmVFbGVtZW50LnZhbHVlID8gdGFyZ2V0RWxlbWVudC52YWx1ZS5jb250YWlucyhhY3RpdmVFbGVtZW50LnZhbHVlKSA6IGZhbHNlKTtcbiAgcmV0dXJuIHsgZm9jdXNlZCB9O1xufVxuXG5mdW5jdGlvbiB1c2VGcHMob3B0aW9ucykge1xuICB2YXIgX2E7XG4gIGNvbnN0IGZwcyA9IHZ1ZURlbWkucmVmKDApO1xuICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlID09PSBcInVuZGVmaW5lZFwiKVxuICAgIHJldHVybiBmcHM7XG4gIGNvbnN0IGV2ZXJ5ID0gKF9hID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5ldmVyeSkgIT0gbnVsbCA/IF9hIDogMTA7XG4gIGxldCBsYXN0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGxldCB0aWNrcyA9IDA7XG4gIHVzZVJhZkZuKCgpID0+IHtcbiAgICB0aWNrcyArPSAxO1xuICAgIGlmICh0aWNrcyA+PSBldmVyeSkge1xuICAgICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBjb25zdCBkaWZmID0gbm93IC0gbGFzdDtcbiAgICAgIGZwcy52YWx1ZSA9IE1hdGgucm91bmQoMWUzIC8gKGRpZmYgLyB0aWNrcykpO1xuICAgICAgbGFzdCA9IG5vdztcbiAgICAgIHRpY2tzID0gMDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZnBzO1xufVxuXG5jb25zdCBmdW5jdGlvbnNNYXAgPSBbXG4gIFtcbiAgICBcInJlcXVlc3RGdWxsc2NyZWVuXCIsXG4gICAgXCJleGl0RnVsbHNjcmVlblwiLFxuICAgIFwiZnVsbHNjcmVlbkVsZW1lbnRcIixcbiAgICBcImZ1bGxzY3JlZW5FbmFibGVkXCIsXG4gICAgXCJmdWxsc2NyZWVuY2hhbmdlXCIsXG4gICAgXCJmdWxsc2NyZWVuZXJyb3JcIlxuICBdLFxuICBbXG4gICAgXCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlblwiLFxuICAgIFwid2Via2l0RXhpdEZ1bGxzY3JlZW5cIixcbiAgICBcIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50XCIsXG4gICAgXCJ3ZWJraXRGdWxsc2NyZWVuRW5hYmxlZFwiLFxuICAgIFwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiLFxuICAgIFwid2Via2l0ZnVsbHNjcmVlbmVycm9yXCJcbiAgXSxcbiAgW1xuICAgIFwid2Via2l0UmVxdWVzdEZ1bGxTY3JlZW5cIixcbiAgICBcIndlYmtpdENhbmNlbEZ1bGxTY3JlZW5cIixcbiAgICBcIndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudFwiLFxuICAgIFwid2Via2l0Q2FuY2VsRnVsbFNjcmVlblwiLFxuICAgIFwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZVwiLFxuICAgIFwid2Via2l0ZnVsbHNjcmVlbmVycm9yXCJcbiAgXSxcbiAgW1xuICAgIFwibW96UmVxdWVzdEZ1bGxTY3JlZW5cIixcbiAgICBcIm1vekNhbmNlbEZ1bGxTY3JlZW5cIixcbiAgICBcIm1vekZ1bGxTY3JlZW5FbGVtZW50XCIsXG4gICAgXCJtb3pGdWxsU2NyZWVuRW5hYmxlZFwiLFxuICAgIFwibW96ZnVsbHNjcmVlbmNoYW5nZVwiLFxuICAgIFwibW96ZnVsbHNjcmVlbmVycm9yXCJcbiAgXSxcbiAgW1xuICAgIFwibXNSZXF1ZXN0RnVsbHNjcmVlblwiLFxuICAgIFwibXNFeGl0RnVsbHNjcmVlblwiLFxuICAgIFwibXNGdWxsc2NyZWVuRWxlbWVudFwiLFxuICAgIFwibXNGdWxsc2NyZWVuRW5hYmxlZFwiLFxuICAgIFwiTVNGdWxsc2NyZWVuQ2hhbmdlXCIsXG4gICAgXCJNU0Z1bGxzY3JlZW5FcnJvclwiXG4gIF1cbl07XG5mdW5jdGlvbiB1c2VGdWxsc2NyZWVuKHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsIGF1dG9FeGl0ID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRhcmdldFJlZiA9IHRhcmdldCB8fCAoZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpKTtcbiAgY29uc3QgaXNGdWxsc2NyZWVuID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBsZXQgaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgbGV0IG1hcCA9IGZ1bmN0aW9uc01hcFswXTtcbiAgaWYgKCFkb2N1bWVudCkge1xuICAgIGlzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBtIG9mIGZ1bmN0aW9uc01hcCkge1xuICAgICAgaWYgKG1bMV0gaW4gZG9jdW1lbnQpIHtcbiAgICAgICAgbWFwID0gbTtcbiAgICAgICAgaXNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgW1JFUVVFU1QsIEVYSVQsIEVMRU1FTlQsICwgRVZFTlRdID0gbWFwO1xuICBhc3luYyBmdW5jdGlvbiBleGl0KCkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudFtFTEVNRU5UXSlcbiAgICAgIGF3YWl0IGRvY3VtZW50W0VYSVRdKCk7XG4gICAgaXNGdWxsc2NyZWVuLnZhbHVlID0gZmFsc2U7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gZW50ZXIoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBhd2FpdCBleGl0KCk7XG4gICAgY29uc3QgdGFyZ2V0MiA9IHVucmVmRWxlbWVudCh0YXJnZXRSZWYpO1xuICAgIGlmICh0YXJnZXQyKSB7XG4gICAgICBhd2FpdCB0YXJnZXQyW1JFUVVFU1RdKCk7XG4gICAgICBpc0Z1bGxzY3JlZW4udmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGUoKSB7XG4gICAgaWYgKGlzRnVsbHNjcmVlbi52YWx1ZSlcbiAgICAgIGF3YWl0IGV4aXQoKTtcbiAgICBlbHNlXG4gICAgICBhd2FpdCBlbnRlcigpO1xuICB9XG4gIGlmIChkb2N1bWVudCkge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIEVWRU5ULCAoKSA9PiB7XG4gICAgICBpc0Z1bGxzY3JlZW4udmFsdWUgPSAhIShkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnRbRUxFTUVOVF0pO1xuICAgIH0sIGZhbHNlKTtcbiAgfVxuICBpZiAoYXV0b0V4aXQpXG4gICAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKGV4aXQpO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICBlbnRlcixcbiAgICBleGl0LFxuICAgIHRvZ2dsZVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBHYW1lcGFkVG9YYm94MzYwQ29udHJvbGxlcihnYW1lcGFkKSB7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoZ2FtZXBhZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGE6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1swXSxcbiAgICAgICAgICBiOiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbMV0sXG4gICAgICAgICAgeDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzJdLFxuICAgICAgICAgIHk6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1szXVxuICAgICAgICB9LFxuICAgICAgICBidW1wZXI6IHtcbiAgICAgICAgICBsZWZ0OiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbNF0sXG4gICAgICAgICAgcmlnaHQ6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1s1XVxuICAgICAgICB9LFxuICAgICAgICB0cmlnZ2Vyczoge1xuICAgICAgICAgIGxlZnQ6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1s2XSxcbiAgICAgICAgICByaWdodDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzddXG4gICAgICAgIH0sXG4gICAgICAgIHN0aWNrOiB7XG4gICAgICAgICAgbGVmdDoge1xuICAgICAgICAgICAgaG9yaXpvbnRhbDogZ2FtZXBhZC52YWx1ZS5heGVzWzBdLFxuICAgICAgICAgICAgdmVydGljYWw6IGdhbWVwYWQudmFsdWUuYXhlc1sxXSxcbiAgICAgICAgICAgIGJ1dHRvbjogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzEwXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmlnaHQ6IHtcbiAgICAgICAgICAgIGhvcml6b250YWw6IGdhbWVwYWQudmFsdWUuYXhlc1syXSxcbiAgICAgICAgICAgIHZlcnRpY2FsOiBnYW1lcGFkLnZhbHVlLmF4ZXNbM10sXG4gICAgICAgICAgICBidXR0b246IGdhbWVwYWQudmFsdWUuYnV0dG9uc1sxMV1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRwYWQ6IHtcbiAgICAgICAgICB1cDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzEyXSxcbiAgICAgICAgICBkb3duOiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbMTNdLFxuICAgICAgICAgIGxlZnQ6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1sxNF0sXG4gICAgICAgICAgcmlnaHQ6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1sxNV1cbiAgICAgICAgfSxcbiAgICAgICAgYmFjazogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzhdLFxuICAgICAgICBzdGFydDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzldXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG59XG5mdW5jdGlvbiB1c2VHYW1lcGFkKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvclxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgXCJnZXRHYW1lcGFkc1wiIGluIG5hdmlnYXRvcjtcbiAgY29uc3QgZ2FtZXBhZHMgPSB2dWVEZW1pLnJlZihbXSk7XG4gIGNvbnN0IG9uQ29ubmVjdGVkSG9vayA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3Qgb25EaXNjb25uZWN0ZWRIb29rID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBzdGF0ZUZyb21HYW1lcGFkID0gKGdhbWVwYWQpID0+IHtcbiAgICBjb25zdCBoYXB0aWNBY3R1YXRvcnMgPSBbXTtcbiAgICBjb25zdCB2aWJyYXRpb25BY3R1YXRvciA9IFwidmlicmF0aW9uQWN0dWF0b3JcIiBpbiBnYW1lcGFkID8gZ2FtZXBhZC52aWJyYXRpb25BY3R1YXRvciA6IG51bGw7XG4gICAgaWYgKHZpYnJhdGlvbkFjdHVhdG9yKVxuICAgICAgaGFwdGljQWN0dWF0b3JzLnB1c2godmlicmF0aW9uQWN0dWF0b3IpO1xuICAgIGlmIChnYW1lcGFkLmhhcHRpY0FjdHVhdG9ycylcbiAgICAgIGhhcHRpY0FjdHVhdG9ycy5wdXNoKC4uLmdhbWVwYWQuaGFwdGljQWN0dWF0b3JzKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGdhbWVwYWQuaWQsXG4gICAgICBoYXB0aWNBY3R1YXRvcnMsXG4gICAgICBpbmRleDogZ2FtZXBhZC5pbmRleCxcbiAgICAgIG1hcHBpbmc6IGdhbWVwYWQubWFwcGluZyxcbiAgICAgIGNvbm5lY3RlZDogZ2FtZXBhZC5jb25uZWN0ZWQsXG4gICAgICB0aW1lc3RhbXA6IGdhbWVwYWQudGltZXN0YW1wLFxuICAgICAgYXhlczogZ2FtZXBhZC5heGVzLm1hcCgoYXhlcykgPT4gYXhlcyksXG4gICAgICBidXR0b25zOiBnYW1lcGFkLmJ1dHRvbnMubWFwKChidXR0b24pID0+ICh7IHByZXNzZWQ6IGJ1dHRvbi5wcmVzc2VkLCB0b3VjaGVkOiBidXR0b24udG91Y2hlZCwgdmFsdWU6IGJ1dHRvbi52YWx1ZSB9KSlcbiAgICB9O1xuICB9O1xuICBjb25zdCB1cGRhdGVHYW1lcGFkU3RhdGUgPSAoKSA9PiB7XG4gICAgY29uc3QgX2dhbWVwYWRzID0gKG5hdmlnYXRvciA9PSBudWxsID8gdm9pZCAwIDogbmF2aWdhdG9yLmdldEdhbWVwYWRzKCkpIHx8IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2dhbWVwYWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBnYW1lcGFkID0gX2dhbWVwYWRzW2ldO1xuICAgICAgaWYgKGdhbWVwYWQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBnYW1lcGFkcy52YWx1ZS5maW5kSW5kZXgoKHsgaW5kZXg6IGluZGV4MiB9KSA9PiBpbmRleDIgPT09IGdhbWVwYWQuaW5kZXgpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSlcbiAgICAgICAgICBnYW1lcGFkcy52YWx1ZVtpbmRleF0gPSBzdGF0ZUZyb21HYW1lcGFkKGdhbWVwYWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgeyBpc0FjdGl2ZSwgcGF1c2UsIHJlc3VtZSB9ID0gdXNlUmFmRm4odXBkYXRlR2FtZXBhZFN0YXRlKTtcbiAgY29uc3Qgb25HYW1lcGFkQ29ubmVjdGVkID0gKGdhbWVwYWQpID0+IHtcbiAgICBpZiAoIWdhbWVwYWRzLnZhbHVlLnNvbWUoKHsgaW5kZXggfSkgPT4gaW5kZXggPT09IGdhbWVwYWQuaW5kZXgpKSB7XG4gICAgICBnYW1lcGFkcy52YWx1ZS5wdXNoKHN0YXRlRnJvbUdhbWVwYWQoZ2FtZXBhZCkpO1xuICAgICAgb25Db25uZWN0ZWRIb29rLnRyaWdnZXIoZ2FtZXBhZC5pbmRleCk7XG4gICAgfVxuICAgIHJlc3VtZSgpO1xuICB9O1xuICBjb25zdCBvbkdhbWVwYWREaXNjb25uZWN0ZWQgPSAoZ2FtZXBhZCkgPT4ge1xuICAgIGdhbWVwYWRzLnZhbHVlID0gZ2FtZXBhZHMudmFsdWUuZmlsdGVyKCh4KSA9PiB4LmluZGV4ICE9PSBnYW1lcGFkLmluZGV4KTtcbiAgICBvbkRpc2Nvbm5lY3RlZEhvb2sudHJpZ2dlcihnYW1lcGFkLmluZGV4KTtcbiAgfTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihcImdhbWVwYWRjb25uZWN0ZWRcIiwgKGUpID0+IG9uR2FtZXBhZENvbm5lY3RlZChlLmdhbWVwYWQpKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihcImdhbWVwYWRkaXNjb25uZWN0ZWRcIiwgKGUpID0+IG9uR2FtZXBhZERpc2Nvbm5lY3RlZChlLmdhbWVwYWQpKTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZCgoKSA9PiB7XG4gICAgY29uc3QgX2dhbWVwYWRzID0gKG5hdmlnYXRvciA9PSBudWxsID8gdm9pZCAwIDogbmF2aWdhdG9yLmdldEdhbWVwYWRzKCkpIHx8IFtdO1xuICAgIGlmIChfZ2FtZXBhZHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2dhbWVwYWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGdhbWVwYWQgPSBfZ2FtZXBhZHNbaV07XG4gICAgICAgIGlmIChnYW1lcGFkKVxuICAgICAgICAgIG9uR2FtZXBhZENvbm5lY3RlZChnYW1lcGFkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBwYXVzZSgpO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIG9uQ29ubmVjdGVkOiBvbkNvbm5lY3RlZEhvb2sub24sXG4gICAgb25EaXNjb25uZWN0ZWQ6IG9uRGlzY29ubmVjdGVkSG9vay5vbixcbiAgICBnYW1lcGFkcyxcbiAgICBwYXVzZSxcbiAgICByZXN1bWUsXG4gICAgaXNBY3RpdmVcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlR2VvbG9jYXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVIaWdoQWNjdXJhY3kgPSB0cnVlLFxuICAgIG1heGltdW1BZ2UgPSAzZTQsXG4gICAgdGltZW91dCA9IDI3ZTMsXG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvclxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgXCJnZW9sb2NhdGlvblwiIGluIG5hdmlnYXRvcjtcbiAgY29uc3QgbG9jYXRlZEF0ID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IGNvb3JkcyA9IHZ1ZURlbWkucmVmKHtcbiAgICBhY2N1cmFjeTogMCxcbiAgICBsYXRpdHVkZTogSW5maW5pdHksXG4gICAgbG9uZ2l0dWRlOiBJbmZpbml0eSxcbiAgICBhbHRpdHVkZTogbnVsbCxcbiAgICBhbHRpdHVkZUFjY3VyYWN5OiBudWxsLFxuICAgIGhlYWRpbmc6IG51bGwsXG4gICAgc3BlZWQ6IG51bGxcbiAgfSk7XG4gIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgbG9jYXRlZEF0LnZhbHVlID0gcG9zaXRpb24udGltZXN0YW1wO1xuICAgIGNvb3Jkcy52YWx1ZSA9IHBvc2l0aW9uLmNvb3JkcztcbiAgICBlcnJvci52YWx1ZSA9IG51bGw7XG4gIH1cbiAgbGV0IHdhdGNoZXI7XG4gIGlmIChpc1N1cHBvcnRlZCkge1xuICAgIHdhdGNoZXIgPSBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbih1cGRhdGVQb3NpdGlvbiwgKGVycikgPT4gZXJyb3IudmFsdWUgPSBlcnIsIHtcbiAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeSxcbiAgICAgIG1heGltdW1BZ2UsXG4gICAgICB0aW1lb3V0XG4gICAgfSk7XG4gIH1cbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICBpZiAod2F0Y2hlciAmJiBuYXZpZ2F0b3IpXG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh3YXRjaGVyKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgY29vcmRzLFxuICAgIGxvY2F0ZWRBdCxcbiAgICBlcnJvclxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0RXZlbnRzJDEgPSBbXCJtb3VzZW1vdmVcIiwgXCJtb3VzZWRvd25cIiwgXCJyZXNpemVcIiwgXCJrZXlkb3duXCIsIFwidG91Y2hzdGFydFwiLCBcIndoZWVsXCJdO1xuY29uc3Qgb25lTWludXRlID0gNmU0O1xuZnVuY3Rpb24gdXNlSWRsZSh0aW1lb3V0ID0gb25lTWludXRlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGluaXRpYWxTdGF0ZSA9IGZhbHNlLFxuICAgIGxpc3RlbkZvclZpc2liaWxpdHlDaGFuZ2UgPSB0cnVlLFxuICAgIGV2ZW50cyA9IGRlZmF1bHRFdmVudHMkMSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGV2ZW50RmlsdGVyID0gc2hhcmVkLnRocm90dGxlRmlsdGVyKDUwKVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaWRsZSA9IHZ1ZURlbWkucmVmKGluaXRpYWxTdGF0ZSk7XG4gIGNvbnN0IGxhc3RBY3RpdmUgPSB2dWVEZW1pLnJlZihzaGFyZWQudGltZXN0YW1wKCkpO1xuICBsZXQgdGltZXI7XG4gIGNvbnN0IG9uRXZlbnQgPSBzaGFyZWQuY3JlYXRlRmlsdGVyV3JhcHBlcihldmVudEZpbHRlciwgKCkgPT4ge1xuICAgIGlkbGUudmFsdWUgPSBmYWxzZTtcbiAgICBsYXN0QWN0aXZlLnZhbHVlID0gc2hhcmVkLnRpbWVzdGFtcCgpO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGlkbGUudmFsdWUgPSB0cnVlLCB0aW1lb3V0KTtcbiAgfSk7XG4gIGlmICh3aW5kb3cpIHtcbiAgICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cylcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBldmVudCwgb25FdmVudCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGlmIChsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlKSB7XG4gICAgICB1c2VFdmVudExpc3RlbmVyKGRvY3VtZW50LCBcInZpc2liaWxpdHljaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbilcbiAgICAgICAgICBvbkV2ZW50KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGlkbGUudmFsdWUgPSB0cnVlLCB0aW1lb3V0KTtcbiAgcmV0dXJuIHsgaWRsZSwgbGFzdEFjdGl2ZSB9O1xufVxuXG52YXIgX19kZWZQcm9wJDggPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ5ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkOSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDkgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ4ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ4KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ4ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkOS5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDgoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDkpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDkoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kOS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkOChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZShvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgY29uc3QgeyBzcmMsIHNyY3NldCwgc2l6ZXMgfSA9IG9wdGlvbnM7XG4gICAgaW1nLnNyYyA9IHNyYztcbiAgICBpZiAoc3Jjc2V0KVxuICAgICAgaW1nLnNyY3NldCA9IHNyY3NldDtcbiAgICBpZiAoc2l6ZXMpXG4gICAgICBpbWcuc2l6ZXMgPSBzaXplcztcbiAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWcpO1xuICAgIGltZy5vbmVycm9yID0gcmVqZWN0O1xuICB9KTtcbn1cbmNvbnN0IHVzZUltYWdlID0gKG9wdGlvbnMsIGFzeW5jU3RhdGVPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VBc3luY1N0YXRlKCgpID0+IGxvYWRJbWFnZSh2dWVEZW1pLnVucmVmKG9wdGlvbnMpKSwgdm9pZCAwLCBfX3NwcmVhZFZhbHVlcyQ4KHtcbiAgICByZXNldE9uRXhlY3V0ZTogdHJ1ZVxuICB9LCBhc3luY1N0YXRlT3B0aW9ucykpO1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHZ1ZURlbWkudW5yZWYob3B0aW9ucyksICgpID0+IHN0YXRlLmV4ZWN1dGUoYXN5bmNTdGF0ZU9wdGlvbnMuZGVsYXkpLCB7IGRlZXA6IHRydWUgfSk7XG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbChlbGVtZW50LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRocm90dGxlID0gMCxcbiAgICBpZGxlID0gMjAwLFxuICAgIG9uU3RvcCA9IHNoYXJlZC5ub29wLFxuICAgIG9uU2Nyb2xsID0gc2hhcmVkLm5vb3AsXG4gICAgb2Zmc2V0ID0ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgYm90dG9tOiAwXG4gICAgfSxcbiAgICBldmVudExpc3RlbmVyT3B0aW9ucyA9IHtcbiAgICAgIGNhcHR1cmU6IGZhbHNlLFxuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH1cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHggPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgeSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBpc1Njcm9sbGluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgYXJyaXZlZFN0YXRlID0gdnVlRGVtaS5yZWFjdGl2ZSh7XG4gICAgbGVmdDogdHJ1ZSxcbiAgICByaWdodDogZmFsc2UsXG4gICAgdG9wOiB0cnVlLFxuICAgIGJvdHRvbTogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IGRpcmVjdGlvbnMgPSB2dWVEZW1pLnJlYWN0aXZlKHtcbiAgICBsZWZ0OiBmYWxzZSxcbiAgICByaWdodDogZmFsc2UsXG4gICAgdG9wOiBmYWxzZSxcbiAgICBib3R0b206IGZhbHNlXG4gIH0pO1xuICBpZiAoZWxlbWVudCkge1xuICAgIGNvbnN0IG9uU2Nyb2xsRW5kID0gc2hhcmVkLnVzZURlYm91bmNlRm4oKGUpID0+IHtcbiAgICAgIGlzU2Nyb2xsaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICBkaXJlY3Rpb25zLmxlZnQgPSBmYWxzZTtcbiAgICAgIGRpcmVjdGlvbnMucmlnaHQgPSBmYWxzZTtcbiAgICAgIGRpcmVjdGlvbnMudG9wID0gZmFsc2U7XG4gICAgICBkaXJlY3Rpb25zLmJvdHRvbSA9IGZhbHNlO1xuICAgICAgb25TdG9wKGUpO1xuICAgIH0sIHRocm90dGxlICsgaWRsZSk7XG4gICAgY29uc3Qgb25TY3JvbGxIYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZS50YXJnZXQgPT09IGRvY3VtZW50ID8gZS50YXJnZXQuZG9jdW1lbnRFbGVtZW50IDogZS50YXJnZXQ7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZXZlbnRUYXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgIGRpcmVjdGlvbnMubGVmdCA9IHNjcm9sbExlZnQgPCB4LnZhbHVlO1xuICAgICAgZGlyZWN0aW9ucy5yaWdodCA9IHNjcm9sbExlZnQgPiB4LnZhbHVlO1xuICAgICAgYXJyaXZlZFN0YXRlLmxlZnQgPSBzY3JvbGxMZWZ0IDw9IDAgKyAob2Zmc2V0LmxlZnQgfHwgMCk7XG4gICAgICBhcnJpdmVkU3RhdGUucmlnaHQgPSBzY3JvbGxMZWZ0ICsgZXZlbnRUYXJnZXQuY2xpZW50V2lkdGggPj0gZXZlbnRUYXJnZXQuc2Nyb2xsV2lkdGggLSAob2Zmc2V0LnJpZ2h0IHx8IDApO1xuICAgICAgeC52YWx1ZSA9IHNjcm9sbExlZnQ7XG4gICAgICBsZXQgc2Nyb2xsVG9wID0gZXZlbnRUYXJnZXQuc2Nyb2xsVG9wO1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudCAmJiAhc2Nyb2xsVG9wKVxuICAgICAgICBzY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcbiAgICAgIGRpcmVjdGlvbnMudG9wID0gc2Nyb2xsVG9wIDwgeS52YWx1ZTtcbiAgICAgIGRpcmVjdGlvbnMuYm90dG9tID0gc2Nyb2xsVG9wID4geS52YWx1ZTtcbiAgICAgIGFycml2ZWRTdGF0ZS50b3AgPSBzY3JvbGxUb3AgPD0gMCArIChvZmZzZXQudG9wIHx8IDApO1xuICAgICAgYXJyaXZlZFN0YXRlLmJvdHRvbSA9IHNjcm9sbFRvcCArIGV2ZW50VGFyZ2V0LmNsaWVudEhlaWdodCA+PSBldmVudFRhcmdldC5zY3JvbGxIZWlnaHQgLSAob2Zmc2V0LmJvdHRvbSB8fCAwKTtcbiAgICAgIHkudmFsdWUgPSBzY3JvbGxUb3A7XG4gICAgICBpc1Njcm9sbGluZy52YWx1ZSA9IHRydWU7XG4gICAgICBvblNjcm9sbEVuZChlKTtcbiAgICAgIG9uU2Nyb2xsKGUpO1xuICAgIH07XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBcInNjcm9sbFwiLCB0aHJvdHRsZSA/IHNoYXJlZC51c2VUaHJvdHRsZUZuKG9uU2Nyb2xsSGFuZGxlciwgdGhyb3R0bGUpIDogb25TY3JvbGxIYW5kbGVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgaXNTY3JvbGxpbmcsXG4gICAgYXJyaXZlZFN0YXRlLFxuICAgIGRpcmVjdGlvbnNcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ3ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDggPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ4ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kOCA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDcgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDcob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDcgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ4LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkOClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkOChiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ4LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ3KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMiA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDIoYSwgX19nZXRPd25Qcm9wRGVzY3MkMihiKSk7XG5mdW5jdGlvbiB1c2VJbmZpbml0ZVNjcm9sbChlbGVtZW50LCBvbkxvYWRNb3JlLCBvcHRpb25zID0ge30pIHtcbiAgdmFyIF9hLCBfYjtcbiAgY29uc3QgZGlyZWN0aW9uID0gKF9hID0gb3B0aW9ucy5kaXJlY3Rpb24pICE9IG51bGwgPyBfYSA6IFwiYm90dG9tXCI7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5yZWFjdGl2ZSh1c2VTY3JvbGwoZWxlbWVudCwgX19zcHJlYWRQcm9wcyQyKF9fc3ByZWFkVmFsdWVzJDcoe30sIG9wdGlvbnMpLCB7XG4gICAgb2Zmc2V0OiBfX3NwcmVhZFZhbHVlcyQ3KHtcbiAgICAgIFtkaXJlY3Rpb25dOiAoX2IgPSBvcHRpb25zLmRpc3RhbmNlKSAhPSBudWxsID8gX2IgOiAwXG4gICAgfSwgb3B0aW9ucy5vZmZzZXQpXG4gIH0pKSk7XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gc3RhdGUuYXJyaXZlZFN0YXRlW2RpcmVjdGlvbl0sIGFzeW5jICh2KSA9PiB7XG4gICAgdmFyIF9hMiwgX2IyO1xuICAgIGlmICh2KSB7XG4gICAgICBjb25zdCBlbGVtID0gdnVlRGVtaS51bnJlZihlbGVtZW50KTtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0ge1xuICAgICAgICBoZWlnaHQ6IChfYTIgPSBlbGVtID09IG51bGwgPyB2b2lkIDAgOiBlbGVtLnNjcm9sbEhlaWdodCkgIT0gbnVsbCA/IF9hMiA6IDAsXG4gICAgICAgIHdpZHRoOiAoX2IyID0gZWxlbSA9PSBudWxsID8gdm9pZCAwIDogZWxlbS5zY3JvbGxXaWR0aCkgIT0gbnVsbCA/IF9iMiA6IDBcbiAgICAgIH07XG4gICAgICBhd2FpdCBvbkxvYWRNb3JlKHN0YXRlKTtcbiAgICAgIGlmIChvcHRpb25zLnByZXNlcnZlU2Nyb2xsUG9zaXRpb24gJiYgZWxlbSkge1xuICAgICAgICB2dWVEZW1pLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtLnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogZWxlbS5zY3JvbGxIZWlnaHQgLSBwcmV2aW91cy5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBlbGVtLnNjcm9sbFdpZHRoIC0gcHJldmlvdXMud2lkdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodGFyZ2V0LCBjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICByb290LFxuICAgIHJvb3RNYXJnaW4gPSBcIjBweFwiLFxuICAgIHRocmVzaG9sZCA9IDAuMSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHdpbmRvdyAmJiBcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93O1xuICBsZXQgY2xlYW51cCA9IHNoYXJlZC5ub29wO1xuICBjb25zdCBzdG9wV2F0Y2ggPSBpc1N1cHBvcnRlZCA/IHZ1ZURlbWkud2F0Y2goKCkgPT4gKHtcbiAgICBlbDogdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgcm9vdDogdW5yZWZFbGVtZW50KHJvb3QpXG4gIH0pLCAoeyBlbCwgcm9vdDogcm9vdDIgfSkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCB7XG4gICAgICByb290OiByb290MixcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGRcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgY2xlYW51cCA9IHNoYXJlZC5ub29wO1xuICAgIH07XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlLCBmbHVzaDogXCJwb3N0XCIgfSkgOiBzaGFyZWQubm9vcDtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgc3RvcFdhdGNoKCk7XG4gIH07XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBzdG9wXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRFdmVudHMgPSBbXCJtb3VzZWRvd25cIiwgXCJtb3VzZXVwXCIsIFwia2V5ZG93blwiLCBcImtleXVwXCJdO1xuZnVuY3Rpb24gdXNlS2V5TW9kaWZpZXIobW9kaWZpZXIsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZXZlbnRzID0gZGVmYXVsdEV2ZW50cyxcbiAgICBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCxcbiAgICBpbml0aWFsID0gbnVsbFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlZihpbml0aWFsKTtcbiAgaWYgKGRvY3VtZW50KSB7XG4gICAgZXZlbnRzLmZvckVhY2goKGxpc3RlbmVyRXZlbnQpID0+IHtcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIGxpc3RlbmVyRXZlbnQsIChldnQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBldnQuZ2V0TW9kaWZpZXJTdGF0ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHN0YXRlLnZhbHVlID0gZXZ0LmdldE1vZGlmaWVyU3RhdGUobW9kaWZpZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2Uoa2V5LCBpbml0aWFsVmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB1c2VTdG9yYWdlKGtleSwgaW5pdGlhbFZhbHVlLCB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5sb2NhbFN0b3JhZ2UsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBEZWZhdWx0TWFnaWNLZXlzQWxpYXNNYXAgPSB7XG4gIGN0cmw6IFwiY29udHJvbFwiLFxuICBjb21tYW5kOiBcIm1ldGFcIixcbiAgY21kOiBcIm1ldGFcIixcbiAgb3B0aW9uOiBcImFsdFwiLFxuICB1cDogXCJhcnJvd3VwXCIsXG4gIGRvd246IFwiYXJyb3dkb3duXCIsXG4gIGxlZnQ6IFwiYXJyb3dsZWZ0XCIsXG4gIHJpZ2h0OiBcImFycm93cmlnaHRcIlxufTtcblxuZnVuY3Rpb24gdXNlTWFnaWNLZXlzKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgcmVhY3RpdmU6IHVzZVJlYWN0aXZlID0gZmFsc2UsXG4gICAgdGFyZ2V0ID0gZGVmYXVsdFdpbmRvdyxcbiAgICBhbGlhc01hcCA9IERlZmF1bHRNYWdpY0tleXNBbGlhc01hcCxcbiAgICBwYXNzaXZlID0gdHJ1ZSxcbiAgICBvbkV2ZW50RmlyZWQgPSBzaGFyZWQubm9vcFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY3VycmVudCA9IHZ1ZURlbWkucmVhY3RpdmUobmV3IFNldCgpKTtcbiAgY29uc3Qgb2JqID0geyB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9LCBjdXJyZW50IH07XG4gIGNvbnN0IHJlZnMgPSB1c2VSZWFjdGl2ZSA/IHZ1ZURlbWkucmVhY3RpdmUob2JqKSA6IG9iajtcbiAgY29uc3QgbWV0YURlcHMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHVzZWRLZXlzID0gbmV3IFNldCgpO1xuICBmdW5jdGlvbiBzZXRSZWZzKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIHJlZnMpIHtcbiAgICAgIGlmICh1c2VSZWFjdGl2ZSlcbiAgICAgICAgcmVmc1trZXldID0gdmFsdWU7XG4gICAgICBlbHNlXG4gICAgICAgIHJlZnNba2V5XS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB1c2VkS2V5cylcbiAgICAgIHNldFJlZnMoa2V5LCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlUmVmcyhlLCB2YWx1ZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3Qga2V5ID0gKF9hID0gZS5rZXkpID09IG51bGwgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGNvZGUgPSAoX2IgPSBlLmNvZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYi50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlcyA9IFtjb2RlLCBrZXldLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAoY29kZSkge1xuICAgICAgaWYgKHZhbHVlKVxuICAgICAgICBjdXJyZW50LmFkZChlLmNvZGUpO1xuICAgICAgZWxzZVxuICAgICAgICBjdXJyZW50LmRlbGV0ZShlLmNvZGUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleTIgb2YgdmFsdWVzKSB7XG4gICAgICB1c2VkS2V5cy5hZGQoa2V5Mik7XG4gICAgICBzZXRSZWZzKGtleTIsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gXCJtZXRhXCIgJiYgIXZhbHVlKSB7XG4gICAgICBtZXRhRGVwcy5mb3JFYWNoKChrZXkyKSA9PiB7XG4gICAgICAgIGN1cnJlbnQuZGVsZXRlKGtleTIpO1xuICAgICAgICBzZXRSZWZzKGtleTIsIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgbWV0YURlcHMuY2xlYXIoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlLmdldE1vZGlmaWVyU3RhdGUgPT09IFwiZnVuY3Rpb25cIiAmJiBlLmdldE1vZGlmaWVyU3RhdGUoXCJNZXRhXCIpICYmIHZhbHVlKSB7XG4gICAgICBbLi4uY3VycmVudCwgLi4udmFsdWVzXS5mb3JFYWNoKChrZXkyKSA9PiBtZXRhRGVwcy5hZGQoa2V5MikpO1xuICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgdXBkYXRlUmVmcyhlLCB0cnVlKTtcbiAgICAgIHJldHVybiBvbkV2ZW50RmlyZWQoZSk7XG4gICAgfSwgeyBwYXNzaXZlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImtleXVwXCIsIChlKSA9PiB7XG4gICAgICB1cGRhdGVSZWZzKGUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBvbkV2ZW50RmlyZWQoZSk7XG4gICAgfSwgeyBwYXNzaXZlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIHJlc2V0LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIHJlc2V0LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkocmVmcywge1xuICAgIGdldCh0YXJnZXQyLCBwcm9wLCByZWMpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldDIsIHByb3AsIHJlYyk7XG4gICAgICBwcm9wID0gcHJvcC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHByb3AgaW4gYWxpYXNNYXApXG4gICAgICAgIHByb3AgPSBhbGlhc01hcFtwcm9wXTtcbiAgICAgIGlmICghKHByb3AgaW4gcmVmcykpIHtcbiAgICAgICAgaWYgKC9bK18tXS8udGVzdChwcm9wKSkge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBwcm9wLnNwbGl0KC9bK18tXS9nKS5tYXAoKGkpID0+IGkudHJpbSgpKTtcbiAgICAgICAgICByZWZzW3Byb3BdID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBrZXlzLmV2ZXJ5KChrZXkpID0+IHZ1ZURlbWkudW5yZWYocHJveHlba2V5XSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3Byb3BdID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCByID0gUmVmbGVjdC5nZXQodGFyZ2V0MiwgcHJvcCwgcmVjKTtcbiAgICAgIHJldHVybiB1c2VSZWFjdGl2ZSA/IHZ1ZURlbWkudW5yZWYocikgOiByO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm94eTtcbn1cblxudmFyIF9fZGVmUHJvcCQ2ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDcgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ3ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNiA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNihvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNiA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDcuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ2KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ3KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ3KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDcuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDYoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2luZ0VsUmVmKHNvdXJjZSwgY2IpIHtcbiAgaWYgKHZ1ZURlbWkudW5yZWYoc291cmNlKSlcbiAgICBjYih2dWVEZW1pLnVucmVmKHNvdXJjZSkpO1xufVxuZnVuY3Rpb24gdGltZVJhbmdlVG9BcnJheSh0aW1lUmFuZ2VzKSB7XG4gIGxldCByYW5nZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aDsgKytpKVxuICAgIHJhbmdlcyA9IFsuLi5yYW5nZXMsIFt0aW1lUmFuZ2VzLnN0YXJ0KGkpLCB0aW1lUmFuZ2VzLmVuZChpKV1dO1xuICByZXR1cm4gcmFuZ2VzO1xufVxuZnVuY3Rpb24gdHJhY2tzVG9BcnJheSh0cmFja3MpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odHJhY2tzKS5tYXAoKHsgbGFiZWwsIGtpbmQsIGxhbmd1YWdlLCBtb2RlLCBhY3RpdmVDdWVzLCBjdWVzLCBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlIH0sIGlkKSA9PiAoeyBpZCwgbGFiZWwsIGtpbmQsIGxhbmd1YWdlLCBtb2RlLCBhY3RpdmVDdWVzLCBjdWVzLCBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlIH0pKTtcbn1cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBzcmM6IFwiXCIsXG4gIHRyYWNrczogW11cbn07XG5mdW5jdGlvbiB1c2VNZWRpYUNvbnRyb2xzKHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyQ2KF9fc3ByZWFkVmFsdWVzJDYoe30sIGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gIGNvbnN0IHtcbiAgICBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY3VycmVudFRpbWUgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgZHVyYXRpb24gPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3Qgc2Vla2luZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3Qgdm9sdW1lID0gdnVlRGVtaS5yZWYoMSk7XG4gIGNvbnN0IHdhaXRpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGVuZGVkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBwbGF5aW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCByYXRlID0gdnVlRGVtaS5yZWYoMSk7XG4gIGNvbnN0IHN0YWxsZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGJ1ZmZlcmVkID0gdnVlRGVtaS5yZWYoW10pO1xuICBjb25zdCB0cmFja3MgPSB2dWVEZW1pLnJlZihbXSk7XG4gIGNvbnN0IHNlbGVjdGVkVHJhY2sgPSB2dWVEZW1pLnJlZigtMSk7XG4gIGNvbnN0IGlzUGljdHVyZUluUGljdHVyZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgbXV0ZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSA9IGRvY3VtZW50ICYmIFwicGljdHVyZUluUGljdHVyZUVuYWJsZWRcIiBpbiBkb2N1bWVudDtcbiAgY29uc3Qgc291cmNlRXJyb3JFdmVudCA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3QgZGlzYWJsZVRyYWNrID0gKHRyYWNrKSA9PiB7XG4gICAgdXNpbmdFbFJlZih0YXJnZXQsIChlbCkgPT4ge1xuICAgICAgaWYgKHRyYWNrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gc2hhcmVkLmlzTnVtYmVyKHRyYWNrKSA/IHRyYWNrIDogdHJhY2suaWQ7XG4gICAgICAgIGVsLnRleHRUcmFja3NbaWRdLm1vZGUgPSBcImRpc2FibGVkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsLnRleHRUcmFja3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgZWwudGV4dFRyYWNrc1tpXS5tb2RlID0gXCJkaXNhYmxlZFwiO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWRUcmFjay52YWx1ZSA9IC0xO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBlbmFibGVUcmFjayA9ICh0cmFjaywgZGlzYWJsZVRyYWNrcyA9IHRydWUpID0+IHtcbiAgICB1c2luZ0VsUmVmKHRhcmdldCwgKGVsKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHNoYXJlZC5pc051bWJlcih0cmFjaykgPyB0cmFjayA6IHRyYWNrLmlkO1xuICAgICAgaWYgKGRpc2FibGVUcmFja3MpXG4gICAgICAgIGRpc2FibGVUcmFjaygpO1xuICAgICAgZWwudGV4dFRyYWNrc1tpZF0ubW9kZSA9IFwic2hvd2luZ1wiO1xuICAgICAgc2VsZWN0ZWRUcmFjay52YWx1ZSA9IGlkO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1c2luZ0VsUmVmKHRhcmdldCwgYXN5bmMgKGVsKSA9PiB7XG4gICAgICAgIGlmIChzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUpIHtcbiAgICAgICAgICBpZiAoIWlzUGljdHVyZUluUGljdHVyZS52YWx1ZSkge1xuICAgICAgICAgICAgZWwucmVxdWVzdFBpY3R1cmVJblBpY3R1cmUoKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmV4aXRQaWN0dXJlSW5QaWN0dXJlKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2hFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZG9jdW1lbnQpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSB2dWVEZW1pLnVucmVmKG9wdGlvbnMuc3JjKTtcbiAgICBsZXQgc291cmNlcyA9IFtdO1xuICAgIGlmICghc3JjKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChzaGFyZWQuaXNTdHJpbmcoc3JjKSlcbiAgICAgIHNvdXJjZXMgPSBbeyBzcmMgfV07XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzcmMpKVxuICAgICAgc291cmNlcyA9IHNyYztcbiAgICBlbHNlIGlmIChzaGFyZWQuaXNPYmplY3Qoc3JjKSlcbiAgICAgIHNvdXJjZXMgPSBbc3JjXTtcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKFwic291cmNlXCIpLmZvckVhY2goKGUpID0+IHtcbiAgICAgIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNvdXJjZUVycm9yRXZlbnQudHJpZ2dlcik7XG4gICAgICBlLnJlbW92ZSgpO1xuICAgIH0pO1xuICAgIHNvdXJjZXMuZm9yRWFjaCgoeyBzcmM6IHNyYzIsIHR5cGUgfSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNvdXJjZVwiKTtcbiAgICAgIHNvdXJjZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjMik7XG4gICAgICBzb3VyY2Uuc2V0QXR0cmlidXRlKFwidHlwZVwiLCB0eXBlIHx8IFwiXCIpO1xuICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzb3VyY2VFcnJvckV2ZW50LnRyaWdnZXIpO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoc291cmNlKTtcbiAgICB9KTtcbiAgICBlbC5sb2FkKCk7XG4gIH0pO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChcInNvdXJjZVwiKS5mb3JFYWNoKChlKSA9PiBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzb3VyY2VFcnJvckV2ZW50LnRyaWdnZXIpKTtcbiAgfSk7XG4gIHZ1ZURlbWkud2F0Y2godm9sdW1lLCAodm9sKSA9PiB7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC52b2x1bWUgPSB2b2w7XG4gIH0pO1xuICB2dWVEZW1pLndhdGNoKG11dGVkLCAobXV0ZSkgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwubXV0ZWQgPSBtdXRlO1xuICB9KTtcbiAgdnVlRGVtaS53YXRjaChyYXRlLCAocmF0ZTIpID0+IHtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGVsLnBsYXliYWNrUmF0ZSA9IHJhdGUyO1xuICB9KTtcbiAgdnVlRGVtaS53YXRjaEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0ZXh0VHJhY2tzID0gdnVlRGVtaS51bnJlZihvcHRpb25zLnRyYWNrcyk7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCF0ZXh0VHJhY2tzIHx8ICF0ZXh0VHJhY2tzLmxlbmd0aCB8fCAhZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChcInRyYWNrXCIpLmZvckVhY2goKGUpID0+IGUucmVtb3ZlKCkpO1xuICAgIHRleHRUcmFja3MuZm9yRWFjaCgoeyBkZWZhdWx0OiBpc0RlZmF1bHQsIGtpbmQsIGxhYmVsLCBzcmMsIHNyY0xhbmcgfSwgaSkgPT4ge1xuICAgICAgY29uc3QgdHJhY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidHJhY2tcIik7XG4gICAgICB0cmFjay5kZWZhdWx0ID0gaXNEZWZhdWx0IHx8IGZhbHNlO1xuICAgICAgdHJhY2sua2luZCA9IGtpbmQ7XG4gICAgICB0cmFjay5sYWJlbCA9IGxhYmVsO1xuICAgICAgdHJhY2suc3JjID0gc3JjO1xuICAgICAgdHJhY2suc3JjbGFuZyA9IHNyY0xhbmc7XG4gICAgICBpZiAodHJhY2suZGVmYXVsdClcbiAgICAgICAgc2VsZWN0ZWRUcmFjay52YWx1ZSA9IGk7XG4gICAgICBlbC5hcHBlbmRDaGlsZCh0cmFjayk7XG4gICAgfSk7XG4gIH0pO1xuICBjb25zdCB7IGlnbm9yZVVwZGF0ZXM6IGlnbm9yZUN1cnJlbnRUaW1lVXBkYXRlcyB9ID0gc2hhcmVkLndhdGNoSWdub3JhYmxlKGN1cnJlbnRUaW1lLCAodGltZSkgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwuY3VycmVudFRpbWUgPSB0aW1lO1xuICB9KTtcbiAgY29uc3QgeyBpZ25vcmVVcGRhdGVzOiBpZ25vcmVQbGF5aW5nVXBkYXRlcyB9ID0gc2hhcmVkLndhdGNoSWdub3JhYmxlKHBsYXlpbmcsIChpc1BsYXlpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGlzUGxheWluZyA/IGVsLnBsYXkoKSA6IGVsLnBhdXNlKCk7XG4gIH0pO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ0aW1ldXBkYXRlXCIsICgpID0+IGlnbm9yZUN1cnJlbnRUaW1lVXBkYXRlcygoKSA9PiBjdXJyZW50VGltZS52YWx1ZSA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KS5jdXJyZW50VGltZSkpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJkdXJhdGlvbmNoYW5nZVwiLCAoKSA9PiBkdXJhdGlvbi52YWx1ZSA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KS5kdXJhdGlvbik7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInByb2dyZXNzXCIsICgpID0+IGJ1ZmZlcmVkLnZhbHVlID0gdGltZVJhbmdlVG9BcnJheSh2dWVEZW1pLnVucmVmKHRhcmdldCkuYnVmZmVyZWQpKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwic2Vla2luZ1wiLCAoKSA9PiBzZWVraW5nLnZhbHVlID0gdHJ1ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInNlZWtlZFwiLCAoKSA9PiBzZWVraW5nLnZhbHVlID0gZmFsc2UpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ3YWl0aW5nXCIsICgpID0+IHdhaXRpbmcudmFsdWUgPSB0cnVlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicGxheWluZ1wiLCAoKSA9PiB3YWl0aW5nLnZhbHVlID0gZmFsc2UpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJyYXRlY2hhbmdlXCIsICgpID0+IHJhdGUudmFsdWUgPSB2dWVEZW1pLnVucmVmKHRhcmdldCkucGxheWJhY2tSYXRlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwic3RhbGxlZFwiLCAoKSA9PiBzdGFsbGVkLnZhbHVlID0gdHJ1ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImVuZGVkXCIsICgpID0+IGVuZGVkLnZhbHVlID0gdHJ1ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBhdXNlXCIsICgpID0+IGlnbm9yZVBsYXlpbmdVcGRhdGVzKCgpID0+IHBsYXlpbmcudmFsdWUgPSBmYWxzZSkpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJwbGF5XCIsICgpID0+IGlnbm9yZVBsYXlpbmdVcGRhdGVzKCgpID0+IHBsYXlpbmcudmFsdWUgPSB0cnVlKSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImVudGVycGljdHVyZWlucGljdHVyZVwiLCAoKSA9PiBpc1BpY3R1cmVJblBpY3R1cmUudmFsdWUgPSB0cnVlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwibGVhdmVwaWN0dXJlaW5waWN0dXJlXCIsICgpID0+IGlzUGljdHVyZUluUGljdHVyZS52YWx1ZSA9IGZhbHNlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwidm9sdW1lY2hhbmdlXCIsICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIHZvbHVtZS52YWx1ZSA9IGVsLnZvbHVtZTtcbiAgICBtdXRlZC52YWx1ZSA9IGVsLm11dGVkO1xuICB9KTtcbiAgY29uc3QgbGlzdGVuZXJzID0gW107XG4gIGNvbnN0IHN0b3AgPSB2dWVEZW1pLndhdGNoKFt0YXJnZXRdLCAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBzdG9wKCk7XG4gICAgbGlzdGVuZXJzWzBdID0gdXNlRXZlbnRMaXN0ZW5lcihlbC50ZXh0VHJhY2tzLCBcImFkZHRyYWNrXCIsICgpID0+IHRyYWNrcy52YWx1ZSA9IHRyYWNrc1RvQXJyYXkoZWwudGV4dFRyYWNrcykpO1xuICAgIGxpc3RlbmVyc1sxXSA9IHVzZUV2ZW50TGlzdGVuZXIoZWwudGV4dFRyYWNrcywgXCJyZW1vdmV0cmFja1wiLCAoKSA9PiB0cmFja3MudmFsdWUgPSB0cmFja3NUb0FycmF5KGVsLnRleHRUcmFja3MpKTtcbiAgICBsaXN0ZW5lcnNbMl0gPSB1c2VFdmVudExpc3RlbmVyKGVsLnRleHRUcmFja3MsIFwiY2hhbmdlXCIsICgpID0+IHRyYWNrcy52YWx1ZSA9IHRyYWNrc1RvQXJyYXkoZWwudGV4dFRyYWNrcykpO1xuICB9KTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoKSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lLFxuICAgIGR1cmF0aW9uLFxuICAgIHdhaXRpbmcsXG4gICAgc2Vla2luZyxcbiAgICBlbmRlZCxcbiAgICBzdGFsbGVkLFxuICAgIGJ1ZmZlcmVkLFxuICAgIHBsYXlpbmcsXG4gICAgcmF0ZSxcbiAgICB2b2x1bWUsXG4gICAgbXV0ZWQsXG4gICAgdHJhY2tzLFxuICAgIHNlbGVjdGVkVHJhY2ssXG4gICAgZW5hYmxlVHJhY2ssXG4gICAgZGlzYWJsZVRyYWNrLFxuICAgIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSxcbiAgICB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlLFxuICAgIGlzUGljdHVyZUluUGljdHVyZSxcbiAgICBvblNvdXJjZUVycm9yOiBzb3VyY2VFcnJvckV2ZW50Lm9uXG4gIH07XG59XG5cbmNvbnN0IGdldE1hcFZ1ZTJDb21wYXQgPSAoKSA9PiB7XG4gIGNvbnN0IGRhdGEgPSB2dWVEZW1pLnJlYWN0aXZlKHt9KTtcbiAgcmV0dXJuIHtcbiAgICBnZXQ6IChrZXkpID0+IGRhdGFba2V5XSxcbiAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiB2dWVEZW1pLnNldChkYXRhLCBrZXksIHZhbHVlKSxcbiAgICBoYXM6IChrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpLFxuICAgIGRlbGV0ZTogKGtleSkgPT4gdnVlRGVtaS5kZWwoZGF0YSwga2V5KSxcbiAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHZ1ZURlbWkuZGVsKGRhdGEsIGtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuZnVuY3Rpb24gdXNlTWVtb2l6ZShyZXNvbHZlciwgb3B0aW9ucykge1xuICBjb25zdCBpbml0Q2FjaGUgPSAoKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FjaGUpXG4gICAgICByZXR1cm4gdnVlRGVtaS5yZWFjdGl2ZShvcHRpb25zLmNhY2hlKTtcbiAgICBpZiAodnVlRGVtaS5pc1Z1ZTIpXG4gICAgICByZXR1cm4gZ2V0TWFwVnVlMkNvbXBhdCgpO1xuICAgIHJldHVybiB2dWVEZW1pLnJlYWN0aXZlKG5ldyBNYXAoKSk7XG4gIH07XG4gIGNvbnN0IGNhY2hlID0gaW5pdENhY2hlKCk7XG4gIGNvbnN0IGdlbmVyYXRlS2V5ID0gKC4uLmFyZ3MpID0+IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldEtleSkgPyBvcHRpb25zLmdldEtleSguLi5hcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuICBjb25zdCBfbG9hZERhdGEgPSAoa2V5LCAuLi5hcmdzKSA9PiB7XG4gICAgY2FjaGUuc2V0KGtleSwgcmVzb2x2ZXIoLi4uYXJncykpO1xuICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgfTtcbiAgY29uc3QgbG9hZERhdGEgPSAoLi4uYXJncykgPT4gX2xvYWREYXRhKGdlbmVyYXRlS2V5KC4uLmFyZ3MpLCAuLi5hcmdzKTtcbiAgY29uc3QgZGVsZXRlRGF0YSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY2FjaGUuZGVsZXRlKGdlbmVyYXRlS2V5KC4uLmFyZ3MpKTtcbiAgfTtcbiAgY29uc3QgY2xlYXJEYXRhID0gKCkgPT4ge1xuICAgIGNhY2hlLmNsZWFyKCk7XG4gIH07XG4gIGNvbnN0IG1lbW9pemVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBrZXkgPSBnZW5lcmF0ZUtleSguLi5hcmdzKTtcbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgcmV0dXJuIF9sb2FkRGF0YShrZXksIC4uLmFyZ3MpO1xuICB9O1xuICBtZW1vaXplZC5sb2FkID0gbG9hZERhdGE7XG4gIG1lbW9pemVkLmRlbGV0ZSA9IGRlbGV0ZURhdGE7XG4gIG1lbW9pemVkLmNsZWFyID0gY2xlYXJEYXRhO1xuICBtZW1vaXplZC5nZW5lcmF0ZUtleSA9IGdlbmVyYXRlS2V5O1xuICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmZ1bmN0aW9uIHVzZU1lbW9yeShvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbWVtb3J5ID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJtZW1vcnlcIiBpbiBwZXJmb3JtYW5jZTtcbiAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgY29uc3QgeyBpbnRlcnZhbCA9IDFlMyB9ID0gb3B0aW9ucztcbiAgICBzaGFyZWQudXNlSW50ZXJ2YWxGbigoKSA9PiB7XG4gICAgICBtZW1vcnkudmFsdWUgPSBwZXJmb3JtYW5jZS5tZW1vcnk7XG4gICAgfSwgaW50ZXJ2YWwsIHsgaW1tZWRpYXRlOiBvcHRpb25zLmltbWVkaWF0ZSwgaW1tZWRpYXRlQ2FsbGJhY2s6IG9wdGlvbnMuaW1tZWRpYXRlQ2FsbGJhY2sgfSk7XG4gIH1cbiAgcmV0dXJuIHsgaXNTdXBwb3J0ZWQsIG1lbW9yeSB9O1xufVxuXG5mdW5jdGlvbiB1c2VNb3VudGVkKCkge1xuICBjb25zdCBpc01vdW50ZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIHZ1ZURlbWkub25Nb3VudGVkKCgpID0+IHtcbiAgICBpc01vdW50ZWQudmFsdWUgPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIGlzTW91bnRlZDtcbn1cblxuZnVuY3Rpb24gdXNlTW91c2Uob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlID0gXCJwYWdlXCIsXG4gICAgdG91Y2ggPSB0cnVlLFxuICAgIHJlc2V0T25Ub3VjaEVuZHMgPSBmYWxzZSxcbiAgICBpbml0aWFsVmFsdWUgPSB7IHg6IDAsIHk6IDAgfSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGV2ZW50RmlsdGVyXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB4ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlLngpO1xuICBjb25zdCB5ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlLnkpO1xuICBjb25zdCBzb3VyY2VUeXBlID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IG1vdXNlSGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgIGlmICh0eXBlID09PSBcInBhZ2VcIikge1xuICAgICAgeC52YWx1ZSA9IGV2ZW50LnBhZ2VYO1xuICAgICAgeS52YWx1ZSA9IGV2ZW50LnBhZ2VZO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjbGllbnRcIikge1xuICAgICAgeC52YWx1ZSA9IGV2ZW50LmNsaWVudFg7XG4gICAgICB5LnZhbHVlID0gZXZlbnQuY2xpZW50WTtcbiAgICB9XG4gICAgc291cmNlVHlwZS52YWx1ZSA9IFwibW91c2VcIjtcbiAgfTtcbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgeC52YWx1ZSA9IGluaXRpYWxWYWx1ZS54O1xuICAgIHkudmFsdWUgPSBpbml0aWFsVmFsdWUueTtcbiAgfTtcbiAgY29uc3QgdG91Y2hIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdG91Y2gyID0gZXZlbnQudG91Y2hlc1swXTtcbiAgICAgIGlmICh0eXBlID09PSBcInBhZ2VcIikge1xuICAgICAgICB4LnZhbHVlID0gdG91Y2gyLnBhZ2VYO1xuICAgICAgICB5LnZhbHVlID0gdG91Y2gyLnBhZ2VZO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcImNsaWVudFwiKSB7XG4gICAgICAgIHgudmFsdWUgPSB0b3VjaDIuY2xpZW50WDtcbiAgICAgICAgeS52YWx1ZSA9IHRvdWNoMi5jbGllbnRZO1xuICAgICAgfVxuICAgICAgc291cmNlVHlwZS52YWx1ZSA9IFwidG91Y2hcIjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdXNlSGFuZGxlcldyYXBwZXIgPSAoZXZlbnQpID0+IHtcbiAgICByZXR1cm4gZXZlbnRGaWx0ZXIgPT09IHZvaWQgMCA/IG1vdXNlSGFuZGxlcihldmVudCkgOiBldmVudEZpbHRlcigoKSA9PiBtb3VzZUhhbmRsZXIoZXZlbnQpLCB7fSk7XG4gIH07XG4gIGNvbnN0IHRvdWNoSGFuZGxlcldyYXBwZXIgPSAoZXZlbnQpID0+IHtcbiAgICByZXR1cm4gZXZlbnRGaWx0ZXIgPT09IHZvaWQgMCA/IHRvdWNoSGFuZGxlcihldmVudCkgOiBldmVudEZpbHRlcigoKSA9PiB0b3VjaEhhbmRsZXIoZXZlbnQpLCB7fSk7XG4gIH07XG4gIGlmICh3aW5kb3cpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZW1vdmVcIiwgbW91c2VIYW5kbGVyV3JhcHBlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImRyYWdvdmVyXCIsIG1vdXNlSGFuZGxlcldyYXBwZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBpZiAodG91Y2gpIHtcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInRvdWNoc3RhcnRcIiwgdG91Y2hIYW5kbGVyV3JhcHBlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwidG91Y2htb3ZlXCIsIHRvdWNoSGFuZGxlcldyYXBwZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChyZXNldE9uVG91Y2hFbmRzKVxuICAgICAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJ0b3VjaGVuZFwiLCByZXNldCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBzb3VyY2VUeXBlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU1vdXNlSW5FbGVtZW50KHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBoYW5kbGVPdXRzaWRlID0gdHJ1ZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHgsIHksIHNvdXJjZVR5cGUgfSA9IHVzZU1vdXNlKG9wdGlvbnMpO1xuICBjb25zdCB0YXJnZXRSZWYgPSB2dWVEZW1pLnJlZih0YXJnZXQgIT0gbnVsbCA/IHRhcmdldCA6IHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93LmRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBlbGVtZW50WCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBlbGVtZW50WSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBlbGVtZW50UG9zaXRpb25YID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGVsZW1lbnRQb3NpdGlvblkgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgZWxlbWVudEhlaWdodCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBlbGVtZW50V2lkdGggPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgaXNPdXRzaWRlID0gdnVlRGVtaS5yZWYodHJ1ZSk7XG4gIGxldCBzdG9wID0gKCkgPT4ge1xuICB9O1xuICBpZiAod2luZG93KSB7XG4gICAgc3RvcCA9IHZ1ZURlbWkud2F0Y2goW3RhcmdldFJlZiwgeCwgeV0sICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdW5yZWZFbGVtZW50KHRhcmdldFJlZik7XG4gICAgICBpZiAoIWVsKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgZWxlbWVudFBvc2l0aW9uWC52YWx1ZSA9IGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICBlbGVtZW50UG9zaXRpb25ZLnZhbHVlID0gdG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgZWxlbWVudEhlaWdodC52YWx1ZSA9IGhlaWdodDtcbiAgICAgIGVsZW1lbnRXaWR0aC52YWx1ZSA9IHdpZHRoO1xuICAgICAgY29uc3QgZWxYID0geC52YWx1ZSAtIGVsZW1lbnRQb3NpdGlvblgudmFsdWU7XG4gICAgICBjb25zdCBlbFkgPSB5LnZhbHVlIC0gZWxlbWVudFBvc2l0aW9uWS52YWx1ZTtcbiAgICAgIGlzT3V0c2lkZS52YWx1ZSA9IHdpZHRoID09PSAwIHx8IGhlaWdodCA9PT0gMCB8fCBlbFggPCAwIHx8IGVsWSA8IDAgfHwgZWxYID4gd2lkdGggfHwgZWxZID4gaGVpZ2h0O1xuICAgICAgaWYgKGhhbmRsZU91dHNpZGUgfHwgIWlzT3V0c2lkZS52YWx1ZSkge1xuICAgICAgICBlbGVtZW50WC52YWx1ZSA9IGVsWDtcbiAgICAgICAgZWxlbWVudFkudmFsdWUgPSBlbFk7XG4gICAgICB9XG4gICAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgc291cmNlVHlwZSxcbiAgICBlbGVtZW50WCxcbiAgICBlbGVtZW50WSxcbiAgICBlbGVtZW50UG9zaXRpb25YLFxuICAgIGVsZW1lbnRQb3NpdGlvblksXG4gICAgZWxlbWVudEhlaWdodCxcbiAgICBlbGVtZW50V2lkdGgsXG4gICAgaXNPdXRzaWRlLFxuICAgIHN0b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTW91c2VQcmVzc2VkKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdG91Y2ggPSB0cnVlLFxuICAgIGRyYWcgPSB0cnVlLFxuICAgIGluaXRpYWxWYWx1ZSA9IGZhbHNlLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByZXNzZWQgPSB2dWVEZW1pLnJlZihpbml0aWFsVmFsdWUpO1xuICBjb25zdCBzb3VyY2VUeXBlID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXNzZWQsXG4gICAgICBzb3VyY2VUeXBlXG4gICAgfTtcbiAgfVxuICBjb25zdCBvblByZXNzZWQgPSAoc3JjVHlwZSkgPT4gKCkgPT4ge1xuICAgIHByZXNzZWQudmFsdWUgPSB0cnVlO1xuICAgIHNvdXJjZVR5cGUudmFsdWUgPSBzcmNUeXBlO1xuICB9O1xuICBjb25zdCBvblJlbGVhc2VkID0gKCkgPT4ge1xuICAgIHByZXNzZWQudmFsdWUgPSBmYWxzZTtcbiAgICBzb3VyY2VUeXBlLnZhbHVlID0gbnVsbDtcbiAgfTtcbiAgY29uc3QgdGFyZ2V0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB1bnJlZkVsZW1lbnQob3B0aW9ucy50YXJnZXQpIHx8IHdpbmRvdyk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcIm1vdXNlZG93blwiLCBvblByZXNzZWQoXCJtb3VzZVwiKSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZWxlYXZlXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwibW91c2V1cFwiLCBvblJlbGVhc2VkLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIGlmIChkcmFnKSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZHJhZ3N0YXJ0XCIsIG9uUHJlc3NlZChcIm1vdXNlXCIpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZHJvcFwiLCBvblJlbGVhc2VkLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZHJhZ2VuZFwiLCBvblJlbGVhc2VkLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgaWYgKHRvdWNoKSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwidG91Y2hzdGFydFwiLCBvblByZXNzZWQoXCJ0b3VjaFwiKSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInRvdWNoZW5kXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJ0b3VjaGNhbmNlbFwiLCBvblJlbGVhc2VkLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcmVzc2VkLFxuICAgIHNvdXJjZVR5cGVcbiAgfTtcbn1cblxudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ2ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX29ialJlc3QkMSA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDYuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzJDYpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDYoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtJDYuY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIodGFyZ2V0LCBjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBfYSwgbXV0YXRpb25PcHRpb25zID0gX19vYmpSZXN0JDEoX2EsIFtcIndpbmRvd1wiXSk7XG4gIGxldCBvYnNlcnZlcjtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSB3aW5kb3cgJiYgXCJNdXRhdGlvbk9ic2VydmVyXCIgaW4gd2luZG93O1xuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgb2JzZXJ2ZXIgPSB2b2lkIDA7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdG9wV2F0Y2ggPSB2dWVEZW1pLndhdGNoKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLCAoZWwpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKGlzU3VwcG9ydGVkICYmIHdpbmRvdyAmJiBlbCkge1xuICAgICAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVsLCBtdXRhdGlvbk9wdGlvbnMpO1xuICAgIH1cbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHN0b3BXYXRjaCgpO1xuICB9O1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgc3RvcFxuICB9O1xufVxuXG5jb25zdCB1c2VOYXZpZ2F0b3JMYW5ndWFnZSA9IChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBjb25zdCBuYXZpZ2F0b3IgPSB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5uYXZpZ2F0b3I7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbihuYXZpZ2F0b3IgJiYgXCJsYW5ndWFnZVwiIGluIG5hdmlnYXRvcik7XG4gIGNvbnN0IGxhbmd1YWdlID0gdnVlRGVtaS5yZWYobmF2aWdhdG9yID09IG51bGwgPyB2b2lkIDAgOiBuYXZpZ2F0b3IubGFuZ3VhZ2UpO1xuICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJsYW5ndWFnZWNoYW5nZVwiLCAoKSA9PiB7XG4gICAgaWYgKG5hdmlnYXRvcilcbiAgICAgIGxhbmd1YWdlLnZhbHVlID0gbmF2aWdhdG9yLmxhbmd1YWdlO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBsYW5ndWFnZVxuICB9O1xufTtcblxuZnVuY3Rpb24gdXNlTmV0d29yayhvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBjb25zdCBuYXZpZ2F0b3IgPSB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5uYXZpZ2F0b3I7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbihuYXZpZ2F0b3IgJiYgXCJjb25uZWN0aW9uXCIgaW4gbmF2aWdhdG9yKTtcbiAgY29uc3QgaXNPbmxpbmUgPSB2dWVEZW1pLnJlZih0cnVlKTtcbiAgY29uc3Qgc2F2ZURhdGEgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IG9mZmxpbmVBdCA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IG9ubGluZUF0ID0gdnVlRGVtaS5yZWYodm9pZCAwKTtcbiAgY29uc3QgZG93bmxpbmsgPSB2dWVEZW1pLnJlZih2b2lkIDApO1xuICBjb25zdCBkb3dubGlua01heCA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IHJ0dCA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IGVmZmVjdGl2ZVR5cGUgPSB2dWVEZW1pLnJlZih2b2lkIDApO1xuICBjb25zdCB0eXBlID0gdnVlRGVtaS5yZWYoXCJ1bmtub3duXCIpO1xuICBjb25zdCBjb25uZWN0aW9uID0gaXNTdXBwb3J0ZWQgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gIGZ1bmN0aW9uIHVwZGF0ZU5ldHdvcmtJbmZvcm1hdGlvbigpIHtcbiAgICBpZiAoIW5hdmlnYXRvcilcbiAgICAgIHJldHVybjtcbiAgICBpc09ubGluZS52YWx1ZSA9IG5hdmlnYXRvci5vbkxpbmU7XG4gICAgb2ZmbGluZUF0LnZhbHVlID0gaXNPbmxpbmUudmFsdWUgPyB2b2lkIDAgOiBEYXRlLm5vdygpO1xuICAgIG9ubGluZUF0LnZhbHVlID0gaXNPbmxpbmUudmFsdWUgPyBEYXRlLm5vdygpIDogdm9pZCAwO1xuICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICBkb3dubGluay52YWx1ZSA9IGNvbm5lY3Rpb24uZG93bmxpbms7XG4gICAgICBkb3dubGlua01heC52YWx1ZSA9IGNvbm5lY3Rpb24uZG93bmxpbmtNYXg7XG4gICAgICBlZmZlY3RpdmVUeXBlLnZhbHVlID0gY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlO1xuICAgICAgcnR0LnZhbHVlID0gY29ubmVjdGlvbi5ydHQ7XG4gICAgICBzYXZlRGF0YS52YWx1ZSA9IGNvbm5lY3Rpb24uc2F2ZURhdGE7XG4gICAgICB0eXBlLnZhbHVlID0gY29ubmVjdGlvbi50eXBlO1xuICAgIH1cbiAgfVxuICBpZiAod2luZG93KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwib2ZmbGluZVwiLCAoKSA9PiB7XG4gICAgICBpc09ubGluZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgb2ZmbGluZUF0LnZhbHVlID0gRGF0ZS5ub3coKTtcbiAgICB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJvbmxpbmVcIiwgKCkgPT4ge1xuICAgICAgaXNPbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgb25saW5lQXQudmFsdWUgPSBEYXRlLm5vdygpO1xuICAgIH0pO1xuICB9XG4gIGlmIChjb25uZWN0aW9uKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIoY29ubmVjdGlvbiwgXCJjaGFuZ2VcIiwgdXBkYXRlTmV0d29ya0luZm9ybWF0aW9uLCBmYWxzZSk7XG4gIHVwZGF0ZU5ldHdvcmtJbmZvcm1hdGlvbigpO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGlzT25saW5lLFxuICAgIHNhdmVEYXRhLFxuICAgIG9mZmxpbmVBdCxcbiAgICBvbmxpbmVBdCxcbiAgICBkb3dubGluayxcbiAgICBkb3dubGlua01heCxcbiAgICBlZmZlY3RpdmVUeXBlLFxuICAgIHJ0dCxcbiAgICB0eXBlXG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkNSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ1ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kNSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDUgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDUob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDUgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ1LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkNSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ1LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ1KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlTm93KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY29udHJvbHM6IGV4cG9zZUNvbnRyb2xzID0gZmFsc2UsXG4gICAgaW50ZXJ2YWwgPSBcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBub3cgPSB2dWVEZW1pLnJlZihuZXcgRGF0ZSgpKTtcbiAgY29uc3QgdXBkYXRlID0gKCkgPT4gbm93LnZhbHVlID0gbmV3IERhdGUoKTtcbiAgY29uc3QgY29udHJvbHMgPSBpbnRlcnZhbCA9PT0gXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIiA/IHVzZVJhZkZuKHVwZGF0ZSwgeyBpbW1lZGlhdGU6IHRydWUgfSkgOiBzaGFyZWQudXNlSW50ZXJ2YWxGbih1cGRhdGUsIGludGVydmFsLCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgaWYgKGV4cG9zZUNvbnRyb2xzKSB7XG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJDUoe1xuICAgICAgbm93XG4gICAgfSwgY29udHJvbHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3c7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlT2JqZWN0VXJsKG9iamVjdCkge1xuICBjb25zdCB1cmwgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCByZWxlYXNlID0gKCkgPT4ge1xuICAgIGlmICh1cmwudmFsdWUpXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybC52YWx1ZSk7XG4gICAgdXJsLnZhbHVlID0gdm9pZCAwO1xuICB9O1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHZ1ZURlbWkudW5yZWYob2JqZWN0KSwgKG5ld09iamVjdCkgPT4ge1xuICAgIHJlbGVhc2UoKTtcbiAgICBpZiAobmV3T2JqZWN0KVxuICAgICAgdXJsLnZhbHVlID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdPYmplY3QpO1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHJlbGVhc2UpO1xuICByZXR1cm4gdnVlRGVtaS5yZWFkb25seSh1cmwpO1xufVxuXG5mdW5jdGlvbiB1c2VPZmZzZXRQYWdpbmF0aW9uKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHRvdGFsID0gSW5maW5pdHksXG4gICAgcGFnZVNpemUgPSAxMCxcbiAgICBwYWdlID0gMSxcbiAgICBvblBhZ2VDaGFuZ2UgPSBzaGFyZWQubm9vcCxcbiAgICBvblBhZ2VTaXplQ2hhbmdlID0gc2hhcmVkLm5vb3AsXG4gICAgb25QYWdlQ291bnRDaGFuZ2UgPSBzaGFyZWQubm9vcFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY3VycmVudFBhZ2VTaXplID0gdXNlQ2xhbXAocGFnZVNpemUsIDEsIEluZmluaXR5KTtcbiAgY29uc3QgcGFnZUNvdW50ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBNYXRoLmNlaWwodnVlRGVtaS51bnJlZih0b3RhbCkgLyB2dWVEZW1pLnVucmVmKGN1cnJlbnRQYWdlU2l6ZSkpKTtcbiAgY29uc3QgY3VycmVudFBhZ2UgPSB1c2VDbGFtcChwYWdlLCAxLCBwYWdlQ291bnQpO1xuICBjb25zdCBpc0ZpcnN0UGFnZSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gY3VycmVudFBhZ2UudmFsdWUgPT09IDEpO1xuICBjb25zdCBpc0xhc3RQYWdlID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBjdXJyZW50UGFnZS52YWx1ZSA9PT0gcGFnZUNvdW50LnZhbHVlKTtcbiAgaWYgKHZ1ZURlbWkuaXNSZWYocGFnZSkpXG4gICAgc2hhcmVkLnN5bmNSZWYocGFnZSwgY3VycmVudFBhZ2UpO1xuICBpZiAodnVlRGVtaS5pc1JlZihwYWdlU2l6ZSkpXG4gICAgc2hhcmVkLnN5bmNSZWYocGFnZVNpemUsIGN1cnJlbnRQYWdlU2l6ZSk7XG4gIGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgY3VycmVudFBhZ2UudmFsdWUtLTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGN1cnJlbnRQYWdlLnZhbHVlKys7XG4gIH1cbiAgY29uc3QgcmV0dXJuVmFsdWUgPSB7XG4gICAgY3VycmVudFBhZ2UsXG4gICAgY3VycmVudFBhZ2VTaXplLFxuICAgIHBhZ2VDb3VudCxcbiAgICBpc0ZpcnN0UGFnZSxcbiAgICBpc0xhc3RQYWdlLFxuICAgIHByZXYsXG4gICAgbmV4dFxuICB9O1xuICB2dWVEZW1pLndhdGNoKGN1cnJlbnRQYWdlLCAoKSA9PiB7XG4gICAgb25QYWdlQ2hhbmdlKHZ1ZURlbWkucmVhY3RpdmUocmV0dXJuVmFsdWUpKTtcbiAgfSk7XG4gIHZ1ZURlbWkud2F0Y2goY3VycmVudFBhZ2VTaXplLCAoKSA9PiB7XG4gICAgb25QYWdlU2l6ZUNoYW5nZSh2dWVEZW1pLnJlYWN0aXZlKHJldHVyblZhbHVlKSk7XG4gIH0pO1xuICB2dWVEZW1pLndhdGNoKHBhZ2VDb3VudCwgKCkgPT4ge1xuICAgIG9uUGFnZUNvdW50Q2hhbmdlKHZ1ZURlbWkucmVhY3RpdmUocmV0dXJuVmFsdWUpKTtcbiAgfSk7XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXNlT25saW5lKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzT25saW5lIH0gPSB1c2VOZXR3b3JrKG9wdGlvbnMpO1xuICByZXR1cm4gaXNPbmxpbmU7XG59XG5cbmZ1bmN0aW9uIHVzZVBhZ2VMZWF2ZShvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBjb25zdCBpc0xlZnQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoIXdpbmRvdylcbiAgICAgIHJldHVybjtcbiAgICBldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDtcbiAgICBjb25zdCBmcm9tID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudC50b0VsZW1lbnQ7XG4gICAgaXNMZWZ0LnZhbHVlID0gIWZyb207XG4gIH07XG4gIGlmICh3aW5kb3cpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZW91dFwiLCBoYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsIFwibW91c2VsZWF2ZVwiLCBoYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsIFwibW91c2VlbnRlclwiLCBoYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIGlzTGVmdDtcbn1cblxuZnVuY3Rpb24gdXNlUGFyYWxsYXgodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRldmljZU9yaWVudGF0aW9uVGlsdEFkanVzdCA9IChpKSA9PiBpLFxuICAgIGRldmljZU9yaWVudGF0aW9uUm9sbEFkanVzdCA9IChpKSA9PiBpLFxuICAgIG1vdXNlVGlsdEFkanVzdCA9IChpKSA9PiBpLFxuICAgIG1vdXNlUm9sbEFkanVzdCA9IChpKSA9PiBpLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG9yaWVudGF0aW9uID0gdnVlRGVtaS5yZWFjdGl2ZSh1c2VEZXZpY2VPcmllbnRhdGlvbih7IHdpbmRvdyB9KSk7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50WDogeCxcbiAgICBlbGVtZW50WTogeSxcbiAgICBlbGVtZW50V2lkdGg6IHdpZHRoLFxuICAgIGVsZW1lbnRIZWlnaHQ6IGhlaWdodFxuICB9ID0gdXNlTW91c2VJbkVsZW1lbnQodGFyZ2V0LCB7IGhhbmRsZU91dHNpZGU6IGZhbHNlLCB3aW5kb3cgfSk7XG4gIGNvbnN0IHNvdXJjZSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChvcmllbnRhdGlvbi5pc1N1cHBvcnRlZCAmJiAob3JpZW50YXRpb24uYWxwaGEgIT0gbnVsbCAmJiBvcmllbnRhdGlvbi5hbHBoYSAhPT0gMCB8fCBvcmllbnRhdGlvbi5nYW1tYSAhPSBudWxsICYmIG9yaWVudGF0aW9uLmdhbW1hICE9PSAwKSlcbiAgICAgIHJldHVybiBcImRldmljZU9yaWVudGF0aW9uXCI7XG4gICAgcmV0dXJuIFwibW91c2VcIjtcbiAgfSk7XG4gIGNvbnN0IHJvbGwgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoc291cmNlLnZhbHVlID09PSBcImRldmljZU9yaWVudGF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gLW9yaWVudGF0aW9uLmJldGEgLyA5MDtcbiAgICAgIHJldHVybiBkZXZpY2VPcmllbnRhdGlvblJvbGxBZGp1c3QodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IC0oeS52YWx1ZSAtIGhlaWdodC52YWx1ZSAvIDIpIC8gaGVpZ2h0LnZhbHVlO1xuICAgICAgcmV0dXJuIG1vdXNlUm9sbEFkanVzdCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgdGlsdCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChzb3VyY2UudmFsdWUgPT09IFwiZGV2aWNlT3JpZW50YXRpb25cIikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcmllbnRhdGlvbi5nYW1tYSAvIDkwO1xuICAgICAgcmV0dXJuIGRldmljZU9yaWVudGF0aW9uVGlsdEFkanVzdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHgudmFsdWUgLSB3aWR0aC52YWx1ZSAvIDIpIC8gd2lkdGgudmFsdWU7XG4gICAgICByZXR1cm4gbW91c2VUaWx0QWRqdXN0KHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4geyByb2xsLCB0aWx0LCBzb3VyY2UgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ0ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ0ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kNCA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDQgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDQob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDQgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ0LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkNClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNChiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ0LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ0KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMSA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDEoYSwgX19nZXRPd25Qcm9wRGVzY3MkMShiKSk7XG5jb25zdCBkZWZhdWx0U3RhdGUgPSB7XG4gIHg6IDAsXG4gIHk6IDAsXG4gIHBvaW50ZXJJZDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRpbHRYOiAwLFxuICB0aWx0WTogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgdHdpc3Q6IDAsXG4gIHBvaW50ZXJUeXBlOiBudWxsXG59O1xuY29uc3Qga2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3Qua2V5cyhkZWZhdWx0U3RhdGUpO1xuZnVuY3Rpb24gdXNlUG9pbnRlcihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRhcmdldCA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzSW5zaWRlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkucmVmKG9wdGlvbnMuaW5pdGlhbFZhbHVlIHx8IHt9KTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS52YWx1ZSwgZGVmYXVsdFN0YXRlLCBzdGF0ZS52YWx1ZSk7XG4gIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpc0luc2lkZS52YWx1ZSA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMucG9pbnRlclR5cGVzICYmICFvcHRpb25zLnBvaW50ZXJUeXBlcy5pbmNsdWRlcyhldmVudC5wb2ludGVyVHlwZSkpXG4gICAgICByZXR1cm47XG4gICAgc3RhdGUudmFsdWUgPSBzaGFyZWQub2JqZWN0UGljayhldmVudCwga2V5cywgZmFsc2UpO1xuICB9O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcmRvd25cIiwgaGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBvaW50ZXJtb3ZlXCIsIGhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJwb2ludGVybGVhdmVcIiwgKCkgPT4gaXNJbnNpZGUudmFsdWUgPSBmYWxzZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBfX3NwcmVhZFByb3BzJDEoX19zcHJlYWRWYWx1ZXMkNCh7fSwgc2hhcmVkLnRvUmVmcyhzdGF0ZSkpLCB7XG4gICAgaXNJbnNpZGVcbiAgfSk7XG59XG5cbmV4cG9ydHMuU3dpcGVEaXJlY3Rpb24gPSB2b2lkIDA7XG4oZnVuY3Rpb24oU3dpcGVEaXJlY3Rpb24yKSB7XG4gIFN3aXBlRGlyZWN0aW9uMltcIlVQXCJdID0gXCJVUFwiO1xuICBTd2lwZURpcmVjdGlvbjJbXCJSSUdIVFwiXSA9IFwiUklHSFRcIjtcbiAgU3dpcGVEaXJlY3Rpb24yW1wiRE9XTlwiXSA9IFwiRE9XTlwiO1xuICBTd2lwZURpcmVjdGlvbjJbXCJMRUZUXCJdID0gXCJMRUZUXCI7XG4gIFN3aXBlRGlyZWN0aW9uMltcIk5PTkVcIl0gPSBcIk5PTkVcIjtcbn0pKGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24gfHwgKGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24gPSB7fSkpO1xuZnVuY3Rpb24gdXNlU3dpcGUodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRocmVzaG9sZCA9IDUwLFxuICAgIG9uU3dpcGUsXG4gICAgb25Td2lwZUVuZCxcbiAgICBvblN3aXBlU3RhcnQsXG4gICAgcGFzc2l2ZSA9IHRydWUsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY29vcmRzU3RhcnQgPSB2dWVEZW1pLnJlYWN0aXZlKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgY29vcmRzRW5kID0gdnVlRGVtaS5yZWFjdGl2ZSh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IGRpZmZYID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBjb29yZHNTdGFydC54IC0gY29vcmRzRW5kLngpO1xuICBjb25zdCBkaWZmWSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gY29vcmRzU3RhcnQueSAtIGNvb3Jkc0VuZC55KTtcbiAgY29uc3QgeyBtYXgsIGFicyB9ID0gTWF0aDtcbiAgY29uc3QgaXNUaHJlc2hvbGRFeGNlZWRlZCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gbWF4KGFicyhkaWZmWC52YWx1ZSksIGFicyhkaWZmWS52YWx1ZSkpID49IHRocmVzaG9sZCk7XG4gIGNvbnN0IGlzU3dpcGluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgZGlyZWN0aW9uID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1RocmVzaG9sZEV4Y2VlZGVkLnZhbHVlKVxuICAgICAgcmV0dXJuIGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uTk9ORTtcbiAgICBpZiAoYWJzKGRpZmZYLnZhbHVlKSA+IGFicyhkaWZmWS52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBkaWZmWC52YWx1ZSA+IDAgPyBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLkxFRlQgOiBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLlJJR0hUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlmZlkudmFsdWUgPiAwID8gZXhwb3J0cy5Td2lwZURpcmVjdGlvbi5VUCA6IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uRE9XTjtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBnZXRUb3VjaEV2ZW50Q29vcmRzID0gKGUpID0+IFtlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFldO1xuICBjb25zdCB1cGRhdGVDb29yZHNTdGFydCA9ICh4LCB5KSA9PiB7XG4gICAgY29vcmRzU3RhcnQueCA9IHg7XG4gICAgY29vcmRzU3RhcnQueSA9IHk7XG4gIH07XG4gIGNvbnN0IHVwZGF0ZUNvb3Jkc0VuZCA9ICh4LCB5KSA9PiB7XG4gICAgY29vcmRzRW5kLnggPSB4O1xuICAgIGNvb3Jkc0VuZC55ID0geTtcbiAgfTtcbiAgbGV0IGxpc3RlbmVyT3B0aW9ucztcbiAgY29uc3QgaXNQYXNzaXZlRXZlbnRTdXBwb3J0ZWQgPSBjaGVja1Bhc3NpdmVFdmVudFN1cHBvcnQod2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuZG9jdW1lbnQpO1xuICBpZiAoIXBhc3NpdmUpXG4gICAgbGlzdGVuZXJPcHRpb25zID0gaXNQYXNzaXZlRXZlbnRTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiB0cnVlIH0gOiB7IGNhcHR1cmU6IHRydWUgfTtcbiAgZWxzZVxuICAgIGxpc3RlbmVyT3B0aW9ucyA9IGlzUGFzc2l2ZUV2ZW50U3VwcG9ydGVkID8geyBwYXNzaXZlOiB0cnVlIH0gOiB7IGNhcHR1cmU6IGZhbHNlIH07XG4gIGNvbnN0IG9uVG91Y2hFbmQgPSAoZSkgPT4ge1xuICAgIGlmIChpc1N3aXBpbmcudmFsdWUpXG4gICAgICBvblN3aXBlRW5kID09IG51bGwgPyB2b2lkIDAgOiBvblN3aXBlRW5kKGUsIGRpcmVjdGlvbi52YWx1ZSk7XG4gICAgaXNTd2lwaW5nLnZhbHVlID0gZmFsc2U7XG4gIH07XG4gIGNvbnN0IHN0b3BzID0gW1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInRvdWNoc3RhcnRcIiwgKGUpID0+IHtcbiAgICAgIGlmIChsaXN0ZW5lck9wdGlvbnMuY2FwdHVyZSAmJiAhbGlzdGVuZXJPcHRpb25zLnBhc3NpdmUpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IFt4LCB5XSA9IGdldFRvdWNoRXZlbnRDb29yZHMoZSk7XG4gICAgICB1cGRhdGVDb29yZHNTdGFydCh4LCB5KTtcbiAgICAgIHVwZGF0ZUNvb3Jkc0VuZCh4LCB5KTtcbiAgICAgIG9uU3dpcGVTdGFydCA9PSBudWxsID8gdm9pZCAwIDogb25Td2lwZVN0YXJ0KGUpO1xuICAgIH0sIGxpc3RlbmVyT3B0aW9ucyksXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwidG91Y2htb3ZlXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCBbeCwgeV0gPSBnZXRUb3VjaEV2ZW50Q29vcmRzKGUpO1xuICAgICAgdXBkYXRlQ29vcmRzRW5kKHgsIHkpO1xuICAgICAgaWYgKCFpc1N3aXBpbmcudmFsdWUgJiYgaXNUaHJlc2hvbGRFeGNlZWRlZC52YWx1ZSlcbiAgICAgICAgaXNTd2lwaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChpc1N3aXBpbmcudmFsdWUpXG4gICAgICAgIG9uU3dpcGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9uU3dpcGUoZSk7XG4gICAgfSwgbGlzdGVuZXJPcHRpb25zKSxcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ0b3VjaGVuZFwiLCBvblRvdWNoRW5kLCBsaXN0ZW5lck9wdGlvbnMpLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInRvdWNoY2FuY2VsXCIsIG9uVG91Y2hFbmQsIGxpc3RlbmVyT3B0aW9ucylcbiAgXTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHN0b3BzLmZvckVhY2goKHMpID0+IHMoKSk7XG4gIHJldHVybiB7XG4gICAgaXNQYXNzaXZlRXZlbnRTdXBwb3J0ZWQsXG4gICAgaXNTd2lwaW5nLFxuICAgIGRpcmVjdGlvbixcbiAgICBjb29yZHNTdGFydCxcbiAgICBjb29yZHNFbmQsXG4gICAgbGVuZ3RoWDogZGlmZlgsXG4gICAgbGVuZ3RoWTogZGlmZlksXG4gICAgc3RvcFxuICB9O1xufVxuZnVuY3Rpb24gY2hlY2tQYXNzaXZlRXZlbnRTdXBwb3J0KGRvY3VtZW50KSB7XG4gIGlmICghZG9jdW1lbnQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIGNvbnN0IG9wdGlvbnNCbG9jayA9IHtcbiAgICBnZXQgcGFzc2l2ZSgpIHtcbiAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwieFwiLCBzaGFyZWQubm9vcCwgb3B0aW9uc0Jsb2NrKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInhcIiwgc2hhcmVkLm5vb3ApO1xuICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlO1xufVxuXG5mdW5jdGlvbiB1c2VQb2ludGVyU3dpcGUodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgdGFyZ2V0UmVmID0gdnVlRGVtaS5yZWYodGFyZ2V0KTtcbiAgY29uc3Qge1xuICAgIHRocmVzaG9sZCA9IDUwLFxuICAgIG9uU3dpcGUsXG4gICAgb25Td2lwZUVuZCxcbiAgICBvblN3aXBlU3RhcnRcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHBvc1N0YXJ0ID0gdnVlRGVtaS5yZWFjdGl2ZSh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IHVwZGF0ZVBvc1N0YXJ0ID0gKHgsIHkpID0+IHtcbiAgICBwb3NTdGFydC54ID0geDtcbiAgICBwb3NTdGFydC55ID0geTtcbiAgfTtcbiAgY29uc3QgcG9zRW5kID0gdnVlRGVtaS5yZWFjdGl2ZSh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IHVwZGF0ZVBvc0VuZCA9ICh4LCB5KSA9PiB7XG4gICAgcG9zRW5kLnggPSB4O1xuICAgIHBvc0VuZC55ID0geTtcbiAgfTtcbiAgY29uc3QgZGlzdGFuY2VYID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBwb3NTdGFydC54IC0gcG9zRW5kLngpO1xuICBjb25zdCBkaXN0YW5jZVkgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHBvc1N0YXJ0LnkgLSBwb3NFbmQueSk7XG4gIGNvbnN0IHsgbWF4LCBhYnMgfSA9IE1hdGg7XG4gIGNvbnN0IGlzVGhyZXNob2xkRXhjZWVkZWQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IG1heChhYnMoZGlzdGFuY2VYLnZhbHVlKSwgYWJzKGRpc3RhbmNlWS52YWx1ZSkpID49IHRocmVzaG9sZCk7XG4gIGNvbnN0IGlzU3dpcGluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgaXNQb2ludGVyRG93biA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgZGlyZWN0aW9uID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1RocmVzaG9sZEV4Y2VlZGVkLnZhbHVlKVxuICAgICAgcmV0dXJuIGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uTk9ORTtcbiAgICBpZiAoYWJzKGRpc3RhbmNlWC52YWx1ZSkgPiBhYnMoZGlzdGFuY2VZLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRpc3RhbmNlWC52YWx1ZSA+IDAgPyBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLkxFRlQgOiBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLlJJR0hUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlzdGFuY2VZLnZhbHVlID4gMCA/IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uVVAgOiBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLkRPV047XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZmlsdGVyRXZlbnQgPSAoZSkgPT4ge1xuICAgIGlmIChvcHRpb25zLnBvaW50ZXJUeXBlcylcbiAgICAgIHJldHVybiBvcHRpb25zLnBvaW50ZXJUeXBlcy5pbmNsdWRlcyhlLnBvaW50ZXJUeXBlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgY29uc3Qgc3RvcHMgPSBbXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcmRvd25cIiwgKGUpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBpZiAoIWZpbHRlckV2ZW50KGUpKVxuICAgICAgICByZXR1cm47XG4gICAgICBpc1BvaW50ZXJEb3duLnZhbHVlID0gdHJ1ZTtcbiAgICAgIChfYiA9IChfYSA9IHRhcmdldFJlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN0eWxlKSA9PSBudWxsID8gdm9pZCAwIDogX2Iuc2V0UHJvcGVydHkoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpO1xuICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIGV2ZW50VGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiBldmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICBjb25zdCB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSA9IGU7XG4gICAgICB1cGRhdGVQb3NTdGFydCh4LCB5KTtcbiAgICAgIHVwZGF0ZVBvc0VuZCh4LCB5KTtcbiAgICAgIG9uU3dpcGVTdGFydCA9PSBudWxsID8gdm9pZCAwIDogb25Td2lwZVN0YXJ0KGUpO1xuICAgIH0pLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBvaW50ZXJtb3ZlXCIsIChlKSA9PiB7XG4gICAgICBpZiAoIWZpbHRlckV2ZW50KGUpKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWlzUG9pbnRlckRvd24udmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9ID0gZTtcbiAgICAgIHVwZGF0ZVBvc0VuZCh4LCB5KTtcbiAgICAgIGlmICghaXNTd2lwaW5nLnZhbHVlICYmIGlzVGhyZXNob2xkRXhjZWVkZWQudmFsdWUpXG4gICAgICAgIGlzU3dpcGluZy52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoaXNTd2lwaW5nLnZhbHVlKVxuICAgICAgICBvblN3aXBlID09IG51bGwgPyB2b2lkIDAgOiBvblN3aXBlKGUpO1xuICAgIH0pLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBvaW50ZXJ1cFwiLCAoZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGlmICghZmlsdGVyRXZlbnQoZSkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc1N3aXBpbmcudmFsdWUpXG4gICAgICAgIG9uU3dpcGVFbmQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uU3dpcGVFbmQoZSwgZGlyZWN0aW9uLnZhbHVlKTtcbiAgICAgIGlzUG9pbnRlckRvd24udmFsdWUgPSBmYWxzZTtcbiAgICAgIGlzU3dpcGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgKF9iID0gKF9hID0gdGFyZ2V0UmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc3R5bGUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5zZXRQcm9wZXJ0eShcInRvdWNoLWFjdGlvblwiLCBcImluaXRpYWxcIik7XG4gICAgfSlcbiAgXTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHN0b3BzLmZvckVhY2goKHMpID0+IHMoKSk7XG4gIHJldHVybiB7XG4gICAgaXNTd2lwaW5nOiB2dWVEZW1pLnJlYWRvbmx5KGlzU3dpcGluZyksXG4gICAgZGlyZWN0aW9uOiB2dWVEZW1pLnJlYWRvbmx5KGRpcmVjdGlvbiksXG4gICAgcG9zU3RhcnQ6IHZ1ZURlbWkucmVhZG9ubHkocG9zU3RhcnQpLFxuICAgIHBvc0VuZDogdnVlRGVtaS5yZWFkb25seShwb3NFbmQpLFxuICAgIGRpc3RhbmNlWCxcbiAgICBkaXN0YW5jZVksXG4gICAgc3RvcFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VQcmVmZXJyZWRDb2xvclNjaGVtZShvcHRpb25zKSB7XG4gIGNvbnN0IGlzTGlnaHQgPSB1c2VNZWRpYVF1ZXJ5KFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodClcIiwgb3B0aW9ucyk7XG4gIGNvbnN0IGlzRGFyayA9IHVzZU1lZGlhUXVlcnkoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIsIG9wdGlvbnMpO1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKGlzRGFyay52YWx1ZSlcbiAgICAgIHJldHVybiBcImRhcmtcIjtcbiAgICBpZiAoaXNMaWdodC52YWx1ZSlcbiAgICAgIHJldHVybiBcImxpZ2h0XCI7XG4gICAgcmV0dXJuIFwibm8tcHJlZmVyZW5jZVwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlUHJlZmVycmVkTGFuZ3VhZ2VzKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGlmICghd2luZG93KVxuICAgIHJldHVybiB2dWVEZW1pLnJlZihbXCJlblwiXSk7XG4gIGNvbnN0IG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3I7XG4gIGNvbnN0IHZhbHVlID0gdnVlRGVtaS5yZWYobmF2aWdhdG9yLmxhbmd1YWdlcyk7XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImxhbmd1YWdlY2hhbmdlXCIsICgpID0+IHtcbiAgICB2YWx1ZS52YWx1ZSA9IG5hdmlnYXRvci5sYW5ndWFnZXM7XG4gIH0pO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmNvbnN0IHVzZVNjcmVlbk9yaWVudGF0aW9uID0gKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSAhISh3aW5kb3cgJiYgXCJzY3JlZW5cIiBpbiB3aW5kb3cgJiYgXCJvcmllbnRhdGlvblwiIGluIHdpbmRvdy5zY3JlZW4pO1xuICBjb25zdCBzY3JlZW5PcmllbnRhdGlvbiA9IGlzU3VwcG9ydGVkID8gd2luZG93LnNjcmVlbi5vcmllbnRhdGlvbiA6IHt9O1xuICBjb25zdCBvcmllbnRhdGlvbiA9IHZ1ZURlbWkucmVmKHNjcmVlbk9yaWVudGF0aW9uLnR5cGUpO1xuICBjb25zdCBhbmdsZSA9IHZ1ZURlbWkucmVmKHNjcmVlbk9yaWVudGF0aW9uLmFuZ2xlIHx8IDApO1xuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJvcmllbnRhdGlvbmNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICBvcmllbnRhdGlvbi52YWx1ZSA9IHNjcmVlbk9yaWVudGF0aW9uLnR5cGU7XG4gICAgICBhbmdsZS52YWx1ZSA9IHNjcmVlbk9yaWVudGF0aW9uLmFuZ2xlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGxvY2tPcmllbnRhdGlvbiA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkXCIpKTtcbiAgICByZXR1cm4gc2NyZWVuT3JpZW50YXRpb24ubG9jayh0eXBlKTtcbiAgfTtcbiAgY29uc3QgdW5sb2NrT3JpZW50YXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKGlzU3VwcG9ydGVkKVxuICAgICAgc2NyZWVuT3JpZW50YXRpb24udW5sb2NrKCk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgb3JpZW50YXRpb24sXG4gICAgYW5nbGUsXG4gICAgbG9ja09yaWVudGF0aW9uLFxuICAgIHVubG9ja09yaWVudGF0aW9uXG4gIH07XG59O1xuXG5jb25zdCB0b3BWYXJOYW1lID0gXCItLXZ1ZXVzZS1zYWZlLWFyZWEtdG9wXCI7XG5jb25zdCByaWdodFZhck5hbWUgPSBcIi0tdnVldXNlLXNhZmUtYXJlYS1yaWdodFwiO1xuY29uc3QgYm90dG9tVmFyTmFtZSA9IFwiLS12dWV1c2Utc2FmZS1hcmVhLWJvdHRvbVwiO1xuY29uc3QgbGVmdFZhck5hbWUgPSBcIi0tdnVldXNlLXNhZmUtYXJlYS1sZWZ0XCI7XG5mdW5jdGlvbiB1c2VTY3JlZW5TYWZlQXJlYSgpIHtcbiAgY29uc3QgdG9wID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IHJpZ2h0ID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IGJvdHRvbSA9IHZ1ZURlbWkucmVmKFwiXCIpO1xuICBjb25zdCBsZWZ0ID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGlmIChzaGFyZWQuaXNDbGllbnQpIHtcbiAgICBjb25zdCB0b3BDc3NWYXIgPSB1c2VDc3NWYXIodG9wVmFyTmFtZSk7XG4gICAgY29uc3QgcmlnaHRDc3NWYXIgPSB1c2VDc3NWYXIocmlnaHRWYXJOYW1lKTtcbiAgICBjb25zdCBib3R0b21Dc3NWYXIgPSB1c2VDc3NWYXIoYm90dG9tVmFyTmFtZSk7XG4gICAgY29uc3QgbGVmdENzc1ZhciA9IHVzZUNzc1ZhcihsZWZ0VmFyTmFtZSk7XG4gICAgdG9wQ3NzVmFyLnZhbHVlID0gXCJlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCwgMHB4KVwiO1xuICAgIHJpZ2h0Q3NzVmFyLnZhbHVlID0gXCJlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0LCAwcHgpXCI7XG4gICAgYm90dG9tQ3NzVmFyLnZhbHVlID0gXCJlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KVwiO1xuICAgIGxlZnRDc3NWYXIudmFsdWUgPSBcImVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCwgMHB4KVwiO1xuICAgIHVwZGF0ZSgpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgc2hhcmVkLnVzZURlYm91bmNlRm4odXBkYXRlKSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHRvcC52YWx1ZSA9IGdldFZhbHVlKHRvcFZhck5hbWUpO1xuICAgIHJpZ2h0LnZhbHVlID0gZ2V0VmFsdWUocmlnaHRWYXJOYW1lKTtcbiAgICBib3R0b20udmFsdWUgPSBnZXRWYWx1ZShib3R0b21WYXJOYW1lKTtcbiAgICBsZWZ0LnZhbHVlID0gZ2V0VmFsdWUobGVmdFZhck5hbWUpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9wLFxuICAgIHJpZ2h0LFxuICAgIGJvdHRvbSxcbiAgICBsZWZ0LFxuICAgIHVwZGF0ZVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUocG9zaXRpb24pIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHBvc2l0aW9uKTtcbn1cblxuZnVuY3Rpb24gdXNlU2NyaXB0VGFnKHNyYywgb25Mb2FkZWQgPSBzaGFyZWQubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpbW1lZGlhdGUgPSB0cnVlLFxuICAgIG1hbnVhbCA9IGZhbHNlLFxuICAgIHR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiLFxuICAgIGFzeW5jID0gdHJ1ZSxcbiAgICBjcm9zc09yaWdpbixcbiAgICByZWZlcnJlclBvbGljeSxcbiAgICBub01vZHVsZSxcbiAgICBkZWZlcixcbiAgICBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCxcbiAgICBhdHRycyA9IHt9XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBzY3JpcHRUYWcgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgbGV0IF9wcm9taXNlID0gbnVsbDtcbiAgY29uc3QgbG9hZFNjcmlwdCA9ICh3YWl0Rm9yU2NyaXB0TG9hZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVXaXRoRWxlbWVudCA9IChlbDIpID0+IHtcbiAgICAgIHNjcmlwdFRhZy52YWx1ZSA9IGVsMjtcbiAgICAgIHJlc29sdmUoZWwyKTtcbiAgICAgIHJldHVybiBlbDI7XG4gICAgfTtcbiAgICBpZiAoIWRvY3VtZW50KSB7XG4gICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNob3VsZEFwcGVuZCA9IGZhbHNlO1xuICAgIGxldCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICBlbC50eXBlID0gdHlwZTtcbiAgICAgIGVsLmFzeW5jID0gYXN5bmM7XG4gICAgICBlbC5zcmMgPSB2dWVEZW1pLnVucmVmKHNyYyk7XG4gICAgICBpZiAoZGVmZXIpXG4gICAgICAgIGVsLmRlZmVyID0gZGVmZXI7XG4gICAgICBpZiAoY3Jvc3NPcmlnaW4pXG4gICAgICAgIGVsLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICBpZiAobm9Nb2R1bGUpXG4gICAgICAgIGVsLm5vTW9kdWxlID0gbm9Nb2R1bGU7XG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3kpXG4gICAgICAgIGVsLnJlZmVycmVyUG9saWN5ID0gcmVmZXJyZXJQb2xpY3k7XG4gICAgICBPYmplY3QuZW50cmllcyhhdHRycykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpO1xuICAgICAgc2hvdWxkQXBwZW5kID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtbG9hZGVkXCIpKSB7XG4gICAgICByZXNvbHZlV2l0aEVsZW1lbnQoZWwpO1xuICAgIH1cbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKGV2ZW50KSA9PiByZWplY3QoZXZlbnQpKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKGV2ZW50KSA9PiByZWplY3QoZXZlbnQpKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxvYWRlZFwiLCBcInRydWVcIik7XG4gICAgICBvbkxvYWRlZChlbCk7XG4gICAgICByZXNvbHZlV2l0aEVsZW1lbnQoZWwpO1xuICAgIH0pO1xuICAgIGlmIChzaG91bGRBcHBlbmQpXG4gICAgICBlbCA9IGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIGlmICghd2FpdEZvclNjcmlwdExvYWQpXG4gICAgICByZXNvbHZlV2l0aEVsZW1lbnQoZWwpO1xuICB9KTtcbiAgY29uc3QgbG9hZCA9ICh3YWl0Rm9yU2NyaXB0TG9hZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIV9wcm9taXNlKVxuICAgICAgX3Byb21pc2UgPSBsb2FkU2NyaXB0KHdhaXRGb3JTY3JpcHRMb2FkKTtcbiAgICByZXR1cm4gX3Byb21pc2U7XG4gIH07XG4gIGNvbnN0IHVubG9hZCA9ICgpID0+IHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgcmV0dXJuO1xuICAgIF9wcm9taXNlID0gbnVsbDtcbiAgICBpZiAoc2NyaXB0VGFnLnZhbHVlKVxuICAgICAgc2NyaXB0VGFnLnZhbHVlID0gbnVsbDtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKTtcbiAgICBpZiAoZWwpXG4gICAgICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGVsKTtcbiAgfTtcbiAgaWYgKGltbWVkaWF0ZSAmJiAhbWFudWFsKVxuICAgIHNoYXJlZC50cnlPbk1vdW50ZWQobG9hZCk7XG4gIGlmICghbWFudWFsKVxuICAgIHNoYXJlZC50cnlPblVubW91bnRlZCh1bmxvYWQpO1xuICByZXR1cm4geyBzY3JpcHRUYWcsIGxvYWQsIHVubG9hZCB9O1xufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChyYXdFdmVudCkge1xuICBjb25zdCBlID0gcmF3RXZlbnQgfHwgd2luZG93LmV2ZW50O1xuICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+IDEpXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmIChlLnByZXZlbnREZWZhdWx0KVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gdXNlU2Nyb2xsTG9jayhlbGVtZW50LCBpbml0aWFsU3RhdGUgPSBmYWxzZSkge1xuICBjb25zdCBpc0xvY2tlZCA9IHZ1ZURlbWkucmVmKGluaXRpYWxTdGF0ZSk7XG4gIGxldCBzdG9wVG91Y2hNb3ZlTGlzdGVuZXIgPSBudWxsO1xuICBsZXQgaW5pdGlhbE92ZXJmbG93O1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHZ1ZURlbWkudW5yZWYoZWxlbWVudCksIChlbCkgPT4ge1xuICAgIGlmIChlbCkge1xuICAgICAgY29uc3QgZWxlID0gZWw7XG4gICAgICBpbml0aWFsT3ZlcmZsb3cgPSBlbGUuc3R5bGUub3ZlcmZsb3c7XG4gICAgICBpZiAoaXNMb2NrZWQudmFsdWUpXG4gICAgICAgIGVsZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgfVxuICB9LCB7XG4gICAgaW1tZWRpYXRlOiB0cnVlXG4gIH0pO1xuICBjb25zdCBsb2NrID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZSA9IHZ1ZURlbWkudW5yZWYoZWxlbWVudCk7XG4gICAgaWYgKCFlbGUgfHwgaXNMb2NrZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHNoYXJlZC5pc0lPUykge1xuICAgICAgc3RvcFRvdWNoTW92ZUxpc3RlbmVyID0gdXNlRXZlbnRMaXN0ZW5lcihlbGUsIFwidG91Y2htb3ZlXCIsIHByZXZlbnREZWZhdWx0LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBlbGUuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIGlzTG9ja2VkLnZhbHVlID0gdHJ1ZTtcbiAgfTtcbiAgY29uc3QgdW5sb2NrID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZSA9IHZ1ZURlbWkudW5yZWYoZWxlbWVudCk7XG4gICAgaWYgKCFlbGUgfHwgIWlzTG9ja2VkLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHNoYXJlZC5pc0lPUyAmJiAoc3RvcFRvdWNoTW92ZUxpc3RlbmVyID09IG51bGwgPyB2b2lkIDAgOiBzdG9wVG91Y2hNb3ZlTGlzdGVuZXIoKSk7XG4gICAgZWxlLnN0eWxlLm92ZXJmbG93ID0gaW5pdGlhbE92ZXJmbG93O1xuICAgIGlzTG9ja2VkLnZhbHVlID0gZmFsc2U7XG4gIH07XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSh1bmxvY2spO1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGlzTG9ja2VkLnZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHYpIHtcbiAgICAgIGlmICh2KVxuICAgICAgICBsb2NrKCk7XG4gICAgICBlbHNlXG4gICAgICAgIHVubG9jaygpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZVNlc3Npb25TdG9yYWdlKGtleSwgaW5pdGlhbFZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICByZXR1cm4gdXNlU3RvcmFnZShrZXksIGluaXRpYWxWYWx1ZSwgd2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UsIG9wdGlvbnMpO1xufVxuXG52YXIgX19kZWZQcm9wJDMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkMyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDMgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQzID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQzKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkMy5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDMoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kMy5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkMyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzZVNoYXJlKHNoYXJlT3B0aW9ucyA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yIH0gPSBvcHRpb25zO1xuICBjb25zdCBfbmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IF9uYXZpZ2F0b3IgJiYgXCJjYW5TaGFyZVwiIGluIF9uYXZpZ2F0b3I7XG4gIGNvbnN0IHNoYXJlID0gYXN5bmMgKG92ZXJyaWRlT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgICBjb25zdCBkYXRhID0gX19zcHJlYWRWYWx1ZXMkMyhfX3NwcmVhZFZhbHVlcyQzKHt9LCB2dWVEZW1pLnVucmVmKHNoYXJlT3B0aW9ucykpLCB2dWVEZW1pLnVucmVmKG92ZXJyaWRlT3B0aW9ucykpO1xuICAgICAgbGV0IGdyYW50ZWQgPSB0cnVlO1xuICAgICAgaWYgKGRhdGEuZmlsZXMgJiYgX25hdmlnYXRvci5jYW5TaGFyZSlcbiAgICAgICAgZ3JhbnRlZCA9IF9uYXZpZ2F0b3IuY2FuU2hhcmUoeyBmaWxlczogZGF0YS5maWxlcyB9KTtcbiAgICAgIGlmIChncmFudGVkKVxuICAgICAgICByZXR1cm4gX25hdmlnYXRvci5zaGFyZShkYXRhKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgc2hhcmVcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlU3BlZWNoUmVjb2duaXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmltUmVzdWx0cyA9IHRydWUsXG4gICAgY29udGludW91cyA9IHRydWUsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgbGFuZyA9IHZ1ZURlbWkucmVmKG9wdGlvbnMubGFuZyB8fCBcImVuLVVTXCIpO1xuICBjb25zdCBpc0xpc3RlbmluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgaXNGaW5hbCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgcmVzdWx0ID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5zaGFsbG93UmVmKHZvaWQgMCk7XG4gIGNvbnN0IHRvZ2dsZSA9ICh2YWx1ZSA9ICFpc0xpc3RlbmluZy52YWx1ZSkgPT4ge1xuICAgIGlzTGlzdGVuaW5nLnZhbHVlID0gdmFsdWU7XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGlzTGlzdGVuaW5nLnZhbHVlID0gdHJ1ZTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBpc0xpc3RlbmluZy52YWx1ZSA9IGZhbHNlO1xuICB9O1xuICBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IHdpbmRvdyAmJiAod2luZG93LlNwZWVjaFJlY29nbml0aW9uIHx8IHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbik7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbihTcGVlY2hSZWNvZ25pdGlvbik7XG4gIGxldCByZWNvZ25pdGlvbjtcbiAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgcmVjb2duaXRpb24gPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKTtcbiAgICByZWNvZ25pdGlvbi5jb250aW51b3VzID0gY29udGludW91cztcbiAgICByZWNvZ25pdGlvbi5pbnRlcmltUmVzdWx0cyA9IGludGVyaW1SZXN1bHRzO1xuICAgIHJlY29nbml0aW9uLmxhbmcgPSB2dWVEZW1pLnVucmVmKGxhbmcpO1xuICAgIHJlY29nbml0aW9uLm9uc3RhcnQgPSAoKSA9PiB7XG4gICAgICBpc0ZpbmFsLnZhbHVlID0gZmFsc2U7XG4gICAgfTtcbiAgICB2dWVEZW1pLndhdGNoKGxhbmcsIChsYW5nMikgPT4ge1xuICAgICAgaWYgKHJlY29nbml0aW9uICYmICFpc0xpc3RlbmluZy52YWx1ZSlcbiAgICAgICAgcmVjb2duaXRpb24ubGFuZyA9IGxhbmcyO1xuICAgIH0pO1xuICAgIHJlY29nbml0aW9uLm9ucmVzdWx0ID0gKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2NyaXB0ID0gQXJyYXkuZnJvbShldmVudC5yZXN1bHRzKS5tYXAoKHJlc3VsdDIpID0+IHtcbiAgICAgICAgaXNGaW5hbC52YWx1ZSA9IHJlc3VsdDIuaXNGaW5hbDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDJbMF07XG4gICAgICB9KS5tYXAoKHJlc3VsdDIpID0+IHJlc3VsdDIudHJhbnNjcmlwdCkuam9pbihcIlwiKTtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHRyYW5zY3JpcHQ7XG4gICAgICBlcnJvci52YWx1ZSA9IHZvaWQgMDtcbiAgICB9O1xuICAgIHJlY29nbml0aW9uLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGVycm9yLnZhbHVlID0gZXZlbnQ7XG4gICAgfTtcbiAgICByZWNvZ25pdGlvbi5vbmVuZCA9ICgpID0+IHtcbiAgICAgIGlzTGlzdGVuaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICByZWNvZ25pdGlvbi5sYW5nID0gdnVlRGVtaS51bnJlZihsYW5nKTtcbiAgICB9O1xuICAgIHZ1ZURlbWkud2F0Y2goaXNMaXN0ZW5pbmcsICgpID0+IHtcbiAgICAgIGlmIChpc0xpc3RlbmluZy52YWx1ZSlcbiAgICAgICAgcmVjb2duaXRpb24uc3RhcnQoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjb2duaXRpb24uc3RvcCgpO1xuICAgIH0pO1xuICB9XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgaXNMaXN0ZW5pbmcudmFsdWUgPSBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgaXNMaXN0ZW5pbmcsXG4gICAgaXNGaW5hbCxcbiAgICByZWNvZ25pdGlvbixcbiAgICByZXN1bHQsXG4gICAgZXJyb3IsXG4gICAgdG9nZ2xlLFxuICAgIHN0YXJ0LFxuICAgIHN0b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlU3BlZWNoU3ludGhlc2lzKHRleHQsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCB7XG4gICAgcGl0Y2ggPSAxLFxuICAgIHJhdGUgPSAxLFxuICAgIHZvbHVtZSA9IDEsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc3ludGggPSB3aW5kb3cgJiYgd2luZG93LnNwZWVjaFN5bnRoZXNpcztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKHN5bnRoKTtcbiAgY29uc3QgaXNQbGF5aW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBzdGF0dXMgPSB2dWVEZW1pLnJlZihcImluaXRcIik7XG4gIGNvbnN0IHZvaWNlSW5mbyA9IHtcbiAgICBsYW5nOiAoKF9hID0gb3B0aW9ucy52b2ljZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmxhbmcpIHx8IFwiZGVmYXVsdFwiLFxuICAgIG5hbWU6ICgoX2IgPSBvcHRpb25zLnZvaWNlKSA9PSBudWxsID8gdm9pZCAwIDogX2IubmFtZSkgfHwgXCJcIlxuICB9O1xuICBjb25zdCBzcG9rZW5UZXh0ID0gdnVlRGVtaS5yZWYodGV4dCB8fCBcIlwiKTtcbiAgY29uc3QgbGFuZyA9IHZ1ZURlbWkucmVmKG9wdGlvbnMubGFuZyB8fCBcImVuLVVTXCIpO1xuICBjb25zdCBlcnJvciA9IHZ1ZURlbWkuc2hhbGxvd1JlZih2b2lkIDApO1xuICBjb25zdCB0b2dnbGUgPSAodmFsdWUgPSAhaXNQbGF5aW5nLnZhbHVlKSA9PiB7XG4gICAgaXNQbGF5aW5nLnZhbHVlID0gdmFsdWU7XG4gIH07XG4gIGNvbnN0IGJpbmRFdmVudHNGb3JVdHRlcmFuY2UgPSAodXR0ZXJhbmNlMikgPT4ge1xuICAgIHV0dGVyYW5jZTIubGFuZyA9IHZ1ZURlbWkudW5yZWYobGFuZyk7XG4gICAgb3B0aW9ucy52b2ljZSAmJiAodXR0ZXJhbmNlMi52b2ljZSA9IG9wdGlvbnMudm9pY2UpO1xuICAgIHV0dGVyYW5jZTIucGl0Y2ggPSBwaXRjaDtcbiAgICB1dHRlcmFuY2UyLnJhdGUgPSByYXRlO1xuICAgIHV0dGVyYW5jZTIudm9sdW1lID0gdm9sdW1lO1xuICAgIHV0dGVyYW5jZTIub25zdGFydCA9ICgpID0+IHtcbiAgICAgIGlzUGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICBzdGF0dXMudmFsdWUgPSBcInBsYXlcIjtcbiAgICB9O1xuICAgIHV0dGVyYW5jZTIub25wYXVzZSA9ICgpID0+IHtcbiAgICAgIGlzUGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgc3RhdHVzLnZhbHVlID0gXCJwYXVzZVwiO1xuICAgIH07XG4gICAgdXR0ZXJhbmNlMi5vbnJlc3VtZSA9ICgpID0+IHtcbiAgICAgIGlzUGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICBzdGF0dXMudmFsdWUgPSBcInBsYXlcIjtcbiAgICB9O1xuICAgIHV0dGVyYW5jZTIub25lbmQgPSAoKSA9PiB7XG4gICAgICBpc1BsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHN0YXR1cy52YWx1ZSA9IFwiZW5kXCI7XG4gICAgfTtcbiAgICB1dHRlcmFuY2UyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcbiAgICAgIGVycm9yLnZhbHVlID0gZXZlbnQ7XG4gICAgfTtcbiAgICB1dHRlcmFuY2UyLm9uZW5kID0gKCkgPT4ge1xuICAgICAgaXNQbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB1dHRlcmFuY2UyLmxhbmcgPSB2dWVEZW1pLnVucmVmKGxhbmcpO1xuICAgIH07XG4gIH07XG4gIGNvbnN0IHV0dGVyYW5jZSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlzUGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHN0YXR1cy52YWx1ZSA9IFwiaW5pdFwiO1xuICAgIGNvbnN0IG5ld1V0dGVyYW5jZSA9IG5ldyBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Uoc3Bva2VuVGV4dC52YWx1ZSk7XG4gICAgYmluZEV2ZW50c0ZvclV0dGVyYW5jZShuZXdVdHRlcmFuY2UpO1xuICAgIHJldHVybiBuZXdVdHRlcmFuY2U7XG4gIH0pO1xuICBjb25zdCBzcGVhayA9ICgpID0+IHtcbiAgICBzeW50aC5jYW5jZWwoKTtcbiAgICB1dHRlcmFuY2UgJiYgc3ludGguc3BlYWsodXR0ZXJhbmNlLnZhbHVlKTtcbiAgfTtcbiAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgYmluZEV2ZW50c0ZvclV0dGVyYW5jZSh1dHRlcmFuY2UudmFsdWUpO1xuICAgIHZ1ZURlbWkud2F0Y2gobGFuZywgKGxhbmcyKSA9PiB7XG4gICAgICBpZiAodXR0ZXJhbmNlLnZhbHVlICYmICFpc1BsYXlpbmcudmFsdWUpXG4gICAgICAgIHV0dGVyYW5jZS52YWx1ZS5sYW5nID0gbGFuZzI7XG4gICAgfSk7XG4gICAgdnVlRGVtaS53YXRjaChpc1BsYXlpbmcsICgpID0+IHtcbiAgICAgIGlmIChpc1BsYXlpbmcudmFsdWUpXG4gICAgICAgIHN5bnRoLnJlc3VtZSgpO1xuICAgICAgZWxzZVxuICAgICAgICBzeW50aC5wYXVzZSgpO1xuICAgIH0pO1xuICB9XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgaXNQbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGlzUGxheWluZyxcbiAgICBzdGF0dXMsXG4gICAgdm9pY2VJbmZvLFxuICAgIHV0dGVyYW5jZSxcbiAgICBlcnJvcixcbiAgICB0b2dnbGUsXG4gICAgc3BlYWtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlU3RlcHBlcihzdGVwcywgaW5pdGlhbFN0ZXApIHtcbiAgY29uc3Qgc3RlcHNSZWYgPSB2dWVEZW1pLnJlZihzdGVwcyk7XG4gIGNvbnN0IHN0ZXBOYW1lcyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gQXJyYXkuaXNBcnJheShzdGVwc1JlZi52YWx1ZSkgPyBzdGVwc1JlZi52YWx1ZSA6IE9iamVjdC5rZXlzKHN0ZXBzUmVmLnZhbHVlKSk7XG4gIGNvbnN0IGluZGV4ID0gdnVlRGVtaS5yZWYoc3RlcE5hbWVzLnZhbHVlLmluZGV4T2YoaW5pdGlhbFN0ZXAgIT0gbnVsbCA/IGluaXRpYWxTdGVwIDogc3RlcE5hbWVzLnZhbHVlWzBdKSk7XG4gIGNvbnN0IGN1cnJlbnQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGF0KGluZGV4LnZhbHVlKSk7XG4gIGNvbnN0IGlzRmlyc3QgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGluZGV4LnZhbHVlID09PSAwKTtcbiAgY29uc3QgaXNMYXN0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBpbmRleC52YWx1ZSA9PT0gc3RlcE5hbWVzLnZhbHVlLmxlbmd0aCAtIDEpO1xuICBjb25zdCBuZXh0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBzdGVwTmFtZXMudmFsdWVbaW5kZXgudmFsdWUgKyAxXSk7XG4gIGNvbnN0IHByZXZpb3VzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBzdGVwTmFtZXMudmFsdWVbaW5kZXgudmFsdWUgLSAxXSk7XG4gIGZ1bmN0aW9uIGF0KGluZGV4Mikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHN0ZXBzUmVmLnZhbHVlKSlcbiAgICAgIHJldHVybiBzdGVwc1JlZi52YWx1ZVtpbmRleDJdO1xuICAgIHJldHVybiBzdGVwc1JlZi52YWx1ZVtzdGVwTmFtZXMudmFsdWVbaW5kZXgyXV07XG4gIH1cbiAgZnVuY3Rpb24gZ2V0KHN0ZXApIHtcbiAgICBpZiAoIXN0ZXBOYW1lcy52YWx1ZS5pbmNsdWRlcyhzdGVwKSlcbiAgICAgIHJldHVybjtcbiAgICByZXR1cm4gYXQoc3RlcE5hbWVzLnZhbHVlLmluZGV4T2Yoc3RlcCkpO1xuICB9XG4gIGZ1bmN0aW9uIGdvVG8oc3RlcCkge1xuICAgIGlmIChzdGVwTmFtZXMudmFsdWUuaW5jbHVkZXMoc3RlcCkpXG4gICAgICBpbmRleC52YWx1ZSA9IHN0ZXBOYW1lcy52YWx1ZS5pbmRleE9mKHN0ZXApO1xuICB9XG4gIGZ1bmN0aW9uIGdvVG9OZXh0KCkge1xuICAgIGlmIChpc0xhc3QudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaW5kZXgudmFsdWUrKztcbiAgfVxuICBmdW5jdGlvbiBnb1RvUHJldmlvdXMoKSB7XG4gICAgaWYgKGlzRmlyc3QudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaW5kZXgudmFsdWUtLTtcbiAgfVxuICBmdW5jdGlvbiBnb0JhY2tUbyhzdGVwKSB7XG4gICAgaWYgKGlzQWZ0ZXIoc3RlcCkpXG4gICAgICBnb1RvKHN0ZXApO1xuICB9XG4gIGZ1bmN0aW9uIGlzTmV4dChzdGVwKSB7XG4gICAgcmV0dXJuIHN0ZXBOYW1lcy52YWx1ZS5pbmRleE9mKHN0ZXApID09PSBpbmRleC52YWx1ZSArIDE7XG4gIH1cbiAgZnVuY3Rpb24gaXNQcmV2aW91cyhzdGVwKSB7XG4gICAgcmV0dXJuIHN0ZXBOYW1lcy52YWx1ZS5pbmRleE9mKHN0ZXApID09PSBpbmRleC52YWx1ZSAtIDE7XG4gIH1cbiAgZnVuY3Rpb24gaXNDdXJyZW50KHN0ZXApIHtcbiAgICByZXR1cm4gc3RlcE5hbWVzLnZhbHVlLmluZGV4T2Yoc3RlcCkgPT09IGluZGV4LnZhbHVlO1xuICB9XG4gIGZ1bmN0aW9uIGlzQmVmb3JlKHN0ZXApIHtcbiAgICByZXR1cm4gaW5kZXgudmFsdWUgPCBzdGVwTmFtZXMudmFsdWUuaW5kZXhPZihzdGVwKTtcbiAgfVxuICBmdW5jdGlvbiBpc0FmdGVyKHN0ZXApIHtcbiAgICByZXR1cm4gaW5kZXgudmFsdWUgPiBzdGVwTmFtZXMudmFsdWUuaW5kZXhPZihzdGVwKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXBzOiBzdGVwc1JlZixcbiAgICBzdGVwTmFtZXMsXG4gICAgaW5kZXgsXG4gICAgY3VycmVudCxcbiAgICBuZXh0LFxuICAgIHByZXZpb3VzLFxuICAgIGlzRmlyc3QsXG4gICAgaXNMYXN0LFxuICAgIGF0LFxuICAgIGdldCxcbiAgICBnb1RvLFxuICAgIGdvVG9OZXh0LFxuICAgIGdvVG9QcmV2aW91cyxcbiAgICBnb0JhY2tUbyxcbiAgICBpc05leHQsXG4gICAgaXNQcmV2aW91cyxcbiAgICBpc0N1cnJlbnQsXG4gICAgaXNCZWZvcmUsXG4gICAgaXNBZnRlclxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTdG9yYWdlQXN5bmMoa2V5LCBpbml0aWFsVmFsdWUsIHN0b3JhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2E7XG4gIGNvbnN0IHtcbiAgICBmbHVzaCA9IFwicHJlXCIsXG4gICAgZGVlcCA9IHRydWUsXG4gICAgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcyA9IHRydWUsXG4gICAgd3JpdGVEZWZhdWx0cyA9IHRydWUsXG4gICAgc2hhbGxvdyxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGV2ZW50RmlsdGVyLFxuICAgIG9uRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByYXdJbml0ID0gdnVlRGVtaS51bnJlZihpbml0aWFsVmFsdWUpO1xuICBjb25zdCB0eXBlID0gZ3Vlc3NTZXJpYWxpemVyVHlwZShyYXdJbml0KTtcbiAgY29uc3QgZGF0YSA9IChzaGFsbG93ID8gdnVlRGVtaS5zaGFsbG93UmVmIDogdnVlRGVtaS5yZWYpKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHNlcmlhbGl6ZXIgPSAoX2EgPSBvcHRpb25zLnNlcmlhbGl6ZXIpICE9IG51bGwgPyBfYSA6IFN0b3JhZ2VTZXJpYWxpemVyc1t0eXBlXTtcbiAgaWYgKCFzdG9yYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0b3JhZ2UgPSBnZXRTU1JIYW5kbGVyKFwiZ2V0RGVmYXVsdFN0b3JhZ2VcIiwgKCkgPT4ge1xuICAgICAgICB2YXIgX2EyO1xuICAgICAgICByZXR1cm4gKF9hMiA9IGRlZmF1bHRXaW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubG9jYWxTdG9yYWdlO1xuICAgICAgfSkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH1cbiAgfVxuICBhc3luYyBmdW5jdGlvbiByZWFkKGV2ZW50KSB7XG4gICAgaWYgKCFzdG9yYWdlIHx8IGV2ZW50ICYmIGV2ZW50LmtleSAhPT0ga2V5KVxuICAgICAgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGV2ZW50ID8gZXZlbnQubmV3VmFsdWUgOiBhd2FpdCBzdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgIGlmIChyYXdWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGRhdGEudmFsdWUgPSByYXdJbml0O1xuICAgICAgICBpZiAod3JpdGVEZWZhdWx0cyAmJiByYXdJbml0ICE9PSBudWxsKVxuICAgICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0SXRlbShrZXksIGF3YWl0IHNlcmlhbGl6ZXIud3JpdGUocmF3SW5pdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS52YWx1ZSA9IGF3YWl0IHNlcmlhbGl6ZXIucmVhZChyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb25FcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgcmVhZCgpO1xuICBpZiAod2luZG93ICYmIGxpc3RlblRvU3RvcmFnZUNoYW5nZXMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwic3RvcmFnZVwiLCAoZSkgPT4gc2V0VGltZW91dCgoKSA9PiByZWFkKGUpLCAwKSk7XG4gIGlmIChzdG9yYWdlKSB7XG4gICAgc2hhcmVkLndhdGNoV2l0aEZpbHRlcihkYXRhLCBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YS52YWx1ZSA9PSBudWxsKVxuICAgICAgICAgIGF3YWl0IHN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKGtleSwgYXdhaXQgc2VyaWFsaXplci53cml0ZShkYXRhLnZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmx1c2gsXG4gICAgICBkZWVwLFxuICAgICAgZXZlbnRGaWx0ZXJcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxubGV0IF9pZCA9IDA7XG5mdW5jdGlvbiB1c2VTdHlsZVRhZyhjc3MsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpc0xvYWRlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LFxuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgbWFudWFsID0gZmFsc2UsXG4gICAgaWQgPSBgdnVldXNlX3N0eWxldGFnXyR7KytfaWR9YFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY3NzUmVmID0gdnVlRGVtaS5yZWYoY3NzKTtcbiAgbGV0IHN0b3AgPSAoKSA9PiB7XG4gIH07XG4gIGNvbnN0IGxvYWQgPSAoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgZWwudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICBlbC5pZCA9IGlkO1xuICAgIGlmIChvcHRpb25zLm1lZGlhKVxuICAgICAgZWwubWVkaWEgPSBvcHRpb25zLm1lZGlhO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIGlmIChpc0xvYWRlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBzdG9wID0gdnVlRGVtaS53YXRjaChjc3NSZWYsICh2YWx1ZSkgPT4ge1xuICAgICAgZWwuaW5uZXJUZXh0ID0gdmFsdWU7XG4gICAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gICAgaXNMb2FkZWQudmFsdWUgPSB0cnVlO1xuICB9O1xuICBjb25zdCB1bmxvYWQgPSAoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudCB8fCAhaXNMb2FkZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgc3RvcCgpO1xuICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKTtcbiAgICBpc0xvYWRlZC52YWx1ZSA9IGZhbHNlO1xuICB9O1xuICBpZiAoaW1tZWRpYXRlICYmICFtYW51YWwpXG4gICAgc2hhcmVkLnRyeU9uTW91bnRlZChsb2FkKTtcbiAgaWYgKCFtYW51YWwpXG4gICAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHVubG9hZCk7XG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgY3NzOiBjc3NSZWYsXG4gICAgdW5sb2FkLFxuICAgIGxvYWQsXG4gICAgaXNMb2FkZWQ6IHZ1ZURlbWkucmVhZG9ubHkoaXNMb2FkZWQpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVRlbXBsYXRlUmVmc0xpc3QoKSB7XG4gIGNvbnN0IHJlZnMgPSB2dWVEZW1pLnJlZihbXSk7XG4gIHJlZnMudmFsdWUuc2V0ID0gKGVsKSA9PiB7XG4gICAgaWYgKGVsKVxuICAgICAgcmVmcy52YWx1ZS5wdXNoKGVsKTtcbiAgfTtcbiAgdnVlRGVtaS5vbkJlZm9yZVVwZGF0ZSgoKSA9PiB7XG4gICAgcmVmcy52YWx1ZS5sZW5ndGggPSAwO1xuICB9KTtcbiAgcmV0dXJuIHJlZnM7XG59XG5cbmZ1bmN0aW9uIGdldFJhbmdlc0Zyb21TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgcmFuZ2VDb3VudCA9IChfYSA9IHNlbGVjdGlvbi5yYW5nZUNvdW50KSAhPSBudWxsID8gX2EgOiAwO1xuICBjb25zdCByYW5nZXMgPSBuZXcgQXJyYXkocmFuZ2VDb3VudCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VDb3VudDsgaSsrKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdChpKTtcbiAgICByYW5nZXNbaV0gPSByYW5nZTtcbiAgfVxuICByZXR1cm4gcmFuZ2VzO1xufVxuZnVuY3Rpb24gdXNlVGV4dFNlbGVjdGlvbihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCB0ZXh0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0aW9uLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgIT0gbnVsbCA/IF9iIDogXCJcIjtcbiAgfSk7XG4gIGNvbnN0IHJhbmdlcyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gc2VsZWN0aW9uLnZhbHVlID8gZ2V0UmFuZ2VzRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24udmFsdWUpIDogW10pO1xuICBjb25zdCByZWN0cyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gcmFuZ2VzLnZhbHVlLm1hcCgocmFuZ2UpID0+IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSk7XG4gIGZ1bmN0aW9uIG9uU2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgIHNlbGVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgaWYgKHdpbmRvdylcbiAgICAgIHNlbGVjdGlvbi52YWx1ZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAod2luZG93KVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCBcInNlbGVjdGlvbmNoYW5nZVwiLCBvblNlbGVjdGlvbkNoYW5nZSk7XG4gIHJldHVybiB7XG4gICAgdGV4dCxcbiAgICByZWN0cyxcbiAgICByYW5nZXMsXG4gICAgc2VsZWN0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVRleHRhcmVhQXV0b3NpemUob3B0aW9ucykge1xuICBjb25zdCB0ZXh0YXJlYSA9IHZ1ZURlbWkucmVmKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0ID0gdnVlRGVtaS5yZWYob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5pbnB1dCk7XG4gIGZ1bmN0aW9uIHRyaWdnZXJSZXNpemUoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIXRleHRhcmVhLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHRleHRhcmVhLnZhbHVlLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG4gICAgdGV4dGFyZWEudmFsdWUuc3R5bGUuaGVpZ2h0ID0gYCR7KF9hID0gdGV4dGFyZWEudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zY3JvbGxIZWlnaHR9cHhgO1xuICAgIChfYiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMub25SZXNpemUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMpO1xuICB9XG4gIHZ1ZURlbWkud2F0Y2goW2lucHV0LCB0ZXh0YXJlYV0sIHRyaWdnZXJSZXNpemUsIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy53YXRjaClcbiAgICB2dWVEZW1pLndhdGNoKG9wdGlvbnMud2F0Y2gsIHRyaWdnZXJSZXNpemUsIHsgaW1tZWRpYXRlOiB0cnVlLCBkZWVwOiB0cnVlIH0pO1xuICByZXR1cm4ge1xuICAgIHRleHRhcmVhLFxuICAgIGlucHV0LFxuICAgIHRyaWdnZXJSZXNpemVcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQyID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQyID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkMiA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkMihvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkMiA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDIuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQyKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQyKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQyKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDIuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDIoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyA9IChhLCBiKSA9PiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTtcbmZ1bmN0aW9uIHVzZVRocm90dGxlZFJlZkhpc3Rvcnkoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0aHJvdHRsZSA9IDIwMCwgdHJhaWxpbmcgPSB0cnVlIH0gPSBvcHRpb25zO1xuICBjb25zdCBmaWx0ZXIgPSBzaGFyZWQudGhyb3R0bGVGaWx0ZXIodGhyb3R0bGUsIHRyYWlsaW5nKTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZVJlZkhpc3Rvcnkoc291cmNlLCBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzJDIoe30sIG9wdGlvbnMpLCB7IGV2ZW50RmlsdGVyOiBmaWx0ZXIgfSkpO1xuICByZXR1cm4gX19zcHJlYWRWYWx1ZXMkMih7fSwgaGlzdG9yeSk7XG59XG5cbnZhciBfX2RlZlByb3AkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kMSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDEgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDEob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDEgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQxLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkMShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkMSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQxLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQxKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fb2JqUmVzdCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDEuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzJDEpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDEoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtJDEuY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmNvbnN0IFVOSVRTID0gW1xuICB7IG1heDogNmU0LCB2YWx1ZTogMWUzLCBuYW1lOiBcInNlY29uZFwiIH0sXG4gIHsgbWF4OiAyNzZlNCwgdmFsdWU6IDZlNCwgbmFtZTogXCJtaW51dGVcIiB9LFxuICB7IG1heDogNzJlNiwgdmFsdWU6IDM2ZTUsIG5hbWU6IFwiaG91clwiIH0sXG4gIHsgbWF4OiA1MTg0ZTUsIHZhbHVlOiA4NjRlNSwgbmFtZTogXCJkYXlcIiB9LFxuICB7IG1heDogMjQxOTJlNSwgdmFsdWU6IDYwNDhlNSwgbmFtZTogXCJ3ZWVrXCIgfSxcbiAgeyBtYXg6IDI4NTEyZTYsIHZhbHVlOiAyNTkyZTYsIG5hbWU6IFwibW9udGhcIiB9LFxuICB7IG1heDogSW5maW5pdHksIHZhbHVlOiAzMTUzNmU2LCBuYW1lOiBcInllYXJcIiB9XG5dO1xuY29uc3QgREVGQVVMVF9NRVNTQUdFUyA9IHtcbiAganVzdE5vdzogXCJqdXN0IG5vd1wiLFxuICBwYXN0OiAobikgPT4gbi5tYXRjaCgvXFxkLykgPyBgJHtufSBhZ29gIDogbixcbiAgZnV0dXJlOiAobikgPT4gbi5tYXRjaCgvXFxkLykgPyBgaW4gJHtufWAgOiBuLFxuICBtb250aDogKG4sIHBhc3QpID0+IG4gPT09IDEgPyBwYXN0ID8gXCJsYXN0IG1vbnRoXCIgOiBcIm5leHQgbW9udGhcIiA6IGAke259IG1vbnRoJHtuID4gMSA/IFwic1wiIDogXCJcIn1gLFxuICB5ZWFyOiAobiwgcGFzdCkgPT4gbiA9PT0gMSA/IHBhc3QgPyBcImxhc3QgeWVhclwiIDogXCJuZXh0IHllYXJcIiA6IGAke259IHllYXIke24gPiAxID8gXCJzXCIgOiBcIlwifWAsXG4gIGRheTogKG4sIHBhc3QpID0+IG4gPT09IDEgPyBwYXN0ID8gXCJ5ZXN0ZXJkYXlcIiA6IFwidG9tb3Jyb3dcIiA6IGAke259IGRheSR7biA+IDEgPyBcInNcIiA6IFwiXCJ9YCxcbiAgd2VlazogKG4sIHBhc3QpID0+IG4gPT09IDEgPyBwYXN0ID8gXCJsYXN0IHdlZWtcIiA6IFwibmV4dCB3ZWVrXCIgOiBgJHtufSB3ZWVrJHtuID4gMSA/IFwic1wiIDogXCJcIn1gLFxuICBob3VyOiAobikgPT4gYCR7bn0gaG91ciR7biA+IDEgPyBcInNcIiA6IFwiXCJ9YCxcbiAgbWludXRlOiAobikgPT4gYCR7bn0gbWludXRlJHtuID4gMSA/IFwic1wiIDogXCJcIn1gLFxuICBzZWNvbmQ6IChuKSA9PiBgJHtufSBzZWNvbmQke24gPiAxID8gXCJzXCIgOiBcIlwifWBcbn07XG5jb25zdCBERUZBVUxUX0ZPUk1BVFRFUiA9IChkYXRlKSA9PiBkYXRlLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuZnVuY3Rpb24gdXNlVGltZUFnbyh0aW1lLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRyb2xzOiBleHBvc2VDb250cm9scyA9IGZhbHNlLFxuICAgIG1heCxcbiAgICB1cGRhdGVJbnRlcnZhbCA9IDNlNCxcbiAgICBtZXNzYWdlcyA9IERFRkFVTFRfTUVTU0FHRVMsXG4gICAgZnVsbERhdGVGb3JtYXR0ZXIgPSBERUZBVUxUX0ZPUk1BVFRFUlxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgeyBhYnMsIHJvdW5kIH0gPSBNYXRoO1xuICBjb25zdCBfYSA9IHVzZU5vdyh7IGludGVydmFsOiB1cGRhdGVJbnRlcnZhbCwgY29udHJvbHM6IHRydWUgfSksIHsgbm93IH0gPSBfYSwgY29udHJvbHMgPSBfX29ialJlc3QoX2EsIFtcIm5vd1wiXSk7XG4gIGZ1bmN0aW9uIGdldFRpbWVhZ28oZnJvbSwgbm93Mikge1xuICAgIHZhciBfYTI7XG4gICAgY29uc3QgZGlmZiA9ICtub3cyIC0gK2Zyb207XG4gICAgY29uc3QgYWJzRGlmZiA9IGFicyhkaWZmKTtcbiAgICBpZiAoYWJzRGlmZiA8IDZlNClcbiAgICAgIHJldHVybiBtZXNzYWdlcy5qdXN0Tm93O1xuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiICYmIGFic0RpZmYgPiBtYXgpXG4gICAgICByZXR1cm4gZnVsbERhdGVGb3JtYXR0ZXIobmV3IERhdGUoZnJvbSkpO1xuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCB1bml0TWF4ID0gKF9hMiA9IFVOSVRTLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gbWF4KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5tYXg7XG4gICAgICBpZiAodW5pdE1heCAmJiBhYnNEaWZmID4gdW5pdE1heClcbiAgICAgICAgcmV0dXJuIGZ1bGxEYXRlRm9ybWF0dGVyKG5ldyBEYXRlKGZyb20pKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB1bml0IG9mIFVOSVRTKSB7XG4gICAgICBpZiAoYWJzRGlmZiA8IHVuaXQubWF4KVxuICAgICAgICByZXR1cm4gZm9ybWF0KGRpZmYsIHVuaXQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcHBseUZvcm1hdChuYW1lLCB2YWwsIGlzUGFzdCkge1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IG1lc3NhZ2VzW25hbWVdO1xuICAgIGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHZhbCwgaXNQYXN0KTtcbiAgICByZXR1cm4gZm9ybWF0dGVyLnJlcGxhY2UoXCJ7MH1cIiwgdmFsLnRvU3RyaW5nKCkpO1xuICB9XG4gIGZ1bmN0aW9uIGZvcm1hdChkaWZmLCB1bml0KSB7XG4gICAgY29uc3QgdmFsID0gcm91bmQoYWJzKGRpZmYpIC8gdW5pdC52YWx1ZSk7XG4gICAgY29uc3QgcGFzdCA9IGRpZmYgPiAwO1xuICAgIGNvbnN0IHN0ciA9IGFwcGx5Rm9ybWF0KHVuaXQubmFtZSwgdmFsLCBwYXN0KTtcbiAgICByZXR1cm4gYXBwbHlGb3JtYXQocGFzdCA/IFwicGFzdFwiIDogXCJmdXR1cmVcIiwgc3RyLCBwYXN0KTtcbiAgfVxuICBjb25zdCB0aW1lQWdvID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBnZXRUaW1lYWdvKG5ldyBEYXRlKHZ1ZURlbWkudW5yZWYodGltZSkpLCB2dWVEZW1pLnVucmVmKG5vdy52YWx1ZSkpKTtcbiAgaWYgKGV4cG9zZUNvbnRyb2xzKSB7XG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJDEoe1xuICAgICAgdGltZUFnb1xuICAgIH0sIGNvbnRyb2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGltZUFnbztcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VUaW1lb3V0UG9sbChmbiwgaW50ZXJ2YWwsIHRpbWVvdXRQb2xsT3B0aW9ucykge1xuICBjb25zdCB7IHN0YXJ0IH0gPSBzaGFyZWQudXNlVGltZW91dEZuKGxvb3AsIGludGVydmFsKTtcbiAgY29uc3QgaXNBY3RpdmUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGFzeW5jIGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgaWYgKCFpc0FjdGl2ZS52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBhd2FpdCBmbigpO1xuICAgIHN0YXJ0KCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKCkge1xuICAgIGlmICghaXNBY3RpdmUudmFsdWUpIHtcbiAgICAgIGlzQWN0aXZlLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGxvb3AoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgaXNBY3RpdmUudmFsdWUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGltZW91dFBvbGxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiB0aW1lb3V0UG9sbE9wdGlvbnMuaW1tZWRpYXRlKVxuICAgIHJlc3VtZSgpO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UocGF1c2UpO1xuICByZXR1cm4ge1xuICAgIGlzQWN0aXZlLFxuICAgIHBhdXNlLFxuICAgIHJlc3VtZVxuICB9O1xufVxuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VUaW1lc3RhbXAob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250cm9sczogZXhwb3NlQ29udHJvbHMgPSBmYWxzZSxcbiAgICBvZmZzZXQgPSAwLFxuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgaW50ZXJ2YWwgPSBcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB0cyA9IHZ1ZURlbWkucmVmKHNoYXJlZC50aW1lc3RhbXAoKSArIG9mZnNldCk7XG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHRzLnZhbHVlID0gc2hhcmVkLnRpbWVzdGFtcCgpICsgb2Zmc2V0O1xuICBjb25zdCBjb250cm9scyA9IGludGVydmFsID09PSBcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiID8gdXNlUmFmRm4odXBkYXRlLCB7IGltbWVkaWF0ZSB9KSA6IHNoYXJlZC51c2VJbnRlcnZhbEZuKHVwZGF0ZSwgaW50ZXJ2YWwsIHsgaW1tZWRpYXRlIH0pO1xuICBpZiAoZXhwb3NlQ29udHJvbHMpIHtcbiAgICByZXR1cm4gX19zcHJlYWRWYWx1ZXMoe1xuICAgICAgdGltZXN0YW1wOiB0c1xuICAgIH0sIGNvbnRyb2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlVGl0bGUobmV3VGl0bGUgPSBudWxsLCBvcHRpb25zID0ge30pIHtcbiAgdmFyIF9hLCBfYjtcbiAgY29uc3Qge1xuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LFxuICAgIG9ic2VydmUgPSBmYWxzZSxcbiAgICB0aXRsZVRlbXBsYXRlID0gXCIlc1wiXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB0aXRsZSA9IHZ1ZURlbWkucmVmKChfYSA9IG5ld1RpdGxlICE9IG51bGwgPyBuZXdUaXRsZSA6IGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC50aXRsZSkgIT0gbnVsbCA/IF9hIDogbnVsbCk7XG4gIHZ1ZURlbWkud2F0Y2godGl0bGUsICh0LCBvKSA9PiB7XG4gICAgaWYgKHNoYXJlZC5pc1N0cmluZyh0KSAmJiB0ICE9PSBvICYmIGRvY3VtZW50KVxuICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZVRlbXBsYXRlLnJlcGxhY2UoXCIlc1wiLCB0KTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIGlmIChvYnNlcnZlICYmIGRvY3VtZW50KSB7XG4gICAgdXNlTXV0YXRpb25PYnNlcnZlcigoX2IgPSBkb2N1bWVudC5oZWFkKSA9PSBudWxsID8gdm9pZCAwIDogX2IucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpLCAoKSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQudGl0bGUgIT09IHRpdGxlLnZhbHVlKVxuICAgICAgICB0aXRsZS52YWx1ZSA9IHRpdGxlVGVtcGxhdGUucmVwbGFjZShcIiVzXCIsIGRvY3VtZW50LnRpdGxlKTtcbiAgICB9LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdGl0bGU7XG59XG5cbmNvbnN0IFRyYW5zaXRpb25QcmVzZXRzID0ge1xuICBsaW5lYXI6IHNoYXJlZC5pZGVudGl0eSxcbiAgZWFzZUluU2luZTogWzAuMTIsIDAsIDAuMzksIDBdLFxuICBlYXNlT3V0U2luZTogWzAuNjEsIDEsIDAuODgsIDFdLFxuICBlYXNlSW5PdXRTaW5lOiBbMC4zNywgMCwgMC42MywgMV0sXG4gIGVhc2VJblF1YWQ6IFswLjExLCAwLCAwLjUsIDBdLFxuICBlYXNlT3V0UXVhZDogWzAuNSwgMSwgMC44OSwgMV0sXG4gIGVhc2VJbk91dFF1YWQ6IFswLjQ1LCAwLCAwLjU1LCAxXSxcbiAgZWFzZUluQ3ViaWM6IFswLjMyLCAwLCAwLjY3LCAwXSxcbiAgZWFzZU91dEN1YmljOiBbMC4zMywgMSwgMC42OCwgMV0sXG4gIGVhc2VJbk91dEN1YmljOiBbMC42NSwgMCwgMC4zNSwgMV0sXG4gIGVhc2VJblF1YXJ0OiBbMC41LCAwLCAwLjc1LCAwXSxcbiAgZWFzZU91dFF1YXJ0OiBbMC4yNSwgMSwgMC41LCAxXSxcbiAgZWFzZUluT3V0UXVhcnQ6IFswLjc2LCAwLCAwLjI0LCAxXSxcbiAgZWFzZUluUXVpbnQ6IFswLjY0LCAwLCAwLjc4LCAwXSxcbiAgZWFzZU91dFF1aW50OiBbMC4yMiwgMSwgMC4zNiwgMV0sXG4gIGVhc2VJbk91dFF1aW50OiBbMC44MywgMCwgMC4xNywgMV0sXG4gIGVhc2VJbkV4cG86IFswLjcsIDAsIDAuODQsIDBdLFxuICBlYXNlT3V0RXhwbzogWzAuMTYsIDEsIDAuMywgMV0sXG4gIGVhc2VJbk91dEV4cG86IFswLjg3LCAwLCAwLjEzLCAxXSxcbiAgZWFzZUluQ2lyYzogWzAuNTUsIDAsIDEsIDAuNDVdLFxuICBlYXNlT3V0Q2lyYzogWzAsIDAuNTUsIDAuNDUsIDFdLFxuICBlYXNlSW5PdXRDaXJjOiBbMC44NSwgMCwgMC4xNSwgMV0sXG4gIGVhc2VJbkJhY2s6IFswLjM2LCAwLCAwLjY2LCAtMC41Nl0sXG4gIGVhc2VPdXRCYWNrOiBbMC4zNCwgMS41NiwgMC42NCwgMV0sXG4gIGVhc2VJbk91dEJhY2s6IFswLjY4LCAtMC42LCAwLjMyLCAxLjZdXG59O1xuZnVuY3Rpb24gY3JlYXRlRWFzaW5nRnVuY3Rpb24oW3AwLCBwMSwgcDIsIHAzXSkge1xuICBjb25zdCBhID0gKGExLCBhMikgPT4gMSAtIDMgKiBhMiArIDMgKiBhMTtcbiAgY29uc3QgYiA9IChhMSwgYTIpID0+IDMgKiBhMiAtIDYgKiBhMTtcbiAgY29uc3QgYyA9IChhMSkgPT4gMyAqIGExO1xuICBjb25zdCBjYWxjQmV6aWVyID0gKHQsIGExLCBhMikgPT4gKChhKGExLCBhMikgKiB0ICsgYihhMSwgYTIpKSAqIHQgKyBjKGExKSkgKiB0O1xuICBjb25zdCBnZXRTbG9wZSA9ICh0LCBhMSwgYTIpID0+IDMgKiBhKGExLCBhMikgKiB0ICogdCArIDIgKiBiKGExLCBhMikgKiB0ICsgYyhhMSk7XG4gIGNvbnN0IGdldFRmb3JYID0gKHgpID0+IHtcbiAgICBsZXQgYUd1ZXNzVCA9IHg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTbG9wZSA9IGdldFNsb3BlKGFHdWVzc1QsIHAwLCBwMik7XG4gICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwKVxuICAgICAgICByZXR1cm4gYUd1ZXNzVDtcbiAgICAgIGNvbnN0IGN1cnJlbnRYID0gY2FsY0JlemllcihhR3Vlc3NULCBwMCwgcDIpIC0geDtcbiAgICAgIGFHdWVzc1QgLT0gY3VycmVudFggLyBjdXJyZW50U2xvcGU7XG4gICAgfVxuICAgIHJldHVybiBhR3Vlc3NUO1xuICB9O1xuICByZXR1cm4gKHgpID0+IHAwID09PSBwMSAmJiBwMiA9PT0gcDMgPyB4IDogY2FsY0JlemllcihnZXRUZm9yWCh4KSwgcDEsIHAzKTtcbn1cbmZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRlbGF5ID0gMCxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGR1cmF0aW9uID0gMWUzLFxuICAgIG9uRmluaXNoZWQgPSBzaGFyZWQubm9vcCxcbiAgICBvblN0YXJ0ZWQgPSBzaGFyZWQubm9vcCxcbiAgICB0cmFuc2l0aW9uID0gc2hhcmVkLmlkZW50aXR5XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjdXJyZW50VHJhbnNpdGlvbiA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHQgPSB2dWVEZW1pLnVucmVmKHRyYW5zaXRpb24pO1xuICAgIHJldHVybiBzaGFyZWQuaXNGdW5jdGlvbih0KSA/IHQgOiBjcmVhdGVFYXNpbmdGdW5jdGlvbih0KTtcbiAgfSk7XG4gIGNvbnN0IHNvdXJjZVZhbHVlID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcyA9IHZ1ZURlbWkudW5yZWYoc291cmNlKTtcbiAgICByZXR1cm4gc2hhcmVkLmlzTnVtYmVyKHMpID8gcyA6IHMubWFwKHZ1ZURlbWkudW5yZWYpO1xuICB9KTtcbiAgY29uc3Qgc291cmNlVmVjdG9yID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBzaGFyZWQuaXNOdW1iZXIoc291cmNlVmFsdWUudmFsdWUpID8gW3NvdXJjZVZhbHVlLnZhbHVlXSA6IHNvdXJjZVZhbHVlLnZhbHVlKTtcbiAgY29uc3Qgb3V0cHV0VmVjdG9yID0gdnVlRGVtaS5yZWYoc291cmNlVmVjdG9yLnZhbHVlLnNsaWNlKDApKTtcbiAgbGV0IGN1cnJlbnREdXJhdGlvbjtcbiAgbGV0IGRpZmZWZWN0b3I7XG4gIGxldCBlbmRBdDtcbiAgbGV0IHN0YXJ0QXQ7XG4gIGxldCBzdGFydFZlY3RvcjtcbiAgY29uc3QgeyByZXN1bWUsIHBhdXNlIH0gPSB1c2VSYWZGbigoKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHNoYXJlZC5jbGFtcCgxIC0gKGVuZEF0IC0gbm93KSAvIGN1cnJlbnREdXJhdGlvbiwgMCwgMSk7XG4gICAgb3V0cHV0VmVjdG9yLnZhbHVlID0gc3RhcnRWZWN0b3IubWFwKCh2YWwsIGkpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIHJldHVybiB2YWwgKyAoKF9hID0gZGlmZlZlY3RvcltpXSkgIT0gbnVsbCA/IF9hIDogMCkgKiBjdXJyZW50VHJhbnNpdGlvbi52YWx1ZShwcm9ncmVzcyk7XG4gICAgfSk7XG4gICAgaWYgKHByb2dyZXNzID49IDEpIHtcbiAgICAgIHBhdXNlKCk7XG4gICAgICBvbkZpbmlzaGVkKCk7XG4gICAgfVxuICB9LCB7IGltbWVkaWF0ZTogZmFsc2UgfSk7XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIHBhdXNlKCk7XG4gICAgY3VycmVudER1cmF0aW9uID0gdnVlRGVtaS51bnJlZihkdXJhdGlvbik7XG4gICAgZGlmZlZlY3RvciA9IG91dHB1dFZlY3Rvci52YWx1ZS5tYXAoKG4sIGkpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICByZXR1cm4gKChfYSA9IHNvdXJjZVZlY3Rvci52YWx1ZVtpXSkgIT0gbnVsbCA/IF9hIDogMCkgLSAoKF9iID0gb3V0cHV0VmVjdG9yLnZhbHVlW2ldKSAhPSBudWxsID8gX2IgOiAwKTtcbiAgICB9KTtcbiAgICBzdGFydFZlY3RvciA9IG91dHB1dFZlY3Rvci52YWx1ZS5zbGljZSgwKTtcbiAgICBzdGFydEF0ID0gRGF0ZS5ub3coKTtcbiAgICBlbmRBdCA9IHN0YXJ0QXQgKyBjdXJyZW50RHVyYXRpb247XG4gICAgcmVzdW1lKCk7XG4gICAgb25TdGFydGVkKCk7XG4gIH07XG4gIGNvbnN0IHRpbWVvdXQgPSBzaGFyZWQudXNlVGltZW91dEZuKHN0YXJ0LCBkZWxheSwgeyBpbW1lZGlhdGU6IGZhbHNlIH0pO1xuICB2dWVEZW1pLndhdGNoKHNvdXJjZVZlY3RvciwgKCkgPT4ge1xuICAgIGlmICh2dWVEZW1pLnVucmVmKGRpc2FibGVkKSkge1xuICAgICAgb3V0cHV0VmVjdG9yLnZhbHVlID0gc291cmNlVmVjdG9yLnZhbHVlLnNsaWNlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodnVlRGVtaS51bnJlZihkZWxheSkgPD0gMClcbiAgICAgICAgc3RhcnQoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGltZW91dC5zdGFydCgpO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0VmVjdG9yID0gdnVlRGVtaS51bnJlZihkaXNhYmxlZCkgPyBzb3VyY2VWZWN0b3IgOiBvdXRwdXRWZWN0b3I7XG4gICAgcmV0dXJuIHNoYXJlZC5pc051bWJlcihzb3VyY2VWYWx1ZS52YWx1ZSkgPyB0YXJnZXRWZWN0b3IudmFsdWVbMF0gOiB0YXJnZXRWZWN0b3IudmFsdWU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VVcmxTZWFyY2hQYXJhbXMobW9kZSA9IFwiaGlzdG9yeVwiLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGluaXRpYWxWYWx1ZSA9IHt9LFxuICAgIHJlbW92ZU51bGxpc2hWYWx1ZXMgPSB0cnVlLFxuICAgIHJlbW92ZUZhbHN5VmFsdWVzID0gZmFsc2UsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgaWYgKCF3aW5kb3cpXG4gICAgcmV0dXJuIHZ1ZURlbWkucmVhY3RpdmUoaW5pdGlhbFZhbHVlKTtcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlYWN0aXZlKHt9KTtcbiAgZnVuY3Rpb24gZ2V0UmF3UGFyYW1zKCkge1xuICAgIGlmIChtb2RlID09PSBcImhpc3RvcnlcIikge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggfHwgXCJcIjtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiaGFzaFwiKSB7XG4gICAgICBjb25zdCBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2ggfHwgXCJcIjtcbiAgICAgIGNvbnN0IGluZGV4ID0gaGFzaC5pbmRleE9mKFwiP1wiKTtcbiAgICAgIHJldHVybiBpbmRleCA+IDAgPyBoYXNoLnNsaWNlKGluZGV4KSA6IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAod2luZG93LmxvY2F0aW9uLmhhc2ggfHwgXCJcIikucmVwbGFjZSgvXiMvLCBcIlwiKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY29uc3RydWN0UXVlcnkocGFyYW1zKSB7XG4gICAgY29uc3Qgc3RyaW5naWZpZWQgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICBpZiAobW9kZSA9PT0gXCJoaXN0b3J5XCIpXG4gICAgICByZXR1cm4gYCR7c3RyaW5naWZpZWQgPyBgPyR7c3RyaW5naWZpZWR9YCA6IFwiXCJ9JHtsb2NhdGlvbi5oYXNoIHx8IFwiXCJ9YDtcbiAgICBpZiAobW9kZSA9PT0gXCJoYXNoLXBhcmFtc1wiKVxuICAgICAgcmV0dXJuIGAke2xvY2F0aW9uLnNlYXJjaCB8fCBcIlwifSR7c3RyaW5naWZpZWQgPyBgIyR7c3RyaW5naWZpZWR9YCA6IFwiXCJ9YDtcbiAgICBjb25zdCBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2ggfHwgXCIjXCI7XG4gICAgY29uc3QgaW5kZXggPSBoYXNoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChpbmRleCA+IDApXG4gICAgICByZXR1cm4gYCR7aGFzaC5zbGljZSgwLCBpbmRleCl9JHtzdHJpbmdpZmllZCA/IGA/JHtzdHJpbmdpZmllZH1gIDogXCJcIn1gO1xuICAgIHJldHVybiBgJHtoYXNofSR7c3RyaW5naWZpZWQgPyBgPyR7c3RyaW5naWZpZWR9YCA6IFwiXCJ9YDtcbiAgfVxuICBmdW5jdGlvbiByZWFkKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKGdldFJhd1BhcmFtcygpKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShwYXJhbXMpIHtcbiAgICBjb25zdCB1bnVzZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhzdGF0ZSkpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhcmFtcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IHBhcmFtc0ZvcktleSA9IHBhcmFtcy5nZXRBbGwoa2V5KTtcbiAgICAgIHN0YXRlW2tleV0gPSBwYXJhbXNGb3JLZXkubGVuZ3RoID4gMSA/IHBhcmFtc0ZvcktleSA6IHBhcmFtcy5nZXQoa2V5KSB8fCBcIlwiO1xuICAgICAgdW51c2VkS2V5cy5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgQXJyYXkuZnJvbSh1bnVzZWRLZXlzKS5mb3JFYWNoKChrZXkpID0+IGRlbGV0ZSBzdGF0ZVtrZXldKTtcbiAgfVxuICBjb25zdCB7IHBhdXNlLCByZXN1bWUgfSA9IHNoYXJlZC5wYXVzYWJsZVdhdGNoKHN0YXRlLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhcIlwiKTtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBtYXBFbnRyeSA9IHN0YXRlW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBFbnRyeSkpXG4gICAgICAgIG1hcEVudHJ5LmZvckVhY2goKHZhbHVlKSA9PiBwYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpKTtcbiAgICAgIGVsc2UgaWYgKHJlbW92ZU51bGxpc2hWYWx1ZXMgJiYgbWFwRW50cnkgPT0gbnVsbClcbiAgICAgICAgcGFyYW1zLmRlbGV0ZShrZXkpO1xuICAgICAgZWxzZSBpZiAocmVtb3ZlRmFsc3lWYWx1ZXMgJiYgIW1hcEVudHJ5KVxuICAgICAgICBwYXJhbXMuZGVsZXRlKGtleSk7XG4gICAgICBlbHNlXG4gICAgICAgIHBhcmFtcy5zZXQoa2V5LCBtYXBFbnRyeSk7XG4gICAgfSk7XG4gICAgd3JpdGUocGFyYW1zKTtcbiAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuICBmdW5jdGlvbiB3cml0ZShwYXJhbXMsIHNob3VsZFVwZGF0ZSkge1xuICAgIHBhdXNlKCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSlcbiAgICAgIHVwZGF0ZVN0YXRlKHBhcmFtcyk7XG4gICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCB3aW5kb3cuZG9jdW1lbnQudGl0bGUsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIGNvbnN0cnVjdFF1ZXJ5KHBhcmFtcykpO1xuICAgIHJlc3VtZSgpO1xuICB9XG4gIGZ1bmN0aW9uIG9uQ2hhbmdlZCgpIHtcbiAgICB3cml0ZShyZWFkKCksIHRydWUpO1xuICB9XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInBvcHN0YXRlXCIsIG9uQ2hhbmdlZCwgZmFsc2UpO1xuICBpZiAobW9kZSAhPT0gXCJoaXN0b3J5XCIpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiaGFzaGNoYW5nZVwiLCBvbkNoYW5nZWQsIGZhbHNlKTtcbiAgY29uc3QgaW5pdGlhbCA9IHJlYWQoKTtcbiAgaWYgKGluaXRpYWwua2V5cygpLm5leHQoKS52YWx1ZSlcbiAgICB1cGRhdGVTdGF0ZShpbml0aWFsKTtcbiAgZWxzZVxuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIGluaXRpYWxWYWx1ZSk7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXNlVXNlck1lZGlhKG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iLCBfYztcbiAgY29uc3QgZW5hYmxlZCA9IHZ1ZURlbWkucmVmKChfYSA9IG9wdGlvbnMuZW5hYmxlZCkgIT0gbnVsbCA/IF9hIDogZmFsc2UpO1xuICBjb25zdCBhdXRvU3dpdGNoID0gdnVlRGVtaS5yZWYoKF9iID0gb3B0aW9ucy5hdXRvU3dpdGNoKSAhPSBudWxsID8gX2IgOiB0cnVlKTtcbiAgY29uc3QgdmlkZW9EZXZpY2VJZCA9IHZ1ZURlbWkucmVmKG9wdGlvbnMudmlkZW9EZXZpY2VJZCk7XG4gIGNvbnN0IGF1ZGlvRGV2aWNlSWQgPSB2dWVEZW1pLnJlZihvcHRpb25zLmF1ZGlvRGV2aWNlSWQpO1xuICBjb25zdCB7IG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbigoX2MgPSBuYXZpZ2F0b3IgPT0gbnVsbCA/IHZvaWQgMCA6IG5hdmlnYXRvci5tZWRpYURldmljZXMpID09IG51bGwgPyB2b2lkIDAgOiBfYy5nZXRVc2VyTWVkaWEpO1xuICBjb25zdCBzdHJlYW0gPSB2dWVEZW1pLnNoYWxsb3dSZWYoKTtcbiAgZnVuY3Rpb24gZ2V0RGV2aWNlT3B0aW9ucyhkZXZpY2UpIHtcbiAgICBpZiAoZGV2aWNlLnZhbHVlID09PSBcIm5vbmVcIiB8fCBkZXZpY2UudmFsdWUgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkZXZpY2UudmFsdWUgPT0gbnVsbClcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLnZhbHVlXG4gICAgfTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBfc3RhcnQoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZCB8fCBzdHJlYW0udmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgc3RyZWFtLnZhbHVlID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe1xuICAgICAgdmlkZW86IGdldERldmljZU9wdGlvbnModmlkZW9EZXZpY2VJZCksXG4gICAgICBhdWRpbzogZ2V0RGV2aWNlT3B0aW9ucyhhdWRpb0RldmljZUlkKVxuICAgIH0pO1xuICAgIHJldHVybiBzdHJlYW0udmFsdWU7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gX3N0b3AoKSB7XG4gICAgdmFyIF9hMjtcbiAgICAoX2EyID0gc3RyZWFtLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcbiAgICBzdHJlYW0udmFsdWUgPSB2b2lkIDA7XG4gIH1cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBfc3RvcCgpO1xuICAgIGVuYWJsZWQudmFsdWUgPSBmYWxzZTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICBhd2FpdCBfc3RhcnQoKTtcbiAgICBpZiAoc3RyZWFtLnZhbHVlKVxuICAgICAgZW5hYmxlZC52YWx1ZSA9IHRydWU7XG4gICAgcmV0dXJuIHN0cmVhbS52YWx1ZTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiByZXN0YXJ0KCkge1xuICAgIF9zdG9wKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN0YXJ0KCk7XG4gIH1cbiAgdnVlRGVtaS53YXRjaChlbmFibGVkLCAodikgPT4ge1xuICAgIGlmICh2KVxuICAgICAgX3N0YXJ0KCk7XG4gICAgZWxzZVxuICAgICAgX3N0b3AoKTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIHZ1ZURlbWkud2F0Y2goW3ZpZGVvRGV2aWNlSWQsIGF1ZGlvRGV2aWNlSWRdLCAoKSA9PiB7XG4gICAgaWYgKGF1dG9Td2l0Y2gudmFsdWUgJiYgc3RyZWFtLnZhbHVlKVxuICAgICAgcmVzdGFydCgpO1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBzdHJlYW0sXG4gICAgc3RhcnQsXG4gICAgc3RvcCxcbiAgICByZXN0YXJ0LFxuICAgIHZpZGVvRGV2aWNlSWQsXG4gICAgYXVkaW9EZXZpY2VJZCxcbiAgICBlbmFibGVkLFxuICAgIGF1dG9Td2l0Y2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlVk1vZGVsKHByb3BzLCBrZXksIGVtaXQsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICBjb25zdCB7XG4gICAgcGFzc2l2ZSA9IGZhbHNlLFxuICAgIGV2ZW50TmFtZSxcbiAgICBkZWVwID0gZmFsc2UsXG4gICAgZGVmYXVsdFZhbHVlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB2bSA9IHZ1ZURlbWkuZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGNvbnN0IF9lbWl0ID0gZW1pdCB8fCAodm0gPT0gbnVsbCA/IHZvaWQgMCA6IHZtLmVtaXQpIHx8ICgoX2EgPSB2bSA9PSBudWxsID8gdm9pZCAwIDogdm0uJGVtaXQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5iaW5kKHZtKSkgfHwgKChfYyA9IChfYiA9IHZtID09IG51bGwgPyB2b2lkIDAgOiB2bS5wcm94eSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLiRlbWl0KSA9PSBudWxsID8gdm9pZCAwIDogX2MuYmluZCh2bSA9PSBudWxsID8gdm9pZCAwIDogdm0ucHJveHkpKTtcbiAgbGV0IGV2ZW50ID0gZXZlbnROYW1lO1xuICBpZiAoIWtleSkge1xuICAgIGlmICh2dWVEZW1pLmlzVnVlMikge1xuICAgICAgY29uc3QgbW9kZWxPcHRpb25zID0gKF9lID0gKF9kID0gdm0gPT0gbnVsbCA/IHZvaWQgMCA6IHZtLnByb3h5KSA9PSBudWxsID8gdm9pZCAwIDogX2QuJG9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfZS5tb2RlbDtcbiAgICAgIGtleSA9IChtb2RlbE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG1vZGVsT3B0aW9ucy52YWx1ZSkgfHwgXCJ2YWx1ZVwiO1xuICAgICAgaWYgKCFldmVudE5hbWUpXG4gICAgICAgIGV2ZW50ID0gKG1vZGVsT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbW9kZWxPcHRpb25zLmV2ZW50KSB8fCBcImlucHV0XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IFwibW9kZWxWYWx1ZVwiO1xuICAgIH1cbiAgfVxuICBldmVudCA9IGV2ZW50TmFtZSB8fCBldmVudCB8fCBgdXBkYXRlOiR7a2V5LnRvU3RyaW5nKCl9YDtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiBzaGFyZWQuaXNEZWYocHJvcHNba2V5XSkgPyBwcm9wc1trZXldIDogZGVmYXVsdFZhbHVlO1xuICBpZiAocGFzc2l2ZSkge1xuICAgIGNvbnN0IHByb3h5ID0gdnVlRGVtaS5yZWYoZ2V0VmFsdWUoKSk7XG4gICAgdnVlRGVtaS53YXRjaCgoKSA9PiBwcm9wc1trZXldLCAodikgPT4gcHJveHkudmFsdWUgPSB2KTtcbiAgICB2dWVEZW1pLndhdGNoKHByb3h5LCAodikgPT4ge1xuICAgICAgaWYgKHYgIT09IHByb3BzW2tleV0gfHwgZGVlcClcbiAgICAgICAgX2VtaXQoZXZlbnQsIHYpO1xuICAgIH0sIHtcbiAgICAgIGRlZXBcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoe1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0VmFsdWUoKTtcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgX2VtaXQoZXZlbnQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VWTW9kZWxzKHByb3BzLCBlbWl0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgcmV0ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKVxuICAgIHJldFtrZXldID0gdXNlVk1vZGVsKHByb3BzLCBrZXksIGVtaXQsIG9wdGlvbnMpO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiB1c2VWaWJyYXRlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHBhdHRlcm4gPSBbXSxcbiAgICBpbnRlcnZhbCA9IDAsXG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvclxuICB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIFwidmlicmF0ZVwiIGluIG5hdmlnYXRvcjtcbiAgY29uc3QgcGF0dGVyblJlZiA9IHZ1ZURlbWkucmVmKHBhdHRlcm4pO1xuICBsZXQgaW50ZXJ2YWxDb250cm9scztcbiAgY29uc3QgdmlicmF0ZSA9IChwYXR0ZXJuMiA9IHBhdHRlcm5SZWYudmFsdWUpID0+IHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQpXG4gICAgICBuYXZpZ2F0b3IudmlicmF0ZShwYXR0ZXJuMik7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgaWYgKGlzU3VwcG9ydGVkKVxuICAgICAgbmF2aWdhdG9yLnZpYnJhdGUoMCk7XG4gICAgaW50ZXJ2YWxDb250cm9scyA9PSBudWxsID8gdm9pZCAwIDogaW50ZXJ2YWxDb250cm9scy5wYXVzZSgpO1xuICB9O1xuICBpZiAoaW50ZXJ2YWwgPiAwKSB7XG4gICAgaW50ZXJ2YWxDb250cm9scyA9IHNoYXJlZC51c2VJbnRlcnZhbEZuKHZpYnJhdGUsIGludGVydmFsLCB7XG4gICAgICBpbW1lZGlhdGU6IGZhbHNlLFxuICAgICAgaW1tZWRpYXRlQ2FsbGJhY2s6IGZhbHNlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBwYXR0ZXJuLFxuICAgIGludGVydmFsQ29udHJvbHMsXG4gICAgdmlicmF0ZSxcbiAgICBzdG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVZpcnR1YWxMaXN0KGxpc3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3Qgc2l6ZSA9IHVzZUVsZW1lbnRTaXplKGNvbnRhaW5lclJlZik7XG4gIGNvbnN0IGN1cnJlbnRMaXN0ID0gdnVlRGVtaS5yZWYoW10pO1xuICBjb25zdCBzb3VyY2UgPSB2dWVEZW1pLnNoYWxsb3dSZWYobGlzdCk7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5yZWYoeyBzdGFydDogMCwgZW5kOiAxMCB9KTtcbiAgY29uc3QgeyBpdGVtSGVpZ2h0LCBvdmVyc2NhbiA9IDUgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGdldFZpZXdDYXBhY2l0eSA9IChjb250YWluZXJIZWlnaHQpID0+IHtcbiAgICBpZiAodHlwZW9mIGl0ZW1IZWlnaHQgPT09IFwibnVtYmVyXCIpXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKGNvbnRhaW5lckhlaWdodCAvIGl0ZW1IZWlnaHQpO1xuICAgIGNvbnN0IHsgc3RhcnQgPSAwIH0gPSBzdGF0ZS52YWx1ZTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgY2FwYWNpdHkgPSAwO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHNvdXJjZS52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaXRlbUhlaWdodChpKTtcbiAgICAgIHN1bSArPSBoZWlnaHQ7XG4gICAgICBpZiAoc3VtID49IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgICBjYXBhY2l0eSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FwYWNpdHkgLSBzdGFydDtcbiAgfTtcbiAgY29uc3QgZ2V0T2Zmc2V0ID0gKHNjcm9sbFRvcCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaXRlbUhlaWdodCA9PT0gXCJudW1iZXJcIilcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIGl0ZW1IZWlnaHQpICsgMTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaXRlbUhlaWdodChpKTtcbiAgICAgIHN1bSArPSBoZWlnaHQ7XG4gICAgICBpZiAoc3VtID49IHNjcm9sbFRvcCkge1xuICAgICAgICBvZmZzZXQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldCArIDE7XG4gIH07XG4gIGNvbnN0IGNhbGN1bGF0ZVJhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXJSZWYudmFsdWU7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldChlbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgICBjb25zdCB2aWV3Q2FwYWNpdHkgPSBnZXRWaWV3Q2FwYWNpdHkoZWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICAgICAgY29uc3QgZnJvbSA9IG9mZnNldCAtIG92ZXJzY2FuO1xuICAgICAgY29uc3QgdG8gPSBvZmZzZXQgKyB2aWV3Q2FwYWNpdHkgKyBvdmVyc2NhbjtcbiAgICAgIHN0YXRlLnZhbHVlID0ge1xuICAgICAgICBzdGFydDogZnJvbSA8IDAgPyAwIDogZnJvbSxcbiAgICAgICAgZW5kOiB0byA+IHNvdXJjZS52YWx1ZS5sZW5ndGggPyBzb3VyY2UudmFsdWUubGVuZ3RoIDogdG9cbiAgICAgIH07XG4gICAgICBjdXJyZW50TGlzdC52YWx1ZSA9IHNvdXJjZS52YWx1ZS5zbGljZShzdGF0ZS52YWx1ZS5zdGFydCwgc3RhdGUudmFsdWUuZW5kKS5tYXAoKGVsZSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGRhdGE6IGVsZSxcbiAgICAgICAgaW5kZXg6IGluZGV4ICsgc3RhdGUudmFsdWUuc3RhcnRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goW3NpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBsaXN0XSwgKCkgPT4ge1xuICAgIGNhbGN1bGF0ZVJhbmdlKCk7XG4gIH0pO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaXRlbUhlaWdodCA9PT0gXCJudW1iZXJcIilcbiAgICAgIHJldHVybiBzb3VyY2UudmFsdWUubGVuZ3RoICogaXRlbUhlaWdodDtcbiAgICByZXR1cm4gc291cmNlLnZhbHVlLnJlZHVjZSgoc3VtLCBfLCBpbmRleCkgPT4gc3VtICsgaXRlbUhlaWdodChpbmRleCksIDApO1xuICB9KTtcbiAgY29uc3QgZ2V0RGlzdGFuY2VUb3AgPSAoaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZW9mIGl0ZW1IZWlnaHQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGNvbnN0IGhlaWdodDIgPSBpbmRleCAqIGl0ZW1IZWlnaHQ7XG4gICAgICByZXR1cm4gaGVpZ2h0MjtcbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0ID0gc291cmNlLnZhbHVlLnNsaWNlKDAsIGluZGV4KS5yZWR1Y2UoKHN1bSwgXywgaSkgPT4gc3VtICsgaXRlbUhlaWdodChpKSwgMCk7XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfTtcbiAgY29uc3Qgc2Nyb2xsVG8gPSAoaW5kZXgpID0+IHtcbiAgICBpZiAoY29udGFpbmVyUmVmLnZhbHVlKSB7XG4gICAgICBjb250YWluZXJSZWYudmFsdWUuc2Nyb2xsVG9wID0gZ2V0RGlzdGFuY2VUb3AoaW5kZXgpO1xuICAgICAgY2FsY3VsYXRlUmFuZ2UoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9mZnNldFRvcCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gZ2V0RGlzdGFuY2VUb3Aoc3RhdGUudmFsdWUuc3RhcnQpKTtcbiAgY29uc3Qgd3JhcHBlclByb3BzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgaGVpZ2h0OiBgJHt0b3RhbEhlaWdodC52YWx1ZSAtIG9mZnNldFRvcC52YWx1ZX1weGAsXG4gICAgICAgIG1hcmdpblRvcDogYCR7b2Zmc2V0VG9wLnZhbHVlfXB4YFxuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICBjb25zdCBjb250YWluZXJTdHlsZSA9IHsgb3ZlcmZsb3dZOiBcImF1dG9cIiB9O1xuICByZXR1cm4ge1xuICAgIGxpc3Q6IGN1cnJlbnRMaXN0LFxuICAgIHNjcm9sbFRvLFxuICAgIGNvbnRhaW5lclByb3BzOiB7XG4gICAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICAgIG9uU2Nyb2xsOiAoKSA9PiB7XG4gICAgICAgIGNhbGN1bGF0ZVJhbmdlKCk7XG4gICAgICB9LFxuICAgICAgc3R5bGU6IGNvbnRhaW5lclN0eWxlXG4gICAgfSxcbiAgICB3cmFwcGVyUHJvcHNcbiAgfTtcbn1cblxuY29uc3QgdXNlV2FrZUxvY2sgPSAob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yLFxuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50XG4gIH0gPSBvcHRpb25zO1xuICBsZXQgd2FrZUxvY2s7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIFwid2FrZUxvY2tcIiBpbiBuYXZpZ2F0b3I7XG4gIGNvbnN0IGlzQWN0aXZlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBhc3luYyBmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZCB8fCAhd2FrZUxvY2spXG4gICAgICByZXR1cm47XG4gICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJ2aXNpYmxlXCIpXG4gICAgICB3YWtlTG9jayA9IGF3YWl0IG5hdmlnYXRvci53YWtlTG9jay5yZXF1ZXN0KFwic2NyZWVuXCIpO1xuICAgIGlzQWN0aXZlLnZhbHVlID0gIXdha2VMb2NrLnJlbGVhc2VkO1xuICB9XG4gIGlmIChkb2N1bWVudClcbiAgICB1c2VFdmVudExpc3RlbmVyKGRvY3VtZW50LCBcInZpc2liaWxpdHljaGFuZ2VcIiwgb25WaXNpYmlsaXR5Q2hhbmdlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QodHlwZSkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgd2FrZUxvY2sgPSBhd2FpdCBuYXZpZ2F0b3Iud2FrZUxvY2sucmVxdWVzdCh0eXBlKTtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9ICF3YWtlTG9jay5yZWxlYXNlZDtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiByZWxlYXNlKCkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQgfHwgIXdha2VMb2NrKVxuICAgICAgcmV0dXJuO1xuICAgIGF3YWl0IHdha2VMb2NrLnJlbGVhc2UoKTtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9ICF3YWtlTG9jay5yZWxlYXNlZDtcbiAgICB3YWtlTG9jayA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBpc0FjdGl2ZSxcbiAgICByZXF1ZXN0LFxuICAgIHJlbGVhc2VcbiAgfTtcbn07XG5cbmNvbnN0IHVzZVdlYk5vdGlmaWNhdGlvbiA9IChkZWZhdWx0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBkZWZhdWx0T3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSAhIXdpbmRvdyAmJiBcIk5vdGlmaWNhdGlvblwiIGluIHdpbmRvdztcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHJlcXVlc3RQZXJtaXNzaW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKFwicGVybWlzc2lvblwiIGluIE5vdGlmaWNhdGlvbiAmJiBOb3RpZmljYXRpb24ucGVybWlzc2lvbiAhPT0gXCJkZW5pZWRcIilcbiAgICAgIGF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICB9O1xuICBjb25zdCBvbkNsaWNrID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBvblNob3cgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IG9uRXJyb3IgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IG9uQ2xvc2UgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IHNob3cgPSBhc3luYyAob3ZlcnJpZGVzKSA9PiB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBhd2FpdCByZXF1ZXN0UGVybWlzc2lvbigpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3ZlcnJpZGVzKTtcbiAgICBub3RpZmljYXRpb24udmFsdWUgPSBuZXcgTm90aWZpY2F0aW9uKG9wdGlvbnMudGl0bGUgfHwgXCJcIiwgb3B0aW9ucyk7XG4gICAgbm90aWZpY2F0aW9uLnZhbHVlLm9uY2xpY2sgPSAoZXZlbnQpID0+IG9uQ2xpY2sudHJpZ2dlcihldmVudCk7XG4gICAgbm90aWZpY2F0aW9uLnZhbHVlLm9uc2hvdyA9IChldmVudCkgPT4gb25TaG93LnRyaWdnZXIoZXZlbnQpO1xuICAgIG5vdGlmaWNhdGlvbi52YWx1ZS5vbmVycm9yID0gKGV2ZW50KSA9PiBvbkVycm9yLnRyaWdnZXIoZXZlbnQpO1xuICAgIG5vdGlmaWNhdGlvbi52YWx1ZS5vbmNsb3NlID0gKGV2ZW50KSA9PiBvbkNsb3NlLnRyaWdnZXIoZXZlbnQpO1xuICAgIHJldHVybiBub3RpZmljYXRpb24udmFsdWU7XG4gIH07XG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24udmFsdWUpXG4gICAgICBub3RpZmljYXRpb24udmFsdWUuY2xvc2UoKTtcbiAgICBub3RpZmljYXRpb24udmFsdWUgPSBudWxsO1xuICB9O1xuICBzaGFyZWQudHJ5T25Nb3VudGVkKGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQpXG4gICAgICBhd2FpdCByZXF1ZXN0UGVybWlzc2lvbigpO1xuICB9KTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKGNsb3NlKTtcbiAgaWYgKGlzU3VwcG9ydGVkICYmIHdpbmRvdykge1xuICAgIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJ2aXNpYmxlXCIpIHtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIG5vdGlmaWNhdGlvbixcbiAgICBzaG93LFxuICAgIGNsb3NlLFxuICAgIG9uQ2xpY2ssXG4gICAgb25TaG93LFxuICAgIG9uRXJyb3IsXG4gICAgb25DbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gcmVzb2x2ZU5lc3RlZE9wdGlvbnMob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdHJ1ZSlcbiAgICByZXR1cm4ge307XG4gIHJldHVybiBvcHRpb25zO1xufVxuZnVuY3Rpb24gdXNlV2ViU29ja2V0KHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBvbkNvbm5lY3RlZCxcbiAgICBvbkRpc2Nvbm5lY3RlZCxcbiAgICBvbkVycm9yLFxuICAgIG9uTWVzc2FnZSxcbiAgICBpbW1lZGlhdGUgPSB0cnVlLFxuICAgIGF1dG9DbG9zZSA9IHRydWUsXG4gICAgcHJvdG9jb2xzID0gW11cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRhdGEgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3Qgc3RhdHVzID0gdnVlRGVtaS5yZWYoXCJDT05ORUNUSU5HXCIpO1xuICBjb25zdCB3c1JlZiA9IHZ1ZURlbWkucmVmKCk7XG4gIGxldCBoZWFydGJlYXRQYXVzZTtcbiAgbGV0IGhlYXJ0YmVhdFJlc3VtZTtcbiAgbGV0IGV4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTtcbiAgbGV0IHJldHJpZWQgPSAwO1xuICBsZXQgYnVmZmVyZWREYXRhID0gW107XG4gIGNvbnN0IGNsb3NlID0gKGNvZGUgPSAxZTMsIHJlYXNvbikgPT4ge1xuICAgIGlmICghd3NSZWYudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgZXhwbGljaXRseUNsb3NlZCA9IHRydWU7XG4gICAgaGVhcnRiZWF0UGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGhlYXJ0YmVhdFBhdXNlKCk7XG4gICAgd3NSZWYudmFsdWUuY2xvc2UoY29kZSwgcmVhc29uKTtcbiAgfTtcbiAgY29uc3QgX3NlbmRCdWZmZXIgPSAoKSA9PiB7XG4gICAgaWYgKGJ1ZmZlcmVkRGF0YS5sZW5ndGggJiYgd3NSZWYudmFsdWUgJiYgc3RhdHVzLnZhbHVlID09PSBcIk9QRU5cIikge1xuICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVyZWREYXRhKVxuICAgICAgICB3c1JlZi52YWx1ZS5zZW5kKGJ1ZmZlcik7XG4gICAgICBidWZmZXJlZERhdGEgPSBbXTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNlbmQgPSAoZGF0YTIsIHVzZUJ1ZmZlciA9IHRydWUpID0+IHtcbiAgICBpZiAoIXdzUmVmLnZhbHVlIHx8IHN0YXR1cy52YWx1ZSAhPT0gXCJPUEVOXCIpIHtcbiAgICAgIGlmICh1c2VCdWZmZXIpXG4gICAgICAgIGJ1ZmZlcmVkRGF0YS5wdXNoKGRhdGEyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgX3NlbmRCdWZmZXIoKTtcbiAgICB3c1JlZi52YWx1ZS5zZW5kKGRhdGEyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgY29uc3QgX2luaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKTtcbiAgICB3c1JlZi52YWx1ZSA9IHdzO1xuICAgIHN0YXR1cy52YWx1ZSA9IFwiQ09OTkVDVElOR1wiO1xuICAgIGV4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTtcbiAgICB3cy5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICBzdGF0dXMudmFsdWUgPSBcIk9QRU5cIjtcbiAgICAgIG9uQ29ubmVjdGVkID09IG51bGwgPyB2b2lkIDAgOiBvbkNvbm5lY3RlZCh3cyk7XG4gICAgICBoZWFydGJlYXRSZXN1bWUgPT0gbnVsbCA/IHZvaWQgMCA6IGhlYXJ0YmVhdFJlc3VtZSgpO1xuICAgICAgX3NlbmRCdWZmZXIoKTtcbiAgICB9O1xuICAgIHdzLm9uY2xvc2UgPSAoZXYpID0+IHtcbiAgICAgIHN0YXR1cy52YWx1ZSA9IFwiQ0xPU0VEXCI7XG4gICAgICB3c1JlZi52YWx1ZSA9IHZvaWQgMDtcbiAgICAgIG9uRGlzY29ubmVjdGVkID09IG51bGwgPyB2b2lkIDAgOiBvbkRpc2Nvbm5lY3RlZCh3cywgZXYpO1xuICAgICAgaWYgKCFleHBsaWNpdGx5Q2xvc2VkICYmIG9wdGlvbnMuYXV0b1JlY29ubmVjdCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmV0cmllcyA9IC0xLFxuICAgICAgICAgIGRlbGF5ID0gMWUzLFxuICAgICAgICAgIG9uRmFpbGVkXG4gICAgICAgIH0gPSByZXNvbHZlTmVzdGVkT3B0aW9ucyhvcHRpb25zLmF1dG9SZWNvbm5lY3QpO1xuICAgICAgICByZXRyaWVkICs9IDE7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0cmllcyA9PT0gXCJudW1iZXJcIiAmJiAocmV0cmllcyA8IDAgfHwgcmV0cmllZCA8IHJldHJpZXMpKVxuICAgICAgICAgIHNldFRpbWVvdXQoX2luaXQsIGRlbGF5KTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJldHJpZXMgPT09IFwiZnVuY3Rpb25cIiAmJiByZXRyaWVzKCkpXG4gICAgICAgICAgc2V0VGltZW91dChfaW5pdCwgZGVsYXkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb25GYWlsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRmFpbGVkKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3cy5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgIG9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRXJyb3Iod3MsIGUpO1xuICAgIH07XG4gICAgd3Mub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgIGRhdGEudmFsdWUgPSBlLmRhdGE7XG4gICAgICBvbk1lc3NhZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IG9uTWVzc2FnZSh3cywgZSk7XG4gICAgfTtcbiAgfTtcbiAgaWYgKG9wdGlvbnMuaGVhcnRiZWF0KSB7XG4gICAgY29uc3Qge1xuICAgICAgbWVzc2FnZSA9IFwicGluZ1wiLFxuICAgICAgaW50ZXJ2YWwgPSAxZTNcbiAgICB9ID0gcmVzb2x2ZU5lc3RlZE9wdGlvbnMob3B0aW9ucy5oZWFydGJlYXQpO1xuICAgIGNvbnN0IHsgcGF1c2UsIHJlc3VtZSB9ID0gc2hhcmVkLnVzZUludGVydmFsRm4oKCkgPT4gc2VuZChtZXNzYWdlLCBmYWxzZSksIGludGVydmFsLCB7IGltbWVkaWF0ZTogZmFsc2UgfSk7XG4gICAgaGVhcnRiZWF0UGF1c2UgPSBwYXVzZTtcbiAgICBoZWFydGJlYXRSZXN1bWUgPSByZXN1bWU7XG4gIH1cbiAgaWYgKGltbWVkaWF0ZSlcbiAgICBfaW5pdCgpO1xuICBpZiAoYXV0b0Nsb3NlKSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiYmVmb3JldW5sb2FkXCIsICgpID0+IGNsb3NlKCkpO1xuICAgIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZShjbG9zZSk7XG4gIH1cbiAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICBjbG9zZSgpO1xuICAgIHJldHJpZWQgPSAwO1xuICAgIF9pbml0KCk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBzdGF0dXMsXG4gICAgY2xvc2UsXG4gICAgc2VuZCxcbiAgICBvcGVuLFxuICAgIHdzOiB3c1JlZlxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VXZWJXb3JrZXIodXJsLCB3b3JrZXJPcHRpb25zLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRhdGEgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3Qgd29ya2VyID0gdnVlRGVtaS5zaGFsbG93UmVmKCk7XG4gIGNvbnN0IHBvc3QgPSBmdW5jdGlvbiBwb3N0Mih2YWwpIHtcbiAgICBpZiAoIXdvcmtlci52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICB3b3JrZXIudmFsdWUucG9zdE1lc3NhZ2UodmFsKTtcbiAgfTtcbiAgY29uc3QgdGVybWluYXRlID0gZnVuY3Rpb24gdGVybWluYXRlMigpIHtcbiAgICBpZiAoIXdvcmtlci52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICB3b3JrZXIudmFsdWUudGVybWluYXRlKCk7XG4gIH07XG4gIGlmICh3aW5kb3cpIHtcbiAgICB3b3JrZXIudmFsdWUgPSBuZXcgV29ya2VyKHVybCwgd29ya2VyT3B0aW9ucyk7XG4gICAgd29ya2VyLnZhbHVlLm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgICBkYXRhLnZhbHVlID0gZS5kYXRhO1xuICAgIH07XG4gICAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICAgIGlmICh3b3JrZXIudmFsdWUpXG4gICAgICAgIHdvcmtlci52YWx1ZS50ZXJtaW5hdGUoKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGRhdGEsXG4gICAgcG9zdCxcbiAgICB0ZXJtaW5hdGUsXG4gICAgd29ya2VyXG4gIH07XG59XG5cbmNvbnN0IGpvYlJ1bm5lciA9ICh1c2VyRnVuYykgPT4gKGUpID0+IHtcbiAgY29uc3QgdXNlckZ1bmNBcmdzID0gZS5kYXRhWzBdO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVzZXJGdW5jLmFwcGx5KHZvaWQgMCwgdXNlckZ1bmNBcmdzKSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgcG9zdE1lc3NhZ2UoW1wiU1VDQ0VTU1wiLCByZXN1bHRdKTtcbiAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgcG9zdE1lc3NhZ2UoW1wiRVJST1JcIiwgZXJyb3JdKTtcbiAgfSk7XG59O1xuXG5jb25zdCBkZXBzUGFyc2VyID0gKGRlcHMpID0+IHtcbiAgaWYgKGRlcHMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBcIlwiO1xuICBjb25zdCBkZXBzU3RyaW5nID0gZGVwcy5tYXAoKGRlcCkgPT4gYCcke2RlcH0nYCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIGBpbXBvcnRTY3JpcHRzKCR7ZGVwc1N0cmluZ30pYDtcbn07XG5cbmNvbnN0IGNyZWF0ZVdvcmtlckJsb2JVcmwgPSAoZm4sIGRlcHMpID0+IHtcbiAgY29uc3QgYmxvYkNvZGUgPSBgJHtkZXBzUGFyc2VyKGRlcHMpfTsgb25tZXNzYWdlPSgke2pvYlJ1bm5lcn0pKCR7Zm59KWA7XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYmxvYkNvZGVdLCB7IHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIgfSk7XG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIHJldHVybiB1cmw7XG59O1xuXG5jb25zdCB1c2VXZWJXb3JrZXJGbiA9IChmbiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkZXBlbmRlbmNpZXMgPSBbXSxcbiAgICB0aW1lb3V0LFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHdvcmtlciA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IHdvcmtlclN0YXR1cyA9IHZ1ZURlbWkucmVmKFwiUEVORElOR1wiKTtcbiAgY29uc3QgcHJvbWlzZSA9IHZ1ZURlbWkucmVmKHt9KTtcbiAgY29uc3QgdGltZW91dElkID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3Qgd29ya2VyVGVybWluYXRlID0gKHN0YXR1cyA9IFwiUEVORElOR1wiKSA9PiB7XG4gICAgaWYgKHdvcmtlci52YWx1ZSAmJiB3b3JrZXIudmFsdWUuX3VybCAmJiB3aW5kb3cpIHtcbiAgICAgIHdvcmtlci52YWx1ZS50ZXJtaW5hdGUoKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwod29ya2VyLnZhbHVlLl91cmwpO1xuICAgICAgcHJvbWlzZS52YWx1ZSA9IHt9O1xuICAgICAgd29ya2VyLnZhbHVlID0gdm9pZCAwO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQudmFsdWUpO1xuICAgICAgd29ya2VyU3RhdHVzLnZhbHVlID0gc3RhdHVzO1xuICAgIH1cbiAgfTtcbiAgd29ya2VyVGVybWluYXRlKCk7XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSh3b3JrZXJUZXJtaW5hdGUpO1xuICBjb25zdCBnZW5lcmF0ZVdvcmtlciA9ICgpID0+IHtcbiAgICBjb25zdCBibG9iVXJsID0gY3JlYXRlV29ya2VyQmxvYlVybChmbiwgZGVwZW5kZW5jaWVzKTtcbiAgICBjb25zdCBuZXdXb3JrZXIgPSBuZXcgV29ya2VyKGJsb2JVcmwpO1xuICAgIG5ld1dvcmtlci5fdXJsID0gYmxvYlVybDtcbiAgICBuZXdXb3JrZXIub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgIH0sIHJlamVjdCA9ICgpID0+IHtcbiAgICAgIH0gfSA9IHByb21pc2UudmFsdWU7XG4gICAgICBjb25zdCBbc3RhdHVzLCByZXN1bHRdID0gZS5kYXRhO1xuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcIlNVQ0NFU1NcIjpcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgd29ya2VyVGVybWluYXRlKHN0YXR1cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdCk7XG4gICAgICAgICAgd29ya2VyVGVybWluYXRlKFwiRVJST1JcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcbiAgICBuZXdXb3JrZXIub25lcnJvciA9IChlKSA9PiB7XG4gICAgICBjb25zdCB7IHJlamVjdCA9ICgpID0+IHtcbiAgICAgIH0gfSA9IHByb21pc2UudmFsdWU7XG4gICAgICByZWplY3QoZSk7XG4gICAgICB3b3JrZXJUZXJtaW5hdGUoXCJFUlJPUlwiKTtcbiAgICB9O1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICB0aW1lb3V0SWQudmFsdWUgPSBzZXRUaW1lb3V0KCgpID0+IHdvcmtlclRlcm1pbmF0ZShcIlRJTUVPVVRfRVhQSVJFRFwiKSwgdGltZW91dCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdXb3JrZXI7XG4gIH07XG4gIGNvbnN0IGNhbGxXb3JrZXIgPSAoLi4uZm5BcmdzKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcHJvbWlzZS52YWx1ZSA9IHtcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3RcbiAgICB9O1xuICAgIHdvcmtlci52YWx1ZSAmJiB3b3JrZXIudmFsdWUucG9zdE1lc3NhZ2UoW1suLi5mbkFyZ3NdXSk7XG4gICAgd29ya2VyU3RhdHVzLnZhbHVlID0gXCJSVU5OSU5HXCI7XG4gIH0pO1xuICBjb25zdCB3b3JrZXJGbiA9ICguLi5mbkFyZ3MpID0+IHtcbiAgICBpZiAod29ya2VyU3RhdHVzLnZhbHVlID09PSBcIlJVTk5JTkdcIikge1xuICAgICAgY29uc29sZS5lcnJvcihcIlt1c2VXZWJXb3JrZXJGbl0gWW91IGNhbiBvbmx5IHJ1biBvbmUgaW5zdGFuY2Ugb2YgdGhlIHdvcmtlciBhdCBhIHRpbWUuXCIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgfVxuICAgIHdvcmtlci52YWx1ZSA9IGdlbmVyYXRlV29ya2VyKCk7XG4gICAgcmV0dXJuIGNhbGxXb3JrZXIoLi4uZm5BcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB3b3JrZXJGbixcbiAgICB3b3JrZXJTdGF0dXMsXG4gICAgd29ya2VyVGVybWluYXRlXG4gIH07XG59O1xuXG5mdW5jdGlvbiB1c2VXaW5kb3dGb2N1cyh7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IHt9KSB7XG4gIGlmICghd2luZG93KVxuICAgIHJldHVybiB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGZvY3VzZWQgPSB2dWVEZW1pLnJlZih3aW5kb3cuZG9jdW1lbnQuaGFzRm9jdXMoKSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImJsdXJcIiwgKCkgPT4ge1xuICAgIGZvY3VzZWQudmFsdWUgPSBmYWxzZTtcbiAgfSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImZvY3VzXCIsICgpID0+IHtcbiAgICBmb2N1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiBmb2N1c2VkO1xufVxuXG5mdW5jdGlvbiB1c2VXaW5kb3dTY3JvbGwoeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSB7fSkge1xuICBpZiAoIXdpbmRvdykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB2dWVEZW1pLnJlZigwKSxcbiAgICAgIHk6IHZ1ZURlbWkucmVmKDApXG4gICAgfTtcbiAgfVxuICBjb25zdCB4ID0gdnVlRGVtaS5yZWYod2luZG93LnBhZ2VYT2Zmc2V0KTtcbiAgY29uc3QgeSA9IHZ1ZURlbWkucmVmKHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKCkgPT4ge1xuICAgIHgudmFsdWUgPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgeS52YWx1ZSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgfSwge1xuICAgIGNhcHR1cmU6IGZhbHNlLFxuICAgIHBhc3NpdmU6IHRydWVcbiAgfSk7XG4gIHJldHVybiB7IHgsIHkgfTtcbn1cblxuZnVuY3Rpb24gdXNlV2luZG93U2l6ZShvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csXG4gICAgaW5pdGlhbFdpZHRoID0gSW5maW5pdHksXG4gICAgaW5pdGlhbEhlaWdodCA9IEluZmluaXR5LFxuICAgIGxpc3Rlbk9yaWVudGF0aW9uID0gdHJ1ZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgd2lkdGggPSB2dWVEZW1pLnJlZihpbml0aWFsV2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSB2dWVEZW1pLnJlZihpbml0aWFsSGVpZ2h0KTtcbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGlmICh3aW5kb3cpIHtcbiAgICAgIHdpZHRoLnZhbHVlID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBoZWlnaHQudmFsdWUgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgfVxuICB9O1xuICB1cGRhdGUoKTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZCh1cGRhdGUpO1xuICB1c2VFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHVwZGF0ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICBpZiAobGlzdGVuT3JpZW50YXRpb24pXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIHVwZGF0ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XG59XG5cbmV4cG9ydHMuRGVmYXVsdE1hZ2ljS2V5c0FsaWFzTWFwID0gRGVmYXVsdE1hZ2ljS2V5c0FsaWFzTWFwO1xuZXhwb3J0cy5TdG9yYWdlU2VyaWFsaXplcnMgPSBTdG9yYWdlU2VyaWFsaXplcnM7XG5leHBvcnRzLlRyYW5zaXRpb25QcmVzZXRzID0gVHJhbnNpdGlvblByZXNldHM7XG5leHBvcnRzLmFzeW5jQ29tcHV0ZWQgPSBjb21wdXRlZEFzeW5jO1xuZXhwb3J0cy5icmVha3BvaW50c0FudERlc2lnbiA9IGJyZWFrcG9pbnRzQW50RGVzaWduO1xuZXhwb3J0cy5icmVha3BvaW50c0Jvb3RzdHJhcFY1ID0gYnJlYWtwb2ludHNCb290c3RyYXBWNTtcbmV4cG9ydHMuYnJlYWtwb2ludHNRdWFzYXIgPSBicmVha3BvaW50c1F1YXNhcjtcbmV4cG9ydHMuYnJlYWtwb2ludHNTZW1hdGljID0gYnJlYWtwb2ludHNTZW1hdGljO1xuZXhwb3J0cy5icmVha3BvaW50c1RhaWx3aW5kID0gYnJlYWtwb2ludHNUYWlsd2luZDtcbmV4cG9ydHMuYnJlYWtwb2ludHNWdWV0aWZ5ID0gYnJlYWtwb2ludHNWdWV0aWZ5O1xuZXhwb3J0cy5jb21wdXRlZEFzeW5jID0gY29tcHV0ZWRBc3luYztcbmV4cG9ydHMuY29tcHV0ZWRJbmplY3QgPSBjb21wdXRlZEluamVjdDtcbmV4cG9ydHMuY3JlYXRlRmV0Y2ggPSBjcmVhdGVGZXRjaDtcbmV4cG9ydHMuY3JlYXRlVW5yZWZGbiA9IGNyZWF0ZVVucmVmRm47XG5leHBvcnRzLmRlZmF1bHREb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudDtcbmV4cG9ydHMuZGVmYXVsdExvY2F0aW9uID0gZGVmYXVsdExvY2F0aW9uO1xuZXhwb3J0cy5kZWZhdWx0TmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvcjtcbmV4cG9ydHMuZGVmYXVsdFdpbmRvdyA9IGRlZmF1bHRXaW5kb3c7XG5leHBvcnRzLmdldFNTUkhhbmRsZXIgPSBnZXRTU1JIYW5kbGVyO1xuZXhwb3J0cy5tYXBHYW1lcGFkVG9YYm94MzYwQ29udHJvbGxlciA9IG1hcEdhbWVwYWRUb1hib3gzNjBDb250cm9sbGVyO1xuZXhwb3J0cy5vbkNsaWNrT3V0c2lkZSA9IG9uQ2xpY2tPdXRzaWRlO1xuZXhwb3J0cy5vbktleURvd24gPSBvbktleURvd247XG5leHBvcnRzLm9uS2V5UHJlc3NlZCA9IG9uS2V5UHJlc3NlZDtcbmV4cG9ydHMub25LZXlTdHJva2UgPSBvbktleVN0cm9rZTtcbmV4cG9ydHMub25LZXlVcCA9IG9uS2V5VXA7XG5leHBvcnRzLm9uTG9uZ1ByZXNzID0gb25Mb25nUHJlc3M7XG5leHBvcnRzLm9uU3RhcnRUeXBpbmcgPSBvblN0YXJ0VHlwaW5nO1xuZXhwb3J0cy5zZXRTU1JIYW5kbGVyID0gc2V0U1NSSGFuZGxlcjtcbmV4cG9ydHMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbmV4cG9ydHMudW5yZWZFbGVtZW50ID0gdW5yZWZFbGVtZW50O1xuZXhwb3J0cy51c2VBY3RpdmVFbGVtZW50ID0gdXNlQWN0aXZlRWxlbWVudDtcbmV4cG9ydHMudXNlQXN5bmNRdWV1ZSA9IHVzZUFzeW5jUXVldWU7XG5leHBvcnRzLnVzZUFzeW5jU3RhdGUgPSB1c2VBc3luY1N0YXRlO1xuZXhwb3J0cy51c2VCYXNlNjQgPSB1c2VCYXNlNjQ7XG5leHBvcnRzLnVzZUJhdHRlcnkgPSB1c2VCYXR0ZXJ5O1xuZXhwb3J0cy51c2VCbHVldG9vdGggPSB1c2VCbHVldG9vdGg7XG5leHBvcnRzLnVzZUJyZWFrcG9pbnRzID0gdXNlQnJlYWtwb2ludHM7XG5leHBvcnRzLnVzZUJyb2FkY2FzdENoYW5uZWwgPSB1c2VCcm9hZGNhc3RDaGFubmVsO1xuZXhwb3J0cy51c2VCcm93c2VyTG9jYXRpb24gPSB1c2VCcm93c2VyTG9jYXRpb247XG5leHBvcnRzLnVzZUNhY2hlZCA9IHVzZUNhY2hlZDtcbmV4cG9ydHMudXNlQ2xhbXAgPSB1c2VDbGFtcDtcbmV4cG9ydHMudXNlQ2xpcGJvYXJkID0gdXNlQ2xpcGJvYXJkO1xuZXhwb3J0cy51c2VDb2xvck1vZGUgPSB1c2VDb2xvck1vZGU7XG5leHBvcnRzLnVzZUNvbmZpcm1EaWFsb2cgPSB1c2VDb25maXJtRGlhbG9nO1xuZXhwb3J0cy51c2VDc3NWYXIgPSB1c2VDc3NWYXI7XG5leHBvcnRzLnVzZUN1cnJlbnRFbGVtZW50ID0gdXNlQ3VycmVudEVsZW1lbnQ7XG5leHBvcnRzLnVzZUN5Y2xlTGlzdCA9IHVzZUN5Y2xlTGlzdDtcbmV4cG9ydHMudXNlRGFyayA9IHVzZURhcms7XG5leHBvcnRzLnVzZURlYm91bmNlZFJlZkhpc3RvcnkgPSB1c2VEZWJvdW5jZWRSZWZIaXN0b3J5O1xuZXhwb3J0cy51c2VEZXZpY2VNb3Rpb24gPSB1c2VEZXZpY2VNb3Rpb247XG5leHBvcnRzLnVzZURldmljZU9yaWVudGF0aW9uID0gdXNlRGV2aWNlT3JpZW50YXRpb247XG5leHBvcnRzLnVzZURldmljZVBpeGVsUmF0aW8gPSB1c2VEZXZpY2VQaXhlbFJhdGlvO1xuZXhwb3J0cy51c2VEZXZpY2VzTGlzdCA9IHVzZURldmljZXNMaXN0O1xuZXhwb3J0cy51c2VEaXNwbGF5TWVkaWEgPSB1c2VEaXNwbGF5TWVkaWE7XG5leHBvcnRzLnVzZURvY3VtZW50VmlzaWJpbGl0eSA9IHVzZURvY3VtZW50VmlzaWJpbGl0eTtcbmV4cG9ydHMudXNlRHJhZ2dhYmxlID0gdXNlRHJhZ2dhYmxlO1xuZXhwb3J0cy51c2VEcm9wWm9uZSA9IHVzZURyb3Bab25lO1xuZXhwb3J0cy51c2VFbGVtZW50Qm91bmRpbmcgPSB1c2VFbGVtZW50Qm91bmRpbmc7XG5leHBvcnRzLnVzZUVsZW1lbnRCeVBvaW50ID0gdXNlRWxlbWVudEJ5UG9pbnQ7XG5leHBvcnRzLnVzZUVsZW1lbnRIb3ZlciA9IHVzZUVsZW1lbnRIb3ZlcjtcbmV4cG9ydHMudXNlRWxlbWVudFNpemUgPSB1c2VFbGVtZW50U2l6ZTtcbmV4cG9ydHMudXNlRWxlbWVudFZpc2liaWxpdHkgPSB1c2VFbGVtZW50VmlzaWJpbGl0eTtcbmV4cG9ydHMudXNlRXZlbnRCdXMgPSB1c2VFdmVudEJ1cztcbmV4cG9ydHMudXNlRXZlbnRMaXN0ZW5lciA9IHVzZUV2ZW50TGlzdGVuZXI7XG5leHBvcnRzLnVzZUV2ZW50U291cmNlID0gdXNlRXZlbnRTb3VyY2U7XG5leHBvcnRzLnVzZUV5ZURyb3BwZXIgPSB1c2VFeWVEcm9wcGVyO1xuZXhwb3J0cy51c2VGYXZpY29uID0gdXNlRmF2aWNvbjtcbmV4cG9ydHMudXNlRmV0Y2ggPSB1c2VGZXRjaDtcbmV4cG9ydHMudXNlRmlsZURpYWxvZyA9IHVzZUZpbGVEaWFsb2c7XG5leHBvcnRzLnVzZUZpbGVTeXN0ZW1BY2Nlc3MgPSB1c2VGaWxlU3lzdGVtQWNjZXNzO1xuZXhwb3J0cy51c2VGb2N1cyA9IHVzZUZvY3VzO1xuZXhwb3J0cy51c2VGb2N1c1dpdGhpbiA9IHVzZUZvY3VzV2l0aGluO1xuZXhwb3J0cy51c2VGcHMgPSB1c2VGcHM7XG5leHBvcnRzLnVzZUZ1bGxzY3JlZW4gPSB1c2VGdWxsc2NyZWVuO1xuZXhwb3J0cy51c2VHYW1lcGFkID0gdXNlR2FtZXBhZDtcbmV4cG9ydHMudXNlR2VvbG9jYXRpb24gPSB1c2VHZW9sb2NhdGlvbjtcbmV4cG9ydHMudXNlSWRsZSA9IHVzZUlkbGU7XG5leHBvcnRzLnVzZUltYWdlID0gdXNlSW1hZ2U7XG5leHBvcnRzLnVzZUluZmluaXRlU2Nyb2xsID0gdXNlSW5maW5pdGVTY3JvbGw7XG5leHBvcnRzLnVzZUludGVyc2VjdGlvbk9ic2VydmVyID0gdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5leHBvcnRzLnVzZUtleU1vZGlmaWVyID0gdXNlS2V5TW9kaWZpZXI7XG5leHBvcnRzLnVzZUxvY2FsU3RvcmFnZSA9IHVzZUxvY2FsU3RvcmFnZTtcbmV4cG9ydHMudXNlTWFnaWNLZXlzID0gdXNlTWFnaWNLZXlzO1xuZXhwb3J0cy51c2VNYW51YWxSZWZIaXN0b3J5ID0gdXNlTWFudWFsUmVmSGlzdG9yeTtcbmV4cG9ydHMudXNlTWVkaWFDb250cm9scyA9IHVzZU1lZGlhQ29udHJvbHM7XG5leHBvcnRzLnVzZU1lZGlhUXVlcnkgPSB1c2VNZWRpYVF1ZXJ5O1xuZXhwb3J0cy51c2VNZW1vaXplID0gdXNlTWVtb2l6ZTtcbmV4cG9ydHMudXNlTWVtb3J5ID0gdXNlTWVtb3J5O1xuZXhwb3J0cy51c2VNb3VudGVkID0gdXNlTW91bnRlZDtcbmV4cG9ydHMudXNlTW91c2UgPSB1c2VNb3VzZTtcbmV4cG9ydHMudXNlTW91c2VJbkVsZW1lbnQgPSB1c2VNb3VzZUluRWxlbWVudDtcbmV4cG9ydHMudXNlTW91c2VQcmVzc2VkID0gdXNlTW91c2VQcmVzc2VkO1xuZXhwb3J0cy51c2VNdXRhdGlvbk9ic2VydmVyID0gdXNlTXV0YXRpb25PYnNlcnZlcjtcbmV4cG9ydHMudXNlTmF2aWdhdG9yTGFuZ3VhZ2UgPSB1c2VOYXZpZ2F0b3JMYW5ndWFnZTtcbmV4cG9ydHMudXNlTmV0d29yayA9IHVzZU5ldHdvcms7XG5leHBvcnRzLnVzZU5vdyA9IHVzZU5vdztcbmV4cG9ydHMudXNlT2JqZWN0VXJsID0gdXNlT2JqZWN0VXJsO1xuZXhwb3J0cy51c2VPZmZzZXRQYWdpbmF0aW9uID0gdXNlT2Zmc2V0UGFnaW5hdGlvbjtcbmV4cG9ydHMudXNlT25saW5lID0gdXNlT25saW5lO1xuZXhwb3J0cy51c2VQYWdlTGVhdmUgPSB1c2VQYWdlTGVhdmU7XG5leHBvcnRzLnVzZVBhcmFsbGF4ID0gdXNlUGFyYWxsYXg7XG5leHBvcnRzLnVzZVBlcm1pc3Npb24gPSB1c2VQZXJtaXNzaW9uO1xuZXhwb3J0cy51c2VQb2ludGVyID0gdXNlUG9pbnRlcjtcbmV4cG9ydHMudXNlUG9pbnRlclN3aXBlID0gdXNlUG9pbnRlclN3aXBlO1xuZXhwb3J0cy51c2VQcmVmZXJyZWRDb2xvclNjaGVtZSA9IHVzZVByZWZlcnJlZENvbG9yU2NoZW1lO1xuZXhwb3J0cy51c2VQcmVmZXJyZWREYXJrID0gdXNlUHJlZmVycmVkRGFyaztcbmV4cG9ydHMudXNlUHJlZmVycmVkTGFuZ3VhZ2VzID0gdXNlUHJlZmVycmVkTGFuZ3VhZ2VzO1xuZXhwb3J0cy51c2VSYWZGbiA9IHVzZVJhZkZuO1xuZXhwb3J0cy51c2VSZWZIaXN0b3J5ID0gdXNlUmVmSGlzdG9yeTtcbmV4cG9ydHMudXNlUmVzaXplT2JzZXJ2ZXIgPSB1c2VSZXNpemVPYnNlcnZlcjtcbmV4cG9ydHMudXNlU2NyZWVuT3JpZW50YXRpb24gPSB1c2VTY3JlZW5PcmllbnRhdGlvbjtcbmV4cG9ydHMudXNlU2NyZWVuU2FmZUFyZWEgPSB1c2VTY3JlZW5TYWZlQXJlYTtcbmV4cG9ydHMudXNlU2NyaXB0VGFnID0gdXNlU2NyaXB0VGFnO1xuZXhwb3J0cy51c2VTY3JvbGwgPSB1c2VTY3JvbGw7XG5leHBvcnRzLnVzZVNjcm9sbExvY2sgPSB1c2VTY3JvbGxMb2NrO1xuZXhwb3J0cy51c2VTZXNzaW9uU3RvcmFnZSA9IHVzZVNlc3Npb25TdG9yYWdlO1xuZXhwb3J0cy51c2VTaGFyZSA9IHVzZVNoYXJlO1xuZXhwb3J0cy51c2VTcGVlY2hSZWNvZ25pdGlvbiA9IHVzZVNwZWVjaFJlY29nbml0aW9uO1xuZXhwb3J0cy51c2VTcGVlY2hTeW50aGVzaXMgPSB1c2VTcGVlY2hTeW50aGVzaXM7XG5leHBvcnRzLnVzZVN0ZXBwZXIgPSB1c2VTdGVwcGVyO1xuZXhwb3J0cy51c2VTdG9yYWdlID0gdXNlU3RvcmFnZTtcbmV4cG9ydHMudXNlU3RvcmFnZUFzeW5jID0gdXNlU3RvcmFnZUFzeW5jO1xuZXhwb3J0cy51c2VTdHlsZVRhZyA9IHVzZVN0eWxlVGFnO1xuZXhwb3J0cy51c2VTd2lwZSA9IHVzZVN3aXBlO1xuZXhwb3J0cy51c2VUZW1wbGF0ZVJlZnNMaXN0ID0gdXNlVGVtcGxhdGVSZWZzTGlzdDtcbmV4cG9ydHMudXNlVGV4dFNlbGVjdGlvbiA9IHVzZVRleHRTZWxlY3Rpb247XG5leHBvcnRzLnVzZVRleHRhcmVhQXV0b3NpemUgPSB1c2VUZXh0YXJlYUF1dG9zaXplO1xuZXhwb3J0cy51c2VUaHJvdHRsZWRSZWZIaXN0b3J5ID0gdXNlVGhyb3R0bGVkUmVmSGlzdG9yeTtcbmV4cG9ydHMudXNlVGltZUFnbyA9IHVzZVRpbWVBZ287XG5leHBvcnRzLnVzZVRpbWVvdXRQb2xsID0gdXNlVGltZW91dFBvbGw7XG5leHBvcnRzLnVzZVRpbWVzdGFtcCA9IHVzZVRpbWVzdGFtcDtcbmV4cG9ydHMudXNlVGl0bGUgPSB1c2VUaXRsZTtcbmV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IHVzZVRyYW5zaXRpb247XG5leHBvcnRzLnVzZVVybFNlYXJjaFBhcmFtcyA9IHVzZVVybFNlYXJjaFBhcmFtcztcbmV4cG9ydHMudXNlVXNlck1lZGlhID0gdXNlVXNlck1lZGlhO1xuZXhwb3J0cy51c2VWTW9kZWwgPSB1c2VWTW9kZWw7XG5leHBvcnRzLnVzZVZNb2RlbHMgPSB1c2VWTW9kZWxzO1xuZXhwb3J0cy51c2VWaWJyYXRlID0gdXNlVmlicmF0ZTtcbmV4cG9ydHMudXNlVmlydHVhbExpc3QgPSB1c2VWaXJ0dWFsTGlzdDtcbmV4cG9ydHMudXNlV2FrZUxvY2sgPSB1c2VXYWtlTG9jaztcbmV4cG9ydHMudXNlV2ViTm90aWZpY2F0aW9uID0gdXNlV2ViTm90aWZpY2F0aW9uO1xuZXhwb3J0cy51c2VXZWJTb2NrZXQgPSB1c2VXZWJTb2NrZXQ7XG5leHBvcnRzLnVzZVdlYldvcmtlciA9IHVzZVdlYldvcmtlcjtcbmV4cG9ydHMudXNlV2ViV29ya2VyRm4gPSB1c2VXZWJXb3JrZXJGbjtcbmV4cG9ydHMudXNlV2luZG93Rm9jdXMgPSB1c2VXaW5kb3dGb2N1cztcbmV4cG9ydHMudXNlV2luZG93U2Nyb2xsID0gdXNlV2luZG93U2Nyb2xsO1xuZXhwb3J0cy51c2VXaW5kb3dTaXplID0gdXNlV2luZG93U2l6ZTtcbk9iamVjdC5rZXlzKHNoYXJlZCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICBpZiAoayAhPT0gJ2RlZmF1bHQnICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KGspKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgaywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZWRba107IH1cbiAgfSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHZ1ZURlbWkgPSByZXF1aXJlKCd2dWUtZGVtaScpO1xuXG52YXIgX19kZWZQcm9wJDkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQ2ID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkNiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkYiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRiID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkOSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkOShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkOSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGIuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ5KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRiKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRiKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGIuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDkoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQ2ID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkNihhLCBfX2dldE93blByb3BEZXNjcyQ2KGIpKTtcbmZ1bmN0aW9uIGNvbXB1dGVkRWFnZXIoZm4sIG9wdGlvbnMpIHtcbiAgdmFyIF9hO1xuICBjb25zdCByZXN1bHQgPSB2dWVEZW1pLnNoYWxsb3dSZWYoKTtcbiAgdnVlRGVtaS53YXRjaEVmZmVjdCgoKSA9PiB7XG4gICAgcmVzdWx0LnZhbHVlID0gZm4oKTtcbiAgfSwgX19zcHJlYWRQcm9wcyQ2KF9fc3ByZWFkVmFsdWVzJDkoe30sIG9wdGlvbnMpLCB7XG4gICAgZmx1c2g6IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZmx1c2gpICE9IG51bGwgPyBfYSA6IFwic3luY1wiXG4gIH0pKTtcbiAgcmV0dXJuIHZ1ZURlbWkucmVhZG9ubHkocmVzdWx0KTtcbn1cblxudmFyIF9hO1xuY29uc3QgaXNDbGllbnQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgaXNEZWYgPSAodmFsKSA9PiB0eXBlb2YgdmFsICE9PSBcInVuZGVmaW5lZFwiO1xuY29uc3QgYXNzZXJ0ID0gKGNvbmRpdGlvbiwgLi4uaW5mb3MpID0+IHtcbiAgaWYgKCFjb25kaXRpb24pXG4gICAgY29uc29sZS53YXJuKC4uLmluZm9zKTtcbn07XG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCBpc0Jvb2xlYW4gPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIjtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCI7XG5jb25zdCBpc051bWJlciA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCI7XG5jb25zdCBpc1N0cmluZyA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCI7XG5jb25zdCBpc09iamVjdCA9ICh2YWwpID0+IHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbmNvbnN0IGlzV2luZG93ID0gKHZhbCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0b1N0cmluZy5jYWxsKHZhbCkgPT09IFwiW29iamVjdCBXaW5kb3ddXCI7XG5jb25zdCBub3cgPSAoKSA9PiBEYXRlLm5vdygpO1xuY29uc3QgdGltZXN0YW1wID0gKCkgPT4gK0RhdGUubm93KCk7XG5jb25zdCBjbGFtcCA9IChuLCBtaW4sIG1heCkgPT4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIG4pKTtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgcmFuZCA9IChtaW4sIG1heCkgPT4ge1xuICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbn07XG5jb25zdCBpc0lPUyA9IGlzQ2xpZW50ICYmICgoX2EgPSB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5uYXZpZ2F0b3IpID09IG51bGwgPyB2b2lkIDAgOiBfYS51c2VyQWdlbnQpICYmIC9pUChhZHxob25lfG9kKS8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcldyYXBwZXIoZmlsdGVyLCBmbikge1xuICBmdW5jdGlvbiB3cmFwcGVyKC4uLmFyZ3MpIHtcbiAgICBmaWx0ZXIoKCkgPT4gZm4uYXBwbHkodGhpcywgYXJncyksIHsgZm4sIHRoaXNBcmc6IHRoaXMsIGFyZ3MgfSk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5jb25zdCBieXBhc3NGaWx0ZXIgPSAoaW52b2tlKSA9PiB7XG4gIHJldHVybiBpbnZva2UoKTtcbn07XG5mdW5jdGlvbiBkZWJvdW5jZUZpbHRlcihtcywgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCB0aW1lcjtcbiAgbGV0IG1heFRpbWVyO1xuICBjb25zdCBmaWx0ZXIgPSAoaW52b2tlKSA9PiB7XG4gICAgY29uc3QgZHVyYXRpb24gPSB2dWVEZW1pLnVucmVmKG1zKTtcbiAgICBjb25zdCBtYXhEdXJhdGlvbiA9IHZ1ZURlbWkudW5yZWYob3B0aW9ucy5tYXhXYWl0KTtcbiAgICBpZiAodGltZXIpXG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIGlmIChkdXJhdGlvbiA8PSAwIHx8IG1heER1cmF0aW9uICE9PSB2b2lkIDAgJiYgbWF4RHVyYXRpb24gPD0gMCkge1xuICAgICAgaWYgKG1heFRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChtYXhUaW1lcik7XG4gICAgICAgIG1heFRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnZva2UoKTtcbiAgICB9XG4gICAgaWYgKG1heER1cmF0aW9uICYmICFtYXhUaW1lcikge1xuICAgICAgbWF4VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVyKVxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIG1heFRpbWVyID0gbnVsbDtcbiAgICAgICAgaW52b2tlKCk7XG4gICAgICB9LCBtYXhEdXJhdGlvbik7XG4gICAgfVxuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAobWF4VGltZXIpXG4gICAgICAgIGNsZWFyVGltZW91dChtYXhUaW1lcik7XG4gICAgICBtYXhUaW1lciA9IG51bGw7XG4gICAgICBpbnZva2UoKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gIH07XG4gIHJldHVybiBmaWx0ZXI7XG59XG5mdW5jdGlvbiB0aHJvdHRsZUZpbHRlcihtcywgdHJhaWxpbmcgPSB0cnVlLCBsZWFkaW5nID0gdHJ1ZSkge1xuICBsZXQgbGFzdEV4ZWMgPSAwO1xuICBsZXQgdGltZXI7XG4gIGxldCBpc0xlYWRpbmcgPSB0cnVlO1xuICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IHZvaWQgMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGZpbHRlciA9IChpbnZva2UpID0+IHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHZ1ZURlbWkudW5yZWYobXMpO1xuICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gbGFzdEV4ZWM7XG4gICAgY2xlYXIoKTtcbiAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgICAgbGFzdEV4ZWMgPSBEYXRlLm5vdygpO1xuICAgICAgcmV0dXJuIGludm9rZSgpO1xuICAgIH1cbiAgICBpZiAoZWxhcHNlZCA+IGR1cmF0aW9uICYmIChsZWFkaW5nIHx8ICFpc0xlYWRpbmcpKSB7XG4gICAgICBsYXN0RXhlYyA9IERhdGUubm93KCk7XG4gICAgICBpbnZva2UoKTtcbiAgICB9IGVsc2UgaWYgKHRyYWlsaW5nKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsYXN0RXhlYyA9IERhdGUubm93KCk7XG4gICAgICAgIGlzTGVhZGluZyA9IHRydWU7XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICAgIGludm9rZSgpO1xuICAgICAgfSwgZHVyYXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWxlYWRpbmcgJiYgIXRpbWVyKVxuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGlzTGVhZGluZyA9IHRydWUsIGR1cmF0aW9uKTtcbiAgICBpc0xlYWRpbmcgPSBmYWxzZTtcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cbmZ1bmN0aW9uIHBhdXNhYmxlRmlsdGVyKGV4dGVuZEZpbHRlciA9IGJ5cGFzc0ZpbHRlcikge1xuICBjb25zdCBpc0FjdGl2ZSA9IHZ1ZURlbWkucmVmKHRydWUpO1xuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IHRydWU7XG4gIH1cbiAgY29uc3QgZXZlbnRGaWx0ZXIgPSAoLi4uYXJncykgPT4ge1xuICAgIGlmIChpc0FjdGl2ZS52YWx1ZSlcbiAgICAgIGV4dGVuZEZpbHRlciguLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHsgaXNBY3RpdmUsIHBhdXNlLCByZXN1bWUsIGV2ZW50RmlsdGVyIH07XG59XG5cbmZ1bmN0aW9uIF9fb25seVZ1ZTMobmFtZSA9IFwidGhpcyBmdW5jdGlvblwiKSB7XG4gIGlmICh2dWVEZW1pLmlzVnVlMylcbiAgICByZXR1cm47XG4gIHRocm93IG5ldyBFcnJvcihgW1Z1ZVVzZV0gJHtuYW1lfSBpcyBvbmx5IHdvcmtzIG9uIFZ1ZSAzLmApO1xufVxuY29uc3QgZGlyZWN0aXZlSG9va3MgPSB7XG4gIG1vdW50ZWQ6IHZ1ZURlbWkuaXNWdWUzID8gXCJtb3VudGVkXCIgOiBcImluc2VydGVkXCIsXG4gIHVwZGF0ZWQ6IHZ1ZURlbWkuaXNWdWUzID8gXCJ1cGRhdGVkXCIgOiBcImNvbXBvbmVudFVwZGF0ZWRcIixcbiAgdW5tb3VudGVkOiB2dWVEZW1pLmlzVnVlMyA/IFwidW5tb3VudGVkXCIgOiBcInVuYmluZFwiXG59O1xuXG5mdW5jdGlvbiBwcm9taXNlVGltZW91dChtcywgdGhyb3dPblRpbWVvdXQgPSBmYWxzZSwgcmVhc29uID0gXCJUaW1lb3V0XCIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodGhyb3dPblRpbWVvdXQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChyZWFzb24pLCBtcyk7XG4gICAgZWxzZVxuICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaWRlbnRpdHkoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTaW5nbGV0b25Qcm9taXNlKGZuKSB7XG4gIGxldCBfcHJvbWlzZTtcbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICBpZiAoIV9wcm9taXNlKVxuICAgICAgX3Byb21pc2UgPSBmbigpO1xuICAgIHJldHVybiBfcHJvbWlzZTtcbiAgfVxuICB3cmFwcGVyLnJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IF9wcmV2ID0gX3Byb21pc2U7XG4gICAgX3Byb21pc2UgPSB2b2lkIDA7XG4gICAgaWYgKF9wcmV2KVxuICAgICAgYXdhaXQgX3ByZXY7XG4gIH07XG4gIHJldHVybiB3cmFwcGVyO1xufVxuZnVuY3Rpb24gaW52b2tlKGZuKSB7XG4gIHJldHVybiBmbigpO1xufVxuZnVuY3Rpb24gY29udGFpbnNQcm9wKG9iaiwgLi4ucHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLnNvbWUoKGspID0+IGsgaW4gb2JqKTtcbn1cbmZ1bmN0aW9uIGluY3JlYXNlV2l0aFVuaXQodGFyZ2V0LCBkZWx0YSkge1xuICB2YXIgX2E7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcIm51bWJlclwiKVxuICAgIHJldHVybiB0YXJnZXQgKyBkZWx0YTtcbiAgY29uc3QgdmFsdWUgPSAoKF9hID0gdGFyZ2V0Lm1hdGNoKC9eLT9bMC05XStcXC4/WzAtOV0qLykpID09IG51bGwgPyB2b2lkIDAgOiBfYVswXSkgfHwgXCJcIjtcbiAgY29uc3QgdW5pdCA9IHRhcmdldC5zbGljZSh2YWx1ZS5sZW5ndGgpO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHZhbHVlKSArIGRlbHRhO1xuICBpZiAoTnVtYmVyLmlzTmFOKHJlc3VsdCkpXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgcmV0dXJuIHJlc3VsdCArIHVuaXQ7XG59XG5mdW5jdGlvbiBvYmplY3RQaWNrKG9iaiwga2V5cywgb21pdFVuZGVmaW5lZCA9IGZhbHNlKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgobiwgaykgPT4ge1xuICAgIGlmIChrIGluIG9iaikge1xuICAgICAgaWYgKCFvbWl0VW5kZWZpbmVkIHx8IG9ialtrXSAhPT0gdm9pZCAwKVxuICAgICAgICBuW2tdID0gb2JqW2tdO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlZFdpdGhDb250cm9sKHNvdXJjZSwgZm4pIHtcbiAgbGV0IHYgPSB2b2lkIDA7XG4gIGxldCB0cmFjaztcbiAgbGV0IHRyaWdnZXI7XG4gIGNvbnN0IGRpcnR5ID0gdnVlRGVtaS5yZWYodHJ1ZSk7XG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICBkaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgdHJpZ2dlcigpO1xuICB9O1xuICB2dWVEZW1pLndhdGNoKHNvdXJjZSwgdXBkYXRlLCB7IGZsdXNoOiBcInN5bmNcIiB9KTtcbiAgY29uc3QgZ2V0ID0gaXNGdW5jdGlvbihmbikgPyBmbiA6IGZuLmdldDtcbiAgY29uc3Qgc2V0ID0gaXNGdW5jdGlvbihmbikgPyB2b2lkIDAgOiBmbi5zZXQ7XG4gIGNvbnN0IHJlc3VsdCA9IHZ1ZURlbWkuY3VzdG9tUmVmKChfdHJhY2ssIF90cmlnZ2VyKSA9PiB7XG4gICAgdHJhY2sgPSBfdHJhY2s7XG4gICAgdHJpZ2dlciA9IF90cmlnZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmIChkaXJ0eS52YWx1ZSkge1xuICAgICAgICAgIHYgPSBnZXQoKTtcbiAgICAgICAgICBkaXJ0eS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrKCk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSxcbiAgICAgIHNldCh2Mikge1xuICAgICAgICBzZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHNldCh2Mik7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG4gIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKHJlc3VsdCkpXG4gICAgcmVzdWx0LnRyaWdnZXIgPSB1cGRhdGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50SG9vaygpIHtcbiAgY29uc3QgZm5zID0gW107XG4gIGNvbnN0IG9mZiA9IChmbikgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gZm5zLmluZGV4T2YoZm4pO1xuICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICBmbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfTtcbiAgY29uc3Qgb24gPSAoZm4pID0+IHtcbiAgICBmbnMucHVzaChmbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZjogKCkgPT4gb2ZmKGZuKVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHRyaWdnZXIgPSAocGFyYW0pID0+IHtcbiAgICBmbnMuZm9yRWFjaCgoZm4pID0+IGZuKHBhcmFtKSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgb24sXG4gICAgb2ZmLFxuICAgIHRyaWdnZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2xvYmFsU3RhdGUoc3RhdGVGYWN0b3J5KSB7XG4gIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBsZXQgc3RhdGU7XG4gIGNvbnN0IHNjb3BlID0gdnVlRGVtaS5lZmZlY3RTY29wZSh0cnVlKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICBzdGF0ZSA9IHNjb3BlLnJ1bihzdGF0ZUZhY3RvcnkpO1xuICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluamVjdGlvblN0YXRlKGNvbXBvc2FibGUpIHtcbiAgY29uc3Qga2V5ID0gU3ltYm9sKFwiSW5qZWN0aW9uU3RhdGVcIik7XG4gIGNvbnN0IHVzZVByb3ZpZGluZ1N0YXRlID0gKC4uLmFyZ3MpID0+IHtcbiAgICB2dWVEZW1pLnByb3ZpZGUoa2V5LCBjb21wb3NhYmxlKC4uLmFyZ3MpKTtcbiAgfTtcbiAgY29uc3QgdXNlSW5qZWN0ZWRTdGF0ZSA9ICgpID0+IHZ1ZURlbWkuaW5qZWN0KGtleSk7XG4gIHJldHVybiBbdXNlUHJvdmlkaW5nU3RhdGUsIHVzZUluamVjdGVkU3RhdGVdO1xufVxuXG5mdW5jdGlvbiB0cnlPblNjb3BlRGlzcG9zZShmbikge1xuICBpZiAodnVlRGVtaS5nZXRDdXJyZW50U2NvcGUoKSkge1xuICAgIHZ1ZURlbWkub25TY29wZURpc3Bvc2UoZm4pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2hhcmVkQ29tcG9zYWJsZShjb21wb3NhYmxlKSB7XG4gIGxldCBzdWJzY3JpYmVycyA9IDA7XG4gIGxldCBzdGF0ZTtcbiAgbGV0IHNjb3BlO1xuICBjb25zdCBkaXNwb3NlID0gKCkgPT4ge1xuICAgIHN1YnNjcmliZXJzIC09IDE7XG4gICAgaWYgKHNjb3BlICYmIHN1YnNjcmliZXJzIDw9IDApIHtcbiAgICAgIHNjb3BlLnN0b3AoKTtcbiAgICAgIHN0YXRlID0gdm9pZCAwO1xuICAgICAgc2NvcGUgPSB2b2lkIDA7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICBzdWJzY3JpYmVycyArPSAxO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHNjb3BlID0gdnVlRGVtaS5lZmZlY3RTY29wZSh0cnVlKTtcbiAgICAgIHN0YXRlID0gc2NvcGUucnVuKCgpID0+IGNvbXBvc2FibGUoLi4uYXJncykpO1xuICAgIH1cbiAgICB0cnlPblNjb3BlRGlzcG9zZShkaXNwb3NlKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZFJlZihyZWYsIGV4dGVuZCwgeyBlbnVtZXJhYmxlID0gZmFsc2UsIHVud3JhcCA9IHRydWUgfSA9IHt9KSB7XG4gIF9fb25seVZ1ZTMoKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXh0ZW5kKSkge1xuICAgIGlmIChrZXkgPT09IFwidmFsdWVcIilcbiAgICAgIGNvbnRpbnVlO1xuICAgIGlmICh2dWVEZW1pLmlzUmVmKHZhbHVlKSAmJiB1bndyYXApIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWYsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgIHZhbHVlLnZhbHVlID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWYsIGtleSwgeyB2YWx1ZSwgZW51bWVyYWJsZSB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7XG4gIGlmIChrZXkgPT0gbnVsbClcbiAgICByZXR1cm4gdnVlRGVtaS51bnJlZihvYmopO1xuICByZXR1cm4gdnVlRGVtaS51bnJlZihvYmopW2tleV07XG59XG5cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2KSB7XG4gIHJldHVybiB2dWVEZW1pLnVucmVmKHYpICE9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGxvZ2ljQW5kKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gYXJncy5ldmVyeSgoaSkgPT4gdnVlRGVtaS51bnJlZihpKSkpO1xufVxuXG5mdW5jdGlvbiBsb2dpY05vdCh2KSB7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+ICF2dWVEZW1pLnVucmVmKHYpKTtcbn1cblxuZnVuY3Rpb24gbG9naWNPciguLi5hcmdzKSB7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGFyZ3Muc29tZSgoaSkgPT4gdnVlRGVtaS51bnJlZihpKSkpO1xufVxuXG52YXIgX19kZWZQcm9wJDggPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRhID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkYSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGEgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ4ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ4KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ4ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkYS5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDgoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGEpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGEoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kYS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkOChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIG1ha2VEZXN0cnVjdHVyYWJsZShvYmosIGFycikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IGNsb25lID0gX19zcHJlYWRWYWx1ZXMkOCh7fSwgb2JqKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvbmUsIFN5bWJvbC5pdGVyYXRvciwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZSgpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGFycltpbmRleCsrXSxcbiAgICAgICAgICAgIGRvbmU6IGluZGV4ID4gYXJyLmxlbmd0aFxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFsuLi5hcnJdLCBvYmopO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0aWZ5KGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gZm4uYXBwbHkodGhpcywgYXJncy5tYXAoKGkpID0+IHZ1ZURlbWkudW5yZWYoaSkpKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYWN0aWZ5T2JqZWN0KG9iaiwgb3B0aW9uc09yS2V5cyA9IHt9KSB7XG4gIGxldCBrZXlzID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnNPcktleXMpKSB7XG4gICAga2V5cyA9IG9wdGlvbnNPcktleXM7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBpbmNsdWRlT3duUHJvcGVydGllcyA9IHRydWUgfSA9IG9wdGlvbnNPcktleXM7XG4gICAga2V5cy5wdXNoKC4uLk9iamVjdC5rZXlzKG9iaikpO1xuICAgIGlmIChpbmNsdWRlT3duUHJvcGVydGllcylcbiAgICAgIGtleXMucHVzaCguLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIHJldHVybiBbXG4gICAgICBrZXksXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHJlYWN0aWZ5KHZhbHVlLmJpbmQob2JqKSkgOiB2YWx1ZVxuICAgIF07XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gdG9SZWFjdGl2ZShvYmplY3RSZWYpIHtcbiAgaWYgKCF2dWVEZW1pLmlzUmVmKG9iamVjdFJlZikpXG4gICAgcmV0dXJuIHZ1ZURlbWkucmVhY3RpdmUob2JqZWN0UmVmKTtcbiAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoe30sIHtcbiAgICBnZXQoXywgcCwgcmVjZWl2ZXIpIHtcbiAgICAgIHJldHVybiB2dWVEZW1pLnVucmVmKFJlZmxlY3QuZ2V0KG9iamVjdFJlZi52YWx1ZSwgcCwgcmVjZWl2ZXIpKTtcbiAgICB9LFxuICAgIHNldChfLCBwLCB2YWx1ZSkge1xuICAgICAgaWYgKHZ1ZURlbWkuaXNSZWYob2JqZWN0UmVmLnZhbHVlW3BdKSAmJiAhdnVlRGVtaS5pc1JlZih2YWx1ZSkpXG4gICAgICAgIG9iamVjdFJlZi52YWx1ZVtwXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgZWxzZVxuICAgICAgICBvYmplY3RSZWYudmFsdWVbcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHkoXywgcCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkob2JqZWN0UmVmLnZhbHVlLCBwKTtcbiAgICB9LFxuICAgIGhhcyhfLCBwKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXMob2JqZWN0UmVmLnZhbHVlLCBwKTtcbiAgICB9LFxuICAgIG93bktleXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0UmVmLnZhbHVlKTtcbiAgICB9LFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdnVlRGVtaS5yZWFjdGl2ZShwcm94eSk7XG59XG5cbmZ1bmN0aW9uIHJlYWN0aXZlQ29tcHV0ZWQoZm4pIHtcbiAgcmV0dXJuIHRvUmVhY3RpdmUodnVlRGVtaS5jb21wdXRlZChmbikpO1xufVxuXG5mdW5jdGlvbiByZWFjdGl2ZU9taXQob2JqLCAuLi5rZXlzKSB7XG4gIGNvbnN0IGZsYXRLZXlzID0ga2V5cy5mbGF0KCk7XG4gIHJldHVybiByZWFjdGl2ZUNvbXB1dGVkKCgpID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2dWVEZW1pLnRvUmVmcyhvYmopKS5maWx0ZXIoKGUpID0+ICFmbGF0S2V5cy5pbmNsdWRlcyhlWzBdKSkpKTtcbn1cblxuZnVuY3Rpb24gcmVhY3RpdmVQaWNrKG9iaiwgLi4ua2V5cykge1xuICBjb25zdCBmbGF0S2V5cyA9IGtleXMuZmxhdCgpO1xuICByZXR1cm4gdnVlRGVtaS5yZWFjdGl2ZShPYmplY3QuZnJvbUVudHJpZXMoZmxhdEtleXMubWFwKChrKSA9PiBbaywgdnVlRGVtaS50b1JlZihvYmosIGspXSkpKTtcbn1cblxuZnVuY3Rpb24gcmVmQXV0b1Jlc2V0KGRlZmF1bHRWYWx1ZSwgYWZ0ZXJNcyA9IDFlNCkge1xuICByZXR1cm4gdnVlRGVtaS5jdXN0b21SZWYoKHRyYWNrLCB0cmlnZ2VyKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIGxldCB0aW1lcjtcbiAgICBjb25zdCByZXNldEFmdGVyID0gKCkgPT4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIHRyaWdnZXIoKTtcbiAgICB9LCB2dWVEZW1pLnVucmVmKGFmdGVyTXMpKTtcbiAgICB0cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHRyYWNrKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQobmV3VmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHJlc2V0QWZ0ZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlRGVib3VuY2VGbihmbiwgbXMgPSAyMDAsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlRmlsdGVyV3JhcHBlcihkZWJvdW5jZUZpbHRlcihtcywgb3B0aW9ucyksIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVmRGVib3VuY2VkKHZhbHVlLCBtcyA9IDIwMCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmIChtcyA8PSAwKVxuICAgIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgZGVib3VuY2VkID0gdnVlRGVtaS5yZWYodmFsdWUudmFsdWUpO1xuICBjb25zdCB1cGRhdGVyID0gdXNlRGVib3VuY2VGbigoKSA9PiB7XG4gICAgZGVib3VuY2VkLnZhbHVlID0gdmFsdWUudmFsdWU7XG4gIH0sIG1zLCBvcHRpb25zKTtcbiAgdnVlRGVtaS53YXRjaCh2YWx1ZSwgKCkgPT4gdXBkYXRlcigpKTtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxuZnVuY3Rpb24gcmVmRGVmYXVsdChzb3VyY2UsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIChfYSA9IHNvdXJjZS52YWx1ZSkgIT0gbnVsbCA/IF9hIDogZGVmYXVsdFZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBzb3VyY2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VUaHJvdHRsZUZuKGZuLCBtcyA9IDIwMCwgdHJhaWxpbmcgPSB0cnVlLCBsZWFkaW5nID0gdHJ1ZSkge1xuICByZXR1cm4gY3JlYXRlRmlsdGVyV3JhcHBlcih0aHJvdHRsZUZpbHRlcihtcywgdHJhaWxpbmcsIGxlYWRpbmcpLCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlZlRocm90dGxlZCh2YWx1ZSwgZGVsYXkgPSAyMDAsIHRyYWlsaW5nID0gdHJ1ZSwgbGVhZGluZyA9IHRydWUpIHtcbiAgaWYgKGRlbGF5IDw9IDApXG4gICAgcmV0dXJuIHZhbHVlO1xuICBjb25zdCB0aHJvdHRsZWQgPSB2dWVEZW1pLnJlZih2YWx1ZS52YWx1ZSk7XG4gIGNvbnN0IHVwZGF0ZXIgPSB1c2VUaHJvdHRsZUZuKCgpID0+IHtcbiAgICB0aHJvdHRsZWQudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgfSwgZGVsYXksIHRyYWlsaW5nLCBsZWFkaW5nKTtcbiAgdnVlRGVtaS53YXRjaCh2YWx1ZSwgKCkgPT4gdXBkYXRlcigpKTtcbiAgcmV0dXJuIHRocm90dGxlZDtcbn1cblxuZnVuY3Rpb24gcmVmV2l0aENvbnRyb2woaW5pdGlhbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3VyY2UgPSBpbml0aWFsO1xuICBsZXQgdHJhY2s7XG4gIGxldCB0cmlnZ2VyO1xuICBjb25zdCByZWYgPSB2dWVEZW1pLmN1c3RvbVJlZigoX3RyYWNrLCBfdHJpZ2dlcikgPT4ge1xuICAgIHRyYWNrID0gX3RyYWNrO1xuICAgIHRyaWdnZXIgPSBfdHJpZ2dlcjtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZ2V0KCk7XG4gICAgICB9LFxuICAgICAgc2V0KHYpIHtcbiAgICAgICAgc2V0KHYpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICBmdW5jdGlvbiBnZXQodHJhY2tpbmcgPSB0cnVlKSB7XG4gICAgaWYgKHRyYWNraW5nKVxuICAgICAgdHJhY2soKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIGZ1bmN0aW9uIHNldCh2YWx1ZSwgdHJpZ2dlcmluZyA9IHRydWUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICh2YWx1ZSA9PT0gc291cmNlKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG9sZCA9IHNvdXJjZTtcbiAgICBpZiAoKChfYSA9IG9wdGlvbnMub25CZWZvcmVDaGFuZ2UpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIHZhbHVlLCBvbGQpKSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm47XG4gICAgc291cmNlID0gdmFsdWU7XG4gICAgKF9iID0gb3B0aW9ucy5vbkNoYW5nZWQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMsIHZhbHVlLCBvbGQpO1xuICAgIGlmICh0cmlnZ2VyaW5nKVxuICAgICAgdHJpZ2dlcigpO1xuICB9XG4gIGNvbnN0IHVudHJhY2tlZEdldCA9ICgpID0+IGdldChmYWxzZSk7XG4gIGNvbnN0IHNpbGVudFNldCA9ICh2KSA9PiBzZXQodiwgZmFsc2UpO1xuICBjb25zdCBwZWVrID0gKCkgPT4gZ2V0KGZhbHNlKTtcbiAgY29uc3QgbGF5ID0gKHYpID0+IHNldCh2LCBmYWxzZSk7XG4gIHJldHVybiBleHRlbmRSZWYocmVmLCB7XG4gICAgZ2V0LFxuICAgIHNldCxcbiAgICB1bnRyYWNrZWRHZXQsXG4gICAgc2lsZW50U2V0LFxuICAgIHBlZWssXG4gICAgbGF5XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn1cbmNvbnN0IGNvbnRyb2xsZWRSZWYgPSByZWZXaXRoQ29udHJvbDtcblxuZnVuY3Rpb24gcmVzb2x2ZVJlZihyKSB7XG4gIHJldHVybiB0eXBlb2YgciA9PT0gXCJmdW5jdGlvblwiID8gdnVlRGVtaS5jb21wdXRlZChyKSA6IHZ1ZURlbWkucmVmKHIpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVW5yZWYocikge1xuICByZXR1cm4gdHlwZW9mIHIgPT09IFwiZnVuY3Rpb25cIiA/IHIoKSA6IHZ1ZURlbWkudW5yZWYocik7XG59XG5cbmZ1bmN0aW9uIHNldCguLi5hcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IFtyZWYsIHZhbHVlXSA9IGFyZ3M7XG4gICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgaWYgKHZ1ZURlbWkuaXNWdWUyKSB7XG4gICAgICB2dWVEZW1pLnNldCguLi5hcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3RhcmdldCwga2V5LCB2YWx1ZV0gPSBhcmdzO1xuICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3luY1JlZihsZWZ0LCByaWdodCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBmbHVzaCA9IFwic3luY1wiLFxuICAgIGRlZXAgPSBmYWxzZSxcbiAgICBpbW1lZGlhdGUgPSB0cnVlLFxuICAgIGRpcmVjdGlvbiA9IFwiYm90aFwiXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgc3RvcDEsIHN0b3AyO1xuICBpZiAoZGlyZWN0aW9uID09PSBcImJvdGhcIiB8fCBkaXJlY3Rpb24gPT09IFwibHRyXCIpIHtcbiAgICBzdG9wMSA9IHZ1ZURlbWkud2F0Y2gobGVmdCwgKG5ld1ZhbHVlKSA9PiByaWdodC52YWx1ZSA9IG5ld1ZhbHVlLCB7IGZsdXNoLCBkZWVwLCBpbW1lZGlhdGUgfSk7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbiA9PT0gXCJib3RoXCIgfHwgZGlyZWN0aW9uID09PSBcInJ0bFwiKSB7XG4gICAgc3RvcDIgPSB2dWVEZW1pLndhdGNoKHJpZ2h0LCAobmV3VmFsdWUpID0+IGxlZnQudmFsdWUgPSBuZXdWYWx1ZSwgeyBmbHVzaCwgZGVlcCwgaW1tZWRpYXRlIH0pO1xuICB9XG4gIHJldHVybiAoKSA9PiB7XG4gICAgc3RvcDEgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3AxKCk7XG4gICAgc3RvcDIgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3AyKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN5bmNSZWZzKHNvdXJjZSwgdGFyZ2V0cywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBmbHVzaCA9IFwic3luY1wiLFxuICAgIGRlZXAgPSBmYWxzZSxcbiAgICBpbW1lZGlhdGUgPSB0cnVlXG4gIH0gPSBvcHRpb25zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0cykpXG4gICAgdGFyZ2V0cyA9IFt0YXJnZXRzXTtcbiAgcmV0dXJuIHZ1ZURlbWkud2F0Y2goc291cmNlLCAobmV3VmFsdWUpID0+IHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB0YXJnZXQudmFsdWUgPSBuZXdWYWx1ZSksIHsgZmx1c2gsIGRlZXAsIGltbWVkaWF0ZSB9KTtcbn1cblxudmFyIF9fZGVmUHJvcCQ3ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkNSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kOSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDcgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDcob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDcgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ5LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkOSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkOShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ5LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ3KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkNSA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDUoYSwgX19nZXRPd25Qcm9wRGVzY3MkNShiKSk7XG5mdW5jdGlvbiB0b1JlZnMob2JqZWN0UmVmKSB7XG4gIGlmICghdnVlRGVtaS5pc1JlZihvYmplY3RSZWYpKVxuICAgIHJldHVybiB2dWVEZW1pLnRvUmVmcyhvYmplY3RSZWYpO1xuICBjb25zdCByZXN1bHQgPSBBcnJheS5pc0FycmF5KG9iamVjdFJlZi52YWx1ZSkgPyBuZXcgQXJyYXkob2JqZWN0UmVmLnZhbHVlLmxlbmd0aCkgOiB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0UmVmLnZhbHVlKSB7XG4gICAgcmVzdWx0W2tleV0gPSB2dWVEZW1pLmN1c3RvbVJlZigoKSA9PiAoe1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0UmVmLnZhbHVlW2tleV07XG4gICAgICB9LFxuICAgICAgc2V0KHYpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0UmVmLnZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvcHkgPSBbLi4ub2JqZWN0UmVmLnZhbHVlXTtcbiAgICAgICAgICBjb3B5W2tleV0gPSB2O1xuICAgICAgICAgIG9iamVjdFJlZi52YWx1ZSA9IGNvcHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gX19zcHJlYWRQcm9wcyQ1KF9fc3ByZWFkVmFsdWVzJDcoe30sIG9iamVjdFJlZi52YWx1ZSksIHsgW2tleV06IHYgfSk7XG4gICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld09iamVjdCwgb2JqZWN0UmVmLnZhbHVlKTtcbiAgICAgICAgICBvYmplY3RSZWYudmFsdWUgPSBuZXdPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdHJ5T25CZWZvcmVNb3VudChmbiwgc3luYyA9IHRydWUpIHtcbiAgaWYgKHZ1ZURlbWkuZ2V0Q3VycmVudEluc3RhbmNlKCkpXG4gICAgdnVlRGVtaS5vbkJlZm9yZU1vdW50KGZuKTtcbiAgZWxzZSBpZiAoc3luYylcbiAgICBmbigpO1xuICBlbHNlXG4gICAgdnVlRGVtaS5uZXh0VGljayhmbik7XG59XG5cbmZ1bmN0aW9uIHRyeU9uQmVmb3JlVW5tb3VudChmbikge1xuICBpZiAodnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKSlcbiAgICB2dWVEZW1pLm9uQmVmb3JlVW5tb3VudChmbik7XG59XG5cbmZ1bmN0aW9uIHRyeU9uTW91bnRlZChmbiwgc3luYyA9IHRydWUpIHtcbiAgaWYgKHZ1ZURlbWkuZ2V0Q3VycmVudEluc3RhbmNlKCkpXG4gICAgdnVlRGVtaS5vbk1vdW50ZWQoZm4pO1xuICBlbHNlIGlmIChzeW5jKVxuICAgIGZuKCk7XG4gIGVsc2VcbiAgICB2dWVEZW1pLm5leHRUaWNrKGZuKTtcbn1cblxuZnVuY3Rpb24gdHJ5T25Vbm1vdW50ZWQoZm4pIHtcbiAgaWYgKHZ1ZURlbWkuZ2V0Q3VycmVudEluc3RhbmNlKCkpXG4gICAgdnVlRGVtaS5vblVubW91bnRlZChmbik7XG59XG5cbmZ1bmN0aW9uIHVudGlsKHIpIHtcbiAgbGV0IGlzTm90ID0gZmFsc2U7XG4gIGZ1bmN0aW9uIHRvTWF0Y2goY29uZGl0aW9uLCB7IGZsdXNoID0gXCJzeW5jXCIsIGRlZXAgPSBmYWxzZSwgdGltZW91dCwgdGhyb3dPblRpbWVvdXQgfSA9IHt9KSB7XG4gICAgbGV0IHN0b3AgPSBudWxsO1xuICAgIGNvbnN0IHdhdGNoZXIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc3RvcCA9IHZ1ZURlbWkud2F0Y2gociwgKHYpID0+IHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbih2KSAhPT0gaXNOb3QpIHtcbiAgICAgICAgICBzdG9wID09IG51bGwgPyB2b2lkIDAgOiBzdG9wKCk7XG4gICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmbHVzaCxcbiAgICAgICAgZGVlcCxcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFt3YXRjaGVyXTtcbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2VUaW1lb3V0KHRpbWVvdXQsIHRocm93T25UaW1lb3V0KS50aGVuKCgpID0+IHZ1ZURlbWkudW5yZWYocikpLmZpbmFsbHkoKCkgPT4gc3RvcCA9PSBudWxsID8gdm9pZCAwIDogc3RvcCgpKSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICB9XG4gIGZ1bmN0aW9uIHRvQmUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIXZ1ZURlbWkuaXNSZWYodmFsdWUpKVxuICAgICAgcmV0dXJuIHRvTWF0Y2goKHYpID0+IHYgPT09IHZhbHVlLCBvcHRpb25zKTtcbiAgICBjb25zdCB7IGZsdXNoID0gXCJzeW5jXCIsIGRlZXAgPSBmYWxzZSwgdGltZW91dCwgdGhyb3dPblRpbWVvdXQgfSA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiB7fTtcbiAgICBsZXQgc3RvcCA9IG51bGw7XG4gICAgY29uc3Qgd2F0Y2hlciA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdG9wID0gdnVlRGVtaS53YXRjaChbciwgdmFsdWVdLCAoW3YxLCB2Ml0pID0+IHtcbiAgICAgICAgaWYgKGlzTm90ICE9PSAodjEgPT09IHYyKSkge1xuICAgICAgICAgIHN0b3AgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3AoKTtcbiAgICAgICAgICByZXNvbHZlKHYxKTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmbHVzaCxcbiAgICAgICAgZGVlcCxcbiAgICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFt3YXRjaGVyXTtcbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2VUaW1lb3V0KHRpbWVvdXQsIHRocm93T25UaW1lb3V0KS50aGVuKCgpID0+IHZ1ZURlbWkudW5yZWYocikpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdG9wID09IG51bGwgPyB2b2lkIDAgOiBzdG9wKCk7XG4gICAgICAgIHJldHVybiB2dWVEZW1pLnVucmVmKHIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgfVxuICBmdW5jdGlvbiB0b0JlVHJ1dGh5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdG9NYXRjaCgodikgPT4gQm9vbGVhbih2KSwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gdG9CZU51bGwob3B0aW9ucykge1xuICAgIHJldHVybiB0b0JlKG51bGwsIG9wdGlvbnMpO1xuICB9XG4gIGZ1bmN0aW9uIHRvQmVVbmRlZmluZWQob3B0aW9ucykge1xuICAgIHJldHVybiB0b0JlKHZvaWQgMCwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gdG9CZU5hTihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRvTWF0Y2goTnVtYmVyLmlzTmFOLCBvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiB0b0NvbnRhaW5zKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRvTWF0Y2goKHYpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh2KTtcbiAgICAgIHJldHVybiBhcnJheS5pbmNsdWRlcyh2YWx1ZSkgfHwgYXJyYXkuaW5jbHVkZXModnVlRGVtaS51bnJlZih2YWx1ZSkpO1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG4gIGZ1bmN0aW9uIGNoYW5nZWQob3B0aW9ucykge1xuICAgIHJldHVybiBjaGFuZ2VkVGltZXMoMSwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gY2hhbmdlZFRpbWVzKG4gPSAxLCBvcHRpb25zKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgcmV0dXJuIHRvTWF0Y2goKCkgPT4ge1xuICAgICAgY291bnQgKz0gMTtcbiAgICAgIHJldHVybiBjb3VudCA+PSBuO1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZ1ZURlbWkudW5yZWYocikpKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB7XG4gICAgICB0b01hdGNoLFxuICAgICAgdG9Db250YWlucyxcbiAgICAgIGNoYW5nZWQsXG4gICAgICBjaGFuZ2VkVGltZXMsXG4gICAgICBnZXQgbm90KCkge1xuICAgICAgICBpc05vdCA9ICFpc05vdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB7XG4gICAgICB0b01hdGNoLFxuICAgICAgdG9CZSxcbiAgICAgIHRvQmVUcnV0aHksXG4gICAgICB0b0JlTnVsbCxcbiAgICAgIHRvQmVOYU4sXG4gICAgICB0b0JlVW5kZWZpbmVkLFxuICAgICAgY2hhbmdlZCxcbiAgICAgIGNoYW5nZWRUaW1lcyxcbiAgICAgIGdldCBub3QoKSB7XG4gICAgICAgIGlzTm90ID0gIWlzTm90O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VDb3VudGVyKGluaXRpYWxWYWx1ZSA9IDAsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBjb3VudCA9IHZ1ZURlbWkucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHtcbiAgICBtYXggPSBJbmZpbml0eSxcbiAgICBtaW4gPSAtSW5maW5pdHlcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGluYyA9IChkZWx0YSA9IDEpID0+IGNvdW50LnZhbHVlID0gTWF0aC5taW4obWF4LCBjb3VudC52YWx1ZSArIGRlbHRhKTtcbiAgY29uc3QgZGVjID0gKGRlbHRhID0gMSkgPT4gY291bnQudmFsdWUgPSBNYXRoLm1heChtaW4sIGNvdW50LnZhbHVlIC0gZGVsdGEpO1xuICBjb25zdCBnZXQgPSAoKSA9PiBjb3VudC52YWx1ZTtcbiAgY29uc3Qgc2V0ID0gKHZhbCkgPT4gY291bnQudmFsdWUgPSB2YWw7XG4gIGNvbnN0IHJlc2V0ID0gKHZhbCA9IGluaXRpYWxWYWx1ZSkgPT4ge1xuICAgIGluaXRpYWxWYWx1ZSA9IHZhbDtcbiAgICByZXR1cm4gc2V0KHZhbCk7XG4gIH07XG4gIHJldHVybiB7IGNvdW50LCBpbmMsIGRlYywgZ2V0LCBzZXQsIHJlc2V0IH07XG59XG5cbmNvbnN0IFJFR0VYX1BBUlNFID0gL14oXFxkezR9KVstL10/KFxcZHsxLDJ9KT9bLS9dPyhcXGR7MCwyfSlbVHRcXHNdKihcXGR7MSwyfSk/Oj8oXFxkezEsMn0pPzo/KFxcZHsxLDJ9KT9bLjpdPyhcXGQrKT8kLztcbmNvbnN0IFJFR0VYX0ZPUk1BVCA9IC9cXFsoW15cXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZztcbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZSwgZm9ybWF0U3RyKSA9PiB7XG4gIGNvbnN0IHllYXJzID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgY29uc3QgZGF5cyA9IGRhdGUuZ2V0RGF0ZSgpO1xuICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuICBjb25zdCBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gIGNvbnN0IG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gIGNvbnN0IG1hdGNoZXMgPSB7XG4gICAgWVk6IFN0cmluZyh5ZWFycykuc2xpY2UoLTIpLFxuICAgIFlZWVk6IHllYXJzLFxuICAgIE06IG1vbnRoICsgMSxcbiAgICBNTTogYCR7bW9udGggKyAxfWAucGFkU3RhcnQoMiwgXCIwXCIpLFxuICAgIEQ6IFN0cmluZyhkYXlzKSxcbiAgICBERDogYCR7ZGF5c31gLnBhZFN0YXJ0KDIsIFwiMFwiKSxcbiAgICBIOiBTdHJpbmcoaG91cnMpLFxuICAgIEhIOiBgJHtob3Vyc31gLnBhZFN0YXJ0KDIsIFwiMFwiKSxcbiAgICBoOiBgJHtob3VycyAlIDEyIHx8IDEyfWAucGFkU3RhcnQoMSwgXCIwXCIpLFxuICAgIGhoOiBgJHtob3VycyAlIDEyIHx8IDEyfWAucGFkU3RhcnQoMiwgXCIwXCIpLFxuICAgIG06IFN0cmluZyhtaW51dGVzKSxcbiAgICBtbTogYCR7bWludXRlc31gLnBhZFN0YXJ0KDIsIFwiMFwiKSxcbiAgICBzOiBTdHJpbmcoc2Vjb25kcyksXG4gICAgc3M6IGAke3NlY29uZHN9YC5wYWRTdGFydCgyLCBcIjBcIiksXG4gICAgU1NTOiBgJHttaWxsaXNlY29uZHN9YC5wYWRTdGFydCgzLCBcIjBcIiksXG4gICAgZDogZGF5XG4gIH07XG4gIHJldHVybiBmb3JtYXRTdHIucmVwbGFjZShSRUdFWF9GT1JNQVQsIChtYXRjaCwgJDEpID0+ICQxIHx8IG1hdGNoZXNbbWF0Y2hdKTtcbn07XG5jb25zdCBub3JtYWxpemVEYXRlID0gKGRhdGUpID0+IHtcbiAgaWYgKGRhdGUgPT09IG51bGwpXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIGlmIChkYXRlID09PSB2b2lkIDApXG4gICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSk7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiAmJiAhL1okL2kudGVzdChkYXRlKSkge1xuICAgIGNvbnN0IGQgPSBkYXRlLm1hdGNoKFJFR0VYX1BBUlNFKTtcbiAgICBpZiAoZCkge1xuICAgICAgY29uc3QgbSA9IGRbMl0gLSAxIHx8IDA7XG4gICAgICBjb25zdCBtcyA9IChkWzddIHx8IFwiMFwiKS5zdWJzdHJpbmcoMCwgMyk7XG4gICAgICByZXR1cm4gbmV3IERhdGUoZFsxXSwgbSwgZFszXSB8fCAxLCBkWzRdIHx8IDAsIGRbNV0gfHwgMCwgZFs2XSB8fCAwLCBtcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcbn07XG5mdW5jdGlvbiB1c2VEYXRlRm9ybWF0KGRhdGUsIGZvcm1hdFN0ciA9IFwiSEg6bW06c3NcIikge1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBmb3JtYXREYXRlKG5vcm1hbGl6ZURhdGUodnVlRGVtaS51bnJlZihkYXRlKSksIHZ1ZURlbWkudW5yZWYoZm9ybWF0U3RyKSkpO1xufVxuXG5mdW5jdGlvbiB1c2VJbnRlcnZhbEZuKGNiLCBpbnRlcnZhbCA9IDFlMywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpbW1lZGlhdGUgPSB0cnVlLFxuICAgIGltbWVkaWF0ZUNhbGxiYWNrID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGxldCB0aW1lciA9IG51bGw7XG4gIGNvbnN0IGlzQWN0aXZlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBmdW5jdGlvbiBjbGVhbigpIHtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IGZhbHNlO1xuICAgIGNsZWFuKCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKCkge1xuICAgIGlmICh2dWVEZW1pLnVucmVmKGludGVydmFsKSA8PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIGlzQWN0aXZlLnZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoaW1tZWRpYXRlQ2FsbGJhY2spXG4gICAgICBjYigpO1xuICAgIGNsZWFuKCk7XG4gICAgdGltZXIgPSBzZXRJbnRlcnZhbChjYiwgdnVlRGVtaS51bnJlZihpbnRlcnZhbCkpO1xuICB9XG4gIGlmIChpbW1lZGlhdGUgJiYgaXNDbGllbnQpXG4gICAgcmVzdW1lKCk7XG4gIGlmICh2dWVEZW1pLmlzUmVmKGludGVydmFsKSkge1xuICAgIGNvbnN0IHN0b3BXYXRjaCA9IHZ1ZURlbWkud2F0Y2goaW50ZXJ2YWwsICgpID0+IHtcbiAgICAgIGlmIChpc0FjdGl2ZS52YWx1ZSAmJiBpc0NsaWVudClcbiAgICAgICAgcmVzdW1lKCk7XG4gICAgfSk7XG4gICAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcFdhdGNoKTtcbiAgfVxuICB0cnlPblNjb3BlRGlzcG9zZShwYXVzZSk7XG4gIHJldHVybiB7XG4gICAgaXNBY3RpdmUsXG4gICAgcGF1c2UsXG4gICAgcmVzdW1lXG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkNiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDggPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ4ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kOCA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDYgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDYob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDYgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ4LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkOClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkOChiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ4LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ2KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlSW50ZXJ2YWwoaW50ZXJ2YWwgPSAxZTMsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY29udHJvbHM6IGV4cG9zZUNvbnRyb2xzID0gZmFsc2UsXG4gICAgaW1tZWRpYXRlID0gdHJ1ZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY291bnRlciA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBjb250cm9scyA9IHVzZUludGVydmFsRm4oKCkgPT4gY291bnRlci52YWx1ZSArPSAxLCBpbnRlcnZhbCwgeyBpbW1lZGlhdGUgfSk7XG4gIGlmIChleHBvc2VDb250cm9scykge1xuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyQ2KHtcbiAgICAgIGNvdW50ZXJcbiAgICB9LCBjb250cm9scyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTGFzdENoYW5nZWQoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgdmFyIF9hO1xuICBjb25zdCBtcyA9IHZ1ZURlbWkucmVmKChfYSA9IG9wdGlvbnMuaW5pdGlhbFZhbHVlKSAhPSBudWxsID8gX2EgOiBudWxsKTtcbiAgdnVlRGVtaS53YXRjaChzb3VyY2UsICgpID0+IG1zLnZhbHVlID0gdGltZXN0YW1wKCksIG9wdGlvbnMpO1xuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIHVzZVRpbWVvdXRGbihjYiwgaW50ZXJ2YWwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW1tZWRpYXRlID0gdHJ1ZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNQZW5kaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBsZXQgdGltZXIgPSBudWxsO1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgaXNQZW5kaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgY2xlYXIoKTtcbiAgfVxuICBmdW5jdGlvbiBzdGFydCguLi5hcmdzKSB7XG4gICAgY2xlYXIoKTtcbiAgICBpc1BlbmRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpc1BlbmRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIGNiKC4uLmFyZ3MpO1xuICAgIH0sIHZ1ZURlbWkudW5yZWYoaW50ZXJ2YWwpKTtcbiAgfVxuICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgaXNQZW5kaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoaXNDbGllbnQpXG4gICAgICBzdGFydCgpO1xuICB9XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4ge1xuICAgIGlzUGVuZGluZyxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkNSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDcgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ3ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kNyA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDUgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDUob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDUgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ3LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkNylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ3LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ1KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlVGltZW91dChpbnRlcnZhbCA9IDFlMywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250cm9sczogZXhwb3NlQ29udHJvbHMgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY29udHJvbHMgPSB1c2VUaW1lb3V0Rm4obm9vcCwgaW50ZXJ2YWwsIG9wdGlvbnMpO1xuICBjb25zdCByZWFkeSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gIWNvbnRyb2xzLmlzUGVuZGluZy52YWx1ZSk7XG4gIGlmIChleHBvc2VDb250cm9scykge1xuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyQ1KHtcbiAgICAgIHJlYWR5XG4gICAgfSwgY29udHJvbHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZWFkeTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlID0gZmFsc2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdHJ1dGh5VmFsdWUgPSB0cnVlLFxuICAgIGZhbHN5VmFsdWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgdmFsdWVJc1JlZiA9IHZ1ZURlbWkuaXNSZWYoaW5pdGlhbFZhbHVlKTtcbiAgY29uc3QgaW5uZXJWYWx1ZSA9IHZ1ZURlbWkucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGZ1bmN0aW9uIHRvZ2dsZSh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBpbm5lclZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICByZXR1cm4gaW5uZXJWYWx1ZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXJWYWx1ZS52YWx1ZSA9IGlubmVyVmFsdWUudmFsdWUgPT09IHZ1ZURlbWkudW5yZWYodHJ1dGh5VmFsdWUpID8gdnVlRGVtaS51bnJlZihmYWxzeVZhbHVlKSA6IHZ1ZURlbWkudW5yZWYodHJ1dGh5VmFsdWUpO1xuICAgICAgcmV0dXJuIGlubmVyVmFsdWUudmFsdWU7XG4gICAgfVxuICB9XG4gIGlmICh2YWx1ZUlzUmVmKVxuICAgIHJldHVybiB0b2dnbGU7XG4gIGVsc2VcbiAgICByZXR1cm4gW2lubmVyVmFsdWUsIHRvZ2dsZV07XG59XG5cbmZ1bmN0aW9uIHdhdGNoQXJyYXkoc291cmNlLCBjYiwgb3B0aW9ucykge1xuICBsZXQgb2xkTGlzdCA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmltbWVkaWF0ZSkgPyBbXSA6IFtcbiAgICAuLi5zb3VyY2UgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHNvdXJjZSgpIDogQXJyYXkuaXNBcnJheShzb3VyY2UpID8gc291cmNlIDogdnVlRGVtaS51bnJlZihzb3VyY2UpXG4gIF07XG4gIHJldHVybiB2dWVEZW1pLndhdGNoKHNvdXJjZSwgKG5ld0xpc3QsIF8sIG9uQ2xlYW51cCkgPT4ge1xuICAgIGNvbnN0IG9sZExpc3RSZW1haW5zID0gbmV3IEFycmF5KG9sZExpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBhZGRlZCA9IFtdO1xuICAgIGZvciAoY29uc3Qgb2JqIG9mIG5ld0xpc3QpIHtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghb2xkTGlzdFJlbWFpbnNbaV0gJiYgb2JqID09PSBvbGRMaXN0W2ldKSB7XG4gICAgICAgICAgb2xkTGlzdFJlbWFpbnNbaV0gPSB0cnVlO1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZClcbiAgICAgICAgYWRkZWQucHVzaChvYmopO1xuICAgIH1cbiAgICBjb25zdCByZW1vdmVkID0gb2xkTGlzdC5maWx0ZXIoKF8yLCBpKSA9PiAhb2xkTGlzdFJlbWFpbnNbaV0pO1xuICAgIGNiKG5ld0xpc3QsIG9sZExpc3QsIGFkZGVkLCByZW1vdmVkLCBvbkNsZWFudXApO1xuICAgIG9sZExpc3QgPSBbLi4ubmV3TGlzdF07XG4gIH0sIG9wdGlvbnMpO1xufVxuXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ2ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkNiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDYgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fb2JqUmVzdCQ1ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkNi5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkNilcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNihzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kNi5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hXaXRoRmlsdGVyKHNvdXJjZSwgY2IsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHtcbiAgICBldmVudEZpbHRlciA9IGJ5cGFzc0ZpbHRlclxuICB9ID0gX2EsIHdhdGNoT3B0aW9ucyA9IF9fb2JqUmVzdCQ1KF9hLCBbXG4gICAgXCJldmVudEZpbHRlclwiXG4gIF0pO1xuICByZXR1cm4gdnVlRGVtaS53YXRjaChzb3VyY2UsIGNyZWF0ZUZpbHRlcldyYXBwZXIoZXZlbnRGaWx0ZXIsIGNiKSwgd2F0Y2hPcHRpb25zKTtcbn1cblxudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ1ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX29ialJlc3QkNCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDUuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzJDUpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDUoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtJDUuY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIHdhdGNoQXRNb3N0KHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7XG4gICAgY291bnRcbiAgfSA9IF9hLCB3YXRjaE9wdGlvbnMgPSBfX29ialJlc3QkNChfYSwgW1xuICAgIFwiY291bnRcIlxuICBdKTtcbiAgY29uc3QgY3VycmVudCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBzdG9wID0gd2F0Y2hXaXRoRmlsdGVyKHNvdXJjZSwgKC4uLmFyZ3MpID0+IHtcbiAgICBjdXJyZW50LnZhbHVlICs9IDE7XG4gICAgaWYgKGN1cnJlbnQudmFsdWUgPj0gdnVlRGVtaS51bnJlZihjb3VudCkpXG4gICAgICB2dWVEZW1pLm5leHRUaWNrKCgpID0+IHN0b3AoKSk7XG4gICAgY2IoLi4uYXJncyk7XG4gIH0sIHdhdGNoT3B0aW9ucyk7XG4gIHJldHVybiB7IGNvdW50OiBjdXJyZW50LCBzdG9wIH07XG59XG5cbnZhciBfX2RlZlByb3AkNCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDQgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ0ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkNCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDQgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ0ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ0KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ0ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkNC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDQoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDQpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDQoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kNC5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkNChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDQgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ0KGEsIF9fZ2V0T3duUHJvcERlc2NzJDQoYikpO1xudmFyIF9fb2JqUmVzdCQzID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkNC5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkNClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNChzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kNC5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hEZWJvdW5jZWQoc291cmNlLCBjYiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywge1xuICAgIGRlYm91bmNlID0gMCxcbiAgICBtYXhXYWl0ID0gdm9pZCAwXG4gIH0gPSBfYSwgd2F0Y2hPcHRpb25zID0gX19vYmpSZXN0JDMoX2EsIFtcbiAgICBcImRlYm91bmNlXCIsXG4gICAgXCJtYXhXYWl0XCJcbiAgXSk7XG4gIHJldHVybiB3YXRjaFdpdGhGaWx0ZXIoc291cmNlLCBjYiwgX19zcHJlYWRQcm9wcyQ0KF9fc3ByZWFkVmFsdWVzJDQoe30sIHdhdGNoT3B0aW9ucyksIHtcbiAgICBldmVudEZpbHRlcjogZGVib3VuY2VGaWx0ZXIoZGVib3VuY2UsIHsgbWF4V2FpdCB9KVxuICB9KSk7XG59XG5cbnZhciBfX2RlZlByb3AkMyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkMyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDMgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQzID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQzKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkMy5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDMoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kMy5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkMyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDMgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQzKGEsIF9fZ2V0T3duUHJvcERlc2NzJDMoYikpO1xudmFyIF9fb2JqUmVzdCQyID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkMy5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkMylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMyhzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kMy5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hJZ25vcmFibGUoc291cmNlLCBjYiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywge1xuICAgIGV2ZW50RmlsdGVyID0gYnlwYXNzRmlsdGVyXG4gIH0gPSBfYSwgd2F0Y2hPcHRpb25zID0gX19vYmpSZXN0JDIoX2EsIFtcbiAgICBcImV2ZW50RmlsdGVyXCJcbiAgXSk7XG4gIGNvbnN0IGZpbHRlcmVkQ2IgPSBjcmVhdGVGaWx0ZXJXcmFwcGVyKGV2ZW50RmlsdGVyLCBjYik7XG4gIGxldCBpZ25vcmVVcGRhdGVzO1xuICBsZXQgaWdub3JlUHJldkFzeW5jVXBkYXRlcztcbiAgbGV0IHN0b3A7XG4gIGlmICh3YXRjaE9wdGlvbnMuZmx1c2ggPT09IFwic3luY1wiKSB7XG4gICAgY29uc3QgaWdub3JlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICAgIGlnbm9yZVByZXZBc3luY1VwZGF0ZXMgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBpZ25vcmVVcGRhdGVzID0gKHVwZGF0ZXIpID0+IHtcbiAgICAgIGlnbm9yZS52YWx1ZSA9IHRydWU7XG4gICAgICB1cGRhdGVyKCk7XG4gICAgICBpZ25vcmUudmFsdWUgPSBmYWxzZTtcbiAgICB9O1xuICAgIHN0b3AgPSB2dWVEZW1pLndhdGNoKHNvdXJjZSwgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmICghaWdub3JlLnZhbHVlKVxuICAgICAgICBmaWx0ZXJlZENiKC4uLmFyZ3MpO1xuICAgIH0sIHdhdGNoT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXMgPSBbXTtcbiAgICBjb25zdCBpZ25vcmVDb3VudGVyID0gdnVlRGVtaS5yZWYoMCk7XG4gICAgY29uc3Qgc3luY0NvdW50ZXIgPSB2dWVEZW1pLnJlZigwKTtcbiAgICBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzID0gKCkgPT4ge1xuICAgICAgaWdub3JlQ291bnRlci52YWx1ZSA9IHN5bmNDb3VudGVyLnZhbHVlO1xuICAgIH07XG4gICAgZGlzcG9zYWJsZXMucHVzaCh2dWVEZW1pLndhdGNoKHNvdXJjZSwgKCkgPT4ge1xuICAgICAgc3luY0NvdW50ZXIudmFsdWUrKztcbiAgICB9LCBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkMyh7fSwgd2F0Y2hPcHRpb25zKSwgeyBmbHVzaDogXCJzeW5jXCIgfSkpKTtcbiAgICBpZ25vcmVVcGRhdGVzID0gKHVwZGF0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNDb3VudGVyUHJldiA9IHN5bmNDb3VudGVyLnZhbHVlO1xuICAgICAgdXBkYXRlcigpO1xuICAgICAgaWdub3JlQ291bnRlci52YWx1ZSArPSBzeW5jQ291bnRlci52YWx1ZSAtIHN5bmNDb3VudGVyUHJldjtcbiAgICB9O1xuICAgIGRpc3Bvc2FibGVzLnB1c2godnVlRGVtaS53YXRjaChzb3VyY2UsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmUgPSBpZ25vcmVDb3VudGVyLnZhbHVlID4gMCAmJiBpZ25vcmVDb3VudGVyLnZhbHVlID09PSBzeW5jQ291bnRlci52YWx1ZTtcbiAgICAgIGlnbm9yZUNvdW50ZXIudmFsdWUgPSAwO1xuICAgICAgc3luY0NvdW50ZXIudmFsdWUgPSAwO1xuICAgICAgaWYgKGlnbm9yZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZmlsdGVyZWRDYiguLi5hcmdzKTtcbiAgICB9LCB3YXRjaE9wdGlvbnMpKTtcbiAgICBzdG9wID0gKCkgPT4ge1xuICAgICAgZGlzcG9zYWJsZXMuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHsgc3RvcCwgaWdub3JlVXBkYXRlcywgaWdub3JlUHJldkFzeW5jVXBkYXRlcyB9O1xufVxuXG5mdW5jdGlvbiB3YXRjaE9uY2Uoc291cmNlLCBjYiwgb3B0aW9ucykge1xuICBjb25zdCBzdG9wID0gdnVlRGVtaS53YXRjaChzb3VyY2UsICguLi5hcmdzKSA9PiB7XG4gICAgdnVlRGVtaS5uZXh0VGljaygoKSA9PiBzdG9wKCkpO1xuICAgIHJldHVybiBjYiguLi5hcmdzKTtcbiAgfSwgb3B0aW9ucyk7XG59XG5cbnZhciBfX2RlZlByb3AkMiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDIgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQyID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDIgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQyID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQyKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQyID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkMi5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDIoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDIpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDIoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kMi5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkMihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDIgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQyKGEsIF9fZ2V0T3duUHJvcERlc2NzJDIoYikpO1xudmFyIF9fb2JqUmVzdCQxID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkMi5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkMilcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMihzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kMi5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hQYXVzYWJsZShzb3VyY2UsIGNiLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7XG4gICAgZXZlbnRGaWx0ZXI6IGZpbHRlclxuICB9ID0gX2EsIHdhdGNoT3B0aW9ucyA9IF9fb2JqUmVzdCQxKF9hLCBbXG4gICAgXCJldmVudEZpbHRlclwiXG4gIF0pO1xuICBjb25zdCB7IGV2ZW50RmlsdGVyLCBwYXVzZSwgcmVzdW1lLCBpc0FjdGl2ZSB9ID0gcGF1c2FibGVGaWx0ZXIoZmlsdGVyKTtcbiAgY29uc3Qgc3RvcCA9IHdhdGNoV2l0aEZpbHRlcihzb3VyY2UsIGNiLCBfX3NwcmVhZFByb3BzJDIoX19zcHJlYWRWYWx1ZXMkMih7fSwgd2F0Y2hPcHRpb25zKSwge1xuICAgIGV2ZW50RmlsdGVyXG4gIH0pKTtcbiAgcmV0dXJuIHsgc3RvcCwgcGF1c2UsIHJlc3VtZSwgaXNBY3RpdmUgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQxID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kMSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDEgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDEob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDEgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQxLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkMShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkMSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQxLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQxKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMSA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDEoYSwgX19nZXRPd25Qcm9wRGVzY3MkMShiKSk7XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkMS5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkMSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMShzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kMS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hUaHJvdHRsZWQoc291cmNlLCBjYiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywge1xuICAgIHRocm90dGxlID0gMCxcbiAgICB0cmFpbGluZyA9IHRydWUsXG4gICAgbGVhZGluZyA9IHRydWVcbiAgfSA9IF9hLCB3YXRjaE9wdGlvbnMgPSBfX29ialJlc3QoX2EsIFtcbiAgICBcInRocm90dGxlXCIsXG4gICAgXCJ0cmFpbGluZ1wiLFxuICAgIFwibGVhZGluZ1wiXG4gIF0pO1xuICByZXR1cm4gd2F0Y2hXaXRoRmlsdGVyKHNvdXJjZSwgY2IsIF9fc3ByZWFkUHJvcHMkMShfX3NwcmVhZFZhbHVlcyQxKHt9LCB3YXRjaE9wdGlvbnMpLCB7XG4gICAgZXZlbnRGaWx0ZXI6IHRocm90dGxlRmlsdGVyKHRocm90dGxlLCB0cmFpbGluZywgbGVhZGluZylcbiAgfSkpO1xufVxuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyA9IChhLCBiKSA9PiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTtcbmZ1bmN0aW9uIHdhdGNoVHJpZ2dlcmFibGUoc291cmNlLCBjYiwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBjbGVhbnVwRm47XG4gIGZ1bmN0aW9uIG9uRWZmZWN0KCkge1xuICAgIGlmICghY2xlYW51cEZuKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGZuID0gY2xlYW51cEZuO1xuICAgIGNsZWFudXBGbiA9IHZvaWQgMDtcbiAgICBmbigpO1xuICB9XG4gIGZ1bmN0aW9uIG9uQ2xlYW51cChjYWxsYmFjaykge1xuICAgIGNsZWFudXBGbiA9IGNhbGxiYWNrO1xuICB9XG4gIGNvbnN0IF9jYiA9ICh2YWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICBvbkVmZmVjdCgpO1xuICAgIHJldHVybiBjYih2YWx1ZSwgb2xkVmFsdWUsIG9uQ2xlYW51cCk7XG4gIH07XG4gIGNvbnN0IHJlcyA9IHdhdGNoSWdub3JhYmxlKHNvdXJjZSwgX2NiLCBvcHRpb25zKTtcbiAgY29uc3QgeyBpZ25vcmVVcGRhdGVzIH0gPSByZXM7XG4gIGNvbnN0IHRyaWdnZXIgPSAoKSA9PiB7XG4gICAgbGV0IHJlczI7XG4gICAgaWdub3JlVXBkYXRlcygoKSA9PiB7XG4gICAgICByZXMyID0gX2NiKGdldFdhdGNoU291cmNlcyhzb3VyY2UpLCBnZXRPbGRWYWx1ZShzb3VyY2UpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzMjtcbiAgfTtcbiAgcmV0dXJuIF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIHJlcyksIHtcbiAgICB0cmlnZ2VyXG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0V2F0Y2hTb3VyY2VzKHNvdXJjZXMpIHtcbiAgaWYgKHZ1ZURlbWkuaXNSZWFjdGl2ZShzb3VyY2VzKSlcbiAgICByZXR1cm4gc291cmNlcztcbiAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlcykpXG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChpdGVtKSA9PiBnZXRPbmVXYXRjaFNvdXJjZShpdGVtKSk7XG4gIHJldHVybiBnZXRPbmVXYXRjaFNvdXJjZShzb3VyY2VzKTtcbn1cbmZ1bmN0aW9uIGdldE9uZVdhdGNoU291cmNlKHNvdXJjZSkge1xuICByZXR1cm4gdHlwZW9mIHNvdXJjZSA9PT0gXCJmdW5jdGlvblwiID8gc291cmNlKCkgOiB2dWVEZW1pLnVucmVmKHNvdXJjZSk7XG59XG5mdW5jdGlvbiBnZXRPbGRWYWx1ZShzb3VyY2UpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlKSA/IHNvdXJjZS5tYXAoKCkgPT4gdm9pZCAwKSA6IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gd2hlbmV2ZXIoc291cmNlLCBjYiwgb3B0aW9ucykge1xuICByZXR1cm4gdnVlRGVtaS53YXRjaChzb3VyY2UsICh2LCBvdiwgb25JbnZhbGlkYXRlKSA9PiB7XG4gICAgaWYgKHYpXG4gICAgICBjYih2LCBvdiwgb25JbnZhbGlkYXRlKTtcbiAgfSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydHMuX19vbmx5VnVlMyA9IF9fb25seVZ1ZTM7XG5leHBvcnRzLmFuZCA9IGxvZ2ljQW5kO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvcnRzLmF1dG9SZXNldFJlZiA9IHJlZkF1dG9SZXNldDtcbmV4cG9ydHMuYnlwYXNzRmlsdGVyID0gYnlwYXNzRmlsdGVyO1xuZXhwb3J0cy5jbGFtcCA9IGNsYW1wO1xuZXhwb3J0cy5jb21wdXRlZEVhZ2VyID0gY29tcHV0ZWRFYWdlcjtcbmV4cG9ydHMuY29tcHV0ZWRXaXRoQ29udHJvbCA9IGNvbXB1dGVkV2l0aENvbnRyb2w7XG5leHBvcnRzLmNvbnRhaW5zUHJvcCA9IGNvbnRhaW5zUHJvcDtcbmV4cG9ydHMuY29udHJvbGxlZENvbXB1dGVkID0gY29tcHV0ZWRXaXRoQ29udHJvbDtcbmV4cG9ydHMuY29udHJvbGxlZFJlZiA9IGNvbnRyb2xsZWRSZWY7XG5leHBvcnRzLmNyZWF0ZUV2ZW50SG9vayA9IGNyZWF0ZUV2ZW50SG9vaztcbmV4cG9ydHMuY3JlYXRlRmlsdGVyV3JhcHBlciA9IGNyZWF0ZUZpbHRlcldyYXBwZXI7XG5leHBvcnRzLmNyZWF0ZUdsb2JhbFN0YXRlID0gY3JlYXRlR2xvYmFsU3RhdGU7XG5leHBvcnRzLmNyZWF0ZUluamVjdGlvblN0YXRlID0gY3JlYXRlSW5qZWN0aW9uU3RhdGU7XG5leHBvcnRzLmNyZWF0ZVJlYWN0aXZlRm4gPSByZWFjdGlmeTtcbmV4cG9ydHMuY3JlYXRlU2hhcmVkQ29tcG9zYWJsZSA9IGNyZWF0ZVNoYXJlZENvbXBvc2FibGU7XG5leHBvcnRzLmNyZWF0ZVNpbmdsZXRvblByb21pc2UgPSBjcmVhdGVTaW5nbGV0b25Qcm9taXNlO1xuZXhwb3J0cy5kZWJvdW5jZUZpbHRlciA9IGRlYm91bmNlRmlsdGVyO1xuZXhwb3J0cy5kZWJvdW5jZWRSZWYgPSByZWZEZWJvdW5jZWQ7XG5leHBvcnRzLmRlYm91bmNlZFdhdGNoID0gd2F0Y2hEZWJvdW5jZWQ7XG5leHBvcnRzLmRpcmVjdGl2ZUhvb2tzID0gZGlyZWN0aXZlSG9va3M7XG5leHBvcnRzLmVhZ2VyQ29tcHV0ZWQgPSBjb21wdXRlZEVhZ2VyO1xuZXhwb3J0cy5leHRlbmRSZWYgPSBleHRlbmRSZWY7XG5leHBvcnRzLmZvcm1hdERhdGUgPSBmb3JtYXREYXRlO1xuZXhwb3J0cy5nZXQgPSBnZXQ7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG5leHBvcnRzLmlnbm9yYWJsZVdhdGNoID0gd2F0Y2hJZ25vcmFibGU7XG5leHBvcnRzLmluY3JlYXNlV2l0aFVuaXQgPSBpbmNyZWFzZVdpdGhVbml0O1xuZXhwb3J0cy5pbnZva2UgPSBpbnZva2U7XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbmV4cG9ydHMuaXNDbGllbnQgPSBpc0NsaWVudDtcbmV4cG9ydHMuaXNEZWYgPSBpc0RlZjtcbmV4cG9ydHMuaXNEZWZpbmVkID0gaXNEZWZpbmVkO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNJT1MgPSBpc0lPUztcbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbmV4cG9ydHMuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmV4cG9ydHMubG9naWNBbmQgPSBsb2dpY0FuZDtcbmV4cG9ydHMubG9naWNOb3QgPSBsb2dpY05vdDtcbmV4cG9ydHMubG9naWNPciA9IGxvZ2ljT3I7XG5leHBvcnRzLm1ha2VEZXN0cnVjdHVyYWJsZSA9IG1ha2VEZXN0cnVjdHVyYWJsZTtcbmV4cG9ydHMubm9vcCA9IG5vb3A7XG5leHBvcnRzLm5vcm1hbGl6ZURhdGUgPSBub3JtYWxpemVEYXRlO1xuZXhwb3J0cy5ub3QgPSBsb2dpY05vdDtcbmV4cG9ydHMubm93ID0gbm93O1xuZXhwb3J0cy5vYmplY3RQaWNrID0gb2JqZWN0UGljaztcbmV4cG9ydHMub3IgPSBsb2dpY09yO1xuZXhwb3J0cy5wYXVzYWJsZUZpbHRlciA9IHBhdXNhYmxlRmlsdGVyO1xuZXhwb3J0cy5wYXVzYWJsZVdhdGNoID0gd2F0Y2hQYXVzYWJsZTtcbmV4cG9ydHMucHJvbWlzZVRpbWVvdXQgPSBwcm9taXNlVGltZW91dDtcbmV4cG9ydHMucmFuZCA9IHJhbmQ7XG5leHBvcnRzLnJlYWN0aWZ5ID0gcmVhY3RpZnk7XG5leHBvcnRzLnJlYWN0aWZ5T2JqZWN0ID0gcmVhY3RpZnlPYmplY3Q7XG5leHBvcnRzLnJlYWN0aXZlQ29tcHV0ZWQgPSByZWFjdGl2ZUNvbXB1dGVkO1xuZXhwb3J0cy5yZWFjdGl2ZU9taXQgPSByZWFjdGl2ZU9taXQ7XG5leHBvcnRzLnJlYWN0aXZlUGljayA9IHJlYWN0aXZlUGljaztcbmV4cG9ydHMucmVmQXV0b1Jlc2V0ID0gcmVmQXV0b1Jlc2V0O1xuZXhwb3J0cy5yZWZEZWJvdW5jZWQgPSByZWZEZWJvdW5jZWQ7XG5leHBvcnRzLnJlZkRlZmF1bHQgPSByZWZEZWZhdWx0O1xuZXhwb3J0cy5yZWZUaHJvdHRsZWQgPSByZWZUaHJvdHRsZWQ7XG5leHBvcnRzLnJlZldpdGhDb250cm9sID0gcmVmV2l0aENvbnRyb2w7XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZXhwb3J0cy5yZXNvbHZlVW5yZWYgPSByZXNvbHZlVW5yZWY7XG5leHBvcnRzLnNldCA9IHNldDtcbmV4cG9ydHMuc3luY1JlZiA9IHN5bmNSZWY7XG5leHBvcnRzLnN5bmNSZWZzID0gc3luY1JlZnM7XG5leHBvcnRzLnRocm90dGxlRmlsdGVyID0gdGhyb3R0bGVGaWx0ZXI7XG5leHBvcnRzLnRocm90dGxlZFJlZiA9IHJlZlRocm90dGxlZDtcbmV4cG9ydHMudGhyb3R0bGVkV2F0Y2ggPSB3YXRjaFRocm90dGxlZDtcbmV4cG9ydHMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuZXhwb3J0cy50b1JlYWN0aXZlID0gdG9SZWFjdGl2ZTtcbmV4cG9ydHMudG9SZWZzID0gdG9SZWZzO1xuZXhwb3J0cy50cnlPbkJlZm9yZU1vdW50ID0gdHJ5T25CZWZvcmVNb3VudDtcbmV4cG9ydHMudHJ5T25CZWZvcmVVbm1vdW50ID0gdHJ5T25CZWZvcmVVbm1vdW50O1xuZXhwb3J0cy50cnlPbk1vdW50ZWQgPSB0cnlPbk1vdW50ZWQ7XG5leHBvcnRzLnRyeU9uU2NvcGVEaXNwb3NlID0gdHJ5T25TY29wZURpc3Bvc2U7XG5leHBvcnRzLnRyeU9uVW5tb3VudGVkID0gdHJ5T25Vbm1vdW50ZWQ7XG5leHBvcnRzLnVudGlsID0gdW50aWw7XG5leHBvcnRzLnVzZUNvdW50ZXIgPSB1c2VDb3VudGVyO1xuZXhwb3J0cy51c2VEYXRlRm9ybWF0ID0gdXNlRGF0ZUZvcm1hdDtcbmV4cG9ydHMudXNlRGVib3VuY2UgPSByZWZEZWJvdW5jZWQ7XG5leHBvcnRzLnVzZURlYm91bmNlRm4gPSB1c2VEZWJvdW5jZUZuO1xuZXhwb3J0cy51c2VJbnRlcnZhbCA9IHVzZUludGVydmFsO1xuZXhwb3J0cy51c2VJbnRlcnZhbEZuID0gdXNlSW50ZXJ2YWxGbjtcbmV4cG9ydHMudXNlTGFzdENoYW5nZWQgPSB1c2VMYXN0Q2hhbmdlZDtcbmV4cG9ydHMudXNlVGhyb3R0bGUgPSByZWZUaHJvdHRsZWQ7XG5leHBvcnRzLnVzZVRocm90dGxlRm4gPSB1c2VUaHJvdHRsZUZuO1xuZXhwb3J0cy51c2VUaW1lb3V0ID0gdXNlVGltZW91dDtcbmV4cG9ydHMudXNlVGltZW91dEZuID0gdXNlVGltZW91dEZuO1xuZXhwb3J0cy51c2VUb2dnbGUgPSB1c2VUb2dnbGU7XG5leHBvcnRzLndhdGNoQXJyYXkgPSB3YXRjaEFycmF5O1xuZXhwb3J0cy53YXRjaEF0TW9zdCA9IHdhdGNoQXRNb3N0O1xuZXhwb3J0cy53YXRjaERlYm91bmNlZCA9IHdhdGNoRGVib3VuY2VkO1xuZXhwb3J0cy53YXRjaElnbm9yYWJsZSA9IHdhdGNoSWdub3JhYmxlO1xuZXhwb3J0cy53YXRjaE9uY2UgPSB3YXRjaE9uY2U7XG5leHBvcnRzLndhdGNoUGF1c2FibGUgPSB3YXRjaFBhdXNhYmxlO1xuZXhwb3J0cy53YXRjaFRocm90dGxlZCA9IHdhdGNoVGhyb3R0bGVkO1xuZXhwb3J0cy53YXRjaFRyaWdnZXJhYmxlID0gd2F0Y2hUcmlnZ2VyYWJsZTtcbmV4cG9ydHMud2F0Y2hXaXRoRmlsdGVyID0gd2F0Y2hXaXRoRmlsdGVyO1xuZXhwb3J0cy53aGVuZXZlciA9IHdoZW5ldmVyO1xuIiwidmFyIFZ1ZSA9IHJlcXVpcmUoJ3Z1ZScpXG5cbk9iamVjdC5rZXlzKFZ1ZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgZXhwb3J0c1trZXldID0gVnVlW2tleV1cbn0pXG5cbmV4cG9ydHMuc2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBrZXksIHZhbCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSlcbiAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSwgdmFsKVxuICAgIHJldHVybiB2YWxcbiAgfVxuICB0YXJnZXRba2V5XSA9IHZhbFxuICByZXR1cm4gdmFsXG59XG5cbmV4cG9ydHMuZGVsID0gZnVuY3Rpb24odGFyZ2V0LCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKVxuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XVxufVxuXG5leHBvcnRzLlZ1ZSA9IFZ1ZVxuZXhwb3J0cy5WdWUyID0gdW5kZWZpbmVkXG5leHBvcnRzLmlzVnVlMiA9IGZhbHNlXG5leHBvcnRzLmlzVnVlMyA9IHRydWVcbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uKCl7fVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxRUFBcUUsc0RBQVM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw2Q0FBSTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxtREFBTSxHQUFHO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxREFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxREFBUTtBQUNqQjtBQUNBO0FBQ0EsYUFBYSxxREFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMscURBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHFEQUFRO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxREFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsUUFBUTtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQUssR0FBRztBQUN2QjtBQUNBLEtBQUssRUFBRTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsdUJBQXVCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxxREFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixJQUFxQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDZCQUE2QjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDBDQUEwQyxJQUFJO0FBQzlDLHlCQUF5QixJQUFJO0FBQzdCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxLQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QixnQ0FBZ0MsSUFBSSxJQUFJLDJEQUEyRCxFQUFFLHVCQUF1QixLQUFLLE9BQU87QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7QUFDQTtBQUNBLGVBQWUsMkNBQUU7QUFDakIsY0FBYywyQ0FBRTtBQUNoQixxQkFBcUIsMkNBQUU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxhQUFvQjtBQUNuQztBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1EQUFNLEdBQUc7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixLQUFxQztBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0RBQU87QUFDbkIsNEJBQTRCLGlCQUFpQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsb0RBQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQU07QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxLQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLEtBQXFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1Q0FBdUM7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxpREFBSTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUFDQTtBQUNBLEtBQUssSUFBcUM7QUFDMUMsSUFBSSwwREFBYTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLG1EQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsYUFBYTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDhNQUE4TTtBQUMxTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9EQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWcyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbnNQbitCO0FBQzNWO0FBQ3VQOztBQUV6UjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsS0FBSztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsUUFBUTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsY0FBYyxHQUFHLE9BQU87QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsc0JBQXNCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakIsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsMENBQUs7QUFDL0I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQLEtBQUssSUFBSSxlQUFlO0FBQ3hCOztBQUVBOztBQUVBO0FBQ0EsNERBQTRELFdBQVc7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUUsMENBQUs7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUsMENBQUs7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUksWUFBWTs7QUFFbkIsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFLDBDQUFLOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSwyQ0FBTTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtCQUFrQiw2Q0FBUTtBQUMxQjtBQUNBLEdBQUc7O0FBRUgsaUJBQWlCLDZDQUFRO0FBQ3pCO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsNkNBQVE7QUFDakM7QUFDQSxHQUFHOztBQUVILHlCQUF5Qiw2Q0FBUTtBQUNqQztBQUNBLEdBQUc7O0FBRUgsdUJBQXVCLDZDQUFRO0FBQy9CO0FBQ0EsR0FBRzs7QUFFSCxvQkFBb0IsNkNBQVE7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLG9CQUFvQiw2Q0FBUTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSCxvQkFBb0IsNkNBQVE7QUFDNUI7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUMsNkNBQVE7QUFDakQ7QUFDQSxHQUFHOztBQUVILHdDQUF3Qyw2Q0FBUTtBQUNoRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0NBQXdDLDZDQUFRO0FBQ2hEO0FBQ0E7QUFDQSxHQUFHOztBQUVILHFDQUFxQyw2Q0FBUTtBQUM3QztBQUNBLEdBQUc7O0FBRUgscUNBQXFDLDZDQUFRO0FBQzdDO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSSw2Q0FBUTtBQUNaO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLDZDQUFRO0FBQ1o7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUsMENBQUs7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSw2Q0FBUTtBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxXQUFXLEVBQUUsMkNBQU07O0FBRTdCLGdCQUFnQix1REFBa0I7O0FBRWxDOztBQUVBLGlCQUFpQix3Q0FBRzs7QUFFcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsdUJBQXVCLEVBQUUsMkNBQU07O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsc0JBQXNCLHdDQUFHO0FBQ3pCLGVBQWUsd0NBQUc7O0FBRWxCLG1CQUFtQix3Q0FBRzs7QUFFdEI7O0FBRUEsbUJBQW1CLDZDQUFRO0FBQzNCO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLDJDQUFNOztBQUVaLGdCQUFnQix1REFBa0I7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1QkFBdUIsNkNBQVE7QUFDL0I7QUFDQSxHQUFHOztBQUVIO0FBQ0Esc0JBQXNCLDZDQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBLElBQUksRUFBRSwyQ0FBTTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQiw2Q0FBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQSx1QkFBdUIsNkNBQVE7QUFDL0I7QUFDQSxHQUFHOztBQUVILG9CQUFvQiw2Q0FBUTtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSwyQ0FBTTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUJBQW1CLHdDQUFHOztBQUV0Qix5QkFBeUIsd0NBQUc7O0FBRTVCOztBQUVBLGtCQUFrQiw2Q0FBUTtBQUMxQjtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5QkFBeUI7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLDZDQUFRO0FBQ2Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSwwQ0FBSztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUcsSUFBSSxlQUFlOztBQUV0QixFQUFFLDBDQUFLO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxJQUFJLGlDQUFpQzs7QUFFeEM7O0FBRUEsRUFBRSw4Q0FBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGlFQUFpRSxFQUFFLDJDQUFNOztBQUVuRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQix3Q0FBRzs7QUFFbkI7O0FBRUEsbUJBQW1CLDZDQUFRO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUgsK0JBQStCLDZDQUFRO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVILG9CQUFvQiw2Q0FBUTtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVILDBCQUEwQiw2Q0FBUTtBQUNsQztBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLDhDQUFTO0FBQ1g7QUFDQTtBQUNBLG1EQUFtRCxTQUFTO0FBQzVEO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQyxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0EsaUJBQWlCLFdBQVc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGOztBQUVBLENBQUM7Ozs7Ozs7Ozs7QUNyVUQsQ0FBQztBQUNELEtBQUssSUFBMkI7QUFDaEM7QUFDQSxxQ0FBcUMsbUJBQU8sQ0FBQyxnREFBUSxHQUFHLG1CQUFPLENBQUMsNERBQWMsR0FBRyxtQkFBTyxDQUFDLDhDQUFPLEdBQUcsbUJBQU8sQ0FBQyxvREFBVSxHQUFHLG1CQUFPLENBQUMsOERBQWU7QUFDL0k7QUFDQSxNQUFNLEVBT0o7QUFDRixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLGNBQWM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLEtBQTBCOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxZQUFZOztBQUVyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUYsb0JBQW9COztBQUVwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLG1CQUFtQixpQ0FBaUM7QUFDcEQsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsU0FBUztBQUNuQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLElBQUk7QUFDdEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixJQUFJOztBQUVwQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsSUFBSTtBQUM5QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixVQUFVOztBQUVWO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLDBCQUEwQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUyw2QkFBNkI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxpQ0FBaUMsTUFBTTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZUFBZTs7QUFFZixTQUFTOztBQUVUO0FBQ0EsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxxQ0FBcUM7QUFDOUMsU0FBUztBQUNULEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVE7O0FBRVI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBOztBQUVBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLFNBQVMsU0FBUztBQUNsQjtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaURBQWlEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRCxXQUFXLDRDQUE0QztBQUN2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUEsRUFBRTs7OztBQUlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLFNBQVMsR0FBRztBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOzs7O0FBSUE7O0FBRUE7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBLGVBQWUsU0FBUztBQUN4QjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLDJCQUEyQix3QkFBd0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLDJDQUEyQztBQUMzQyxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5Q0FBeUMscUNBQXFDO0FBQzlFLHFDQUFxQyxzQ0FBc0M7QUFDM0UscUNBQXFDLHFDQUFxQztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDLHNDQUFzQztBQUN0QyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7QUFLQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixhQUFhO0FBQ3JDLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFNBQVM7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7OztBQUdBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLGdCQUFnQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUEsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxPQUFPO0FBQ2hCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSxzQkFBc0I7QUFDckM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxjQUFjOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVDQUF1QztBQUNsRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQXVEO0FBQy9FOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sK0NBQStDO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxlQUFlLG9DQUFvQztBQUNuRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLCtCQUErQjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDLE9BQU87QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLHFDQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLFVBQVUsOEJBQThCO0FBQ3hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLE9BQU87QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLFdBQVc7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxjQUFjLFdBQVc7QUFDeEUsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQSxzQkFBc0IsY0FBYyxzQkFBc0IsZ0JBQWdCO0FBQzFFLGdCQUFnQixXQUFXLFlBQVk7QUFDdkMsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDLGNBQWM7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4REFBOEQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxPQUFPOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLFNBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxTQUFTLE9BQU87QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0RBQWtELDBCQUEwQjtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQix1QkFBdUI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGOzs7QUFHQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixvQ0FBb0M7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxjQUFjOztBQUVkOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLE1BQU07QUFDTjs7QUFFQSxZQUFZO0FBQ1osSUFBSTtBQUNKO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLHFEQUFxRDtBQUNyRDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVO0FBQ1Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjtBQUNqQixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQSxzQkFBc0I7QUFDdEIsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkMsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEMsY0FBYyx1Q0FBdUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7Ozs7QUFLRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7Ozs7O0FBS0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7O0FBRUY7QUFDQSxlQUFlLHFEQUFxRDtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBLGVBQWUsa0NBQWtDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNILEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7OztBQUtGOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUssSUFBMEM7QUFDL0MsQ0FBQyxpQ0FBa0IsRUFBRSxtQ0FBRTtBQUN2QjtBQUNBLEVBQUU7QUFBQSxrR0FBRTtBQUNKOzs7OztBQUtBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQSxFQUFFOzs7Ozs7Ozs7OztBQzVwVkY7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDakZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0S0Q7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUNqRUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2pFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNU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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDN0REO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzNJRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUNqSUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLElBQUk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0SUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxT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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3pGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RGRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN4RkQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDcEdEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsZ0NBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0IsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDcEhEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM5RUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDMUVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM5RUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzlFRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUMxRUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzlFRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDOUVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM5RUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM5RUQ7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3RIRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3hIRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3hIRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3hIRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN4RkQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUMzRUQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUMzSEQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN0SUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUNwRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ25FRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2hGRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQyw0QkFBNEI7O0FBRTdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2xMRDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxT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QyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDOUVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNk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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3BIRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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NEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ2pMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUM1RkQ7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsNEJBQTRCOztBQUU3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUM7Ozs7Ozs7Ozs7O0FDaEVEO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQzdERDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDRCQUE0Qjs7QUFFN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLFNBQVM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IseUJBQXlCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsWUFBWTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUk7QUFDeEI7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3R0FBd0csSUFBSSx3QkFBd0IsSUFBSSx1REFBdUQsSUFBSTtBQUNuTSxxRUFBcUUsSUFBSTtBQUN6RSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLFlBQVk7QUFDdkQ7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFlBQVk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLElBQUk7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0NBQWtDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHFCQUFxQixFQUFFO0FBQ3ZCLDBCQUEwQixFQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCLHdCQUF3QixJQUFJO0FBQzVCLDZCQUE2QixJQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU0sd0VBQXdFLE1BQU0sbUJBQW1CLE1BQU0scUJBQXFCLE1BQU0sRUFBRSxJQUFJO0FBQ2pLOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7QUFDcEIsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQWE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLCtCQUErQjtBQUNuRDtBQUNBOztBQUVBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtQ0FBbUMsaUJBQWlCO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxzQkFBc0I7QUFDMUQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msc0JBQXNCO0FBQzFEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUIsbUJBQW1CO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixtQkFBbUI7QUFDekM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDOzs7Ozs7Ozs7OztBQ3BqTEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7Ozs7Ozs7Ozs7O0FDdkw3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxNQUFNLElBQTBDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBTyxDQUFDLHlFQUFRLENBQUMsb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxrR0FBQztBQUMvQixJQUFJLEtBQUssRUFxQk47QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxlQUFlO0FBQ3RCLFdBQVcsV0FBVyxPQUFPO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkI7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QyxPQUFPO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxPQUFPO0FBQ3REOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLDBDQUEwQztBQUMxQztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsdUZBQXVGO0FBQ3ZGO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELHlCQUF5QixxQkFBcUI7QUFDOUM7QUFDQSxDQUFDO0FBQ0QsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQix5QkFBeUI7QUFDN0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDZCQUE2QjtBQUNqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsU0FBUztBQUNyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGlCQUFpQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQSxvQ0FBb0M7QUFDcEMsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IseUJBQXlCO0FBQzdDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxzQkFBc0IsMEJBQTBCO0FBQ2hEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQyxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVixrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw2QkFBNkI7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0IsaUJBQWlCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQix3QkFBd0I7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQixzQkFBc0I7QUFDNUM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7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RUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLEdBQUcsUUFBUTs7QUFFdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsb0JBQW9CLDZCQUE2QjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsZ0NBQWdDO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEMsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1YsMkNBQTJDOztBQUUzQztBQUNBLFVBQVU7QUFDViwyQ0FBMkM7O0FBRTNDO0FBQ0EsVUFBVTtBQUNWLDZDQUE2Qzs7QUFFN0M7QUFDQSxVQUFVO0FBQ1YseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7QUFDaEMsTUFBTTtBQUNOLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsaUNBQWlDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QixxQkFBcUI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQSxTQUFTOztBQUVUO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaGtNaUY7QUFDbEYsWUFBb1A7O0FBRXBQOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSw2RkFBRyxDQUFDLHVOQUFPOzs7O0FBSXhCLGlFQUFlLDhOQUFjLE1BQU07Ozs7Ozs7Ozs7O0FDWnRCOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQix3QkFBd0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsS0FBd0MsR0FBRyxzQkFBaUIsR0FBRyxDQUFJOztBQUVuRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxxRUFBcUUscUJBQXFCLGNBQWM7O0FBRXhHOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQsSUFBSTs7QUFFSjs7O0FBR0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLDZCQUE2QjtBQUNsRDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1UW1FOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxxQkFBcUIsNkNBQVEsK0RBQStEO0FBQzVGLHNCQUFzQiw2Q0FBUSxPQUFPLCtFQUFRLEdBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDaEYsMEJBQTBCLDZDQUFRO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHVCQUF1Qiw2Q0FBUTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUyw4Q0FBUyxJQUFJLGdEQUFXLFFBQVEsK0NBQVU7QUFDbkQ7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsS0FBSztBQUNOLG1EQUFtRCxzQkFBc0I7QUFDekU7O0FBRUEsaUVBQWUsU0FBUyxFQUFDOzs7Ozs7Ozs7Ozs7QUN0RFo7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWK0M7QUFDdUM7QUFDckQ7QUFDVztBQUM0Qjs7QUFFeEU7QUFDQTtBQUNBLFFBQVEscUVBQW1CO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLElBQXFDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxREFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsS0FBcUMsS0FBSyxzREFBSTtBQUMzRCxtQkFBbUIsNkNBQUk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFxQztBQUNsRCxZQUFZLHNEQUFJLDRDQUE0QyxTQUFTO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1EQUFNO0FBQ3ZCO0FBQ0Esa0JBQWtCLEtBQXFDLGNBQWMsQ0FBUztBQUM5RSxpQkFBaUIsS0FBcUMsNEJBQTRCLENBQUk7QUFDdEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTyxFQUFFLDBEQUFPO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxZQUFZO0FBQ3pEO0FBQ0EsWUFBWSw4REFBaUI7QUFDN0IsUUFBUSxzREFBSSxnQkFBZ0IsUUFBUSxJQUFJLFVBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyw2Q0FBVTtBQUN4RDtBQUNBO0FBQ0E7QUFDQSx5RUFBdUI7O0FBRWlCOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3RFNkc7O0FBRXJKO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLG9EQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EscUJBQXFCLDZDQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsbUNBQW1DLGVBQWU7QUFDbEQsNkJBQTZCLHdDQUFHO0FBQ2hDLHlCQUF5Qix3Q0FBRztBQUM1Qiw4QkFBOEIsd0NBQUc7QUFDakMsbUJBQW1CLDZDQUFRO0FBQzNCLGdDQUFnQyw2Q0FBUTtBQUN4QywwQkFBMEIsNkNBQVE7QUFDbEMscUJBQXFCLDZDQUFRO0FBQzdCLCtCQUErQiw2Q0FBUTtBQUN2Qyx3QkFBd0IsNkNBQVE7QUFDaEMsZ0NBQWdDLDZDQUFRO0FBQ3hDLHdCQUF3Qiw2Q0FBUTtBQUNoQyx5QkFBeUIsNkNBQVE7QUFDakMsOEJBQThCLDZDQUFRO0FBQ3RDLDJCQUEyQiw2Q0FBUTtBQUNuQyxpQkFBaUIsZUFBZTtBQUNoQyxnQkFBZ0IsZUFBZTtBQUMvQixLQUFLO0FBQ0wsMEJBQTBCLDZDQUFRO0FBQ2xDLGlCQUFpQixlQUFlO0FBQ2hDLGdCQUFnQixlQUFlO0FBQy9CLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQSx1Q0FBdUMsbUJBQW1CLEtBQUssaUJBQWlCO0FBQ2hGLEtBQUs7QUFDTCx3QkFBd0IsNkNBQVE7QUFDaEMsaUJBQWlCLGVBQWU7QUFDaEMsZ0JBQWdCLGVBQWU7QUFDL0Isc0JBQXNCLHVCQUF1QjtBQUM3QyxLQUFLO0FBQ0wsNkJBQTZCLDZDQUFRO0FBQ3JDLGdCQUFnQiwwQkFBMEI7QUFDMUMsS0FBSztBQUNMLElBQUksMENBQUs7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsOENBQVMsSUFBSSx1REFBa0I7QUFDeEM7QUFDQSxXQUFXLG1EQUFjO0FBQ3pCLEdBQUcsR0FBRyx1REFBa0I7QUFDeEI7QUFDQSxXQUFXLG1EQUFjO0FBQ3pCLEdBQUcsR0FBRywrQ0FBVSxnQ0FBZ0MsOENBQVMsSUFBSSx1REFBa0I7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEdBQUcsdURBQWtCLGdCQUFnQix1REFBa0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHLHVEQUFrQjtBQUN4QjtBQUNBO0FBQ0EsR0FBRyx3QkFBd0IsdURBQWtCO0FBQzdDO0FBQ0E7QUFDQSxHQUFHLDJDQUEyQyx1REFBa0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbURBQWM7QUFDekIsR0FBRyx5QkFBeUIsdURBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbURBQWM7QUFDekIsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLGtEQUFrRCx5QkFBeUIsR0FBRyxnQ0FBZ0MseUJBQXlCLGFBQWEsZUFBZSxnQkFBZ0IsY0FBYyx5QkFBeUIscUJBQXFCLG9CQUFvQiw2QkFBNkIsMEJBQTBCLDhCQUE4QixHQUFHO0FBQzNWOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLEtBQUs7QUFDTixtREFBbUQsc0JBQXNCO0FBQ3pFOztBQUVnQzs7Ozs7Ozs7Ozs7QUNqVGhDLGVBQWUsS0FBaUQsb0JBQW9CLENBQTZILENBQUMsa0JBQWtCLG1CQUFtQixTQUFTLGNBQWMsNEJBQTRCLFlBQVkscUJBQXFCLDJEQUEyRCx1Q0FBdUMscUNBQXFDLG9CQUFvQixFQUFFLGlCQUFpQiw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxFQUFFLG1CQUFtQiw4QkFBOEIscURBQXFELDBCQUEwQiw2Q0FBNkMsc0JBQXNCLDZEQUE2RCxZQUFZLGVBQWUsU0FBUyxpQkFBaUIsaUNBQWlDLGlCQUFpQixZQUFZLFVBQVUsc0JBQXNCLG1CQUFtQixpREFBaUQsaUJBQWlCLGtCQUFrQixhQUFhLGtCQUFrQix5Q0FBeUMsa0RBQWtELFdBQVcsY0FBYyxpRkFBaUYsZ0JBQWdCLGFBQWEsb0dBQW9HLEtBQUssTUFBTSxPQUFPLGtCQUFrQiw0Q0FBNEMsY0FBYyxPQUFPLDZFQUE2RSwyQ0FBMkMscUdBQXFHLGdEQUFnRCwrQkFBK0Isb0ZBQW9GLGtMQUFrTCxjQUFjLDhDQUE4QyxrRkFBa0YsR0FBRyxJQUFJLHNCQUFzQixnREFBZ0QsbUNBQW1DLG1DQUFtQyx5Q0FBeUMsK0ZBQStGLGlDQUFpQyxnRkFBZ0Ysa0JBQWtCLG1CQUFtQixpRkFBaUYsc0JBQXNCLGtCQUFrQixJQUFJLG9DQUFvQyxpQkFBaUIsMkNBQTJDLDJEQUEyRCxPQUFPLGtCQUFrQiwyQkFBMkIsYUFBYSwyRkFBMkYsWUFBWSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBdnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDOEM7QUFDVTs7QUFFeEQ7O0FBRUE7QUFDQTs7QUFFQSxTQUFTLDJDQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsNEJBQTRCO0FBQ25FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsMkJBQTJCO0FBQ3ZFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0QkFBNEI7QUFDckQ7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSCxpQkFBaUIsNkNBQVE7QUFDekI7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrREFBa0QsYUFBb0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsSUFBcUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsS0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsS0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsd0JBQXdCO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsNkJBQTZCO0FBQ3hEO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLFNBQVMsSUFBcUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLDBDQUFLLGVBQWUsMkJBQTJCO0FBQ2pELFNBQVMsSUFBcUM7QUFDOUM7QUFDQTtBQUNBLEdBQUcsSUFBSSwyQkFBMkI7QUFDbEM7O0FBRUE7QUFDQSw2Q0FBNkMsb0JBQW9CO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPLElBQXFDO0FBQzVDO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRSxzRUFBbUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLEdBQUc7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsbURBQW1EO0FBQzlELFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0Esb0NBQW9DLG1CQUFtQjtBQUN2RCxLQUFLLElBQUk7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsK0NBQStDLHNCQUFzQjtBQUNyRSxNQUFNO0FBQ04sMkNBQTJDLHNCQUFzQjtBQUNqRTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0Esb0RBQW9ELFdBQVc7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLGNBQWM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU8sSUFBcUM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLElBQXFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU8sSUFBcUM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxJQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIscUNBQXFDO0FBQ2xFO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkI7QUFDN0IseUVBQXlFO0FBQ3pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxJQUFxQztBQUM1QztBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsMEJBQTBCO0FBQ2hFOztBQUVBLDJCQUEyQixTQUFTOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sS0FBcUMsS0FBSyxDQUFxQjs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyxJQUFxQztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsU0FBUyxJQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSw4QkFBOEIsdUNBQXVDOztBQUVyRTtBQUNBLEtBQUssS0FBcUM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUyxJQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isb0JBQW9CO0FBQ25ELGdDQUFnQyw0Q0FBNEM7QUFDNUUsSUFBSTtBQUNKLFNBQVMsSUFBcUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQsMEJBQTBCO0FBQzNFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1CQUFtQjtBQUN0RCxvQ0FBb0MsMkNBQTJDO0FBQy9FLFFBQVE7QUFDUixhQUFhLElBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1DQUFtQyxtQkFBbUI7QUFDdEQsb0NBQW9DLGtEQUFrRDtBQUN0RixRQUFRO0FBQ1IsYUFBYSxJQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsYUFBYTtBQUN2RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTyxJQUFxQztBQUM1QztBQUNBO0FBQ0EsU0FBUywwQ0FBSyxlQUFlLGtEQUFrRCxzQkFBc0I7QUFDckc7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQyxPQUFPLElBQXFDO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQyxPQUFPLElBQXFDO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQzs7QUFFbEMsT0FBTyxJQUFxQztBQUM1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPLEtBQXFDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGNBQWM7QUFDekIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU8sS0FBcUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxjQUFjO0FBQ3pCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPLEtBQXFDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFxQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGNBQWM7QUFDekIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU8sS0FBcUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0Esa0NBQWtDLGdCQUFnQixJQUFJLGdCQUFnQixJQUFJLGlCQUFpQjtBQUMzRixpQkFBaUIsaUJBQWlCLFNBQVMsa0JBQWtCLElBQUksa0JBQWtCLElBQUksbUJBQW1CO0FBQzFHLFdBQVcsY0FBYztBQUN6QixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFVBQVUsb0JBQW9CLElBQUk7QUFDakUsNENBQTRDLFVBQVUseUJBQXlCLElBQUk7QUFDbkY7O0FBRUE7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU8sS0FBcUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQztBQUNqQywyQkFBMkIsaUZBQWlGO0FBQzVHLHFDQUFxQywrREFBK0Q7QUFDcEcscURBQXFELDZFQUE2RTtBQUNsSSx1Q0FBdUMseUVBQXlFO0FBQ2hILGlEQUFpRCx5RUFBeUU7QUFDMUgsdUNBQXVDO0FBQ3ZDLG1DQUFtQztBQUNuQywyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RCxxREFBcUQ7QUFDckQsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLEtBQUssRUFBQztBQUNvSDs7Ozs7Ozs7Ozs7QUNyN0N6STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsa0NBQWtDO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsNEZBQTRGO0FBQ3pIO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxrQkFBa0IsYUFBYTs7QUFFbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHVEQUFLOztBQUUvQjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHVEQUFLOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsTUFBTSxnRUFBZ0UscUNBQXFDLElBQUksZUFBZTtBQUMxSztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUNBQWlDO0FBQ3BELFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxRQUFRLHVCQUF1QjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0Esd0hBQXdILEtBQUs7QUFDN0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxLQUFLO0FBQ3RDO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsdURBQUs7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1REFBSztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1REFBSzs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxvQkFBb0I7QUFDakY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQUssR0FBRyxDQUE4RSxvQkFBb0IsU0FBUztBQUN6SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2Q0FBNkMscUJBQXFCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsbURBQW1ELHNCQUFzQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHVEQUFLO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHVEQUFLO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1REFBSztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxnQkFBZ0I7QUFDaEIsR0FBRztBQUNILGlCQUFpQixjQUFjO0FBQy9CO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEhBQTRIO0FBQzVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKLDBCQUEwQixNQUFNO0FBQ2hDLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixXQUFXO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVDQUF1QztBQUNsRDtBQUNBLFVBQVUsNkNBQTZDO0FBQ3ZELGdCQUFnQixpQ0FBaUM7QUFDakQsa0JBQWtCLHlDQUF5QztBQUMzRCxZQUFZLGNBQWM7QUFDMUIsZ0JBQWdCLCtCQUErQjtBQUMvQyxnQkFBZ0I7QUFDaEIsR0FBRztBQUNIO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBQXdGLG1DQUFtQyxJQUFJLE9BQU87QUFDdEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsVUFBVTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQW1CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVksNENBQTRDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLG9CQUFvQjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFdBQVcsTUFBTSw0Q0FBNEM7QUFDN0QsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0EsNkRBQTZELHFCQUFxQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLDRDQUE0QyxRQUFRO0FBQ3BELGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRSxxQkFBcUI7QUFDM0YsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUscUJBQXFCO0FBQ2hHLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUscUJBQXFCO0FBQ2hHLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFLHFCQUFxQjtBQUNoRyxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGdDQUFnQztBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBDQUEwQztBQUNwRCxjQUFjLCtCQUErQjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QyxvQkFBb0I7QUFDcEIsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLHVDQUF1QztBQUNqRCxjQUFjLCtCQUErQjtBQUM3QyxlQUFlLDhCQUE4QjtBQUM3QyxZQUFZO0FBQ1osR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSw2Q0FBNkMsUUFBUTtBQUNyRCxhQUFhLHlDQUF5QztBQUN0RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSx1Q0FBdUM7QUFDakQsYUFBYSx5Q0FBeUM7QUFDdEQsZ0JBQWdCO0FBQ2hCLEdBQUc7QUFDSCxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQSxhQUFhLCtDQUErQztBQUM1RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEhBQTBILGtCQUFrQjtBQUM1SSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELHFCQUFxQjtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSzs7QUFFaEM7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSzs7QUFFaEM7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyx1REFBSztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsaUJBQWlCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0NBQXdDO0FBQ2xELG9CQUFvQiw2QkFBNkI7QUFDakQsZ0JBQWdCLHFDQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSxhQUFhLCtCQUErQjtBQUM1QztBQUNBLHNCQUFzQixlQUFlO0FBQ3JDLGtEQUFrRCw4RkFBOEY7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFLLEVBQUUsRUFPVixDQUFDO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLFlBQVksaUVBQWlFO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLENBQUMsS0FBSyxxQkFBcUI7QUFDM0IsMkJBQTJCLGVBQWU7QUFDMUM7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSSxpQkFBaUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLElBQUksaUJBQWlCO0FBQzFCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLElBQUksZ0NBQWdDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdURBQUs7QUFDaEMsd0JBQXdCLE1BQUssR0FBRyxDQUFxQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLOztBQUVoQztBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw2Q0FBNkM7QUFDdkQsYUFBYTtBQUNiLEdBQUc7QUFDSCxpQkFBaUIsY0FBYztBQUMvQjtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkM7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLGVBQWU7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxvQkFBb0I7QUFDOUU7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNkNBQTZDO0FBQ3ZELGNBQWM7QUFDZCxHQUFHO0FBQ0gsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsRUFBRSxJQUFJO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsNkJBQTZCO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0Esd0NBQXdDLFFBQVE7QUFDaEQ7QUFDQTtBQUNBLFlBQVkscURBQXFELGdCQUFnQjtBQUNqRjtBQUNBO0FBQ0Esb0ZBQW9GLHVDQUF1QyxLQUFLO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFdBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0NBQXdDO0FBQ2xELGNBQWMsK0JBQStCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDLFlBQVksMkNBQTJDO0FBQ3ZELG9CQUFvQjtBQUNwQixHQUFHO0FBQ0gsV0FBVyx5QkFBeUI7QUFDcEMsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSwrQ0FBK0M7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9IQUFvSCw2Q0FBNkM7QUFDaks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRSxLQUFLO0FBQ0wsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsZUFBZTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVDQUF1QztBQUNuRCxtQkFBbUI7QUFDbkIsb0RBQW9ELGFBQWE7QUFDakUsNkVBQTZFLGlDQUFpQywrQ0FBK0MsY0FBYztBQUMzSztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHNDQUFzQyw2Q0FBNkM7QUFDbkY7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQSwyQ0FBMkMsUUFBUTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDhDQUE4QztBQUM5RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNIO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0EsYUFBYSxtREFBbUQ7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsYUFBYTtBQUNqRTtBQUNBLHNCQUFzQix5QkFBeUI7QUFDL0MsZ0JBQWdCLDhDQUE4QztBQUM5RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSx5Q0FBeUMsUUFBUTtBQUNqRCxhQUFhLHFDQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLEdBQUc7QUFDSCxpQkFBaUIsY0FBYztBQUMvQjtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4Q0FBOEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixXQUFXO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw2Q0FBNkM7QUFDdkQsbUJBQW1CO0FBQ25CLEdBQUc7QUFDSCxpQkFBaUIsY0FBYztBQUMvQixtREFBbUQsUUFBUTtBQUMzRCxpREFBaUQsUUFBUTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxZQUFZLGdDQUFnQztBQUM1QyxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMkNBQTJDO0FBQ3JELGdCQUFnQjtBQUNoQixHQUFHO0FBQ0gsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsK0NBQStDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHdFQUF3RSxnQ0FBZ0M7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSx3Q0FBd0M7QUFDbEQsY0FBYywrQkFBK0I7QUFDN0MsZUFBZTtBQUNmLEdBQUc7QUFDSCxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxtQkFBbUI7QUFDbkIsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFdBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUNBQXVDO0FBQ2xEO0FBQ0EsVUFBVSw2Q0FBNkM7QUFDdkQsZ0JBQWdCLGlDQUFpQztBQUNqRCxrQkFBa0IsaUNBQWlDO0FBQ25ELGtCQUFrQix5Q0FBeUM7QUFDM0QsWUFBWSw4QkFBOEI7QUFDMUMsZ0JBQWdCO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3RixtQ0FBbUMsSUFBSSxPQUFPO0FBQ3RJO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxpQ0FBaUMsa0JBQWtCO0FBQ25ELFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLDRDQUE0QztBQUN4RCxtQkFBbUI7QUFDbkI7QUFDQSxzRUFBc0Usb0JBQW9CO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsV0FBVyxNQUFNLDRDQUE0QztBQUM3RCxpQkFBaUIsY0FBYztBQUMvQjtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQSw4REFBOEQscUJBQXFCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLDJDQUEyQyxRQUFRO0FBQ25ELGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRSxxQkFBcUI7QUFDMUY7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUscUJBQXFCO0FBQzFGO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxxQkFBcUI7QUFDOUYsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSxxQkFBcUI7QUFDL0YsU0FBUztBQUNUO0FBQ0E7QUFDQSx3RUFBd0UsZ0NBQWdDO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLHVDQUF1QztBQUNqRCxjQUFjLCtCQUErQjtBQUM3QyxlQUFlO0FBQ2YsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBLGFBQWEseUNBQXlDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxxQkFBcUI7QUFDbEcsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDRFQUE0RTtBQUN4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxxQkFBcUI7QUFDaEcsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSx1Q0FBdUM7QUFDakQsYUFBYSx5Q0FBeUM7QUFDdEQsZ0JBQWdCO0FBQ2hCLEdBQUc7QUFDSCxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQSxhQUFhLCtDQUErQztBQUM1RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU8sSUFBSSxpQkFBaUI7QUFDNUIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBIQUEwSCxrQkFBa0I7QUFDNUksT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLHFCQUFxQjtBQUM5RixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdURBQUs7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsV0FBVztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNLCtDQUErQztBQUNoRSxpQkFBaUIsY0FBYztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGLG1DQUFtQyxJQUFJLE9BQU87QUFDcEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSwrQkFBK0Isa0JBQWtCO0FBQ2pELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG1CQUFtQjtBQUNuQixzQkFBc0IsWUFBWSx1REFBdUQ7QUFDekY7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsK0JBQStCO0FBQy9DLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLHdDQUF3QyxRQUFRO0FBQ2hELGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLHFCQUFxQjtBQUN4RjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxxQkFBcUI7QUFDeEY7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxxQkFBcUI7QUFDOUYsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxxQkFBcUI7QUFDN0YsU0FBUztBQUNUO0FBQ0E7QUFDQSx3RUFBd0UsZ0NBQWdDO0FBQ3hHO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxjQUFjLCtCQUErQjtBQUM3QyxlQUFlO0FBQ2YsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSx1Q0FBdUMsUUFBUTtBQUMvQztBQUNBLGFBQWEscUNBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUscUJBQXFCO0FBQ2xHLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxxQkFBcUI7QUFDbEcsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSw2Q0FBNkM7QUFDdkQsZ0JBQWdCO0FBQ2hCLEdBQUc7QUFDSCxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0Esc0NBQXNDLFFBQVE7QUFDOUM7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdIQUF3SCxrQkFBa0I7QUFDMUksT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUscUJBQXFCO0FBQzVGLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFdBQVcsMEJBQTBCLGNBQWM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBLGdEQUFnRCxRQUFRO0FBQ3hELDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0EsYUFBYSxpREFBaUQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMkNBQTJDO0FBQ3JELGdCQUFnQjtBQUNoQixHQUFHO0FBQ0g7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7QUFDQSxhQUFhLGlDQUFpQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELFFBQVE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0VBQXdFLGdDQUFnQztBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsWUFBWSxLQUFLLEVBQUUsRUFFVixDQUFDO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG9CQUFvQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0NBQXdDO0FBQ2xELGNBQWMsK0JBQStCO0FBQzdDLGVBQWU7QUFDZixHQUFHO0FBQ0gsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVUsd0NBQXdDO0FBQ2xELGNBQWMsK0JBQStCO0FBQzdDLGVBQWUsOEJBQThCO0FBQzdDLGFBQWE7QUFDYixHQUFHO0FBQ0g7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDLFVBQVUsUUFBUTtBQUNsQjtBQUNBO0FBQ0Esb0VBQW9FLFFBQVE7QUFDNUUsa0VBQWtFLFFBQVE7QUFDMUUsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLGlFQUFpRSxxQkFBcUI7QUFDdEY7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxVQUFVLEtBQUssRUFBRSxFQUVWLENBQUM7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBLFVBQVUsS0FBSyxFQUFFLEVBRVYsQ0FBQztBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsYUFBYSw2QkFBNkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSzs7QUFFaEM7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDZCQUE2QjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwQ0FBMEM7QUFDcEQsZUFBZTtBQUNmLEdBQUc7QUFDSCxtQkFBbUIsY0FBYztBQUNqQztBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQSxZQUFZLHlCQUF5QixlQUFlO0FBQ3BELFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0Esb0ZBQW9GLHVDQUF1QyxLQUFLO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsV0FBVztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1Q0FBdUM7QUFDbEQ7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxnQkFBZ0IsaUNBQWlDO0FBQ2pELGtCQUFrQix5Q0FBeUM7QUFDM0QsWUFBWTtBQUNaLEdBQUc7QUFDSDtBQUNBLGlCQUFpQiw0QkFBNEI7QUFDN0M7QUFDQTtBQUNBLGlDQUFpQyx5QkFBeUI7QUFDMUQsd0NBQXdDLCtCQUErQjtBQUN2RSxhQUFhLHVDQUF1QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFFBQVE7QUFDL0M7QUFDQSxZQUFZLDRDQUE0QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0Usb0JBQW9CO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSx3Q0FBd0M7QUFDbEQsYUFBYSx5Q0FBeUM7QUFDdEQsZ0JBQWdCO0FBQ2hCLEdBQUc7QUFDSCxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQsaUNBQWlDLHlCQUF5QjtBQUMxRCx3Q0FBd0MsK0JBQStCO0FBQ3ZFO0FBQ0EsdURBQXVELDhDQUE4QztBQUNyRztBQUNBLGFBQWEsK0JBQStCO0FBQzVDLDJEQUEyRCx1Q0FBdUM7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG1CQUFPLENBQUMsdURBQUs7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MscUJBQXFCO0FBQ3ZEO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsd0NBQXdDLDJCQUEyQjtBQUNuRSxnQkFBZ0I7QUFDaEI7QUFDQSwwQkFBMEIsK0JBQStCLFVBQVUscUNBQXFDO0FBQ3hHO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxXQUFXLHVDQUF1QztBQUNsRDtBQUNBLFVBQVUsMkNBQTJDO0FBQ3JELGtCQUFrQiwrQkFBK0I7QUFDakQsWUFBWSw4QkFBOEI7QUFDMUMsYUFBYTtBQUNiLEdBQUc7QUFDSDtBQUNBLGlCQUFpQiw0QkFBNEI7QUFDN0M7QUFDQSxtQ0FBbUMsUUFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFLGdDQUFnQztBQUN4RyxhQUFhLCtCQUErQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5Q0FBeUM7QUFDckQsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHdCQUF3Qix5QkFBeUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSzs7QUFFaEM7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyx1REFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFdBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxVQUFVLDZDQUE2QztBQUN2RCxxQkFBcUIsK0JBQStCO0FBQ3BELG9CQUFvQiw0QkFBNEI7QUFDaEQsZ0JBQWdCLGlDQUFpQztBQUNqRCxjQUFjO0FBQ2QsR0FBRztBQUNIO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixHQUFHO0FBQ0gsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLDJDQUEyQztBQUNyRCxnQkFBZ0I7QUFDaEIsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSxxQ0FBcUMsUUFBUTtBQUM3QztBQUNBLGFBQWEseUNBQXlDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsZ0NBQWdDO0FBQ3hHO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLEdBQUc7QUFDSCxpQkFBaUIsY0FBYztBQUMvQjtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxjQUFjLCtCQUErQjtBQUM3QyxlQUFlO0FBQ2YsR0FBRztBQUNILGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSx1Q0FBdUMsUUFBUTtBQUMvQztBQUNBLGFBQWEsNkNBQTZDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1CQUFtQixtQkFBTyxDQUFDLHVEQUFLOztBQUVoQztBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0NBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELFNBQVM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxTQUFTO0FBQzlEO0FBQ0EsMENBQTBDLDZDQUE2QztBQUN2RixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxZQUFZLGdDQUFnQztBQUM1QyxlQUFlLGdDQUFnQztBQUMvQyxjQUFjLGlDQUFpQztBQUMvQyxhQUFhLDZCQUE2QjtBQUMxQyxpQkFBaUIsNkJBQTZCO0FBQzlDLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsNkJBQTZCO0FBQzVDLGFBQWEsNkJBQTZCO0FBQzFDLGlCQUFpQiw2QkFBNkI7QUFDOUMsZUFBZTtBQUNmLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGlCQUFpQiw0QkFBNEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLCtCQUErQjtBQUM1QyxVQUFVLGVBQWU7QUFDekIsVUFBVSx1QkFBdUI7QUFDakMsb0JBQW9CO0FBQ3BCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJLGlCQUFpQjtBQUM1QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHdDQUF3QztBQUNsRCxZQUFZLGdDQUFnQztBQUM1QyxlQUFlLGdDQUFnQztBQUMvQyxjQUFjLGlDQUFpQztBQUMvQyxhQUFhLDZCQUE2QjtBQUMxQyxpQkFBaUIsNkJBQTZCO0FBQzlDLGVBQWUsNkJBQTZCO0FBQzVDLGVBQWUsNkJBQTZCO0FBQzVDLGFBQWEsNkJBQTZCO0FBQzFDLGlCQUFpQiw2QkFBNkI7QUFDOUMsZUFBZTtBQUNmLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxzQkFBc0I7QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1QsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7O0FDaCtKVzs7QUFFWixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsMEhBQWdEO0FBQ2xEOzs7Ozs7Ozs7Ozs7QUNOYTs7QUFFYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7O0FBRTdELGFBQWEsbUJBQU8sQ0FBQyx5RkFBZ0I7QUFDckMsY0FBYyxtQkFBTyxDQUFDLGlGQUFVOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJLGdDQUFnQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQ7QUFDckQsVUFBVSx1RUFBdUU7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELHdCQUF3QjtBQUMxRTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksZUFBZTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUksZUFBZTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRiw2REFBNkQ7QUFDL0k7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0MsVUFBVSxpRUFBaUU7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0Msc0VBQXNFLGNBQWMsc0JBQXNCO0FBQzFHO0FBQ0EsZ0RBQWdEO0FBQ2hELHNFQUFzRSxjQUFjLHVCQUF1QjtBQUMzRztBQUNBLDJDQUEyQztBQUMzQyxzRUFBc0UsY0FBYyxvQkFBb0I7QUFDeEc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxzQkFBc0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QyxVQUFVLHdDQUF3QztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxlQUFlO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QyxVQUFVLHlCQUF5QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLHlDQUF5QztBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YscURBQXFELG9CQUFvQjtBQUN6RSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0EsK0RBQStELDBCQUEwQjtBQUN6RixVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGlCQUFpQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxVQUFVLCtDQUErQztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBLElBQUk7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxJQUFJO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsSUFBSTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GLGdCQUFnQjtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsMERBQTBEO0FBQzFELFVBQVUseUJBQXlCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxjQUFjO0FBQ2pELFVBQVUsK0JBQStCO0FBQ3pDO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsZUFBZTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0Msb0NBQW9DLElBQUk7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTix3Q0FBd0MsbUJBQW1CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLDZEQUE2RDtBQUMvSTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLFlBQVksOEJBQThCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpREFBaUQ7QUFDakQ7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSSxrQkFBa0I7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esd0VBQXdFLHdCQUF3QjtBQUNoRztBQUNBO0FBQ0Esd0VBQXdFLHdCQUF3QjtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxxR0FBcUcsd0JBQXdCO0FBQzdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRiw2REFBNkQ7QUFDL0k7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsK0RBQStELHNCQUFzQixVQUFVO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQyx3REFBd0QsSUFBSTtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0RBQXdEO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQSwwQkFBMEIsRUFBRSxVQUFVLElBQUksV0FBVyxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJO0FBQ2pHLG9DQUFvQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQSxXQUFXLE1BQU07QUFDakIsVUFBVSxpQkFBaUI7QUFDM0IsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxhQUFhO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSx1RUFBdUUsV0FBVztBQUNsRjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRiw2REFBNkQ7QUFDL0k7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLDZEQUE2RDtBQUMvSTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFLDRDQUE0QyxTQUFTO0FBQ3JELEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxxQ0FBcUMsbUJBQW1CLGVBQWU7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRiw2REFBNkQ7QUFDL0k7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsVUFBVSx1Q0FBdUM7QUFDakQsOEVBQThFO0FBQzlFO0FBQ0EsR0FBRztBQUNILFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSw2REFBNkQ7QUFDM0k7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsa0JBQWtCO0FBQ2xCLFdBQVc7QUFDWCxjQUFjO0FBQ2Qsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixhQUFhO0FBQ2IscUJBQXFCO0FBQ3JCLDJCQUEyQjtBQUMzQixvQkFBb0I7QUFDcEIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQix1QkFBdUI7QUFDdkIsMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUN6Qiw0QkFBNEI7QUFDNUIsd0JBQXdCO0FBQ3hCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsc0JBQXNCO0FBQ3RCLG9CQUFvQjtBQUNwQixzQkFBc0I7QUFDdEIsc0JBQXNCO0FBQ3RCLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsa0JBQWtCO0FBQ2xCLFdBQVc7QUFDWCxnQkFBZ0I7QUFDaEIsc0JBQXNCO0FBQ3RCLHdCQUF3QjtBQUN4QixjQUFjO0FBQ2QsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixhQUFhO0FBQ2IsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIsZUFBZTtBQUNmLDBCQUEwQjtBQUMxQixZQUFZO0FBQ1oscUJBQXFCO0FBQ3JCLFdBQVc7QUFDWCxXQUFXO0FBQ1gsa0JBQWtCO0FBQ2xCLFVBQVU7QUFDVixzQkFBc0I7QUFDdEIscUJBQXFCO0FBQ3JCLHNCQUFzQjtBQUN0QixZQUFZO0FBQ1osZ0JBQWdCO0FBQ2hCLHNCQUFzQjtBQUN0Qix3QkFBd0I7QUFDeEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsc0JBQXNCO0FBQ3RCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsV0FBVztBQUNYLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIsc0JBQXNCO0FBQ3RCLG9CQUFvQjtBQUNwQixzQkFBc0I7QUFDdEIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixjQUFjO0FBQ2Qsd0JBQXdCO0FBQ3hCLDBCQUEwQjtBQUMxQixvQkFBb0I7QUFDcEIseUJBQXlCO0FBQ3pCLHNCQUFzQjtBQUN0QixhQUFhO0FBQ2Isa0JBQWtCO0FBQ2xCLHFCQUFxQjtBQUNyQixtQkFBbUI7QUFDbkIscUJBQXFCO0FBQ3JCLG1CQUFtQjtBQUNuQixxQkFBcUI7QUFDckIsc0JBQXNCO0FBQ3RCLG1CQUFtQjtBQUNuQixxQkFBcUI7QUFDckIsa0JBQWtCO0FBQ2xCLG9CQUFvQjtBQUNwQixpQkFBaUI7QUFDakIsa0JBQWtCO0FBQ2xCLG1CQUFtQjtBQUNuQixzQkFBc0I7QUFDdEIsc0JBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsc0JBQXNCO0FBQ3RCLHdCQUF3QjtBQUN4Qix1QkFBdUI7QUFDdkIsZ0JBQWdCOzs7Ozs7Ozs7OztBQzNnRGhCLFVBQVUsbUJBQU8sQ0FBQyx1REFBSzs7QUFFdkI7QUFDQTtBQUNBLENBQUM7O0FBRUQsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1gsWUFBWTtBQUNaLGNBQWM7QUFDZCxjQUFjO0FBQ2QsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVlL2NvbXBpbGVyLWNvcmUvZGlzdC9jb21waWxlci1jb3JlLmVzbS1idW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVlL2NvbXBpbGVyLWRvbS9kaXN0L2NvbXBpbGVyLWRvbS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9kZXZ0b29scy1hcGkvbGliL2VzbS9jb25zdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9kZXZ0b29scy1hcGkvbGliL2VzbS9lbnYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vcHJveHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvZGV2dG9vbHMtYXBpL2xpYi9lc20vdGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9yZWFjdGl2aXR5L2Rpc3QvcmVhY3Rpdml0eS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9ydW50aW1lLWNvcmUvZGlzdC9ydW50aW1lLWNvcmUuZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWUvcnVudGltZS1kb20vZGlzdC9ydW50aW1lLWRvbS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZS9zaGFyZWQvZGlzdC9zaGFyZWQuZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L2Rpc3QvbXVsdGlzZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jaXBoZXItY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvZW5jLWJhc2U2NHVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2VuYy11dGYxNi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2Zvcm1hdC1oZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9obWFjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9saWItdHlwZWRhcnJheXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tZDUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWNmYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtY3RyLWdsYWRtYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWN0ci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1vZmIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtYW5zaXg5MjMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvMTAxMjYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvOTc5NzEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtbm9wYWRkaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGJrZGYyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmFiYml0LWxlZ2FjeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JjNC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JpcGVtZDE2MC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyMjQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyNTYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMzg0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhNTEyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvdHJpcGxlZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMveDY0LWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L3RoZW1lcy9kZWZhdWx0LmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItc2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4tYmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tbnouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtZG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1kZXZhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h5LWFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2p2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLW15LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVlZm9ybS9tdWx0aXNlbGVjdC90aGVtZXMvZGVmYXVsdC5jc3M/MmRiOSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N2Zy12dWUzL2Rpc3Qvc3ZnLXZ1ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9leHBvcnRIZWxwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5lc20tYnVuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlMy1yYWRpYWwtcHJvZ3Jlc3MvZGlzdC9SYWRpYWxQcm9ncmVzc0Jhci5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZTMtc21vb3RoLXNjcm9sbC9kaXN0L3Z1ZS1zbW9vdGgtc2Nyb2xsLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVleC9kaXN0L3Z1ZXguZXNtLWJ1bmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BoZWFkbGVzc3VpL3Z1ZS9kaXN0L2hlYWRsZXNzdWkuZGV2LmNqcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGhlYWRsZXNzdWkvdnVlL2Rpc3QvaW5kZXguY2pzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVldXNlL2NvcmUvaW5kZXguY2pzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdnVldXNlL2NvcmUvbm9kZV9tb2R1bGVzL0B2dWV1c2Uvc2hhcmVkL2luZGV4LmNqcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9jb3JlL25vZGVfbW9kdWxlcy92dWUtZGVtaS9saWIvaW5kZXguY2pzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUsIE5PT1AsIGV4dGVuZCwgaXNPYmplY3QsIE5PLCBpc0FycmF5LCBtYWtlTWFwLCBpc1N5bWJvbCwgRU1QVFlfT0JKLCBjYXBpdGFsaXplLCBjYW1lbGl6ZSBhcyBjYW1lbGl6ZSQxLCBQYXRjaEZsYWdOYW1lcywgc2xvdEZsYWdzVGV4dCwgaXNPbiwgaXNCdWlsdEluRGlyZWN0aXZlLCBpc1Jlc2VydmVkUHJvcCwgdG9IYW5kbGVyS2V5IH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuZXhwb3J0IHsgZ2VuZXJhdGVDb2RlRnJhbWUgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycm9yKSB7XHJcbiAgICB0aHJvdyBlcnJvcjtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0T25XYXJuKG1zZykge1xyXG4gICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke21zZy5tZXNzYWdlfWApO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyRXJyb3IoY29kZSwgbG9jLCBtZXNzYWdlcywgYWRkaXRpb25hbE1lc3NhZ2UpIHtcclxuICAgIGNvbnN0IG1zZyA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCAhdHJ1ZVxyXG4gICAgICAgID8gKG1lc3NhZ2VzIHx8IGVycm9yTWVzc2FnZXMpW2NvZGVdICsgKGFkZGl0aW9uYWxNZXNzYWdlIHx8IGBgKVxyXG4gICAgICAgIDogY29kZTtcclxuICAgIGNvbnN0IGVycm9yID0gbmV3IFN5bnRheEVycm9yKFN0cmluZyhtc2cpKTtcclxuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xyXG4gICAgZXJyb3IubG9jID0gbG9jO1xyXG4gICAgcmV0dXJuIGVycm9yO1xyXG59XHJcbmNvbnN0IGVycm9yTWVzc2FnZXMgPSB7XHJcbiAgICAvLyBwYXJzZSBlcnJvcnNcclxuICAgIFswIC8qIEVycm9yQ29kZXMuQUJSVVBUX0NMT1NJTkdfT0ZfRU1QVFlfQ09NTUVOVCAqL106ICdJbGxlZ2FsIGNvbW1lbnQuJyxcclxuICAgIFsxIC8qIEVycm9yQ29kZXMuQ0RBVEFfSU5fSFRNTF9DT05URU5UICovXTogJ0NEQVRBIHNlY3Rpb24gaXMgYWxsb3dlZCBvbmx5IGluIFhNTCBjb250ZXh0LicsXHJcbiAgICBbMiAvKiBFcnJvckNvZGVzLkRVUExJQ0FURV9BVFRSSUJVVEUgKi9dOiAnRHVwbGljYXRlIGF0dHJpYnV0ZS4nLFxyXG4gICAgWzMgLyogRXJyb3JDb2Rlcy5FTkRfVEFHX1dJVEhfQVRUUklCVVRFUyAqL106ICdFbmQgdGFnIGNhbm5vdCBoYXZlIGF0dHJpYnV0ZXMuJyxcclxuICAgIFs0IC8qIEVycm9yQ29kZXMuRU5EX1RBR19XSVRIX1RSQUlMSU5HX1NPTElEVVMgKi9dOiBcIklsbGVnYWwgJy8nIGluIHRhZ3MuXCIsXHJcbiAgICBbNSAvKiBFcnJvckNvZGVzLkVPRl9CRUZPUkVfVEFHX05BTUUgKi9dOiAnVW5leHBlY3RlZCBFT0YgaW4gdGFnLicsXHJcbiAgICBbNiAvKiBFcnJvckNvZGVzLkVPRl9JTl9DREFUQSAqL106ICdVbmV4cGVjdGVkIEVPRiBpbiBDREFUQSBzZWN0aW9uLicsXHJcbiAgICBbNyAvKiBFcnJvckNvZGVzLkVPRl9JTl9DT01NRU5UICovXTogJ1VuZXhwZWN0ZWQgRU9GIGluIGNvbW1lbnQuJyxcclxuICAgIFs4IC8qIEVycm9yQ29kZXMuRU9GX0lOX1NDUklQVF9IVE1MX0NPTU1FTlRfTElLRV9URVhUICovXTogJ1VuZXhwZWN0ZWQgRU9GIGluIHNjcmlwdC4nLFxyXG4gICAgWzkgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fVEFHICovXTogJ1VuZXhwZWN0ZWQgRU9GIGluIHRhZy4nLFxyXG4gICAgWzEwIC8qIEVycm9yQ29kZXMuSU5DT1JSRUNUTFlfQ0xPU0VEX0NPTU1FTlQgKi9dOiAnSW5jb3JyZWN0bHkgY2xvc2VkIGNvbW1lbnQuJyxcclxuICAgIFsxMSAvKiBFcnJvckNvZGVzLklOQ09SUkVDVExZX09QRU5FRF9DT01NRU5UICovXTogJ0luY29ycmVjdGx5IG9wZW5lZCBjb21tZW50LicsXHJcbiAgICBbMTIgLyogRXJyb3JDb2Rlcy5JTlZBTElEX0ZJUlNUX0NIQVJBQ1RFUl9PRl9UQUdfTkFNRSAqL106IFwiSWxsZWdhbCB0YWcgbmFtZS4gVXNlICcmbHQ7JyB0byBwcmludCAnPCcuXCIsXHJcbiAgICBbMTMgLyogRXJyb3JDb2Rlcy5NSVNTSU5HX0FUVFJJQlVURV9WQUxVRSAqL106ICdBdHRyaWJ1dGUgdmFsdWUgd2FzIGV4cGVjdGVkLicsXHJcbiAgICBbMTQgLyogRXJyb3JDb2Rlcy5NSVNTSU5HX0VORF9UQUdfTkFNRSAqL106ICdFbmQgdGFnIG5hbWUgd2FzIGV4cGVjdGVkLicsXHJcbiAgICBbMTUgLyogRXJyb3JDb2Rlcy5NSVNTSU5HX1dISVRFU1BBQ0VfQkVUV0VFTl9BVFRSSUJVVEVTICovXTogJ1doaXRlc3BhY2Ugd2FzIGV4cGVjdGVkLicsXHJcbiAgICBbMTYgLyogRXJyb3JDb2Rlcy5ORVNURURfQ09NTUVOVCAqL106IFwiVW5leHBlY3RlZCAnPCEtLScgaW4gY29tbWVudC5cIixcclxuICAgIFsxNyAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfQ0hBUkFDVEVSX0lOX0FUVFJJQlVURV9OQU1FICovXTogJ0F0dHJpYnV0ZSBuYW1lIGNhbm5vdCBjb250YWluIFUrMDAyMiAoXCIpLCBVKzAwMjcgKFxcJyksIGFuZCBVKzAwM0MgKDwpLicsXHJcbiAgICBbMTggLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0NIQVJBQ1RFUl9JTl9VTlFVT1RFRF9BVFRSSUJVVEVfVkFMVUUgKi9dOiAnVW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlIGNhbm5vdCBjb250YWluIFUrMDAyMiAoXCIpLCBVKzAwMjcgKFxcJyksIFUrMDAzQyAoPCksIFUrMDAzRCAoPSksIGFuZCBVKzAwNjAgKGApLicsXHJcbiAgICBbMTkgLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VRVUFMU19TSUdOX0JFRk9SRV9BVFRSSUJVVEVfTkFNRSAqL106IFwiQXR0cmlidXRlIG5hbWUgY2Fubm90IHN0YXJ0IHdpdGggJz0nLlwiLFxyXG4gICAgWzIxIC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9RVUVTVElPTl9NQVJLX0lOU1RFQURfT0ZfVEFHX05BTUUgKi9dOiBcIic8PycgaXMgYWxsb3dlZCBvbmx5IGluIFhNTCBjb250ZXh0LlwiLFxyXG4gICAgWzIwIC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9OVUxMX0NIQVJBQ1RFUiAqL106IGBVbmV4cGVjdGVkIG51bGwgY2hhcmFjdGVyLmAsXHJcbiAgICBbMjIgLyogRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX1NPTElEVVNfSU5fVEFHICovXTogXCJJbGxlZ2FsICcvJyBpbiB0YWdzLlwiLFxyXG4gICAgLy8gVnVlLXNwZWNpZmljIHBhcnNlIGVycm9yc1xyXG4gICAgWzIzIC8qIEVycm9yQ29kZXMuWF9JTlZBTElEX0VORF9UQUcgKi9dOiAnSW52YWxpZCBlbmQgdGFnLicsXHJcbiAgICBbMjQgLyogRXJyb3JDb2Rlcy5YX01JU1NJTkdfRU5EX1RBRyAqL106ICdFbGVtZW50IGlzIG1pc3NpbmcgZW5kIHRhZy4nLFxyXG4gICAgWzI1IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0lOVEVSUE9MQVRJT05fRU5EICovXTogJ0ludGVycG9sYXRpb24gZW5kIHNpZ24gd2FzIG5vdCBmb3VuZC4nLFxyXG4gICAgWzI3IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0RZTkFNSUNfRElSRUNUSVZFX0FSR1VNRU5UX0VORCAqL106ICdFbmQgYnJhY2tldCBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgd2FzIG5vdCBmb3VuZC4gJyArXHJcbiAgICAgICAgJ05vdGUgdGhhdCBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCBjYW5ub3QgY29udGFpbiBzcGFjZXMuJyxcclxuICAgIFsyNiAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19ESVJFQ1RJVkVfTkFNRSAqL106ICdMZWdhbCBkaXJlY3RpdmUgbmFtZSB3YXMgZXhwZWN0ZWQuJyxcclxuICAgIC8vIHRyYW5zZm9ybSBlcnJvcnNcclxuICAgIFsyOCAvKiBFcnJvckNvZGVzLlhfVl9JRl9OT19FWFBSRVNTSU9OICovXTogYHYtaWYvdi1lbHNlLWlmIGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzI5IC8qIEVycm9yQ29kZXMuWF9WX0lGX1NBTUVfS0VZICovXTogYHYtaWYvZWxzZSBicmFuY2hlcyBtdXN0IHVzZSB1bmlxdWUga2V5cy5gLFxyXG4gICAgWzMwIC8qIEVycm9yQ29kZXMuWF9WX0VMU0VfTk9fQURKQUNFTlRfSUYgKi9dOiBgdi1lbHNlL3YtZWxzZS1pZiBoYXMgbm8gYWRqYWNlbnQgdi1pZiBvciB2LWVsc2UtaWYuYCxcclxuICAgIFszMSAvKiBFcnJvckNvZGVzLlhfVl9GT1JfTk9fRVhQUkVTU0lPTiAqL106IGB2LWZvciBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFszMiAvKiBFcnJvckNvZGVzLlhfVl9GT1JfTUFMRk9STUVEX0VYUFJFU1NJT04gKi9dOiBgdi1mb3IgaGFzIGludmFsaWQgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzMzIC8qIEVycm9yQ29kZXMuWF9WX0ZPUl9URU1QTEFURV9LRVlfUExBQ0VNRU5UICovXTogYDx0ZW1wbGF0ZSB2LWZvcj4ga2V5IHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIDx0ZW1wbGF0ZT4gdGFnLmAsXHJcbiAgICBbMzQgLyogRXJyb3JDb2Rlcy5YX1ZfQklORF9OT19FWFBSRVNTSU9OICovXTogYHYtYmluZCBpcyBtaXNzaW5nIGV4cHJlc3Npb24uYCxcclxuICAgIFszNSAvKiBFcnJvckNvZGVzLlhfVl9PTl9OT19FWFBSRVNTSU9OICovXTogYHYtb24gaXMgbWlzc2luZyBleHByZXNzaW9uLmAsXHJcbiAgICBbMzYgLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9VTkVYUEVDVEVEX0RJUkVDVElWRV9PTl9TTE9UX09VVExFVCAqL106IGBVbmV4cGVjdGVkIGN1c3RvbSBkaXJlY3RpdmUgb24gPHNsb3Q+IG91dGxldC5gLFxyXG4gICAgWzM3IC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfTUlYRURfU0xPVF9VU0FHRSAqL106IGBNaXhlZCB2LXNsb3QgdXNhZ2Ugb24gYm90aCB0aGUgY29tcG9uZW50IGFuZCBuZXN0ZWQgPHRlbXBsYXRlPi5gICtcclxuICAgICAgICBgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgbmFtZWQgc2xvdHMsIGFsbCBzbG90cyBzaG91bGQgdXNlIDx0ZW1wbGF0ZT4gYCArXHJcbiAgICAgICAgYHN5bnRheCB0byBhdm9pZCBzY29wZSBhbWJpZ3VpdHkuYCxcclxuICAgIFszOCAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX0RVUExJQ0FURV9TTE9UX05BTUVTICovXTogYER1cGxpY2F0ZSBzbG90IG5hbWVzIGZvdW5kLiBgLFxyXG4gICAgWzM5IC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfRVhUUkFORU9VU19ERUZBVUxUX1NMT1RfQ0hJTERSRU4gKi9dOiBgRXh0cmFuZW91cyBjaGlsZHJlbiBmb3VuZCB3aGVuIGNvbXBvbmVudCBhbHJlYWR5IGhhcyBleHBsaWNpdGx5IG5hbWVkIGAgK1xyXG4gICAgICAgIGBkZWZhdWx0IHNsb3QuIFRoZXNlIGNoaWxkcmVuIHdpbGwgYmUgaWdub3JlZC5gLFxyXG4gICAgWzQwIC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfTUlTUExBQ0VEICovXTogYHYtc2xvdCBjYW4gb25seSBiZSB1c2VkIG9uIGNvbXBvbmVudHMgb3IgPHRlbXBsYXRlPiB0YWdzLmAsXHJcbiAgICBbNDEgLyogRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfTk9fRVhQUkVTU0lPTiAqL106IGB2LW1vZGVsIGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzQyIC8qIEVycm9yQ29kZXMuWF9WX01PREVMX01BTEZPUk1FRF9FWFBSRVNTSU9OICovXTogYHYtbW9kZWwgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgbWVtYmVyIGV4cHJlc3Npb24uYCxcclxuICAgIFs0MyAvKiBFcnJvckNvZGVzLlhfVl9NT0RFTF9PTl9TQ09QRV9WQVJJQUJMRSAqL106IGB2LW1vZGVsIGNhbm5vdCBiZSB1c2VkIG9uIHYtZm9yIG9yIHYtc2xvdCBzY29wZSB2YXJpYWJsZXMgYmVjYXVzZSB0aGV5IGFyZSBub3Qgd3JpdGFibGUuYCxcclxuICAgIFs0NCAvKiBFcnJvckNvZGVzLlhfSU5WQUxJRF9FWFBSRVNTSU9OICovXTogYEVycm9yIHBhcnNpbmcgSmF2YVNjcmlwdCBleHByZXNzaW9uOiBgLFxyXG4gICAgWzQ1IC8qIEVycm9yQ29kZXMuWF9LRUVQX0FMSVZFX0lOVkFMSURfQ0hJTERSRU4gKi9dOiBgPEtlZXBBbGl2ZT4gZXhwZWN0cyBleGFjdGx5IG9uZSBjaGlsZCBjb21wb25lbnQuYCxcclxuICAgIC8vIGdlbmVyaWMgZXJyb3JzXHJcbiAgICBbNDYgLyogRXJyb3JDb2Rlcy5YX1BSRUZJWF9JRF9OT1RfU1VQUE9SVEVEICovXTogYFwicHJlZml4SWRlbnRpZmllcnNcIiBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIG9mIGNvbXBpbGVyLmAsXHJcbiAgICBbNDcgLyogRXJyb3JDb2Rlcy5YX01PRFVMRV9NT0RFX05PVF9TVVBQT1JURUQgKi9dOiBgRVMgbW9kdWxlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIG9mIGNvbXBpbGVyLmAsXHJcbiAgICBbNDggLyogRXJyb3JDb2Rlcy5YX0NBQ0hFX0hBTkRMRVJfTk9UX1NVUFBPUlRFRCAqL106IGBcImNhY2hlSGFuZGxlcnNcIiBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB0aGUgXCJwcmVmaXhJZGVudGlmaWVyc1wiIG9wdGlvbiBpcyBlbmFibGVkLmAsXHJcbiAgICBbNDkgLyogRXJyb3JDb2Rlcy5YX1NDT1BFX0lEX05PVF9TVVBQT1JURUQgKi9dOiBgXCJzY29wZUlkXCIgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIG1vZHVsZSBtb2RlLmAsXHJcbiAgICAvLyBqdXN0IHRvIGZ1bGZpbGwgdHlwZXNcclxuICAgIFs1MCAvKiBFcnJvckNvZGVzLl9fRVhURU5EX1BPSU5UX18gKi9dOiBgYFxyXG59O1xuXG5jb25zdCBGUkFHTUVOVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgRnJhZ21lbnRgIDogYGApO1xyXG5jb25zdCBURUxFUE9SVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgVGVsZXBvcnRgIDogYGApO1xyXG5jb25zdCBTVVNQRU5TRSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgU3VzcGVuc2VgIDogYGApO1xyXG5jb25zdCBLRUVQX0FMSVZFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBLZWVwQWxpdmVgIDogYGApO1xyXG5jb25zdCBCQVNFX1RSQU5TSVRJT04gPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYEJhc2VUcmFuc2l0aW9uYCA6IGBgKTtcclxuY29uc3QgT1BFTl9CTE9DSyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgb3BlbkJsb2NrYCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX0JMT0NLID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVCbG9ja2AgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9FTEVNRU5UX0JMT0NLID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVFbGVtZW50QmxvY2tgIDogYGApO1xyXG5jb25zdCBDUkVBVEVfVk5PREUgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGNyZWF0ZVZOb2RlYCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX0VMRU1FTlRfVk5PREUgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGNyZWF0ZUVsZW1lbnRWTm9kZWAgOiBgYCk7XHJcbmNvbnN0IENSRUFURV9DT01NRU5UID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVDb21tZW50Vk5vZGVgIDogYGApO1xyXG5jb25zdCBDUkVBVEVfVEVYVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlVGV4dFZOb2RlYCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX1NUQVRJQyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgY3JlYXRlU3RhdGljVk5vZGVgIDogYGApO1xyXG5jb25zdCBSRVNPTFZFX0NPTVBPTkVOVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgcmVzb2x2ZUNvbXBvbmVudGAgOiBgYCk7XHJcbmNvbnN0IFJFU09MVkVfRFlOQU1JQ19DT01QT05FTlQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHJlc29sdmVEeW5hbWljQ29tcG9uZW50YCA6IGBgKTtcclxuY29uc3QgUkVTT0xWRV9ESVJFQ1RJVkUgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHJlc29sdmVEaXJlY3RpdmVgIDogYGApO1xyXG5jb25zdCBSRVNPTFZFX0ZJTFRFUiA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgcmVzb2x2ZUZpbHRlcmAgOiBgYCk7XHJcbmNvbnN0IFdJVEhfRElSRUNUSVZFUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgd2l0aERpcmVjdGl2ZXNgIDogYGApO1xyXG5jb25zdCBSRU5ERVJfTElTVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgcmVuZGVyTGlzdGAgOiBgYCk7XHJcbmNvbnN0IFJFTkRFUl9TTE9UID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGByZW5kZXJTbG90YCA6IGBgKTtcclxuY29uc3QgQ1JFQVRFX1NMT1RTID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjcmVhdGVTbG90c2AgOiBgYCk7XHJcbmNvbnN0IFRPX0RJU1BMQVlfU1RSSU5HID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB0b0Rpc3BsYXlTdHJpbmdgIDogYGApO1xyXG5jb25zdCBNRVJHRV9QUk9QUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgbWVyZ2VQcm9wc2AgOiBgYCk7XHJcbmNvbnN0IE5PUk1BTElaRV9DTEFTUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgbm9ybWFsaXplQ2xhc3NgIDogYGApO1xyXG5jb25zdCBOT1JNQUxJWkVfU1RZTEUgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYG5vcm1hbGl6ZVN0eWxlYCA6IGBgKTtcclxuY29uc3QgTk9STUFMSVpFX1BST1BTID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBub3JtYWxpemVQcm9wc2AgOiBgYCk7XHJcbmNvbnN0IEdVQVJEX1JFQUNUSVZFX1BST1BTID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBndWFyZFJlYWN0aXZlUHJvcHNgIDogYGApO1xyXG5jb25zdCBUT19IQU5ETEVSUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdG9IYW5kbGVyc2AgOiBgYCk7XHJcbmNvbnN0IENBTUVMSVpFID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBjYW1lbGl6ZWAgOiBgYCk7XHJcbmNvbnN0IENBUElUQUxJWkUgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYGNhcGl0YWxpemVgIDogYGApO1xyXG5jb25zdCBUT19IQU5ETEVSX0tFWSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdG9IYW5kbGVyS2V5YCA6IGBgKTtcclxuY29uc3QgU0VUX0JMT0NLX1RSQUNLSU5HID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBzZXRCbG9ja1RyYWNraW5nYCA6IGBgKTtcclxuY29uc3QgUFVTSF9TQ09QRV9JRCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgcHVzaFNjb3BlSWRgIDogYGApO1xyXG5jb25zdCBQT1BfU0NPUEVfSUQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHBvcFNjb3BlSWRgIDogYGApO1xyXG5jb25zdCBXSVRIX0NUWCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgd2l0aEN0eGAgOiBgYCk7XHJcbmNvbnN0IFVOUkVGID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB1bnJlZmAgOiBgYCk7XHJcbmNvbnN0IElTX1JFRiA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgaXNSZWZgIDogYGApO1xyXG5jb25zdCBXSVRIX01FTU8gPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHdpdGhNZW1vYCA6IGBgKTtcclxuY29uc3QgSVNfTUVNT19TQU1FID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBpc01lbW9TYW1lYCA6IGBgKTtcclxuLy8gTmFtZSBtYXBwaW5nIGZvciBydW50aW1lIGhlbHBlcnMgdGhhdCBuZWVkIHRvIGJlIGltcG9ydGVkIGZyb20gJ3Z1ZScgaW5cclxuLy8gZ2VuZXJhdGVkIGNvZGUuIE1ha2Ugc3VyZSB0aGVzZSBhcmUgY29ycmVjdGx5IGV4cG9ydGVkIGluIHRoZSBydW50aW1lIVxyXG4vLyBVc2luZyBgYW55YCBoZXJlIGJlY2F1c2UgVFMgZG9lc24ndCBhbGxvdyBzeW1ib2xzIGFzIGluZGV4IHR5cGUuXHJcbmNvbnN0IGhlbHBlck5hbWVNYXAgPSB7XHJcbiAgICBbRlJBR01FTlRdOiBgRnJhZ21lbnRgLFxyXG4gICAgW1RFTEVQT1JUXTogYFRlbGVwb3J0YCxcclxuICAgIFtTVVNQRU5TRV06IGBTdXNwZW5zZWAsXHJcbiAgICBbS0VFUF9BTElWRV06IGBLZWVwQWxpdmVgLFxyXG4gICAgW0JBU0VfVFJBTlNJVElPTl06IGBCYXNlVHJhbnNpdGlvbmAsXHJcbiAgICBbT1BFTl9CTE9DS106IGBvcGVuQmxvY2tgLFxyXG4gICAgW0NSRUFURV9CTE9DS106IGBjcmVhdGVCbG9ja2AsXHJcbiAgICBbQ1JFQVRFX0VMRU1FTlRfQkxPQ0tdOiBgY3JlYXRlRWxlbWVudEJsb2NrYCxcclxuICAgIFtDUkVBVEVfVk5PREVdOiBgY3JlYXRlVk5vZGVgLFxyXG4gICAgW0NSRUFURV9FTEVNRU5UX1ZOT0RFXTogYGNyZWF0ZUVsZW1lbnRWTm9kZWAsXHJcbiAgICBbQ1JFQVRFX0NPTU1FTlRdOiBgY3JlYXRlQ29tbWVudFZOb2RlYCxcclxuICAgIFtDUkVBVEVfVEVYVF06IGBjcmVhdGVUZXh0Vk5vZGVgLFxyXG4gICAgW0NSRUFURV9TVEFUSUNdOiBgY3JlYXRlU3RhdGljVk5vZGVgLFxyXG4gICAgW1JFU09MVkVfQ09NUE9ORU5UXTogYHJlc29sdmVDb21wb25lbnRgLFxyXG4gICAgW1JFU09MVkVfRFlOQU1JQ19DT01QT05FTlRdOiBgcmVzb2x2ZUR5bmFtaWNDb21wb25lbnRgLFxyXG4gICAgW1JFU09MVkVfRElSRUNUSVZFXTogYHJlc29sdmVEaXJlY3RpdmVgLFxyXG4gICAgW1JFU09MVkVfRklMVEVSXTogYHJlc29sdmVGaWx0ZXJgLFxyXG4gICAgW1dJVEhfRElSRUNUSVZFU106IGB3aXRoRGlyZWN0aXZlc2AsXHJcbiAgICBbUkVOREVSX0xJU1RdOiBgcmVuZGVyTGlzdGAsXHJcbiAgICBbUkVOREVSX1NMT1RdOiBgcmVuZGVyU2xvdGAsXHJcbiAgICBbQ1JFQVRFX1NMT1RTXTogYGNyZWF0ZVNsb3RzYCxcclxuICAgIFtUT19ESVNQTEFZX1NUUklOR106IGB0b0Rpc3BsYXlTdHJpbmdgLFxyXG4gICAgW01FUkdFX1BST1BTXTogYG1lcmdlUHJvcHNgLFxyXG4gICAgW05PUk1BTElaRV9DTEFTU106IGBub3JtYWxpemVDbGFzc2AsXHJcbiAgICBbTk9STUFMSVpFX1NUWUxFXTogYG5vcm1hbGl6ZVN0eWxlYCxcclxuICAgIFtOT1JNQUxJWkVfUFJPUFNdOiBgbm9ybWFsaXplUHJvcHNgLFxyXG4gICAgW0dVQVJEX1JFQUNUSVZFX1BST1BTXTogYGd1YXJkUmVhY3RpdmVQcm9wc2AsXHJcbiAgICBbVE9fSEFORExFUlNdOiBgdG9IYW5kbGVyc2AsXHJcbiAgICBbQ0FNRUxJWkVdOiBgY2FtZWxpemVgLFxyXG4gICAgW0NBUElUQUxJWkVdOiBgY2FwaXRhbGl6ZWAsXHJcbiAgICBbVE9fSEFORExFUl9LRVldOiBgdG9IYW5kbGVyS2V5YCxcclxuICAgIFtTRVRfQkxPQ0tfVFJBQ0tJTkddOiBgc2V0QmxvY2tUcmFja2luZ2AsXHJcbiAgICBbUFVTSF9TQ09QRV9JRF06IGBwdXNoU2NvcGVJZGAsXHJcbiAgICBbUE9QX1NDT1BFX0lEXTogYHBvcFNjb3BlSWRgLFxyXG4gICAgW1dJVEhfQ1RYXTogYHdpdGhDdHhgLFxyXG4gICAgW1VOUkVGXTogYHVucmVmYCxcclxuICAgIFtJU19SRUZdOiBgaXNSZWZgLFxyXG4gICAgW1dJVEhfTUVNT106IGB3aXRoTWVtb2AsXHJcbiAgICBbSVNfTUVNT19TQU1FXTogYGlzTWVtb1NhbWVgXHJcbn07XHJcbmZ1bmN0aW9uIHJlZ2lzdGVyUnVudGltZUhlbHBlcnMoaGVscGVycykge1xyXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoZWxwZXJzKS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgIGhlbHBlck5hbWVNYXBbc10gPSBoZWxwZXJzW3NdO1xyXG4gICAgfSk7XHJcbn1cblxuLy8gQVNUIFV0aWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gU29tZSBleHByZXNzaW9ucywgZS5nLiBzZXF1ZW5jZSBhbmQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMsIGFyZSBuZXZlclxyXG4vLyBhc3NvY2lhdGVkIHdpdGggdGVtcGxhdGUgbm9kZXMsIHNvIHRoZWlyIHNvdXJjZSBsb2NhdGlvbnMgYXJlIGp1c3QgYSBzdHViLlxyXG4vLyBDb250YWluZXIgdHlwZXMgbGlrZSBDb21wb3VuZEV4cHJlc3Npb24gYWxzbyBkb24ndCBuZWVkIGEgcmVhbCBsb2NhdGlvbi5cclxuY29uc3QgbG9jU3R1YiA9IHtcclxuICAgIHNvdXJjZTogJycsXHJcbiAgICBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDEsIG9mZnNldDogMCB9LFxyXG4gICAgZW5kOiB7IGxpbmU6IDEsIGNvbHVtbjogMSwgb2Zmc2V0OiAwIH1cclxufTtcclxuZnVuY3Rpb24gY3JlYXRlUm9vdChjaGlsZHJlbiwgbG9jID0gbG9jU3R1Yikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAwIC8qIE5vZGVUeXBlcy5ST09UICovLFxyXG4gICAgICAgIGNoaWxkcmVuLFxyXG4gICAgICAgIGhlbHBlcnM6IFtdLFxyXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxyXG4gICAgICAgIGRpcmVjdGl2ZXM6IFtdLFxyXG4gICAgICAgIGhvaXN0czogW10sXHJcbiAgICAgICAgaW1wb3J0czogW10sXHJcbiAgICAgICAgY2FjaGVkOiAwLFxyXG4gICAgICAgIHRlbXBzOiAwLFxyXG4gICAgICAgIGNvZGVnZW5Ob2RlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgbG9jXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVZOb2RlQ2FsbChjb250ZXh0LCB0YWcsIHByb3BzLCBjaGlsZHJlbiwgcGF0Y2hGbGFnLCBkeW5hbWljUHJvcHMsIGRpcmVjdGl2ZXMsIGlzQmxvY2sgPSBmYWxzZSwgZGlzYWJsZVRyYWNraW5nID0gZmFsc2UsIGlzQ29tcG9uZW50ID0gZmFsc2UsIGxvYyA9IGxvY1N0dWIpIHtcclxuICAgIGlmIChjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGlzQmxvY2spIHtcclxuICAgICAgICAgICAgY29udGV4dC5oZWxwZXIoT1BFTl9CTE9DSyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKGdldFZOb2RlQmxvY2tIZWxwZXIoY29udGV4dC5pblNTUiwgaXNDb21wb25lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKGdldFZOb2RlSGVscGVyKGNvbnRleHQuaW5TU1IsIGlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3RpdmVzKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKFdJVEhfRElSRUNUSVZFUyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLyxcclxuICAgICAgICB0YWcsXHJcbiAgICAgICAgcHJvcHMsXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgcGF0Y2hGbGFnLFxyXG4gICAgICAgIGR5bmFtaWNQcm9wcyxcclxuICAgICAgICBkaXJlY3RpdmVzLFxyXG4gICAgICAgIGlzQmxvY2ssXHJcbiAgICAgICAgZGlzYWJsZVRyYWNraW5nLFxyXG4gICAgICAgIGlzQ29tcG9uZW50LFxyXG4gICAgICAgIGxvY1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVBcnJheUV4cHJlc3Npb24oZWxlbWVudHMsIGxvYyA9IGxvY1N0dWIpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTcgLyogTm9kZVR5cGVzLkpTX0FSUkFZX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIGVsZW1lbnRzXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcywgbG9jID0gbG9jU3R1Yikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIHByb3BlcnRpZXNcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAxNiAvKiBOb2RlVHlwZXMuSlNfUFJPUEVSVFkgKi8sXHJcbiAgICAgICAgbG9jOiBsb2NTdHViLFxyXG4gICAgICAgIGtleTogaXNTdHJpbmcoa2V5KSA/IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oa2V5LCB0cnVlKSA6IGtleSxcclxuICAgICAgICB2YWx1ZVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGNvbnRlbnQsIGlzU3RhdGljID0gZmFsc2UsIGxvYyA9IGxvY1N0dWIsIGNvbnN0VHlwZSA9IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgaXNTdGF0aWMsXHJcbiAgICAgICAgY29uc3RUeXBlOiBpc1N0YXRpYyA/IDMgLyogQ29uc3RhbnRUeXBlcy5DQU5fU1RSSU5HSUZZICovIDogY29uc3RUeXBlXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUludGVycG9sYXRpb24oY29udGVudCwgbG9jKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDUgLyogTm9kZVR5cGVzLklOVEVSUE9MQVRJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIGNvbnRlbnQ6IGlzU3RyaW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgID8gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihjb250ZW50LCBmYWxzZSwgbG9jKVxyXG4gICAgICAgICAgICA6IGNvbnRlbnRcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKGNoaWxkcmVuLCBsb2MgPSBsb2NTdHViKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIGNoaWxkcmVuXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNhbGxlZSwgYXJncyA9IFtdLCBsb2MgPSBsb2NTdHViKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDE0IC8qIE5vZGVUeXBlcy5KU19DQUxMX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgbG9jLFxyXG4gICAgICAgIGNhbGxlZSxcclxuICAgICAgICBhcmd1bWVudHM6IGFyZ3NcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKHBhcmFtcywgcmV0dXJucyA9IHVuZGVmaW5lZCwgbmV3bGluZSA9IGZhbHNlLCBpc1Nsb3QgPSBmYWxzZSwgbG9jID0gbG9jU3R1Yikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAxOCAvKiBOb2RlVHlwZXMuSlNfRlVOQ1RJT05fRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgcmV0dXJucyxcclxuICAgICAgICBuZXdsaW5lLFxyXG4gICAgICAgIGlzU2xvdCxcclxuICAgICAgICBsb2NcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgbmV3bGluZSA9IHRydWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTkgLyogTm9kZVR5cGVzLkpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgdGVzdCxcclxuICAgICAgICBjb25zZXF1ZW50LFxyXG4gICAgICAgIGFsdGVybmF0ZSxcclxuICAgICAgICBuZXdsaW5lLFxyXG4gICAgICAgIGxvYzogbG9jU3R1YlxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDYWNoZUV4cHJlc3Npb24oaW5kZXgsIHZhbHVlLCBpc1ZOb2RlID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMjAgLyogTm9kZVR5cGVzLkpTX0NBQ0hFX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgaXNWTm9kZSxcclxuICAgICAgICBsb2M6IGxvY1N0dWJcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQmxvY2tTdGF0ZW1lbnQoYm9keSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAyMSAvKiBOb2RlVHlwZXMuSlNfQkxPQ0tfU1RBVEVNRU5UICovLFxyXG4gICAgICAgIGJvZHksXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVRlbXBsYXRlTGl0ZXJhbChlbGVtZW50cykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAyMiAvKiBOb2RlVHlwZXMuSlNfVEVNUExBVEVfTElURVJBTCAqLyxcclxuICAgICAgICBlbGVtZW50cyxcclxuICAgICAgICBsb2M6IGxvY1N0dWJcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDIzIC8qIE5vZGVUeXBlcy5KU19JRl9TVEFURU1FTlQgKi8sXHJcbiAgICAgICAgdGVzdCxcclxuICAgICAgICBjb25zZXF1ZW50LFxyXG4gICAgICAgIGFsdGVybmF0ZSxcclxuICAgICAgICBsb2M6IGxvY1N0dWJcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb24obGVmdCwgcmlnaHQpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMjQgLyogTm9kZVR5cGVzLkpTX0FTU0lHTk1FTlRfRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICBsZWZ0LFxyXG4gICAgICAgIHJpZ2h0LFxyXG4gICAgICAgIGxvYzogbG9jU3R1YlxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMjUgLyogTm9kZVR5cGVzLkpTX1NFUVVFTkNFX0VYUFJFU1NJT04gKi8sXHJcbiAgICAgICAgZXhwcmVzc2lvbnMsXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVJldHVyblN0YXRlbWVudChyZXR1cm5zKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDI2IC8qIE5vZGVUeXBlcy5KU19SRVRVUk5fU1RBVEVNRU5UICovLFxyXG4gICAgICAgIHJldHVybnMsXHJcbiAgICAgICAgbG9jOiBsb2NTdHViXHJcbiAgICB9O1xyXG59XG5cbmNvbnN0IGlzU3RhdGljRXhwID0gKHApID0+IHAudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gJiYgcC5pc1N0YXRpYztcclxuY29uc3QgaXNCdWlsdEluVHlwZSA9ICh0YWcsIGV4cGVjdGVkKSA9PiB0YWcgPT09IGV4cGVjdGVkIHx8IHRhZyA9PT0gaHlwaGVuYXRlKGV4cGVjdGVkKTtcclxuZnVuY3Rpb24gaXNDb3JlQ29tcG9uZW50KHRhZykge1xyXG4gICAgaWYgKGlzQnVpbHRJblR5cGUodGFnLCAnVGVsZXBvcnQnKSkge1xyXG4gICAgICAgIHJldHVybiBURUxFUE9SVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQnVpbHRJblR5cGUodGFnLCAnU3VzcGVuc2UnKSkge1xyXG4gICAgICAgIHJldHVybiBTVVNQRU5TRTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQnVpbHRJblR5cGUodGFnLCAnS2VlcEFsaXZlJykpIHtcclxuICAgICAgICByZXR1cm4gS0VFUF9BTElWRTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQnVpbHRJblR5cGUodGFnLCAnQmFzZVRyYW5zaXRpb24nKSkge1xyXG4gICAgICAgIHJldHVybiBCQVNFX1RSQU5TSVRJT047XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgbm9uSWRlbnRpZmllclJFID0gL15cXGR8W15cXCRcXHddLztcclxuY29uc3QgaXNTaW1wbGVJZGVudGlmaWVyID0gKG5hbWUpID0+ICFub25JZGVudGlmaWVyUkUudGVzdChuYW1lKTtcclxuY29uc3QgdmFsaWRGaXJzdElkZW50Q2hhclJFID0gL1tBLVphLXpfJFxceEEwLVxcdUZGRkZdLztcclxuY29uc3QgdmFsaWRJZGVudENoYXJSRSA9IC9bXFwuXFw/XFx3JFxceEEwLVxcdUZGRkZdLztcclxuY29uc3Qgd2hpdGVzcGFjZVJFID0gL1xccytbLltdXFxzKnxcXHMqWy5bXVxccysvZztcclxuLyoqXHJcbiAqIFNpbXBsZSBsZXhlciB0byBjaGVjayBpZiBhbiBleHByZXNzaW9uIGlzIGEgbWVtYmVyIGV4cHJlc3Npb24uIFRoaXMgaXNcclxuICogbGF4IGFuZCBvbmx5IGNoZWNrcyB2YWxpZGl0eSBhdCB0aGUgcm9vdCBsZXZlbCAoaS5lLiBkb2VzIG5vdCB2YWxpZGF0ZSBleHBzXHJcbiAqIGluc2lkZSBzcXVhcmUgYnJhY2tldHMpLCBidXQgaXQncyBvayBzaW5jZSB0aGVzZSBhcmUgb25seSB1c2VkIG9uIHRlbXBsYXRlXHJcbiAqIGV4cHJlc3Npb25zIGFuZCBmYWxzZSBwb3NpdGl2ZXMgYXJlIGludmFsaWQgZXhwcmVzc2lvbnMgaW4gdGhlIGZpcnN0IHBsYWNlLlxyXG4gKi9cclxuY29uc3QgaXNNZW1iZXJFeHByZXNzaW9uQnJvd3NlciA9IChwYXRoKSA9PiB7XHJcbiAgICAvLyByZW1vdmUgd2hpdGVzcGFjZXMgYXJvdW5kIC4gb3IgWyBmaXJzdFxyXG4gICAgcGF0aCA9IHBhdGgudHJpbSgpLnJlcGxhY2Uod2hpdGVzcGFjZVJFLCBzID0+IHMudHJpbSgpKTtcclxuICAgIGxldCBzdGF0ZSA9IDAgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5NZW1iZXJFeHAgKi87XHJcbiAgICBsZXQgc3RhdGVTdGFjayA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnRPcGVuQnJhY2tldENvdW50ID0gMDtcclxuICAgIGxldCBjdXJyZW50T3BlblBhcmVuc0NvdW50ID0gMDtcclxuICAgIGxldCBjdXJyZW50U3RyaW5nVHlwZSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGFyID0gcGF0aC5jaGFyQXQoaSk7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICBjYXNlIDAgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5NZW1iZXJFeHAgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJ1snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDEgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5CcmFja2V0cyAqLztcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3BlbkJyYWNrZXRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gJygnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDIgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5QYXJlbnMgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9wZW5QYXJlbnNDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIShpID09PSAwID8gdmFsaWRGaXJzdElkZW50Q2hhclJFIDogdmFsaWRJZGVudENoYXJSRSkudGVzdChjaGFyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5CcmFja2V0cyAqLzpcclxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSBgJ2AgfHwgY2hhciA9PT0gYFwiYCB8fCBjaGFyID09PSAnYCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLnB1c2goc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMyAvKiBNZW1iZXJFeHBMZXhTdGF0ZS5pblN0cmluZyAqLztcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyaW5nVHlwZSA9IGNoYXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSBgW2ApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3BlbkJyYWNrZXRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gYF1gKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWN1cnJlbnRPcGVuQnJhY2tldENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyIC8qIE1lbWJlckV4cExleFN0YXRlLmluUGFyZW5zICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09IGAnYCB8fCBjaGFyID09PSBgXCJgIHx8IGNoYXIgPT09ICdgJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAzIC8qIE1lbWJlckV4cExleFN0YXRlLmluU3RyaW5nICovO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHJpbmdUeXBlID0gY2hhcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09IGAoYCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuUGFyZW5zQ291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09IGApYCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBleHAgZW5kcyBhcyBhIGNhbGwgdGhlbiBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgdmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gcGF0aC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWN1cnJlbnRPcGVuUGFyZW5zQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDMgLyogTWVtYmVyRXhwTGV4U3RhdGUuaW5TdHJpbmcgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gY3VycmVudFN0cmluZ1R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmluZ1R5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICFjdXJyZW50T3BlbkJyYWNrZXRDb3VudCAmJiAhY3VycmVudE9wZW5QYXJlbnNDb3VudDtcclxufTtcclxuY29uc3QgaXNNZW1iZXJFeHByZXNzaW9uTm9kZSA9IE5PT1BcclxuICAgIDtcclxuY29uc3QgaXNNZW1iZXJFeHByZXNzaW9uID0gaXNNZW1iZXJFeHByZXNzaW9uQnJvd3NlclxyXG4gICAgO1xyXG5mdW5jdGlvbiBnZXRJbm5lclJhbmdlKGxvYywgb2Zmc2V0LCBsZW5ndGgpIHtcclxuICAgIGNvbnN0IHNvdXJjZSA9IGxvYy5zb3VyY2Uuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xyXG4gICAgY29uc3QgbmV3TG9jID0ge1xyXG4gICAgICAgIHNvdXJjZSxcclxuICAgICAgICBzdGFydDogYWR2YW5jZVBvc2l0aW9uV2l0aENsb25lKGxvYy5zdGFydCwgbG9jLnNvdXJjZSwgb2Zmc2V0KSxcclxuICAgICAgICBlbmQ6IGxvYy5lbmRcclxuICAgIH07XHJcbiAgICBpZiAobGVuZ3RoICE9IG51bGwpIHtcclxuICAgICAgICBuZXdMb2MuZW5kID0gYWR2YW5jZVBvc2l0aW9uV2l0aENsb25lKGxvYy5zdGFydCwgbG9jLnNvdXJjZSwgb2Zmc2V0ICsgbGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdMb2M7XHJcbn1cclxuZnVuY3Rpb24gYWR2YW5jZVBvc2l0aW9uV2l0aENsb25lKHBvcywgc291cmNlLCBudW1iZXJPZkNoYXJhY3RlcnMgPSBzb3VyY2UubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uKGV4dGVuZCh7fSwgcG9zKSwgc291cmNlLCBudW1iZXJPZkNoYXJhY3RlcnMpO1xyXG59XHJcbi8vIGFkdmFuY2UgYnkgbXV0YXRpb24gd2l0aG91dCBjbG9uaW5nIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyksIHNpbmNlIHRoaXNcclxuLy8gZ2V0cyBjYWxsZWQgYSBsb3QgaW4gdGhlIHBhcnNlclxyXG5mdW5jdGlvbiBhZHZhbmNlUG9zaXRpb25XaXRoTXV0YXRpb24ocG9zLCBzb3VyY2UsIG51bWJlck9mQ2hhcmFjdGVycyA9IHNvdXJjZS5sZW5ndGgpIHtcclxuICAgIGxldCBsaW5lc0NvdW50ID0gMDtcclxuICAgIGxldCBsYXN0TmV3TGluZVBvcyA9IC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYXJhY3RlcnM7IGkrKykge1xyXG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpKSA9PT0gMTAgLyogbmV3bGluZSBjaGFyIGNvZGUgKi8pIHtcclxuICAgICAgICAgICAgbGluZXNDb3VudCsrO1xyXG4gICAgICAgICAgICBsYXN0TmV3TGluZVBvcyA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcG9zLm9mZnNldCArPSBudW1iZXJPZkNoYXJhY3RlcnM7XHJcbiAgICBwb3MubGluZSArPSBsaW5lc0NvdW50O1xyXG4gICAgcG9zLmNvbHVtbiA9XHJcbiAgICAgICAgbGFzdE5ld0xpbmVQb3MgPT09IC0xXHJcbiAgICAgICAgICAgID8gcG9zLmNvbHVtbiArIG51bWJlck9mQ2hhcmFjdGVyc1xyXG4gICAgICAgICAgICA6IG51bWJlck9mQ2hhcmFjdGVycyAtIGxhc3ROZXdMaW5lUG9zO1xyXG4gICAgcmV0dXJuIHBvcztcclxufVxyXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtc2cpIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKCFjb25kaXRpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8IGB1bmV4cGVjdGVkIGNvbXBpbGVyIGNvbmRpdGlvbmApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGZpbmREaXIobm9kZSwgbmFtZSwgYWxsb3dFbXB0eSA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwID0gbm9kZS5wcm9wc1tpXTtcclxuICAgICAgICBpZiAocC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICAgICAgKGFsbG93RW1wdHkgfHwgcC5leHApICYmXHJcbiAgICAgICAgICAgIChpc1N0cmluZyhuYW1lKSA/IHAubmFtZSA9PT0gbmFtZSA6IG5hbWUudGVzdChwLm5hbWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZmluZFByb3Aobm9kZSwgbmFtZSwgZHluYW1pY09ubHkgPSBmYWxzZSwgYWxsb3dFbXB0eSA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwID0gbm9kZS5wcm9wc1tpXTtcclxuICAgICAgICBpZiAocC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8pIHtcclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNPbmx5KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChwLm5hbWUgPT09IG5hbWUgJiYgKHAudmFsdWUgfHwgYWxsb3dFbXB0eSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHAubmFtZSA9PT0gJ2JpbmQnICYmXHJcbiAgICAgICAgICAgIChwLmV4cCB8fCBhbGxvd0VtcHR5KSAmJlxyXG4gICAgICAgICAgICBpc1N0YXRpY0FyZ09mKHAuYXJnLCBuYW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNTdGF0aWNBcmdPZihhcmcsIG5hbWUpIHtcclxuICAgIHJldHVybiAhIShhcmcgJiYgaXNTdGF0aWNFeHAoYXJnKSAmJiBhcmcuY29udGVudCA9PT0gbmFtZSk7XHJcbn1cclxuZnVuY3Rpb24gaGFzRHluYW1pY0tleVZCaW5kKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnByb3BzLnNvbWUocCA9PiBwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJlxyXG4gICAgICAgIHAubmFtZSA9PT0gJ2JpbmQnICYmXHJcbiAgICAgICAgKCFwLmFyZyB8fCAvLyB2LWJpbmQ9XCJvYmpcIlxyXG4gICAgICAgICAgICBwLmFyZy50eXBlICE9PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyB8fCAvLyB2LWJpbmQ6W19jdHguZm9vXVxyXG4gICAgICAgICAgICAhcC5hcmcuaXNTdGF0aWMpIC8vIHYtYmluZDpbZm9vXVxyXG4gICAgKTtcclxufVxyXG5mdW5jdGlvbiBpc1RleHQobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLyB8fCBub2RlLnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi87XHJcbn1cclxuZnVuY3Rpb24gaXNWU2xvdChwKSB7XHJcbiAgICByZXR1cm4gcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiYgcC5uYW1lID09PSAnc2xvdCc7XHJcbn1cclxuZnVuY3Rpb24gaXNUZW1wbGF0ZU5vZGUobm9kZSkge1xyXG4gICAgcmV0dXJuIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiYgbm9kZS50YWdUeXBlID09PSAzIC8qIEVsZW1lbnRUeXBlcy5URU1QTEFURSAqLyk7XHJcbn1cclxuZnVuY3Rpb24gaXNTbG90T3V0bGV0KG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiYgbm9kZS50YWdUeXBlID09PSAyIC8qIEVsZW1lbnRUeXBlcy5TTE9UICovO1xyXG59XHJcbmZ1bmN0aW9uIGdldFZOb2RlSGVscGVyKHNzciwgaXNDb21wb25lbnQpIHtcclxuICAgIHJldHVybiBzc3IgfHwgaXNDb21wb25lbnQgPyBDUkVBVEVfVk5PREUgOiBDUkVBVEVfRUxFTUVOVF9WTk9ERTtcclxufVxyXG5mdW5jdGlvbiBnZXRWTm9kZUJsb2NrSGVscGVyKHNzciwgaXNDb21wb25lbnQpIHtcclxuICAgIHJldHVybiBzc3IgfHwgaXNDb21wb25lbnQgPyBDUkVBVEVfQkxPQ0sgOiBDUkVBVEVfRUxFTUVOVF9CTE9DSztcclxufVxyXG5jb25zdCBwcm9wc0hlbHBlclNldCA9IG5ldyBTZXQoW05PUk1BTElaRV9QUk9QUywgR1VBUkRfUkVBQ1RJVkVfUFJPUFNdKTtcclxuZnVuY3Rpb24gZ2V0VW5ub3JtYWxpemVkUHJvcHMocHJvcHMsIGNhbGxQYXRoID0gW10pIHtcclxuICAgIGlmIChwcm9wcyAmJlxyXG4gICAgICAgICFpc1N0cmluZyhwcm9wcykgJiZcclxuICAgICAgICBwcm9wcy50eXBlID09PSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGVlID0gcHJvcHMuY2FsbGVlO1xyXG4gICAgICAgIGlmICghaXNTdHJpbmcoY2FsbGVlKSAmJiBwcm9wc0hlbHBlclNldC5oYXMoY2FsbGVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0VW5ub3JtYWxpemVkUHJvcHMocHJvcHMuYXJndW1lbnRzWzBdLCBjYWxsUGF0aC5jb25jYXQocHJvcHMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3Byb3BzLCBjYWxsUGF0aF07XHJcbn1cclxuZnVuY3Rpb24gaW5qZWN0UHJvcChub2RlLCBwcm9wLCBjb250ZXh0KSB7XHJcbiAgICBsZXQgcHJvcHNXaXRoSW5qZWN0aW9uO1xyXG4gICAgLyoqXHJcbiAgICAgKiAxLiBtZXJnZVByb3BzKC4uLilcclxuICAgICAqIDIuIHRvSGFuZGxlcnMoLi4uKVxyXG4gICAgICogMy4gbm9ybWFsaXplUHJvcHMoLi4uKVxyXG4gICAgICogNC4gbm9ybWFsaXplUHJvcHMoZ3VhcmRSZWFjdGl2ZVByb3BzKC4uLikpXHJcbiAgICAgKlxyXG4gICAgICogd2UgbmVlZCB0byBnZXQgdGhlIHJlYWwgcHJvcHMgYmVmb3JlIG5vcm1hbGl6YXRpb25cclxuICAgICAqL1xyXG4gICAgbGV0IHByb3BzID0gbm9kZS50eXBlID09PSAxMyAvKiBOb2RlVHlwZXMuVk5PREVfQ0FMTCAqLyA/IG5vZGUucHJvcHMgOiBub2RlLmFyZ3VtZW50c1syXTtcclxuICAgIGxldCBjYWxsUGF0aCA9IFtdO1xyXG4gICAgbGV0IHBhcmVudENhbGw7XHJcbiAgICBpZiAocHJvcHMgJiZcclxuICAgICAgICAhaXNTdHJpbmcocHJvcHMpICYmXHJcbiAgICAgICAgcHJvcHMudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGNvbnN0IHJldCA9IGdldFVubm9ybWFsaXplZFByb3BzKHByb3BzKTtcclxuICAgICAgICBwcm9wcyA9IHJldFswXTtcclxuICAgICAgICBjYWxsUGF0aCA9IHJldFsxXTtcclxuICAgICAgICBwYXJlbnRDYWxsID0gY2FsbFBhdGhbY2FsbFBhdGgubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMgPT0gbnVsbCB8fCBpc1N0cmluZyhwcm9wcykpIHtcclxuICAgICAgICBwcm9wc1dpdGhJbmplY3Rpb24gPSBjcmVhdGVPYmplY3RFeHByZXNzaW9uKFtwcm9wXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy50eXBlID09PSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgLy8gbWVyZ2VkIHByb3BzLi4uIGFkZCBvdXJzXHJcbiAgICAgICAgLy8gb25seSBpbmplY3Qga2V5IHRvIG9iamVjdCBsaXRlcmFsIGlmIGl0J3MgdGhlIGZpcnN0IGFyZ3VtZW50IHNvIHRoYXRcclxuICAgICAgICAvLyBpZiBkb2Vzbid0IG92ZXJyaWRlIHVzZXIgcHJvdmlkZWQga2V5c1xyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gcHJvcHMuYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIGlmICghaXNTdHJpbmcoZmlyc3QpICYmIGZpcnN0LnR5cGUgPT09IDE1IC8qIE5vZGVUeXBlcy5KU19PQkpFQ1RfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICBmaXJzdC5wcm9wZXJ0aWVzLnVuc2hpZnQocHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuY2FsbGVlID09PSBUT19IQU5ETEVSUykge1xyXG4gICAgICAgICAgICAgICAgLy8gIzIzNjZcclxuICAgICAgICAgICAgICAgIHByb3BzV2l0aEluamVjdGlvbiA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKE1FUkdFX1BST1BTKSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oW3Byb3BdKSxcclxuICAgICAgICAgICAgICAgICAgICBwcm9wc1xyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5hcmd1bWVudHMudW5zaGlmdChjcmVhdGVPYmplY3RFeHByZXNzaW9uKFtwcm9wXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICFwcm9wc1dpdGhJbmplY3Rpb24gJiYgKHByb3BzV2l0aEluamVjdGlvbiA9IHByb3BzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByb3BzLnR5cGUgPT09IDE1IC8qIE5vZGVUeXBlcy5KU19PQkpFQ1RfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGxldCBhbHJlYWR5RXhpc3RzID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgZXhpc3Rpbmcga2V5IHRvIGF2b2lkIG92ZXJyaWRpbmcgdXNlciBwcm92aWRlZCBrZXlzXHJcbiAgICAgICAgaWYgKHByb3Aua2V5LnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BLZXlOYW1lID0gcHJvcC5rZXkuY29udGVudDtcclxuICAgICAgICAgICAgYWxyZWFkeUV4aXN0cyA9IHByb3BzLnByb3BlcnRpZXMuc29tZShwID0+IHAua2V5LnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmXHJcbiAgICAgICAgICAgICAgICBwLmtleS5jb250ZW50ID09PSBwcm9wS2V5TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWxyZWFkeUV4aXN0cykge1xyXG4gICAgICAgICAgICBwcm9wcy5wcm9wZXJ0aWVzLnVuc2hpZnQocHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzV2l0aEluamVjdGlvbiA9IHByb3BzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gc2luZ2xlIHYtYmluZCB3aXRoIGV4cHJlc3Npb24sIHJldHVybiBhIG1lcmdlZCByZXBsYWNlbWVudFxyXG4gICAgICAgIHByb3BzV2l0aEluamVjdGlvbiA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKE1FUkdFX1BST1BTKSwgW1xyXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uKFtwcm9wXSksXHJcbiAgICAgICAgICAgIHByb3BzXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgbmVzdGVkIGhlbHBlciBjYWxsLCBlLmcuIGBub3JtYWxpemVQcm9wcyhndWFyZFJlYWN0aXZlUHJvcHMocHJvcHMpKWAsXHJcbiAgICAgICAgLy8gaXQgd2lsbCBiZSByZXdyaXR0ZW4gYXMgYG5vcm1hbGl6ZVByb3BzKG1lcmdlUHJvcHMoeyBrZXk6IDAgfSwgcHJvcHMpKWAsXHJcbiAgICAgICAgLy8gdGhlIGBndWFyZFJlYWN0aXZlUHJvcHNgIHdpbGwgbm8gbG9uZ2VyIGJlIG5lZWRlZFxyXG4gICAgICAgIGlmIChwYXJlbnRDYWxsICYmIHBhcmVudENhbGwuY2FsbGVlID09PSBHVUFSRF9SRUFDVElWRV9QUk9QUykge1xyXG4gICAgICAgICAgICBwYXJlbnRDYWxsID0gY2FsbFBhdGhbY2FsbFBhdGgubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMTMgLyogTm9kZVR5cGVzLlZOT0RFX0NBTEwgKi8pIHtcclxuICAgICAgICBpZiAocGFyZW50Q2FsbCkge1xyXG4gICAgICAgICAgICBwYXJlbnRDYWxsLmFyZ3VtZW50c1swXSA9IHByb3BzV2l0aEluamVjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGUucHJvcHMgPSBwcm9wc1dpdGhJbmplY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHBhcmVudENhbGwpIHtcclxuICAgICAgICAgICAgcGFyZW50Q2FsbC5hcmd1bWVudHNbMF0gPSBwcm9wc1dpdGhJbmplY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50c1syXSA9IHByb3BzV2l0aEluamVjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdG9WYWxpZEFzc2V0SWQobmFtZSwgdHlwZSkge1xyXG4gICAgLy8gc2VlIGlzc3VlIzQ0MjIsIHdlIG5lZWQgYWRkaW5nIGlkZW50aWZpZXIgb24gdmFsaWRBc3NldElkIGlmIHZhcmlhYmxlIGBuYW1lYCBoYXMgc3BlY2lmaWMgY2hhcmFjdGVyXHJcbiAgICByZXR1cm4gYF8ke3R5cGV9XyR7bmFtZS5yZXBsYWNlKC9bXlxcd10vZywgKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpID0+IHtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVmFsdWUgPT09ICctJyA/ICdfJyA6IG5hbWUuY2hhckNvZGVBdChyZXBsYWNlVmFsdWUpLnRvU3RyaW5nKCk7XHJcbiAgICB9KX1gO1xyXG59XHJcbi8vIENoZWNrIGlmIGEgbm9kZSBjb250YWlucyBleHByZXNzaW9ucyB0aGF0IHJlZmVyZW5jZSBjdXJyZW50IGNvbnRleHQgc2NvcGUgaWRzXHJcbmZ1bmN0aW9uIGhhc1Njb3BlUmVmKG5vZGUsIGlkcykge1xyXG4gICAgaWYgKCFub2RlIHx8IE9iamVjdC5rZXlzKGlkcykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcclxuICAgICAgICBjYXNlIDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi86XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5wcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGFzU2NvcGVSZWYocC5hcmcsIGlkcykgfHwgaGFzU2NvcGVSZWYocC5leHAsIGlkcykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uc29tZShjID0+IGhhc1Njb3BlUmVmKGMsIGlkcykpO1xyXG4gICAgICAgIGNhc2UgMTEgLyogTm9kZVR5cGVzLkZPUiAqLzpcclxuICAgICAgICAgICAgaWYgKGhhc1Njb3BlUmVmKG5vZGUuc291cmNlLCBpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5zb21lKGMgPT4gaGFzU2NvcGVSZWYoYywgaWRzKSk7XHJcbiAgICAgICAgY2FzZSA5IC8qIE5vZGVUeXBlcy5JRiAqLzpcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYnJhbmNoZXMuc29tZShiID0+IGhhc1Njb3BlUmVmKGIsIGlkcykpO1xyXG4gICAgICAgIGNhc2UgMTAgLyogTm9kZVR5cGVzLklGX0JSQU5DSCAqLzpcclxuICAgICAgICAgICAgaWYgKGhhc1Njb3BlUmVmKG5vZGUuY29uZGl0aW9uLCBpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5zb21lKGMgPT4gaGFzU2NvcGVSZWYoYywgaWRzKSk7XHJcbiAgICAgICAgY2FzZSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgcmV0dXJuICghbm9kZS5pc1N0YXRpYyAmJlxyXG4gICAgICAgICAgICAgICAgaXNTaW1wbGVJZGVudGlmaWVyKG5vZGUuY29udGVudCkgJiZcclxuICAgICAgICAgICAgICAgICEhaWRzW25vZGUuY29udGVudF0pO1xyXG4gICAgICAgIGNhc2UgOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uc29tZShjID0+IGlzT2JqZWN0KGMpICYmIGhhc1Njb3BlUmVmKGMsIGlkcykpO1xyXG4gICAgICAgIGNhc2UgNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLzpcclxuICAgICAgICBjYXNlIDEyIC8qIE5vZGVUeXBlcy5URVhUX0NBTEwgKi86XHJcbiAgICAgICAgICAgIHJldHVybiBoYXNTY29wZVJlZihub2RlLmNvbnRlbnQsIGlkcyk7XHJcbiAgICAgICAgY2FzZSAyIC8qIE5vZGVUeXBlcy5URVhUICovOlxyXG4gICAgICAgIGNhc2UgMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLzpcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIDtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldE1lbW9lZFZOb2RlQ2FsbChub2RlKSB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovICYmIG5vZGUuY2FsbGVlID09PSBXSVRIX01FTU8pIHtcclxuICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHNbMV0ucmV0dXJucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG1ha2VCbG9jayhub2RlLCB7IGhlbHBlciwgcmVtb3ZlSGVscGVyLCBpblNTUiB9KSB7XHJcbiAgICBpZiAoIW5vZGUuaXNCbG9jaykge1xyXG4gICAgICAgIG5vZGUuaXNCbG9jayA9IHRydWU7XHJcbiAgICAgICAgcmVtb3ZlSGVscGVyKGdldFZOb2RlSGVscGVyKGluU1NSLCBub2RlLmlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgaGVscGVyKE9QRU5fQkxPQ0spO1xyXG4gICAgICAgIGhlbHBlcihnZXRWTm9kZUJsb2NrSGVscGVyKGluU1NSLCBub2RlLmlzQ29tcG9uZW50KSk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgZGVwcmVjYXRpb25EYXRhID0ge1xyXG4gICAgW1wiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGBQbGF0Zm9ybS1uYXRpdmUgZWxlbWVudHMgd2l0aCBcImlzXCIgcHJvcCB3aWxsIG5vIGxvbmdlciBiZSBgICtcclxuICAgICAgICAgICAgYHRyZWF0ZWQgYXMgY29tcG9uZW50cyBpbiBWdWUgMyB1bmxlc3MgdGhlIFwiaXNcIiB2YWx1ZSBpcyBleHBsaWNpdGx5IGAgK1xyXG4gICAgICAgICAgICBgcHJlZml4ZWQgd2l0aCBcInZ1ZTpcIi5gLFxyXG4gICAgICAgIGxpbms6IGBodHRwczovL3YzLW1pZ3JhdGlvbi52dWVqcy5vcmcvYnJlYWtpbmctY2hhbmdlcy9jdXN0b20tZWxlbWVudHMtaW50ZXJvcC5odG1sYFxyXG4gICAgfSxcclxuICAgIFtcIkNPTVBJTEVSX1ZfQklORF9TWU5DXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9TWU5DICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGtleSA9PiBgLnN5bmMgbW9kaWZpZXIgZm9yIHYtYmluZCBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugdi1tb2RlbCB3aXRoIGAgK1xyXG4gICAgICAgICAgICBgYXJndW1lbnQgaW5zdGVhZC4gXFxgdi1iaW5kOiR7a2V5fS5zeW5jXFxgIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGAgK1xyXG4gICAgICAgICAgICBgXFxgdi1tb2RlbDoke2tleX1cXGAuYCxcclxuICAgICAgICBsaW5rOiBgaHR0cHM6Ly92My1taWdyYXRpb24udnVlanMub3JnL2JyZWFraW5nLWNoYW5nZXMvdi1tb2RlbC5odG1sYFxyXG4gICAgfSxcclxuICAgIFtcIkNPTVBJTEVSX1ZfQklORF9QUk9QXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9QUk9QICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGAucHJvcCBtb2RpZmllciBmb3Igdi1iaW5kIGhhcyBiZWVuIHJlbW92ZWQgYW5kIG5vIGxvbmdlciBuZWNlc3NhcnkuIGAgK1xyXG4gICAgICAgICAgICBgVnVlIDMgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCBhIGJpbmRpbmcgYXMgRE9NIHByb3BlcnR5IHdoZW4gYXBwcm9wcmlhdGUuYFxyXG4gICAgfSxcclxuICAgIFtcIkNPTVBJTEVSX1ZfQklORF9PQkpFQ1RfT1JERVJcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9CSU5EX09CSkVDVF9PUkRFUiAqL106IHtcclxuICAgICAgICBtZXNzYWdlOiBgdi1iaW5kPVwib2JqXCIgdXNhZ2UgaXMgbm93IG9yZGVyIHNlbnNpdGl2ZSBhbmQgYmVoYXZlcyBsaWtlIEphdmFTY3JpcHQgYCArXHJcbiAgICAgICAgICAgIGBvYmplY3Qgc3ByZWFkOiBpdCB3aWxsIG5vdyBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcgbm9uLW1lcmdlYWJsZSBhdHRyaWJ1dGUgYCArXHJcbiAgICAgICAgICAgIGB0aGF0IGFwcGVhcnMgYmVmb3JlIHYtYmluZCBpbiB0aGUgY2FzZSBvZiBjb25mbGljdC4gYCArXHJcbiAgICAgICAgICAgIGBUbyByZXRhaW4gMi54IGJlaGF2aW9yLCBtb3ZlIHYtYmluZCB0byBtYWtlIGl0IHRoZSBmaXJzdCBhdHRyaWJ1dGUuIGAgK1xyXG4gICAgICAgICAgICBgWW91IGNhbiBhbHNvIHN1cHByZXNzIHRoaXMgd2FybmluZyBpZiB0aGUgdXNhZ2UgaXMgaW50ZW5kZWQuYCxcclxuICAgICAgICBsaW5rOiBgaHR0cHM6Ly92My1taWdyYXRpb24udnVlanMub3JnL2JyZWFraW5nLWNoYW5nZXMvdi1iaW5kLmh0bWxgXHJcbiAgICB9LFxyXG4gICAgW1wiQ09NUElMRVJfVl9PTl9OQVRJVkVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9PTl9OQVRJVkUgKi9dOiB7XHJcbiAgICAgICAgbWVzc2FnZTogYC5uYXRpdmUgbW9kaWZpZXIgZm9yIHYtb24gaGFzIGJlZW4gcmVtb3ZlZCBhcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL3Ytb24tbmF0aXZlLW1vZGlmaWVyLXJlbW92ZWQuaHRtbGBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9WX0lGX1ZfRk9SX1BSRUNFREVOQ0VcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9JRl9WX0ZPUl9QUkVDRURFTkNFICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGB2LWlmIC8gdi1mb3IgcHJlY2VkZW5jZSB3aGVuIHVzZWQgb24gdGhlIHNhbWUgZWxlbWVudCBoYXMgY2hhbmdlZCBgICtcclxuICAgICAgICAgICAgYGluIFZ1ZSAzOiB2LWlmIG5vdyB0YWtlcyBoaWdoZXIgcHJlY2VkZW5jZSBhbmQgd2lsbCBubyBsb25nZXIgaGF2ZSBgICtcclxuICAgICAgICAgICAgYGFjY2VzcyB0byB2LWZvciBzY29wZSB2YXJpYWJsZXMuIEl0IGlzIGJlc3QgdG8gYXZvaWQgdGhlIGFtYmlndWl0eSBgICtcclxuICAgICAgICAgICAgYHdpdGggPHRlbXBsYXRlPiB0YWdzIG9yIHVzZSBhIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgZmlsdGVycyB2LWZvciBgICtcclxuICAgICAgICAgICAgYGRhdGEgc291cmNlLmAsXHJcbiAgICAgICAgbGluazogYGh0dHBzOi8vdjMtbWlncmF0aW9uLnZ1ZWpzLm9yZy9icmVha2luZy1jaGFuZ2VzL3YtaWYtdi1mb3IuaHRtbGBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9OQVRJVkVfVEVNUExBVEVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGA8dGVtcGxhdGU+IHdpdGggbm8gc3BlY2lhbCBkaXJlY3RpdmVzIHdpbGwgcmVuZGVyIGFzIGEgbmF0aXZlIHRlbXBsYXRlIGAgK1xyXG4gICAgICAgICAgICBgZWxlbWVudCBpbnN0ZWFkIG9mIGl0cyBpbm5lciBjb250ZW50IGluIFZ1ZSAzLmBcclxuICAgIH0sXHJcbiAgICBbXCJDT01QSUxFUl9JTkxJTkVfVEVNUExBVEVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSU5MSU5FX1RFTVBMQVRFICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGBcImlubGluZS10ZW1wbGF0ZVwiIGhhcyBiZWVuIHJlbW92ZWQgaW4gVnVlIDMuYCxcclxuICAgICAgICBsaW5rOiBgaHR0cHM6Ly92My1taWdyYXRpb24udnVlanMub3JnL2JyZWFraW5nLWNoYW5nZXMvaW5saW5lLXRlbXBsYXRlLWF0dHJpYnV0ZS5odG1sYFxyXG4gICAgfSxcclxuICAgIFtcIkNPTVBJTEVSX0ZJTFRFUlwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9GSUxURVJTICovXToge1xyXG4gICAgICAgIG1lc3NhZ2U6IGBmaWx0ZXJzIGhhdmUgYmVlbiByZW1vdmVkIGluIFZ1ZSAzLiBgICtcclxuICAgICAgICAgICAgYFRoZSBcInxcIiBzeW1ib2wgd2lsbCBiZSB0cmVhdGVkIGFzIG5hdGl2ZSBKYXZhU2NyaXB0IGJpdHdpc2UgT1Igb3BlcmF0b3IuIGAgK1xyXG4gICAgICAgICAgICBgVXNlIG1ldGhvZCBjYWxscyBvciBjb21wdXRlZCBwcm9wZXJ0aWVzIGluc3RlYWQuYCxcclxuICAgICAgICBsaW5rOiBgaHR0cHM6Ly92My1taWdyYXRpb24udnVlanMub3JnL2JyZWFraW5nLWNoYW5nZXMvZmlsdGVycy5odG1sYFxyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBnZXRDb21wYXRWYWx1ZShrZXksIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1xyXG4gICAgICAgID8gY29udGV4dC5vcHRpb25zLmNvbXBhdENvbmZpZ1xyXG4gICAgICAgIDogY29udGV4dC5jb21wYXRDb25maWc7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZyAmJiBjb25maWdba2V5XTtcclxuICAgIGlmIChrZXkgPT09ICdNT0RFJykge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSB8fCAzOyAvLyBjb21waWxlciBkZWZhdWx0cyB0byB2MyBiZWhhdmlvclxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29tcGF0RW5hYmxlZChrZXksIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBnZXRDb21wYXRWYWx1ZSgnTU9ERScsIGNvbnRleHQpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBnZXRDb21wYXRWYWx1ZShrZXksIGNvbnRleHQpO1xyXG4gICAgLy8gaW4gdjMgbW9kZSwgb25seSBlbmFibGUgaWYgZXhwbGljaXRseSBzZXQgdG8gdHJ1ZVxyXG4gICAgLy8gb3RoZXJ3aXNlIGVuYWJsZSBmb3IgYW55IG5vbi1mYWxzZSB2YWx1ZVxyXG4gICAgcmV0dXJuIG1vZGUgPT09IDMgPyB2YWx1ZSA9PT0gdHJ1ZSA6IHZhbHVlICE9PSBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0NvbXBhdEVuYWJsZWQoa2V5LCBjb250ZXh0LCBsb2MsIC4uLmFyZ3MpIHtcclxuICAgIGNvbnN0IGVuYWJsZWQgPSBpc0NvbXBhdEVuYWJsZWQoa2V5LCBjb250ZXh0KTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgZW5hYmxlZCkge1xyXG4gICAgICAgIHdhcm5EZXByZWNhdGlvbihrZXksIGNvbnRleHQsIGxvYywgLi4uYXJncyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW5hYmxlZDtcclxufVxyXG5mdW5jdGlvbiB3YXJuRGVwcmVjYXRpb24oa2V5LCBjb250ZXh0LCBsb2MsIC4uLmFyZ3MpIHtcclxuICAgIGNvbnN0IHZhbCA9IGdldENvbXBhdFZhbHVlKGtleSwgY29udGV4dCk7XHJcbiAgICBpZiAodmFsID09PSAnc3VwcHJlc3Mtd2FybmluZycpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IG1lc3NhZ2UsIGxpbmsgfSA9IGRlcHJlY2F0aW9uRGF0YVtrZXldO1xyXG4gICAgY29uc3QgbXNnID0gYChkZXByZWNhdGlvbiAke2tleX0pICR7dHlwZW9mIG1lc3NhZ2UgPT09ICdmdW5jdGlvbicgPyBtZXNzYWdlKC4uLmFyZ3MpIDogbWVzc2FnZX0ke2xpbmsgPyBgXFxuICBEZXRhaWxzOiAke2xpbmt9YCA6IGBgfWA7XHJcbiAgICBjb25zdCBlcnIgPSBuZXcgU3ludGF4RXJyb3IobXNnKTtcclxuICAgIGVyci5jb2RlID0ga2V5O1xyXG4gICAgaWYgKGxvYylcclxuICAgICAgICBlcnIubG9jID0gbG9jO1xyXG4gICAgY29udGV4dC5vbldhcm4oZXJyKTtcclxufVxuXG4vLyBUaGUgZGVmYXVsdCBkZWNvZGVyIG9ubHkgcHJvdmlkZXMgZXNjYXBlcyBmb3IgY2hhcmFjdGVycyByZXNlcnZlZCBhcyBwYXJ0IG9mXHJcbi8vIHRoZSB0ZW1wbGF0ZSBzeW50YXgsIGFuZCBpcyBvbmx5IHVzZWQgaWYgdGhlIGN1c3RvbSByZW5kZXJlciBkaWQgbm90IHByb3ZpZGVcclxuLy8gYSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWNvZGVyLlxyXG5jb25zdCBkZWNvZGVSRSA9IC8mKGd0fGx0fGFtcHxhcG9zfHF1b3QpOy9nO1xyXG5jb25zdCBkZWNvZGVNYXAgPSB7XHJcbiAgICBndDogJz4nLFxyXG4gICAgbHQ6ICc8JyxcclxuICAgIGFtcDogJyYnLFxyXG4gICAgYXBvczogXCInXCIsXHJcbiAgICBxdW90OiAnXCInXHJcbn07XHJcbmNvbnN0IGRlZmF1bHRQYXJzZXJPcHRpb25zID0ge1xyXG4gICAgZGVsaW1pdGVyczogW2B7e2AsIGB9fWBdLFxyXG4gICAgZ2V0TmFtZXNwYWNlOiAoKSA9PiAwIC8qIE5hbWVzcGFjZXMuSFRNTCAqLyxcclxuICAgIGdldFRleHRNb2RlOiAoKSA9PiAwIC8qIFRleHRNb2Rlcy5EQVRBICovLFxyXG4gICAgaXNWb2lkVGFnOiBOTyxcclxuICAgIGlzUHJlVGFnOiBOTyxcclxuICAgIGlzQ3VzdG9tRWxlbWVudDogTk8sXHJcbiAgICBkZWNvZGVFbnRpdGllczogKHJhd1RleHQpID0+IHJhd1RleHQucmVwbGFjZShkZWNvZGVSRSwgKF8sIHAxKSA9PiBkZWNvZGVNYXBbcDFdKSxcclxuICAgIG9uRXJyb3I6IGRlZmF1bHRPbkVycm9yLFxyXG4gICAgb25XYXJuOiBkZWZhdWx0T25XYXJuLFxyXG4gICAgY29tbWVudHM6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG59O1xyXG5mdW5jdGlvbiBiYXNlUGFyc2UoY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlUGFyc2VyQ29udGV4dChjb250ZW50LCBvcHRpb25zKTtcclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJvb3QocGFyc2VDaGlsZHJlbihjb250ZXh0LCAwIC8qIFRleHRNb2Rlcy5EQVRBICovLCBbXSksIGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydCkpO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVBhcnNlckNvbnRleHQoY29udGVudCwgcmF3T3B0aW9ucykge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdFBhcnNlck9wdGlvbnMpO1xyXG4gICAgbGV0IGtleTtcclxuICAgIGZvciAoa2V5IGluIHJhd09wdGlvbnMpIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgb3B0aW9uc1trZXldID1cclxuICAgICAgICAgICAgcmF3T3B0aW9uc1trZXldID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gZGVmYXVsdFBhcnNlck9wdGlvbnNba2V5XVxyXG4gICAgICAgICAgICAgICAgOiByYXdPcHRpb25zW2tleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgY29sdW1uOiAxLFxyXG4gICAgICAgIGxpbmU6IDEsXHJcbiAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgIG9yaWdpbmFsU291cmNlOiBjb250ZW50LFxyXG4gICAgICAgIHNvdXJjZTogY29udGVudCxcclxuICAgICAgICBpblByZTogZmFsc2UsXHJcbiAgICAgICAgaW5WUHJlOiBmYWxzZSxcclxuICAgICAgICBvbldhcm46IG9wdGlvbnMub25XYXJuXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQ2hpbGRyZW4oY29udGV4dCwgbW9kZSwgYW5jZXN0b3JzKSB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSBsYXN0KGFuY2VzdG9ycyk7XHJcbiAgICBjb25zdCBucyA9IHBhcmVudCA/IHBhcmVudC5ucyA6IDAgLyogTmFtZXNwYWNlcy5IVE1MICovO1xyXG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcclxuICAgIHdoaWxlICghaXNFbmQoY29udGV4dCwgbW9kZSwgYW5jZXN0b3JzKSkge1xyXG4gICAgICAgIGNvbnN0IHMgPSBjb250ZXh0LnNvdXJjZTtcclxuICAgICAgICBsZXQgbm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAobW9kZSA9PT0gMCAvKiBUZXh0TW9kZXMuREFUQSAqLyB8fCBtb2RlID09PSAxIC8qIFRleHRNb2Rlcy5SQ0RBVEEgKi8pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0LmluVlByZSAmJiBzdGFydHNXaXRoKHMsIGNvbnRleHQub3B0aW9ucy5kZWxpbWl0ZXJzWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gJ3t7J1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlSW50ZXJwb2xhdGlvbihjb250ZXh0LCBtb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlID09PSAwIC8qIFRleHRNb2Rlcy5EQVRBICovICYmIHNbMF0gPT09ICc8Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RhZy1vcGVuLXN0YXRlXHJcbiAgICAgICAgICAgICAgICBpZiAocy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgNSAvKiBFcnJvckNvZGVzLkVPRl9CRUZPUkVfVEFHX05BTUUgKi8sIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc1sxXSA9PT0gJyEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI21hcmt1cC1kZWNsYXJhdGlvbi1vcGVuLXN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgocywgJzwhLS0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VDb21tZW50KGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGFydHNXaXRoKHMsICc8IURPQ1RZUEUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgRE9DVFlQRSBieSBhIGxpbWl0YXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUJvZ3VzQ29tbWVudChjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRzV2l0aChzLCAnPCFbQ0RBVEFbJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5zICE9PSAwIC8qIE5hbWVzcGFjZXMuSFRNTCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlQ0RBVEEoY29udGV4dCwgYW5jZXN0b3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxIC8qIEVycm9yQ29kZXMuQ0RBVEFfSU5fSFRNTF9DT05URU5UICovKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUJvZ3VzQ29tbWVudChjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDExIC8qIEVycm9yQ29kZXMuSU5DT1JSRUNUTFlfT1BFTkVEX0NPTU1FTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc1sxXSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2VuZC10YWctb3Blbi1zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgNSAvKiBFcnJvckNvZGVzLkVPRl9CRUZPUkVfVEFHX05BTUUgKi8sIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzWzJdID09PSAnPicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDE0IC8qIEVycm9yQ29kZXMuTUlTU0lOR19FTkRfVEFHX05BTUUgKi8sIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvW2Etel0vaS50ZXN0KHNbMl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyMyAvKiBFcnJvckNvZGVzLlhfSU5WQUxJRF9FTkRfVEFHICovKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUYWcoY29udGV4dCwgMSAvKiBUYWdUeXBlLkVuZCAqLywgcGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMTIgLyogRXJyb3JDb2Rlcy5JTlZBTElEX0ZJUlNUX0NIQVJBQ1RFUl9PRl9UQUdfTkFNRSAqLywgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJzZUJvZ3VzQ29tbWVudChjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvW2Etel0vaS50ZXN0KHNbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcnNlRWxlbWVudChjb250ZXh0LCBhbmNlc3RvcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDIueCA8dGVtcGxhdGU+IHdpdGggbm8gZGlyZWN0aXZlIGNvbXBhdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9OQVRJVkVfVEVNUExBVEVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFICovLCBjb250ZXh0KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFnID09PSAndGVtcGxhdGUnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFub2RlLnByb3BzLnNvbWUocCA9PiBwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTcGVjaWFsVGVtcGxhdGVEaXJlY3RpdmUocC5uYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuRGVwcmVjYXRpb24oXCJDT01QSUxFUl9OQVRJVkVfVEVNUExBVEVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfTkFUSVZFX1RFTVBMQVRFICovLCBjb250ZXh0LCBub2RlLmxvYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT09ICc/Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyMSAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfUVVFU1RJT05fTUFSS19JTlNURUFEX09GX1RBR19OQU1FICovLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMTIgLyogRXJyb3JDb2Rlcy5JTlZBTElEX0ZJUlNUX0NIQVJBQ1RFUl9PRl9UQUdfTkFNRSAqLywgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFub2RlKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBwYXJzZVRleHQoY29udGV4dCwgbW9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcHVzaE5vZGUobm9kZXMsIG5vZGVbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwdXNoTm9kZShub2Rlcywgbm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gV2hpdGVzcGFjZSBoYW5kbGluZyBzdHJhdGVneSBsaWtlIHYyXHJcbiAgICBsZXQgcmVtb3ZlZFdoaXRlc3BhY2UgPSBmYWxzZTtcclxuICAgIGlmIChtb2RlICE9PSAyIC8qIFRleHRNb2Rlcy5SQVdURVhUICovICYmIG1vZGUgIT09IDEgLyogVGV4dE1vZGVzLlJDREFUQSAqLykge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZENvbmRlbnNlID0gY29udGV4dC5vcHRpb25zLndoaXRlc3BhY2UgIT09ICdwcmVzZXJ2ZSc7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XHJcbiAgICAgICAgICAgIGlmICghY29udGV4dC5pblByZSAmJiBub2RlLnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmICghL1teXFx0XFxyXFxuXFxmIF0vLnRlc3Qobm9kZS5jb250ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBub2Rlc1tpIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5vZGVzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgaWY6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLSB0aGUgd2hpdGVzcGFjZSBpcyB0aGUgZmlyc3Qgb3IgbGFzdCBub2RlLCBvcjpcclxuICAgICAgICAgICAgICAgICAgICAvLyAtIChjb25kZW5zZSBtb2RlKSB0aGUgd2hpdGVzcGFjZSBpcyBhZGphY2VudCB0byBhIGNvbW1lbnQsIG9yOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIC0gKGNvbmRlbnNlIG1vZGUpIHRoZSB3aGl0ZXNwYWNlIGlzIGJldHdlZW4gdHdvIGVsZW1lbnRzIEFORCBjb250YWlucyBuZXdsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFuZXh0IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaG91bGRDb25kZW5zZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXYudHlwZSA9PT0gMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQudHlwZSA9PT0gMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2LnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9bXFxyXFxuXS8udGVzdChub2RlLmNvbnRlbnQpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRXaGl0ZXNwYWNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgd2hpdGVzcGFjZSBpcyBjb25kZW5zZWQgaW50byBhIHNpbmdsZSBzcGFjZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnRlbnQgPSAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkQ29uZGVuc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBjb25kZW5zZSBtb2RlLCBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlcyBpbiB0ZXh0IGFyZSBjb25kZW5zZWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBkb3duIHRvIGEgc2luZ2xlIHNwYWNlLlxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY29udGVudCA9IG5vZGUuY29udGVudC5yZXBsYWNlKC9bXFx0XFxyXFxuXFxmIF0rL2csICcgJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnQgbm9kZXMgaWYgZGVzaXJlZCBieSBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAgICBlbHNlIGlmIChub2RlLnR5cGUgPT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8gJiYgIWNvbnRleHQub3B0aW9ucy5jb21tZW50cykge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZFdoaXRlc3BhY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZXh0LmluUHJlICYmIHBhcmVudCAmJiBjb250ZXh0Lm9wdGlvbnMuaXNQcmVUYWcocGFyZW50LnRhZykpIHtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgbmV3bGluZSBwZXIgaHRtbCBzcGVjXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2dyb3VwaW5nLWNvbnRlbnQuaHRtbCN0aGUtcHJlLWVsZW1lbnRcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBub2Rlc1swXTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ICYmIGZpcnN0LnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0LmNvbnRlbnQgPSBmaXJzdC5jb250ZW50LnJlcGxhY2UoL15cXHI/XFxuLywgJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbW92ZWRXaGl0ZXNwYWNlID8gbm9kZXMuZmlsdGVyKEJvb2xlYW4pIDogbm9kZXM7XHJcbn1cclxuZnVuY3Rpb24gcHVzaE5vZGUobm9kZXMsIG5vZGUpIHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8pIHtcclxuICAgICAgICBjb25zdCBwcmV2ID0gbGFzdChub2Rlcyk7XHJcbiAgICAgICAgLy8gTWVyZ2UgaWYgYm90aCB0aGlzIGFuZCB0aGUgcHJldmlvdXMgbm9kZSBhcmUgdGV4dCBhbmQgdGhvc2UgYXJlXHJcbiAgICAgICAgLy8gY29uc2VjdXRpdmUuIFRoaXMgaGFwcGVucyBmb3IgY2FzZXMgbGlrZSBcImEgPCBiXCIuXHJcbiAgICAgICAgaWYgKHByZXYgJiZcclxuICAgICAgICAgICAgcHJldi50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovICYmXHJcbiAgICAgICAgICAgIHByZXYubG9jLmVuZC5vZmZzZXQgPT09IG5vZGUubG9jLnN0YXJ0Lm9mZnNldCkge1xyXG4gICAgICAgICAgICBwcmV2LmNvbnRlbnQgKz0gbm9kZS5jb250ZW50O1xyXG4gICAgICAgICAgICBwcmV2LmxvYy5lbmQgPSBub2RlLmxvYy5lbmQ7XHJcbiAgICAgICAgICAgIHByZXYubG9jLnNvdXJjZSArPSBub2RlLmxvYy5zb3VyY2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQ0RBVEEoY29udGV4dCwgYW5jZXN0b3JzKSB7XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgOSk7XHJcbiAgICBjb25zdCBub2RlcyA9IHBhcnNlQ2hpbGRyZW4oY29udGV4dCwgMyAvKiBUZXh0TW9kZXMuQ0RBVEEgKi8sIGFuY2VzdG9ycyk7XHJcbiAgICBpZiAoY29udGV4dC5zb3VyY2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDYgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fQ0RBVEEgKi8pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIDMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQ29tbWVudChjb250ZXh0KSB7XHJcbiAgICBjb25zdCBzdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGxldCBjb250ZW50O1xyXG4gICAgLy8gUmVndWxhciBjb21tZW50LlxyXG4gICAgY29uc3QgbWF0Y2ggPSAvLS0oXFwhKT8+Ly5leGVjKGNvbnRleHQuc291cmNlKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICBjb250ZW50ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoNCk7XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIGNvbnRleHQuc291cmNlLmxlbmd0aCk7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDcgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fQ09NTUVOVCAqLyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAobWF0Y2guaW5kZXggPD0gMykge1xyXG4gICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMCAvKiBFcnJvckNvZGVzLkFCUlVQVF9DTE9TSU5HX09GX0VNUFRZX0NPTU1FTlQgKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDEwIC8qIEVycm9yQ29kZXMuSU5DT1JSRUNUTFlfQ0xPU0VEX0NPTU1FTlQgKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250ZW50ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoNCwgbWF0Y2guaW5kZXgpO1xyXG4gICAgICAgIC8vIEFkdmFuY2luZyB3aXRoIHJlcG9ydGluZyBuZXN0ZWQgY29tbWVudHMuXHJcbiAgICAgICAgY29uc3QgcyA9IGNvbnRleHQuc291cmNlLnNsaWNlKDAsIG1hdGNoLmluZGV4KTtcclxuICAgICAgICBsZXQgcHJldkluZGV4ID0gMSwgbmVzdGVkSW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlICgobmVzdGVkSW5kZXggPSBzLmluZGV4T2YoJzwhLS0nLCBwcmV2SW5kZXgpKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIG5lc3RlZEluZGV4IC0gcHJldkluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChuZXN0ZWRJbmRleCArIDQgPCBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDE2IC8qIEVycm9yQ29kZXMuTkVTVEVEX0NPTU1FTlQgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZJbmRleCA9IG5lc3RlZEluZGV4ICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWR2YW5jZUJ5KGNvbnRleHQsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIC0gcHJldkluZGV4ICsgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8sXHJcbiAgICAgICAgY29udGVudCxcclxuICAgICAgICBsb2M6IGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydClcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VCb2d1c0NvbW1lbnQoY29udGV4dCkge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBjb25zdCBjb250ZW50U3RhcnQgPSBjb250ZXh0LnNvdXJjZVsxXSA9PT0gJz8nID8gMSA6IDI7XHJcbiAgICBsZXQgY29udGVudDtcclxuICAgIGNvbnN0IGNsb3NlSW5kZXggPSBjb250ZXh0LnNvdXJjZS5pbmRleE9mKCc+Jyk7XHJcbiAgICBpZiAoY2xvc2VJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICBjb250ZW50ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoY29udGVudFN0YXJ0KTtcclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgY29udGV4dC5zb3VyY2UubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZXh0LnNvdXJjZS5zbGljZShjb250ZW50U3RhcnQsIGNsb3NlSW5kZXgpO1xyXG4gICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCBjbG9zZUluZGV4ICsgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8sXHJcbiAgICAgICAgY29udGVudCxcclxuICAgICAgICBsb2M6IGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydClcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VFbGVtZW50KGNvbnRleHQsIGFuY2VzdG9ycykge1xyXG4gICAgLy8gU3RhcnQgdGFnLlxyXG4gICAgY29uc3Qgd2FzSW5QcmUgPSBjb250ZXh0LmluUHJlO1xyXG4gICAgY29uc3Qgd2FzSW5WUHJlID0gY29udGV4dC5pblZQcmU7XHJcbiAgICBjb25zdCBwYXJlbnQgPSBsYXN0KGFuY2VzdG9ycyk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gcGFyc2VUYWcoY29udGV4dCwgMCAvKiBUYWdUeXBlLlN0YXJ0ICovLCBwYXJlbnQpO1xyXG4gICAgY29uc3QgaXNQcmVCb3VuZGFyeSA9IGNvbnRleHQuaW5QcmUgJiYgIXdhc0luUHJlO1xyXG4gICAgY29uc3QgaXNWUHJlQm91bmRhcnkgPSBjb250ZXh0LmluVlByZSAmJiAhd2FzSW5WUHJlO1xyXG4gICAgaWYgKGVsZW1lbnQuaXNTZWxmQ2xvc2luZyB8fCBjb250ZXh0Lm9wdGlvbnMuaXNWb2lkVGFnKGVsZW1lbnQudGFnKSkge1xyXG4gICAgICAgIC8vICM0MDMwIHNlbGYtY2xvc2luZyA8cHJlPiB0YWdcclxuICAgICAgICBpZiAoaXNQcmVCb3VuZGFyeSkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmluUHJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZQcmVCb3VuZGFyeSkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmluVlByZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuICAgIC8vIENoaWxkcmVuLlxyXG4gICAgYW5jZXN0b3JzLnB1c2goZWxlbWVudCk7XHJcbiAgICBjb25zdCBtb2RlID0gY29udGV4dC5vcHRpb25zLmdldFRleHRNb2RlKGVsZW1lbnQsIHBhcmVudCk7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcnNlQ2hpbGRyZW4oY29udGV4dCwgbW9kZSwgYW5jZXN0b3JzKTtcclxuICAgIGFuY2VzdG9ycy5wb3AoKTtcclxuICAgIC8vIDIueCBpbmxpbmUtdGVtcGxhdGUgY29tcGF0XHJcbiAgICB7XHJcbiAgICAgICAgY29uc3QgaW5saW5lVGVtcGxhdGVQcm9wID0gZWxlbWVudC5wcm9wcy5maW5kKHAgPT4gcC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8gJiYgcC5uYW1lID09PSAnaW5saW5lLXRlbXBsYXRlJyk7XHJcbiAgICAgICAgaWYgKGlubGluZVRlbXBsYXRlUHJvcCAmJlxyXG4gICAgICAgICAgICBjaGVja0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9JTkxJTkVfVEVNUExBVEVcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfSU5MSU5FX1RFTVBMQVRFICovLCBjb250ZXh0LCBpbmxpbmVUZW1wbGF0ZVByb3AubG9jKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2MgPSBnZXRTZWxlY3Rpb24oY29udGV4dCwgZWxlbWVudC5sb2MuZW5kKTtcclxuICAgICAgICAgICAgaW5saW5lVGVtcGxhdGVQcm9wLnZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogMiAvKiBOb2RlVHlwZXMuVEVYVCAqLyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGxvYy5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICBsb2NcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbGVtZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAvLyBFbmQgdGFnLlxyXG4gICAgaWYgKHN0YXJ0c1dpdGhFbmRUYWdPcGVuKGNvbnRleHQuc291cmNlLCBlbGVtZW50LnRhZykpIHtcclxuICAgICAgICBwYXJzZVRhZyhjb250ZXh0LCAxIC8qIFRhZ1R5cGUuRW5kICovLCBwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDI0IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0VORF9UQUcgKi8sIDAsIGVsZW1lbnQubG9jLnN0YXJ0KTtcclxuICAgICAgICBpZiAoY29udGV4dC5zb3VyY2UubGVuZ3RoID09PSAwICYmIGVsZW1lbnQudGFnLnRvTG93ZXJDYXNlKCkgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCAmJiBzdGFydHNXaXRoKGZpcnN0LmxvYy5zb3VyY2UsICc8IS0tJykpIHtcclxuICAgICAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCA4IC8qIEVycm9yQ29kZXMuRU9GX0lOX1NDUklQVF9IVE1MX0NPTU1FTlRfTElLRV9URVhUICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsZW1lbnQubG9jID0gZ2V0U2VsZWN0aW9uKGNvbnRleHQsIGVsZW1lbnQubG9jLnN0YXJ0KTtcclxuICAgIGlmIChpc1ByZUJvdW5kYXJ5KSB7XHJcbiAgICAgICAgY29udGV4dC5pblByZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVlByZUJvdW5kYXJ5KSB7XHJcbiAgICAgICAgY29udGV4dC5pblZQcmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG59XHJcbmNvbnN0IGlzU3BlY2lhbFRlbXBsYXRlRGlyZWN0aXZlID0gLyojX19QVVJFX18qLyBtYWtlTWFwKGBpZixlbHNlLGVsc2UtaWYsZm9yLHNsb3RgKTtcclxuZnVuY3Rpb24gcGFyc2VUYWcoY29udGV4dCwgdHlwZSwgcGFyZW50KSB7XHJcbiAgICAvLyBUYWcgb3Blbi5cclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgbWF0Y2ggPSAvXjxcXC8/KFthLXpdW15cXHRcXHJcXG5cXGYgLz5dKikvaS5leGVjKGNvbnRleHQuc291cmNlKTtcclxuICAgIGNvbnN0IHRhZyA9IG1hdGNoWzFdO1xyXG4gICAgY29uc3QgbnMgPSBjb250ZXh0Lm9wdGlvbnMuZ2V0TmFtZXNwYWNlKHRhZywgcGFyZW50KTtcclxuICAgIGFkdmFuY2VCeShjb250ZXh0LCBtYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgYWR2YW5jZVNwYWNlcyhjb250ZXh0KTtcclxuICAgIC8vIHNhdmUgY3VycmVudCBzdGF0ZSBpbiBjYXNlIHdlIG5lZWQgdG8gcmUtcGFyc2UgYXR0cmlidXRlcyB3aXRoIHYtcHJlXHJcbiAgICBjb25zdCBjdXJzb3IgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBjb25zdCBjdXJyZW50U291cmNlID0gY29udGV4dC5zb3VyY2U7XHJcbiAgICAvLyBjaGVjayA8cHJlPiB0YWdcclxuICAgIGlmIChjb250ZXh0Lm9wdGlvbnMuaXNQcmVUYWcodGFnKSkge1xyXG4gICAgICAgIGNvbnRleHQuaW5QcmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gQXR0cmlidXRlcy5cclxuICAgIGxldCBwcm9wcyA9IHBhcnNlQXR0cmlidXRlcyhjb250ZXh0LCB0eXBlKTtcclxuICAgIC8vIGNoZWNrIHYtcHJlXHJcbiAgICBpZiAodHlwZSA9PT0gMCAvKiBUYWdUeXBlLlN0YXJ0ICovICYmXHJcbiAgICAgICAgIWNvbnRleHQuaW5WUHJlICYmXHJcbiAgICAgICAgcHJvcHMuc29tZShwID0+IHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIHAubmFtZSA9PT0gJ3ByZScpKSB7XHJcbiAgICAgICAgY29udGV4dC5pblZQcmUgPSB0cnVlO1xyXG4gICAgICAgIC8vIHJlc2V0IGNvbnRleHRcclxuICAgICAgICBleHRlbmQoY29udGV4dCwgY3Vyc29yKTtcclxuICAgICAgICBjb250ZXh0LnNvdXJjZSA9IGN1cnJlbnRTb3VyY2U7XHJcbiAgICAgICAgLy8gcmUtcGFyc2UgYXR0cnMgYW5kIGZpbHRlciBvdXQgdi1wcmUgaXRzZWxmXHJcbiAgICAgICAgcHJvcHMgPSBwYXJzZUF0dHJpYnV0ZXMoY29udGV4dCwgdHlwZSkuZmlsdGVyKHAgPT4gcC5uYW1lICE9PSAndi1wcmUnKTtcclxuICAgIH1cclxuICAgIC8vIFRhZyBjbG9zZS5cclxuICAgIGxldCBpc1NlbGZDbG9zaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoY29udGV4dC5zb3VyY2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDkgLyogRXJyb3JDb2Rlcy5FT0ZfSU5fVEFHICovKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlzU2VsZkNsb3NpbmcgPSBzdGFydHNXaXRoKGNvbnRleHQuc291cmNlLCAnLz4nKTtcclxuICAgICAgICBpZiAodHlwZSA9PT0gMSAvKiBUYWdUeXBlLkVuZCAqLyAmJiBpc1NlbGZDbG9zaW5nKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCA0IC8qIEVycm9yQ29kZXMuRU5EX1RBR19XSVRIX1RSQUlMSU5HX1NPTElEVVMgKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgaXNTZWxmQ2xvc2luZyA/IDIgOiAxKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSAxIC8qIFRhZ1R5cGUuRW5kICovKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gMi54IGRlcHJlY2F0aW9uIGNoZWNrc1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgIGlzQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX1ZfSUZfVl9GT1JfUFJFQ0VERU5DRVwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0lGX1ZfRk9SX1BSRUNFREVOQ0UgKi8sIGNvbnRleHQpKSB7XHJcbiAgICAgICAgbGV0IGhhc0lmID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGhhc0ZvciA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcCA9IHByb3BzW2ldO1xyXG4gICAgICAgICAgICBpZiAocC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLm5hbWUgPT09ICdpZicpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNJZiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwLm5hbWUgPT09ICdmb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzRm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFzSWYgJiYgaGFzRm9yKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuRGVwcmVjYXRpb24oXCJDT01QSUxFUl9WX0lGX1ZfRk9SX1BSRUNFREVOQ0VcIiAvKiBDb21waWxlckRlcHJlY2F0aW9uVHlwZXMuQ09NUElMRVJfVl9JRl9WX0ZPUl9QUkVDRURFTkNFICovLCBjb250ZXh0LCBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHRhZ1R5cGUgPSAwIC8qIEVsZW1lbnRUeXBlcy5FTEVNRU5UICovO1xyXG4gICAgaWYgKCFjb250ZXh0LmluVlByZSkge1xyXG4gICAgICAgIGlmICh0YWcgPT09ICdzbG90Jykge1xyXG4gICAgICAgICAgICB0YWdUeXBlID0gMiAvKiBFbGVtZW50VHlwZXMuU0xPVCAqLztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFnID09PSAndGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb21lKHAgPT4gcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiYgaXNTcGVjaWFsVGVtcGxhdGVEaXJlY3RpdmUocC5uYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgIHRhZ1R5cGUgPSAzIC8qIEVsZW1lbnRUeXBlcy5URU1QTEFURSAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0NvbXBvbmVudCh0YWcsIHByb3BzLCBjb250ZXh0KSkge1xyXG4gICAgICAgICAgICB0YWdUeXBlID0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyxcclxuICAgICAgICBucyxcclxuICAgICAgICB0YWcsXHJcbiAgICAgICAgdGFnVHlwZSxcclxuICAgICAgICBwcm9wcyxcclxuICAgICAgICBpc1NlbGZDbG9zaW5nLFxyXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICBsb2M6IGdldFNlbGVjdGlvbihjb250ZXh0LCBzdGFydCksXHJcbiAgICAgICAgY29kZWdlbk5vZGU6IHVuZGVmaW5lZCAvLyB0byBiZSBjcmVhdGVkIGR1cmluZyB0cmFuc2Zvcm0gcGhhc2VcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNDb21wb25lbnQodGFnLCBwcm9wcywgY29udGV4dCkge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9ucztcclxuICAgIGlmIChvcHRpb25zLmlzQ3VzdG9tRWxlbWVudCh0YWcpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhZyA9PT0gJ2NvbXBvbmVudCcgfHxcclxuICAgICAgICAvXltBLVpdLy50ZXN0KHRhZykgfHxcclxuICAgICAgICBpc0NvcmVDb21wb25lbnQodGFnKSB8fFxyXG4gICAgICAgIChvcHRpb25zLmlzQnVpbHRJbkNvbXBvbmVudCAmJiBvcHRpb25zLmlzQnVpbHRJbkNvbXBvbmVudCh0YWcpKSB8fFxyXG4gICAgICAgIChvcHRpb25zLmlzTmF0aXZlVGFnICYmICFvcHRpb25zLmlzTmF0aXZlVGFnKHRhZykpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBhdCB0aGlzIHBvaW50IHRoZSB0YWcgc2hvdWxkIGJlIGEgbmF0aXZlIHRhZywgYnV0IGNoZWNrIGZvciBwb3RlbnRpYWwgXCJpc1wiXHJcbiAgICAvLyBjYXN0aW5nXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHByb3BzW2ldO1xyXG4gICAgICAgIGlmIChwLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLykge1xyXG4gICAgICAgICAgICBpZiAocC5uYW1lID09PSAnaXMnICYmIHAudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLnZhbHVlLmNvbnRlbnQuc3RhcnRzV2l0aCgndnVlOicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9JU19PTl9FTEVNRU5UXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX0lTX09OX0VMRU1FTlQgKi8sIGNvbnRleHQsIHAubG9jKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkaXJlY3RpdmVcclxuICAgICAgICAgICAgLy8gdi1pcyAoVE9ETyBEZXByZWNhdGUpXHJcbiAgICAgICAgICAgIGlmIChwLm5hbWUgPT09ICdpcycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAvLyA6aXMgb24gcGxhaW4gZWxlbWVudCAtIG9ubHkgdHJlYXQgYXMgY29tcG9uZW50IGluIGNvbXBhdCBtb2RlXHJcbiAgICAgICAgICAgIHAubmFtZSA9PT0gJ2JpbmQnICYmXHJcbiAgICAgICAgICAgICAgICBpc1N0YXRpY0FyZ09mKHAuYXJnLCAnaXMnKSAmJlxyXG4gICAgICAgICAgICAgICAgdHJ1ZSAmJlxyXG4gICAgICAgICAgICAgICAgY2hlY2tDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovLCBjb250ZXh0LCBwLmxvYykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlcyhjb250ZXh0LCB0eXBlKSB7XHJcbiAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XHJcbiAgICB3aGlsZSAoY29udGV4dC5zb3VyY2UubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICFzdGFydHNXaXRoKGNvbnRleHQuc291cmNlLCAnPicpICYmXHJcbiAgICAgICAgIXN0YXJ0c1dpdGgoY29udGV4dC5zb3VyY2UsICcvPicpKSB7XHJcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGgoY29udGV4dC5zb3VyY2UsICcvJykpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDIyIC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9TT0xJRFVTX0lOX1RBRyAqLyk7XHJcbiAgICAgICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCAxKTtcclxuICAgICAgICAgICAgYWR2YW5jZVNwYWNlcyhjb250ZXh0KTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSAxIC8qIFRhZ1R5cGUuRW5kICovKSB7XHJcbiAgICAgICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAzIC8qIEVycm9yQ29kZXMuRU5EX1RBR19XSVRIX0FUVFJJQlVURVMgKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhdHRyID0gcGFyc2VBdHRyaWJ1dGUoY29udGV4dCwgYXR0cmlidXRlTmFtZXMpO1xyXG4gICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZSBiZXR3ZWVuIGNsYXNzXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL2NvcmUvaXNzdWVzLzQyNTFcclxuICAgICAgICBpZiAoYXR0ci50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8gJiZcclxuICAgICAgICAgICAgYXR0ci52YWx1ZSAmJlxyXG4gICAgICAgICAgICBhdHRyLm5hbWUgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgYXR0ci52YWx1ZS5jb250ZW50ID0gYXR0ci52YWx1ZS5jb250ZW50LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSAwIC8qIFRhZ1R5cGUuU3RhcnQgKi8pIHtcclxuICAgICAgICAgICAgcHJvcHMucHVzaChhdHRyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eW15cXHRcXHJcXG5cXGYgLz5dLy50ZXN0KGNvbnRleHQuc291cmNlKSkge1xyXG4gICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMTUgLyogRXJyb3JDb2Rlcy5NSVNTSU5HX1dISVRFU1BBQ0VfQkVUV0VFTl9BVFRSSUJVVEVTICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWR2YW5jZVNwYWNlcyhjb250ZXh0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcztcclxufVxyXG5mdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZShjb250ZXh0LCBuYW1lU2V0KSB7XHJcbiAgICAvLyBOYW1lLlxyXG4gICAgY29uc3Qgc3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBjb25zdCBtYXRjaCA9IC9eW15cXHRcXHJcXG5cXGYgLz5dW15cXHRcXHJcXG5cXGYgLz49XSovLmV4ZWMoY29udGV4dC5zb3VyY2UpO1xyXG4gICAgY29uc3QgbmFtZSA9IG1hdGNoWzBdO1xyXG4gICAgaWYgKG5hbWVTZXQuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDIgLyogRXJyb3JDb2Rlcy5EVVBMSUNBVEVfQVRUUklCVVRFICovKTtcclxuICAgIH1cclxuICAgIG5hbWVTZXQuYWRkKG5hbWUpO1xyXG4gICAgaWYgKG5hbWVbMF0gPT09ICc9Jykge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAxOSAvKiBFcnJvckNvZGVzLlVORVhQRUNURURfRVFVQUxTX1NJR05fQkVGT1JFX0FUVFJJQlVURV9OQU1FICovKTtcclxuICAgIH1cclxuICAgIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gL1tcIic8XS9nO1xyXG4gICAgICAgIGxldCBtO1xyXG4gICAgICAgIHdoaWxlICgobSA9IHBhdHRlcm4uZXhlYyhuYW1lKSkpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDE3IC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9DSEFSQUNURVJfSU5fQVRUUklCVVRFX05BTUUgKi8sIG0uaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFkdmFuY2VCeShjb250ZXh0LCBuYW1lLmxlbmd0aCk7XHJcbiAgICAvLyBWYWx1ZVxyXG4gICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKC9eW1xcdFxcclxcblxcZiBdKj0vLnRlc3QoY29udGV4dC5zb3VyY2UpKSB7XHJcbiAgICAgICAgYWR2YW5jZVNwYWNlcyhjb250ZXh0KTtcclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgMSk7XHJcbiAgICAgICAgYWR2YW5jZVNwYWNlcyhjb250ZXh0KTtcclxuICAgICAgICB2YWx1ZSA9IHBhcnNlQXR0cmlidXRlVmFsdWUoY29udGV4dCk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICBlbWl0RXJyb3IoY29udGV4dCwgMTMgLyogRXJyb3JDb2Rlcy5NSVNTSU5HX0FUVFJJQlVURV9WQUxVRSAqLyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9jID0gZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0KTtcclxuICAgIGlmICghY29udGV4dC5pblZQcmUgJiYgL14odi1bQS1aYS16MC05LV18OnxcXC58QHwjKS8udGVzdChuYW1lKSkge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gLyg/Ol52LShbYS16MC05LV0rKSk/KD86KD86OnxeXFwufF5AfF4jKShcXFtbXlxcXV0rXFxdfFteXFwuXSspKT8oLispPyQvaS5leGVjKG5hbWUpO1xyXG4gICAgICAgIGxldCBpc1Byb3BTaG9ydGhhbmQgPSBzdGFydHNXaXRoKG5hbWUsICcuJyk7XHJcbiAgICAgICAgbGV0IGRpck5hbWUgPSBtYXRjaFsxXSB8fFxyXG4gICAgICAgICAgICAoaXNQcm9wU2hvcnRoYW5kIHx8IHN0YXJ0c1dpdGgobmFtZSwgJzonKVxyXG4gICAgICAgICAgICAgICAgPyAnYmluZCdcclxuICAgICAgICAgICAgICAgIDogc3RhcnRzV2l0aChuYW1lLCAnQCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnb24nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnc2xvdCcpO1xyXG4gICAgICAgIGxldCBhcmc7XHJcbiAgICAgICAgaWYgKG1hdGNoWzJdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzU2xvdCA9IGRpck5hbWUgPT09ICdzbG90JztcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBuYW1lLmxhc3RJbmRleE9mKG1hdGNoWzJdKTtcclxuICAgICAgICAgICAgY29uc3QgbG9jID0gZ2V0U2VsZWN0aW9uKGNvbnRleHQsIGdldE5ld1Bvc2l0aW9uKGNvbnRleHQsIHN0YXJ0LCBzdGFydE9mZnNldCksIGdldE5ld1Bvc2l0aW9uKGNvbnRleHQsIHN0YXJ0LCBzdGFydE9mZnNldCArIG1hdGNoWzJdLmxlbmd0aCArICgoaXNTbG90ICYmIG1hdGNoWzNdKSB8fCAnJykubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gbWF0Y2hbMl07XHJcbiAgICAgICAgICAgIGxldCBpc1N0YXRpYyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJ1snKSkge1xyXG4gICAgICAgICAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29udGVudC5lbmRzV2l0aCgnXScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDI3IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0RZTkFNSUNfRElSRUNUSVZFX0FSR1VNRU5UX0VORCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxLCBjb250ZW50Lmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU2xvdCkge1xyXG4gICAgICAgICAgICAgICAgLy8gIzEyNDEgc3BlY2lhbCBjYXNlIGZvciB2LXNsb3Q6IHZ1ZXRpZnkgcmVsaWVzIGV4dGVuc2l2ZWx5IG9uIHNsb3RcclxuICAgICAgICAgICAgICAgIC8vIG5hbWVzIGNvbnRhaW5pbmcgZG90cy4gdi1zbG90IGRvZXNuJ3QgaGF2ZSBhbnkgbW9kaWZpZXJzIGFuZCBWdWUgMi54XHJcbiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0cyBzdWNoIHVzYWdlIHNvIHdlIGFyZSBrZWVwaW5nIGl0IGNvbnNpc3RlbnQgd2l0aCAyLnguXHJcbiAgICAgICAgICAgICAgICBjb250ZW50ICs9IG1hdGNoWzNdIHx8ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFyZyA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgIGlzU3RhdGljLFxyXG4gICAgICAgICAgICAgICAgY29uc3RUeXBlOiBpc1N0YXRpY1xyXG4gICAgICAgICAgICAgICAgICAgID8gMyAvKiBDb25zdGFudFR5cGVzLkNBTl9TVFJJTkdJRlkgKi9cclxuICAgICAgICAgICAgICAgICAgICA6IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8sXHJcbiAgICAgICAgICAgICAgICBsb2NcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzUXVvdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTG9jID0gdmFsdWUubG9jO1xyXG4gICAgICAgICAgICB2YWx1ZUxvYy5zdGFydC5vZmZzZXQrKztcclxuICAgICAgICAgICAgdmFsdWVMb2Muc3RhcnQuY29sdW1uKys7XHJcbiAgICAgICAgICAgIHZhbHVlTG9jLmVuZCA9IGFkdmFuY2VQb3NpdGlvbldpdGhDbG9uZSh2YWx1ZUxvYy5zdGFydCwgdmFsdWUuY29udGVudCk7XHJcbiAgICAgICAgICAgIHZhbHVlTG9jLnNvdXJjZSA9IHZhbHVlTG9jLnNvdXJjZS5zbGljZSgxLCAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IG1hdGNoWzNdID8gbWF0Y2hbM10uc2xpY2UoMSkuc3BsaXQoJy4nKSA6IFtdO1xyXG4gICAgICAgIGlmIChpc1Byb3BTaG9ydGhhbmQpXHJcbiAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKCdwcm9wJyk7XHJcbiAgICAgICAgLy8gMi54IGNvbXBhdCB2LWJpbmQ6Zm9vLnN5bmMgLT4gdi1tb2RlbDpmb29cclxuICAgICAgICBpZiAoZGlyTmFtZSA9PT0gJ2JpbmQnICYmIGFyZykge1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLmluY2x1ZGVzKCdzeW5jJykgJiZcclxuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX1ZfQklORF9TWU5DXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9TWU5DICovLCBjb250ZXh0LCBsb2MsIGFyZy5sb2Muc291cmNlKSkge1xyXG4gICAgICAgICAgICAgICAgZGlyTmFtZSA9ICdtb2RlbCc7XHJcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMuc3BsaWNlKG1vZGlmaWVycy5pbmRleE9mKCdzeW5jJyksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgbW9kaWZpZXJzLmluY2x1ZGVzKCdwcm9wJykpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX1ZfQklORF9QUk9QXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9QUk9QICovLCBjb250ZXh0LCBsb2MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyxcclxuICAgICAgICAgICAgbmFtZTogZGlyTmFtZSxcclxuICAgICAgICAgICAgZXhwOiB2YWx1ZSAmJiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHZhbHVlLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAvLyBUcmVhdCBhcyBub24tY29uc3RhbnQgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUgcG90ZW50aWFsbHkgc2V0IHRvXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlciB2YWx1ZXMgYnkgYHRyYW5zZm9ybUV4cHJlc3Npb25gIHRvIG1ha2UgaXQgZWxpZ2libGUgZm9yIGhvaXN0aW5nLlxyXG4gICAgICAgICAgICAgICAgY29uc3RUeXBlOiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovLFxyXG4gICAgICAgICAgICAgICAgbG9jOiB2YWx1ZS5sb2NcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICBtb2RpZmllcnMsXHJcbiAgICAgICAgICAgIGxvY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvLyBtaXNzaW5nIGRpcmVjdGl2ZSBuYW1lIG9yIGlsbGVnYWwgZGlyZWN0aXZlIG5hbWVcclxuICAgIGlmICghY29udGV4dC5pblZQcmUgJiYgc3RhcnRzV2l0aChuYW1lLCAndi0nKSkge1xyXG4gICAgICAgIGVtaXRFcnJvcihjb250ZXh0LCAyNiAvKiBFcnJvckNvZGVzLlhfTUlTU0lOR19ESVJFQ1RJVkVfTkFNRSAqLyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLyxcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSAmJiB7XHJcbiAgICAgICAgICAgIHR5cGU6IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHZhbHVlLmNvbnRlbnQsXHJcbiAgICAgICAgICAgIGxvYzogdmFsdWUubG9jXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2NcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVWYWx1ZShjb250ZXh0KSB7XHJcbiAgICBjb25zdCBzdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGxldCBjb250ZW50O1xyXG4gICAgY29uc3QgcXVvdGUgPSBjb250ZXh0LnNvdXJjZVswXTtcclxuICAgIGNvbnN0IGlzUXVvdGVkID0gcXVvdGUgPT09IGBcImAgfHwgcXVvdGUgPT09IGAnYDtcclxuICAgIGlmIChpc1F1b3RlZCkge1xyXG4gICAgICAgIC8vIFF1b3RlZCB2YWx1ZS5cclxuICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgMSk7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBjb250ZXh0LnNvdXJjZS5pbmRleE9mKHF1b3RlKTtcclxuICAgICAgICBpZiAoZW5kSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwYXJzZVRleHREYXRhKGNvbnRleHQsIGNvbnRleHQuc291cmNlLmxlbmd0aCwgNCAvKiBUZXh0TW9kZXMuQVRUUklCVVRFX1ZBTFVFICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwYXJzZVRleHREYXRhKGNvbnRleHQsIGVuZEluZGV4LCA0IC8qIFRleHRNb2Rlcy5BVFRSSUJVVEVfVkFMVUUgKi8pO1xyXG4gICAgICAgICAgICBhZHZhbmNlQnkoY29udGV4dCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gVW5xdW90ZWRcclxuICAgICAgICBjb25zdCBtYXRjaCA9IC9eW15cXHRcXHJcXG5cXGYgPl0rLy5leGVjKGNvbnRleHQuc291cmNlKTtcclxuICAgICAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVuZXhwZWN0ZWRDaGFycyA9IC9bXCInPD1gXS9nO1xyXG4gICAgICAgIGxldCBtO1xyXG4gICAgICAgIHdoaWxlICgobSA9IHVuZXhwZWN0ZWRDaGFycy5leGVjKG1hdGNoWzBdKSkpIHtcclxuICAgICAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDE4IC8qIEVycm9yQ29kZXMuVU5FWFBFQ1RFRF9DSEFSQUNURVJfSU5fVU5RVU9URURfQVRUUklCVVRFX1ZBTFVFICovLCBtLmluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGVudCA9IHBhcnNlVGV4dERhdGEoY29udGV4dCwgbWF0Y2hbMF0ubGVuZ3RoLCA0IC8qIFRleHRNb2Rlcy5BVFRSSUJVVEVfVkFMVUUgKi8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY29udGVudCwgaXNRdW90ZWQsIGxvYzogZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0KSB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlSW50ZXJwb2xhdGlvbihjb250ZXh0LCBtb2RlKSB7XHJcbiAgICBjb25zdCBbb3BlbiwgY2xvc2VdID0gY29udGV4dC5vcHRpb25zLmRlbGltaXRlcnM7XHJcbiAgICBjb25zdCBjbG9zZUluZGV4ID0gY29udGV4dC5zb3VyY2UuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpO1xyXG4gICAgaWYgKGNsb3NlSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgZW1pdEVycm9yKGNvbnRleHQsIDI1IC8qIEVycm9yQ29kZXMuWF9NSVNTSU5HX0lOVEVSUE9MQVRJT05fRU5EICovKTtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RhcnQgPSBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgb3Blbi5sZW5ndGgpO1xyXG4gICAgY29uc3QgaW5uZXJTdGFydCA9IGdldEN1cnNvcihjb250ZXh0KTtcclxuICAgIGNvbnN0IGlubmVyRW5kID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgcmF3Q29udGVudExlbmd0aCA9IGNsb3NlSW5kZXggLSBvcGVuLmxlbmd0aDtcclxuICAgIGNvbnN0IHJhd0NvbnRlbnQgPSBjb250ZXh0LnNvdXJjZS5zbGljZSgwLCByYXdDb250ZW50TGVuZ3RoKTtcclxuICAgIGNvbnN0IHByZVRyaW1Db250ZW50ID0gcGFyc2VUZXh0RGF0YShjb250ZXh0LCByYXdDb250ZW50TGVuZ3RoLCBtb2RlKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBwcmVUcmltQ29udGVudC50cmltKCk7XHJcbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHByZVRyaW1Db250ZW50LmluZGV4T2YoY29udGVudCk7XHJcbiAgICBpZiAoc3RhcnRPZmZzZXQgPiAwKSB7XHJcbiAgICAgICAgYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uKGlubmVyU3RhcnQsIHJhd0NvbnRlbnQsIHN0YXJ0T2Zmc2V0KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVuZE9mZnNldCA9IHJhd0NvbnRlbnRMZW5ndGggLSAocHJlVHJpbUNvbnRlbnQubGVuZ3RoIC0gY29udGVudC5sZW5ndGggLSBzdGFydE9mZnNldCk7XHJcbiAgICBhZHZhbmNlUG9zaXRpb25XaXRoTXV0YXRpb24oaW5uZXJFbmQsIHJhd0NvbnRlbnQsIGVuZE9mZnNldCk7XHJcbiAgICBhZHZhbmNlQnkoY29udGV4dCwgY2xvc2UubGVuZ3RoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLyxcclxuICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vIFNldCBgaXNDb25zdGFudGAgdG8gZmFsc2UgYnkgZGVmYXVsdCBhbmQgd2lsbCBkZWNpZGUgaW4gdHJhbnNmb3JtRXhwcmVzc2lvblxyXG4gICAgICAgICAgICBjb25zdFR5cGU6IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8sXHJcbiAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgIGxvYzogZ2V0U2VsZWN0aW9uKGNvbnRleHQsIGlubmVyU3RhcnQsIGlubmVyRW5kKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9jOiBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHBhcnNlVGV4dChjb250ZXh0LCBtb2RlKSB7XHJcbiAgICBjb25zdCBlbmRUb2tlbnMgPSBtb2RlID09PSAzIC8qIFRleHRNb2Rlcy5DREFUQSAqLyA/IFsnXV0+J10gOiBbJzwnLCBjb250ZXh0Lm9wdGlvbnMuZGVsaW1pdGVyc1swXV07XHJcbiAgICBsZXQgZW5kSW5kZXggPSBjb250ZXh0LnNvdXJjZS5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuZFRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29udGV4dC5zb3VyY2UuaW5kZXhPZihlbmRUb2tlbnNbaV0sIDEpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgZW5kSW5kZXggPiBpbmRleCkge1xyXG4gICAgICAgICAgICBlbmRJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Q3Vyc29yKGNvbnRleHQpO1xyXG4gICAgY29uc3QgY29udGVudCA9IHBhcnNlVGV4dERhdGEoY29udGV4dCwgZW5kSW5kZXgsIG1vZGUpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiAyIC8qIE5vZGVUeXBlcy5URVhUICovLFxyXG4gICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgbG9jOiBnZXRTZWxlY3Rpb24oY29udGV4dCwgc3RhcnQpXHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGV4dCBkYXRhIHdpdGggYSBnaXZlbiBsZW5ndGggZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbi5cclxuICogVGhpcyB0cmFuc2xhdGVzIEhUTUwgZW50aXRpZXMgaW4gdGhlIHRleHQgZGF0YS5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlVGV4dERhdGEoY29udGV4dCwgbGVuZ3RoLCBtb2RlKSB7XHJcbiAgICBjb25zdCByYXdUZXh0ID0gY29udGV4dC5zb3VyY2Uuc2xpY2UoMCwgbGVuZ3RoKTtcclxuICAgIGFkdmFuY2VCeShjb250ZXh0LCBsZW5ndGgpO1xyXG4gICAgaWYgKG1vZGUgPT09IDIgLyogVGV4dE1vZGVzLlJBV1RFWFQgKi8gfHxcclxuICAgICAgICBtb2RlID09PSAzIC8qIFRleHRNb2Rlcy5DREFUQSAqLyB8fFxyXG4gICAgICAgICFyYXdUZXh0LmluY2x1ZGVzKCcmJykpIHtcclxuICAgICAgICByZXR1cm4gcmF3VGV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIERBVEEgb3IgUkNEQVRBIGNvbnRhaW5pbmcgXCImXCJcIi4gRW50aXR5IGRlY29kaW5nIHJlcXVpcmVkLlxyXG4gICAgICAgIHJldHVybiBjb250ZXh0Lm9wdGlvbnMuZGVjb2RlRW50aXRpZXMocmF3VGV4dCwgbW9kZSA9PT0gNCAvKiBUZXh0TW9kZXMuQVRUUklCVVRFX1ZBTFVFICovKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRDdXJzb3IoY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBjb2x1bW4sIGxpbmUsIG9mZnNldCB9ID0gY29udGV4dDtcclxuICAgIHJldHVybiB7IGNvbHVtbiwgbGluZSwgb2Zmc2V0IH07XHJcbn1cclxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGNvbnRleHQsIHN0YXJ0LCBlbmQpIHtcclxuICAgIGVuZCA9IGVuZCB8fCBnZXRDdXJzb3IoY29udGV4dCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHN0YXJ0LFxyXG4gICAgICAgIGVuZCxcclxuICAgICAgICBzb3VyY2U6IGNvbnRleHQub3JpZ2luYWxTb3VyY2Uuc2xpY2Uoc3RhcnQub2Zmc2V0LCBlbmQub2Zmc2V0KVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBsYXN0KHhzKSB7XHJcbiAgICByZXR1cm4geHNbeHMubGVuZ3RoIC0gMV07XHJcbn1cclxuZnVuY3Rpb24gc3RhcnRzV2l0aChzb3VyY2UsIHNlYXJjaFN0cmluZykge1xyXG4gICAgcmV0dXJuIHNvdXJjZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyk7XHJcbn1cclxuZnVuY3Rpb24gYWR2YW5jZUJ5KGNvbnRleHQsIG51bWJlck9mQ2hhcmFjdGVycykge1xyXG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IGNvbnRleHQ7XHJcbiAgICBhZHZhbmNlUG9zaXRpb25XaXRoTXV0YXRpb24oY29udGV4dCwgc291cmNlLCBudW1iZXJPZkNoYXJhY3RlcnMpO1xyXG4gICAgY29udGV4dC5zb3VyY2UgPSBzb3VyY2Uuc2xpY2UobnVtYmVyT2ZDaGFyYWN0ZXJzKTtcclxufVxyXG5mdW5jdGlvbiBhZHZhbmNlU3BhY2VzKGNvbnRleHQpIHtcclxuICAgIGNvbnN0IG1hdGNoID0gL15bXFx0XFxyXFxuXFxmIF0rLy5leGVjKGNvbnRleHQuc291cmNlKTtcclxuICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGFkdmFuY2VCeShjb250ZXh0LCBtYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldE5ld1Bvc2l0aW9uKGNvbnRleHQsIHN0YXJ0LCBudW1iZXJPZkNoYXJhY3RlcnMpIHtcclxuICAgIHJldHVybiBhZHZhbmNlUG9zaXRpb25XaXRoQ2xvbmUoc3RhcnQsIGNvbnRleHQub3JpZ2luYWxTb3VyY2Uuc2xpY2Uoc3RhcnQub2Zmc2V0LCBudW1iZXJPZkNoYXJhY3RlcnMpLCBudW1iZXJPZkNoYXJhY3RlcnMpO1xyXG59XHJcbmZ1bmN0aW9uIGVtaXRFcnJvcihjb250ZXh0LCBjb2RlLCBvZmZzZXQsIGxvYyA9IGdldEN1cnNvcihjb250ZXh0KSkge1xyXG4gICAgaWYgKG9mZnNldCkge1xyXG4gICAgICAgIGxvYy5vZmZzZXQgKz0gb2Zmc2V0O1xyXG4gICAgICAgIGxvYy5jb2x1bW4gKz0gb2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgY29udGV4dC5vcHRpb25zLm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcihjb2RlLCB7XHJcbiAgICAgICAgc3RhcnQ6IGxvYyxcclxuICAgICAgICBlbmQ6IGxvYyxcclxuICAgICAgICBzb3VyY2U6ICcnXHJcbiAgICB9KSk7XHJcbn1cclxuZnVuY3Rpb24gaXNFbmQoY29udGV4dCwgbW9kZSwgYW5jZXN0b3JzKSB7XHJcbiAgICBjb25zdCBzID0gY29udGV4dC5zb3VyY2U7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICBjYXNlIDAgLyogVGV4dE1vZGVzLkRBVEEgKi86XHJcbiAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHMsICc8LycpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBwcm9iYWJseSBiYWQgcGVyZm9ybWFuY2VcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNlc3RvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRzV2l0aEVuZFRhZ09wZW4ocywgYW5jZXN0b3JzW2ldLnRhZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMSAvKiBUZXh0TW9kZXMuUkNEQVRBICovOlxyXG4gICAgICAgIGNhc2UgMiAvKiBUZXh0TW9kZXMuUkFXVEVYVCAqLzoge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBsYXN0KGFuY2VzdG9ycyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgc3RhcnRzV2l0aEVuZFRhZ09wZW4ocywgcGFyZW50LnRhZykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIDMgLyogVGV4dE1vZGVzLkNEQVRBICovOlxyXG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChzLCAnXV0+JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFzO1xyXG59XHJcbmZ1bmN0aW9uIHN0YXJ0c1dpdGhFbmRUYWdPcGVuKHNvdXJjZSwgdGFnKSB7XHJcbiAgICByZXR1cm4gKHN0YXJ0c1dpdGgoc291cmNlLCAnPC8nKSAmJlxyXG4gICAgICAgIHNvdXJjZS5zbGljZSgyLCAyICsgdGFnLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gdGFnLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAvW1xcdFxcclxcblxcZiAvPl0vLnRlc3Qoc291cmNlWzIgKyB0YWcubGVuZ3RoXSB8fCAnPicpKTtcclxufVxuXG5mdW5jdGlvbiBob2lzdFN0YXRpYyhyb290LCBjb250ZXh0KSB7XHJcbiAgICB3YWxrKHJvb3QsIGNvbnRleHQsIFxyXG4gICAgLy8gUm9vdCBub2RlIGlzIHVuZm9ydHVuYXRlbHkgbm9uLWhvaXN0YWJsZSBkdWUgdG8gcG90ZW50aWFsIHBhcmVudFxyXG4gICAgLy8gZmFsbHRocm91Z2ggYXR0cmlidXRlcy5cclxuICAgIGlzU2luZ2xlRWxlbWVudFJvb3Qocm9vdCwgcm9vdC5jaGlsZHJlblswXSkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzU2luZ2xlRWxlbWVudFJvb3Qocm9vdCwgY2hpbGQpIHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHJvb3Q7XHJcbiAgICByZXR1cm4gKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgIGNoaWxkLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAhaXNTbG90T3V0bGV0KGNoaWxkKSk7XHJcbn1cclxuZnVuY3Rpb24gd2Fsayhub2RlLCBjb250ZXh0LCBkb05vdEhvaXN0Tm9kZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBub2RlO1xyXG4gICAgY29uc3Qgb3JpZ2luYWxDb3VudCA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgIGxldCBob2lzdGVkQ291bnQgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgLy8gb25seSBwbGFpbiBlbGVtZW50cyAmIHRleHQgY2FsbHMgYXJlIGVsaWdpYmxlIGZvciBob2lzdGluZy5cclxuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICBjaGlsZC50YWdUeXBlID09PSAwIC8qIEVsZW1lbnRUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50VHlwZSA9IGRvTm90SG9pc3ROb2RlXHJcbiAgICAgICAgICAgICAgICA/IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi9cclxuICAgICAgICAgICAgICAgIDogZ2V0Q29uc3RhbnRUeXBlKGNoaWxkLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGNvbnN0YW50VHlwZSA+IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb25zdGFudFR5cGUgPj0gMiAvKiBDb25zdGFudFR5cGVzLkNBTl9IT0lTVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvZGVnZW5Ob2RlLnBhdGNoRmxhZyA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0xIC8qIFBhdGNoRmxhZ3MuSE9JU1RFRCAqLyArICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgIC8qIEhPSVNURUQgKi9gIDogYGApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvZGVnZW5Ob2RlID0gY29udGV4dC5ob2lzdChjaGlsZC5jb2RlZ2VuTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RlZENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBjb250YWluIGR5bmFtaWMgY2hpbGRyZW4sIGJ1dCBpdHMgcHJvcHMgbWF5IGJlIGVsaWdpYmxlIGZvclxyXG4gICAgICAgICAgICAgICAgLy8gaG9pc3RpbmcuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlZ2VuTm9kZSA9IGNoaWxkLmNvZGVnZW5Ob2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9IGdldFBhdGNoRmxhZyhjb2RlZ2VuTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCghZmxhZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID09PSA1MTIgLyogUGF0Y2hGbGFncy5ORUVEX1BBVENIICovIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPT09IDEgLyogUGF0Y2hGbGFncy5URVhUICovKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRHZW5lcmF0ZWRQcm9wc0NvbnN0YW50VHlwZShjaGlsZCwgY29udGV4dCkgPj1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLyogQ29uc3RhbnRUeXBlcy5DQU5fSE9JU1QgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZXROb2RlUHJvcHMoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVnZW5Ob2RlLnByb3BzID0gY29udGV4dC5ob2lzdChwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlLmR5bmFtaWNQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlZ2VuTm9kZS5keW5hbWljUHJvcHMgPSBjb250ZXh0LmhvaXN0KGNvZGVnZW5Ob2RlLmR5bmFtaWNQcm9wcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09IDEyIC8qIE5vZGVUeXBlcy5URVhUX0NBTEwgKi8gJiZcclxuICAgICAgICAgICAgZ2V0Q29uc3RhbnRUeXBlKGNoaWxkLmNvbnRlbnQsIGNvbnRleHQpID49IDIgLyogQ29uc3RhbnRUeXBlcy5DQU5fSE9JU1QgKi8pIHtcclxuICAgICAgICAgICAgY2hpbGQuY29kZWdlbk5vZGUgPSBjb250ZXh0LmhvaXN0KGNoaWxkLmNvZGVnZW5Ob2RlKTtcclxuICAgICAgICAgICAgaG9pc3RlZENvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdhbGsgZnVydGhlclxyXG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzQ29tcG9uZW50ID0gY2hpbGQudGFnVHlwZSA9PT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovO1xyXG4gICAgICAgICAgICBpZiAoaXNDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc2NvcGVzLnZTbG90Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2FsayhjaGlsZCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChpc0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5zY29wZXMudlNsb3QtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZC50eXBlID09PSAxMSAvKiBOb2RlVHlwZXMuRk9SICovKSB7XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCBob2lzdCB2LWZvciBzaW5nbGUgY2hpbGQgYmVjYXVzZSBpdCBoYXMgdG8gYmUgYSBibG9ja1xyXG4gICAgICAgICAgICB3YWxrKGNoaWxkLCBjb250ZXh0LCBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjaGlsZC50eXBlID09PSA5IC8qIE5vZGVUeXBlcy5JRiAqLykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkLmJyYW5jaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgaG9pc3Qgdi1pZiBzaW5nbGUgY2hpbGQgYmVjYXVzZSBpdCBoYXMgdG8gYmUgYSBibG9ja1xyXG4gICAgICAgICAgICAgICAgd2FsayhjaGlsZC5icmFuY2hlc1tpXSwgY29udGV4dCwgY2hpbGQuYnJhbmNoZXNbaV0uY2hpbGRyZW4ubGVuZ3RoID09PSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChob2lzdGVkQ291bnQgJiYgY29udGV4dC50cmFuc2Zvcm1Ib2lzdCkge1xyXG4gICAgICAgIGNvbnRleHQudHJhbnNmb3JtSG9pc3QoY2hpbGRyZW4sIGNvbnRleHQsIG5vZGUpO1xyXG4gICAgfVxyXG4gICAgLy8gYWxsIGNoaWxkcmVuIHdlcmUgaG9pc3RlZCAtIHRoZSBlbnRpcmUgY2hpbGRyZW4gYXJyYXkgaXMgaG9pc3RhYmxlLlxyXG4gICAgaWYgKGhvaXN0ZWRDb3VudCAmJlxyXG4gICAgICAgIGhvaXN0ZWRDb3VudCA9PT0gb3JpZ2luYWxDb3VudCAmJlxyXG4gICAgICAgIG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgIG5vZGUudGFnVHlwZSA9PT0gMCAvKiBFbGVtZW50VHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgIG5vZGUuY29kZWdlbk5vZGUgJiZcclxuICAgICAgICBub2RlLmNvZGVnZW5Ob2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovICYmXHJcbiAgICAgICAgaXNBcnJheShub2RlLmNvZGVnZW5Ob2RlLmNoaWxkcmVuKSkge1xyXG4gICAgICAgIG5vZGUuY29kZWdlbk5vZGUuY2hpbGRyZW4gPSBjb250ZXh0LmhvaXN0KGNyZWF0ZUFycmF5RXhwcmVzc2lvbihub2RlLmNvZGVnZW5Ob2RlLmNoaWxkcmVuKSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0Q29uc3RhbnRUeXBlKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgY29uc3RhbnRDYWNoZSB9ID0gY29udGV4dDtcclxuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovOlxyXG4gICAgICAgICAgICBpZiAobm9kZS50YWdUeXBlICE9PSAwIC8qIEVsZW1lbnRUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWQgPSBjb25zdGFudENhY2hlLmdldChub2RlKTtcclxuICAgICAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVnZW5Ob2RlID0gbm9kZS5jb2RlZ2VuTm9kZTtcclxuICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlLnR5cGUgIT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29kZWdlbk5vZGUuaXNCbG9jayAmJlxyXG4gICAgICAgICAgICAgICAgbm9kZS50YWcgIT09ICdzdmcnICYmXHJcbiAgICAgICAgICAgICAgICBub2RlLnRhZyAhPT0gJ2ZvcmVpZ25PYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmbGFnID0gZ2V0UGF0Y2hGbGFnKGNvZGVnZW5Ob2RlKTtcclxuICAgICAgICAgICAgaWYgKCFmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0dXJuVHlwZSA9IDMgLyogQ29uc3RhbnRUeXBlcy5DQU5fU1RSSU5HSUZZICovO1xyXG4gICAgICAgICAgICAgICAgLy8gRWxlbWVudCBpdHNlbGYgaGFzIG5vIHBhdGNoIGZsYWcuIEhvd2V2ZXIgd2Ugc3RpbGwgbmVlZCB0byBjaGVjazpcclxuICAgICAgICAgICAgICAgIC8vIDEuIEV2ZW4gZm9yIGEgbm9kZSB3aXRoIG5vIHBhdGNoIGZsYWcsIGl0IGlzIHBvc3NpYmxlIGZvciBpdCB0byBjb250YWluXHJcbiAgICAgICAgICAgICAgICAvLyBub24taG9pc3RhYmxlIGV4cHJlc3Npb25zIHRoYXQgcmVmZXJzIHRvIHNjb3BlIHZhcmlhYmxlcywgZS5nLiBjb21waWxlclxyXG4gICAgICAgICAgICAgICAgLy8gaW5qZWN0ZWQga2V5cyBvciBjYWNoZWQgZXZlbnQgaGFuZGxlcnMuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGFsd2F5c1xyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGNvZGVnZW5Ob2RlJ3MgcHJvcHMgdG8gYmUgc3VyZS5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFByb3BzVHlwZSA9IGdldEdlbmVyYXRlZFByb3BzQ29uc3RhbnRUeXBlKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZFByb3BzVHlwZSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50Q2FjaGUuc2V0KG5vZGUsIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZFByb3BzVHlwZSA8IHJldHVyblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2VuZXJhdGVkUHJvcHNUeXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gMi4gaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gZ2V0Q29uc3RhbnRUeXBlKG5vZGUuY2hpbGRyZW5baV0sIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRDYWNoZS5zZXQobm9kZSwgMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUeXBlIDwgcmV0dXJuVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gY2hpbGRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIDMuIGlmIHRoZSB0eXBlIGlzIG5vdCBhbHJlYWR5IENBTl9TS0lQX1BBVENIIHdoaWNoIGlzIHRoZSBsb3dlc3Qgbm9uLTBcclxuICAgICAgICAgICAgICAgIC8vIHR5cGUsIGNoZWNrIGlmIGFueSBvZiB0aGUgcHJvcHMgY2FuIGNhdXNlIHRoZSB0eXBlIHRvIGJlIGxvd2VyZWRcclxuICAgICAgICAgICAgICAgIC8vIHdlIGNhbiBza2lwIGNhbl9wYXRjaCBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCBieSB0aGUgYWJzZW5jZSBvZiBhXHJcbiAgICAgICAgICAgICAgICAvLyBwYXRjaEZsYWcuXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dXJuVHlwZSA+IDEgLyogQ29uc3RhbnRUeXBlcy5DQU5fU0tJUF9QQVRDSCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5wcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gbm9kZS5wcm9wc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIHAubmFtZSA9PT0gJ2JpbmQnICYmIHAuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBUeXBlID0gZ2V0Q29uc3RhbnRUeXBlKHAuZXhwLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBUeXBlID09PSAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRDYWNoZS5zZXQobm9kZSwgMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwVHlwZSA8IHJldHVyblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gZXhwVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIG9ubHkgc3ZnL2ZvcmVpZ25PYmplY3QgY291bGQgYmUgYmxvY2sgaGVyZSwgaG93ZXZlciBpZiB0aGV5IGFyZVxyXG4gICAgICAgICAgICAgICAgLy8gc3RhdGljIHRoZW4gdGhleSBkb24ndCBuZWVkIHRvIGJlIGJsb2NrcyBzaW5jZSB0aGVyZSB3aWxsIGJlIG5vXHJcbiAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgdXBkYXRlcy5cclxuICAgICAgICAgICAgICAgIGlmIChjb2RlZ2VuTm9kZS5pc0Jsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0IHNldCBjdXN0b20gZGlyZWN0aXZlcy5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRDYWNoZS5zZXQobm9kZSwgMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUhlbHBlcihPUEVOX0JMT0NLKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUhlbHBlcihnZXRWTm9kZUJsb2NrSGVscGVyKGNvbnRleHQuaW5TU1IsIGNvZGVnZW5Ob2RlLmlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZWdlbk5vZGUuaXNCbG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKGdldFZOb2RlSGVscGVyKGNvbnRleHQuaW5TU1IsIGNvZGVnZW5Ob2RlLmlzQ29tcG9uZW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdGFudENhY2hlLnNldChub2RlLCByZXR1cm5UeXBlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3RhbnRDYWNoZS5zZXQobm9kZSwgMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgMiAvKiBOb2RlVHlwZXMuVEVYVCAqLzpcclxuICAgICAgICBjYXNlIDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi86XHJcbiAgICAgICAgICAgIHJldHVybiAzIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NUUklOR0lGWSAqLztcclxuICAgICAgICBjYXNlIDkgLyogTm9kZVR5cGVzLklGICovOlxyXG4gICAgICAgIGNhc2UgMTEgLyogTm9kZVR5cGVzLkZPUiAqLzpcclxuICAgICAgICBjYXNlIDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi86XHJcbiAgICAgICAgICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgIGNhc2UgNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLzpcclxuICAgICAgICBjYXNlIDEyIC8qIE5vZGVUeXBlcy5URVhUX0NBTEwgKi86XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudFR5cGUobm9kZS5jb250ZW50LCBjb250ZXh0KTtcclxuICAgICAgICBjYXNlIDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jb25zdFR5cGU7XHJcbiAgICAgICAgY2FzZSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBsZXQgcmV0dXJuVHlwZSA9IDMgLyogQ29uc3RhbnRUeXBlcy5DQU5fU1RSSU5HSUZZICovO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhjaGlsZCkgfHwgaXNTeW1ib2woY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFR5cGUgPSBnZXRDb25zdGFudFR5cGUoY2hpbGQsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRUeXBlIDwgcmV0dXJuVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBjaGlsZFR5cGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGU7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkgO1xyXG4gICAgICAgICAgICByZXR1cm4gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLztcclxuICAgIH1cclxufVxyXG5jb25zdCBhbGxvd0hvaXN0ZWRIZWxwZXJTZXQgPSBuZXcgU2V0KFtcclxuICAgIE5PUk1BTElaRV9DTEFTUyxcclxuICAgIE5PUk1BTElaRV9TVFlMRSxcclxuICAgIE5PUk1BTElaRV9QUk9QUyxcclxuICAgIEdVQVJEX1JFQUNUSVZFX1BST1BTXHJcbl0pO1xyXG5mdW5jdGlvbiBnZXRDb25zdGFudFR5cGVPZkhlbHBlckNhbGwodmFsdWUsIGNvbnRleHQpIHtcclxuICAgIGlmICh2YWx1ZS50eXBlID09PSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovICYmXHJcbiAgICAgICAgIWlzU3RyaW5nKHZhbHVlLmNhbGxlZSkgJiZcclxuICAgICAgICBhbGxvd0hvaXN0ZWRIZWxwZXJTZXQuaGFzKHZhbHVlLmNhbGxlZSkpIHtcclxuICAgICAgICBjb25zdCBhcmcgPSB2YWx1ZS5hcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKGFyZy50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnRUeXBlKGFyZywgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZy50eXBlID09PSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIG5lc3RlZCBoZWxwZXIgY2FsbCwgZS5nLiBgbm9ybWFsaXplUHJvcHMoZ3VhcmRSZWFjdGl2ZVByb3BzKGV4cCkpYFxyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnRUeXBlT2ZIZWxwZXJDYWxsKGFyZywgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbn1cclxuZnVuY3Rpb24gZ2V0R2VuZXJhdGVkUHJvcHNDb25zdGFudFR5cGUobm9kZSwgY29udGV4dCkge1xyXG4gICAgbGV0IHJldHVyblR5cGUgPSAzIC8qIENvbnN0YW50VHlwZXMuQ0FOX1NUUklOR0lGWSAqLztcclxuICAgIGNvbnN0IHByb3BzID0gZ2V0Tm9kZVByb3BzKG5vZGUpO1xyXG4gICAgaWYgKHByb3BzICYmIHByb3BzLnR5cGUgPT09IDE1IC8qIE5vZGVUeXBlcy5KU19PQkpFQ1RfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gcHJvcHM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgY29uc3Qga2V5VHlwZSA9IGdldENvbnN0YW50VHlwZShrZXksIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAoa2V5VHlwZSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGtleVR5cGUgPCByZXR1cm5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0ga2V5VHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdmFsdWVUeXBlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IGdldENvbnN0YW50VHlwZSh2YWx1ZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICAgICAgLy8gc29tZSBoZWxwZXIgY2FsbHMgY2FuIGJlIGhvaXN0ZWQsXHJcbiAgICAgICAgICAgICAgICAvLyBzdWNoIGFzIHRoZSBgbm9ybWFsaXplUHJvcHNgIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgZm9yIHByZS1ub3JtYWxpemUgY2xhc3MsXHJcbiAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byByZXNwZWN0IHRoZSBDb25zdGFudFR5cGUgb2YgdGhlIGhlbHBlcidzIGFyZ3VtZW50c1xyXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gZ2V0Q29uc3RhbnRUeXBlT2ZIZWxwZXJDYWxsKHZhbHVlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlIDwgcmV0dXJuVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHZhbHVlVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXR1cm5UeXBlO1xyXG59XHJcbmZ1bmN0aW9uIGdldE5vZGVQcm9wcyhub2RlKSB7XHJcbiAgICBjb25zdCBjb2RlZ2VuTm9kZSA9IG5vZGUuY29kZWdlbk5vZGU7XHJcbiAgICBpZiAoY29kZWdlbk5vZGUudHlwZSA9PT0gMTMgLyogTm9kZVR5cGVzLlZOT0RFX0NBTEwgKi8pIHtcclxuICAgICAgICByZXR1cm4gY29kZWdlbk5vZGUucHJvcHM7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0UGF0Y2hGbGFnKG5vZGUpIHtcclxuICAgIGNvbnN0IGZsYWcgPSBub2RlLnBhdGNoRmxhZztcclxuICAgIHJldHVybiBmbGFnID8gcGFyc2VJbnQoZmxhZywgMTApIDogdW5kZWZpbmVkO1xyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zZm9ybUNvbnRleHQocm9vdCwgeyBmaWxlbmFtZSA9ICcnLCBwcmVmaXhJZGVudGlmaWVycyA9IGZhbHNlLCBob2lzdFN0YXRpYyA9IGZhbHNlLCBjYWNoZUhhbmRsZXJzID0gZmFsc2UsIG5vZGVUcmFuc2Zvcm1zID0gW10sIGRpcmVjdGl2ZVRyYW5zZm9ybXMgPSB7fSwgdHJhbnNmb3JtSG9pc3QgPSBudWxsLCBpc0J1aWx0SW5Db21wb25lbnQgPSBOT09QLCBpc0N1c3RvbUVsZW1lbnQgPSBOT09QLCBleHByZXNzaW9uUGx1Z2lucyA9IFtdLCBzY29wZUlkID0gbnVsbCwgc2xvdHRlZCA9IHRydWUsIHNzciA9IGZhbHNlLCBpblNTUiA9IGZhbHNlLCBzc3JDc3NWYXJzID0gYGAsIGJpbmRpbmdNZXRhZGF0YSA9IEVNUFRZX09CSiwgaW5saW5lID0gZmFsc2UsIGlzVFMgPSBmYWxzZSwgb25FcnJvciA9IGRlZmF1bHRPbkVycm9yLCBvbldhcm4gPSBkZWZhdWx0T25XYXJuLCBjb21wYXRDb25maWcgfSkge1xyXG4gICAgY29uc3QgbmFtZU1hdGNoID0gZmlsZW5hbWUucmVwbGFjZSgvXFw/LiokLywgJycpLm1hdGNoKC8oW14vXFxcXF0rKVxcLlxcdyskLyk7XHJcbiAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgIC8vIG9wdGlvbnNcclxuICAgICAgICBzZWxmTmFtZTogbmFtZU1hdGNoICYmIGNhcGl0YWxpemUoY2FtZWxpemUkMShuYW1lTWF0Y2hbMV0pKSxcclxuICAgICAgICBwcmVmaXhJZGVudGlmaWVycyxcclxuICAgICAgICBob2lzdFN0YXRpYyxcclxuICAgICAgICBjYWNoZUhhbmRsZXJzLFxyXG4gICAgICAgIG5vZGVUcmFuc2Zvcm1zLFxyXG4gICAgICAgIGRpcmVjdGl2ZVRyYW5zZm9ybXMsXHJcbiAgICAgICAgdHJhbnNmb3JtSG9pc3QsXHJcbiAgICAgICAgaXNCdWlsdEluQ29tcG9uZW50LFxyXG4gICAgICAgIGlzQ3VzdG9tRWxlbWVudCxcclxuICAgICAgICBleHByZXNzaW9uUGx1Z2lucyxcclxuICAgICAgICBzY29wZUlkLFxyXG4gICAgICAgIHNsb3R0ZWQsXHJcbiAgICAgICAgc3NyLFxyXG4gICAgICAgIGluU1NSLFxyXG4gICAgICAgIHNzckNzc1ZhcnMsXHJcbiAgICAgICAgYmluZGluZ01ldGFkYXRhLFxyXG4gICAgICAgIGlubGluZSxcclxuICAgICAgICBpc1RTLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25XYXJuLFxyXG4gICAgICAgIGNvbXBhdENvbmZpZyxcclxuICAgICAgICAvLyBzdGF0ZVxyXG4gICAgICAgIHJvb3QsXHJcbiAgICAgICAgaGVscGVyczogbmV3IE1hcCgpLFxyXG4gICAgICAgIGNvbXBvbmVudHM6IG5ldyBTZXQoKSxcclxuICAgICAgICBkaXJlY3RpdmVzOiBuZXcgU2V0KCksXHJcbiAgICAgICAgaG9pc3RzOiBbXSxcclxuICAgICAgICBpbXBvcnRzOiBbXSxcclxuICAgICAgICBjb25zdGFudENhY2hlOiBuZXcgTWFwKCksXHJcbiAgICAgICAgdGVtcHM6IDAsXHJcbiAgICAgICAgY2FjaGVkOiAwLFxyXG4gICAgICAgIGlkZW50aWZpZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxyXG4gICAgICAgIHNjb3Blczoge1xyXG4gICAgICAgICAgICB2Rm9yOiAwLFxyXG4gICAgICAgICAgICB2U2xvdDogMCxcclxuICAgICAgICAgICAgdlByZTogMCxcclxuICAgICAgICAgICAgdk9uY2U6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICBjdXJyZW50Tm9kZTogcm9vdCxcclxuICAgICAgICBjaGlsZEluZGV4OiAwLFxyXG4gICAgICAgIGluVk9uY2U6IGZhbHNlLFxyXG4gICAgICAgIC8vIG1ldGhvZHNcclxuICAgICAgICBoZWxwZXIobmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGNvbnRleHQuaGVscGVycy5nZXQobmFtZSkgfHwgMDtcclxuICAgICAgICAgICAgY29udGV4dC5oZWxwZXJzLnNldChuYW1lLCBjb3VudCArIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUhlbHBlcihuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gY29udGV4dC5oZWxwZXJzLmdldChuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBjb3VudCAtIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaGVscGVycy5kZWxldGUobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmhlbHBlcnMuc2V0KG5hbWUsIGN1cnJlbnRDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGhlbHBlclN0cmluZyhuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXyR7aGVscGVyTmFtZU1hcFtjb250ZXh0LmhlbHBlcihuYW1lKV19YDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlcGxhY2VOb2RlKG5vZGUpIHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5jdXJyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBiZWluZyByZXBsYWNlZCBpcyBhbHJlYWR5IHJlbW92ZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVwbGFjZSByb290IG5vZGUuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGV4dC5wYXJlbnQuY2hpbGRyZW5bY29udGV4dC5jaGlsZEluZGV4XSA9IGNvbnRleHQuY3VycmVudE5vZGUgPSBub2RlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlTm9kZShub2RlKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWNvbnRleHQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZW1vdmUgcm9vdCBub2RlLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjb250ZXh0LnBhcmVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZhbEluZGV4ID0gbm9kZVxyXG4gICAgICAgICAgICAgICAgPyBsaXN0LmluZGV4T2Yobm9kZSlcclxuICAgICAgICAgICAgICAgIDogY29udGV4dC5jdXJyZW50Tm9kZVxyXG4gICAgICAgICAgICAgICAgICAgID8gY29udGV4dC5jaGlsZEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgcmVtb3ZhbEluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub2RlIGJlaW5nIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgY3VycmVudCBwYXJlbnRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZSA9PT0gY29udGV4dC5jdXJyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCBub2RlIHJlbW92ZWRcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5vbk5vZGVSZW1vdmVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIG5vZGUgcmVtb3ZlZFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY2hpbGRJbmRleCA+IHJlbW92YWxJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY2hpbGRJbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25Ob2RlUmVtb3ZlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRleHQucGFyZW50LmNoaWxkcmVuLnNwbGljZShyZW1vdmFsSW5kZXgsIDEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25Ob2RlUmVtb3ZlZDogKCkgPT4geyB9LFxyXG4gICAgICAgIGFkZElkZW50aWZpZXJzKGV4cCkge1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlSWRlbnRpZmllcnMoZXhwKSB7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob2lzdChleHApIHtcclxuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGV4cCkpXHJcbiAgICAgICAgICAgICAgICBleHAgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGV4cCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaG9pc3RzLnB1c2goZXhwKTtcclxuICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYF9ob2lzdGVkXyR7Y29udGV4dC5ob2lzdHMubGVuZ3RofWAsIGZhbHNlLCBleHAubG9jLCAyIC8qIENvbnN0YW50VHlwZXMuQ0FOX0hPSVNUICovKTtcclxuICAgICAgICAgICAgaWRlbnRpZmllci5ob2lzdGVkID0gZXhwO1xyXG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhY2hlKGV4cCwgaXNWTm9kZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDYWNoZUV4cHJlc3Npb24oY29udGV4dC5jYWNoZWQrKywgZXhwLCBpc1ZOb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAge1xyXG4gICAgICAgIGNvbnRleHQuZmlsdGVycyA9IG5ldyBTZXQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250ZXh0O1xyXG59XHJcbmZ1bmN0aW9uIHRyYW5zZm9ybShyb290LCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlVHJhbnNmb3JtQ29udGV4dChyb290LCBvcHRpb25zKTtcclxuICAgIHRyYXZlcnNlTm9kZShyb290LCBjb250ZXh0KTtcclxuICAgIGlmIChvcHRpb25zLmhvaXN0U3RhdGljKSB7XHJcbiAgICAgICAgaG9pc3RTdGF0aWMocm9vdCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbnMuc3NyKSB7XHJcbiAgICAgICAgY3JlYXRlUm9vdENvZGVnZW4ocm9vdCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICAvLyBmaW5hbGl6ZSBtZXRhIGluZm9ybWF0aW9uXHJcbiAgICByb290LmhlbHBlcnMgPSBbLi4uY29udGV4dC5oZWxwZXJzLmtleXMoKV07XHJcbiAgICByb290LmNvbXBvbmVudHMgPSBbLi4uY29udGV4dC5jb21wb25lbnRzXTtcclxuICAgIHJvb3QuZGlyZWN0aXZlcyA9IFsuLi5jb250ZXh0LmRpcmVjdGl2ZXNdO1xyXG4gICAgcm9vdC5pbXBvcnRzID0gY29udGV4dC5pbXBvcnRzO1xyXG4gICAgcm9vdC5ob2lzdHMgPSBjb250ZXh0LmhvaXN0cztcclxuICAgIHJvb3QudGVtcHMgPSBjb250ZXh0LnRlbXBzO1xyXG4gICAgcm9vdC5jYWNoZWQgPSBjb250ZXh0LmNhY2hlZDtcclxuICAgIHtcclxuICAgICAgICByb290LmZpbHRlcnMgPSBbLi4uY29udGV4dC5maWx0ZXJzXTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVSb290Q29kZWdlbihyb290LCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IGhlbHBlciB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHJvb3Q7XHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlblswXTtcclxuICAgICAgICAvLyBpZiB0aGUgc2luZ2xlIGNoaWxkIGlzIGFuIGVsZW1lbnQsIHR1cm4gaXQgaW50byBhIGJsb2NrLlxyXG4gICAgICAgIGlmIChpc1NpbmdsZUVsZW1lbnRSb290KHJvb3QsIGNoaWxkKSAmJiBjaGlsZC5jb2RlZ2VuTm9kZSkge1xyXG4gICAgICAgICAgICAvLyBzaW5nbGUgZWxlbWVudCByb290IGlzIG5ldmVyIGhvaXN0ZWQgc28gY29kZWdlbk5vZGUgd2lsbCBuZXZlciBiZVxyXG4gICAgICAgICAgICAvLyBTaW1wbGVFeHByZXNzaW9uTm9kZVxyXG4gICAgICAgICAgICBjb25zdCBjb2RlZ2VuTm9kZSA9IGNoaWxkLmNvZGVnZW5Ob2RlO1xyXG4gICAgICAgICAgICBpZiAoY29kZWdlbk5vZGUudHlwZSA9PT0gMTMgLyogTm9kZVR5cGVzLlZOT0RFX0NBTEwgKi8pIHtcclxuICAgICAgICAgICAgICAgIG1ha2VCbG9jayhjb2RlZ2VuTm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5jb2RlZ2VuTm9kZSA9IGNvZGVnZW5Ob2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gLSBzaW5nbGUgPHNsb3QvPiwgSWZOb2RlLCBGb3JOb2RlOiBhbHJlYWR5IGJsb2Nrcy5cclxuICAgICAgICAgICAgLy8gLSBzaW5nbGUgdGV4dCBub2RlOiBhbHdheXMgcGF0Y2hlZC5cclxuICAgICAgICAgICAgLy8gcm9vdCBjb2RlZ2VuIGZhbGxzIHRocm91Z2ggdmlhIGdlbk5vZGUoKVxyXG4gICAgICAgICAgICByb290LmNvZGVnZW5Ob2RlID0gY2hpbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIHJvb3QgaGFzIG11bHRpcGxlIG5vZGVzIC0gcmV0dXJuIGEgZnJhZ21lbnQgYmxvY2suXHJcbiAgICAgICAgbGV0IHBhdGNoRmxhZyA9IDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovO1xyXG4gICAgICAgIGxldCBwYXRjaEZsYWdUZXh0ID0gUGF0Y2hGbGFnTmFtZXNbNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi9dO1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBmcmFnbWVudCBhY3R1YWxseSBjb250YWlucyBhIHNpbmdsZSB2YWxpZCBjaGlsZCB3aXRoXHJcbiAgICAgICAgLy8gdGhlIHJlc3QgYmVpbmcgY29tbWVudHNcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLmZpbHRlcihjID0+IGMudHlwZSAhPT0gMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLykubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi87XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZ1RleHQgKz0gYCwgJHtQYXRjaEZsYWdOYW1lc1syMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi9dfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuY29kZWdlbk5vZGUgPSBjcmVhdGVWTm9kZUNhbGwoY29udGV4dCwgaGVscGVyKEZSQUdNRU5UKSwgdW5kZWZpbmVkLCByb290LmNoaWxkcmVuLCBwYXRjaEZsYWcgKyAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYCAvKiAke3BhdGNoRmxhZ1RleHR9ICovYCA6IGBgKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIHVuZGVmaW5lZCwgZmFsc2UgLyogaXNDb21wb25lbnQgKi8pO1xyXG4gICAgfVxyXG4gICAgZWxzZSA7XHJcbn1cclxuZnVuY3Rpb24gdHJhdmVyc2VDaGlsZHJlbihwYXJlbnQsIGNvbnRleHQpIHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGNvbnN0IG5vZGVSZW1vdmVkID0gKCkgPT4ge1xyXG4gICAgICAgIGktLTtcclxuICAgIH07XHJcbiAgICBmb3IgKDsgaSA8IHBhcmVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhjaGlsZCkpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGNvbnRleHQucGFyZW50ID0gcGFyZW50O1xyXG4gICAgICAgIGNvbnRleHQuY2hpbGRJbmRleCA9IGk7XHJcbiAgICAgICAgY29udGV4dC5vbk5vZGVSZW1vdmVkID0gbm9kZVJlbW92ZWQ7XHJcbiAgICAgICAgdHJhdmVyc2VOb2RlKGNoaWxkLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0cmF2ZXJzZU5vZGUobm9kZSwgY29udGV4dCkge1xyXG4gICAgY29udGV4dC5jdXJyZW50Tm9kZSA9IG5vZGU7XHJcbiAgICAvLyBhcHBseSB0cmFuc2Zvcm0gcGx1Z2luc1xyXG4gICAgY29uc3QgeyBub2RlVHJhbnNmb3JtcyB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IGV4aXRGbnMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBvbkV4aXQgPSBub2RlVHJhbnNmb3Jtc1tpXShub2RlLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAob25FeGl0KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9uRXhpdCkpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRGbnMucHVzaCguLi5vbkV4aXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhpdEZucy5wdXNoKG9uRXhpdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb250ZXh0LmN1cnJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vZGUgd2FzIHJlbW92ZWRcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgaGF2ZSBiZWVuIHJlcGxhY2VkXHJcbiAgICAgICAgICAgIG5vZGUgPSBjb250ZXh0LmN1cnJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovOlxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuc3NyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbmplY3QgaW1wb3J0IGZvciB0aGUgQ29tbWVudCBzeW1ib2wsIHdoaWNoIGlzIG5lZWRlZCBmb3IgY3JlYXRpbmdcclxuICAgICAgICAgICAgICAgIC8vIGNvbW1lbnQgbm9kZXMgd2l0aCBgY3JlYXRlVk5vZGVgXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhlbHBlcihDUkVBVEVfQ09NTUVOVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA1IC8qIE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OICovOlxyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHRyYXZlcnNlLCBidXQgd2UgbmVlZCB0byBpbmplY3QgdG9TdHJpbmcgaGVscGVyXHJcbiAgICAgICAgICAgIGlmICghY29udGV4dC5zc3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKFRPX0RJU1BMQVlfU1RSSU5HKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBmb3IgY29udGFpbmVyIHR5cGVzLCBmdXJ0aGVyIHRyYXZlcnNlIGRvd253YXJkc1xyXG4gICAgICAgIGNhc2UgOSAvKiBOb2RlVHlwZXMuSUYgKi86XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5icmFuY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VOb2RlKG5vZGUuYnJhbmNoZXNbaV0sIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTAgLyogTm9kZVR5cGVzLklGX0JSQU5DSCAqLzpcclxuICAgICAgICBjYXNlIDExIC8qIE5vZGVUeXBlcy5GT1IgKi86XHJcbiAgICAgICAgY2FzZSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovOlxyXG4gICAgICAgIGNhc2UgMCAvKiBOb2RlVHlwZXMuUk9PVCAqLzpcclxuICAgICAgICAgICAgdHJhdmVyc2VDaGlsZHJlbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBleGl0IHRyYW5zZm9ybXNcclxuICAgIGNvbnRleHQuY3VycmVudE5vZGUgPSBub2RlO1xyXG4gICAgbGV0IGkgPSBleGl0Rm5zLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBleGl0Rm5zW2ldKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJhbERpcmVjdGl2ZVRyYW5zZm9ybShuYW1lLCBmbikge1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IGlzU3RyaW5nKG5hbWUpXHJcbiAgICAgICAgPyAobikgPT4gbiA9PT0gbmFtZVxyXG4gICAgICAgIDogKG4pID0+IG5hbWUudGVzdChuKTtcclxuICAgIHJldHVybiAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gbm9kZTtcclxuICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBkaXJlY3RpdmUgdHJhbnNmb3JtcyBhcmUgbm90IGNvbmNlcm5lZCB3aXRoIHNsb3RzXHJcbiAgICAgICAgICAgIC8vIGFzIHRoZXkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBpbiB2U2xvdC50c1xyXG4gICAgICAgICAgICBpZiAobm9kZS50YWdUeXBlID09PSAzIC8qIEVsZW1lbnRUeXBlcy5URU1QTEFURSAqLyAmJiBwcm9wcy5zb21lKGlzVlNsb3QpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZXhpdEZucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSA3IC8qIE5vZGVUeXBlcy5ESVJFQ1RJVkUgKi8gJiYgbWF0Y2hlcyhwcm9wLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBkaXJlY3RpdmVzIGFyZSByZW1vdmVkIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsc28gd2UgcmVtb3ZlIHRoZW0gKmJlZm9yZSogYXBwbHlpbmcgc28gdGhhdCBpdCBjYW4gZnVydGhlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyYXZlcnNlIGl0c2VsZiBpbiBjYXNlIGl0IG1vdmVzIHRoZSBub2RlIGFyb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb25FeGl0ID0gZm4obm9kZSwgcHJvcCwgY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXhpdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpdEZucy5wdXNoKG9uRXhpdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGV4aXRGbnM7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxuXG5jb25zdCBQVVJFX0FOTk9UQVRJT04gPSBgLyojX19QVVJFX18qL2A7XHJcbmNvbnN0IGFsaWFzSGVscGVyID0gKHMpID0+IGAke2hlbHBlck5hbWVNYXBbc119OiBfJHtoZWxwZXJOYW1lTWFwW3NdfWA7XHJcbmZ1bmN0aW9uIGNyZWF0ZUNvZGVnZW5Db250ZXh0KGFzdCwgeyBtb2RlID0gJ2Z1bmN0aW9uJywgcHJlZml4SWRlbnRpZmllcnMgPSBtb2RlID09PSAnbW9kdWxlJywgc291cmNlTWFwID0gZmFsc2UsIGZpbGVuYW1lID0gYHRlbXBsYXRlLnZ1ZS5odG1sYCwgc2NvcGVJZCA9IG51bGwsIG9wdGltaXplSW1wb3J0cyA9IGZhbHNlLCBydW50aW1lR2xvYmFsTmFtZSA9IGBWdWVgLCBydW50aW1lTW9kdWxlTmFtZSA9IGB2dWVgLCBzc3JSdW50aW1lTW9kdWxlTmFtZSA9ICd2dWUvc2VydmVyLXJlbmRlcmVyJywgc3NyID0gZmFsc2UsIGlzVFMgPSBmYWxzZSwgaW5TU1IgPSBmYWxzZSB9KSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgIG1vZGUsXHJcbiAgICAgICAgcHJlZml4SWRlbnRpZmllcnMsXHJcbiAgICAgICAgc291cmNlTWFwLFxyXG4gICAgICAgIGZpbGVuYW1lLFxyXG4gICAgICAgIHNjb3BlSWQsXHJcbiAgICAgICAgb3B0aW1pemVJbXBvcnRzLFxyXG4gICAgICAgIHJ1bnRpbWVHbG9iYWxOYW1lLFxyXG4gICAgICAgIHJ1bnRpbWVNb2R1bGVOYW1lLFxyXG4gICAgICAgIHNzclJ1bnRpbWVNb2R1bGVOYW1lLFxyXG4gICAgICAgIHNzcixcclxuICAgICAgICBpc1RTLFxyXG4gICAgICAgIGluU1NSLFxyXG4gICAgICAgIHNvdXJjZTogYXN0LmxvYy5zb3VyY2UsXHJcbiAgICAgICAgY29kZTogYGAsXHJcbiAgICAgICAgY29sdW1uOiAxLFxyXG4gICAgICAgIGxpbmU6IDEsXHJcbiAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgIGluZGVudExldmVsOiAwLFxyXG4gICAgICAgIHB1cmU6IGZhbHNlLFxyXG4gICAgICAgIG1hcDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGhlbHBlcihrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBfJHtoZWxwZXJOYW1lTWFwW2tleV19YDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHB1c2goY29kZSwgbm9kZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmNvZGUgKz0gY29kZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZGVudCgpIHtcclxuICAgICAgICAgICAgbmV3bGluZSgrK2NvbnRleHQuaW5kZW50TGV2ZWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVpbmRlbnQod2l0aG91dE5ld0xpbmUgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAod2l0aG91dE5ld0xpbmUpIHtcclxuICAgICAgICAgICAgICAgIC0tY29udGV4dC5pbmRlbnRMZXZlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld2xpbmUoLS1jb250ZXh0LmluZGVudExldmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbmV3bGluZSgpIHtcclxuICAgICAgICAgICAgbmV3bGluZShjb250ZXh0LmluZGVudExldmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gbmV3bGluZShuKSB7XHJcbiAgICAgICAgY29udGV4dC5wdXNoKCdcXG4nICsgYCAgYC5yZXBlYXQobikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRleHQ7XHJcbn1cclxuZnVuY3Rpb24gZ2VuZXJhdGUoYXN0LCBvcHRpb25zID0ge30pIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVDb2RlZ2VuQ29udGV4dChhc3QsIG9wdGlvbnMpO1xyXG4gICAgaWYgKG9wdGlvbnMub25Db250ZXh0Q3JlYXRlZClcclxuICAgICAgICBvcHRpb25zLm9uQ29udGV4dENyZWF0ZWQoY29udGV4dCk7XHJcbiAgICBjb25zdCB7IG1vZGUsIHB1c2gsIHByZWZpeElkZW50aWZpZXJzLCBpbmRlbnQsIGRlaW5kZW50LCBuZXdsaW5lLCBzY29wZUlkLCBzc3IgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCBoYXNIZWxwZXJzID0gYXN0LmhlbHBlcnMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IHVzZVdpdGhCbG9jayA9ICFwcmVmaXhJZGVudGlmaWVycyAmJiBtb2RlICE9PSAnbW9kdWxlJztcclxuICAgIC8vIHByZWFtYmxlc1xyXG4gICAgLy8gaW4gc2V0dXAoKSBpbmxpbmUgbW9kZSwgdGhlIHByZWFtYmxlIGlzIGdlbmVyYXRlZCBpbiBhIHN1YiBjb250ZXh0XHJcbiAgICAvLyBhbmQgcmV0dXJuZWQgc2VwYXJhdGVseS5cclxuICAgIGNvbnN0IHByZWFtYmxlQ29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB7XHJcbiAgICAgICAgZ2VuRnVuY3Rpb25QcmVhbWJsZShhc3QsIHByZWFtYmxlQ29udGV4dCk7XHJcbiAgICB9XHJcbiAgICAvLyBlbnRlciByZW5kZXIgZnVuY3Rpb25cclxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHNzciA/IGBzc3JSZW5kZXJgIDogYHJlbmRlcmA7XHJcbiAgICBjb25zdCBhcmdzID0gc3NyID8gWydfY3R4JywgJ19wdXNoJywgJ19wYXJlbnQnLCAnX2F0dHJzJ10gOiBbJ19jdHgnLCAnX2NhY2hlJ107XHJcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhcmdzLmpvaW4oJywgJyk7XHJcbiAgICB7XHJcbiAgICAgICAgcHVzaChgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9KCR7c2lnbmF0dXJlfSkge2ApO1xyXG4gICAgfVxyXG4gICAgaW5kZW50KCk7XHJcbiAgICBpZiAodXNlV2l0aEJsb2NrKSB7XHJcbiAgICAgICAgcHVzaChgd2l0aCAoX2N0eCkge2ApO1xyXG4gICAgICAgIGluZGVudCgpO1xyXG4gICAgICAgIC8vIGZ1bmN0aW9uIG1vZGUgY29uc3QgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBpbnNpZGUgd2l0aCBibG9ja1xyXG4gICAgICAgIC8vIGFsc28gdGhleSBzaG91bGQgYmUgcmVuYW1lZCB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCB1c2VyIHByb3BlcnRpZXNcclxuICAgICAgICBpZiAoaGFzSGVscGVycykge1xyXG4gICAgICAgICAgICBwdXNoKGBjb25zdCB7ICR7YXN0LmhlbHBlcnMubWFwKGFsaWFzSGVscGVyKS5qb2luKCcsICcpfSB9ID0gX1Z1ZWApO1xyXG4gICAgICAgICAgICBwdXNoKGBcXG5gKTtcclxuICAgICAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGdlbmVyYXRlIGFzc2V0IHJlc29sdXRpb24gc3RhdGVtZW50c1xyXG4gICAgaWYgKGFzdC5jb21wb25lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIGdlbkFzc2V0cyhhc3QuY29tcG9uZW50cywgJ2NvbXBvbmVudCcsIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChhc3QuZGlyZWN0aXZlcy5sZW5ndGggfHwgYXN0LnRlbXBzID4gMCkge1xyXG4gICAgICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFzdC5kaXJlY3RpdmVzLmxlbmd0aCkge1xyXG4gICAgICAgIGdlbkFzc2V0cyhhc3QuZGlyZWN0aXZlcywgJ2RpcmVjdGl2ZScsIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChhc3QudGVtcHMgPiAwKSB7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYXN0LmZpbHRlcnMgJiYgYXN0LmZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIGdlbkFzc2V0cyhhc3QuZmlsdGVycywgJ2ZpbHRlcicsIGNvbnRleHQpO1xyXG4gICAgICAgIG5ld2xpbmUoKTtcclxuICAgIH1cclxuICAgIGlmIChhc3QudGVtcHMgPiAwKSB7XHJcbiAgICAgICAgcHVzaChgbGV0IGApO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXN0LnRlbXBzOyBpKyspIHtcclxuICAgICAgICAgICAgcHVzaChgJHtpID4gMCA/IGAsIGAgOiBgYH1fdGVtcCR7aX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYXN0LmNvbXBvbmVudHMubGVuZ3RoIHx8IGFzdC5kaXJlY3RpdmVzLmxlbmd0aCB8fCBhc3QudGVtcHMpIHtcclxuICAgICAgICBwdXNoKGBcXG5gKTtcclxuICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICB9XHJcbiAgICAvLyBnZW5lcmF0ZSB0aGUgVk5vZGUgdHJlZSBleHByZXNzaW9uXHJcbiAgICBpZiAoIXNzcikge1xyXG4gICAgICAgIHB1c2goYHJldHVybiBgKTtcclxuICAgIH1cclxuICAgIGlmIChhc3QuY29kZWdlbk5vZGUpIHtcclxuICAgICAgICBnZW5Ob2RlKGFzdC5jb2RlZ2VuTm9kZSwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwdXNoKGBudWxsYCk7XHJcbiAgICB9XHJcbiAgICBpZiAodXNlV2l0aEJsb2NrKSB7XHJcbiAgICAgICAgZGVpbmRlbnQoKTtcclxuICAgICAgICBwdXNoKGB9YCk7XHJcbiAgICB9XHJcbiAgICBkZWluZGVudCgpO1xyXG4gICAgcHVzaChgfWApO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhc3QsXHJcbiAgICAgICAgY29kZTogY29udGV4dC5jb2RlLFxyXG4gICAgICAgIHByZWFtYmxlOiBgYCxcclxuICAgICAgICAvLyBTb3VyY2VNYXBHZW5lcmF0b3IgZG9lcyBoYXZlIHRvSlNPTigpIG1ldGhvZCBidXQgaXQncyBub3QgaW4gdGhlIHR5cGVzXHJcbiAgICAgICAgbWFwOiBjb250ZXh0Lm1hcCA/IGNvbnRleHQubWFwLnRvSlNPTigpIDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdlbkZ1bmN0aW9uUHJlYW1ibGUoYXN0LCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHNzciwgcHJlZml4SWRlbnRpZmllcnMsIHB1c2gsIG5ld2xpbmUsIHJ1bnRpbWVNb2R1bGVOYW1lLCBydW50aW1lR2xvYmFsTmFtZSwgc3NyUnVudGltZU1vZHVsZU5hbWUgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCBWdWVCaW5kaW5nID0gcnVudGltZUdsb2JhbE5hbWU7XHJcbiAgICAvLyBHZW5lcmF0ZSBjb25zdCBkZWNsYXJhdGlvbiBmb3IgaGVscGVyc1xyXG4gICAgLy8gSW4gcHJlZml4IG1vZGUsIHdlIHBsYWNlIHRoZSBjb25zdCBkZWNsYXJhdGlvbiBhdCB0b3Agc28gaXQncyBkb25lXHJcbiAgICAvLyBvbmx5IG9uY2U7IEJ1dCBpZiB3ZSBub3QgcHJlZml4aW5nLCB3ZSBwbGFjZSB0aGUgZGVjbGFyYXRpb24gaW5zaWRlIHRoZVxyXG4gICAgLy8gd2l0aCBibG9jayBzbyBpdCBkb2Vzbid0IGluY3VyIHRoZSBgaW5gIGNoZWNrIGNvc3QgZm9yIGV2ZXJ5IGhlbHBlciBhY2Nlc3MuXHJcbiAgICBpZiAoYXN0LmhlbHBlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLy8gXCJ3aXRoXCIgbW9kZS5cclxuICAgICAgICAgICAgLy8gc2F2ZSBWdWUgaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZSB0byBhdm9pZCBjb2xsaXNpb25cclxuICAgICAgICAgICAgcHVzaChgY29uc3QgX1Z1ZSA9ICR7VnVlQmluZGluZ31cXG5gKTtcclxuICAgICAgICAgICAgLy8gaW4gXCJ3aXRoXCIgbW9kZSwgaGVscGVycyBhcmUgZGVjbGFyZWQgaW5zaWRlIHRoZSB3aXRoIGJsb2NrIHRvIGF2b2lkXHJcbiAgICAgICAgICAgIC8vIGhhcyBjaGVjayBjb3N0LCBidXQgaG9pc3RzIGFyZSBsaWZ0ZWQgb3V0IG9mIHRoZSBmdW5jdGlvbiAtIHdlIG5lZWRcclxuICAgICAgICAgICAgLy8gdG8gcHJvdmlkZSB0aGUgaGVscGVyIGhlcmUuXHJcbiAgICAgICAgICAgIGlmIChhc3QuaG9pc3RzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGljSGVscGVycyA9IFtcclxuICAgICAgICAgICAgICAgICAgICBDUkVBVEVfVk5PREUsXHJcbiAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX0VMRU1FTlRfVk5PREUsXHJcbiAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX0NPTU1FTlQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX1RFWFQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ1JFQVRFX1NUQVRJQ1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaGVscGVyID0+IGFzdC5oZWxwZXJzLmluY2x1ZGVzKGhlbHBlcikpXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhbGlhc0hlbHBlcilcclxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcclxuICAgICAgICAgICAgICAgIHB1c2goYGNvbnN0IHsgJHtzdGF0aWNIZWxwZXJzfSB9ID0gX1Z1ZVxcbmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2VuSG9pc3RzKGFzdC5ob2lzdHMsIGNvbnRleHQpO1xyXG4gICAgbmV3bGluZSgpO1xyXG4gICAgcHVzaChgcmV0dXJuIGApO1xyXG59XHJcbmZ1bmN0aW9uIGdlbkFzc2V0cyhhc3NldHMsIHR5cGUsIHsgaGVscGVyLCBwdXNoLCBuZXdsaW5lLCBpc1RTIH0pIHtcclxuICAgIGNvbnN0IHJlc29sdmVyID0gaGVscGVyKHR5cGUgPT09ICdmaWx0ZXInXHJcbiAgICAgICAgPyBSRVNPTFZFX0ZJTFRFUlxyXG4gICAgICAgIDogdHlwZSA9PT0gJ2NvbXBvbmVudCdcclxuICAgICAgICAgICAgPyBSRVNPTFZFX0NPTVBPTkVOVFxyXG4gICAgICAgICAgICA6IFJFU09MVkVfRElSRUNUSVZFKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGlkID0gYXNzZXRzW2ldO1xyXG4gICAgICAgIC8vIHBvdGVudGlhbCBjb21wb25lbnQgaW1wbGljaXQgc2VsZi1yZWZlcmVuY2UgaW5mZXJyZWQgZnJvbSBTRkMgZmlsZW5hbWVcclxuICAgICAgICBjb25zdCBtYXliZVNlbGZSZWZlcmVuY2UgPSBpZC5lbmRzV2l0aCgnX19zZWxmJyk7XHJcbiAgICAgICAgaWYgKG1heWJlU2VsZlJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDAsIC02KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHVzaChgY29uc3QgJHt0b1ZhbGlkQXNzZXRJZChpZCwgdHlwZSl9ID0gJHtyZXNvbHZlcn0oJHtKU09OLnN0cmluZ2lmeShpZCl9JHttYXliZVNlbGZSZWZlcmVuY2UgPyBgLCB0cnVlYCA6IGBgfSkke2lzVFMgPyBgIWAgOiBgYH1gKTtcclxuICAgICAgICBpZiAoaSA8IGFzc2V0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuSG9pc3RzKGhvaXN0cywgY29udGV4dCkge1xyXG4gICAgaWYgKCFob2lzdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29udGV4dC5wdXJlID0gdHJ1ZTtcclxuICAgIGNvbnN0IHsgcHVzaCwgbmV3bGluZSwgaGVscGVyLCBzY29wZUlkLCBtb2RlIH0gPSBjb250ZXh0O1xyXG4gICAgbmV3bGluZSgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBob2lzdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBleHAgPSBob2lzdHNbaV07XHJcbiAgICAgICAgaWYgKGV4cCkge1xyXG4gICAgICAgICAgICBwdXNoKGBjb25zdCBfaG9pc3RlZF8ke2kgKyAxfSA9ICR7YGB9YCk7XHJcbiAgICAgICAgICAgIGdlbk5vZGUoZXhwLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgbmV3bGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnRleHQucHVyZSA9IGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGV4dCQxKG4pIHtcclxuICAgIHJldHVybiAoaXNTdHJpbmcobikgfHxcclxuICAgICAgICBuLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovIHx8XHJcbiAgICAgICAgbi50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovIHx8XHJcbiAgICAgICAgbi50eXBlID09PSA1IC8qIE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OICovIHx8XHJcbiAgICAgICAgbi50eXBlID09PSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Ob2RlTGlzdEFzQXJyYXkobm9kZXMsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IG11bHRpbGluZXMgPSBub2Rlcy5sZW5ndGggPiAzIHx8XHJcbiAgICAgICAgKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpICYmIG5vZGVzLnNvbWUobiA9PiBpc0FycmF5KG4pIHx8ICFpc1RleHQkMShuKSkpO1xyXG4gICAgY29udGV4dC5wdXNoKGBbYCk7XHJcbiAgICBtdWx0aWxpbmVzICYmIGNvbnRleHQuaW5kZW50KCk7XHJcbiAgICBnZW5Ob2RlTGlzdChub2RlcywgY29udGV4dCwgbXVsdGlsaW5lcyk7XHJcbiAgICBtdWx0aWxpbmVzICYmIGNvbnRleHQuZGVpbmRlbnQoKTtcclxuICAgIGNvbnRleHQucHVzaChgXWApO1xyXG59XHJcbmZ1bmN0aW9uIGdlbk5vZGVMaXN0KG5vZGVzLCBjb250ZXh0LCBtdWx0aWxpbmVzID0gZmFsc2UsIGNvbW1hID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBuZXdsaW5lIH0gPSBjb250ZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcobm9kZSkpIHtcclxuICAgICAgICAgICAgcHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xyXG4gICAgICAgICAgICBnZW5Ob2RlTGlzdEFzQXJyYXkobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBnZW5Ob2RlKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA8IG5vZGVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgaWYgKG11bHRpbGluZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbW1hICYmIHB1c2goJywnKTtcclxuICAgICAgICAgICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbW1hICYmIHB1c2goJywgJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuTm9kZShub2RlLCBjb250ZXh0KSB7XHJcbiAgICBpZiAoaXNTdHJpbmcobm9kZSkpIHtcclxuICAgICAgICBjb250ZXh0LnB1c2gobm9kZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU3ltYm9sKG5vZGUpKSB7XHJcbiAgICAgICAgY29udGV4dC5wdXNoKGNvbnRleHQuaGVscGVyKG5vZGUpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xyXG4gICAgICAgIGNhc2UgMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLzpcclxuICAgICAgICBjYXNlIDkgLyogTm9kZVR5cGVzLklGICovOlxyXG4gICAgICAgIGNhc2UgMTEgLyogTm9kZVR5cGVzLkZPUiAqLzpcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICBhc3NlcnQobm9kZS5jb2RlZ2VuTm9kZSAhPSBudWxsLCBgQ29kZWdlbiBub2RlIGlzIG1pc3NpbmcgZm9yIGVsZW1lbnQvaWYvZm9yIG5vZGUuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBBcHBseSBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1zIGZpcnN0LmApO1xyXG4gICAgICAgICAgICBnZW5Ob2RlKG5vZGUuY29kZWdlbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDIgLyogTm9kZVR5cGVzLlRFWFQgKi86XHJcbiAgICAgICAgICAgIGdlblRleHQobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLzpcclxuICAgICAgICAgICAgZ2VuSW50ZXJwb2xhdGlvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovOlxyXG4gICAgICAgICAgICBnZW5Ob2RlKG5vZGUuY29kZWdlbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkNvbXBvdW5kRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovOlxyXG4gICAgICAgICAgICBnZW5Db21tZW50KG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovOlxyXG4gICAgICAgICAgICBnZW5WTm9kZUNhbGwobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTQgLyogTm9kZVR5cGVzLkpTX0NBTExfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgZ2VuQ2FsbEV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTUgLyogTm9kZVR5cGVzLkpTX09CSkVDVF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5PYmplY3RFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE3IC8qIE5vZGVUeXBlcy5KU19BUlJBWV9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5BcnJheUV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTggLyogTm9kZVR5cGVzLkpTX0ZVTkNUSU9OX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGdlbkZ1bmN0aW9uRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOSAvKiBOb2RlVHlwZXMuSlNfQ09ORElUSU9OQUxfRVhQUkVTU0lPTiAqLzpcclxuICAgICAgICAgICAgZ2VuQ29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDIwIC8qIE5vZGVUeXBlcy5KU19DQUNIRV9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICBnZW5DYWNoZUV4cHJlc3Npb24obm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjEgLyogTm9kZVR5cGVzLkpTX0JMT0NLX1NUQVRFTUVOVCAqLzpcclxuICAgICAgICAgICAgZ2VuTm9kZUxpc3Qobm9kZS5ib2R5LCBjb250ZXh0LCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIFNTUiBvbmx5IHR5cGVzXHJcbiAgICAgICAgY2FzZSAyMiAvKiBOb2RlVHlwZXMuSlNfVEVNUExBVEVfTElURVJBTCAqLzpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyMyAvKiBOb2RlVHlwZXMuSlNfSUZfU1RBVEVNRU5UICovOlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI0IC8qIE5vZGVUeXBlcy5KU19BU1NJR05NRU5UX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjUgLyogTm9kZVR5cGVzLkpTX1NFUVVFTkNFX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjYgLyogTm9kZVR5cGVzLkpTX1JFVFVSTl9TVEFURU1FTlQgKi86XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgY2FzZSAxMCAvKiBOb2RlVHlwZXMuSUZfQlJBTkNIICovOlxyXG4gICAgICAgICAgICAvLyBub29wXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYHVuaGFuZGxlZCBjb2RlZ2VuIG5vZGUgdHlwZTogJHtub2RlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZXhoYXVzdCBhbGwgcG9zc2libGUgdHlwZXNcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4aGF1c3RpdmVDaGVjayA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhoYXVzdGl2ZUNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuVGV4dChub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnB1c2goSlNPTi5zdHJpbmdpZnkobm9kZS5jb250ZW50KSwgbm9kZSk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IGNvbnRlbnQsIGlzU3RhdGljIH0gPSBub2RlO1xyXG4gICAgY29udGV4dC5wdXNoKGlzU3RhdGljID8gSlNPTi5zdHJpbmdpZnkoY29udGVudCkgOiBjb250ZW50LCBub2RlKTtcclxufVxyXG5mdW5jdGlvbiBnZW5JbnRlcnBvbGF0aW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgcHVzaCwgaGVscGVyLCBwdXJlIH0gPSBjb250ZXh0O1xyXG4gICAgaWYgKHB1cmUpXHJcbiAgICAgICAgcHVzaChQVVJFX0FOTk9UQVRJT04pO1xyXG4gICAgcHVzaChgJHtoZWxwZXIoVE9fRElTUExBWV9TVFJJTkcpfShgKTtcclxuICAgIGdlbk5vZGUobm9kZS5jb250ZW50LCBjb250ZXh0KTtcclxuICAgIHB1c2goYClgKTtcclxufVxyXG5mdW5jdGlvbiBnZW5Db21wb3VuZEV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhjaGlsZCkpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wdXNoKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlbk5vZGUoY2hpbGQsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZW5FeHByZXNzaW9uQXNQcm9wZXJ0eUtleShub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2ggfSA9IGNvbnRleHQ7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSA4IC8qIE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgcHVzaChgW2ApO1xyXG4gICAgICAgIGdlbkNvbXBvdW5kRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KTtcclxuICAgICAgICBwdXNoKGBdYCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLmlzU3RhdGljKSB7XHJcbiAgICAgICAgLy8gb25seSBxdW90ZSBrZXlzIGlmIG5lY2Vzc2FyeVxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBpc1NpbXBsZUlkZW50aWZpZXIobm9kZS5jb250ZW50KVxyXG4gICAgICAgICAgICA/IG5vZGUuY29udGVudFxyXG4gICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KG5vZGUuY29udGVudCk7XHJcbiAgICAgICAgcHVzaCh0ZXh0LCBub2RlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHB1c2goYFske25vZGUuY29udGVudH1dYCwgbm9kZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuQ29tbWVudChub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2gsIGhlbHBlciwgcHVyZSB9ID0gY29udGV4dDtcclxuICAgIGlmIChwdXJlKSB7XHJcbiAgICAgICAgcHVzaChQVVJFX0FOTk9UQVRJT04pO1xyXG4gICAgfVxyXG4gICAgcHVzaChgJHtoZWxwZXIoQ1JFQVRFX0NPTU1FTlQpfSgke0pTT04uc3RyaW5naWZ5KG5vZGUuY29udGVudCl9KWAsIG5vZGUpO1xyXG59XHJcbmZ1bmN0aW9uIGdlblZOb2RlQ2FsbChub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2gsIGhlbHBlciwgcHVyZSB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IHsgdGFnLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzLCBkaXJlY3RpdmVzLCBpc0Jsb2NrLCBkaXNhYmxlVHJhY2tpbmcsIGlzQ29tcG9uZW50IH0gPSBub2RlO1xyXG4gICAgaWYgKGRpcmVjdGl2ZXMpIHtcclxuICAgICAgICBwdXNoKGhlbHBlcihXSVRIX0RJUkVDVElWRVMpICsgYChgKTtcclxuICAgIH1cclxuICAgIGlmIChpc0Jsb2NrKSB7XHJcbiAgICAgICAgcHVzaChgKCR7aGVscGVyKE9QRU5fQkxPQ0spfSgke2Rpc2FibGVUcmFja2luZyA/IGB0cnVlYCA6IGBgfSksIGApO1xyXG4gICAgfVxyXG4gICAgaWYgKHB1cmUpIHtcclxuICAgICAgICBwdXNoKFBVUkVfQU5OT1RBVElPTik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYWxsSGVscGVyID0gaXNCbG9ja1xyXG4gICAgICAgID8gZ2V0Vk5vZGVCbG9ja0hlbHBlcihjb250ZXh0LmluU1NSLCBpc0NvbXBvbmVudClcclxuICAgICAgICA6IGdldFZOb2RlSGVscGVyKGNvbnRleHQuaW5TU1IsIGlzQ29tcG9uZW50KTtcclxuICAgIHB1c2goaGVscGVyKGNhbGxIZWxwZXIpICsgYChgLCBub2RlKTtcclxuICAgIGdlbk5vZGVMaXN0KGdlbk51bGxhYmxlQXJncyhbdGFnLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzXSksIGNvbnRleHQpO1xyXG4gICAgcHVzaChgKWApO1xyXG4gICAgaWYgKGlzQmxvY2spIHtcclxuICAgICAgICBwdXNoKGApYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlyZWN0aXZlcykge1xyXG4gICAgICAgIHB1c2goYCwgYCk7XHJcbiAgICAgICAgZ2VuTm9kZShkaXJlY3RpdmVzLCBjb250ZXh0KTtcclxuICAgICAgICBwdXNoKGApYCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2VuTnVsbGFibGVBcmdzKGFyZ3MpIHtcclxuICAgIGxldCBpID0gYXJncy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgaWYgKGFyZ3NbaV0gIT0gbnVsbClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJncy5zbGljZSgwLCBpICsgMSkubWFwKGFyZyA9PiBhcmcgfHwgYG51bGxgKTtcclxufVxyXG4vLyBKYXZhU2NyaXB0XHJcbmZ1bmN0aW9uIGdlbkNhbGxFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHsgcHVzaCwgaGVscGVyLCBwdXJlIH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3QgY2FsbGVlID0gaXNTdHJpbmcobm9kZS5jYWxsZWUpID8gbm9kZS5jYWxsZWUgOiBoZWxwZXIobm9kZS5jYWxsZWUpO1xyXG4gICAgaWYgKHB1cmUpIHtcclxuICAgICAgICBwdXNoKFBVUkVfQU5OT1RBVElPTik7XHJcbiAgICB9XHJcbiAgICBwdXNoKGNhbGxlZSArIGAoYCwgbm9kZSk7XHJcbiAgICBnZW5Ob2RlTGlzdChub2RlLmFyZ3VtZW50cywgY29udGV4dCk7XHJcbiAgICBwdXNoKGApYCk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuT2JqZWN0RXhwcmVzc2lvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHB1c2gsIGluZGVudCwgZGVpbmRlbnQsIG5ld2xpbmUgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IG5vZGU7XHJcbiAgICBpZiAoIXByb3BlcnRpZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcHVzaChge31gLCBub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtdWx0aWxpbmVzID0gcHJvcGVydGllcy5sZW5ndGggPiAxIHx8XHJcbiAgICAgICAgKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpICYmXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc29tZShwID0+IHAudmFsdWUudHlwZSAhPT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pKTtcclxuICAgIHB1c2gobXVsdGlsaW5lcyA/IGB7YCA6IGB7IGApO1xyXG4gICAgbXVsdGlsaW5lcyAmJiBpbmRlbnQoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAvLyBrZXlcclxuICAgICAgICBnZW5FeHByZXNzaW9uQXNQcm9wZXJ0eUtleShrZXksIGNvbnRleHQpO1xyXG4gICAgICAgIHB1c2goYDogYCk7XHJcbiAgICAgICAgLy8gdmFsdWVcclxuICAgICAgICBnZW5Ob2RlKHZhbHVlLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoaSA8IHByb3BlcnRpZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAvLyB3aWxsIG9ubHkgcmVhY2ggdGhpcyBpZiBpdCdzIG11bHRpbGluZXNcclxuICAgICAgICAgICAgcHVzaChgLGApO1xyXG4gICAgICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbXVsdGlsaW5lcyAmJiBkZWluZGVudCgpO1xyXG4gICAgcHVzaChtdWx0aWxpbmVzID8gYH1gIDogYCB9YCk7XHJcbn1cclxuZnVuY3Rpb24gZ2VuQXJyYXlFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGdlbk5vZGVMaXN0QXNBcnJheShub2RlLmVsZW1lbnRzLCBjb250ZXh0KTtcclxufVxyXG5mdW5jdGlvbiBnZW5GdW5jdGlvbkV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBpbmRlbnQsIGRlaW5kZW50IH0gPSBjb250ZXh0O1xyXG4gICAgY29uc3QgeyBwYXJhbXMsIHJldHVybnMsIGJvZHksIG5ld2xpbmUsIGlzU2xvdCB9ID0gbm9kZTtcclxuICAgIGlmIChpc1Nsb3QpIHtcclxuICAgICAgICAvLyB3cmFwIHNsb3QgZnVuY3Rpb25zIHdpdGggb3duZXIgY29udGV4dFxyXG4gICAgICAgIHB1c2goYF8ke2hlbHBlck5hbWVNYXBbV0lUSF9DVFhdfShgKTtcclxuICAgIH1cclxuICAgIHB1c2goYChgLCBub2RlKTtcclxuICAgIGlmIChpc0FycmF5KHBhcmFtcykpIHtcclxuICAgICAgICBnZW5Ob2RlTGlzdChwYXJhbXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgZ2VuTm9kZShwYXJhbXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgcHVzaChgKSA9PiBgKTtcclxuICAgIGlmIChuZXdsaW5lIHx8IGJvZHkpIHtcclxuICAgICAgICBwdXNoKGB7YCk7XHJcbiAgICAgICAgaW5kZW50KCk7XHJcbiAgICB9XHJcbiAgICBpZiAocmV0dXJucykge1xyXG4gICAgICAgIGlmIChuZXdsaW5lKSB7XHJcbiAgICAgICAgICAgIHB1c2goYHJldHVybiBgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQXJyYXkocmV0dXJucykpIHtcclxuICAgICAgICAgICAgZ2VuTm9kZUxpc3RBc0FycmF5KHJldHVybnMsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VuTm9kZShyZXR1cm5zLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChib2R5KSB7XHJcbiAgICAgICAgZ2VuTm9kZShib2R5LCBjb250ZXh0KTtcclxuICAgIH1cclxuICAgIGlmIChuZXdsaW5lIHx8IGJvZHkpIHtcclxuICAgICAgICBkZWluZGVudCgpO1xyXG4gICAgICAgIHB1c2goYH1gKTtcclxuICAgIH1cclxuICAgIGlmIChpc1Nsb3QpIHtcclxuICAgICAgICBpZiAobm9kZS5pc05vblNjb3BlZFNsb3QpIHtcclxuICAgICAgICAgICAgcHVzaChgLCB1bmRlZmluZWQsIHRydWVgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHVzaChgKWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdlbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCB7IHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgbmV3bGluZTogbmVlZE5ld2xpbmUgfSA9IG5vZGU7XHJcbiAgICBjb25zdCB7IHB1c2gsIGluZGVudCwgZGVpbmRlbnQsIG5ld2xpbmUgfSA9IGNvbnRleHQ7XHJcbiAgICBpZiAodGVzdC50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGNvbnN0IG5lZWRzUGFyZW5zID0gIWlzU2ltcGxlSWRlbnRpZmllcih0ZXN0LmNvbnRlbnQpO1xyXG4gICAgICAgIG5lZWRzUGFyZW5zICYmIHB1c2goYChgKTtcclxuICAgICAgICBnZW5FeHByZXNzaW9uKHRlc3QsIGNvbnRleHQpO1xyXG4gICAgICAgIG5lZWRzUGFyZW5zICYmIHB1c2goYClgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHB1c2goYChgKTtcclxuICAgICAgICBnZW5Ob2RlKHRlc3QsIGNvbnRleHQpO1xyXG4gICAgICAgIHB1c2goYClgKTtcclxuICAgIH1cclxuICAgIG5lZWROZXdsaW5lICYmIGluZGVudCgpO1xyXG4gICAgY29udGV4dC5pbmRlbnRMZXZlbCsrO1xyXG4gICAgbmVlZE5ld2xpbmUgfHwgcHVzaChgIGApO1xyXG4gICAgcHVzaChgPyBgKTtcclxuICAgIGdlbk5vZGUoY29uc2VxdWVudCwgY29udGV4dCk7XHJcbiAgICBjb250ZXh0LmluZGVudExldmVsLS07XHJcbiAgICBuZWVkTmV3bGluZSAmJiBuZXdsaW5lKCk7XHJcbiAgICBuZWVkTmV3bGluZSB8fCBwdXNoKGAgYCk7XHJcbiAgICBwdXNoKGA6IGApO1xyXG4gICAgY29uc3QgaXNOZXN0ZWQgPSBhbHRlcm5hdGUudHlwZSA9PT0gMTkgLyogTm9kZVR5cGVzLkpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gKi87XHJcbiAgICBpZiAoIWlzTmVzdGVkKSB7XHJcbiAgICAgICAgY29udGV4dC5pbmRlbnRMZXZlbCsrO1xyXG4gICAgfVxyXG4gICAgZ2VuTm9kZShhbHRlcm5hdGUsIGNvbnRleHQpO1xyXG4gICAgaWYgKCFpc05lc3RlZCkge1xyXG4gICAgICAgIGNvbnRleHQuaW5kZW50TGV2ZWwtLTtcclxuICAgIH1cclxuICAgIG5lZWROZXdsaW5lICYmIGRlaW5kZW50KHRydWUgLyogd2l0aG91dCBuZXdsaW5lICovKTtcclxufVxyXG5mdW5jdGlvbiBnZW5DYWNoZUV4cHJlc3Npb24obm9kZSwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBwdXNoLCBoZWxwZXIsIGluZGVudCwgZGVpbmRlbnQsIG5ld2xpbmUgfSA9IGNvbnRleHQ7XHJcbiAgICBwdXNoKGBfY2FjaGVbJHtub2RlLmluZGV4fV0gfHwgKGApO1xyXG4gICAgaWYgKG5vZGUuaXNWTm9kZSkge1xyXG4gICAgICAgIGluZGVudCgpO1xyXG4gICAgICAgIHB1c2goYCR7aGVscGVyKFNFVF9CTE9DS19UUkFDS0lORyl9KC0xKSxgKTtcclxuICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICB9XHJcbiAgICBwdXNoKGBfY2FjaGVbJHtub2RlLmluZGV4fV0gPSBgKTtcclxuICAgIGdlbk5vZGUobm9kZS52YWx1ZSwgY29udGV4dCk7XHJcbiAgICBpZiAobm9kZS5pc1ZOb2RlKSB7XHJcbiAgICAgICAgcHVzaChgLGApO1xyXG4gICAgICAgIG5ld2xpbmUoKTtcclxuICAgICAgICBwdXNoKGAke2hlbHBlcihTRVRfQkxPQ0tfVFJBQ0tJTkcpfSgxKSxgKTtcclxuICAgICAgICBuZXdsaW5lKCk7XHJcbiAgICAgICAgcHVzaChgX2NhY2hlWyR7bm9kZS5pbmRleH1dYCk7XHJcbiAgICAgICAgZGVpbmRlbnQoKTtcclxuICAgIH1cclxuICAgIHB1c2goYClgKTtcclxufVxuXG5mdW5jdGlvbiB3YWxrSWRlbnRpZmllcnMocm9vdCwgb25JZGVudGlmaWVyLCBpbmNsdWRlQWxsID0gZmFsc2UsIHBhcmVudFN0YWNrID0gW10sIGtub3duSWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKSkge1xyXG4gICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1JlZmVyZW5jZWRJZGVudGlmaWVyKGlkLCBwYXJlbnQsIHBhcmVudFN0YWNrKSB7XHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzSW5EZXN0cnVjdHVyZUFzc2lnbm1lbnQocGFyZW50LCBwYXJlbnRTdGFjaykge1xyXG4gICAgaWYgKHBhcmVudCAmJlxyXG4gICAgICAgIChwYXJlbnQudHlwZSA9PT0gJ09iamVjdFByb3BlcnR5JyB8fCBwYXJlbnQudHlwZSA9PT0gJ0FycmF5UGF0dGVybicpKSB7XHJcbiAgICAgICAgbGV0IGkgPSBwYXJlbnRTdGFjay5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBwID0gcGFyZW50U3RhY2tbaV07XHJcbiAgICAgICAgICAgIGlmIChwLnR5cGUgPT09ICdBc3NpZ25tZW50RXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHAudHlwZSAhPT0gJ09iamVjdFByb3BlcnR5JyAmJiAhcC50eXBlLmVuZHNXaXRoKCdQYXR0ZXJuJykpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIHdhbGtGdW5jdGlvblBhcmFtcyhub2RlLCBvbklkZW50KSB7XHJcbiAgICBmb3IgKGNvbnN0IHAgb2Ygbm9kZS5wYXJhbXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGV4dHJhY3RJZGVudGlmaWVycyhwKSkge1xyXG4gICAgICAgICAgICBvbklkZW50KGlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gd2Fsa0Jsb2NrRGVjbGFyYXRpb25zKGJsb2NrLCBvbklkZW50KSB7XHJcbiAgICBmb3IgKGNvbnN0IHN0bXQgb2YgYmxvY2suYm9keSkge1xyXG4gICAgICAgIGlmIChzdG10LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoc3RtdC5kZWNsYXJlKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBzdG10LmRlY2xhcmF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBleHRyYWN0SWRlbnRpZmllcnMoZGVjbC5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvbklkZW50KGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdG10LnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyB8fFxyXG4gICAgICAgICAgICBzdG10LnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAoc3RtdC5kZWNsYXJlIHx8ICFzdG10LmlkKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIG9uSWRlbnQoc3RtdC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGV4dHJhY3RJZGVudGlmaWVycyhwYXJhbSwgbm9kZXMgPSBbXSkge1xyXG4gICAgc3dpdGNoIChwYXJhbS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnSWRlbnRpZmllcic6XHJcbiAgICAgICAgICAgIG5vZGVzLnB1c2gocGFyYW0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcclxuICAgICAgICAgICAgbGV0IG9iamVjdCA9IHBhcmFtO1xyXG4gICAgICAgICAgICB3aGlsZSAob2JqZWN0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Lm9iamVjdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2Rlcy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcGFyYW0ucHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhY3RJZGVudGlmaWVycyhwcm9wLmFyZ3VtZW50LCBub2Rlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBleHRyYWN0SWRlbnRpZmllcnMocHJvcC52YWx1ZSwgbm9kZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ0FycmF5UGF0dGVybic6XHJcbiAgICAgICAgICAgIHBhcmFtLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICBleHRyYWN0SWRlbnRpZmllcnMoZWxlbWVudCwgbm9kZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUmVzdEVsZW1lbnQnOlxyXG4gICAgICAgICAgICBleHRyYWN0SWRlbnRpZmllcnMocGFyYW0uYXJndW1lbnQsIG5vZGVzKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxyXG4gICAgICAgICAgICBleHRyYWN0SWRlbnRpZmllcnMocGFyYW0ubGVmdCwgbm9kZXMpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlcztcclxufVxyXG5jb25zdCBpc0Z1bmN0aW9uVHlwZSA9IChub2RlKSA9PiB7XHJcbiAgICByZXR1cm4gL0Z1bmN0aW9uKD86RXhwcmVzc2lvbnxEZWNsYXJhdGlvbikkfE1ldGhvZCQvLnRlc3Qobm9kZS50eXBlKTtcclxufTtcclxuY29uc3QgaXNTdGF0aWNQcm9wZXJ0eSA9IChub2RlKSA9PiBub2RlICYmXHJcbiAgICAobm9kZS50eXBlID09PSAnT2JqZWN0UHJvcGVydHknIHx8IG5vZGUudHlwZSA9PT0gJ09iamVjdE1ldGhvZCcpICYmXHJcbiAgICAhbm9kZS5jb21wdXRlZDtcclxuY29uc3QgaXNTdGF0aWNQcm9wZXJ0eUtleSA9IChub2RlLCBwYXJlbnQpID0+IGlzU3RhdGljUHJvcGVydHkocGFyZW50KSAmJiBwYXJlbnQua2V5ID09PSBub2RlO1xuXG4vLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxyXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXHJcbmNvbnN0IHByb2hpYml0ZWRLZXl3b3JkUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgK1xyXG4gICAgKCdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xyXG4gICAgICAgICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXHJcbiAgICAgICAgJ2V4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMsdHlwZW9mLHZvaWQnKVxyXG4gICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgLmpvaW4oJ1xcXFxifFxcXFxiJykgK1xyXG4gICAgJ1xcXFxiJyk7XHJcbi8vIHN0cmlwIHN0cmluZ3MgaW4gZXhwcmVzc2lvbnNcclxuY29uc3Qgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xyXG4vKipcclxuICogVmFsaWRhdGUgYSBub24tcHJlZml4ZWQgZXhwcmVzc2lvbi5cclxuICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIHVzaW5nIHRoZSBpbi1icm93c2VyIHJ1bnRpbWUgY29tcGlsZXIgc2luY2UgaXRcclxuICogZG9lc24ndCBwcmVmaXggZXhwcmVzc2lvbnMuXHJcbiAqL1xyXG5mdW5jdGlvbiB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGFzUGFyYW1zID0gZmFsc2UsIGFzUmF3U3RhdGVtZW50cyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBleHAgPSBub2RlLmNvbnRlbnQ7XHJcbiAgICAvLyBlbXB0eSBleHByZXNzaW9ucyBhcmUgdmFsaWRhdGVkIHBlci1kaXJlY3RpdmUgc2luY2Ugc29tZSBkaXJlY3RpdmVzXHJcbiAgICAvLyBkbyBhbGxvdyBlbXB0eSBleHByZXNzaW9ucy5cclxuICAgIGlmICghZXhwLnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgbmV3IEZ1bmN0aW9uKGFzUmF3U3RhdGVtZW50c1xyXG4gICAgICAgICAgICA/IGAgJHtleHB9IGBcclxuICAgICAgICAgICAgOiBgcmV0dXJuICR7YXNQYXJhbXMgPyBgKCR7ZXhwfSkgPT4ge31gIDogYCgke2V4cH0pYH1gKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBlLm1lc3NhZ2U7XHJcbiAgICAgICAgY29uc3Qga2V5d29yZE1hdGNoID0gZXhwXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKVxyXG4gICAgICAgICAgICAubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XHJcbiAgICAgICAgaWYgKGtleXdvcmRNYXRjaCkge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gYGF2b2lkIHVzaW5nIEphdmFTY3JpcHQga2V5d29yZCBhcyBwcm9wZXJ0eSBuYW1lOiBcIiR7a2V5d29yZE1hdGNoWzBdfVwiYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDQgLyogRXJyb3JDb2Rlcy5YX0lOVkFMSURfRVhQUkVTU0lPTiAqLywgbm9kZS5sb2MsIHVuZGVmaW5lZCwgbWVzc2FnZSkpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHRyYW5zZm9ybUV4cHJlc3Npb24gPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLykge1xyXG4gICAgICAgIG5vZGUuY29udGVudCA9IHByb2Nlc3NFeHByZXNzaW9uKG5vZGUuY29udGVudCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8pIHtcclxuICAgICAgICAvLyBoYW5kbGUgZGlyZWN0aXZlcyBvbiBlbGVtZW50XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IG5vZGUucHJvcHNbaV07XHJcbiAgICAgICAgICAgIC8vIGRvIG5vdCBwcm9jZXNzIGZvciB2LW9uICYgdi1mb3Igc2luY2UgdGhleSBhcmUgc3BlY2lhbCBoYW5kbGVkXHJcbiAgICAgICAgICAgIGlmIChkaXIudHlwZSA9PT0gNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovICYmIGRpci5uYW1lICE9PSAnZm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhwID0gZGlyLmV4cDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGRpci5hcmc7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgcHJvY2VzcyBleHAgaWYgdGhpcyBpcyB2LW9uOmFyZyAtIHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZ1xyXG4gICAgICAgICAgICAgICAgLy8gZm9yIHdyYXBwaW5nIGlubGluZSBzdGF0ZW1lbnRzLlxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGV4cC50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEoZGlyLm5hbWUgPT09ICdvbicgJiYgYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpci5leHAgPSBwcm9jZXNzRXhwcmVzc2lvbihleHAsIGNvbnRleHQsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNsb3QgYXJncyBtdXN0IGJlIHByb2Nlc3NlZCBhcyBmdW5jdGlvbiBwYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICBkaXIubmFtZSA9PT0gJ3Nsb3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhcmcgJiYgYXJnLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmICFhcmcuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXIuYXJnID0gcHJvY2Vzc0V4cHJlc3Npb24oYXJnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuLy8gSW1wb3J0YW50OiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHVzZXMgTm9kZS5qcyBvbmx5IGRlcGVuZGVuY2llcywgaXQgc2hvdWxkXHJcbi8vIGFsd2F5cyBiZSB1c2VkIHdpdGggYSBsZWFkaW5nICF0cnVlIGNoZWNrIHNvIHRoYXQgaXQgY2FuIGJlXHJcbi8vIHRyZWUtc2hha2VuIGZyb20gdGhlIGJyb3dzZXIgYnVpbGQuXHJcbmZ1bmN0aW9uIHByb2Nlc3NFeHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIFxyXG4vLyBzb21lIGV4cHJlc3Npb25zIGxpa2Ugdi1zbG90IHByb3BzICYgdi1mb3IgYWxpYXNlcyBzaG91bGQgYmUgcGFyc2VkIGFzXHJcbi8vIGZ1bmN0aW9uIHBhcmFtc1xyXG5hc1BhcmFtcyA9IGZhbHNlLCBcclxuLy8gdi1vbiBoYW5kbGVyIHZhbHVlcyBtYXkgY29udGFpbiBtdWx0aXBsZSBzdGF0ZW1lbnRzXHJcbmFzUmF3U3RhdGVtZW50cyA9IGZhbHNlLCBsb2NhbFZhcnMgPSBPYmplY3QuY3JlYXRlKGNvbnRleHQuaWRlbnRpZmllcnMpKSB7XHJcbiAgICB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAvLyBzaW1wbGUgaW4tYnJvd3NlciB2YWxpZGF0aW9uIChzYW1lIGxvZ2ljIGluIDIueClcclxuICAgICAgICAgICAgdmFsaWRhdGVCcm93c2VyRXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBhc1BhcmFtcywgYXNSYXdTdGF0ZW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgdHJhbnNmb3JtSWYgPSBjcmVhdGVTdHJ1Y3R1cmFsRGlyZWN0aXZlVHJhbnNmb3JtKC9eKGlmfGVsc2V8ZWxzZS1pZikkLywgKG5vZGUsIGRpciwgY29udGV4dCkgPT4ge1xyXG4gICAgcmV0dXJuIHByb2Nlc3NJZihub2RlLCBkaXIsIGNvbnRleHQsIChpZk5vZGUsIGJyYW5jaCwgaXNSb290KSA9PiB7XHJcbiAgICAgICAgLy8gIzE1ODc6IFdlIG5lZWQgdG8gZHluYW1pY2FsbHkgaW5jcmVtZW50IHRoZSBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnRcclxuICAgICAgICAvLyBub2RlJ3Mgc2libGluZyBub2Rlcywgc2luY2UgY2hhaW5lZCB2LWlmL2Vsc2UgYnJhbmNoZXMgYXJlXHJcbiAgICAgICAgLy8gcmVuZGVyZWQgYXQgdGhlIHNhbWUgZGVwdGhcclxuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IGNvbnRleHQucGFyZW50LmNoaWxkcmVuO1xyXG4gICAgICAgIGxldCBpID0gc2libGluZ3MuaW5kZXhPZihpZk5vZGUpO1xyXG4gICAgICAgIGxldCBrZXkgPSAwO1xyXG4gICAgICAgIHdoaWxlIChpLS0gPj0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XHJcbiAgICAgICAgICAgIGlmIChzaWJsaW5nICYmIHNpYmxpbmcudHlwZSA9PT0gOSAvKiBOb2RlVHlwZXMuSUYgKi8pIHtcclxuICAgICAgICAgICAgICAgIGtleSArPSBzaWJsaW5nLmJyYW5jaGVzLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFeGl0IGNhbGxiYWNrLiBDb21wbGV0ZSB0aGUgY29kZWdlbk5vZGUgd2hlbiBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuXHJcbiAgICAgICAgLy8gdHJhbnNmb3JtZWQuXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICAgICAgICAgICAgaWZOb2RlLmNvZGVnZW5Ob2RlID0gY3JlYXRlQ29kZWdlbk5vZGVGb3JCcmFuY2goYnJhbmNoLCBrZXksIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoaXMgYnJhbmNoJ3MgY29kZWdlbiBub2RlIHRvIHRoZSB2LWlmIHJvb3QuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb25kaXRpb24gPSBnZXRQYXJlbnRDb25kaXRpb24oaWZOb2RlLmNvZGVnZW5Ob2RlKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudENvbmRpdGlvbi5hbHRlcm5hdGUgPSBjcmVhdGVDb2RlZ2VuTm9kZUZvckJyYW5jaChicmFuY2gsIGtleSArIGlmTm9kZS5icmFuY2hlcy5sZW5ndGggLSAxLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxufSk7XHJcbi8vIHRhcmdldC1hZ25vc3RpYyB0cmFuc2Zvcm0gdXNlZCBmb3IgYm90aCBDbGllbnQgYW5kIFNTUlxyXG5mdW5jdGlvbiBwcm9jZXNzSWYobm9kZSwgZGlyLCBjb250ZXh0LCBwcm9jZXNzQ29kZWdlbikge1xyXG4gICAgaWYgKGRpci5uYW1lICE9PSAnZWxzZScgJiZcclxuICAgICAgICAoIWRpci5leHAgfHwgIWRpci5leHAuY29udGVudC50cmltKCkpKSB7XHJcbiAgICAgICAgY29uc3QgbG9jID0gZGlyLmV4cCA/IGRpci5leHAubG9jIDogbm9kZS5sb2M7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMjggLyogRXJyb3JDb2Rlcy5YX1ZfSUZfTk9fRVhQUkVTU0lPTiAqLywgZGlyLmxvYykpO1xyXG4gICAgICAgIGRpci5leHAgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGB0cnVlYCwgZmFsc2UsIGxvYyk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRydWUgJiYgZGlyLmV4cCkge1xyXG4gICAgICAgIHZhbGlkYXRlQnJvd3NlckV4cHJlc3Npb24oZGlyLmV4cCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlyLm5hbWUgPT09ICdpZicpIHtcclxuICAgICAgICBjb25zdCBicmFuY2ggPSBjcmVhdGVJZkJyYW5jaChub2RlLCBkaXIpO1xyXG4gICAgICAgIGNvbnN0IGlmTm9kZSA9IHtcclxuICAgICAgICAgICAgdHlwZTogOSAvKiBOb2RlVHlwZXMuSUYgKi8sXHJcbiAgICAgICAgICAgIGxvYzogbm9kZS5sb2MsXHJcbiAgICAgICAgICAgIGJyYW5jaGVzOiBbYnJhbmNoXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29udGV4dC5yZXBsYWNlTm9kZShpZk5vZGUpO1xyXG4gICAgICAgIGlmIChwcm9jZXNzQ29kZWdlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0NvZGVnZW4oaWZOb2RlLCBicmFuY2gsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGxvY2F0ZSB0aGUgYWRqYWNlbnQgdi1pZlxyXG4gICAgICAgIGNvbnN0IHNpYmxpbmdzID0gY29udGV4dC5wYXJlbnQuY2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSBbXTtcclxuICAgICAgICBsZXQgaSA9IHNpYmxpbmdzLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgd2hpbGUgKGktLSA+PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgc2libGluZyAmJiBzaWJsaW5nLnR5cGUgPT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3ZlTm9kZShzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIGNvbW1lbnRzLnVuc2hpZnQoc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2libGluZyAmJlxyXG4gICAgICAgICAgICAgICAgc2libGluZy50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovICYmXHJcbiAgICAgICAgICAgICAgICAhc2libGluZy5jb250ZW50LnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3ZlTm9kZShzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzaWJsaW5nICYmIHNpYmxpbmcudHlwZSA9PT0gOSAvKiBOb2RlVHlwZXMuSUYgKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHYtZWxzZSB3YXMgZm9sbG93ZWQgYnkgdi1lbHNlLWlmXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyLm5hbWUgPT09ICdlbHNlLWlmJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuYnJhbmNoZXNbc2libGluZy5icmFuY2hlcy5sZW5ndGggLSAxXS5jb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMwIC8qIEVycm9yQ29kZXMuWF9WX0VMU0VfTk9fQURKQUNFTlRfSUYgKi8sIG5vZGUubG9jKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBub2RlIHRvIHRoZSBpZiBub2RlJ3MgYnJhbmNoZXNcclxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gY3JlYXRlSWZCcmFuY2gobm9kZSwgZGlyKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAvLyAjMzYxOSBpZ25vcmUgY29tbWVudHMgaWYgdGhlIHYtaWYgaXMgZGlyZWN0IGNoaWxkIG9mIDx0cmFuc2l0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICEoY29udGV4dC5wYXJlbnQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wYXJlbnQudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0J1aWx0SW5UeXBlKGNvbnRleHQucGFyZW50LnRhZywgJ3RyYW5zaXRpb24nKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmFuY2guY2hpbGRyZW4gPSBbLi4uY29tbWVudHMsIC4uLmJyYW5jaC5jaGlsZHJlbl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyIGlzIGZvcmNpbmcgc2FtZSBrZXkgb24gZGlmZmVyZW50IGJyYW5jaGVzXHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICF0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYnJhbmNoLnVzZXJLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLmJyYW5jaGVzLmZvckVhY2goKHsgdXNlcktleSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTYW1lS2V5KHVzZXJLZXksIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigyOSAvKiBFcnJvckNvZGVzLlhfVl9JRl9TQU1FX0tFWSAqLywgYnJhbmNoLnVzZXJLZXkubG9jKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNpYmxpbmcuYnJhbmNoZXMucHVzaChicmFuY2gpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25FeGl0ID0gcHJvY2Vzc0NvZGVnZW4gJiYgcHJvY2Vzc0NvZGVnZW4oc2libGluZywgYnJhbmNoLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgYnJhbmNoIHdhcyByZW1vdmVkLCBpdCB3aWxsIG5vdCBiZSB0cmF2ZXJzZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gdHJhdmVyc2UgaGVyZS5cclxuICAgICAgICAgICAgICAgIHRyYXZlcnNlTm9kZShicmFuY2gsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbiBleGl0XHJcbiAgICAgICAgICAgICAgICBpZiAob25FeGl0KVxyXG4gICAgICAgICAgICAgICAgICAgIG9uRXhpdCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIHJlc2V0IGN1cnJlbnROb2RlIGFmdGVyIHRyYXZlcnNhbCB0byBpbmRpY2F0ZSB0aGlzXHJcbiAgICAgICAgICAgICAgICAvLyBub2RlIGhhcyBiZWVuIHJlbW92ZWQuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMwIC8qIEVycm9yQ29kZXMuWF9WX0VMU0VfTk9fQURKQUNFTlRfSUYgKi8sIG5vZGUubG9jKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUlmQnJhbmNoKG5vZGUsIGRpcikge1xyXG4gICAgY29uc3QgaXNUZW1wbGF0ZUlmID0gbm9kZS50YWdUeXBlID09PSAzIC8qIEVsZW1lbnRUeXBlcy5URU1QTEFURSAqLztcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogMTAgLyogTm9kZVR5cGVzLklGX0JSQU5DSCAqLyxcclxuICAgICAgICBsb2M6IG5vZGUubG9jLFxyXG4gICAgICAgIGNvbmRpdGlvbjogZGlyLm5hbWUgPT09ICdlbHNlJyA/IHVuZGVmaW5lZCA6IGRpci5leHAsXHJcbiAgICAgICAgY2hpbGRyZW46IGlzVGVtcGxhdGVJZiAmJiAhZmluZERpcihub2RlLCAnZm9yJykgPyBub2RlLmNoaWxkcmVuIDogW25vZGVdLFxyXG4gICAgICAgIHVzZXJLZXk6IGZpbmRQcm9wKG5vZGUsIGBrZXlgKSxcclxuICAgICAgICBpc1RlbXBsYXRlSWZcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQ29kZWdlbk5vZGVGb3JCcmFuY2goYnJhbmNoLCBrZXlJbmRleCwgY29udGV4dCkge1xyXG4gICAgaWYgKGJyYW5jaC5jb25kaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGJyYW5jaC5jb25kaXRpb24sIGNyZWF0ZUNoaWxkcmVuQ29kZWdlbk5vZGUoYnJhbmNoLCBrZXlJbmRleCwgY29udGV4dCksIFxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBwYXNzIGluIGFzQmxvY2s6IHRydWUgc28gdGhhdCB0aGUgY29tbWVudCBub2RlIGNhbGxcclxuICAgICAgICAvLyBjbG9zZXMgdGhlIGN1cnJlbnQgYmxvY2suXHJcbiAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb24oY29udGV4dC5oZWxwZXIoQ1JFQVRFX0NPTU1FTlQpLCBbXHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/ICdcInYtaWZcIicgOiAnXCJcIicsXHJcbiAgICAgICAgICAgICd0cnVlJ1xyXG4gICAgICAgIF0pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVDaGlsZHJlbkNvZGVnZW5Ob2RlKGJyYW5jaCwga2V5SW5kZXgsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkcmVuQ29kZWdlbk5vZGUoYnJhbmNoLCBrZXlJbmRleCwgY29udGV4dCkge1xyXG4gICAgY29uc3QgeyBoZWxwZXIgfSA9IGNvbnRleHQ7XHJcbiAgICBjb25zdCBrZXlQcm9wZXJ0eSA9IGNyZWF0ZU9iamVjdFByb3BlcnR5KGBrZXlgLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGAke2tleUluZGV4fWAsIGZhbHNlLCBsb2NTdHViLCAyIC8qIENvbnN0YW50VHlwZXMuQ0FOX0hPSVNUICovKSk7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBicmFuY2g7XHJcbiAgICBjb25zdCBmaXJzdENoaWxkID0gY2hpbGRyZW5bMF07XHJcbiAgICBjb25zdCBuZWVkRnJhZ21lbnRXcmFwcGVyID0gY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGZpcnN0Q2hpbGQudHlwZSAhPT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLztcclxuICAgIGlmIChuZWVkRnJhZ21lbnRXcmFwcGVyKSB7XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBmaXJzdENoaWxkLnR5cGUgPT09IDExIC8qIE5vZGVUeXBlcy5GT1IgKi8pIHtcclxuICAgICAgICAgICAgLy8gb3B0aW1pemUgYXdheSBuZXN0ZWQgZnJhZ21lbnRzIHdoZW4gY2hpbGQgaXMgYSBGb3JOb2RlXHJcbiAgICAgICAgICAgIGNvbnN0IHZub2RlQ2FsbCA9IGZpcnN0Q2hpbGQuY29kZWdlbk5vZGU7XHJcbiAgICAgICAgICAgIGluamVjdFByb3Aodm5vZGVDYWxsLCBrZXlQcm9wZXJ0eSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2bm9kZUNhbGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcGF0Y2hGbGFnID0gNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi87XHJcbiAgICAgICAgICAgIGxldCBwYXRjaEZsYWdUZXh0ID0gUGF0Y2hGbGFnTmFtZXNbNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi9dO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgZnJhZ21lbnQgYWN0dWFsbHkgY29udGFpbnMgYSBzaW5nbGUgdmFsaWQgY2hpbGQgd2l0aFxyXG4gICAgICAgICAgICAvLyB0aGUgcmVzdCBiZWluZyBjb21tZW50c1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAhYnJhbmNoLmlzVGVtcGxhdGVJZiAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy50eXBlICE9PSAzIC8qIE5vZGVUeXBlcy5DT01NRU5UICovKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi87XHJcbiAgICAgICAgICAgICAgICBwYXRjaEZsYWdUZXh0ICs9IGAsICR7UGF0Y2hGbGFnTmFtZXNbMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovXX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZUNhbGwoY29udGV4dCwgaGVscGVyKEZSQUdNRU5UKSwgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihba2V5UHJvcGVydHldKSwgY2hpbGRyZW4sIHBhdGNoRmxhZyArICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgIC8qICR7cGF0Y2hGbGFnVGV4dH0gKi9gIDogYGApLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgZmFsc2UsIGZhbHNlIC8qIGlzQ29tcG9uZW50ICovLCBicmFuY2gubG9jKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByZXQgPSBmaXJzdENoaWxkLmNvZGVnZW5Ob2RlO1xyXG4gICAgICAgIGNvbnN0IHZub2RlQ2FsbCA9IGdldE1lbW9lZFZOb2RlQ2FsbChyZXQpO1xyXG4gICAgICAgIC8vIENoYW5nZSBjcmVhdGVWTm9kZSB0byBjcmVhdGVCbG9jay5cclxuICAgICAgICBpZiAodm5vZGVDYWxsLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgICAgIG1ha2VCbG9jayh2bm9kZUNhbGwsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbmplY3QgYnJhbmNoIGtleVxyXG4gICAgICAgIGluamVjdFByb3Aodm5vZGVDYWxsLCBrZXlQcm9wZXJ0eSwgY29udGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1NhbWVLZXkoYSwgYikge1xyXG4gICAgaWYgKCFhIHx8IGEudHlwZSAhPT0gYi50eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGEudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovKSB7XHJcbiAgICAgICAgaWYgKGEudmFsdWUuY29udGVudCAhPT0gYi52YWx1ZS5jb250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBkaXJlY3RpdmVcclxuICAgICAgICBjb25zdCBleHAgPSBhLmV4cDtcclxuICAgICAgICBjb25zdCBicmFuY2hFeHAgPSBiLmV4cDtcclxuICAgICAgICBpZiAoZXhwLnR5cGUgIT09IGJyYW5jaEV4cC50eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4cC50eXBlICE9PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyB8fFxyXG4gICAgICAgICAgICBleHAuaXNTdGF0aWMgIT09IGJyYW5jaEV4cC5pc1N0YXRpYyB8fFxyXG4gICAgICAgICAgICBleHAuY29udGVudCAhPT0gYnJhbmNoRXhwLmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmVudENvbmRpdGlvbihub2RlKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IDE5IC8qIE5vZGVUeXBlcy5KU19DT05ESVRJT05BTF9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZS50eXBlID09PSAxOSAvKiBOb2RlVHlwZXMuSlNfQ09ORElUSU9OQUxfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUuYWx0ZXJuYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAyMCAvKiBOb2RlVHlwZXMuSlNfQ0FDSEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICBub2RlID0gbm9kZS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY29uc3QgdHJhbnNmb3JtRm9yID0gY3JlYXRlU3RydWN0dXJhbERpcmVjdGl2ZVRyYW5zZm9ybSgnZm9yJywgKG5vZGUsIGRpciwgY29udGV4dCkgPT4ge1xyXG4gICAgY29uc3QgeyBoZWxwZXIsIHJlbW92ZUhlbHBlciB9ID0gY29udGV4dDtcclxuICAgIHJldHVybiBwcm9jZXNzRm9yKG5vZGUsIGRpciwgY29udGV4dCwgZm9yTm9kZSA9PiB7XHJcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBsb29wIHJlbmRlciBmdW5jdGlvbiBleHByZXNzaW9uIG5vdywgYW5kIGFkZCB0aGVcclxuICAgICAgICAvLyBpdGVyYXRvciBvbiBleGl0IGFmdGVyIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gdHJhdmVyc2VkXHJcbiAgICAgICAgY29uc3QgcmVuZGVyRXhwID0gY3JlYXRlQ2FsbEV4cHJlc3Npb24oaGVscGVyKFJFTkRFUl9MSVNUKSwgW1xyXG4gICAgICAgICAgICBmb3JOb2RlLnNvdXJjZVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIGNvbnN0IGlzVGVtcGxhdGUgPSBpc1RlbXBsYXRlTm9kZShub2RlKTtcclxuICAgICAgICBjb25zdCBtZW1vID0gZmluZERpcihub2RlLCAnbWVtbycpO1xyXG4gICAgICAgIGNvbnN0IGtleVByb3AgPSBmaW5kUHJvcChub2RlLCBga2V5YCk7XHJcbiAgICAgICAgY29uc3Qga2V5RXhwID0ga2V5UHJvcCAmJlxyXG4gICAgICAgICAgICAoa2V5UHJvcC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi9cclxuICAgICAgICAgICAgICAgID8gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihrZXlQcm9wLnZhbHVlLmNvbnRlbnQsIHRydWUpXHJcbiAgICAgICAgICAgICAgICA6IGtleVByb3AuZXhwKTtcclxuICAgICAgICBjb25zdCBrZXlQcm9wZXJ0eSA9IGtleVByb3AgPyBjcmVhdGVPYmplY3RQcm9wZXJ0eShga2V5YCwga2V5RXhwKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgaXNTdGFibGVGcmFnbWVudCA9IGZvck5vZGUuc291cmNlLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovICYmXHJcbiAgICAgICAgICAgIGZvck5vZGUuc291cmNlLmNvbnN0VHlwZSA+IDAgLyogQ29uc3RhbnRUeXBlcy5OT1RfQ09OU1RBTlQgKi87XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRGbGFnID0gaXNTdGFibGVGcmFnbWVudFxyXG4gICAgICAgICAgICA/IDY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovXHJcbiAgICAgICAgICAgIDoga2V5UHJvcFxyXG4gICAgICAgICAgICAgICAgPyAxMjggLyogUGF0Y2hGbGFncy5LRVlFRF9GUkFHTUVOVCAqL1xyXG4gICAgICAgICAgICAgICAgOiAyNTYgLyogUGF0Y2hGbGFncy5VTktFWUVEX0ZSQUdNRU5UICovO1xyXG4gICAgICAgIGZvck5vZGUuY29kZWdlbk5vZGUgPSBjcmVhdGVWTm9kZUNhbGwoY29udGV4dCwgaGVscGVyKEZSQUdNRU5UKSwgdW5kZWZpbmVkLCByZW5kZXJFeHAsIGZyYWdtZW50RmxhZyArXHJcbiAgICAgICAgICAgICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgIC8qICR7UGF0Y2hGbGFnTmFtZXNbZnJhZ21lbnRGbGFnXX0gKi9gIDogYGApLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSAvKiBpc0Jsb2NrICovLCAhaXNTdGFibGVGcmFnbWVudCAvKiBkaXNhYmxlVHJhY2tpbmcgKi8sIGZhbHNlIC8qIGlzQ29tcG9uZW50ICovLCBub2RlLmxvYyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgLy8gZmluaXNoIHRoZSBjb2RlZ2VuIG5vdyB0aGF0IGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gdHJhdmVyc2VkXHJcbiAgICAgICAgICAgIGxldCBjaGlsZEJsb2NrO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBmb3JOb2RlO1xyXG4gICAgICAgICAgICAvLyBjaGVjayA8dGVtcGxhdGUgdi1mb3I+IGtleSBwbGFjZW1lbnRcclxuICAgICAgICAgICAgaWYgKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgIXRydWUpICYmIGlzVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uc29tZShjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGZpbmRQcm9wKGMsICdrZXknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzMgLyogRXJyb3JDb2Rlcy5YX1ZfRk9SX1RFTVBMQVRFX0tFWV9QTEFDRU1FTlQgKi8sIGtleS5sb2MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmVlZEZyYWdtZW50V3JhcHBlciA9IGNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCBjaGlsZHJlblswXS50eXBlICE9PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovO1xyXG4gICAgICAgICAgICBjb25zdCBzbG90T3V0bGV0ID0gaXNTbG90T3V0bGV0KG5vZGUpXHJcbiAgICAgICAgICAgICAgICA/IG5vZGVcclxuICAgICAgICAgICAgICAgIDogaXNUZW1wbGF0ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTbG90T3V0bGV0KG5vZGUuY2hpbGRyZW5bMF0pXHJcbiAgICAgICAgICAgICAgICAgICAgPyBub2RlLmNoaWxkcmVuWzBdIC8vIGFwaS1leHRyYWN0b3Igc29tZWhvdyBmYWlscyB0byBpbmZlciB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoc2xvdE91dGxldCkge1xyXG4gICAgICAgICAgICAgICAgLy8gPHNsb3Qgdi1mb3I9XCIuLi5cIj4gb3IgPHRlbXBsYXRlIHYtZm9yPVwiLi4uXCI+PHNsb3QvPjwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICBjaGlsZEJsb2NrID0gc2xvdE91dGxldC5jb2RlZ2VuTm9kZTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1RlbXBsYXRlICYmIGtleVByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPHRlbXBsYXRlIHYtZm9yPVwiLi4uXCIgOmtleT1cIi4uLlwiPjxzbG90Lz48L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaW5qZWN0IHRoZSBrZXkgdG8gdGhlIHJlbmRlclNsb3QoKSBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9wcyBmb3IgcmVuZGVyU2xvdCBpcyBwYXNzZWQgYXMgdGhlIDNyZCBhcmd1bWVudC5cclxuICAgICAgICAgICAgICAgICAgICBpbmplY3RQcm9wKGNoaWxkQmxvY2ssIGtleVByb3BlcnR5LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChuZWVkRnJhZ21lbnRXcmFwcGVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA8dGVtcGxhdGUgdi1mb3I9XCIuLi5cIj4gd2l0aCB0ZXh0IG9yIG11bHRpLWVsZW1lbnRzXHJcbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgZ2VuZXJhdGUgYSBmcmFnbWVudCBibG9jayBmb3IgZWFjaCBsb29wXHJcbiAgICAgICAgICAgICAgICBjaGlsZEJsb2NrID0gY3JlYXRlVk5vZGVDYWxsKGNvbnRleHQsIGhlbHBlcihGUkFHTUVOVCksIGtleVByb3BlcnR5ID8gY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihba2V5UHJvcGVydHldKSA6IHVuZGVmaW5lZCwgbm9kZS5jaGlsZHJlbiwgNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi8gK1xyXG4gICAgICAgICAgICAgICAgICAgICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgIC8qICR7UGF0Y2hGbGFnTmFtZXNbNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi9dfSAqL2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgYCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCB1bmRlZmluZWQsIGZhbHNlIC8qIGlzQ29tcG9uZW50ICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHYtZm9yLiBEaXJlY3RseSB1c2UgdGhlIGNoaWxkJ3MgY29kZWdlbk5vZGVcclxuICAgICAgICAgICAgICAgIC8vIGJ1dCBtYXJrIGl0IGFzIGEgYmxvY2suXHJcbiAgICAgICAgICAgICAgICBjaGlsZEJsb2NrID0gY2hpbGRyZW5bMF1cclxuICAgICAgICAgICAgICAgICAgICAuY29kZWdlbk5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZW1wbGF0ZSAmJiBrZXlQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluamVjdFByb3AoY2hpbGRCbG9jaywga2V5UHJvcGVydHksIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2suaXNCbG9jayAhPT0gIWlzU3RhYmxlRnJhZ21lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jay5pc0Jsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3aXRjaCBmcm9tIGJsb2NrIHRvIHZub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUhlbHBlcihPUEVOX0JMT0NLKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGVscGVyKGdldFZOb2RlQmxvY2tIZWxwZXIoY29udGV4dC5pblNTUiwgY2hpbGRCbG9jay5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3dpdGNoIGZyb20gdm5vZGUgdG8gYmxvY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGVscGVyKGdldFZOb2RlSGVscGVyKGNvbnRleHQuaW5TU1IsIGNoaWxkQmxvY2suaXNDb21wb25lbnQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjaGlsZEJsb2NrLmlzQmxvY2sgPSAhaXNTdGFibGVGcmFnbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZEJsb2NrLmlzQmxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWxwZXIoT1BFTl9CTE9DSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVscGVyKGdldFZOb2RlQmxvY2tIZWxwZXIoY29udGV4dC5pblNTUiwgY2hpbGRCbG9jay5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVscGVyKGdldFZOb2RlSGVscGVyKGNvbnRleHQuaW5TU1IsIGNoaWxkQmxvY2suaXNDb21wb25lbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWVtbykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9vcCA9IGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihjcmVhdGVGb3JMb29wUGFyYW1zKGZvck5vZGUucGFyc2VSZXN1bHQsIFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBfY2FjaGVkYClcclxuICAgICAgICAgICAgICAgIF0pKTtcclxuICAgICAgICAgICAgICAgIGxvb3AuYm9keSA9IGNyZWF0ZUJsb2NrU3RhdGVtZW50KFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oW2Bjb25zdCBfbWVtbyA9IChgLCBtZW1vLmV4cCwgYClgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGlmIChfY2FjaGVkYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGtleUV4cCA/IFtgICYmIF9jYWNoZWQua2V5ID09PSBgLCBrZXlFeHBdIDogW10pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgICYmICR7Y29udGV4dC5oZWxwZXJTdHJpbmcoSVNfTUVNT19TQU1FKX0oX2NhY2hlZCwgX21lbW8pKSByZXR1cm4gX2NhY2hlZGBcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oW2Bjb25zdCBfaXRlbSA9IGAsIGNoaWxkQmxvY2tdKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBfaXRlbS5tZW1vID0gX21lbW9gKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGByZXR1cm4gX2l0ZW1gKVxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJFeHAuYXJndW1lbnRzLnB1c2gobG9vcCwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgX2NhY2hlYCksIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oU3RyaW5nKGNvbnRleHQuY2FjaGVkKyspKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJFeHAuYXJndW1lbnRzLnB1c2goY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGNyZWF0ZUZvckxvb3BQYXJhbXMoZm9yTm9kZS5wYXJzZVJlc3VsdCksIGNoaWxkQmxvY2ssIHRydWUgLyogZm9yY2UgbmV3bGluZSAqLykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG59KTtcclxuLy8gdGFyZ2V0LWFnbm9zdGljIHRyYW5zZm9ybSB1c2VkIGZvciBib3RoIENsaWVudCBhbmQgU1NSXHJcbmZ1bmN0aW9uIHByb2Nlc3NGb3Iobm9kZSwgZGlyLCBjb250ZXh0LCBwcm9jZXNzQ29kZWdlbikge1xyXG4gICAgaWYgKCFkaXIuZXhwKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzEgLyogRXJyb3JDb2Rlcy5YX1ZfRk9SX05PX0VYUFJFU1NJT04gKi8sIGRpci5sb2MpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlRm9yRXhwcmVzc2lvbihcclxuICAgIC8vIGNhbiBvbmx5IGJlIHNpbXBsZSBleHByZXNzaW9uIGJlY2F1c2UgdkZvciB0cmFuc2Zvcm0gaXMgYXBwbGllZFxyXG4gICAgLy8gYmVmb3JlIGV4cHJlc3Npb24gdHJhbnNmb3JtLlxyXG4gICAgZGlyLmV4cCwgY29udGV4dCk7XHJcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoMzIgLyogRXJyb3JDb2Rlcy5YX1ZfRk9SX01BTEZPUk1FRF9FWFBSRVNTSU9OICovLCBkaXIubG9jKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBhZGRJZGVudGlmaWVycywgcmVtb3ZlSWRlbnRpZmllcnMsIHNjb3BlcyB9ID0gY29udGV4dDtcclxuICAgIGNvbnN0IHsgc291cmNlLCB2YWx1ZSwga2V5LCBpbmRleCB9ID0gcGFyc2VSZXN1bHQ7XHJcbiAgICBjb25zdCBmb3JOb2RlID0ge1xyXG4gICAgICAgIHR5cGU6IDExIC8qIE5vZGVUeXBlcy5GT1IgKi8sXHJcbiAgICAgICAgbG9jOiBkaXIubG9jLFxyXG4gICAgICAgIHNvdXJjZSxcclxuICAgICAgICB2YWx1ZUFsaWFzOiB2YWx1ZSxcclxuICAgICAgICBrZXlBbGlhczoga2V5LFxyXG4gICAgICAgIG9iamVjdEluZGV4QWxpYXM6IGluZGV4LFxyXG4gICAgICAgIHBhcnNlUmVzdWx0LFxyXG4gICAgICAgIGNoaWxkcmVuOiBpc1RlbXBsYXRlTm9kZShub2RlKSA/IG5vZGUuY2hpbGRyZW4gOiBbbm9kZV1cclxuICAgIH07XHJcbiAgICBjb250ZXh0LnJlcGxhY2VOb2RlKGZvck5vZGUpO1xyXG4gICAgLy8gYm9va2tlZXBpbmdcclxuICAgIHNjb3Blcy52Rm9yKys7XHJcbiAgICBjb25zdCBvbkV4aXQgPSBwcm9jZXNzQ29kZWdlbiAmJiBwcm9jZXNzQ29kZWdlbihmb3JOb2RlKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgc2NvcGVzLnZGb3ItLTtcclxuICAgICAgICBpZiAob25FeGl0KVxyXG4gICAgICAgICAgICBvbkV4aXQoKTtcclxuICAgIH07XHJcbn1cclxuY29uc3QgZm9yQWxpYXNSRSA9IC8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLztcclxuLy8gVGhpcyByZWdleCBkb2Vzbid0IGNvdmVyIHRoZSBjYXNlIGlmIGtleSBvciBpbmRleCBhbGlhc2VzIGhhdmUgZGVzdHJ1Y3R1cmluZyxcclxuLy8gYnV0IHRob3NlIGRvIG5vdCBtYWtlIHNlbnNlIGluIHRoZSBmaXJzdCBwbGFjZSwgc28gdGhpcyB3b3JrcyBpbiBwcmFjdGljZS5cclxuY29uc3QgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcclxuY29uc3Qgc3RyaXBQYXJlbnNSRSA9IC9eXFwofFxcKSQvZztcclxuZnVuY3Rpb24gcGFyc2VGb3JFeHByZXNzaW9uKGlucHV0LCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBsb2MgPSBpbnB1dC5sb2M7XHJcbiAgICBjb25zdCBleHAgPSBpbnB1dC5jb250ZW50O1xyXG4gICAgY29uc3QgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcclxuICAgIGlmICghaW5NYXRjaClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBjb25zdCBbLCBMSFMsIFJIU10gPSBpbk1hdGNoO1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgIHNvdXJjZTogY3JlYXRlQWxpYXNFeHByZXNzaW9uKGxvYywgUkhTLnRyaW0oKSwgZXhwLmluZGV4T2YoUkhTLCBMSFMubGVuZ3RoKSksXHJcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICBrZXk6IHVuZGVmaW5lZCxcclxuICAgICAgICBpbmRleDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB0cnVlKSB7XHJcbiAgICAgICAgdmFsaWRhdGVCcm93c2VyRXhwcmVzc2lvbihyZXN1bHQuc291cmNlLCBjb250ZXh0KTtcclxuICAgIH1cclxuICAgIGxldCB2YWx1ZUNvbnRlbnQgPSBMSFMudHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpLnRyaW0oKTtcclxuICAgIGNvbnN0IHRyaW1tZWRPZmZzZXQgPSBMSFMuaW5kZXhPZih2YWx1ZUNvbnRlbnQpO1xyXG4gICAgY29uc3QgaXRlcmF0b3JNYXRjaCA9IHZhbHVlQ29udGVudC5tYXRjaChmb3JJdGVyYXRvclJFKTtcclxuICAgIGlmIChpdGVyYXRvck1hdGNoKSB7XHJcbiAgICAgICAgdmFsdWVDb250ZW50ID0gdmFsdWVDb250ZW50LnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpLnRyaW0oKTtcclxuICAgICAgICBjb25zdCBrZXlDb250ZW50ID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XHJcbiAgICAgICAgbGV0IGtleU9mZnNldDtcclxuICAgICAgICBpZiAoa2V5Q29udGVudCkge1xyXG4gICAgICAgICAgICBrZXlPZmZzZXQgPSBleHAuaW5kZXhPZihrZXlDb250ZW50LCB0cmltbWVkT2Zmc2V0ICsgdmFsdWVDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBjcmVhdGVBbGlhc0V4cHJlc3Npb24obG9jLCBrZXlDb250ZW50LCBrZXlPZmZzZXQpO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQnJvd3NlckV4cHJlc3Npb24ocmVzdWx0LmtleSwgY29udGV4dCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhDb250ZW50ID0gaXRlcmF0b3JNYXRjaFsyXS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5pbmRleCA9IGNyZWF0ZUFsaWFzRXhwcmVzc2lvbihsb2MsIGluZGV4Q29udGVudCwgZXhwLmluZGV4T2YoaW5kZXhDb250ZW50LCByZXN1bHQua2V5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBrZXlPZmZzZXQgKyBrZXlDb250ZW50Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogdHJpbW1lZE9mZnNldCArIHZhbHVlQ29udGVudC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQnJvd3NlckV4cHJlc3Npb24ocmVzdWx0LmluZGV4LCBjb250ZXh0LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh2YWx1ZUNvbnRlbnQpIHtcclxuICAgICAgICByZXN1bHQudmFsdWUgPSBjcmVhdGVBbGlhc0V4cHJlc3Npb24obG9jLCB2YWx1ZUNvbnRlbnQsIHRyaW1tZWRPZmZzZXQpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdHJ1ZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKHJlc3VsdC52YWx1ZSwgY29udGV4dCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVBbGlhc0V4cHJlc3Npb24ocmFuZ2UsIGNvbnRlbnQsIG9mZnNldCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oY29udGVudCwgZmFsc2UsIGdldElubmVyUmFuZ2UocmFuZ2UsIG9mZnNldCwgY29udGVudC5sZW5ndGgpKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVGb3JMb29wUGFyYW1zKHsgdmFsdWUsIGtleSwgaW5kZXggfSwgbWVtb0FyZ3MgPSBbXSkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVBhcmFtc0xpc3QoW3ZhbHVlLCBrZXksIGluZGV4LCAuLi5tZW1vQXJnc10pO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVBhcmFtc0xpc3QoYXJncykge1xyXG4gICAgbGV0IGkgPSBhcmdzLmxlbmd0aDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBpZiAoYXJnc1tpXSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJnc1xyXG4gICAgICAgIC5zbGljZSgwLCBpICsgMSlcclxuICAgICAgICAubWFwKChhcmcsIGkpID0+IGFyZyB8fCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBfYC5yZXBlYXQoaSArIDEpLCBmYWxzZSkpO1xyXG59XG5cbmNvbnN0IGRlZmF1bHRGYWxsYmFjayA9IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYHVuZGVmaW5lZGAsIGZhbHNlKTtcclxuLy8gQSBOb2RlVHJhbnNmb3JtIHRoYXQ6XHJcbi8vIDEuIFRyYWNrcyBzY29wZSBpZGVudGlmaWVycyBmb3Igc2NvcGVkIHNsb3RzIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgcHJlZml4ZWRcclxuLy8gICAgYnkgdHJhbnNmb3JtRXhwcmVzc2lvbi4gVGhpcyBpcyBvbmx5IGFwcGxpZWQgaW4gbm9uLWJyb3dzZXIgYnVpbGRzIHdpdGhcclxuLy8gICAgeyBwcmVmaXhJZGVudGlmaWVyczogdHJ1ZSB9LlxyXG4vLyAyLiBUcmFjayB2LXNsb3QgZGVwdGhzIHNvIHRoYXQgd2Uga25vdyBhIHNsb3QgaXMgaW5zaWRlIGFub3RoZXIgc2xvdC5cclxuLy8gICAgTm90ZSB0aGUgZXhpdCBjYWxsYmFjayBpcyBleGVjdXRlZCBiZWZvcmUgYnVpbGRTbG90cygpIG9uIHRoZSBzYW1lIG5vZGUsXHJcbi8vICAgIHNvIG9ubHkgbmVzdGVkIHNsb3RzIHNlZSBwb3NpdGl2ZSBudW1iZXJzLlxyXG5jb25zdCB0cmFja1Nsb3RTY29wZXMgPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgIChub2RlLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLyB8fFxyXG4gICAgICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDMgLyogRWxlbWVudFR5cGVzLlRFTVBMQVRFICovKSkge1xyXG4gICAgICAgIC8vIFdlIGFyZSBvbmx5IGNoZWNraW5nIG5vbi1lbXB0eSB2LXNsb3QgaGVyZVxyXG4gICAgICAgIC8vIHNpbmNlIHdlIG9ubHkgY2FyZSBhYm91dCBzbG90cyB0aGF0IGludHJvZHVjZSBzY29wZSB2YXJpYWJsZXMuXHJcbiAgICAgICAgY29uc3QgdlNsb3QgPSBmaW5kRGlyKG5vZGUsICdzbG90Jyk7XHJcbiAgICAgICAgaWYgKHZTbG90KSB7XHJcbiAgICAgICAgICAgIHZTbG90LmV4cDtcclxuICAgICAgICAgICAgY29udGV4dC5zY29wZXMudlNsb3QrKztcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc2NvcGVzLnZTbG90LS07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4vLyBBIE5vZGVUcmFuc2Zvcm0gdGhhdCB0cmFja3Mgc2NvcGUgaWRlbnRpZmllcnMgZm9yIHNjb3BlZCBzbG90cyB3aXRoIHYtZm9yLlxyXG4vLyBUaGlzIHRyYW5zZm9ybSBpcyBvbmx5IGFwcGxpZWQgaW4gbm9uLWJyb3dzZXIgYnVpbGRzIHdpdGggeyBwcmVmaXhJZGVudGlmaWVyczogdHJ1ZSB9XHJcbmNvbnN0IHRyYWNrVkZvclNsb3RTY29wZXMgPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgbGV0IHZGb3I7XHJcbiAgICBpZiAoaXNUZW1wbGF0ZU5vZGUobm9kZSkgJiZcclxuICAgICAgICBub2RlLnByb3BzLnNvbWUoaXNWU2xvdCkgJiZcclxuICAgICAgICAodkZvciA9IGZpbmREaXIobm9kZSwgJ2ZvcicpKSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICh2Rm9yLnBhcnNlUmVzdWx0ID0gcGFyc2VGb3JFeHByZXNzaW9uKHZGb3IuZXhwLCBjb250ZXh0KSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBrZXksIGluZGV4IH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkSWRlbnRpZmllcnMsIHJlbW92ZUlkZW50aWZpZXJzIH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICB2YWx1ZSAmJiBhZGRJZGVudGlmaWVycyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGtleSAmJiBhZGRJZGVudGlmaWVycyhrZXkpO1xyXG4gICAgICAgICAgICBpbmRleCAmJiBhZGRJZGVudGlmaWVycyhpbmRleCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJiByZW1vdmVJZGVudGlmaWVycyh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBrZXkgJiYgcmVtb3ZlSWRlbnRpZmllcnMoa2V5KTtcclxuICAgICAgICAgICAgICAgIGluZGV4ICYmIHJlbW92ZUlkZW50aWZpZXJzKGluZGV4KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGJ1aWxkQ2xpZW50U2xvdEZuID0gKHByb3BzLCBjaGlsZHJlbiwgbG9jKSA9PiBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24ocHJvcHMsIGNoaWxkcmVuLCBmYWxzZSAvKiBuZXdsaW5lICovLCB0cnVlIC8qIGlzU2xvdCAqLywgY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW5bMF0ubG9jIDogbG9jKTtcclxuLy8gSW5zdGVhZCBvZiBiZWluZyBhIERpcmVjdGl2ZVRyYW5zZm9ybSwgdi1zbG90IHByb2Nlc3NpbmcgaXMgY2FsbGVkIGR1cmluZ1xyXG4vLyB0cmFuc2Zvcm1FbGVtZW50IHRvIGJ1aWxkIHRoZSBzbG90cyBvYmplY3QgZm9yIGEgY29tcG9uZW50LlxyXG5mdW5jdGlvbiBidWlsZFNsb3RzKG5vZGUsIGNvbnRleHQsIGJ1aWxkU2xvdEZuID0gYnVpbGRDbGllbnRTbG90Rm4pIHtcclxuICAgIGNvbnRleHQuaGVscGVyKFdJVEhfQ1RYKTtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGxvYyB9ID0gbm9kZTtcclxuICAgIGNvbnN0IHNsb3RzUHJvcGVydGllcyA9IFtdO1xyXG4gICAgY29uc3QgZHluYW1pY1Nsb3RzID0gW107XHJcbiAgICAvLyBJZiB0aGUgc2xvdCBpcyBpbnNpZGUgYSB2LWZvciBvciBhbm90aGVyIHYtc2xvdCwgZm9yY2UgaXQgdG8gYmUgZHluYW1pY1xyXG4gICAgLy8gc2luY2UgaXQgbGlrZWx5IHVzZXMgYSBzY29wZSB2YXJpYWJsZS5cclxuICAgIGxldCBoYXNEeW5hbWljU2xvdHMgPSBjb250ZXh0LnNjb3Blcy52U2xvdCA+IDAgfHwgY29udGV4dC5zY29wZXMudkZvciA+IDA7XHJcbiAgICAvLyAxLiBDaGVjayBmb3Igc2xvdCB3aXRoIHNsb3RQcm9wcyBvbiBjb21wb25lbnQgaXRzZWxmLlxyXG4gICAgLy8gICAgPENvbXAgdi1zbG90PVwieyBwcm9wIH1cIi8+XHJcbiAgICBjb25zdCBvbkNvbXBvbmVudFNsb3QgPSBmaW5kRGlyKG5vZGUsICdzbG90JywgdHJ1ZSk7XHJcbiAgICBpZiAob25Db21wb25lbnRTbG90KSB7XHJcbiAgICAgICAgY29uc3QgeyBhcmcsIGV4cCB9ID0gb25Db21wb25lbnRTbG90O1xyXG4gICAgICAgIGlmIChhcmcgJiYgIWlzU3RhdGljRXhwKGFyZykpIHtcclxuICAgICAgICAgICAgaGFzRHluYW1pY1Nsb3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2xvdHNQcm9wZXJ0aWVzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkoYXJnIHx8IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJ2RlZmF1bHQnLCB0cnVlKSwgYnVpbGRTbG90Rm4oZXhwLCBjaGlsZHJlbiwgbG9jKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gMi4gSXRlcmF0ZSB0aHJvdWdoIGNoaWxkcmVuIGFuZCBjaGVjayBmb3IgdGVtcGxhdGUgc2xvdHNcclxuICAgIC8vICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6Zm9vPVwieyBwcm9wIH1cIj5cclxuICAgIGxldCBoYXNUZW1wbGF0ZVNsb3RzID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzTmFtZWREZWZhdWx0U2xvdCA9IGZhbHNlO1xyXG4gICAgY29uc3QgaW1wbGljaXREZWZhdWx0Q2hpbGRyZW4gPSBbXTtcclxuICAgIGNvbnN0IHNlZW5TbG90TmFtZXMgPSBuZXcgU2V0KCk7XHJcbiAgICBsZXQgY29uZGl0aW9uYWxCcmFuY2hJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgc2xvdEVsZW1lbnQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBsZXQgc2xvdERpcjtcclxuICAgICAgICBpZiAoIWlzVGVtcGxhdGVOb2RlKHNsb3RFbGVtZW50KSB8fFxyXG4gICAgICAgICAgICAhKHNsb3REaXIgPSBmaW5kRGlyKHNsb3RFbGVtZW50LCAnc2xvdCcsIHRydWUpKSkge1xyXG4gICAgICAgICAgICAvLyBub3QgYSA8dGVtcGxhdGUgdi1zbG90Piwgc2tpcC5cclxuICAgICAgICAgICAgaWYgKHNsb3RFbGVtZW50LnR5cGUgIT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGltcGxpY2l0RGVmYXVsdENoaWxkcmVuLnB1c2goc2xvdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob25Db21wb25lbnRTbG90KSB7XHJcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFzIG9uLWNvbXBvbmVudCBzbG90IC0gdGhpcyBpcyBpbmNvcnJlY3QgdXNhZ2UuXHJcbiAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDM3IC8qIEVycm9yQ29kZXMuWF9WX1NMT1RfTUlYRURfU0xPVF9VU0FHRSAqLywgc2xvdERpci5sb2MpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhhc1RlbXBsYXRlU2xvdHMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW46IHNsb3RDaGlsZHJlbiwgbG9jOiBzbG90TG9jIH0gPSBzbG90RWxlbWVudDtcclxuICAgICAgICBjb25zdCB7IGFyZzogc2xvdE5hbWUgPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBkZWZhdWx0YCwgdHJ1ZSksIGV4cDogc2xvdFByb3BzLCBsb2M6IGRpckxvYyB9ID0gc2xvdERpcjtcclxuICAgICAgICAvLyBjaGVjayBpZiBuYW1lIGlzIGR5bmFtaWMuXHJcbiAgICAgICAgbGV0IHN0YXRpY1Nsb3ROYW1lO1xyXG4gICAgICAgIGlmIChpc1N0YXRpY0V4cChzbG90TmFtZSkpIHtcclxuICAgICAgICAgICAgc3RhdGljU2xvdE5hbWUgPSBzbG90TmFtZSA/IHNsb3ROYW1lLmNvbnRlbnQgOiBgZGVmYXVsdGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoYXNEeW5hbWljU2xvdHMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzbG90RnVuY3Rpb24gPSBidWlsZFNsb3RGbihzbG90UHJvcHMsIHNsb3RDaGlsZHJlbiwgc2xvdExvYyk7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBzbG90IGlzIGNvbmRpdGlvbmFsICh2LWlmL3YtZm9yKVxyXG4gICAgICAgIGxldCB2SWY7XHJcbiAgICAgICAgbGV0IHZFbHNlO1xyXG4gICAgICAgIGxldCB2Rm9yO1xyXG4gICAgICAgIGlmICgodklmID0gZmluZERpcihzbG90RWxlbWVudCwgJ2lmJykpKSB7XHJcbiAgICAgICAgICAgIGhhc0R5bmFtaWNTbG90cyA9IHRydWU7XHJcbiAgICAgICAgICAgIGR5bmFtaWNTbG90cy5wdXNoKGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbih2SWYuZXhwLCBidWlsZER5bmFtaWNTbG90KHNsb3ROYW1lLCBzbG90RnVuY3Rpb24sIGNvbmRpdGlvbmFsQnJhbmNoSW5kZXgrKyksIGRlZmF1bHRGYWxsYmFjaykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodkVsc2UgPSBmaW5kRGlyKHNsb3RFbGVtZW50LCAvXmVsc2UoLWlmKT8kLywgdHJ1ZSAvKiBhbGxvd0VtcHR5ICovKSkpIHtcclxuICAgICAgICAgICAgLy8gZmluZCBhZGphY2VudCB2LWlmXHJcbiAgICAgICAgICAgIGxldCBqID0gaTtcclxuICAgICAgICAgICAgbGV0IHByZXY7XHJcbiAgICAgICAgICAgIHdoaWxlIChqLS0pIHtcclxuICAgICAgICAgICAgICAgIHByZXYgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2LnR5cGUgIT09IDMgLyogTm9kZVR5cGVzLkNPTU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJldiAmJiBpc1RlbXBsYXRlTm9kZShwcmV2KSAmJiBmaW5kRGlyKHByZXYsICdpZicpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgbm9kZVxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoaXMgc2xvdCB0byBwcmV2aW91cyBjb25kaXRpb25hbFxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbmFsID0gZHluYW1pY1Nsb3RzW2R5bmFtaWNTbG90cy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb25kaXRpb25hbC5hbHRlcm5hdGUudHlwZSA9PT0gMTkgLyogTm9kZVR5cGVzLkpTX0NPTkRJVElPTkFMX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmFsdGVybmF0ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsLmFsdGVybmF0ZSA9IHZFbHNlLmV4cFxyXG4gICAgICAgICAgICAgICAgICAgID8gY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKHZFbHNlLmV4cCwgYnVpbGREeW5hbWljU2xvdChzbG90TmFtZSwgc2xvdEZ1bmN0aW9uLCBjb25kaXRpb25hbEJyYW5jaEluZGV4KyspLCBkZWZhdWx0RmFsbGJhY2spXHJcbiAgICAgICAgICAgICAgICAgICAgOiBidWlsZER5bmFtaWNTbG90KHNsb3ROYW1lLCBzbG90RnVuY3Rpb24sIGNvbmRpdGlvbmFsQnJhbmNoSW5kZXgrKyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzMCAvKiBFcnJvckNvZGVzLlhfVl9FTFNFX05PX0FESkFDRU5UX0lGICovLCB2RWxzZS5sb2MpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodkZvciA9IGZpbmREaXIoc2xvdEVsZW1lbnQsICdmb3InKSkpIHtcclxuICAgICAgICAgICAgaGFzRHluYW1pY1Nsb3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSB2Rm9yLnBhcnNlUmVzdWx0IHx8XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZvckV4cHJlc3Npb24odkZvci5leHAsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAocGFyc2VSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZHluYW1pYyBzbG90cyBhcyBhbiBhcnJheSBhbmQgYWRkIGl0IHRvIHRoZSBjcmVhdGVTbG90KClcclxuICAgICAgICAgICAgICAgIC8vIGFyZ3MuIFRoZSBydW50aW1lIGtub3dzIGhvdyB0byBoYW5kbGUgaXQgYXBwcm9wcmlhdGVseS5cclxuICAgICAgICAgICAgICAgIGR5bmFtaWNTbG90cy5wdXNoKGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKFJFTkRFUl9MSVNUKSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlUmVzdWx0LnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oY3JlYXRlRm9yTG9vcFBhcmFtcyhwYXJzZVJlc3VsdCksIGJ1aWxkRHluYW1pY1Nsb3Qoc2xvdE5hbWUsIHNsb3RGdW5jdGlvbiksIHRydWUgLyogZm9yY2UgbmV3bGluZSAqLylcclxuICAgICAgICAgICAgICAgIF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDMyIC8qIEVycm9yQ29kZXMuWF9WX0ZPUl9NQUxGT1JNRURfRVhQUkVTU0lPTiAqLywgdkZvci5sb2MpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY2hlY2sgZHVwbGljYXRlIHN0YXRpYyBuYW1lc1xyXG4gICAgICAgICAgICBpZiAoc3RhdGljU2xvdE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWVuU2xvdE5hbWVzLmhhcyhzdGF0aWNTbG90TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzOCAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX0RVUExJQ0FURV9TTE9UX05BTUVTICovLCBkaXJMb2MpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlZW5TbG90TmFtZXMuYWRkKHN0YXRpY1Nsb3ROYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0aWNTbG90TmFtZSA9PT0gJ2RlZmF1bHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzTmFtZWREZWZhdWx0U2xvdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2xvdHNQcm9wZXJ0aWVzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkoc2xvdE5hbWUsIHNsb3RGdW5jdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghb25Db21wb25lbnRTbG90KSB7XHJcbiAgICAgICAgY29uc3QgYnVpbGREZWZhdWx0U2xvdFByb3BlcnR5ID0gKHByb3BzLCBjaGlsZHJlbikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmbiA9IGJ1aWxkU2xvdEZuKHByb3BzLCBjaGlsZHJlbiwgbG9jKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuY29tcGF0Q29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBmbi5pc05vblNjb3BlZFNsb3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVPYmplY3RQcm9wZXJ0eShgZGVmYXVsdGAsIGZuKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghaGFzVGVtcGxhdGVTbG90cykge1xyXG4gICAgICAgICAgICAvLyBpbXBsaWNpdCBkZWZhdWx0IHNsb3QgKG9uIGNvbXBvbmVudClcclxuICAgICAgICAgICAgc2xvdHNQcm9wZXJ0aWVzLnB1c2goYnVpbGREZWZhdWx0U2xvdFByb3BlcnR5KHVuZGVmaW5lZCwgY2hpbGRyZW4pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaW1wbGljaXREZWZhdWx0Q2hpbGRyZW4ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIC8vICMzNzY2XHJcbiAgICAgICAgICAgIC8vIHdpdGggd2hpdGVzcGFjZTogJ3ByZXNlcnZlJywgd2hpdGVzcGFjZXMgYmV0d2VlbiBzbG90cyB3aWxsIGVuZCB1cCBpblxyXG4gICAgICAgICAgICAvLyBpbXBsaWNpdERlZmF1bHRDaGlsZHJlbi4gSWdub3JlIGlmIGFsbCBpbXBsaWNpdCBjaGlsZHJlbiBhcmUgd2hpdGVzcGFjZXMuXHJcbiAgICAgICAgICAgIGltcGxpY2l0RGVmYXVsdENoaWxkcmVuLnNvbWUobm9kZSA9PiBpc05vbldoaXRlc3BhY2VDb250ZW50KG5vZGUpKSkge1xyXG4gICAgICAgICAgICAvLyBpbXBsaWNpdCBkZWZhdWx0IHNsb3QgKG1peGVkIHdpdGggbmFtZWQgc2xvdHMpXHJcbiAgICAgICAgICAgIGlmIChoYXNOYW1lZERlZmF1bHRTbG90KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzOSAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX0VYVFJBTkVPVVNfREVGQVVMVF9TTE9UX0NISUxEUkVOICovLCBpbXBsaWNpdERlZmF1bHRDaGlsZHJlblswXS5sb2MpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNsb3RzUHJvcGVydGllcy5wdXNoKGJ1aWxkRGVmYXVsdFNsb3RQcm9wZXJ0eSh1bmRlZmluZWQsIGltcGxpY2l0RGVmYXVsdENoaWxkcmVuKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBzbG90RmxhZyA9IGhhc0R5bmFtaWNTbG90c1xyXG4gICAgICAgID8gMiAvKiBTbG90RmxhZ3MuRFlOQU1JQyAqL1xyXG4gICAgICAgIDogaGFzRm9yd2FyZGVkU2xvdHMobm9kZS5jaGlsZHJlbilcclxuICAgICAgICAgICAgPyAzIC8qIFNsb3RGbGFncy5GT1JXQVJERUQgKi9cclxuICAgICAgICAgICAgOiAxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi87XHJcbiAgICBsZXQgc2xvdHMgPSBjcmVhdGVPYmplY3RFeHByZXNzaW9uKHNsb3RzUHJvcGVydGllcy5jb25jYXQoY3JlYXRlT2JqZWN0UHJvcGVydHkoYF9gLCBcclxuICAgIC8vIDIgPSBjb21waWxlZCBidXQgZHluYW1pYyA9IGNhbiBza2lwIG5vcm1hbGl6YXRpb24sIGJ1dCBtdXN0IHJ1biBkaWZmXHJcbiAgICAvLyAxID0gY29tcGlsZWQgYW5kIHN0YXRpYyA9IGNhbiBza2lwIG5vcm1hbGl6YXRpb24gQU5EIGRpZmYgYXMgb3B0aW1pemVkXHJcbiAgICBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKHNsb3RGbGFnICsgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGAgLyogJHtzbG90RmxhZ3NUZXh0W3Nsb3RGbGFnXX0gKi9gIDogYGApLCBmYWxzZSkpKSwgbG9jKTtcclxuICAgIGlmIChkeW5hbWljU2xvdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgc2xvdHMgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihDUkVBVEVfU0xPVFMpLCBbXHJcbiAgICAgICAgICAgIHNsb3RzLFxyXG4gICAgICAgICAgICBjcmVhdGVBcnJheUV4cHJlc3Npb24oZHluYW1pY1Nsb3RzKVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzbG90cyxcclxuICAgICAgICBoYXNEeW5hbWljU2xvdHNcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gYnVpbGREeW5hbWljU2xvdChuYW1lLCBmbiwgaW5kZXgpIHtcclxuICAgIGNvbnN0IHByb3BzID0gW1xyXG4gICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KGBuYW1lYCwgbmFtZSksXHJcbiAgICAgICAgY3JlYXRlT2JqZWN0UHJvcGVydHkoYGZuYCwgZm4pXHJcbiAgICBdO1xyXG4gICAgaWYgKGluZGV4ICE9IG51bGwpIHtcclxuICAgICAgICBwcm9wcy5wdXNoKGNyZWF0ZU9iamVjdFByb3BlcnR5KGBrZXlgLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKFN0cmluZyhpbmRleCksIHRydWUpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wcyk7XHJcbn1cclxuZnVuY3Rpb24gaGFzRm9yd2FyZGVkU2xvdHMoY2hpbGRyZW4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIHN3aXRjaCAoY2hpbGQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudGFnVHlwZSA9PT0gMiAvKiBFbGVtZW50VHlwZXMuU0xPVCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0ZvcndhcmRlZFNsb3RzKGNoaWxkLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgOSAvKiBOb2RlVHlwZXMuSUYgKi86XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzRm9yd2FyZGVkU2xvdHMoY2hpbGQuYnJhbmNoZXMpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTAgLyogTm9kZVR5cGVzLklGX0JSQU5DSCAqLzpcclxuICAgICAgICAgICAgY2FzZSAxMSAvKiBOb2RlVHlwZXMuRk9SICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZvcndhcmRlZFNsb3RzKGNoaWxkLmNoaWxkcmVuKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBpc05vbldoaXRlc3BhY2VDb250ZW50KG5vZGUpIHtcclxuICAgIGlmIChub2RlLnR5cGUgIT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8gJiYgbm9kZS50eXBlICE9PSAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqL1xyXG4gICAgICAgID8gISFub2RlLmNvbnRlbnQudHJpbSgpXHJcbiAgICAgICAgOiBpc05vbldoaXRlc3BhY2VDb250ZW50KG5vZGUuY29udGVudCk7XHJcbn1cblxuLy8gc29tZSBkaXJlY3RpdmUgdHJhbnNmb3JtcyAoZS5nLiB2LW1vZGVsKSBtYXkgcmV0dXJuIGEgc3ltYm9sIGZvciBydW50aW1lXHJcbi8vIGltcG9ydCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBhIHJlc29sdmVEaXJlY3RpdmUgY2FsbC5cclxuY29uc3QgZGlyZWN0aXZlSW1wb3J0TWFwID0gbmV3IFdlYWtNYXAoKTtcclxuLy8gZ2VuZXJhdGUgYSBKYXZhU2NyaXB0IEFTVCBmb3IgdGhpcyBlbGVtZW50J3MgY29kZWdlblxyXG5jb25zdCB0cmFuc2Zvcm1FbGVtZW50ID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIC8vIHBlcmZvcm0gdGhlIHdvcmsgb24gZXhpdCwgYWZ0ZXIgYWxsIGNoaWxkIGV4cHJlc3Npb25zIGhhdmUgYmVlblxyXG4gICAgLy8gcHJvY2Vzc2VkIGFuZCBtZXJnZWQuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9zdFRyYW5zZm9ybUVsZW1lbnQoKSB7XHJcbiAgICAgICAgbm9kZSA9IGNvbnRleHQuY3VycmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgIChub2RlLnRhZ1R5cGUgPT09IDAgLyogRWxlbWVudFR5cGVzLkVMRU1FTlQgKi8gfHxcclxuICAgICAgICAgICAgICAgIG5vZGUudGFnVHlwZSA9PT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IHRhZywgcHJvcHMgfSA9IG5vZGU7XHJcbiAgICAgICAgY29uc3QgaXNDb21wb25lbnQgPSBub2RlLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLztcclxuICAgICAgICAvLyBUaGUgZ29hbCBvZiB0aGUgdHJhbnNmb3JtIGlzIHRvIGNyZWF0ZSBhIGNvZGVnZW5Ob2RlIGltcGxlbWVudGluZyB0aGVcclxuICAgICAgICAvLyBWTm9kZUNhbGwgaW50ZXJmYWNlLlxyXG4gICAgICAgIGxldCB2bm9kZVRhZyA9IGlzQ29tcG9uZW50XHJcbiAgICAgICAgICAgID8gcmVzb2x2ZUNvbXBvbmVudFR5cGUobm9kZSwgY29udGV4dClcclxuICAgICAgICAgICAgOiBgXCIke3RhZ31cImA7XHJcbiAgICAgICAgY29uc3QgaXNEeW5hbWljQ29tcG9uZW50ID0gaXNPYmplY3Qodm5vZGVUYWcpICYmIHZub2RlVGFnLmNhbGxlZSA9PT0gUkVTT0xWRV9EWU5BTUlDX0NPTVBPTkVOVDtcclxuICAgICAgICBsZXQgdm5vZGVQcm9wcztcclxuICAgICAgICBsZXQgdm5vZGVDaGlsZHJlbjtcclxuICAgICAgICBsZXQgdm5vZGVQYXRjaEZsYWc7XHJcbiAgICAgICAgbGV0IHBhdGNoRmxhZyA9IDA7XHJcbiAgICAgICAgbGV0IHZub2RlRHluYW1pY1Byb3BzO1xyXG4gICAgICAgIGxldCBkeW5hbWljUHJvcE5hbWVzO1xyXG4gICAgICAgIGxldCB2bm9kZURpcmVjdGl2ZXM7XHJcbiAgICAgICAgbGV0IHNob3VsZFVzZUJsb2NrID0gXHJcbiAgICAgICAgLy8gZHluYW1pYyBjb21wb25lbnQgbWF5IHJlc29sdmUgdG8gcGxhaW4gZWxlbWVudHNcclxuICAgICAgICBpc0R5bmFtaWNDb21wb25lbnQgfHxcclxuICAgICAgICAgICAgdm5vZGVUYWcgPT09IFRFTEVQT1JUIHx8XHJcbiAgICAgICAgICAgIHZub2RlVGFnID09PSBTVVNQRU5TRSB8fFxyXG4gICAgICAgICAgICAoIWlzQ29tcG9uZW50ICYmXHJcbiAgICAgICAgICAgICAgICAvLyA8c3ZnPiBhbmQgPGZvcmVpZ25PYmplY3Q+IG11c3QgYmUgZm9yY2VkIGludG8gYmxvY2tzIHNvIHRoYXQgYmxvY2tcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZXMgaW5zaWRlIGdldCBwcm9wZXIgaXNTVkcgZmxhZyBhdCBydW50aW1lLiAoIzYzOSwgIzY0MylcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgd2ViLXNwZWNpZmljLCBidXQgc3BsaXR0aW5nIHRoZSBsb2dpYyBvdXQgb2YgY29yZVxyXG4gICAgICAgICAgICAgICAgLy8gbGVhZHMgdG8gdG9vIG11Y2ggdW5uZWNlc3NhcnkgY29tcGxleGl0eS5cclxuICAgICAgICAgICAgICAgICh0YWcgPT09ICdzdmcnIHx8IHRhZyA9PT0gJ2ZvcmVpZ25PYmplY3QnKSk7XHJcbiAgICAgICAgLy8gcHJvcHNcclxuICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wc0J1aWxkUmVzdWx0ID0gYnVpbGRQcm9wcyhub2RlLCBjb250ZXh0LCB1bmRlZmluZWQsIGlzQ29tcG9uZW50LCBpc0R5bmFtaWNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICB2bm9kZVByb3BzID0gcHJvcHNCdWlsZFJlc3VsdC5wcm9wcztcclxuICAgICAgICAgICAgcGF0Y2hGbGFnID0gcHJvcHNCdWlsZFJlc3VsdC5wYXRjaEZsYWc7XHJcbiAgICAgICAgICAgIGR5bmFtaWNQcm9wTmFtZXMgPSBwcm9wc0J1aWxkUmVzdWx0LmR5bmFtaWNQcm9wTmFtZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwcm9wc0J1aWxkUmVzdWx0LmRpcmVjdGl2ZXM7XHJcbiAgICAgICAgICAgIHZub2RlRGlyZWN0aXZlcyA9XHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzICYmIGRpcmVjdGl2ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjcmVhdGVBcnJheUV4cHJlc3Npb24oZGlyZWN0aXZlcy5tYXAoZGlyID0+IGJ1aWxkRGlyZWN0aXZlQXJncyhkaXIsIGNvbnRleHQpKSlcclxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKHByb3BzQnVpbGRSZXN1bHQuc2hvdWxkVXNlQmxvY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZFVzZUJsb2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGlsZHJlblxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHZub2RlVGFnID09PSBLRUVQX0FMSVZFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBbHRob3VnaCBhIGJ1aWx0LWluIGNvbXBvbmVudCwgd2UgY29tcGlsZSBLZWVwQWxpdmUgd2l0aCByYXcgY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2Ygc2xvdCBmdW5jdGlvbnMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbnNpZGUgVHJhbnNpdGlvblxyXG4gICAgICAgICAgICAgICAgLy8gb3Igb3RoZXIgVHJhbnNpdGlvbi13cmFwcGluZyBIT0NzLlxyXG4gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3QgdXBkYXRlcyB3aXRoIGJsb2NrIG9wdGltaXphdGlvbnMsIHdlIG5lZWQgdG86XHJcbiAgICAgICAgICAgICAgICAvLyAxLiBGb3JjZSBrZWVwLWFsaXZlIGludG8gYSBibG9jay4gVGhpcyBhdm9pZHMgaXRzIGNoaWxkcmVuIGJlaW5nXHJcbiAgICAgICAgICAgICAgICAvLyAgICBjb2xsZWN0ZWQgYnkgYSBwYXJlbnQgYmxvY2suXHJcbiAgICAgICAgICAgICAgICBzaG91bGRVc2VCbG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyAyLiBGb3JjZSBrZWVwLWFsaXZlIHRvIGFsd2F5cyBiZSB1cGRhdGVkLCBzaW5jZSBpdCB1c2VzIHJhdyBjaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAxMDI0IC8qIFBhdGNoRmxhZ3MuRFlOQU1JQ19TTE9UUyAqLztcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDUgLyogRXJyb3JDb2Rlcy5YX0tFRVBfQUxJVkVfSU5WQUxJRF9DSElMRFJFTiAqLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogbm9kZS5jaGlsZHJlblswXS5sb2Muc3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdLmxvYy5lbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJydcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQnVpbGRBc1Nsb3RzID0gaXNDb21wb25lbnQgJiZcclxuICAgICAgICAgICAgICAgIC8vIFRlbGVwb3J0IGlzIG5vdCBhIHJlYWwgY29tcG9uZW50IGFuZCBoYXMgZGVkaWNhdGVkIHJ1bnRpbWUgaGFuZGxpbmdcclxuICAgICAgICAgICAgICAgIHZub2RlVGFnICE9PSBURUxFUE9SVCAmJlxyXG4gICAgICAgICAgICAgICAgLy8gZXhwbGFpbmVkIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgdm5vZGVUYWcgIT09IEtFRVBfQUxJVkU7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRCdWlsZEFzU2xvdHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2xvdHMsIGhhc0R5bmFtaWNTbG90cyB9ID0gYnVpbGRTbG90cyhub2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIHZub2RlQ2hpbGRyZW4gPSBzbG90cztcclxuICAgICAgICAgICAgICAgIGlmIChoYXNEeW5hbWljU2xvdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZsYWcgfD0gMTAyNCAvKiBQYXRjaEZsYWdzLkRZTkFNSUNfU0xPVFMgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgdm5vZGVUYWcgIT09IFRFTEVQT1JUKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gY2hpbGQudHlwZTtcclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBkeW5hbWljIHRleHQgY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0R5bmFtaWNUZXh0Q2hpbGQgPSB0eXBlID09PSA1IC8qIE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OICovIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLztcclxuICAgICAgICAgICAgICAgIGlmIChoYXNEeW5hbWljVGV4dENoaWxkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uc3RhbnRUeXBlKGNoaWxkLCBjb250ZXh0KSA9PT0gMCAvKiBDb25zdGFudFR5cGVzLk5PVF9DT05TVEFOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAxIC8qIFBhdGNoRmxhZ3MuVEVYVCAqLztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHBhc3MgZGlyZWN0bHkgaWYgdGhlIG9ubHkgY2hpbGQgaXMgYSB0ZXh0IG5vZGVcclxuICAgICAgICAgICAgICAgIC8vIChwbGFpbiAvIGludGVycG9sYXRpb24gLyBleHByZXNzaW9uKVxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0R5bmFtaWNUZXh0Q2hpbGQgfHwgdHlwZSA9PT0gMiAvKiBOb2RlVHlwZXMuVEVYVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlQ2hpbGRyZW4gPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcGF0Y2hGbGFnICYgZHluYW1pY1Byb3BOYW1lc1xyXG4gICAgICAgIGlmIChwYXRjaEZsYWcgIT09IDApIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGZsYWdzIChuZWdhdGl2ZSBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlKVxyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlUGF0Y2hGbGFnID0gcGF0Y2hGbGFnICsgYCAvKiAke1BhdGNoRmxhZ05hbWVzW3BhdGNoRmxhZ119ICovYDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJpdHdpc2UgZmxhZ3NcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGFnTmFtZXMgPSBPYmplY3Qua2V5cyhQYXRjaEZsYWdOYW1lcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChOdW1iZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobiA9PiBuID4gMCAmJiBwYXRjaEZsYWcgJiBuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKG4gPT4gUGF0Y2hGbGFnTmFtZXNbbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKGAsIGApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlUGF0Y2hGbGFnID0gcGF0Y2hGbGFnICsgYCAvKiAke2ZsYWdOYW1lc30gKi9gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVQYXRjaEZsYWcgPSBTdHJpbmcocGF0Y2hGbGFnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1Byb3BOYW1lcyAmJiBkeW5hbWljUHJvcE5hbWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVEeW5hbWljUHJvcHMgPSBzdHJpbmdpZnlEeW5hbWljUHJvcE5hbWVzKGR5bmFtaWNQcm9wTmFtZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuY29kZWdlbk5vZGUgPSBjcmVhdGVWTm9kZUNhbGwoY29udGV4dCwgdm5vZGVUYWcsIHZub2RlUHJvcHMsIHZub2RlQ2hpbGRyZW4sIHZub2RlUGF0Y2hGbGFnLCB2bm9kZUR5bmFtaWNQcm9wcywgdm5vZGVEaXJlY3RpdmVzLCAhIXNob3VsZFVzZUJsb2NrLCBmYWxzZSAvKiBkaXNhYmxlVHJhY2tpbmcgKi8sIGlzQ29tcG9uZW50LCBub2RlLmxvYyk7XHJcbiAgICB9O1xyXG59O1xyXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50VHlwZShub2RlLCBjb250ZXh0LCBzc3IgPSBmYWxzZSkge1xyXG4gICAgbGV0IHsgdGFnIH0gPSBub2RlO1xyXG4gICAgLy8gMS4gZHluYW1pYyBjb21wb25lbnRcclxuICAgIGNvbnN0IGlzRXhwbGljaXREeW5hbWljID0gaXNDb21wb25lbnRUYWcodGFnKTtcclxuICAgIGNvbnN0IGlzUHJvcCA9IGZpbmRQcm9wKG5vZGUsICdpcycpO1xyXG4gICAgaWYgKGlzUHJvcCkge1xyXG4gICAgICAgIGlmIChpc0V4cGxpY2l0RHluYW1pYyB8fFxyXG4gICAgICAgICAgICAoaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovLCBjb250ZXh0KSkpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhwID0gaXNQcm9wLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqL1xyXG4gICAgICAgICAgICAgICAgPyBpc1Byb3AudmFsdWUgJiYgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihpc1Byb3AudmFsdWUuY29udGVudCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIDogaXNQcm9wLmV4cDtcclxuICAgICAgICAgICAgaWYgKGV4cCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKFJFU09MVkVfRFlOQU1JQ19DT01QT05FTlQpLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc1Byb3AudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovICYmXHJcbiAgICAgICAgICAgIGlzUHJvcC52YWx1ZS5jb250ZW50LnN0YXJ0c1dpdGgoJ3Z1ZTonKSkge1xyXG4gICAgICAgICAgICAvLyA8YnV0dG9uIGlzPVwidnVlOnh4eFwiPlxyXG4gICAgICAgICAgICAvLyBpZiBub3QgPGNvbXBvbmVudD4sIG9ubHkgaXMgdmFsdWUgdGhhdCBzdGFydHMgd2l0aCBcInZ1ZTpcIiB3aWxsIGJlXHJcbiAgICAgICAgICAgIC8vIHRyZWF0ZWQgYXMgY29tcG9uZW50IGJ5IHRoZSBwYXJzZSBwaGFzZSBhbmQgcmVhY2ggaGVyZSwgdW5sZXNzIGl0J3NcclxuICAgICAgICAgICAgLy8gY29tcGF0IG1vZGUgd2hlcmUgYWxsIGlzIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBjb21wb25lbnRzXHJcbiAgICAgICAgICAgIHRhZyA9IGlzUHJvcC52YWx1ZS5jb250ZW50LnNsaWNlKDQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIDEuNSB2LWlzIChUT0RPOiBEZXByZWNhdGUpXHJcbiAgICBjb25zdCBpc0RpciA9ICFpc0V4cGxpY2l0RHluYW1pYyAmJiBmaW5kRGlyKG5vZGUsICdpcycpO1xyXG4gICAgaWYgKGlzRGlyICYmIGlzRGlyLmV4cCkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihSRVNPTFZFX0RZTkFNSUNfQ09NUE9ORU5UKSwgW1xyXG4gICAgICAgICAgICBpc0Rpci5leHBcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIC8vIDIuIGJ1aWx0LWluIGNvbXBvbmVudHMgKFRlbGVwb3J0LCBUcmFuc2l0aW9uLCBLZWVwQWxpdmUsIFN1c3BlbnNlLi4uKVxyXG4gICAgY29uc3QgYnVpbHRJbiA9IGlzQ29yZUNvbXBvbmVudCh0YWcpIHx8IGNvbnRleHQuaXNCdWlsdEluQ29tcG9uZW50KHRhZyk7XHJcbiAgICBpZiAoYnVpbHRJbikge1xyXG4gICAgICAgIC8vIGJ1aWx0LWlucyBhcmUgc2ltcGx5IGZhbGx0aHJvdWdocyAvIGhhdmUgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgc3NyXHJcbiAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgdGhlaXIgcnVudGltZSBlcXVpdmFsZW50c1xyXG4gICAgICAgIGlmICghc3NyKVxyXG4gICAgICAgICAgICBjb250ZXh0LmhlbHBlcihidWlsdEluKTtcclxuICAgICAgICByZXR1cm4gYnVpbHRJbjtcclxuICAgIH1cclxuICAgIC8vIDUuIHVzZXIgY29tcG9uZW50IChyZXNvbHZlKVxyXG4gICAgY29udGV4dC5oZWxwZXIoUkVTT0xWRV9DT01QT05FTlQpO1xyXG4gICAgY29udGV4dC5jb21wb25lbnRzLmFkZCh0YWcpO1xyXG4gICAgcmV0dXJuIHRvVmFsaWRBc3NldElkKHRhZywgYGNvbXBvbmVudGApO1xyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkUHJvcHMobm9kZSwgY29udGV4dCwgcHJvcHMgPSBub2RlLnByb3BzLCBpc0NvbXBvbmVudCwgaXNEeW5hbWljQ29tcG9uZW50LCBzc3IgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgeyB0YWcsIGxvYzogZWxlbWVudExvYywgY2hpbGRyZW4gfSA9IG5vZGU7XHJcbiAgICBsZXQgcHJvcGVydGllcyA9IFtdO1xyXG4gICAgY29uc3QgbWVyZ2VBcmdzID0gW107XHJcbiAgICBjb25zdCBydW50aW1lRGlyZWN0aXZlcyA9IFtdO1xyXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHNob3VsZFVzZUJsb2NrID0gZmFsc2U7XHJcbiAgICAvLyBwYXRjaEZsYWcgYW5hbHlzaXNcclxuICAgIGxldCBwYXRjaEZsYWcgPSAwO1xyXG4gICAgbGV0IGhhc1JlZiA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc0NsYXNzQmluZGluZyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc1N0eWxlQmluZGluZyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc0h5ZHJhdGlvbkV2ZW50QmluZGluZyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc0R5bmFtaWNLZXlzID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzVm5vZGVIb29rID0gZmFsc2U7XHJcbiAgICBjb25zdCBkeW5hbWljUHJvcE5hbWVzID0gW107XHJcbiAgICBjb25zdCBhbmFseXplUGF0Y2hGbGFnID0gKHsga2V5LCB2YWx1ZSB9KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzU3RhdGljRXhwKGtleSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGtleS5jb250ZW50O1xyXG4gICAgICAgICAgICBjb25zdCBpc0V2ZW50SGFuZGxlciA9IGlzT24obmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0V2ZW50SGFuZGxlciAmJlxyXG4gICAgICAgICAgICAgICAgKCFpc0NvbXBvbmVudCB8fCBpc0R5bmFtaWNDb21wb25lbnQpICYmXHJcbiAgICAgICAgICAgICAgICAvLyBvbWl0IHRoZSBmbGFnIGZvciBjbGljayBoYW5kbGVycyBiZWNhdXNlIGh5ZHJhdGlvbiBnaXZlcyBjbGlja1xyXG4gICAgICAgICAgICAgICAgLy8gZGVkaWNhdGVkIGZhc3QgcGF0aC5cclxuICAgICAgICAgICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ29uY2xpY2snICYmXHJcbiAgICAgICAgICAgICAgICAvLyBvbWl0IHYtbW9kZWwgaGFuZGxlcnNcclxuICAgICAgICAgICAgICAgIG5hbWUgIT09ICdvblVwZGF0ZTptb2RlbFZhbHVlJyAmJlxyXG4gICAgICAgICAgICAgICAgLy8gb21pdCBvblZub2RlWFhYIGhvb2tzXHJcbiAgICAgICAgICAgICAgICAhaXNSZXNlcnZlZFByb3AobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGhhc0h5ZHJhdGlvbkV2ZW50QmluZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzRXZlbnRIYW5kbGVyICYmIGlzUmVzZXJ2ZWRQcm9wKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNWbm9kZUhvb2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAyMCAvKiBOb2RlVHlwZXMuSlNfQ0FDSEVfRVhQUkVTU0lPTiAqLyB8fFxyXG4gICAgICAgICAgICAgICAgKCh2YWx1ZS50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi8pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uc3RhbnRUeXBlKHZhbHVlLCBjb250ZXh0KSA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBza2lwIGlmIHRoZSBwcm9wIGlzIGEgY2FjaGVkIGhhbmRsZXIgb3IgaGFzIGNvbnN0YW50IHZhbHVlXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdyZWYnKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNSZWYgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgIGhhc0NsYXNzQmluZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xyXG4gICAgICAgICAgICAgICAgaGFzU3R5bGVCaW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChuYW1lICE9PSAna2V5JyAmJiAhZHluYW1pY1Byb3BOYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BOYW1lcy5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRyZWF0IHRoZSBkeW5hbWljIGNsYXNzIGFuZCBzdHlsZSBiaW5kaW5nIG9mIHRoZSBjb21wb25lbnQgYXMgZHluYW1pYyBwcm9wc1xyXG4gICAgICAgICAgICBpZiAoaXNDb21wb25lbnQgJiZcclxuICAgICAgICAgICAgICAgIChuYW1lID09PSAnY2xhc3MnIHx8IG5hbWUgPT09ICdzdHlsZScpICYmXHJcbiAgICAgICAgICAgICAgICAhZHluYW1pY1Byb3BOYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BOYW1lcy5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoYXNEeW5hbWljS2V5cyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyBzdGF0aWMgYXR0cmlidXRlXHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xyXG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGxvYywgbmFtZSwgdmFsdWUgfSA9IHByb3A7XHJcbiAgICAgICAgICAgIGxldCBpc1N0YXRpYyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAncmVmJykge1xyXG4gICAgICAgICAgICAgICAgaGFzUmVmID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnNjb3Blcy52Rm9yID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChjcmVhdGVPYmplY3RQcm9wZXJ0eShjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCdyZWZfZm9yJywgdHJ1ZSksIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJ3RydWUnKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNraXAgaXMgb24gPGNvbXBvbmVudD4sIG9yIGlzPVwidnVlOnh4eFwiXHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnaXMnICYmXHJcbiAgICAgICAgICAgICAgICAoaXNDb21wb25lbnRUYWcodGFnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSAmJiB2YWx1ZS5jb250ZW50LnN0YXJ0c1dpdGgoJ3Z1ZTonKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAoaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfSVNfT05fRUxFTUVOVFwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9JU19PTl9FTEVNRU5UICovLCBjb250ZXh0KSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkoY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihuYW1lLCB0cnVlLCBnZXRJbm5lclJhbmdlKGxvYywgMCwgbmFtZS5sZW5ndGgpKSwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbih2YWx1ZSA/IHZhbHVlLmNvbnRlbnQgOiAnJywgaXNTdGF0aWMsIHZhbHVlID8gdmFsdWUubG9jIDogbG9jKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlyZWN0aXZlc1xyXG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIGFyZywgZXhwLCBsb2MgfSA9IHByb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVkJpbmQgPSBuYW1lID09PSAnYmluZCc7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVk9uID0gbmFtZSA9PT0gJ29uJztcclxuICAgICAgICAgICAgLy8gc2tpcCB2LXNsb3QgLSBpdCBpcyBoYW5kbGVkIGJ5IGl0cyBkZWRpY2F0ZWQgdHJhbnNmb3JtLlxyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Nsb3QnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDAgLyogRXJyb3JDb2Rlcy5YX1ZfU0xPVF9NSVNQTEFDRUQgKi8sIGxvYykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2tpcCB2LW9uY2Uvdi1tZW1vIC0gdGhleSBhcmUgaGFuZGxlZCBieSBkZWRpY2F0ZWQgdHJhbnNmb3Jtcy5cclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdvbmNlJyB8fCBuYW1lID09PSAnbWVtbycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNraXAgdi1pcyBhbmQgOmlzIG9uIDxjb21wb25lbnQ+XHJcbiAgICAgICAgICAgIGlmIChuYW1lID09PSAnaXMnIHx8XHJcbiAgICAgICAgICAgICAgICAoaXNWQmluZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljQXJnT2YoYXJnLCAnaXMnKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChpc0NvbXBvbmVudFRhZyh0YWcpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9JU19PTl9FTEVNRU5UXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX0lTX09OX0VMRU1FTlQgKi8sIGNvbnRleHQpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBza2lwIHYtb24gaW4gU1NSIGNvbXBpbGF0aW9uXHJcbiAgICAgICAgICAgIGlmIChpc1ZPbiAmJiBzc3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgLy8gIzkzODogZWxlbWVudHMgd2l0aCBkeW5hbWljIGtleXMgc2hvdWxkIGJlIGZvcmNlZCBpbnRvIGJsb2Nrc1xyXG4gICAgICAgICAgICAoaXNWQmluZCAmJiBpc1N0YXRpY0FyZ09mKGFyZywgJ2tleScpKSB8fFxyXG4gICAgICAgICAgICAgICAgLy8gaW5saW5lIGJlZm9yZS11cGRhdGUgaG9va3MgbmVlZCB0byBmb3JjZSBibG9jayBzbyB0aGF0IGl0IGlzIGludm9rZWRcclxuICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBjaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgKGlzVk9uICYmIGhhc0NoaWxkcmVuICYmIGlzU3RhdGljQXJnT2YoYXJnLCAndnVlOmJlZm9yZS11cGRhdGUnKSkpIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZFVzZUJsb2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNWQmluZCAmJiBpc1N0YXRpY0FyZ09mKGFyZywgJ3JlZicpICYmIGNvbnRleHQuc2NvcGVzLnZGb3IgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goY3JlYXRlT2JqZWN0UHJvcGVydHkoY3JlYXRlU2ltcGxlRXhwcmVzc2lvbigncmVmX2ZvcicsIHRydWUpLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCd0cnVlJykpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHYtYmluZCBhbmQgdi1vbiB3aXRoIG5vIGFyZ3VtZW50XHJcbiAgICAgICAgICAgIGlmICghYXJnICYmIChpc1ZCaW5kIHx8IGlzVk9uKSkge1xyXG4gICAgICAgICAgICAgICAgaGFzRHluYW1pY0tleXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUFyZ3MucHVzaChjcmVhdGVPYmplY3RFeHByZXNzaW9uKGRlZHVwZVByb3BlcnRpZXMocHJvcGVydGllcyksIGVsZW1lbnRMb2MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWQmluZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyLnggdi1iaW5kIG9iamVjdCBvcmRlciBjb21wYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNPdmVycmlkYWJsZUtleXMgPSBtZXJnZUFyZ3Muc29tZShhcmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLnR5cGUgPT09IDE1IC8qIE5vZGVUeXBlcy5KU19PQkpFQ1RfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy5wcm9wZXJ0aWVzLnNvbWUoKHsga2V5IH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnR5cGUgIT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFrZXkuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoa2V5LmNvbnRlbnQgIT09ICdjbGFzcycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmNvbnRlbnQgIT09ICdzdHlsZScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzT24oa2V5LmNvbnRlbnQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHluYW1pYyBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPdmVycmlkYWJsZUtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfVl9CSU5EX09CSkVDVF9PUkRFUlwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9WX0JJTkRfT0JKRUNUX09SREVSICovLCBjb250ZXh0LCBsb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBhdEVuYWJsZWQoXCJDT01QSUxFUl9WX0JJTkRfT0JKRUNUX09SREVSXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfQklORF9PQkpFQ1RfT1JERVIgKi8sIGNvbnRleHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VBcmdzLnVuc2hpZnQoZXhwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUFyZ3MucHVzaChleHApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdi1vbj1cIm9ialwiIC0+IHRvSGFuZGxlcnMob2JqKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUFyZ3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlOiBjb250ZXh0LmhlbHBlcihUT19IQU5ETEVSUyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHM6IGlzQ29tcG9uZW50ID8gW2V4cF0gOiBbZXhwLCBgdHJ1ZWBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKGlzVkJpbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAzNCAvKiBFcnJvckNvZGVzLlhfVl9CSU5EX05PX0VYUFJFU1NJT04gKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAzNSAvKiBFcnJvckNvZGVzLlhfVl9PTl9OT19FWFBSRVNTSU9OICovLCBsb2MpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZVRyYW5zZm9ybSA9IGNvbnRleHQuZGlyZWN0aXZlVHJhbnNmb3Jtc1tuYW1lXTtcclxuICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZVRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaGFzIGJ1aWx0LWluIGRpcmVjdGl2ZSB0cmFuc2Zvcm0uXHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHByb3BzLCBuZWVkUnVudGltZSB9ID0gZGlyZWN0aXZlVHJhbnNmb3JtKHByb3AsIG5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgIXNzciAmJiBwcm9wcy5mb3JFYWNoKGFuYWx5emVQYXRjaEZsYWcpO1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKC4uLnByb3BzKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZWVkUnVudGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVEaXJlY3RpdmVzLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3ltYm9sKG5lZWRSdW50aW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVJbXBvcnRNYXAuc2V0KHByb3AsIG5lZWRSdW50aW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzQnVpbHRJbkRpcmVjdGl2ZShuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gYnVpbHQtaW4gdHJhbnNmb3JtLCB0aGlzIGlzIGEgdXNlciBjdXN0b20gZGlyZWN0aXZlLlxyXG4gICAgICAgICAgICAgICAgcnVudGltZURpcmVjdGl2ZXMucHVzaChwcm9wKTtcclxuICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBkaXJzIG1heSB1c2UgYmVmb3JlVXBkYXRlIHNvIHRoZXkgbmVlZCB0byBmb3JjZSBibG9ja3NcclxuICAgICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSBiZWZvcmUtdXBkYXRlIGdldHMgY2FsbGVkIGJlZm9yZSBjaGlsZHJlbiB1cGRhdGVcclxuICAgICAgICAgICAgICAgIGlmIChoYXNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFVzZUJsb2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBwcm9wc0V4cHJlc3Npb24gPSB1bmRlZmluZWQ7XHJcbiAgICAvLyBoYXMgdi1iaW5kPVwib2JqZWN0XCIgb3Igdi1vbj1cIm9iamVjdFwiLCB3cmFwIHdpdGggbWVyZ2VQcm9wc1xyXG4gICAgaWYgKG1lcmdlQXJncy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWVyZ2VBcmdzLnB1c2goY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihkZWR1cGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpLCBlbGVtZW50TG9jKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXJnZUFyZ3MubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBwcm9wc0V4cHJlc3Npb24gPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihNRVJHRV9QUk9QUyksIG1lcmdlQXJncywgZWxlbWVudExvYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzaW5nbGUgdi1iaW5kIHdpdGggbm90aGluZyBlbHNlIC0gbm8gbmVlZCBmb3IgYSBtZXJnZVByb3BzIGNhbGxcclxuICAgICAgICAgICAgcHJvcHNFeHByZXNzaW9uID0gbWVyZ2VBcmdzWzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcHJvcHNFeHByZXNzaW9uID0gY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihkZWR1cGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpLCBlbGVtZW50TG9jKTtcclxuICAgIH1cclxuICAgIC8vIHBhdGNoRmxhZyBhbmFseXNpc1xyXG4gICAgaWYgKGhhc0R5bmFtaWNLZXlzKSB7XHJcbiAgICAgICAgcGF0Y2hGbGFnIHw9IDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqLztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChoYXNDbGFzc0JpbmRpbmcgJiYgIWlzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAyIC8qIFBhdGNoRmxhZ3MuQ0xBU1MgKi87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYXNTdHlsZUJpbmRpbmcgJiYgIWlzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyB8PSA0IC8qIFBhdGNoRmxhZ3MuU1RZTEUgKi87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkeW5hbWljUHJvcE5hbWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBwYXRjaEZsYWcgfD0gOCAvKiBQYXRjaEZsYWdzLlBST1BTICovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFzSHlkcmF0aW9uRXZlbnRCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyB8PSAzMiAvKiBQYXRjaEZsYWdzLkhZRFJBVEVfRVZFTlRTICovO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghc2hvdWxkVXNlQmxvY2sgJiZcclxuICAgICAgICAocGF0Y2hGbGFnID09PSAwIHx8IHBhdGNoRmxhZyA9PT0gMzIgLyogUGF0Y2hGbGFncy5IWURSQVRFX0VWRU5UUyAqLykgJiZcclxuICAgICAgICAoaGFzUmVmIHx8IGhhc1Zub2RlSG9vayB8fCBydW50aW1lRGlyZWN0aXZlcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIHBhdGNoRmxhZyB8PSA1MTIgLyogUGF0Y2hGbGFncy5ORUVEX1BBVENIICovO1xyXG4gICAgfVxyXG4gICAgLy8gcHJlLW5vcm1hbGl6ZSBwcm9wcywgU1NSIGlzIHNraXBwZWQgZm9yIG5vd1xyXG4gICAgaWYgKCFjb250ZXh0LmluU1NSICYmIHByb3BzRXhwcmVzc2lvbikge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHNFeHByZXNzaW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxNSAvKiBOb2RlVHlwZXMuSlNfT0JKRUNUX0VYUFJFU1NJT04gKi86XHJcbiAgICAgICAgICAgICAgICAvLyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHYtYmluZCxcclxuICAgICAgICAgICAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIGRlYWwgd2l0aCBkeW5hbWljIGtleSBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NLZXlJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0eWxlS2V5SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgIGxldCBoYXNEeW5hbWljS2V5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzRXhwcmVzc2lvbi5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcHNFeHByZXNzaW9uLnByb3BlcnRpZXNbaV0ua2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0YXRpY0V4cChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuY29udGVudCA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NLZXlJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5LmNvbnRlbnQgPT09ICdzdHlsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlS2V5SW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFrZXkuaXNIYW5kbGVyS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0R5bmFtaWNLZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzUHJvcCA9IHByb3BzRXhwcmVzc2lvbi5wcm9wZXJ0aWVzW2NsYXNzS2V5SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVQcm9wID0gcHJvcHNFeHByZXNzaW9uLnByb3BlcnRpZXNbc3R5bGVLZXlJbmRleF07XHJcbiAgICAgICAgICAgICAgICAvLyBubyBkeW5hbWljIGtleVxyXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNEeW5hbWljS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzUHJvcCAmJiAhaXNTdGF0aWNFeHAoY2xhc3NQcm9wLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1Byb3AudmFsdWUgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihOT1JNQUxJWkVfQ0xBU1MpLCBbY2xhc3NQcm9wLnZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVByb3AgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRpYyBzdHlsZSBpcyBjb21waWxlZCBpbnRvIGFuIG9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdXNlIGBoYXNTdHlsZUJpbmRpbmdgIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGEgZHluYW1pYyBzdHlsZSBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChoYXNTdHlsZUJpbmRpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZVByb3AudmFsdWUudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVByb3AudmFsdWUuY29udGVudC50cmltKClbMF0gPT09IGBbYCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHYtYmluZDpzdHlsZSBhbmQgc3R5bGUgYm90aCBleGlzdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHYtYmluZDpzdHlsZSB3aXRoIHN0YXRpYyBsaXRlcmFsIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVQcm9wLnZhbHVlLnR5cGUgPT09IDE3IC8qIE5vZGVUeXBlcy5KU19BUlJBWV9FWFBSRVNTSU9OICovKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVByb3AudmFsdWUgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihOT1JNQUxJWkVfU1RZTEUpLCBbc3R5bGVQcm9wLnZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZHluYW1pYyBrZXkgYmluZGluZywgd3JhcCB3aXRoIGBub3JtYWxpemVQcm9wc2BcclxuICAgICAgICAgICAgICAgICAgICBwcm9wc0V4cHJlc3Npb24gPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihOT1JNQUxJWkVfUFJPUFMpLCBbcHJvcHNFeHByZXNzaW9uXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxNCAvKiBOb2RlVHlwZXMuSlNfQ0FMTF9FWFBSRVNTSU9OICovOlxyXG4gICAgICAgICAgICAgICAgLy8gbWVyZ2VQcm9wcyBjYWxsLCBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIHNpbmdsZSB2LWJpbmRcclxuICAgICAgICAgICAgICAgIHByb3BzRXhwcmVzc2lvbiA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKE5PUk1BTElaRV9QUk9QUyksIFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihHVUFSRF9SRUFDVElWRV9QUk9QUyksIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNFeHByZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9wczogcHJvcHNFeHByZXNzaW9uLFxyXG4gICAgICAgIGRpcmVjdGl2ZXM6IHJ1bnRpbWVEaXJlY3RpdmVzLFxyXG4gICAgICAgIHBhdGNoRmxhZyxcclxuICAgICAgICBkeW5hbWljUHJvcE5hbWVzLFxyXG4gICAgICAgIHNob3VsZFVzZUJsb2NrXHJcbiAgICB9O1xyXG59XHJcbi8vIERlZHVwZSBwcm9wcyBpbiBhbiBvYmplY3QgbGl0ZXJhbC5cclxuLy8gTGl0ZXJhbCBkdXBsaWNhdGVkIGF0dHJpYnV0ZXMgd291bGQgaGF2ZSBiZWVuIHdhcm5lZCBkdXJpbmcgdGhlIHBhcnNlIHBoYXNlLFxyXG4vLyBob3dldmVyLCBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBkdXBsaWNhdGVkIGBvblhYWGAgaGFuZGxlcnMgd2l0aCBkaWZmZXJlbnRcclxuLy8gbW9kaWZpZXJzLiBXZSBhbHNvIG5lZWQgdG8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIGNsYXNzIC8gc3R5bGUgYXR0cmlidXRlcy5cclxuLy8gLSBvblhYWCBoYW5kbGVycyAvIHN0eWxlOiBtZXJnZSBpbnRvIGFycmF5XHJcbi8vIC0gY2xhc3M6IG1lcmdlIGludG8gc2luZ2xlIGV4cHJlc3Npb24gd2l0aCBjb25jYXRlbmF0aW9uXHJcbmZ1bmN0aW9uIGRlZHVwZVByb3BlcnRpZXMocHJvcGVydGllcykge1xyXG4gICAgY29uc3Qga25vd25Qcm9wcyA9IG5ldyBNYXAoKTtcclxuICAgIGNvbnN0IGRlZHVwZWQgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgIC8vIGR5bmFtaWMga2V5cyBhcmUgYWx3YXlzIGFsbG93ZWRcclxuICAgICAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gOCAvKiBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTiAqLyB8fCAhcHJvcC5rZXkuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgZGVkdXBlZC5wdXNoKHByb3ApO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHByb3Aua2V5LmNvbnRlbnQ7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBrbm93blByb3BzLmdldChuYW1lKTtcclxuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdHlsZScgfHwgbmFtZSA9PT0gJ2NsYXNzJyB8fCBpc09uKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBtZXJnZUFzQXJyYXkoZXhpc3RpbmcsIHByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgZHVwbGljYXRlLCBzaG91bGQgaGF2ZSBlbWl0dGVkIGVycm9yIGR1cmluZyBwYXJzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAga25vd25Qcm9wcy5zZXQobmFtZSwgcHJvcCk7XHJcbiAgICAgICAgICAgIGRlZHVwZWQucHVzaChwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVkdXBlZDtcclxufVxyXG5mdW5jdGlvbiBtZXJnZUFzQXJyYXkoZXhpc3RpbmcsIGluY29taW5nKSB7XHJcbiAgICBpZiAoZXhpc3RpbmcudmFsdWUudHlwZSA9PT0gMTcgLyogTm9kZVR5cGVzLkpTX0FSUkFZX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBleGlzdGluZy52YWx1ZS5lbGVtZW50cy5wdXNoKGluY29taW5nLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGV4aXN0aW5nLnZhbHVlID0gY3JlYXRlQXJyYXlFeHByZXNzaW9uKFtleGlzdGluZy52YWx1ZSwgaW5jb21pbmcudmFsdWVdLCBleGlzdGluZy5sb2MpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkRGlyZWN0aXZlQXJncyhkaXIsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IGRpckFyZ3MgPSBbXTtcclxuICAgIGNvbnN0IHJ1bnRpbWUgPSBkaXJlY3RpdmVJbXBvcnRNYXAuZ2V0KGRpcik7XHJcbiAgICBpZiAocnVudGltZSkge1xyXG4gICAgICAgIC8vIGJ1aWx0LWluIGRpcmVjdGl2ZSB3aXRoIHJ1bnRpbWVcclxuICAgICAgICBkaXJBcmdzLnB1c2goY29udGV4dC5oZWxwZXJTdHJpbmcocnVudGltZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBpbmplY3Qgc3RhdGVtZW50IGZvciByZXNvbHZpbmcgZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIGNvbnRleHQuaGVscGVyKFJFU09MVkVfRElSRUNUSVZFKTtcclxuICAgICAgICAgICAgY29udGV4dC5kaXJlY3RpdmVzLmFkZChkaXIubmFtZSk7XHJcbiAgICAgICAgICAgIGRpckFyZ3MucHVzaCh0b1ZhbGlkQXNzZXRJZChkaXIubmFtZSwgYGRpcmVjdGl2ZWApKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGxvYyB9ID0gZGlyO1xyXG4gICAgaWYgKGRpci5leHApXHJcbiAgICAgICAgZGlyQXJncy5wdXNoKGRpci5leHApO1xyXG4gICAgaWYgKGRpci5hcmcpIHtcclxuICAgICAgICBpZiAoIWRpci5leHApIHtcclxuICAgICAgICAgICAgZGlyQXJncy5wdXNoKGB2b2lkIDBgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlyQXJncy5wdXNoKGRpci5hcmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMpLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICghZGlyLmFyZykge1xyXG4gICAgICAgICAgICBpZiAoIWRpci5leHApIHtcclxuICAgICAgICAgICAgICAgIGRpckFyZ3MucHVzaChgdm9pZCAwYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlyQXJncy5wdXNoKGB2b2lkIDBgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdHJ1ZUV4cHJlc3Npb24gPSBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGB0cnVlYCwgZmFsc2UsIGxvYyk7XHJcbiAgICAgICAgZGlyQXJncy5wdXNoKGNyZWF0ZU9iamVjdEV4cHJlc3Npb24oZGlyLm1vZGlmaWVycy5tYXAobW9kaWZpZXIgPT4gY3JlYXRlT2JqZWN0UHJvcGVydHkobW9kaWZpZXIsIHRydWVFeHByZXNzaW9uKSksIGxvYykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZUFycmF5RXhwcmVzc2lvbihkaXJBcmdzLCBkaXIubG9jKTtcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdpZnlEeW5hbWljUHJvcE5hbWVzKHByb3BzKSB7XHJcbiAgICBsZXQgcHJvcHNOYW1lc1N0cmluZyA9IGBbYDtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJvcHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgcHJvcHNOYW1lc1N0cmluZyArPSBKU09OLnN0cmluZ2lmeShwcm9wc1tpXSk7XHJcbiAgICAgICAgaWYgKGkgPCBsIC0gMSlcclxuICAgICAgICAgICAgcHJvcHNOYW1lc1N0cmluZyArPSAnLCAnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BzTmFtZXNTdHJpbmcgKyBgXWA7XHJcbn1cclxuZnVuY3Rpb24gaXNDb21wb25lbnRUYWcodGFnKSB7XHJcbiAgICByZXR1cm4gdGFnID09PSAnY29tcG9uZW50JyB8fCB0YWcgPT09ICdDb21wb25lbnQnO1xyXG59XG5cbihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgPyBPYmplY3QuZnJlZXplKHt9KVxyXG4gICAgOiB7fTtcclxuKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gT2JqZWN0LmZyZWV6ZShbXSkgOiBbXTtcclxuY29uc3QgY2FjaGVTdHJpbmdGdW5jdGlvbiA9IChmbikgPT4ge1xyXG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgcmV0dXJuICgoc3RyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gY2FjaGVbc3RyXTtcclxuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XHJcbiAgICB9KTtcclxufTtcclxuY29uc3QgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBjYW1lbGl6ZSA9IGNhY2hlU3RyaW5nRnVuY3Rpb24oKHN0cikgPT4ge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIChfLCBjKSA9PiAoYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKSk7XHJcbn0pO1xuXG5jb25zdCB0cmFuc2Zvcm1TbG90T3V0bGV0ID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChpc1Nsb3RPdXRsZXQobm9kZSkpIHtcclxuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBsb2MgfSA9IG5vZGU7XHJcbiAgICAgICAgY29uc3QgeyBzbG90TmFtZSwgc2xvdFByb3BzIH0gPSBwcm9jZXNzU2xvdE91dGxldChub2RlLCBjb250ZXh0KTtcclxuICAgICAgICBjb25zdCBzbG90QXJncyA9IFtcclxuICAgICAgICAgICAgY29udGV4dC5wcmVmaXhJZGVudGlmaWVycyA/IGBfY3R4LiRzbG90c2AgOiBgJHNsb3RzYCxcclxuICAgICAgICAgICAgc2xvdE5hbWUsXHJcbiAgICAgICAgICAgICd7fScsXHJcbiAgICAgICAgICAgICd1bmRlZmluZWQnLFxyXG4gICAgICAgICAgICAndHJ1ZSdcclxuICAgICAgICBdO1xyXG4gICAgICAgIGxldCBleHBlY3RlZExlbiA9IDI7XHJcbiAgICAgICAgaWYgKHNsb3RQcm9wcykge1xyXG4gICAgICAgICAgICBzbG90QXJnc1syXSA9IHNsb3RQcm9wcztcclxuICAgICAgICAgICAgZXhwZWN0ZWRMZW4gPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHNsb3RBcmdzWzNdID0gY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFtdLCBjaGlsZHJlbiwgZmFsc2UsIGZhbHNlLCBsb2MpO1xyXG4gICAgICAgICAgICBleHBlY3RlZExlbiA9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250ZXh0LnNjb3BlSWQgJiYgIWNvbnRleHQuc2xvdHRlZCkge1xyXG4gICAgICAgICAgICBleHBlY3RlZExlbiA9IDU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsb3RBcmdzLnNwbGljZShleHBlY3RlZExlbik7IC8vIHJlbW92ZSB1bnVzZWQgYXJndW1lbnRzXHJcbiAgICAgICAgbm9kZS5jb2RlZ2VuTm9kZSA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKFJFTkRFUl9TTE9UKSwgc2xvdEFyZ3MsIGxvYyk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHByb2Nlc3NTbG90T3V0bGV0KG5vZGUsIGNvbnRleHQpIHtcclxuICAgIGxldCBzbG90TmFtZSA9IGBcImRlZmF1bHRcImA7XHJcbiAgICBsZXQgc2xvdFByb3BzID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgbm9uTmFtZVByb3BzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwID0gbm9kZS5wcm9wc1tpXTtcclxuICAgICAgICBpZiAocC50eXBlID09PSA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHAudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLm5hbWUgPT09ICduYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsb3ROYW1lID0gSlNPTi5zdHJpbmdpZnkocC52YWx1ZS5jb250ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHAubmFtZSA9IGNhbWVsaXplKHAubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9uTmFtZVByb3BzLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwLm5hbWUgPT09ICdiaW5kJyAmJiBpc1N0YXRpY0FyZ09mKHAuYXJnLCAnbmFtZScpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC5leHApXHJcbiAgICAgICAgICAgICAgICAgICAgc2xvdE5hbWUgPSBwLmV4cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLm5hbWUgPT09ICdiaW5kJyAmJiBwLmFyZyAmJiBpc1N0YXRpY0V4cChwLmFyZykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwLmFyZy5jb250ZW50ID0gY2FtZWxpemUocC5hcmcuY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub25OYW1lUHJvcHMucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub25OYW1lUHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHsgcHJvcHMsIGRpcmVjdGl2ZXMgfSA9IGJ1aWxkUHJvcHMobm9kZSwgY29udGV4dCwgbm9uTmFtZVByb3BzLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIHNsb3RQcm9wcyA9IHByb3BzO1xyXG4gICAgICAgIGlmIChkaXJlY3RpdmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzNiAvKiBFcnJvckNvZGVzLlhfVl9TTE9UX1VORVhQRUNURURfRElSRUNUSVZFX09OX1NMT1RfT1VUTEVUICovLCBkaXJlY3RpdmVzWzBdLmxvYykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc2xvdE5hbWUsXHJcbiAgICAgICAgc2xvdFByb3BzXHJcbiAgICB9O1xyXG59XG5cbmNvbnN0IGZuRXhwUkUgPSAvXlxccyooW1xcdyRfXSt8KGFzeW5jXFxzKik/XFwoW14pXSo/XFwpKVxccyo9PnxeXFxzKihhc3luY1xccyspP2Z1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvO1xyXG5jb25zdCB0cmFuc2Zvcm1PbiA9IChkaXIsIG5vZGUsIGNvbnRleHQsIGF1Z21lbnRvcikgPT4ge1xyXG4gICAgY29uc3QgeyBsb2MsIG1vZGlmaWVycywgYXJnIH0gPSBkaXI7XHJcbiAgICBpZiAoIWRpci5leHAgJiYgIW1vZGlmaWVycy5sZW5ndGgpIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzNSAvKiBFcnJvckNvZGVzLlhfVl9PTl9OT19FWFBSRVNTSU9OICovLCBsb2MpKTtcclxuICAgIH1cclxuICAgIGxldCBldmVudE5hbWU7XHJcbiAgICBpZiAoYXJnLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgaWYgKGFyZy5pc1N0YXRpYykge1xyXG4gICAgICAgICAgICBsZXQgcmF3TmFtZSA9IGFyZy5jb250ZW50O1xyXG4gICAgICAgICAgICAvLyBUT0RPIGRlcHJlY2F0ZSBAdm5vZGVYWFggdXNhZ2VcclxuICAgICAgICAgICAgaWYgKHJhd05hbWUuc3RhcnRzV2l0aCgndnVlOicpKSB7XHJcbiAgICAgICAgICAgICAgICByYXdOYW1lID0gYHZub2RlLSR7cmF3TmFtZS5zbGljZSg0KX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyaW5nID0gbm9kZS50YWdUeXBlID09PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi8gfHxcclxuICAgICAgICAgICAgICAgIHJhd05hbWUuc3RhcnRzV2l0aCgndm5vZGUnKSB8fFxyXG4gICAgICAgICAgICAgICAgIS9bQS1aXS8udGVzdChyYXdOYW1lKVxyXG4gICAgICAgICAgICAgICAgPyAvLyBmb3IgY29tcG9uZW50IGFuZCB2bm9kZSBsaWZlY3ljbGUgZXZlbnQgbGlzdGVuZXJzLCBhdXRvIGNvbnZlcnRcclxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB0byBjYW1lbENhc2UuIFNlZSBpc3N1ZSAjMjI0OVxyXG4gICAgICAgICAgICAgICAgICAgIHRvSGFuZGxlcktleShjYW1lbGl6ZSQxKHJhd05hbWUpKVxyXG4gICAgICAgICAgICAgICAgLy8gcHJlc2VydmUgY2FzZSBmb3IgcGxhaW4gZWxlbWVudCBsaXN0ZW5lcnMgdGhhdCBoYXZlIHVwcGVyY2FzZVxyXG4gICAgICAgICAgICAgICAgLy8gbGV0dGVycywgYXMgdGhlc2UgbWF5IGJlIGN1c3RvbSBlbGVtZW50cycgY3VzdG9tIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgOiBgb246JHtyYXdOYW1lfWA7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oZXZlbnRTdHJpbmcsIHRydWUsIGFyZy5sb2MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gIzIzODhcclxuICAgICAgICAgICAgZXZlbnROYW1lID0gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtcclxuICAgICAgICAgICAgICAgIGAke2NvbnRleHQuaGVscGVyU3RyaW5nKFRPX0hBTkRMRVJfS0VZKX0oYCxcclxuICAgICAgICAgICAgICAgIGFyZyxcclxuICAgICAgICAgICAgICAgIGApYFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBhbHJlYWR5IGEgY29tcG91bmQgZXhwcmVzc2lvbi5cclxuICAgICAgICBldmVudE5hbWUgPSBhcmc7XHJcbiAgICAgICAgZXZlbnROYW1lLmNoaWxkcmVuLnVuc2hpZnQoYCR7Y29udGV4dC5oZWxwZXJTdHJpbmcoVE9fSEFORExFUl9LRVkpfShgKTtcclxuICAgICAgICBldmVudE5hbWUuY2hpbGRyZW4ucHVzaChgKWApO1xyXG4gICAgfVxyXG4gICAgLy8gaGFuZGxlciBwcm9jZXNzaW5nXHJcbiAgICBsZXQgZXhwID0gZGlyLmV4cDtcclxuICAgIGlmIChleHAgJiYgIWV4cC5jb250ZW50LnRyaW0oKSkge1xyXG4gICAgICAgIGV4cCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGxldCBzaG91bGRDYWNoZSA9IGNvbnRleHQuY2FjaGVIYW5kbGVycyAmJiAhZXhwICYmICFjb250ZXh0LmluVk9uY2U7XHJcbiAgICBpZiAoZXhwKSB7XHJcbiAgICAgICAgY29uc3QgaXNNZW1iZXJFeHAgPSBpc01lbWJlckV4cHJlc3Npb24oZXhwLmNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGlzSW5saW5lU3RhdGVtZW50ID0gIShpc01lbWJlckV4cCB8fCBmbkV4cFJFLnRlc3QoZXhwLmNvbnRlbnQpKTtcclxuICAgICAgICBjb25zdCBoYXNNdWx0aXBsZVN0YXRlbWVudHMgPSBleHAuY29udGVudC5pbmNsdWRlcyhgO2ApO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdHJ1ZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUJyb3dzZXJFeHByZXNzaW9uKGV4cCwgY29udGV4dCwgZmFsc2UsIGhhc011bHRpcGxlU3RhdGVtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0lubGluZVN0YXRlbWVudCB8fCAoc2hvdWxkQ2FjaGUgJiYgaXNNZW1iZXJFeHApKSB7XHJcbiAgICAgICAgICAgIC8vIHdyYXAgaW5saW5lIHN0YXRlbWVudCBpbiBhIGZ1bmN0aW9uIGV4cHJlc3Npb25cclxuICAgICAgICAgICAgZXhwID0gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtcclxuICAgICAgICAgICAgICAgIGAke2lzSW5saW5lU3RhdGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgPyBgJGV2ZW50YFxyXG4gICAgICAgICAgICAgICAgICAgIDogYCR7YGB9KC4uLmFyZ3MpYH0gPT4gJHtoYXNNdWx0aXBsZVN0YXRlbWVudHMgPyBge2AgOiBgKGB9YCxcclxuICAgICAgICAgICAgICAgIGV4cCxcclxuICAgICAgICAgICAgICAgIGhhc011bHRpcGxlU3RhdGVtZW50cyA/IGB9YCA6IGApYFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmV0ID0ge1xyXG4gICAgICAgIHByb3BzOiBbXHJcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KGV2ZW50TmFtZSwgZXhwIHx8IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYCgpID0+IHt9YCwgZmFsc2UsIGxvYykpXHJcbiAgICAgICAgXVxyXG4gICAgfTtcclxuICAgIC8vIGFwcGx5IGV4dGVuZGVkIGNvbXBpbGVyIGF1Z21lbnRvclxyXG4gICAgaWYgKGF1Z21lbnRvcikge1xyXG4gICAgICAgIHJldCA9IGF1Z21lbnRvcihyZXQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNob3VsZENhY2hlKSB7XHJcbiAgICAgICAgLy8gY2FjaGUgaGFuZGxlcnMgc28gdGhhdCBpdCdzIGFsd2F5cyB0aGUgc2FtZSBoYW5kbGVyIGJlaW5nIHBhc3NlZCBkb3duLlxyXG4gICAgICAgIC8vIHRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMgd2hlbiB1c2VycyB1c2UgaW5saW5lIGhhbmRsZXJzIG9uXHJcbiAgICAgICAgLy8gY29tcG9uZW50cy5cclxuICAgICAgICByZXQucHJvcHNbMF0udmFsdWUgPSBjb250ZXh0LmNhY2hlKHJldC5wcm9wc1swXS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBtYXJrIHRoZSBrZXkgYXMgaGFuZGxlciBmb3IgcHJvcHMgbm9ybWFsaXphdGlvbiBjaGVja1xyXG4gICAgcmV0LnByb3BzLmZvckVhY2gocCA9PiAocC5rZXkuaXNIYW5kbGVyS2V5ID0gdHJ1ZSkpO1xyXG4gICAgcmV0dXJuIHJldDtcclxufTtcblxuLy8gdi1iaW5kIHdpdGhvdXQgYXJnIGlzIGhhbmRsZWQgZGlyZWN0bHkgaW4gLi90cmFuc2Zvcm1FbGVtZW50cy50cyBkdWUgdG8gaXQgYWZmZWN0aW5nXHJcbi8vIGNvZGVnZW4gZm9yIHRoZSBlbnRpcmUgcHJvcHMgb2JqZWN0LiBUaGlzIHRyYW5zZm9ybSBoZXJlIGlzIG9ubHkgZm9yIHYtYmluZFxyXG4vLyAqd2l0aCogYXJncy5cclxuY29uc3QgdHJhbnNmb3JtQmluZCA9IChkaXIsIF9ub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBjb25zdCB7IGV4cCwgbW9kaWZpZXJzLCBsb2MgfSA9IGRpcjtcclxuICAgIGNvbnN0IGFyZyA9IGRpci5hcmc7XHJcbiAgICBpZiAoYXJnLnR5cGUgIT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovKSB7XHJcbiAgICAgICAgYXJnLmNoaWxkcmVuLnVuc2hpZnQoYChgKTtcclxuICAgICAgICBhcmcuY2hpbGRyZW4ucHVzaChgKSB8fCBcIlwiYCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghYXJnLmlzU3RhdGljKSB7XHJcbiAgICAgICAgYXJnLmNvbnRlbnQgPSBgJHthcmcuY29udGVudH0gfHwgXCJcImA7XHJcbiAgICB9XHJcbiAgICAvLyAuc3luYyBpcyByZXBsYWNlZCBieSB2LW1vZGVsOmFyZ1xyXG4gICAgaWYgKG1vZGlmaWVycy5pbmNsdWRlcygnY2FtZWwnKSkge1xyXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgaWYgKGFyZy5pc1N0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgYXJnLmNvbnRlbnQgPSBjYW1lbGl6ZSQxKGFyZy5jb250ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZy5jb250ZW50ID0gYCR7Y29udGV4dC5oZWxwZXJTdHJpbmcoQ0FNRUxJWkUpfSgke2FyZy5jb250ZW50fSlgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhcmcuY2hpbGRyZW4udW5zaGlmdChgJHtjb250ZXh0LmhlbHBlclN0cmluZyhDQU1FTElaRSl9KGApO1xyXG4gICAgICAgICAgICBhcmcuY2hpbGRyZW4ucHVzaChgKWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghY29udGV4dC5pblNTUikge1xyXG4gICAgICAgIGlmIChtb2RpZmllcnMuaW5jbHVkZXMoJ3Byb3AnKSkge1xyXG4gICAgICAgICAgICBpbmplY3RQcmVmaXgoYXJnLCAnLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9kaWZpZXJzLmluY2x1ZGVzKCdhdHRyJykpIHtcclxuICAgICAgICAgICAgaW5qZWN0UHJlZml4KGFyZywgJ14nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWV4cCB8fFxyXG4gICAgICAgIChleHAudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8gJiYgIWV4cC5jb250ZW50LnRyaW0oKSkpIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlQ29tcGlsZXJFcnJvcigzNCAvKiBFcnJvckNvZGVzLlhfVl9CSU5EX05PX0VYUFJFU1NJT04gKi8sIGxvYykpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3BzOiBbY3JlYXRlT2JqZWN0UHJvcGVydHkoYXJnLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKCcnLCB0cnVlLCBsb2MpKV1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9wczogW2NyZWF0ZU9iamVjdFByb3BlcnR5KGFyZywgZXhwKV1cclxuICAgIH07XHJcbn07XHJcbmNvbnN0IGluamVjdFByZWZpeCA9IChhcmcsIHByZWZpeCkgPT4ge1xyXG4gICAgaWYgKGFyZy50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgIGlmIChhcmcuaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgYXJnLmNvbnRlbnQgPSBwcmVmaXggKyBhcmcuY29udGVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFyZy5jb250ZW50ID0gYFxcYCR7cHJlZml4fVxcJHske2FyZy5jb250ZW50fX1cXGBgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFyZy5jaGlsZHJlbi51bnNoaWZ0KGAnJHtwcmVmaXh9JyArIChgKTtcclxuICAgICAgICBhcmcuY2hpbGRyZW4ucHVzaChgKWApO1xyXG4gICAgfVxyXG59O1xuXG4vLyBNZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzIGFuZCBleHByZXNzaW9ucyBpbnRvIGEgc2luZ2xlIGV4cHJlc3Npb25cclxuLy8gZS5nLiA8ZGl2PmFiYyB7eyBkIH19IHt7IGUgfX08L2Rpdj4gc2hvdWxkIGhhdmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBub2RlIGFzIGNoaWxkLlxyXG5jb25zdCB0cmFuc2Zvcm1UZXh0ID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDAgLyogTm9kZVR5cGVzLlJPT1QgKi8gfHxcclxuICAgICAgICBub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gfHxcclxuICAgICAgICBub2RlLnR5cGUgPT09IDExIC8qIE5vZGVUeXBlcy5GT1IgKi8gfHxcclxuICAgICAgICBub2RlLnR5cGUgPT09IDEwIC8qIE5vZGVUeXBlcy5JRl9CUkFOQ0ggKi8pIHtcclxuICAgICAgICAvLyBwZXJmb3JtIHRoZSB0cmFuc2Zvcm0gb24gbm9kZSBleGl0IHNvIHRoYXQgYWxsIGV4cHJlc3Npb25zIGhhdmUgYWxyZWFkeVxyXG4gICAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkLlxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGxldCBoYXNUZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0KGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc1RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dChuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGNoaWxkcmVuW2ldID0gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtjaGlsZF0sIGNoaWxkLmxvYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGUgaW50byBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyLmNoaWxkcmVuLnB1c2goYCArIGAsIG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgai0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaGFzVGV4dCB8fFxyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgd2l0aCBhIHNpbmdsZSB0ZXh0IGNoaWxkLCBsZWF2ZSBpdFxyXG4gICAgICAgICAgICAgICAgLy8gYXMtaXMgc2luY2UgdGhlIHJ1bnRpbWUgaGFzIGRlZGljYXRlZCBmYXN0IHBhdGggZm9yIHRoaXMgYnkgZGlyZWN0bHlcclxuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdGV4dENvbnRlbnQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAvLyBmb3IgY29tcG9uZW50IHJvb3QgaXQncyBhbHdheXMgbm9ybWFsaXplZCBhbnl3YXkuXHJcbiAgICAgICAgICAgICAgICAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gMCAvKiBOb2RlVHlwZXMuUk9PVCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDAgLyogRWxlbWVudFR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICMzNzU2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b20gZGlyZWN0aXZlcyBjYW4gcG90ZW50aWFsbHkgYWRkIERPTSBlbGVtZW50cyBhcmJpdHJhcmlseSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYXZvaWQgc2V0dGluZyB0ZXh0Q29udGVudCBvZiB0aGUgZWxlbWVudCBhdCBydW50aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgdGhlIERPTSBlbGVtZW50cyBhZGRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgdGhlIHVzZXIgdGhyb3VnaCBjdXN0b20gZGlyZWN0aXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFub2RlLnByb3BzLmZpbmQocCA9PiBwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjb250ZXh0LmRpcmVjdGl2ZVRyYW5zZm9ybXNbcC5uYW1lXSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNvbXBhdCBtb2RlLCA8dGVtcGxhdGU+IHRhZ3Mgd2l0aCBubyBzcGVjaWFsIGRpcmVjdGl2ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgcmVuZGVyZWQgYXMgYSBmcmFnbWVudCBzbyBpdHMgY2hpbGRyZW4gbXVzdCBiZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydGVkIGludG8gdm5vZGVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShub2RlLnRhZyA9PT0gJ3RlbXBsYXRlJykpKSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBwcmUtY29udmVydCB0ZXh0IG5vZGVzIGludG8gY3JlYXRlVGV4dFZOb2RlKHRleHQpIGNhbGxzIHRvIGF2b2lkXHJcbiAgICAgICAgICAgIC8vIHJ1bnRpbWUgbm9ybWFsaXphdGlvbi5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1RleHQoY2hpbGQpIHx8IGNoaWxkLnR5cGUgPT09IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsQXJncyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZVRleHRWTm9kZSBkZWZhdWx0cyB0byBzaW5nbGUgd2hpdGVzcGFjZSwgc28gaWYgaXQgaXMgYVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBzcGFjZSB0aGUgY29kZSBjb3VsZCBiZSBhbiBlbXB0eSBjYWxsIHRvIHNhdmUgYnl0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgIT09IDIgLyogTm9kZVR5cGVzLlRFWFQgKi8gfHwgY2hpbGQuY29udGVudCAhPT0gJyAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxBcmdzLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGR5bmFtaWMgdGV4dCB3aXRoIGZsYWcgc28gaXQgZ2V0cyBwYXRjaGVkIGluc2lkZSBhIGJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnNzciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25zdGFudFR5cGUoY2hpbGQsIGNvbnRleHQpID09PSAwIC8qIENvbnN0YW50VHlwZXMuTk9UX0NPTlNUQU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxBcmdzLnB1c2goMSAvKiBQYXRjaEZsYWdzLlRFWFQgKi8gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGAgLyogJHtQYXRjaEZsYWdOYW1lc1sxIC8qIFBhdGNoRmxhZ3MuVEVYVCAqL119ICovYCA6IGBgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxMiAvKiBOb2RlVHlwZXMuVEVYVF9DQUxMICovLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjaGlsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBjaGlsZC5sb2MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVnZW5Ob2RlOiBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihDUkVBVEVfVEVYVCksIGNhbGxBcmdzKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59O1xuXG5jb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcclxuY29uc3QgdHJhbnNmb3JtT25jZSA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovICYmIGZpbmREaXIobm9kZSwgJ29uY2UnLCB0cnVlKSkge1xyXG4gICAgICAgIGlmIChzZWVuLmhhcyhub2RlKSB8fCBjb250ZXh0LmluVk9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWVuLmFkZChub2RlKTtcclxuICAgICAgICBjb250ZXh0LmluVk9uY2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRleHQuaGVscGVyKFNFVF9CTE9DS19UUkFDS0lORyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dC5pblZPbmNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1ciA9IGNvbnRleHQuY3VycmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChjdXIuY29kZWdlbk5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGN1ci5jb2RlZ2VuTm9kZSA9IGNvbnRleHQuY2FjaGUoY3VyLmNvZGVnZW5Ob2RlLCB0cnVlIC8qIGlzVk5vZGUgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTtcblxuY29uc3QgdHJhbnNmb3JtTW9kZWwgPSAoZGlyLCBub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBjb25zdCB7IGV4cCwgYXJnIH0gPSBkaXI7XHJcbiAgICBpZiAoIWV4cCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQxIC8qIEVycm9yQ29kZXMuWF9WX01PREVMX05PX0VYUFJFU1NJT04gKi8sIGRpci5sb2MpKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRlVHJhbnNmb3JtUHJvcHMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJhd0V4cCA9IGV4cC5sb2Muc291cmNlO1xyXG4gICAgY29uc3QgZXhwU3RyaW5nID0gZXhwLnR5cGUgPT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovID8gZXhwLmNvbnRlbnQgOiByYXdFeHA7XHJcbiAgICAvLyBpbSBTRkMgPHNjcmlwdCBzZXR1cD4gaW5saW5lIG1vZGUsIHRoZSBleHAgbWF5IGhhdmUgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvXHJcbiAgICAvLyBfdW5yZWYoZXhwKVxyXG4gICAgY29udGV4dC5iaW5kaW5nTWV0YWRhdGFbcmF3RXhwXTtcclxuICAgIGNvbnN0IG1heWJlUmVmID0gIXRydWUgICAgLyogQmluZGluZ1R5cGVzLlNFVFVQX0NPTlNUICovO1xyXG4gICAgaWYgKCFleHBTdHJpbmcudHJpbSgpIHx8XHJcbiAgICAgICAgKCFpc01lbWJlckV4cHJlc3Npb24oZXhwU3RyaW5nKSAmJiAhbWF5YmVSZWYpKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDIgLyogRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfTUFMRk9STUVEX0VYUFJFU1NJT04gKi8sIGV4cC5sb2MpKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRlVHJhbnNmb3JtUHJvcHMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByb3BOYW1lID0gYXJnID8gYXJnIDogY3JlYXRlU2ltcGxlRXhwcmVzc2lvbignbW9kZWxWYWx1ZScsIHRydWUpO1xyXG4gICAgY29uc3QgZXZlbnROYW1lID0gYXJnXHJcbiAgICAgICAgPyBpc1N0YXRpY0V4cChhcmcpXHJcbiAgICAgICAgICAgID8gYG9uVXBkYXRlOiR7YXJnLmNvbnRlbnR9YFxyXG4gICAgICAgICAgICA6IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbJ1wib25VcGRhdGU6XCIgKyAnLCBhcmddKVxyXG4gICAgICAgIDogYG9uVXBkYXRlOm1vZGVsVmFsdWVgO1xyXG4gICAgbGV0IGFzc2lnbm1lbnRFeHA7XHJcbiAgICBjb25zdCBldmVudEFyZyA9IGNvbnRleHQuaXNUUyA/IGAoJGV2ZW50OiBhbnkpYCA6IGAkZXZlbnRgO1xyXG4gICAge1xyXG4gICAgICAgIGFzc2lnbm1lbnRFeHAgPSBjcmVhdGVDb21wb3VuZEV4cHJlc3Npb24oW1xyXG4gICAgICAgICAgICBgJHtldmVudEFyZ30gPT4gKChgLFxyXG4gICAgICAgICAgICBleHAsXHJcbiAgICAgICAgICAgIGApID0gJGV2ZW50KWBcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByb3BzID0gW1xyXG4gICAgICAgIC8vIG1vZGVsVmFsdWU6IGZvb1xyXG4gICAgICAgIGNyZWF0ZU9iamVjdFByb3BlcnR5KHByb3BOYW1lLCBkaXIuZXhwKSxcclxuICAgICAgICAvLyBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogJGV2ZW50ID0+IChmb28gPSAkZXZlbnQpXHJcbiAgICAgICAgY3JlYXRlT2JqZWN0UHJvcGVydHkoZXZlbnROYW1lLCBhc3NpZ25tZW50RXhwKVxyXG4gICAgXTtcclxuICAgIC8vIG1vZGVsTW9kaWZpZXJzOiB7IGZvbzogdHJ1ZSwgXCJiYXItYmF6XCI6IHRydWUgfVxyXG4gICAgaWYgKGRpci5tb2RpZmllcnMubGVuZ3RoICYmIG5vZGUudGFnVHlwZSA9PT0gMSAvKiBFbGVtZW50VHlwZXMuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgY29uc3QgbW9kaWZpZXJzID0gZGlyLm1vZGlmaWVyc1xyXG4gICAgICAgICAgICAubWFwKG0gPT4gKGlzU2ltcGxlSWRlbnRpZmllcihtKSA/IG0gOiBKU09OLnN0cmluZ2lmeShtKSkgKyBgOiB0cnVlYClcclxuICAgICAgICAgICAgLmpvaW4oYCwgYCk7XHJcbiAgICAgICAgY29uc3QgbW9kaWZpZXJzS2V5ID0gYXJnXHJcbiAgICAgICAgICAgID8gaXNTdGF0aWNFeHAoYXJnKVxyXG4gICAgICAgICAgICAgICAgPyBgJHthcmcuY29udGVudH1Nb2RpZmllcnNgXHJcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbYXJnLCAnICsgXCJNb2RpZmllcnNcIiddKVxyXG4gICAgICAgICAgICA6IGBtb2RlbE1vZGlmaWVyc2A7XHJcbiAgICAgICAgcHJvcHMucHVzaChjcmVhdGVPYmplY3RQcm9wZXJ0eShtb2RpZmllcnNLZXksIGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYHsgJHttb2RpZmllcnN9IH1gLCBmYWxzZSwgZGlyLmxvYywgMiAvKiBDb25zdGFudFR5cGVzLkNBTl9IT0lTVCAqLykpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVUcmFuc2Zvcm1Qcm9wcyhwcm9wcyk7XHJcbn07XHJcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zZm9ybVByb3BzKHByb3BzID0gW10pIHtcclxuICAgIHJldHVybiB7IHByb3BzIH07XHJcbn1cblxuY29uc3QgdmFsaWREaXZpc2lvbkNoYXJSRSA9IC9bXFx3KS4rXFwtXyRcXF1dLztcclxuY29uc3QgdHJhbnNmb3JtRmlsdGVyID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmICghaXNDb21wYXRFbmFibGVkKFwiQ09NUElMRVJfRklMVEVSXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX0ZJTFRFUlMgKi8sIGNvbnRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLykge1xyXG4gICAgICAgIC8vIGZpbHRlciByZXdyaXRlIGlzIGFwcGxpZWQgYmVmb3JlIGV4cHJlc3Npb24gdHJhbnNmb3JtIHNvIG9ubHlcclxuICAgICAgICAvLyBzaW1wbGUgZXhwcmVzc2lvbnMgYXJlIHBvc3NpYmxlIGF0IHRoaXMgc3RhZ2VcclxuICAgICAgICByZXdyaXRlRmlsdGVyKG5vZGUuY29udGVudCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgbm9kZS5wcm9wcy5mb3JFYWNoKChwcm9wKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcC5uYW1lICE9PSAnZm9yJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcC5leHApIHtcclxuICAgICAgICAgICAgICAgIHJld3JpdGVGaWx0ZXIocHJvcC5leHAsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHJld3JpdGVGaWx0ZXIobm9kZSwgY29udGV4dCkge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gNCAvKiBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICBwYXJzZUZpbHRlcihub2RlLCBjb250ZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLykge1xyXG4gICAgICAgICAgICAgICAgcGFyc2VGaWx0ZXIoY2hpbGQsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnR5cGUgPT09IDggLyogTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT04gKi8pIHtcclxuICAgICAgICAgICAgICAgIHJld3JpdGVGaWx0ZXIobm9kZSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQudHlwZSA9PT0gNSAvKiBOb2RlVHlwZXMuSU5URVJQT0xBVElPTiAqLykge1xyXG4gICAgICAgICAgICAgICAgcmV3cml0ZUZpbHRlcihjaGlsZC5jb250ZW50LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwYXJzZUZpbHRlcihub2RlLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCBleHAgPSBub2RlLmNvbnRlbnQ7XHJcbiAgICBsZXQgaW5TaW5nbGUgPSBmYWxzZTtcclxuICAgIGxldCBpbkRvdWJsZSA9IGZhbHNlO1xyXG4gICAgbGV0IGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTtcclxuICAgIGxldCBpblJlZ2V4ID0gZmFsc2U7XHJcbiAgICBsZXQgY3VybHkgPSAwO1xyXG4gICAgbGV0IHNxdWFyZSA9IDA7XHJcbiAgICBsZXQgcGFyZW4gPSAwO1xyXG4gICAgbGV0IGxhc3RGaWx0ZXJJbmRleCA9IDA7XHJcbiAgICBsZXQgYywgcHJldiwgaSwgZXhwcmVzc2lvbiwgZmlsdGVycyA9IFtdO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoaW5TaW5nbGUpIHtcclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1YylcclxuICAgICAgICAgICAgICAgIGluU2luZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluRG91YmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NWMpXHJcbiAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluUmVnZXgpIHtcclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1YylcclxuICAgICAgICAgICAgICAgIGluUmVnZXggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gMHg3YyAmJiAvLyBwaXBlXHJcbiAgICAgICAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3YyAmJlxyXG4gICAgICAgICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N2MgJiZcclxuICAgICAgICAgICAgIWN1cmx5ICYmXHJcbiAgICAgICAgICAgICFzcXVhcmUgJiZcclxuICAgICAgICAgICAgIXBhcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cclxuICAgICAgICAgICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwdXNoRmlsdGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAweDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIGluRG91YmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXCJcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyNzpcclxuICAgICAgICAgICAgICAgICAgICBpblNpbmdsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vICdcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg2MDpcclxuICAgICAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gYFxyXG4gICAgICAgICAgICAgICAgY2FzZSAweDI4OlxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVuKys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIChcclxuICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbi0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyApXHJcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWI6XHJcbiAgICAgICAgICAgICAgICAgICAgc3F1YXJlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFtcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg1ZDpcclxuICAgICAgICAgICAgICAgICAgICBzcXVhcmUtLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXVxyXG4gICAgICAgICAgICAgICAgY2FzZSAweDdiOlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cmx5Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMHg3ZDpcclxuICAgICAgICAgICAgICAgICAgICBjdXJseS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYpIHtcclxuICAgICAgICAgICAgICAgIC8vIC9cclxuICAgICAgICAgICAgICAgIGxldCBqID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgcDtcclxuICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocCAhPT0gJyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcCB8fCAhdmFsaWREaXZpc2lvbkNoYXJSRS50ZXN0KHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5SZWdleCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYXN0RmlsdGVySW5kZXggIT09IDApIHtcclxuICAgICAgICBwdXNoRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBwdXNoRmlsdGVyKCkge1xyXG4gICAgICAgIGZpbHRlcnMucHVzaChleHAuc2xpY2UobGFzdEZpbHRlckluZGV4LCBpKS50cmltKCkpO1xyXG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIHdhcm5EZXByZWNhdGlvbihcIkNPTVBJTEVSX0ZJTFRFUlwiIC8qIENvbXBpbGVyRGVwcmVjYXRpb25UeXBlcy5DT01QSUxFUl9GSUxURVJTICovLCBjb250ZXh0LCBub2RlLmxvYyk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHdyYXBGaWx0ZXIoZXhwcmVzc2lvbiwgZmlsdGVyc1tpXSwgY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuY29udGVudCA9IGV4cHJlc3Npb247XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gd3JhcEZpbHRlcihleHAsIGZpbHRlciwgY29udGV4dCkge1xyXG4gICAgY29udGV4dC5oZWxwZXIoUkVTT0xWRV9GSUxURVIpO1xyXG4gICAgY29uc3QgaSA9IGZpbHRlci5pbmRleE9mKCcoJyk7XHJcbiAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBjb250ZXh0LmZpbHRlcnMuYWRkKGZpbHRlcik7XHJcbiAgICAgICAgcmV0dXJuIGAke3RvVmFsaWRBc3NldElkKGZpbHRlciwgJ2ZpbHRlcicpfSgke2V4cH0pYDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWx0ZXIuc2xpY2UoMCwgaSk7XHJcbiAgICAgICAgY29uc3QgYXJncyA9IGZpbHRlci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgY29udGV4dC5maWx0ZXJzLmFkZChuYW1lKTtcclxuICAgICAgICByZXR1cm4gYCR7dG9WYWxpZEFzc2V0SWQobmFtZSwgJ2ZpbHRlcicpfSgke2V4cH0ke2FyZ3MgIT09ICcpJyA/ICcsJyArIGFyZ3MgOiBhcmdzfWA7XHJcbiAgICB9XHJcbn1cblxuY29uc3Qgc2VlbiQxID0gbmV3IFdlYWtTZXQoKTtcclxuY29uc3QgdHJhbnNmb3JtTWVtbyA9IChub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgY29uc3QgZGlyID0gZmluZERpcihub2RlLCAnbWVtbycpO1xyXG4gICAgICAgIGlmICghZGlyIHx8IHNlZW4kMS5oYXMobm9kZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWVuJDEuYWRkKG5vZGUpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVnZW5Ob2RlID0gbm9kZS5jb2RlZ2VuTm9kZSB8fFxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50Tm9kZS5jb2RlZ2VuTm9kZTtcclxuICAgICAgICAgICAgaWYgKGNvZGVnZW5Ob2RlICYmIGNvZGVnZW5Ob2RlLnR5cGUgPT09IDEzIC8qIE5vZGVUeXBlcy5WTk9ERV9DQUxMICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBub24tY29tcG9uZW50IHN1YiB0cmVlIHNob3VsZCBiZSB0dXJuZWQgaW50byBhIGJsb2NrXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS50YWdUeXBlICE9PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBtYWtlQmxvY2soY29kZWdlbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9kZS5jb2RlZ2VuTm9kZSA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKFdJVEhfTUVNTyksIFtcclxuICAgICAgICAgICAgICAgICAgICBkaXIuZXhwLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbih1bmRlZmluZWQsIGNvZGVnZW5Ob2RlKSxcclxuICAgICAgICAgICAgICAgICAgICBgX2NhY2hlYCxcclxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcoY29udGV4dC5jYWNoZWQrKylcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTtcblxuZnVuY3Rpb24gZ2V0QmFzZVRyYW5zZm9ybVByZXNldChwcmVmaXhJZGVudGlmaWVycykge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybU9uY2UsXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybUlmLFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1NZW1vLFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1Gb3IsXHJcbiAgICAgICAgICAgIC4uLihbdHJhbnNmb3JtRmlsdGVyXSApLFxyXG4gICAgICAgICAgICAuLi4oKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbdHJhbnNmb3JtRXhwcmVzc2lvbl1cclxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICAgICAgdHJhbnNmb3JtU2xvdE91dGxldCxcclxuICAgICAgICAgICAgdHJhbnNmb3JtRWxlbWVudCxcclxuICAgICAgICAgICAgdHJhY2tTbG90U2NvcGVzLFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1UZXh0XHJcbiAgICAgICAgXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9uOiB0cmFuc2Zvcm1PbixcclxuICAgICAgICAgICAgYmluZDogdHJhbnNmb3JtQmluZCxcclxuICAgICAgICAgICAgbW9kZWw6IHRyYW5zZm9ybU1vZGVsXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxufVxyXG4vLyB3ZSBuYW1lIGl0IGBiYXNlQ29tcGlsZWAgc28gdGhhdCBoaWdoZXIgb3JkZXIgY29tcGlsZXJzIGxpa2VcclxuLy8gQHZ1ZS9jb21waWxlci1kb20gY2FuIGV4cG9ydCBgY29tcGlsZWAgd2hpbGUgcmUtZXhwb3J0aW5nIGV2ZXJ5dGhpbmcgZWxzZS5cclxuZnVuY3Rpb24gYmFzZUNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgY29uc3Qgb25FcnJvciA9IG9wdGlvbnMub25FcnJvciB8fCBkZWZhdWx0T25FcnJvcjtcclxuICAgIGNvbnN0IGlzTW9kdWxlTW9kZSA9IG9wdGlvbnMubW9kZSA9PT0gJ21vZHVsZSc7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5wcmVmaXhJZGVudGlmaWVycyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBvbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDYgLyogRXJyb3JDb2Rlcy5YX1BSRUZJWF9JRF9OT1RfU1VQUE9SVEVEICovKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTW9kdWxlTW9kZSkge1xyXG4gICAgICAgICAgICBvbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDcgLyogRXJyb3JDb2Rlcy5YX01PRFVMRV9NT0RFX05PVF9TVVBQT1JURUQgKi8pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXhJZGVudGlmaWVycyA9ICF0cnVlIDtcclxuICAgIGlmIChvcHRpb25zLmNhY2hlSGFuZGxlcnMpIHtcclxuICAgICAgICBvbkVycm9yKGNyZWF0ZUNvbXBpbGVyRXJyb3IoNDggLyogRXJyb3JDb2Rlcy5YX0NBQ0hFX0hBTkRMRVJfTk9UX1NVUFBPUlRFRCAqLykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuc2NvcGVJZCAmJiAhaXNNb2R1bGVNb2RlKSB7XHJcbiAgICAgICAgb25FcnJvcihjcmVhdGVDb21waWxlckVycm9yKDQ5IC8qIEVycm9yQ29kZXMuWF9TQ09QRV9JRF9OT1RfU1VQUE9SVEVEICovKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhc3QgPSBpc1N0cmluZyh0ZW1wbGF0ZSkgPyBiYXNlUGFyc2UodGVtcGxhdGUsIG9wdGlvbnMpIDogdGVtcGxhdGU7XHJcbiAgICBjb25zdCBbbm9kZVRyYW5zZm9ybXMsIGRpcmVjdGl2ZVRyYW5zZm9ybXNdID0gZ2V0QmFzZVRyYW5zZm9ybVByZXNldCgpO1xyXG4gICAgdHJhbnNmb3JtKGFzdCwgZXh0ZW5kKHt9LCBvcHRpb25zLCB7XHJcbiAgICAgICAgcHJlZml4SWRlbnRpZmllcnMsXHJcbiAgICAgICAgbm9kZVRyYW5zZm9ybXM6IFtcclxuICAgICAgICAgICAgLi4ubm9kZVRyYW5zZm9ybXMsXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLm5vZGVUcmFuc2Zvcm1zIHx8IFtdKSAvLyB1c2VyIHRyYW5zZm9ybXNcclxuICAgICAgICBdLFxyXG4gICAgICAgIGRpcmVjdGl2ZVRyYW5zZm9ybXM6IGV4dGVuZCh7fSwgZGlyZWN0aXZlVHJhbnNmb3Jtcywgb3B0aW9ucy5kaXJlY3RpdmVUcmFuc2Zvcm1zIHx8IHt9IC8vIHVzZXIgdHJhbnNmb3Jtc1xyXG4gICAgICAgIClcclxuICAgIH0pKTtcclxuICAgIHJldHVybiBnZW5lcmF0ZShhc3QsIGV4dGVuZCh7fSwgb3B0aW9ucywge1xyXG4gICAgICAgIHByZWZpeElkZW50aWZpZXJzXHJcbiAgICB9KSk7XHJcbn1cblxuY29uc3Qgbm9vcERpcmVjdGl2ZVRyYW5zZm9ybSA9ICgpID0+ICh7IHByb3BzOiBbXSB9KTtcblxuZXhwb3J0IHsgQkFTRV9UUkFOU0lUSU9OLCBDQU1FTElaRSwgQ0FQSVRBTElaRSwgQ1JFQVRFX0JMT0NLLCBDUkVBVEVfQ09NTUVOVCwgQ1JFQVRFX0VMRU1FTlRfQkxPQ0ssIENSRUFURV9FTEVNRU5UX1ZOT0RFLCBDUkVBVEVfU0xPVFMsIENSRUFURV9TVEFUSUMsIENSRUFURV9URVhULCBDUkVBVEVfVk5PREUsIEZSQUdNRU5ULCBHVUFSRF9SRUFDVElWRV9QUk9QUywgSVNfTUVNT19TQU1FLCBJU19SRUYsIEtFRVBfQUxJVkUsIE1FUkdFX1BST1BTLCBOT1JNQUxJWkVfQ0xBU1MsIE5PUk1BTElaRV9QUk9QUywgTk9STUFMSVpFX1NUWUxFLCBPUEVOX0JMT0NLLCBQT1BfU0NPUEVfSUQsIFBVU0hfU0NPUEVfSUQsIFJFTkRFUl9MSVNULCBSRU5ERVJfU0xPVCwgUkVTT0xWRV9DT01QT05FTlQsIFJFU09MVkVfRElSRUNUSVZFLCBSRVNPTFZFX0RZTkFNSUNfQ09NUE9ORU5ULCBSRVNPTFZFX0ZJTFRFUiwgU0VUX0JMT0NLX1RSQUNLSU5HLCBTVVNQRU5TRSwgVEVMRVBPUlQsIFRPX0RJU1BMQVlfU1RSSU5HLCBUT19IQU5ETEVSUywgVE9fSEFORExFUl9LRVksIFVOUkVGLCBXSVRIX0NUWCwgV0lUSF9ESVJFQ1RJVkVTLCBXSVRIX01FTU8sIGFkdmFuY2VQb3NpdGlvbldpdGhDbG9uZSwgYWR2YW5jZVBvc2l0aW9uV2l0aE11dGF0aW9uLCBhc3NlcnQsIGJhc2VDb21waWxlLCBiYXNlUGFyc2UsIGJ1aWxkRGlyZWN0aXZlQXJncywgYnVpbGRQcm9wcywgYnVpbGRTbG90cywgY2hlY2tDb21wYXRFbmFibGVkLCBjcmVhdGVBcnJheUV4cHJlc3Npb24sIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uLCBjcmVhdGVCbG9ja1N0YXRlbWVudCwgY3JlYXRlQ2FjaGVFeHByZXNzaW9uLCBjcmVhdGVDYWxsRXhwcmVzc2lvbiwgY3JlYXRlQ29tcGlsZXJFcnJvciwgY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uLCBjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24sIGNyZWF0ZUZvckxvb3BQYXJhbXMsIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbiwgY3JlYXRlSWZTdGF0ZW1lbnQsIGNyZWF0ZUludGVycG9sYXRpb24sIGNyZWF0ZU9iamVjdEV4cHJlc3Npb24sIGNyZWF0ZU9iamVjdFByb3BlcnR5LCBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQsIGNyZWF0ZVJvb3QsIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbiwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbiwgY3JlYXRlU3RydWN0dXJhbERpcmVjdGl2ZVRyYW5zZm9ybSwgY3JlYXRlVGVtcGxhdGVMaXRlcmFsLCBjcmVhdGVUcmFuc2Zvcm1Db250ZXh0LCBjcmVhdGVWTm9kZUNhbGwsIGV4dHJhY3RJZGVudGlmaWVycywgZmluZERpciwgZmluZFByb3AsIGdlbmVyYXRlLCBnZXRCYXNlVHJhbnNmb3JtUHJlc2V0LCBnZXRDb25zdGFudFR5cGUsIGdldElubmVyUmFuZ2UsIGdldE1lbW9lZFZOb2RlQ2FsbCwgZ2V0Vk5vZGVCbG9ja0hlbHBlciwgZ2V0Vk5vZGVIZWxwZXIsIGhhc0R5bmFtaWNLZXlWQmluZCwgaGFzU2NvcGVSZWYsIGhlbHBlck5hbWVNYXAsIGluamVjdFByb3AsIGlzQnVpbHRJblR5cGUsIGlzQ29yZUNvbXBvbmVudCwgaXNGdW5jdGlvblR5cGUsIGlzSW5EZXN0cnVjdHVyZUFzc2lnbm1lbnQsIGlzTWVtYmVyRXhwcmVzc2lvbiwgaXNNZW1iZXJFeHByZXNzaW9uQnJvd3NlciwgaXNNZW1iZXJFeHByZXNzaW9uTm9kZSwgaXNSZWZlcmVuY2VkSWRlbnRpZmllciwgaXNTaW1wbGVJZGVudGlmaWVyLCBpc1Nsb3RPdXRsZXQsIGlzU3RhdGljQXJnT2YsIGlzU3RhdGljRXhwLCBpc1N0YXRpY1Byb3BlcnR5LCBpc1N0YXRpY1Byb3BlcnR5S2V5LCBpc1RlbXBsYXRlTm9kZSwgaXNUZXh0LCBpc1ZTbG90LCBsb2NTdHViLCBtYWtlQmxvY2ssIG5vb3BEaXJlY3RpdmVUcmFuc2Zvcm0sIHByb2Nlc3NFeHByZXNzaW9uLCBwcm9jZXNzRm9yLCBwcm9jZXNzSWYsIHByb2Nlc3NTbG90T3V0bGV0LCByZWdpc3RlclJ1bnRpbWVIZWxwZXJzLCByZXNvbHZlQ29tcG9uZW50VHlwZSwgdG9WYWxpZEFzc2V0SWQsIHRyYWNrU2xvdFNjb3BlcywgdHJhY2tWRm9yU2xvdFNjb3BlcywgdHJhbnNmb3JtLCB0cmFuc2Zvcm1CaW5kLCB0cmFuc2Zvcm1FbGVtZW50LCB0cmFuc2Zvcm1FeHByZXNzaW9uLCB0cmFuc2Zvcm1Nb2RlbCwgdHJhbnNmb3JtT24sIHRyYXZlcnNlTm9kZSwgd2Fsa0Jsb2NrRGVjbGFyYXRpb25zLCB3YWxrRnVuY3Rpb25QYXJhbXMsIHdhbGtJZGVudGlmaWVycywgd2FybkRlcHJlY2F0aW9uIH07XG4iLCJpbXBvcnQgeyByZWdpc3RlclJ1bnRpbWVIZWxwZXJzLCBpc0J1aWx0SW5UeXBlLCBjcmVhdGVTaW1wbGVFeHByZXNzaW9uLCBjcmVhdGVDb21waWxlckVycm9yLCBjcmVhdGVPYmplY3RQcm9wZXJ0eSwgZ2V0Q29uc3RhbnRUeXBlLCBjcmVhdGVDYWxsRXhwcmVzc2lvbiwgVE9fRElTUExBWV9TVFJJTkcsIHRyYW5zZm9ybU1vZGVsIGFzIHRyYW5zZm9ybU1vZGVsJDEsIGZpbmRQcm9wLCBoYXNEeW5hbWljS2V5VkJpbmQsIHRyYW5zZm9ybU9uIGFzIHRyYW5zZm9ybU9uJDEsIGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbiwgaXNTdGF0aWNFeHAsIGNoZWNrQ29tcGF0RW5hYmxlZCwgbm9vcERpcmVjdGl2ZVRyYW5zZm9ybSwgYmFzZUNvbXBpbGUsIGJhc2VQYXJzZSB9IGZyb20gJ0B2dWUvY29tcGlsZXItY29yZSc7XG5leHBvcnQgKiBmcm9tICdAdnVlL2NvbXBpbGVyLWNvcmUnO1xuaW1wb3J0IHsgaXNWb2lkVGFnLCBpc0hUTUxUYWcsIGlzU1ZHVGFnLCBtYWtlTWFwLCBwYXJzZVN0cmluZ1N0eWxlLCBjYXBpdGFsaXplLCBleHRlbmQgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IFZfTU9ERUxfUkFESU8gPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZNb2RlbFJhZGlvYCA6IGBgKTtcclxuY29uc3QgVl9NT0RFTF9DSEVDS0JPWCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdk1vZGVsQ2hlY2tib3hgIDogYGApO1xyXG5jb25zdCBWX01PREVMX1RFWFQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYHZNb2RlbFRleHRgIDogYGApO1xyXG5jb25zdCBWX01PREVMX1NFTEVDVCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdk1vZGVsU2VsZWN0YCA6IGBgKTtcclxuY29uc3QgVl9NT0RFTF9EWU5BTUlDID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB2TW9kZWxEeW5hbWljYCA6IGBgKTtcclxuY29uc3QgVl9PTl9XSVRIX01PRElGSUVSUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdk9uTW9kaWZpZXJzR3VhcmRgIDogYGApO1xyXG5jb25zdCBWX09OX1dJVEhfS0VZUyA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgdk9uS2V5c0d1YXJkYCA6IGBgKTtcclxuY29uc3QgVl9TSE9XID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGB2U2hvd2AgOiBgYCk7XHJcbmNvbnN0IFRSQU5TSVRJT04gPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gYFRyYW5zaXRpb25gIDogYGApO1xyXG5jb25zdCBUUkFOU0lUSU9OX0dST1VQID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IGBUcmFuc2l0aW9uR3JvdXBgIDogYGApO1xyXG5yZWdpc3RlclJ1bnRpbWVIZWxwZXJzKHtcclxuICAgIFtWX01PREVMX1JBRElPXTogYHZNb2RlbFJhZGlvYCxcclxuICAgIFtWX01PREVMX0NIRUNLQk9YXTogYHZNb2RlbENoZWNrYm94YCxcclxuICAgIFtWX01PREVMX1RFWFRdOiBgdk1vZGVsVGV4dGAsXHJcbiAgICBbVl9NT0RFTF9TRUxFQ1RdOiBgdk1vZGVsU2VsZWN0YCxcclxuICAgIFtWX01PREVMX0RZTkFNSUNdOiBgdk1vZGVsRHluYW1pY2AsXHJcbiAgICBbVl9PTl9XSVRIX01PRElGSUVSU106IGB3aXRoTW9kaWZpZXJzYCxcclxuICAgIFtWX09OX1dJVEhfS0VZU106IGB3aXRoS2V5c2AsXHJcbiAgICBbVl9TSE9XXTogYHZTaG93YCxcclxuICAgIFtUUkFOU0lUSU9OXTogYFRyYW5zaXRpb25gLFxyXG4gICAgW1RSQU5TSVRJT05fR1JPVVBdOiBgVHJhbnNpdGlvbkdyb3VwYFxyXG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXHJcbmxldCBkZWNvZGVyO1xyXG5mdW5jdGlvbiBkZWNvZGVIdG1sQnJvd3NlcihyYXcsIGFzQXR0ciA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIWRlY29kZXIpIHtcclxuICAgICAgICBkZWNvZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXNBdHRyKSB7XHJcbiAgICAgICAgZGVjb2Rlci5pbm5lckhUTUwgPSBgPGRpdiBmb289XCIke3Jhdy5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyl9XCI+YDtcclxuICAgICAgICByZXR1cm4gZGVjb2Rlci5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ2ZvbycpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZGVjb2Rlci5pbm5lckhUTUwgPSByYXc7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZXIudGV4dENvbnRlbnQ7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgaXNSYXdUZXh0Q29udGFpbmVyID0gLyojX19QVVJFX18qLyBtYWtlTWFwKCdzdHlsZSxpZnJhbWUsc2NyaXB0LG5vc2NyaXB0JywgdHJ1ZSk7XHJcbmNvbnN0IHBhcnNlck9wdGlvbnMgPSB7XHJcbiAgICBpc1ZvaWRUYWcsXHJcbiAgICBpc05hdGl2ZVRhZzogdGFnID0+IGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHVGFnKHRhZyksXHJcbiAgICBpc1ByZVRhZzogdGFnID0+IHRhZyA9PT0gJ3ByZScsXHJcbiAgICBkZWNvZGVFbnRpdGllczogZGVjb2RlSHRtbEJyb3dzZXIgLFxyXG4gICAgaXNCdWlsdEluQ29tcG9uZW50OiAodGFnKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQnVpbHRJblR5cGUodGFnLCBgVHJhbnNpdGlvbmApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUUkFOU0lUSU9OO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0J1aWx0SW5UeXBlKHRhZywgYFRyYW5zaXRpb25Hcm91cGApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUUkFOU0lUSU9OX0dST1VQO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjdHJlZS1jb25zdHJ1Y3Rpb24tZGlzcGF0Y2hlclxyXG4gICAgZ2V0TmFtZXNwYWNlKHRhZywgcGFyZW50KSB7XHJcbiAgICAgICAgbGV0IG5zID0gcGFyZW50ID8gcGFyZW50Lm5zIDogMCAvKiBET01OYW1lc3BhY2VzLkhUTUwgKi87XHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiBucyA9PT0gMiAvKiBET01OYW1lc3BhY2VzLk1BVEhfTUwgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudC50YWcgPT09ICdhbm5vdGF0aW9uLXhtbCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YWcgPT09ICdzdmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgLyogRE9NTmFtZXNwYWNlcy5TVkcgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50LnByb3BzLnNvbWUoYSA9PiBhLnR5cGUgPT09IDYgLyogTm9kZVR5cGVzLkFUVFJJQlVURSAqLyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGEubmFtZSA9PT0gJ2VuY29kaW5nJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGEudmFsdWUgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChhLnZhbHVlLmNvbnRlbnQgPT09ICd0ZXh0L2h0bWwnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEudmFsdWUuY29udGVudCA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5zID0gMCAvKiBET01OYW1lc3BhY2VzLkhUTUwgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoL15tKD86W2lvbnNdfHRleHQpJC8udGVzdChwYXJlbnQudGFnKSAmJlxyXG4gICAgICAgICAgICAgICAgdGFnICE9PSAnbWdseXBoJyAmJlxyXG4gICAgICAgICAgICAgICAgdGFnICE9PSAnbWFsaWdubWFyaycpIHtcclxuICAgICAgICAgICAgICAgIG5zID0gMCAvKiBET01OYW1lc3BhY2VzLkhUTUwgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGFyZW50ICYmIG5zID09PSAxIC8qIERPTU5hbWVzcGFjZXMuU1ZHICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQudGFnID09PSAnZm9yZWlnbk9iamVjdCcgfHxcclxuICAgICAgICAgICAgICAgIHBhcmVudC50YWcgPT09ICdkZXNjJyB8fFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LnRhZyA9PT0gJ3RpdGxlJykge1xyXG4gICAgICAgICAgICAgICAgbnMgPSAwIC8qIERPTU5hbWVzcGFjZXMuSFRNTCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnMgPT09IDAgLyogRE9NTmFtZXNwYWNlcy5IVE1MICovKSB7XHJcbiAgICAgICAgICAgIGlmICh0YWcgPT09ICdzdmcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAvKiBET01OYW1lc3BhY2VzLlNWRyAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFnID09PSAnbWF0aCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAyIC8qIERPTU5hbWVzcGFjZXMuTUFUSF9NTCAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnM7XHJcbiAgICB9LFxyXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3BhcnNpbmctaHRtbC1mcmFnbWVudHNcclxuICAgIGdldFRleHRNb2RlKHsgdGFnLCBucyB9KSB7XHJcbiAgICAgICAgaWYgKG5zID09PSAwIC8qIERPTU5hbWVzcGFjZXMuSFRNTCAqLykge1xyXG4gICAgICAgICAgICBpZiAodGFnID09PSAndGV4dGFyZWEnIHx8IHRhZyA9PT0gJ3RpdGxlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDEgLyogVGV4dE1vZGVzLlJDREFUQSAqLztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNSYXdUZXh0Q29udGFpbmVyKHRhZykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAyIC8qIFRleHRNb2Rlcy5SQVdURVhUICovO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwIC8qIFRleHRNb2Rlcy5EQVRBICovO1xyXG4gICAgfVxyXG59O1xuXG4vLyBQYXJzZSBpbmxpbmUgQ1NTIHN0cmluZ3MgZm9yIHN0YXRpYyBzdHlsZSBhdHRyaWJ1dGVzIGludG8gYW4gb2JqZWN0LlxyXG4vLyBUaGlzIGlzIGEgTm9kZVRyYW5zZm9ybSBzaW5jZSBpdCB3b3JrcyBvbiB0aGUgc3RhdGljIGBzdHlsZWAgYXR0cmlidXRlIGFuZFxyXG4vLyBjb252ZXJ0cyBpdCBpbnRvIGEgZHluYW1pYyBlcXVpdmFsZW50OlxyXG4vLyBzdHlsZT1cImNvbG9yOiByZWRcIiAtPiA6c3R5bGU9J3sgXCJjb2xvclwiOiBcInJlZFwiIH0nXHJcbi8vIEl0IGlzIHRoZW4gcHJvY2Vzc2VkIGJ5IGB0cmFuc2Zvcm1FbGVtZW50YCBhbmQgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZFxyXG4vLyBwcm9wcy5cclxuY29uc3QgdHJhbnNmb3JtU3R5bGUgPSBub2RlID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8pIHtcclxuICAgICAgICBub2RlLnByb3BzLmZvckVhY2goKHAsIGkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHAudHlwZSA9PT0gNiAvKiBOb2RlVHlwZXMuQVRUUklCVVRFICovICYmIHAubmFtZSA9PT0gJ3N0eWxlJyAmJiBwLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHAgd2l0aCBhbiBleHByZXNzaW9uIG5vZGVcclxuICAgICAgICAgICAgICAgIG5vZGUucHJvcHNbaV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogNyAvKiBOb2RlVHlwZXMuRElSRUNUSVZFICovLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGBiaW5kYCxcclxuICAgICAgICAgICAgICAgICAgICBhcmc6IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oYHN0eWxlYCwgdHJ1ZSwgcC5sb2MpLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cDogcGFyc2VJbmxpbmVDU1MocC52YWx1ZS5jb250ZW50LCBwLmxvYyksXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBsb2M6IHAubG9jXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IHBhcnNlSW5saW5lQ1NTID0gKGNzc1RleHQsIGxvYykgPT4ge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHBhcnNlU3RyaW5nU3R5bGUoY3NzVGV4dCk7XHJcbiAgICByZXR1cm4gY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihKU09OLnN0cmluZ2lmeShub3JtYWxpemVkKSwgZmFsc2UsIGxvYywgMyAvKiBDb25zdGFudFR5cGVzLkNBTl9TVFJJTkdJRlkgKi8pO1xyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVET01Db21waWxlckVycm9yKGNvZGUsIGxvYykge1xyXG4gICAgcmV0dXJuIGNyZWF0ZUNvbXBpbGVyRXJyb3IoY29kZSwgbG9jLCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgIXRydWUgPyBET01FcnJvck1lc3NhZ2VzIDogdW5kZWZpbmVkKTtcclxufVxyXG5jb25zdCBET01FcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgWzUwIC8qIERPTUVycm9yQ29kZXMuWF9WX0hUTUxfTk9fRVhQUkVTU0lPTiAqL106IGB2LWh0bWwgaXMgbWlzc2luZyBleHByZXNzaW9uLmAsXHJcbiAgICBbNTEgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfSFRNTF9XSVRIX0NISUxEUkVOICovXTogYHYtaHRtbCB3aWxsIG92ZXJyaWRlIGVsZW1lbnQgY2hpbGRyZW4uYCxcclxuICAgIFs1MiAvKiBET01FcnJvckNvZGVzLlhfVl9URVhUX05PX0VYUFJFU1NJT04gKi9dOiBgdi10ZXh0IGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzUzIC8qIERPTUVycm9yQ29kZXMuWF9WX1RFWFRfV0lUSF9DSElMRFJFTiAqL106IGB2LXRleHQgd2lsbCBvdmVycmlkZSBlbGVtZW50IGNoaWxkcmVuLmAsXHJcbiAgICBbNTQgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfT05fSU5WQUxJRF9FTEVNRU5UICovXTogYHYtbW9kZWwgY2FuIG9ubHkgYmUgdXNlZCBvbiA8aW5wdXQ+LCA8dGV4dGFyZWE+IGFuZCA8c2VsZWN0PiBlbGVtZW50cy5gLFxyXG4gICAgWzU1IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX0FSR19PTl9FTEVNRU5UICovXTogYHYtbW9kZWwgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZCBvbiBwbGFpbiBlbGVtZW50cy5gLFxyXG4gICAgWzU2IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX09OX0ZJTEVfSU5QVVRfRUxFTUVOVCAqL106IGB2LW1vZGVsIGNhbm5vdCBiZSB1c2VkIG9uIGZpbGUgaW5wdXRzIHNpbmNlIHRoZXkgYXJlIHJlYWQtb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5gLFxyXG4gICAgWzU3IC8qIERPTUVycm9yQ29kZXMuWF9WX01PREVMX1VOTkVDRVNTQVJZX1ZBTFVFICovXTogYFVubmVjZXNzYXJ5IHZhbHVlIGJpbmRpbmcgdXNlZCBhbG9uZ3NpZGUgdi1tb2RlbC4gSXQgd2lsbCBpbnRlcmZlcmUgd2l0aCB2LW1vZGVsJ3MgYmVoYXZpb3IuYCxcclxuICAgIFs1OCAvKiBET01FcnJvckNvZGVzLlhfVl9TSE9XX05PX0VYUFJFU1NJT04gKi9dOiBgdi1zaG93IGlzIG1pc3NpbmcgZXhwcmVzc2lvbi5gLFxyXG4gICAgWzU5IC8qIERPTUVycm9yQ29kZXMuWF9UUkFOU0lUSU9OX0lOVkFMSURfQ0hJTERSRU4gKi9dOiBgPFRyYW5zaXRpb24+IGV4cGVjdHMgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudCBvciBjb21wb25lbnQuYCxcclxuICAgIFs2MCAvKiBET01FcnJvckNvZGVzLlhfSUdOT1JFRF9TSURFX0VGRkVDVF9UQUcgKi9dOiBgVGFncyB3aXRoIHNpZGUgZWZmZWN0ICg8c2NyaXB0PiBhbmQgPHN0eWxlPikgYXJlIGlnbm9yZWQgaW4gY2xpZW50IGNvbXBvbmVudCB0ZW1wbGF0ZXMuYFxyXG59O1xuXG5jb25zdCB0cmFuc2Zvcm1WSHRtbCA9IChkaXIsIG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGNvbnN0IHsgZXhwLCBsb2MgfSA9IGRpcjtcclxuICAgIGlmICghZXhwKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTAgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfSFRNTF9OT19FWFBSRVNTSU9OICovLCBsb2MpKTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDUxIC8qIERPTUVycm9yQ29kZXMuWF9WX0hUTUxfV0lUSF9DSElMRFJFTiAqLywgbG9jKSk7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcm9wczogW1xyXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RQcm9wZXJ0eShjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGBpbm5lckhUTUxgLCB0cnVlLCBsb2MpLCBleHAgfHwgY3JlYXRlU2ltcGxlRXhwcmVzc2lvbignJywgdHJ1ZSkpXHJcbiAgICAgICAgXVxyXG4gICAgfTtcclxufTtcblxuY29uc3QgdHJhbnNmb3JtVlRleHQgPSAoZGlyLCBub2RlLCBjb250ZXh0KSA9PiB7XHJcbiAgICBjb25zdCB7IGV4cCwgbG9jIH0gPSBkaXI7XHJcbiAgICBpZiAoIWV4cCkge1xyXG4gICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDUyIC8qIERPTUVycm9yQ29kZXMuWF9WX1RFWFRfTk9fRVhQUkVTU0lPTiAqLywgbG9jKSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1MyAvKiBET01FcnJvckNvZGVzLlhfVl9URVhUX1dJVEhfQ0hJTERSRU4gKi8sIGxvYykpO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvcHM6IFtcclxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UHJvcGVydHkoY3JlYXRlU2ltcGxlRXhwcmVzc2lvbihgdGV4dENvbnRlbnRgLCB0cnVlKSwgZXhwXHJcbiAgICAgICAgICAgICAgICA/IGdldENvbnN0YW50VHlwZShleHAsIGNvbnRleHQpID4gMFxyXG4gICAgICAgICAgICAgICAgICAgID8gZXhwXHJcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlclN0cmluZyhUT19ESVNQTEFZX1NUUklORyksIFtleHBdLCBsb2MpXHJcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZVNpbXBsZUV4cHJlc3Npb24oJycsIHRydWUpKVxyXG4gICAgICAgIF1cclxuICAgIH07XHJcbn07XG5cbmNvbnN0IHRyYW5zZm9ybU1vZGVsID0gKGRpciwgbm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgY29uc3QgYmFzZVJlc3VsdCA9IHRyYW5zZm9ybU1vZGVsJDEoZGlyLCBub2RlLCBjb250ZXh0KTtcclxuICAgIC8vIGJhc2UgdHJhbnNmb3JtIGhhcyBlcnJvcnMgT1IgY29tcG9uZW50IHYtbW9kZWwgKG9ubHkgbmVlZCBwcm9wcylcclxuICAgIGlmICghYmFzZVJlc3VsdC5wcm9wcy5sZW5ndGggfHwgbm9kZS50YWdUeXBlID09PSAxIC8qIEVsZW1lbnRUeXBlcy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICByZXR1cm4gYmFzZVJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmIChkaXIuYXJnKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTUgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfQVJHX09OX0VMRU1FTlQgKi8sIGRpci5hcmcubG9jKSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbmRQcm9wKG5vZGUsICd2YWx1ZScpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1NyAvKiBET01FcnJvckNvZGVzLlhfVl9NT0RFTF9VTk5FQ0VTU0FSWV9WQUxVRSAqLywgdmFsdWUubG9jKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YWcgfSA9IG5vZGU7XHJcbiAgICBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPSBjb250ZXh0LmlzQ3VzdG9tRWxlbWVudCh0YWcpO1xyXG4gICAgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fFxyXG4gICAgICAgIHRhZyA9PT0gJ3RleHRhcmVhJyB8fFxyXG4gICAgICAgIHRhZyA9PT0gJ3NlbGVjdCcgfHxcclxuICAgICAgICBpc0N1c3RvbUVsZW1lbnQpIHtcclxuICAgICAgICBsZXQgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX1RFWFQ7XHJcbiAgICAgICAgbGV0IGlzSW52YWxpZFR5cGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGFnID09PSAnaW5wdXQnIHx8IGlzQ3VzdG9tRWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmluZFByb3Aobm9kZSwgYHR5cGVgKTtcclxuICAgICAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDp0eXBlPVwiZm9vXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVUb1VzZSA9IFZfTU9ERUxfRFlOQU1JQztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUudmFsdWUuY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyYWRpbyc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVUb1VzZSA9IFZfTU9ERUxfUkFESU87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlVG9Vc2UgPSBWX01PREVMX0NIRUNLQk9YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbnZhbGlkVHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IoY3JlYXRlRE9NQ29tcGlsZXJFcnJvcig1NiAvKiBET01FcnJvckNvZGVzLlhfVl9NT0RFTF9PTl9GSUxFX0lOUFVUX0VMRU1FTlQgKi8sIGRpci5sb2MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgY2hlY2tEdXBsaWNhdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChoYXNEeW5hbWljS2V5VkJpbmQobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaGFzIGJpbmRpbmdzIHdpdGggZHluYW1pYyBrZXlzLCB3aGljaCBjYW4gcG9zc2libHkgY29udGFpblxyXG4gICAgICAgICAgICAgICAgLy8gXCJ0eXBlXCIuXHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVUb1VzZSA9IFZfTU9ERUxfRFlOQU1JQztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHRleHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNoZWNrRHVwbGljYXRlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmVUb1VzZSA9IFZfTU9ERUxfU0VMRUNUO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGV4dGFyZWFcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNoZWNrRHVwbGljYXRlZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluamVjdCBydW50aW1lIGRpcmVjdGl2ZVxyXG4gICAgICAgIC8vIGJ5IHJldHVybmluZyB0aGUgaGVscGVyIHN5bWJvbCB2aWEgbmVlZFJ1bnRpbWVcclxuICAgICAgICAvLyB0aGUgaW1wb3J0IHdpbGwgcmVwbGFjZWQgYSByZXNvbHZlRGlyZWN0aXZlIGNhbGwuXHJcbiAgICAgICAgaWYgKCFpc0ludmFsaWRUeXBlKSB7XHJcbiAgICAgICAgICAgIGJhc2VSZXN1bHQubmVlZFJ1bnRpbWUgPSBjb250ZXh0LmhlbHBlcihkaXJlY3RpdmVUb1VzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTQgLyogRE9NRXJyb3JDb2Rlcy5YX1ZfTU9ERUxfT05fSU5WQUxJRF9FTEVNRU5UICovLCBkaXIubG9jKSk7XHJcbiAgICB9XHJcbiAgICAvLyBuYXRpdmUgdm1vZGVsIGRvZXNuJ3QgbmVlZCB0aGUgYG1vZGVsVmFsdWVgIHByb3BzIHNpbmNlIHRoZXkgYXJlIGFsc29cclxuICAgIC8vIHBhc3NlZCB0byB0aGUgcnVudGltZSBhcyBgYmluZGluZy52YWx1ZWAuIHJlbW92aW5nIGl0IHJlZHVjZXMgY29kZSBzaXplLlxyXG4gICAgYmFzZVJlc3VsdC5wcm9wcyA9IGJhc2VSZXN1bHQucHJvcHMuZmlsdGVyKHAgPT4gIShwLmtleS50eXBlID09PSA0IC8qIE5vZGVUeXBlcy5TSU1QTEVfRVhQUkVTU0lPTiAqLyAmJlxyXG4gICAgICAgIHAua2V5LmNvbnRlbnQgPT09ICdtb2RlbFZhbHVlJykpO1xyXG4gICAgcmV0dXJuIGJhc2VSZXN1bHQ7XHJcbn07XG5cbmNvbnN0IGlzRXZlbnRPcHRpb25Nb2RpZmllciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgcGFzc2l2ZSxvbmNlLGNhcHR1cmVgKTtcclxuY29uc3QgaXNOb25LZXlNb2RpZmllciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChcclxuLy8gZXZlbnQgcHJvcGFnYXRpb24gbWFuYWdlbWVudFxyXG5gc3RvcCxwcmV2ZW50LHNlbGYsYCArXHJcbiAgICAvLyBzeXN0ZW0gbW9kaWZpZXJzICsgZXhhY3RcclxuICAgIGBjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0LGAgK1xyXG4gICAgLy8gbW91c2VcclxuICAgIGBtaWRkbGVgKTtcclxuLy8gbGVmdCAmIHJpZ2h0IGNvdWxkIGJlIG1vdXNlIG9yIGtleSBtb2RpZmllcnMgYmFzZWQgb24gZXZlbnQgdHlwZVxyXG5jb25zdCBtYXliZUtleU1vZGlmaWVyID0gLyojX19QVVJFX18qLyBtYWtlTWFwKCdsZWZ0LHJpZ2h0Jyk7XHJcbmNvbnN0IGlzS2V5Ym9hcmRFdmVudCA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgb25rZXl1cCxvbmtleWRvd24sb25rZXlwcmVzc2AsIHRydWUpO1xyXG5jb25zdCByZXNvbHZlTW9kaWZpZXJzID0gKGtleSwgbW9kaWZpZXJzLCBjb250ZXh0LCBsb2MpID0+IHtcclxuICAgIGNvbnN0IGtleU1vZGlmaWVycyA9IFtdO1xyXG4gICAgY29uc3Qgbm9uS2V5TW9kaWZpZXJzID0gW107XHJcbiAgICBjb25zdCBldmVudE9wdGlvbk1vZGlmaWVycyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1vZGlmaWVyc1tpXTtcclxuICAgICAgICBpZiAobW9kaWZpZXIgPT09ICduYXRpdmUnICYmXHJcbiAgICAgICAgICAgIGNoZWNrQ29tcGF0RW5hYmxlZChcIkNPTVBJTEVSX1ZfT05fTkFUSVZFXCIgLyogQ29tcGlsZXJEZXByZWNhdGlvblR5cGVzLkNPTVBJTEVSX1ZfT05fTkFUSVZFICovLCBjb250ZXh0LCBsb2MpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50T3B0aW9uTW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0V2ZW50T3B0aW9uTW9kaWZpZXIobW9kaWZpZXIpKSB7XHJcbiAgICAgICAgICAgIC8vIGV2ZW50T3B0aW9uTW9kaWZpZXJzOiBtb2RpZmllcnMgZm9yIGFkZEV2ZW50TGlzdGVuZXIoKSBvcHRpb25zLFxyXG4gICAgICAgICAgICAvLyBlLmcuIC5wYXNzaXZlICYgLmNhcHR1cmVcclxuICAgICAgICAgICAgZXZlbnRPcHRpb25Nb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBydW50aW1lTW9kaWZpZXJzOiBtb2RpZmllcnMgdGhhdCBuZWVkcyBydW50aW1lIGd1YXJkc1xyXG4gICAgICAgICAgICBpZiAobWF5YmVLZXlNb2RpZmllcihtb2RpZmllcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1N0YXRpY0V4cChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRFdmVudChrZXkuY29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5TW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uS2V5TW9kaWZpZXJzLnB1c2gobW9kaWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleU1vZGlmaWVycy5wdXNoKG1vZGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBub25LZXlNb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOb25LZXlNb2RpZmllcihtb2RpZmllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBub25LZXlNb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlNb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGtleU1vZGlmaWVycyxcclxuICAgICAgICBub25LZXlNb2RpZmllcnMsXHJcbiAgICAgICAgZXZlbnRPcHRpb25Nb2RpZmllcnNcclxuICAgIH07XHJcbn07XHJcbmNvbnN0IHRyYW5zZm9ybUNsaWNrID0gKGtleSwgZXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGlzU3RhdGljQ2xpY2sgPSBpc1N0YXRpY0V4cChrZXkpICYmIGtleS5jb250ZW50LnRvTG93ZXJDYXNlKCkgPT09ICdvbmNsaWNrJztcclxuICAgIHJldHVybiBpc1N0YXRpY0NsaWNrXHJcbiAgICAgICAgPyBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGV2ZW50LCB0cnVlKVxyXG4gICAgICAgIDoga2V5LnR5cGUgIT09IDQgLyogTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OICovXHJcbiAgICAgICAgICAgID8gY3JlYXRlQ29tcG91bmRFeHByZXNzaW9uKFtcclxuICAgICAgICAgICAgICAgIGAoYCxcclxuICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgIGApID09PSBcIm9uQ2xpY2tcIiA/IFwiJHtldmVudH1cIiA6IChgLFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgYClgXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIDoga2V5O1xyXG59O1xyXG5jb25zdCB0cmFuc2Zvcm1PbiA9IChkaXIsIG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIHJldHVybiB0cmFuc2Zvcm1PbiQxKGRpciwgbm9kZSwgY29udGV4dCwgYmFzZVJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBtb2RpZmllcnMgfSA9IGRpcjtcclxuICAgICAgICBpZiAoIW1vZGlmaWVycy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlUmVzdWx0O1xyXG4gICAgICAgIGxldCB7IGtleSwgdmFsdWU6IGhhbmRsZXJFeHAgfSA9IGJhc2VSZXN1bHQucHJvcHNbMF07XHJcbiAgICAgICAgY29uc3QgeyBrZXlNb2RpZmllcnMsIG5vbktleU1vZGlmaWVycywgZXZlbnRPcHRpb25Nb2RpZmllcnMgfSA9IHJlc29sdmVNb2RpZmllcnMoa2V5LCBtb2RpZmllcnMsIGNvbnRleHQsIGRpci5sb2MpO1xyXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxyXG4gICAgICAgIGlmIChub25LZXlNb2RpZmllcnMuaW5jbHVkZXMoJ3JpZ2h0JykpIHtcclxuICAgICAgICAgICAga2V5ID0gdHJhbnNmb3JtQ2xpY2soa2V5LCBgb25Db250ZXh0bWVudWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9uS2V5TW9kaWZpZXJzLmluY2x1ZGVzKCdtaWRkbGUnKSkge1xyXG4gICAgICAgICAgICBrZXkgPSB0cmFuc2Zvcm1DbGljayhrZXksIGBvbk1vdXNldXBgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vbktleU1vZGlmaWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaGFuZGxlckV4cCA9IGNyZWF0ZUNhbGxFeHByZXNzaW9uKGNvbnRleHQuaGVscGVyKFZfT05fV0lUSF9NT0RJRklFUlMpLCBbXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyRXhwLFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobm9uS2V5TW9kaWZpZXJzKVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleU1vZGlmaWVycy5sZW5ndGggJiZcclxuICAgICAgICAgICAgLy8gaWYgZXZlbnQgbmFtZSBpcyBkeW5hbWljLCBhbHdheXMgd3JhcCB3aXRoIGtleXMgZ3VhcmRcclxuICAgICAgICAgICAgKCFpc1N0YXRpY0V4cChrZXkpIHx8IGlzS2V5Ym9hcmRFdmVudChrZXkuY29udGVudCkpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJFeHAgPSBjcmVhdGVDYWxsRXhwcmVzc2lvbihjb250ZXh0LmhlbHBlcihWX09OX1dJVEhfS0VZUyksIFtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJFeHAsXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShrZXlNb2RpZmllcnMpXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnRPcHRpb25Nb2RpZmllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyUG9zdGZpeCA9IGV2ZW50T3B0aW9uTW9kaWZpZXJzLm1hcChjYXBpdGFsaXplKS5qb2luKCcnKTtcclxuICAgICAgICAgICAga2V5ID0gaXNTdGF0aWNFeHAoa2V5KVxyXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVTaW1wbGVFeHByZXNzaW9uKGAke2tleS5jb250ZW50fSR7bW9kaWZpZXJQb3N0Zml4fWAsIHRydWUpXHJcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZUNvbXBvdW5kRXhwcmVzc2lvbihbYChgLCBrZXksIGApICsgXCIke21vZGlmaWVyUG9zdGZpeH1cImBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvcHM6IFtjcmVhdGVPYmplY3RQcm9wZXJ0eShrZXksIGhhbmRsZXJFeHApXVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxufTtcblxuY29uc3QgdHJhbnNmb3JtU2hvdyA9IChkaXIsIG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGNvbnN0IHsgZXhwLCBsb2MgfSA9IGRpcjtcclxuICAgIGlmICghZXhwKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNTggLyogRE9NRXJyb3JDb2Rlcy5YX1ZfU0hPV19OT19FWFBSRVNTSU9OICovLCBsb2MpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvcHM6IFtdLFxyXG4gICAgICAgIG5lZWRSdW50aW1lOiBjb250ZXh0LmhlbHBlcihWX1NIT1cpXHJcbiAgICB9O1xyXG59O1xuXG5jb25zdCB0cmFuc2Zvcm1UcmFuc2l0aW9uID0gKG5vZGUsIGNvbnRleHQpID0+IHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IDEgLyogTm9kZVR5cGVzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICBub2RlLnRhZ1R5cGUgPT09IDEgLyogRWxlbWVudFR5cGVzLkNPTVBPTkVOVCAqLykge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuaXNCdWlsdEluQ29tcG9uZW50KG5vZGUudGFnKTtcclxuICAgICAgICBpZiAoY29tcG9uZW50ID09PSBUUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gd2FybiBtdWx0aXBsZSB0cmFuc2l0aW9uIGNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVDaGlsZHJlbihub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihjcmVhdGVET01Db21waWxlckVycm9yKDU5IC8qIERPTUVycm9yQ29kZXMuWF9UUkFOU0lUSU9OX0lOVkFMSURfQ0hJTERSRU4gKi8sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5vZGUuY2hpbGRyZW5bMF0ubG9jLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5vZGUuY2hpbGRyZW5bbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXS5sb2MuZW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBzIHNpbmdsZSBjaGlsZCB3LyB2LXNob3dcclxuICAgICAgICAgICAgICAgIC8vIGlmIHllcywgaW5qZWN0IFwicGVyc2lzdGVkOiB0cnVlXCIgdG8gdGhlIHRyYW5zaXRpb24gcHJvcHNcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAxIC8qIE5vZGVUeXBlcy5FTEVNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkLnByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnR5cGUgPT09IDcgLyogTm9kZVR5cGVzLkRJUkVDVElWRSAqLyAmJiBwLm5hbWUgPT09ICdzaG93Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wcm9wcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE5vZGVUeXBlcy5BVFRSSUJVVEUgKi8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BlcnNpc3RlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2M6IG5vZGUubG9jXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIGhhc011bHRpcGxlQ2hpbGRyZW4obm9kZSkge1xyXG4gICAgLy8gIzEzNTIgZmlsdGVyIG91dCBwb3RlbnRpYWwgY29tbWVudCBub2Rlcy5cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gKG5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZpbHRlcihjID0+IGMudHlwZSAhPT0gMyAvKiBOb2RlVHlwZXMuQ09NTUVOVCAqLyAmJlxyXG4gICAgICAgICEoYy50eXBlID09PSAyIC8qIE5vZGVUeXBlcy5URVhUICovICYmICFjLmNvbnRlbnQudHJpbSgpKSkpO1xyXG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlblswXTtcclxuICAgIHJldHVybiAoY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8XHJcbiAgICAgICAgY2hpbGQudHlwZSA9PT0gMTEgLyogTm9kZVR5cGVzLkZPUiAqLyB8fFxyXG4gICAgICAgIChjaGlsZC50eXBlID09PSA5IC8qIE5vZGVUeXBlcy5JRiAqLyAmJiBjaGlsZC5icmFuY2hlcy5zb21lKGhhc011bHRpcGxlQ2hpbGRyZW4pKSk7XHJcbn1cblxuY29uc3QgaWdub3JlU2lkZUVmZmVjdFRhZ3MgPSAobm9kZSwgY29udGV4dCkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSAvKiBOb2RlVHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgIG5vZGUudGFnVHlwZSA9PT0gMCAvKiBFbGVtZW50VHlwZXMuRUxFTUVOVCAqLyAmJlxyXG4gICAgICAgIChub2RlLnRhZyA9PT0gJ3NjcmlwdCcgfHwgbm9kZS50YWcgPT09ICdzdHlsZScpKSB7XHJcbiAgICAgICAgY29udGV4dC5vbkVycm9yKGNyZWF0ZURPTUNvbXBpbGVyRXJyb3IoNjAgLyogRE9NRXJyb3JDb2Rlcy5YX0lHTk9SRURfU0lERV9FRkZFQ1RfVEFHICovLCBub2RlLmxvYykpO1xyXG4gICAgICAgIGNvbnRleHQucmVtb3ZlTm9kZSgpO1xyXG4gICAgfVxyXG59O1xuXG5jb25zdCBET01Ob2RlVHJhbnNmb3JtcyA9IFtcclxuICAgIHRyYW5zZm9ybVN0eWxlLFxyXG4gICAgLi4uKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IFt0cmFuc2Zvcm1UcmFuc2l0aW9uXSA6IFtdKVxyXG5dO1xyXG5jb25zdCBET01EaXJlY3RpdmVUcmFuc2Zvcm1zID0ge1xyXG4gICAgY2xvYWs6IG5vb3BEaXJlY3RpdmVUcmFuc2Zvcm0sXHJcbiAgICBodG1sOiB0cmFuc2Zvcm1WSHRtbCxcclxuICAgIHRleHQ6IHRyYW5zZm9ybVZUZXh0LFxyXG4gICAgbW9kZWw6IHRyYW5zZm9ybU1vZGVsLFxyXG4gICAgb246IHRyYW5zZm9ybU9uLFxyXG4gICAgc2hvdzogdHJhbnNmb3JtU2hvd1xyXG59O1xyXG5mdW5jdGlvbiBjb21waWxlKHRlbXBsYXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBiYXNlQ29tcGlsZSh0ZW1wbGF0ZSwgZXh0ZW5kKHt9LCBwYXJzZXJPcHRpb25zLCBvcHRpb25zLCB7XHJcbiAgICAgICAgbm9kZVRyYW5zZm9ybXM6IFtcclxuICAgICAgICAgICAgLy8gaWdub3JlIDxzY3JpcHQ+IGFuZCA8dGFnPlxyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBwdXQgaW5zaWRlIERPTU5vZGVUcmFuc2Zvcm1zIGJlY2F1c2UgdGhhdCBsaXN0IGlzIHVzZWRcclxuICAgICAgICAgICAgLy8gYnkgY29tcGlsZXItc3NyIHRvIGdlbmVyYXRlIHZub2RlIGZhbGxiYWNrIGJyYW5jaGVzXHJcbiAgICAgICAgICAgIGlnbm9yZVNpZGVFZmZlY3RUYWdzLFxyXG4gICAgICAgICAgICAuLi5ET01Ob2RlVHJhbnNmb3JtcyxcclxuICAgICAgICAgICAgLi4uKG9wdGlvbnMubm9kZVRyYW5zZm9ybXMgfHwgW10pXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkaXJlY3RpdmVUcmFuc2Zvcm1zOiBleHRlbmQoe30sIERPTURpcmVjdGl2ZVRyYW5zZm9ybXMsIG9wdGlvbnMuZGlyZWN0aXZlVHJhbnNmb3JtcyB8fCB7fSksXHJcbiAgICAgICAgdHJhbnNmb3JtSG9pc3Q6IG51bGwgXHJcbiAgICB9KSk7XHJcbn1cclxuZnVuY3Rpb24gcGFyc2UodGVtcGxhdGUsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIGJhc2VQYXJzZSh0ZW1wbGF0ZSwgZXh0ZW5kKHt9LCBwYXJzZXJPcHRpb25zLCBvcHRpb25zKSk7XHJcbn1cblxuZXhwb3J0IHsgRE9NRGlyZWN0aXZlVHJhbnNmb3JtcywgRE9NTm9kZVRyYW5zZm9ybXMsIFRSQU5TSVRJT04sIFRSQU5TSVRJT05fR1JPVVAsIFZfTU9ERUxfQ0hFQ0tCT1gsIFZfTU9ERUxfRFlOQU1JQywgVl9NT0RFTF9SQURJTywgVl9NT0RFTF9TRUxFQ1QsIFZfTU9ERUxfVEVYVCwgVl9PTl9XSVRIX0tFWVMsIFZfT05fV0lUSF9NT0RJRklFUlMsIFZfU0hPVywgY29tcGlsZSwgY3JlYXRlRE9NQ29tcGlsZXJFcnJvciwgcGFyc2UsIHBhcnNlck9wdGlvbnMsIHRyYW5zZm9ybVN0eWxlIH07XG4iLCJleHBvcnQgY29uc3QgSE9PS19TRVRVUCA9ICdkZXZ0b29scy1wbHVnaW46c2V0dXAnO1xuZXhwb3J0IGNvbnN0IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCA9ICdwbHVnaW46c2V0dGluZ3M6c2V0JztcbiIsImV4cG9ydCBmdW5jdGlvbiBnZXREZXZ0b29sc0dsb2JhbEhvb2soKSB7XG4gICAgcmV0dXJuIGdldFRhcmdldCgpLl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICA/IHdpbmRvd1xuICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgOiB7fTtcbn1cbmV4cG9ydCBjb25zdCBpc1Byb3h5QXZhaWxhYmxlID0gdHlwZW9mIFByb3h5ID09PSAnZnVuY3Rpb24nO1xuIiwiaW1wb3J0IHsgZ2V0VGFyZ2V0LCBnZXREZXZ0b29sc0dsb2JhbEhvb2ssIGlzUHJveHlBdmFpbGFibGUgfSBmcm9tICcuL2Vudi5qcyc7XG5pbXBvcnQgeyBIT09LX1NFVFVQIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBBcGlQcm94eSB9IGZyb20gJy4vcHJveHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBzZXR1cERldnRvb2xzUGx1Z2luKHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gcGx1Z2luRGVzY3JpcHRvcjtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoKTtcbiAgICBjb25zdCBob29rID0gZ2V0RGV2dG9vbHNHbG9iYWxIb29rKCk7XG4gICAgY29uc3QgZW5hYmxlUHJveHkgPSBpc1Byb3h5QXZhaWxhYmxlICYmIGRlc2NyaXB0b3IuZW5hYmxlRWFybHlQcm94eTtcbiAgICBpZiAoaG9vayAmJiAodGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTl9BUElfQVZBSUxBQkxFX18gfHwgIWVuYWJsZVByb3h5KSkge1xuICAgICAgICBob29rLmVtaXQoSE9PS19TRVRVUCwgcGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBwcm94eSA9IGVuYWJsZVByb3h5ID8gbmV3IEFwaVByb3h5KGRlc2NyaXB0b3IsIGhvb2spIDogbnVsbDtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5TX18gPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fIHx8IFtdO1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgcGx1Z2luRGVzY3JpcHRvcjogZGVzY3JpcHRvcixcbiAgICAgICAgICAgIHNldHVwRm4sXG4gICAgICAgICAgICBwcm94eSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcm94eSlcbiAgICAgICAgICAgIHNldHVwRm4ocHJveHkucHJveGllZFRhcmdldCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSE9PS19QTFVHSU5fU0VUVElOR1NfU0VUIH0gZnJvbSAnLi9jb25zdC5qcyc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuL3RpbWUuanMnO1xuZXhwb3J0IGNsYXNzIEFwaVByb3h5IHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4sIGhvb2spIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhcmdldFF1ZXVlID0gW107XG4gICAgICAgIHRoaXMub25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5ob29rID0gaG9vaztcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge307XG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBsdWdpbi5zZXR0aW5nc1tpZF07XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNldHRpbmdzW2lkXSA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsU2V0dGluZ3NTYXZlSWQgPSBgX192dWUtZGV2dG9vbHMtcGx1Z2luLXNldHRpbmdzX18ke3BsdWdpbi5pZH1gO1xuICAgICAgICBsZXQgY3VycmVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFNldHRpbmdzLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFsbGJhY2tzID0ge1xuICAgICAgICAgICAgZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZXR0aW5ncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm93KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3coKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChob29rKSB7XG4gICAgICAgICAgICBob29rLm9uKEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCwgKHBsdWdpbklkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwbHVnaW5JZCA9PT0gdGhpcy5wbHVnaW4uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWxsYmFja3Muc2V0U2V0dGluZ3ModmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJveGllZE9uID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgICAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldC5vbltwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJveGllZFRhcmdldCA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJveGllZE9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLmZhbGxiYWNrcykuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tzW3Byb3BdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldFJlYWxUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vblF1ZXVlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5vbltpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy50YXJnZXRRdWV1ZSkge1xuICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGF3YWl0IHRoaXMudGFyZ2V0W2l0ZW0ubWV0aG9kXSguLi5pdGVtLmFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImxldCBzdXBwb3J0ZWQ7XG5sZXQgcGVyZjtcbmV4cG9ydCBmdW5jdGlvbiBpc1BlcmZvcm1hbmNlU3VwcG9ydGVkKCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoc3VwcG9ydGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wZXJmb3JtYW5jZSkge1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiAoKF9hID0gZ2xvYmFsLnBlcmZfaG9va3MpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wZXJmb3JtYW5jZSkpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IGdsb2JhbC5wZXJmX2hvb2tzLnBlcmZvcm1hbmNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdXBwb3J0ZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBpc1BlcmZvcm1hbmNlU3VwcG9ydGVkKCkgPyBwZXJmLm5vdygpIDogRGF0ZS5ub3coKTtcbn1cbiIsImltcG9ydCB7IGV4dGVuZCwgaXNBcnJheSwgaXNNYXAsIGlzSW50ZWdlcktleSwgaGFzT3duLCBpc1N5bWJvbCwgaXNPYmplY3QsIGhhc0NoYW5nZWQsIG1ha2VNYXAsIGNhcGl0YWxpemUsIHRvUmF3VHlwZSwgZGVmLCBpc0Z1bmN0aW9uLCBOT09QIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5mdW5jdGlvbiB3YXJuKG1zZywgLi4uYXJncykge1xyXG4gICAgY29uc29sZS53YXJuKGBbVnVlIHdhcm5dICR7bXNnfWAsIC4uLmFyZ3MpO1xyXG59XG5cbmxldCBhY3RpdmVFZmZlY3RTY29wZTtcclxuY2xhc3MgRWZmZWN0U2NvcGUge1xyXG4gICAgY29uc3RydWN0b3IoZGV0YWNoZWQgPSBmYWxzZSkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBbXTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNsZWFudXBzID0gW107XHJcbiAgICAgICAgaWYgKCFkZXRhY2hlZCAmJiBhY3RpdmVFZmZlY3RTY29wZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xyXG4gICAgICAgICAgICB0aGlzLmluZGV4ID1cclxuICAgICAgICAgICAgICAgIChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgfHwgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyA9IFtdKSkucHVzaCh0aGlzKSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcnVuKGZuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFZmZlY3RTY29wZSA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IGN1cnJlbnRFZmZlY3RTY29wZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgY2Fubm90IHJ1biBhbiBpbmFjdGl2ZSBlZmZlY3Qgc2NvcGUuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgb24oKSB7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgb2ZmKCkge1xyXG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlID0gdGhpcy5wYXJlbnQ7XHJcbiAgICB9XHJcbiAgICBzdG9wKGZyb21QYXJlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcclxuICAgICAgICAgICAgbGV0IGksIGw7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdHNbaV0uc3RvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmNsZWFudXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwc1tpXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjb3Blcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnN0b3AodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbmVzdGVkIHNjb3BlLCBkZXJlZmVyZW5jZSBmcm9tIHBhcmVudCB0byBhdm9pZCBtZW1vcnkgbGVha3NcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmICFmcm9tUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvcHRpbWl6ZWQgTygxKSByZW1vdmFsXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdCAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5pbmRleCA9IHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZWZmZWN0U2NvcGUoZGV0YWNoZWQpIHtcclxuICAgIHJldHVybiBuZXcgRWZmZWN0U2NvcGUoZGV0YWNoZWQpO1xyXG59XHJcbmZ1bmN0aW9uIHJlY29yZEVmZmVjdFNjb3BlKGVmZmVjdCwgc2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZSkge1xyXG4gICAgaWYgKHNjb3BlICYmIHNjb3BlLmFjdGl2ZSkge1xyXG4gICAgICAgIHNjb3BlLmVmZmVjdHMucHVzaChlZmZlY3QpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcclxuICAgIHJldHVybiBhY3RpdmVFZmZlY3RTY29wZTtcclxufVxyXG5mdW5jdGlvbiBvblNjb3BlRGlzcG9zZShmbikge1xyXG4gICAgaWYgKGFjdGl2ZUVmZmVjdFNjb3BlKSB7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUuY2xlYW51cHMucHVzaChmbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB3YXJuKGBvblNjb3BlRGlzcG9zZSgpIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBlZmZlY3Qgc2NvcGVgICtcclxuICAgICAgICAgICAgYCB0byBiZSBhc3NvY2lhdGVkIHdpdGguYCk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgY3JlYXRlRGVwID0gKGVmZmVjdHMpID0+IHtcclxuICAgIGNvbnN0IGRlcCA9IG5ldyBTZXQoZWZmZWN0cyk7XHJcbiAgICBkZXAudyA9IDA7XHJcbiAgICBkZXAubiA9IDA7XHJcbiAgICByZXR1cm4gZGVwO1xyXG59O1xyXG5jb25zdCB3YXNUcmFja2VkID0gKGRlcCkgPT4gKGRlcC53ICYgdHJhY2tPcEJpdCkgPiAwO1xyXG5jb25zdCBuZXdUcmFja2VkID0gKGRlcCkgPT4gKGRlcC5uICYgdHJhY2tPcEJpdCkgPiAwO1xyXG5jb25zdCBpbml0RGVwTWFya2VycyA9ICh7IGRlcHMgfSkgPT4ge1xyXG4gICAgaWYgKGRlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlcHNbaV0udyB8PSB0cmFja09wQml0OyAvLyBzZXQgd2FzIHRyYWNrZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGZpbmFsaXplRGVwTWFya2VycyA9IChlZmZlY3QpID0+IHtcclxuICAgIGNvbnN0IHsgZGVwcyB9ID0gZWZmZWN0O1xyXG4gICAgaWYgKGRlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHB0ciA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlcCA9IGRlcHNbaV07XHJcbiAgICAgICAgICAgIGlmICh3YXNUcmFja2VkKGRlcCkgJiYgIW5ld1RyYWNrZWQoZGVwKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwLmRlbGV0ZShlZmZlY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVwc1twdHIrK10gPSBkZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY2xlYXIgYml0c1xyXG4gICAgICAgICAgICBkZXAudyAmPSB+dHJhY2tPcEJpdDtcclxuICAgICAgICAgICAgZGVwLm4gJj0gfnRyYWNrT3BCaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlcHMubGVuZ3RoID0gcHRyO1xyXG4gICAgfVxyXG59O1xuXG5jb25zdCB0YXJnZXRNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG4vLyBUaGUgbnVtYmVyIG9mIGVmZmVjdHMgY3VycmVudGx5IGJlaW5nIHRyYWNrZWQgcmVjdXJzaXZlbHkuXHJcbmxldCBlZmZlY3RUcmFja0RlcHRoID0gMDtcclxubGV0IHRyYWNrT3BCaXQgPSAxO1xyXG4vKipcclxuICogVGhlIGJpdHdpc2UgdHJhY2sgbWFya2VycyBzdXBwb3J0IGF0IG1vc3QgMzAgbGV2ZWxzIG9mIHJlY3Vyc2lvbi5cclxuICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gdG8gZW5hYmxlIG1vZGVybiBKUyBlbmdpbmVzIHRvIHVzZSBhIFNNSSBvbiBhbGwgcGxhdGZvcm1zLlxyXG4gKiBXaGVuIHJlY3Vyc2lvbiBkZXB0aCBpcyBncmVhdGVyLCBmYWxsIGJhY2sgdG8gdXNpbmcgYSBmdWxsIGNsZWFudXAuXHJcbiAqL1xyXG5jb25zdCBtYXhNYXJrZXJCaXRzID0gMzA7XHJcbmxldCBhY3RpdmVFZmZlY3Q7XHJcbmNvbnN0IElURVJBVEVfS0VZID0gU3ltYm9sKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/ICdpdGVyYXRlJyA6ICcnKTtcclxuY29uc3QgTUFQX0tFWV9JVEVSQVRFX0tFWSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyAnTWFwIGtleSBpdGVyYXRlJyA6ICcnKTtcclxuY2xhc3MgUmVhY3RpdmVFZmZlY3Qge1xyXG4gICAgY29uc3RydWN0b3IoZm4sIHNjaGVkdWxlciA9IG51bGwsIHNjb3BlKSB7XHJcbiAgICAgICAgdGhpcy5mbiA9IGZuO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRlcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBzY29wZSk7XHJcbiAgICB9XHJcbiAgICBydW4oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGFyZW50ID0gYWN0aXZlRWZmZWN0O1xyXG4gICAgICAgIGxldCBsYXN0U2hvdWxkVHJhY2sgPSBzaG91bGRUcmFjaztcclxuICAgICAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdDtcclxuICAgICAgICAgICAgYWN0aXZlRWZmZWN0ID0gdGhpcztcclxuICAgICAgICAgICAgc2hvdWxkVHJhY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cmFja09wQml0ID0gMSA8PCArK2VmZmVjdFRyYWNrRGVwdGg7XHJcbiAgICAgICAgICAgIGlmIChlZmZlY3RUcmFja0RlcHRoIDw9IG1heE1hcmtlckJpdHMpIHtcclxuICAgICAgICAgICAgICAgIGluaXREZXBNYXJrZXJzKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2xlYW51cEVmZmVjdCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgaWYgKGVmZmVjdFRyYWNrRGVwdGggPD0gbWF4TWFya2VyQml0cykge1xyXG4gICAgICAgICAgICAgICAgZmluYWxpemVEZXBNYXJrZXJzKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyYWNrT3BCaXQgPSAxIDw8IC0tZWZmZWN0VHJhY2tEZXB0aDtcclxuICAgICAgICAgICAgYWN0aXZlRWZmZWN0ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgICAgIHNob3VsZFRyYWNrID0gbGFzdFNob3VsZFRyYWNrO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVmZXJTdG9wKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgLy8gc3RvcHBlZCB3aGlsZSBydW5uaW5nIGl0c2VsZiAtIGRlZmVyIHRoZSBjbGVhbnVwXHJcbiAgICAgICAgaWYgKGFjdGl2ZUVmZmVjdCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmVyU3RvcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNsZWFudXBFZmZlY3QodGhpcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uU3RvcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjbGVhbnVwRWZmZWN0KGVmZmVjdCkge1xyXG4gICAgY29uc3QgeyBkZXBzIH0gPSBlZmZlY3Q7XHJcbiAgICBpZiAoZGVwcy5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZGVwc1tpXS5kZWxldGUoZWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVwcy5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGVmZmVjdChmbiwgb3B0aW9ucykge1xyXG4gICAgaWYgKGZuLmVmZmVjdCkge1xyXG4gICAgICAgIGZuID0gZm4uZWZmZWN0LmZuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgX2VmZmVjdCA9IG5ldyBSZWFjdGl2ZUVmZmVjdChmbik7XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIGV4dGVuZChfZWZmZWN0LCBvcHRpb25zKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5zY29wZSlcclxuICAgICAgICAgICAgcmVjb3JkRWZmZWN0U2NvcGUoX2VmZmVjdCwgb3B0aW9ucy5zY29wZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubGF6eSkge1xyXG4gICAgICAgIF9lZmZlY3QucnVuKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBydW5uZXIgPSBfZWZmZWN0LnJ1bi5iaW5kKF9lZmZlY3QpO1xyXG4gICAgcnVubmVyLmVmZmVjdCA9IF9lZmZlY3Q7XHJcbiAgICByZXR1cm4gcnVubmVyO1xyXG59XHJcbmZ1bmN0aW9uIHN0b3AocnVubmVyKSB7XHJcbiAgICBydW5uZXIuZWZmZWN0LnN0b3AoKTtcclxufVxyXG5sZXQgc2hvdWxkVHJhY2sgPSB0cnVlO1xyXG5jb25zdCB0cmFja1N0YWNrID0gW107XHJcbmZ1bmN0aW9uIHBhdXNlVHJhY2tpbmcoKSB7XHJcbiAgICB0cmFja1N0YWNrLnB1c2goc2hvdWxkVHJhY2spO1xyXG4gICAgc2hvdWxkVHJhY2sgPSBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBlbmFibGVUcmFja2luZygpIHtcclxuICAgIHRyYWNrU3RhY2sucHVzaChzaG91bGRUcmFjayk7XHJcbiAgICBzaG91bGRUcmFjayA9IHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcmVzZXRUcmFja2luZygpIHtcclxuICAgIGNvbnN0IGxhc3QgPSB0cmFja1N0YWNrLnBvcCgpO1xyXG4gICAgc2hvdWxkVHJhY2sgPSBsYXN0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogbGFzdDtcclxufVxyXG5mdW5jdGlvbiB0cmFjayh0YXJnZXQsIHR5cGUsIGtleSkge1xyXG4gICAgaWYgKHNob3VsZFRyYWNrICYmIGFjdGl2ZUVmZmVjdCkge1xyXG4gICAgICAgIGxldCBkZXBzTWFwID0gdGFyZ2V0TWFwLmdldCh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghZGVwc01hcCkge1xyXG4gICAgICAgICAgICB0YXJnZXRNYXAuc2V0KHRhcmdldCwgKGRlcHNNYXAgPSBuZXcgTWFwKCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRlcCA9IGRlcHNNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgaWYgKCFkZXApIHtcclxuICAgICAgICAgICAgZGVwc01hcC5zZXQoa2V5LCAoZGVwID0gY3JlYXRlRGVwKCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXZlbnRJbmZvID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgID8geyBlZmZlY3Q6IGFjdGl2ZUVmZmVjdCwgdGFyZ2V0LCB0eXBlLCBrZXkgfVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0cmFja0VmZmVjdHMoZGVwLCBldmVudEluZm8pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyYWNrRWZmZWN0cyhkZXAsIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pIHtcclxuICAgIGxldCBzaG91bGRUcmFjayA9IGZhbHNlO1xyXG4gICAgaWYgKGVmZmVjdFRyYWNrRGVwdGggPD0gbWF4TWFya2VyQml0cykge1xyXG4gICAgICAgIGlmICghbmV3VHJhY2tlZChkZXApKSB7XHJcbiAgICAgICAgICAgIGRlcC5uIHw9IHRyYWNrT3BCaXQ7IC8vIHNldCBuZXdseSB0cmFja2VkXHJcbiAgICAgICAgICAgIHNob3VsZFRyYWNrID0gIXdhc1RyYWNrZWQoZGVwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBGdWxsIGNsZWFudXAgbW9kZS5cclxuICAgICAgICBzaG91bGRUcmFjayA9ICFkZXAuaGFzKGFjdGl2ZUVmZmVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2hvdWxkVHJhY2spIHtcclxuICAgICAgICBkZXAuYWRkKGFjdGl2ZUVmZmVjdCk7XHJcbiAgICAgICAgYWN0aXZlRWZmZWN0LmRlcHMucHVzaChkZXApO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgYWN0aXZlRWZmZWN0Lm9uVHJhY2spIHtcclxuICAgICAgICAgICAgYWN0aXZlRWZmZWN0Lm9uVHJhY2soT2JqZWN0LmFzc2lnbih7IGVmZmVjdDogYWN0aXZlRWZmZWN0IH0sIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdHJpZ2dlcih0YXJnZXQsIHR5cGUsIGtleSwgbmV3VmFsdWUsIG9sZFZhbHVlLCBvbGRUYXJnZXQpIHtcclxuICAgIGNvbnN0IGRlcHNNYXAgPSB0YXJnZXRNYXAuZ2V0KHRhcmdldCk7XHJcbiAgICBpZiAoIWRlcHNNYXApIHtcclxuICAgICAgICAvLyBuZXZlciBiZWVuIHRyYWNrZWRcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGVwcyA9IFtdO1xyXG4gICAgaWYgKHR5cGUgPT09IFwiY2xlYXJcIiAvKiBUcmlnZ2VyT3BUeXBlcy5DTEVBUiAqLykge1xyXG4gICAgICAgIC8vIGNvbGxlY3Rpb24gYmVpbmcgY2xlYXJlZFxyXG4gICAgICAgIC8vIHRyaWdnZXIgYWxsIGVmZmVjdHMgZm9yIHRhcmdldFxyXG4gICAgICAgIGRlcHMgPSBbLi4uZGVwc01hcC52YWx1ZXMoKV07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChrZXkgPT09ICdsZW5ndGgnICYmIGlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgIGRlcHNNYXAuZm9yRWFjaCgoZGVwLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2xlbmd0aCcgfHwga2V5ID49IG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gc2NoZWR1bGUgcnVucyBmb3IgU0VUIHwgQUREIHwgREVMRVRFXHJcbiAgICAgICAgaWYgKGtleSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChrZXkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWxzbyBydW4gZm9yIGl0ZXJhdGlvbiBrZXkgb24gQUREIHwgREVMRVRFIHwgTWFwLlNFVFxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwc01hcC5nZXQoSVRFUkFURV9LRVkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwc01hcC5nZXQoTUFQX0tFWV9JVEVSQVRFX0tFWSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50ZWdlcktleShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV3IGluZGV4IGFkZGVkIHRvIGFycmF5IC0+IGxlbmd0aCBjaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KCdsZW5ndGgnKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRlbGV0ZVwiIC8qIFRyaWdnZXJPcFR5cGVzLkRFTEVURSAqLzpcclxuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWFwKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KE1BUF9LRVlfSVRFUkFURV9LRVkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLzpcclxuICAgICAgICAgICAgICAgIGlmIChpc01hcCh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBldmVudEluZm8gPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICA/IHsgdGFyZ2V0LCB0eXBlLCBrZXksIG5ld1ZhbHVlLCBvbGRWYWx1ZSwgb2xkVGFyZ2V0IH1cclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGlmIChkZXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGlmIChkZXBzWzBdKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHRyaWdnZXJFZmZlY3RzKGRlcHNbMF0sIGV2ZW50SW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRWZmZWN0cyhkZXBzWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdHMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXApIHtcclxuICAgICAgICAgICAgICAgIGVmZmVjdHMucHVzaCguLi5kZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVmZmVjdHMoY3JlYXRlRGVwKGVmZmVjdHMpLCBldmVudEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVmZmVjdHMoY3JlYXRlRGVwKGVmZmVjdHMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdHJpZ2dlckVmZmVjdHMoZGVwLCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKSB7XHJcbiAgICAvLyBzcHJlYWQgaW50byBhcnJheSBmb3Igc3RhYmlsaXphdGlvblxyXG4gICAgY29uc3QgZWZmZWN0cyA9IGlzQXJyYXkoZGVwKSA/IGRlcCA6IFsuLi5kZXBdO1xyXG4gICAgZm9yIChjb25zdCBlZmZlY3Qgb2YgZWZmZWN0cykge1xyXG4gICAgICAgIGlmIChlZmZlY3QuY29tcHV0ZWQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVmZmVjdChlZmZlY3QsIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIGVmZmVjdHMpIHtcclxuICAgICAgICBpZiAoIWVmZmVjdC5jb21wdXRlZCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWZmZWN0KGVmZmVjdCwgZGVidWdnZXJFdmVudEV4dHJhSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJFZmZlY3QoZWZmZWN0LCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKSB7XHJcbiAgICBpZiAoZWZmZWN0ICE9PSBhY3RpdmVFZmZlY3QgfHwgZWZmZWN0LmFsbG93UmVjdXJzZSkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgZWZmZWN0Lm9uVHJpZ2dlcikge1xyXG4gICAgICAgICAgICBlZmZlY3Qub25UcmlnZ2VyKGV4dGVuZCh7IGVmZmVjdCB9LCBkZWJ1Z2dlckV2ZW50RXh0cmFJbmZvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlZmZlY3Quc2NoZWR1bGVyKSB7XHJcbiAgICAgICAgICAgIGVmZmVjdC5zY2hlZHVsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVmZmVjdC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY29uc3QgaXNOb25UcmFja2FibGVLZXlzID0gLyojX19QVVJFX18qLyBtYWtlTWFwKGBfX3Byb3RvX18sX192X2lzUmVmLF9faXNWdWVgKTtcclxuY29uc3QgYnVpbHRJblN5bWJvbHMgPSBuZXcgU2V0KFxyXG4vKiNfX1BVUkVfXyovXHJcbk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbClcclxuICAgIC8vIGlvczEwLnggT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSBjYW4gZW51bWVyYXRlICdhcmd1bWVudHMnIGFuZCAnY2FsbGVyJ1xyXG4gICAgLy8gYnV0IGFjY2Vzc2luZyB0aGVtIG9uIFN5bWJvbCBsZWFkcyB0byBUeXBlRXJyb3IgYmVjYXVzZSBTeW1ib2wgaXMgYSBzdHJpY3QgbW9kZVxyXG4gICAgLy8gZnVuY3Rpb25cclxuICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2FyZ3VtZW50cycgJiYga2V5ICE9PSAnY2FsbGVyJylcclxuICAgIC5tYXAoa2V5ID0+IFN5bWJvbFtrZXldKVxyXG4gICAgLmZpbHRlcihpc1N5bWJvbCkpO1xyXG5jb25zdCBnZXQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUdldHRlcigpO1xyXG5jb25zdCBzaGFsbG93R2V0ID0gLyojX19QVVJFX18qLyBjcmVhdGVHZXR0ZXIoZmFsc2UsIHRydWUpO1xyXG5jb25zdCByZWFkb25seUdldCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlR2V0dGVyKHRydWUpO1xyXG5jb25zdCBzaGFsbG93UmVhZG9ubHlHZXQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUdldHRlcih0cnVlLCB0cnVlKTtcclxuY29uc3QgYXJyYXlJbnN0cnVtZW50YXRpb25zID0gLyojX19QVVJFX18qLyBjcmVhdGVBcnJheUluc3RydW1lbnRhdGlvbnMoKTtcclxuZnVuY3Rpb24gY3JlYXRlQXJyYXlJbnN0cnVtZW50YXRpb25zKCkge1xyXG4gICAgY29uc3QgaW5zdHJ1bWVudGF0aW9ucyA9IHt9O1xyXG4gICAgWydpbmNsdWRlcycsICdpbmRleE9mJywgJ2xhc3RJbmRleE9mJ10uZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGluc3RydW1lbnRhdGlvbnNba2V5XSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHRvUmF3KHRoaXMpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFjayhhcnIsIFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLywgaSArICcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB3ZSBydW4gdGhlIG1ldGhvZCB1c2luZyB0aGUgb3JpZ2luYWwgYXJncyBmaXJzdCAod2hpY2ggbWF5IGJlIHJlYWN0aXZlKVxyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhcnJba2V5XSguLi5hcmdzKTtcclxuICAgICAgICAgICAgaWYgKHJlcyA9PT0gLTEgfHwgcmVzID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhhdCBkaWRuJ3Qgd29yaywgcnVuIGl0IGFnYWluIHVzaW5nIHJhdyB2YWx1ZXMuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyW2tleV0oLi4uYXJncy5tYXAodG9SYXcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICBbJ3B1c2gnLCAncG9wJywgJ3NoaWZ0JywgJ3Vuc2hpZnQnLCAnc3BsaWNlJ10uZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGluc3RydW1lbnRhdGlvbnNba2V5XSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgIHBhdXNlVHJhY2tpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gdG9SYXcodGhpcylba2V5XS5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgICAgICAgICAgcmVzZXRUcmFja2luZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpbnN0cnVtZW50YXRpb25zO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUdldHRlcihpc1JlYWRvbmx5ID0gZmFsc2UsIHNoYWxsb3cgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWN0aXZlXCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFDVElWRSAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gIWlzUmVhZG9ubHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUmVhZG9ubHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaGFsbG93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovICYmXHJcbiAgICAgICAgICAgIHJlY2VpdmVyID09PVxyXG4gICAgICAgICAgICAgICAgKGlzUmVhZG9ubHlcclxuICAgICAgICAgICAgICAgICAgICA/IHNoYWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzaGFsbG93UmVhZG9ubHlNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZWFkb25seU1hcFxyXG4gICAgICAgICAgICAgICAgICAgIDogc2hhbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNoYWxsb3dSZWFjdGl2ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlYWN0aXZlTWFwKS5nZXQodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YXJnZXRJc0FycmF5ID0gaXNBcnJheSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghaXNSZWFkb25seSAmJiB0YXJnZXRJc0FycmF5ICYmIGhhc093bihhcnJheUluc3RydW1lbnRhdGlvbnMsIGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KGFycmF5SW5zdHJ1bWVudGF0aW9ucywga2V5LCByZWNlaXZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XHJcbiAgICAgICAgaWYgKGlzU3ltYm9sKGtleSkgPyBidWlsdEluU3ltYm9scy5oYXMoa2V5KSA6IGlzTm9uVHJhY2thYmxlS2V5cyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNSZWFkb25seSkge1xyXG4gICAgICAgICAgICB0cmFjayh0YXJnZXQsIFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLywga2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWxsb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUmVmKHJlcykpIHtcclxuICAgICAgICAgICAgLy8gcmVmIHVud3JhcHBpbmcgLSBza2lwIHVud3JhcCBmb3IgQXJyYXkgKyBpbnRlZ2VyIGtleS5cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldElzQXJyYXkgJiYgaXNJbnRlZ2VyS2V5KGtleSkgPyByZXMgOiByZXMudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc09iamVjdChyZXMpKSB7XHJcbiAgICAgICAgICAgIC8vIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgaW50byBhIHByb3h5IGFzIHdlbGwuIHdlIGRvIHRoZSBpc09iamVjdCBjaGVja1xyXG4gICAgICAgICAgICAvLyBoZXJlIHRvIGF2b2lkIGludmFsaWQgdmFsdWUgd2FybmluZy4gQWxzbyBuZWVkIHRvIGxhenkgYWNjZXNzIHJlYWRvbmx5XHJcbiAgICAgICAgICAgIC8vIGFuZCByZWFjdGl2ZSBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kuXHJcbiAgICAgICAgICAgIHJldHVybiBpc1JlYWRvbmx5ID8gcmVhZG9ubHkocmVzKSA6IHJlYWN0aXZlKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9O1xyXG59XHJcbmNvbnN0IHNldCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlU2V0dGVyKCk7XHJcbmNvbnN0IHNoYWxsb3dTZXQgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZVNldHRlcih0cnVlKTtcclxuZnVuY3Rpb24gY3JlYXRlU2V0dGVyKHNoYWxsb3cgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNldCh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSB7XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgaWYgKGlzUmVhZG9ubHkob2xkVmFsdWUpICYmIGlzUmVmKG9sZFZhbHVlKSAmJiAhaXNSZWYodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgICAgIGlmICghaXNTaGFsbG93KHZhbHVlKSAmJiAhaXNSZWFkb25seSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gdG9SYXcob2xkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b1Jhdyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0FycmF5KHRhcmdldCkgJiYgaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYWRLZXkgPSBpc0FycmF5KHRhcmdldCkgJiYgaXNJbnRlZ2VyS2V5KGtleSlcclxuICAgICAgICAgICAgPyBOdW1iZXIoa2V5KSA8IHRhcmdldC5sZW5ndGhcclxuICAgICAgICAgICAgOiBoYXNPd24odGFyZ2V0LCBrZXkpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpO1xyXG4gICAgICAgIC8vIGRvbid0IHRyaWdnZXIgaWYgdGFyZ2V0IGlzIHNvbWV0aGluZyB1cCBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG9mIG9yaWdpbmFsXHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdG9SYXcocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgICAgIGlmICghaGFkS2V5KSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8sIGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NoYW5nZWQodmFsdWUsIG9sZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLCBrZXksIHZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBrZXkpIHtcclxuICAgIGNvbnN0IGhhZEtleSA9IGhhc093bih0YXJnZXQsIGtleSk7XHJcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIGtleSk7XHJcbiAgICBpZiAocmVzdWx0ICYmIGhhZEtleSkge1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcImRlbGV0ZVwiIC8qIFRyaWdnZXJPcFR5cGVzLkRFTEVURSAqLywga2V5LCB1bmRlZmluZWQsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gaGFzKHRhcmdldCwga2V5KSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0Lmhhcyh0YXJnZXQsIGtleSk7XHJcbiAgICBpZiAoIWlzU3ltYm9sKGtleSkgfHwgIWJ1aWx0SW5TeW1ib2xzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgdHJhY2sodGFyZ2V0LCBcImhhc1wiIC8qIFRyYWNrT3BUeXBlcy5IQVMgKi8sIGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XHJcbiAgICB0cmFjayh0YXJnZXQsIFwiaXRlcmF0ZVwiIC8qIFRyYWNrT3BUeXBlcy5JVEVSQVRFICovLCBpc0FycmF5KHRhcmdldCkgPyAnbGVuZ3RoJyA6IElURVJBVEVfS0VZKTtcclxuICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcclxufVxyXG5jb25zdCBtdXRhYmxlSGFuZGxlcnMgPSB7XHJcbiAgICBnZXQsXHJcbiAgICBzZXQsXHJcbiAgICBkZWxldGVQcm9wZXJ0eSxcclxuICAgIGhhcyxcclxuICAgIG93bktleXNcclxufTtcclxuY29uc3QgcmVhZG9ubHlIYW5kbGVycyA9IHtcclxuICAgIGdldDogcmVhZG9ubHlHZXQsXHJcbiAgICBzZXQodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYFNldCBvcGVyYXRpb24gb24ga2V5IFwiJHtTdHJpbmcoa2V5KX1cIiBmYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5gLCB0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIGtleSkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgRGVsZXRlIG9wZXJhdGlvbiBvbiBrZXkgXCIke1N0cmluZyhrZXkpfVwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LmAsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBzaGFsbG93UmVhY3RpdmVIYW5kbGVycyA9IC8qI19fUFVSRV9fKi8gZXh0ZW5kKHt9LCBtdXRhYmxlSGFuZGxlcnMsIHtcclxuICAgIGdldDogc2hhbGxvd0dldCxcclxuICAgIHNldDogc2hhbGxvd1NldFxyXG59KTtcclxuLy8gUHJvcHMgaGFuZGxlcnMgYXJlIHNwZWNpYWwgaW4gdGhlIHNlbnNlIHRoYXQgaXQgc2hvdWxkIG5vdCB1bndyYXAgdG9wLWxldmVsXHJcbi8vIHJlZnMgKGluIG9yZGVyIHRvIGFsbG93IHJlZnMgdG8gYmUgZXhwbGljaXRseSBwYXNzZWQgZG93biksIGJ1dCBzaG91bGRcclxuLy8gcmV0YWluIHRoZSByZWFjdGl2aXR5IG9mIHRoZSBub3JtYWwgcmVhZG9ubHkgb2JqZWN0LlxyXG5jb25zdCBzaGFsbG93UmVhZG9ubHlIYW5kbGVycyA9IC8qI19fUFVSRV9fKi8gZXh0ZW5kKHt9LCByZWFkb25seUhhbmRsZXJzLCB7XHJcbiAgICBnZXQ6IHNoYWxsb3dSZWFkb25seUdldFxyXG59KTtcblxuY29uc3QgdG9TaGFsbG93ID0gKHZhbHVlKSA9PiB2YWx1ZTtcclxuY29uc3QgZ2V0UHJvdG8gPSAodikgPT4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZih2KTtcclxuZnVuY3Rpb24gZ2V0JDEodGFyZ2V0LCBrZXksIGlzUmVhZG9ubHkgPSBmYWxzZSwgaXNTaGFsbG93ID0gZmFsc2UpIHtcclxuICAgIC8vICMxNzcyOiByZWFkb25seShyZWFjdGl2ZShNYXApKSBzaG91bGQgcmV0dXJuIHJlYWRvbmx5ICsgcmVhY3RpdmUgdmVyc2lvblxyXG4gICAgLy8gb2YgdGhlIHZhbHVlXHJcbiAgICB0YXJnZXQgPSB0YXJnZXRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xyXG4gICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcclxuICAgIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XHJcbiAgICBpZiAoIWlzUmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAoa2V5ICE9PSByYXdLZXkpIHtcclxuICAgICAgICAgICAgdHJhY2socmF3VGFyZ2V0LCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLCByYXdLZXkpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBoYXMgfSA9IGdldFByb3RvKHJhd1RhcmdldCk7XHJcbiAgICBjb25zdCB3cmFwID0gaXNTaGFsbG93ID8gdG9TaGFsbG93IDogaXNSZWFkb25seSA/IHRvUmVhZG9ubHkgOiB0b1JlYWN0aXZlO1xyXG4gICAgaWYgKGhhcy5jYWxsKHJhd1RhcmdldCwga2V5KSkge1xyXG4gICAgICAgIHJldHVybiB3cmFwKHRhcmdldC5nZXQoa2V5KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChoYXMuY2FsbChyYXdUYXJnZXQsIHJhd0tleSkpIHtcclxuICAgICAgICByZXR1cm4gd3JhcCh0YXJnZXQuZ2V0KHJhd0tleSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFyZ2V0ICE9PSByYXdUYXJnZXQpIHtcclxuICAgICAgICAvLyAjMzYwMiByZWFkb25seShyZWFjdGl2ZShNYXApKVxyXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBuZXN0ZWQgcmVhY3RpdmUgYE1hcGAgY2FuIGRvIHRyYWNraW5nIGZvciBpdHNlbGZcclxuICAgICAgICB0YXJnZXQuZ2V0KGtleSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaGFzJDEoa2V5LCBpc1JlYWRvbmx5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xyXG4gICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcclxuICAgIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XHJcbiAgICBpZiAoIWlzUmVhZG9ubHkpIHtcclxuICAgICAgICBpZiAoa2V5ICE9PSByYXdLZXkpIHtcclxuICAgICAgICAgICAgdHJhY2socmF3VGFyZ2V0LCBcImhhc1wiIC8qIFRyYWNrT3BUeXBlcy5IQVMgKi8sIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJoYXNcIiAvKiBUcmFja09wVHlwZXMuSEFTICovLCByYXdLZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleSA9PT0gcmF3S2V5XHJcbiAgICAgICAgPyB0YXJnZXQuaGFzKGtleSlcclxuICAgICAgICA6IHRhcmdldC5oYXMoa2V5KSB8fCB0YXJnZXQuaGFzKHJhd0tleSk7XHJcbn1cclxuZnVuY3Rpb24gc2l6ZSh0YXJnZXQsIGlzUmVhZG9ubHkgPSBmYWxzZSkge1xyXG4gICAgdGFyZ2V0ID0gdGFyZ2V0W1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXTtcclxuICAgICFpc1JlYWRvbmx5ICYmIHRyYWNrKHRvUmF3KHRhcmdldCksIFwiaXRlcmF0ZVwiIC8qIFRyYWNrT3BUeXBlcy5JVEVSQVRFICovLCBJVEVSQVRFX0tFWSk7XHJcbiAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCAnc2l6ZScsIHRhcmdldCk7XHJcbn1cclxuZnVuY3Rpb24gYWRkKHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9IHRvUmF3KHZhbHVlKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xyXG4gICAgY29uc3QgcHJvdG8gPSBnZXRQcm90byh0YXJnZXQpO1xyXG4gICAgY29uc3QgaGFkS2V5ID0gcHJvdG8uaGFzLmNhbGwodGFyZ2V0LCB2YWx1ZSk7XHJcbiAgICBpZiAoIWhhZEtleSkge1xyXG4gICAgICAgIHRhcmdldC5hZGQodmFsdWUpO1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcImFkZFwiIC8qIFRyaWdnZXJPcFR5cGVzLkFERCAqLywgdmFsdWUsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59XHJcbmZ1bmN0aW9uIHNldCQxKGtleSwgdmFsdWUpIHtcclxuICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdG9SYXcodGhpcyk7XHJcbiAgICBjb25zdCB7IGhhcywgZ2V0IH0gPSBnZXRQcm90byh0YXJnZXQpO1xyXG4gICAgbGV0IGhhZEtleSA9IGhhcy5jYWxsKHRhcmdldCwga2V5KTtcclxuICAgIGlmICghaGFkS2V5KSB7XHJcbiAgICAgICAga2V5ID0gdG9SYXcoa2V5KTtcclxuICAgICAgICBoYWRLZXkgPSBoYXMuY2FsbCh0YXJnZXQsIGtleSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjaGVja0lkZW50aXR5S2V5cyh0YXJnZXQsIGhhcywga2V5KTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9sZFZhbHVlID0gZ2V0LmNhbGwodGFyZ2V0LCBrZXkpO1xyXG4gICAgdGFyZ2V0LnNldChrZXksIHZhbHVlKTtcclxuICAgIGlmICghaGFkS2V5KSB7XHJcbiAgICAgICAgdHJpZ2dlcih0YXJnZXQsIFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovLCBrZXksIHZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGhhc0NoYW5nZWQodmFsdWUsIG9sZFZhbHVlKSkge1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLywga2V5LCB2YWx1ZSwgb2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn1cclxuZnVuY3Rpb24gZGVsZXRlRW50cnkoa2V5KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0b1Jhdyh0aGlzKTtcclxuICAgIGNvbnN0IHsgaGFzLCBnZXQgfSA9IGdldFByb3RvKHRhcmdldCk7XHJcbiAgICBsZXQgaGFkS2V5ID0gaGFzLmNhbGwodGFyZ2V0LCBrZXkpO1xyXG4gICAgaWYgKCFoYWRLZXkpIHtcclxuICAgICAgICBrZXkgPSB0b1JhdyhrZXkpO1xyXG4gICAgICAgIGhhZEtleSA9IGhhcy5jYWxsKHRhcmdldCwga2V5KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGNoZWNrSWRlbnRpdHlLZXlzKHRhcmdldCwgaGFzLCBrZXkpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2xkVmFsdWUgPSBnZXQgPyBnZXQuY2FsbCh0YXJnZXQsIGtleSkgOiB1bmRlZmluZWQ7XHJcbiAgICAvLyBmb3J3YXJkIHRoZSBvcGVyYXRpb24gYmVmb3JlIHF1ZXVlaW5nIHJlYWN0aW9uc1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdGFyZ2V0LmRlbGV0ZShrZXkpO1xyXG4gICAgaWYgKGhhZEtleSkge1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcImRlbGV0ZVwiIC8qIFRyaWdnZXJPcFR5cGVzLkRFTEVURSAqLywga2V5LCB1bmRlZmluZWQsIG9sZFZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gY2xlYXIoKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0b1Jhdyh0aGlzKTtcclxuICAgIGNvbnN0IGhhZEl0ZW1zID0gdGFyZ2V0LnNpemUgIT09IDA7XHJcbiAgICBjb25zdCBvbGRUYXJnZXQgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICA/IGlzTWFwKHRhcmdldClcclxuICAgICAgICAgICAgPyBuZXcgTWFwKHRhcmdldClcclxuICAgICAgICAgICAgOiBuZXcgU2V0KHRhcmdldClcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIC8vIGZvcndhcmQgdGhlIG9wZXJhdGlvbiBiZWZvcmUgcXVldWVpbmcgcmVhY3Rpb25zXHJcbiAgICBjb25zdCByZXN1bHQgPSB0YXJnZXQuY2xlYXIoKTtcclxuICAgIGlmIChoYWRJdGVtcykge1xyXG4gICAgICAgIHRyaWdnZXIodGFyZ2V0LCBcImNsZWFyXCIgLyogVHJpZ2dlck9wVHlwZXMuQ0xFQVIgKi8sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBvbGRUYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVGb3JFYWNoKGlzUmVhZG9ubHksIGlzU2hhbGxvdykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICBjb25zdCBvYnNlcnZlZCA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JzZXJ2ZWRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xyXG4gICAgICAgIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgd3JhcCA9IGlzU2hhbGxvdyA/IHRvU2hhbGxvdyA6IGlzUmVhZG9ubHkgPyB0b1JlYWRvbmx5IDogdG9SZWFjdGl2ZTtcclxuICAgICAgICAhaXNSZWFkb25seSAmJiB0cmFjayhyYXdUYXJnZXQsIFwiaXRlcmF0ZVwiIC8qIFRyYWNrT3BUeXBlcy5JVEVSQVRFICovLCBJVEVSQVRFX0tFWSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGltcG9ydGFudDogbWFrZSBzdXJlIHRoZSBjYWxsYmFjayBpc1xyXG4gICAgICAgICAgICAvLyAxLiBpbnZva2VkIHdpdGggdGhlIHJlYWN0aXZlIG1hcCBhcyBgdGhpc2AgYW5kIDNyZCBhcmdcclxuICAgICAgICAgICAgLy8gMi4gdGhlIHZhbHVlIHJlY2VpdmVkIHNob3VsZCBiZSBhIGNvcnJlc3BvbmRpbmcgcmVhY3RpdmUvcmVhZG9ubHkuXHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHdyYXAodmFsdWUpLCB3cmFwKGtleSksIG9ic2VydmVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSXRlcmFibGVNZXRob2QobWV0aG9kLCBpc1JlYWRvbmx5LCBpc1NoYWxsb3cpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xyXG4gICAgICAgIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNNYXAgPSBpc01hcChyYXdUYXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IGlzUGFpciA9IG1ldGhvZCA9PT0gJ2VudHJpZXMnIHx8IChtZXRob2QgPT09IFN5bWJvbC5pdGVyYXRvciAmJiB0YXJnZXRJc01hcCk7XHJcbiAgICAgICAgY29uc3QgaXNLZXlPbmx5ID0gbWV0aG9kID09PSAna2V5cycgJiYgdGFyZ2V0SXNNYXA7XHJcbiAgICAgICAgY29uc3QgaW5uZXJJdGVyYXRvciA9IHRhcmdldFttZXRob2RdKC4uLmFyZ3MpO1xyXG4gICAgICAgIGNvbnN0IHdyYXAgPSBpc1NoYWxsb3cgPyB0b1NoYWxsb3cgOiBpc1JlYWRvbmx5ID8gdG9SZWFkb25seSA6IHRvUmVhY3RpdmU7XHJcbiAgICAgICAgIWlzUmVhZG9ubHkgJiZcclxuICAgICAgICAgICAgdHJhY2socmF3VGFyZ2V0LCBcIml0ZXJhdGVcIiAvKiBUcmFja09wVHlwZXMuSVRFUkFURSAqLywgaXNLZXlPbmx5ID8gTUFQX0tFWV9JVEVSQVRFX0tFWSA6IElURVJBVEVfS0VZKTtcclxuICAgICAgICAvLyByZXR1cm4gYSB3cmFwcGVkIGl0ZXJhdG9yIHdoaWNoIHJldHVybnMgb2JzZXJ2ZWQgdmVyc2lvbnMgb2YgdGhlXHJcbiAgICAgICAgLy8gdmFsdWVzIGVtaXR0ZWQgZnJvbSB0aGUgcmVhbCBpdGVyYXRvclxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdG9yIHByb3RvY29sXHJcbiAgICAgICAgICAgIG5leHQoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBpbm5lckl0ZXJhdG9yLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7IHZhbHVlLCBkb25lIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlzUGFpciA/IFt3cmFwKHZhbHVlWzBdKSwgd3JhcCh2YWx1ZVsxXSldIDogd3JhcCh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBpdGVyYWJsZSBwcm90b2NvbFxyXG4gICAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUmVhZG9ubHlNZXRob2QodHlwZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhcmdzWzBdID8gYG9uIGtleSBcIiR7YXJnc1swXX1cIiBgIDogYGA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtjYXBpdGFsaXplKHR5cGUpfSBvcGVyYXRpb24gJHtrZXl9ZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuYCwgdG9SYXcodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8gPyBmYWxzZSA6IHRoaXM7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvbnMoKSB7XHJcbiAgICBjb25zdCBtdXRhYmxlSW5zdHJ1bWVudGF0aW9ucyA9IHtcclxuICAgICAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXQkMSh0aGlzLCBrZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0IHNpemUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaXplKHRoaXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFzOiBoYXMkMSxcclxuICAgICAgICBhZGQsXHJcbiAgICAgICAgc2V0OiBzZXQkMSxcclxuICAgICAgICBkZWxldGU6IGRlbGV0ZUVudHJ5LFxyXG4gICAgICAgIGNsZWFyLFxyXG4gICAgICAgIGZvckVhY2g6IGNyZWF0ZUZvckVhY2goZmFsc2UsIGZhbHNlKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNoYWxsb3dJbnN0cnVtZW50YXRpb25zID0ge1xyXG4gICAgICAgIGdldChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldCQxKHRoaXMsIGtleSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0IHNpemUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaXplKHRoaXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFzOiBoYXMkMSxcclxuICAgICAgICBhZGQsXHJcbiAgICAgICAgc2V0OiBzZXQkMSxcclxuICAgICAgICBkZWxldGU6IGRlbGV0ZUVudHJ5LFxyXG4gICAgICAgIGNsZWFyLFxyXG4gICAgICAgIGZvckVhY2g6IGNyZWF0ZUZvckVhY2goZmFsc2UsIHRydWUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zID0ge1xyXG4gICAgICAgIGdldChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldCQxKHRoaXMsIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQgc2l6ZSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNpemUodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBoYXMkMS5jYWxsKHRoaXMsIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovKSxcclxuICAgICAgICBzZXQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovKSxcclxuICAgICAgICBkZWxldGU6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovKSxcclxuICAgICAgICBjbGVhcjogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJjbGVhclwiIC8qIFRyaWdnZXJPcFR5cGVzLkNMRUFSICovKSxcclxuICAgICAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKHRydWUsIGZhbHNlKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnMgPSB7XHJcbiAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEodGhpcywga2V5LCB0cnVlLCB0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldCBzaXplKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2l6ZSh0aGlzLCB0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhcyhrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhhcyQxLmNhbGwodGhpcywga2V5LCB0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZDogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8pLFxyXG4gICAgICAgIHNldDogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8pLFxyXG4gICAgICAgIGRlbGV0ZTogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8pLFxyXG4gICAgICAgIGNsZWFyOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImNsZWFyXCIgLyogVHJpZ2dlck9wVHlwZXMuQ0xFQVIgKi8pLFxyXG4gICAgICAgIGZvckVhY2g6IGNyZWF0ZUZvckVhY2godHJ1ZSwgdHJ1ZSlcclxuICAgIH07XHJcbiAgICBjb25zdCBpdGVyYXRvck1ldGhvZHMgPSBbJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnLCBTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaXRlcmF0b3JNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcclxuICAgICAgICBtdXRhYmxlSW5zdHJ1bWVudGF0aW9uc1ttZXRob2RdID0gY3JlYXRlSXRlcmFibGVNZXRob2QobWV0aG9kLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIHJlYWRvbmx5SW5zdHJ1bWVudGF0aW9uc1ttZXRob2RdID0gY3JlYXRlSXRlcmFibGVNZXRob2QobWV0aG9kLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgc2hhbGxvd0luc3RydW1lbnRhdGlvbnNbbWV0aG9kXSA9IGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnNbbWV0aG9kXSA9IGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgbXV0YWJsZUluc3RydW1lbnRhdGlvbnMsXHJcbiAgICAgICAgcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zLFxyXG4gICAgICAgIHNoYWxsb3dJbnN0cnVtZW50YXRpb25zLFxyXG4gICAgICAgIHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnNcclxuICAgIF07XHJcbn1cclxuY29uc3QgW211dGFibGVJbnN0cnVtZW50YXRpb25zLCByZWFkb25seUluc3RydW1lbnRhdGlvbnMsIHNoYWxsb3dJbnN0cnVtZW50YXRpb25zLCBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zXSA9IC8qICNfX1BVUkVfXyovIGNyZWF0ZUluc3RydW1lbnRhdGlvbnMoKTtcclxuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKGlzUmVhZG9ubHksIHNoYWxsb3cpIHtcclxuICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbnMgPSBzaGFsbG93XHJcbiAgICAgICAgPyBpc1JlYWRvbmx5XHJcbiAgICAgICAgICAgID8gc2hhbGxvd1JlYWRvbmx5SW5zdHJ1bWVudGF0aW9uc1xyXG4gICAgICAgICAgICA6IHNoYWxsb3dJbnN0cnVtZW50YXRpb25zXHJcbiAgICAgICAgOiBpc1JlYWRvbmx5XHJcbiAgICAgICAgICAgID8gcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zXHJcbiAgICAgICAgICAgIDogbXV0YWJsZUluc3RydW1lbnRhdGlvbnM7XHJcbiAgICByZXR1cm4gKHRhcmdldCwga2V5LCByZWNlaXZlcikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwiX192X2lzUmVhY3RpdmVcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQUNUSVZFICovKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhaXNSZWFkb25seTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNSZWFkb25seTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoaGFzT3duKGluc3RydW1lbnRhdGlvbnMsIGtleSkgJiYga2V5IGluIHRhcmdldFxyXG4gICAgICAgICAgICA/IGluc3RydW1lbnRhdGlvbnNcclxuICAgICAgICAgICAgOiB0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xyXG4gICAgfTtcclxufVxyXG5jb25zdCBtdXRhYmxlQ29sbGVjdGlvbkhhbmRsZXJzID0ge1xyXG4gICAgZ2V0OiAvKiNfX1BVUkVfXyovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcihmYWxzZSwgZmFsc2UpXHJcbn07XHJcbmNvbnN0IHNoYWxsb3dDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XHJcbiAgICBnZXQ6IC8qI19fUFVSRV9fKi8gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKGZhbHNlLCB0cnVlKVxyXG59O1xyXG5jb25zdCByZWFkb25seUNvbGxlY3Rpb25IYW5kbGVycyA9IHtcclxuICAgIGdldDogLyojX19QVVJFX18qLyBjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIodHJ1ZSwgZmFsc2UpXHJcbn07XHJcbmNvbnN0IHNoYWxsb3dSZWFkb25seUNvbGxlY3Rpb25IYW5kbGVycyA9IHtcclxuICAgIGdldDogLyojX19QVVJFX18qLyBjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIodHJ1ZSwgdHJ1ZSlcclxufTtcclxuZnVuY3Rpb24gY2hlY2tJZGVudGl0eUtleXModGFyZ2V0LCBoYXMsIGtleSkge1xyXG4gICAgY29uc3QgcmF3S2V5ID0gdG9SYXcoa2V5KTtcclxuICAgIGlmIChyYXdLZXkgIT09IGtleSAmJiBoYXMuY2FsbCh0YXJnZXQsIHJhd0tleSkpIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gdG9SYXdUeXBlKHRhcmdldCk7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBSZWFjdGl2ZSAke3R5cGV9IGNvbnRhaW5zIGJvdGggdGhlIHJhdyBhbmQgcmVhY3RpdmUgYCArXHJcbiAgICAgICAgICAgIGB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBvYmplY3Qke3R5cGUgPT09IGBNYXBgID8gYCBhcyBrZXlzYCA6IGBgfSwgYCArXHJcbiAgICAgICAgICAgIGB3aGljaCBjYW4gbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMuIGAgK1xyXG4gICAgICAgICAgICBgQXZvaWQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gdGhlIHJhdyBhbmQgcmVhY3RpdmUgdmVyc2lvbnMgYCArXHJcbiAgICAgICAgICAgIGBvZiBhbiBvYmplY3QgYW5kIG9ubHkgdXNlIHRoZSByZWFjdGl2ZSB2ZXJzaW9uIGlmIHBvc3NpYmxlLmApO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHJlYWN0aXZlTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3Qgc2hhbGxvd1JlYWN0aXZlTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgcmVhZG9ubHlNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5jb25zdCBzaGFsbG93UmVhZG9ubHlNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5mdW5jdGlvbiB0YXJnZXRUeXBlTWFwKHJhd1R5cGUpIHtcclxuICAgIHN3aXRjaCAocmF3VHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ09iamVjdCc6XHJcbiAgICAgICAgY2FzZSAnQXJyYXknOlxyXG4gICAgICAgICAgICByZXR1cm4gMSAvKiBUYXJnZXRUeXBlLkNPTU1PTiAqLztcclxuICAgICAgICBjYXNlICdNYXAnOlxyXG4gICAgICAgIGNhc2UgJ1NldCc6XHJcbiAgICAgICAgY2FzZSAnV2Vha01hcCc6XHJcbiAgICAgICAgY2FzZSAnV2Vha1NldCc6XHJcbiAgICAgICAgICAgIHJldHVybiAyIC8qIFRhcmdldFR5cGUuQ09MTEVDVElPTiAqLztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gMCAvKiBUYXJnZXRUeXBlLklOVkFMSUQgKi87XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0VGFyZ2V0VHlwZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlW1wiX192X3NraXBcIiAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi9dIHx8ICFPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKVxyXG4gICAgICAgID8gMCAvKiBUYXJnZXRUeXBlLklOVkFMSUQgKi9cclxuICAgICAgICA6IHRhcmdldFR5cGVNYXAodG9SYXdUeXBlKHZhbHVlKSk7XHJcbn1cclxuZnVuY3Rpb24gcmVhY3RpdmUodGFyZ2V0KSB7XHJcbiAgICAvLyBpZiB0cnlpbmcgdG8gb2JzZXJ2ZSBhIHJlYWRvbmx5IHByb3h5LCByZXR1cm4gdGhlIHJlYWRvbmx5IHZlcnNpb24uXHJcbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZU9iamVjdCh0YXJnZXQsIGZhbHNlLCBtdXRhYmxlSGFuZGxlcnMsIG11dGFibGVDb2xsZWN0aW9uSGFuZGxlcnMsIHJlYWN0aXZlTWFwKTtcclxufVxyXG4vKipcclxuICogUmV0dXJuIGEgc2hhbGxvd2x5LXJlYWN0aXZlIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdFxyXG4gKiBsZXZlbCBwcm9wZXJ0aWVzIGFyZSByZWFjdGl2ZS4gSXQgYWxzbyBkb2VzIG5vdCBhdXRvLXVud3JhcCByZWZzIChldmVuIGF0IHRoZVxyXG4gKiByb290IGxldmVsKS5cclxuICovXHJcbmZ1bmN0aW9uIHNoYWxsb3dSZWFjdGl2ZSh0YXJnZXQpIHtcclxuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZU9iamVjdCh0YXJnZXQsIGZhbHNlLCBzaGFsbG93UmVhY3RpdmVIYW5kbGVycywgc2hhbGxvd0NvbGxlY3Rpb25IYW5kbGVycywgc2hhbGxvd1JlYWN0aXZlTWFwKTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWRvbmx5IGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdC4gTm90ZSB0aGUgcmV0dXJuZWQgY29weSBpcyBub3RcclxuICogbWFkZSByZWFjdGl2ZSwgYnV0IGByZWFkb25seWAgY2FuIGJlIGNhbGxlZCBvbiBhbiBhbHJlYWR5IHJlYWN0aXZlIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlT2JqZWN0KHRhcmdldCwgdHJ1ZSwgcmVhZG9ubHlIYW5kbGVycywgcmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMsIHJlYWRvbmx5TWFwKTtcclxufVxyXG4vKipcclxuICogUmV0dXJucyBhIHJlYWN0aXZlLWNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdCBsZXZlbFxyXG4gKiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSwgYW5kIGRvZXMgTk9UIHVud3JhcCByZWZzIG5vciByZWN1cnNpdmVseSBjb252ZXJ0XHJcbiAqIHJldHVybmVkIHByb3BlcnRpZXMuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByb3BzIHByb3h5IG9iamVjdCBmb3Igc3RhdGVmdWwgY29tcG9uZW50cy5cclxuICovXHJcbmZ1bmN0aW9uIHNoYWxsb3dSZWFkb25seSh0YXJnZXQpIHtcclxuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZU9iamVjdCh0YXJnZXQsIHRydWUsIHNoYWxsb3dSZWFkb25seUhhbmRsZXJzLCBzaGFsbG93UmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMsIHNoYWxsb3dSZWFkb25seU1hcCk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVPYmplY3QodGFyZ2V0LCBpc1JlYWRvbmx5LCBiYXNlSGFuZGxlcnMsIGNvbGxlY3Rpb25IYW5kbGVycywgcHJveHlNYXApIHtcclxuICAgIGlmICghaXNPYmplY3QodGFyZ2V0KSkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGB2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogJHtTdHJpbmcodGFyZ2V0KX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIC8vIHRhcmdldCBpcyBhbHJlYWR5IGEgUHJveHksIHJldHVybiBpdC5cclxuICAgIC8vIGV4Y2VwdGlvbjogY2FsbGluZyByZWFkb25seSgpIG9uIGEgcmVhY3RpdmUgb2JqZWN0XHJcbiAgICBpZiAodGFyZ2V0W1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXSAmJlxyXG4gICAgICAgICEoaXNSZWFkb25seSAmJiB0YXJnZXRbXCJfX3ZfaXNSZWFjdGl2ZVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBQ1RJVkUgKi9dKSkge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICAvLyB0YXJnZXQgYWxyZWFkeSBoYXMgY29ycmVzcG9uZGluZyBQcm94eVxyXG4gICAgY29uc3QgZXhpc3RpbmdQcm94eSA9IHByb3h5TWFwLmdldCh0YXJnZXQpO1xyXG4gICAgaWYgKGV4aXN0aW5nUHJveHkpIHtcclxuICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm94eTtcclxuICAgIH1cclxuICAgIC8vIG9ubHkgc3BlY2lmaWMgdmFsdWUgdHlwZXMgY2FuIGJlIG9ic2VydmVkLlxyXG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IGdldFRhcmdldFR5cGUodGFyZ2V0KTtcclxuICAgIGlmICh0YXJnZXRUeXBlID09PSAwIC8qIFRhcmdldFR5cGUuSU5WQUxJRCAqLykge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIHRhcmdldFR5cGUgPT09IDIgLyogVGFyZ2V0VHlwZS5DT0xMRUNUSU9OICovID8gY29sbGVjdGlvbkhhbmRsZXJzIDogYmFzZUhhbmRsZXJzKTtcclxuICAgIHByb3h5TWFwLnNldCh0YXJnZXQsIHByb3h5KTtcclxuICAgIHJldHVybiBwcm94eTtcclxufVxyXG5mdW5jdGlvbiBpc1JlYWN0aXZlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNSZWFkb25seSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWFjdGl2ZSh2YWx1ZVtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL10pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzUmVhY3RpdmVcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQUNUSVZFICovXSk7XHJcbn1cclxuZnVuY3Rpb24gaXNSZWFkb25seSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzUmVhZG9ubHlcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1JFQURPTkxZICovXSk7XHJcbn1cclxuZnVuY3Rpb24gaXNTaGFsbG93KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWVbXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovXSk7XHJcbn1cclxuZnVuY3Rpb24gaXNQcm94eSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWUpIHx8IGlzUmVhZG9ubHkodmFsdWUpO1xyXG59XHJcbmZ1bmN0aW9uIHRvUmF3KG9ic2VydmVkKSB7XHJcbiAgICBjb25zdCByYXcgPSBvYnNlcnZlZCAmJiBvYnNlcnZlZFtcIl9fdl9yYXdcIiAvKiBSZWFjdGl2ZUZsYWdzLlJBVyAqL107XHJcbiAgICByZXR1cm4gcmF3ID8gdG9SYXcocmF3KSA6IG9ic2VydmVkO1xyXG59XHJcbmZ1bmN0aW9uIG1hcmtSYXcodmFsdWUpIHtcclxuICAgIGRlZih2YWx1ZSwgXCJfX3Zfc2tpcFwiIC8qIFJlYWN0aXZlRmxhZ3MuU0tJUCAqLywgdHJ1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuY29uc3QgdG9SZWFjdGl2ZSA9ICh2YWx1ZSkgPT4gaXNPYmplY3QodmFsdWUpID8gcmVhY3RpdmUodmFsdWUpIDogdmFsdWU7XHJcbmNvbnN0IHRvUmVhZG9ubHkgPSAodmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSA/IHJlYWRvbmx5KHZhbHVlKSA6IHZhbHVlO1xuXG5mdW5jdGlvbiB0cmFja1JlZlZhbHVlKHJlZikge1xyXG4gICAgaWYgKHNob3VsZFRyYWNrICYmIGFjdGl2ZUVmZmVjdCkge1xyXG4gICAgICAgIHJlZiA9IHRvUmF3KHJlZik7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB0cmFja0VmZmVjdHMocmVmLmRlcCB8fCAocmVmLmRlcCA9IGNyZWF0ZURlcCgpKSwge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXHJcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFja0VmZmVjdHMocmVmLmRlcCB8fCAocmVmLmRlcCA9IGNyZWF0ZURlcCgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRyaWdnZXJSZWZWYWx1ZShyZWYsIG5ld1ZhbCkge1xyXG4gICAgcmVmID0gdG9SYXcocmVmKTtcclxuICAgIGlmIChyZWYuZGVwKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWZmZWN0cyhyZWYuZGVwLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxyXG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJFZmZlY3RzKHJlZi5kZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1JlZihyKSB7XHJcbiAgICByZXR1cm4gISEociAmJiByLl9fdl9pc1JlZiA9PT0gdHJ1ZSk7XHJcbn1cclxuZnVuY3Rpb24gcmVmKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCBmYWxzZSk7XHJcbn1cclxuZnVuY3Rpb24gc2hhbGxvd1JlZih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgdHJ1ZSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUmVmKHJhd1ZhbHVlLCBzaGFsbG93KSB7XHJcbiAgICBpZiAoaXNSZWYocmF3VmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBSZWZJbXBsKHJhd1ZhbHVlLCBzaGFsbG93KTtcclxufVxyXG5jbGFzcyBSZWZJbXBsIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlLCBfX3ZfaXNTaGFsbG93KSB7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNTaGFsbG93ID0gX192X2lzU2hhbGxvdztcclxuICAgICAgICB0aGlzLmRlcCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcmF3VmFsdWUgPSBfX3ZfaXNTaGFsbG93ID8gdmFsdWUgOiB0b1Jhdyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBfX3ZfaXNTaGFsbG93ID8gdmFsdWUgOiB0b1JlYWN0aXZlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICB0cmFja1JlZlZhbHVlKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcclxuICAgICAgICBjb25zdCB1c2VEaXJlY3RWYWx1ZSA9IHRoaXMuX192X2lzU2hhbGxvdyB8fCBpc1NoYWxsb3cobmV3VmFsKSB8fCBpc1JlYWRvbmx5KG5ld1ZhbCk7XHJcbiAgICAgICAgbmV3VmFsID0gdXNlRGlyZWN0VmFsdWUgPyBuZXdWYWwgOiB0b1JhdyhuZXdWYWwpO1xyXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKG5ld1ZhbCwgdGhpcy5fcmF3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jhd1ZhbHVlID0gbmV3VmFsO1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHVzZURpcmVjdFZhbHVlID8gbmV3VmFsIDogdG9SZWFjdGl2ZShuZXdWYWwpO1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVmVmFsdWUodGhpcywgbmV3VmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdHJpZ2dlclJlZihyZWYpIHtcclxuICAgIHRyaWdnZXJSZWZWYWx1ZShyZWYsIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IHJlZi52YWx1ZSA6IHZvaWQgMCk7XHJcbn1cclxuZnVuY3Rpb24gdW5yZWYocmVmKSB7XHJcbiAgICByZXR1cm4gaXNSZWYocmVmKSA/IHJlZi52YWx1ZSA6IHJlZjtcclxufVxyXG5jb25zdCBzaGFsbG93VW53cmFwSGFuZGxlcnMgPSB7XHJcbiAgICBnZXQ6ICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpID0+IHVucmVmKFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcikpLFxyXG4gICAgc2V0OiAodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGFyZ2V0W2tleV07XHJcbiAgICAgICAgaWYgKGlzUmVmKG9sZFZhbHVlKSAmJiAhaXNSZWYodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gcHJveHlSZWZzKG9iamVjdFdpdGhSZWZzKSB7XHJcbiAgICByZXR1cm4gaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcylcclxuICAgICAgICA/IG9iamVjdFdpdGhSZWZzXHJcbiAgICAgICAgOiBuZXcgUHJveHkob2JqZWN0V2l0aFJlZnMsIHNoYWxsb3dVbndyYXBIYW5kbGVycyk7XHJcbn1cclxuY2xhc3MgQ3VzdG9tUmVmSW1wbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihmYWN0b3J5KSB7XHJcbiAgICAgICAgdGhpcy5kZXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHsgZ2V0LCBzZXQgfSA9IGZhY3RvcnkoKCkgPT4gdHJhY2tSZWZWYWx1ZSh0aGlzKSwgKCkgPT4gdHJpZ2dlclJlZlZhbHVlKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9nZXQgPSBnZXQ7XHJcbiAgICAgICAgdGhpcy5fc2V0ID0gc2V0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoKTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcclxuICAgICAgICB0aGlzLl9zZXQobmV3VmFsKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjdXN0b21SZWYoZmFjdG9yeSkge1xyXG4gICAgcmV0dXJuIG5ldyBDdXN0b21SZWZJbXBsKGZhY3RvcnkpO1xyXG59XHJcbmZ1bmN0aW9uIHRvUmVmcyhvYmplY3QpIHtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzUHJveHkob2JqZWN0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgdG9SZWZzKCkgZXhwZWN0cyBhIHJlYWN0aXZlIG9iamVjdCBidXQgcmVjZWl2ZWQgYSBwbGFpbiBvbmUuYCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldFtrZXldID0gdG9SZWYob2JqZWN0LCBrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5jbGFzcyBPYmplY3RSZWZJbXBsIHtcclxuICAgIGNvbnN0cnVjdG9yKF9vYmplY3QsIF9rZXksIF9kZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9vYmplY3QgPSBfb2JqZWN0O1xyXG4gICAgICAgIHRoaXMuX2tleSA9IF9rZXk7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gX2RlZmF1bHRWYWx1ZTtcclxuICAgICAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5fb2JqZWN0W3RoaXMuX2tleV07XHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gdW5kZWZpbmVkID8gdGhpcy5fZGVmYXVsdFZhbHVlIDogdmFsO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xyXG4gICAgICAgIHRoaXMuX29iamVjdFt0aGlzLl9rZXldID0gbmV3VmFsO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHRvUmVmKG9iamVjdCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIGNvbnN0IHZhbCA9IG9iamVjdFtrZXldO1xyXG4gICAgcmV0dXJuIGlzUmVmKHZhbClcclxuICAgICAgICA/IHZhbFxyXG4gICAgICAgIDogbmV3IE9iamVjdFJlZkltcGwob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSk7XHJcbn1cblxudmFyIF9hO1xyXG5jbGFzcyBDb21wdXRlZFJlZkltcGwge1xyXG4gICAgY29uc3RydWN0b3IoZ2V0dGVyLCBfc2V0dGVyLCBpc1JlYWRvbmx5LCBpc1NTUikge1xyXG4gICAgICAgIHRoaXMuX3NldHRlciA9IF9zZXR0ZXI7XHJcbiAgICAgICAgdGhpcy5kZXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xyXG4gICAgICAgIHRoaXNbX2FdID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KGdldHRlciwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyUmVmVmFsdWUodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVmZmVjdC5jb21wdXRlZCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5lZmZlY3QuYWN0aXZlID0gdGhpcy5fY2FjaGVhYmxlID0gIWlzU1NSO1xyXG4gICAgICAgIHRoaXNbXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi9dID0gaXNSZWFkb25seTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICAvLyB0aGUgY29tcHV0ZWQgcmVmIG1heSBnZXQgd3JhcHBlZCBieSBvdGhlciBwcm94aWVzIGUuZy4gcmVhZG9ubHkoKSAjMzM3NlxyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0b1Jhdyh0aGlzKTtcclxuICAgICAgICB0cmFja1JlZlZhbHVlKHNlbGYpO1xyXG4gICAgICAgIGlmIChzZWxmLl9kaXJ0eSB8fCAhc2VsZi5fY2FjaGVhYmxlKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gc2VsZi5lZmZlY3QucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxmLl92YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZShuZXdWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3NldHRlcihuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuX2EgPSBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLztcclxuZnVuY3Rpb24gY29tcHV0ZWQoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMsIGlzU1NSID0gZmFsc2UpIHtcclxuICAgIGxldCBnZXR0ZXI7XHJcbiAgICBsZXQgc2V0dGVyO1xyXG4gICAgY29uc3Qgb25seUdldHRlciA9IGlzRnVuY3Rpb24oZ2V0dGVyT3JPcHRpb25zKTtcclxuICAgIGlmIChvbmx5R2V0dGVyKSB7XHJcbiAgICAgICAgZ2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zO1xyXG4gICAgICAgIHNldHRlciA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICA/ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgdmFsdWUgaXMgcmVhZG9ubHknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA6IE5PT1A7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBnZXR0ZXIgPSBnZXR0ZXJPck9wdGlvbnMuZ2V0O1xyXG4gICAgICAgIHNldHRlciA9IGdldHRlck9yT3B0aW9ucy5zZXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjUmVmID0gbmV3IENvbXB1dGVkUmVmSW1wbChnZXR0ZXIsIHNldHRlciwgb25seUdldHRlciB8fCAhc2V0dGVyLCBpc1NTUik7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGRlYnVnT3B0aW9ucyAmJiAhaXNTU1IpIHtcclxuICAgICAgICBjUmVmLmVmZmVjdC5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XHJcbiAgICAgICAgY1JlZi5lZmZlY3Qub25UcmlnZ2VyID0gZGVidWdPcHRpb25zLm9uVHJpZ2dlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBjUmVmO1xyXG59XG5cbnZhciBfYSQxO1xyXG5jb25zdCB0aWNrID0gLyojX19QVVJFX18qLyBQcm9taXNlLnJlc29sdmUoKTtcclxuY29uc3QgcXVldWUgPSBbXTtcclxubGV0IHF1ZXVlZCA9IGZhbHNlO1xyXG5jb25zdCBzY2hlZHVsZXIgPSAoZm4pID0+IHtcclxuICAgIHF1ZXVlLnB1c2goZm4pO1xyXG4gICAgaWYgKCFxdWV1ZWQpIHtcclxuICAgICAgICBxdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRpY2sudGhlbihmbHVzaCk7XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGZsdXNoID0gKCkgPT4ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHF1ZXVlW2ldKCk7XHJcbiAgICB9XHJcbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xyXG4gICAgcXVldWVkID0gZmFsc2U7XHJcbn07XHJcbmNsYXNzIERlZmVycmVkQ29tcHV0ZWRSZWZJbXBsIHtcclxuICAgIGNvbnN0cnVjdG9yKGdldHRlcikge1xyXG4gICAgICAgIHRoaXMuZGVwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XHJcbiAgICAgICAgdGhpc1tfYSQxXSA9IHRydWU7XHJcbiAgICAgICAgbGV0IGNvbXBhcmVUYXJnZXQ7XHJcbiAgICAgICAgbGV0IGhhc0NvbXBhcmVUYXJnZXQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoZ2V0dGVyLCAoY29tcHV0ZWRUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXB1dGVkVHJpZ2dlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVUYXJnZXQgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBoYXNDb21wYXJlVGFyZ2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRvQ29tcGFyZSA9IGhhc0NvbXBhcmVUYXJnZXQgPyBjb21wYXJlVGFyZ2V0IDogdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBoYXNDb21wYXJlVGFyZ2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZWZmZWN0LmFjdGl2ZSAmJiB0aGlzLl9nZXQoKSAhPT0gdmFsdWVUb0NvbXBhcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZWZWYWx1ZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNoYWluZWQgdXBzdHJlYW0gY29tcHV0ZWRzIGFyZSBub3RpZmllZCBzeW5jaHJvbm91c2x5IHRvIGVuc3VyZVxyXG4gICAgICAgICAgICAgICAgLy8gdmFsdWUgaW52YWxpZGF0aW9uIGluIGNhc2Ugb2Ygc3luYyBhY2Nlc3M7IG5vcm1hbCBlZmZlY3RzIGFyZVxyXG4gICAgICAgICAgICAgICAgLy8gZGVmZXJyZWQgdG8gYmUgdHJpZ2dlcmVkIGluIHNjaGVkdWxlci5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmRlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmNvbXB1dGVkIGluc3RhbmNlb2YgRGVmZXJyZWRDb21wdXRlZFJlZkltcGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zY2hlZHVsZXIodHJ1ZSAvKiBjb21wdXRlZFRyaWdnZXIgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3QuY29tcHV0ZWQgPSB0aGlzO1xyXG4gICAgfVxyXG4gICAgX2dldCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl92YWx1ZSA9IHRoaXMuZWZmZWN0LnJ1bigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHRyYWNrUmVmVmFsdWUodGhpcyk7XHJcbiAgICAgICAgLy8gdGhlIGNvbXB1dGVkIHJlZiBtYXkgZ2V0IHdyYXBwZWQgYnkgb3RoZXIgcHJveGllcyBlLmcuIHJlYWRvbmx5KCkgIzMzNzZcclxuICAgICAgICByZXR1cm4gdG9SYXcodGhpcykuX2dldCgpO1xyXG4gICAgfVxyXG59XHJcbl9hJDEgPSBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLztcclxuZnVuY3Rpb24gZGVmZXJyZWRDb21wdXRlZChnZXR0ZXIpIHtcclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWRDb21wdXRlZFJlZkltcGwoZ2V0dGVyKTtcclxufVxuXG5leHBvcnQgeyBFZmZlY3RTY29wZSwgSVRFUkFURV9LRVksIFJlYWN0aXZlRWZmZWN0LCBjb21wdXRlZCwgY3VzdG9tUmVmLCBkZWZlcnJlZENvbXB1dGVkLCBlZmZlY3QsIGVmZmVjdFNjb3BlLCBlbmFibGVUcmFja2luZywgZ2V0Q3VycmVudFNjb3BlLCBpc1Byb3h5LCBpc1JlYWN0aXZlLCBpc1JlYWRvbmx5LCBpc1JlZiwgaXNTaGFsbG93LCBtYXJrUmF3LCBvblNjb3BlRGlzcG9zZSwgcGF1c2VUcmFja2luZywgcHJveHlSZWZzLCByZWFjdGl2ZSwgcmVhZG9ubHksIHJlZiwgcmVzZXRUcmFja2luZywgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHN0b3AsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0cmFjaywgdHJpZ2dlciwgdHJpZ2dlclJlZiwgdW5yZWYgfTtcbiIsImltcG9ydCB7IHBhdXNlVHJhY2tpbmcsIHJlc2V0VHJhY2tpbmcsIGlzUmVmLCB0b1JhdywgaXNTaGFsbG93IGFzIGlzU2hhbGxvdyQxLCBpc1JlYWN0aXZlLCBSZWFjdGl2ZUVmZmVjdCwgcmVmLCBzaGFsbG93UmVhZG9ubHksIHRyYWNrLCByZWFjdGl2ZSwgc2hhbGxvd1JlYWN0aXZlLCB0cmlnZ2VyLCBpc1Byb3h5LCBFZmZlY3RTY29wZSwgbWFya1JhdywgcHJveHlSZWZzLCBjb21wdXRlZCBhcyBjb21wdXRlZCQxLCBpc1JlYWRvbmx5IH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5JztcbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBSZWFjdGl2ZUVmZmVjdCwgY3VzdG9tUmVmLCBlZmZlY3QsIGVmZmVjdFNjb3BlLCBnZXRDdXJyZW50U2NvcGUsIGlzUHJveHksIGlzUmVhY3RpdmUsIGlzUmVhZG9ubHksIGlzUmVmLCBpc1NoYWxsb3csIG1hcmtSYXcsIG9uU2NvcGVEaXNwb3NlLCBwcm94eVJlZnMsIHJlYWN0aXZlLCByZWFkb25seSwgcmVmLCBzaGFsbG93UmVhY3RpdmUsIHNoYWxsb3dSZWFkb25seSwgc2hhbGxvd1JlZiwgc3RvcCwgdG9SYXcsIHRvUmVmLCB0b1JlZnMsIHRyaWdnZXJSZWYsIHVucmVmIH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5JztcbmltcG9ydCB7IGlzU3RyaW5nLCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGlzQXJyYXksIE5PT1AsIGdldEdsb2JhbFRoaXMsIGV4dGVuZCwgRU1QVFlfT0JKLCB0b0hhbmRsZXJLZXksIHRvTnVtYmVyLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBpc09iamVjdCwgaXNPbiwgaGFzT3duLCBpc01vZGVsTGlzdGVuZXIsIGhhc0NoYW5nZWQsIHJlbW92ZSwgaXNTZXQsIGlzTWFwLCBpc1BsYWluT2JqZWN0LCBpbnZva2VBcnJheUZucywgaXNCdWlsdEluRGlyZWN0aXZlLCBjYXBpdGFsaXplLCBpc0dsb2JhbGx5V2hpdGVsaXN0ZWQsIGRlZiwgaXNSZXNlcnZlZFByb3AsIEVNUFRZX0FSUiwgdG9SYXdUeXBlLCBtYWtlTWFwLCBOTywgbm9ybWFsaXplQ2xhc3MsIG5vcm1hbGl6ZVN0eWxlIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuZXhwb3J0IHsgY2FtZWxpemUsIGNhcGl0YWxpemUsIG5vcm1hbGl6ZUNsYXNzLCBub3JtYWxpemVQcm9wcywgbm9ybWFsaXplU3R5bGUsIHRvRGlzcGxheVN0cmluZywgdG9IYW5kbGVyS2V5IH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5jb25zdCBzdGFjayA9IFtdO1xyXG5mdW5jdGlvbiBwdXNoV2FybmluZ0NvbnRleHQodm5vZGUpIHtcclxuICAgIHN0YWNrLnB1c2godm5vZGUpO1xyXG59XHJcbmZ1bmN0aW9uIHBvcFdhcm5pbmdDb250ZXh0KCkge1xyXG4gICAgc3RhY2sucG9wKCk7XHJcbn1cclxuZnVuY3Rpb24gd2Fybihtc2csIC4uLmFyZ3MpIHtcclxuICAgIC8vIGF2b2lkIHByb3BzIGZvcm1hdHRpbmcgb3Igd2FybiBoYW5kbGVyIHRyYWNraW5nIGRlcHMgdGhhdCBtaWdodCBiZSBtdXRhdGVkXHJcbiAgICAvLyBkdXJpbmcgcGF0Y2gsIGxlYWRpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxyXG4gICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBzdGFjay5sZW5ndGggPyBzdGFja1tzdGFjay5sZW5ndGggLSAxXS5jb21wb25lbnQgOiBudWxsO1xyXG4gICAgY29uc3QgYXBwV2FybkhhbmRsZXIgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZy53YXJuSGFuZGxlcjtcclxuICAgIGNvbnN0IHRyYWNlID0gZ2V0Q29tcG9uZW50VHJhY2UoKTtcclxuICAgIGlmIChhcHBXYXJuSGFuZGxlcikge1xyXG4gICAgICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhhcHBXYXJuSGFuZGxlciwgaW5zdGFuY2UsIDExIC8qIEVycm9yQ29kZXMuQVBQX1dBUk5fSEFORExFUiAqLywgW1xyXG4gICAgICAgICAgICBtc2cgKyBhcmdzLmpvaW4oJycpLFxyXG4gICAgICAgICAgICBpbnN0YW5jZSAmJiBpbnN0YW5jZS5wcm94eSxcclxuICAgICAgICAgICAgdHJhY2VcclxuICAgICAgICAgICAgICAgIC5tYXAoKHsgdm5vZGUgfSkgPT4gYGF0IDwke2Zvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIHZub2RlLnR5cGUpfT5gKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpLFxyXG4gICAgICAgICAgICB0cmFjZVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2FybkFyZ3MgPSBbYFtWdWUgd2Fybl06ICR7bXNnfWAsIC4uLmFyZ3NdO1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmICh0cmFjZS5sZW5ndGggJiZcclxuICAgICAgICAgICAgLy8gYXZvaWQgc3BhbW1pbmcgY29uc29sZSBkdXJpbmcgdGVzdHNcclxuICAgICAgICAgICAgIWZhbHNlKSB7XHJcbiAgICAgICAgICAgIHdhcm5BcmdzLnB1c2goYFxcbmAsIC4uLmZvcm1hdFRyYWNlKHRyYWNlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUud2FybiguLi53YXJuQXJncyk7XHJcbiAgICB9XHJcbiAgICByZXNldFRyYWNraW5nKCk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50VHJhY2UoKSB7XHJcbiAgICBsZXQgY3VycmVudFZOb2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XHJcbiAgICBpZiAoIWN1cnJlbnRWTm9kZSkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIC8vIHdlIGNhbid0IGp1c3QgdXNlIHRoZSBzdGFjayBiZWNhdXNlIGl0IHdpbGwgYmUgaW5jb21wbGV0ZSBkdXJpbmcgdXBkYXRlc1xyXG4gICAgLy8gdGhhdCBkaWQgbm90IHN0YXJ0IGZyb20gdGhlIHJvb3QuIFJlLWNvbnN0cnVjdCB0aGUgcGFyZW50IGNoYWluIHVzaW5nXHJcbiAgICAvLyBpbnN0YW5jZSBwYXJlbnQgcG9pbnRlcnMuXHJcbiAgICBjb25zdCBub3JtYWxpemVkU3RhY2sgPSBbXTtcclxuICAgIHdoaWxlIChjdXJyZW50Vk5vZGUpIHtcclxuICAgICAgICBjb25zdCBsYXN0ID0gbm9ybWFsaXplZFN0YWNrWzBdO1xyXG4gICAgICAgIGlmIChsYXN0ICYmIGxhc3Qudm5vZGUgPT09IGN1cnJlbnRWTm9kZSkge1xyXG4gICAgICAgICAgICBsYXN0LnJlY3Vyc2VDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplZFN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdm5vZGU6IGN1cnJlbnRWTm9kZSxcclxuICAgICAgICAgICAgICAgIHJlY3Vyc2VDb3VudDogMFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBjdXJyZW50Vk5vZGUuY29tcG9uZW50ICYmIGN1cnJlbnRWTm9kZS5jb21wb25lbnQucGFyZW50O1xyXG4gICAgICAgIGN1cnJlbnRWTm9kZSA9IHBhcmVudEluc3RhbmNlICYmIHBhcmVudEluc3RhbmNlLnZub2RlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTdGFjaztcclxufVxyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG5mdW5jdGlvbiBmb3JtYXRUcmFjZSh0cmFjZSkge1xyXG4gICAgY29uc3QgbG9ncyA9IFtdO1xyXG4gICAgdHJhY2UuZm9yRWFjaCgoZW50cnksIGkpID0+IHtcclxuICAgICAgICBsb2dzLnB1c2goLi4uKGkgPT09IDAgPyBbXSA6IFtgXFxuYF0pLCAuLi5mb3JtYXRUcmFjZUVudHJ5KGVudHJ5KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBsb2dzO1xyXG59XHJcbmZ1bmN0aW9uIGZvcm1hdFRyYWNlRW50cnkoeyB2bm9kZSwgcmVjdXJzZUNvdW50IH0pIHtcclxuICAgIGNvbnN0IHBvc3RmaXggPSByZWN1cnNlQ291bnQgPiAwID8gYC4uLiAoJHtyZWN1cnNlQ291bnR9IHJlY3Vyc2l2ZSBjYWxscylgIDogYGA7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB2bm9kZS5jb21wb25lbnQgPyB2bm9kZS5jb21wb25lbnQucGFyZW50ID09IG51bGwgOiBmYWxzZTtcclxuICAgIGNvbnN0IG9wZW4gPSBgIGF0IDwke2Zvcm1hdENvbXBvbmVudE5hbWUodm5vZGUuY29tcG9uZW50LCB2bm9kZS50eXBlLCBpc1Jvb3QpfWA7XHJcbiAgICBjb25zdCBjbG9zZSA9IGA+YCArIHBvc3RmaXg7XHJcbiAgICByZXR1cm4gdm5vZGUucHJvcHNcclxuICAgICAgICA/IFtvcGVuLCAuLi5mb3JtYXRQcm9wcyh2bm9kZS5wcm9wcyksIGNsb3NlXVxyXG4gICAgICAgIDogW29wZW4gKyBjbG9zZV07XHJcbn1cclxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuZnVuY3Rpb24gZm9ybWF0UHJvcHMocHJvcHMpIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcclxuICAgIGtleXMuc2xpY2UoMCwgMykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIHJlcy5wdXNoKC4uLmZvcm1hdFByb3Aoa2V5LCBwcm9wc1trZXldKSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChrZXlzLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICByZXMucHVzaChgIC4uLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG5mdW5jdGlvbiBmb3JtYXRQcm9wKGtleSwgdmFsdWUsIHJhdykge1xyXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiByYXcgPyB2YWx1ZSA6IFtgJHtrZXl9PSR7dmFsdWV9YF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHJhdyA/IHZhbHVlIDogW2Ake2tleX09JHt2YWx1ZX1gXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUmVmKHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gZm9ybWF0UHJvcChrZXksIHRvUmF3KHZhbHVlLnZhbHVlKSwgdHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHJhdyA/IHZhbHVlIDogW2Ake2tleX09UmVmPGAsIHZhbHVlLCBgPmBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gW2Ake2tleX09Zm4ke3ZhbHVlLm5hbWUgPyBgPCR7dmFsdWUubmFtZX0+YCA6IGBgfWBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSB0b1Jhdyh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHJhdyA/IHZhbHVlIDogW2Ake2tleX09YCwgdmFsdWVdO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IEVycm9yVHlwZVN0cmluZ3MgPSB7XHJcbiAgICBbXCJzcFwiIC8qIExpZmVjeWNsZUhvb2tzLlNFUlZFUl9QUkVGRVRDSCAqL106ICdzZXJ2ZXJQcmVmZXRjaCBob29rJyxcclxuICAgIFtcImJjXCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX0NSRUFURSAqL106ICdiZWZvcmVDcmVhdGUgaG9vaycsXHJcbiAgICBbXCJjXCIgLyogTGlmZWN5Y2xlSG9va3MuQ1JFQVRFRCAqL106ICdjcmVhdGVkIGhvb2snLFxyXG4gICAgW1wiYm1cIiAvKiBMaWZlY3ljbGVIb29rcy5CRUZPUkVfTU9VTlQgKi9dOiAnYmVmb3JlTW91bnQgaG9vaycsXHJcbiAgICBbXCJtXCIgLyogTGlmZWN5Y2xlSG9va3MuTU9VTlRFRCAqL106ICdtb3VudGVkIGhvb2snLFxyXG4gICAgW1wiYnVcIiAvKiBMaWZlY3ljbGVIb29rcy5CRUZPUkVfVVBEQVRFICovXTogJ2JlZm9yZVVwZGF0ZSBob29rJyxcclxuICAgIFtcInVcIiAvKiBMaWZlY3ljbGVIb29rcy5VUERBVEVEICovXTogJ3VwZGF0ZWQnLFxyXG4gICAgW1wiYnVtXCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX1VOTU9VTlQgKi9dOiAnYmVmb3JlVW5tb3VudCBob29rJyxcclxuICAgIFtcInVtXCIgLyogTGlmZWN5Y2xlSG9va3MuVU5NT1VOVEVEICovXTogJ3VubW91bnRlZCBob29rJyxcclxuICAgIFtcImFcIiAvKiBMaWZlY3ljbGVIb29rcy5BQ1RJVkFURUQgKi9dOiAnYWN0aXZhdGVkIGhvb2snLFxyXG4gICAgW1wiZGFcIiAvKiBMaWZlY3ljbGVIb29rcy5ERUFDVElWQVRFRCAqL106ICdkZWFjdGl2YXRlZCBob29rJyxcclxuICAgIFtcImVjXCIgLyogTGlmZWN5Y2xlSG9va3MuRVJST1JfQ0FQVFVSRUQgKi9dOiAnZXJyb3JDYXB0dXJlZCBob29rJyxcclxuICAgIFtcInJ0Y1wiIC8qIExpZmVjeWNsZUhvb2tzLlJFTkRFUl9UUkFDS0VEICovXTogJ3JlbmRlclRyYWNrZWQgaG9vaycsXHJcbiAgICBbXCJydGdcIiAvKiBMaWZlY3ljbGVIb29rcy5SRU5ERVJfVFJJR0dFUkVEICovXTogJ3JlbmRlclRyaWdnZXJlZCBob29rJyxcclxuICAgIFswIC8qIEVycm9yQ29kZXMuU0VUVVBfRlVOQ1RJT04gKi9dOiAnc2V0dXAgZnVuY3Rpb24nLFxyXG4gICAgWzEgLyogRXJyb3JDb2Rlcy5SRU5ERVJfRlVOQ1RJT04gKi9dOiAncmVuZGVyIGZ1bmN0aW9uJyxcclxuICAgIFsyIC8qIEVycm9yQ29kZXMuV0FUQ0hfR0VUVEVSICovXTogJ3dhdGNoZXIgZ2V0dGVyJyxcclxuICAgIFszIC8qIEVycm9yQ29kZXMuV0FUQ0hfQ0FMTEJBQ0sgKi9dOiAnd2F0Y2hlciBjYWxsYmFjaycsXHJcbiAgICBbNCAvKiBFcnJvckNvZGVzLldBVENIX0NMRUFOVVAgKi9dOiAnd2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uJyxcclxuICAgIFs1IC8qIEVycm9yQ29kZXMuTkFUSVZFX0VWRU5UX0hBTkRMRVIgKi9dOiAnbmF0aXZlIGV2ZW50IGhhbmRsZXInLFxyXG4gICAgWzYgLyogRXJyb3JDb2Rlcy5DT01QT05FTlRfRVZFTlRfSEFORExFUiAqL106ICdjb21wb25lbnQgZXZlbnQgaGFuZGxlcicsXHJcbiAgICBbNyAvKiBFcnJvckNvZGVzLlZOT0RFX0hPT0sgKi9dOiAndm5vZGUgaG9vaycsXHJcbiAgICBbOCAvKiBFcnJvckNvZGVzLkRJUkVDVElWRV9IT09LICovXTogJ2RpcmVjdGl2ZSBob29rJyxcclxuICAgIFs5IC8qIEVycm9yQ29kZXMuVFJBTlNJVElPTl9IT09LICovXTogJ3RyYW5zaXRpb24gaG9vaycsXHJcbiAgICBbMTAgLyogRXJyb3JDb2Rlcy5BUFBfRVJST1JfSEFORExFUiAqL106ICdhcHAgZXJyb3JIYW5kbGVyJyxcclxuICAgIFsxMSAvKiBFcnJvckNvZGVzLkFQUF9XQVJOX0hBTkRMRVIgKi9dOiAnYXBwIHdhcm5IYW5kbGVyJyxcclxuICAgIFsxMiAvKiBFcnJvckNvZGVzLkZVTkNUSU9OX1JFRiAqL106ICdyZWYgZnVuY3Rpb24nLFxyXG4gICAgWzEzIC8qIEVycm9yQ29kZXMuQVNZTkNfQ09NUE9ORU5UX0xPQURFUiAqL106ICdhc3luYyBjb21wb25lbnQgbG9hZGVyJyxcclxuICAgIFsxNCAvKiBFcnJvckNvZGVzLlNDSEVEVUxFUiAqL106ICdzY2hlZHVsZXIgZmx1c2guIFRoaXMgaXMgbGlrZWx5IGEgVnVlIGludGVybmFscyBidWcuICcgK1xyXG4gICAgICAgICdQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL25ldy1pc3N1ZS52dWVqcy5vcmcvP3JlcG89dnVlanMvY29yZSdcclxufTtcclxuZnVuY3Rpb24gY2FsbFdpdGhFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncykge1xyXG4gICAgbGV0IHJlcztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmVzID0gYXJncyA/IGZuKC4uLmFyZ3MpIDogZm4oKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCB0eXBlLCBhcmdzKSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihmbikpIHtcclxuICAgICAgICBjb25zdCByZXMgPSBjYWxsV2l0aEVycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCB0eXBlLCBhcmdzKTtcclxuICAgICAgICBpZiAocmVzICYmIGlzUHJvbWlzZShyZXMpKSB7XHJcbiAgICAgICAgICAgIHJlcy5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyLCBpbnN0YW5jZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWVzLnB1c2goY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoZm5baV0sIGluc3RhbmNlLCB0eXBlLCBhcmdzKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVzO1xyXG59XHJcbmZ1bmN0aW9uIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIHR5cGUsIHRocm93SW5EZXYgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBjb250ZXh0Vk5vZGUgPSBpbnN0YW5jZSA/IGluc3RhbmNlLnZub2RlIDogbnVsbDtcclxuICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgIGxldCBjdXIgPSBpbnN0YW5jZS5wYXJlbnQ7XHJcbiAgICAgICAgLy8gdGhlIGV4cG9zZWQgaW5zdGFuY2UgaXMgdGhlIHJlbmRlciBwcm94eSB0byBrZWVwIGl0IGNvbnNpc3RlbnQgd2l0aCAyLnhcclxuICAgICAgICBjb25zdCBleHBvc2VkSW5zdGFuY2UgPSBpbnN0YW5jZS5wcm94eTtcclxuICAgICAgICAvLyBpbiBwcm9kdWN0aW9uIHRoZSBob29rIHJlY2VpdmVzIG9ubHkgdGhlIGVycm9yIGNvZGVcclxuICAgICAgICBjb25zdCBlcnJvckluZm8gPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBFcnJvclR5cGVTdHJpbmdzW3R5cGVdIDogdHlwZTtcclxuICAgICAgICB3aGlsZSAoY3VyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yQ2FwdHVyZWRIb29rcyA9IGN1ci5lYztcclxuICAgICAgICAgICAgaWYgKGVycm9yQ2FwdHVyZWRIb29rcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvckNhcHR1cmVkSG9va3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYXB0dXJlZEhvb2tzW2ldKGVyciwgZXhwb3NlZEluc3RhbmNlLCBlcnJvckluZm8pID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFwcC1sZXZlbCBoYW5kbGluZ1xyXG4gICAgICAgIGNvbnN0IGFwcEVycm9ySGFuZGxlciA9IGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLmVycm9ySGFuZGxlcjtcclxuICAgICAgICBpZiAoYXBwRXJyb3JIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhhcHBFcnJvckhhbmRsZXIsIG51bGwsIDEwIC8qIEVycm9yQ29kZXMuQVBQX0VSUk9SX0hBTkRMRVIgKi8sIFtlcnIsIGV4cG9zZWRJbnN0YW5jZSwgZXJyb3JJbmZvXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2dFcnJvcihlcnIsIHR5cGUsIGNvbnRleHRWTm9kZSwgdGhyb3dJbkRldik7XHJcbn1cclxuZnVuY3Rpb24gbG9nRXJyb3IoZXJyLCB0eXBlLCBjb250ZXh0Vk5vZGUsIHRocm93SW5EZXYgPSB0cnVlKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgY29uc3QgaW5mbyA9IEVycm9yVHlwZVN0cmluZ3NbdHlwZV07XHJcbiAgICAgICAgaWYgKGNvbnRleHRWTm9kZSkge1xyXG4gICAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQoY29udGV4dFZOb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2FybihgVW5oYW5kbGVkIGVycm9yJHtpbmZvID8gYCBkdXJpbmcgZXhlY3V0aW9uIG9mICR7aW5mb31gIDogYGB9YCk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRWTm9kZSkge1xyXG4gICAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmFzaCBpbiBkZXYgYnkgZGVmYXVsdCBzbyBpdCdzIG1vcmUgbm90aWNlYWJsZVxyXG4gICAgICAgIGlmICh0aHJvd0luRGV2KSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyByZWNvdmVyIGluIHByb2QgdG8gcmVkdWNlIHRoZSBpbXBhY3Qgb24gZW5kLXVzZXJcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcbn1cblxubGV0IGlzRmx1c2hpbmcgPSBmYWxzZTtcclxubGV0IGlzRmx1c2hQZW5kaW5nID0gZmFsc2U7XHJcbmNvbnN0IHF1ZXVlID0gW107XHJcbmxldCBmbHVzaEluZGV4ID0gMDtcclxuY29uc3QgcGVuZGluZ1Bvc3RGbHVzaENicyA9IFtdO1xyXG5sZXQgYWN0aXZlUG9zdEZsdXNoQ2JzID0gbnVsbDtcclxubGV0IHBvc3RGbHVzaEluZGV4ID0gMDtcclxuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gLyojX19QVVJFX18qLyBQcm9taXNlLnJlc29sdmUoKTtcclxubGV0IGN1cnJlbnRGbHVzaFByb21pc2UgPSBudWxsO1xyXG5jb25zdCBSRUNVUlNJT05fTElNSVQgPSAxMDA7XHJcbmZ1bmN0aW9uIG5leHRUaWNrKGZuKSB7XHJcbiAgICBjb25zdCBwID0gY3VycmVudEZsdXNoUHJvbWlzZSB8fCByZXNvbHZlZFByb21pc2U7XHJcbiAgICByZXR1cm4gZm4gPyBwLnRoZW4odGhpcyA/IGZuLmJpbmQodGhpcykgOiBmbikgOiBwO1xyXG59XHJcbi8vICMyNzY4XHJcbi8vIFVzZSBiaW5hcnktc2VhcmNoIHRvIGZpbmQgYSBzdWl0YWJsZSBwb3NpdGlvbiBpbiB0aGUgcXVldWUsXHJcbi8vIHNvIHRoYXQgdGhlIHF1ZXVlIG1haW50YWlucyB0aGUgaW5jcmVhc2luZyBvcmRlciBvZiBqb2IncyBpZCxcclxuLy8gd2hpY2ggY2FuIHByZXZlbnQgdGhlIGpvYiBmcm9tIGJlaW5nIHNraXBwZWQgYW5kIGFsc28gY2FuIGF2b2lkIHJlcGVhdGVkIHBhdGNoaW5nLlxyXG5mdW5jdGlvbiBmaW5kSW5zZXJ0aW9uSW5kZXgoaWQpIHtcclxuICAgIC8vIHRoZSBzdGFydCBpbmRleCBzaG91bGQgYmUgYGZsdXNoSW5kZXggKyAxYFxyXG4gICAgbGV0IHN0YXJ0ID0gZmx1c2hJbmRleCArIDE7XHJcbiAgICBsZXQgZW5kID0gcXVldWUubGVuZ3RoO1xyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgY29uc3QgbWlkZGxlID0gKHN0YXJ0ICsgZW5kKSA+Pj4gMTtcclxuICAgICAgICBjb25zdCBtaWRkbGVKb2JJZCA9IGdldElkKHF1ZXVlW21pZGRsZV0pO1xyXG4gICAgICAgIG1pZGRsZUpvYklkIDwgaWQgPyAoc3RhcnQgPSBtaWRkbGUgKyAxKSA6IChlbmQgPSBtaWRkbGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXJ0O1xyXG59XHJcbmZ1bmN0aW9uIHF1ZXVlSm9iKGpvYikge1xyXG4gICAgLy8gdGhlIGRlZHVwZSBzZWFyY2ggdXNlcyB0aGUgc3RhcnRJbmRleCBhcmd1bWVudCBvZiBBcnJheS5pbmNsdWRlcygpXHJcbiAgICAvLyBieSBkZWZhdWx0IHRoZSBzZWFyY2ggaW5kZXggaW5jbHVkZXMgdGhlIGN1cnJlbnQgam9iIHRoYXQgaXMgYmVpbmcgcnVuXHJcbiAgICAvLyBzbyBpdCBjYW5ub3QgcmVjdXJzaXZlbHkgdHJpZ2dlciBpdHNlbGYgYWdhaW4uXHJcbiAgICAvLyBpZiB0aGUgam9iIGlzIGEgd2F0Y2goKSBjYWxsYmFjaywgdGhlIHNlYXJjaCB3aWxsIHN0YXJ0IHdpdGggYSArMSBpbmRleCB0b1xyXG4gICAgLy8gYWxsb3cgaXQgcmVjdXJzaXZlbHkgdHJpZ2dlciBpdHNlbGYgLSBpdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvXHJcbiAgICAvLyBlbnN1cmUgaXQgZG9lc24ndCBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcC5cclxuICAgIGlmICghcXVldWUubGVuZ3RoIHx8XHJcbiAgICAgICAgIXF1ZXVlLmluY2x1ZGVzKGpvYiwgaXNGbHVzaGluZyAmJiBqb2IuYWxsb3dSZWN1cnNlID8gZmx1c2hJbmRleCArIDEgOiBmbHVzaEluZGV4KSkge1xyXG4gICAgICAgIGlmIChqb2IuaWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGpvYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWV1ZS5zcGxpY2UoZmluZEluc2VydGlvbkluZGV4KGpvYi5pZCksIDAsIGpvYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHF1ZXVlRmx1c2goKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBxdWV1ZUZsdXNoKCkge1xyXG4gICAgaWYgKCFpc0ZsdXNoaW5nICYmICFpc0ZsdXNoUGVuZGluZykge1xyXG4gICAgICAgIGlzRmx1c2hQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICBjdXJyZW50Rmx1c2hQcm9taXNlID0gcmVzb2x2ZWRQcm9taXNlLnRoZW4oZmx1c2hKb2JzKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbnZhbGlkYXRlSm9iKGpvYikge1xyXG4gICAgY29uc3QgaSA9IHF1ZXVlLmluZGV4T2Yoam9iKTtcclxuICAgIGlmIChpID4gZmx1c2hJbmRleCkge1xyXG4gICAgICAgIHF1ZXVlLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBxdWV1ZVBvc3RGbHVzaENiKGNiKSB7XHJcbiAgICBpZiAoIWlzQXJyYXkoY2IpKSB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVQb3N0Rmx1c2hDYnMgfHxcclxuICAgICAgICAgICAgIWFjdGl2ZVBvc3RGbHVzaENicy5pbmNsdWRlcyhjYiwgY2IuYWxsb3dSZWN1cnNlID8gcG9zdEZsdXNoSW5kZXggKyAxIDogcG9zdEZsdXNoSW5kZXgpKSB7XHJcbiAgICAgICAgICAgIHBlbmRpbmdQb3N0Rmx1c2hDYnMucHVzaChjYik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gaWYgY2IgaXMgYW4gYXJyYXksIGl0IGlzIGEgY29tcG9uZW50IGxpZmVjeWNsZSBob29rIHdoaWNoIGNhbiBvbmx5IGJlXHJcbiAgICAgICAgLy8gdHJpZ2dlcmVkIGJ5IGEgam9iLCB3aGljaCBpcyBhbHJlYWR5IGRlZHVwZWQgaW4gdGhlIG1haW4gcXVldWUsIHNvXHJcbiAgICAgICAgLy8gd2UgY2FuIHNraXAgZHVwbGljYXRlIGNoZWNrIGhlcmUgdG8gaW1wcm92ZSBwZXJmXHJcbiAgICAgICAgcGVuZGluZ1Bvc3RGbHVzaENicy5wdXNoKC4uLmNiKTtcclxuICAgIH1cclxuICAgIHF1ZXVlRmx1c2goKTtcclxufVxyXG5mdW5jdGlvbiBmbHVzaFByZUZsdXNoQ2JzKHNlZW4sIGkgPSBmbHVzaEluZGV4KSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgc2VlbiA9IHNlZW4gfHwgbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNiID0gcXVldWVbaV07XHJcbiAgICAgICAgaWYgKGNiICYmIGNiLnByZSkge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBjYikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHF1ZXVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICBjYigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBmbHVzaFBvc3RGbHVzaENicyhzZWVuKSB7XHJcbiAgICBpZiAocGVuZGluZ1Bvc3RGbHVzaENicy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBkZWR1cGVkID0gWy4uLm5ldyBTZXQocGVuZGluZ1Bvc3RGbHVzaENicyldO1xyXG4gICAgICAgIHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyAjMTk0NyBhbHJlYWR5IGhhcyBhY3RpdmUgcXVldWUsIG5lc3RlZCBmbHVzaFBvc3RGbHVzaENicyBjYWxsXHJcbiAgICAgICAgaWYgKGFjdGl2ZVBvc3RGbHVzaENicykge1xyXG4gICAgICAgICAgICBhY3RpdmVQb3N0Rmx1c2hDYnMucHVzaCguLi5kZWR1cGVkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhY3RpdmVQb3N0Rmx1c2hDYnMgPSBkZWR1cGVkO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgc2VlbiA9IHNlZW4gfHwgbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhY3RpdmVQb3N0Rmx1c2hDYnMuc29ydCgoYSwgYikgPT4gZ2V0SWQoYSkgLSBnZXRJZChiKSk7XHJcbiAgICAgICAgZm9yIChwb3N0Rmx1c2hJbmRleCA9IDA7IHBvc3RGbHVzaEluZGV4IDwgYWN0aXZlUG9zdEZsdXNoQ2JzLmxlbmd0aDsgcG9zdEZsdXNoSW5kZXgrKykge1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICBjaGVja1JlY3Vyc2l2ZVVwZGF0ZXMoc2VlbiwgYWN0aXZlUG9zdEZsdXNoQ2JzW3Bvc3RGbHVzaEluZGV4XSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGl2ZVBvc3RGbHVzaENic1twb3N0Rmx1c2hJbmRleF0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzID0gbnVsbDtcclxuICAgICAgICBwb3N0Rmx1c2hJbmRleCA9IDA7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgZ2V0SWQgPSAoam9iKSA9PiBqb2IuaWQgPT0gbnVsbCA/IEluZmluaXR5IDogam9iLmlkO1xyXG5jb25zdCBjb21wYXJhdG9yID0gKGEsIGIpID0+IHtcclxuICAgIGNvbnN0IGRpZmYgPSBnZXRJZChhKSAtIGdldElkKGIpO1xyXG4gICAgaWYgKGRpZmYgPT09IDApIHtcclxuICAgICAgICBpZiAoYS5wcmUgJiYgIWIucHJlKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgaWYgKGIucHJlICYmICFhLnByZSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlmZjtcclxufTtcclxuZnVuY3Rpb24gZmx1c2hKb2JzKHNlZW4pIHtcclxuICAgIGlzRmx1c2hQZW5kaW5nID0gZmFsc2U7XHJcbiAgICBpc0ZsdXNoaW5nID0gdHJ1ZTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBzZWVuID0gc2VlbiB8fCBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICAvLyBTb3J0IHF1ZXVlIGJlZm9yZSBmbHVzaC5cclxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxyXG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xyXG4gICAgLy8gICAgY3JlYXRlZCBiZWZvcmUgdGhlIGNoaWxkIHNvIGl0cyByZW5kZXIgZWZmZWN0IHdpbGwgaGF2ZSBzbWFsbGVyXHJcbiAgICAvLyAgICBwcmlvcml0eSBudW1iZXIpXHJcbiAgICAvLyAyLiBJZiBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHVwZGF0ZSxcclxuICAgIC8vICAgIGl0cyB1cGRhdGUgY2FuIGJlIHNraXBwZWQuXHJcbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmF0b3IpO1xyXG4gICAgLy8gY29uZGl0aW9uYWwgdXNhZ2Ugb2YgY2hlY2tSZWN1cnNpdmVVcGRhdGUgbXVzdCBiZSBkZXRlcm1pbmVkIG91dCBvZlxyXG4gICAgLy8gdHJ5IC4uLiBjYXRjaCBibG9jayBzaW5jZSBSb2xsdXAgYnkgZGVmYXVsdCBkZS1vcHRpbWl6ZXMgdHJlZXNoYWtpbmdcclxuICAgIC8vIGluc2lkZSB0cnktY2F0Y2guIFRoaXMgY2FuIGxlYXZlIGFsbCB3YXJuaW5nIGNvZGUgdW5zaGFrZWQuIEFsdGhvdWdoXHJcbiAgICAvLyB0aGV5IHdvdWxkIGdldCBldmVudHVhbGx5IHNoYWtlbiBieSBhIG1pbmlmaWVyIGxpa2UgdGVyc2VyLCBzb21lIG1pbmlmaWVyc1xyXG4gICAgLy8gd291bGQgZmFpbCB0byBkbyB0aGF0IChlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNjEwKVxyXG4gICAgY29uc3QgY2hlY2sgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICA/IChqb2IpID0+IGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBqb2IpXHJcbiAgICAgICAgOiBOT09QO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBmb3IgKGZsdXNoSW5kZXggPSAwOyBmbHVzaEluZGV4IDwgcXVldWUubGVuZ3RoOyBmbHVzaEluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3Qgam9iID0gcXVldWVbZmx1c2hJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChqb2IgJiYgam9iLmFjdGl2ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgY2hlY2soam9iKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHJ1bm5pbmc6YCwgam9iLmlkKVxyXG4gICAgICAgICAgICAgICAgY2FsbFdpdGhFcnJvckhhbmRsaW5nKGpvYiwgbnVsbCwgMTQgLyogRXJyb3JDb2Rlcy5TQ0hFRFVMRVIgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgZmx1c2hJbmRleCA9IDA7XHJcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMDtcclxuICAgICAgICBmbHVzaFBvc3RGbHVzaENicyhzZWVuKTtcclxuICAgICAgICBpc0ZsdXNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY3VycmVudEZsdXNoUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgLy8gc29tZSBwb3N0Rmx1c2hDYiBxdWV1ZWQgam9icyFcclxuICAgICAgICAvLyBrZWVwIGZsdXNoaW5nIHVudGlsIGl0IGRyYWlucy5cclxuICAgICAgICBpZiAocXVldWUubGVuZ3RoIHx8IHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsdXNoSm9icyhzZWVuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tSZWN1cnNpdmVVcGRhdGVzKHNlZW4sIGZuKSB7XHJcbiAgICBpZiAoIXNlZW4uaGFzKGZuKSkge1xyXG4gICAgICAgIHNlZW4uc2V0KGZuLCAxKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gc2Vlbi5nZXQoZm4pO1xyXG4gICAgICAgIGlmIChjb3VudCA+IFJFQ1VSU0lPTl9MSU1JVCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGZuLm93bmVySW5zdGFuY2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBpbnN0YW5jZSAmJiBnZXRDb21wb25lbnROYW1lKGluc3RhbmNlLnR5cGUpO1xyXG4gICAgICAgICAgICB3YXJuKGBNYXhpbXVtIHJlY3Vyc2l2ZSB1cGRhdGVzIGV4Y2VlZGVkJHtjb21wb25lbnROYW1lID8gYCBpbiBjb21wb25lbnQgPCR7Y29tcG9uZW50TmFtZX0+YCA6IGBgfS4gYCArXHJcbiAgICAgICAgICAgICAgICBgVGhpcyBtZWFucyB5b3UgaGF2ZSBhIHJlYWN0aXZlIGVmZmVjdCB0aGF0IGlzIG11dGF0aW5nIGl0cyBvd24gYCArXHJcbiAgICAgICAgICAgICAgICBgZGVwZW5kZW5jaWVzIGFuZCB0aHVzIHJlY3Vyc2l2ZWx5IHRyaWdnZXJpbmcgaXRzZWxmLiBQb3NzaWJsZSBzb3VyY2VzIGAgK1xyXG4gICAgICAgICAgICAgICAgYGluY2x1ZGUgY29tcG9uZW50IHRlbXBsYXRlLCByZW5kZXIgZnVuY3Rpb24sIHVwZGF0ZWQgaG9vayBvciBgICtcclxuICAgICAgICAgICAgICAgIGB3YXRjaGVyIHNvdXJjZSBmdW5jdGlvbi5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZWVuLnNldChmbiwgY291bnQgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXHJcbmxldCBpc0htclVwZGF0aW5nID0gZmFsc2U7XHJcbmNvbnN0IGhtckRpcnR5Q29tcG9uZW50cyA9IG5ldyBTZXQoKTtcclxuLy8gRXhwb3NlIHRoZSBITVIgcnVudGltZSBvbiB0aGUgZ2xvYmFsIG9iamVjdFxyXG4vLyBUaGlzIG1ha2VzIGl0IGVudGlyZWx5IHRyZWUtc2hha2FibGUgd2l0aG91dCBwb2xsdXRpbmcgdGhlIGV4cG9ydHMgYW5kIG1ha2VzXHJcbi8vIGl0IGVhc2llciB0byBiZSB1c2VkIGluIHRvb2xpbmdzIGxpa2UgdnVlLWxvYWRlclxyXG4vLyBOb3RlOiBmb3IgYSBjb21wb25lbnQgdG8gYmUgZWxpZ2libGUgZm9yIEhNUiBpdCBhbHNvIG5lZWRzIHRoZSBfX2htcklkIG9wdGlvblxyXG4vLyB0byBiZSBzZXQgc28gdGhhdCBpdHMgaW5zdGFuY2VzIGNhbiBiZSByZWdpc3RlcmVkIC8gcmVtb3ZlZC5cclxuaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgZ2V0R2xvYmFsVGhpcygpLl9fVlVFX0hNUl9SVU5USU1FX18gPSB7XHJcbiAgICAgICAgY3JlYXRlUmVjb3JkOiB0cnlXcmFwKGNyZWF0ZVJlY29yZCksXHJcbiAgICAgICAgcmVyZW5kZXI6IHRyeVdyYXAocmVyZW5kZXIpLFxyXG4gICAgICAgIHJlbG9hZDogdHJ5V3JhcChyZWxvYWQpXHJcbiAgICB9O1xyXG59XHJcbmNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcclxuZnVuY3Rpb24gcmVnaXN0ZXJITVIoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IGlkID0gaW5zdGFuY2UudHlwZS5fX2htcklkO1xyXG4gICAgbGV0IHJlY29yZCA9IG1hcC5nZXQoaWQpO1xyXG4gICAgaWYgKCFyZWNvcmQpIHtcclxuICAgICAgICBjcmVhdGVSZWNvcmQoaWQsIGluc3RhbmNlLnR5cGUpO1xyXG4gICAgICAgIHJlY29yZCA9IG1hcC5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgcmVjb3JkLmluc3RhbmNlcy5hZGQoaW5zdGFuY2UpO1xyXG59XHJcbmZ1bmN0aW9uIHVucmVnaXN0ZXJITVIoaW5zdGFuY2UpIHtcclxuICAgIG1hcC5nZXQoaW5zdGFuY2UudHlwZS5fX2htcklkKS5pbnN0YW5jZXMuZGVsZXRlKGluc3RhbmNlKTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVSZWNvcmQoaWQsIGluaXRpYWxEZWYpIHtcclxuICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIG1hcC5zZXQoaWQsIHtcclxuICAgICAgICBpbml0aWFsRGVmOiBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbml0aWFsRGVmKSxcclxuICAgICAgICBpbnN0YW5jZXM6IG5ldyBTZXQoKVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVDbGFzc0NvbXBvbmVudChjb21wb25lbnQpIHtcclxuICAgIHJldHVybiBpc0NsYXNzQ29tcG9uZW50KGNvbXBvbmVudCkgPyBjb21wb25lbnQuX192Y2NPcHRzIDogY29tcG9uZW50O1xyXG59XHJcbmZ1bmN0aW9uIHJlcmVuZGVyKGlkLCBuZXdSZW5kZXIpIHtcclxuICAgIGNvbnN0IHJlY29yZCA9IG1hcC5nZXQoaWQpO1xyXG4gICAgaWYgKCFyZWNvcmQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyB1cGRhdGUgaW5pdGlhbCByZWNvcmQgKGZvciBub3QteWV0LXJlbmRlcmVkIGNvbXBvbmVudClcclxuICAgIHJlY29yZC5pbml0aWFsRGVmLnJlbmRlciA9IG5ld1JlbmRlcjtcclxuICAgIFsuLi5yZWNvcmQuaW5zdGFuY2VzXS5mb3JFYWNoKGluc3RhbmNlID0+IHtcclxuICAgICAgICBpZiAobmV3UmVuZGVyKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbmRlciA9IG5ld1JlbmRlcjtcclxuICAgICAgICAgICAgbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoaW5zdGFuY2UudHlwZSkucmVuZGVyID0gbmV3UmVuZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZS5yZW5kZXJDYWNoZSA9IFtdO1xyXG4gICAgICAgIC8vIHRoaXMgZmxhZyBmb3JjZXMgY2hpbGQgY29tcG9uZW50cyB3aXRoIHNsb3QgY29udGVudCB0byB1cGRhdGVcclxuICAgICAgICBpc0htclVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZS51cGRhdGUoKTtcclxuICAgICAgICBpc0htclVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiByZWxvYWQoaWQsIG5ld0NvbXApIHtcclxuICAgIGNvbnN0IHJlY29yZCA9IG1hcC5nZXQoaWQpO1xyXG4gICAgaWYgKCFyZWNvcmQpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgbmV3Q29tcCA9IG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KG5ld0NvbXApO1xyXG4gICAgLy8gdXBkYXRlIGluaXRpYWwgZGVmIChmb3Igbm90LXlldC1yZW5kZXJlZCBjb21wb25lbnRzKVxyXG4gICAgdXBkYXRlQ29tcG9uZW50RGVmKHJlY29yZC5pbml0aWFsRGVmLCBuZXdDb21wKTtcclxuICAgIC8vIGNyZWF0ZSBhIHNuYXBzaG90IHdoaWNoIGF2b2lkcyB0aGUgc2V0IGJlaW5nIG11dGF0ZWQgZHVyaW5nIHVwZGF0ZXNcclxuICAgIGNvbnN0IGluc3RhbmNlcyA9IFsuLi5yZWNvcmQuaW5zdGFuY2VzXTtcclxuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkQ29tcCA9IG5vcm1hbGl6ZUNsYXNzQ29tcG9uZW50KGluc3RhbmNlLnR5cGUpO1xyXG4gICAgICAgIGlmICghaG1yRGlydHlDb21wb25lbnRzLmhhcyhvbGRDb21wKSkge1xyXG4gICAgICAgICAgICAvLyAxLiBVcGRhdGUgZXhpc3RpbmcgY29tcCBkZWZpbml0aW9uIHRvIG1hdGNoIG5ldyBvbmVcclxuICAgICAgICAgICAgaWYgKG9sZENvbXAgIT09IHJlY29yZC5pbml0aWFsRGVmKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVDb21wb25lbnREZWYob2xkQ29tcCwgbmV3Q29tcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gMi4gbWFyayBkZWZpbml0aW9uIGRpcnR5LiBUaGlzIGZvcmNlcyB0aGUgcmVuZGVyZXIgdG8gcmVwbGFjZSB0aGVcclxuICAgICAgICAgICAgLy8gY29tcG9uZW50IG9uIHBhdGNoLlxyXG4gICAgICAgICAgICBobXJEaXJ0eUNvbXBvbmVudHMuYWRkKG9sZENvbXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAzLiBpbnZhbGlkYXRlIG9wdGlvbnMgcmVzb2x1dGlvbiBjYWNoZVxyXG4gICAgICAgIGluc3RhbmNlLmFwcENvbnRleHQub3B0aW9uc0NhY2hlLmRlbGV0ZShpbnN0YW5jZS50eXBlKTtcclxuICAgICAgICAvLyA0LiBhY3R1YWxseSB1cGRhdGVcclxuICAgICAgICBpZiAoaW5zdGFuY2UuY2VSZWxvYWQpIHtcclxuICAgICAgICAgICAgLy8gY3VzdG9tIGVsZW1lbnRcclxuICAgICAgICAgICAgaG1yRGlydHlDb21wb25lbnRzLmFkZChvbGRDb21wKTtcclxuICAgICAgICAgICAgaW5zdGFuY2UuY2VSZWxvYWQobmV3Q29tcC5zdHlsZXMpO1xyXG4gICAgICAgICAgICBobXJEaXJ0eUNvbXBvbmVudHMuZGVsZXRlKG9sZENvbXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbnN0YW5jZS5wYXJlbnQpIHtcclxuICAgICAgICAgICAgLy8gNC4gRm9yY2UgdGhlIHBhcmVudCBpbnN0YW5jZSB0byByZS1yZW5kZXIuIFRoaXMgd2lsbCBjYXVzZSBhbGwgdXBkYXRlZFxyXG4gICAgICAgICAgICAvLyBjb21wb25lbnRzIHRvIGJlIHVubW91bnRlZCBhbmQgcmUtbW91bnRlZC4gUXVldWUgdGhlIHVwZGF0ZSBzbyB0aGF0IHdlXHJcbiAgICAgICAgICAgIC8vIGRvbid0IGVuZCB1cCBmb3JjaW5nIHRoZSBzYW1lIHBhcmVudCB0byByZS1yZW5kZXIgbXVsdGlwbGUgdGltZXMuXHJcbiAgICAgICAgICAgIHF1ZXVlSm9iKGluc3RhbmNlLnBhcmVudC51cGRhdGUpO1xyXG4gICAgICAgICAgICAvLyBpbnN0YW5jZSBpcyB0aGUgaW5uZXIgY29tcG9uZW50IG9mIGFuIGFzeW5jIGN1c3RvbSBlbGVtZW50XHJcbiAgICAgICAgICAgIC8vIGludm9rZSB0byByZXNldCBzdHlsZXNcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudC50eXBlLl9fYXN5bmNMb2FkZXIgJiZcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnBhcmVudC5jZVJlbG9hZCkge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucGFyZW50LmNlUmVsb2FkKG5ld0NvbXAuc3R5bGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbnN0YW5jZS5hcHBDb250ZXh0LnJlbG9hZCkge1xyXG4gICAgICAgICAgICAvLyByb290IGluc3RhbmNlIG1vdW50ZWQgdmlhIGNyZWF0ZUFwcCgpIGhhcyBhIHJlbG9hZCBtZXRob2RcclxuICAgICAgICAgICAgaW5zdGFuY2UuYXBwQ29udGV4dC5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy8gcm9vdCBpbnN0YW5jZSBpbnNpZGUgdHJlZSBjcmVhdGVkIHZpYSByYXcgcmVuZGVyKCkuIEZvcmNlIHJlbG9hZC5cclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbSE1SXSBSb290IG9yIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UgbW9kaWZpZWQuIEZ1bGwgcmVsb2FkIHJlcXVpcmVkLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIDUuIG1ha2Ugc3VyZSB0byBjbGVhbnVwIGRpcnR5IGhtciBjb21wb25lbnRzIGFmdGVyIHVwZGF0ZVxyXG4gICAgcXVldWVQb3N0Rmx1c2hDYigoKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpbnN0YW5jZSBvZiBpbnN0YW5jZXMpIHtcclxuICAgICAgICAgICAgaG1yRGlydHlDb21wb25lbnRzLmRlbGV0ZShub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbnN0YW5jZS50eXBlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50RGVmKG9sZENvbXAsIG5ld0NvbXApIHtcclxuICAgIGV4dGVuZChvbGRDb21wLCBuZXdDb21wKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9sZENvbXApIHtcclxuICAgICAgICBpZiAoa2V5ICE9PSAnX19maWxlJyAmJiAhKGtleSBpbiBuZXdDb21wKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgb2xkQ29tcFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB0cnlXcmFwKGZuKSB7XHJcbiAgICByZXR1cm4gKGlkLCBhcmcpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gZm4oaWQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0hNUl0gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIFZ1ZSBjb21wb25lbnQgaG90LXJlbG9hZC4gYCArXHJcbiAgICAgICAgICAgICAgICBgRnVsbCByZWxvYWQgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxuXG5sZXQgZGV2dG9vbHM7XHJcbmxldCBidWZmZXIgPSBbXTtcclxubGV0IGRldnRvb2xzTm90SW5zdGFsbGVkID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcclxuICAgIGlmIChkZXZ0b29scykge1xyXG4gICAgICAgIGRldnRvb2xzLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIWRldnRvb2xzTm90SW5zdGFsbGVkKSB7XHJcbiAgICAgICAgYnVmZmVyLnB1c2goeyBldmVudCwgYXJncyB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzZXREZXZ0b29sc0hvb2soaG9vaywgdGFyZ2V0KSB7XHJcbiAgICB2YXIgX2EsIF9iO1xyXG4gICAgZGV2dG9vbHMgPSBob29rO1xyXG4gICAgaWYgKGRldnRvb2xzKSB7XHJcbiAgICAgICAgZGV2dG9vbHMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgYnVmZmVyLmZvckVhY2goKHsgZXZlbnQsIGFyZ3MgfSkgPT4gZGV2dG9vbHMuZW1pdChldmVudCwgLi4uYXJncykpO1xyXG4gICAgICAgIGJ1ZmZlciA9IFtdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAvLyBoYW5kbGUgbGF0ZSBkZXZ0b29scyBpbmplY3Rpb24gLSBvbmx5IGRvIHRoaXMgaWYgd2UgYXJlIGluIGFuIGFjdHVhbFxyXG4gICAgLy8gYnJvd3NlciBlbnZpcm9ubWVudCB0byBhdm9pZCB0aGUgdGltZXIgaGFuZGxlIHN0YWxsaW5nIHRlc3QgcnVubmVyIGV4aXRcclxuICAgIC8vICgjNDgxNSlcclxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgLy8gc29tZSBlbnZzIG1vY2sgd2luZG93IGJ1dCBub3QgZnVsbHlcclxuICAgICAgICB3aW5kb3cuSFRNTEVsZW1lbnQgJiZcclxuICAgICAgICAvLyBhbHNvIGV4Y2x1ZGUganNkb21cclxuICAgICAgICAhKChfYiA9IChfYSA9IHdpbmRvdy5uYXZpZ2F0b3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS51c2VyQWdlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcygnanNkb20nKSkpIHtcclxuICAgICAgICBjb25zdCByZXBsYXkgPSAodGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX18gPVxyXG4gICAgICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXyB8fCBbXSk7XHJcbiAgICAgICAgcmVwbGF5LnB1c2goKG5ld0hvb2spID0+IHtcclxuICAgICAgICAgICAgc2V0RGV2dG9vbHNIb29rKG5ld0hvb2ssIHRhcmdldCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY2xlYXIgYnVmZmVyIGFmdGVyIDNzIC0gdGhlIHVzZXIgcHJvYmFibHkgZG9lc24ndCBoYXZlIGRldnRvb2xzIGluc3RhbGxlZFxyXG4gICAgICAgIC8vIGF0IGFsbCwgYW5kIGtlZXBpbmcgdGhlIGJ1ZmZlciB3aWxsIGNhdXNlIG1lbW9yeSBsZWFrcyAoIzQ3MzgpXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGV2dG9vbHMpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGRldnRvb2xzTm90SW5zdGFsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBub24tYnJvd3NlciBlbnYsIGFzc3VtZSBub3QgaW5zdGFsbGVkXHJcbiAgICAgICAgZGV2dG9vbHNOb3RJbnN0YWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIGJ1ZmZlciA9IFtdO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGRldnRvb2xzSW5pdEFwcChhcHAsIHZlcnNpb24pIHtcclxuICAgIGVtaXQoXCJhcHA6aW5pdFwiIC8qIERldnRvb2xzSG9va3MuQVBQX0lOSVQgKi8sIGFwcCwgdmVyc2lvbiwge1xyXG4gICAgICAgIEZyYWdtZW50LFxyXG4gICAgICAgIFRleHQsXHJcbiAgICAgICAgQ29tbWVudCxcclxuICAgICAgICBTdGF0aWNcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGRldnRvb2xzVW5tb3VudEFwcChhcHApIHtcclxuICAgIGVtaXQoXCJhcHA6dW5tb3VudFwiIC8qIERldnRvb2xzSG9va3MuQVBQX1VOTU9VTlQgKi8sIGFwcCk7XHJcbn1cclxuY29uc3QgZGV2dG9vbHNDb21wb25lbnRBZGRlZCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRGV2dG9vbHNDb21wb25lbnRIb29rKFwiY29tcG9uZW50OmFkZGVkXCIgLyogRGV2dG9vbHNIb29rcy5DT01QT05FTlRfQURERUQgKi8pO1xyXG5jb25zdCBkZXZ0b29sc0NvbXBvbmVudFVwZGF0ZWQgPSBcclxuLyojX19QVVJFX18qLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXCJjb21wb25lbnQ6dXBkYXRlZFwiIC8qIERldnRvb2xzSG9va3MuQ09NUE9ORU5UX1VQREFURUQgKi8pO1xyXG5jb25zdCBkZXZ0b29sc0NvbXBvbmVudFJlbW92ZWQgPSBcclxuLyojX19QVVJFX18qLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXCJjb21wb25lbnQ6cmVtb3ZlZFwiIC8qIERldnRvb2xzSG9va3MuQ09NUE9ORU5UX1JFTU9WRUQgKi8pO1xyXG5mdW5jdGlvbiBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soaG9vaykge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQpID0+IHtcclxuICAgICAgICBlbWl0KGhvb2ssIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCwgY29tcG9uZW50LnVpZCwgY29tcG9uZW50LnBhcmVudCA/IGNvbXBvbmVudC5wYXJlbnQudWlkIDogdW5kZWZpbmVkLCBjb21wb25lbnQpO1xyXG4gICAgfTtcclxufVxyXG5jb25zdCBkZXZ0b29sc1BlcmZTdGFydCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRGV2dG9vbHNQZXJmb3JtYW5jZUhvb2soXCJwZXJmOnN0YXJ0XCIgLyogRGV2dG9vbHNIb29rcy5QRVJGT1JNQU5DRV9TVEFSVCAqLyk7XHJcbmNvbnN0IGRldnRvb2xzUGVyZkVuZCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRGV2dG9vbHNQZXJmb3JtYW5jZUhvb2soXCJwZXJmOmVuZFwiIC8qIERldnRvb2xzSG9va3MuUEVSRk9STUFOQ0VfRU5EICovKTtcclxuZnVuY3Rpb24gY3JlYXRlRGV2dG9vbHNQZXJmb3JtYW5jZUhvb2soaG9vaykge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQsIHR5cGUsIHRpbWUpID0+IHtcclxuICAgICAgICBlbWl0KGhvb2ssIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCwgY29tcG9uZW50LnVpZCwgY29tcG9uZW50LCB0eXBlLCB0aW1lKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZGV2dG9vbHNDb21wb25lbnRFbWl0KGNvbXBvbmVudCwgZXZlbnQsIHBhcmFtcykge1xyXG4gICAgZW1pdChcImNvbXBvbmVudDplbWl0XCIgLyogRGV2dG9vbHNIb29rcy5DT01QT05FTlRfRU1JVCAqLywgY29tcG9uZW50LmFwcENvbnRleHQuYXBwLCBjb21wb25lbnQsIGV2ZW50LCBwYXJhbXMpO1xyXG59XG5cbmZ1bmN0aW9uIGVtaXQkMShpbnN0YW5jZSwgZXZlbnQsIC4uLnJhd0FyZ3MpIHtcclxuICAgIGlmIChpbnN0YW5jZS5pc1VubW91bnRlZClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBjb25zdCBwcm9wcyA9IGluc3RhbmNlLnZub2RlLnByb3BzIHx8IEVNUFRZX09CSjtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjb25zdCB7IGVtaXRzT3B0aW9ucywgcHJvcHNPcHRpb25zOiBbcHJvcHNPcHRpb25zXSB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKGVtaXRzT3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoIShldmVudCBpbiBlbWl0c09wdGlvbnMpICYmXHJcbiAgICAgICAgICAgICAgICAhKGZhbHNlICkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJvcHNPcHRpb25zIHx8ICEodG9IYW5kbGVyS2V5KGV2ZW50KSBpbiBwcm9wc09wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgQ29tcG9uZW50IGVtaXR0ZWQgZXZlbnQgXCIke2V2ZW50fVwiIGJ1dCBpdCBpcyBuZWl0aGVyIGRlY2xhcmVkIGluIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdGhlIGVtaXRzIG9wdGlvbiBub3IgYXMgYW4gXCIke3RvSGFuZGxlcktleShldmVudCl9XCIgcHJvcC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGVtaXRzT3B0aW9uc1tldmVudF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRvciguLi5yYXdBcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihgSW52YWxpZCBldmVudCBhcmd1bWVudHM6IGV2ZW50IHZhbGlkYXRpb24gZmFpbGVkIGZvciBldmVudCBcIiR7ZXZlbnR9XCIuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGFyZ3MgPSByYXdBcmdzO1xyXG4gICAgY29uc3QgaXNNb2RlbExpc3RlbmVyID0gZXZlbnQuc3RhcnRzV2l0aCgndXBkYXRlOicpO1xyXG4gICAgLy8gZm9yIHYtbW9kZWwgdXBkYXRlOnh4eCBldmVudHMsIGFwcGx5IG1vZGlmaWVycyBvbiBhcmdzXHJcbiAgICBjb25zdCBtb2RlbEFyZyA9IGlzTW9kZWxMaXN0ZW5lciAmJiBldmVudC5zbGljZSg3KTtcclxuICAgIGlmIChtb2RlbEFyZyAmJiBtb2RlbEFyZyBpbiBwcm9wcykge1xyXG4gICAgICAgIGNvbnN0IG1vZGlmaWVyc0tleSA9IGAke21vZGVsQXJnID09PSAnbW9kZWxWYWx1ZScgPyAnbW9kZWwnIDogbW9kZWxBcmd9TW9kaWZpZXJzYDtcclxuICAgICAgICBjb25zdCB7IG51bWJlciwgdHJpbSB9ID0gcHJvcHNbbW9kaWZpZXJzS2V5XSB8fCBFTVBUWV9PQko7XHJcbiAgICAgICAgaWYgKHRyaW0pIHtcclxuICAgICAgICAgICAgYXJncyA9IHJhd0FyZ3MubWFwKGEgPT4gYS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGFyZ3MgPSByYXdBcmdzLm1hcCh0b051bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICBkZXZ0b29sc0NvbXBvbmVudEVtaXQoaW5zdGFuY2UsIGV2ZW50LCBhcmdzKTtcclxuICAgIH1cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjb25zdCBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiBwcm9wc1t0b0hhbmRsZXJLZXkobG93ZXJDYXNlRXZlbnQpXSkge1xyXG4gICAgICAgICAgICB3YXJuKGBFdmVudCBcIiR7bG93ZXJDYXNlRXZlbnR9XCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgYCArXHJcbiAgICAgICAgICAgICAgICBgJHtmb3JtYXRDb21wb25lbnROYW1lKGluc3RhbmNlLCBpbnN0YW5jZS50eXBlKX0gYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFwiJHtldmVudH1cIi4gYCArXHJcbiAgICAgICAgICAgICAgICBgTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgYCArXHJcbiAgICAgICAgICAgICAgICBgdi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIGAgK1xyXG4gICAgICAgICAgICAgICAgYFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFwiJHtoeXBoZW5hdGUoZXZlbnQpfVwiIGluc3RlYWQgb2YgXCIke2V2ZW50fVwiLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBoYW5kbGVyTmFtZTtcclxuICAgIGxldCBoYW5kbGVyID0gcHJvcHNbKGhhbmRsZXJOYW1lID0gdG9IYW5kbGVyS2V5KGV2ZW50KSldIHx8XHJcbiAgICAgICAgLy8gYWxzbyB0cnkgY2FtZWxDYXNlIGV2ZW50IGhhbmRsZXIgKCMyMjQ5KVxyXG4gICAgICAgIHByb3BzWyhoYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShjYW1lbGl6ZShldmVudCkpKV07XHJcbiAgICAvLyBmb3Igdi1tb2RlbCB1cGRhdGU6eHh4IGV2ZW50cywgYWxzbyB0cmlnZ2VyIGtlYmFiLWNhc2UgZXF1aXZhbGVudFxyXG4gICAgLy8gZm9yIHByb3BzIHBhc3NlZCB2aWEga2ViYWItY2FzZVxyXG4gICAgaWYgKCFoYW5kbGVyICYmIGlzTW9kZWxMaXN0ZW5lcikge1xyXG4gICAgICAgIGhhbmRsZXIgPSBwcm9wc1soaGFuZGxlck5hbWUgPSB0b0hhbmRsZXJLZXkoaHlwaGVuYXRlKGV2ZW50KSkpXTtcclxuICAgIH1cclxuICAgIGlmIChoYW5kbGVyKSB7XHJcbiAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaGFuZGxlciwgaW5zdGFuY2UsIDYgLyogRXJyb3JDb2Rlcy5DT01QT05FTlRfRVZFTlRfSEFORExFUiAqLywgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvbmNlSGFuZGxlciA9IHByb3BzW2hhbmRsZXJOYW1lICsgYE9uY2VgXTtcclxuICAgIGlmIChvbmNlSGFuZGxlcikge1xyXG4gICAgICAgIGlmICghaW5zdGFuY2UuZW1pdHRlZCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5lbWl0dGVkID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluc3RhbmNlLmVtaXR0ZWRbaGFuZGxlck5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2UuZW1pdHRlZFtoYW5kbGVyTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKG9uY2VIYW5kbGVyLCBpbnN0YW5jZSwgNiAvKiBFcnJvckNvZGVzLkNPTVBPTkVOVF9FVkVOVF9IQU5ETEVSICovLCBhcmdzKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVFbWl0c09wdGlvbnMoY29tcCwgYXBwQ29udGV4dCwgYXNNaXhpbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBjYWNoZSA9IGFwcENvbnRleHQuZW1pdHNDYWNoZTtcclxuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChjb21wKTtcclxuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBjYWNoZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXcgPSBjb21wLmVtaXRzO1xyXG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB7fTtcclxuICAgIC8vIGFwcGx5IG1peGluL2V4dGVuZHMgcHJvcHNcclxuICAgIGxldCBoYXNFeHRlbmRzID0gZmFsc2U7XHJcbiAgICBpZiAoX19WVUVfT1BUSU9OU19BUElfXyAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVuZEVtaXRzID0gKHJhdykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRnJvbUV4dGVuZCA9IG5vcm1hbGl6ZUVtaXRzT3B0aW9ucyhyYXcsIGFwcENvbnRleHQsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZEZyb21FeHRlbmQpIHtcclxuICAgICAgICAgICAgICAgIGhhc0V4dGVuZHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZXh0ZW5kKG5vcm1hbGl6ZWQsIG5vcm1hbGl6ZWRGcm9tRXh0ZW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFhc01peGluICYmIGFwcENvbnRleHQubWl4aW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhcHBDb250ZXh0Lm1peGlucy5mb3JFYWNoKGV4dGVuZEVtaXRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXAuZXh0ZW5kcykge1xyXG4gICAgICAgICAgICBleHRlbmRFbWl0cyhjb21wLmV4dGVuZHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tcC5taXhpbnMpIHtcclxuICAgICAgICAgICAgY29tcC5taXhpbnMuZm9yRWFjaChleHRlbmRFbWl0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFyYXcgJiYgIWhhc0V4dGVuZHMpIHtcclxuICAgICAgICBpZiAoaXNPYmplY3QoY29tcCkpIHtcclxuICAgICAgICAgICAgY2FjaGUuc2V0KGNvbXAsIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChpc0FycmF5KHJhdykpIHtcclxuICAgICAgICByYXcuZm9yRWFjaChrZXkgPT4gKG5vcm1hbGl6ZWRba2V5XSA9IG51bGwpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGV4dGVuZChub3JtYWxpemVkLCByYXcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XHJcbiAgICAgICAgY2FjaGUuc2V0KGNvbXAsIG5vcm1hbGl6ZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XHJcbn1cclxuLy8gQ2hlY2sgaWYgYW4gaW5jb21pbmcgcHJvcCBrZXkgaXMgYSBkZWNsYXJlZCBlbWl0IGV2ZW50IGxpc3RlbmVyLlxyXG4vLyBlLmcuIFdpdGggYGVtaXRzOiB7IGNsaWNrOiBudWxsIH1gLCBwcm9wcyBuYW1lZCBgb25DbGlja2AgYW5kIGBvbmNsaWNrYCBhcmVcclxuLy8gYm90aCBjb25zaWRlcmVkIG1hdGNoZWQgbGlzdGVuZXJzLlxyXG5mdW5jdGlvbiBpc0VtaXRMaXN0ZW5lcihvcHRpb25zLCBrZXkpIHtcclxuICAgIGlmICghb3B0aW9ucyB8fCAhaXNPbihrZXkpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAga2V5ID0ga2V5LnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywgJycpO1xyXG4gICAgcmV0dXJuIChoYXNPd24ob3B0aW9ucywga2V5WzBdLnRvTG93ZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSkpIHx8XHJcbiAgICAgICAgaGFzT3duKG9wdGlvbnMsIGh5cGhlbmF0ZShrZXkpKSB8fFxyXG4gICAgICAgIGhhc093bihvcHRpb25zLCBrZXkpKTtcclxufVxuXG4vKipcclxuICogbWFyayB0aGUgY3VycmVudCByZW5kZXJpbmcgaW5zdGFuY2UgZm9yIGFzc2V0IHJlc29sdXRpb24gKGUuZy5cclxuICogcmVzb2x2ZUNvbXBvbmVudCwgcmVzb2x2ZURpcmVjdGl2ZSkgZHVyaW5nIHJlbmRlclxyXG4gKi9cclxubGV0IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XHJcbmxldCBjdXJyZW50U2NvcGVJZCA9IG51bGw7XHJcbi8qKlxyXG4gKiBOb3RlOiByZW5kZXJpbmcgY2FsbHMgbWF5YmUgbmVzdGVkLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGFyZW50IHJlbmRlcmluZ1xyXG4gKiBpbnN0YW5jZSBpZiBwcmVzZW50LCB3aGljaCBzaG91bGQgYmUgcmVzdG9yZWQgYWZ0ZXIgdGhlIHJlbmRlciBpcyBkb25lOlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBjb25zdCBwcmV2ID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGkpXHJcbiAqIC8vIC4uLnJlbmRlclxyXG4gKiBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UocHJldilcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IHByZXYgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XHJcbiAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgIGN1cnJlbnRTY29wZUlkID0gKGluc3RhbmNlICYmIGluc3RhbmNlLnR5cGUuX19zY29wZUlkKSB8fCBudWxsO1xyXG4gICAgcmV0dXJuIHByZXY7XHJcbn1cclxuLyoqXHJcbiAqIFNldCBzY29wZSBpZCB3aGVuIGNyZWF0aW5nIGhvaXN0ZWQgdm5vZGVzLlxyXG4gKiBAcHJpdmF0ZSBjb21waWxlciBoZWxwZXJcclxuICovXHJcbmZ1bmN0aW9uIHB1c2hTY29wZUlkKGlkKSB7XHJcbiAgICBjdXJyZW50U2NvcGVJZCA9IGlkO1xyXG59XHJcbi8qKlxyXG4gKiBUZWNobmljYWxseSB3ZSBubyBsb25nZXIgbmVlZCB0aGlzIGFmdGVyIDMuMC44IGJ1dCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHNhbWVcclxuICogQVBJIGZvciBiYWNrd2FyZHMgY29tcGF0IHcvIGNvZGUgZ2VuZXJhdGVkIGJ5IGNvbXBpbGVycy5cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHBvcFNjb3BlSWQoKSB7XHJcbiAgICBjdXJyZW50U2NvcGVJZCA9IG51bGw7XHJcbn1cclxuLyoqXHJcbiAqIE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IHdpdGhTY29wZUlkID0gKF9pZCkgPT4gd2l0aEN0eDtcclxuLyoqXHJcbiAqIFdyYXAgYSBzbG90IGZ1bmN0aW9uIHRvIG1lbW9pemUgY3VycmVudCByZW5kZXJpbmcgaW5zdGFuY2VcclxuICogQHByaXZhdGUgY29tcGlsZXIgaGVscGVyXHJcbiAqL1xyXG5mdW5jdGlvbiB3aXRoQ3R4KGZuLCBjdHggPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UsIGlzTm9uU2NvcGVkU2xvdCAvLyBmYWxzZSBvbmx5XHJcbikge1xyXG4gICAgaWYgKCFjdHgpXHJcbiAgICAgICAgcmV0dXJuIGZuO1xyXG4gICAgLy8gYWxyZWFkeSBub3JtYWxpemVkXHJcbiAgICBpZiAoZm4uX24pIHtcclxuICAgICAgICByZXR1cm4gZm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZW5kZXJGbldpdGhDb250ZXh0ID0gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAvLyBJZiBhIHVzZXIgY2FsbHMgYSBjb21waWxlZCBzbG90IGluc2lkZSBhIHRlbXBsYXRlIGV4cHJlc3Npb24gKCMxNzQ1KSwgaXRcclxuICAgICAgICAvLyBjYW4gbWVzcyB1cCBibG9jayB0cmFja2luZywgc28gYnkgZGVmYXVsdCB3ZSBkaXNhYmxlIGJsb2NrIHRyYWNraW5nIGFuZFxyXG4gICAgICAgIC8vIGZvcmNlIGJhaWwgb3V0IHdoZW4gaW52b2tpbmcgYSBjb21waWxlZCBzbG90IChpbmRpY2F0ZWQgYnkgdGhlIC5fZCBmbGFnKS5cclxuICAgICAgICAvLyBUaGlzIGlzbid0IG5lY2Vzc2FyeSBpZiByZW5kZXJpbmcgYSBjb21waWxlZCBgPHNsb3Q+YCwgc28gd2UgZmxpcCB0aGVcclxuICAgICAgICAvLyAuX2QgZmxhZyBvZmYgd2hlbiBpbnZva2luZyB0aGUgd3JhcHBlZCBmbiBpbnNpZGUgYHJlbmRlclNsb3RgLlxyXG4gICAgICAgIGlmIChyZW5kZXJGbldpdGhDb250ZXh0Ll9kKSB7XHJcbiAgICAgICAgICAgIHNldEJsb2NrVHJhY2tpbmcoLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwcmV2SW5zdGFuY2UgPSBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UoY3R4KTtcclxuICAgICAgICBjb25zdCByZXMgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UocHJldkluc3RhbmNlKTtcclxuICAgICAgICBpZiAocmVuZGVyRm5XaXRoQ29udGV4dC5fZCkge1xyXG4gICAgICAgICAgICBzZXRCbG9ja1RyYWNraW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICBkZXZ0b29sc0NvbXBvbmVudFVwZGF0ZWQoY3R4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH07XHJcbiAgICAvLyBtYXJrIG5vcm1hbGl6ZWQgdG8gYXZvaWQgZHVwbGljYXRlZCB3cmFwcGluZ1xyXG4gICAgcmVuZGVyRm5XaXRoQ29udGV4dC5fbiA9IHRydWU7XHJcbiAgICAvLyBtYXJrIHRoaXMgYXMgY29tcGlsZWQgYnkgZGVmYXVsdFxyXG4gICAgLy8gdGhpcyBpcyB1c2VkIGluIHZub2RlLnRzIC0+IG5vcm1hbGl6ZUNoaWxkcmVuKCkgdG8gc2V0IHRoZSBzbG90XHJcbiAgICAvLyByZW5kZXJpbmcgZmxhZy5cclxuICAgIHJlbmRlckZuV2l0aENvbnRleHQuX2MgPSB0cnVlO1xyXG4gICAgLy8gZGlzYWJsZSBibG9jayB0cmFja2luZyBieSBkZWZhdWx0XHJcbiAgICByZW5kZXJGbldpdGhDb250ZXh0Ll9kID0gdHJ1ZTtcclxuICAgIHJldHVybiByZW5kZXJGbldpdGhDb250ZXh0O1xyXG59XG5cbi8qKlxyXG4gKiBkZXYgb25seSBmbGFnIHRvIHRyYWNrIHdoZXRoZXIgJGF0dHJzIHdhcyB1c2VkIGR1cmluZyByZW5kZXIuXHJcbiAqIElmICRhdHRycyB3YXMgdXNlZCBkdXJpbmcgcmVuZGVyIHRoZW4gdGhlIHdhcm5pbmcgZm9yIGZhaWxlZCBhdHRyc1xyXG4gKiBmYWxsdGhyb3VnaCBjYW4gYmUgc3VwcHJlc3NlZC5cclxuICovXHJcbmxldCBhY2Nlc3NlZEF0dHJzID0gZmFsc2U7XHJcbmZ1bmN0aW9uIG1hcmtBdHRyc0FjY2Vzc2VkKCkge1xyXG4gICAgYWNjZXNzZWRBdHRycyA9IHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgeyB0eXBlOiBDb21wb25lbnQsIHZub2RlLCBwcm94eSwgd2l0aFByb3h5LCBwcm9wcywgcHJvcHNPcHRpb25zOiBbcHJvcHNPcHRpb25zXSwgc2xvdHMsIGF0dHJzLCBlbWl0LCByZW5kZXIsIHJlbmRlckNhY2hlLCBkYXRhLCBzZXR1cFN0YXRlLCBjdHgsIGluaGVyaXRBdHRycyB9ID0gaW5zdGFuY2U7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgbGV0IGZhbGx0aHJvdWdoQXR0cnM7XHJcbiAgICBjb25zdCBwcmV2ID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGluc3RhbmNlKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBhY2Nlc3NlZEF0dHJzID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiA0IC8qIFNoYXBlRmxhZ3MuU1RBVEVGVUxfQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgIC8vIHdpdGhQcm94eSBpcyBhIHByb3h5IHdpdGggYSBkaWZmZXJlbnQgYGhhc2AgdHJhcCBvbmx5IGZvclxyXG4gICAgICAgICAgICAvLyBydW50aW1lLWNvbXBpbGVkIHJlbmRlciBmdW5jdGlvbnMgdXNpbmcgYHdpdGhgIGJsb2NrLlxyXG4gICAgICAgICAgICBjb25zdCBwcm94eVRvVXNlID0gd2l0aFByb3h5IHx8IHByb3h5O1xyXG4gICAgICAgICAgICByZXN1bHQgPSBub3JtYWxpemVWTm9kZShyZW5kZXIuY2FsbChwcm94eVRvVXNlLCBwcm94eVRvVXNlLCByZW5kZXJDYWNoZSwgcHJvcHMsIHNldHVwU3RhdGUsIGRhdGEsIGN0eCkpO1xyXG4gICAgICAgICAgICBmYWxsdGhyb3VnaEF0dHJzID0gYXR0cnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbmFsXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IENvbXBvbmVudDtcclxuICAgICAgICAgICAgLy8gaW4gZGV2LCBtYXJrIGF0dHJzIGFjY2Vzc2VkIGlmIG9wdGlvbmFsIHByb3BzIChhdHRycyA9PT0gcHJvcHMpXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgYXR0cnMgPT09IHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBtYXJrQXR0cnNBY2Nlc3NlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vcm1hbGl6ZVZOb2RlKHJlbmRlci5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICAgICA/IHJlbmRlcihwcm9wcywgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBhdHRycygpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBdHRyc0FjY2Vzc2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogeyBhdHRycywgc2xvdHMsIGVtaXQgfSlcclxuICAgICAgICAgICAgICAgIDogcmVuZGVyKHByb3BzLCBudWxsIC8qIHdlIGtub3cgaXQgZG9lc24ndCBuZWVkIGl0ICovKSk7XHJcbiAgICAgICAgICAgIGZhbGx0aHJvdWdoQXR0cnMgPSBDb21wb25lbnQucHJvcHNcclxuICAgICAgICAgICAgICAgID8gYXR0cnNcclxuICAgICAgICAgICAgICAgIDogZ2V0RnVuY3Rpb25hbEZhbGx0aHJvdWdoKGF0dHJzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgYmxvY2tTdGFjay5sZW5ndGggPSAwO1xyXG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIDEgLyogRXJyb3JDb2Rlcy5SRU5ERVJfRlVOQ1RJT04gKi8pO1xyXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gYXR0ciBtZXJnaW5nXHJcbiAgICAvLyBpbiBkZXYgbW9kZSwgY29tbWVudHMgYXJlIHByZXNlcnZlZCwgYW5kIGl0J3MgcG9zc2libGUgZm9yIGEgdGVtcGxhdGVcclxuICAgIC8vIHRvIGhhdmUgY29tbWVudHMgYWxvbmcgc2lkZSB0aGUgcm9vdCBlbGVtZW50IHdoaWNoIG1ha2VzIGl0IGEgZnJhZ21lbnRcclxuICAgIGxldCByb290ID0gcmVzdWx0O1xyXG4gICAgbGV0IHNldFJvb3QgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgcmVzdWx0LnBhdGNoRmxhZyA+IDAgJiZcclxuICAgICAgICByZXN1bHQucGF0Y2hGbGFnICYgMjA0OCAvKiBQYXRjaEZsYWdzLkRFVl9ST09UX0ZSQUdNRU5UICovKSB7XHJcbiAgICAgICAgW3Jvb3QsIHNldFJvb3RdID0gZ2V0Q2hpbGRSb290KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmFsbHRocm91Z2hBdHRycyAmJiBpbmhlcml0QXR0cnMgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZhbGx0aHJvdWdoQXR0cnMpO1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGVGbGFnIH0gPSByb290O1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgKDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovIHwgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wc09wdGlvbnMgJiYga2V5cy5zb21lKGlzTW9kZWxMaXN0ZW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHYtbW9kZWwgbGlzdGVuZXIgKG9uVXBkYXRlOnh4eCkgaGFzIGEgY29ycmVzcG9uZGluZyBkZWNsYXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByb3AsIGl0IGluZGljYXRlcyB0aGlzIGNvbXBvbmVudCBleHBlY3RzIHRvIGhhbmRsZSB2LW1vZGVsIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBub3QgZmFsbHRocm91Z2guXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVsYXRlZDogIzE1NDMsICMxNjQzLCAjMTk4OVxyXG4gICAgICAgICAgICAgICAgICAgIGZhbGx0aHJvdWdoQXR0cnMgPSBmaWx0ZXJNb2RlbExpc3RlbmVycyhmYWxsdGhyb3VnaEF0dHJzLCBwcm9wc09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm9vdCA9IGNsb25lVk5vZGUocm9vdCwgZmFsbHRocm91Z2hBdHRycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFhY2Nlc3NlZEF0dHJzICYmIHJvb3QudHlwZSAhPT0gQ29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsQXR0cnMgPSBPYmplY3Qua2V5cyhhdHRycyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudEF0dHJzID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYUF0dHJzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFsbEF0dHJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFsbEF0dHJzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09uKGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHYtbW9kZWwgaGFuZGxlcnMgd2hlbiB0aGV5IGZhaWwgdG8gZmFsbHRocm91Z2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc01vZGVsTGlzdGVuZXIoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGBvbmAsIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgdG8gcmVmbGVjdCBldmVudCBjYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QXR0cnMucHVzaChrZXlbMl0udG9Mb3dlckNhc2UoKSArIGtleS5zbGljZSgzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cnMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHRyYUF0dHJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYEV4dHJhbmVvdXMgbm9uLXByb3BzIGF0dHJpYnV0ZXMgKGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtleHRyYUF0dHJzLmpvaW4oJywgJyl9KSBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHdlcmUgcGFzc2VkIHRvIGNvbXBvbmVudCBidXQgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgYmVjYXVzZSBjb21wb25lbnQgcmVuZGVycyBmcmFnbWVudCBvciB0ZXh0IHJvb3Qgbm9kZXMuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRBdHRycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBFeHRyYW5lb3VzIG5vbi1lbWl0cyBldmVudCBsaXN0ZW5lcnMgKGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtldmVudEF0dHJzLmpvaW4oJywgJyl9KSBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHdlcmUgcGFzc2VkIHRvIGNvbXBvbmVudCBidXQgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgYmVjYXVzZSBjb21wb25lbnQgcmVuZGVycyBmcmFnbWVudCBvciB0ZXh0IHJvb3Qgbm9kZXMuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgSWYgdGhlIGxpc3RlbmVyIGlzIGludGVuZGVkIHRvIGJlIGEgY29tcG9uZW50IGN1c3RvbSBldmVudCBsaXN0ZW5lciBvbmx5LCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGRlY2xhcmUgaXQgdXNpbmcgdGhlIFwiZW1pdHNcIiBvcHRpb24uYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpbmhlcml0IGRpcmVjdGl2ZXNcclxuICAgIGlmICh2bm9kZS5kaXJzKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNFbGVtZW50Um9vdChyb290KSkge1xyXG4gICAgICAgICAgICB3YXJuKGBSdW50aW1lIGRpcmVjdGl2ZSB1c2VkIG9uIGNvbXBvbmVudCB3aXRoIG5vbi1lbGVtZW50IHJvb3Qgbm9kZS4gYCArXHJcbiAgICAgICAgICAgICAgICBgVGhlIGRpcmVjdGl2ZXMgd2lsbCBub3QgZnVuY3Rpb24gYXMgaW50ZW5kZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNsb25lIGJlZm9yZSBtdXRhdGluZyBzaW5jZSB0aGUgcm9vdCBtYXkgYmUgYSBob2lzdGVkIHZub2RlXHJcbiAgICAgICAgcm9vdCA9IGNsb25lVk5vZGUocm9vdCk7XHJcbiAgICAgICAgcm9vdC5kaXJzID0gcm9vdC5kaXJzID8gcm9vdC5kaXJzLmNvbmNhdCh2bm9kZS5kaXJzKSA6IHZub2RlLmRpcnM7XHJcbiAgICB9XHJcbiAgICAvLyBpbmhlcml0IHRyYW5zaXRpb24gZGF0YVxyXG4gICAgaWYgKHZub2RlLnRyYW5zaXRpb24pIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc0VsZW1lbnRSb290KHJvb3QpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYENvbXBvbmVudCBpbnNpZGUgPFRyYW5zaXRpb24+IHJlbmRlcnMgbm9uLWVsZW1lbnQgcm9vdCBub2RlIGAgK1xyXG4gICAgICAgICAgICAgICAgYHRoYXQgY2Fubm90IGJlIGFuaW1hdGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LnRyYW5zaXRpb24gPSB2bm9kZS50cmFuc2l0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBzZXRSb290KSB7XHJcbiAgICAgICAgc2V0Um9vdChyb290KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHJvb3Q7XHJcbiAgICB9XHJcbiAgICBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UocHJldik7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKiBJbiBkZXYgbW9kZSwgdGVtcGxhdGUgcm9vdCBsZXZlbCBjb21tZW50cyBhcmUgcmVuZGVyZWQsIHdoaWNoIHR1cm5zIHRoZVxyXG4gKiB0ZW1wbGF0ZSBpbnRvIGEgZnJhZ21lbnQgcm9vdCwgYnV0IHdlIG5lZWQgdG8gbG9jYXRlIHRoZSBzaW5nbGUgZWxlbWVudFxyXG4gKiByb290IGZvciBhdHRycyBhbmQgc2NvcGUgaWQgcHJvY2Vzc2luZy5cclxuICovXHJcbmNvbnN0IGdldENoaWxkUm9vdCA9ICh2bm9kZSkgPT4ge1xyXG4gICAgY29uc3QgcmF3Q2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcclxuICAgIGNvbnN0IGR5bmFtaWNDaGlsZHJlbiA9IHZub2RlLmR5bmFtaWNDaGlsZHJlbjtcclxuICAgIGNvbnN0IGNoaWxkUm9vdCA9IGZpbHRlclNpbmdsZVJvb3QocmF3Q2hpbGRyZW4pO1xyXG4gICAgaWYgKCFjaGlsZFJvb3QpIHtcclxuICAgICAgICByZXR1cm4gW3Zub2RlLCB1bmRlZmluZWRdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPSByYXdDaGlsZHJlbi5pbmRleE9mKGNoaWxkUm9vdCk7XHJcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSBkeW5hbWljQ2hpbGRyZW4gPyBkeW5hbWljQ2hpbGRyZW4uaW5kZXhPZihjaGlsZFJvb3QpIDogLTE7XHJcbiAgICBjb25zdCBzZXRSb290ID0gKHVwZGF0ZWRSb290KSA9PiB7XHJcbiAgICAgICAgcmF3Q2hpbGRyZW5baW5kZXhdID0gdXBkYXRlZFJvb3Q7XHJcbiAgICAgICAgaWYgKGR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgICAgICBpZiAoZHluYW1pY0luZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNDaGlsZHJlbltkeW5hbWljSW5kZXhdID0gdXBkYXRlZFJvb3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodXBkYXRlZFJvb3QucGF0Y2hGbGFnID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdm5vZGUuZHluYW1pY0NoaWxkcmVuID0gWy4uLmR5bmFtaWNDaGlsZHJlbiwgdXBkYXRlZFJvb3RdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbbm9ybWFsaXplVk5vZGUoY2hpbGRSb290KSwgc2V0Um9vdF07XHJcbn07XHJcbmZ1bmN0aW9uIGZpbHRlclNpbmdsZVJvb3QoY2hpbGRyZW4pIHtcclxuICAgIGxldCBzaW5nbGVSb290O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSB1c2VyIGNvbW1lbnRcclxuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgIT09IENvbW1lbnQgfHwgY2hpbGQuY2hpbGRyZW4gPT09ICd2LWlmJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZVJvb3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBoYXMgbW9yZSB0aGFuIDEgbm9uLWNvbW1lbnQgY2hpbGQsIHJldHVybiBub3dcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVSb290ID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2luZ2xlUm9vdDtcclxufVxyXG5jb25zdCBnZXRGdW5jdGlvbmFsRmFsbHRocm91Z2ggPSAoYXR0cnMpID0+IHtcclxuICAgIGxldCByZXM7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xyXG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAnc3R5bGUnIHx8IGlzT24oa2V5KSkge1xyXG4gICAgICAgICAgICAocmVzIHx8IChyZXMgPSB7fSkpW2tleV0gPSBhdHRyc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn07XHJcbmNvbnN0IGZpbHRlck1vZGVsTGlzdGVuZXJzID0gKGF0dHJzLCBwcm9wcykgPT4ge1xyXG4gICAgY29uc3QgcmVzID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xyXG4gICAgICAgIGlmICghaXNNb2RlbExpc3RlbmVyKGtleSkgfHwgIShrZXkuc2xpY2UoOSkgaW4gcHJvcHMpKSB7XHJcbiAgICAgICAgICAgIHJlc1trZXldID0gYXR0cnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59O1xyXG5jb25zdCBpc0VsZW1lbnRSb290ID0gKHZub2RlKSA9PiB7XHJcbiAgICByZXR1cm4gKHZub2RlLnNoYXBlRmxhZyAmICg2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovIHwgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8pIHx8XHJcbiAgICAgICAgdm5vZGUudHlwZSA9PT0gQ29tbWVudCAvLyBwb3RlbnRpYWwgdi1pZiBicmFuY2ggc3dpdGNoXHJcbiAgICApO1xyXG59O1xyXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVDb21wb25lbnQocHJldlZOb2RlLCBuZXh0Vk5vZGUsIG9wdGltaXplZCkge1xyXG4gICAgY29uc3QgeyBwcm9wczogcHJldlByb3BzLCBjaGlsZHJlbjogcHJldkNoaWxkcmVuLCBjb21wb25lbnQgfSA9IHByZXZWTm9kZTtcclxuICAgIGNvbnN0IHsgcHJvcHM6IG5leHRQcm9wcywgY2hpbGRyZW46IG5leHRDaGlsZHJlbiwgcGF0Y2hGbGFnIH0gPSBuZXh0Vk5vZGU7XHJcbiAgICBjb25zdCBlbWl0cyA9IGNvbXBvbmVudC5lbWl0c09wdGlvbnM7XHJcbiAgICAvLyBQYXJlbnQgY29tcG9uZW50J3MgcmVuZGVyIGZ1bmN0aW9uIHdhcyBob3QtdXBkYXRlZC4gU2luY2UgdGhpcyBtYXkgaGF2ZVxyXG4gICAgLy8gY2F1c2VkIHRoZSBjaGlsZCBjb21wb25lbnQncyBzbG90cyBjb250ZW50IHRvIGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0b1xyXG4gICAgLy8gZm9yY2UgdGhlIGNoaWxkIHRvIHVwZGF0ZSBhcyB3ZWxsLlxyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAocHJldkNoaWxkcmVuIHx8IG5leHRDaGlsZHJlbikgJiYgaXNIbXJVcGRhdGluZykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gZm9yY2UgY2hpbGQgdXBkYXRlIGZvciBydW50aW1lIGRpcmVjdGl2ZSBvciB0cmFuc2l0aW9uIG9uIGNvbXBvbmVudCB2bm9kZS5cclxuICAgIGlmIChuZXh0Vk5vZGUuZGlycyB8fCBuZXh0Vk5vZGUudHJhbnNpdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGltaXplZCAmJiBwYXRjaEZsYWcgPj0gMCkge1xyXG4gICAgICAgIGlmIChwYXRjaEZsYWcgJiAxMDI0IC8qIFBhdGNoRmxhZ3MuRFlOQU1JQ19TTE9UUyAqLykge1xyXG4gICAgICAgICAgICAvLyBzbG90IGNvbnRlbnQgdGhhdCByZWZlcmVuY2VzIHZhbHVlcyB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCxcclxuICAgICAgICAgICAgLy8gZS5nLiBpbiBhIHYtZm9yXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0Y2hGbGFnICYgMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldlByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISFuZXh0UHJvcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJlc2VuY2Ugb2YgdGhpcyBmbGFnIGluZGljYXRlcyBwcm9wcyBhcmUgYWx3YXlzIG5vbi1udWxsXHJcbiAgICAgICAgICAgIHJldHVybiBoYXNQcm9wc0NoYW5nZWQocHJldlByb3BzLCBuZXh0UHJvcHMsIGVtaXRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGF0Y2hGbGFnICYgOCAvKiBQYXRjaEZsYWdzLlBST1BTICovKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNQcm9wcyA9IG5leHRWTm9kZS5keW5hbWljUHJvcHM7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBkeW5hbWljUHJvcHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFByb3BzW2tleV0gIT09IHByZXZQcm9wc1trZXldICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIWlzRW1pdExpc3RlbmVyKGVtaXRzLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyB0aGlzIHBhdGggaXMgb25seSB0YWtlbiBieSBtYW51YWxseSB3cml0dGVuIHJlbmRlciBmdW5jdGlvbnNcclxuICAgICAgICAvLyBzbyBwcmVzZW5jZSBvZiBhbnkgY2hpbGRyZW4gbGVhZHMgdG8gYSBmb3JjZWQgdXBkYXRlXHJcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbiB8fCBuZXh0Q2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4gfHwgIW5leHRDaGlsZHJlbi4kc3RhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldlByb3BzID09PSBuZXh0UHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZQcm9wcykge1xyXG4gICAgICAgICAgICByZXR1cm4gISFuZXh0UHJvcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbmV4dFByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGFzUHJvcHNDaGFuZ2VkKHByZXZQcm9wcywgbmV4dFByb3BzLCBlbWl0cyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaGFzUHJvcHNDaGFuZ2VkKHByZXZQcm9wcywgbmV4dFByb3BzLCBlbWl0c09wdGlvbnMpIHtcclxuICAgIGNvbnN0IG5leHRLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcclxuICAgIGlmIChuZXh0S2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKHByZXZQcm9wcykubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5leHRLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gbmV4dEtleXNbaV07XHJcbiAgICAgICAgaWYgKG5leHRQcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSAmJlxyXG4gICAgICAgICAgICAhaXNFbWl0TGlzdGVuZXIoZW1pdHNPcHRpb25zLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiB1cGRhdGVIT0NIb3N0RWwoeyB2bm9kZSwgcGFyZW50IH0sIGVsIC8vIEhvc3ROb2RlXHJcbikge1xyXG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuc3ViVHJlZSA9PT0gdm5vZGUpIHtcclxuICAgICAgICAodm5vZGUgPSBwYXJlbnQudm5vZGUpLmVsID0gZWw7XHJcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgIH1cclxufVxuXG5jb25zdCBpc1N1c3BlbnNlID0gKHR5cGUpID0+IHR5cGUuX19pc1N1c3BlbnNlO1xyXG4vLyBTdXNwZW5zZSBleHBvc2VzIGEgY29tcG9uZW50LWxpa2UgQVBJLCBhbmQgaXMgdHJlYXRlZCBsaWtlIGEgY29tcG9uZW50XHJcbi8vIGluIHRoZSBjb21waWxlciwgYnV0IGludGVybmFsbHkgaXQncyBhIHNwZWNpYWwgYnVpbHQtaW4gdHlwZSB0aGF0IGhvb2tzXHJcbi8vIGRpcmVjdGx5IGludG8gdGhlIHJlbmRlcmVyLlxyXG5jb25zdCBTdXNwZW5zZUltcGwgPSB7XHJcbiAgICBuYW1lOiAnU3VzcGVuc2UnLFxyXG4gICAgLy8gSW4gb3JkZXIgdG8gbWFrZSBTdXNwZW5zZSB0cmVlLXNoYWthYmxlLCB3ZSBuZWVkIHRvIGF2b2lkIGltcG9ydGluZyBpdFxyXG4gICAgLy8gZGlyZWN0bHkgaW4gdGhlIHJlbmRlcmVyLiBUaGUgcmVuZGVyZXIgY2hlY2tzIGZvciB0aGUgX19pc1N1c3BlbnNlIGZsYWdcclxuICAgIC8vIG9uIGEgdm5vZGUncyB0eXBlIGFuZCBjYWxscyB0aGUgYHByb2Nlc3NgIG1ldGhvZCwgcGFzc2luZyBpbiByZW5kZXJlclxyXG4gICAgLy8gaW50ZXJuYWxzLlxyXG4gICAgX19pc1N1c3BlbnNlOiB0cnVlLFxyXG4gICAgcHJvY2VzcyhuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIFxyXG4gICAgLy8gcGxhdGZvcm0tc3BlY2lmaWMgaW1wbCBwYXNzZWQgZnJvbSByZW5kZXJlclxyXG4gICAgcmVuZGVyZXJJbnRlcm5hbHMpIHtcclxuICAgICAgICBpZiAobjEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBtb3VudFN1c3BlbnNlKG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwYXRjaFN1c3BlbnNlKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGh5ZHJhdGU6IGh5ZHJhdGVTdXNwZW5zZSxcclxuICAgIGNyZWF0ZTogY3JlYXRlU3VzcGVuc2VCb3VuZGFyeSxcclxuICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplU3VzcGVuc2VDaGlsZHJlblxyXG59O1xyXG4vLyBGb3JjZS1jYXN0ZWQgcHVibGljIHR5cGluZyBmb3IgaCBhbmQgVFNYIHByb3BzIGluZmVyZW5jZVxyXG5jb25zdCBTdXNwZW5zZSA9IChTdXNwZW5zZUltcGwgKTtcclxuZnVuY3Rpb24gdHJpZ2dlckV2ZW50KHZub2RlLCBuYW1lKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHNbbmFtZV07XHJcbiAgICBpZiAoaXNGdW5jdGlvbihldmVudExpc3RlbmVyKSkge1xyXG4gICAgICAgIGV2ZW50TGlzdGVuZXIoKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscykge1xyXG4gICAgY29uc3QgeyBwOiBwYXRjaCwgbzogeyBjcmVhdGVFbGVtZW50IH0gfSA9IHJlbmRlcmVySW50ZXJuYWxzO1xyXG4gICAgY29uc3QgaGlkZGVuQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBjb25zdCBzdXNwZW5zZSA9ICh2bm9kZS5zdXNwZW5zZSA9IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnkodm5vZGUsIHBhcmVudFN1c3BlbnNlLCBwYXJlbnRDb21wb25lbnQsIGNvbnRhaW5lciwgaGlkZGVuQ29udGFpbmVyLCBhbmNob3IsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpKTtcclxuICAgIC8vIHN0YXJ0IG1vdW50aW5nIHRoZSBjb250ZW50IHN1YnRyZWUgaW4gYW4gb2ZmLWRvbSBjb250YWluZXJcclxuICAgIHBhdGNoKG51bGwsIChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gdm5vZGUuc3NDb250ZW50KSwgaGlkZGVuQ29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzKTtcclxuICAgIC8vIG5vdyBjaGVjayBpZiB3ZSBoYXZlIGVuY291bnRlcmVkIGFueSBhc3luYyBkZXBzXHJcbiAgICBpZiAoc3VzcGVuc2UuZGVwcyA+IDApIHtcclxuICAgICAgICAvLyBoYXMgYXN5bmNcclxuICAgICAgICAvLyBpbnZva2UgQGZhbGxiYWNrIGV2ZW50XHJcbiAgICAgICAgdHJpZ2dlckV2ZW50KHZub2RlLCAnb25QZW5kaW5nJyk7XHJcbiAgICAgICAgdHJpZ2dlckV2ZW50KHZub2RlLCAnb25GYWxsYmFjaycpO1xyXG4gICAgICAgIC8vIG1vdW50IHRoZSBmYWxsYmFjayB0cmVlXHJcbiAgICAgICAgcGF0Y2gobnVsbCwgdm5vZGUuc3NGYWxsYmFjaywgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgbnVsbCwgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcclxuICAgICAgICBpc1NWRywgc2xvdFNjb3BlSWRzKTtcclxuICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIHZub2RlLnNzRmFsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gU3VzcGVuc2UgaGFzIG5vIGFzeW5jIGRlcHMuIEp1c3QgcmVzb2x2ZS5cclxuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcGF0Y2hTdXNwZW5zZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgeyBwOiBwYXRjaCwgdW06IHVubW91bnQsIG86IHsgY3JlYXRlRWxlbWVudCB9IH0pIHtcclxuICAgIGNvbnN0IHN1c3BlbnNlID0gKG4yLnN1c3BlbnNlID0gbjEuc3VzcGVuc2UpO1xyXG4gICAgc3VzcGVuc2Uudm5vZGUgPSBuMjtcclxuICAgIG4yLmVsID0gbjEuZWw7XHJcbiAgICBjb25zdCBuZXdCcmFuY2ggPSBuMi5zc0NvbnRlbnQ7XHJcbiAgICBjb25zdCBuZXdGYWxsYmFjayA9IG4yLnNzRmFsbGJhY2s7XHJcbiAgICBjb25zdCB7IGFjdGl2ZUJyYW5jaCwgcGVuZGluZ0JyYW5jaCwgaXNJbkZhbGxiYWNrLCBpc0h5ZHJhdGluZyB9ID0gc3VzcGVuc2U7XHJcbiAgICBpZiAocGVuZGluZ0JyYW5jaCkge1xyXG4gICAgICAgIHN1c3BlbnNlLnBlbmRpbmdCcmFuY2ggPSBuZXdCcmFuY2g7XHJcbiAgICAgICAgaWYgKGlzU2FtZVZOb2RlVHlwZShuZXdCcmFuY2gsIHBlbmRpbmdCcmFuY2gpKSB7XHJcbiAgICAgICAgICAgIC8vIHNhbWUgcm9vdCB0eXBlIGJ1dCBjb250ZW50IG1heSBoYXZlIGNoYW5nZWQuXHJcbiAgICAgICAgICAgIHBhdGNoKHBlbmRpbmdCcmFuY2gsIG5ld0JyYW5jaCwgc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UuZGVwcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJbkZhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaChhY3RpdmVCcmFuY2gsIG5ld0ZhbGxiYWNrLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBudWxsLCAvLyBmYWxsYmFjayB0cmVlIHdpbGwgbm90IGhhdmUgc3VzcGVuc2UgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIHNldEFjdGl2ZUJyYW5jaChzdXNwZW5zZSwgbmV3RmFsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB0b2dnbGVkIGJlZm9yZSBwZW5kaW5nIHRyZWUgaXMgcmVzb2x2ZWRcclxuICAgICAgICAgICAgc3VzcGVuc2UucGVuZGluZ0lkKys7XHJcbiAgICAgICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdG9nZ2xlZCBiZWZvcmUgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLCB0aGUgY3VycmVudCBET00gdHJlZSBpc1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyIHZhbGlkLiBzZXQgaXQgYXMgdGhlIGFjdGl2ZSBicmFuY2ggc28gaXQgd2lsbCBiZSB1bm1vdW50ZWRcclxuICAgICAgICAgICAgICAgIC8vIHdoZW4gcmVzb2x2ZWRcclxuICAgICAgICAgICAgICAgIHN1c3BlbnNlLmlzSHlkcmF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzdXNwZW5zZS5hY3RpdmVCcmFuY2ggPSBwZW5kaW5nQnJhbmNoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudChwZW5kaW5nQnJhbmNoLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpbmNyZW1lbnQgcGVuZGluZyBJRC4gdGhpcyBpcyB1c2VkIHRvIGludmFsaWRhdGUgYXN5bmMgY2FsbGJhY2tzXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IHN1c3BlbnNlIHN0YXRlXHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmRlcHMgPSAwO1xyXG4gICAgICAgICAgICAvLyBkaXNjYXJkIGVmZmVjdHMgZnJvbSBwZW5kaW5nIGJyYW5jaFxyXG4gICAgICAgICAgICBzdXNwZW5zZS5lZmZlY3RzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIC8vIGRpc2NhcmQgcHJldmlvdXMgY29udGFpbmVyXHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICBpZiAoaXNJbkZhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGluIGZhbGxiYWNrIHN0YXRlXHJcbiAgICAgICAgICAgICAgICBwYXRjaChudWxsLCBuZXdCcmFuY2gsIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaChhY3RpdmVCcmFuY2gsIG5ld0ZhbGxiYWNrLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBudWxsLCAvLyBmYWxsYmFjayB0cmVlIHdpbGwgbm90IGhhdmUgc3VzcGVuc2UgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdGYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYWN0aXZlQnJhbmNoICYmIGlzU2FtZVZOb2RlVHlwZShuZXdCcmFuY2gsIGFjdGl2ZUJyYW5jaCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvZ2dsZWQgXCJiYWNrXCIgdG8gY3VycmVudCBhY3RpdmUgYnJhbmNoXHJcbiAgICAgICAgICAgICAgICBwYXRjaChhY3RpdmVCcmFuY2gsIG5ld0JyYW5jaCwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgc3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBmb3JjZSByZXNvbHZlXHJcbiAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc3dpdGNoZWQgdG8gYSAzcmQgYnJhbmNoXHJcbiAgICAgICAgICAgICAgICBwYXRjaChudWxsLCBuZXdCcmFuY2gsIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoYWN0aXZlQnJhbmNoICYmIGlzU2FtZVZOb2RlVHlwZShuZXdCcmFuY2gsIGFjdGl2ZUJyYW5jaCkpIHtcclxuICAgICAgICAgICAgLy8gcm9vdCBkaWQgbm90IGNoYW5nZSwganVzdCBub3JtYWwgcGF0Y2hcclxuICAgICAgICAgICAgcGF0Y2goYWN0aXZlQnJhbmNoLCBuZXdCcmFuY2gsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIG5ld0JyYW5jaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyByb290IG5vZGUgdG9nZ2xlZFxyXG4gICAgICAgICAgICAvLyBpbnZva2UgQHBlbmRpbmcgZXZlbnRcclxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KG4yLCAnb25QZW5kaW5nJyk7XHJcbiAgICAgICAgICAgIC8vIG1vdW50IHBlbmRpbmcgYnJhbmNoIGluIG9mZi1kb20gY29udGFpbmVyXHJcbiAgICAgICAgICAgIHN1c3BlbnNlLnBlbmRpbmdCcmFuY2ggPSBuZXdCcmFuY2g7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCsrO1xyXG4gICAgICAgICAgICBwYXRjaChudWxsLCBuZXdCcmFuY2gsIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgaWYgKHN1c3BlbnNlLmRlcHMgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaW5jb21pbmcgYnJhbmNoIGhhcyBubyBhc3luYyBkZXBzLCByZXNvbHZlIG5vdy5cclxuICAgICAgICAgICAgICAgIHN1c3BlbnNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGltZW91dCwgcGVuZGluZ0lkIH0gPSBzdXNwZW5zZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2UucGVuZGluZ0lkID09PSBwZW5kaW5nSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlLmZhbGxiYWNrKG5ld0ZhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZW91dCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlLmZhbGxiYWNrKG5ld0ZhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5sZXQgaGFzV2FybmVkID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGNyZWF0ZVN1c3BlbnNlQm91bmRhcnkodm5vZGUsIHBhcmVudCwgcGFyZW50Q29tcG9uZW50LCBjb250YWluZXIsIGhpZGRlbkNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzLCBpc0h5ZHJhdGluZyA9IGZhbHNlKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWZhbHNlICYmICFoYXNXYXJuZWQpIHtcclxuICAgICAgICBoYXNXYXJuZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgYGNvbnNvbGUuaW5mb2AgY2Fubm90IGJlIG51bGwgZXJyb3JcclxuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShgPFN1c3BlbnNlPiBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBhbmQgaXRzIEFQSSB3aWxsIGxpa2VseSBjaGFuZ2UuYCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHA6IHBhdGNoLCBtOiBtb3ZlLCB1bTogdW5tb3VudCwgbjogbmV4dCwgbzogeyBwYXJlbnROb2RlLCByZW1vdmUgfSB9ID0gcmVuZGVyZXJJbnRlcm5hbHM7XHJcbiAgICBjb25zdCB0aW1lb3V0ID0gdG9OdW1iZXIodm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMudGltZW91dCk7XHJcbiAgICBjb25zdCBzdXNwZW5zZSA9IHtcclxuICAgICAgICB2bm9kZSxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxyXG4gICAgICAgIGlzU1ZHLFxyXG4gICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICBoaWRkZW5Db250YWluZXIsXHJcbiAgICAgICAgYW5jaG9yLFxyXG4gICAgICAgIGRlcHM6IDAsXHJcbiAgICAgICAgcGVuZGluZ0lkOiAwLFxyXG4gICAgICAgIHRpbWVvdXQ6IHR5cGVvZiB0aW1lb3V0ID09PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiAtMSxcclxuICAgICAgICBhY3RpdmVCcmFuY2g6IG51bGwsXHJcbiAgICAgICAgcGVuZGluZ0JyYW5jaDogbnVsbCxcclxuICAgICAgICBpc0luRmFsbGJhY2s6IHRydWUsXHJcbiAgICAgICAgaXNIeWRyYXRpbmcsXHJcbiAgICAgICAgaXNVbm1vdW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIGVmZmVjdHM6IFtdLFxyXG4gICAgICAgIHJlc29sdmUocmVzdW1lID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bWUgJiYgIXN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHN1c3BlbnNlLnJlc29sdmUoKSBpcyBjYWxsZWQgd2l0aG91dCBhIHBlbmRpbmcgYnJhbmNoLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbnNlLmlzVW5tb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdXNwZW5zZS5yZXNvbHZlKCkgaXMgY2FsbGVkIG9uIGFuIGFscmVhZHkgdW5tb3VudGVkIHN1c3BlbnNlIGJvdW5kYXJ5LmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdm5vZGUsIGFjdGl2ZUJyYW5jaCwgcGVuZGluZ0JyYW5jaCwgcGVuZGluZ0lkLCBlZmZlY3RzLCBwYXJlbnRDb21wb25lbnQsIGNvbnRhaW5lciB9ID0gc3VzcGVuc2U7XHJcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZS5pc0h5ZHJhdGluZykge1xyXG4gICAgICAgICAgICAgICAgc3VzcGVuc2UuaXNIeWRyYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghcmVzdW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxheUVudGVyID0gYWN0aXZlQnJhbmNoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0JyYW5jaC50cmFuc2l0aW9uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0JyYW5jaC50cmFuc2l0aW9uLm1vZGUgPT09ICdvdXQtaW4nO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGF5RW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVCcmFuY2gudHJhbnNpdGlvbi5hZnRlckxlYXZlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ0lkID09PSBzdXNwZW5zZS5wZW5kaW5nSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUocGVuZGluZ0JyYW5jaCwgY29udGFpbmVyLCBhbmNob3IsIDAgLyogTW92ZVR5cGUuRU5URVIgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaW5pdGlhbCBhbmNob3Igb24gbW91bnRcclxuICAgICAgICAgICAgICAgIGxldCB7IGFuY2hvciB9ID0gc3VzcGVuc2U7XHJcbiAgICAgICAgICAgICAgICAvLyB1bm1vdW50IGN1cnJlbnQgYWN0aXZlIHRyZWVcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVCcmFuY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZmFsbGJhY2sgdHJlZSB3YXMgbW91bnRlZCwgaXQgbWF5IGhhdmUgYmVlbiBtb3ZlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzIHBhcnQgb2YgYSBwYXJlbnQgc3VzcGVuc2UuIGdldCB0aGUgbGF0ZXN0IGFuY2hvciBmb3IgaW5zZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9yID0gbmV4dChhY3RpdmVCcmFuY2gpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQoYWN0aXZlQnJhbmNoLCBwYXJlbnRDb21wb25lbnQsIHN1c3BlbnNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghZGVsYXlFbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgY29udGVudCBmcm9tIG9mZi1kb20gY29udGFpbmVyIHRvIGFjdHVhbCBjb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBtb3ZlKHBlbmRpbmdCcmFuY2gsIGNvbnRhaW5lciwgYW5jaG9yLCAwIC8qIE1vdmVUeXBlLkVOVEVSICovKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIHBlbmRpbmdCcmFuY2gpO1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gbnVsbDtcclxuICAgICAgICAgICAgc3VzcGVuc2UuaXNJbkZhbGxiYWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGZsdXNoIGJ1ZmZlcmVkIGVmZmVjdHNcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBwZW5kaW5nIHBhcmVudCBzdXNwZW5zZVxyXG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gc3VzcGVuc2UucGFyZW50O1xyXG4gICAgICAgICAgICBsZXQgaGFzVW5yZXNvbHZlZEFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucGVuZGluZ0JyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgcGVuZGluZyBwYXJlbnQgc3VzcGVuc2UsIG1lcmdlIGJ1ZmZlcmVkIHBvc3Qgam9ic1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGludG8gdGhhdCBwYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuZWZmZWN0cy5wdXNoKC4uLmVmZmVjdHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc1VucmVzb2x2ZWRBbmNlc3RvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG5vIHBlbmRpbmcgcGFyZW50IHN1c3BlbnNlLCBmbHVzaCBhbGwgam9ic1xyXG4gICAgICAgICAgICBpZiAoIWhhc1VucmVzb2x2ZWRBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgcXVldWVQb3N0Rmx1c2hDYihlZmZlY3RzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdXNwZW5zZS5lZmZlY3RzID0gW107XHJcbiAgICAgICAgICAgIC8vIGludm9rZSBAcmVzb2x2ZSBldmVudFxyXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQodm5vZGUsICdvblJlc29sdmUnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbGxiYWNrKGZhbGxiYWNrVk5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKCFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyB2bm9kZSwgYWN0aXZlQnJhbmNoLCBwYXJlbnRDb21wb25lbnQsIGNvbnRhaW5lciwgaXNTVkcgfSA9IHN1c3BlbnNlO1xyXG4gICAgICAgICAgICAvLyBpbnZva2UgQGZhbGxiYWNrIGV2ZW50XHJcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudCh2bm9kZSwgJ29uRmFsbGJhY2snKTtcclxuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV4dChhY3RpdmVCcmFuY2gpO1xyXG4gICAgICAgICAgICBjb25zdCBtb3VudEZhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdXNwZW5zZS5pc0luRmFsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBtb3VudCB0aGUgZmFsbGJhY2sgdHJlZVxyXG4gICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgZmFsbGJhY2tWTm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgbnVsbCwgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcclxuICAgICAgICAgICAgICAgIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIGZhbGxiYWNrVk5vZGUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBkZWxheUVudGVyID0gZmFsbGJhY2tWTm9kZS50cmFuc2l0aW9uICYmIGZhbGxiYWNrVk5vZGUudHJhbnNpdGlvbi5tb2RlID09PSAnb3V0LWluJztcclxuICAgICAgICAgICAgaWYgKGRlbGF5RW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUJyYW5jaC50cmFuc2l0aW9uLmFmdGVyTGVhdmUgPSBtb3VudEZhbGxiYWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmlzSW5GYWxsYmFjayA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIHVubW91bnQgY3VycmVudCBhY3RpdmUgYnJhbmNoXHJcbiAgICAgICAgICAgIHVubW91bnQoYWN0aXZlQnJhbmNoLCBwYXJlbnRDb21wb25lbnQsIG51bGwsIC8vIG5vIHN1c3BlbnNlIHNvIHVubW91bnQgaG9va3MgZmlyZSBub3dcclxuICAgICAgICAgICAgdHJ1ZSAvLyBzaG91bGRSZW1vdmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFkZWxheUVudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudEZhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmUoY29udGFpbmVyLCBhbmNob3IsIHR5cGUpIHtcclxuICAgICAgICAgICAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoICYmXHJcbiAgICAgICAgICAgICAgICBtb3ZlKHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgY29udGFpbmVyLCBhbmNob3IsIHR5cGUpO1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBuZXh0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VzcGVuc2UuYWN0aXZlQnJhbmNoICYmIG5leHQoc3VzcGVuc2UuYWN0aXZlQnJhbmNoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlZ2lzdGVyRGVwKGluc3RhbmNlLCBzZXR1cFJlbmRlckVmZmVjdCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc0luUGVuZGluZ1N1c3BlbnNlID0gISFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoO1xyXG4gICAgICAgICAgICBpZiAoaXNJblBlbmRpbmdTdXNwZW5zZSkge1xyXG4gICAgICAgICAgICAgICAgc3VzcGVuc2UuZGVwcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkRWwgPSBpbnN0YW5jZS52bm9kZS5lbDtcclxuICAgICAgICAgICAgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIC5hc3luY0RlcC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyLCBpbnN0YW5jZSwgMCAvKiBFcnJvckNvZGVzLlNFVFVQX0ZVTkNUSU9OICovKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jU2V0dXBSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0cnkgd2hlbiB0aGUgc2V0dXAoKSBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IG1heSBoYXZlIGJlZW4gdW5tb3VudGVkIGJlZm9yZSByZXNvbHZlLlxyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmlzVW5tb3VudGVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2UuaXNVbm1vdW50ZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nSWQgIT09IGluc3RhbmNlLnN1c3BlbnNlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyByZXRyeSBmcm9tIHRoaXMgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hc3luY1Jlc29sdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdm5vZGUgfSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHB1c2hXYXJuaW5nQ29udGV4dCh2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVTZXR1cFJlc3VsdChpbnN0YW5jZSwgYXN5bmNTZXR1cFJlc3VsdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGVkRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2bm9kZSBtYXkgaGF2ZSBiZWVuIHJlcGxhY2VkIGlmIGFuIHVwZGF0ZSBoYXBwZW5lZCBiZWZvcmUgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXN5bmMgZGVwIGlzIHJlc29sdmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlLmVsID0gaHlkcmF0ZWRFbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gIWh5ZHJhdGVkRWwgJiYgaW5zdGFuY2Uuc3ViVHJlZS5lbDtcclxuICAgICAgICAgICAgICAgIHNldHVwUmVuZGVyRWZmZWN0KGluc3RhbmNlLCB2bm9kZSwgXHJcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgbWF5IGhhdmUgYmVlbiBtb3ZlZCBiZWZvcmUgcmVzb2x2ZS5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgaHlkcmF0aW9uLCBpbnN0YW5jZS5zdWJUcmVlIHdpbGwgYmUgdGhlIGNvbW1lbnRcclxuICAgICAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyLlxyXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZShoeWRyYXRlZEVsIHx8IGluc3RhbmNlLnN1YlRyZWUuZWwpLCBcclxuICAgICAgICAgICAgICAgIC8vIGFuY2hvciB3aWxsIG5vdCBiZSB1c2VkIGlmIHRoaXMgaXMgaHlkcmF0aW9uLCBzbyBvbmx5IG5lZWQgdG9cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNpZGVyIHRoZSBjb21tZW50IHBsYWNlaG9sZGVyIGNhc2UuXHJcbiAgICAgICAgICAgICAgICBoeWRyYXRlZEVsID8gbnVsbCA6IG5leHQoaW5zdGFuY2Uuc3ViVHJlZSksIHN1c3BlbnNlLCBpc1NWRywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShwbGFjZWhvbGRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVIT0NIb3N0RWwoaW5zdGFuY2UsIHZub2RlLmVsKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gb25seSBkZWNyZWFzZSBkZXBzIGNvdW50IGlmIHN1c3BlbnNlIGlzIG5vdCBhbHJlYWR5IHJlc29sdmVkXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJblBlbmRpbmdTdXNwZW5zZSAmJiAtLXN1c3BlbnNlLmRlcHMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdW5tb3VudChwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpIHtcclxuICAgICAgICAgICAgc3VzcGVuc2UuaXNVbm1vdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UuYWN0aXZlQnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50KHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50KHN1c3BlbnNlLnBlbmRpbmdCcmFuY2gsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gc3VzcGVuc2U7XHJcbn1cclxuZnVuY3Rpb24gaHlkcmF0ZVN1c3BlbnNlKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzLCBoeWRyYXRlTm9kZSkge1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXHJcbiAgICBjb25zdCBzdXNwZW5zZSA9ICh2bm9kZS5zdXNwZW5zZSA9IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnkodm5vZGUsIHBhcmVudFN1c3BlbnNlLCBwYXJlbnRDb21wb25lbnQsIG5vZGUucGFyZW50Tm9kZSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIG51bGwsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIHRydWUgLyogaHlkcmF0aW5nICovKSk7XHJcbiAgICAvLyB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNjZW5hcmlvcyBmb3Igc2VydmVyLXJlbmRlcmVkIHN1c3BlbnNlOlxyXG4gICAgLy8gLSBzdWNjZXNzOiBzc3IgY29udGVudCBzaG91bGQgYmUgZnVsbHkgcmVzb2x2ZWRcclxuICAgIC8vIC0gZmFpbHVyZTogc3NyIGNvbnRlbnQgc2hvdWxkIGJlIHRoZSBmYWxsYmFjayBicmFuY2guXHJcbiAgICAvLyBob3dldmVyLCBvbiB0aGUgY2xpZW50IHdlIGRvbid0IHJlYWxseSBrbm93IGlmIGl0IGhhcyBmYWlsZWQgb3Igbm90XHJcbiAgICAvLyBhdHRlbXB0IHRvIGh5ZHJhdGUgdGhlIERPTSBhc3N1bWluZyBpdCBoYXMgc3VjY2VlZGVkLCBidXQgd2Ugc3RpbGxcclxuICAgIC8vIG5lZWQgdG8gY29uc3RydWN0IGEgc3VzcGVuc2UgYm91bmRhcnkgZmlyc3RcclxuICAgIGNvbnN0IHJlc3VsdCA9IGh5ZHJhdGVOb2RlKG5vZGUsIChzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gdm5vZGUuc3NDb250ZW50KSwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgaWYgKHN1c3BlbnNlLmRlcHMgPT09IDApIHtcclxuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVTdXNwZW5zZUNoaWxkcmVuKHZub2RlKSB7XHJcbiAgICBjb25zdCB7IHNoYXBlRmxhZywgY2hpbGRyZW4gfSA9IHZub2RlO1xyXG4gICAgY29uc3QgaXNTbG90Q2hpbGRyZW4gPSBzaGFwZUZsYWcgJiAzMiAvKiBTaGFwZUZsYWdzLlNMT1RTX0NISUxEUkVOICovO1xyXG4gICAgdm5vZGUuc3NDb250ZW50ID0gbm9ybWFsaXplU3VzcGVuc2VTbG90KGlzU2xvdENoaWxkcmVuID8gY2hpbGRyZW4uZGVmYXVsdCA6IGNoaWxkcmVuKTtcclxuICAgIHZub2RlLnNzRmFsbGJhY2sgPSBpc1Nsb3RDaGlsZHJlblxyXG4gICAgICAgID8gbm9ybWFsaXplU3VzcGVuc2VTbG90KGNoaWxkcmVuLmZhbGxiYWNrKVxyXG4gICAgICAgIDogY3JlYXRlVk5vZGUoQ29tbWVudCk7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplU3VzcGVuc2VTbG90KHMpIHtcclxuICAgIGxldCBibG9jaztcclxuICAgIGlmIChpc0Z1bmN0aW9uKHMpKSB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCbG9jayA9IGlzQmxvY2tUcmVlRW5hYmxlZCAmJiBzLl9jO1xyXG4gICAgICAgIGlmICh0cmFja0Jsb2NrKSB7XHJcbiAgICAgICAgICAgIC8vIGRpc2FibGVUcmFja2luZzogZmFsc2VcclxuICAgICAgICAgICAgLy8gYWxsb3cgYmxvY2sgdHJhY2tpbmcgZm9yIGNvbXBpbGVkIHNsb3RzXHJcbiAgICAgICAgICAgIC8vIChzZWUgLi9jb21wb25lbnRSZW5kZXJDb250ZXh0LnRzKVxyXG4gICAgICAgICAgICBzLl9kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG9wZW5CbG9jaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzID0gcygpO1xyXG4gICAgICAgIGlmICh0cmFja0Jsb2NrKSB7XHJcbiAgICAgICAgICAgIHMuX2QgPSB0cnVlO1xyXG4gICAgICAgICAgICBibG9jayA9IGN1cnJlbnRCbG9jaztcclxuICAgICAgICAgICAgY2xvc2VCbG9jaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpc0FycmF5KHMpKSB7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2hpbGQgPSBmaWx0ZXJTaW5nbGVSb290KHMpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIXNpbmdsZUNoaWxkKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYDxTdXNwZW5zZT4gc2xvdHMgZXhwZWN0IGEgc2luZ2xlIHJvb3Qgbm9kZS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyA9IHNpbmdsZUNoaWxkO1xyXG4gICAgfVxyXG4gICAgcyA9IG5vcm1hbGl6ZVZOb2RlKHMpO1xyXG4gICAgaWYgKGJsb2NrICYmICFzLmR5bmFtaWNDaGlsZHJlbikge1xyXG4gICAgICAgIHMuZHluYW1pY0NoaWxkcmVuID0gYmxvY2suZmlsdGVyKGMgPT4gYyAhPT0gcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcztcclxufVxyXG5mdW5jdGlvbiBxdWV1ZUVmZmVjdFdpdGhTdXNwZW5zZShmbiwgc3VzcGVuc2UpIHtcclxuICAgIGlmIChzdXNwZW5zZSAmJiBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XHJcbiAgICAgICAgaWYgKGlzQXJyYXkoZm4pKSB7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmVmZmVjdHMucHVzaCguLi5mbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goZm4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHF1ZXVlUG9zdEZsdXNoQ2IoZm4pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNldEFjdGl2ZUJyYW5jaChzdXNwZW5zZSwgYnJhbmNoKSB7XHJcbiAgICBzdXNwZW5zZS5hY3RpdmVCcmFuY2ggPSBicmFuY2g7XHJcbiAgICBjb25zdCB7IHZub2RlLCBwYXJlbnRDb21wb25lbnQgfSA9IHN1c3BlbnNlO1xyXG4gICAgY29uc3QgZWwgPSAodm5vZGUuZWwgPSBicmFuY2guZWwpO1xyXG4gICAgLy8gaW4gY2FzZSBzdXNwZW5zZSBpcyB0aGUgcm9vdCBub2RlIG9mIGEgY29tcG9uZW50LFxyXG4gICAgLy8gcmVjdXJzaXZlbHkgdXBkYXRlIHRoZSBIT0MgZWxcclxuICAgIGlmIChwYXJlbnRDb21wb25lbnQgJiYgcGFyZW50Q29tcG9uZW50LnN1YlRyZWUgPT09IHZub2RlKSB7XHJcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LnZub2RlLmVsID0gZWw7XHJcbiAgICAgICAgdXBkYXRlSE9DSG9zdEVsKHBhcmVudENvbXBvbmVudCwgZWwpO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIHByb3ZpZGUoa2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYHByb3ZpZGUoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBwcm92aWRlcyA9IGN1cnJlbnRJbnN0YW5jZS5wcm92aWRlcztcclxuICAgICAgICAvLyBieSBkZWZhdWx0IGFuIGluc3RhbmNlIGluaGVyaXRzIGl0cyBwYXJlbnQncyBwcm92aWRlcyBvYmplY3RcclxuICAgICAgICAvLyBidXQgd2hlbiBpdCBuZWVkcyB0byBwcm92aWRlIHZhbHVlcyBvZiBpdHMgb3duLCBpdCBjcmVhdGVzIGl0c1xyXG4gICAgICAgIC8vIG93biBwcm92aWRlcyBvYmplY3QgdXNpbmcgcGFyZW50IHByb3ZpZGVzIG9iamVjdCBhcyBwcm90b3R5cGUuXHJcbiAgICAgICAgLy8gdGhpcyB3YXkgaW4gYGluamVjdGAgd2UgY2FuIHNpbXBseSBsb29rIHVwIGluamVjdGlvbnMgZnJvbSBkaXJlY3RcclxuICAgICAgICAvLyBwYXJlbnQgYW5kIGxldCB0aGUgcHJvdG90eXBlIGNoYWluIGRvIHRoZSB3b3JrLlxyXG4gICAgICAgIGNvbnN0IHBhcmVudFByb3ZpZGVzID0gY3VycmVudEluc3RhbmNlLnBhcmVudCAmJiBjdXJyZW50SW5zdGFuY2UucGFyZW50LnByb3ZpZGVzO1xyXG4gICAgICAgIGlmIChwYXJlbnRQcm92aWRlcyA9PT0gcHJvdmlkZXMpIHtcclxuICAgICAgICAgICAgcHJvdmlkZXMgPSBjdXJyZW50SW5zdGFuY2UucHJvdmlkZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFByb3ZpZGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVFMgZG9lc24ndCBhbGxvdyBzeW1ib2wgYXMgaW5kZXggdHlwZVxyXG4gICAgICAgIHByb3ZpZGVzW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbmplY3Qoa2V5LCBkZWZhdWx0VmFsdWUsIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSA9IGZhbHNlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byBgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlYCBzbyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBpblxyXG4gICAgLy8gYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xyXG4gICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgLy8gIzI0MDBcclxuICAgICAgICAvLyB0byBzdXBwb3J0IGBhcHAudXNlYCBwbHVnaW5zLFxyXG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIGFwcENvbnRleHQncyBgcHJvdmlkZXNgIGlmIHRoZSBpbnN0YW5jZSBpcyBhdCByb290XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXMgPSBpbnN0YW5jZS5wYXJlbnQgPT0gbnVsbFxyXG4gICAgICAgICAgICA/IGluc3RhbmNlLnZub2RlLmFwcENvbnRleHQgJiYgaW5zdGFuY2Uudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlc1xyXG4gICAgICAgICAgICA6IGluc3RhbmNlLnBhcmVudC5wcm92aWRlcztcclxuICAgICAgICBpZiAocHJvdmlkZXMgJiYga2V5IGluIHByb3ZpZGVzKSB7XHJcbiAgICAgICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmVhdERlZmF1bHRBc0ZhY3RvcnkgJiYgaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXHJcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRWYWx1ZS5jYWxsKGluc3RhbmNlLnByb3h5KVxyXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBpbmplY3Rpb24gXCIke1N0cmluZyhrZXkpfVwiIG5vdCBmb3VuZC5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB3YXJuKGBpbmplY3QoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpIG9yIGZ1bmN0aW9uYWwgY29tcG9uZW50cy5gKTtcclxuICAgIH1cclxufVxuXG4vLyBTaW1wbGUgZWZmZWN0LlxyXG5mdW5jdGlvbiB3YXRjaEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgb3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgOiB7IGZsdXNoOiAncG9zdCcgfSkpO1xyXG59XHJcbmZ1bmN0aW9uIHdhdGNoU3luY0VmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBmbHVzaDogJ3N5bmMnIH0pIDogeyBmbHVzaDogJ3N5bmMnIH0pKTtcclxufVxyXG4vLyBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycyB0byB0cmlnZ2VyIG9uIHVuZGVmaW5lZCBpbml0aWFsIHZhbHVlc1xyXG5jb25zdCBJTklUSUFMX1dBVENIRVJfVkFMVUUgPSB7fTtcclxuLy8gaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gd2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucykge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNGdW5jdGlvbihjYikpIHtcclxuICAgICAgICB3YXJuKGBcXGB3YXRjaChmbiwgb3B0aW9ucz8pXFxgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gYCArXHJcbiAgICAgICAgICAgIGBVc2UgXFxgd2F0Y2hFZmZlY3QoZm4sIG9wdGlvbnM/KVxcYCBpbnN0ZWFkLiBcXGB3YXRjaFxcYCBub3cgb25seSBgICtcclxuICAgICAgICAgICAgYHN1cHBvcnRzIFxcYHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnM/KSBzaWduYXR1cmUuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG9XYXRjaChzb3VyY2UsIGNiLCBvcHRpb25zKTtcclxufVxyXG5mdW5jdGlvbiBkb1dhdGNoKHNvdXJjZSwgY2IsIHsgaW1tZWRpYXRlLCBkZWVwLCBmbHVzaCwgb25UcmFjaywgb25UcmlnZ2VyIH0gPSBFTVBUWV9PQkopIHtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWNiKSB7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYHdhdGNoKCkgXCJpbW1lZGlhdGVcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgYCArXHJcbiAgICAgICAgICAgICAgICBgd2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRlZXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB3YXJuKGB3YXRjaCgpIFwiZGVlcFwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSBgICtcclxuICAgICAgICAgICAgICAgIGB3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHdhcm5JbnZhbGlkU291cmNlID0gKHMpID0+IHtcclxuICAgICAgICB3YXJuKGBJbnZhbGlkIHdhdGNoIHNvdXJjZTogYCwgcywgYEEgd2F0Y2ggc291cmNlIGNhbiBvbmx5IGJlIGEgZ2V0dGVyL2VmZmVjdCBmdW5jdGlvbiwgYSByZWYsIGAgK1xyXG4gICAgICAgICAgICBgYSByZWFjdGl2ZSBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZXNlIHR5cGVzLmApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xyXG4gICAgbGV0IGdldHRlcjtcclxuICAgIGxldCBmb3JjZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgIGxldCBpc011bHRpU291cmNlID0gZmFsc2U7XHJcbiAgICBpZiAoaXNSZWYoc291cmNlKSkge1xyXG4gICAgICAgIGdldHRlciA9ICgpID0+IHNvdXJjZS52YWx1ZTtcclxuICAgICAgICBmb3JjZVRyaWdnZXIgPSBpc1NoYWxsb3ckMShzb3VyY2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNSZWFjdGl2ZShzb3VyY2UpKSB7XHJcbiAgICAgICAgZ2V0dGVyID0gKCkgPT4gc291cmNlO1xyXG4gICAgICAgIGRlZXAgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgaXNNdWx0aVNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgZm9yY2VUcmlnZ2VyID0gc291cmNlLnNvbWUocyA9PiBpc1JlYWN0aXZlKHMpIHx8IGlzU2hhbGxvdyQxKHMpKTtcclxuICAgICAgICBnZXR0ZXIgPSAoKSA9PiBzb3VyY2UubWFwKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNSZWYocykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUocykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZShzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFdpdGhFcnJvckhhbmRsaW5nKHMsIGluc3RhbmNlLCAyIC8qIEVycm9yQ29kZXMuV0FUQ0hfR0VUVEVSICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuSW52YWxpZFNvdXJjZShzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XHJcbiAgICAgICAgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIC8vIGdldHRlciB3aXRoIGNiXHJcbiAgICAgICAgICAgIGdldHRlciA9ICgpID0+IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhzb3VyY2UsIGluc3RhbmNlLCAyIC8qIEVycm9yQ29kZXMuV0FUQ0hfR0VUVEVSICovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG5vIGNiIC0+IHNpbXBsZSBlZmZlY3RcclxuICAgICAgICAgICAgZ2V0dGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmlzVW5tb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoc291cmNlLCBpbnN0YW5jZSwgMyAvKiBFcnJvckNvZGVzLldBVENIX0NBTExCQUNLICovLCBbb25DbGVhbnVwXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZ2V0dGVyID0gTk9PUDtcclxuICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2FybkludmFsaWRTb3VyY2Uoc291cmNlKTtcclxuICAgIH1cclxuICAgIGlmIChjYiAmJiBkZWVwKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZUdldHRlciA9IGdldHRlcjtcclxuICAgICAgICBnZXR0ZXIgPSAoKSA9PiB0cmF2ZXJzZShiYXNlR2V0dGVyKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNsZWFudXA7XHJcbiAgICBsZXQgb25DbGVhbnVwID0gKGZuKSA9PiB7XHJcbiAgICAgICAgY2xlYW51cCA9IGVmZmVjdC5vblN0b3AgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhmbiwgaW5zdGFuY2UsIDQgLyogRXJyb3JDb2Rlcy5XQVRDSF9DTEVBTlVQICovKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8vIGluIFNTUiB0aGVyZSBpcyBubyBuZWVkIHRvIHNldHVwIGFuIGFjdHVhbCBlZmZlY3QsIGFuZCBpdCBzaG91bGQgYmUgbm9vcFxyXG4gICAgLy8gdW5sZXNzIGl0J3MgZWFnZXJcclxuICAgIGlmIChpc0luU1NSQ29tcG9uZW50U2V0dXApIHtcclxuICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbm90IGNhbGwgdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgKCsgcnVubmVyIGlzIG5vdCBzZXQgdXApXHJcbiAgICAgICAgb25DbGVhbnVwID0gTk9PUDtcclxuICAgICAgICBpZiAoIWNiKSB7XHJcbiAgICAgICAgICAgIGdldHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoY2IsIGluc3RhbmNlLCAzIC8qIEVycm9yQ29kZXMuV0FUQ0hfQ0FMTEJBQ0sgKi8sIFtcclxuICAgICAgICAgICAgICAgIGdldHRlcigpLFxyXG4gICAgICAgICAgICAgICAgaXNNdWx0aVNvdXJjZSA/IFtdIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgb25DbGVhbnVwXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTk9PUDtcclxuICAgIH1cclxuICAgIGxldCBvbGRWYWx1ZSA9IGlzTXVsdGlTb3VyY2UgPyBbXSA6IElOSVRJQUxfV0FUQ0hFUl9WQUxVRTtcclxuICAgIGNvbnN0IGpvYiA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIWVmZmVjdC5hY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBlZmZlY3QucnVuKCk7XHJcbiAgICAgICAgICAgIGlmIChkZWVwIHx8XHJcbiAgICAgICAgICAgICAgICBmb3JjZVRyaWdnZXIgfHxcclxuICAgICAgICAgICAgICAgIChpc011bHRpU291cmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXdWYWx1ZS5zb21lKCh2LCBpKSA9PiBoYXNDaGFuZ2VkKHYsIG9sZFZhbHVlW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICA6IGhhc0NoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKSkgfHxcclxuICAgICAgICAgICAgICAgIChmYWxzZSAgKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCBiZWZvcmUgcnVubmluZyBjYiBhZ2FpblxyXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhjYiwgaW5zdGFuY2UsIDMgLyogRXJyb3JDb2Rlcy5XQVRDSF9DQUxMQkFDSyAqLywgW1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3MgdW5kZWZpbmVkIGFzIHRoZSBvbGQgdmFsdWUgd2hlbiBpdCdzIGNoYW5nZWQgZm9yIHRoZSBmaXJzdCB0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWUgPT09IElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA/IHVuZGVmaW5lZCA6IG9sZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3YXRjaEVmZmVjdFxyXG4gICAgICAgICAgICBlZmZlY3QucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIGltcG9ydGFudDogbWFyayB0aGUgam9iIGFzIGEgd2F0Y2hlciBjYWxsYmFjayBzbyB0aGF0IHNjaGVkdWxlciBrbm93c1xyXG4gICAgLy8gaXQgaXMgYWxsb3dlZCB0byBzZWxmLXRyaWdnZXIgKCMxNzI3KVxyXG4gICAgam9iLmFsbG93UmVjdXJzZSA9ICEhY2I7XHJcbiAgICBsZXQgc2NoZWR1bGVyO1xyXG4gICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcclxuICAgICAgICBzY2hlZHVsZXIgPSBqb2I7IC8vIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZGlyZWN0bHlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZsdXNoID09PSAncG9zdCcpIHtcclxuICAgICAgICBzY2hlZHVsZXIgPSAoKSA9PiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3Qoam9iLCBpbnN0YW5jZSAmJiBpbnN0YW5jZS5zdXNwZW5zZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBkZWZhdWx0OiAncHJlJ1xyXG4gICAgICAgIGpvYi5wcmUgPSB0cnVlO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZSlcclxuICAgICAgICAgICAgam9iLmlkID0gaW5zdGFuY2UudWlkO1xyXG4gICAgICAgIHNjaGVkdWxlciA9ICgpID0+IHF1ZXVlSm9iKGpvYik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoZ2V0dGVyLCBzY2hlZHVsZXIpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGVmZmVjdC5vblRyYWNrID0gb25UcmFjaztcclxuICAgICAgICBlZmZlY3Qub25UcmlnZ2VyID0gb25UcmlnZ2VyO1xyXG4gICAgfVxyXG4gICAgLy8gaW5pdGlhbCBydW5cclxuICAgIGlmIChjYikge1xyXG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgam9iKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGVmZmVjdC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmbHVzaCA9PT0gJ3Bvc3QnKSB7XHJcbiAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KGVmZmVjdC5ydW4uYmluZChlZmZlY3QpLCBpbnN0YW5jZSAmJiBpbnN0YW5jZS5zdXNwZW5zZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBlZmZlY3QucnVuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGVmZmVjdC5zdG9wKCk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLnNjb3BlKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZShpbnN0YW5jZS5zY29wZS5lZmZlY3RzLCBlZmZlY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gdGhpcy4kd2F0Y2hcclxuZnVuY3Rpb24gaW5zdGFuY2VXYXRjaChzb3VyY2UsIHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBwdWJsaWNUaGlzID0gdGhpcy5wcm94eTtcclxuICAgIGNvbnN0IGdldHRlciA9IGlzU3RyaW5nKHNvdXJjZSlcclxuICAgICAgICA/IHNvdXJjZS5pbmNsdWRlcygnLicpXHJcbiAgICAgICAgICAgID8gY3JlYXRlUGF0aEdldHRlcihwdWJsaWNUaGlzLCBzb3VyY2UpXHJcbiAgICAgICAgICAgIDogKCkgPT4gcHVibGljVGhpc1tzb3VyY2VdXHJcbiAgICAgICAgOiBzb3VyY2UuYmluZChwdWJsaWNUaGlzLCBwdWJsaWNUaGlzKTtcclxuICAgIGxldCBjYjtcclxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xyXG4gICAgICAgIGNiID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjYiA9IHZhbHVlLmhhbmRsZXI7XHJcbiAgICAgICAgb3B0aW9ucyA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VyID0gY3VycmVudEluc3RhbmNlO1xyXG4gICAgc2V0Q3VycmVudEluc3RhbmNlKHRoaXMpO1xyXG4gICAgY29uc3QgcmVzID0gZG9XYXRjaChnZXR0ZXIsIGNiLmJpbmQocHVibGljVGhpcyksIG9wdGlvbnMpO1xyXG4gICAgaWYgKGN1cikge1xyXG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShjdXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdW5zZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlUGF0aEdldHRlcihjdHgsIHBhdGgpIHtcclxuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBsZXQgY3VyID0gY3R4O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoICYmIGN1cjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IGN1cltzZWdtZW50c1tpXV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXI7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHRyYXZlcnNlKHZhbHVlLCBzZWVuKSB7XHJcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCB2YWx1ZVtcIl9fdl9za2lwXCIgLyogUmVhY3RpdmVGbGFncy5TS0lQICovXSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNlZW4gPSBzZWVuIHx8IG5ldyBTZXQoKTtcclxuICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZWVuLmFkZCh2YWx1ZSk7XHJcbiAgICBpZiAoaXNSZWYodmFsdWUpKSB7XHJcbiAgICAgICAgdHJhdmVyc2UodmFsdWUudmFsdWUsIHNlZW4pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlW2ldLCBzZWVuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1NldCh2YWx1ZSkgfHwgaXNNYXAodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4ge1xyXG4gICAgICAgICAgICB0cmF2ZXJzZSh2LCBzZWVuKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgdHJhdmVyc2UodmFsdWVba2V5XSwgc2Vlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XG5cbmZ1bmN0aW9uIHVzZVRyYW5zaXRpb25TdGF0ZSgpIHtcclxuICAgIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgICAgIGlzTW91bnRlZDogZmFsc2UsXHJcbiAgICAgICAgaXNMZWF2aW5nOiBmYWxzZSxcclxuICAgICAgICBpc1VubW91bnRpbmc6IGZhbHNlLFxyXG4gICAgICAgIGxlYXZpbmdWTm9kZXM6IG5ldyBNYXAoKVxyXG4gICAgfTtcclxuICAgIG9uTW91bnRlZCgoKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuaXNNb3VudGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcclxuICAgICAgICBzdGF0ZS5pc1VubW91bnRpbmcgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbn1cclxuY29uc3QgVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IgPSBbRnVuY3Rpb24sIEFycmF5XTtcclxuY29uc3QgQmFzZVRyYW5zaXRpb25JbXBsID0ge1xyXG4gICAgbmFtZTogYEJhc2VUcmFuc2l0aW9uYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbW9kZTogU3RyaW5nLFxyXG4gICAgICAgIGFwcGVhcjogQm9vbGVhbixcclxuICAgICAgICBwZXJzaXN0ZWQ6IEJvb2xlYW4sXHJcbiAgICAgICAgLy8gZW50ZXJcclxuICAgICAgICBvbkJlZm9yZUVudGVyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkVudGVyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkFmdGVyRW50ZXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uRW50ZXJDYW5jZWxsZWQ6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIC8vIGxlYXZlXHJcbiAgICAgICAgb25CZWZvcmVMZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25MZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25BZnRlckxlYXZlOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICBvbkxlYXZlQ2FuY2VsbGVkOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcclxuICAgICAgICAvLyBhcHBlYXJcclxuICAgICAgICBvbkJlZm9yZUFwcGVhcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXHJcbiAgICAgICAgb25BcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uQWZ0ZXJBcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxyXG4gICAgICAgIG9uQXBwZWFyQ2FuY2VsbGVkOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvclxyXG4gICAgfSxcclxuICAgIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdXNlVHJhbnNpdGlvblN0YXRlKCk7XHJcbiAgICAgICAgbGV0IHByZXZUcmFuc2l0aW9uS2V5O1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCAmJiBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4oc2xvdHMuZGVmYXVsdCgpLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzRm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGxvY2F0ZSBmaXJzdCBub24tY29tbWVudCBjaGlsZFxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMudHlwZSAhPT0gQ29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGhhc0ZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YXJuIG1vcmUgdGhhbiBvbmUgbm9uLWNvbW1lbnQgY2hpbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQgb3IgY29tcG9uZW50LiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlIDx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIHRyYWNrIHJlYWN0aXZpdHkgZm9yIHRoZXNlIHByb3BzIHNvIHVzZSB0aGUgcmF3XHJcbiAgICAgICAgICAgIC8vIHByb3BzIGZvciBhIGJpdCBiZXR0ZXIgcGVyZlxyXG4gICAgICAgICAgICBjb25zdCByYXdQcm9wcyA9IHRvUmF3KHByb3BzKTtcclxuICAgICAgICAgICAgY29uc3QgeyBtb2RlIH0gPSByYXdQcm9wcztcclxuICAgICAgICAgICAgLy8gY2hlY2sgbW9kZVxyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICBtb2RlICYmXHJcbiAgICAgICAgICAgICAgICBtb2RlICE9PSAnaW4tb3V0JyAmJlxyXG4gICAgICAgICAgICAgICAgbW9kZSAhPT0gJ291dC1pbicgJiZcclxuICAgICAgICAgICAgICAgIG1vZGUgIT09ICdkZWZhdWx0Jykge1xyXG4gICAgICAgICAgICAgICAgd2FybihgaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJHttb2RlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc0xlYXZpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVBsYWNlaG9sZGVyKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiA8dHJhbnNpdGlvbj48a2VlcC1hbGl2ZS8+PC90cmFuc2l0aW9uPiwgd2UgbmVlZCB0b1xyXG4gICAgICAgICAgICAvLyBjb21wYXJlIHRoZSB0eXBlIG9mIHRoZSBrZXB0LWFsaXZlIGNoaWxkcmVuLlxyXG4gICAgICAgICAgICBjb25zdCBpbm5lckNoaWxkID0gZ2V0S2VlcEFsaXZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoIWlubmVyQ2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVBsYWNlaG9sZGVyKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRlckhvb2tzID0gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhpbm5lckNoaWxkLCByYXdQcm9wcywgc3RhdGUsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKGlubmVyQ2hpbGQsIGVudGVySG9va3MpO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRDaGlsZCA9IGluc3RhbmNlLnN1YlRyZWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZElubmVyQ2hpbGQgPSBvbGRDaGlsZCAmJiBnZXRLZWVwQWxpdmVDaGlsZChvbGRDaGlsZCk7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2l0aW9uS2V5Q2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCB7IGdldFRyYW5zaXRpb25LZXkgfSA9IGlubmVyQ2hpbGQudHlwZTtcclxuICAgICAgICAgICAgaWYgKGdldFRyYW5zaXRpb25LZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldFRyYW5zaXRpb25LZXkoKTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VHJhbnNpdGlvbktleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldlRyYW5zaXRpb25LZXkgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgIT09IHByZXZUcmFuc2l0aW9uS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldlRyYW5zaXRpb25LZXkgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbktleUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtb2RlXHJcbiAgICAgICAgICAgIGlmIChvbGRJbm5lckNoaWxkICYmXHJcbiAgICAgICAgICAgICAgICBvbGRJbm5lckNoaWxkLnR5cGUgIT09IENvbW1lbnQgJiZcclxuICAgICAgICAgICAgICAgICghaXNTYW1lVk5vZGVUeXBlKGlubmVyQ2hpbGQsIG9sZElubmVyQ2hpbGQpIHx8IHRyYW5zaXRpb25LZXlDaGFuZ2VkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVhdmluZ0hvb2tzID0gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhvbGRJbm5lckNoaWxkLCByYXdQcm9wcywgc3RhdGUsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBvbGQgdHJlZSdzIGhvb2tzIGluIGNhc2Ugb2YgZHluYW1pYyB0cmFuc2l0aW9uXHJcbiAgICAgICAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3Mob2xkSW5uZXJDaGlsZCwgbGVhdmluZ0hvb2tzKTtcclxuICAgICAgICAgICAgICAgIC8vIHN3aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudCB2aWV3c1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdvdXQtaW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXNMZWF2aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcclxuICAgICAgICAgICAgICAgICAgICBsZWF2aW5nSG9va3MuYWZ0ZXJMZWF2ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXNMZWF2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UGxhY2Vob2xkZXIoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcgJiYgaW5uZXJDaGlsZC50eXBlICE9PSBDb21tZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVhdmluZ0hvb2tzLmRlbGF5TGVhdmUgPSAoZWwsIGVhcmx5UmVtb3ZlLCBkZWxheWVkTGVhdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVhdmluZ1ZOb2Rlc0NhY2hlID0gZ2V0TGVhdmluZ05vZGVzRm9yVHlwZShzdGF0ZSwgb2xkSW5uZXJDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZpbmdWTm9kZXNDYWNoZVtTdHJpbmcob2xkSW5uZXJDaGlsZC5rZXkpXSA9IG9sZElubmVyQ2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhcmx5IHJlbW92YWwgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuX2xlYXZlQ2IgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJseVJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuX2xlYXZlQ2IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZW50ZXJIb29rcy5kZWxheWVkTGVhdmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGVySG9va3MuZGVsYXllZExlYXZlID0gZGVsYXllZExlYXZlO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcbi8vIGV4cG9ydCB0aGUgcHVibGljIHR5cGUgZm9yIGgvdHN4IGluZmVyZW5jZVxyXG4vLyBhbHNvIHRvIGF2b2lkIGlubGluZSBpbXBvcnQoKSBpbiBnZW5lcmF0ZWQgZC50cyBmaWxlc1xyXG5jb25zdCBCYXNlVHJhbnNpdGlvbiA9IEJhc2VUcmFuc2l0aW9uSW1wbDtcclxuZnVuY3Rpb24gZ2V0TGVhdmluZ05vZGVzRm9yVHlwZShzdGF0ZSwgdm5vZGUpIHtcclxuICAgIGNvbnN0IHsgbGVhdmluZ1ZOb2RlcyB9ID0gc3RhdGU7XHJcbiAgICBsZXQgbGVhdmluZ1ZOb2Rlc0NhY2hlID0gbGVhdmluZ1ZOb2Rlcy5nZXQodm5vZGUudHlwZSk7XHJcbiAgICBpZiAoIWxlYXZpbmdWTm9kZXNDYWNoZSkge1xyXG4gICAgICAgIGxlYXZpbmdWTm9kZXNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgbGVhdmluZ1ZOb2Rlcy5zZXQodm5vZGUudHlwZSwgbGVhdmluZ1ZOb2Rlc0NhY2hlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWF2aW5nVk5vZGVzQ2FjaGU7XHJcbn1cclxuLy8gVGhlIHRyYW5zaXRpb24gaG9va3MgYXJlIGF0dGFjaGVkIHRvIHRoZSB2bm9kZSBhcyB2bm9kZS50cmFuc2l0aW9uXHJcbi8vIGFuZCB3aWxsIGJlIGNhbGxlZCBhdCBhcHByb3ByaWF0ZSB0aW1pbmcgaW4gdGhlIHJlbmRlcmVyLlxyXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKHZub2RlLCBwcm9wcywgc3RhdGUsIGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCB7IGFwcGVhciwgbW9kZSwgcGVyc2lzdGVkID0gZmFsc2UsIG9uQmVmb3JlRW50ZXIsIG9uRW50ZXIsIG9uQWZ0ZXJFbnRlciwgb25FbnRlckNhbmNlbGxlZCwgb25CZWZvcmVMZWF2ZSwgb25MZWF2ZSwgb25BZnRlckxlYXZlLCBvbkxlYXZlQ2FuY2VsbGVkLCBvbkJlZm9yZUFwcGVhciwgb25BcHBlYXIsIG9uQWZ0ZXJBcHBlYXIsIG9uQXBwZWFyQ2FuY2VsbGVkIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2bm9kZS5rZXkpO1xyXG4gICAgY29uc3QgbGVhdmluZ1ZOb2Rlc0NhY2hlID0gZ2V0TGVhdmluZ05vZGVzRm9yVHlwZShzdGF0ZSwgdm5vZGUpO1xyXG4gICAgY29uc3QgY2FsbEhvb2sgPSAoaG9vaywgYXJncykgPT4ge1xyXG4gICAgICAgIGhvb2sgJiZcclxuICAgICAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaG9vaywgaW5zdGFuY2UsIDkgLyogRXJyb3JDb2Rlcy5UUkFOU0lUSU9OX0hPT0sgKi8sIGFyZ3MpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGNhbGxBc3luY0hvb2sgPSAoaG9vaywgYXJncykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRvbmUgPSBhcmdzWzFdO1xyXG4gICAgICAgIGNhbGxIb29rKGhvb2ssIGFyZ3MpO1xyXG4gICAgICAgIGlmIChpc0FycmF5KGhvb2spKSB7XHJcbiAgICAgICAgICAgIGlmIChob29rLmV2ZXJ5KGhvb2sgPT4gaG9vay5sZW5ndGggPD0gMSkpXHJcbiAgICAgICAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhvb2subGVuZ3RoIDw9IDEpIHtcclxuICAgICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBob29rcyA9IHtcclxuICAgICAgICBtb2RlLFxyXG4gICAgICAgIHBlcnNpc3RlZCxcclxuICAgICAgICBiZWZvcmVFbnRlcihlbCkge1xyXG4gICAgICAgICAgICBsZXQgaG9vayA9IG9uQmVmb3JlRW50ZXI7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUuaXNNb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9vayA9IG9uQmVmb3JlQXBwZWFyIHx8IG9uQmVmb3JlRW50ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZm9yIHNhbWUgZWxlbWVudCAodi1zaG93KVxyXG4gICAgICAgICAgICBpZiAoZWwuX2xlYXZlQ2IpIHtcclxuICAgICAgICAgICAgICAgIGVsLl9sZWF2ZUNiKHRydWUgLyogY2FuY2VsbGVkICovKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBmb3IgdG9nZ2xlZCBlbGVtZW50IHdpdGggc2FtZSBrZXkgKHYtaWYpXHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZpbmdWTm9kZSA9IGxlYXZpbmdWTm9kZXNDYWNoZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAobGVhdmluZ1ZOb2RlICYmXHJcbiAgICAgICAgICAgICAgICBpc1NhbWVWTm9kZVR5cGUodm5vZGUsIGxlYXZpbmdWTm9kZSkgJiZcclxuICAgICAgICAgICAgICAgIGxlYXZpbmdWTm9kZS5lbC5fbGVhdmVDYikge1xyXG4gICAgICAgICAgICAgICAgLy8gZm9yY2UgZWFybHkgcmVtb3ZhbCAobm90IGNhbmNlbGxlZClcclxuICAgICAgICAgICAgICAgIGxlYXZpbmdWTm9kZS5lbC5fbGVhdmVDYigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhbGxIb29rKGhvb2ssIFtlbF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW50ZXIoZWwpIHtcclxuICAgICAgICAgICAgbGV0IGhvb2sgPSBvbkVudGVyO1xyXG4gICAgICAgICAgICBsZXQgYWZ0ZXJIb29rID0gb25BZnRlckVudGVyO1xyXG4gICAgICAgICAgICBsZXQgY2FuY2VsSG9vayA9IG9uRW50ZXJDYW5jZWxsZWQ7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUuaXNNb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9vayA9IG9uQXBwZWFyIHx8IG9uRW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJIb29rID0gb25BZnRlckFwcGVhciB8fCBvbkFmdGVyRW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsSG9vayA9IG9uQXBwZWFyQ2FuY2VsbGVkIHx8IG9uRW50ZXJDYW5jZWxsZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBkb25lID0gKGVsLl9lbnRlckNiID0gKGNhbmNlbGxlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxlZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxIb29rKGNhbmNlbEhvb2ssIFtlbF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbEhvb2soYWZ0ZXJIb29rLCBbZWxdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChob29rcy5kZWxheWVkTGVhdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBob29rcy5kZWxheWVkTGVhdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsLl9lbnRlckNiID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhvb2spIHtcclxuICAgICAgICAgICAgICAgIGNhbGxBc3luY0hvb2soaG9vaywgW2VsLCBkb25lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGxlYXZlKGVsLCByZW1vdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHZub2RlLmtleSk7XHJcbiAgICAgICAgICAgIGlmIChlbC5fZW50ZXJDYikge1xyXG4gICAgICAgICAgICAgICAgZWwuX2VudGVyQ2IodHJ1ZSAvKiBjYW5jZWxsZWQgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc1VubW91bnRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsSG9vayhvbkJlZm9yZUxlYXZlLCBbZWxdKTtcclxuICAgICAgICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBkb25lID0gKGVsLl9sZWF2ZUNiID0gKGNhbmNlbGxlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxlZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbEhvb2sob25MZWF2ZUNhbmNlbGxlZCwgW2VsXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsSG9vayhvbkFmdGVyTGVhdmUsIFtlbF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWwuX2xlYXZlQ2IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhdmluZ1ZOb2Rlc0NhY2hlW2tleV0gPT09IHZub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxlYXZpbmdWTm9kZXNDYWNoZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGVhdmluZ1ZOb2Rlc0NhY2hlW2tleV0gPSB2bm9kZTtcclxuICAgICAgICAgICAgaWYgKG9uTGVhdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxBc3luY0hvb2sob25MZWF2ZSwgW2VsLCBkb25lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb25lKHZub2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKHZub2RlLCBwcm9wcywgc3RhdGUsIGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGhvb2tzO1xyXG59XHJcbi8vIHRoZSBwbGFjZWhvbGRlciByZWFsbHkgb25seSBoYW5kbGVzIG9uZSBzcGVjaWFsIGNhc2U6IEtlZXBBbGl2ZVxyXG4vLyBpbiB0aGUgY2FzZSBvZiBhIEtlZXBBbGl2ZSBpbiBhIGxlYXZlIHBoYXNlIHdlIG5lZWQgdG8gcmV0dXJuIGEgS2VlcEFsaXZlXHJcbi8vIHBsYWNlaG9sZGVyIHdpdGggZW1wdHkgY29udGVudCB0byBhdm9pZCB0aGUgS2VlcEFsaXZlIGluc3RhbmNlIGZyb20gYmVpbmdcclxuLy8gdW5tb3VudGVkLlxyXG5mdW5jdGlvbiBlbXB0eVBsYWNlaG9sZGVyKHZub2RlKSB7XHJcbiAgICBpZiAoaXNLZWVwQWxpdmUodm5vZGUpKSB7XHJcbiAgICAgICAgdm5vZGUgPSBjbG9uZVZOb2RlKHZub2RlKTtcclxuICAgICAgICB2bm9kZS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHZub2RlO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldEtlZXBBbGl2ZUNoaWxkKHZub2RlKSB7XHJcbiAgICByZXR1cm4gaXNLZWVwQWxpdmUodm5vZGUpXHJcbiAgICAgICAgPyB2bm9kZS5jaGlsZHJlblxyXG4gICAgICAgICAgICA/IHZub2RlLmNoaWxkcmVuWzBdXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgOiB2bm9kZTtcclxufVxyXG5mdW5jdGlvbiBzZXRUcmFuc2l0aW9uSG9va3Modm5vZGUsIGhvb2tzKSB7XHJcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLyAmJiB2bm9kZS5jb21wb25lbnQpIHtcclxuICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3Modm5vZGUuY29tcG9uZW50LnN1YlRyZWUsIGhvb2tzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSB7XHJcbiAgICAgICAgdm5vZGUuc3NDb250ZW50LnRyYW5zaXRpb24gPSBob29rcy5jbG9uZSh2bm9kZS5zc0NvbnRlbnQpO1xyXG4gICAgICAgIHZub2RlLnNzRmFsbGJhY2sudHJhbnNpdGlvbiA9IGhvb2tzLmNsb25lKHZub2RlLnNzRmFsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdm5vZGUudHJhbnNpdGlvbiA9IGhvb2tzO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihjaGlsZHJlbiwga2VlcENvbW1lbnQgPSBmYWxzZSwgcGFyZW50S2V5KSB7XHJcbiAgICBsZXQgcmV0ID0gW107XHJcbiAgICBsZXQga2V5ZWRGcmFnbWVudENvdW50ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAvLyAjNTM2MCBpbmhlcml0IHBhcmVudCBrZXkgaW4gY2FzZSBvZiA8dGVtcGxhdGUgdi1mb3I+XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcGFyZW50S2V5ID09IG51bGxcclxuICAgICAgICAgICAgPyBjaGlsZC5rZXlcclxuICAgICAgICAgICAgOiBTdHJpbmcocGFyZW50S2V5KSArIFN0cmluZyhjaGlsZC5rZXkgIT0gbnVsbCA/IGNoaWxkLmtleSA6IGkpO1xyXG4gICAgICAgIC8vIGhhbmRsZSBmcmFnbWVudCBjaGlsZHJlbiBjYXNlLCBlLmcuIHYtZm9yXHJcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IEZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5wYXRjaEZsYWcgJiAxMjggLyogUGF0Y2hGbGFncy5LRVlFRF9GUkFHTUVOVCAqLylcclxuICAgICAgICAgICAgICAgIGtleWVkRnJhZ21lbnRDb3VudCsrO1xyXG4gICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwga2VlcENvbW1lbnQsIGtleSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb21tZW50IHBsYWNlaG9sZGVycyBzaG91bGQgYmUgc2tpcHBlZCwgZS5nLiB2LWlmXHJcbiAgICAgICAgZWxzZSBpZiAoa2VlcENvbW1lbnQgfHwgY2hpbGQudHlwZSAhPT0gQ29tbWVudCkge1xyXG4gICAgICAgICAgICByZXQucHVzaChrZXkgIT0gbnVsbCA/IGNsb25lVk5vZGUoY2hpbGQsIHsga2V5IH0pIDogY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vICMxMTI2IGlmIGEgdHJhbnNpdGlvbiBjaGlsZHJlbiBsaXN0IGNvbnRhaW5zIG11bHRpcGxlIHN1YiBmcmFnbWVudHMsIHRoZXNlXHJcbiAgICAvLyBmcmFnbWVudHMgd2lsbCBiZSBtZXJnZWQgaW50byBhIGZsYXQgY2hpbGRyZW4gYXJyYXkuIFNpbmNlIGVhY2ggdi1mb3JcclxuICAgIC8vIGZyYWdtZW50IG1heSBjb250YWluIGRpZmZlcmVudCBzdGF0aWMgYmluZGluZ3MgaW5zaWRlLCB3ZSBuZWVkIHRvIGRlLW9wXHJcbiAgICAvLyB0aGVzZSBjaGlsZHJlbiB0byBmb3JjZSBmdWxsIGRpZmZzIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yLlxyXG4gICAgaWYgKGtleWVkRnJhZ21lbnRDb3VudCA+IDEpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICByZXRbaV0ucGF0Y2hGbGFnID0gLTIgLyogUGF0Y2hGbGFncy5CQUlMICovO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cblxuLy8gaW1wbGVtZW50YXRpb24sIGNsb3NlIHRvIG5vLW9wXHJcbmZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudChvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvcHRpb25zKSA/IHsgc2V0dXA6IG9wdGlvbnMsIG5hbWU6IG9wdGlvbnMubmFtZSB9IDogb3B0aW9ucztcclxufVxuXG5jb25zdCBpc0FzeW5jV3JhcHBlciA9IChpKSA9PiAhIWkudHlwZS5fX2FzeW5jTG9hZGVyO1xyXG5mdW5jdGlvbiBkZWZpbmVBc3luY0NvbXBvbmVudChzb3VyY2UpIHtcclxuICAgIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcclxuICAgICAgICBzb3VyY2UgPSB7IGxvYWRlcjogc291cmNlIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGxvYWRlciwgbG9hZGluZ0NvbXBvbmVudCwgZXJyb3JDb21wb25lbnQsIGRlbGF5ID0gMjAwLCB0aW1lb3V0LCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcclxuICAgIHN1c3BlbnNpYmxlID0gdHJ1ZSwgb25FcnJvcjogdXNlck9uRXJyb3IgfSA9IHNvdXJjZTtcclxuICAgIGxldCBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XHJcbiAgICBsZXQgcmVzb2x2ZWRDb21wO1xyXG4gICAgbGV0IHJldHJpZXMgPSAwO1xyXG4gICAgY29uc3QgcmV0cnkgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0cmllcysrO1xyXG4gICAgICAgIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gbG9hZCgpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IHRoaXNSZXF1ZXN0O1xyXG4gICAgICAgIHJldHVybiAocGVuZGluZ1JlcXVlc3QgfHxcclxuICAgICAgICAgICAgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPVxyXG4gICAgICAgICAgICAgICAgbG9hZGVyKClcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJPbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyUmV0cnkgPSAoKSA9PiByZXNvbHZlKHJldHJ5KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckZhaWwgPSAoKSA9PiByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPbkVycm9yKGVyciwgdXNlclJldHJ5LCB1c2VyRmFpbCwgcmV0cmllcyArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChjb21wKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNSZXF1ZXN0ICE9PSBwZW5kaW5nUmVxdWVzdCAmJiBwZW5kaW5nUmVxdWVzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1JlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWNvbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihgQXN5bmMgY29tcG9uZW50IGxvYWRlciByZXNvbHZlZCB0byB1bmRlZmluZWQuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYElmIHlvdSBhcmUgdXNpbmcgcmV0cnkoKSwgbWFrZSBzdXJlIHRvIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlLmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcm9wIG1vZHVsZSBkZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wID0gY29tcC5kZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGNvbXAgJiYgIWlzT2JqZWN0KGNvbXApICYmICFpc0Z1bmN0aW9uKGNvbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6ICR7Y29tcH1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21wID0gY29tcDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcDtcclxuICAgICAgICAgICAgICAgIH0pKSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh7XHJcbiAgICAgICAgbmFtZTogJ0FzeW5jQ29tcG9uZW50V3JhcHBlcicsXHJcbiAgICAgICAgX19hc3luY0xvYWRlcjogbG9hZCxcclxuICAgICAgICBnZXQgX19hc3luY1Jlc29sdmVkKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRDb21wO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0dXAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xyXG4gICAgICAgICAgICAvLyBhbHJlYWR5IHJlc29sdmVkXHJcbiAgICAgICAgICAgIGlmIChyZXNvbHZlZENvbXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBjcmVhdGVJbm5lckNvbXAocmVzb2x2ZWRDb21wLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgb25FcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIDEzIC8qIEVycm9yQ29kZXMuQVNZTkNfQ09NUE9ORU5UX0xPQURFUiAqLywgIWVycm9yQ29tcG9uZW50IC8qIGRvIG5vdCB0aHJvdyBpbiBkZXYgaWYgdXNlciBwcm92aWRlZCBlcnJvciBjb21wb25lbnQgKi8pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBzdXNwZW5zZS1jb250cm9sbGVkIG9yIFNTUi5cclxuICAgICAgICAgICAgaWYgKChzdXNwZW5zaWJsZSAmJiBpbnN0YW5jZS5zdXNwZW5zZSkgfHxcclxuICAgICAgICAgICAgICAgIChpc0luU1NSQ29tcG9uZW50U2V0dXApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9hZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oY29tcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGNyZWF0ZUlubmVyQ29tcChjb21wLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZXJyb3JDb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjcmVhdGVWTm9kZShlcnJvckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWQgPSByZWYoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlZigpO1xyXG4gICAgICAgICAgICBjb25zdCBkZWxheWVkID0gcmVmKCEhZGVsYXkpO1xyXG4gICAgICAgICAgICBpZiAoZGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5ZWQudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxvYWRlZC52YWx1ZSAmJiAhZXJyb3IudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tcy5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvci52YWx1ZSA9IGVycjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2FkKClcclxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvYWRlZC52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucGFyZW50ICYmIGlzS2VlcEFsaXZlKGluc3RhbmNlLnBhcmVudC52bm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBwYXJlbnQgaXMga2VlcC1hbGl2ZSwgZm9yY2UgdXBkYXRlIHNvIHRoZSBsb2FkZWQgY29tcG9uZW50J3NcclxuICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIGlzIHRha2VuIGludG8gYWNjb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlSm9iKGluc3RhbmNlLnBhcmVudC51cGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICBlcnJvci52YWx1ZSA9IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZGVkLnZhbHVlICYmIHJlc29sdmVkQ29tcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbm5lckNvbXAocmVzb2x2ZWRDb21wLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJvci52YWx1ZSAmJiBlcnJvckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShlcnJvckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvYWRpbmdDb21wb25lbnQgJiYgIWRlbGF5ZWQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUobG9hZGluZ0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5uZXJDb21wKGNvbXAsIHsgdm5vZGU6IHsgcmVmLCBwcm9wcywgY2hpbGRyZW4sIHNoYXBlRmxhZyB9LCBwYXJlbnQgfSkge1xyXG4gICAgY29uc3Qgdm5vZGUgPSBjcmVhdGVWTm9kZShjb21wLCBwcm9wcywgY2hpbGRyZW4pO1xyXG4gICAgLy8gZW5zdXJlIGlubmVyIGNvbXBvbmVudCBpbmhlcml0cyB0aGUgYXN5bmMgd3JhcHBlcidzIHJlZiBvd25lclxyXG4gICAgdm5vZGUucmVmID0gcmVmO1xyXG4gICAgcmV0dXJuIHZub2RlO1xyXG59XG5cbmNvbnN0IGlzS2VlcEFsaXZlID0gKHZub2RlKSA9PiB2bm9kZS50eXBlLl9faXNLZWVwQWxpdmU7XHJcbmNvbnN0IEtlZXBBbGl2ZUltcGwgPSB7XHJcbiAgICBuYW1lOiBgS2VlcEFsaXZlYCxcclxuICAgIC8vIE1hcmtlciBmb3Igc3BlY2lhbCBoYW5kbGluZyBpbnNpZGUgdGhlIHJlbmRlcmVyLiBXZSBhcmUgbm90IHVzaW5nIGEgPT09XHJcbiAgICAvLyBjaGVjayBkaXJlY3RseSBvbiBLZWVwQWxpdmUgaW4gdGhlIHJlbmRlcmVyLCBiZWNhdXNlIGltcG9ydGluZyBpdCBkaXJlY3RseVxyXG4gICAgLy8gd291bGQgcHJldmVudCBpdCBmcm9tIGJlaW5nIHRyZWUtc2hha2VuLlxyXG4gICAgX19pc0tlZXBBbGl2ZTogdHJ1ZSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgaW5jbHVkZTogW1N0cmluZywgUmVnRXhwLCBBcnJheV0sXHJcbiAgICAgICAgZXhjbHVkZTogW1N0cmluZywgUmVnRXhwLCBBcnJheV0sXHJcbiAgICAgICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXHJcbiAgICB9LFxyXG4gICAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICAgICAgLy8gS2VlcEFsaXZlIGNvbW11bmljYXRlcyB3aXRoIHRoZSBpbnN0YW50aWF0ZWQgcmVuZGVyZXIgdmlhIHRoZVxyXG4gICAgICAgIC8vIGN0eCB3aGVyZSB0aGUgcmVuZGVyZXIgcGFzc2VzIGluIGl0cyBpbnRlcm5hbHMsXHJcbiAgICAgICAgLy8gYW5kIHRoZSBLZWVwQWxpdmUgaW5zdGFuY2UgZXhwb3NlcyBhY3RpdmF0ZS9kZWFjdGl2YXRlIGltcGxlbWVudGF0aW9ucy5cclxuICAgICAgICAvLyBUaGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBpcyB0byBhdm9pZCBpbXBvcnRpbmcgS2VlcEFsaXZlIGRpcmVjdGx5IGluIHRoZVxyXG4gICAgICAgIC8vIHJlbmRlcmVyIHRvIGZhY2lsaXRhdGUgdHJlZS1zaGFraW5nLlxyXG4gICAgICAgIGNvbnN0IHNoYXJlZENvbnRleHQgPSBpbnN0YW5jZS5jdHg7XHJcbiAgICAgICAgLy8gaWYgdGhlIGludGVybmFsIHJlbmRlcmVyIGlzIG5vdCByZWdpc3RlcmVkLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHNlcnZlci1zaWRlIHJlbmRlcmluZyxcclxuICAgICAgICAvLyBmb3IgS2VlcEFsaXZlLCB3ZSBqdXN0IG5lZWQgdG8gcmVuZGVyIGl0cyBjaGlsZHJlblxyXG4gICAgICAgIGlmICghc2hhcmVkQ29udGV4dC5yZW5kZXJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0ICYmIHNsb3RzLmRlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPT09IDEgPyBjaGlsZHJlblswXSA6IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGxldCBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5fX3ZfY2FjaGUgPSBjYWNoZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyZW50U3VzcGVuc2UgPSBpbnN0YW5jZS5zdXNwZW5zZTtcclxuICAgICAgICBjb25zdCB7IHJlbmRlcmVyOiB7IHA6IHBhdGNoLCBtOiBtb3ZlLCB1bTogX3VubW91bnQsIG86IHsgY3JlYXRlRWxlbWVudCB9IH0gfSA9IHNoYXJlZENvbnRleHQ7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHNoYXJlZENvbnRleHQuYWN0aXZhdGUgPSAodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50O1xyXG4gICAgICAgICAgICBtb3ZlKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgMCAvKiBNb3ZlVHlwZS5FTlRFUiAqLywgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICAvLyBpbiBjYXNlIHByb3BzIGhhdmUgY2hhbmdlZFxyXG4gICAgICAgICAgICBwYXRjaChpbnN0YW5jZS52bm9kZSwgdm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBpbnN0YW5jZSwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCB2bm9kZS5zbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5pc0RlYWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UuYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUFycmF5Rm5zKGluc3RhbmNlLmEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgdm5vZGVIb29rID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMub25Wbm9kZU1vdW50ZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodm5vZGVIb29rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgaW5zdGFuY2UucGFyZW50LCB2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjb21wb25lbnRzIHRyZWVcclxuICAgICAgICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzaGFyZWRDb250ZXh0LmRlYWN0aXZhdGUgPSAodm5vZGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnQ7XHJcbiAgICAgICAgICAgIG1vdmUodm5vZGUsIHN0b3JhZ2VDb250YWluZXIsIG51bGwsIDEgLyogTW92ZVR5cGUuTEVBVkUgKi8sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5kYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUFycmF5Rm5zKGluc3RhbmNlLmRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZub2RlSG9vayA9IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLm9uVm5vZGVVbm1vdW50ZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodm5vZGVIb29rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgaW5zdGFuY2UucGFyZW50LCB2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5pc0RlYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudHMgdHJlZVxyXG4gICAgICAgICAgICAgICAgZGV2dG9vbHNDb21wb25lbnRBZGRlZChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGZ1bmN0aW9uIHVubW91bnQodm5vZGUpIHtcclxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHNoYXBlRmxhZyBzbyBpdCBjYW4gYmUgcHJvcGVybHkgdW5tb3VudGVkXHJcbiAgICAgICAgICAgIHJlc2V0U2hhcGVGbGFnKHZub2RlKTtcclxuICAgICAgICAgICAgX3VubW91bnQodm5vZGUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHBydW5lQ2FjaGUoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLmZvckVhY2goKHZub2RlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHZub2RlLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgKCFmaWx0ZXIgfHwgIWZpbHRlcihuYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeShrZXkpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudCB8fCBjYWNoZWQudHlwZSAhPT0gY3VycmVudC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50KGNhY2hlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCBhY3RpdmUgaW5zdGFuY2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBrZXB0LWFsaXZlLlxyXG4gICAgICAgICAgICAgICAgLy8gd2UgY2FuJ3QgdW5tb3VudCBpdCBub3cgYnV0IGl0IG1pZ2h0IGJlIGxhdGVyLCBzbyByZXNldCBpdHMgZmxhZyBub3cuXHJcbiAgICAgICAgICAgICAgICByZXNldFNoYXBlRmxhZyhjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZS5kZWxldGUoa2V5KTtcclxuICAgICAgICAgICAga2V5cy5kZWxldGUoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcHJ1bmUgY2FjaGUgb24gaW5jbHVkZS9leGNsdWRlIHByb3AgY2hhbmdlXHJcbiAgICAgICAgd2F0Y2goKCkgPT4gW3Byb3BzLmluY2x1ZGUsIHByb3BzLmV4Y2x1ZGVdLCAoW2luY2x1ZGUsIGV4Y2x1ZGVdKSA9PiB7XHJcbiAgICAgICAgICAgIGluY2x1ZGUgJiYgcHJ1bmVDYWNoZShuYW1lID0+IG1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpO1xyXG4gICAgICAgICAgICBleGNsdWRlICYmIHBydW5lQ2FjaGUobmFtZSA9PiAhbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSk7XHJcbiAgICAgICAgfSwgXHJcbiAgICAgICAgLy8gcHJ1bmUgcG9zdC1yZW5kZXIgYWZ0ZXIgYGN1cnJlbnRgIGhhcyBiZWVuIHVwZGF0ZWRcclxuICAgICAgICB7IGZsdXNoOiAncG9zdCcsIGRlZXA6IHRydWUgfSk7XHJcbiAgICAgICAgLy8gY2FjaGUgc3ViIHRyZWUgYWZ0ZXIgcmVuZGVyXHJcbiAgICAgICAgbGV0IHBlbmRpbmdDYWNoZUtleSA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgY2FjaGVTdWJ0cmVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBmaXggIzE2MjEsIHRoZSBwZW5kaW5nQ2FjaGVLZXkgY291bGQgYmUgMFxyXG4gICAgICAgICAgICBpZiAocGVuZGluZ0NhY2hlS2V5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnNldChwZW5kaW5nQ2FjaGVLZXksIGdldElubmVyQ2hpbGQoaW5zdGFuY2Uuc3ViVHJlZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBvbk1vdW50ZWQoY2FjaGVTdWJ0cmVlKTtcclxuICAgICAgICBvblVwZGF0ZWQoY2FjaGVTdWJ0cmVlKTtcclxuICAgICAgICBvbkJlZm9yZVVubW91bnQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjYWNoZS5mb3JFYWNoKGNhY2hlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN1YlRyZWUsIHN1c3BlbnNlIH0gPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZub2RlID0gZ2V0SW5uZXJDaGlsZChzdWJUcmVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWQudHlwZSA9PT0gdm5vZGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgaW5zdGFuY2Ugd2lsbCBiZSB1bm1vdW50ZWQgYXMgcGFydCBvZiBrZWVwLWFsaXZlJ3MgdW5tb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc2V0U2hhcGVGbGFnKHZub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgaW52b2tlIGl0cyBkZWFjdGl2YXRlZCBob29rIGhlcmVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYSA9IHZub2RlLmNvbXBvbmVudC5kYTtcclxuICAgICAgICAgICAgICAgICAgICBkYSAmJiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoZGEsIHN1c3BlbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1bm1vdW50KGNhY2hlZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHBlbmRpbmdDYWNoZUtleSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghc2xvdHMuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhd1ZOb2RlID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgS2VlcEFsaXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIGNvbXBvbmVudCBjaGlsZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc1ZOb2RlKHJhd1ZOb2RlKSB8fFxyXG4gICAgICAgICAgICAgICAgKCEocmF3Vk5vZGUuc2hhcGVGbGFnICYgNCAvKiBTaGFwZUZsYWdzLlNUQVRFRlVMX0NPTVBPTkVOVCAqLykgJiZcclxuICAgICAgICAgICAgICAgICAgICAhKHJhd1ZOb2RlLnNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSkpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhd1ZOb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB2bm9kZSA9IGdldElubmVyQ2hpbGQocmF3Vk5vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wID0gdm5vZGUudHlwZTtcclxuICAgICAgICAgICAgLy8gZm9yIGFzeW5jIGNvbXBvbmVudHMsIG5hbWUgY2hlY2sgc2hvdWxkIGJlIGJhc2VkIGluIGl0cyBsb2FkZWRcclxuICAgICAgICAgICAgLy8gaW5uZXIgY29tcG9uZW50IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShpc0FzeW5jV3JhcHBlcih2bm9kZSlcclxuICAgICAgICAgICAgICAgID8gdm5vZGUudHlwZS5fX2FzeW5jUmVzb2x2ZWQgfHwge31cclxuICAgICAgICAgICAgICAgIDogY29tcCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgaW5jbHVkZSwgZXhjbHVkZSwgbWF4IH0gPSBwcm9wcztcclxuICAgICAgICAgICAgaWYgKChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZXhjbHVkZSAmJiBuYW1lICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gdm5vZGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmF3Vk5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdm5vZGUua2V5ID09IG51bGwgPyBjb21wIDogdm5vZGUua2V5O1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWRWTm9kZSA9IGNhY2hlLmdldChrZXkpO1xyXG4gICAgICAgICAgICAvLyBjbG9uZSB2bm9kZSBpZiBpdCdzIHJldXNlZCBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBtdXRhdGUgaXRcclxuICAgICAgICAgICAgaWYgKHZub2RlLmVsKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZSA9IGNsb25lVk5vZGUodm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhd1ZOb2RlLnNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmF3Vk5vZGUuc3NDb250ZW50ID0gdm5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gIzE1MTMgaXQncyBwb3NzaWJsZSBmb3IgdGhlIHJldHVybmVkIHZub2RlIHRvIGJlIGNsb25lZCBkdWUgdG8gYXR0clxyXG4gICAgICAgICAgICAvLyBmYWxsdGhyb3VnaCBvciBzY29wZUlkLCBzbyB0aGUgdm5vZGUgaGVyZSBtYXkgbm90IGJlIHRoZSBmaW5hbCB2bm9kZVxyXG4gICAgICAgICAgICAvLyB0aGF0IGlzIG1vdW50ZWQuIEluc3RlYWQgb2YgY2FjaGluZyBpdCBkaXJlY3RseSwgd2Ugc3RvcmUgdGhlIHBlbmRpbmdcclxuICAgICAgICAgICAgLy8ga2V5IGFuZCBjYWNoZSBgaW5zdGFuY2Uuc3ViVHJlZWAgKHRoZSBub3JtYWxpemVkIHZub2RlKSBpblxyXG4gICAgICAgICAgICAvLyBiZWZvcmVNb3VudC9iZWZvcmVVcGRhdGUgaG9va3MuXHJcbiAgICAgICAgICAgIHBlbmRpbmdDYWNoZUtleSA9IGtleTtcclxuICAgICAgICAgICAgaWYgKGNhY2hlZFZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb3B5IG92ZXIgbW91bnRlZCBzdGF0ZVxyXG4gICAgICAgICAgICAgICAgdm5vZGUuZWwgPSBjYWNoZWRWTm9kZS5lbDtcclxuICAgICAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudCA9IGNhY2hlZFZOb2RlLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICh2bm9kZS50cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgdXBkYXRlIHRyYW5zaXRpb24gaG9va3Mgb24gc3ViVHJlZVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyh2bm9kZSwgdm5vZGUudHJhbnNpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBhdm9pZCB2bm9kZSBiZWluZyBtb3VudGVkIGFzIGZyZXNoXHJcbiAgICAgICAgICAgICAgICB2bm9kZS5zaGFwZUZsYWcgfD0gNTEyIC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX0tFUFRfQUxJVkUgKi87XHJcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHRoaXMga2V5IHRoZSBmcmVzaGVzdFxyXG4gICAgICAgICAgICAgICAga2V5cy5kZWxldGUoa2V5KTtcclxuICAgICAgICAgICAgICAgIGtleXMuYWRkKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLmFkZChrZXkpO1xyXG4gICAgICAgICAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4ICYmIGtleXMuc2l6ZSA+IHBhcnNlSW50KG1heCwgMTApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGtleXMudmFsdWVzKCkubmV4dCgpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhdm9pZCB2bm9kZSBiZWluZyB1bm1vdW50ZWRcclxuICAgICAgICAgICAgdm5vZGUuc2hhcGVGbGFnIHw9IDI1NiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9TSE9VTERfS0VFUF9BTElWRSAqLztcclxuICAgICAgICAgICAgY3VycmVudCA9IHZub2RlO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNTdXNwZW5zZShyYXdWTm9kZS50eXBlKSA/IHJhd1ZOb2RlIDogdm5vZGU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTtcclxuLy8gZXhwb3J0IHRoZSBwdWJsaWMgdHlwZSBmb3IgaC90c3ggaW5mZXJlbmNlXHJcbi8vIGFsc28gdG8gYXZvaWQgaW5saW5lIGltcG9ydCgpIGluIGdlbmVyYXRlZCBkLnRzIGZpbGVzXHJcbmNvbnN0IEtlZXBBbGl2ZSA9IEtlZXBBbGl2ZUltcGw7XHJcbmZ1bmN0aW9uIG1hdGNoZXMocGF0dGVybiwgbmFtZSkge1xyXG4gICAgaWYgKGlzQXJyYXkocGF0dGVybikpIHtcclxuICAgICAgICByZXR1cm4gcGF0dGVybi5zb21lKChwKSA9PiBtYXRjaGVzKHAsIG5hbWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBhdHRlcm4udGVzdCkge1xyXG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSk7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIG9uQWN0aXZhdGVkKGhvb2ssIHRhcmdldCkge1xyXG4gICAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiYVwiIC8qIExpZmVjeWNsZUhvb2tzLkFDVElWQVRFRCAqLywgdGFyZ2V0KTtcclxufVxyXG5mdW5jdGlvbiBvbkRlYWN0aXZhdGVkKGhvb2ssIHRhcmdldCkge1xyXG4gICAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiZGFcIiAvKiBMaWZlY3ljbGVIb29rcy5ERUFDVElWQVRFRCAqLywgdGFyZ2V0KTtcclxufVxyXG5mdW5jdGlvbiByZWdpc3RlcktlZXBBbGl2ZUhvb2soaG9vaywgdHlwZSwgdGFyZ2V0ID0gY3VycmVudEluc3RhbmNlKSB7XHJcbiAgICAvLyBjYWNoZSB0aGUgZGVhY3RpdmF0ZSBicmFuY2ggY2hlY2sgd3JhcHBlciBmb3IgaW5qZWN0ZWQgaG9va3Mgc28gdGhlIHNhbWVcclxuICAgIC8vIGhvb2sgY2FuIGJlIHByb3Blcmx5IGRlZHVwZWQgYnkgdGhlIHNjaGVkdWxlci4gXCJfX3dkY1wiIHN0YW5kcyBmb3IgXCJ3aXRoXHJcbiAgICAvLyBkZWFjdGl2YXRpb24gY2hlY2tcIi5cclxuICAgIGNvbnN0IHdyYXBwZWRIb29rID0gaG9vay5fX3dkYyB8fFxyXG4gICAgICAgIChob29rLl9fd2RjID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBvbmx5IGZpcmUgdGhlIGhvb2sgaWYgdGhlIHRhcmdldCBpbnN0YW5jZSBpcyBOT1QgaW4gYSBkZWFjdGl2YXRlZCBicmFuY2guXHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNEZWFjdGl2YXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaG9vaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgaW5qZWN0SG9vayh0eXBlLCB3cmFwcGVkSG9vaywgdGFyZ2V0KTtcclxuICAgIC8vIEluIGFkZGl0aW9uIHRvIHJlZ2lzdGVyaW5nIGl0IG9uIHRoZSB0YXJnZXQgaW5zdGFuY2UsIHdlIHdhbGsgdXAgdGhlIHBhcmVudFxyXG4gICAgLy8gY2hhaW4gYW5kIHJlZ2lzdGVyIGl0IG9uIGFsbCBhbmNlc3RvciBpbnN0YW5jZXMgdGhhdCBhcmUga2VlcC1hbGl2ZSByb290cy5cclxuICAgIC8vIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIHdhbGsgdGhlIGVudGlyZSBjb21wb25lbnQgdHJlZSB3aGVuIGludm9raW5nIHRoZXNlXHJcbiAgICAvLyBob29rcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGF2b2lkcyB0aGUgbmVlZCB0byB0cmFjayBjaGlsZCBjb21wb25lbnRzIGluXHJcbiAgICAvLyBhcnJheXMuXHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnQgPSB0YXJnZXQucGFyZW50O1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQucGFyZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0tlZXBBbGl2ZShjdXJyZW50LnBhcmVudC52bm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGluamVjdFRvS2VlcEFsaXZlUm9vdCh3cmFwcGVkSG9vaywgdHlwZSwgdGFyZ2V0LCBjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluamVjdFRvS2VlcEFsaXZlUm9vdChob29rLCB0eXBlLCB0YXJnZXQsIGtlZXBBbGl2ZVJvb3QpIHtcclxuICAgIC8vIGluamVjdEhvb2sgd3JhcHMgdGhlIG9yaWdpbmFsIGZvciBlcnJvciBoYW5kbGluZywgc28gbWFrZSBzdXJlIHRvIHJlbW92ZVxyXG4gICAgLy8gdGhlIHdyYXBwZWQgdmVyc2lvbi5cclxuICAgIGNvbnN0IGluamVjdGVkID0gaW5qZWN0SG9vayh0eXBlLCBob29rLCBrZWVwQWxpdmVSb290LCB0cnVlIC8qIHByZXBlbmQgKi8pO1xyXG4gICAgb25Vbm1vdW50ZWQoKCkgPT4ge1xyXG4gICAgICAgIHJlbW92ZShrZWVwQWxpdmVSb290W3R5cGVdLCBpbmplY3RlZCk7XHJcbiAgICB9LCB0YXJnZXQpO1xyXG59XHJcbmZ1bmN0aW9uIHJlc2V0U2hhcGVGbGFnKHZub2RlKSB7XHJcbiAgICBsZXQgc2hhcGVGbGFnID0gdm5vZGUuc2hhcGVGbGFnO1xyXG4gICAgaWYgKHNoYXBlRmxhZyAmIDI1NiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9TSE9VTERfS0VFUF9BTElWRSAqLykge1xyXG4gICAgICAgIHNoYXBlRmxhZyAtPSAyNTYgLyogU2hhcGVGbGFncy5DT01QT05FTlRfU0hPVUxEX0tFRVBfQUxJVkUgKi87XHJcbiAgICB9XHJcbiAgICBpZiAoc2hhcGVGbGFnICYgNTEyIC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX0tFUFRfQUxJVkUgKi8pIHtcclxuICAgICAgICBzaGFwZUZsYWcgLT0gNTEyIC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX0tFUFRfQUxJVkUgKi87XHJcbiAgICB9XHJcbiAgICB2bm9kZS5zaGFwZUZsYWcgPSBzaGFwZUZsYWc7XHJcbn1cclxuZnVuY3Rpb24gZ2V0SW5uZXJDaGlsZCh2bm9kZSkge1xyXG4gICAgcmV0dXJuIHZub2RlLnNoYXBlRmxhZyAmIDEyOCAvKiBTaGFwZUZsYWdzLlNVU1BFTlNFICovID8gdm5vZGUuc3NDb250ZW50IDogdm5vZGU7XHJcbn1cblxuZnVuY3Rpb24gaW5qZWN0SG9vayh0eXBlLCBob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UsIHByZXBlbmQgPSBmYWxzZSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IGhvb2tzID0gdGFyZ2V0W3R5cGVdIHx8ICh0YXJnZXRbdHlwZV0gPSBbXSk7XHJcbiAgICAgICAgLy8gY2FjaGUgdGhlIGVycm9yIGhhbmRsaW5nIHdyYXBwZXIgZm9yIGluamVjdGVkIGhvb2tzIHNvIHRoZSBzYW1lIGhvb2tcclxuICAgICAgICAvLyBjYW4gYmUgcHJvcGVybHkgZGVkdXBlZCBieSB0aGUgc2NoZWR1bGVyLiBcIl9fd2VoXCIgc3RhbmRzIGZvciBcIndpdGggZXJyb3JcclxuICAgICAgICAvLyBoYW5kbGluZ1wiLlxyXG4gICAgICAgIGNvbnN0IHdyYXBwZWRIb29rID0gaG9vay5fX3dlaCB8fFxyXG4gICAgICAgICAgICAoaG9vay5fX3dlaCA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmlzVW5tb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZSB0cmFja2luZyBpbnNpZGUgYWxsIGxpZmVjeWNsZSBob29rc1xyXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhleSBjYW4gcG90ZW50aWFsbHkgYmUgY2FsbGVkIGluc2lkZSBlZmZlY3RzLlxyXG4gICAgICAgICAgICAgICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGN1cnJlbnRJbnN0YW5jZSBkdXJpbmcgaG9vayBpbnZvY2F0aW9uLlxyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoZSBob29rIGRvZXMgbm90IHN5bmNocm9ub3VzbHkgdHJpZ2dlciBvdGhlciBob29rcywgd2hpY2hcclxuICAgICAgICAgICAgICAgIC8vIGNhbiBvbmx5IGJlIGZhbHNlIHdoZW4gdGhlIHVzZXIgZG9lcyBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5LlxyXG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCB0YXJnZXQsIHR5cGUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgdW5zZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICAgIHJlc2V0VHJhY2tpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChwcmVwZW5kKSB7XHJcbiAgICAgICAgICAgIGhvb2tzLnVuc2hpZnQod3JhcHBlZEhvb2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaG9va3MucHVzaCh3cmFwcGVkSG9vayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3cmFwcGVkSG9vaztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGNvbnN0IGFwaU5hbWUgPSB0b0hhbmRsZXJLZXkoRXJyb3JUeXBlU3RyaW5nc1t0eXBlXS5yZXBsYWNlKC8gaG9vayQvLCAnJykpO1xyXG4gICAgICAgIHdhcm4oYCR7YXBpTmFtZX0gaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBiZSBgICtcclxuICAgICAgICAgICAgYGFzc29jaWF0ZWQgd2l0aC4gYCArXHJcbiAgICAgICAgICAgIGBMaWZlY3ljbGUgaW5qZWN0aW9uIEFQSXMgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHNldHVwKCkuYCArXHJcbiAgICAgICAgICAgIChgIElmIHlvdSBhcmUgdXNpbmcgYXN5bmMgc2V0dXAoKSwgbWFrZSBzdXJlIHRvIHJlZ2lzdGVyIGxpZmVjeWNsZSBgICtcclxuICAgICAgICAgICAgICAgICAgICBgaG9va3MgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdCBzdGF0ZW1lbnQuYFxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgY3JlYXRlSG9vayA9IChsaWZlY3ljbGUpID0+IChob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpID0+IFxyXG4vLyBwb3N0LWNyZWF0ZSBsaWZlY3ljbGUgcmVnaXN0cmF0aW9ucyBhcmUgbm9vcHMgZHVyaW5nIFNTUiAoZXhjZXB0IGZvciBzZXJ2ZXJQcmVmZXRjaClcclxuKCFpc0luU1NSQ29tcG9uZW50U2V0dXAgfHwgbGlmZWN5Y2xlID09PSBcInNwXCIgLyogTGlmZWN5Y2xlSG9va3MuU0VSVkVSX1BSRUZFVENIICovKSAmJlxyXG4gICAgaW5qZWN0SG9vayhsaWZlY3ljbGUsIGhvb2ssIHRhcmdldCk7XHJcbmNvbnN0IG9uQmVmb3JlTW91bnQgPSBjcmVhdGVIb29rKFwiYm1cIiAvKiBMaWZlY3ljbGVIb29rcy5CRUZPUkVfTU9VTlQgKi8pO1xyXG5jb25zdCBvbk1vdW50ZWQgPSBjcmVhdGVIb29rKFwibVwiIC8qIExpZmVjeWNsZUhvb2tzLk1PVU5URUQgKi8pO1xyXG5jb25zdCBvbkJlZm9yZVVwZGF0ZSA9IGNyZWF0ZUhvb2soXCJidVwiIC8qIExpZmVjeWNsZUhvb2tzLkJFRk9SRV9VUERBVEUgKi8pO1xyXG5jb25zdCBvblVwZGF0ZWQgPSBjcmVhdGVIb29rKFwidVwiIC8qIExpZmVjeWNsZUhvb2tzLlVQREFURUQgKi8pO1xyXG5jb25zdCBvbkJlZm9yZVVubW91bnQgPSBjcmVhdGVIb29rKFwiYnVtXCIgLyogTGlmZWN5Y2xlSG9va3MuQkVGT1JFX1VOTU9VTlQgKi8pO1xyXG5jb25zdCBvblVubW91bnRlZCA9IGNyZWF0ZUhvb2soXCJ1bVwiIC8qIExpZmVjeWNsZUhvb2tzLlVOTU9VTlRFRCAqLyk7XHJcbmNvbnN0IG9uU2VydmVyUHJlZmV0Y2ggPSBjcmVhdGVIb29rKFwic3BcIiAvKiBMaWZlY3ljbGVIb29rcy5TRVJWRVJfUFJFRkVUQ0ggKi8pO1xyXG5jb25zdCBvblJlbmRlclRyaWdnZXJlZCA9IGNyZWF0ZUhvb2soXCJydGdcIiAvKiBMaWZlY3ljbGVIb29rcy5SRU5ERVJfVFJJR0dFUkVEICovKTtcclxuY29uc3Qgb25SZW5kZXJUcmFja2VkID0gY3JlYXRlSG9vayhcInJ0Y1wiIC8qIExpZmVjeWNsZUhvb2tzLlJFTkRFUl9UUkFDS0VEICovKTtcclxuZnVuY3Rpb24gb25FcnJvckNhcHR1cmVkKGhvb2ssIHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZSkge1xyXG4gICAgaW5qZWN0SG9vayhcImVjXCIgLyogTGlmZWN5Y2xlSG9va3MuRVJST1JfQ0FQVFVSRUQgKi8sIGhvb2ssIHRhcmdldCk7XHJcbn1cblxuLyoqXHJcblJ1bnRpbWUgaGVscGVyIGZvciBhcHBseWluZyBkaXJlY3RpdmVzIHRvIGEgdm5vZGUuIEV4YW1wbGUgdXNhZ2U6XHJcblxuY29uc3QgY29tcCA9IHJlc29sdmVDb21wb25lbnQoJ2NvbXAnKVxyXG5jb25zdCBmb28gPSByZXNvbHZlRGlyZWN0aXZlKCdmb28nKVxyXG5jb25zdCBiYXIgPSByZXNvbHZlRGlyZWN0aXZlKCdiYXInKVxyXG5cbnJldHVybiB3aXRoRGlyZWN0aXZlcyhoKGNvbXApLCBbXHJcbiAgW2ZvbywgdGhpcy54XSxcclxuICBbYmFyLCB0aGlzLnldXHJcbl0pXHJcbiovXHJcbmZ1bmN0aW9uIHZhbGlkYXRlRGlyZWN0aXZlTmFtZShuYW1lKSB7XHJcbiAgICBpZiAoaXNCdWlsdEluRGlyZWN0aXZlKG5hbWUpKSB7XHJcbiAgICAgICAgd2FybignRG8gbm90IHVzZSBidWlsdC1pbiBkaXJlY3RpdmUgaWRzIGFzIGN1c3RvbSBkaXJlY3RpdmUgaWQ6ICcgKyBuYW1lKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQWRkcyBkaXJlY3RpdmVzIHRvIGEgVk5vZGUuXHJcbiAqL1xyXG5mdW5jdGlvbiB3aXRoRGlyZWN0aXZlcyh2bm9kZSwgZGlyZWN0aXZlcykge1xyXG4gICAgY29uc3QgaW50ZXJuYWxJbnN0YW5jZSA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcclxuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlID09PSBudWxsKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm4oYHdpdGhEaXJlY3RpdmVzIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHJlbmRlciBmdW5jdGlvbnMuYCk7XHJcbiAgICAgICAgcmV0dXJuIHZub2RlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRFeHBvc2VQcm94eShpbnRlcm5hbEluc3RhbmNlKSB8fFxyXG4gICAgICAgIGludGVybmFsSW5zdGFuY2UucHJveHk7XHJcbiAgICBjb25zdCBiaW5kaW5ncyA9IHZub2RlLmRpcnMgfHwgKHZub2RlLmRpcnMgPSBbXSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpcmVjdGl2ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgW2RpciwgdmFsdWUsIGFyZywgbW9kaWZpZXJzID0gRU1QVFlfT0JKXSA9IGRpcmVjdGl2ZXNbaV07XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGlyKSkge1xyXG4gICAgICAgICAgICBkaXIgPSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBkaXIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkOiBkaXJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpci5kZWVwKSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmluZGluZ3MucHVzaCh7XHJcbiAgICAgICAgICAgIGRpcixcclxuICAgICAgICAgICAgaW5zdGFuY2UsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBvbGRWYWx1ZTogdm9pZCAwLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIG1vZGlmaWVyc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZub2RlO1xyXG59XHJcbmZ1bmN0aW9uIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIHByZXZWTm9kZSwgaW5zdGFuY2UsIG5hbWUpIHtcclxuICAgIGNvbnN0IGJpbmRpbmdzID0gdm5vZGUuZGlycztcclxuICAgIGNvbnN0IG9sZEJpbmRpbmdzID0gcHJldlZOb2RlICYmIHByZXZWTm9kZS5kaXJzO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcclxuICAgICAgICBpZiAob2xkQmluZGluZ3MpIHtcclxuICAgICAgICAgICAgYmluZGluZy5vbGRWYWx1ZSA9IG9sZEJpbmRpbmdzW2ldLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaG9vayA9IGJpbmRpbmcuZGlyW25hbWVdO1xyXG4gICAgICAgIGlmIChob29rKSB7XHJcbiAgICAgICAgICAgIC8vIGRpc2FibGUgdHJhY2tpbmcgaW5zaWRlIGFsbCBsaWZlY3ljbGUgaG9va3NcclxuICAgICAgICAgICAgLy8gc2luY2UgdGhleSBjYW4gcG90ZW50aWFsbHkgYmUgY2FsbGVkIGluc2lkZSBlZmZlY3RzLlxyXG4gICAgICAgICAgICBwYXVzZVRyYWNraW5nKCk7XHJcbiAgICAgICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGhvb2ssIGluc3RhbmNlLCA4IC8qIEVycm9yQ29kZXMuRElSRUNUSVZFX0hPT0sgKi8sIFtcclxuICAgICAgICAgICAgICAgIHZub2RlLmVsLFxyXG4gICAgICAgICAgICAgICAgYmluZGluZyxcclxuICAgICAgICAgICAgICAgIHZub2RlLFxyXG4gICAgICAgICAgICAgICAgcHJldlZOb2RlXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICByZXNldFRyYWNraW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNvbnN0IENPTVBPTkVOVFMgPSAnY29tcG9uZW50cyc7XHJcbmNvbnN0IERJUkVDVElWRVMgPSAnZGlyZWN0aXZlcyc7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudChuYW1lLCBtYXliZVNlbGZSZWZlcmVuY2UpIHtcclxuICAgIHJldHVybiByZXNvbHZlQXNzZXQoQ09NUE9ORU5UUywgbmFtZSwgdHJ1ZSwgbWF5YmVTZWxmUmVmZXJlbmNlKSB8fCBuYW1lO1xyXG59XHJcbmNvbnN0IE5VTExfRFlOQU1JQ19DT01QT05FTlQgPSBTeW1ib2woKTtcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY0NvbXBvbmVudChjb21wb25lbnQpIHtcclxuICAgIGlmIChpc1N0cmluZyhjb21wb25lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBc3NldChDT01QT05FTlRTLCBjb21wb25lbnQsIGZhbHNlKSB8fCBjb21wb25lbnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBpbnZhbGlkIHR5cGVzIHdpbGwgZmFsbHRocm91Z2ggdG8gY3JlYXRlVk5vZGUgYW5kIHJhaXNlIHdhcm5pbmdcclxuICAgICAgICByZXR1cm4gKGNvbXBvbmVudCB8fCBOVUxMX0RZTkFNSUNfQ09NUE9ORU5UKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVEaXJlY3RpdmUobmFtZSkge1xyXG4gICAgcmV0dXJuIHJlc29sdmVBc3NldChESVJFQ1RJVkVTLCBuYW1lKTtcclxufVxyXG4vLyBpbXBsZW1lbnRhdGlvblxyXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQodHlwZSwgbmFtZSwgd2Fybk1pc3NpbmcgPSB0cnVlLCBtYXliZVNlbGZSZWZlcmVuY2UgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgfHwgY3VycmVudEluc3RhbmNlO1xyXG4gICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcclxuICAgICAgICAvLyBleHBsaWNpdCBzZWxmIG5hbWUgaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgICBpZiAodHlwZSA9PT0gQ09NUE9ORU5UUykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxmTmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50LCBmYWxzZSAvKiBkbyBub3QgaW5jbHVkZSBpbmZlcnJlZCBuYW1lIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNvZGUgKi8pO1xyXG4gICAgICAgICAgICBpZiAoc2VsZk5hbWUgJiZcclxuICAgICAgICAgICAgICAgIChzZWxmTmFtZSA9PT0gbmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGZOYW1lID09PSBjYW1lbGl6ZShuYW1lKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGZOYW1lID09PSBjYXBpdGFsaXplKGNhbWVsaXplKG5hbWUpKSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gXHJcbiAgICAgICAgLy8gbG9jYWwgcmVnaXN0cmF0aW9uXHJcbiAgICAgICAgLy8gY2hlY2sgaW5zdGFuY2VbdHlwZV0gZmlyc3Qgd2hpY2ggaXMgcmVzb2x2ZWQgZm9yIG9wdGlvbnMgQVBJXHJcbiAgICAgICAgcmVzb2x2ZShpbnN0YW5jZVt0eXBlXSB8fCBDb21wb25lbnRbdHlwZV0sIG5hbWUpIHx8XHJcbiAgICAgICAgICAgIC8vIGdsb2JhbCByZWdpc3RyYXRpb25cclxuICAgICAgICAgICAgcmVzb2x2ZShpbnN0YW5jZS5hcHBDb250ZXh0W3R5cGVdLCBuYW1lKTtcclxuICAgICAgICBpZiAoIXJlcyAmJiBtYXliZVNlbGZSZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gaW1wbGljaXQgc2VsZi1yZWZlcmVuY2VcclxuICAgICAgICAgICAgcmV0dXJuIENvbXBvbmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gdHlwZSA9PT0gQ09NUE9ORU5UU1xyXG4gICAgICAgICAgICAgICAgPyBgXFxuSWYgdGhpcyBpcyBhIG5hdGl2ZSBjdXN0b20gZWxlbWVudCwgbWFrZSBzdXJlIHRvIGV4Y2x1ZGUgaXQgZnJvbSBgICtcclxuICAgICAgICAgICAgICAgICAgICBgY29tcG9uZW50IHJlc29sdXRpb24gdmlhIGNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQuYFxyXG4gICAgICAgICAgICAgICAgOiBgYDtcclxuICAgICAgICAgICAgd2FybihgRmFpbGVkIHRvIHJlc29sdmUgJHt0eXBlLnNsaWNlKDAsIC0xKX06ICR7bmFtZX0ke2V4dHJhfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FybihgcmVzb2x2ZSR7Y2FwaXRhbGl6ZSh0eXBlLnNsaWNlKDAsIC0xKSl9IGAgK1xyXG4gICAgICAgICAgICBgY2FuIG9ubHkgYmUgdXNlZCBpbiByZW5kZXIoKSBvciBzZXR1cCgpLmApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlc29sdmUocmVnaXN0cnksIG5hbWUpIHtcclxuICAgIHJldHVybiAocmVnaXN0cnkgJiZcclxuICAgICAgICAocmVnaXN0cnlbbmFtZV0gfHxcclxuICAgICAgICAgICAgcmVnaXN0cnlbY2FtZWxpemUobmFtZSldIHx8XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5W2NhcGl0YWxpemUoY2FtZWxpemUobmFtZSkpXSkpO1xyXG59XG5cbi8qKlxyXG4gKiBBY3R1YWwgaW1wbGVtZW50YXRpb25cclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlckxpc3Qoc291cmNlLCByZW5kZXJJdGVtLCBjYWNoZSwgaW5kZXgpIHtcclxuICAgIGxldCByZXQ7XHJcbiAgICBjb25zdCBjYWNoZWQgPSAoY2FjaGUgJiYgY2FjaGVbaW5kZXhdKTtcclxuICAgIGlmIChpc0FycmF5KHNvdXJjZSkgfHwgaXNTdHJpbmcoc291cmNlKSkge1xyXG4gICAgICAgIHJldCA9IG5ldyBBcnJheShzb3VyY2UubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNvdXJjZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVySXRlbShzb3VyY2VbaV0sIGksIHVuZGVmaW5lZCwgY2FjaGVkICYmIGNhY2hlZFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNvdXJjZSkpIHtcclxuICAgICAgICAgICAgd2FybihgVGhlIHYtZm9yIHJhbmdlIGV4cGVjdCBhbiBpbnRlZ2VyIHZhbHVlIGJ1dCBnb3QgJHtzb3VyY2V9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXQgPSBuZXcgQXJyYXkoc291cmNlKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlckl0ZW0oaSArIDEsIGksIHVuZGVmaW5lZCwgY2FjaGVkICYmIGNhY2hlZFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgICAgIGlmIChzb3VyY2VbU3ltYm9sLml0ZXJhdG9yXSkge1xyXG4gICAgICAgICAgICByZXQgPSBBcnJheS5mcm9tKHNvdXJjZSwgKGl0ZW0sIGkpID0+IHJlbmRlckl0ZW0oaXRlbSwgaSwgdW5kZWZpbmVkLCBjYWNoZWQgJiYgY2FjaGVkW2ldKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgICAgICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICAgICAgICAgIHJldFtpXSA9IHJlbmRlckl0ZW0oc291cmNlW2tleV0sIGtleSwgaSwgY2FjaGVkICYmIGNhY2hlZFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXQgPSBbXTtcclxuICAgIH1cclxuICAgIGlmIChjYWNoZSkge1xyXG4gICAgICAgIGNhY2hlW2luZGV4XSA9IHJldDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cblxuLyoqXHJcbiAqIENvbXBpbGVyIHJ1bnRpbWUgaGVscGVyIGZvciBjcmVhdGluZyBkeW5hbWljIHNsb3RzIG9iamVjdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlU2xvdHMoc2xvdHMsIGR5bmFtaWNTbG90cykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkeW5hbWljU2xvdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzbG90ID0gZHluYW1pY1Nsb3RzW2ldO1xyXG4gICAgICAgIC8vIGFycmF5IG9mIGR5bmFtaWMgc2xvdCBnZW5lcmF0ZWQgYnkgPHRlbXBsYXRlIHYtZm9yPVwiLi4uXCIgI1suLi5dPlxyXG4gICAgICAgIGlmIChpc0FycmF5KHNsb3QpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2xvdC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgc2xvdHNbc2xvdFtqXS5uYW1lXSA9IHNsb3Rbal0uZm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2xvdCkge1xyXG4gICAgICAgICAgICAvLyBjb25kaXRpb25hbCBzaW5nbGUgc2xvdCBnZW5lcmF0ZWQgYnkgPHRlbXBsYXRlIHYtaWY9XCIuLi5cIiAjZm9vPlxyXG4gICAgICAgICAgICBzbG90c1tzbG90Lm5hbWVdID0gc2xvdC5rZXlcclxuICAgICAgICAgICAgICAgID8gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBzbG90LmZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5rZXkgPSBzbG90LmtleTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBzbG90LmZuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzbG90cztcclxufVxuXG4vKipcclxuICogQ29tcGlsZXIgcnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBgPHNsb3QvPmBcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclNsb3Qoc2xvdHMsIG5hbWUsIHByb3BzID0ge30sIFxyXG4vLyB0aGlzIGlzIG5vdCBhIHVzZXItZmFjaW5nIGZ1bmN0aW9uLCBzbyB0aGUgZmFsbGJhY2sgaXMgYWx3YXlzIGdlbmVyYXRlZCBieVxyXG4vLyB0aGUgY29tcGlsZXIgYW5kIGd1YXJhbnRlZWQgdG8gYmUgYSBmdW5jdGlvbiByZXR1cm5pbmcgYW4gYXJyYXlcclxuZmFsbGJhY2ssIG5vU2xvdHRlZCkge1xyXG4gICAgaWYgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5pc0NFIHx8XHJcbiAgICAgICAgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5wYXJlbnQgJiZcclxuICAgICAgICAgICAgaXNBc3luY1dyYXBwZXIoY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnBhcmVudCkgJiZcclxuICAgICAgICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnBhcmVudC5pc0NFKSkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSgnc2xvdCcsIG5hbWUgPT09ICdkZWZhdWx0JyA/IG51bGwgOiB7IG5hbWUgfSwgZmFsbGJhY2sgJiYgZmFsbGJhY2soKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2xvdCA9IHNsb3RzW25hbWVdO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBzbG90ICYmIHNsb3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHdhcm4oYFNTUi1vcHRpbWl6ZWQgc2xvdCBmdW5jdGlvbiBkZXRlY3RlZCBpbiBhIG5vbi1TU1Itb3B0aW1pemVkIHJlbmRlciBgICtcclxuICAgICAgICAgICAgYGZ1bmN0aW9uLiBZb3UgbmVlZCB0byBtYXJrIHRoaXMgY29tcG9uZW50IHdpdGggJGR5bmFtaWMtc2xvdHMgaW4gdGhlIGAgK1xyXG4gICAgICAgICAgICBgcGFyZW50IHRlbXBsYXRlLmApO1xyXG4gICAgICAgIHNsb3QgPSAoKSA9PiBbXTtcclxuICAgIH1cclxuICAgIC8vIGEgY29tcGlsZWQgc2xvdCBkaXNhYmxlcyBibG9jayB0cmFja2luZyBieSBkZWZhdWx0IHRvIGF2b2lkIG1hbnVhbFxyXG4gICAgLy8gaW52b2NhdGlvbiBpbnRlcmZlcmluZyB3aXRoIHRlbXBsYXRlLWJhc2VkIGJsb2NrIHRyYWNraW5nLCBidXQgaW5cclxuICAgIC8vIGByZW5kZXJTbG90YCB3ZSBjYW4gYmUgc3VyZSB0aGF0IGl0J3MgdGVtcGxhdGUtYmFzZWQgc28gd2UgY2FuIGZvcmNlXHJcbiAgICAvLyBlbmFibGUgaXQuXHJcbiAgICBpZiAoc2xvdCAmJiBzbG90Ll9jKSB7XHJcbiAgICAgICAgc2xvdC5fZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgb3BlbkJsb2NrKCk7XHJcbiAgICBjb25zdCB2YWxpZFNsb3RDb250ZW50ID0gc2xvdCAmJiBlbnN1cmVWYWxpZFZOb2RlKHNsb3QocHJvcHMpKTtcclxuICAgIGNvbnN0IHJlbmRlcmVkID0gY3JlYXRlQmxvY2soRnJhZ21lbnQsIHtcclxuICAgICAgICBrZXk6IHByb3BzLmtleSB8fFxyXG4gICAgICAgICAgICAvLyBzbG90IGNvbnRlbnQgYXJyYXkgb2YgYSBkeW5hbWljIGNvbmRpdGlvbmFsIHNsb3QgbWF5IGhhdmUgYSBicmFuY2hcclxuICAgICAgICAgICAgLy8ga2V5IGF0dGFjaGVkIGluIHRoZSBgY3JlYXRlU2xvdHNgIGhlbHBlciwgcmVzcGVjdCB0aGF0XHJcbiAgICAgICAgICAgICh2YWxpZFNsb3RDb250ZW50ICYmIHZhbGlkU2xvdENvbnRlbnQua2V5KSB8fFxyXG4gICAgICAgICAgICBgXyR7bmFtZX1gXHJcbiAgICB9LCB2YWxpZFNsb3RDb250ZW50IHx8IChmYWxsYmFjayA/IGZhbGxiYWNrKCkgOiBbXSksIHZhbGlkU2xvdENvbnRlbnQgJiYgc2xvdHMuXyA9PT0gMSAvKiBTbG90RmxhZ3MuU1RBQkxFICovXHJcbiAgICAgICAgPyA2NCAvKiBQYXRjaEZsYWdzLlNUQUJMRV9GUkFHTUVOVCAqL1xyXG4gICAgICAgIDogLTIgLyogUGF0Y2hGbGFncy5CQUlMICovKTtcclxuICAgIGlmICghbm9TbG90dGVkICYmIHJlbmRlcmVkLnNjb3BlSWQpIHtcclxuICAgICAgICByZW5kZXJlZC5zbG90U2NvcGVJZHMgPSBbcmVuZGVyZWQuc2NvcGVJZCArICctcyddO1xyXG4gICAgfVxyXG4gICAgaWYgKHNsb3QgJiYgc2xvdC5fYykge1xyXG4gICAgICAgIHNsb3QuX2QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVkO1xyXG59XHJcbmZ1bmN0aW9uIGVuc3VyZVZhbGlkVk5vZGUodm5vZGVzKSB7XHJcbiAgICByZXR1cm4gdm5vZGVzLnNvbWUoY2hpbGQgPT4ge1xyXG4gICAgICAgIGlmICghaXNWTm9kZShjaGlsZCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSBDb21tZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IEZyYWdtZW50ICYmXHJcbiAgICAgICAgICAgICFlbnN1cmVWYWxpZFZOb2RlKGNoaWxkLmNoaWxkcmVuKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSlcclxuICAgICAgICA/IHZub2Rlc1xyXG4gICAgICAgIDogbnVsbDtcclxufVxuXG4vKipcclxuICogRm9yIHByZWZpeGluZyBrZXlzIGluIHYtb249XCJvYmpcIiB3aXRoIFwib25cIlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gdG9IYW5kbGVycyhvYmosIHByZXNlcnZlQ2FzZUlmTmVjZXNzYXJ5KSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICB3YXJuKGB2LW9uIHdpdGggbm8gYXJndW1lbnQgZXhwZWN0cyBhbiBvYmplY3QgdmFsdWUuYCk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgIHJldFtwcmVzZXJ2ZUNhc2VJZk5lY2Vzc2FyeSAmJiAvW0EtWl0vLnRlc3Qoa2V5KVxyXG4gICAgICAgICAgICA/IGBvbjoke2tleX1gXHJcbiAgICAgICAgICAgIDogdG9IYW5kbGVyS2V5KGtleSldID0gb2JqW2tleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XG5cbi8qKlxyXG4gKiAjMjQzNyBJbiBWdWUgMywgZnVuY3Rpb25hbCBjb21wb25lbnRzIGRvIG5vdCBoYXZlIGEgcHVibGljIGluc3RhbmNlIHByb3h5IGJ1dFxyXG4gKiB0aGV5IGV4aXN0IGluIHRoZSBpbnRlcm5hbCBwYXJlbnQgY2hhaW4uIEZvciBjb2RlIHRoYXQgcmVsaWVzIG9uIHRyYXZlcnNpbmdcclxuICogcHVibGljICRwYXJlbnQgY2hhaW5zLCBza2lwIGZ1bmN0aW9uYWwgb25lcyBhbmQgZ28gdG8gdGhlIHBhcmVudCBpbnN0ZWFkLlxyXG4gKi9cclxuY29uc3QgZ2V0UHVibGljSW5zdGFuY2UgPSAoaSkgPT4ge1xyXG4gICAgaWYgKCFpKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzU3RhdGVmdWxDb21wb25lbnQoaSkpXHJcbiAgICAgICAgcmV0dXJuIGdldEV4cG9zZVByb3h5KGkpIHx8IGkucHJveHk7XHJcbiAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoaS5wYXJlbnQpO1xyXG59O1xyXG5jb25zdCBwdWJsaWNQcm9wZXJ0aWVzTWFwID0gXHJcbi8vIE1vdmUgUFVSRSBtYXJrZXIgdG8gbmV3IGxpbmUgdG8gd29ya2Fyb3VuZCBjb21waWxlciBkaXNjYXJkaW5nIGl0XHJcbi8vIGR1ZSB0byB0eXBlIGFubm90YXRpb25cclxuLyojX19QVVJFX18qLyBleHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSwge1xyXG4gICAgJDogaSA9PiBpLFxyXG4gICAgJGVsOiBpID0+IGkudm5vZGUuZWwsXHJcbiAgICAkZGF0YTogaSA9PiBpLmRhdGEsXHJcbiAgICAkcHJvcHM6IGkgPT4gKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IHNoYWxsb3dSZWFkb25seShpLnByb3BzKSA6IGkucHJvcHMpLFxyXG4gICAgJGF0dHJzOiBpID0+ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBzaGFsbG93UmVhZG9ubHkoaS5hdHRycykgOiBpLmF0dHJzKSxcclxuICAgICRzbG90czogaSA9PiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gc2hhbGxvd1JlYWRvbmx5KGkuc2xvdHMpIDogaS5zbG90cyksXHJcbiAgICAkcmVmczogaSA9PiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gc2hhbGxvd1JlYWRvbmx5KGkucmVmcykgOiBpLnJlZnMpLFxyXG4gICAgJHBhcmVudDogaSA9PiBnZXRQdWJsaWNJbnN0YW5jZShpLnBhcmVudCksXHJcbiAgICAkcm9vdDogaSA9PiBnZXRQdWJsaWNJbnN0YW5jZShpLnJvb3QpLFxyXG4gICAgJGVtaXQ6IGkgPT4gaS5lbWl0LFxyXG4gICAgJG9wdGlvbnM6IGkgPT4gKF9fVlVFX09QVElPTlNfQVBJX18gPyByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpKSA6IGkudHlwZSksXHJcbiAgICAkZm9yY2VVcGRhdGU6IGkgPT4gaS5mIHx8IChpLmYgPSAoKSA9PiBxdWV1ZUpvYihpLnVwZGF0ZSkpLFxyXG4gICAgJG5leHRUaWNrOiBpID0+IGkubiB8fCAoaS5uID0gbmV4dFRpY2suYmluZChpLnByb3h5KSksXHJcbiAgICAkd2F0Y2g6IGkgPT4gKF9fVlVFX09QVElPTlNfQVBJX18gPyBpbnN0YW5jZVdhdGNoLmJpbmQoaSkgOiBOT09QKVxyXG59KTtcclxuY29uc3QgaXNSZXNlcnZlZFByZWZpeCA9IChrZXkpID0+IGtleSA9PT0gJ18nIHx8IGtleSA9PT0gJyQnO1xyXG5jb25zdCBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMgPSB7XHJcbiAgICBnZXQoeyBfOiBpbnN0YW5jZSB9LCBrZXkpIHtcclxuICAgICAgICBjb25zdCB7IGN0eCwgc2V0dXBTdGF0ZSwgZGF0YSwgcHJvcHMsIGFjY2Vzc0NhY2hlLCB0eXBlLCBhcHBDb250ZXh0IH0gPSBpbnN0YW5jZTtcclxuICAgICAgICAvLyBmb3IgaW50ZXJuYWwgZm9ybWF0dGVycyB0byBrbm93IHRoYXQgdGhpcyBpcyBhIFZ1ZSBpbnN0YW5jZVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYga2V5ID09PSAnX19pc1Z1ZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHByaW9yaXRpemUgPHNjcmlwdCBzZXR1cD4gYmluZGluZ3MgZHVyaW5nIGRldi5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyBldmVuIHByb3BlcnRpZXMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJCB0byBiZSB1c2VkIC0gc28gdGhhdFxyXG4gICAgICAgIC8vIGl0IGFsaWducyB3aXRoIHRoZSBwcm9kdWN0aW9uIGJlaGF2aW9yIHdoZXJlIHRoZSByZW5kZXIgZm4gaXMgaW5saW5lZCBhbmRcclxuICAgICAgICAvLyBpbmRlZWQgaGFzIGFjY2VzcyB0byBhbGwgZGVjbGFyZWQgdmFyaWFibGVzLlxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgc2V0dXBTdGF0ZSAhPT0gRU1QVFlfT0JKICYmXHJcbiAgICAgICAgICAgIHNldHVwU3RhdGUuX19pc1NjcmlwdFNldHVwICYmXHJcbiAgICAgICAgICAgIGhhc093bihzZXR1cFN0YXRlLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXR1cFN0YXRlW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRhdGEgLyBwcm9wcyAvIGN0eFxyXG4gICAgICAgIC8vIFRoaXMgZ2V0dGVyIGdldHMgY2FsbGVkIGZvciBldmVyeSBwcm9wZXJ0eSBhY2Nlc3Mgb24gdGhlIHJlbmRlciBjb250ZXh0XHJcbiAgICAgICAgLy8gZHVyaW5nIHJlbmRlciBhbmQgaXMgYSBtYWpvciBob3RzcG90LiBUaGUgbW9zdCBleHBlbnNpdmUgcGFydCBvZiB0aGlzXHJcbiAgICAgICAgLy8gaXMgdGhlIG11bHRpcGxlIGhhc093bigpIGNhbGxzLiBJdCdzIG11Y2ggZmFzdGVyIHRvIGRvIGEgc2ltcGxlIHByb3BlcnR5XHJcbiAgICAgICAgLy8gYWNjZXNzIG9uIGEgcGxhaW4gb2JqZWN0LCBzbyB3ZSB1c2UgYW4gYWNjZXNzQ2FjaGUgb2JqZWN0ICh3aXRoIG51bGxcclxuICAgICAgICAvLyBwcm90b3R5cGUpIHRvIG1lbW9pemUgd2hhdCBhY2Nlc3MgdHlwZSBhIGtleSBjb3JyZXNwb25kcyB0by5cclxuICAgICAgICBsZXQgbm9ybWFsaXplZFByb3BzO1xyXG4gICAgICAgIGlmIChrZXlbMF0gIT09ICckJykge1xyXG4gICAgICAgICAgICBjb25zdCBuID0gYWNjZXNzQ2FjaGVba2V5XTtcclxuICAgICAgICAgICAgaWYgKG4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxIC8qIEFjY2Vzc1R5cGVzLlNFVFVQICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0dXBTdGF0ZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMiAvKiBBY2Nlc3NUeXBlcy5EQVRBICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNCAvKiBBY2Nlc3NUeXBlcy5DT05URVhUICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4W2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzIC8qIEFjY2Vzc1R5cGVzLlBST1BTICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiBqdXN0IGZhbGx0aHJvdWdoXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc2V0dXBTdGF0ZSAhPT0gRU1QVFlfT0JKICYmIGhhc093bihzZXR1cFN0YXRlLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMSAvKiBBY2Nlc3NUeXBlcy5TRVRVUCAqLztcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZXR1cFN0YXRlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YSAhPT0gRU1QVFlfT0JKICYmIGhhc093bihkYXRhLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMiAvKiBBY2Nlc3NUeXBlcy5EQVRBICovO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgLy8gb25seSBjYWNoZSBvdGhlciBwcm9wZXJ0aWVzIHdoZW4gaW5zdGFuY2UgaGFzIGRlY2xhcmVkICh0aHVzIHN0YWJsZSlcclxuICAgICAgICAgICAgLy8gcHJvcHNcclxuICAgICAgICAgICAgKG5vcm1hbGl6ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzT3B0aW9uc1swXSkgJiZcclxuICAgICAgICAgICAgICAgIGhhc093bihub3JtYWxpemVkUHJvcHMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSAzIC8qIEFjY2Vzc1R5cGVzLlBST1BTICovO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3R4ICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGN0eCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDQgLyogQWNjZXNzVHlwZXMuQ09OVEVYVCAqLztcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHhba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghX19WVUVfT1BUSU9OU19BUElfXyB8fCBzaG91bGRDYWNoZUFjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDAgLyogQWNjZXNzVHlwZXMuT1RIRVIgKi87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHVibGljR2V0dGVyID0gcHVibGljUHJvcGVydGllc01hcFtrZXldO1xyXG4gICAgICAgIGxldCBjc3NNb2R1bGUsIGdsb2JhbFByb3BlcnRpZXM7XHJcbiAgICAgICAgLy8gcHVibGljICR4eHggcHJvcGVydGllc1xyXG4gICAgICAgIGlmIChwdWJsaWNHZXR0ZXIpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJyRhdHRycycpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrKGluc3RhbmNlLCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sIGtleSk7XHJcbiAgICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgbWFya0F0dHJzQWNjZXNzZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHVibGljR2V0dGVyKGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgLy8gY3NzIG1vZHVsZSAoaW5qZWN0ZWQgYnkgdnVlLWxvYWRlcilcclxuICAgICAgICAoY3NzTW9kdWxlID0gdHlwZS5fX2Nzc01vZHVsZXMpICYmXHJcbiAgICAgICAgICAgIChjc3NNb2R1bGUgPSBjc3NNb2R1bGVba2V5XSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNzc01vZHVsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY3R4ICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGN0eCwga2V5KSkge1xyXG4gICAgICAgICAgICAvLyB1c2VyIG1heSBzZXQgY3VzdG9tIHByb3BlcnRpZXMgdG8gYHRoaXNgIHRoYXQgc3RhcnQgd2l0aCBgJGBcclxuICAgICAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDQgLyogQWNjZXNzVHlwZXMuQ09OVEVYVCAqLztcclxuICAgICAgICAgICAgcmV0dXJuIGN0eFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAvLyBnbG9iYWwgcHJvcGVydGllc1xyXG4gICAgICAgICgoZ2xvYmFsUHJvcGVydGllcyA9IGFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMpLFxyXG4gICAgICAgICAgICBoYXNPd24oZ2xvYmFsUHJvcGVydGllcywga2V5KSkpIHtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlICYmXHJcbiAgICAgICAgICAgICghaXNTdHJpbmcoa2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgLy8gIzEwOTEgYXZvaWQgaW50ZXJuYWwgaXNSZWYvaXNWTm9kZSBjaGVja3Mgb24gY29tcG9uZW50IGluc3RhbmNlIGxlYWRpbmdcclxuICAgICAgICAgICAgICAgIC8vIHRvIGluZmluaXRlIHdhcm5pbmcgbG9vcFxyXG4gICAgICAgICAgICAgICAga2V5LmluZGV4T2YoJ19fdicpICE9PSAwKSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAhPT0gRU1QVFlfT0JKICYmIGlzUmVzZXJ2ZWRQcmVmaXgoa2V5WzBdKSAmJiBoYXNPd24oZGF0YSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBtdXN0IGJlIGFjY2Vzc2VkIHZpYSAkZGF0YSBiZWNhdXNlIGl0IHN0YXJ0cyB3aXRoIGEgcmVzZXJ2ZWQgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYGNoYXJhY3RlciAoXCIkXCIgb3IgXCJfXCIpIGFuZCBpcyBub3QgcHJveGllZCBvbiB0aGUgcmVuZGVyIGNvbnRleHQuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2UgPT09IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSB3YXMgYWNjZXNzZWQgZHVyaW5nIHJlbmRlciBgICtcclxuICAgICAgICAgICAgICAgICAgICBgYnV0IGlzIG5vdCBkZWZpbmVkIG9uIGluc3RhbmNlLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNldCh7IF86IGluc3RhbmNlIH0sIGtleSwgdmFsdWUpIHtcclxuICAgICAgICBjb25zdCB7IGRhdGEsIHNldHVwU3RhdGUsIGN0eCB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKHNldHVwU3RhdGUgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oc2V0dXBTdGF0ZSwga2V5KSkge1xyXG4gICAgICAgICAgICBzZXR1cFN0YXRlW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oZGF0YSwga2V5KSkge1xyXG4gICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhhc093bihpbnN0YW5jZS5wcm9wcywga2V5KSkge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4oYEF0dGVtcHRpbmcgdG8gbXV0YXRlIHByb3AgXCIke2tleX1cIi4gUHJvcHMgYXJlIHJlYWRvbmx5LmAsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5WzBdID09PSAnJCcgJiYga2V5LnNsaWNlKDEpIGluIGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgd2FybihgQXR0ZW1wdGluZyB0byBtdXRhdGUgcHVibGljIHByb3BlcnR5IFwiJHtrZXl9XCIuIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgIGBQcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggJCBhcmUgcmVzZXJ2ZWQgYW5kIHJlYWRvbmx5LmAsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBrZXkgaW4gaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3R4W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICBoYXMoeyBfOiB7IGRhdGEsIHNldHVwU3RhdGUsIGFjY2Vzc0NhY2hlLCBjdHgsIGFwcENvbnRleHQsIHByb3BzT3B0aW9ucyB9IH0sIGtleSkge1xyXG4gICAgICAgIGxldCBub3JtYWxpemVkUHJvcHM7XHJcbiAgICAgICAgcmV0dXJuICghIWFjY2Vzc0NhY2hlW2tleV0gfHxcclxuICAgICAgICAgICAgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oZGF0YSwga2V5KSkgfHxcclxuICAgICAgICAgICAgKHNldHVwU3RhdGUgIT09IEVNUFRZX09CSiAmJiBoYXNPd24oc2V0dXBTdGF0ZSwga2V5KSkgfHxcclxuICAgICAgICAgICAgKChub3JtYWxpemVkUHJvcHMgPSBwcm9wc09wdGlvbnNbMF0pICYmIGhhc093bihub3JtYWxpemVkUHJvcHMsIGtleSkpIHx8XHJcbiAgICAgICAgICAgIGhhc093bihjdHgsIGtleSkgfHxcclxuICAgICAgICAgICAgaGFzT3duKHB1YmxpY1Byb3BlcnRpZXNNYXAsIGtleSkgfHxcclxuICAgICAgICAgICAgaGFzT3duKGFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsIGtleSkpO1xyXG4gICAgfSxcclxuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gaW52YWxpZGF0ZSBrZXkgY2FjaGUgb2YgYSBnZXR0ZXIgYmFzZWQgcHJvcGVydHkgIzU0MTdcclxuICAgICAgICAgICAgdGFyZ2V0Ll8uYWNjZXNzQ2FjaGVba2V5XSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldCh0YXJnZXQsIGtleSwgZGVzY3JpcHRvci52YWx1ZSwgbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcclxuICAgIH1cclxufTtcclxuaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhZmFsc2UpIHtcclxuICAgIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycy5vd25LZXlzID0gKHRhcmdldCkgPT4ge1xyXG4gICAgICAgIHdhcm4oYEF2b2lkIGFwcCBsb2dpYyB0aGF0IHJlbGllcyBvbiBlbnVtZXJhdGluZyBrZXlzIG9uIGEgY29tcG9uZW50IGluc3RhbmNlLiBgICtcclxuICAgICAgICAgICAgYFRoZSBrZXlzIHdpbGwgYmUgZW1wdHkgaW4gcHJvZHVjdGlvbiBtb2RlIHRvIGF2b2lkIHBlcmZvcm1hbmNlIG92ZXJoZWFkLmApO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuY29uc3QgUnVudGltZUNvbXBpbGVkUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzID0gLyojX19QVVJFX18qLyBleHRlbmQoe30sIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycywge1xyXG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgLy8gZmFzdCBwYXRoIGZvciB1bnNjb3BhYmxlcyB3aGVuIHVzaW5nIGB3aXRoYCBibG9ja1xyXG4gICAgICAgIGlmIChrZXkgPT09IFN5bWJvbC51bnNjb3BhYmxlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMuZ2V0KHRhcmdldCwga2V5LCB0YXJnZXQpO1xyXG4gICAgfSxcclxuICAgIGhhcyhfLCBrZXkpIHtcclxuICAgICAgICBjb25zdCBoYXMgPSBrZXlbMF0gIT09ICdfJyAmJiAhaXNHbG9iYWxseVdoaXRlbGlzdGVkKGtleSk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaGFzICYmIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycy5oYXMoXywga2V5KSkge1xyXG4gICAgICAgICAgICB3YXJuKGBQcm9wZXJ0eSAke0pTT04uc3RyaW5naWZ5KGtleSl9IHNob3VsZCBub3Qgc3RhcnQgd2l0aCBfIHdoaWNoIGlzIGEgcmVzZXJ2ZWQgcHJlZml4IGZvciBWdWUgaW50ZXJuYWxzLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGFzO1xyXG4gICAgfVxyXG59KTtcclxuLy8gZGV2IG9ubHlcclxuLy8gSW4gZGV2IG1vZGUsIHRoZSBwcm94eSB0YXJnZXQgZXhwb3NlcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIHNlZW4gb24gYHRoaXNgXHJcbi8vIGZvciBlYXNpZXIgY29uc29sZSBpbnNwZWN0aW9uLiBJbiBwcm9kIG1vZGUgaXQgd2lsbCBiZSBhbiBlbXB0eSBvYmplY3Qgc29cclxuLy8gdGhlc2UgcHJvcGVydGllcyBkZWZpbml0aW9ucyBjYW4gYmUgc2tpcHBlZC5cclxuZnVuY3Rpb24gY3JlYXRlRGV2UmVuZGVyQ29udGV4dChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0ge307XHJcbiAgICAvLyBleHBvc2UgaW50ZXJuYWwgaW5zdGFuY2UgZm9yIHByb3h5IGhhbmRsZXJzXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX2AsIHtcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgZ2V0OiAoKSA9PiBpbnN0YW5jZVxyXG4gICAgfSk7XHJcbiAgICAvLyBleHBvc2UgcHVibGljIHByb3BlcnRpZXNcclxuICAgIE9iamVjdC5rZXlzKHB1YmxpY1Byb3BlcnRpZXNNYXApLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBwdWJsaWNQcm9wZXJ0aWVzTWFwW2tleV0oaW5zdGFuY2UpLFxyXG4gICAgICAgICAgICAvLyBpbnRlcmNlcHRlZCBieSB0aGUgcHJveHkgc28gbm8gbmVlZCBmb3IgaW1wbGVtZW50YXRpb24sXHJcbiAgICAgICAgICAgIC8vIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBzZXQgZXJyb3JzXHJcbiAgICAgICAgICAgIHNldDogTk9PUFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcbi8vIGRldiBvbmx5XHJcbmZ1bmN0aW9uIGV4cG9zZVByb3BzT25SZW5kZXJDb250ZXh0KGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCB7IGN0eCwgcHJvcHNPcHRpb25zOiBbcHJvcHNPcHRpb25zXSB9ID0gaW5zdGFuY2U7XHJcbiAgICBpZiAocHJvcHNPcHRpb25zKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcHNPcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gaW5zdGFuY2UucHJvcHNba2V5XSxcclxuICAgICAgICAgICAgICAgIHNldDogTk9PUFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4vLyBkZXYgb25seVxyXG5mdW5jdGlvbiBleHBvc2VTZXR1cFN0YXRlT25SZW5kZXJDb250ZXh0KGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCB7IGN0eCwgc2V0dXBTdGF0ZSB9ID0gaW5zdGFuY2U7XHJcbiAgICBPYmplY3Qua2V5cyh0b1JhdyhzZXR1cFN0YXRlKSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmICghc2V0dXBTdGF0ZS5fX2lzU2NyaXB0U2V0dXApIHtcclxuICAgICAgICAgICAgaWYgKGlzUmVzZXJ2ZWRQcmVmaXgoa2V5WzBdKSkge1xyXG4gICAgICAgICAgICAgICAgd2Fybihgc2V0dXAoKSByZXR1cm4gcHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBzaG91bGQgbm90IHN0YXJ0IHdpdGggXCIkXCIgb3IgXCJfXCIgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYHdoaWNoIGFyZSByZXNlcnZlZCBwcmVmaXhlcyBmb3IgVnVlIGludGVybmFscy5gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHNldHVwU3RhdGVba2V5XSxcclxuICAgICAgICAgICAgICAgIHNldDogTk9PUFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVEdXBsaWNhdGVDaGVja2VyKCkge1xyXG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgcmV0dXJuICh0eXBlLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xyXG4gICAgICAgICAgICB3YXJuKGAke3R5cGV9IHByb3BlcnR5IFwiJHtrZXl9XCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluICR7Y2FjaGVba2V5XX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYWNoZVtrZXldID0gdHlwZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmxldCBzaG91bGRDYWNoZUFjY2VzcyA9IHRydWU7XHJcbmZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhpbnN0YW5jZSkge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlc29sdmVNZXJnZWRPcHRpb25zKGluc3RhbmNlKTtcclxuICAgIGNvbnN0IHB1YmxpY1RoaXMgPSBpbnN0YW5jZS5wcm94eTtcclxuICAgIGNvbnN0IGN0eCA9IGluc3RhbmNlLmN0eDtcclxuICAgIC8vIGRvIG5vdCBjYWNoZSBwcm9wZXJ0eSBhY2Nlc3Mgb24gcHVibGljIHByb3h5IGR1cmluZyBzdGF0ZSBpbml0aWFsaXphdGlvblxyXG4gICAgc2hvdWxkQ2FjaGVBY2Nlc3MgPSBmYWxzZTtcclxuICAgIC8vIGNhbGwgYmVmb3JlQ3JlYXRlIGZpcnN0IGJlZm9yZSBhY2Nlc3Npbmcgb3RoZXIgb3B0aW9ucyBzaW5jZVxyXG4gICAgLy8gdGhlIGhvb2sgbWF5IG11dGF0ZSByZXNvbHZlZCBvcHRpb25zICgjMjc5MSlcclxuICAgIGlmIChvcHRpb25zLmJlZm9yZUNyZWF0ZSkge1xyXG4gICAgICAgIGNhbGxIb29rKG9wdGlvbnMuYmVmb3JlQ3JlYXRlLCBpbnN0YW5jZSwgXCJiY1wiIC8qIExpZmVjeWNsZUhvb2tzLkJFRk9SRV9DUkVBVEUgKi8pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBcclxuICAgIC8vIHN0YXRlXHJcbiAgICBkYXRhOiBkYXRhT3B0aW9ucywgY29tcHV0ZWQ6IGNvbXB1dGVkT3B0aW9ucywgbWV0aG9kcywgd2F0Y2g6IHdhdGNoT3B0aW9ucywgcHJvdmlkZTogcHJvdmlkZU9wdGlvbnMsIGluamVjdDogaW5qZWN0T3B0aW9ucywgXHJcbiAgICAvLyBsaWZlY3ljbGVcclxuICAgIGNyZWF0ZWQsIGJlZm9yZU1vdW50LCBtb3VudGVkLCBiZWZvcmVVcGRhdGUsIHVwZGF0ZWQsIGFjdGl2YXRlZCwgZGVhY3RpdmF0ZWQsIGJlZm9yZURlc3Ryb3ksIGJlZm9yZVVubW91bnQsIGRlc3Ryb3llZCwgdW5tb3VudGVkLCByZW5kZXIsIHJlbmRlclRyYWNrZWQsIHJlbmRlclRyaWdnZXJlZCwgZXJyb3JDYXB0dXJlZCwgc2VydmVyUHJlZmV0Y2gsIFxyXG4gICAgLy8gcHVibGljIEFQSVxyXG4gICAgZXhwb3NlLCBpbmhlcml0QXR0cnMsIFxyXG4gICAgLy8gYXNzZXRzXHJcbiAgICBjb21wb25lbnRzLCBkaXJlY3RpdmVzLCBmaWx0ZXJzIH0gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gY3JlYXRlRHVwbGljYXRlQ2hlY2tlcigpIDogbnVsbDtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBjb25zdCBbcHJvcHNPcHRpb25zXSA9IGluc3RhbmNlLnByb3BzT3B0aW9ucztcclxuICAgICAgICBpZiAocHJvcHNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKFwiUHJvcHNcIiAvKiBPcHRpb25UeXBlcy5QUk9QUyAqLywga2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG9wdGlvbnMgaW5pdGlhbGl6YXRpb24gb3JkZXIgKHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBWdWUgMik6XHJcbiAgICAvLyAtIHByb3BzIChhbHJlYWR5IGRvbmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uKVxyXG4gICAgLy8gLSBpbmplY3RcclxuICAgIC8vIC0gbWV0aG9kc1xyXG4gICAgLy8gLSBkYXRhIChkZWZlcnJlZCBzaW5jZSBpdCByZWxpZXMgb24gYHRoaXNgIGFjY2VzcylcclxuICAgIC8vIC0gY29tcHV0ZWRcclxuICAgIC8vIC0gd2F0Y2ggKGRlZmVycmVkIHNpbmNlIGl0IHJlbGllcyBvbiBgdGhpc2AgYWNjZXNzKVxyXG4gICAgaWYgKGluamVjdE9wdGlvbnMpIHtcclxuICAgICAgICByZXNvbHZlSW5qZWN0aW9ucyhpbmplY3RPcHRpb25zLCBjdHgsIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcywgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGhvZHMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRob2RzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZEhhbmRsZXIgPSBtZXRob2RzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG1ldGhvZEhhbmRsZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBkZXYgbW9kZSwgd2UgdXNlIHRoZSBgY3JlYXRlUmVuZGVyQ29udGV4dGAgZnVuY3Rpb24gdG8gZGVmaW5lXHJcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIHRvIHRoZSBwcm94eSB0YXJnZXQsIGFuZCB0aG9zZSBhcmUgcmVhZC1vbmx5IGJ1dFxyXG4gICAgICAgICAgICAgICAgLy8gcmVjb25maWd1cmFibGUsIHNvIGl0IG5lZWRzIHRvIGJlIHJlZGVmaW5lZCBoZXJlXHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtZXRob2RIYW5kbGVyLmJpbmQocHVibGljVGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eFtrZXldID0gbWV0aG9kSGFuZGxlci5iaW5kKHB1YmxpY1RoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIk1ldGhvZHNcIiAvKiBPcHRpb25UeXBlcy5NRVRIT0RTICovLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgTWV0aG9kIFwiJHtrZXl9XCIgaGFzIHR5cGUgXCIke3R5cGVvZiBtZXRob2RIYW5kbGVyfVwiIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbi4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYERpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YU9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc0Z1bmN0aW9uKGRhdGFPcHRpb25zKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBUaGUgZGF0YSBvcHRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLiBgICtcclxuICAgICAgICAgICAgICAgIGBQbGFpbiBvYmplY3QgdXNhZ2UgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGRhdGFPcHRpb25zLmNhbGwocHVibGljVGhpcywgcHVibGljVGhpcyk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBpc1Byb21pc2UoZGF0YSkpIHtcclxuICAgICAgICAgICAgd2FybihgZGF0YSgpIHJldHVybmVkIGEgUHJvbWlzZSAtIG5vdGUgZGF0YSgpIGNhbm5vdCBiZSBhc3luYzsgSWYgeW91IGAgK1xyXG4gICAgICAgICAgICAgICAgYGludGVuZCB0byBwZXJmb3JtIGRhdGEgZmV0Y2hpbmcgYmVmb3JlIGNvbXBvbmVudCByZW5kZXJzLCB1c2UgYCArXHJcbiAgICAgICAgICAgICAgICBgYXN5bmMgc2V0dXAoKSArIDxTdXNwZW5zZT4uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm4oYGRhdGEoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmRhdGEgPSByZWFjdGl2ZShkYXRhKTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkRhdGFcIiAvKiBPcHRpb25UeXBlcy5EQVRBICovLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9zZSBkYXRhIG9uIGN0eCBkdXJpbmcgZGV2XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1Jlc2VydmVkUHJlZml4KGtleVswXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBkYXRhW2tleV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IE5PT1BcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gc3RhdGUgaW5pdGlhbGl6YXRpb24gY29tcGxldGUgYXQgdGhpcyBwb2ludCAtIHN0YXJ0IGNhY2hpbmcgYWNjZXNzXHJcbiAgICBzaG91bGRDYWNoZUFjY2VzcyA9IHRydWU7XHJcbiAgICBpZiAoY29tcHV0ZWRPcHRpb25zKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcHV0ZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IGNvbXB1dGVkT3B0aW9uc1trZXldO1xyXG4gICAgICAgICAgICBjb25zdCBnZXQgPSBpc0Z1bmN0aW9uKG9wdClcclxuICAgICAgICAgICAgICAgID8gb3B0LmJpbmQocHVibGljVGhpcywgcHVibGljVGhpcylcclxuICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbihvcHQuZ2V0KVxyXG4gICAgICAgICAgICAgICAgICAgID8gb3B0LmdldC5iaW5kKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpXHJcbiAgICAgICAgICAgICAgICAgICAgOiBOT09QO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGdldCA9PT0gTk9PUCkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgQ29tcHV0ZWQgcHJvcGVydHkgXCIke2tleX1cIiBoYXMgbm8gZ2V0dGVyLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNldCA9ICFpc0Z1bmN0aW9uKG9wdCkgJiYgaXNGdW5jdGlvbihvcHQuc2V0KVxyXG4gICAgICAgICAgICAgICAgPyBvcHQuc2V0LmJpbmQocHVibGljVGhpcylcclxuICAgICAgICAgICAgICAgIDogKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgPyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYFdyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHByb3BlcnR5IFwiJHtrZXl9XCIgaXMgcmVhZG9ubHkuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogTk9PUDtcclxuICAgICAgICAgICAgY29uc3QgYyA9IGNvbXB1dGVkKHtcclxuICAgICAgICAgICAgICAgIGdldCxcclxuICAgICAgICAgICAgICAgIHNldFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBjLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc2V0OiB2ID0+IChjLnZhbHVlID0gdilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkNvbXB1dGVkXCIgLyogT3B0aW9uVHlwZXMuQ09NUFVURUQgKi8sIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2F0Y2hPcHRpb25zKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gd2F0Y2hPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZVdhdGNoZXIod2F0Y2hPcHRpb25zW2tleV0sIGN0eCwgcHVibGljVGhpcywga2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvdmlkZU9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBwcm92aWRlcyA9IGlzRnVuY3Rpb24ocHJvdmlkZU9wdGlvbnMpXHJcbiAgICAgICAgICAgID8gcHJvdmlkZU9wdGlvbnMuY2FsbChwdWJsaWNUaGlzKVxyXG4gICAgICAgICAgICA6IHByb3ZpZGVPcHRpb25zO1xyXG4gICAgICAgIFJlZmxlY3Qub3duS2V5cyhwcm92aWRlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBwcm92aWRlKGtleSwgcHJvdmlkZXNba2V5XSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY3JlYXRlZCkge1xyXG4gICAgICAgIGNhbGxIb29rKGNyZWF0ZWQsIGluc3RhbmNlLCBcImNcIiAvKiBMaWZlY3ljbGVIb29rcy5DUkVBVEVEICovKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhyZWdpc3RlciwgaG9vaykge1xyXG4gICAgICAgIGlmIChpc0FycmF5KGhvb2spKSB7XHJcbiAgICAgICAgICAgIGhvb2suZm9yRWFjaChfaG9vayA9PiByZWdpc3RlcihfaG9vay5iaW5kKHB1YmxpY1RoaXMpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhvb2spIHtcclxuICAgICAgICAgICAgcmVnaXN0ZXIoaG9vay5iaW5kKHB1YmxpY1RoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25CZWZvcmVNb3VudCwgYmVmb3JlTW91bnQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uTW91bnRlZCwgbW91bnRlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25CZWZvcmVVcGRhdGUsIGJlZm9yZVVwZGF0ZSk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25VcGRhdGVkLCB1cGRhdGVkKTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkFjdGl2YXRlZCwgYWN0aXZhdGVkKTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkRlYWN0aXZhdGVkLCBkZWFjdGl2YXRlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25FcnJvckNhcHR1cmVkLCBlcnJvckNhcHR1cmVkKTtcclxuICAgIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblJlbmRlclRyYWNrZWQsIHJlbmRlclRyYWNrZWQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uUmVuZGVyVHJpZ2dlcmVkLCByZW5kZXJUcmlnZ2VyZWQpO1xyXG4gICAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uQmVmb3JlVW5tb3VudCwgYmVmb3JlVW5tb3VudCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25Vbm1vdW50ZWQsIHVubW91bnRlZCk7XHJcbiAgICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25TZXJ2ZXJQcmVmZXRjaCwgc2VydmVyUHJlZmV0Y2gpO1xyXG4gICAgaWYgKGlzQXJyYXkoZXhwb3NlKSkge1xyXG4gICAgICAgIGlmIChleHBvc2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cG9zZWQgPSBpbnN0YW5jZS5leHBvc2VkIHx8IChpbnN0YW5jZS5leHBvc2VkID0ge30pO1xyXG4gICAgICAgICAgICBleHBvc2UuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9zZWQsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gcHVibGljVGhpc1trZXldLFxyXG4gICAgICAgICAgICAgICAgICAgIHNldDogdmFsID0+IChwdWJsaWNUaGlzW2tleV0gPSB2YWwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpbnN0YW5jZS5leHBvc2VkKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmV4cG9zZWQgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBvcHRpb25zIHRoYXQgYXJlIGhhbmRsZWQgd2hlbiBjcmVhdGluZyB0aGUgaW5zdGFuY2UgYnV0IGFsc28gbmVlZCB0byBiZVxyXG4gICAgLy8gYXBwbGllZCBmcm9tIG1peGluc1xyXG4gICAgaWYgKHJlbmRlciAmJiBpbnN0YW5jZS5yZW5kZXIgPT09IE5PT1ApIHtcclxuICAgICAgICBpbnN0YW5jZS5yZW5kZXIgPSByZW5kZXI7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5oZXJpdEF0dHJzICE9IG51bGwpIHtcclxuICAgICAgICBpbnN0YW5jZS5pbmhlcml0QXR0cnMgPSBpbmhlcml0QXR0cnM7XHJcbiAgICB9XHJcbiAgICAvLyBhc3NldCBvcHRpb25zLlxyXG4gICAgaWYgKGNvbXBvbmVudHMpXHJcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XHJcbiAgICBpZiAoZGlyZWN0aXZlcylcclxuICAgICAgICBpbnN0YW5jZS5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcclxufVxyXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0aW9ucyhpbmplY3RPcHRpb25zLCBjdHgsIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyA9IE5PT1AsIHVud3JhcFJlZiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoaXNBcnJheShpbmplY3RPcHRpb25zKSkge1xyXG4gICAgICAgIGluamVjdE9wdGlvbnMgPSBub3JtYWxpemVJbmplY3QoaW5qZWN0T3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbmplY3RPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0gaW5qZWN0T3B0aW9uc1trZXldO1xyXG4gICAgICAgIGxldCBpbmplY3RlZDtcclxuICAgICAgICBpZiAoaXNPYmplY3Qob3B0KSkge1xyXG4gICAgICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIG9wdCkge1xyXG4gICAgICAgICAgICAgICAgaW5qZWN0ZWQgPSBpbmplY3Qob3B0LmZyb20gfHwga2V5LCBvcHQuZGVmYXVsdCwgdHJ1ZSAvKiB0cmVhdCBkZWZhdWx0IGZ1bmN0aW9uIGFzIGZhY3RvcnkgKi8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5qZWN0ZWQgPSBpbmplY3Qob3B0LmZyb20gfHwga2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5qZWN0ZWQgPSBpbmplY3Qob3B0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUmVmKGluamVjdGVkKSkge1xyXG4gICAgICAgICAgICAvLyBUT0RPIHJlbW92ZSB0aGUgY2hlY2sgaW4gMy4zXHJcbiAgICAgICAgICAgIGlmICh1bndyYXBSZWYpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gaW5qZWN0ZWQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0OiB2ID0+IChpbmplY3RlZC52YWx1ZSA9IHYpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBpbmplY3RlZCBwcm9wZXJ0eSBcIiR7a2V5fVwiIGlzIGEgcmVmIGFuZCB3aWxsIGJlIGF1dG8tdW53cmFwcGVkIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIG5vIGxvbmdlciBuZWVkcyBcXGAudmFsdWVcXGAgaW4gdGhlIG5leHQgbWlub3IgcmVsZWFzZS4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUbyBvcHQtaW4gdG8gdGhlIG5ldyBiZWhhdmlvciBub3csIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgc2V0IFxcYGFwcC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYgPSB0cnVlXFxgICh0aGlzIGNvbmZpZyBpcyBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHRlbXBvcmFyeSBhbmQgd2lsbCBub3QgYmUgbmVlZGVkIGluIHRoZSBmdXR1cmUuKWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3R4W2tleV0gPSBpbmplY3RlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3R4W2tleV0gPSBpbmplY3RlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJJbmplY3RcIiAvKiBPcHRpb25UeXBlcy5JTkpFQ1QgKi8sIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNhbGxIb29rKGhvb2ssIGluc3RhbmNlLCB0eXBlKSB7XHJcbiAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhpc0FycmF5KGhvb2spXHJcbiAgICAgICAgPyBob29rLm1hcChoID0+IGguYmluZChpbnN0YW5jZS5wcm94eSkpXHJcbiAgICAgICAgOiBob29rLmJpbmQoaW5zdGFuY2UucHJveHkpLCBpbnN0YW5jZSwgdHlwZSk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcihyYXcsIGN0eCwgcHVibGljVGhpcywga2V5KSB7XHJcbiAgICBjb25zdCBnZXR0ZXIgPSBrZXkuaW5jbHVkZXMoJy4nKVxyXG4gICAgICAgID8gY3JlYXRlUGF0aEdldHRlcihwdWJsaWNUaGlzLCBrZXkpXHJcbiAgICAgICAgOiAoKSA9PiBwdWJsaWNUaGlzW2tleV07XHJcbiAgICBpZiAoaXNTdHJpbmcocmF3KSkge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBjdHhbcmF3XTtcclxuICAgICAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xyXG4gICAgICAgICAgICB3YXRjaChnZXR0ZXIsIGhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybihgSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgXCIke3Jhd31cImAsIGhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocmF3KSkge1xyXG4gICAgICAgIHdhdGNoKGdldHRlciwgcmF3LmJpbmQocHVibGljVGhpcykpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3QocmF3KSkge1xyXG4gICAgICAgIGlmIChpc0FycmF5KHJhdykpIHtcclxuICAgICAgICAgICAgcmF3LmZvckVhY2gociA9PiBjcmVhdGVXYXRjaGVyKHIsIGN0eCwgcHVibGljVGhpcywga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gaXNGdW5jdGlvbihyYXcuaGFuZGxlcilcclxuICAgICAgICAgICAgICAgID8gcmF3LmhhbmRsZXIuYmluZChwdWJsaWNUaGlzKVxyXG4gICAgICAgICAgICAgICAgOiBjdHhbcmF3LmhhbmRsZXJdO1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xyXG4gICAgICAgICAgICAgICAgd2F0Y2goZ2V0dGVyLCBoYW5kbGVyLCByYXcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgd2FybihgSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgXCIke3Jhdy5oYW5kbGVyfVwiYCwgaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB3YXJuKGBJbnZhbGlkIHdhdGNoIG9wdGlvbjogXCIke2tleX1cImAsIHJhdyk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlc29sdmUgbWVyZ2VkIG9wdGlvbnMgYW5kIGNhY2hlIGl0IG9uIHRoZSBjb21wb25lbnQuXHJcbiAqIFRoaXMgaXMgZG9uZSBvbmx5IG9uY2UgcGVyLWNvbXBvbmVudCBzaW5jZSB0aGUgbWVyZ2luZyBkb2VzIG5vdCBpbnZvbHZlXHJcbiAqIGluc3RhbmNlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBiYXNlID0gaW5zdGFuY2UudHlwZTtcclxuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gYmFzZTtcclxuICAgIGNvbnN0IHsgbWl4aW5zOiBnbG9iYWxNaXhpbnMsIG9wdGlvbnNDYWNoZTogY2FjaGUsIGNvbmZpZzogeyBvcHRpb25NZXJnZVN0cmF0ZWdpZXMgfSB9ID0gaW5zdGFuY2UuYXBwQ29udGV4dDtcclxuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChiYXNlKTtcclxuICAgIGxldCByZXNvbHZlZDtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXNvbHZlZCA9IGNhY2hlZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFnbG9iYWxNaXhpbnMubGVuZ3RoICYmICFtaXhpbnMgJiYgIWV4dGVuZHNPcHRpb25zKSB7XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXNvbHZlZCA9IGJhc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZWQgPSB7fTtcclxuICAgICAgICBpZiAoZ2xvYmFsTWl4aW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBnbG9iYWxNaXhpbnMuZm9yRWFjaChtID0+IG1lcmdlT3B0aW9ucyhyZXNvbHZlZCwgbSwgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lcmdlT3B0aW9ucyhyZXNvbHZlZCwgYmFzZSwgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzKTtcclxuICAgIH1cclxuICAgIGlmIChpc09iamVjdChiYXNlKSkge1xyXG4gICAgICAgIGNhY2hlLnNldChiYXNlLCByZXNvbHZlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzb2x2ZWQ7XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tLCBzdHJhdHMsIGFzTWl4aW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgeyBtaXhpbnMsIGV4dGVuZHM6IGV4dGVuZHNPcHRpb25zIH0gPSBmcm9tO1xyXG4gICAgaWYgKGV4dGVuZHNPcHRpb25zKSB7XHJcbiAgICAgICAgbWVyZ2VPcHRpb25zKHRvLCBleHRlbmRzT3B0aW9ucywgc3RyYXRzLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGlmIChtaXhpbnMpIHtcclxuICAgICAgICBtaXhpbnMuZm9yRWFjaCgobSkgPT4gbWVyZ2VPcHRpb25zKHRvLCBtLCBzdHJhdHMsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb20pIHtcclxuICAgICAgICBpZiAoYXNNaXhpbiAmJiBrZXkgPT09ICdleHBvc2UnKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgd2FybihgXCJleHBvc2VcIiBvcHRpb24gaXMgaWdub3JlZCB3aGVuIGRlY2xhcmVkIGluIG1peGlucyBvciBleHRlbmRzLiBgICtcclxuICAgICAgICAgICAgICAgICAgICBgSXQgc2hvdWxkIG9ubHkgYmUgZGVjbGFyZWQgaW4gdGhlIGJhc2UgY29tcG9uZW50IGl0c2VsZi5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0cmF0ID0gaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0c1trZXldIHx8IChzdHJhdHMgJiYgc3RyYXRzW2tleV0pO1xyXG4gICAgICAgICAgICB0b1trZXldID0gc3RyYXQgPyBzdHJhdCh0b1trZXldLCBmcm9tW2tleV0pIDogZnJvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0bztcclxufVxyXG5jb25zdCBpbnRlcm5hbE9wdGlvbk1lcmdlU3RyYXRzID0ge1xyXG4gICAgZGF0YTogbWVyZ2VEYXRhRm4sXHJcbiAgICBwcm9wczogbWVyZ2VPYmplY3RPcHRpb25zLFxyXG4gICAgZW1pdHM6IG1lcmdlT2JqZWN0T3B0aW9ucyxcclxuICAgIC8vIG9iamVjdHNcclxuICAgIG1ldGhvZHM6IG1lcmdlT2JqZWN0T3B0aW9ucyxcclxuICAgIGNvbXB1dGVkOiBtZXJnZU9iamVjdE9wdGlvbnMsXHJcbiAgICAvLyBsaWZlY3ljbGVcclxuICAgIGJlZm9yZUNyZWF0ZTogbWVyZ2VBc0FycmF5LFxyXG4gICAgY3JlYXRlZDogbWVyZ2VBc0FycmF5LFxyXG4gICAgYmVmb3JlTW91bnQ6IG1lcmdlQXNBcnJheSxcclxuICAgIG1vdW50ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGJlZm9yZVVwZGF0ZTogbWVyZ2VBc0FycmF5LFxyXG4gICAgdXBkYXRlZDogbWVyZ2VBc0FycmF5LFxyXG4gICAgYmVmb3JlRGVzdHJveTogbWVyZ2VBc0FycmF5LFxyXG4gICAgYmVmb3JlVW5tb3VudDogbWVyZ2VBc0FycmF5LFxyXG4gICAgZGVzdHJveWVkOiBtZXJnZUFzQXJyYXksXHJcbiAgICB1bm1vdW50ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGFjdGl2YXRlZDogbWVyZ2VBc0FycmF5LFxyXG4gICAgZGVhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIGVycm9yQ2FwdHVyZWQ6IG1lcmdlQXNBcnJheSxcclxuICAgIHNlcnZlclByZWZldGNoOiBtZXJnZUFzQXJyYXksXHJcbiAgICAvLyBhc3NldHNcclxuICAgIGNvbXBvbmVudHM6IG1lcmdlT2JqZWN0T3B0aW9ucyxcclxuICAgIGRpcmVjdGl2ZXM6IG1lcmdlT2JqZWN0T3B0aW9ucyxcclxuICAgIC8vIHdhdGNoXHJcbiAgICB3YXRjaDogbWVyZ2VXYXRjaE9wdGlvbnMsXHJcbiAgICAvLyBwcm92aWRlIC8gaW5qZWN0XHJcbiAgICBwcm92aWRlOiBtZXJnZURhdGFGbixcclxuICAgIGluamVjdDogbWVyZ2VJbmplY3RcclxufTtcclxuZnVuY3Rpb24gbWVyZ2VEYXRhRm4odG8sIGZyb20pIHtcclxuICAgIGlmICghZnJvbSkge1xyXG4gICAgICAgIHJldHVybiB0bztcclxuICAgIH1cclxuICAgIGlmICghdG8pIHtcclxuICAgICAgICByZXR1cm4gZnJvbTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIChleHRlbmQpKGlzRnVuY3Rpb24odG8pID8gdG8uY2FsbCh0aGlzLCB0aGlzKSA6IHRvLCBpc0Z1bmN0aW9uKGZyb20pID8gZnJvbS5jYWxsKHRoaXMsIHRoaXMpIDogZnJvbSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlSW5qZWN0KHRvLCBmcm9tKSB7XHJcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RPcHRpb25zKG5vcm1hbGl6ZUluamVjdCh0byksIG5vcm1hbGl6ZUluamVjdChmcm9tKSk7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0KHJhdykge1xyXG4gICAgaWYgKGlzQXJyYXkocmF3KSkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc1tyYXdbaV1dID0gcmF3W2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJhdztcclxufVxyXG5mdW5jdGlvbiBtZXJnZUFzQXJyYXkodG8sIGZyb20pIHtcclxuICAgIHJldHVybiB0byA/IFsuLi5uZXcgU2V0KFtdLmNvbmNhdCh0bywgZnJvbSkpXSA6IGZyb207XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VPYmplY3RPcHRpb25zKHRvLCBmcm9tKSB7XHJcbiAgICByZXR1cm4gdG8gPyBleHRlbmQoZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIHRvKSwgZnJvbSkgOiBmcm9tO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlV2F0Y2hPcHRpb25zKHRvLCBmcm9tKSB7XHJcbiAgICBpZiAoIXRvKVxyXG4gICAgICAgIHJldHVybiBmcm9tO1xyXG4gICAgaWYgKCFmcm9tKVxyXG4gICAgICAgIHJldHVybiB0bztcclxuICAgIGNvbnN0IG1lcmdlZCA9IGV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLCB0byk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKSB7XHJcbiAgICAgICAgbWVyZ2VkW2tleV0gPSBtZXJnZUFzQXJyYXkodG9ba2V5XSwgZnJvbVtrZXldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgaXNTdGF0ZWZ1bCwgLy8gcmVzdWx0IG9mIGJpdHdpc2UgZmxhZyBjb21wYXJpc29uXHJcbmlzU1NSID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHByb3BzID0ge307XHJcbiAgICBjb25zdCBhdHRycyA9IHt9O1xyXG4gICAgZGVmKGF0dHJzLCBJbnRlcm5hbE9iamVjdEtleSwgMSk7XHJcbiAgICBpbnN0YW5jZS5wcm9wc0RlZmF1bHRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgIHNldEZ1bGxQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIHByb3BzLCBhdHRycyk7XHJcbiAgICAvLyBlbnN1cmUgYWxsIGRlY2xhcmVkIHByb3Aga2V5cyBhcmUgcHJlc2VudFxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5zdGFuY2UucHJvcHNPcHRpb25zWzBdKSB7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xyXG4gICAgICAgICAgICBwcm9wc1trZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHZhbGlkYXRpb25cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB2YWxpZGF0ZVByb3BzKHJhd1Byb3BzIHx8IHt9LCBwcm9wcywgaW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU3RhdGVmdWwpIHtcclxuICAgICAgICAvLyBzdGF0ZWZ1bFxyXG4gICAgICAgIGluc3RhbmNlLnByb3BzID0gaXNTU1IgPyBwcm9wcyA6IHNoYWxsb3dSZWFjdGl2ZShwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoIWluc3RhbmNlLnR5cGUucHJvcHMpIHtcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb25hbCB3LyBvcHRpb25hbCBwcm9wcywgcHJvcHMgPT09IGF0dHJzXHJcbiAgICAgICAgICAgIGluc3RhbmNlLnByb3BzID0gYXR0cnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbmFsIHcvIGRlY2xhcmVkIHByb3BzXHJcbiAgICAgICAgICAgIGluc3RhbmNlLnByb3BzID0gcHJvcHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaW5zdGFuY2UuYXR0cnMgPSBhdHRycztcclxufVxyXG5mdW5jdGlvbiBpc0luSG1yQ29udGV4dChpbnN0YW5jZSkge1xyXG4gICAgd2hpbGUgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlLnR5cGUuX19obXJJZClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5wYXJlbnQ7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlUHJvcHMoaW5zdGFuY2UsIHJhd1Byb3BzLCByYXdQcmV2UHJvcHMsIG9wdGltaXplZCkge1xyXG4gICAgY29uc3QgeyBwcm9wcywgYXR0cnMsIHZub2RlOiB7IHBhdGNoRmxhZyB9IH0gPSBpbnN0YW5jZTtcclxuICAgIGNvbnN0IHJhd0N1cnJlbnRQcm9wcyA9IHRvUmF3KHByb3BzKTtcclxuICAgIGNvbnN0IFtvcHRpb25zXSA9IGluc3RhbmNlLnByb3BzT3B0aW9ucztcclxuICAgIGxldCBoYXNBdHRyc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgIC8vIGFsd2F5cyBmb3JjZSBmdWxsIGRpZmYgaW4gZGV2XHJcbiAgICAvLyAtICMxOTQyIGlmIGhtciBpcyBlbmFibGVkIHdpdGggc2ZjIGNvbXBvbmVudFxyXG4gICAgLy8gLSB2aXRlIzg3MiBub24tc2ZjIGNvbXBvbmVudCB1c2VkIGJ5IHNmYyBjb21wb25lbnRcclxuICAgICEoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGlzSW5IbXJDb250ZXh0KGluc3RhbmNlKSkgJiZcclxuICAgICAgICAob3B0aW1pemVkIHx8IHBhdGNoRmxhZyA+IDApICYmXHJcbiAgICAgICAgIShwYXRjaEZsYWcgJiAxNiAvKiBQYXRjaEZsYWdzLkZVTExfUFJPUFMgKi8pKSB7XHJcbiAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDggLyogUGF0Y2hGbGFncy5QUk9QUyAqLykge1xyXG4gICAgICAgICAgICAvLyBDb21waWxlci1nZW5lcmF0ZWQgcHJvcHMgJiBubyBrZXlzIGNoYW5nZSwganVzdCBzZXQgdGhlIHVwZGF0ZWRcclxuICAgICAgICAgICAgLy8gdGhlIHByb3BzLlxyXG4gICAgICAgICAgICBjb25zdCBwcm9wc1RvVXBkYXRlID0gaW5zdGFuY2Uudm5vZGUuZHluYW1pY1Byb3BzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzVG9VcGRhdGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBwcm9wc1RvVXBkYXRlW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBpZiB0aGUgcHJvcCBrZXkgaXMgYSBkZWNsYXJlZCBlbWl0IGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFbWl0TGlzdGVuZXIoaW5zdGFuY2UuZW1pdHNPcHRpb25zLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBQUk9QUyBmbGFnIGd1YXJhbnRlZXMgcmF3UHJvcHMgdG8gYmUgbm9uLW51bGxcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmF3UHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0ciAvIHByb3BzIHNlcGFyYXRpb24gd2FzIGRvbmUgb24gaW5pdCBhbmQgd2lsbCBiZSBjb25zaXN0ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjb2RlIHBhdGgsIHNvIGp1c3QgY2hlY2sgaWYgYXR0cnMgaGF2ZSBpdC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duKGF0dHJzLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gYXR0cnNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNbY2FtZWxpemVkS2V5XSA9IHJlc29sdmVQcm9wVmFsdWUob3B0aW9ucywgcmF3Q3VycmVudFByb3BzLCBjYW1lbGl6ZWRLZXksIHZhbHVlLCBpbnN0YW5jZSwgZmFsc2UgLyogaXNBYnNlbnQgKi8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gYXR0cnNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0F0dHJzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gZnVsbCBwcm9wcyB1cGRhdGUuXHJcbiAgICAgICAgaWYgKHNldEZ1bGxQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIHByb3BzLCBhdHRycykpIHtcclxuICAgICAgICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBkeW5hbWljIHByb3BzLCBjaGVjayBpZiB3ZSBuZWVkIHRvIGRlbGV0ZSBrZXlzIGZyb21cclxuICAgICAgICAvLyB0aGUgcHJvcHMgb2JqZWN0XHJcbiAgICAgICAgbGV0IGtlYmFiS2V5O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJhd0N1cnJlbnRQcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXJhd1Byb3BzIHx8XHJcbiAgICAgICAgICAgICAgICAvLyBmb3IgY2FtZWxDYXNlXHJcbiAgICAgICAgICAgICAgICAoIWhhc093bihyYXdQcm9wcywga2V5KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhlIG9yaWdpbmFsIHByb3BzIHdhcyBwYXNzZWQgaW4gYXMga2ViYWItY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlICgjOTU1KVxyXG4gICAgICAgICAgICAgICAgICAgICgoa2ViYWJLZXkgPSBoeXBoZW5hdGUoa2V5KSkgPT09IGtleSB8fCAhaGFzT3duKHJhd1Byb3BzLCBrZWJhYktleSkpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3UHJldlByb3BzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBjYW1lbENhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJhd1ByZXZQcm9wc1trZXldICE9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBrZWJhYi1jYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdQcmV2UHJvcHNba2ViYWJLZXldICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSByZXNvbHZlUHJvcFZhbHVlKG9wdGlvbnMsIHJhd0N1cnJlbnRQcm9wcywga2V5LCB1bmRlZmluZWQsIGluc3RhbmNlLCB0cnVlIC8qIGlzQWJzZW50ICovKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBmdW5jdGlvbmFsIGNvbXBvbmVudCB3L28gcHJvcHMgZGVjbGFyYXRpb24sIHByb3BzIGFuZFxyXG4gICAgICAgIC8vIGF0dHJzIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdCBzbyBpdCBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gdXBkYXRlZC5cclxuICAgICAgICBpZiAoYXR0cnMgIT09IHJhd0N1cnJlbnRQcm9wcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyYXdQcm9wcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICghaGFzT3duKHJhd1Byb3BzLCBrZXkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICghZmFsc2UgKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXR0cnNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHJpZ2dlciB1cGRhdGVzIGZvciAkYXR0cnMgaW4gY2FzZSBpdCdzIHVzZWQgaW4gY29tcG9uZW50IHNsb3RzXHJcbiAgICBpZiAoaGFzQXR0cnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgdHJpZ2dlcihpbnN0YW5jZSwgXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sICckYXR0cnMnKTtcclxuICAgIH1cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB2YWxpZGF0ZVByb3BzKHJhd1Byb3BzIHx8IHt9LCBwcm9wcywgaW5zdGFuY2UpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNldEZ1bGxQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIHByb3BzLCBhdHRycykge1xyXG4gICAgY29uc3QgW29wdGlvbnMsIG5lZWRDYXN0S2V5c10gPSBpbnN0YW5jZS5wcm9wc09wdGlvbnM7XHJcbiAgICBsZXQgaGFzQXR0cnNDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBsZXQgcmF3Q2FzdFZhbHVlcztcclxuICAgIGlmIChyYXdQcm9wcykge1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiByYXdQcm9wcykge1xyXG4gICAgICAgICAgICAvLyBrZXksIHJlZiBhcmUgcmVzZXJ2ZWQgYW5kIG5ldmVyIHBhc3NlZCBkb3duXHJcbiAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkUHJvcChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1Byb3BzW2tleV07XHJcbiAgICAgICAgICAgIC8vIHByb3Agb3B0aW9uIG5hbWVzIGFyZSBjYW1lbGl6ZWQgZHVyaW5nIG5vcm1hbGl6YXRpb24sIHNvIHRvIHN1cHBvcnRcclxuICAgICAgICAgICAgLy8ga2ViYWIgLT4gY2FtZWwgY29udmVyc2lvbiBoZXJlIHdlIG5lZWQgdG8gY2FtZWxpemUgdGhlIGtleS5cclxuICAgICAgICAgICAgbGV0IGNhbWVsS2V5O1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgKGNhbWVsS2V5ID0gY2FtZWxpemUoa2V5KSkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5lZWRDYXN0S2V5cyB8fCAhbmVlZENhc3RLZXlzLmluY2x1ZGVzKGNhbWVsS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzW2NhbWVsS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKHJhd0Nhc3RWYWx1ZXMgfHwgKHJhd0Nhc3RWYWx1ZXMgPSB7fSkpW2NhbWVsS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0VtaXRMaXN0ZW5lcihpbnN0YW5jZS5lbWl0c09wdGlvbnMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBhdHRycykgfHwgdmFsdWUgIT09IGF0dHJzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChuZWVkQ2FzdEtleXMpIHtcclxuICAgICAgICBjb25zdCByYXdDdXJyZW50UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XHJcbiAgICAgICAgY29uc3QgY2FzdFZhbHVlcyA9IHJhd0Nhc3RWYWx1ZXMgfHwgRU1QVFlfT0JKO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVlZENhc3RLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG5lZWRDYXN0S2V5c1tpXTtcclxuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHJlc29sdmVQcm9wVmFsdWUob3B0aW9ucywgcmF3Q3VycmVudFByb3BzLCBrZXksIGNhc3RWYWx1ZXNba2V5XSwgaW5zdGFuY2UsICFoYXNPd24oY2FzdFZhbHVlcywga2V5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc0F0dHJzQ2hhbmdlZDtcclxufVxyXG5mdW5jdGlvbiByZXNvbHZlUHJvcFZhbHVlKG9wdGlvbnMsIHByb3BzLCBrZXksIHZhbHVlLCBpbnN0YW5jZSwgaXNBYnNlbnQpIHtcclxuICAgIGNvbnN0IG9wdCA9IG9wdGlvbnNba2V5XTtcclxuICAgIGlmIChvcHQgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBoYXNPd24ob3B0LCAnZGVmYXVsdCcpO1xyXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgaWYgKGhhc0RlZmF1bHQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBvcHQuZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG9wdC50eXBlICE9PSBGdW5jdGlvbiAmJiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvcHNEZWZhdWx0cyB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHByb3BzRGVmYXVsdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BzRGVmYXVsdHNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc0RlZmF1bHRzW2tleV0gPSBkZWZhdWx0VmFsdWUuY2FsbChudWxsLCBwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xyXG4gICAgICAgIGlmIChvcHRbMCAvKiBCb29sZWFuRmxhZ3Muc2hvdWxkQ2FzdCAqL10pIHtcclxuICAgICAgICAgICAgaWYgKGlzQWJzZW50ICYmICFoYXNEZWZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdFsxIC8qIEJvb2xlYW5GbGFncy5zaG91bGRDYXN0VHJ1ZSAqL10gJiZcclxuICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzT3B0aW9ucyhjb21wLCBhcHBDb250ZXh0LCBhc01peGluID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGNhY2hlID0gYXBwQ29udGV4dC5wcm9wc0NhY2hlO1xyXG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGNvbXApO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjYWNoZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByYXcgPSBjb21wLnByb3BzO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xyXG4gICAgY29uc3QgbmVlZENhc3RLZXlzID0gW107XHJcbiAgICAvLyBhcHBseSBtaXhpbi9leHRlbmRzIHByb3BzXHJcbiAgICBsZXQgaGFzRXh0ZW5kcyA9IGZhbHNlO1xyXG4gICAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgIWlzRnVuY3Rpb24oY29tcCkpIHtcclxuICAgICAgICBjb25zdCBleHRlbmRQcm9wcyA9IChyYXcpID0+IHtcclxuICAgICAgICAgICAgaGFzRXh0ZW5kcyA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IFtwcm9wcywga2V5c10gPSBub3JtYWxpemVQcm9wc09wdGlvbnMocmF3LCBhcHBDb250ZXh0LCB0cnVlKTtcclxuICAgICAgICAgICAgZXh0ZW5kKG5vcm1hbGl6ZWQsIHByb3BzKTtcclxuICAgICAgICAgICAgaWYgKGtleXMpXHJcbiAgICAgICAgICAgICAgICBuZWVkQ2FzdEtleXMucHVzaCguLi5rZXlzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghYXNNaXhpbiAmJiBhcHBDb250ZXh0Lm1peGlucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXBwQ29udGV4dC5taXhpbnMuZm9yRWFjaChleHRlbmRQcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21wLmV4dGVuZHMpIHtcclxuICAgICAgICAgICAgZXh0ZW5kUHJvcHMoY29tcC5leHRlbmRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXAubWl4aW5zKSB7XHJcbiAgICAgICAgICAgIGNvbXAubWl4aW5zLmZvckVhY2goZXh0ZW5kUHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghcmF3ICYmICFoYXNFeHRlbmRzKSB7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnNldChjb21wLCBFTVBUWV9BUlIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQVJSO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQXJyYXkocmF3KSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzU3RyaW5nKHJhd1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYHByb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC5gLCByYXdbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXkgPSBjYW1lbGl6ZShyYXdbaV0pO1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGVQcm9wTmFtZShub3JtYWxpemVkS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkS2V5XSA9IEVNUFRZX09CSjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJhdykge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzT2JqZWN0KHJhdykpIHtcclxuICAgICAgICAgICAgd2FybihgaW52YWxpZCBwcm9wcyBvcHRpb25zYCwgcmF3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmF3KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGVQcm9wTmFtZShub3JtYWxpemVkS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gcmF3W2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gKG5vcm1hbGl6ZWRbbm9ybWFsaXplZEtleV0gPVxyXG4gICAgICAgICAgICAgICAgICAgIGlzQXJyYXkob3B0KSB8fCBpc0Z1bmN0aW9uKG9wdCkgPyB7IHR5cGU6IG9wdCB9IDogb3B0KTtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbGVhbkluZGV4ID0gZ2V0VHlwZUluZGV4KEJvb2xlYW4sIHByb3AudHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BbMCAvKiBCb29sZWFuRmxhZ3Muc2hvdWxkQ2FzdCAqL10gPSBib29sZWFuSW5kZXggPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wWzEgLyogQm9vbGVhbkZsYWdzLnNob3VsZENhc3RUcnVlICovXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcHJvcCBuZWVkcyBib29sZWFuIGNhc3Rpbmcgb3IgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib29sZWFuSW5kZXggPiAtMSB8fCBoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkQ2FzdEtleXMucHVzaChub3JtYWxpemVkS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXMgPSBbbm9ybWFsaXplZCwgbmVlZENhc3RLZXlzXTtcclxuICAgIGlmIChpc09iamVjdChjb21wKSkge1xyXG4gICAgICAgIGNhY2hlLnNldChjb21wLCByZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BOYW1lKGtleSkge1xyXG4gICAgaWYgKGtleVswXSAhPT0gJyQnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB3YXJuKGBJbnZhbGlkIHByb3AgbmFtZTogXCIke2tleX1cIiBpcyBhIHJlc2VydmVkIHByb3BlcnR5LmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbi8vIHVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayB0eXBlIGNvbnN0cnVjdG9yc1xyXG4vLyBzbyB0aGF0IGl0IHdvcmtzIGFjcm9zcyB2bXMgLyBpZnJhbWVzLlxyXG5mdW5jdGlvbiBnZXRUeXBlKGN0b3IpIHtcclxuICAgIGNvbnN0IG1hdGNoID0gY3RvciAmJiBjdG9yLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IGN0b3IgPT09IG51bGwgPyAnbnVsbCcgOiAnJztcclxufVxyXG5mdW5jdGlvbiBpc1NhbWVUeXBlKGEsIGIpIHtcclxuICAgIHJldHVybiBnZXRUeXBlKGEpID09PSBnZXRUeXBlKGIpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFR5cGVJbmRleCh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XHJcbiAgICBpZiAoaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xyXG4gICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVzLmZpbmRJbmRleCh0ID0+IGlzU2FtZVR5cGUodCwgdHlwZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbihleHBlY3RlZFR5cGVzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhyYXdQcm9wcywgcHJvcHMsIGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlcyA9IHRvUmF3KHByb3BzKTtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnN0YW5jZS5wcm9wc09wdGlvbnNbMF07XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IG9wdCA9IG9wdGlvbnNba2V5XTtcclxuICAgICAgICBpZiAob3B0ID09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIHZhbGlkYXRlUHJvcChrZXksIHJlc29sdmVkVmFsdWVzW2tleV0sIG9wdCwgIWhhc093bihyYXdQcm9wcywga2V5KSAmJiAhaGFzT3duKHJhd1Byb3BzLCBoeXBoZW5hdGUoa2V5KSkpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wKG5hbWUsIHZhbHVlLCBwcm9wLCBpc0Fic2VudCkge1xyXG4gICAgY29uc3QgeyB0eXBlLCByZXF1aXJlZCwgdmFsaWRhdG9yIH0gPSBwcm9wO1xyXG4gICAgLy8gcmVxdWlyZWQhXHJcbiAgICBpZiAocmVxdWlyZWQgJiYgaXNBYnNlbnQpIHtcclxuICAgICAgICB3YXJuKCdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBtaXNzaW5nIGJ1dCBvcHRpb25hbFxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyB0eXBlIGNoZWNrXHJcbiAgICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGUgIT09IHRydWUpIHtcclxuICAgICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHR5cGVzID0gaXNBcnJheSh0eXBlKSA/IHR5cGUgOiBbdHlwZV07XHJcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlcyA9IFtdO1xyXG4gICAgICAgIC8vIHZhbHVlIGlzIHZhbGlkIGFzIGxvbmcgYXMgb25lIG9mIHRoZSBzcGVjaWZpZWQgdHlwZXMgbWF0Y2hcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aCAmJiAhaXNWYWxpZDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGV4cGVjdGVkVHlwZSB9ID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZXNbaV0pO1xyXG4gICAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goZXhwZWN0ZWRUeXBlIHx8ICcnKTtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IHZhbGlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgd2FybihnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGN1c3RvbSB2YWxpZGF0b3JcclxuICAgIGlmICh2YWxpZGF0b3IgJiYgIXZhbGlkYXRvcih2YWx1ZSkpIHtcclxuICAgICAgICB3YXJuKCdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJyk7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgaXNTaW1wbGVUeXBlID0gLyojX19QVVJFX18qLyBtYWtlTWFwKCdTdHJpbmcsTnVtYmVyLEJvb2xlYW4sRnVuY3Rpb24sU3ltYm9sLEJpZ0ludCcpO1xyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIGxldCB2YWxpZDtcclxuICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XHJcbiAgICBpZiAoaXNTaW1wbGVUeXBlKGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgICBjb25zdCB0ID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcclxuICAgICAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcclxuICAgICAgICB2YWxpZCA9IGlzT2JqZWN0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xyXG4gICAgICAgIHZhbGlkID0gaXNBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdudWxsJykge1xyXG4gICAgICAgIHZhbGlkID0gdmFsdWUgPT09IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdmFsaWQsXHJcbiAgICAgICAgZXhwZWN0ZWRUeXBlXHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XHJcbiAgICBsZXQgbWVzc2FnZSA9IGBJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJHtuYW1lfVwiLmAgK1xyXG4gICAgICAgIGAgRXhwZWN0ZWQgJHtleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcgfCAnKX1gO1xyXG4gICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcclxuICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHRvUmF3VHlwZSh2YWx1ZSk7XHJcbiAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgZXhwZWN0ZWRUeXBlKTtcclxuICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCByZWNlaXZlZFR5cGUpO1xyXG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXHJcbiAgICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxyXG4gICAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XHJcbiAgICAgICAgbWVzc2FnZSArPSBgIHdpdGggdmFsdWUgJHtleHBlY3RlZFZhbHVlfWA7XHJcbiAgICB9XHJcbiAgICBtZXNzYWdlICs9IGAsIGdvdCAke3JlY2VpdmVkVHlwZX0gYDtcclxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxyXG4gICAgaWYgKGlzRXhwbGljYWJsZShyZWNlaXZlZFR5cGUpKSB7XHJcbiAgICAgICAgbWVzc2FnZSArPSBgd2l0aCB2YWx1ZSAke3JlY2VpdmVkVmFsdWV9LmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVzc2FnZTtcclxufVxyXG4vKipcclxuICogZGV2IG9ubHlcclxuICovXHJcbmZ1bmN0aW9uIHN0eWxlVmFsdWUodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke051bWJlcih2YWx1ZSl9YDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBkZXYgb25seVxyXG4gKi9cclxuZnVuY3Rpb24gaXNFeHBsaWNhYmxlKHR5cGUpIHtcclxuICAgIGNvbnN0IGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xyXG4gICAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShlbGVtID0+IHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbSk7XHJcbn1cclxuLyoqXHJcbiAqIGRldiBvbmx5XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oLi4uYXJncykge1xyXG4gICAgcmV0dXJuIGFyZ3Muc29tZShlbGVtID0+IGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nKTtcclxufVxuXG5jb25zdCBpc0ludGVybmFsS2V5ID0gKGtleSkgPT4ga2V5WzBdID09PSAnXycgfHwga2V5ID09PSAnJHN0YWJsZSc7XHJcbmNvbnN0IG5vcm1hbGl6ZVNsb3RWYWx1ZSA9ICh2YWx1ZSkgPT4gaXNBcnJheSh2YWx1ZSlcclxuICAgID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZOb2RlKVxyXG4gICAgOiBbbm9ybWFsaXplVk5vZGUodmFsdWUpXTtcclxuY29uc3Qgbm9ybWFsaXplU2xvdCA9IChrZXksIHJhd1Nsb3QsIGN0eCkgPT4ge1xyXG4gICAgaWYgKHJhd1Nsb3QuX24pIHtcclxuICAgICAgICAvLyBhbHJlYWR5IG5vcm1hbGl6ZWQgLSAjNTM1M1xyXG4gICAgICAgIHJldHVybiByYXdTbG90O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHdpdGhDdHgoKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGN1cnJlbnRJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICB3YXJuKGBTbG90IFwiJHtrZXl9XCIgaW52b2tlZCBvdXRzaWRlIG9mIHRoZSByZW5kZXIgZnVuY3Rpb246IGAgK1xyXG4gICAgICAgICAgICAgICAgYHRoaXMgd2lsbCBub3QgdHJhY2sgZGVwZW5kZW5jaWVzIHVzZWQgaW4gdGhlIHNsb3QuIGAgK1xyXG4gICAgICAgICAgICAgICAgYEludm9rZSB0aGUgc2xvdCBmdW5jdGlvbiBpbnNpZGUgdGhlIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplU2xvdFZhbHVlKHJhd1Nsb3QoLi4uYXJncykpO1xyXG4gICAgfSwgY3R4KTtcclxuICAgIG5vcm1hbGl6ZWQuX2MgPSBmYWxzZTtcclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG59O1xyXG5jb25zdCBub3JtYWxpemVPYmplY3RTbG90cyA9IChyYXdTbG90cywgc2xvdHMsIGluc3RhbmNlKSA9PiB7XHJcbiAgICBjb25zdCBjdHggPSByYXdTbG90cy5fY3R4O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3U2xvdHMpIHtcclxuICAgICAgICBpZiAoaXNJbnRlcm5hbEtleShrZXkpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1Nsb3RzW2tleV07XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHNsb3RzW2tleV0gPSBub3JtYWxpemVTbG90KGtleSwgdmFsdWUsIGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgIShmYWxzZSApKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKGBOb24tZnVuY3Rpb24gdmFsdWUgZW5jb3VudGVyZWQgZm9yIHNsb3QgXCIke2tleX1cIi4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYFByZWZlciBmdW5jdGlvbiBzbG90cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVTbG90VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICBzbG90c1trZXldID0gKCkgPT4gbm9ybWFsaXplZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IG5vcm1hbGl6ZVZOb2RlU2xvdHMgPSAoaW5zdGFuY2UsIGNoaWxkcmVuKSA9PiB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgIWlzS2VlcEFsaXZlKGluc3RhbmNlLnZub2RlKSAmJlxyXG4gICAgICAgICEoZmFsc2UgKSkge1xyXG4gICAgICAgIHdhcm4oYE5vbi1mdW5jdGlvbiB2YWx1ZSBlbmNvdW50ZXJlZCBmb3IgZGVmYXVsdCBzbG90LiBgICtcclxuICAgICAgICAgICAgYFByZWZlciBmdW5jdGlvbiBzbG90cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLmApO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVNsb3RWYWx1ZShjaGlsZHJlbik7XHJcbiAgICBpbnN0YW5jZS5zbG90cy5kZWZhdWx0ID0gKCkgPT4gbm9ybWFsaXplZDtcclxufTtcclxuY29uc3QgaW5pdFNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbikgPT4ge1xyXG4gICAgaWYgKGluc3RhbmNlLnZub2RlLnNoYXBlRmxhZyAmIDMyIC8qIFNoYXBlRmxhZ3MuU0xPVFNfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gY2hpbGRyZW4uXztcclxuICAgICAgICBpZiAodHlwZSkge1xyXG4gICAgICAgICAgICAvLyB1c2VycyBjYW4gZ2V0IHRoZSBzaGFsbG93IHJlYWRvbmx5IHZlcnNpb24gb2YgdGhlIHNsb3RzIG9iamVjdCB0aHJvdWdoIGB0aGlzLiRzbG90c2AsXHJcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZCBhdm9pZCB0aGUgcHJveHkgb2JqZWN0IHBvbGx1dGluZyB0aGUgc2xvdHMgb2YgdGhlIGludGVybmFsIGluc3RhbmNlXHJcbiAgICAgICAgICAgIGluc3RhbmNlLnNsb3RzID0gdG9SYXcoY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAvLyBtYWtlIGNvbXBpbGVyIG1hcmtlciBub24tZW51bWVyYWJsZVxyXG4gICAgICAgICAgICBkZWYoY2hpbGRyZW4sICdfJywgdHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBub3JtYWxpemVPYmplY3RTbG90cyhjaGlsZHJlbiwgKGluc3RhbmNlLnNsb3RzID0ge30pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpbnN0YW5jZS5zbG90cyA9IHt9O1xyXG4gICAgICAgIGlmIChjaGlsZHJlbikge1xyXG4gICAgICAgICAgICBub3JtYWxpemVWTm9kZVNsb3RzKGluc3RhbmNlLCBjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVmKGluc3RhbmNlLnNsb3RzLCBJbnRlcm5hbE9iamVjdEtleSwgMSk7XHJcbn07XHJcbmNvbnN0IHVwZGF0ZVNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbiwgb3B0aW1pemVkKSA9PiB7XHJcbiAgICBjb25zdCB7IHZub2RlLCBzbG90cyB9ID0gaW5zdGFuY2U7XHJcbiAgICBsZXQgbmVlZERlbGV0aW9uQ2hlY2sgPSB0cnVlO1xyXG4gICAgbGV0IGRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCA9IEVNUFRZX09CSjtcclxuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAzMiAvKiBTaGFwZUZsYWdzLlNMT1RTX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNoaWxkcmVuLl87XHJcbiAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgICAgLy8gY29tcGlsZWQgc2xvdHMuXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNIbXJVcGRhdGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gUGFyZW50IHdhcyBITVIgdXBkYXRlZCBzbyBzbG90IGNvbnRlbnQgbWF5IGhhdmUgY2hhbmdlZC5cclxuICAgICAgICAgICAgICAgIC8vIGZvcmNlIHVwZGF0ZSBzbG90cyBhbmQgbWFyayBpbnN0YW5jZSBmb3IgaG1yIGFzIHdlbGxcclxuICAgICAgICAgICAgICAgIGV4dGVuZChzbG90cywgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGltaXplZCAmJiB0eXBlID09PSAxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVkIEFORCBzdGFibGUuXHJcbiAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSwgYW5kIHNraXAgc3RhbGUgc2xvdHMgcmVtb3ZhbC5cclxuICAgICAgICAgICAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb21waWxlZCBidXQgZHluYW1pYyAodi1pZi92LWZvciBvbiBzbG90cykgLSB1cGRhdGUgc2xvdHMsIGJ1dCBza2lwXHJcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxpemF0aW9uLlxyXG4gICAgICAgICAgICAgICAgZXh0ZW5kKHNsb3RzLCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICAvLyAjMjg5M1xyXG4gICAgICAgICAgICAgICAgLy8gd2hlbiByZW5kZXJpbmcgdGhlIG9wdGltaXplZCBzbG90cyBieSBtYW51YWxseSB3cml0dGVuIHJlbmRlciBmdW5jdGlvbixcclxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSBgc2xvdHMuX2AgZmxhZyBpZiBuZWNlc3NhcnkgdG8gbWFrZSBzdWJzZXF1ZW50IHVwZGF0ZXMgcmVsaWFibGUsXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIGxldCB0aGUgYHJlbmRlclNsb3RgIGNyZWF0ZSB0aGUgYmFpbGVkIEZyYWdtZW50XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGltaXplZCAmJiB0eXBlID09PSAxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2xvdHMuXztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbmVlZERlbGV0aW9uQ2hlY2sgPSAhY2hpbGRyZW4uJHN0YWJsZTtcclxuICAgICAgICAgICAgbm9ybWFsaXplT2JqZWN0U2xvdHMoY2hpbGRyZW4sIHNsb3RzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRpb25Db21wYXJpc29uVGFyZ2V0ID0gY2hpbGRyZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICAgIC8vIG5vbiBzbG90IG9iamVjdCBjaGlsZHJlbiAoZGlyZWN0IHZhbHVlKSBwYXNzZWQgdG8gYSBjb21wb25lbnRcclxuICAgICAgICBub3JtYWxpemVWTm9kZVNsb3RzKGluc3RhbmNlLCBjaGlsZHJlbik7XHJcbiAgICAgICAgZGVsZXRpb25Db21wYXJpc29uVGFyZ2V0ID0geyBkZWZhdWx0OiAxIH07XHJcbiAgICB9XHJcbiAgICAvLyBkZWxldGUgc3RhbGUgc2xvdHNcclxuICAgIGlmIChuZWVkRGVsZXRpb25DaGVjaykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNsb3RzKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNJbnRlcm5hbEtleShrZXkpICYmICEoa2V5IGluIGRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzbG90c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVBcHBDb250ZXh0KCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhcHA6IG51bGwsXHJcbiAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgIGlzTmF0aXZlVGFnOiBOTyxcclxuICAgICAgICAgICAgcGVyZm9ybWFuY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICAgICAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiB7fSxcclxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHdhcm5IYW5kbGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9uczoge31cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1peGluczogW10sXHJcbiAgICAgICAgY29tcG9uZW50czoge30sXHJcbiAgICAgICAgZGlyZWN0aXZlczoge30sXHJcbiAgICAgICAgcHJvdmlkZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXHJcbiAgICAgICAgb3B0aW9uc0NhY2hlOiBuZXcgV2Vha01hcCgpLFxyXG4gICAgICAgIHByb3BzQ2FjaGU6IG5ldyBXZWFrTWFwKCksXHJcbiAgICAgICAgZW1pdHNDYWNoZTogbmV3IFdlYWtNYXAoKVxyXG4gICAgfTtcclxufVxyXG5sZXQgdWlkID0gMDtcclxuZnVuY3Rpb24gY3JlYXRlQXBwQVBJKHJlbmRlciwgaHlkcmF0ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUFwcChyb290Q29tcG9uZW50LCByb290UHJvcHMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKHJvb3RDb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHJvb3RDb21wb25lbnQgPSBPYmplY3QuYXNzaWduKHt9LCByb290Q29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvb3RQcm9wcyAhPSBudWxsICYmICFpc09iamVjdChyb290UHJvcHMpKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGByb290IHByb3BzIHBhc3NlZCB0byBhcHAubW91bnQoKSBtdXN0IGJlIGFuIG9iamVjdC5gKTtcclxuICAgICAgICAgICAgcm9vdFByb3BzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUFwcENvbnRleHQoKTtcclxuICAgICAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGxldCBpc01vdW50ZWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBhcHAgPSAoY29udGV4dC5hcHAgPSB7XHJcbiAgICAgICAgICAgIF91aWQ6IHVpZCsrLFxyXG4gICAgICAgICAgICBfY29tcG9uZW50OiByb290Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBfcHJvcHM6IHJvb3RQcm9wcyxcclxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcclxuICAgICAgICAgICAgX2NvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgICAgICAgIF9pbnN0YW5jZTogbnVsbCxcclxuICAgICAgICAgICAgdmVyc2lvbixcclxuICAgICAgICAgICAgZ2V0IGNvbmZpZygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbmZpZztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0IGNvbmZpZyh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgYXBwLmNvbmZpZyBjYW5ub3QgYmUgcmVwbGFjZWQuIE1vZGlmeSBpbmRpdmlkdWFsIG9wdGlvbnMgaW5zdGVhZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdXNlKHBsdWdpbiwgLi4ub3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaGFzKHBsdWdpbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgd2FybihgUGx1Z2luIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGx1Z2luICYmIGlzRnVuY3Rpb24ocGx1Z2luLmluc3RhbGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5hZGQocGx1Z2luKTtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uaW5zdGFsbChhcHAsIC4uLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihwbHVnaW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5hZGQocGx1Z2luKTtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW4oYXBwLCAuLi5vcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYEEgcGx1Z2luIG11c3QgZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IHdpdGggYW4gXCJpbnN0YWxsXCIgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBmdW5jdGlvbi5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1peGluKG1peGluKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX19WVUVfT1BUSU9OU19BUElfXykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5taXhpbnMuaW5jbHVkZXMobWl4aW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWl4aW5zLnB1c2gobWl4aW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybignTWl4aW4gaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIHRvIHRhcmdldCBhcHAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaXhpbi5uYW1lID8gYDogJHttaXhpbi5uYW1lfWAgOiAnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ01peGlucyBhcmUgb25seSBhdmFpbGFibGUgaW4gYnVpbGRzIHN1cHBvcnRpbmcgT3B0aW9ucyBBUEknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudChuYW1lLCBjb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSwgY29udGV4dC5jb25maWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb25lbnRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjb250ZXh0LmNvbXBvbmVudHNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBDb21wb25lbnQgXCIke25hbWV9XCIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGluIHRhcmdldCBhcHAuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudHNbbmFtZV0gPSBjb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkaXJlY3RpdmUobmFtZSwgZGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXJlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXJlY3RpdmVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBEaXJlY3RpdmUgXCIke25hbWV9XCIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGluIHRhcmdldCBhcHAuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0gPSBkaXJlY3RpdmU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtb3VudChyb290Q29udGFpbmVyLCBpc0h5ZHJhdGUsIGlzU1ZHKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICM1NTcxXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiByb290Q29udGFpbmVyLl9fdnVlX2FwcF9fKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYFRoZXJlIGlzIGFscmVhZHkgYW4gYXBwIGluc3RhbmNlIG1vdW50ZWQgb24gdGhlIGhvc3QgY29udGFpbmVyLlxcbmAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCBJZiB5b3Ugd2FudCB0byBtb3VudCBhbm90aGVyIGFwcCBvbiB0aGUgc2FtZSBob3N0IGNvbnRhaW5lcixgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgeW91IG5lZWQgdG8gdW5tb3VudCB0aGUgcHJldmlvdXMgYXBwIGJ5IGNhbGxpbmcgXFxgYXBwLnVubW91bnQoKVxcYCBmaXJzdC5gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm5vZGUgPSBjcmVhdGVWTm9kZShyb290Q29tcG9uZW50LCByb290UHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGFwcCBjb250ZXh0IG9uIHRoZSByb290IFZOb2RlLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSBzZXQgb24gdGhlIHJvb3QgaW5zdGFuY2Ugb24gaW5pdGlhbCBtb3VudC5cclxuICAgICAgICAgICAgICAgICAgICB2bm9kZS5hcHBDb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBITVIgcm9vdCByZWxvYWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVsb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKGNsb25lVk5vZGUodm5vZGUpLCByb290Q29udGFpbmVyLCBpc1NWRyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0h5ZHJhdGUgJiYgaHlkcmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRlKHZub2RlLCByb290Q29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcih2bm9kZSwgcm9vdENvbnRhaW5lciwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpc01vdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5fY29udGFpbmVyID0gcm9vdENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICByb290Q29udGFpbmVyLl9fdnVlX2FwcF9fID0gYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5faW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldnRvb2xzSW5pdEFwcChhcHAsIHZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXhwb3NlUHJveHkodm5vZGUuY29tcG9uZW50KSB8fCB2bm9kZS5jb21wb25lbnQucHJveHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBBcHAgaGFzIGFscmVhZHkgYmVlbiBtb3VudGVkLlxcbmAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgSWYgeW91IHdhbnQgdG8gcmVtb3VudCB0aGUgc2FtZSBhcHAsIG1vdmUgeW91ciBhcHAgY3JlYXRpb24gbG9naWMgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBpbnRvIGEgZmFjdG9yeSBmdW5jdGlvbiBhbmQgY3JlYXRlIGZyZXNoIGFwcCBpbnN0YW5jZXMgZm9yIGVhY2ggYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBtb3VudCAtIGUuZy4gXFxgY29uc3QgY3JlYXRlTXlBcHAgPSAoKSA9PiBjcmVhdGVBcHAoQXBwKVxcYGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB1bm1vdW50KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcihudWxsLCBhcHAuX2NvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLl9pbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldnRvb2xzVW5tb3VudEFwcChhcHApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXBwLl9jb250YWluZXIuX192dWVfYXBwX187XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBDYW5ub3QgdW5tb3VudCBhbiBhcHAgdGhhdCBpcyBub3QgbW91bnRlZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHJvdmlkZShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGtleSBpbiBjb250ZXh0LnByb3ZpZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybihgQXBwIGFscmVhZHkgcHJvdmlkZXMgcHJvcGVydHkgd2l0aCBrZXkgXCIke1N0cmluZyhrZXkpfVwiLiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV3IHZhbHVlLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5wcm92aWRlc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgIH07XHJcbn1cblxuLyoqXHJcbiAqIEZ1bmN0aW9uIGZvciBoYW5kbGluZyBhIHRlbXBsYXRlIHJlZlxyXG4gKi9cclxuZnVuY3Rpb24gc2V0UmVmKHJhd1JlZiwgb2xkUmF3UmVmLCBwYXJlbnRTdXNwZW5zZSwgdm5vZGUsIGlzVW5tb3VudCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoaXNBcnJheShyYXdSZWYpKSB7XHJcbiAgICAgICAgcmF3UmVmLmZvckVhY2goKHIsIGkpID0+IHNldFJlZihyLCBvbGRSYXdSZWYgJiYgKGlzQXJyYXkob2xkUmF3UmVmKSA/IG9sZFJhd1JlZltpXSA6IG9sZFJhd1JlZiksIHBhcmVudFN1c3BlbnNlLCB2bm9kZSwgaXNVbm1vdW50KSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQXN5bmNXcmFwcGVyKHZub2RlKSAmJiAhaXNVbm1vdW50KSB7XHJcbiAgICAgICAgLy8gd2hlbiBtb3VudGluZyBhc3luYyBjb21wb25lbnRzLCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUsXHJcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgdGVtcGxhdGUgcmVmIGlzIGZvcndhcmRlZCB0byBpbm5lciBjb21wb25lbnRcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWZWYWx1ZSA9IHZub2RlLnNoYXBlRmxhZyAmIDQgLyogU2hhcGVGbGFncy5TVEFURUZVTF9DT01QT05FTlQgKi9cclxuICAgICAgICA/IGdldEV4cG9zZVByb3h5KHZub2RlLmNvbXBvbmVudCkgfHwgdm5vZGUuY29tcG9uZW50LnByb3h5XHJcbiAgICAgICAgOiB2bm9kZS5lbDtcclxuICAgIGNvbnN0IHZhbHVlID0gaXNVbm1vdW50ID8gbnVsbCA6IHJlZlZhbHVlO1xyXG4gICAgY29uc3QgeyBpOiBvd25lciwgcjogcmVmIH0gPSByYXdSZWY7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFvd25lcikge1xyXG4gICAgICAgIHdhcm4oYE1pc3NpbmcgcmVmIG93bmVyIGNvbnRleHQuIHJlZiBjYW5ub3QgYmUgdXNlZCBvbiBob2lzdGVkIHZub2Rlcy4gYCArXHJcbiAgICAgICAgICAgIGBBIHZub2RlIHdpdGggcmVmIG11c3QgYmUgY3JlYXRlZCBpbnNpZGUgdGhlIHJlbmRlciBmdW5jdGlvbi5gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBvbGRSZWYgPSBvbGRSYXdSZWYgJiYgb2xkUmF3UmVmLnI7XHJcbiAgICBjb25zdCByZWZzID0gb3duZXIucmVmcyA9PT0gRU1QVFlfT0JKID8gKG93bmVyLnJlZnMgPSB7fSkgOiBvd25lci5yZWZzO1xyXG4gICAgY29uc3Qgc2V0dXBTdGF0ZSA9IG93bmVyLnNldHVwU3RhdGU7XHJcbiAgICAvLyBkeW5hbWljIHJlZiBjaGFuZ2VkLiB1bnNldCBvbGQgcmVmXHJcbiAgICBpZiAob2xkUmVmICE9IG51bGwgJiYgb2xkUmVmICE9PSByZWYpIHtcclxuICAgICAgICBpZiAoaXNTdHJpbmcob2xkUmVmKSkge1xyXG4gICAgICAgICAgICByZWZzW29sZFJlZl0gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoaGFzT3duKHNldHVwU3RhdGUsIG9sZFJlZikpIHtcclxuICAgICAgICAgICAgICAgIHNldHVwU3RhdGVbb2xkUmVmXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNSZWYob2xkUmVmKSkge1xyXG4gICAgICAgICAgICBvbGRSZWYudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcclxuICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcocmVmLCBvd25lciwgMTIgLyogRXJyb3JDb2Rlcy5GVU5DVElPTl9SRUYgKi8sIFt2YWx1ZSwgcmVmc10pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgX2lzU3RyaW5nID0gaXNTdHJpbmcocmVmKTtcclxuICAgICAgICBjb25zdCBfaXNSZWYgPSBpc1JlZihyZWYpO1xyXG4gICAgICAgIGlmIChfaXNTdHJpbmcgfHwgX2lzUmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvU2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhd1JlZi5mKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5tb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5KGV4aXN0aW5nKSAmJiByZW1vdmUoZXhpc3RpbmcsIHJlZlZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShleGlzdGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0gPSBbcmVmVmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24oc2V0dXBTdGF0ZSwgcmVmKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cFN0YXRlW3JlZl0gPSByZWZzW3JlZl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gW3JlZlZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmF3UmVmLmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnNbcmF3UmVmLmtdID0gcmVmLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFleGlzdGluZy5pbmNsdWRlcyhyZWZWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnB1c2gocmVmVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX2lzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093bihzZXR1cFN0YXRlLCByZWYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwU3RhdGVbcmVmXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9pc1JlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYXdSZWYuaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyYXdSZWYua10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ0ludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6JywgcmVmLCBgKCR7dHlwZW9mIHJlZn0pYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZG9TZXQuaWQgPSAtMTtcclxuICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChkb1NldCwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9TZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgd2FybignSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZTonLCByZWYsIGAoJHt0eXBlb2YgcmVmfSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxubGV0IGhhc01pc21hdGNoID0gZmFsc2U7XHJcbmNvbnN0IGlzU1ZHQ29udGFpbmVyID0gKGNvbnRhaW5lcikgPT4gL3N2Zy8udGVzdChjb250YWluZXIubmFtZXNwYWNlVVJJKSAmJiBjb250YWluZXIudGFnTmFtZSAhPT0gJ2ZvcmVpZ25PYmplY3QnO1xyXG5jb25zdCBpc0NvbW1lbnQgPSAobm9kZSkgPT4gbm9kZS5ub2RlVHlwZSA9PT0gOCAvKiBET01Ob2RlVHlwZXMuQ09NTUVOVCAqLztcclxuLy8gTm90ZTogaHlkcmF0aW9uIGlzIERPTS1zcGVjaWZpY1xyXG4vLyBCdXQgd2UgaGF2ZSB0byBwbGFjZSBpdCBpbiBjb3JlIGR1ZSB0byB0aWdodCBjb3VwbGluZyB3aXRoIGNvcmUgLSBzcGxpdHRpbmdcclxuLy8gaXQgb3V0IGNyZWF0ZXMgYSB0b24gb2YgdW5uZWNlc3NhcnkgY29tcGxleGl0eS5cclxuLy8gSHlkcmF0aW9uIGFsc28gZGVwZW5kcyBvbiBzb21lIHJlbmRlcmVyIGludGVybmFsIGxvZ2ljIHdoaWNoIG5lZWRzIHRvIGJlXHJcbi8vIHBhc3NlZCBpbiB2aWEgYXJndW1lbnRzLlxyXG5mdW5jdGlvbiBjcmVhdGVIeWRyYXRpb25GdW5jdGlvbnMocmVuZGVyZXJJbnRlcm5hbHMpIHtcclxuICAgIGNvbnN0IHsgbXQ6IG1vdW50Q29tcG9uZW50LCBwOiBwYXRjaCwgbzogeyBwYXRjaFByb3AsIGNyZWF0ZVRleHQsIG5leHRTaWJsaW5nLCBwYXJlbnROb2RlLCByZW1vdmUsIGluc2VydCwgY3JlYXRlQ29tbWVudCB9IH0gPSByZW5kZXJlckludGVybmFscztcclxuICAgIGNvbnN0IGh5ZHJhdGUgPSAodm5vZGUsIGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xyXG4gICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHdhcm4oYEF0dGVtcHRpbmcgdG8gaHlkcmF0ZSBleGlzdGluZyBtYXJrdXAgYnV0IGNvbnRhaW5lciBpcyBlbXB0eS4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYFBlcmZvcm1pbmcgZnVsbCBtb3VudCBpbnN0ZWFkLmApO1xyXG4gICAgICAgICAgICBwYXRjaChudWxsLCB2bm9kZSwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgZmx1c2hQb3N0Rmx1c2hDYnMoKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLl92bm9kZSA9IHZub2RlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhhc01pc21hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgaHlkcmF0ZU5vZGUoY29udGFpbmVyLmZpcnN0Q2hpbGQsIHZub2RlLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICBmbHVzaFBvc3RGbHVzaENicygpO1xyXG4gICAgICAgIGNvbnRhaW5lci5fdm5vZGUgPSB2bm9kZTtcclxuICAgICAgICBpZiAoaGFzTWlzbWF0Y2ggJiYgIWZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMgZXJyb3Igc2hvdWxkIHNob3cgdXAgaW4gcHJvZHVjdGlvblxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIeWRyYXRpb24gY29tcGxldGVkIGJ1dCBjb250YWlucyBtaXNtYXRjaGVzLmApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoeWRyYXRlTm9kZSA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRnJhZ21lbnRTdGFydCA9IGlzQ29tbWVudChub2RlKSAmJiBub2RlLmRhdGEgPT09ICdbJztcclxuICAgICAgICBjb25zdCBvbk1pc21hdGNoID0gKCkgPT4gaGFuZGxlTWlzbWF0Y2gobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgaXNGcmFnbWVudFN0YXJ0KTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHJlZiwgc2hhcGVGbGFnLCBwYXRjaEZsYWcgfSA9IHZub2RlO1xyXG4gICAgICAgIGNvbnN0IGRvbVR5cGUgPSBub2RlLm5vZGVUeXBlO1xyXG4gICAgICAgIHZub2RlLmVsID0gbm9kZTtcclxuICAgICAgICBpZiAocGF0Y2hGbGFnID09PSAtMiAvKiBQYXRjaEZsYWdzLkJBSUwgKi8pIHtcclxuICAgICAgICAgICAgb3B0aW1pemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZub2RlLmR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuZXh0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dDpcclxuICAgICAgICAgICAgICAgIGlmIChkb21UeXBlICE9PSAzIC8qIERPTU5vZGVUeXBlcy5URVhUICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIzU3MjggZW1wdHkgdGV4dCBub2RlIGluc2lkZSBhIHNsb3QgY2FuIGNhdXNlIGh5ZHJhdGlvbiBmYWlsdXJlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgd29uJ3QgY29udGFpbiBhIHRleHQgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbiA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0KCh2bm9kZS5lbCA9IGNyZWF0ZVRleHQoJycpKSwgcGFyZW50Tm9kZShub2RlKSwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGEgIT09IHZub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKGBIeWRyYXRpb24gdGV4dCBtaXNtYXRjaDpgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFxuLSBDbGllbnQ6ICR7SlNPTi5zdHJpbmdpZnkobm9kZS5kYXRhKX1gICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFxuLSBTZXJ2ZXI6ICR7SlNPTi5zdHJpbmdpZnkodm5vZGUuY2hpbGRyZW4pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRhdGEgPSB2bm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbW1lbnQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gOCAvKiBET01Ob2RlVHlwZXMuQ09NTUVOVCAqLyB8fCBpc0ZyYWdtZW50U3RhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTdGF0aWM6XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gMSAvKiBET01Ob2RlVHlwZXMuRUxFTUVOVCAqLyAmJiBkb21UeXBlICE9PSAzIC8qIERPTU5vZGVUeXBlcy5URVhUICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgYW5jaG9yLCBhZG9wdCBjb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBub2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdGF0aWMgdm5vZGUgaGFzIGl0cyBjb250ZW50IHN0cmlwcGVkIGR1cmluZyBidWlsZCxcclxuICAgICAgICAgICAgICAgICAgICAvLyBhZG9wdCBpdCBmcm9tIHRoZSBzZXJ2ZXItcmVuZGVyZWQgSFRNTC5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkVG9BZG9wdENvbnRlbnQgPSAhdm5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdm5vZGUuc3RhdGljQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZFRvQWRvcHRDb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4gKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gMSAvKiBET01Ob2RlVHlwZXMuRUxFTUVOVCAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5leHROb2RlLm91dGVySFRNTFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5leHROb2RlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSB2bm9kZS5zdGF0aWNDb3VudCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZub2RlLmFuY2hvciA9IG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobmV4dE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGcmFnbWVudDpcclxuICAgICAgICAgICAgICAgIGlmICghaXNGcmFnbWVudFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGh5ZHJhdGVGcmFnbWVudChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tVHlwZSAhPT0gMSAvKiBET01Ob2RlVHlwZXMuRUxFTUVOVCAqLyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2bm9kZS50eXBlLnRvTG93ZXJDYXNlKCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gaHlkcmF0ZUVsZW1lbnQobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBzZXR0aW5nIHVwIHRoZSByZW5kZXIgZWZmZWN0LCBpZiB0aGUgaW5pdGlhbCB2bm9kZSBhbHJlYWR5XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFzIC5lbCBzZXQsIHRoZSBjb21wb25lbnQgd2lsbCBwZXJmb3JtIGh5ZHJhdGlvbiBpbnN0ZWFkIG9mIG1vdW50XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gaXRzIHN1Yi10cmVlLlxyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlLnNsb3RTY29wZUlkcyA9IHNsb3RTY29wZUlkcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdW50Q29tcG9uZW50KHZub2RlLCBjb250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHQ29udGFpbmVyKGNvbnRhaW5lciksIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IG1heSBiZSBhc3luYywgc28gaW4gdGhlIGNhc2Ugb2YgZnJhZ21lbnRzIHdlIGNhbm5vdCByZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gY29tcG9uZW50J3MgcmVuZGVyZWQgb3V0cHV0IHRvIGRldGVybWluZSB0aGUgZW5kIG9mIHRoZSBmcmFnbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluc3RlYWQsIHdlIGRvIGEgbG9va2FoZWFkIHRvIGZpbmQgdGhlIGVuZCBhbmNob3Igbm9kZS5cclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGlzRnJhZ21lbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGxvY2F0ZUNsb3NpbmdBc3luY0FuY2hvcihub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5leHRTaWJsaW5nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICM0MjkzIHRlbGVwb3J0IGFzIGNvbXBvbmVudCByb290XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHROb2RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tbWVudChuZXh0Tm9kZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUuZGF0YSA9PT0gJ3RlbGVwb3J0IGVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhuZXh0Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vICMzNzg3XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgY29tcG9uZW50IGlzIGFzeW5jLCBpdCBtYXkgZ2V0IG1vdmVkIC8gdW5tb3VudGVkIGJlZm9yZSBpdHNcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbm5lciBjb21wb25lbnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSBwbGFjZWhvbGRlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZub2RlIHRoYXQgbWF0Y2hlcyBpdHMgYWRvcHRlZCBET00uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNXcmFwcGVyKHZub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViVHJlZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnJhZ21lbnRTdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVHJlZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWUuYW5jaG9yID0gbmV4dE5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5leHROb2RlLnByZXZpb3VzU2libGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29udGFpbmVyLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZVR5cGUgPT09IDMgPyBjcmVhdGVUZXh0Vk5vZGUoJycpIDogY3JlYXRlVk5vZGUoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWUuZWwgPSBub2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2bm9kZS5jb21wb25lbnQuc3ViVHJlZSA9IHN1YlRyZWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21UeXBlICE9PSA4IC8qIERPTU5vZGVUeXBlcy5DT01NRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSB2bm9kZS50eXBlLmh5ZHJhdGUobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscywgaHlkcmF0ZUNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKG5vZGUsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWR0NvbnRhaW5lcihwYXJlbnROb2RlKG5vZGUpKSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHJlbmRlcmVySW50ZXJuYWxzLCBoeWRyYXRlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKCdJbnZhbGlkIEhvc3RWTm9kZSB0eXBlOicsIHR5cGUsIGAoJHt0eXBlb2YgdHlwZX0pYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZXRSZWYocmVmLCBudWxsLCBwYXJlbnRTdXNwZW5zZSwgdm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaHlkcmF0ZUVsZW1lbnQgPSAoZWwsIHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIG9wdGltaXplZCA9IG9wdGltaXplZCB8fCAhIXZub2RlLmR5bmFtaWNDaGlsZHJlbjtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBwYXRjaEZsYWcsIHNoYXBlRmxhZywgZGlycyB9ID0gdm5vZGU7XHJcbiAgICAgICAgLy8gIzQwMDYgZm9yIGZvcm0gZWxlbWVudHMgd2l0aCBub24tc3RyaW5nIHYtbW9kZWwgdmFsdWUgYmluZGluZ3NcclxuICAgICAgICAvLyBlLmcuIDxvcHRpb24gOnZhbHVlPVwib2JqXCI+LCA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgOnRydWUtdmFsdWU9XCIxXCI+XHJcbiAgICAgICAgY29uc3QgZm9yY2VQYXRjaFZhbHVlID0gKHR5cGUgPT09ICdpbnB1dCcgJiYgZGlycykgfHwgdHlwZSA9PT0gJ29wdGlvbic7XHJcbiAgICAgICAgLy8gc2tpcCBwcm9wcyAmIGNoaWxkcmVuIGlmIHRoaXMgaXMgaG9pc3RlZCBzdGF0aWMgbm9kZXNcclxuICAgICAgICAvLyAjNTQwNSBpbiBkZXYsIGFsd2F5cyBoeWRyYXRlIGNoaWxkcmVuIGZvciBITVJcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IGZvcmNlUGF0Y2hWYWx1ZSB8fCBwYXRjaEZsYWcgIT09IC0xIC8qIFBhdGNoRmxhZ3MuSE9JU1RFRCAqLykge1xyXG4gICAgICAgICAgICBpZiAoZGlycykge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAnY3JlYXRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByb3BzXHJcbiAgICAgICAgICAgIGlmIChwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcmNlUGF0Y2hWYWx1ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICFvcHRpbWl6ZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZsYWcgJiAoMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovIHwgMzIgLyogUGF0Y2hGbGFncy5IWURSQVRFX0VWRU5UUyAqLykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZvcmNlUGF0Y2hWYWx1ZSAmJiBrZXkuZW5kc1dpdGgoJ3ZhbHVlJykpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNPbihrZXkpICYmICFpc1Jlc2VydmVkUHJvcChrZXkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hQcm9wKGVsLCBrZXksIG51bGwsIHByb3BzW2tleV0sIGZhbHNlLCB1bmRlZmluZWQsIHBhcmVudENvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBjbGljayBsaXN0ZW5lcnMgKHdoaWNoIGlzIG1vc3Qgb2Z0ZW4pIHRvIGF2b2lkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0aW5nIHRocm91Z2ggcHJvcHMuXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hQcm9wKGVsLCAnb25DbGljaycsIG51bGwsIHByb3BzLm9uQ2xpY2ssIGZhbHNlLCB1bmRlZmluZWQsIHBhcmVudENvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdm5vZGUgLyBkaXJlY3RpdmUgaG9va3NcclxuICAgICAgICAgICAgbGV0IHZub2RlSG9va3M7XHJcbiAgICAgICAgICAgIGlmICgodm5vZGVIb29rcyA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVNb3VudCkpIHtcclxuICAgICAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2tzLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlycykge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAnYmVmb3JlTW91bnQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKHZub2RlSG9va3MgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlTW91bnRlZCkgfHwgZGlycykge1xyXG4gICAgICAgICAgICAgICAgcXVldWVFZmZlY3RXaXRoU3VzcGVuc2UoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZub2RlSG9va3MgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9va3MsIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpcnMgJiYgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAnbW91bnRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovICYmXHJcbiAgICAgICAgICAgICAgICAvLyBza2lwIGlmIGVsZW1lbnQgaGFzIGlubmVySFRNTCAvIHRleHRDb250ZW50XHJcbiAgICAgICAgICAgICAgICAhKHByb3BzICYmIChwcm9wcy5pbm5lckhUTUwgfHwgcHJvcHMudGV4dENvbnRlbnQpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSBoeWRyYXRlQ2hpbGRyZW4oZWwuZmlyc3RDaGlsZCwgdm5vZGUsIGVsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzV2FybmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFoYXNXYXJuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihgSHlkcmF0aW9uIGNoaWxkcmVuIG1pc21hdGNoIGluIDwke3Zub2RlLnR5cGV9PjogYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2VydmVyIHJlbmRlcmVkIGVsZW1lbnQgY29udGFpbnMgbW9yZSBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNXYXJuZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgU1NSZWQgRE9NIGNvbnRhaW5zIG1vcmUgbm9kZXMgdGhhbiBpdCBzaG91bGQuIFJlbW92ZSB0aGVtLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1ciA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGN1cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgOCAvKiBTaGFwZUZsYWdzLlRFWFRfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbC50ZXh0Q29udGVudCAhPT0gdm5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oYEh5ZHJhdGlvbiB0ZXh0IGNvbnRlbnQgbWlzbWF0Y2ggaW4gPCR7dm5vZGUudHlwZX0+OlxcbmAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0gQ2xpZW50OiAke2VsLnRleHRDb250ZW50fVxcbmAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0gU2VydmVyOiAke3Zub2RlLmNoaWxkcmVufWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdm5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVsLm5leHRTaWJsaW5nO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGh5ZHJhdGVDaGlsZHJlbiA9IChub2RlLCBwYXJlbnRWTm9kZSwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIG9wdGltaXplZCA9IG9wdGltaXplZCB8fCAhIXBhcmVudFZOb2RlLmR5bmFtaWNDaGlsZHJlbjtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLmNoaWxkcmVuO1xyXG4gICAgICAgIGNvbnN0IGwgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZub2RlID0gb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICA/IGNoaWxkcmVuW2ldXHJcbiAgICAgICAgICAgICAgICA6IChjaGlsZHJlbltpXSA9IG5vcm1hbGl6ZVZOb2RlKGNoaWxkcmVuW2ldKSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gaHlkcmF0ZU5vZGUobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2bm9kZS50eXBlID09PSBUZXh0ICYmICF2bm9kZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFoYXNXYXJuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBIeWRyYXRpb24gY2hpbGRyZW4gbWlzbWF0Y2ggaW4gPCR7Y29udGFpbmVyLnRhZ05hbWUudG9Mb3dlckNhc2UoKX0+OiBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHNlcnZlciByZW5kZXJlZCBlbGVtZW50IGNvbnRhaW5zIGZld2VyIGNoaWxkIG5vZGVzIHRoYW4gY2xpZW50IHZkb20uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHRoZSBTU1JlZCBET00gZGlkbid0IGNvbnRhaW4gZW5vdWdoIG5vZGVzLiBNb3VudCB0aGUgbWlzc2luZyBvbmVzLlxyXG4gICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgdm5vZGUsIGNvbnRhaW5lciwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkdDb250YWluZXIoY29udGFpbmVyKSwgc2xvdFNjb3BlSWRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH07XHJcbiAgICBjb25zdCBoeWRyYXRlRnJhZ21lbnQgPSAobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBzbG90U2NvcGVJZHM6IGZyYWdtZW50U2xvdFNjb3BlSWRzIH0gPSB2bm9kZTtcclxuICAgICAgICBpZiAoZnJhZ21lbnRTbG90U2NvcGVJZHMpIHtcclxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzXHJcbiAgICAgICAgICAgICAgICA/IHNsb3RTY29wZUlkcy5jb25jYXQoZnJhZ21lbnRTbG90U2NvcGVJZHMpXHJcbiAgICAgICAgICAgICAgICA6IGZyYWdtZW50U2xvdFNjb3BlSWRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBoeWRyYXRlQ2hpbGRyZW4obmV4dFNpYmxpbmcobm9kZSksIHZub2RlLCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICBpZiAobmV4dCAmJiBpc0NvbW1lbnQobmV4dCkgJiYgbmV4dC5kYXRhID09PSAnXScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCh2bm9kZS5hbmNob3IgPSBuZXh0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmcmFnbWVudCBkaWRuJ3QgaHlkcmF0ZSBzdWNjZXNzZnVsbHksIHNpbmNlIHdlIGRpZG4ndCBnZXQgYSBlbmQgYW5jaG9yXHJcbiAgICAgICAgICAgIC8vIGJhY2suIFRoaXMgc2hvdWxkIGhhdmUgbGVkIHRvIG5vZGUvY2hpbGRyZW4gbWlzbWF0Y2ggd2FybmluZ3MuXHJcbiAgICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gc2luY2UgdGhlIGFuY2hvciBpcyBtaXNzaW5nLCB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmUgYW5kIGluc2VydCBpdFxyXG4gICAgICAgICAgICBpbnNlcnQoKHZub2RlLmFuY2hvciA9IGNyZWF0ZUNvbW1lbnQoYF1gKSksIGNvbnRhaW5lciwgbmV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVNaXNtYXRjaCA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBpc0ZyYWdtZW50KSA9PiB7XHJcbiAgICAgICAgaGFzTWlzbWF0Y2ggPSB0cnVlO1xyXG4gICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICB3YXJuKGBIeWRyYXRpb24gbm9kZSBtaXNtYXRjaDpcXG4tIENsaWVudCB2bm9kZTpgLCB2bm9kZS50eXBlLCBgXFxuLSBTZXJ2ZXIgcmVuZGVyZWQgRE9NOmAsIG5vZGUsIG5vZGUubm9kZVR5cGUgPT09IDMgLyogRE9NTm9kZVR5cGVzLlRFWFQgKi9cclxuICAgICAgICAgICAgICAgID8gYCh0ZXh0KWBcclxuICAgICAgICAgICAgICAgIDogaXNDb21tZW50KG5vZGUpICYmIG5vZGUuZGF0YSA9PT0gJ1snXHJcbiAgICAgICAgICAgICAgICAgICAgPyBgKHN0YXJ0IG9mIGZyYWdtZW50KWBcclxuICAgICAgICAgICAgICAgICAgICA6IGBgKTtcclxuICAgICAgICB2bm9kZS5lbCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGlzRnJhZ21lbnQpIHtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGV4Y2Vzc2l2ZSBmcmFnbWVudCBub2Rlc1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSBsb2NhdGVDbG9zaW5nQXN5bmNBbmNob3Iobm9kZSk7XHJcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0ICE9PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmUobmV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0ID0gbmV4dFNpYmxpbmcobm9kZSk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcclxuICAgICAgICByZW1vdmUobm9kZSk7XHJcbiAgICAgICAgcGF0Y2gobnVsbCwgdm5vZGUsIGNvbnRhaW5lciwgbmV4dCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkdDb250YWluZXIoY29udGFpbmVyKSwgc2xvdFNjb3BlSWRzKTtcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH07XHJcbiAgICBjb25zdCBsb2NhdGVDbG9zaW5nQXN5bmNBbmNob3IgPSAobm9kZSkgPT4ge1xyXG4gICAgICAgIGxldCBtYXRjaCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgICAgICAgbm9kZSA9IG5leHRTaWJsaW5nKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSAmJiBpc0NvbW1lbnQobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGEgPT09ICdbJylcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YSA9PT0gJ10nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBbaHlkcmF0ZSwgaHlkcmF0ZU5vZGVdO1xyXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xyXG5sZXQgc3VwcG9ydGVkO1xyXG5sZXQgcGVyZjtcclxuZnVuY3Rpb24gc3RhcnRNZWFzdXJlKGluc3RhbmNlLCB0eXBlKSB7XHJcbiAgICBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcucGVyZm9ybWFuY2UgJiYgaXNTdXBwb3J0ZWQoKSkge1xyXG4gICAgICAgIHBlcmYubWFyayhgdnVlLSR7dHlwZX0tJHtpbnN0YW5jZS51aWR9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgIGRldnRvb2xzUGVyZlN0YXJ0KGluc3RhbmNlLCB0eXBlLCBpc1N1cHBvcnRlZCgpID8gcGVyZi5ub3coKSA6IERhdGUubm93KCkpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGVuZE1lYXN1cmUoaW5zdGFuY2UsIHR5cGUpIHtcclxuICAgIGlmIChpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZy5wZXJmb3JtYW5jZSAmJiBpc1N1cHBvcnRlZCgpKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUYWcgPSBgdnVlLSR7dHlwZX0tJHtpbnN0YW5jZS51aWR9YDtcclxuICAgICAgICBjb25zdCBlbmRUYWcgPSBzdGFydFRhZyArIGA6ZW5kYDtcclxuICAgICAgICBwZXJmLm1hcmsoZW5kVGFnKTtcclxuICAgICAgICBwZXJmLm1lYXN1cmUoYDwke2Zvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIGluc3RhbmNlLnR5cGUpfT4gJHt0eXBlfWAsIHN0YXJ0VGFnLCBlbmRUYWcpO1xyXG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XHJcbiAgICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgIGRldnRvb2xzUGVyZkVuZChpbnN0YW5jZSwgdHlwZSwgaXNTdXBwb3J0ZWQoKSA/IHBlcmYubm93KCkgOiBEYXRlLm5vdygpKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcclxuICAgIGlmIChzdXBwb3J0ZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBlcmZvcm1hbmNlKSB7XHJcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICBwZXJmID0gd2luZG93LnBlcmZvcm1hbmNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc3VwcG9ydGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VwcG9ydGVkO1xyXG59XG5cbi8qKlxyXG4gKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGluIGVzbS1idW5kbGVyIGJ1aWxkcy5cclxuICogSXQgaXMgY2FsbGVkIHdoZW4gYSByZW5kZXJlciBpcyBjcmVhdGVkLCBpbiBgYmFzZUNyZWF0ZVJlbmRlcmVyYCBzbyB0aGF0XHJcbiAqIGltcG9ydGluZyBydW50aW1lLWNvcmUgaXMgc2lkZS1lZmZlY3RzIGZyZWUuXHJcbiAqXHJcbiAqIGlzdGFuYnVsLWlnbm9yZS1uZXh0XHJcbiAqL1xyXG5mdW5jdGlvbiBpbml0RmVhdHVyZUZsYWdzKCkge1xyXG4gICAgY29uc3QgbmVlZFdhcm4gPSBbXTtcclxuICAgIGlmICh0eXBlb2YgX19WVUVfT1BUSU9OU19BUElfXyAhPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX09QVElPTlNfQVBJX19gKTtcclxuICAgICAgICBnZXRHbG9iYWxUaGlzKCkuX19WVUVfT1BUSU9OU19BUElfXyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIF9fVlVFX1BST0RfREVWVE9PTFNfXyAhPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX1BST0RfREVWVE9PTFNfX2ApO1xyXG4gICAgICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9QUk9EX0RFVlRPT0xTX18gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgbmVlZFdhcm4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbXVsdGkgPSBuZWVkV2Fybi5sZW5ndGggPiAxO1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgRmVhdHVyZSBmbGFnJHttdWx0aSA/IGBzYCA6IGBgfSAke25lZWRXYXJuLmpvaW4oJywgJyl9ICR7bXVsdGkgPyBgYXJlYCA6IGBpc2B9IG5vdCBleHBsaWNpdGx5IGRlZmluZWQuIFlvdSBhcmUgcnVubmluZyB0aGUgZXNtLWJ1bmRsZXIgYnVpbGQgb2YgVnVlLCBgICtcclxuICAgICAgICAgICAgYHdoaWNoIGV4cGVjdHMgdGhlc2UgY29tcGlsZS10aW1lIGZlYXR1cmUgZmxhZ3MgdG8gYmUgZ2xvYmFsbHkgaW5qZWN0ZWQgYCArXHJcbiAgICAgICAgICAgIGB2aWEgdGhlIGJ1bmRsZXIgY29uZmlnIGluIG9yZGVyIHRvIGdldCBiZXR0ZXIgdHJlZS1zaGFraW5nIGluIHRoZSBgICtcclxuICAgICAgICAgICAgYHByb2R1Y3Rpb24gYnVuZGxlLlxcblxcbmAgK1xyXG4gICAgICAgICAgICBgRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vbGluay52dWVqcy5vcmcvZmVhdHVyZS1mbGFncy5gKTtcclxuICAgIH1cclxufVxuXG5jb25zdCBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QgPSBxdWV1ZUVmZmVjdFdpdGhTdXNwZW5zZVxyXG4gICAgO1xyXG4vKipcclxuICogVGhlIGNyZWF0ZVJlbmRlcmVyIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGdlbmVyaWMgYXJndW1lbnRzOlxyXG4gKiBIb3N0Tm9kZSBhbmQgSG9zdEVsZW1lbnQsIGNvcnJlc3BvbmRpbmcgdG8gTm9kZSBhbmQgRWxlbWVudCB0eXBlcyBpbiB0aGVcclxuICogaG9zdCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGZvciBydW50aW1lLWRvbSwgSG9zdE5vZGUgd291bGQgYmUgdGhlIERPTVxyXG4gKiBgTm9kZWAgaW50ZXJmYWNlIGFuZCBIb3N0RWxlbWVudCB3b3VsZCBiZSB0aGUgRE9NIGBFbGVtZW50YCBpbnRlcmZhY2UuXHJcbiAqXHJcbiAqIEN1c3RvbSByZW5kZXJlcnMgY2FuIHBhc3MgaW4gdGhlIHBsYXRmb3JtIHNwZWNpZmljIHR5cGVzIGxpa2UgdGhpczpcclxuICpcclxuICogYGBgIGpzXHJcbiAqIGNvbnN0IHsgcmVuZGVyLCBjcmVhdGVBcHAgfSA9IGNyZWF0ZVJlbmRlcmVyPE5vZGUsIEVsZW1lbnQ+KHtcclxuICogICBwYXRjaFByb3AsXHJcbiAqICAgLi4ubm9kZU9wc1xyXG4gKiB9KVxyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBiYXNlQ3JlYXRlUmVuZGVyZXIob3B0aW9ucyk7XHJcbn1cclxuLy8gU2VwYXJhdGUgQVBJIGZvciBjcmVhdGluZyBoeWRyYXRpb24tZW5hYmxlZCByZW5kZXJlci5cclxuLy8gSHlkcmF0aW9uIGxvZ2ljIGlzIG9ubHkgdXNlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgbWFraW5nIGl0XHJcbi8vIHRyZWUtc2hha2FibGUuXHJcbmZ1bmN0aW9uIGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBiYXNlQ3JlYXRlUmVuZGVyZXIob3B0aW9ucywgY3JlYXRlSHlkcmF0aW9uRnVuY3Rpb25zKTtcclxufVxyXG4vLyBpbXBsZW1lbnRhdGlvblxyXG5mdW5jdGlvbiBiYXNlQ3JlYXRlUmVuZGVyZXIob3B0aW9ucywgY3JlYXRlSHlkcmF0aW9uRm5zKSB7XHJcbiAgICAvLyBjb21waWxlLXRpbWUgZmVhdHVyZSBmbGFncyBjaGVja1xyXG4gICAge1xyXG4gICAgICAgIGluaXRGZWF0dXJlRmxhZ3MoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRhcmdldCA9IGdldEdsb2JhbFRoaXMoKTtcclxuICAgIHRhcmdldC5fX1ZVRV9fID0gdHJ1ZTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgc2V0RGV2dG9vbHNIb29rKHRhcmdldC5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fLCB0YXJnZXQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBpbnNlcnQ6IGhvc3RJbnNlcnQsIHJlbW92ZTogaG9zdFJlbW92ZSwgcGF0Y2hQcm9wOiBob3N0UGF0Y2hQcm9wLCBjcmVhdGVFbGVtZW50OiBob3N0Q3JlYXRlRWxlbWVudCwgY3JlYXRlVGV4dDogaG9zdENyZWF0ZVRleHQsIGNyZWF0ZUNvbW1lbnQ6IGhvc3RDcmVhdGVDb21tZW50LCBzZXRUZXh0OiBob3N0U2V0VGV4dCwgc2V0RWxlbWVudFRleHQ6IGhvc3RTZXRFbGVtZW50VGV4dCwgcGFyZW50Tm9kZTogaG9zdFBhcmVudE5vZGUsIG5leHRTaWJsaW5nOiBob3N0TmV4dFNpYmxpbmcsIHNldFNjb3BlSWQ6IGhvc3RTZXRTY29wZUlkID0gTk9PUCwgY2xvbmVOb2RlOiBob3N0Q2xvbmVOb2RlLCBpbnNlcnRTdGF0aWNDb250ZW50OiBob3N0SW5zZXJ0U3RhdGljQ29udGVudCB9ID0gb3B0aW9ucztcclxuICAgIC8vIE5vdGU6IGZ1bmN0aW9ucyBpbnNpZGUgdGhpcyBjbG9zdXJlIHNob3VsZCB1c2UgYGNvbnN0IHh4eCA9ICgpID0+IHt9YFxyXG4gICAgLy8gc3R5bGUgaW4gb3JkZXIgdG8gcHJldmVudCBiZWluZyBpbmxpbmVkIGJ5IG1pbmlmaWVycy5cclxuICAgIGNvbnN0IHBhdGNoID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IgPSBudWxsLCBwYXJlbnRDb21wb25lbnQgPSBudWxsLCBwYXJlbnRTdXNwZW5zZSA9IG51bGwsIGlzU1ZHID0gZmFsc2UsIHNsb3RTY29wZUlkcyA9IG51bGwsIG9wdGltaXplZCA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBpc0htclVwZGF0aW5nID8gZmFsc2UgOiAhIW4yLmR5bmFtaWNDaGlsZHJlbikgPT4ge1xyXG4gICAgICAgIGlmIChuMSA9PT0gbjIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwYXRjaGluZyAmIG5vdCBzYW1lIHR5cGUsIHVubW91bnQgb2xkIHRyZWVcclxuICAgICAgICBpZiAobjEgJiYgIWlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XHJcbiAgICAgICAgICAgIGFuY2hvciA9IGdldE5leHRIb3N0Tm9kZShuMSk7XHJcbiAgICAgICAgICAgIHVubW91bnQobjEsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xyXG4gICAgICAgICAgICBuMSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuMi5wYXRjaEZsYWcgPT09IC0yIC8qIFBhdGNoRmxhZ3MuQkFJTCAqLykge1xyXG4gICAgICAgICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbjIuZHluYW1pY0NoaWxkcmVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCByZWYsIHNoYXBlRmxhZyB9ID0gbjI7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVGV4dDpcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0KG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ29tbWVudDpcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tZW50Tm9kZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFN0YXRpYzpcclxuICAgICAgICAgICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW91bnRTdGF0aWNOb2RlKG4yLCBjb250YWluZXIsIGFuY2hvciwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0aWNOb2RlKG4xLCBuMiwgY29udGFpbmVyLCBpc1NWRyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGcmFnbWVudDpcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGcmFnbWVudChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRWxlbWVudChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NDb21wb25lbnQobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlRmxhZyAmIDY0IC8qIFNoYXBlRmxhZ3MuVEVMRVBPUlQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlLnByb2Nlc3MobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBpbnRlcm5hbHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlLnByb2Nlc3MobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBpbnRlcm5hbHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2FybignSW52YWxpZCBWTm9kZSB0eXBlOicsIHR5cGUsIGAoJHt0eXBlb2YgdHlwZX0pYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCByZWZcclxuICAgICAgICBpZiAocmVmICE9IG51bGwgJiYgcGFyZW50Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHNldFJlZihyZWYsIG4xICYmIG4xLnJlZiwgcGFyZW50U3VzcGVuc2UsIG4yIHx8IG4xLCAhbjIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBwcm9jZXNzVGV4dCA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKSA9PiB7XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgaG9zdEluc2VydCgobjIuZWwgPSBob3N0Q3JlYXRlVGV4dChuMi5jaGlsZHJlbikpLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IChuMi5lbCA9IG4xLmVsKTtcclxuICAgICAgICAgICAgaWYgKG4yLmNoaWxkcmVuICE9PSBuMS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaG9zdFNldFRleHQoZWwsIG4yLmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBwcm9jZXNzQ29tbWVudE5vZGUgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvcikgPT4ge1xyXG4gICAgICAgIGlmIChuMSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoKG4yLmVsID0gaG9zdENyZWF0ZUNvbW1lbnQobjIuY2hpbGRyZW4gfHwgJycpKSwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBzdXBwb3J0IGZvciBkeW5hbWljIGNvbW1lbnRzXHJcbiAgICAgICAgICAgIG4yLmVsID0gbjEuZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vdW50U3RhdGljTm9kZSA9IChuMiwgY29udGFpbmVyLCBhbmNob3IsIGlzU1ZHKSA9PiB7XHJcbiAgICAgICAgW24yLmVsLCBuMi5hbmNob3JdID0gaG9zdEluc2VydFN0YXRpY0NvbnRlbnQobjIuY2hpbGRyZW4sIGNvbnRhaW5lciwgYW5jaG9yLCBpc1NWRywgbjIuZWwsIG4yLmFuY2hvcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXYgLyBITVIgb25seVxyXG4gICAgICovXHJcbiAgICBjb25zdCBwYXRjaFN0YXRpY05vZGUgPSAobjEsIG4yLCBjb250YWluZXIsIGlzU1ZHKSA9PiB7XHJcbiAgICAgICAgLy8gc3RhdGljIG5vZGVzIGFyZSBvbmx5IHBhdGNoZWQgZHVyaW5nIGRldiBmb3IgSE1SXHJcbiAgICAgICAgaWYgKG4yLmNoaWxkcmVuICE9PSBuMS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBob3N0TmV4dFNpYmxpbmcobjEuYW5jaG9yKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nXHJcbiAgICAgICAgICAgIHJlbW92ZVN0YXRpY05vZGUobjEpO1xyXG4gICAgICAgICAgICBbbjIuZWwsIG4yLmFuY2hvcl0gPSBob3N0SW5zZXJ0U3RhdGljQ29udGVudChuMi5jaGlsZHJlbiwgY29udGFpbmVyLCBhbmNob3IsIGlzU1ZHKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG4yLmVsID0gbjEuZWw7XHJcbiAgICAgICAgICAgIG4yLmFuY2hvciA9IG4xLmFuY2hvcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgbW92ZVN0YXRpY05vZGUgPSAoeyBlbCwgYW5jaG9yIH0sIGNvbnRhaW5lciwgbmV4dFNpYmxpbmcpID0+IHtcclxuICAgICAgICBsZXQgbmV4dDtcclxuICAgICAgICB3aGlsZSAoZWwgJiYgZWwgIT09IGFuY2hvcikge1xyXG4gICAgICAgICAgICBuZXh0ID0gaG9zdE5leHRTaWJsaW5nKGVsKTtcclxuICAgICAgICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBuZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIGVsID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaG9zdEluc2VydChhbmNob3IsIGNvbnRhaW5lciwgbmV4dFNpYmxpbmcpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlbW92ZVN0YXRpY05vZGUgPSAoeyBlbCwgYW5jaG9yIH0pID0+IHtcclxuICAgICAgICBsZXQgbmV4dDtcclxuICAgICAgICB3aGlsZSAoZWwgJiYgZWwgIT09IGFuY2hvcikge1xyXG4gICAgICAgICAgICBuZXh0ID0gaG9zdE5leHRTaWJsaW5nKGVsKTtcclxuICAgICAgICAgICAgaG9zdFJlbW92ZShlbCk7XHJcbiAgICAgICAgICAgIGVsID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaG9zdFJlbW92ZShhbmNob3IpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGlzU1ZHID0gaXNTVkcgfHwgbjIudHlwZSA9PT0gJ3N2Zyc7XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgbW91bnRFbGVtZW50KG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGNoRWxlbWVudChuMSwgbjIsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vdW50RWxlbWVudCA9ICh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGxldCBlbDtcclxuICAgICAgICBsZXQgdm5vZGVIb29rO1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHNoYXBlRmxhZywgdHJhbnNpdGlvbiwgcGF0Y2hGbGFnLCBkaXJzIH0gPSB2bm9kZTtcclxuICAgICAgICBpZiAoIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICB2bm9kZS5lbCAmJlxyXG4gICAgICAgICAgICBob3N0Q2xvbmVOb2RlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgcGF0Y2hGbGFnID09PSAtMSAvKiBQYXRjaEZsYWdzLkhPSVNURUQgKi8pIHtcclxuICAgICAgICAgICAgLy8gSWYgYSB2bm9kZSBoYXMgbm9uLW51bGwgZWwsIGl0IG1lYW5zIGl0J3MgYmVpbmcgcmV1c2VkLlxyXG4gICAgICAgICAgICAvLyBPbmx5IHN0YXRpYyB2bm9kZXMgY2FuIGJlIHJldXNlZCwgc28gaXRzIG1vdW50ZWQgRE9NIG5vZGVzIHNob3VsZCBiZVxyXG4gICAgICAgICAgICAvLyBleGFjdGx5IHRoZSBzYW1lLCBhbmQgd2UgY2FuIHNpbXBseSBkbyBhIGNsb25lIGhlcmUuXHJcbiAgICAgICAgICAgIC8vIG9ubHkgZG8gdGhpcyBpbiBwcm9kdWN0aW9uIHNpbmNlIGNsb25lZCB0cmVlcyBjYW5ub3QgYmUgSE1SIHVwZGF0ZWQuXHJcbiAgICAgICAgICAgIGVsID0gdm5vZGUuZWwgPSBob3N0Q2xvbmVOb2RlKHZub2RlLmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsID0gdm5vZGUuZWwgPSBob3N0Q3JlYXRlRWxlbWVudCh2bm9kZS50eXBlLCBpc1NWRywgcHJvcHMgJiYgcHJvcHMuaXMsIHByb3BzKTtcclxuICAgICAgICAgICAgLy8gbW91bnQgY2hpbGRyZW4gZmlyc3QsIHNpbmNlIHNvbWUgcHJvcHMgbWF5IHJlbHkgb24gY2hpbGQgY29udGVudFxyXG4gICAgICAgICAgICAvLyBiZWluZyBhbHJlYWR5IHJlbmRlcmVkLCBlLmcuIGA8c2VsZWN0IHZhbHVlPmBcclxuICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDggLyogU2hhcGVGbGFncy5URVhUX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICBob3N0U2V0RWxlbWVudFRleHQoZWwsIHZub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudENoaWxkcmVuKHZub2RlLmNoaWxkcmVuLCBlbCwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcgJiYgdHlwZSAhPT0gJ2ZvcmVpZ25PYmplY3QnLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ2NyZWF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBwcm9wc1xyXG4gICAgICAgICAgICBpZiAocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbHVlJyAmJiAhaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBrZXksIG51bGwsIHByb3BzW2tleV0sIGlzU1ZHLCB2bm9kZS5jaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFNwZWNpYWwgY2FzZSBmb3Igc2V0dGluZyB2YWx1ZSBvbiBET00gZWxlbWVudHM6XHJcbiAgICAgICAgICAgICAgICAgKiAtIGl0IGNhbiBiZSBvcmRlci1zZW5zaXRpdmUgKGUuZy4gc2hvdWxkIGJlIHNldCAqYWZ0ZXIqIG1pbi9tYXgsICMyMzI1LCAjNDAyNClcclxuICAgICAgICAgICAgICAgICAqIC0gaXQgbmVlZHMgdG8gYmUgZm9yY2VkICgjMTQ3MSlcclxuICAgICAgICAgICAgICAgICAqICMyMzUzIHByb3Bvc2VzIGFkZGluZyBhbm90aGVyIHJlbmRlcmVyIG9wdGlvbiB0byBjb25maWd1cmUgdGhpcywgYnV0XHJcbiAgICAgICAgICAgICAgICAgKiB0aGUgcHJvcGVydGllcyBhZmZlY3RzIGFyZSBzbyBmaW5pdGUgaXQgaXMgd29ydGggc3BlY2lhbCBjYXNpbmcgaXRcclxuICAgICAgICAgICAgICAgICAqIGhlcmUgdG8gcmVkdWNlIHRoZSBjb21wbGV4aXR5LiAoU3BlY2lhbCBjYXNpbmcgaXQgYWxzbyBzaG91bGQgbm90XHJcbiAgICAgICAgICAgICAgICAgKiBhZmZlY3Qgbm9uLURPTSByZW5kZXJlcnMpXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGlmICgndmFsdWUnIGluIHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgJ3ZhbHVlJywgbnVsbCwgcHJvcHMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCh2bm9kZUhvb2sgPSBwcm9wcy5vblZub2RlQmVmb3JlTW91bnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2NvcGVJZFxyXG4gICAgICAgICAgICBzZXRTY29wZUlkKGVsLCB2bm9kZSwgdm5vZGUuc2NvcGVJZCwgc2xvdFNjb3BlSWRzLCBwYXJlbnRDb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdfX3Zub2RlJywge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZub2RlLFxyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ19fdnVlUGFyZW50Q29tcG9uZW50Jywge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcmVudENvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlycykge1xyXG4gICAgICAgICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsICdiZWZvcmVNb3VudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAjMTU4MyBGb3IgaW5zaWRlIHN1c3BlbnNlICsgc3VzcGVuc2Ugbm90IHJlc29sdmVkIGNhc2UsIGVudGVyIGhvb2sgc2hvdWxkIGNhbGwgd2hlbiBzdXNwZW5zZSByZXNvbHZlZFxyXG4gICAgICAgIC8vICMxNjg5IEZvciBpbnNpZGUgc3VzcGVuc2UgKyBzdXNwZW5zZSByZXNvbHZlZCBjYXNlLCBqdXN0IGNhbGwgaXRcclxuICAgICAgICBjb25zdCBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9ICghcGFyZW50U3VzcGVuc2UgfHwgKHBhcmVudFN1c3BlbnNlICYmICFwYXJlbnRTdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSkgJiZcclxuICAgICAgICAgICAgdHJhbnNpdGlvbiAmJlxyXG4gICAgICAgICAgICAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQ7XHJcbiAgICAgICAgaWYgKG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzKSB7XHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgaWYgKCh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlTW91bnRlZCkgfHxcclxuICAgICAgICAgICAgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgfHxcclxuICAgICAgICAgICAgZGlycykge1xyXG4gICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdm5vZGVIb29rICYmIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgJiYgdHJhbnNpdGlvbi5lbnRlcihlbCk7XHJcbiAgICAgICAgICAgICAgICBkaXJzICYmIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgJ21vdW50ZWQnKTtcclxuICAgICAgICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBzZXRTY29wZUlkID0gKGVsLCB2bm9kZSwgc2NvcGVJZCwgc2xvdFNjb3BlSWRzLCBwYXJlbnRDb21wb25lbnQpID0+IHtcclxuICAgICAgICBpZiAoc2NvcGVJZCkge1xyXG4gICAgICAgICAgICBob3N0U2V0U2NvcGVJZChlbCwgc2NvcGVJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzbG90U2NvcGVJZHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbG90U2NvcGVJZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGhvc3RTZXRTY29wZUlkKGVsLCBzbG90U2NvcGVJZHNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgbGV0IHN1YlRyZWUgPSBwYXJlbnRDb21wb25lbnQuc3ViVHJlZTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgc3ViVHJlZS5wYXRjaEZsYWcgPiAwICYmXHJcbiAgICAgICAgICAgICAgICBzdWJUcmVlLnBhdGNoRmxhZyAmIDIwNDggLyogUGF0Y2hGbGFncy5ERVZfUk9PVF9GUkFHTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgc3ViVHJlZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2luZ2xlUm9vdChzdWJUcmVlLmNoaWxkcmVuKSB8fCBzdWJUcmVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2bm9kZSA9PT0gc3ViVHJlZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Vk5vZGUgPSBwYXJlbnRDb21wb25lbnQudm5vZGU7XHJcbiAgICAgICAgICAgICAgICBzZXRTY29wZUlkKGVsLCBwYXJlbnRWTm9kZSwgcGFyZW50Vk5vZGUuc2NvcGVJZCwgcGFyZW50Vk5vZGUuc2xvdFNjb3BlSWRzLCBwYXJlbnRDb21wb25lbnQucGFyZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBtb3VudENoaWxkcmVuID0gKGNoaWxkcmVuLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBzdGFydCA9IDApID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IChjaGlsZHJlbltpXSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgPyBjbG9uZUlmTW91bnRlZChjaGlsZHJlbltpXSlcclxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplVk5vZGUoY2hpbGRyZW5baV0pKTtcclxuICAgICAgICAgICAgcGF0Y2gobnVsbCwgY2hpbGQsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBwYXRjaEVsZW1lbnQgPSAobjEsIG4yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBjb25zdCBlbCA9IChuMi5lbCA9IG4xLmVsKTtcclxuICAgICAgICBsZXQgeyBwYXRjaEZsYWcsIGR5bmFtaWNDaGlsZHJlbiwgZGlycyB9ID0gbjI7XHJcbiAgICAgICAgLy8gIzE0MjYgdGFrZSB0aGUgb2xkIHZub2RlJ3MgcGF0Y2ggZmxhZyBpbnRvIGFjY291bnQgc2luY2UgdXNlciBtYXkgY2xvbmUgYVxyXG4gICAgICAgIC8vIGNvbXBpbGVyLWdlbmVyYXRlZCB2bm9kZSwgd2hpY2ggZGUtb3B0cyB0byBGVUxMX1BST1BTXHJcbiAgICAgICAgcGF0Y2hGbGFnIHw9IG4xLnBhdGNoRmxhZyAmIDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqLztcclxuICAgICAgICBjb25zdCBvbGRQcm9wcyA9IG4xLnByb3BzIHx8IEVNUFRZX09CSjtcclxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IG4yLnByb3BzIHx8IEVNUFRZX09CSjtcclxuICAgICAgICBsZXQgdm5vZGVIb29rO1xyXG4gICAgICAgIC8vIGRpc2FibGUgcmVjdXJzZSBpbiBiZWZvcmVVcGRhdGUgaG9va3NcclxuICAgICAgICBwYXJlbnRDb21wb25lbnQgJiYgdG9nZ2xlUmVjdXJzZShwYXJlbnRDb21wb25lbnQsIGZhbHNlKTtcclxuICAgICAgICBpZiAoKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpKSB7XHJcbiAgICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgbjIsIG4xKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpcnMpIHtcclxuICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayhuMiwgbjEsIHBhcmVudENvbXBvbmVudCwgJ2JlZm9yZVVwZGF0ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnRDb21wb25lbnQgJiYgdG9nZ2xlUmVjdXJzZShwYXJlbnRDb21wb25lbnQsIHRydWUpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNIbXJVcGRhdGluZykge1xyXG4gICAgICAgICAgICAvLyBITVIgdXBkYXRlZCwgZm9yY2UgZnVsbCBkaWZmXHJcbiAgICAgICAgICAgIHBhdGNoRmxhZyA9IDA7XHJcbiAgICAgICAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcmVDaGlsZHJlblNWRyA9IGlzU1ZHICYmIG4yLnR5cGUgIT09ICdmb3JlaWduT2JqZWN0JztcclxuICAgICAgICBpZiAoZHluYW1pY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihuMS5keW5hbWljQ2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiwgZWwsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGFyZUNoaWxkcmVuU1ZHLCBzbG90U2NvcGVJZHMpO1xyXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHBhcmVudENvbXBvbmVudCAmJiBwYXJlbnRDb21wb25lbnQudHlwZS5fX2htcklkKSB7XHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIW9wdGltaXplZCkge1xyXG4gICAgICAgICAgICAvLyBmdWxsIGRpZmZcclxuICAgICAgICAgICAgcGF0Y2hDaGlsZHJlbihuMSwgbjIsIGVsLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBhcmVDaGlsZHJlblNWRywgc2xvdFNjb3BlSWRzLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXRjaEZsYWcgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBhIHBhdGNoRmxhZyBtZWFucyB0aGlzIGVsZW1lbnQncyByZW5kZXIgY29kZSB3YXNcclxuICAgICAgICAgICAgLy8gZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBhbmQgY2FuIHRha2UgdGhlIGZhc3QgcGF0aC5cclxuICAgICAgICAgICAgLy8gaW4gdGhpcyBwYXRoIG9sZCBub2RlIGFuZCBuZXcgbm9kZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBzYW1lIHNoYXBlXHJcbiAgICAgICAgICAgIC8vIChpLmUuIGF0IHRoZSBleGFjdCBzYW1lIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgJiAxNiAvKiBQYXRjaEZsYWdzLkZVTExfUFJPUFMgKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgcHJvcHMgY29udGFpbiBkeW5hbWljIGtleXMsIGZ1bGwgZGlmZiBuZWVkZWRcclxuICAgICAgICAgICAgICAgIHBhdGNoUHJvcHMoZWwsIG4yLCBvbGRQcm9wcywgbmV3UHJvcHMsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsYXNzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGZsYWcgaXMgbWF0Y2hlZCB3aGVuIHRoZSBlbGVtZW50IGhhcyBkeW5hbWljIGNsYXNzIGJpbmRpbmdzLlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDIgLyogUGF0Y2hGbGFncy5DTEFTUyAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRQcm9wcy5jbGFzcyAhPT0gbmV3UHJvcHMuY2xhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgJ2NsYXNzJywgbnVsbCwgbmV3UHJvcHMuY2xhc3MsIGlzU1ZHKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBzdHlsZVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBmbGFnIGlzIG1hdGNoZWQgd2hlbiB0aGUgZWxlbWVudCBoYXMgZHluYW1pYyBzdHlsZSBiaW5kaW5nc1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDQgLyogUGF0Y2hGbGFncy5TVFlMRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsICdzdHlsZScsIG9sZFByb3BzLnN0eWxlLCBuZXdQcm9wcy5zdHlsZSwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gcHJvcHNcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgZmxhZyBpcyBtYXRjaGVkIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGR5bmFtaWMgcHJvcC9hdHRyIGJpbmRpbmdzXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlciB0aGFuIGNsYXNzIGFuZCBzdHlsZS4gVGhlIGtleXMgb2YgZHluYW1pYyBwcm9wL2F0dHJzIGFyZSBzYXZlZCBmb3JcclxuICAgICAgICAgICAgICAgIC8vIGZhc3RlciBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlIGR5bmFtaWMga2V5cyBsaWtlIDpbZm9vXT1cImJhclwiIHdpbGwgY2F1c2UgdGhpcyBvcHRpbWl6YXRpb24gdG9cclxuICAgICAgICAgICAgICAgIC8vIGJhaWwgb3V0IGFuZCBnbyB0aHJvdWdoIGEgZnVsbCBkaWZmIGJlY2F1c2Ugd2UgbmVlZCB0byB1bnNldCB0aGUgb2xkIGtleVxyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDggLyogUGF0Y2hGbGFncy5QUk9QUyAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmbGFnIGlzIHByZXNlbnQgdGhlbiBkeW5hbWljUHJvcHMgbXVzdCBiZSBub24tbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzVG9VcGRhdGUgPSBuMi5keW5hbWljUHJvcHM7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1RvVXBkYXRlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHByb3BzVG9VcGRhdGVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBvbGRQcm9wc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gbmV3UHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzE0NzEgZm9yY2UgcGF0Y2ggdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHByZXYgfHwga2V5ID09PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBrZXksIHByZXYsIG5leHQsIGlzU1ZHLCBuMS5jaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgICAgIC8vIFRoaXMgZmxhZyBpcyBtYXRjaGVkIHdoZW4gdGhlIGVsZW1lbnQgaGFzIG9ubHkgZHluYW1pYyB0ZXh0IGNoaWxkcmVuLlxyXG4gICAgICAgICAgICBpZiAocGF0Y2hGbGFnICYgMSAvKiBQYXRjaEZsYWdzLlRFWFQgKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChuMS5jaGlsZHJlbiAhPT0gbjIuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBob3N0U2V0RWxlbWVudFRleHQoZWwsIG4yLmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghb3B0aW1pemVkICYmIGR5bmFtaWNDaGlsZHJlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIHVub3B0aW1pemVkLCBmdWxsIGRpZmZcclxuICAgICAgICAgICAgcGF0Y2hQcm9wcyhlbCwgbjIsIG9sZFByb3BzLCBuZXdQcm9wcywgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVVcGRhdGVkKSB8fCBkaXJzKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZUhvb2sgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCBuMiwgbjEpO1xyXG4gICAgICAgICAgICAgICAgZGlycyAmJiBpbnZva2VEaXJlY3RpdmVIb29rKG4yLCBuMSwgcGFyZW50Q29tcG9uZW50LCAndXBkYXRlZCcpO1xyXG4gICAgICAgICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIFRoZSBmYXN0IHBhdGggZm9yIGJsb2Nrcy5cclxuICAgIGNvbnN0IHBhdGNoQmxvY2tDaGlsZHJlbiA9IChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIGZhbGxiYWNrQ29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRWTm9kZSA9IG9sZENoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdWTm9kZSA9IG5ld0NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNvbnRhaW5lciAocGFyZW50IGVsZW1lbnQpIGZvciB0aGUgcGF0Y2guXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFxyXG4gICAgICAgICAgICAvLyBvbGRWTm9kZSBtYXkgYmUgYW4gZXJyb3JlZCBhc3luYyBzZXR1cCgpIGNvbXBvbmVudCBpbnNpZGUgU3VzcGVuc2VcclxuICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCBub3QgaGF2ZSBhIG1vdW50ZWQgZWxlbWVudFxyXG4gICAgICAgICAgICBvbGRWTm9kZS5lbCAmJlxyXG4gICAgICAgICAgICAgICAgLy8gLSBJbiB0aGUgY2FzZSBvZiBhIEZyYWdtZW50LCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGFjdHVhbCBwYXJlbnRcclxuICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBGcmFnbWVudCBpdHNlbGYgc28gaXQgY2FuIG1vdmUgaXRzIGNoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgKG9sZFZOb2RlLnR5cGUgPT09IEZyYWdtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLSBJbiB0aGUgY2FzZSBvZiBkaWZmZXJlbnQgbm9kZXMsIHRoZXJlIGlzIGdvaW5nIHRvIGJlIGEgcmVwbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBhbHNvIHJlcXVpcmVzIHRoZSBjb3JyZWN0IHBhcmVudCBjb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAhaXNTYW1lVk5vZGVUeXBlKG9sZFZOb2RlLCBuZXdWTm9kZSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAvLyAtIEluIHRoZSBjYXNlIG9mIGEgY29tcG9uZW50LCBpdCBjb3VsZCBjb250YWluIGFueXRoaW5nLlxyXG4gICAgICAgICAgICAgICAgICAgIG9sZFZOb2RlLnNoYXBlRmxhZyAmICg2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovIHwgNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqLykpXHJcbiAgICAgICAgICAgICAgICA/IGhvc3RQYXJlbnROb2RlKG9sZFZOb2RlLmVsKVxyXG4gICAgICAgICAgICAgICAgOiAvLyBJbiBvdGhlciBjYXNlcywgdGhlIHBhcmVudCBjb250YWluZXIgaXMgbm90IGFjdHVhbGx5IHVzZWQgc28gd2VcclxuICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHBhc3MgdGhlIGJsb2NrIGVsZW1lbnQgaGVyZSB0byBhdm9pZCBhIERPTSBwYXJlbnROb2RlIGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tDb250YWluZXI7XHJcbiAgICAgICAgICAgIHBhdGNoKG9sZFZOb2RlLCBuZXdWTm9kZSwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGF0Y2hQcm9wcyA9IChlbCwgdm5vZGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcpID0+IHtcclxuICAgICAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1Byb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgaXMgbm90IHZhbGlkIHByb3BcclxuICAgICAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkUHJvcChrZXkpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5ld1Byb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gb2xkUHJvcHNba2V5XTtcclxuICAgICAgICAgICAgICAgIC8vIGRlZmVyIHBhdGNoaW5nIHZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gcHJldiAmJiBrZXkgIT09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBrZXksIHByZXYsIG5leHQsIGlzU1ZHLCB2bm9kZS5jaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2xkUHJvcHMgIT09IEVNUFRZX09CSikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2xkUHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWRQcm9wKGtleSkgJiYgIShrZXkgaW4gbmV3UHJvcHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoZWwsIGtleSwgb2xkUHJvcHNba2V5XSwgbnVsbCwgaXNTVkcsIHZub2RlLmNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB1bm1vdW50Q2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBuZXdQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgJ3ZhbHVlJywgb2xkUHJvcHMudmFsdWUsIG5ld1Byb3BzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBwcm9jZXNzRnJhZ21lbnQgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEFuY2hvciA9IChuMi5lbCA9IG4xID8gbjEuZWwgOiBob3N0Q3JlYXRlVGV4dCgnJykpO1xyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50RW5kQW5jaG9yID0gKG4yLmFuY2hvciA9IG4xID8gbjEuYW5jaG9yIDogaG9zdENyZWF0ZVRleHQoJycpKTtcclxuICAgICAgICBsZXQgeyBwYXRjaEZsYWcsIGR5bmFtaWNDaGlsZHJlbiwgc2xvdFNjb3BlSWRzOiBmcmFnbWVudFNsb3RTY29wZUlkcyB9ID0gbjI7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAvLyAjNTUyMyBkZXYgcm9vdCBmcmFnbWVudCBtYXkgaW5oZXJpdCBkaXJlY3RpdmVzXHJcbiAgICAgICAgICAgIChpc0htclVwZGF0aW5nIHx8IHBhdGNoRmxhZyAmIDIwNDggLyogUGF0Y2hGbGFncy5ERVZfUk9PVF9GUkFHTUVOVCAqLykpIHtcclxuICAgICAgICAgICAgLy8gSE1SIHVwZGF0ZWQgLyBEZXYgcm9vdCBmcmFnbWVudCAody8gY29tbWVudHMpLCBmb3JjZSBmdWxsIGRpZmZcclxuICAgICAgICAgICAgcGF0Y2hGbGFnID0gMDtcclxuICAgICAgICAgICAgb3B0aW1pemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgYSBzbG90IGZyYWdtZW50IHdpdGggOnNsb3R0ZWQgc2NvcGUgaWRzXHJcbiAgICAgICAgaWYgKGZyYWdtZW50U2xvdFNjb3BlSWRzKSB7XHJcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyA9IHNsb3RTY29wZUlkc1xyXG4gICAgICAgICAgICAgICAgPyBzbG90U2NvcGVJZHMuY29uY2F0KGZyYWdtZW50U2xvdFNjb3BlSWRzKVxyXG4gICAgICAgICAgICAgICAgOiBmcmFnbWVudFNsb3RTY29wZUlkcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgaG9zdEluc2VydChmcmFnbWVudFN0YXJ0QW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoZnJhZ21lbnRFbmRBbmNob3IsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgLy8gYSBmcmFnbWVudCBjYW4gb25seSBoYXZlIGFycmF5IGNoaWxkcmVuXHJcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkgYXJlIGVpdGhlciBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBpbXBsaWNpdGx5IGNyZWF0ZWRcclxuICAgICAgICAgICAgLy8gZnJvbSBhcnJheXMuXHJcbiAgICAgICAgICAgIG1vdW50Q2hpbGRyZW4objIuY2hpbGRyZW4sIGNvbnRhaW5lciwgZnJhZ21lbnRFbmRBbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocGF0Y2hGbGFnID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgcGF0Y2hGbGFnICYgNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi8gJiZcclxuICAgICAgICAgICAgICAgIGR5bmFtaWNDaGlsZHJlbiAmJlxyXG4gICAgICAgICAgICAgICAgLy8gIzI3MTUgdGhlIHByZXZpb3VzIGZyYWdtZW50IGNvdWxkJ3ZlIGJlZW4gYSBCQUlMZWQgb25lIGFzIGEgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAvLyBvZiByZW5kZXJTbG90KCkgd2l0aCBubyB2YWxpZCBjaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgbjEuZHluYW1pY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhIHN0YWJsZSBmcmFnbWVudCAodGVtcGxhdGUgcm9vdCBvciA8dGVtcGxhdGUgdi1mb3I+KSBkb2Vzbid0IG5lZWQgdG9cclxuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGNoaWxkcmVuIG9yZGVyLCBidXQgaXQgbWF5IGNvbnRhaW4gZHluYW1pY0NoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgcGF0Y2hCbG9ja0NoaWxkcmVuKG4xLmR5bmFtaWNDaGlsZHJlbiwgZHluYW1pY0NoaWxkcmVuLCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBwYXJlbnRDb21wb25lbnQgJiYgcGFyZW50Q29tcG9uZW50LnR5cGUuX19obXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4objEsIG4yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgLy8gIzIwODAgaWYgdGhlIHN0YWJsZSBmcmFnbWVudCBoYXMgYSBrZXksIGl0J3MgYSA8dGVtcGxhdGUgdi1mb3I+IHRoYXQgbWF5XHJcbiAgICAgICAgICAgICAgICAvLyAgZ2V0IG1vdmVkIGFyb3VuZC4gTWFrZSBzdXJlIGFsbCByb290IGxldmVsIHZub2RlcyBpbmhlcml0IGVsLlxyXG4gICAgICAgICAgICAgICAgLy8gIzIxMzQgb3IgaWYgaXQncyBhIGNvbXBvbmVudCByb290LCBpdCBtYXkgYWxzbyBnZXQgbW92ZWQgYXJvdW5kXHJcbiAgICAgICAgICAgICAgICAvLyBhcyB0aGUgY29tcG9uZW50IGlzIGJlaW5nIG1vdmVkLlxyXG4gICAgICAgICAgICAgICAgbjIua2V5ICE9IG51bGwgfHxcclxuICAgICAgICAgICAgICAgICAgICAocGFyZW50Q29tcG9uZW50ICYmIG4yID09PSBwYXJlbnRDb21wb25lbnQuc3ViVHJlZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMiwgdHJ1ZSAvKiBzaGFsbG93ICovKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGtleWVkIC8gdW5rZXllZCwgb3IgbWFudWFsIGZyYWdtZW50cy5cclxuICAgICAgICAgICAgICAgIC8vIGZvciBrZXllZCAmIHVua2V5ZWQsIHNpbmNlIHRoZXkgYXJlIGNvbXBpbGVyIGdlbmVyYXRlZCBmcm9tIHYtZm9yLFxyXG4gICAgICAgICAgICAgICAgLy8gZWFjaCBjaGlsZCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgYmxvY2sgc28gdGhlIGZyYWdtZW50IHdpbGwgbmV2ZXJcclxuICAgICAgICAgICAgICAgIC8vIGhhdmUgZHluYW1pY0NoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgcGF0Y2hDaGlsZHJlbihuMSwgbjIsIGNvbnRhaW5lciwgZnJhZ21lbnRFbmRBbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudCA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBuMi5zbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHM7XHJcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKG4yLnNoYXBlRmxhZyAmIDUxMiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVF9LRVBUX0FMSVZFICovKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRDb21wb25lbnQuY3R4LmFjdGl2YXRlKG4yLCBjb250YWluZXIsIGFuY2hvciwgaXNTVkcsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudENvbXBvbmVudChuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB1cGRhdGVDb21wb25lbnQobjEsIG4yLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBtb3VudENvbXBvbmVudCA9IChpbml0aWFsVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSAoaW5pdGlhbFZOb2RlLmNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlKGluaXRpYWxWTm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSkpO1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaW5zdGFuY2UudHlwZS5fX2htcklkKSB7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVySE1SKGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQoaW5pdGlhbFZOb2RlKTtcclxuICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgbW91bnRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5qZWN0IHJlbmRlcmVyIGludGVybmFscyBmb3Iga2VlcEFsaXZlXHJcbiAgICAgICAgaWYgKGlzS2VlcEFsaXZlKGluaXRpYWxWTm9kZSkpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UuY3R4LnJlbmRlcmVyID0gaW50ZXJuYWxzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXNvbHZlIHByb3BzIGFuZCBzbG90cyBmb3Igc2V0dXAgY29udGV4dFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgaW5pdGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldHVwQ29tcG9uZW50KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYGluaXRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXR1cCgpIGlzIGFzeW5jLiBUaGlzIGNvbXBvbmVudCByZWxpZXMgb24gYXN5bmMgbG9naWMgdG8gYmUgcmVzb2x2ZWRcclxuICAgICAgICAvLyBiZWZvcmUgcHJvY2VlZGluZ1xyXG4gICAgICAgIGlmIChpbnN0YW5jZS5hc3luY0RlcCkge1xyXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSAmJiBwYXJlbnRTdXNwZW5zZS5yZWdpc3RlckRlcChpbnN0YW5jZSwgc2V0dXBSZW5kZXJFZmZlY3QpO1xyXG4gICAgICAgICAgICAvLyBHaXZlIGl0IGEgcGxhY2Vob2xkZXIgaWYgdGhpcyBpcyBub3QgaHlkcmF0aW9uXHJcbiAgICAgICAgICAgIC8vIFRPRE8gaGFuZGxlIHNlbGYtZGVmaW5lZCBmYWxsYmFja1xyXG4gICAgICAgICAgICBpZiAoIWluaXRpYWxWTm9kZS5lbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSAoaW5zdGFuY2Uuc3ViVHJlZSA9IGNyZWF0ZVZOb2RlKENvbW1lbnQpKTtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tZW50Tm9kZShudWxsLCBwbGFjZWhvbGRlciwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dXBSZW5kZXJFZmZlY3QoaW5zdGFuY2UsIGluaXRpYWxWTm9kZSwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgb3B0aW1pemVkKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIHBvcFdhcm5pbmdDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBtb3VudGApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB1cGRhdGVDb21wb25lbnQgPSAobjEsIG4yLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IChuMi5jb21wb25lbnQgPSBuMS5jb21wb25lbnQpO1xyXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVDb21wb25lbnQobjEsIG4yLCBvcHRpbWl6ZWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZS5hc3luY0RlcCAmJlxyXG4gICAgICAgICAgICAgICAgIWluc3RhbmNlLmFzeW5jUmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFzeW5jICYgc3RpbGwgcGVuZGluZyAtIGp1c3QgdXBkYXRlIHByb3BzIGFuZCBzbG90c1xyXG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGNvbXBvbmVudCdzIHJlYWN0aXZlIGVmZmVjdCBmb3IgcmVuZGVyIGlzbid0IHNldC11cCB5ZXRcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQobjIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyKGluc3RhbmNlLCBuMiwgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsIHVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UubmV4dCA9IG4yO1xyXG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgY2hpbGQgY29tcG9uZW50IGlzIGFsc28gcXVldWVkLCByZW1vdmUgaXQgdG8gYXZvaWRcclxuICAgICAgICAgICAgICAgIC8vIGRvdWJsZSB1cGRhdGluZyB0aGUgc2FtZSBjaGlsZCBjb21wb25lbnQgaW4gdGhlIHNhbWUgZmx1c2guXHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSm9iKGluc3RhbmNlLnVwZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZS51cGRhdGUgaXMgdGhlIHJlYWN0aXZlIGVmZmVjdC5cclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBubyB1cGRhdGUgbmVlZGVkLiBqdXN0IGNvcHkgb3ZlciBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIG4yLmVsID0gbjEuZWw7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLnZub2RlID0gbjI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNldHVwUmVuZGVyRWZmZWN0ID0gKGluc3RhbmNlLCBpbml0aWFsVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIG9wdGltaXplZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFVwZGF0ZUZuID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlLmlzTW91bnRlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZub2RlSG9vaztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZWwsIHByb3BzIH0gPSBpbml0aWFsVk5vZGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJtLCBtLCBwYXJlbnQgfSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBc3luY1dyYXBwZXJWTm9kZSA9IGlzQXN5bmNXcmFwcGVyKGluaXRpYWxWTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmVNb3VudCBob29rXHJcbiAgICAgICAgICAgICAgICBpZiAoYm0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnZva2VBcnJheUZucyhibSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBvblZub2RlQmVmb3JlTW91bnRcclxuICAgICAgICAgICAgICAgIGlmICghaXNBc3luY1dyYXBwZXJWTm9kZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlQmVmb3JlTW91bnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50LCBpbml0aWFsVk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWwgJiYgaHlkcmF0ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2bm9kZSBoYXMgYWRvcHRlZCBob3N0IG5vZGUgLSBwZXJmb3JtIGh5ZHJhdGlvbiBpbnN0ZWFkIG9mIG1vdW50LlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVTdWJUcmVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zdWJUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBoeWRyYXRlYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0ZU5vZGUoZWwsIGluc3RhbmNlLnN1YlRyZWUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBoeWRyYXRlYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jV3JhcHBlclZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWTm9kZS50eXBlLl9fYXN5bmNMb2FkZXIoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiB3ZSBhcmUgbW92aW5nIHRoZSByZW5kZXIgY2FsbCBpbnRvIGFuIGFzeW5jIGNhbGxiYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBtZWFucyBpdCB3b24ndCB0cmFjayBkZXBlbmRlbmNpZXMgLSBidXQgaXQncyBvayBiZWNhdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyLXJlbmRlcmVkIGFzeW5jIHdyYXBwZXIgaXMgYWxyZWFkeSBpbiByZXNvbHZlZCBzdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaXQgd2lsbCBuZXZlciBuZWVkIHRvIGNoYW5nZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gIWluc3RhbmNlLmlzVW5tb3VudGVkICYmIGh5ZHJhdGVTdWJUcmVlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0ZVN1YlRyZWUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUcmVlID0gKGluc3RhbmNlLnN1YlRyZWUgPSByZW5kZXJDb21wb25lbnRSb290KGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgcGF0Y2hgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgc3ViVHJlZSwgY29udGFpbmVyLCBhbmNob3IsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYHBhdGNoYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWTm9kZS5lbCA9IHN1YlRyZWUuZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBtb3VudGVkIGhvb2tcclxuICAgICAgICAgICAgICAgIGlmIChtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KG0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIG9uVm5vZGVNb3VudGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXN5bmNXcmFwcGVyVk5vZGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkSW5pdGlhbFZOb2RlID0gaW5pdGlhbFZOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnQsIHNjb3BlZEluaXRpYWxWTm9kZSksIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGFjdGl2YXRlZCBob29rIGZvciBrZWVwLWFsaXZlIHJvb3RzLlxyXG4gICAgICAgICAgICAgICAgLy8gIzE3NDIgYWN0aXZhdGVkIGhvb2sgbXVzdCBiZSBhY2Nlc3NlZCBhZnRlciBmaXJzdCByZW5kZXJcclxuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBob29rIG1heSBiZSBpbmplY3RlZCBieSBhIGNoaWxkIGtlZXAtYWxpdmVcclxuICAgICAgICAgICAgICAgIGlmIChpbml0aWFsVk5vZGUuc2hhcGVGbGFnICYgMjU2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFICovIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHBhcmVudCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FzeW5jV3JhcHBlcihwYXJlbnQudm5vZGUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC52bm9kZS5zaGFwZUZsYWcgJiAyNTYgLyogU2hhcGVGbGFncy5DT01QT05FTlRfU0hPVUxEX0tFRVBfQUxJVkUgKi8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuYSAmJiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoaW5zdGFuY2UuYSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV2dG9vbHNDb21wb25lbnRBZGRlZChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyAjMjQ1ODogZGVmZXJlbmNlIG1vdW50LW9ubHkgb2JqZWN0IHBhcmFtZXRlcnMgdG8gcHJldmVudCBtZW1sZWFrc1xyXG4gICAgICAgICAgICAgICAgaW5pdGlhbFZOb2RlID0gY29udGFpbmVyID0gYW5jaG9yID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgbXV0YXRpb24gb2YgY29tcG9uZW50J3Mgb3duIHN0YXRlIChuZXh0OiBudWxsKVxyXG4gICAgICAgICAgICAgICAgLy8gT1IgcGFyZW50IGNhbGxpbmcgcHJvY2Vzc0NvbXBvbmVudCAobmV4dDogVk5vZGUpXHJcbiAgICAgICAgICAgICAgICBsZXQgeyBuZXh0LCBidSwgdSwgcGFyZW50LCB2bm9kZSB9ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3JpZ2luTmV4dCA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdm5vZGVIb29rO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHB1c2hXYXJuaW5nQ29udGV4dChuZXh0IHx8IGluc3RhbmNlLnZub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IGNvbXBvbmVudCBlZmZlY3QgcmVjdXJzaW9uIGR1cmluZyBwcmUtbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAgICAgICAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0LmVsID0gdm5vZGUuZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyKGluc3RhbmNlLCBuZXh0LCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHZub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlVXBkYXRlIGhvb2tcclxuICAgICAgICAgICAgICAgIGlmIChidSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUFycmF5Rm5zKGJ1KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIG9uVm5vZGVCZWZvcmVVcGRhdGVcclxuICAgICAgICAgICAgICAgIGlmICgodm5vZGVIb29rID0gbmV4dC5wcm9wcyAmJiBuZXh0LnByb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50LCBuZXh0LCB2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIC8vIHJlbmRlclxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFRyZWUgPSByZW5kZXJDb21wb25lbnRSb290KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2VHJlZSA9IGluc3RhbmNlLnN1YlRyZWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5zdWJUcmVlID0gbmV4dFRyZWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgcGF0Y2hgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhdGNoKHByZXZUcmVlLCBuZXh0VHJlZSwgXHJcbiAgICAgICAgICAgICAgICAvLyBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBpZiBpdCdzIGluIGEgdGVsZXBvcnRcclxuICAgICAgICAgICAgICAgIGhvc3RQYXJlbnROb2RlKHByZXZUcmVlLmVsKSwgXHJcbiAgICAgICAgICAgICAgICAvLyBhbmNob3IgbWF5IGhhdmUgY2hhbmdlZCBpZiBpdCdzIGluIGEgZnJhZ21lbnRcclxuICAgICAgICAgICAgICAgIGdldE5leHRIb3N0Tm9kZShwcmV2VHJlZSksIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV4dC5lbCA9IG5leHRUcmVlLmVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbk5leHQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLXRyaWdnZXJlZCB1cGRhdGUuIEluIGNhc2Ugb2YgSE9DLCB1cGRhdGUgcGFyZW50IGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZub2RlIGVsLiBIT0MgaXMgaW5kaWNhdGVkIGJ5IHBhcmVudCBpbnN0YW5jZSdzIHN1YlRyZWUgcG9pbnRpbmdcclxuICAgICAgICAgICAgICAgICAgICAvLyB0byBjaGlsZCBjb21wb25lbnQncyB2bm9kZVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhPQ0hvc3RFbChpbnN0YW5jZSwgbmV4dFRyZWUuZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlZCBob29rXHJcbiAgICAgICAgICAgICAgICBpZiAodSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCh1LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBvblZub2RlVXBkYXRlZFxyXG4gICAgICAgICAgICAgICAgaWYgKCh2bm9kZUhvb2sgPSBuZXh0LnByb3BzICYmIG5leHQucHJvcHMub25Wbm9kZVVwZGF0ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgbmV4dCwgdm5vZGUpLCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50VXBkYXRlZChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wV2FybmluZ0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlYWN0aXZlIGVmZmVjdCBmb3IgcmVuZGVyaW5nXHJcbiAgICAgICAgY29uc3QgZWZmZWN0ID0gKGluc3RhbmNlLmVmZmVjdCA9IG5ldyBSZWFjdGl2ZUVmZmVjdChjb21wb25lbnRVcGRhdGVGbiwgKCkgPT4gcXVldWVKb2IodXBkYXRlKSwgaW5zdGFuY2Uuc2NvcGUgLy8gdHJhY2sgaXQgaW4gY29tcG9uZW50J3MgZWZmZWN0IHNjb3BlXHJcbiAgICAgICAgKSk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlID0gKGluc3RhbmNlLnVwZGF0ZSA9ICgpID0+IGVmZmVjdC5ydW4oKSk7XHJcbiAgICAgICAgdXBkYXRlLmlkID0gaW5zdGFuY2UudWlkO1xyXG4gICAgICAgIC8vIGFsbG93UmVjdXJzZVxyXG4gICAgICAgIC8vICMxODAxLCAjMjA0MyBjb21wb25lbnQgcmVuZGVyIGVmZmVjdHMgc2hvdWxkIGFsbG93IHJlY3Vyc2l2ZSB1cGRhdGVzXHJcbiAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICBlZmZlY3Qub25UcmFjayA9IGluc3RhbmNlLnJ0Y1xyXG4gICAgICAgICAgICAgICAgPyBlID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0YywgZSlcclxuICAgICAgICAgICAgICAgIDogdm9pZCAwO1xyXG4gICAgICAgICAgICBlZmZlY3Qub25UcmlnZ2VyID0gaW5zdGFuY2UucnRnXHJcbiAgICAgICAgICAgICAgICA/IGUgPT4gaW52b2tlQXJyYXlGbnMoaW5zdGFuY2UucnRnLCBlKVxyXG4gICAgICAgICAgICAgICAgOiB2b2lkIDA7XHJcbiAgICAgICAgICAgIHVwZGF0ZS5vd25lckluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHVwZGF0ZUNvbXBvbmVudFByZVJlbmRlciA9IChpbnN0YW5jZSwgbmV4dFZOb2RlLCBvcHRpbWl6ZWQpID0+IHtcclxuICAgICAgICBuZXh0Vk5vZGUuY29tcG9uZW50ID0gaW5zdGFuY2U7XHJcbiAgICAgICAgY29uc3QgcHJldlByb3BzID0gaW5zdGFuY2Uudm5vZGUucHJvcHM7XHJcbiAgICAgICAgaW5zdGFuY2Uudm5vZGUgPSBuZXh0Vk5vZGU7XHJcbiAgICAgICAgaW5zdGFuY2UubmV4dCA9IG51bGw7XHJcbiAgICAgICAgdXBkYXRlUHJvcHMoaW5zdGFuY2UsIG5leHRWTm9kZS5wcm9wcywgcHJldlByb3BzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIHVwZGF0ZVNsb3RzKGluc3RhbmNlLCBuZXh0Vk5vZGUuY2hpbGRyZW4sIG9wdGltaXplZCk7XHJcbiAgICAgICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgICAgIC8vIHByb3BzIHVwZGF0ZSBtYXkgaGF2ZSB0cmlnZ2VyZWQgcHJlLWZsdXNoIHdhdGNoZXJzLlxyXG4gICAgICAgIC8vIGZsdXNoIHRoZW0gYmVmb3JlIHRoZSByZW5kZXIgdXBkYXRlLlxyXG4gICAgICAgIGZsdXNoUHJlRmx1c2hDYnMoKTtcclxuICAgICAgICByZXNldFRyYWNraW5nKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGF0Y2hDaGlsZHJlbiA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGMxID0gbjEgJiYgbjEuY2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgcHJldlNoYXBlRmxhZyA9IG4xID8gbjEuc2hhcGVGbGFnIDogMDtcclxuICAgICAgICBjb25zdCBjMiA9IG4yLmNoaWxkcmVuO1xyXG4gICAgICAgIGNvbnN0IHsgcGF0Y2hGbGFnLCBzaGFwZUZsYWcgfSA9IG4yO1xyXG4gICAgICAgIC8vIGZhc3QgcGF0aFxyXG4gICAgICAgIGlmIChwYXRjaEZsYWcgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRjaEZsYWcgJiAxMjggLyogUGF0Y2hGbGFncy5LRVlFRF9GUkFHTUVOVCAqLykge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBlaXRoZXIgZnVsbHkta2V5ZWQgb3IgbWl4ZWQgKHNvbWUga2V5ZWQgc29tZSBub3QpXHJcbiAgICAgICAgICAgICAgICAvLyBwcmVzZW5jZSBvZiBwYXRjaEZsYWcgbWVhbnMgY2hpbGRyZW4gYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICBwYXRjaEtleWVkQ2hpbGRyZW4oYzEsIGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRjaEZsYWcgJiAyNTYgLyogUGF0Y2hGbGFncy5VTktFWUVEX0ZSQUdNRU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1bmtleWVkXHJcbiAgICAgICAgICAgICAgICBwYXRjaFVua2V5ZWRDaGlsZHJlbihjMSwgYzIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoaWxkcmVuIGhhcyAzIHBvc3NpYmlsaXRpZXM6IHRleHQsIGFycmF5IG9yIG5vIGNoaWxkcmVuLlxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiA4IC8qIFNoYXBlRmxhZ3MuVEVYVF9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAvLyB0ZXh0IGNoaWxkcmVuIGZhc3QgcGF0aFxyXG4gICAgICAgICAgICBpZiAocHJldlNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihjMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGMyICE9PSBjMSkge1xyXG4gICAgICAgICAgICAgICAgaG9zdFNldEVsZW1lbnRUZXh0KGNvbnRhaW5lciwgYzIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocHJldlNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZXYgY2hpbGRyZW4gd2FzIGFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHR3byBhcnJheXMsIGNhbm5vdCBhc3N1bWUgYW55dGhpbmcsIGRvIGZ1bGwgZGlmZlxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoS2V5ZWRDaGlsZHJlbihjMSwgYzIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmV3IGNoaWxkcmVuLCBqdXN0IHVubW91bnQgb2xkXHJcbiAgICAgICAgICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuKGMxLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZXYgY2hpbGRyZW4gd2FzIHRleHQgT1IgbnVsbFxyXG4gICAgICAgICAgICAgICAgLy8gbmV3IGNoaWxkcmVuIGlzIGFycmF5IE9SIG51bGxcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2U2hhcGVGbGFnICYgOCAvKiBTaGFwZUZsYWdzLlRFWFRfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICBob3N0U2V0RWxlbWVudFRleHQoY29udGFpbmVyLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBtb3VudCBuZXcgaWYgYXJyYXlcclxuICAgICAgICAgICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW91bnRDaGlsZHJlbihjMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGF0Y2hVbmtleWVkQ2hpbGRyZW4gPSAoYzEsIGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgYzEgPSBjMSB8fCBFTVBUWV9BUlI7XHJcbiAgICAgICAgYzIgPSBjMiB8fCBFTVBUWV9BUlI7XHJcbiAgICAgICAgY29uc3Qgb2xkTGVuZ3RoID0gYzEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IGMyLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBjb21tb25MZW5ndGggPSBNYXRoLm1pbihvbGRMZW5ndGgsIG5ld0xlbmd0aCk7XHJcbiAgICAgICAgbGV0IGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbW1vbkxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRDaGlsZCA9IChjMltpXSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgPyBjbG9uZUlmTW91bnRlZChjMltpXSlcclxuICAgICAgICAgICAgICAgIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pKTtcclxuICAgICAgICAgICAgcGF0Y2goYzFbaV0sIG5leHRDaGlsZCwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkTGVuZ3RoID4gbmV3TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvbGRcclxuICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuKGMxLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlLCBmYWxzZSwgY29tbW9uTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG1vdW50IG5ld1xyXG4gICAgICAgICAgICBtb3VudENoaWxkcmVuKGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCBjb21tb25MZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBjYW4gYmUgYWxsLWtleWVkIG9yIG1peGVkXHJcbiAgICBjb25zdCBwYXRjaEtleWVkQ2hpbGRyZW4gPSAoYzEsIGMyLCBjb250YWluZXIsIHBhcmVudEFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XHJcbiAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgIGNvbnN0IGwyID0gYzIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBlMSA9IGMxLmxlbmd0aCAtIDE7IC8vIHByZXYgZW5kaW5nIGluZGV4XHJcbiAgICAgICAgbGV0IGUyID0gbDIgLSAxOyAvLyBuZXh0IGVuZGluZyBpbmRleFxyXG4gICAgICAgIC8vIDEuIHN5bmMgZnJvbSBzdGFydFxyXG4gICAgICAgIC8vIChhIGIpIGNcclxuICAgICAgICAvLyAoYSBiKSBkIGVcclxuICAgICAgICB3aGlsZSAoaSA8PSBlMSAmJiBpIDw9IGUyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG4xID0gYzFbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG4yID0gKGMyW2ldID0gb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICA/IGNsb25lSWZNb3VudGVkKGMyW2ldKVxyXG4gICAgICAgICAgICAgICAgOiBub3JtYWxpemVWTm9kZShjMltpXSkpO1xyXG4gICAgICAgICAgICBpZiAoaXNTYW1lVk5vZGVUeXBlKG4xLCBuMikpIHtcclxuICAgICAgICAgICAgICAgIHBhdGNoKG4xLCBuMiwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAyLiBzeW5jIGZyb20gZW5kXHJcbiAgICAgICAgLy8gYSAoYiBjKVxyXG4gICAgICAgIC8vIGQgZSAoYiBjKVxyXG4gICAgICAgIHdoaWxlIChpIDw9IGUxICYmIGkgPD0gZTIpIHtcclxuICAgICAgICAgICAgY29uc3QgbjEgPSBjMVtlMV07XHJcbiAgICAgICAgICAgIGNvbnN0IG4yID0gKGMyW2UyXSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgPyBjbG9uZUlmTW91bnRlZChjMltlMl0pXHJcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZVZOb2RlKGMyW2UyXSkpO1xyXG4gICAgICAgICAgICBpZiAoaXNTYW1lVk5vZGVUeXBlKG4xLCBuMikpIHtcclxuICAgICAgICAgICAgICAgIHBhdGNoKG4xLCBuMiwgY29udGFpbmVyLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZTEtLTtcclxuICAgICAgICAgICAgZTItLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMy4gY29tbW9uIHNlcXVlbmNlICsgbW91bnRcclxuICAgICAgICAvLyAoYSBiKVxyXG4gICAgICAgIC8vIChhIGIpIGNcclxuICAgICAgICAvLyBpID0gMiwgZTEgPSAxLCBlMiA9IDJcclxuICAgICAgICAvLyAoYSBiKVxyXG4gICAgICAgIC8vIGMgKGEgYilcclxuICAgICAgICAvLyBpID0gMCwgZTEgPSAtMSwgZTIgPSAwXHJcbiAgICAgICAgaWYgKGkgPiBlMSkge1xyXG4gICAgICAgICAgICBpZiAoaSA8PSBlMikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBvcyA9IGUyICsgMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5leHRQb3MgPCBsMiA/IGMyW25leHRQb3NdLmVsIDogcGFyZW50QW5jaG9yO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGkgPD0gZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaChudWxsLCAoYzJbaV0gPSBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjbG9uZUlmTW91bnRlZChjMltpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub3JtYWxpemVWTm9kZShjMltpXSkpLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gNC4gY29tbW9uIHNlcXVlbmNlICsgdW5tb3VudFxyXG4gICAgICAgIC8vIChhIGIpIGNcclxuICAgICAgICAvLyAoYSBiKVxyXG4gICAgICAgIC8vIGkgPSAyLCBlMSA9IDIsIGUyID0gMVxyXG4gICAgICAgIC8vIGEgKGIgYylcclxuICAgICAgICAvLyAoYiBjKVxyXG4gICAgICAgIC8vIGkgPSAwLCBlMSA9IDAsIGUyID0gLTFcclxuICAgICAgICBlbHNlIGlmIChpID4gZTIpIHtcclxuICAgICAgICAgICAgd2hpbGUgKGkgPD0gZTEpIHtcclxuICAgICAgICAgICAgICAgIHVubW91bnQoYzFbaV0sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDUuIHVua25vd24gc2VxdWVuY2VcclxuICAgICAgICAvLyBbaSAuLi4gZTEgKyAxXTogYSBiIFtjIGQgZV0gZiBnXHJcbiAgICAgICAgLy8gW2kgLi4uIGUyICsgMV06IGEgYiBbZSBkIGMgaF0gZiBnXHJcbiAgICAgICAgLy8gaSA9IDIsIGUxID0gNCwgZTIgPSA1XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHMxID0gaTsgLy8gcHJldiBzdGFydGluZyBpbmRleFxyXG4gICAgICAgICAgICBjb25zdCBzMiA9IGk7IC8vIG5leHQgc3RhcnRpbmcgaW5kZXhcclxuICAgICAgICAgICAgLy8gNS4xIGJ1aWxkIGtleTppbmRleCBtYXAgZm9yIG5ld0NoaWxkcmVuXHJcbiAgICAgICAgICAgIGNvbnN0IGtleVRvTmV3SW5kZXhNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHMyOyBpIDw9IGUyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGlsZCA9IChjMltpXSA9IG9wdGltaXplZFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2xvbmVJZk1vdW50ZWQoYzJbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAgOiBub3JtYWxpemVWTm9kZShjMltpXSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDaGlsZC5rZXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYga2V5VG9OZXdJbmRleE1hcC5oYXMobmV4dENoaWxkLmtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihgRHVwbGljYXRlIGtleXMgZm91bmQgZHVyaW5nIHVwZGF0ZTpgLCBKU09OLnN0cmluZ2lmeShuZXh0Q2hpbGQua2V5KSwgYE1ha2Ugc3VyZSBrZXlzIGFyZSB1bmlxdWUuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleVRvTmV3SW5kZXhNYXAuc2V0KG5leHRDaGlsZC5rZXksIGkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIDUuMiBsb29wIHRocm91Z2ggb2xkIGNoaWxkcmVuIGxlZnQgdG8gYmUgcGF0Y2hlZCBhbmQgdHJ5IHRvIHBhdGNoXHJcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIG5vZGVzICYgcmVtb3ZlIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50XHJcbiAgICAgICAgICAgIGxldCBqO1xyXG4gICAgICAgICAgICBsZXQgcGF0Y2hlZCA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvQmVQYXRjaGVkID0gZTIgLSBzMiArIDE7XHJcbiAgICAgICAgICAgIGxldCBtb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgYW55IG5vZGUgaGFzIG1vdmVkXHJcbiAgICAgICAgICAgIGxldCBtYXhOZXdJbmRleFNvRmFyID0gMDtcclxuICAgICAgICAgICAgLy8gd29ya3MgYXMgTWFwPG5ld0luZGV4LCBvbGRJbmRleD5cclxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG9sZEluZGV4IGlzIG9mZnNldCBieSArMVxyXG4gICAgICAgICAgICAvLyBhbmQgb2xkSW5kZXggPSAwIGlzIGEgc3BlY2lhbCB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBuZXcgbm9kZSBoYXNcclxuICAgICAgICAgICAgLy8gbm8gY29ycmVzcG9uZGluZyBvbGQgbm9kZS5cclxuICAgICAgICAgICAgLy8gdXNlZCBmb3IgZGV0ZXJtaW5pbmcgbG9uZ2VzdCBzdGFibGUgc3Vic2VxdWVuY2VcclxuICAgICAgICAgICAgY29uc3QgbmV3SW5kZXhUb09sZEluZGV4TWFwID0gbmV3IEFycmF5KHRvQmVQYXRjaGVkKTtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvQmVQYXRjaGVkOyBpKyspXHJcbiAgICAgICAgICAgICAgICBuZXdJbmRleFRvT2xkSW5kZXhNYXBbaV0gPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBzMTsgaSA8PSBlMTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2Q2hpbGQgPSBjMVtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXRjaGVkID49IHRvQmVQYXRjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIG5ldyBjaGlsZHJlbiBoYXZlIGJlZW4gcGF0Y2hlZCBzbyB0aGlzIGNhbiBvbmx5IGJlIGEgcmVtb3ZhbFxyXG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQocHJldkNoaWxkLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBuZXdJbmRleDtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2Q2hpbGQua2V5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCA9IGtleVRvTmV3SW5kZXhNYXAuZ2V0KHByZXZDaGlsZC5rZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ga2V5LWxlc3Mgbm9kZSwgdHJ5IHRvIGxvY2F0ZSBhIGtleS1sZXNzIG5vZGUgb2YgdGhlIHNhbWUgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHMyOyBqIDw9IGUyOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGV4VG9PbGRJbmRleE1hcFtqIC0gczJdID09PSAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NhbWVWTm9kZVR5cGUocHJldkNoaWxkLCBjMltqXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bm1vdW50KHByZXZDaGlsZCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdJbmRleFRvT2xkSW5kZXhNYXBbbmV3SW5kZXggLSBzMl0gPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5kZXggPj0gbWF4TmV3SW5kZXhTb0Zhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhOZXdJbmRleFNvRmFyID0gbmV3SW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoKHByZXZDaGlsZCwgYzJbbmV3SW5kZXhdLCBjb250YWluZXIsIG51bGwsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIDUuMyBtb3ZlIGFuZCBtb3VudFxyXG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBsb25nZXN0IHN0YWJsZSBzdWJzZXF1ZW5jZSBvbmx5IHdoZW4gbm9kZXMgaGF2ZSBtb3ZlZFxyXG4gICAgICAgICAgICBjb25zdCBpbmNyZWFzaW5nTmV3SW5kZXhTZXF1ZW5jZSA9IG1vdmVkXHJcbiAgICAgICAgICAgICAgICA/IGdldFNlcXVlbmNlKG5ld0luZGV4VG9PbGRJbmRleE1hcClcclxuICAgICAgICAgICAgICAgIDogRU1QVFlfQVJSO1xyXG4gICAgICAgICAgICBqID0gaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2UubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgLy8gbG9vcGluZyBiYWNrd2FyZHMgc28gdGhhdCB3ZSBjYW4gdXNlIGxhc3QgcGF0Y2hlZCBub2RlIGFzIGFuY2hvclxyXG4gICAgICAgICAgICBmb3IgKGkgPSB0b0JlUGF0Y2hlZCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBzMiArIGk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2hpbGQgPSBjMltuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV4dEluZGV4ICsgMSA8IGwyID8gYzJbbmV4dEluZGV4ICsgMV0uZWwgOiBwYXJlbnRBbmNob3I7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3SW5kZXhUb09sZEluZGV4TWFwW2ldID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbW91bnQgbmV3XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gobnVsbCwgbmV4dENoaWxkLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSBpZjpcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBzdGFibGUgc3Vic2VxdWVuY2UgKGUuZy4gYSByZXZlcnNlKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9SIGN1cnJlbnQgbm9kZSBpcyBub3QgYW1vbmcgdGhlIHN0YWJsZSBzZXF1ZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChqIDwgMCB8fCBpICE9PSBpbmNyZWFzaW5nTmV3SW5kZXhTZXF1ZW5jZVtqXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKG5leHRDaGlsZCwgY29udGFpbmVyLCBhbmNob3IsIDIgLyogTW92ZVR5cGUuUkVPUkRFUiAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vdmUgPSAodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBtb3ZlVHlwZSwgcGFyZW50U3VzcGVuc2UgPSBudWxsKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBlbCwgdHlwZSwgdHJhbnNpdGlvbiwgY2hpbGRyZW4sIHNoYXBlRmxhZyB9ID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICAgICAgbW92ZSh2bm9kZS5jb21wb25lbnQuc3ViVHJlZSwgY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgdm5vZGUuc3VzcGVuc2UubW92ZShjb250YWluZXIsIGFuY2hvciwgbW92ZVR5cGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiA2NCAvKiBTaGFwZUZsYWdzLlRFTEVQT1JUICovKSB7XHJcbiAgICAgICAgICAgIHR5cGUubW92ZSh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIGludGVybmFscyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IEZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbW92ZShjaGlsZHJlbltpXSwgY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBob3N0SW5zZXJ0KHZub2RlLmFuY2hvciwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBTdGF0aWMpIHtcclxuICAgICAgICAgICAgbW92ZVN0YXRpY05vZGUodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaW5nbGUgbm9kZXNcclxuICAgICAgICBjb25zdCBuZWVkVHJhbnNpdGlvbiA9IG1vdmVUeXBlICE9PSAyIC8qIE1vdmVUeXBlLlJFT1JERVIgKi8gJiZcclxuICAgICAgICAgICAgc2hhcGVGbGFnICYgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgdHJhbnNpdGlvbjtcclxuICAgICAgICBpZiAobmVlZFRyYW5zaXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKG1vdmVUeXBlID09PSAwIC8qIE1vdmVUeXBlLkVOVEVSICovKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGVsKTtcclxuICAgICAgICAgICAgICAgIGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB0cmFuc2l0aW9uLmVudGVyKGVsKSwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBsZWF2ZSwgZGVsYXlMZWF2ZSwgYWZ0ZXJMZWF2ZSB9ID0gdHJhbnNpdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZSA9ICgpID0+IGhvc3RJbnNlcnQoZWwsIGNvbnRhaW5lciwgYW5jaG9yKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZvcm1MZWF2ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWF2ZShlbCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGF5TGVhdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxheUxlYXZlKGVsLCByZW1vdmUsIHBlcmZvcm1MZWF2ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwZXJmb3JtTGVhdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB1bm1vdW50ID0gKHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSA9IGZhbHNlLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHJlZiwgY2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiwgc2hhcGVGbGFnLCBwYXRjaEZsYWcsIGRpcnMgfSA9IHZub2RlO1xyXG4gICAgICAgIC8vIHVuc2V0IHJlZlxyXG4gICAgICAgIGlmIChyZWYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZXRSZWYocmVmLCBudWxsLCBwYXJlbnRTdXNwZW5zZSwgdm5vZGUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMjU2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFICovKSB7XHJcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudC5jdHguZGVhY3RpdmF0ZSh2bm9kZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkSW52b2tlRGlycyA9IHNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovICYmIGRpcnM7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkSW52b2tlVm5vZGVIb29rID0gIWlzQXN5bmNXcmFwcGVyKHZub2RlKTtcclxuICAgICAgICBsZXQgdm5vZGVIb29rO1xyXG4gICAgICAgIGlmIChzaG91bGRJbnZva2VWbm9kZUhvb2sgJiZcclxuICAgICAgICAgICAgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVVbm1vdW50KSkge1xyXG4gICAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICAgICAgdW5tb3VudENvbXBvbmVudCh2bm9kZS5jb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTI4IC8qIFNoYXBlRmxhZ3MuU1VTUEVOU0UgKi8pIHtcclxuICAgICAgICAgICAgICAgIHZub2RlLnN1c3BlbnNlLnVubW91bnQocGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2hvdWxkSW52b2tlRGlycykge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAnYmVmb3JlVW5tb3VudCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzaGFwZUZsYWcgJiA2NCAvKiBTaGFwZUZsYWdzLlRFTEVQT1JUICovKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS50eXBlLnJlbW92ZSh2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgb3B0aW1pemVkLCBpbnRlcm5hbHMsIGRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkeW5hbWljQ2hpbGRyZW4gJiZcclxuICAgICAgICAgICAgICAgIC8vICMxMTUzOiBmYXN0IHBhdGggc2hvdWxkIG5vdCBiZSB0YWtlbiBmb3Igbm9uLXN0YWJsZSAodi1mb3IpIGZyYWdtZW50c1xyXG4gICAgICAgICAgICAgICAgKHR5cGUgIT09IEZyYWdtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHBhdGNoRmxhZyA+IDAgJiYgcGF0Y2hGbGFnICYgNjQgLyogUGF0Y2hGbGFncy5TVEFCTEVfRlJBR01FTlQgKi8pKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gZmFzdCBwYXRoIGZvciBibG9jayBub2Rlczogb25seSBuZWVkIHRvIHVubW91bnQgZHluYW1pYyBjaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihkeW5hbWljQ2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZSA9PT0gRnJhZ21lbnQgJiZcclxuICAgICAgICAgICAgICAgIHBhdGNoRmxhZyAmXHJcbiAgICAgICAgICAgICAgICAgICAgKDEyOCAvKiBQYXRjaEZsYWdzLktFWUVEX0ZSQUdNRU5UICovIHwgMjU2IC8qIFBhdGNoRmxhZ3MuVU5LRVlFRF9GUkFHTUVOVCAqLykpIHx8XHJcbiAgICAgICAgICAgICAgICAoIW9wdGltaXplZCAmJiBzaGFwZUZsYWcgJiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovKSkge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuKGNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZG9SZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZSh2bm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChzaG91bGRJbnZva2VWbm9kZUhvb2sgJiZcclxuICAgICAgICAgICAgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVVbm1vdW50ZWQpKSB8fFxyXG4gICAgICAgICAgICBzaG91bGRJbnZva2VEaXJzKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZUhvb2sgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XHJcbiAgICAgICAgICAgICAgICBzaG91bGRJbnZva2VEaXJzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCAndW5tb3VudGVkJyk7XHJcbiAgICAgICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmVtb3ZlID0gdm5vZGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZWwsIGFuY2hvciwgdHJhbnNpdGlvbiB9ID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IEZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgIHZub2RlLnBhdGNoRmxhZyA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHZub2RlLnBhdGNoRmxhZyAmIDIwNDggLyogUGF0Y2hGbGFncy5ERVZfUk9PVF9GUkFHTUVOVCAqLyAmJlxyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgIXRyYW5zaXRpb24ucGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gQ29tbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0UmVtb3ZlKGNoaWxkLmVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVGcmFnbWVudChlbCwgYW5jaG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBTdGF0aWMpIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3RhdGljTm9kZSh2bm9kZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGVyZm9ybVJlbW92ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaG9zdFJlbW92ZShlbCk7XHJcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICYmICF0cmFuc2l0aW9uLnBlcnNpc3RlZCAmJiB0cmFuc2l0aW9uLmFmdGVyTGVhdmUpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uYWZ0ZXJMZWF2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8gJiZcclxuICAgICAgICAgICAgdHJhbnNpdGlvbiAmJlxyXG4gICAgICAgICAgICAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBsZWF2ZSwgZGVsYXlMZWF2ZSB9ID0gdHJhbnNpdGlvbjtcclxuICAgICAgICAgICAgY29uc3QgcGVyZm9ybUxlYXZlID0gKCkgPT4gbGVhdmUoZWwsIHBlcmZvcm1SZW1vdmUpO1xyXG4gICAgICAgICAgICBpZiAoZGVsYXlMZWF2ZSkge1xyXG4gICAgICAgICAgICAgICAgZGVsYXlMZWF2ZSh2bm9kZS5lbCwgcGVyZm9ybVJlbW92ZSwgcGVyZm9ybUxlYXZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1MZWF2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwZXJmb3JtUmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJlbW92ZUZyYWdtZW50ID0gKGN1ciwgZW5kKSA9PiB7XHJcbiAgICAgICAgLy8gRm9yIGZyYWdtZW50cywgZGlyZWN0bHkgcmVtb3ZlIGFsbCBjb250YWluZWQgRE9NIG5vZGVzLlxyXG4gICAgICAgIC8vIChmcmFnbWVudCBjaGlsZCBub2RlcyBjYW5ub3QgaGF2ZSB0cmFuc2l0aW9uKVxyXG4gICAgICAgIGxldCBuZXh0O1xyXG4gICAgICAgIHdoaWxlIChjdXIgIT09IGVuZCkge1xyXG4gICAgICAgICAgICBuZXh0ID0gaG9zdE5leHRTaWJsaW5nKGN1cik7XHJcbiAgICAgICAgICAgIGhvc3RSZW1vdmUoY3VyKTtcclxuICAgICAgICAgICAgY3VyID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaG9zdFJlbW92ZShlbmQpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IHVubW91bnRDb21wb25lbnQgPSAoaW5zdGFuY2UsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSkgPT4ge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaW5zdGFuY2UudHlwZS5fX2htcklkKSB7XHJcbiAgICAgICAgICAgIHVucmVnaXN0ZXJITVIoaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IGJ1bSwgc2NvcGUsIHVwZGF0ZSwgc3ViVHJlZSwgdW0gfSA9IGluc3RhbmNlO1xyXG4gICAgICAgIC8vIGJlZm9yZVVubW91bnQgaG9va1xyXG4gICAgICAgIGlmIChidW0pIHtcclxuICAgICAgICAgICAgaW52b2tlQXJyYXlGbnMoYnVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RvcCBlZmZlY3RzIGluIGNvbXBvbmVudCBzY29wZVxyXG4gICAgICAgIHNjb3BlLnN0b3AoKTtcclxuICAgICAgICAvLyB1cGRhdGUgbWF5IGJlIG51bGwgaWYgYSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJlZm9yZSBpdHMgYXN5bmNcclxuICAgICAgICAvLyBzZXR1cCBoYXMgcmVzb2x2ZWQuXHJcbiAgICAgICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBzbyB0aGF0IHNjaGVkdWxlciB3aWxsIG5vIGxvbmdlciBpbnZva2UgaXRcclxuICAgICAgICAgICAgdXBkYXRlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB1bm1vdW50KHN1YlRyZWUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB1bm1vdW50ZWQgaG9va1xyXG4gICAgICAgIGlmICh1bSkge1xyXG4gICAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QodW0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2UuaXNVbm1vdW50ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcclxuICAgICAgICAvLyBBIGNvbXBvbmVudCB3aXRoIGFzeW5jIGRlcCBpbnNpZGUgYSBwZW5kaW5nIHN1c3BlbnNlIGlzIHVubW91bnRlZCBiZWZvcmVcclxuICAgICAgICAvLyBpdHMgYXN5bmMgZGVwIHJlc29sdmVzLiBUaGlzIHNob3VsZCByZW1vdmUgdGhlIGRlcCBmcm9tIHRoZSBzdXNwZW5zZSwgYW5kXHJcbiAgICAgICAgLy8gY2F1c2UgdGhlIHN1c3BlbnNlIHRvIHJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhhdCB3YXMgdGhlIGxhc3QgZGVwLlxyXG4gICAgICAgIGlmIChwYXJlbnRTdXNwZW5zZSAmJlxyXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZS5wZW5kaW5nQnJhbmNoICYmXHJcbiAgICAgICAgICAgICFwYXJlbnRTdXNwZW5zZS5pc1VubW91bnRlZCAmJlxyXG4gICAgICAgICAgICBpbnN0YW5jZS5hc3luY0RlcCAmJlxyXG4gICAgICAgICAgICAhaW5zdGFuY2UuYXN5bmNSZXNvbHZlZCAmJlxyXG4gICAgICAgICAgICBpbnN0YW5jZS5zdXNwZW5zZUlkID09PSBwYXJlbnRTdXNwZW5zZS5wZW5kaW5nSWQpIHtcclxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UuZGVwcy0tO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UuZGVwcyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50UmVtb3ZlZChpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHVubW91bnRDaGlsZHJlbiA9IChjaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUgPSBmYWxzZSwgb3B0aW1pemVkID0gZmFsc2UsIHN0YXJ0ID0gMCkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHVubW91bnQoY2hpbGRyZW5baV0sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBnZXROZXh0SG9zdE5vZGUgPSB2bm9kZSA9PiB7XHJcbiAgICAgICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE5leHRIb3N0Tm9kZSh2bm9kZS5jb21wb25lbnQuc3ViVHJlZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgICAgICByZXR1cm4gdm5vZGUuc3VzcGVuc2UubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9zdE5leHRTaWJsaW5nKCh2bm9kZS5hbmNob3IgfHwgdm5vZGUuZWwpKTtcclxuICAgIH07XHJcbiAgICBjb25zdCByZW5kZXIgPSAodm5vZGUsIGNvbnRhaW5lciwgaXNTVkcpID0+IHtcclxuICAgICAgICBpZiAodm5vZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLl92bm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdW5tb3VudChjb250YWluZXIuX3Zub2RlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGF0Y2goY29udGFpbmVyLl92bm9kZSB8fCBudWxsLCB2bm9kZSwgY29udGFpbmVyLCBudWxsLCBudWxsLCBudWxsLCBpc1NWRyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZsdXNoUHJlRmx1c2hDYnMoKTtcclxuICAgICAgICBmbHVzaFBvc3RGbHVzaENicygpO1xyXG4gICAgICAgIGNvbnRhaW5lci5fdm5vZGUgPSB2bm9kZTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB7XHJcbiAgICAgICAgcDogcGF0Y2gsXHJcbiAgICAgICAgdW06IHVubW91bnQsXHJcbiAgICAgICAgbTogbW92ZSxcclxuICAgICAgICByOiByZW1vdmUsXHJcbiAgICAgICAgbXQ6IG1vdW50Q29tcG9uZW50LFxyXG4gICAgICAgIG1jOiBtb3VudENoaWxkcmVuLFxyXG4gICAgICAgIHBjOiBwYXRjaENoaWxkcmVuLFxyXG4gICAgICAgIHBiYzogcGF0Y2hCbG9ja0NoaWxkcmVuLFxyXG4gICAgICAgIG46IGdldE5leHRIb3N0Tm9kZSxcclxuICAgICAgICBvOiBvcHRpb25zXHJcbiAgICB9O1xyXG4gICAgbGV0IGh5ZHJhdGU7XHJcbiAgICBsZXQgaHlkcmF0ZU5vZGU7XHJcbiAgICBpZiAoY3JlYXRlSHlkcmF0aW9uRm5zKSB7XHJcbiAgICAgICAgW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXSA9IGNyZWF0ZUh5ZHJhdGlvbkZucyhpbnRlcm5hbHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW5kZXIsXHJcbiAgICAgICAgaHlkcmF0ZSxcclxuICAgICAgICBjcmVhdGVBcHA6IGNyZWF0ZUFwcEFQSShyZW5kZXIsIGh5ZHJhdGUpXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHRvZ2dsZVJlY3Vyc2UoeyBlZmZlY3QsIHVwZGF0ZSB9LCBhbGxvd2VkKSB7XHJcbiAgICBlZmZlY3QuYWxsb3dSZWN1cnNlID0gdXBkYXRlLmFsbG93UmVjdXJzZSA9IGFsbG93ZWQ7XHJcbn1cclxuLyoqXHJcbiAqICMxMTU2XHJcbiAqIFdoZW4gYSBjb21wb25lbnQgaXMgSE1SLWVuYWJsZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHN0YXRpYyBub2Rlc1xyXG4gKiBpbnNpZGUgYSBibG9jayBhbHNvIGluaGVyaXQgdGhlIERPTSBlbGVtZW50IGZyb20gdGhlIHByZXZpb3VzIHRyZWUgc28gdGhhdFxyXG4gKiBITVIgdXBkYXRlcyAod2hpY2ggYXJlIGZ1bGwgdXBkYXRlcykgY2FuIHJldHJpZXZlIHRoZSBlbGVtZW50IGZvciBwYXRjaGluZy5cclxuICpcclxuICogIzIwODBcclxuICogSW5zaWRlIGtleWVkIGB0ZW1wbGF0ZWAgZnJhZ21lbnQgc3RhdGljIGNoaWxkcmVuLCBpZiBhIGZyYWdtZW50IGlzIG1vdmVkLFxyXG4gKiB0aGUgY2hpbGRyZW4gd2lsbCBhbHdheXMgYmUgbW92ZWQuIFRoZXJlZm9yZSwgaW4gb3JkZXIgdG8gZW5zdXJlIGNvcnJlY3QgbW92ZVxyXG4gKiBwb3NpdGlvbiwgZWwgc2hvdWxkIGJlIGluaGVyaXRlZCBmcm9tIHByZXZpb3VzIG5vZGVzLlxyXG4gKi9cclxuZnVuY3Rpb24gdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsIHNoYWxsb3cgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY2gxID0gbjEuY2hpbGRyZW47XHJcbiAgICBjb25zdCBjaDIgPSBuMi5jaGlsZHJlbjtcclxuICAgIGlmIChpc0FycmF5KGNoMSkgJiYgaXNBcnJheShjaDIpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaDEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGNhbGxlZCBpbiB0aGUgb3B0aW1pemVkIHBhdGggc28gYXJyYXkgY2hpbGRyZW4gYXJlXHJcbiAgICAgICAgICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgdm5vZGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGMxID0gY2gxW2ldO1xyXG4gICAgICAgICAgICBsZXQgYzIgPSBjaDJbaV07XHJcbiAgICAgICAgICAgIGlmIChjMi5zaGFwZUZsYWcgJiAxIC8qIFNoYXBlRmxhZ3MuRUxFTUVOVCAqLyAmJiAhYzIuZHluYW1pY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYzIucGF0Y2hGbGFnIDw9IDAgfHwgYzIucGF0Y2hGbGFnID09PSAzMiAvKiBQYXRjaEZsYWdzLkhZRFJBVEVfRVZFTlRTICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYzIgPSBjaDJbaV0gPSBjbG9uZUlmTW91bnRlZChjaDJbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGMyLmVsID0gYzEuZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNoYWxsb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihjMSwgYzIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFsc28gaW5oZXJpdCBmb3IgY29tbWVudCBub2RlcywgYnV0IG5vdCBwbGFjZWhvbGRlcnMgKGUuZy4gdi1pZiB3aGljaFxyXG4gICAgICAgICAgICAvLyB3b3VsZCBoYXZlIHJlY2VpdmVkIC5lbCBkdXJpbmcgYmxvY2sgcGF0Y2gpXHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgYzIudHlwZSA9PT0gQ29tbWVudCAmJiAhYzIuZWwpIHtcclxuICAgICAgICAgICAgICAgIGMyLmVsID0gYzEuZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTG9uZ2VzdF9pbmNyZWFzaW5nX3N1YnNlcXVlbmNlXHJcbmZ1bmN0aW9uIGdldFNlcXVlbmNlKGFycikge1xyXG4gICAgY29uc3QgcCA9IGFyci5zbGljZSgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gWzBdO1xyXG4gICAgbGV0IGksIGosIHUsIHYsIGM7XHJcbiAgICBjb25zdCBsZW4gPSBhcnIubGVuZ3RoO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYXJySSA9IGFycltpXTtcclxuICAgICAgICBpZiAoYXJySSAhPT0gMCkge1xyXG4gICAgICAgICAgICBqID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgaWYgKGFycltqXSA8IGFyckkpIHtcclxuICAgICAgICAgICAgICAgIHBbaV0gPSBqO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1ID0gMDtcclxuICAgICAgICAgICAgdiA9IHJlc3VsdC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB3aGlsZSAodSA8IHYpIHtcclxuICAgICAgICAgICAgICAgIGMgPSAodSArIHYpID4+IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyW3Jlc3VsdFtjXV0gPCBhcnJJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdSA9IGMgKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IGM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFyckkgPCBhcnJbcmVzdWx0W3VdXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcFtpXSA9IHJlc3VsdFt1IC0gMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbdV0gPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdSA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICB2ID0gcmVzdWx0W3UgLSAxXTtcclxuICAgIHdoaWxlICh1LS0gPiAwKSB7XHJcbiAgICAgICAgcmVzdWx0W3VdID0gdjtcclxuICAgICAgICB2ID0gcFt2XTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cblxuY29uc3QgaXNUZWxlcG9ydCA9ICh0eXBlKSA9PiB0eXBlLl9faXNUZWxlcG9ydDtcclxuY29uc3QgaXNUZWxlcG9ydERpc2FibGVkID0gKHByb3BzKSA9PiBwcm9wcyAmJiAocHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuZGlzYWJsZWQgPT09ICcnKTtcclxuY29uc3QgaXNUYXJnZXRTVkcgPSAodGFyZ2V0KSA9PiB0eXBlb2YgU1ZHRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudDtcclxuY29uc3QgcmVzb2x2ZVRhcmdldCA9IChwcm9wcywgc2VsZWN0KSA9PiB7XHJcbiAgICBjb25zdCB0YXJnZXRTZWxlY3RvciA9IHByb3BzICYmIHByb3BzLnRvO1xyXG4gICAgaWYgKGlzU3RyaW5nKHRhcmdldFNlbGVjdG9yKSkge1xyXG4gICAgICAgIGlmICghc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgICAgICAgICAgd2FybihgQ3VycmVudCByZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyB0YXJnZXQgZm9yIFRlbGVwb3J0cy4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYChtaXNzaW5nIHF1ZXJ5U2VsZWN0b3IgcmVuZGVyZXIgb3B0aW9uKWApO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdCh0YXJnZXRTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgICAgICB3YXJuKGBGYWlsZWQgdG8gbG9jYXRlIFRlbGVwb3J0IHRhcmdldCB3aXRoIHNlbGVjdG9yIFwiJHt0YXJnZXRTZWxlY3Rvcn1cIi4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBOb3RlIHRoZSB0YXJnZXQgZWxlbWVudCBtdXN0IGV4aXN0IGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQgLSBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGkuZS4gdGhlIHRhcmdldCBjYW5ub3QgYmUgcmVuZGVyZWQgYnkgdGhlIGNvbXBvbmVudCBpdHNlbGYsIGFuZCBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGlkZWFsbHkgc2hvdWxkIGJlIG91dHNpZGUgb2YgdGhlIGVudGlyZSBWdWUgY29tcG9uZW50IHRyZWUuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICF0YXJnZXRTZWxlY3RvciAmJiAhaXNUZWxlcG9ydERpc2FibGVkKHByb3BzKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBJbnZhbGlkIFRlbGVwb3J0IHRhcmdldDogJHt0YXJnZXRTZWxlY3Rvcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFNlbGVjdG9yO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBUZWxlcG9ydEltcGwgPSB7XHJcbiAgICBfX2lzVGVsZXBvcnQ6IHRydWUsXHJcbiAgICBwcm9jZXNzKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgaW50ZXJuYWxzKSB7XHJcbiAgICAgICAgY29uc3QgeyBtYzogbW91bnRDaGlsZHJlbiwgcGM6IHBhdGNoQ2hpbGRyZW4sIHBiYzogcGF0Y2hCbG9ja0NoaWxkcmVuLCBvOiB7IGluc2VydCwgcXVlcnlTZWxlY3RvciwgY3JlYXRlVGV4dCwgY3JlYXRlQ29tbWVudCB9IH0gPSBpbnRlcm5hbHM7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBpc1RlbGVwb3J0RGlzYWJsZWQobjIucHJvcHMpO1xyXG4gICAgICAgIGxldCB7IHNoYXBlRmxhZywgY2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiB9ID0gbjI7XHJcbiAgICAgICAgLy8gIzMzMDJcclxuICAgICAgICAvLyBITVIgdXBkYXRlZCwgZm9yY2UgZnVsbCBkaWZmXHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBpc0htclVwZGF0aW5nKSB7XHJcbiAgICAgICAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobjEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBpbnNlcnQgYW5jaG9ycyBpbiB0aGUgbWFpbiB2aWV3XHJcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gKG4yLmVsID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICA/IGNyZWF0ZUNvbW1lbnQoJ3RlbGVwb3J0IHN0YXJ0JylcclxuICAgICAgICAgICAgICAgIDogY3JlYXRlVGV4dCgnJykpO1xyXG4gICAgICAgICAgICBjb25zdCBtYWluQW5jaG9yID0gKG4yLmFuY2hvciA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDb21tZW50KCd0ZWxlcG9ydCBlbmQnKVxyXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVUZXh0KCcnKSk7XHJcbiAgICAgICAgICAgIGluc2VydChwbGFjZWhvbGRlciwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICBpbnNlcnQobWFpbkFuY2hvciwgY29udGFpbmVyLCBhbmNob3IpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAobjIudGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChuMi5wcm9wcywgcXVlcnlTZWxlY3RvcikpO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRBbmNob3IgPSAobjIudGFyZ2V0QW5jaG9yID0gY3JlYXRlVGV4dCgnJykpO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQodGFyZ2V0QW5jaG9yLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgLy8gIzI2NTIgd2UgY291bGQgYmUgdGVsZXBvcnRpbmcgZnJvbSBhIG5vbi1TVkcgdHJlZSBpbnRvIGFuIFNWRyB0cmVlXHJcbiAgICAgICAgICAgICAgICBpc1NWRyA9IGlzU1ZHIHx8IGlzVGFyZ2V0U1ZHKHRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFkaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgd2FybignSW52YWxpZCBUZWxlcG9ydCB0YXJnZXQgb24gbW91bnQ6JywgdGFyZ2V0LCBgKCR7dHlwZW9mIHRhcmdldH0pYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbW91bnQgPSAoY29udGFpbmVyLCBhbmNob3IpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFRlbGVwb3J0ICphbHdheXMqIGhhcyBBcnJheSBjaGlsZHJlbi4gVGhpcyBpcyBlbmZvcmNlZCBpbiBib3RoIHRoZVxyXG4gICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgYW5kIHZub2RlIGNoaWxkcmVuIG5vcm1hbGl6YXRpb24uXHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTYgLyogU2hhcGVGbGFncy5BUlJBWV9DSElMRFJFTiAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBpc1NWRywgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIG1vdW50KGNvbnRhaW5lciwgbWFpbkFuY2hvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBtb3VudCh0YXJnZXQsIHRhcmdldEFuY2hvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb250ZW50XHJcbiAgICAgICAgICAgIG4yLmVsID0gbjEuZWw7XHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5BbmNob3IgPSAobjIuYW5jaG9yID0gbjEuYW5jaG9yKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gKG4yLnRhcmdldCA9IG4xLnRhcmdldCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEFuY2hvciA9IChuMi50YXJnZXRBbmNob3IgPSBuMS50YXJnZXRBbmNob3IpO1xyXG4gICAgICAgICAgICBjb25zdCB3YXNEaXNhYmxlZCA9IGlzVGVsZXBvcnREaXNhYmxlZChuMS5wcm9wcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb250YWluZXIgPSB3YXNEaXNhYmxlZCA/IGNvbnRhaW5lciA6IHRhcmdldDtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuY2hvciA9IHdhc0Rpc2FibGVkID8gbWFpbkFuY2hvciA6IHRhcmdldEFuY2hvcjtcclxuICAgICAgICAgICAgaXNTVkcgPSBpc1NWRyB8fCBpc1RhcmdldFNWRyh0YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAoZHluYW1pY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmYXN0IHBhdGggd2hlbiB0aGUgdGVsZXBvcnQgaGFwcGVucyB0byBiZSBhIGJsb2NrIHJvb3RcclxuICAgICAgICAgICAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihuMS5keW5hbWljQ2hpbGRyZW4sIGR5bmFtaWNDaGlsZHJlbiwgY3VycmVudENvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgaXNTVkcsIHNsb3RTY29wZUlkcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBldmVuIGluIGJsb2NrIHRyZWUgbW9kZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgcm9vdC1sZXZlbCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhlIHRlbGVwb3J0IGluaGVyaXQgcHJldmlvdXMgRE9NIHJlZmVyZW5jZXMgc28gdGhhdCB0aGV5IGNhblxyXG4gICAgICAgICAgICAgICAgLy8gYmUgbW92ZWQgaW4gZnV0dXJlIHBhdGNoZXMuXHJcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIW9wdGltaXplZCkge1xyXG4gICAgICAgICAgICAgICAgcGF0Y2hDaGlsZHJlbihuMSwgbjIsIGN1cnJlbnRDb250YWluZXIsIGN1cnJlbnRBbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGlzU1ZHLCBzbG90U2NvcGVJZHMsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghd2FzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGVkIC0+IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSBpbnRvIG1haW4gY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZVRlbGVwb3J0KG4yLCBjb250YWluZXIsIG1haW5BbmNob3IsIGludGVybmFscywgMSAvKiBUZWxlcG9ydE1vdmVUeXBlcy5UT0dHTEUgKi8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIGlmICgobjIucHJvcHMgJiYgbjIucHJvcHMudG8pICE9PSAobjEucHJvcHMgJiYgbjEucHJvcHMudG8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IChuMi50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KG4yLnByb3BzLCBxdWVyeVNlbGVjdG9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRlbGVwb3J0KG4yLCBuZXh0VGFyZ2V0LCBudWxsLCBpbnRlcm5hbHMsIDAgLyogVGVsZXBvcnRNb3ZlVHlwZXMuVEFSR0VUX0NIQU5HRSAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKCdJbnZhbGlkIFRlbGVwb3J0IHRhcmdldCBvbiB1cGRhdGU6JywgdGFyZ2V0LCBgKCR7dHlwZW9mIHRhcmdldH0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAod2FzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCAtPiBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSBpbnRvIHRlbGVwb3J0IHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUZWxlcG9ydChuMiwgdGFyZ2V0LCB0YXJnZXRBbmNob3IsIGludGVybmFscywgMSAvKiBUZWxlcG9ydE1vdmVUeXBlcy5UT0dHTEUgKi8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHJlbW92ZSh2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgb3B0aW1pemVkLCB7IHVtOiB1bm1vdW50LCBvOiB7IHJlbW92ZTogaG9zdFJlbW92ZSB9IH0sIGRvUmVtb3ZlKSB7XHJcbiAgICAgICAgY29uc3QgeyBzaGFwZUZsYWcsIGNoaWxkcmVuLCBhbmNob3IsIHRhcmdldEFuY2hvciwgdGFyZ2V0LCBwcm9wcyB9ID0gdm5vZGU7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICBob3N0UmVtb3ZlKHRhcmdldEFuY2hvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFuIHVubW91bnRlZCB0ZWxlcG9ydCBzaG91bGQgYWx3YXlzIHJlbW92ZSBpdHMgY2hpbGRyZW4gaWYgbm90IGRpc2FibGVkXHJcbiAgICAgICAgaWYgKGRvUmVtb3ZlIHx8ICFpc1RlbGVwb3J0RGlzYWJsZWQocHJvcHMpKSB7XHJcbiAgICAgICAgICAgIGhvc3RSZW1vdmUoYW5jaG9yKTtcclxuICAgICAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQoY2hpbGQsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUsICEhY2hpbGQuZHluYW1pY0NoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3ZlOiBtb3ZlVGVsZXBvcnQsXHJcbiAgICBoeWRyYXRlOiBoeWRyYXRlVGVsZXBvcnRcclxufTtcclxuZnVuY3Rpb24gbW92ZVRlbGVwb3J0KHZub2RlLCBjb250YWluZXIsIHBhcmVudEFuY2hvciwgeyBvOiB7IGluc2VydCB9LCBtOiBtb3ZlIH0sIG1vdmVUeXBlID0gMiAvKiBUZWxlcG9ydE1vdmVUeXBlcy5SRU9SREVSICovKSB7XHJcbiAgICAvLyBtb3ZlIHRhcmdldCBhbmNob3IgaWYgdGhpcyBpcyBhIHRhcmdldCBjaGFuZ2UuXHJcbiAgICBpZiAobW92ZVR5cGUgPT09IDAgLyogVGVsZXBvcnRNb3ZlVHlwZXMuVEFSR0VUX0NIQU5HRSAqLykge1xyXG4gICAgICAgIGluc2VydCh2bm9kZS50YXJnZXRBbmNob3IsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZWwsIGFuY2hvciwgc2hhcGVGbGFnLCBjaGlsZHJlbiwgcHJvcHMgfSA9IHZub2RlO1xyXG4gICAgY29uc3QgaXNSZW9yZGVyID0gbW92ZVR5cGUgPT09IDIgLyogVGVsZXBvcnRNb3ZlVHlwZXMuUkVPUkRFUiAqLztcclxuICAgIC8vIG1vdmUgbWFpbiB2aWV3IGFuY2hvciBpZiB0aGlzIGlzIGEgcmUtb3JkZXIuXHJcbiAgICBpZiAoaXNSZW9yZGVyKSB7XHJcbiAgICAgICAgaW5zZXJ0KGVsLCBjb250YWluZXIsIHBhcmVudEFuY2hvcik7XHJcbiAgICB9XHJcbiAgICAvLyBpZiB0aGlzIGlzIGEgcmUtb3JkZXIgYW5kIHRlbGVwb3J0IGlzIGVuYWJsZWQgKGNvbnRlbnQgaXMgaW4gdGFyZ2V0KVxyXG4gICAgLy8gZG8gbm90IG1vdmUgY2hpbGRyZW4uIFNvIHRoZSBvcHBvc2l0ZSBpczogb25seSBtb3ZlIGNoaWxkcmVuIGlmIHRoaXNcclxuICAgIC8vIGlzIG5vdCBhIHJlb3JkZXIsIG9yIHRoZSB0ZWxlcG9ydCBpcyBkaXNhYmxlZFxyXG4gICAgaWYgKCFpc1Jlb3JkZXIgfHwgaXNUZWxlcG9ydERpc2FibGVkKHByb3BzKSkge1xyXG4gICAgICAgIC8vIFRlbGVwb3J0IGhhcyBlaXRoZXIgQXJyYXkgY2hpbGRyZW4gb3Igbm8gY2hpbGRyZW4uXHJcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbW92ZShjaGlsZHJlbltpXSwgY29udGFpbmVyLCBwYXJlbnRBbmNob3IsIDIgLyogTW92ZVR5cGUuUkVPUkRFUiAqLyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBtb3ZlIG1haW4gdmlldyBhbmNob3IgaWYgdGhpcyBpcyBhIHJlLW9yZGVyLlxyXG4gICAgaWYgKGlzUmVvcmRlcikge1xyXG4gICAgICAgIGluc2VydChhbmNob3IsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBoeWRyYXRlVGVsZXBvcnQobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCB7IG86IHsgbmV4dFNpYmxpbmcsIHBhcmVudE5vZGUsIHF1ZXJ5U2VsZWN0b3IgfSB9LCBoeWRyYXRlQ2hpbGRyZW4pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9ICh2bm9kZS50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KHZub2RlLnByb3BzLCBxdWVyeVNlbGVjdG9yKSk7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gaWYgbXVsdGlwbGUgdGVsZXBvcnRzIHJlbmRlcmVkIHRvIHRoZSBzYW1lIHRhcmdldCBlbGVtZW50LCB3ZSBuZWVkIHRvXHJcbiAgICAgICAgLy8gcGljayB1cCBmcm9tIHdoZXJlIHRoZSBsYXN0IHRlbGVwb3J0IGZpbmlzaGVkIGluc3RlYWQgb2YgdGhlIGZpcnN0IG5vZGVcclxuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0Ll9scGEgfHwgdGFyZ2V0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDE2IC8qIFNoYXBlRmxhZ3MuQVJSQVlfQ0hJTERSRU4gKi8pIHtcclxuICAgICAgICAgICAgaWYgKGlzVGVsZXBvcnREaXNhYmxlZCh2bm9kZS5wcm9wcykpIHtcclxuICAgICAgICAgICAgICAgIHZub2RlLmFuY2hvciA9IGh5ZHJhdGVDaGlsZHJlbihuZXh0U2libGluZyhub2RlKSwgdm5vZGUsIHBhcmVudE5vZGUobm9kZSksIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgICAgIHZub2RlLnRhcmdldEFuY2hvciA9IHRhcmdldE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2bm9kZS5hbmNob3IgPSBuZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgICAgIC8vIGxvb2thaGVhZCB1bnRpbCB3ZSBmaW5kIHRoZSB0YXJnZXQgYW5jaG9yXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBjYW5ub3QgcmVseSBvbiByZXR1cm4gdmFsdWUgb2YgaHlkcmF0ZUNoaWxkcmVuKCkgYmVjYXVzZSB0aGVyZVxyXG4gICAgICAgICAgICAgICAgLy8gY291bGQgYmUgbmVzdGVkIHRlbGVwb3J0c1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEFuY2hvciA9IHRhcmdldE5vZGU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAodGFyZ2V0QW5jaG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QW5jaG9yID0gbmV4dFNpYmxpbmcodGFyZ2V0QW5jaG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QW5jaG9yICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEFuY2hvci5ub2RlVHlwZSA9PT0gOCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBbmNob3IuZGF0YSA9PT0gJ3RlbGVwb3J0IGFuY2hvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFyZ2V0QW5jaG9yID0gdGFyZ2V0QW5jaG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuX2xwYSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bm9kZS50YXJnZXRBbmNob3IgJiYgbmV4dFNpYmxpbmcodm5vZGUudGFyZ2V0QW5jaG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaHlkcmF0ZUNoaWxkcmVuKHRhcmdldE5vZGUsIHZub2RlLCB0YXJnZXQsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2bm9kZS5hbmNob3IgJiYgbmV4dFNpYmxpbmcodm5vZGUuYW5jaG9yKTtcclxufVxyXG4vLyBGb3JjZS1jYXN0ZWQgcHVibGljIHR5cGluZyBmb3IgaCBhbmQgVFNYIHByb3BzIGluZmVyZW5jZVxyXG5jb25zdCBUZWxlcG9ydCA9IFRlbGVwb3J0SW1wbDtcblxuY29uc3QgRnJhZ21lbnQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gJ0ZyYWdtZW50JyA6IHVuZGVmaW5lZCk7XHJcbmNvbnN0IFRleHQgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gJ1RleHQnIDogdW5kZWZpbmVkKTtcclxuY29uc3QgQ29tbWVudCA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyAnQ29tbWVudCcgOiB1bmRlZmluZWQpO1xyXG5jb25zdCBTdGF0aWMgPSBTeW1ib2woKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gJ1N0YXRpYycgOiB1bmRlZmluZWQpO1xyXG4vLyBTaW5jZSB2LWlmIGFuZCB2LWZvciBhcmUgdGhlIHR3byBwb3NzaWJsZSB3YXlzIG5vZGUgc3RydWN0dXJlIGNhbiBkeW5hbWljYWxseVxyXG4vLyBjaGFuZ2UsIG9uY2Ugd2UgY29uc2lkZXIgdi1pZiBicmFuY2hlcyBhbmQgZWFjaCB2LWZvciBmcmFnbWVudCBhIGJsb2NrLCB3ZVxyXG4vLyBjYW4gZGl2aWRlIGEgdGVtcGxhdGUgaW50byBuZXN0ZWQgYmxvY2tzLCBhbmQgd2l0aGluIGVhY2ggYmxvY2sgdGhlIG5vZGVcclxuLy8gc3RydWN0dXJlIHdvdWxkIGJlIHN0YWJsZS4gVGhpcyBhbGxvd3MgdXMgdG8gc2tpcCBtb3N0IGNoaWxkcmVuIGRpZmZpbmdcclxuLy8gYW5kIG9ubHkgd29ycnkgYWJvdXQgdGhlIGR5bmFtaWMgbm9kZXMgKGluZGljYXRlZCBieSBwYXRjaCBmbGFncykuXHJcbmNvbnN0IGJsb2NrU3RhY2sgPSBbXTtcclxubGV0IGN1cnJlbnRCbG9jayA9IG51bGw7XHJcbi8qKlxyXG4gKiBPcGVuIGEgYmxvY2suXHJcbiAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGBjcmVhdGVCbG9ja2AuIEl0IGNhbm5vdCBiZSBwYXJ0IG9mIGBjcmVhdGVCbG9ja2BcclxuICogYmVjYXVzZSB0aGUgY2hpbGRyZW4gb2YgdGhlIGJsb2NrIGFyZSBldmFsdWF0ZWQgYmVmb3JlIGBjcmVhdGVCbG9ja2AgaXRzZWxmXHJcbiAqIGlzIGNhbGxlZC4gVGhlIGdlbmVyYXRlZCBjb2RlIHR5cGljYWxseSBsb29rcyBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIGZ1bmN0aW9uIHJlbmRlcigpIHtcclxuICogICByZXR1cm4gKG9wZW5CbG9jaygpLGNyZWF0ZUJsb2NrKCdkaXYnLCBudWxsLCBbLi4uXSkpXHJcbiAqIH1cclxuICogYGBgXHJcbiAqIGRpc2FibGVUcmFja2luZyBpcyB0cnVlIHdoZW4gY3JlYXRpbmcgYSB2LWZvciBmcmFnbWVudCBibG9jaywgc2luY2UgYSB2LWZvclxyXG4gKiBmcmFnbWVudCBhbHdheXMgZGlmZnMgaXRzIGNoaWxkcmVuLlxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gb3BlbkJsb2NrKGRpc2FibGVUcmFja2luZyA9IGZhbHNlKSB7XHJcbiAgICBibG9ja1N0YWNrLnB1c2goKGN1cnJlbnRCbG9jayA9IGRpc2FibGVUcmFja2luZyA/IG51bGwgOiBbXSkpO1xyXG59XHJcbmZ1bmN0aW9uIGNsb3NlQmxvY2soKSB7XHJcbiAgICBibG9ja1N0YWNrLnBvcCgpO1xyXG4gICAgY3VycmVudEJsb2NrID0gYmxvY2tTdGFja1tibG9ja1N0YWNrLmxlbmd0aCAtIDFdIHx8IG51bGw7XHJcbn1cclxuLy8gV2hldGhlciB3ZSBzaG91bGQgYmUgdHJhY2tpbmcgZHluYW1pYyBjaGlsZCBub2RlcyBpbnNpZGUgYSBibG9jay5cclxuLy8gT25seSB0cmFja3Mgd2hlbiB0aGlzIHZhbHVlIGlzID4gMFxyXG4vLyBXZSBhcmUgbm90IHVzaW5nIGEgc2ltcGxlIGJvb2xlYW4gYmVjYXVzZSB0aGlzIHZhbHVlIG1heSBuZWVkIHRvIGJlXHJcbi8vIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIGJ5IG5lc3RlZCB1c2FnZSBvZiB2LW9uY2UgKHNlZSBiZWxvdylcclxubGV0IGlzQmxvY2tUcmVlRW5hYmxlZCA9IDE7XHJcbi8qKlxyXG4gKiBCbG9jayB0cmFja2luZyBzb21ldGltZXMgbmVlZHMgdG8gYmUgZGlzYWJsZWQsIGZvciBleGFtcGxlIGR1cmluZyB0aGVcclxuICogY3JlYXRpb24gb2YgYSB0cmVlIHRoYXQgbmVlZHMgdG8gYmUgY2FjaGVkIGJ5IHYtb25jZS4gVGhlIGNvbXBpbGVyIGdlbmVyYXRlc1xyXG4gKiBjb2RlIGxpa2UgdGhpczpcclxuICpcclxuICogYGBgIGpzXHJcbiAqIF9jYWNoZVsxXSB8fCAoXHJcbiAqICAgc2V0QmxvY2tUcmFja2luZygtMSksXHJcbiAqICAgX2NhY2hlWzFdID0gY3JlYXRlVk5vZGUoLi4uKSxcclxuICogICBzZXRCbG9ja1RyYWNraW5nKDEpLFxyXG4gKiAgIF9jYWNoZVsxXVxyXG4gKiApXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gc2V0QmxvY2tUcmFja2luZyh2YWx1ZSkge1xyXG4gICAgaXNCbG9ja1RyZWVFbmFibGVkICs9IHZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIHNldHVwQmxvY2sodm5vZGUpIHtcclxuICAgIC8vIHNhdmUgY3VycmVudCBibG9jayBjaGlsZHJlbiBvbiB0aGUgYmxvY2sgdm5vZGVcclxuICAgIHZub2RlLmR5bmFtaWNDaGlsZHJlbiA9XHJcbiAgICAgICAgaXNCbG9ja1RyZWVFbmFibGVkID4gMCA/IGN1cnJlbnRCbG9jayB8fCBFTVBUWV9BUlIgOiBudWxsO1xyXG4gICAgLy8gY2xvc2UgYmxvY2tcclxuICAgIGNsb3NlQmxvY2soKTtcclxuICAgIC8vIGEgYmxvY2sgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHBhdGNoZWQsIHNvIHRyYWNrIGl0IGFzIGEgY2hpbGQgb2YgaXRzXHJcbiAgICAvLyBwYXJlbnQgYmxvY2tcclxuICAgIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmIGN1cnJlbnRCbG9jaykge1xyXG4gICAgICAgIGN1cnJlbnRCbG9jay5wdXNoKHZub2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2bm9kZTtcclxufVxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRCbG9jayh0eXBlLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzLCBzaGFwZUZsYWcpIHtcclxuICAgIHJldHVybiBzZXR1cEJsb2NrKGNyZWF0ZUJhc2VWTm9kZSh0eXBlLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzLCBzaGFwZUZsYWcsIHRydWUgLyogaXNCbG9jayAqLykpO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBibG9jayByb290IHZub2RlLiBUYWtlcyB0aGUgc2FtZSBleGFjdCBhcmd1bWVudHMgYXMgYGNyZWF0ZVZOb2RlYC5cclxuICogQSBibG9jayByb290IGtlZXBzIHRyYWNrIG9mIGR5bmFtaWMgbm9kZXMgd2l0aGluIHRoZSBibG9jayBpbiB0aGVcclxuICogYGR5bmFtaWNDaGlsZHJlbmAgYXJyYXkuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVCbG9jayh0eXBlLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzKSB7XHJcbiAgICByZXR1cm4gc2V0dXBCbG9jayhjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywgY2hpbGRyZW4sIHBhdGNoRmxhZywgZHluYW1pY1Byb3BzLCB0cnVlIC8qIGlzQmxvY2s6IHByZXZlbnQgYSBibG9jayBmcm9tIHRyYWNraW5nIGl0c2VsZiAqLykpO1xyXG59XHJcbmZ1bmN0aW9uIGlzVk5vZGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLl9fdl9pc1ZOb2RlID09PSB0cnVlIDogZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNTYW1lVk5vZGVUeXBlKG4xLCBuMikge1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxyXG4gICAgICAgIG4yLnNoYXBlRmxhZyAmIDYgLyogU2hhcGVGbGFncy5DT01QT05FTlQgKi8gJiZcclxuICAgICAgICBobXJEaXJ0eUNvbXBvbmVudHMuaGFzKG4yLnR5cGUpKSB7XHJcbiAgICAgICAgLy8gSE1SIG9ubHk6IGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gaG90LXVwZGF0ZWQsIGZvcmNlIGEgcmVsb2FkLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuMS50eXBlID09PSBuMi50eXBlICYmIG4xLmtleSA9PT0gbjIua2V5O1xyXG59XHJcbmxldCB2bm9kZUFyZ3NUcmFuc2Zvcm1lcjtcclxuLyoqXHJcbiAqIEludGVybmFsIEFQSSBmb3IgcmVnaXN0ZXJpbmcgYW4gYXJndW1lbnRzIHRyYW5zZm9ybSBmb3IgY3JlYXRlVk5vZGVcclxuICogdXNlZCBmb3IgY3JlYXRpbmcgc3R1YnMgaW4gdGhlIHRlc3QtdXRpbHNcclxuICogSXQgaXMgKmludGVybmFsKiBidXQgbmVlZHMgdG8gYmUgZXhwb3NlZCBmb3IgdGVzdC11dGlscyB0byBwaWNrIHVwIHByb3BlclxyXG4gKiB0eXBpbmdzXHJcbiAqL1xyXG5mdW5jdGlvbiB0cmFuc2Zvcm1WTm9kZUFyZ3ModHJhbnNmb3JtZXIpIHtcclxuICAgIHZub2RlQXJnc1RyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXI7XHJcbn1cclxuY29uc3QgY3JlYXRlVk5vZGVXaXRoQXJnc1RyYW5zZm9ybSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICByZXR1cm4gX2NyZWF0ZVZOb2RlKC4uLih2bm9kZUFyZ3NUcmFuc2Zvcm1lclxyXG4gICAgICAgID8gdm5vZGVBcmdzVHJhbnNmb3JtZXIoYXJncywgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKVxyXG4gICAgICAgIDogYXJncykpO1xyXG59O1xyXG5jb25zdCBJbnRlcm5hbE9iamVjdEtleSA9IGBfX3ZJbnRlcm5hbGA7XHJcbmNvbnN0IG5vcm1hbGl6ZUtleSA9ICh7IGtleSB9KSA9PiBrZXkgIT0gbnVsbCA/IGtleSA6IG51bGw7XHJcbmNvbnN0IG5vcm1hbGl6ZVJlZiA9ICh7IHJlZiwgcmVmX2tleSwgcmVmX2ZvciB9KSA9PiB7XHJcbiAgICByZXR1cm4gKHJlZiAhPSBudWxsXHJcbiAgICAgICAgPyBpc1N0cmluZyhyZWYpIHx8IGlzUmVmKHJlZikgfHwgaXNGdW5jdGlvbihyZWYpXHJcbiAgICAgICAgICAgID8geyBpOiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UsIHI6IHJlZiwgazogcmVmX2tleSwgZjogISFyZWZfZm9yIH1cclxuICAgICAgICAgICAgOiByZWZcclxuICAgICAgICA6IG51bGwpO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVCYXNlVk5vZGUodHlwZSwgcHJvcHMgPSBudWxsLCBjaGlsZHJlbiA9IG51bGwsIHBhdGNoRmxhZyA9IDAsIGR5bmFtaWNQcm9wcyA9IG51bGwsIHNoYXBlRmxhZyA9IHR5cGUgPT09IEZyYWdtZW50ID8gMCA6IDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovLCBpc0Jsb2NrTm9kZSA9IGZhbHNlLCBuZWVkRnVsbENoaWxkcmVuTm9ybWFsaXphdGlvbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB2bm9kZSA9IHtcclxuICAgICAgICBfX3ZfaXNWTm9kZTogdHJ1ZSxcclxuICAgICAgICBfX3Zfc2tpcDogdHJ1ZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHByb3BzLFxyXG4gICAgICAgIGtleTogcHJvcHMgJiYgbm9ybWFsaXplS2V5KHByb3BzKSxcclxuICAgICAgICByZWY6IHByb3BzICYmIG5vcm1hbGl6ZVJlZihwcm9wcyksXHJcbiAgICAgICAgc2NvcGVJZDogY3VycmVudFNjb3BlSWQsXHJcbiAgICAgICAgc2xvdFNjb3BlSWRzOiBudWxsLFxyXG4gICAgICAgIGNoaWxkcmVuLFxyXG4gICAgICAgIGNvbXBvbmVudDogbnVsbCxcclxuICAgICAgICBzdXNwZW5zZTogbnVsbCxcclxuICAgICAgICBzc0NvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgc3NGYWxsYmFjazogbnVsbCxcclxuICAgICAgICBkaXJzOiBudWxsLFxyXG4gICAgICAgIHRyYW5zaXRpb246IG51bGwsXHJcbiAgICAgICAgZWw6IG51bGwsXHJcbiAgICAgICAgYW5jaG9yOiBudWxsLFxyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuICAgICAgICB0YXJnZXRBbmNob3I6IG51bGwsXHJcbiAgICAgICAgc3RhdGljQ291bnQ6IDAsXHJcbiAgICAgICAgc2hhcGVGbGFnLFxyXG4gICAgICAgIHBhdGNoRmxhZyxcclxuICAgICAgICBkeW5hbWljUHJvcHMsXHJcbiAgICAgICAgZHluYW1pY0NoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgIGFwcENvbnRleHQ6IG51bGxcclxuICAgIH07XHJcbiAgICBpZiAobmVlZEZ1bGxDaGlsZHJlbk5vcm1hbGl6YXRpb24pIHtcclxuICAgICAgICBub3JtYWxpemVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4pO1xyXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBzdXNwZW5zZSBjaGlsZHJlblxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgICAgICB0eXBlLm5vcm1hbGl6ZSh2bm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgICAvLyBjb21waWxlZCBlbGVtZW50IHZub2RlIC0gaWYgY2hpbGRyZW4gaXMgcGFzc2VkLCBvbmx5IHBvc3NpYmxlIHR5cGVzIGFyZVxyXG4gICAgICAgIC8vIHN0cmluZyBvciBBcnJheS5cclxuICAgICAgICB2bm9kZS5zaGFwZUZsYWcgfD0gaXNTdHJpbmcoY2hpbGRyZW4pXHJcbiAgICAgICAgICAgID8gOCAvKiBTaGFwZUZsYWdzLlRFWFRfQ0hJTERSRU4gKi9cclxuICAgICAgICAgICAgOiAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovO1xyXG4gICAgfVxyXG4gICAgLy8gdmFsaWRhdGUga2V5XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHZub2RlLmtleSAhPT0gdm5vZGUua2V5KSB7XHJcbiAgICAgICAgd2FybihgVk5vZGUgY3JlYXRlZCB3aXRoIGludmFsaWQga2V5IChOYU4pLiBWTm9kZSB0eXBlOmAsIHZub2RlLnR5cGUpO1xyXG4gICAgfVxyXG4gICAgLy8gdHJhY2sgdm5vZGUgZm9yIGJsb2NrIHRyZWVcclxuICAgIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmXHJcbiAgICAgICAgLy8gYXZvaWQgYSBibG9jayBub2RlIGZyb20gdHJhY2tpbmcgaXRzZWxmXHJcbiAgICAgICAgIWlzQmxvY2tOb2RlICYmXHJcbiAgICAgICAgLy8gaGFzIGN1cnJlbnQgcGFyZW50IGJsb2NrXHJcbiAgICAgICAgY3VycmVudEJsb2NrICYmXHJcbiAgICAgICAgLy8gcHJlc2VuY2Ugb2YgYSBwYXRjaCBmbGFnIGluZGljYXRlcyB0aGlzIG5vZGUgbmVlZHMgcGF0Y2hpbmcgb24gdXBkYXRlcy5cclxuICAgICAgICAvLyBjb21wb25lbnQgbm9kZXMgYWxzbyBzaG91bGQgYWx3YXlzIGJlIHBhdGNoZWQsIGJlY2F1c2UgZXZlbiBpZiB0aGVcclxuICAgICAgICAvLyBjb21wb25lbnQgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSwgaXQgbmVlZHMgdG8gcGVyc2lzdCB0aGUgaW5zdGFuY2Ugb24gdG9cclxuICAgICAgICAvLyB0aGUgbmV4dCB2bm9kZSBzbyB0aGF0IGl0IGNhbiBiZSBwcm9wZXJseSB1bm1vdW50ZWQgbGF0ZXIuXHJcbiAgICAgICAgKHZub2RlLnBhdGNoRmxhZyA+IDAgfHwgc2hhcGVGbGFnICYgNiAvKiBTaGFwZUZsYWdzLkNPTVBPTkVOVCAqLykgJiZcclxuICAgICAgICAvLyB0aGUgRVZFTlRTIGZsYWcgaXMgb25seSBmb3IgaHlkcmF0aW9uIGFuZCBpZiBpdCBpcyB0aGUgb25seSBmbGFnLCB0aGVcclxuICAgICAgICAvLyB2bm9kZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgZHluYW1pYyBkdWUgdG8gaGFuZGxlciBjYWNoaW5nLlxyXG4gICAgICAgIHZub2RlLnBhdGNoRmxhZyAhPT0gMzIgLyogUGF0Y2hGbGFncy5IWURSQVRFX0VWRU5UUyAqLykge1xyXG4gICAgICAgIGN1cnJlbnRCbG9jay5wdXNoKHZub2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2bm9kZTtcclxufVxyXG5jb25zdCBjcmVhdGVWTm9kZSA9ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBjcmVhdGVWTm9kZVdpdGhBcmdzVHJhbnNmb3JtIDogX2NyZWF0ZVZOb2RlKTtcclxuZnVuY3Rpb24gX2NyZWF0ZVZOb2RlKHR5cGUsIHByb3BzID0gbnVsbCwgY2hpbGRyZW4gPSBudWxsLCBwYXRjaEZsYWcgPSAwLCBkeW5hbWljUHJvcHMgPSBudWxsLCBpc0Jsb2NrTm9kZSA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXR5cGUgfHwgdHlwZSA9PT0gTlVMTF9EWU5BTUlDX0NPTVBPTkVOVCkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIXR5cGUpIHtcclxuICAgICAgICAgICAgd2FybihgSW52YWxpZCB2bm9kZSB0eXBlIHdoZW4gY3JlYXRpbmcgdm5vZGU6ICR7dHlwZX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHR5cGUgPSBDb21tZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzVk5vZGUodHlwZSkpIHtcclxuICAgICAgICAvLyBjcmVhdGVWTm9kZSByZWNlaXZpbmcgYW4gZXhpc3Rpbmcgdm5vZGUuIFRoaXMgaGFwcGVucyBpbiBjYXNlcyBsaWtlXHJcbiAgICAgICAgLy8gPGNvbXBvbmVudCA6aXM9XCJ2bm9kZVwiLz5cclxuICAgICAgICAvLyAjMjA3OCBtYWtlIHN1cmUgdG8gbWVyZ2UgcmVmcyBkdXJpbmcgdGhlIGNsb25lIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgaXRcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBjbG9uZVZOb2RlKHR5cGUsIHByb3BzLCB0cnVlIC8qIG1lcmdlUmVmOiB0cnVlICovKTtcclxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplQ2hpbGRyZW4oY2xvbmVkLCBjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmICFpc0Jsb2NrTm9kZSAmJiBjdXJyZW50QmxvY2spIHtcclxuICAgICAgICAgICAgaWYgKGNsb25lZC5zaGFwZUZsYWcgJiA2IC8qIFNoYXBlRmxhZ3MuQ09NUE9ORU5UICovKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tbY3VycmVudEJsb2NrLmluZGV4T2YodHlwZSldID0gY2xvbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJsb2NrLnB1c2goY2xvbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjbG9uZWQucGF0Y2hGbGFnIHw9IC0yIC8qIFBhdGNoRmxhZ3MuQkFJTCAqLztcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG4gICAgLy8gY2xhc3MgY29tcG9uZW50IG5vcm1hbGl6YXRpb24uXHJcbiAgICBpZiAoaXNDbGFzc0NvbXBvbmVudCh0eXBlKSkge1xyXG4gICAgICAgIHR5cGUgPSB0eXBlLl9fdmNjT3B0cztcclxuICAgIH1cclxuICAgIC8vIGNsYXNzICYgc3R5bGUgbm9ybWFsaXphdGlvbi5cclxuICAgIGlmIChwcm9wcykge1xyXG4gICAgICAgIC8vIGZvciByZWFjdGl2ZSBvciBwcm94eSBvYmplY3RzLCB3ZSBuZWVkIHRvIGNsb25lIGl0IHRvIGVuYWJsZSBtdXRhdGlvbi5cclxuICAgICAgICBwcm9wcyA9IGd1YXJkUmVhY3RpdmVQcm9wcyhwcm9wcyk7XHJcbiAgICAgICAgbGV0IHsgY2xhc3M6IGtsYXNzLCBzdHlsZSB9ID0gcHJvcHM7XHJcbiAgICAgICAgaWYgKGtsYXNzICYmICFpc1N0cmluZyhrbGFzcykpIHtcclxuICAgICAgICAgICAgcHJvcHMuY2xhc3MgPSBub3JtYWxpemVDbGFzcyhrbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc09iamVjdChzdHlsZSkpIHtcclxuICAgICAgICAgICAgLy8gcmVhY3RpdmUgc3RhdGUgb2JqZWN0cyBuZWVkIHRvIGJlIGNsb25lZCBzaW5jZSB0aGV5IGFyZSBsaWtlbHkgdG8gYmVcclxuICAgICAgICAgICAgLy8gbXV0YXRlZFxyXG4gICAgICAgICAgICBpZiAoaXNQcm94eShzdHlsZSkgJiYgIWlzQXJyYXkoc3R5bGUpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZSA9IGV4dGVuZCh7fSwgc3R5bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByb3BzLnN0eWxlID0gbm9ybWFsaXplU3R5bGUoc3R5bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVuY29kZSB0aGUgdm5vZGUgdHlwZSBpbmZvcm1hdGlvbiBpbnRvIGEgYml0bWFwXHJcbiAgICBjb25zdCBzaGFwZUZsYWcgPSBpc1N0cmluZyh0eXBlKVxyXG4gICAgICAgID8gMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi9cclxuICAgICAgICA6IGlzU3VzcGVuc2UodHlwZSlcclxuICAgICAgICAgICAgPyAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqL1xyXG4gICAgICAgICAgICA6IGlzVGVsZXBvcnQodHlwZSlcclxuICAgICAgICAgICAgICAgID8gNjQgLyogU2hhcGVGbGFncy5URUxFUE9SVCAqL1xyXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdCh0eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgID8gNCAvKiBTaGFwZUZsYWdzLlNUQVRFRlVMX0NPTVBPTkVOVCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbih0eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDIgLyogU2hhcGVGbGFncy5GVU5DVElPTkFMX0NPTVBPTkVOVCAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHNoYXBlRmxhZyAmIDQgLyogU2hhcGVGbGFncy5TVEFURUZVTF9DT01QT05FTlQgKi8gJiYgaXNQcm94eSh0eXBlKSkge1xyXG4gICAgICAgIHR5cGUgPSB0b1Jhdyh0eXBlKTtcclxuICAgICAgICB3YXJuKGBWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZSBvYmplY3QuIFRoaXMgY2FuIGAgK1xyXG4gICAgICAgICAgICBgbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZCBiZSBhdm9pZGVkIGJ5IGAgK1xyXG4gICAgICAgICAgICBgbWFya2luZyB0aGUgY29tcG9uZW50IHdpdGggXFxgbWFya1Jhd1xcYCBvciB1c2luZyBcXGBzaGFsbG93UmVmXFxgIGAgK1xyXG4gICAgICAgICAgICBgaW5zdGVhZCBvZiBcXGByZWZcXGAuYCwgYFxcbkNvbXBvbmVudCB0aGF0IHdhcyBtYWRlIHJlYWN0aXZlOiBgLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVCYXNlVk5vZGUodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgc2hhcGVGbGFnLCBpc0Jsb2NrTm9kZSwgdHJ1ZSk7XHJcbn1cclxuZnVuY3Rpb24gZ3VhcmRSZWFjdGl2ZVByb3BzKHByb3BzKSB7XHJcbiAgICBpZiAoIXByb3BzKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGlzUHJveHkocHJvcHMpIHx8IEludGVybmFsT2JqZWN0S2V5IGluIHByb3BzXHJcbiAgICAgICAgPyBleHRlbmQoe30sIHByb3BzKVxyXG4gICAgICAgIDogcHJvcHM7XHJcbn1cclxuZnVuY3Rpb24gY2xvbmVWTm9kZSh2bm9kZSwgZXh0cmFQcm9wcywgbWVyZ2VSZWYgPSBmYWxzZSkge1xyXG4gICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IE5PVCB1c2luZyBzcHJlYWQgb3IgZXh0ZW5kIHRvIGF2b2lkIHRoZSBydW50aW1lXHJcbiAgICAvLyBrZXkgZW51bWVyYXRpb24gY29zdC5cclxuICAgIGNvbnN0IHsgcHJvcHMsIHJlZiwgcGF0Y2hGbGFnLCBjaGlsZHJlbiB9ID0gdm5vZGU7XHJcbiAgICBjb25zdCBtZXJnZWRQcm9wcyA9IGV4dHJhUHJvcHMgPyBtZXJnZVByb3BzKHByb3BzIHx8IHt9LCBleHRyYVByb3BzKSA6IHByb3BzO1xyXG4gICAgY29uc3QgY2xvbmVkID0ge1xyXG4gICAgICAgIF9fdl9pc1ZOb2RlOiB0cnVlLFxyXG4gICAgICAgIF9fdl9za2lwOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6IHZub2RlLnR5cGUsXHJcbiAgICAgICAgcHJvcHM6IG1lcmdlZFByb3BzLFxyXG4gICAgICAgIGtleTogbWVyZ2VkUHJvcHMgJiYgbm9ybWFsaXplS2V5KG1lcmdlZFByb3BzKSxcclxuICAgICAgICByZWY6IGV4dHJhUHJvcHMgJiYgZXh0cmFQcm9wcy5yZWZcclxuICAgICAgICAgICAgPyAvLyAjMjA3OCBpbiB0aGUgY2FzZSBvZiA8Y29tcG9uZW50IDppcz1cInZub2RlXCIgcmVmPVwiZXh0cmFcIi8+XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdm5vZGUgaXRzZWxmIGFscmVhZHkgaGFzIGEgcmVmLCBjbG9uZVZOb2RlIHdpbGwgbmVlZCB0byBtZXJnZVxyXG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlZnMgc28gdGhlIHNpbmdsZSB2bm9kZSBjYW4gYmUgc2V0IG9uIG11bHRpcGxlIHJlZnNcclxuICAgICAgICAgICAgICAgIG1lcmdlUmVmICYmIHJlZlxyXG4gICAgICAgICAgICAgICAgICAgID8gaXNBcnJheShyZWYpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVmLmNvbmNhdChub3JtYWxpemVSZWYoZXh0cmFQcm9wcykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW3JlZiwgbm9ybWFsaXplUmVmKGV4dHJhUHJvcHMpXVxyXG4gICAgICAgICAgICAgICAgICAgIDogbm9ybWFsaXplUmVmKGV4dHJhUHJvcHMpXHJcbiAgICAgICAgICAgIDogcmVmLFxyXG4gICAgICAgIHNjb3BlSWQ6IHZub2RlLnNjb3BlSWQsXHJcbiAgICAgICAgc2xvdFNjb3BlSWRzOiB2bm9kZS5zbG90U2NvcGVJZHMsXHJcbiAgICAgICAgY2hpbGRyZW46IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBwYXRjaEZsYWcgPT09IC0xIC8qIFBhdGNoRmxhZ3MuSE9JU1RFRCAqLyAmJiBpc0FycmF5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICA/IGNoaWxkcmVuLm1hcChkZWVwQ2xvbmVWTm9kZSlcclxuICAgICAgICAgICAgOiBjaGlsZHJlbixcclxuICAgICAgICB0YXJnZXQ6IHZub2RlLnRhcmdldCxcclxuICAgICAgICB0YXJnZXRBbmNob3I6IHZub2RlLnRhcmdldEFuY2hvcixcclxuICAgICAgICBzdGF0aWNDb3VudDogdm5vZGUuc3RhdGljQ291bnQsXHJcbiAgICAgICAgc2hhcGVGbGFnOiB2bm9kZS5zaGFwZUZsYWcsXHJcbiAgICAgICAgLy8gaWYgdGhlIHZub2RlIGlzIGNsb25lZCB3aXRoIGV4dHJhIHByb3BzLCB3ZSBjYW4gbm8gbG9uZ2VyIGFzc3VtZSBpdHNcclxuICAgICAgICAvLyBleGlzdGluZyBwYXRjaCBmbGFnIHRvIGJlIHJlbGlhYmxlIGFuZCBuZWVkIHRvIGFkZCB0aGUgRlVMTF9QUk9QUyBmbGFnLlxyXG4gICAgICAgIC8vIG5vdGU6IHByZXNlcnZlIGZsYWcgZm9yIGZyYWdtZW50cyBzaW5jZSB0aGV5IHVzZSB0aGUgZmxhZyBmb3IgY2hpbGRyZW5cclxuICAgICAgICAvLyBmYXN0IHBhdGhzIG9ubHkuXHJcbiAgICAgICAgcGF0Y2hGbGFnOiBleHRyYVByb3BzICYmIHZub2RlLnR5cGUgIT09IEZyYWdtZW50XHJcbiAgICAgICAgICAgID8gcGF0Y2hGbGFnID09PSAtMSAvLyBob2lzdGVkIG5vZGVcclxuICAgICAgICAgICAgICAgID8gMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovXHJcbiAgICAgICAgICAgICAgICA6IHBhdGNoRmxhZyB8IDE2IC8qIFBhdGNoRmxhZ3MuRlVMTF9QUk9QUyAqL1xyXG4gICAgICAgICAgICA6IHBhdGNoRmxhZyxcclxuICAgICAgICBkeW5hbWljUHJvcHM6IHZub2RlLmR5bmFtaWNQcm9wcyxcclxuICAgICAgICBkeW5hbWljQ2hpbGRyZW46IHZub2RlLmR5bmFtaWNDaGlsZHJlbixcclxuICAgICAgICBhcHBDb250ZXh0OiB2bm9kZS5hcHBDb250ZXh0LFxyXG4gICAgICAgIGRpcnM6IHZub2RlLmRpcnMsXHJcbiAgICAgICAgdHJhbnNpdGlvbjogdm5vZGUudHJhbnNpdGlvbixcclxuICAgICAgICAvLyBUaGVzZSBzaG91bGQgdGVjaG5pY2FsbHkgb25seSBiZSBub24tbnVsbCBvbiBtb3VudGVkIFZOb2Rlcy4gSG93ZXZlcixcclxuICAgICAgICAvLyB0aGV5ICpzaG91bGQqIGJlIGNvcGllZCBmb3Iga2VwdC1hbGl2ZSB2bm9kZXMuIFNvIHdlIGp1c3QgYWx3YXlzIGNvcHlcclxuICAgICAgICAvLyB0aGVtIHNpbmNlIHRoZW0gYmVpbmcgbm9uLW51bGwgZHVyaW5nIGEgbW91bnQgZG9lc24ndCBhZmZlY3QgdGhlIGxvZ2ljIGFzXHJcbiAgICAgICAgLy8gdGhleSB3aWxsIHNpbXBseSBiZSBvdmVyd3JpdHRlbi5cclxuICAgICAgICBjb21wb25lbnQ6IHZub2RlLmNvbXBvbmVudCxcclxuICAgICAgICBzdXNwZW5zZTogdm5vZGUuc3VzcGVuc2UsXHJcbiAgICAgICAgc3NDb250ZW50OiB2bm9kZS5zc0NvbnRlbnQgJiYgY2xvbmVWTm9kZSh2bm9kZS5zc0NvbnRlbnQpLFxyXG4gICAgICAgIHNzRmFsbGJhY2s6IHZub2RlLnNzRmFsbGJhY2sgJiYgY2xvbmVWTm9kZSh2bm9kZS5zc0ZhbGxiYWNrKSxcclxuICAgICAgICBlbDogdm5vZGUuZWwsXHJcbiAgICAgICAgYW5jaG9yOiB2bm9kZS5hbmNob3JcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2xvbmVkO1xyXG59XHJcbi8qKlxyXG4gKiBEZXYgb25seSwgZm9yIEhNUiBvZiBob2lzdGVkIHZub2RlcyByZXVzZWQgaW4gdi1mb3JcclxuICogaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlL2lzc3Vlcy8yMDIyXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwQ2xvbmVWTm9kZSh2bm9kZSkge1xyXG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZSh2bm9kZSk7XHJcbiAgICBpZiAoaXNBcnJheSh2bm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICBjbG9uZWQuY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbi5tYXAoZGVlcENsb25lVk5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsb25lZDtcclxufVxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSh0ZXh0ID0gJyAnLCBmbGFnID0gMCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFRleHQsIG51bGwsIHRleHQsIGZsYWcpO1xyXG59XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlU3RhdGljVk5vZGUoY29udGVudCwgbnVtYmVyT2ZOb2Rlcykge1xyXG4gICAgLy8gQSBzdGF0aWMgdm5vZGUgY2FuIGNvbnRhaW4gbXVsdGlwbGUgc3RyaW5naWZpZWQgZWxlbWVudHMsIGFuZCB0aGUgbnVtYmVyXHJcbiAgICAvLyBvZiBlbGVtZW50cyBpcyBuZWNlc3NhcnkgZm9yIGh5ZHJhdGlvbi5cclxuICAgIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUoU3RhdGljLCBudWxsLCBjb250ZW50KTtcclxuICAgIHZub2RlLnN0YXRpY0NvdW50ID0gbnVtYmVyT2ZOb2RlcztcclxuICAgIHJldHVybiB2bm9kZTtcclxufVxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnRWTm9kZSh0ZXh0ID0gJycsIFxyXG4vLyB3aGVuIHVzZWQgYXMgdGhlIHYtZWxzZSBicmFuY2gsIHRoZSBjb21tZW50IG5vZGUgbXVzdCBiZSBjcmVhdGVkIGFzIGFcclxuLy8gYmxvY2sgdG8gZW5zdXJlIGNvcnJlY3QgdXBkYXRlcy5cclxuYXNCbG9jayA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gYXNCbG9ja1xyXG4gICAgICAgID8gKG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayhDb21tZW50LCBudWxsLCB0ZXh0KSlcclxuICAgICAgICA6IGNyZWF0ZVZOb2RlKENvbW1lbnQsIG51bGwsIHRleHQpO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVZOb2RlKGNoaWxkKSB7XHJcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIC8vIGVtcHR5IHBsYWNlaG9sZGVyXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheShjaGlsZCkpIHtcclxuICAgICAgICAvLyBmcmFnbWVudFxyXG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShGcmFnbWVudCwgbnVsbCwgXHJcbiAgICAgICAgLy8gIzM2NjYsIGF2b2lkIHJlZmVyZW5jZSBwb2xsdXRpb24gd2hlbiByZXVzaW5nIHZub2RlXHJcbiAgICAgICAgY2hpbGQuc2xpY2UoKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gYWxyZWFkeSB2bm9kZSwgdGhpcyBzaG91bGQgYmUgdGhlIG1vc3QgY29tbW9uIHNpbmNlIGNvbXBpbGVkIHRlbXBsYXRlc1xyXG4gICAgICAgIC8vIGFsd2F5cyBwcm9kdWNlIGFsbC12bm9kZSBjaGlsZHJlbiBhcnJheXNcclxuICAgICAgICByZXR1cm4gY2xvbmVJZk1vdW50ZWQoY2hpbGQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gc3RyaW5ncyBhbmQgbnVtYmVyc1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShUZXh0LCBudWxsLCBTdHJpbmcoY2hpbGQpKTtcclxuICAgIH1cclxufVxyXG4vLyBvcHRpbWl6ZWQgbm9ybWFsaXphdGlvbiBmb3IgdGVtcGxhdGUtY29tcGlsZWQgcmVuZGVyIGZuc1xyXG5mdW5jdGlvbiBjbG9uZUlmTW91bnRlZChjaGlsZCkge1xyXG4gICAgcmV0dXJuIGNoaWxkLmVsID09PSBudWxsIHx8IGNoaWxkLm1lbW8gPyBjaGlsZCA6IGNsb25lVk5vZGUoY2hpbGQpO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbikge1xyXG4gICAgbGV0IHR5cGUgPSAwO1xyXG4gICAgY29uc3QgeyBzaGFwZUZsYWcgfSA9IHZub2RlO1xyXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcclxuICAgICAgICBjaGlsZHJlbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICAgIHR5cGUgPSAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiAoMSAvKiBTaGFwZUZsYWdzLkVMRU1FTlQgKi8gfCA2NCAvKiBTaGFwZUZsYWdzLlRFTEVQT1JUICovKSkge1xyXG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgc2xvdCB0byBwbGFpbiBjaGlsZHJlbiBmb3IgcGxhaW4gZWxlbWVudCBhbmQgVGVsZXBvcnRcclxuICAgICAgICAgICAgY29uc3Qgc2xvdCA9IGNoaWxkcmVuLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChzbG90KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBfYyBtYXJrZXIgaXMgYWRkZWQgYnkgd2l0aEN0eCgpIGluZGljYXRpbmcgdGhpcyBpcyBhIGNvbXBpbGVkIHNsb3RcclxuICAgICAgICAgICAgICAgIHNsb3QuX2MgJiYgKHNsb3QuX2QgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxpemVDaGlsZHJlbih2bm9kZSwgc2xvdCgpKTtcclxuICAgICAgICAgICAgICAgIHNsb3QuX2MgJiYgKHNsb3QuX2QgPSB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0eXBlID0gMzIgLyogU2hhcGVGbGFncy5TTE9UU19DSElMRFJFTiAqLztcclxuICAgICAgICAgICAgY29uc3Qgc2xvdEZsYWcgPSBjaGlsZHJlbi5fO1xyXG4gICAgICAgICAgICBpZiAoIXNsb3RGbGFnICYmICEoSW50ZXJuYWxPYmplY3RLZXkgaW4gY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5fY3R4ID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNsb3RGbGFnID09PSAzIC8qIFNsb3RGbGFncy5GT1JXQVJERUQgKi8gJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhIGNoaWxkIGNvbXBvbmVudCByZWNlaXZlcyBmb3J3YXJkZWQgc2xvdHMgZnJvbSB0aGUgcGFyZW50LlxyXG4gICAgICAgICAgICAgICAgLy8gaXRzIHNsb3QgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IGl0cyBwYXJlbnQncyBzbG90IHR5cGUuXHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnNsb3RzLl8gPT09IDEgLyogU2xvdEZsYWdzLlNUQUJMRSAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLl8gPSAxIC8qIFNsb3RGbGFncy5TVEFCTEUgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5fID0gMiAvKiBTbG90RmxhZ3MuRFlOQU1JQyAqLztcclxuICAgICAgICAgICAgICAgICAgICB2bm9kZS5wYXRjaEZsYWcgfD0gMTAyNCAvKiBQYXRjaEZsYWdzLkRZTkFNSUNfU0xPVFMgKi87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKGNoaWxkcmVuKSkge1xyXG4gICAgICAgIGNoaWxkcmVuID0geyBkZWZhdWx0OiBjaGlsZHJlbiwgX2N0eDogY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIH07XHJcbiAgICAgICAgdHlwZSA9IDMyIC8qIFNoYXBlRmxhZ3MuU0xPVFNfQ0hJTERSRU4gKi87XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjaGlsZHJlbiA9IFN0cmluZyhjaGlsZHJlbik7XHJcbiAgICAgICAgLy8gZm9yY2UgdGVsZXBvcnQgY2hpbGRyZW4gdG8gYXJyYXkgc28gaXQgY2FuIGJlIG1vdmVkIGFyb3VuZFxyXG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiA2NCAvKiBTaGFwZUZsYWdzLlRFTEVQT1JUICovKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSAxNiAvKiBTaGFwZUZsYWdzLkFSUkFZX0NISUxEUkVOICovO1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSA4IC8qIFNoYXBlRmxhZ3MuVEVYVF9DSElMRFJFTiAqLztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2bm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdm5vZGUuc2hhcGVGbGFnIHw9IHR5cGU7XHJcbn1cclxuZnVuY3Rpb24gbWVyZ2VQcm9wcyguLi5hcmdzKSB7XHJcbiAgICBjb25zdCByZXQgPSB7fTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHRvTWVyZ2UgPSBhcmdzW2ldO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRvTWVyZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldC5jbGFzcyAhPT0gdG9NZXJnZS5jbGFzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldC5jbGFzcyA9IG5vcm1hbGl6ZUNsYXNzKFtyZXQuY2xhc3MsIHRvTWVyZ2UuY2xhc3NdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdzdHlsZScpIHtcclxuICAgICAgICAgICAgICAgIHJldC5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKFtyZXQuc3R5bGUsIHRvTWVyZ2Uuc3R5bGVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc09uKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmV0W2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNvbWluZyA9IHRvTWVyZ2Vba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nICE9PSBpbmNvbWluZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEoaXNBcnJheShleGlzdGluZykgJiYgZXhpc3RpbmcuaW5jbHVkZXMoaW5jb21pbmcpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gZXhpc3RpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGluY29taW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGluY29taW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldFtrZXldID0gdG9NZXJnZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5mdW5jdGlvbiBpbnZva2VWTm9kZUhvb2soaG9vaywgaW5zdGFuY2UsIHZub2RlLCBwcmV2Vk5vZGUgPSBudWxsKSB7XHJcbiAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCBpbnN0YW5jZSwgNyAvKiBFcnJvckNvZGVzLlZOT0RFX0hPT0sgKi8sIFtcclxuICAgICAgICB2bm9kZSxcclxuICAgICAgICBwcmV2Vk5vZGVcclxuICAgIF0pO1xyXG59XG5cbmNvbnN0IGVtcHR5QXBwQ29udGV4dCA9IGNyZWF0ZUFwcENvbnRleHQoKTtcclxubGV0IHVpZCQxID0gMDtcclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2Uodm5vZGUsIHBhcmVudCwgc3VzcGVuc2UpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB2bm9kZS50eXBlO1xyXG4gICAgLy8gaW5oZXJpdCBwYXJlbnQgYXBwIGNvbnRleHQgLSBvciAtIGlmIHJvb3QsIGFkb3B0IGZyb20gcm9vdCB2bm9kZVxyXG4gICAgY29uc3QgYXBwQ29udGV4dCA9IChwYXJlbnQgPyBwYXJlbnQuYXBwQ29udGV4dCA6IHZub2RlLmFwcENvbnRleHQpIHx8IGVtcHR5QXBwQ29udGV4dDtcclxuICAgIGNvbnN0IGluc3RhbmNlID0ge1xyXG4gICAgICAgIHVpZDogdWlkJDErKyxcclxuICAgICAgICB2bm9kZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHBhcmVudCxcclxuICAgICAgICBhcHBDb250ZXh0LFxyXG4gICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICBzdWJUcmVlOiBudWxsLFxyXG4gICAgICAgIGVmZmVjdDogbnVsbCxcclxuICAgICAgICB1cGRhdGU6IG51bGwsXHJcbiAgICAgICAgc2NvcGU6IG5ldyBFZmZlY3RTY29wZSh0cnVlIC8qIGRldGFjaGVkICovKSxcclxuICAgICAgICByZW5kZXI6IG51bGwsXHJcbiAgICAgICAgcHJveHk6IG51bGwsXHJcbiAgICAgICAgZXhwb3NlZDogbnVsbCxcclxuICAgICAgICBleHBvc2VQcm94eTogbnVsbCxcclxuICAgICAgICB3aXRoUHJveHk6IG51bGwsXHJcbiAgICAgICAgcHJvdmlkZXM6IHBhcmVudCA/IHBhcmVudC5wcm92aWRlcyA6IE9iamVjdC5jcmVhdGUoYXBwQ29udGV4dC5wcm92aWRlcyksXHJcbiAgICAgICAgYWNjZXNzQ2FjaGU6IG51bGwsXHJcbiAgICAgICAgcmVuZGVyQ2FjaGU6IFtdLFxyXG4gICAgICAgIC8vIGxvY2FsIHJlc29sdmVkIGFzc2V0c1xyXG4gICAgICAgIGNvbXBvbmVudHM6IG51bGwsXHJcbiAgICAgICAgZGlyZWN0aXZlczogbnVsbCxcclxuICAgICAgICAvLyByZXNvbHZlZCBwcm9wcyBhbmQgZW1pdHMgb3B0aW9uc1xyXG4gICAgICAgIHByb3BzT3B0aW9uczogbm9ybWFsaXplUHJvcHNPcHRpb25zKHR5cGUsIGFwcENvbnRleHQpLFxyXG4gICAgICAgIGVtaXRzT3B0aW9uczogbm9ybWFsaXplRW1pdHNPcHRpb25zKHR5cGUsIGFwcENvbnRleHQpLFxyXG4gICAgICAgIC8vIGVtaXRcclxuICAgICAgICBlbWl0OiBudWxsLFxyXG4gICAgICAgIGVtaXR0ZWQ6IG51bGwsXHJcbiAgICAgICAgLy8gcHJvcHMgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIHByb3BzRGVmYXVsdHM6IEVNUFRZX09CSixcclxuICAgICAgICAvLyBpbmhlcml0QXR0cnNcclxuICAgICAgICBpbmhlcml0QXR0cnM6IHR5cGUuaW5oZXJpdEF0dHJzLFxyXG4gICAgICAgIC8vIHN0YXRlXHJcbiAgICAgICAgY3R4OiBFTVBUWV9PQkosXHJcbiAgICAgICAgZGF0YTogRU1QVFlfT0JKLFxyXG4gICAgICAgIHByb3BzOiBFTVBUWV9PQkosXHJcbiAgICAgICAgYXR0cnM6IEVNUFRZX09CSixcclxuICAgICAgICBzbG90czogRU1QVFlfT0JKLFxyXG4gICAgICAgIHJlZnM6IEVNUFRZX09CSixcclxuICAgICAgICBzZXR1cFN0YXRlOiBFTVBUWV9PQkosXHJcbiAgICAgICAgc2V0dXBDb250ZXh0OiBudWxsLFxyXG4gICAgICAgIC8vIHN1c3BlbnNlIHJlbGF0ZWRcclxuICAgICAgICBzdXNwZW5zZSxcclxuICAgICAgICBzdXNwZW5zZUlkOiBzdXNwZW5zZSA/IHN1c3BlbnNlLnBlbmRpbmdJZCA6IDAsXHJcbiAgICAgICAgYXN5bmNEZXA6IG51bGwsXHJcbiAgICAgICAgYXN5bmNSZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgICAgLy8gbGlmZWN5Y2xlIGhvb2tzXHJcbiAgICAgICAgLy8gbm90IHVzaW5nIGVudW1zIGhlcmUgYmVjYXVzZSBpdCByZXN1bHRzIGluIGNvbXB1dGVkIHByb3BlcnRpZXNcclxuICAgICAgICBpc01vdW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIGlzVW5tb3VudGVkOiBmYWxzZSxcclxuICAgICAgICBpc0RlYWN0aXZhdGVkOiBmYWxzZSxcclxuICAgICAgICBiYzogbnVsbCxcclxuICAgICAgICBjOiBudWxsLFxyXG4gICAgICAgIGJtOiBudWxsLFxyXG4gICAgICAgIG06IG51bGwsXHJcbiAgICAgICAgYnU6IG51bGwsXHJcbiAgICAgICAgdTogbnVsbCxcclxuICAgICAgICB1bTogbnVsbCxcclxuICAgICAgICBidW06IG51bGwsXHJcbiAgICAgICAgZGE6IG51bGwsXHJcbiAgICAgICAgYTogbnVsbCxcclxuICAgICAgICBydGc6IG51bGwsXHJcbiAgICAgICAgcnRjOiBudWxsLFxyXG4gICAgICAgIGVjOiBudWxsLFxyXG4gICAgICAgIHNwOiBudWxsXHJcbiAgICB9O1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGluc3RhbmNlLmN0eCA9IGNyZWF0ZURldlJlbmRlckNvbnRleHQoaW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaW5zdGFuY2UuY3R4ID0geyBfOiBpbnN0YW5jZSB9O1xyXG4gICAgfVxyXG4gICAgaW5zdGFuY2Uucm9vdCA9IHBhcmVudCA/IHBhcmVudC5yb290IDogaW5zdGFuY2U7XHJcbiAgICBpbnN0YW5jZS5lbWl0ID0gZW1pdCQxLmJpbmQobnVsbCwgaW5zdGFuY2UpO1xyXG4gICAgLy8gYXBwbHkgY3VzdG9tIGVsZW1lbnQgc3BlY2lhbCBoYW5kbGluZ1xyXG4gICAgaWYgKHZub2RlLmNlKSB7XHJcbiAgICAgICAgdm5vZGUuY2UoaW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG59XHJcbmxldCBjdXJyZW50SW5zdGFuY2UgPSBudWxsO1xyXG5jb25zdCBnZXRDdXJyZW50SW5zdGFuY2UgPSAoKSA9PiBjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xyXG5jb25zdCBzZXRDdXJyZW50SW5zdGFuY2UgPSAoaW5zdGFuY2UpID0+IHtcclxuICAgIGN1cnJlbnRJbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgaW5zdGFuY2Uuc2NvcGUub24oKTtcclxufTtcclxuY29uc3QgdW5zZXRDdXJyZW50SW5zdGFuY2UgPSAoKSA9PiB7XHJcbiAgICBjdXJyZW50SW5zdGFuY2UgJiYgY3VycmVudEluc3RhbmNlLnNjb3BlLm9mZigpO1xyXG4gICAgY3VycmVudEluc3RhbmNlID0gbnVsbDtcclxufTtcclxuY29uc3QgaXNCdWlsdEluVGFnID0gLyojX19QVVJFX18qLyBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcpO1xyXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSwgY29uZmlnKSB7XHJcbiAgICBjb25zdCBhcHBJc05hdGl2ZVRhZyA9IGNvbmZpZy5pc05hdGl2ZVRhZyB8fCBOTztcclxuICAgIGlmIChpc0J1aWx0SW5UYWcobmFtZSkgfHwgYXBwSXNOYXRpdmVUYWcobmFtZSkpIHtcclxuICAgICAgICB3YXJuKCdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50IGlkOiAnICsgbmFtZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSkge1xyXG4gICAgcmV0dXJuIGluc3RhbmNlLnZub2RlLnNoYXBlRmxhZyAmIDQgLyogU2hhcGVGbGFncy5TVEFURUZVTF9DT01QT05FTlQgKi87XHJcbn1cclxubGV0IGlzSW5TU1JDb21wb25lbnRTZXR1cCA9IGZhbHNlO1xyXG5mdW5jdGlvbiBzZXR1cENvbXBvbmVudChpbnN0YW5jZSwgaXNTU1IgPSBmYWxzZSkge1xyXG4gICAgaXNJblNTUkNvbXBvbmVudFNldHVwID0gaXNTU1I7XHJcbiAgICBjb25zdCB7IHByb3BzLCBjaGlsZHJlbiB9ID0gaW5zdGFuY2Uudm5vZGU7XHJcbiAgICBjb25zdCBpc1N0YXRlZnVsID0gaXNTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSk7XHJcbiAgICBpbml0UHJvcHMoaW5zdGFuY2UsIHByb3BzLCBpc1N0YXRlZnVsLCBpc1NTUik7XHJcbiAgICBpbml0U2xvdHMoaW5zdGFuY2UsIGNoaWxkcmVuKTtcclxuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gaXNTdGF0ZWZ1bFxyXG4gICAgICAgID8gc2V0dXBTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSwgaXNTU1IpXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBpc0luU1NSQ29tcG9uZW50U2V0dXAgPSBmYWxzZTtcclxuICAgIHJldHVybiBzZXR1cFJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiBzZXR1cFN0YXRlZnVsQ29tcG9uZW50KGluc3RhbmNlLCBpc1NTUikge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBpZiAoQ29tcG9uZW50Lm5hbWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKENvbXBvbmVudC5uYW1lLCBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChDb21wb25lbnQuY29tcG9uZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKENvbXBvbmVudC5jb21wb25lbnRzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWVzW2ldLCBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKENvbXBvbmVudC5kaXJlY3RpdmVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoQ29tcG9uZW50LmRpcmVjdGl2ZXMpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZURpcmVjdGl2ZU5hbWUobmFtZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChDb21wb25lbnQuY29tcGlsZXJPcHRpb25zICYmIGlzUnVudGltZU9ubHkoKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBcImNvbXBpbGVyT3B0aW9uc1wiIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUgdGhhdCBgICtcclxuICAgICAgICAgICAgICAgIGBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlci4gU2luY2UgeW91IGFyZSB1c2luZyBhIHJ1bnRpbWUtb25seSBgICtcclxuICAgICAgICAgICAgICAgIGBidWlsZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB2aWEgeW91ciBidWlsZCB0b29sIGNvbmZpZyBpbnN0ZWFkLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIDAuIGNyZWF0ZSByZW5kZXIgcHJveHkgcHJvcGVydHkgYWNjZXNzIGNhY2hlXHJcbiAgICBpbnN0YW5jZS5hY2Nlc3NDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAvLyAxLiBjcmVhdGUgcHVibGljIGluc3RhbmNlIC8gcmVuZGVyIHByb3h5XHJcbiAgICAvLyBhbHNvIG1hcmsgaXQgcmF3IHNvIGl0J3MgbmV2ZXIgb2JzZXJ2ZWRcclxuICAgIGluc3RhbmNlLnByb3h5ID0gbWFya1JhdyhuZXcgUHJveHkoaW5zdGFuY2UuY3R4LCBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMpKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICBleHBvc2VQcm9wc09uUmVuZGVyQ29udGV4dChpbnN0YW5jZSk7XHJcbiAgICB9XHJcbiAgICAvLyAyLiBjYWxsIHNldHVwKClcclxuICAgIGNvbnN0IHsgc2V0dXAgfSA9IENvbXBvbmVudDtcclxuICAgIGlmIChzZXR1cCkge1xyXG4gICAgICAgIGNvbnN0IHNldHVwQ29udGV4dCA9IChpbnN0YW5jZS5zZXR1cENvbnRleHQgPVxyXG4gICAgICAgICAgICBzZXR1cC5sZW5ndGggPiAxID8gY3JlYXRlU2V0dXBDb250ZXh0KGluc3RhbmNlKSA6IG51bGwpO1xyXG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICAgICAgcGF1c2VUcmFja2luZygpO1xyXG4gICAgICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gY2FsbFdpdGhFcnJvckhhbmRsaW5nKHNldHVwLCBpbnN0YW5jZSwgMCAvKiBFcnJvckNvZGVzLlNFVFVQX0ZVTkNUSU9OICovLCBbKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpID8gc2hhbGxvd1JlYWRvbmx5KGluc3RhbmNlLnByb3BzKSA6IGluc3RhbmNlLnByb3BzLCBzZXR1cENvbnRleHRdKTtcclxuICAgICAgICByZXNldFRyYWNraW5nKCk7XHJcbiAgICAgICAgdW5zZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICBpZiAoaXNQcm9taXNlKHNldHVwUmVzdWx0KSkge1xyXG4gICAgICAgICAgICBzZXR1cFJlc3VsdC50aGVuKHVuc2V0Q3VycmVudEluc3RhbmNlLCB1bnNldEN1cnJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGlmIChpc1NTUikge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBwcm9taXNlIHNvIHNlcnZlci1yZW5kZXJlciBjYW4gd2FpdCBvbiBpdFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldHVwUmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc29sdmVkUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIHJlc29sdmVkUmVzdWx0LCBpc1NTUik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCBpbnN0YW5jZSwgMCAvKiBFcnJvckNvZGVzLlNFVFVQX0ZVTkNUSU9OICovKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYXN5bmMgc2V0dXAgcmV0dXJuZWQgUHJvbWlzZS5cclxuICAgICAgICAgICAgICAgIC8vIGJhaWwgaGVyZSBhbmQgd2FpdCBmb3IgcmUtZW50cnkuXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hc3luY0RlcCA9IHNldHVwUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaW5zdGFuY2Uuc3VzcGVuc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gKF9hID0gQ29tcG9uZW50Lm5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdBbm9ueW1vdXMnO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYENvbXBvbmVudCA8JHtuYW1lfT46IHNldHVwIGZ1bmN0aW9uIHJldHVybmVkIGEgcHJvbWlzZSwgYnV0IG5vIGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgPFN1c3BlbnNlPiBib3VuZGFyeSB3YXMgZm91bmQgaW4gdGhlIHBhcmVudCBjb21wb25lbnQgdHJlZS4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBBIGNvbXBvbmVudCB3aXRoIGFzeW5jIHNldHVwKCkgbXVzdCBiZSBuZXN0ZWQgaW4gYSA8U3VzcGVuc2U+IGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgaW4gb3JkZXIgdG8gYmUgcmVuZGVyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhhbmRsZVNldHVwUmVzdWx0KGluc3RhbmNlLCBzZXR1cFJlc3VsdCwgaXNTU1IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZpbmlzaENvbXBvbmVudFNldHVwKGluc3RhbmNlLCBpc1NTUik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIHNldHVwUmVzdWx0LCBpc1NTUikge1xyXG4gICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBSZXN1bHQpKSB7XHJcbiAgICAgICAgLy8gc2V0dXAgcmV0dXJuZWQgYW4gaW5saW5lIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgIGlmIChpbnN0YW5jZS50eXBlLl9fc3NySW5saW5lUmVuZGVyKSB7XHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyBgc3NyUmVuZGVyYCAoY29tcGlsZWQgYnkgU0ZDIGlubGluZSBtb2RlKSxcclxuICAgICAgICAgICAgLy8gc2V0IGl0IGFzIHNzclJlbmRlciBpbnN0ZWFkLlxyXG4gICAgICAgICAgICBpbnN0YW5jZS5zc3JSZW5kZXIgPSBzZXR1cFJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLnJlbmRlciA9IHNldHVwUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHNldHVwUmVzdWx0KSkge1xyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaXNWTm9kZShzZXR1cFJlc3VsdCkpIHtcclxuICAgICAgICAgICAgd2Fybihgc2V0dXAoKSBzaG91bGQgbm90IHJldHVybiBWTm9kZXMgZGlyZWN0bHkgLSBgICtcclxuICAgICAgICAgICAgICAgIGByZXR1cm4gYSByZW5kZXIgZnVuY3Rpb24gaW5zdGVhZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0dXAgcmV0dXJuZWQgYmluZGluZ3MuXHJcbiAgICAgICAgLy8gYXNzdW1pbmcgYSByZW5kZXIgZnVuY3Rpb24gY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBpcyBwcmVzZW50LlxyXG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlLmRldnRvb2xzUmF3U2V0dXBTdGF0ZSA9IHNldHVwUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZS5zZXR1cFN0YXRlID0gcHJveHlSZWZzKHNldHVwUmVzdWx0KTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgIGV4cG9zZVNldHVwU3RhdGVPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBzZXR1cFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgd2Fybihgc2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6ICR7c2V0dXBSZXN1bHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygc2V0dXBSZXN1bHR9YCk7XHJcbiAgICB9XHJcbiAgICBmaW5pc2hDb21wb25lbnRTZXR1cChpbnN0YW5jZSwgaXNTU1IpO1xyXG59XHJcbmxldCBjb21waWxlO1xyXG5sZXQgaW5zdGFsbFdpdGhQcm94eTtcclxuLyoqXHJcbiAqIEZvciBydW50aW1lLWRvbSB0byByZWdpc3RlciB0aGUgY29tcGlsZXIuXHJcbiAqIE5vdGUgdGhlIGV4cG9ydGVkIG1ldGhvZCB1c2VzIGFueSB0byBhdm9pZCBkLnRzIHJlbHlpbmcgb24gdGhlIGNvbXBpbGVyIHR5cGVzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIoX2NvbXBpbGUpIHtcclxuICAgIGNvbXBpbGUgPSBfY29tcGlsZTtcclxuICAgIGluc3RhbGxXaXRoUHJveHkgPSBpID0+IHtcclxuICAgICAgICBpZiAoaS5yZW5kZXIuX3JjKSB7XHJcbiAgICAgICAgICAgIGkud2l0aFByb3h5ID0gbmV3IFByb3h5KGkuY3R4LCBSdW50aW1lQ29tcGlsZWRQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gZGV2IG9ubHlcclxuY29uc3QgaXNSdW50aW1lT25seSA9ICgpID0+ICFjb21waWxlO1xyXG5mdW5jdGlvbiBmaW5pc2hDb21wb25lbnRTZXR1cChpbnN0YW5jZSwgaXNTU1IsIHNraXBPcHRpb25zKSB7XHJcbiAgICBjb25zdCBDb21wb25lbnQgPSBpbnN0YW5jZS50eXBlO1xyXG4gICAgLy8gdGVtcGxhdGUgLyByZW5kZXIgZnVuY3Rpb24gbm9ybWFsaXphdGlvblxyXG4gICAgLy8gY291bGQgYmUgYWxyZWFkeSBzZXQgd2hlbiByZXR1cm5lZCBmcm9tIHNldHVwKClcclxuICAgIGlmICghaW5zdGFuY2UucmVuZGVyKSB7XHJcbiAgICAgICAgLy8gb25seSBkbyBvbi10aGUtZmx5IGNvbXBpbGUgaWYgbm90IGluIFNTUiAtIFNTUiBvbi10aGUtZmx5IGNvbXBpbGF0aW9uXHJcbiAgICAgICAgLy8gaXMgZG9uZSBieSBzZXJ2ZXItcmVuZGVyZXJcclxuICAgICAgICBpZiAoIWlzU1NSICYmIGNvbXBpbGUgJiYgIUNvbXBvbmVudC5yZW5kZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBDb21wb25lbnQudGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYGNvbXBpbGVgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNDdXN0b21FbGVtZW50LCBjb21waWxlck9wdGlvbnMgfSA9IGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkZWxpbWl0ZXJzLCBjb21waWxlck9wdGlvbnM6IGNvbXBvbmVudENvbXBpbGVyT3B0aW9ucyB9ID0gQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmluYWxDb21waWxlck9wdGlvbnMgPSBleHRlbmQoZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyc1xyXG4gICAgICAgICAgICAgICAgfSwgY29tcGlsZXJPcHRpb25zKSwgY29tcG9uZW50Q29tcGlsZXJPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIENvbXBvbmVudC5yZW5kZXIgPSBjb21waWxlKHRlbXBsYXRlLCBmaW5hbENvbXBpbGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYGNvbXBpbGVgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZS5yZW5kZXIgPSAoQ29tcG9uZW50LnJlbmRlciB8fCBOT09QKTtcclxuICAgICAgICAvLyBmb3IgcnVudGltZS1jb21waWxlZCByZW5kZXIgZnVuY3Rpb25zIHVzaW5nIGB3aXRoYCBibG9ja3MsIHRoZSByZW5kZXJcclxuICAgICAgICAvLyBwcm94eSB1c2VkIG5lZWRzIGEgZGlmZmVyZW50IGBoYXNgIGhhbmRsZXIgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGFuZFxyXG4gICAgICAgIC8vIGFsc28gb25seSBhbGxvd3MgYSB3aGl0ZWxpc3Qgb2YgZ2xvYmFscyB0byBmYWxsdGhyb3VnaC5cclxuICAgICAgICBpZiAoaW5zdGFsbFdpdGhQcm94eSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsV2l0aFByb3h5KGluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzdXBwb3J0IGZvciAyLnggb3B0aW9uc1xyXG4gICAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgIShmYWxzZSApKSB7XHJcbiAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcclxuICAgICAgICBwYXVzZVRyYWNraW5nKCk7XHJcbiAgICAgICAgYXBwbHlPcHRpb25zKGluc3RhbmNlKTtcclxuICAgICAgICByZXNldFRyYWNraW5nKCk7XHJcbiAgICAgICAgdW5zZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgIH1cclxuICAgIC8vIHdhcm4gbWlzc2luZyB0ZW1wbGF0ZS9yZW5kZXJcclxuICAgIC8vIHRoZSBydW50aW1lIGNvbXBpbGF0aW9uIG9mIHRlbXBsYXRlIGluIFNTUiBpcyBkb25lIGJ5IHNlcnZlci1yZW5kZXJcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIUNvbXBvbmVudC5yZW5kZXIgJiYgaW5zdGFuY2UucmVuZGVyID09PSBOT09QICYmICFpc1NTUikge1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgICAgIGlmICghY29tcGlsZSAmJiBDb21wb25lbnQudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgd2FybihgQ29tcG9uZW50IHByb3ZpZGVkIHRlbXBsYXRlIG9wdGlvbiBidXQgYCArXHJcbiAgICAgICAgICAgICAgICBgcnVudGltZSBjb21waWxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQgb2YgVnVlLmAgK1xyXG4gICAgICAgICAgICAgICAgKGAgQ29uZmlndXJlIHlvdXIgYnVuZGxlciB0byBhbGlhcyBcInZ1ZVwiIHRvIFwidnVlL2Rpc3QvdnVlLmVzbS1idW5kbGVyLmpzXCIuYFxyXG4gICAgICAgICAgICAgICAgICAgICkgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2FybihgQ29tcG9uZW50IGlzIG1pc3NpbmcgdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVBdHRyc1Byb3h5KGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KGluc3RhbmNlLmF0dHJzLCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgZ2V0KHRhcmdldCwga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBtYXJrQXR0cnNBY2Nlc3NlZCgpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLywgJyRhdHRycycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKGBzZXR1cENvbnRleHQuYXR0cnMgaXMgcmVhZG9ubHkuYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlbGV0ZVByb3BlcnR5KCkge1xyXG4gICAgICAgICAgICAgICAgd2Fybihgc2V0dXBDb250ZXh0LmF0dHJzIGlzIHJlYWRvbmx5LmApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICBnZXQodGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrKGluc3RhbmNlLCBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sICckYXR0cnMnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNldHVwQ29udGV4dChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgZXhwb3NlID0gZXhwb3NlZCA9PiB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBpbnN0YW5jZS5leHBvc2VkKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYGV4cG9zZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBzZXR1cCgpLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZS5leHBvc2VkID0gZXhwb3NlZCB8fCB7fTtcclxuICAgIH07XHJcbiAgICBsZXQgYXR0cnM7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgLy8gV2UgdXNlIGdldHRlcnMgaW4gZGV2IGluIGNhc2UgbGlicyBsaWtlIHRlc3QtdXRpbHMgb3ZlcndyaXRlIGluc3RhbmNlXHJcbiAgICAgICAgLy8gcHJvcGVydGllcyAob3ZlcndyaXRlcyBzaG91bGQgbm90IGJlIGRvbmUgaW4gcHJvZClcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgICAgICAgICAgIGdldCBhdHRycygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhdHRycyB8fCAoYXR0cnMgPSBjcmVhdGVBdHRyc1Byb3h5KGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldCBzbG90cygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaGFsbG93UmVhZG9ubHkoaW5zdGFuY2Uuc2xvdHMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXQgZW1pdCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZXZlbnQsIC4uLmFyZ3MpID0+IGluc3RhbmNlLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHBvc2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdldCBhdHRycygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhdHRycyB8fCAoYXR0cnMgPSBjcmVhdGVBdHRyc1Byb3h5KGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNsb3RzOiBpbnN0YW5jZS5zbG90cyxcclxuICAgICAgICAgICAgZW1pdDogaW5zdGFuY2UuZW1pdCxcclxuICAgICAgICAgICAgZXhwb3NlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRFeHBvc2VQcm94eShpbnN0YW5jZSkge1xyXG4gICAgaWYgKGluc3RhbmNlLmV4cG9zZWQpIHtcclxuICAgICAgICByZXR1cm4gKGluc3RhbmNlLmV4cG9zZVByb3h5IHx8XHJcbiAgICAgICAgICAgIChpbnN0YW5jZS5leHBvc2VQcm94eSA9IG5ldyBQcm94eShwcm94eVJlZnMobWFya1JhdyhpbnN0YW5jZS5leHBvc2VkKSksIHtcclxuICAgICAgICAgICAgICAgIGdldCh0YXJnZXQsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHB1YmxpY1Byb3BlcnRpZXNNYXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY1Byb3BlcnRpZXNNYXBba2V5XShpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XHJcbmNvbnN0IGNsYXNzaWZ5ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRSwgYyA9PiBjLnRvVXBwZXJDYXNlKCkpLnJlcGxhY2UoL1stX10vZywgJycpO1xyXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCwgaW5jbHVkZUluZmVycmVkID0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oQ29tcG9uZW50KVxyXG4gICAgICAgID8gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lXHJcbiAgICAgICAgOiBDb21wb25lbnQubmFtZSB8fCAoaW5jbHVkZUluZmVycmVkICYmIENvbXBvbmVudC5fX25hbWUpO1xyXG59XHJcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbmZ1bmN0aW9uIGZvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIENvbXBvbmVudCwgaXNSb290ID0gZmFsc2UpIHtcclxuICAgIGxldCBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpO1xyXG4gICAgaWYgKCFuYW1lICYmIENvbXBvbmVudC5fX2ZpbGUpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IENvbXBvbmVudC5fX2ZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwuXFx3KyQvKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgbmFtZSA9IG1hdGNoWzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghbmFtZSAmJiBpbnN0YW5jZSAmJiBpbnN0YW5jZS5wYXJlbnQpIHtcclxuICAgICAgICAvLyB0cnkgdG8gaW5mZXIgdGhlIG5hbWUgYmFzZWQgb24gcmV2ZXJzZSByZXNvbHV0aW9uXHJcbiAgICAgICAgY29uc3QgaW5mZXJGcm9tUmVnaXN0cnkgPSAocmVnaXN0cnkpID0+IHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RyeVtrZXldID09PSBDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBuYW1lID1cclxuICAgICAgICAgICAgaW5mZXJGcm9tUmVnaXN0cnkoaW5zdGFuY2UuY29tcG9uZW50cyB8fFxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucGFyZW50LnR5cGUuY29tcG9uZW50cykgfHwgaW5mZXJGcm9tUmVnaXN0cnkoaW5zdGFuY2UuYXBwQ29udGV4dC5jb21wb25lbnRzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuYW1lID8gY2xhc3NpZnkobmFtZSkgOiBpc1Jvb3QgPyBgQXBwYCA6IGBBbm9ueW1vdXNgO1xyXG59XHJcbmZ1bmN0aW9uIGlzQ2xhc3NDb21wb25lbnQodmFsdWUpIHtcclxuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKSAmJiAnX192Y2NPcHRzJyBpbiB2YWx1ZTtcclxufVxuXG5jb25zdCBjb21wdXRlZCA9ICgoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMpID0+IHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHJldHVybiBjb21wdXRlZCQxKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zLCBpc0luU1NSQ29tcG9uZW50U2V0dXApO1xyXG59KTtcblxuLy8gZGV2IG9ubHlcclxuY29uc3Qgd2FyblJ1bnRpbWVVc2FnZSA9IChtZXRob2QpID0+IHdhcm4oYCR7bWV0aG9kfSgpIGlzIGEgY29tcGlsZXItaGludCBoZWxwZXIgdGhhdCBpcyBvbmx5IHVzYWJsZSBpbnNpZGUgYCArXHJcbiAgICBgPHNjcmlwdCBzZXR1cD4gb2YgYSBzaW5nbGUgZmlsZSBjb21wb25lbnQuIEl0cyBhcmd1bWVudHMgc2hvdWxkIGJlIGAgK1xyXG4gICAgYGNvbXBpbGVkIGF3YXkgYW5kIHBhc3NpbmcgaXQgYXQgcnVudGltZSBoYXMgbm8gZWZmZWN0LmApO1xyXG4vLyBpbXBsZW1lbnRhdGlvblxyXG5mdW5jdGlvbiBkZWZpbmVQcm9wcygpIHtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcclxuICAgICAgICB3YXJuUnVudGltZVVzYWdlKGBkZWZpbmVQcm9wc2ApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuLy8gaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gZGVmaW5lRW1pdHMoKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRW1pdHNgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBWdWUgYDxzY3JpcHQgc2V0dXA+YCBjb21waWxlciBtYWNybyBmb3IgZGVjbGFyaW5nIGEgY29tcG9uZW50J3MgZXhwb3NlZFxyXG4gKiBpbnN0YW5jZSBwcm9wZXJ0aWVzIHdoZW4gaXQgaXMgYWNjZXNzZWQgYnkgYSBwYXJlbnQgY29tcG9uZW50IHZpYSB0ZW1wbGF0ZVxyXG4gKiByZWZzLlxyXG4gKlxyXG4gKiBgPHNjcmlwdCBzZXR1cD5gIGNvbXBvbmVudHMgYXJlIGNsb3NlZCBieSBkZWZhdWx0IC0gaS5lLiB2YXJpYWJsZXMgaW5zaWRlXHJcbiAqIHRoZSBgPHNjcmlwdCBzZXR1cD5gIHNjb3BlIGlzIG5vdCBleHBvc2VkIHRvIHBhcmVudCB1bmxlc3MgZXhwbGljaXRseSBleHBvc2VkXHJcbiAqIHZpYSBgZGVmaW5lRXhwb3NlYC5cclxuICpcclxuICogVGhpcyBpcyBvbmx5IHVzYWJsZSBpbnNpZGUgYDxzY3JpcHQgc2V0dXA+YCwgaXMgY29tcGlsZWQgYXdheSBpbiB0aGVcclxuICogb3V0cHV0IGFuZCBzaG91bGQgKipub3QqKiBiZSBhY3R1YWxseSBjYWxsZWQgYXQgcnVudGltZS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZmluZUV4cG9zZShleHBvc2VkKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRXhwb3NlYCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFZ1ZSBgPHNjcmlwdCBzZXR1cD5gIGNvbXBpbGVyIG1hY3JvIGZvciBwcm92aWRpbmcgcHJvcHMgZGVmYXVsdCB2YWx1ZXMgd2hlblxyXG4gKiB1c2luZyB0eXBlLWJhc2VkIGBkZWZpbmVQcm9wc2AgZGVjbGFyYXRpb24uXHJcbiAqXHJcbiAqIEV4YW1wbGUgdXNhZ2U6XHJcbiAqIGBgYHRzXHJcbiAqIHdpdGhEZWZhdWx0cyhkZWZpbmVQcm9wczx7XHJcbiAqICAgc2l6ZT86IG51bWJlclxyXG4gKiAgIGxhYmVscz86IHN0cmluZ1tdXHJcbiAqIH0+KCksIHtcclxuICogICBzaXplOiAzLFxyXG4gKiAgIGxhYmVsczogKCkgPT4gWydkZWZhdWx0IGxhYmVsJ11cclxuICogfSlcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoaXMgaXMgb25seSB1c2FibGUgaW5zaWRlIGA8c2NyaXB0IHNldHVwPmAsIGlzIGNvbXBpbGVkIGF3YXkgaW4gdGhlIG91dHB1dFxyXG4gKiBhbmQgc2hvdWxkICoqbm90KiogYmUgYWN0dWFsbHkgY2FsbGVkIGF0IHJ1bnRpbWUuXHJcbiAqL1xyXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocHJvcHMsIGRlZmF1bHRzKSB7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgd2FyblJ1bnRpbWVVc2FnZShgd2l0aERlZmF1bHRzYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5mdW5jdGlvbiB1c2VTbG90cygpIHtcclxuICAgIHJldHVybiBnZXRDb250ZXh0KCkuc2xvdHM7XHJcbn1cclxuZnVuY3Rpb24gdXNlQXR0cnMoKSB7XHJcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmF0dHJzO1xyXG59XHJcbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XHJcbiAgICBjb25zdCBpID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpKSB7XHJcbiAgICAgICAgd2FybihgdXNlQ29udGV4dCgpIGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBpbnN0YW5jZS5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpLnNldHVwQ29udGV4dCB8fCAoaS5zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQoaSkpO1xyXG59XHJcbi8qKlxyXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgbWVyZ2luZyBkZWZhdWx0IGRlY2xhcmF0aW9ucy4gSW1wb3J0ZWQgYnkgY29tcGlsZWQgY29kZVxyXG4gKiBvbmx5LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlRGVmYXVsdHMocmF3LCBkZWZhdWx0cykge1xyXG4gICAgY29uc3QgcHJvcHMgPSBpc0FycmF5KHJhdylcclxuICAgICAgICA/IHJhdy5yZWR1Y2UoKG5vcm1hbGl6ZWQsIHApID0+ICgobm9ybWFsaXplZFtwXSA9IHt9KSwgbm9ybWFsaXplZCksIHt9KVxyXG4gICAgICAgIDogcmF3O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcclxuICAgICAgICBjb25zdCBvcHQgPSBwcm9wc1trZXldO1xyXG4gICAgICAgIGlmIChvcHQpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0KSB8fCBpc0Z1bmN0aW9uKG9wdCkpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IHR5cGU6IG9wdCwgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0LmRlZmF1bHQgPSBkZWZhdWx0c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwcm9wc1trZXldID0geyBkZWZhdWx0OiBkZWZhdWx0c1trZXldIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBwcm9wcyBkZWZhdWx0IGtleSBcIiR7a2V5fVwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcztcclxufVxyXG4vKipcclxuICogVXNlZCB0byBjcmVhdGUgYSBwcm94eSBmb3IgdGhlIHJlc3QgZWxlbWVudCB3aGVuIGRlc3RydWN0dXJpbmcgcHJvcHMgd2l0aFxyXG4gKiBkZWZpbmVQcm9wcygpLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVByb3BzUmVzdFByb3h5KHByb3BzLCBleGNsdWRlZEtleXMpIHtcclxuICAgIGNvbnN0IHJldCA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsIGtleSwge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gcHJvcHNba2V5XVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XHJcbi8qKlxyXG4gKiBgPHNjcmlwdCBzZXR1cD5gIGhlbHBlciBmb3IgcGVyc2lzdGluZyB0aGUgY3VycmVudCBpbnN0YW5jZSBjb250ZXh0IG92ZXJcclxuICogYXN5bmMvYXdhaXQgZmxvd3MuXHJcbiAqXHJcbiAqIGBAdnVlL2NvbXBpbGVyLXNmY2AgY29udmVydHMgdGhlIGZvbGxvd2luZzpcclxuICpcclxuICogYGBgdHNcclxuICogY29uc3QgeCA9IGF3YWl0IGZvbygpXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBpbnRvOlxyXG4gKlxyXG4gKiBgYGB0c1xyXG4gKiBsZXQgX190ZW1wLCBfX3Jlc3RvcmVcclxuICogY29uc3QgeCA9ICgoW19fdGVtcCwgX19yZXN0b3JlXSA9IHdpdGhBc3luY0NvbnRleHQoKCkgPT4gZm9vKCkpKSxfX3RlbXA9YXdhaXQgX190ZW1wLF9fcmVzdG9yZSgpLF9fdGVtcClcclxuICogYGBgXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZnVuY3Rpb24gd2l0aEFzeW5jQ29udGV4dChnZXRBd2FpdGFibGUpIHtcclxuICAgIGNvbnN0IGN0eCA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhY3R4KSB7XHJcbiAgICAgICAgd2Fybihgd2l0aEFzeW5jQ29udGV4dCBjYWxsZWQgd2l0aG91dCBhY3RpdmUgY3VycmVudCBpbnN0YW5jZS4gYCArXHJcbiAgICAgICAgICAgIGBUaGlzIGlzIGxpa2VseSBhIGJ1Zy5gKTtcclxuICAgIH1cclxuICAgIGxldCBhd2FpdGFibGUgPSBnZXRBd2FpdGFibGUoKTtcclxuICAgIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XHJcbiAgICBpZiAoaXNQcm9taXNlKGF3YWl0YWJsZSkpIHtcclxuICAgICAgICBhd2FpdGFibGUgPSBhd2FpdGFibGUuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShjdHgpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFthd2FpdGFibGUsICgpID0+IHNldEN1cnJlbnRJbnN0YW5jZShjdHgpXTtcclxufVxuXG4vLyBBY3R1YWwgaW1wbGVtZW50YXRpb25cclxuZnVuY3Rpb24gaCh0eXBlLCBwcm9wc09yQ2hpbGRyZW4sIGNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCBsID0gYXJndW1lbnRzLmxlbmd0aDtcclxuICAgIGlmIChsID09PSAyKSB7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0KHByb3BzT3JDaGlsZHJlbikgJiYgIWlzQXJyYXkocHJvcHNPckNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAvLyBzaW5nbGUgdm5vZGUgd2l0aG91dCBwcm9wc1xyXG4gICAgICAgICAgICBpZiAoaXNWTm9kZShwcm9wc09yQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgbnVsbCwgW3Byb3BzT3JDaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByb3BzIHdpdGhvdXQgY2hpbGRyZW5cclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIHByb3BzT3JDaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBvbWl0IHByb3BzXHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBudWxsLCBwcm9wc09yQ2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChsID4gMykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGwgPT09IDMgJiYgaXNWTm9kZShjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBbY2hpbGRyZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgcHJvcHNPckNoaWxkcmVuLCBjaGlsZHJlbik7XHJcbiAgICB9XHJcbn1cblxuY29uc3Qgc3NyQ29udGV4dEtleSA9IFN5bWJvbCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBgc3NyQ29udGV4dGAgOiBgYCk7XHJcbmNvbnN0IHVzZVNTUkNvbnRleHQgPSAoKSA9PiB7XHJcbiAgICB7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gaW5qZWN0KHNzckNvbnRleHRLZXkpO1xyXG4gICAgICAgIGlmICghY3R4KSB7XHJcbiAgICAgICAgICAgIHdhcm4oYFNlcnZlciByZW5kZXJpbmcgY29udGV4dCBub3QgcHJvdmlkZWQuIE1ha2Ugc3VyZSB0byBvbmx5IGNhbGwgYCArXHJcbiAgICAgICAgICAgICAgICBgdXNlU1NSQ29udGV4dCgpIGNvbmRpdGlvbmFsbHkgaW4gdGhlIHNlcnZlciBidWlsZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN0eDtcclxuICAgIH1cclxufTtcblxuZnVuY3Rpb24gaXNTaGFsbG93KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWVbXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovXSk7XHJcbn1cblxuZnVuY3Rpb24gaW5pdEN1c3RvbUZvcm1hdHRlcigpIHtcclxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xyXG4gICAgaWYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB2dWVTdHlsZSA9IHsgc3R5bGU6ICdjb2xvcjojM2JhNzc2JyB9O1xyXG4gICAgY29uc3QgbnVtYmVyU3R5bGUgPSB7IHN0eWxlOiAnY29sb3I6IzBiMWJjOScgfTtcclxuICAgIGNvbnN0IHN0cmluZ1N0eWxlID0geyBzdHlsZTogJ2NvbG9yOiNiNjJlMjQnIH07XHJcbiAgICBjb25zdCBrZXl3b3JkU3R5bGUgPSB7IHN0eWxlOiAnY29sb3I6IzlkMjg4YycgfTtcclxuICAgIC8vIGN1c3RvbSBmb3JtYXR0ZXIgZm9yIENocm9tZVxyXG4gICAgLy8gaHR0cHM6Ly93d3cubWF0dHpldW5lcnQuY29tLzIwMTYvMDIvMTkvY3VzdG9tLWNocm9tZS1kZXZ0b29scy1vYmplY3QtZm9ybWF0dGVycy5odG1sXHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSB7XHJcbiAgICAgICAgaGVhZGVyKG9iaikge1xyXG4gICAgICAgICAgICAvLyBUT0RPIGFsc28gZm9ybWF0IENvbXBvbmVudFB1YmxpY0luc3RhbmNlICYgY3R4LnNsb3RzL2F0dHJzIGluIHNldHVwXHJcbiAgICAgICAgICAgIGlmICghaXNPYmplY3Qob2JqKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9iai5fX2lzVnVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWydkaXYnLCB2dWVTdHlsZSwgYFZ1ZUluc3RhbmNlYF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWYob2JqKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICBbJ3NwYW4nLCB2dWVTdHlsZSwgZ2VuUmVmRmxhZyhvYmopXSxcclxuICAgICAgICAgICAgICAgICAgICAnPCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0VmFsdWUob2JqLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICBgPmBcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWFjdGl2ZShvYmopKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIFsnc3BhbicsIHZ1ZVN0eWxlLCBpc1NoYWxsb3cob2JqKSA/ICdTaGFsbG93UmVhY3RpdmUnIDogJ1JlYWN0aXZlJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgJzwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFZhbHVlKG9iaiksXHJcbiAgICAgICAgICAgICAgICAgICAgYD4ke2lzUmVhZG9ubHkob2JqKSA/IGAgKHJlYWRvbmx5KWAgOiBgYH1gXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVhZG9ubHkob2JqKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICBbJ3NwYW4nLCB2dWVTdHlsZSwgaXNTaGFsbG93KG9iaikgPyAnU2hhbGxvd1JlYWRvbmx5JyA6ICdSZWFkb25seSddLFxyXG4gICAgICAgICAgICAgICAgICAgICc8JyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRWYWx1ZShvYmopLFxyXG4gICAgICAgICAgICAgICAgICAgICc+J1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhc0JvZHkob2JqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLl9faXNWdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5KG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iai5fX2lzVnVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLmZvcm1hdEluc3RhbmNlKG9iai4kKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBmb3JtYXRJbnN0YW5jZShpbnN0YW5jZSkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IFtdO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZS50eXBlLnByb3BzICYmIGluc3RhbmNlLnByb3BzKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soJ3Byb3BzJywgdG9SYXcoaW5zdGFuY2UucHJvcHMpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnN0YW5jZS5zZXR1cFN0YXRlICE9PSBFTVBUWV9PQkopIHtcclxuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jaygnc2V0dXAnLCBpbnN0YW5jZS5zZXR1cFN0YXRlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnN0YW5jZS5kYXRhICE9PSBFTVBUWV9PQkopIHtcclxuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jaygnZGF0YScsIHRvUmF3KGluc3RhbmNlLmRhdGEpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkID0gZXh0cmFjdEtleXMoaW5zdGFuY2UsICdjb21wdXRlZCcpO1xyXG4gICAgICAgIGlmIChjb21wdXRlZCkge1xyXG4gICAgICAgICAgICBibG9ja3MucHVzaChjcmVhdGVJbnN0YW5jZUJsb2NrKCdjb21wdXRlZCcsIGNvbXB1dGVkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluamVjdGVkID0gZXh0cmFjdEtleXMoaW5zdGFuY2UsICdpbmplY3QnKTtcclxuICAgICAgICBpZiAoaW5qZWN0ZWQpIHtcclxuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jaygnaW5qZWN0ZWQnLCBpbmplY3RlZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBibG9ja3MucHVzaChbXHJcbiAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJ3NwYW4nLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBrZXl3b3JkU3R5bGUuc3R5bGUgKyAnO29wYWNpdHk6MC42NidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAnJCAoaW50ZXJuYWwpOiAnXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFsnb2JqZWN0JywgeyBvYmplY3Q6IGluc3RhbmNlIH1dXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGJsb2NrcztcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlQmxvY2sodHlwZSwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gZXh0ZW5kKHt9LCB0YXJnZXQpO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnc3BhbicsIHt9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgIHsgc3R5bGU6ICdsaW5lLWhlaWdodDoxLjI1ZW07bWFyZ2luLWJvdHRvbTowLjZlbScgfSxcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdjb2xvcjojNDc2NTgyJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHR5cGVcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdwYWRkaW5nLWxlZnQ6MS4yNWVtJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKHRhcmdldCkubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RpdicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ3NwYW4nLCBrZXl3b3JkU3R5bGUsIGtleSArICc6ICddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRWYWx1ZSh0YXJnZXRba2V5XSwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodiwgYXNSYXcgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gWydzcGFuJywgbnVtYmVyU3R5bGUsIHZdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnc3BhbicsIHN0cmluZ1N0eWxlLCBKU09OLnN0cmluZ2lmeSh2KV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnc3BhbicsIGtleXdvcmRTdHlsZSwgdl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ29iamVjdCcsIHsgb2JqZWN0OiBhc1JhdyA/IHRvUmF3KHYpIDogdiB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ3NwYW4nLCBzdHJpbmdTdHlsZSwgU3RyaW5nKHYpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBleHRyYWN0S2V5cyhpbnN0YW5jZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IENvbXAgPSBpbnN0YW5jZS50eXBlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKENvbXApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXh0cmFjdGVkID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5zdGFuY2UuY3R4KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0tleU9mVHlwZShDb21wLCBrZXksIHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBleHRyYWN0ZWRba2V5XSA9IGluc3RhbmNlLmN0eFtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBleHRyYWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpc0tleU9mVHlwZShDb21wLCBrZXksIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBvcHRzID0gQ29tcFt0eXBlXTtcclxuICAgICAgICBpZiAoKGlzQXJyYXkob3B0cykgJiYgb3B0cy5pbmNsdWRlcyhrZXkpKSB8fFxyXG4gICAgICAgICAgICAoaXNPYmplY3Qob3B0cykgJiYga2V5IGluIG9wdHMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQ29tcC5leHRlbmRzICYmIGlzS2V5T2ZUeXBlKENvbXAuZXh0ZW5kcywga2V5LCB0eXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKENvbXAubWl4aW5zICYmIENvbXAubWl4aW5zLnNvbWUobSA9PiBpc0tleU9mVHlwZShtLCBrZXksIHR5cGUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBnZW5SZWZGbGFnKHYpIHtcclxuICAgICAgICBpZiAoaXNTaGFsbG93KHYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgU2hhbGxvd1JlZmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2LmVmZmVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYENvbXB1dGVkUmVmYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGBSZWZgO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMpIHtcclxuICAgICAgICB3aW5kb3cuZGV2dG9vbHNGb3JtYXR0ZXJzLnB1c2goZm9ybWF0dGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMgPSBbZm9ybWF0dGVyXTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiB3aXRoTWVtbyhtZW1vLCByZW5kZXIsIGNhY2hlLCBpbmRleCkge1xyXG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGVbaW5kZXhdO1xyXG4gICAgaWYgKGNhY2hlZCAmJiBpc01lbW9TYW1lKGNhY2hlZCwgbWVtbykpIHtcclxuICAgICAgICByZXR1cm4gY2FjaGVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0ID0gcmVuZGVyKCk7XHJcbiAgICAvLyBzaGFsbG93IGNsb25lXHJcbiAgICByZXQubWVtbyA9IG1lbW8uc2xpY2UoKTtcclxuICAgIHJldHVybiAoY2FjaGVbaW5kZXhdID0gcmV0KTtcclxufVxyXG5mdW5jdGlvbiBpc01lbW9TYW1lKGNhY2hlZCwgbWVtbykge1xyXG4gICAgY29uc3QgcHJldiA9IGNhY2hlZC5tZW1vO1xyXG4gICAgaWYgKHByZXYubGVuZ3RoICE9IG1lbW8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGhhc0NoYW5nZWQocHJldltpXSwgbWVtb1tpXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG1ha2Ugc3VyZSB0byBsZXQgcGFyZW50IGJsb2NrIHRyYWNrIGl0IHdoZW4gcmV0dXJuaW5nIGNhY2hlZFxyXG4gICAgaWYgKGlzQmxvY2tUcmVlRW5hYmxlZCA+IDAgJiYgY3VycmVudEJsb2NrKSB7XHJcbiAgICAgICAgY3VycmVudEJsb2NrLnB1c2goY2FjaGVkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XG5cbi8vIENvcmUgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5jb25zdCB2ZXJzaW9uID0gXCIzLjIuMzhcIjtcclxuY29uc3QgX3NzclV0aWxzID0ge1xyXG4gICAgY3JlYXRlQ29tcG9uZW50SW5zdGFuY2UsXHJcbiAgICBzZXR1cENvbXBvbmVudCxcclxuICAgIHJlbmRlckNvbXBvbmVudFJvb3QsXHJcbiAgICBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UsXHJcbiAgICBpc1ZOb2RlLFxyXG4gICAgbm9ybWFsaXplVk5vZGVcclxufTtcclxuLyoqXHJcbiAqIFNTUiB1dGlscyBmb3IgXFxAdnVlL3NlcnZlci1yZW5kZXJlci4gT25seSBleHBvc2VkIGluIHNzci1wb3NzaWJsZSBidWlsZHMuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuY29uc3Qgc3NyVXRpbHMgPSAoX3NzclV0aWxzICk7XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgb25seSBleHBvc2VkIGluIGNvbXBhdCBidWlsZHNcclxuICovXHJcbmNvbnN0IHJlc29sdmVGaWx0ZXIgPSBudWxsO1xyXG4vKipcclxuICogQGludGVybmFsIG9ubHkgZXhwb3NlZCBpbiBjb21wYXQgYnVpbGRzLlxyXG4gKi9cclxuY29uc3QgY29tcGF0VXRpbHMgPSAobnVsbCk7XG5cbmV4cG9ydCB7IEJhc2VUcmFuc2l0aW9uLCBDb21tZW50LCBGcmFnbWVudCwgS2VlcEFsaXZlLCBTdGF0aWMsIFN1c3BlbnNlLCBUZWxlcG9ydCwgVGV4dCwgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcsIGNhbGxXaXRoRXJyb3JIYW5kbGluZywgY2xvbmVWTm9kZSwgY29tcGF0VXRpbHMsIGNvbXB1dGVkLCBjcmVhdGVCbG9jaywgY3JlYXRlQ29tbWVudFZOb2RlLCBjcmVhdGVFbGVtZW50QmxvY2ssIGNyZWF0ZUJhc2VWTm9kZSBhcyBjcmVhdGVFbGVtZW50Vk5vZGUsIGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyLCBjcmVhdGVQcm9wc1Jlc3RQcm94eSwgY3JlYXRlUmVuZGVyZXIsIGNyZWF0ZVNsb3RzLCBjcmVhdGVTdGF0aWNWTm9kZSwgY3JlYXRlVGV4dFZOb2RlLCBjcmVhdGVWTm9kZSwgZGVmaW5lQXN5bmNDb21wb25lbnQsIGRlZmluZUNvbXBvbmVudCwgZGVmaW5lRW1pdHMsIGRlZmluZUV4cG9zZSwgZGVmaW5lUHJvcHMsIGRldnRvb2xzLCBnZXRDdXJyZW50SW5zdGFuY2UsIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbiwgZ3VhcmRSZWFjdGl2ZVByb3BzLCBoLCBoYW5kbGVFcnJvciwgaW5pdEN1c3RvbUZvcm1hdHRlciwgaW5qZWN0LCBpc01lbW9TYW1lLCBpc1J1bnRpbWVPbmx5LCBpc1ZOb2RlLCBtZXJnZURlZmF1bHRzLCBtZXJnZVByb3BzLCBuZXh0VGljaywgb25BY3RpdmF0ZWQsIG9uQmVmb3JlTW91bnQsIG9uQmVmb3JlVW5tb3VudCwgb25CZWZvcmVVcGRhdGUsIG9uRGVhY3RpdmF0ZWQsIG9uRXJyb3JDYXB0dXJlZCwgb25Nb3VudGVkLCBvblJlbmRlclRyYWNrZWQsIG9uUmVuZGVyVHJpZ2dlcmVkLCBvblNlcnZlclByZWZldGNoLCBvblVubW91bnRlZCwgb25VcGRhdGVkLCBvcGVuQmxvY2ssIHBvcFNjb3BlSWQsIHByb3ZpZGUsIHB1c2hTY29wZUlkLCBxdWV1ZVBvc3RGbHVzaENiLCByZWdpc3RlclJ1bnRpbWVDb21waWxlciwgcmVuZGVyTGlzdCwgcmVuZGVyU2xvdCwgcmVzb2x2ZUNvbXBvbmVudCwgcmVzb2x2ZURpcmVjdGl2ZSwgcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQsIHJlc29sdmVGaWx0ZXIsIHJlc29sdmVUcmFuc2l0aW9uSG9va3MsIHNldEJsb2NrVHJhY2tpbmcsIHNldERldnRvb2xzSG9vaywgc2V0VHJhbnNpdGlvbkhvb2tzLCBzc3JDb250ZXh0S2V5LCBzc3JVdGlscywgdG9IYW5kbGVycywgdHJhbnNmb3JtVk5vZGVBcmdzLCB1c2VBdHRycywgdXNlU1NSQ29udGV4dCwgdXNlU2xvdHMsIHVzZVRyYW5zaXRpb25TdGF0ZSwgdmVyc2lvbiwgd2Fybiwgd2F0Y2gsIHdhdGNoRWZmZWN0LCB3YXRjaFBvc3RFZmZlY3QsIHdhdGNoU3luY0VmZmVjdCwgd2l0aEFzeW5jQ29udGV4dCwgd2l0aEN0eCwgd2l0aERlZmF1bHRzLCB3aXRoRGlyZWN0aXZlcywgd2l0aE1lbW8sIHdpdGhTY29wZUlkIH07XG4iLCJpbXBvcnQgeyBjYW1lbGl6ZSwgd2FybiwgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcsIGRlZmluZUNvbXBvbmVudCwgbmV4dFRpY2ssIGNyZWF0ZVZOb2RlLCBnZXRDdXJyZW50SW5zdGFuY2UsIHdhdGNoUG9zdEVmZmVjdCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgRnJhZ21lbnQsIFN0YXRpYywgaCwgQmFzZVRyYW5zaXRpb24sIHVzZVRyYW5zaXRpb25TdGF0ZSwgb25VcGRhdGVkLCB0b1JhdywgZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuLCBzZXRUcmFuc2l0aW9uSG9va3MsIHJlc29sdmVUcmFuc2l0aW9uSG9va3MsIGNyZWF0ZVJlbmRlcmVyLCBpc1J1bnRpbWVPbmx5LCBjcmVhdGVIeWRyYXRpb25SZW5kZXJlciB9IGZyb20gJ0B2dWUvcnVudGltZS1jb3JlJztcbmV4cG9ydCAqIGZyb20gJ0B2dWUvcnVudGltZS1jb3JlJztcbmltcG9ydCB7IGlzU3RyaW5nLCBpc0FycmF5LCBoeXBoZW5hdGUsIGNhcGl0YWxpemUsIGlzU3BlY2lhbEJvb2xlYW5BdHRyLCBpbmNsdWRlQm9vbGVhbkF0dHIsIGlzT24sIGlzTW9kZWxMaXN0ZW5lciwgaXNGdW5jdGlvbiwgdG9OdW1iZXIsIGNhbWVsaXplIGFzIGNhbWVsaXplJDEsIGV4dGVuZCwgRU1QVFlfT0JKLCBpc09iamVjdCwgaW52b2tlQXJyYXlGbnMsIGxvb3NlSW5kZXhPZiwgaXNTZXQsIGxvb3NlRXF1YWwsIGlzSFRNTFRhZywgaXNTVkdUYWcgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IHN2Z05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcclxuY29uc3QgZG9jID0gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IG51bGwpO1xyXG5jb25zdCB0ZW1wbGF0ZUNvbnRhaW5lciA9IGRvYyAmJiAvKiNfX1BVUkVfXyovIGRvYy5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xyXG5jb25zdCBub2RlT3BzID0ge1xyXG4gICAgaW5zZXJ0OiAoY2hpbGQsIHBhcmVudCwgYW5jaG9yKSA9PiB7XHJcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgYW5jaG9yIHx8IG51bGwpO1xyXG4gICAgfSxcclxuICAgIHJlbW92ZTogY2hpbGQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjcmVhdGVFbGVtZW50OiAodGFnLCBpc1NWRywgaXMsIHByb3BzKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSBpc1NWR1xyXG4gICAgICAgICAgICA/IGRvYy5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIHRhZylcclxuICAgICAgICAgICAgOiBkb2MuY3JlYXRlRWxlbWVudCh0YWcsIGlzID8geyBpcyB9IDogdW5kZWZpbmVkKTtcclxuICAgICAgICBpZiAodGFnID09PSAnc2VsZWN0JyAmJiBwcm9wcyAmJiBwcm9wcy5tdWx0aXBsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCBwcm9wcy5tdWx0aXBsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVUZXh0OiB0ZXh0ID0+IGRvYy5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSxcclxuICAgIGNyZWF0ZUNvbW1lbnQ6IHRleHQgPT4gZG9jLmNyZWF0ZUNvbW1lbnQodGV4dCksXHJcbiAgICBzZXRUZXh0OiAobm9kZSwgdGV4dCkgPT4ge1xyXG4gICAgICAgIG5vZGUubm9kZVZhbHVlID0gdGV4dDtcclxuICAgIH0sXHJcbiAgICBzZXRFbGVtZW50VGV4dDogKGVsLCB0ZXh0KSA9PiB7XHJcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG4gICAgfSxcclxuICAgIHBhcmVudE5vZGU6IG5vZGUgPT4gbm9kZS5wYXJlbnROb2RlLFxyXG4gICAgbmV4dFNpYmxpbmc6IG5vZGUgPT4gbm9kZS5uZXh0U2libGluZyxcclxuICAgIHF1ZXJ5U2VsZWN0b3I6IHNlbGVjdG9yID0+IGRvYy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSxcclxuICAgIHNldFNjb3BlSWQoZWwsIGlkKSB7XHJcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGlkLCAnJyk7XHJcbiAgICB9LFxyXG4gICAgY2xvbmVOb2RlKGVsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gZWwuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIC8vICMzMDcyXHJcbiAgICAgICAgLy8gLSBpbiBgcGF0Y2hET01Qcm9wYCwgd2Ugc3RvcmUgdGhlIGFjdHVhbCB2YWx1ZSBpbiB0aGUgYGVsLl92YWx1ZWAgcHJvcGVydHkuXHJcbiAgICAgICAgLy8gLSBub3JtYWxseSwgZWxlbWVudHMgdXNpbmcgYDp2YWx1ZWAgYmluZGluZ3Mgd2lsbCBub3QgYmUgaG9pc3RlZCwgYnV0IGlmXHJcbiAgICAgICAgLy8gICB0aGUgYm91bmQgdmFsdWUgaXMgYSBjb25zdGFudCwgZS5nLiBgOnZhbHVlPVwidHJ1ZVwiYCAtIHRoZXkgZG8gZ2V0XHJcbiAgICAgICAgLy8gICBob2lzdGVkLlxyXG4gICAgICAgIC8vIC0gaW4gcHJvZHVjdGlvbiwgaG9pc3RlZCBub2RlcyBhcmUgY2xvbmVkIHdoZW4gc3Vic2VxdWVudCBpbnNlcnRzLCBidXRcclxuICAgICAgICAvLyAgIGNsb25lTm9kZSgpIGRvZXMgbm90IGNvcHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSB3ZSBhdHRhY2hlZC5cclxuICAgICAgICAvLyAtIFRoaXMgbWF5IG5lZWQgdG8gYWNjb3VudCBmb3Igb3RoZXIgY3VzdG9tIERPTSBwcm9wZXJ0aWVzIHdlIGF0dGFjaCB0b1xyXG4gICAgICAgIC8vICAgZWxlbWVudHMgaW4gYWRkaXRpb24gdG8gYF92YWx1ZWAgaW4gdGhlIGZ1dHVyZS5cclxuICAgICAgICBpZiAoYF92YWx1ZWAgaW4gZWwpIHtcclxuICAgICAgICAgICAgY2xvbmVkLl92YWx1ZSA9IGVsLl92YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH0sXHJcbiAgICAvLyBfX1VOU0FGRV9fXHJcbiAgICAvLyBSZWFzb246IGlubmVySFRNTC5cclxuICAgIC8vIFN0YXRpYyBjb250ZW50IGhlcmUgY2FuIG9ubHkgY29tZSBmcm9tIGNvbXBpbGVkIHRlbXBsYXRlcy5cclxuICAgIC8vIEFzIGxvbmcgYXMgdGhlIHVzZXIgb25seSB1c2VzIHRydXN0ZWQgdGVtcGxhdGVzLCB0aGlzIGlzIHNhZmUuXHJcbiAgICBpbnNlcnRTdGF0aWNDb250ZW50KGNvbnRlbnQsIHBhcmVudCwgYW5jaG9yLCBpc1NWRywgc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIC8vIDxwYXJlbnQ+IGJlZm9yZSB8IGZpcnN0IC4uLiBsYXN0IHwgYW5jaG9yIDwvcGFyZW50PlxyXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGFuY2hvciA/IGFuY2hvci5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkO1xyXG4gICAgICAgIC8vICM1MzA4IGNhbiBvbmx5IHRha2UgY2FjaGVkIHBhdGggaWY6XHJcbiAgICAgICAgLy8gLSBoYXMgYSBzaW5nbGUgcm9vdCBub2RlXHJcbiAgICAgICAgLy8gLSBuZXh0U2libGluZyBpbmZvIGlzIHN0aWxsIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmIChzdGFydCAmJiAoc3RhcnQgPT09IGVuZCB8fCBzdGFydC5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgLy8gY2FjaGVkXHJcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHN0YXJ0LmNsb25lTm9kZSh0cnVlKSwgYW5jaG9yKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kIHx8ICEoc3RhcnQgPSBzdGFydC5uZXh0U2libGluZykpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGZyZXNoIGluc2VydFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvbnRhaW5lci5pbm5lckhUTUwgPSBpc1NWRyA/IGA8c3ZnPiR7Y29udGVudH08L3N2Zz5gIDogY29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZUNvbnRhaW5lci5jb250ZW50O1xyXG4gICAgICAgICAgICBpZiAoaXNTVkcpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvdXRlciBzdmcgd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRlbXBsYXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuYXBwZW5kQ2hpbGQod3JhcHBlci5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGVtcGxhdGUsIGFuY2hvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIC8vIGZpcnN0XHJcbiAgICAgICAgICAgIGJlZm9yZSA/IGJlZm9yZS5uZXh0U2libGluZyA6IHBhcmVudC5maXJzdENoaWxkLFxyXG4gICAgICAgICAgICAvLyBsYXN0XHJcbiAgICAgICAgICAgIGFuY2hvciA/IGFuY2hvci5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxufTtcblxuLy8gY29tcGlsZXIgc2hvdWxkIG5vcm1hbGl6ZSBjbGFzcyArIDpjbGFzcyBiaW5kaW5ncyBvbiB0aGUgc2FtZSBlbGVtZW50XHJcbi8vIGludG8gYSBzaW5nbGUgYmluZGluZyBbJ3N0YXRpY0NsYXNzJywgZHluYW1pY11cclxuZnVuY3Rpb24gcGF0Y2hDbGFzcyhlbCwgdmFsdWUsIGlzU1ZHKSB7XHJcbiAgICAvLyBkaXJlY3RseSBzZXR0aW5nIGNsYXNzTmFtZSBzaG91bGQgYmUgZmFzdGVyIHRoYW4gc2V0QXR0cmlidXRlIGluIHRoZW9yeVxyXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBlbGVtZW50IGR1cmluZyBhIHRyYW5zaXRpb24sIHRha2UgdGhlIHRlbXBvcmFyeSB0cmFuc2l0aW9uXHJcbiAgICAvLyBjbGFzc2VzIGludG8gYWNjb3VudC5cclxuICAgIGNvbnN0IHRyYW5zaXRpb25DbGFzc2VzID0gZWwuX3Z0YztcclxuICAgIGlmICh0cmFuc2l0aW9uQ2xhc3Nlcykge1xyXG4gICAgICAgIHZhbHVlID0gKHZhbHVlID8gW3ZhbHVlLCAuLi50cmFuc2l0aW9uQ2xhc3Nlc10gOiBbLi4udHJhbnNpdGlvbkNsYXNzZXNdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU1ZHKSB7XHJcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIHBhdGNoU3R5bGUoZWwsIHByZXYsIG5leHQpIHtcclxuICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGU7XHJcbiAgICBjb25zdCBpc0Nzc1N0cmluZyA9IGlzU3RyaW5nKG5leHQpO1xyXG4gICAgaWYgKG5leHQgJiYgIWlzQ3NzU3RyaW5nKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV4dCkge1xyXG4gICAgICAgICAgICBzZXRTdHlsZShzdHlsZSwga2V5LCBuZXh0W2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldiAmJiAhaXNTdHJpbmcocHJldikpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJldikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRba2V5XSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0U3R5bGUoc3R5bGUsIGtleSwgJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xyXG4gICAgICAgIGlmIChpc0Nzc1N0cmluZykge1xyXG4gICAgICAgICAgICBpZiAocHJldiAhPT0gbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuY3NzVGV4dCA9IG5leHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJldikge1xyXG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluZGljYXRlcyB0aGF0IHRoZSBgZGlzcGxheWAgb2YgdGhlIGVsZW1lbnQgaXMgY29udHJvbGxlZCBieSBgdi1zaG93YCxcclxuICAgICAgICAvLyBzbyB3ZSBhbHdheXMga2VlcCB0aGUgY3VycmVudCBgZGlzcGxheWAgdmFsdWUgcmVnYXJkbGVzcyBvZiB0aGUgYHN0eWxlYFxyXG4gICAgICAgIC8vIHZhbHVlLCB0aHVzIGhhbmRpbmcgb3ZlciBjb250cm9sIHRvIGB2LXNob3dgLlxyXG4gICAgICAgIGlmICgnX3ZvZCcgaW4gZWwpIHtcclxuICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9IGN1cnJlbnREaXNwbGF5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5jb25zdCBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xyXG5mdW5jdGlvbiBzZXRTdHlsZShzdHlsZSwgbmFtZSwgdmFsKSB7XHJcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgICAgdmFsLmZvckVhY2godiA9PiBzZXRTdHlsZShzdHlsZSwgbmFtZSwgdikpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICB2YWwgPSAnJztcclxuICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCctLScpKSB7XHJcbiAgICAgICAgICAgIC8vIGN1c3RvbSBwcm9wZXJ0eSBkZWZpbml0aW9uXHJcbiAgICAgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhlZCA9IGF1dG9QcmVmaXgoc3R5bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAhaW1wb3J0YW50XHJcbiAgICAgICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUocHJlZml4ZWQpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVtwcmVmaXhlZF0gPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuY29uc3QgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcclxuY29uc3QgcHJlZml4Q2FjaGUgPSB7fTtcclxuZnVuY3Rpb24gYXV0b1ByZWZpeChzdHlsZSwgcmF3TmFtZSkge1xyXG4gICAgY29uc3QgY2FjaGVkID0gcHJlZml4Q2FjaGVbcmF3TmFtZV07XHJcbiAgICBpZiAoY2FjaGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgIH1cclxuICAgIGxldCBuYW1lID0gY2FtZWxpemUocmF3TmFtZSk7XHJcbiAgICBpZiAobmFtZSAhPT0gJ2ZpbHRlcicgJiYgbmFtZSBpbiBzdHlsZSkge1xyXG4gICAgICAgIHJldHVybiAocHJlZml4Q2FjaGVbcmF3TmFtZV0gPSBuYW1lKTtcclxuICAgIH1cclxuICAgIG5hbWUgPSBjYXBpdGFsaXplKG5hbWUpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHByZWZpeGVkID0gcHJlZml4ZXNbaV0gKyBuYW1lO1xyXG4gICAgICAgIGlmIChwcmVmaXhlZCBpbiBzdHlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHByZWZpeENhY2hlW3Jhd05hbWVdID0gcHJlZml4ZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByYXdOYW1lO1xyXG59XG5cbmNvbnN0IHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XHJcbmZ1bmN0aW9uIHBhdGNoQXR0cihlbCwga2V5LCB2YWx1ZSwgaXNTVkcsIGluc3RhbmNlKSB7XHJcbiAgICBpZiAoaXNTVkcgJiYga2V5LnN0YXJ0c1dpdGgoJ3hsaW5rOicpKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywga2V5LnNsaWNlKDYsIGtleS5sZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIG5vdGUgd2UgYXJlIG9ubHkgY2hlY2tpbmcgYm9vbGVhbiBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhXHJcbiAgICAgICAgLy8gY29ycmVzcG9uZGluZyBkb20gcHJvcCBvZiB0aGUgc2FtZSBuYW1lIGhlcmUuXHJcbiAgICAgICAgY29uc3QgaXNCb29sZWFuID0gaXNTcGVjaWFsQm9vbGVhbkF0dHIoa2V5KTtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAoaXNCb29sZWFuICYmICFpbmNsdWRlQm9vbGVhbkF0dHIodmFsdWUpKSkge1xyXG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGlzQm9vbGVhbiA/ICcnIDogdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vLyBfX1VOU0FGRV9fXHJcbi8vIGZ1bmN0aW9ucy4gVGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIHVzaW5nIHRoZW0gd2l0aCBvbmx5IHRydXN0ZWQgY29udGVudC5cclxuZnVuY3Rpb24gcGF0Y2hET01Qcm9wKGVsLCBrZXksIHZhbHVlLCBcclxuLy8gdGhlIGZvbGxvd2luZyBhcmdzIGFyZSBwYXNzZWQgb25seSBkdWUgdG8gcG90ZW50aWFsIGlubmVySFRNTC90ZXh0Q29udGVudFxyXG4vLyBvdmVycmlkaW5nIGV4aXN0aW5nIFZOb2RlcywgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIHRyZWUgbXVzdCBiZSBwcm9wZXJseVxyXG4vLyB1bm1vdW50ZWQuXHJcbnByZXZDaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdW5tb3VudENoaWxkcmVuKSB7XHJcbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyB8fCBrZXkgPT09ICd0ZXh0Q29udGVudCcpIHtcclxuICAgICAgICBpZiAocHJldkNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbFtrZXldID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJlxyXG4gICAgICAgIGVsLnRhZ05hbWUgIT09ICdQUk9HUkVTUycgJiZcclxuICAgICAgICAvLyBjdXN0b20gZWxlbWVudHMgbWF5IHVzZSBfdmFsdWUgaW50ZXJuYWxseVxyXG4gICAgICAgICFlbC50YWdOYW1lLmluY2x1ZGVzKCctJykpIHtcclxuICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxyXG4gICAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWQuXHJcbiAgICAgICAgZWwuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcclxuICAgICAgICBpZiAoZWwudmFsdWUgIT09IG5ld1ZhbHVlIHx8XHJcbiAgICAgICAgICAgIC8vICM0OTU2OiBhbHdheXMgc2V0IGZvciBPUFRJT04gZWxlbWVudHMgYmVjYXVzZSBpdHMgdmFsdWUgZmFsbHMgYmFjayB0b1xyXG4gICAgICAgICAgICAvLyB0ZXh0Q29udGVudCBpZiBubyB2YWx1ZSBhdHRyaWJ1dGUgaXMgcHJlc2VudC4gQW5kIHNldHRpbmcgLnZhbHVlIGZvclxyXG4gICAgICAgICAgICAvLyBPUFRJT04gaGFzIG5vIHNpZGUgZWZmZWN0XHJcbiAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdPUFRJT04nKSB7XHJcbiAgICAgICAgICAgIGVsLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbmVlZFJlbW92ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBlbFtrZXldO1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgLy8gZS5nLiA8c2VsZWN0IG11bHRpcGxlPiBjb21waWxlcyB0byB7IG11bHRpcGxlOiAnJyB9XHJcbiAgICAgICAgICAgIHZhbHVlID0gaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCAmJiB0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvLyBlLmcuIDxkaXYgOmlkPVwibnVsbFwiPlxyXG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICBuZWVkUmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgLy8gZS5nLiA8aW1nIDp3aWR0aD1cIm51bGxcIj5cclxuICAgICAgICAgICAgLy8gdGhlIHZhbHVlIG9mIHNvbWUgSURMIGF0dHIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCwgZS5nLiBpbnB1dC5zaXplID0gMCAtPiBlcnJvclxyXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIG5lZWRSZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHNvbWUgcHJvcGVydGllcyBwZXJmb3JtIHZhbHVlIHZhbGlkYXRpb24gYW5kIHRocm93LFxyXG4gICAgLy8gc29tZSBwcm9wZXJ0aWVzIGhhcyBnZXR0ZXIsIG5vIHNldHRlciwgd2lsbCBlcnJvciBpbiAndXNlIHN0cmljdCdcclxuICAgIC8vIGVnLiA8c2VsZWN0IDp0eXBlPVwibnVsbFwiPjwvc2VsZWN0PiA8c2VsZWN0IDp3aWxsVmFsaWRhdGU9XCJudWxsXCI+PC9zZWxlY3Q+XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVsW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICB3YXJuKGBGYWlsZWQgc2V0dGluZyBwcm9wIFwiJHtrZXl9XCIgb24gPCR7ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpfT46IGAgK1xyXG4gICAgICAgICAgICAgICAgYHZhbHVlICR7dmFsdWV9IGlzIGludmFsaWQuYCwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmVlZFJlbW92ZSAmJiBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcclxufVxuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxyXG5jb25zdCBbX2dldE5vdywgc2tpcFRpbWVzdGFtcENoZWNrXSA9IC8qI19fUFVSRV9fKi8gKCgpID0+IHtcclxuICAgIGxldCBfZ2V0Tm93ID0gRGF0ZS5ub3c7XHJcbiAgICBsZXQgc2tpcFRpbWVzdGFtcENoZWNrID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxyXG4gICAgICAgIC8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXHJcbiAgICAgICAgLy8gKHJlbGF0aXZlIHRvIFVOSVggZXBvY2gpLCBzbyBpbiBvcmRlciB0byBjb21wYXJlIHRpbWUgd2UgaGF2ZSB0byB1c2UgdGhlXHJcbiAgICAgICAgLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxyXG4gICAgICAgIGlmIChEYXRlLm5vdygpID4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykudGltZVN0YW1wKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBsb3ctcmVzIHRpbWVzdGFtcCB3aGljaCBpcyBiaWdnZXIgdGhhbiB0aGUgZXZlbnQgdGltZXN0YW1wXHJcbiAgICAgICAgICAgIC8vICh3aGljaCBpcyBldmFsdWF0ZWQgQUZURVIpIGl0IG1lYW5zIHRoZSBldmVudCBpcyB1c2luZyBhIGhpLXJlcyB0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVycyBhcyB3ZWxsLlxyXG4gICAgICAgICAgICBfZ2V0Tm93ID0gcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAjMzQ4NTogRmlyZWZveCA8PSA1MyBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc28gc2FmZSB0byBleGNsdWRlLlxyXG4gICAgICAgIGNvbnN0IGZmTWF0Y2ggPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xyXG4gICAgICAgIHNraXBUaW1lc3RhbXBDaGVjayA9ICEhKGZmTWF0Y2ggJiYgTnVtYmVyKGZmTWF0Y2hbMV0pIDw9IDUzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbX2dldE5vdywgc2tpcFRpbWVzdGFtcENoZWNrXTtcclxufSkoKTtcclxuLy8gVG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkbHkgY2FsbGluZyBwZXJmb3JtYW5jZS5ub3coKSwgd2UgY2FjaGVcclxuLy8gYW5kIHVzZSB0aGUgc2FtZSB0aW1lc3RhbXAgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnMgYXR0YWNoZWQgaW4gdGhlIHNhbWUgdGljay5cclxubGV0IGNhY2hlZE5vdyA9IDA7XHJcbmNvbnN0IHAgPSAvKiNfX1BVUkVfXyovIFByb21pc2UucmVzb2x2ZSgpO1xyXG5jb25zdCByZXNldCA9ICgpID0+IHtcclxuICAgIGNhY2hlZE5vdyA9IDA7XHJcbn07XHJcbmNvbnN0IGdldE5vdyA9ICgpID0+IGNhY2hlZE5vdyB8fCAocC50aGVuKHJlc2V0KSwgKGNhY2hlZE5vdyA9IF9nZXROb3coKSkpO1xyXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGVsLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcclxuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIHBhdGNoRXZlbnQoZWwsIHJhd05hbWUsIHByZXZWYWx1ZSwgbmV4dFZhbHVlLCBpbnN0YW5jZSA9IG51bGwpIHtcclxuICAgIC8vIHZlaSA9IHZ1ZSBldmVudCBpbnZva2Vyc1xyXG4gICAgY29uc3QgaW52b2tlcnMgPSBlbC5fdmVpIHx8IChlbC5fdmVpID0ge30pO1xyXG4gICAgY29uc3QgZXhpc3RpbmdJbnZva2VyID0gaW52b2tlcnNbcmF3TmFtZV07XHJcbiAgICBpZiAobmV4dFZhbHVlICYmIGV4aXN0aW5nSW52b2tlcikge1xyXG4gICAgICAgIC8vIHBhdGNoXHJcbiAgICAgICAgZXhpc3RpbmdJbnZva2VyLnZhbHVlID0gbmV4dFZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIG9wdGlvbnNdID0gcGFyc2VOYW1lKHJhd05hbWUpO1xyXG4gICAgICAgIGlmIChuZXh0VmFsdWUpIHtcclxuICAgICAgICAgICAgLy8gYWRkXHJcbiAgICAgICAgICAgIGNvbnN0IGludm9rZXIgPSAoaW52b2tlcnNbcmF3TmFtZV0gPSBjcmVhdGVJbnZva2VyKG5leHRWYWx1ZSwgaW5zdGFuY2UpKTtcclxuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgbmFtZSwgaW52b2tlciwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4aXN0aW5nSW52b2tlcikge1xyXG4gICAgICAgICAgICAvLyByZW1vdmVcclxuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgbmFtZSwgZXhpc3RpbmdJbnZva2VyLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgaW52b2tlcnNbcmF3TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9wdGlvbnNNb2RpZmllclJFID0gLyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO1xyXG5mdW5jdGlvbiBwYXJzZU5hbWUobmFtZSkge1xyXG4gICAgbGV0IG9wdGlvbnM7XHJcbiAgICBpZiAob3B0aW9uc01vZGlmaWVyUkUudGVzdChuYW1lKSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7fTtcclxuICAgICAgICBsZXQgbTtcclxuICAgICAgICB3aGlsZSAoKG0gPSBuYW1lLm1hdGNoKG9wdGlvbnNNb2RpZmllclJFKSkpIHtcclxuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgbmFtZS5sZW5ndGggLSBtWzBdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbbVswXS50b0xvd2VyQ2FzZSgpXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXZlbnQgPSBuYW1lWzJdID09PSAnOicgPyBuYW1lLnNsaWNlKDMpIDogaHlwaGVuYXRlKG5hbWUuc2xpY2UoMikpO1xyXG4gICAgcmV0dXJuIFtldmVudCwgb3B0aW9uc107XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW52b2tlcihpbml0aWFsVmFsdWUsIGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBpbnZva2VyID0gKGUpID0+IHtcclxuICAgICAgICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXHJcbiAgICAgICAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcclxuICAgICAgICAvLyBoYXBwZW5zIGJlY2F1c2UgYnJvd3NlcnMgZmlyZSBtaWNyb3Rhc2sgdGlja3MgYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbi5cclxuICAgICAgICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXHJcbiAgICAgICAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxyXG4gICAgICAgIC8vIEFGVEVSIGl0IHdhcyBhdHRhY2hlZC5cclxuICAgICAgICBjb25zdCB0aW1lU3RhbXAgPSBlLnRpbWVTdGFtcCB8fCBfZ2V0Tm93KCk7XHJcbiAgICAgICAgaWYgKHNraXBUaW1lc3RhbXBDaGVjayB8fCB0aW1lU3RhbXAgPj0gaW52b2tlci5hdHRhY2hlZCAtIDEpIHtcclxuICAgICAgICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcocGF0Y2hTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZSwgaW52b2tlci52YWx1ZSksIGluc3RhbmNlLCA1IC8qIEVycm9yQ29kZXMuTkFUSVZFX0VWRU5UX0hBTkRMRVIgKi8sIFtlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGludm9rZXIudmFsdWUgPSBpbml0aWFsVmFsdWU7XHJcbiAgICBpbnZva2VyLmF0dGFjaGVkID0gZ2V0Tm93KCk7XHJcbiAgICByZXR1cm4gaW52b2tlcjtcclxufVxyXG5mdW5jdGlvbiBwYXRjaFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbihlLCB2YWx1ZSkge1xyXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdG9wID0gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247XHJcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsU3RvcC5jYWxsKGUpO1xyXG4gICAgICAgICAgICBlLl9zdG9wcGVkID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZm4gPT4gKGUpID0+ICFlLl9zdG9wcGVkICYmIGZuICYmIGZuKGUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxuXG5jb25zdCBuYXRpdmVPblJFID0gL15vblthLXpdLztcclxuY29uc3QgcGF0Y2hQcm9wID0gKGVsLCBrZXksIHByZXZWYWx1ZSwgbmV4dFZhbHVlLCBpc1NWRyA9IGZhbHNlLCBwcmV2Q2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbikgPT4ge1xyXG4gICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgIHBhdGNoQ2xhc3MoZWwsIG5leHRWYWx1ZSwgaXNTVkcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XHJcbiAgICAgICAgcGF0Y2hTdHlsZShlbCwgcHJldlZhbHVlLCBuZXh0VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPbihrZXkpKSB7XHJcbiAgICAgICAgLy8gaWdub3JlIHYtbW9kZWwgbGlzdGVuZXJzXHJcbiAgICAgICAgaWYgKCFpc01vZGVsTGlzdGVuZXIoa2V5KSkge1xyXG4gICAgICAgICAgICBwYXRjaEV2ZW50KGVsLCBrZXksIHByZXZWYWx1ZSwgbmV4dFZhbHVlLCBwYXJlbnRDb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGtleVswXSA9PT0gJy4nXHJcbiAgICAgICAgPyAoKGtleSA9IGtleS5zbGljZSgxKSksIHRydWUpXHJcbiAgICAgICAgOiBrZXlbMF0gPT09ICdeJ1xyXG4gICAgICAgICAgICA/ICgoa2V5ID0ga2V5LnNsaWNlKDEpKSwgZmFsc2UpXHJcbiAgICAgICAgICAgIDogc2hvdWxkU2V0QXNQcm9wKGVsLCBrZXksIG5leHRWYWx1ZSwgaXNTVkcpKSB7XHJcbiAgICAgICAgcGF0Y2hET01Qcm9wKGVsLCBrZXksIG5leHRWYWx1ZSwgcHJldkNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB1bm1vdW50Q2hpbGRyZW4pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciA8aW5wdXQgdi1tb2RlbCB0eXBlPVwiY2hlY2tib3hcIj4gd2l0aFxyXG4gICAgICAgIC8vIDp0cnVlLXZhbHVlICYgOmZhbHNlLXZhbHVlXHJcbiAgICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgZG9tIHByb3BlcnRpZXMgc2luY2Ugbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZVxyXG4gICAgICAgIC8vIHN0cmluZ2lmaWVkLlxyXG4gICAgICAgIGlmIChrZXkgPT09ICd0cnVlLXZhbHVlJykge1xyXG4gICAgICAgICAgICBlbC5fdHJ1ZVZhbHVlID0gbmV4dFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdmYWxzZS12YWx1ZScpIHtcclxuICAgICAgICAgICAgZWwuX2ZhbHNlVmFsdWUgPSBuZXh0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhdGNoQXR0cihlbCwga2V5LCBuZXh0VmFsdWUsIGlzU1ZHKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gc2hvdWxkU2V0QXNQcm9wKGVsLCBrZXksIHZhbHVlLCBpc1NWRykge1xyXG4gICAgaWYgKGlzU1ZHKSB7XHJcbiAgICAgICAgLy8gbW9zdCBrZXlzIG11c3QgYmUgc2V0IGFzIGF0dHJpYnV0ZSBvbiBzdmcgZWxlbWVudHMgdG8gd29ya1xyXG4gICAgICAgIC8vIC4uLmV4Y2VwdCBpbm5lckhUTUwgJiB0ZXh0Q29udGVudFxyXG4gICAgICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ3RleHRDb250ZW50Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gb3IgbmF0aXZlIG9uY2xpY2sgd2l0aCBmdW5jdGlvbiB2YWx1ZXNcclxuICAgICAgICBpZiAoa2V5IGluIGVsICYmIG5hdGl2ZU9uUkUudGVzdChrZXkpICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0aGVzZSBhcmUgZW51bWVyYXRlZCBhdHRycywgaG93ZXZlciB0aGVpciBjb3JyZXNwb25kaW5nIERPTSBwcm9wZXJ0aWVzXHJcbiAgICAvLyBhcmUgYWN0dWFsbHkgYm9vbGVhbnMgLSB0aGlzIGxlYWRzIHRvIHNldHRpbmcgaXQgd2l0aCBhIHN0cmluZyBcImZhbHNlXCJcclxuICAgIC8vIHZhbHVlIGxlYWRpbmcgaXQgdG8gYmUgY29lcmNlZCB0byBgdHJ1ZWAsIHNvIHdlIG5lZWQgdG8gYWx3YXlzIHRyZWF0XHJcbiAgICAvLyB0aGVtIGFzIGF0dHJpYnV0ZXMuXHJcbiAgICAvLyBOb3RlIHRoYXQgYGNvbnRlbnRFZGl0YWJsZWAgZG9lc24ndCBoYXZlIHRoaXMgcHJvYmxlbTogaXRzIERPTVxyXG4gICAgLy8gcHJvcGVydHkgaXMgYWxzbyBlbnVtZXJhdGVkIHN0cmluZyB2YWx1ZXMuXHJcbiAgICBpZiAoa2V5ID09PSAnc3BlbGxjaGVjaycgfHwga2V5ID09PSAnZHJhZ2dhYmxlJyB8fCBrZXkgPT09ICd0cmFuc2xhdGUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gIzE3ODcsICMyODQwIGZvcm0gcHJvcGVydHkgb24gZm9ybSBlbGVtZW50cyBpcyByZWFkb25seSBhbmQgbXVzdCBiZSBzZXQgYXNcclxuICAgIC8vIGF0dHJpYnV0ZS5cclxuICAgIGlmIChrZXkgPT09ICdmb3JtJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vICMxNTI2IDxpbnB1dCBsaXN0PiBtdXN0IGJlIHNldCBhcyBhdHRyaWJ1dGVcclxuICAgIGlmIChrZXkgPT09ICdsaXN0JyAmJiBlbC50YWdOYW1lID09PSAnSU5QVVQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gIzI3NjYgPHRleHRhcmVhIHR5cGU+IG11c3QgYmUgc2V0IGFzIGF0dHJpYnV0ZVxyXG4gICAgaWYgKGtleSA9PT0gJ3R5cGUnICYmIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBuYXRpdmUgb25jbGljayB3aXRoIHN0cmluZyB2YWx1ZSwgbXVzdCBiZSBzZXQgYXMgYXR0cmlidXRlXHJcbiAgICBpZiAobmF0aXZlT25SRS50ZXN0KGtleSkgJiYgaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleSBpbiBlbDtcclxufVxuXG5mdW5jdGlvbiBkZWZpbmVDdXN0b21FbGVtZW50KG9wdGlvbnMsIGh5ZHJhdGUpIHtcclxuICAgIGNvbnN0IENvbXAgPSBkZWZpbmVDb21wb25lbnQob3B0aW9ucyk7XHJcbiAgICBjbGFzcyBWdWVDdXN0b21FbGVtZW50IGV4dGVuZHMgVnVlRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFByb3BzKSB7XHJcbiAgICAgICAgICAgIHN1cGVyKENvbXAsIGluaXRpYWxQcm9wcywgaHlkcmF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgVnVlQ3VzdG9tRWxlbWVudC5kZWYgPSBDb21wO1xyXG4gICAgcmV0dXJuIFZ1ZUN1c3RvbUVsZW1lbnQ7XHJcbn1cclxuY29uc3QgZGVmaW5lU1NSQ3VzdG9tRWxlbWVudCA9ICgob3B0aW9ucykgPT4ge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIGRlZmluZUN1c3RvbUVsZW1lbnQob3B0aW9ucywgaHlkcmF0ZSk7XHJcbn0pO1xyXG5jb25zdCBCYXNlQ2xhc3MgPSAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEhUTUxFbGVtZW50IDogY2xhc3Mge1xyXG59KTtcclxuY2xhc3MgVnVlRWxlbWVudCBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICBjb25zdHJ1Y3RvcihfZGVmLCBfcHJvcHMgPSB7fSwgaHlkcmF0ZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGVmID0gX2RlZjtcclxuICAgICAgICB0aGlzLl9wcm9wcyA9IF9wcm9wcztcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAaW50ZXJuYWxcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9udW1iZXJQcm9wcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCAmJiBoeWRyYXRlKSB7XHJcbiAgICAgICAgICAgIGh5ZHJhdGUodGhpcy5fY3JlYXRlVk5vZGUoKSwgdGhpcy5zaGFkb3dSb290KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdGhpcy5zaGFkb3dSb290KSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuKGBDdXN0b20gZWxlbWVudCBoYXMgcHJlLXJlbmRlcmVkIGRlY2xhcmF0aXZlIHNoYWRvdyByb290IGJ1dCBpcyBub3QgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYGRlZmluZWQgYXMgaHlkcmF0YWJsZS4gVXNlIFxcYGRlZmluZVNTUkN1c3RvbUVsZW1lbnRcXGAuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVEZWYoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICBuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXIobnVsbCwgdGhpcy5zaGFkb3dSb290KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiByZXNvbHZlIGlubmVyIGNvbXBvbmVudCBkZWZpbml0aW9uIChoYW5kbGUgcG9zc2libGUgYXN5bmMgY29tcG9uZW50KVxyXG4gICAgICovXHJcbiAgICBfcmVzb2x2ZURlZigpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gc2V0IGluaXRpYWwgYXR0cnNcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRBdHRyKHRoaXMuYXR0cmlidXRlc1tpXS5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2F0Y2ggZnV0dXJlIGF0dHIgY2hhbmdlc1xyXG4gICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEF0dHIobS5hdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLm9ic2VydmUodGhpcywgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoZGVmKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcHMsIHN0eWxlcyB9ID0gZGVmO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNPcHRpb25zID0gIWlzQXJyYXkocHJvcHMpO1xyXG4gICAgICAgICAgICBjb25zdCByYXdLZXlzID0gcHJvcHMgPyAoaGFzT3B0aW9ucyA/IE9iamVjdC5rZXlzKHByb3BzKSA6IHByb3BzKSA6IFtdO1xyXG4gICAgICAgICAgICAvLyBjYXN0IE51bWJlci10eXBlIHByb3BzIHNldCBiZWZvcmUgcmVzb2x2ZVxyXG4gICAgICAgICAgICBsZXQgbnVtYmVyUHJvcHM7XHJcbiAgICAgICAgICAgIGlmIChoYXNPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9wcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IHByb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdCA9PT0gTnVtYmVyIHx8IChvcHQgJiYgb3B0LnR5cGUgPT09IE51bWJlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvcHNba2V5XSA9IHRvTnVtYmVyKHRoaXMuX3Byb3BzW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAobnVtYmVyUHJvcHMgfHwgKG51bWJlclByb3BzID0gT2JqZWN0LmNyZWF0ZShudWxsKSkpW2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9udW1iZXJQcm9wcyA9IG51bWJlclByb3BzO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvcHMgc2V0IHByZS11cGdyYWRlIG9yIGNvbm5lY3RcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXlbMF0gIT09ICdfJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFByb3Aoa2V5LCB0aGlzW2tleV0sIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkZWZpbmluZyBnZXR0ZXIvc2V0dGVycyBvbiBwcm90b3R5cGVcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmF3S2V5cy5tYXAoY2FtZWxpemUkMSkpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9wKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFByb3Aoa2V5LCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFwcGx5IENTU1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBseVN0eWxlcyhzdHlsZXMpO1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsIHJlbmRlclxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGFzeW5jRGVmID0gdGhpcy5fZGVmLl9fYXN5bmNMb2FkZXI7XHJcbiAgICAgICAgaWYgKGFzeW5jRGVmKSB7XHJcbiAgICAgICAgICAgIGFzeW5jRGVmKCkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZGVmKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfc2V0QXR0cihrZXkpIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShrZXkpO1xyXG4gICAgICAgIGlmICh0aGlzLl9udW1iZXJQcm9wcyAmJiB0aGlzLl9udW1iZXJQcm9wc1trZXldKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zZXRQcm9wKGNhbWVsaXplJDEoa2V5KSwgdmFsdWUsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIF9nZXRQcm9wKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wc1trZXldO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgX3NldFByb3Aoa2V5LCB2YWwsIHNob3VsZFJlZmxlY3QgPSB0cnVlLCBzaG91bGRVcGRhdGUgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fcHJvcHNba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9wc1trZXldID0gdmFsO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlICYmIHRoaXMuX2luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZWZsZWN0XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRSZWZsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSksICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSksIHZhbCArICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShoeXBoZW5hdGUoa2V5KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfdXBkYXRlKCkge1xyXG4gICAgICAgIHJlbmRlcih0aGlzLl9jcmVhdGVWTm9kZSgpLCB0aGlzLnNoYWRvd1Jvb3QpO1xyXG4gICAgfVxyXG4gICAgX2NyZWF0ZVZOb2RlKCkge1xyXG4gICAgICAgIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUodGhpcy5fZGVmLCBleHRlbmQoe30sIHRoaXMuX3Byb3BzKSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICB2bm9kZS5jZSA9IGluc3RhbmNlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5pc0NFID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIEhNUlxyXG4gICAgICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNlUmVsb2FkID0gbmV3U3R5bGVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIHJlc2V0IHN0eWxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHlsZXMuZm9yRWFjaChzID0+IHRoaXMuc2hhZG93Um9vdC5yZW1vdmVDaGlsZChzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHlsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVN0eWxlcyhuZXdTdHlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFzeW5jIGNvbXBvbmVudCwgY2VSZWxvYWQgaXMgY2FsbGVkIGZyb20gdGhlIGlubmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudCBzbyBubyBuZWVkIHRvIHJlbG9hZCB0aGUgYXN5bmMgd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RlZi5fX2FzeW5jTG9hZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGludGVyY2VwdCBlbWl0XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5lbWl0ID0gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGFyZ3NcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy8gbG9jYXRlIG5lYXJlc3QgVnVlIGN1c3RvbSBlbGVtZW50IHBhcmVudCBmb3IgcHJvdmlkZS9pbmplY3RcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKChwYXJlbnQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCAmJiAocGFyZW50LnBhcmVudE5vZGUgfHwgcGFyZW50Lmhvc3QpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBWdWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnBhcmVudCA9IHBhcmVudC5faW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZub2RlO1xyXG4gICAgfVxyXG4gICAgX2FwcGx5U3R5bGVzKHN0eWxlcykge1xyXG4gICAgICAgIGlmIChzdHlsZXMpIHtcclxuICAgICAgICAgICAgc3R5bGVzLmZvckVhY2goY3NzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgcy50ZXh0Q29udGVudCA9IGNzcztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChzKTtcclxuICAgICAgICAgICAgICAgIC8vIHJlY29yZCBmb3IgSE1SXHJcbiAgICAgICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX3N0eWxlcyB8fCAodGhpcy5fc3R5bGVzID0gW10pKS5wdXNoKHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gdXNlQ3NzTW9kdWxlKG5hbWUgPSAnJHN0eWxlJykge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm4oYHVzZUNzc01vZHVsZSBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgc2V0dXAoKWApO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfT0JKO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gaW5zdGFuY2UudHlwZS5fX2Nzc01vZHVsZXM7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiB3YXJuKGBDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZXMgaW5qZWN0ZWQuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9PQko7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZCA9IG1vZHVsZXNbbmFtZV07XHJcbiAgICAgICAgaWYgKCFtb2QpIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgICAgICB3YXJuKGBDdXJyZW50IGluc3RhbmNlIGRvZXMgbm90IGhhdmUgQ1NTIG1vZHVsZSBuYW1lZCBcIiR7bmFtZX1cIi5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX09CSjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1vZDtcclxuICAgIH1cclxufVxuXG4vKipcclxuICogUnVudGltZSBoZWxwZXIgZm9yIFNGQydzIENTUyB2YXJpYWJsZSBpbmplY3Rpb24gZmVhdHVyZS5cclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIHVzZUNzc1ZhcnMoZ2V0dGVyKSB7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIGlmICghaW5zdGFuY2UpIHtcclxuICAgICAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcclxuICAgICAgICAgICAgd2FybihgdXNlQ3NzVmFycyBpcyBjYWxsZWQgd2l0aG91dCBjdXJyZW50IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UuYCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2V0VmFycyA9ICgpID0+IHNldFZhcnNPblZOb2RlKGluc3RhbmNlLnN1YlRyZWUsIGdldHRlcihpbnN0YW5jZS5wcm94eSkpO1xyXG4gICAgd2F0Y2hQb3N0RWZmZWN0KHNldFZhcnMpO1xyXG4gICAgb25Nb3VudGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCBvYiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHNldFZhcnMpO1xyXG4gICAgICAgIG9iLm9ic2VydmUoaW5zdGFuY2Uuc3ViVHJlZS5lbC5wYXJlbnROb2RlLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcclxuICAgICAgICBvblVubW91bnRlZCgoKSA9PiBvYi5kaXNjb25uZWN0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gc2V0VmFyc09uVk5vZGUodm5vZGUsIHZhcnMpIHtcclxuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjggLyogU2hhcGVGbGFncy5TVVNQRU5TRSAqLykge1xyXG4gICAgICAgIGNvbnN0IHN1c3BlbnNlID0gdm5vZGUuc3VzcGVuc2U7XHJcbiAgICAgICAgdm5vZGUgPSBzdXNwZW5zZS5hY3RpdmVCcmFuY2g7XHJcbiAgICAgICAgaWYgKHN1c3BlbnNlLnBlbmRpbmdCcmFuY2ggJiYgIXN1c3BlbnNlLmlzSHlkcmF0aW5nKSB7XHJcbiAgICAgICAgICAgIHN1c3BlbnNlLmVmZmVjdHMucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYXJzT25WTm9kZShzdXNwZW5zZS5hY3RpdmVCcmFuY2gsIHZhcnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBkcmlsbCBkb3duIEhPQ3MgdW50aWwgaXQncyBhIG5vbi1jb21wb25lbnQgdm5vZGVcclxuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnQpIHtcclxuICAgICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudC5zdWJUcmVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEgLyogU2hhcGVGbGFncy5FTEVNRU5UICovICYmIHZub2RlLmVsKSB7XHJcbiAgICAgICAgc2V0VmFyc09uTm9kZSh2bm9kZS5lbCwgdmFycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2bm9kZS50eXBlID09PSBGcmFnbWVudCkge1xyXG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goYyA9PiBzZXRWYXJzT25WTm9kZShjLCB2YXJzKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2bm9kZS50eXBlID09PSBTdGF0aWMpIHtcclxuICAgICAgICBsZXQgeyBlbCwgYW5jaG9yIH0gPSB2bm9kZTtcclxuICAgICAgICB3aGlsZSAoZWwpIHtcclxuICAgICAgICAgICAgc2V0VmFyc09uTm9kZShlbCwgdmFycyk7XHJcbiAgICAgICAgICAgIGlmIChlbCA9PT0gYW5jaG9yKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGVsID0gZWwubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNldFZhcnNPbk5vZGUoZWwsIHZhcnMpIHtcclxuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGU7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFycykge1xyXG4gICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShgLS0ke2tleX1gLCB2YXJzW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jb25zdCBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xyXG5jb25zdCBBTklNQVRJT04gPSAnYW5pbWF0aW9uJztcclxuLy8gRE9NIFRyYW5zaXRpb24gaXMgYSBoaWdoZXItb3JkZXItY29tcG9uZW50IGJhc2VkIG9uIHRoZSBwbGF0Zm9ybS1hZ25vc3RpY1xyXG4vLyBiYXNlIFRyYW5zaXRpb24gY29tcG9uZW50LCB3aXRoIERPTS1zcGVjaWZpYyBsb2dpYy5cclxuY29uc3QgVHJhbnNpdGlvbiA9IChwcm9wcywgeyBzbG90cyB9KSA9PiBoKEJhc2VUcmFuc2l0aW9uLCByZXNvbHZlVHJhbnNpdGlvblByb3BzKHByb3BzKSwgc2xvdHMpO1xyXG5UcmFuc2l0aW9uLmRpc3BsYXlOYW1lID0gJ1RyYW5zaXRpb24nO1xyXG5jb25zdCBET01UcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzID0ge1xyXG4gICAgbmFtZTogU3RyaW5nLFxyXG4gICAgdHlwZTogU3RyaW5nLFxyXG4gICAgY3NzOiB7XHJcbiAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICB9LFxyXG4gICAgZHVyYXRpb246IFtTdHJpbmcsIE51bWJlciwgT2JqZWN0XSxcclxuICAgIGVudGVyRnJvbUNsYXNzOiBTdHJpbmcsXHJcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXHJcbiAgICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcclxuICAgIGFwcGVhckZyb21DbGFzczogU3RyaW5nLFxyXG4gICAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcclxuICAgIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcclxuICAgIGxlYXZlRnJvbUNsYXNzOiBTdHJpbmcsXHJcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXHJcbiAgICBsZWF2ZVRvQ2xhc3M6IFN0cmluZ1xyXG59O1xyXG5jb25zdCBUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzID0gKFRyYW5zaXRpb24ucHJvcHMgPVxyXG4gICAgLyojX19QVVJFX18qLyBleHRlbmQoe30sIEJhc2VUcmFuc2l0aW9uLnByb3BzLCBET01UcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzKSk7XHJcbi8qKlxyXG4gKiAjMzIyNyBJbmNvbWluZyBob29rcyBtYXkgYmUgbWVyZ2VkIGludG8gYXJyYXlzIHdoZW4gd3JhcHBpbmcgVHJhbnNpdGlvblxyXG4gKiB3aXRoIGN1c3RvbSBIT0NzLlxyXG4gKi9cclxuY29uc3QgY2FsbEhvb2sgPSAoaG9vaywgYXJncyA9IFtdKSA9PiB7XHJcbiAgICBpZiAoaXNBcnJheShob29rKSkge1xyXG4gICAgICAgIGhvb2suZm9yRWFjaChoID0+IGgoLi4uYXJncykpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaG9vaykge1xyXG4gICAgICAgIGhvb2soLi4uYXJncyk7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGhvb2sgZXhwZWN0cyBhIGNhbGxiYWNrICgybmQgYXJnKSwgd2hpY2ggbWVhbnMgdGhlIHVzZXJcclxuICogaW50ZW5kcyB0byBleHBsaWNpdGx5IGNvbnRyb2wgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi5cclxuICovXHJcbmNvbnN0IGhhc0V4cGxpY2l0Q2FsbGJhY2sgPSAoaG9vaykgPT4ge1xyXG4gICAgcmV0dXJuIGhvb2tcclxuICAgICAgICA/IGlzQXJyYXkoaG9vaylcclxuICAgICAgICAgICAgPyBob29rLnNvbWUoaCA9PiBoLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIDogaG9vay5sZW5ndGggPiAxXHJcbiAgICAgICAgOiBmYWxzZTtcclxufTtcclxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb25Qcm9wcyhyYXdQcm9wcykge1xyXG4gICAgY29uc3QgYmFzZVByb3BzID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByYXdQcm9wcykge1xyXG4gICAgICAgIGlmICghKGtleSBpbiBET01UcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzKSkge1xyXG4gICAgICAgICAgICBiYXNlUHJvcHNba2V5XSA9IHJhd1Byb3BzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJhd1Byb3BzLmNzcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gYmFzZVByb3BzO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBuYW1lID0gJ3YnLCB0eXBlLCBkdXJhdGlvbiwgZW50ZXJGcm9tQ2xhc3MgPSBgJHtuYW1lfS1lbnRlci1mcm9tYCwgZW50ZXJBY3RpdmVDbGFzcyA9IGAke25hbWV9LWVudGVyLWFjdGl2ZWAsIGVudGVyVG9DbGFzcyA9IGAke25hbWV9LWVudGVyLXRvYCwgYXBwZWFyRnJvbUNsYXNzID0gZW50ZXJGcm9tQ2xhc3MsIGFwcGVhckFjdGl2ZUNsYXNzID0gZW50ZXJBY3RpdmVDbGFzcywgYXBwZWFyVG9DbGFzcyA9IGVudGVyVG9DbGFzcywgbGVhdmVGcm9tQ2xhc3MgPSBgJHtuYW1lfS1sZWF2ZS1mcm9tYCwgbGVhdmVBY3RpdmVDbGFzcyA9IGAke25hbWV9LWxlYXZlLWFjdGl2ZWAsIGxlYXZlVG9DbGFzcyA9IGAke25hbWV9LWxlYXZlLXRvYCB9ID0gcmF3UHJvcHM7XHJcbiAgICBjb25zdCBkdXJhdGlvbnMgPSBub3JtYWxpemVEdXJhdGlvbihkdXJhdGlvbik7XHJcbiAgICBjb25zdCBlbnRlckR1cmF0aW9uID0gZHVyYXRpb25zICYmIGR1cmF0aW9uc1swXTtcclxuICAgIGNvbnN0IGxlYXZlRHVyYXRpb24gPSBkdXJhdGlvbnMgJiYgZHVyYXRpb25zWzFdO1xyXG4gICAgY29uc3QgeyBvbkJlZm9yZUVudGVyLCBvbkVudGVyLCBvbkVudGVyQ2FuY2VsbGVkLCBvbkxlYXZlLCBvbkxlYXZlQ2FuY2VsbGVkLCBvbkJlZm9yZUFwcGVhciA9IG9uQmVmb3JlRW50ZXIsIG9uQXBwZWFyID0gb25FbnRlciwgb25BcHBlYXJDYW5jZWxsZWQgPSBvbkVudGVyQ2FuY2VsbGVkIH0gPSBiYXNlUHJvcHM7XHJcbiAgICBjb25zdCBmaW5pc2hFbnRlciA9IChlbCwgaXNBcHBlYXIsIGRvbmUpID0+IHtcclxuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyVG9DbGFzcyA6IGVudGVyVG9DbGFzcyk7XHJcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhckFjdGl2ZUNsYXNzIDogZW50ZXJBY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgZG9uZSAmJiBkb25lKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZmluaXNoTGVhdmUgPSAoZWwsIGRvbmUpID0+IHtcclxuICAgICAgICBlbC5faXNMZWF2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUZyb21DbGFzcyk7XHJcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xyXG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgZG9uZSAmJiBkb25lKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgbWFrZUVudGVySG9vayA9IChpc0FwcGVhcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAoZWwsIGRvbmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaG9vayA9IGlzQXBwZWFyID8gb25BcHBlYXIgOiBvbkVudGVyO1xyXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gZmluaXNoRW50ZXIoZWwsIGlzQXBwZWFyLCBkb25lKTtcclxuICAgICAgICAgICAgY2FsbEhvb2soaG9vaywgW2VsLCByZXNvbHZlXSk7XHJcbiAgICAgICAgICAgIG5leHRGcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyRnJvbUNsYXNzIDogZW50ZXJGcm9tQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNFeHBsaWNpdENhbGxiYWNrKGhvb2spKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBlbnRlckR1cmF0aW9uLCByZXNvbHZlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZXh0ZW5kKGJhc2VQcm9wcywge1xyXG4gICAgICAgIG9uQmVmb3JlRW50ZXIoZWwpIHtcclxuICAgICAgICAgICAgY2FsbEhvb2sob25CZWZvcmVFbnRlciwgW2VsXSk7XHJcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgZW50ZXJGcm9tQ2xhc3MpO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGVudGVyQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25CZWZvcmVBcHBlYXIoZWwpIHtcclxuICAgICAgICAgICAgY2FsbEhvb2sob25CZWZvcmVBcHBlYXIsIFtlbF0pO1xyXG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFwcGVhckZyb21DbGFzcyk7XHJcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgYXBwZWFyQWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25FbnRlcjogbWFrZUVudGVySG9vayhmYWxzZSksXHJcbiAgICAgICAgb25BcHBlYXI6IG1ha2VFbnRlckhvb2sodHJ1ZSksXHJcbiAgICAgICAgb25MZWF2ZShlbCwgZG9uZSkge1xyXG4gICAgICAgICAgICBlbC5faXNMZWF2aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGZpbmlzaExlYXZlKGVsLCBkb25lKTtcclxuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUZyb21DbGFzcyk7XHJcbiAgICAgICAgICAgIC8vIGZvcmNlIHJlZmxvdyBzbyAqLWxlYXZlLWZyb20gY2xhc3NlcyBpbW1lZGlhdGVseSB0YWtlIGVmZmVjdCAoIzI1OTMpXHJcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KCk7XHJcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgICAgIG5leHRGcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsLl9pc0xlYXZpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWxsZWRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzRXhwbGljaXRDYWxsYmFjayhvbkxlYXZlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgbGVhdmVEdXJhdGlvbiwgcmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjYWxsSG9vayhvbkxlYXZlLCBbZWwsIHJlc29sdmVdKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uRW50ZXJDYW5jZWxsZWQoZWwpIHtcclxuICAgICAgICAgICAgZmluaXNoRW50ZXIoZWwsIGZhbHNlKTtcclxuICAgICAgICAgICAgY2FsbEhvb2sob25FbnRlckNhbmNlbGxlZCwgW2VsXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkFwcGVhckNhbmNlbGxlZChlbCkge1xyXG4gICAgICAgICAgICBmaW5pc2hFbnRlcihlbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGNhbGxIb29rKG9uQXBwZWFyQ2FuY2VsbGVkLCBbZWxdKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uTGVhdmVDYW5jZWxsZWQoZWwpIHtcclxuICAgICAgICAgICAgZmluaXNoTGVhdmUoZWwpO1xyXG4gICAgICAgICAgICBjYWxsSG9vayhvbkxlYXZlQ2FuY2VsbGVkLCBbZWxdKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBub3JtYWxpemVEdXJhdGlvbihkdXJhdGlvbikge1xyXG4gICAgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KGR1cmF0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBbTnVtYmVyT2YoZHVyYXRpb24uZW50ZXIpLCBOdW1iZXJPZihkdXJhdGlvbi5sZWF2ZSldO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbiA9IE51bWJlck9mKGR1cmF0aW9uKTtcclxuICAgICAgICByZXR1cm4gW24sIG5dO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIE51bWJlck9mKHZhbCkge1xyXG4gICAgY29uc3QgcmVzID0gdG9OdW1iZXIodmFsKTtcclxuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpXHJcbiAgICAgICAgdmFsaWRhdGVEdXJhdGlvbihyZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5mdW5jdGlvbiB2YWxpZGF0ZUR1cmF0aW9uKHZhbCkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgd2FybihgPHRyYW5zaXRpb24+IGV4cGxpY2l0IGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIGAgK1xyXG4gICAgICAgICAgICBgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsKX0uYCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc05hTih2YWwpKSB7XHJcbiAgICAgICAgd2FybihgPHRyYW5zaXRpb24+IGV4cGxpY2l0IGR1cmF0aW9uIGlzIE5hTiAtIGAgK1xyXG4gICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgY2xzKSB7XHJcbiAgICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKGMgPT4gYyAmJiBlbC5jbGFzc0xpc3QuYWRkKGMpKTtcclxuICAgIChlbC5fdnRjIHx8XHJcbiAgICAgICAgKGVsLl92dGMgPSBuZXcgU2V0KCkpKS5hZGQoY2xzKTtcclxufVxyXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xyXG4gICAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChjID0+IGMgJiYgZWwuY2xhc3NMaXN0LnJlbW92ZShjKSk7XHJcbiAgICBjb25zdCB7IF92dGMgfSA9IGVsO1xyXG4gICAgaWYgKF92dGMpIHtcclxuICAgICAgICBfdnRjLmRlbGV0ZShjbHMpO1xyXG4gICAgICAgIGlmICghX3Z0Yy5zaXplKSB7XHJcbiAgICAgICAgICAgIGVsLl92dGMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG5leHRGcmFtZShjYikge1xyXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpO1xyXG4gICAgfSk7XHJcbn1cclxubGV0IGVuZElkID0gMDtcclxuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzKGVsLCBleHBlY3RlZFR5cGUsIGV4cGxpY2l0VGltZW91dCwgcmVzb2x2ZSkge1xyXG4gICAgY29uc3QgaWQgPSAoZWwuX2VuZElkID0gKytlbmRJZCk7XHJcbiAgICBjb25zdCByZXNvbHZlSWZOb3RTdGFsZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoaWQgPT09IGVsLl9lbmRJZCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGlmIChleHBsaWNpdFRpbWVvdXQpIHtcclxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlSWZOb3RTdGFsZSwgZXhwbGljaXRUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdHlwZSwgdGltZW91dCwgcHJvcENvdW50IH0gPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmRFdmVudCA9IHR5cGUgKyAnZW5kJztcclxuICAgIGxldCBlbmRlZCA9IDA7XHJcbiAgICBjb25zdCBlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbmRFdmVudCwgb25FbmQpO1xyXG4gICAgICAgIHJlc29sdmVJZk5vdFN0YWxlKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25FbmQgPSAoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZWwgJiYgKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcclxuICAgICAgICAgICAgZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xyXG4gICAgICAgICAgICBlbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LCB0aW1lb3V0ICsgMSk7XHJcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGVuZEV2ZW50LCBvbkVuZCk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSkge1xyXG4gICAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xyXG4gICAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xyXG4gICAgY29uc3QgZ2V0U3R5bGVQcm9wZXJ0aWVzID0gKGtleSkgPT4gKHN0eWxlc1trZXldIHx8ICcnKS5zcGxpdCgnLCAnKTtcclxuICAgIGNvbnN0IHRyYW5zaXRpb25EZWxheXMgPSBnZXRTdHlsZVByb3BlcnRpZXMoVFJBTlNJVElPTiArICdEZWxheScpO1xyXG4gICAgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IGdldFN0eWxlUHJvcGVydGllcyhUUkFOU0lUSU9OICsgJ0R1cmF0aW9uJyk7XHJcbiAgICBjb25zdCB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XHJcbiAgICBjb25zdCBhbmltYXRpb25EZWxheXMgPSBnZXRTdHlsZVByb3BlcnRpZXMoQU5JTUFUSU9OICsgJ0RlbGF5Jyk7XHJcbiAgICBjb25zdCBhbmltYXRpb25EdXJhdGlvbnMgPSBnZXRTdHlsZVByb3BlcnRpZXMoQU5JTUFUSU9OICsgJ0R1cmF0aW9uJyk7XHJcbiAgICBjb25zdCBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XHJcbiAgICBsZXQgdHlwZSA9IG51bGw7XHJcbiAgICBsZXQgdGltZW91dCA9IDA7XHJcbiAgICBsZXQgcHJvcENvdW50ID0gMDtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xyXG4gICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xyXG4gICAgICAgIGlmICh0cmFuc2l0aW9uVGltZW91dCA+IDApIHtcclxuICAgICAgICAgICAgdHlwZSA9IFRSQU5TSVRJT047XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcclxuICAgICAgICAgICAgcHJvcENvdW50ID0gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcclxuICAgICAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcclxuICAgICAgICAgICAgdHlwZSA9IEFOSU1BVElPTjtcclxuICAgICAgICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XHJcbiAgICAgICAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcclxuICAgICAgICB0eXBlID1cclxuICAgICAgICAgICAgdGltZW91dCA+IDBcclxuICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgPyBUUkFOU0lUSU9OXHJcbiAgICAgICAgICAgICAgICAgICAgOiBBTklNQVRJT05cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBwcm9wQ291bnQgPSB0eXBlXHJcbiAgICAgICAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxyXG4gICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgOiBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybSA9IHR5cGUgPT09IFRSQU5TSVRJT04gJiZcclxuICAgICAgICAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvLnRlc3Qoc3R5bGVzW1RSQU5TSVRJT04gKyAnUHJvcGVydHknXSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgdGltZW91dCxcclxuICAgICAgICBwcm9wQ291bnQsXHJcbiAgICAgICAgaGFzVHJhbnNmb3JtXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldFRpbWVvdXQoZGVsYXlzLCBkdXJhdGlvbnMpIHtcclxuICAgIHdoaWxlIChkZWxheXMubGVuZ3RoIDwgZHVyYXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgIGRlbGF5cyA9IGRlbGF5cy5jb25jYXQoZGVsYXlzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBNYXRoLm1heCguLi5kdXJhdGlvbnMubWFwKChkLCBpKSA9PiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pKSk7XHJcbn1cclxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXJcclxuLy8gbnVtYmVycyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXHJcbi8vIElmIGNvbW1hIGlzIG5vdCByZXBsYWNlZCB3aXRoIGEgZG90LCB0aGUgaW5wdXQgd2lsbCBiZSByb3VuZGVkIGRvd25cclxuLy8gKGkuZS4gYWN0aW5nIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcclxuZnVuY3Rpb24gdG9NcyhzKSB7XHJcbiAgICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDA7XHJcbn1cclxuLy8gc3luY2hyb25vdXNseSBmb3JjZSBsYXlvdXQgdG8gcHV0IGVsZW1lbnRzIGludG8gYSBjZXJ0YWluIHN0YXRlXHJcbmZ1bmN0aW9uIGZvcmNlUmVmbG93KCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xyXG59XG5cbmNvbnN0IHBvc2l0aW9uTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgbmV3UG9zaXRpb25NYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5jb25zdCBUcmFuc2l0aW9uR3JvdXBJbXBsID0ge1xyXG4gICAgbmFtZTogJ1RyYW5zaXRpb25Hcm91cCcsXHJcbiAgICBwcm9wczogLyojX19QVVJFX18qLyBleHRlbmQoe30sIFRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMsIHtcclxuICAgICAgICB0YWc6IFN0cmluZyxcclxuICAgICAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xyXG4gICAgfSksXHJcbiAgICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHVzZVRyYW5zaXRpb25TdGF0ZSgpO1xyXG4gICAgICAgIGxldCBwcmV2Q2hpbGRyZW47XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuO1xyXG4gICAgICAgIG9uVXBkYXRlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QgYWZ0ZXIgaW5pdGlhbCByZW5kZXJcclxuICAgICAgICAgICAgaWYgKCFwcmV2Q2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbW92ZUNsYXNzID0gcHJvcHMubW92ZUNsYXNzIHx8IGAke3Byb3BzLm5hbWUgfHwgJ3YnfS1tb3ZlYDtcclxuICAgICAgICAgICAgaWYgKCFoYXNDU1NUcmFuc2Zvcm0ocHJldkNoaWxkcmVuWzBdLmVsLCBpbnN0YW5jZS52bm9kZS5lbCwgbW92ZUNsYXNzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xyXG4gICAgICAgICAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cclxuICAgICAgICAgICAgcHJldkNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xyXG4gICAgICAgICAgICBwcmV2Q2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmVkQ2hpbGRyZW4gPSBwcmV2Q2hpbGRyZW4uZmlsdGVyKGFwcGx5VHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cclxuICAgICAgICAgICAgZm9yY2VSZWZsb3coKTtcclxuICAgICAgICAgICAgbW92ZWRDaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSBjLmVsO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBlbC5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSAoZWwuX21vdmVDYiA9IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgY2IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5fbW92ZUNiID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGNiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmF3UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNzc1RyYW5zaXRpb25Qcm9wcyA9IHJlc29sdmVUcmFuc2l0aW9uUHJvcHMocmF3UHJvcHMpO1xyXG4gICAgICAgICAgICBsZXQgdGFnID0gcmF3UHJvcHMudGFnIHx8IEZyYWdtZW50O1xyXG4gICAgICAgICAgICBwcmV2Q2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0ID8gZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuKHNsb3RzLmRlZmF1bHQoKSkgOiBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5rZXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhjaGlsZCwgcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhjaGlsZCwgY3NzVHJhbnNpdGlvblByb3BzLCBzdGF0ZSwgaW5zdGFuY2UpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oYDxUcmFuc2l0aW9uR3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHByZXZDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3MoY2hpbGQsIHJlc29sdmVUcmFuc2l0aW9uSG9va3MoY2hpbGQsIGNzc1RyYW5zaXRpb25Qcm9wcywgc3RhdGUsIGluc3RhbmNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGNoaWxkLCBjaGlsZC5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHRhZywgbnVsbCwgY2hpbGRyZW4pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IFRyYW5zaXRpb25Hcm91cCA9IFRyYW5zaXRpb25Hcm91cEltcGw7XHJcbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzKGMpIHtcclxuICAgIGNvbnN0IGVsID0gYy5lbDtcclxuICAgIGlmIChlbC5fbW92ZUNiKSB7XHJcbiAgICAgICAgZWwuX21vdmVDYigpO1xyXG4gICAgfVxyXG4gICAgaWYgKGVsLl9lbnRlckNiKSB7XHJcbiAgICAgICAgZWwuX2VudGVyQ2IoKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbihjKSB7XHJcbiAgICBuZXdQb3NpdGlvbk1hcC5zZXQoYywgYy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XHJcbn1cclxuZnVuY3Rpb24gYXBwbHlUcmFuc2xhdGlvbihjKSB7XHJcbiAgICBjb25zdCBvbGRQb3MgPSBwb3NpdGlvbk1hcC5nZXQoYyk7XHJcbiAgICBjb25zdCBuZXdQb3MgPSBuZXdQb3NpdGlvbk1hcC5nZXQoYyk7XHJcbiAgICBjb25zdCBkeCA9IG9sZFBvcy5sZWZ0IC0gbmV3UG9zLmxlZnQ7XHJcbiAgICBjb25zdCBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xyXG4gICAgaWYgKGR4IHx8IGR5KSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGMuZWwuc3R5bGU7XHJcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLndlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtkeH1weCwke2R5fXB4KWA7XHJcbiAgICAgICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xyXG4gICAgICAgIHJldHVybiBjO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGhhc0NTU1RyYW5zZm9ybShlbCwgcm9vdCwgbW92ZUNsYXNzKSB7XHJcbiAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcclxuICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xyXG4gICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxyXG4gICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXHJcbiAgICAvLyBpcyBhcHBsaWVkLlxyXG4gICAgY29uc3QgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcclxuICAgIGlmIChlbC5fdnRjKSB7XHJcbiAgICAgICAgZWwuX3Z0Yy5mb3JFYWNoKGNscyA9PiB7XHJcbiAgICAgICAgICAgIGNscy5zcGxpdCgvXFxzKy8pLmZvckVhY2goYyA9PiBjICYmIGNsb25lLmNsYXNzTGlzdC5yZW1vdmUoYykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbW92ZUNsYXNzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChjID0+IGMgJiYgY2xvbmUuY2xhc3NMaXN0LmFkZChjKSk7XHJcbiAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gKHJvb3Qubm9kZVR5cGUgPT09IDEgPyByb290IDogcm9vdC5wYXJlbnROb2RlKTtcclxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjbG9uZSk7XHJcbiAgICBjb25zdCB7IGhhc1RyYW5zZm9ybSB9ID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xyXG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNsb25lKTtcclxuICAgIHJldHVybiBoYXNUcmFuc2Zvcm07XHJcbn1cblxuY29uc3QgZ2V0TW9kZWxBc3NpZ25lciA9ICh2bm9kZSkgPT4ge1xyXG4gICAgY29uc3QgZm4gPSB2bm9kZS5wcm9wc1snb25VcGRhdGU6bW9kZWxWYWx1ZSddIHx8XHJcbiAgICAgICAgKGZhbHNlICk7XHJcbiAgICByZXR1cm4gaXNBcnJheShmbikgPyB2YWx1ZSA9PiBpbnZva2VBcnJheUZucyhmbiwgdmFsdWUpIDogZm47XHJcbn07XHJcbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydChlKSB7XHJcbiAgICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQoZSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICBpZiAodGFyZ2V0LmNvbXBvc2luZykge1xyXG4gICAgICAgIHRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpO1xyXG4gICAgfVxyXG59XHJcbi8vIFdlIGFyZSBleHBvcnRpbmcgdGhlIHYtbW9kZWwgcnVudGltZSBkaXJlY3RseSBhcyB2bm9kZSBob29rcyBzbyB0aGF0IGl0IGNhblxyXG4vLyBiZSB0cmVlLXNoYWtlbiBpbiBjYXNlIHYtbW9kZWwgaXMgbmV2ZXIgdXNlZC5cclxuY29uc3Qgdk1vZGVsVGV4dCA9IHtcclxuICAgIGNyZWF0ZWQoZWwsIHsgbW9kaWZpZXJzOiB7IGxhenksIHRyaW0sIG51bWJlciB9IH0sIHZub2RlKSB7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGNhc3RUb051bWJlciA9IG51bWJlciB8fCAodm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMudHlwZSA9PT0gJ251bWJlcicpO1xyXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIGxhenkgPyAnY2hhbmdlJyA6ICdpbnB1dCcsIGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS50YXJnZXQuY29tcG9zaW5nKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgZG9tVmFsdWUgPSBlbC52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRyaW0pIHtcclxuICAgICAgICAgICAgICAgIGRvbVZhbHVlID0gZG9tVmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjYXN0VG9OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGRvbVZhbHVlID0gdG9OdW1iZXIoZG9tVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsLl9hc3NpZ24oZG9tVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IGVsLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbGF6eSkge1xyXG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCAnY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XHJcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xyXG4gICAgICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXHJcbiAgICAgICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcclxuICAgICAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxyXG4gICAgICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cclxuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyBzZXQgdmFsdWUgb24gbW91bnRlZCBzbyBpdCdzIGFmdGVyIG1pbi9tYXggZm9yIHR5cGU9XCJyYW5nZVwiXHJcbiAgICBtb3VudGVkKGVsLCB7IHZhbHVlIH0pIHtcclxuICAgICAgICBlbC52YWx1ZSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xyXG4gICAgfSxcclxuICAgIGJlZm9yZVVwZGF0ZShlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzOiB7IGxhenksIHRyaW0sIG51bWJlciB9IH0sIHZub2RlKSB7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIC8vIGF2b2lkIGNsZWFyaW5nIHVucmVzb2x2ZWQgdGV4dC4gIzIzMDJcclxuICAgICAgICBpZiAoZWwuY29tcG9zaW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVsICYmIGVsLnR5cGUgIT09ICdyYW5nZScpIHtcclxuICAgICAgICAgICAgaWYgKGxhenkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJpbSAmJiBlbC52YWx1ZS50cmltKCkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKChudW1iZXIgfHwgZWwudHlwZSA9PT0gJ251bWJlcicpICYmIHRvTnVtYmVyKGVsLnZhbHVlKSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xyXG4gICAgICAgIGlmIChlbC52YWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgZWwudmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IHZNb2RlbENoZWNrYm94ID0ge1xyXG4gICAgLy8gIzQwOTYgYXJyYXkgY2hlY2tib3hlcyBuZWVkIHRvIGJlIGRlZXAgdHJhdmVyc2VkXHJcbiAgICBkZWVwOiB0cnVlLFxyXG4gICAgY3JlYXRlZChlbCwgXywgdm5vZGUpIHtcclxuICAgICAgICBlbC5fYXNzaWduID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XHJcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IGVsLl9tb2RlbFZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSBnZXRWYWx1ZShlbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBlbC5jaGVja2VkO1xyXG4gICAgICAgICAgICBjb25zdCBhc3NpZ24gPSBlbC5fYXNzaWduO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheShtb2RlbFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBsb29zZUluZGV4T2YobW9kZWxWYWx1ZSwgZWxlbWVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gaW5kZXggIT09IC0xO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWQgJiYgIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduKG1vZGVsVmFsdWUuY29uY2F0KGVsZW1lbnRWYWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNoZWNrZWQgJiYgZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IFsuLi5tb2RlbFZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbihmaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNTZXQobW9kZWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBTZXQobW9kZWxWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZC5hZGQoZWxlbWVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZC5kZWxldGUoZWxlbWVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFzc2lnbihjbG9uZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXNzaWduKGdldENoZWNrYm94VmFsdWUoZWwsIGNoZWNrZWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIC8vIHNldCBpbml0aWFsIGNoZWNrZWQgb24gbW91bnQgdG8gd2FpdCBmb3IgdHJ1ZS12YWx1ZS9mYWxzZS12YWx1ZVxyXG4gICAgbW91bnRlZDogc2V0Q2hlY2tlZCxcclxuICAgIGJlZm9yZVVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHtcclxuICAgICAgICBlbC5fYXNzaWduID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XHJcbiAgICAgICAgc2V0Q2hlY2tlZChlbCwgYmluZGluZywgdm5vZGUpO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBzZXRDaGVja2VkKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB2bm9kZSkge1xyXG4gICAgZWwuX21vZGVsVmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIGVsLmNoZWNrZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIHZub2RlLnByb3BzLnZhbHVlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTZXQodmFsdWUpKSB7XHJcbiAgICAgICAgZWwuY2hlY2tlZCA9IHZhbHVlLmhhcyh2bm9kZS5wcm9wcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZSAhPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICBlbC5jaGVja2VkID0gbG9vc2VFcXVhbCh2YWx1ZSwgZ2V0Q2hlY2tib3hWYWx1ZShlbCwgdHJ1ZSkpO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IHZNb2RlbFJhZGlvID0ge1xyXG4gICAgY3JlYXRlZChlbCwgeyB2YWx1ZSB9LCB2bm9kZSkge1xyXG4gICAgICAgIGVsLmNoZWNrZWQgPSBsb29zZUVxdWFsKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSk7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsLl9hc3NpZ24oZ2V0VmFsdWUoZWwpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVVcGRhdGUoZWwsIHsgdmFsdWUsIG9sZFZhbHVlIH0sIHZub2RlKSB7XHJcbiAgICAgICAgZWwuX2Fzc2lnbiA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgZWwuY2hlY2tlZCA9IGxvb3NlRXF1YWwodmFsdWUsIHZub2RlLnByb3BzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IHZNb2RlbFNlbGVjdCA9IHtcclxuICAgIC8vIDxzZWxlY3QgbXVsdGlwbGU+IHZhbHVlIG5lZWQgdG8gYmUgZGVlcCB0cmF2ZXJzZWRcclxuICAgIGRlZXA6IHRydWUsXHJcbiAgICBjcmVhdGVkKGVsLCB7IHZhbHVlLCBtb2RpZmllcnM6IHsgbnVtYmVyIH0gfSwgdm5vZGUpIHtcclxuICAgICAgICBjb25zdCBpc1NldE1vZGVsID0gaXNTZXQodmFsdWUpO1xyXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsICdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxyXG4gICAgICAgICAgICAgICAgLmNhbGwoZWwub3B0aW9ucywgKG8pID0+IG8uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICAubWFwKChvKSA9PiBudW1iZXIgPyB0b051bWJlcihnZXRWYWx1ZShvKSkgOiBnZXRWYWx1ZShvKSk7XHJcbiAgICAgICAgICAgIGVsLl9hc3NpZ24oZWwubXVsdGlwbGVcclxuICAgICAgICAgICAgICAgID8gaXNTZXRNb2RlbFxyXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFNldChzZWxlY3RlZFZhbClcclxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkVmFsXHJcbiAgICAgICAgICAgICAgICA6IHNlbGVjdGVkVmFsWzBdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBlbC5fYXNzaWduID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XHJcbiAgICB9LFxyXG4gICAgLy8gc2V0IHZhbHVlIGluIG1vdW50ZWQgJiB1cGRhdGVkIGJlY2F1c2UgPHNlbGVjdD4gcmVsaWVzIG9uIGl0cyBjaGlsZHJlblxyXG4gICAgLy8gPG9wdGlvbj5zLlxyXG4gICAgbW91bnRlZChlbCwgeyB2YWx1ZSB9KSB7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVVcGRhdGUoZWwsIF9iaW5kaW5nLCB2bm9kZSkge1xyXG4gICAgICAgIGVsLl9hc3NpZ24gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVkKGVsLCB7IHZhbHVlIH0pIHtcclxuICAgICAgICBzZXRTZWxlY3RlZChlbCwgdmFsdWUpO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBzZXRTZWxlY3RlZChlbCwgdmFsdWUpIHtcclxuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcclxuICAgIGlmIChpc011bHRpcGxlICYmICFpc0FycmF5KHZhbHVlKSAmJiAhaXNTZXQodmFsdWUpKSB7XHJcbiAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgICAgIHdhcm4oYDxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD4gZXhwZWN0cyBhbiBBcnJheSBvciBTZXQgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBgICtcclxuICAgICAgICAgICAgICAgIGBidXQgZ290ICR7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSl9LmApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gZ2V0VmFsdWUob3B0aW9uKTtcclxuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgb3B0aW9uVmFsdWUpID4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5oYXMob3B0aW9uVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc011bHRpcGxlICYmIGVsLnNlbGVjdGVkSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgfVxyXG59XHJcbi8vIHJldHJpZXZlIHJhdyB2YWx1ZSBzZXQgdmlhIDp2YWx1ZSBiaW5kaW5nc1xyXG5mdW5jdGlvbiBnZXRWYWx1ZShlbCkge1xyXG4gICAgcmV0dXJuICdfdmFsdWUnIGluIGVsID8gZWwuX3ZhbHVlIDogZWwudmFsdWU7XHJcbn1cclxuLy8gcmV0cmlldmUgcmF3IHZhbHVlIGZvciB0cnVlLXZhbHVlIGFuZCBmYWxzZS12YWx1ZSBzZXQgdmlhIDp0cnVlLXZhbHVlIG9yIDpmYWxzZS12YWx1ZSBiaW5kaW5nc1xyXG5mdW5jdGlvbiBnZXRDaGVja2JveFZhbHVlKGVsLCBjaGVja2VkKSB7XHJcbiAgICBjb25zdCBrZXkgPSBjaGVja2VkID8gJ190cnVlVmFsdWUnIDogJ19mYWxzZVZhbHVlJztcclxuICAgIHJldHVybiBrZXkgaW4gZWwgPyBlbFtrZXldIDogY2hlY2tlZDtcclxufVxyXG5jb25zdCB2TW9kZWxEeW5hbWljID0ge1xyXG4gICAgY3JlYXRlZChlbCwgYmluZGluZywgdm5vZGUpIHtcclxuICAgICAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgbnVsbCwgJ2NyZWF0ZWQnKTtcclxuICAgIH0sXHJcbiAgICBtb3VudGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xyXG4gICAgICAgIGNhbGxNb2RlbEhvb2soZWwsIGJpbmRpbmcsIHZub2RlLCBudWxsLCAnbW91bnRlZCcpO1xyXG4gICAgfSxcclxuICAgIGJlZm9yZVVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSkge1xyXG4gICAgICAgIGNhbGxNb2RlbEhvb2soZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUsICdiZWZvcmVVcGRhdGUnKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlKSB7XHJcbiAgICAgICAgY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSwgJ3VwZGF0ZWQnKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gcmVzb2x2ZUR5bmFtaWNNb2RlbCh0YWdOYW1lLCB0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcclxuICAgICAgICBjYXNlICdTRUxFQ1QnOlxyXG4gICAgICAgICAgICByZXR1cm4gdk1vZGVsU2VsZWN0O1xyXG4gICAgICAgIGNhc2UgJ1RFWFRBUkVBJzpcclxuICAgICAgICAgICAgcmV0dXJuIHZNb2RlbFRleHQ7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZNb2RlbENoZWNrYm94O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2TW9kZWxSYWRpbztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZNb2RlbFRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlLCBob29rKSB7XHJcbiAgICBjb25zdCBtb2RlbFRvVXNlID0gcmVzb2x2ZUR5bmFtaWNNb2RlbChlbC50YWdOYW1lLCB2bm9kZS5wcm9wcyAmJiB2bm9kZS5wcm9wcy50eXBlKTtcclxuICAgIGNvbnN0IGZuID0gbW9kZWxUb1VzZVtob29rXTtcclxuICAgIGZuICYmIGZuKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlKTtcclxufVxyXG4vLyBTU1Igdm5vZGUgdHJhbnNmb3Jtcywgb25seSB1c2VkIHdoZW4gdXNlciBpbmNsdWRlcyBjbGllbnQtb3JpZW50ZWQgcmVuZGVyXHJcbi8vIGZ1bmN0aW9uIGluIFNTUlxyXG5mdW5jdGlvbiBpbml0Vk1vZGVsRm9yU1NSKCkge1xyXG4gICAgdk1vZGVsVGV4dC5nZXRTU1JQcm9wcyA9ICh7IHZhbHVlIH0pID0+ICh7IHZhbHVlIH0pO1xyXG4gICAgdk1vZGVsUmFkaW8uZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9LCB2bm9kZSkgPT4ge1xyXG4gICAgICAgIGlmICh2bm9kZS5wcm9wcyAmJiBsb29zZUVxdWFsKHZub2RlLnByb3BzLnZhbHVlLCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgY2hlY2tlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2TW9kZWxDaGVja2JveC5nZXRTU1JQcm9wcyA9ICh7IHZhbHVlIH0sIHZub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh2bm9kZS5wcm9wcyAmJiBsb29zZUluZGV4T2YodmFsdWUsIHZub2RlLnByb3BzLnZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNTZXQodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh2bm9kZS5wcm9wcyAmJiB2YWx1ZS5oYXModm5vZGUucHJvcHMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgY2hlY2tlZDogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2TW9kZWxEeW5hbWljLmdldFNTUlByb3BzID0gKGJpbmRpbmcsIHZub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2bm9kZS50eXBlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGVsVG9Vc2UgPSByZXNvbHZlRHluYW1pY01vZGVsKFxyXG4gICAgICAgIC8vIHJlc29sdmVEeW5hbWljTW9kZWwgZXhwZWN0cyBhbiB1cHBlcmNhc2UgdGFnIG5hbWUsIGJ1dCB2bm9kZS50eXBlIGlzIGxvd2VyY2FzZVxyXG4gICAgICAgIHZub2RlLnR5cGUudG9VcHBlckNhc2UoKSwgdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMudHlwZSk7XHJcbiAgICAgICAgaWYgKG1vZGVsVG9Vc2UuZ2V0U1NSUHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsVG9Vc2UuZ2V0U1NSUHJvcHMoYmluZGluZywgdm5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuY29uc3Qgc3lzdGVtTW9kaWZpZXJzID0gWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ107XHJcbmNvbnN0IG1vZGlmaWVyR3VhcmRzID0ge1xyXG4gICAgc3RvcDogZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpLFxyXG4gICAgcHJldmVudDogZSA9PiBlLnByZXZlbnREZWZhdWx0KCksXHJcbiAgICBzZWxmOiBlID0+IGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQsXHJcbiAgICBjdHJsOiBlID0+ICFlLmN0cmxLZXksXHJcbiAgICBzaGlmdDogZSA9PiAhZS5zaGlmdEtleSxcclxuICAgIGFsdDogZSA9PiAhZS5hbHRLZXksXHJcbiAgICBtZXRhOiBlID0+ICFlLm1ldGFLZXksXHJcbiAgICBsZWZ0OiBlID0+ICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gIT09IDAsXHJcbiAgICBtaWRkbGU6IGUgPT4gJ2J1dHRvbicgaW4gZSAmJiBlLmJ1dHRvbiAhPT0gMSxcclxuICAgIHJpZ2h0OiBlID0+ICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gIT09IDIsXHJcbiAgICBleGFjdDogKGUsIG1vZGlmaWVycykgPT4gc3lzdGVtTW9kaWZpZXJzLnNvbWUobSA9PiBlW2Ake219S2V5YF0gJiYgIW1vZGlmaWVycy5pbmNsdWRlcyhtKSlcclxufTtcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCB3aXRoTW9kaWZpZXJzID0gKGZuLCBtb2RpZmllcnMpID0+IHtcclxuICAgIHJldHVybiAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBndWFyZCA9IG1vZGlmaWVyR3VhcmRzW21vZGlmaWVyc1tpXV07XHJcbiAgICAgICAgICAgIGlmIChndWFyZCAmJiBndWFyZChldmVudCwgbW9kaWZpZXJzKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZuKGV2ZW50LCAuLi5hcmdzKTtcclxuICAgIH07XHJcbn07XHJcbi8vIEtlcHQgZm9yIDIueCBjb21wYXQuXHJcbi8vIE5vdGU6IElFMTEgY29tcGF0IGZvciBgc3BhY2ViYXJgIGFuZCBgZGVsYCBpcyByZW1vdmVkIGZvciBub3cuXHJcbmNvbnN0IGtleU5hbWVzID0ge1xyXG4gICAgZXNjOiAnZXNjYXBlJyxcclxuICAgIHNwYWNlOiAnICcsXHJcbiAgICB1cDogJ2Fycm93LXVwJyxcclxuICAgIGxlZnQ6ICdhcnJvdy1sZWZ0JyxcclxuICAgIHJpZ2h0OiAnYXJyb3ctcmlnaHQnLFxyXG4gICAgZG93bjogJ2Fycm93LWRvd24nLFxyXG4gICAgZGVsZXRlOiAnYmFja3NwYWNlJ1xyXG59O1xyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IHdpdGhLZXlzID0gKGZuLCBtb2RpZmllcnMpID0+IHtcclxuICAgIHJldHVybiAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoISgna2V5JyBpbiBldmVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBldmVudEtleSA9IGh5cGhlbmF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGlmIChtb2RpZmllcnMuc29tZShrID0+IGsgPT09IGV2ZW50S2V5IHx8IGtleU5hbWVzW2tdID09PSBldmVudEtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZuKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59O1xuXG5jb25zdCB2U2hvdyA9IHtcclxuICAgIGJlZm9yZU1vdW50KGVsLCB7IHZhbHVlIH0sIHsgdHJhbnNpdGlvbiB9KSB7XHJcbiAgICAgICAgZWwuX3ZvZCA9IGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcclxuICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNldERpc3BsYXkoZWwsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZChlbCwgeyB2YWx1ZSB9LCB7IHRyYW5zaXRpb24gfSkge1xyXG4gICAgICAgIGlmICh0cmFuc2l0aW9uICYmIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24uZW50ZXIoZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB1cGRhdGVkKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB7IHRyYW5zaXRpb24gfSkge1xyXG4gICAgICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5iZWZvcmVFbnRlcihlbCk7XHJcbiAgICAgICAgICAgICAgICBzZXREaXNwbGF5KGVsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uZW50ZXIoZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5sZWF2ZShlbCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXkoZWwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXREaXNwbGF5KGVsLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGJlZm9yZVVubW91bnQoZWwsIHsgdmFsdWUgfSkge1xyXG4gICAgICAgIHNldERpc3BsYXkoZWwsIHZhbHVlKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gc2V0RGlzcGxheShlbCwgdmFsdWUpIHtcclxuICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl92b2QgOiAnbm9uZSc7XHJcbn1cclxuLy8gU1NSIHZub2RlIHRyYW5zZm9ybXMsIG9ubHkgdXNlZCB3aGVuIHVzZXIgaW5jbHVkZXMgY2xpZW50LW9yaWVudGVkIHJlbmRlclxyXG4vLyBmdW5jdGlvbiBpbiBTU1JcclxuZnVuY3Rpb24gaW5pdFZTaG93Rm9yU1NSKCkge1xyXG4gICAgdlNob3cuZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9KSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBzdHlsZTogeyBkaXNwbGF5OiAnbm9uZScgfSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cblxuY29uc3QgcmVuZGVyZXJPcHRpb25zID0gLyojX19QVVJFX18qLyBleHRlbmQoeyBwYXRjaFByb3AgfSwgbm9kZU9wcyk7XHJcbi8vIGxhenkgY3JlYXRlIHRoZSByZW5kZXJlciAtIHRoaXMgbWFrZXMgY29yZSByZW5kZXJlciBsb2dpYyB0cmVlLXNoYWthYmxlXHJcbi8vIGluIGNhc2UgdGhlIHVzZXIgb25seSBpbXBvcnRzIHJlYWN0aXZpdHkgdXRpbGl0aWVzIGZyb20gVnVlLlxyXG5sZXQgcmVuZGVyZXI7XHJcbmxldCBlbmFibGVkSHlkcmF0aW9uID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGVuc3VyZVJlbmRlcmVyKCkge1xyXG4gICAgcmV0dXJuIChyZW5kZXJlciB8fFxyXG4gICAgICAgIChyZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKHJlbmRlcmVyT3B0aW9ucykpKTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVIeWRyYXRpb25SZW5kZXJlcigpIHtcclxuICAgIHJlbmRlcmVyID0gZW5hYmxlZEh5ZHJhdGlvblxyXG4gICAgICAgID8gcmVuZGVyZXJcclxuICAgICAgICA6IGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKHJlbmRlcmVyT3B0aW9ucyk7XHJcbiAgICBlbmFibGVkSHlkcmF0aW9uID0gdHJ1ZTtcclxuICAgIHJldHVybiByZW5kZXJlcjtcclxufVxyXG4vLyB1c2UgZXhwbGljaXQgdHlwZSBjYXN0cyBoZXJlIHRvIGF2b2lkIGltcG9ydCgpIGNhbGxzIGluIHJvbGxlZC11cCBkLnRzXHJcbmNvbnN0IHJlbmRlciA9ICgoLi4uYXJncykgPT4ge1xyXG4gICAgZW5zdXJlUmVuZGVyZXIoKS5yZW5kZXIoLi4uYXJncyk7XHJcbn0pO1xyXG5jb25zdCBoeWRyYXRlID0gKCguLi5hcmdzKSA9PiB7XHJcbiAgICBlbnN1cmVIeWRyYXRpb25SZW5kZXJlcigpLmh5ZHJhdGUoLi4uYXJncyk7XHJcbn0pO1xyXG5jb25zdCBjcmVhdGVBcHAgPSAoKC4uLmFyZ3MpID0+IHtcclxuICAgIGNvbnN0IGFwcCA9IGVuc3VyZVJlbmRlcmVyKCkuY3JlYXRlQXBwKC4uLmFyZ3MpO1xyXG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xyXG4gICAgICAgIGluamVjdE5hdGl2ZVRhZ0NoZWNrKGFwcCk7XHJcbiAgICAgICAgaW5qZWN0Q29tcGlsZXJPcHRpb25zQ2hlY2soYXBwKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgbW91bnQgfSA9IGFwcDtcclxuICAgIGFwcC5tb3VudCA9IChjb250YWluZXJPclNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbm9ybWFsaXplQ29udGFpbmVyKGNvbnRhaW5lck9yU2VsZWN0b3IpO1xyXG4gICAgICAgIGlmICghY29udGFpbmVyKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYXBwLl9jb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGNvbXBvbmVudCkgJiYgIWNvbXBvbmVudC5yZW5kZXIgJiYgIWNvbXBvbmVudC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBfX1VOU0FGRV9fXHJcbiAgICAgICAgICAgIC8vIFJlYXNvbjogcG90ZW50aWFsIGV4ZWN1dGlvbiBvZiBKUyBleHByZXNzaW9ucyBpbiBpbi1ET00gdGVtcGxhdGUuXHJcbiAgICAgICAgICAgIC8vIFRoZSB1c2VyIG11c3QgbWFrZSBzdXJlIHRoZSBpbi1ET00gdGVtcGxhdGUgaXMgdHJ1c3RlZC4gSWYgaXQnc1xyXG4gICAgICAgICAgICAvLyByZW5kZXJlZCBieSB0aGUgc2VydmVyLCB0aGUgdGVtcGxhdGUgc2hvdWxkIG5vdCBjb250YWluIGFueSB1c2VyIGRhdGEuXHJcbiAgICAgICAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IGNvbnRhaW5lci5pbm5lckhUTUw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNsZWFyIGNvbnRlbnQgYmVmb3JlIG1vdW50aW5nXHJcbiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHByb3h5ID0gbW91bnQoY29udGFpbmVyLCBmYWxzZSwgY29udGFpbmVyIGluc3RhbmNlb2YgU1ZHRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgndi1jbG9haycpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLXYtYXBwJywgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGFwcDtcclxufSk7XHJcbmNvbnN0IGNyZWF0ZVNTUkFwcCA9ICgoLi4uYXJncykgPT4ge1xyXG4gICAgY29uc3QgYXBwID0gZW5zdXJlSHlkcmF0aW9uUmVuZGVyZXIoKS5jcmVhdGVBcHAoLi4uYXJncyk7XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICAgICAgaW5qZWN0TmF0aXZlVGFnQ2hlY2soYXBwKTtcclxuICAgICAgICBpbmplY3RDb21waWxlck9wdGlvbnNDaGVjayhhcHApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBtb3VudCB9ID0gYXBwO1xyXG4gICAgYXBwLm1vdW50ID0gKGNvbnRhaW5lck9yU2VsZWN0b3IpID0+IHtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBub3JtYWxpemVDb250YWluZXIoY29udGFpbmVyT3JTZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbW91bnQoY29udGFpbmVyLCB0cnVlLCBjb250YWluZXIgaW5zdGFuY2VvZiBTVkdFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGFwcDtcclxufSk7XHJcbmZ1bmN0aW9uIGluamVjdE5hdGl2ZVRhZ0NoZWNrKGFwcCkge1xyXG4gICAgLy8gSW5qZWN0IGBpc05hdGl2ZVRhZ2BcclxuICAgIC8vIHRoaXMgaXMgdXNlZCBmb3IgY29tcG9uZW50IG5hbWUgdmFsaWRhdGlvbiAoZGV2IG9ubHkpXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLmNvbmZpZywgJ2lzTmF0aXZlVGFnJywge1xyXG4gICAgICAgIHZhbHVlOiAodGFnKSA9PiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWR1RhZyh0YWcpLFxyXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxyXG4gICAgfSk7XHJcbn1cclxuLy8gZGV2IG9ubHlcclxuZnVuY3Rpb24gaW5qZWN0Q29tcGlsZXJPcHRpb25zQ2hlY2soYXBwKSB7XHJcbiAgICBpZiAoaXNSdW50aW1lT25seSgpKSB7XHJcbiAgICAgICAgY29uc3QgaXNDdXN0b21FbGVtZW50ID0gYXBwLmNvbmZpZy5pc0N1c3RvbUVsZW1lbnQ7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcC5jb25maWcsICdpc0N1c3RvbUVsZW1lbnQnLCB7XHJcbiAgICAgICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpc0N1c3RvbUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldCgpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4oYFRoZSBcXGBpc0N1c3RvbUVsZW1lbnRcXGAgY29uZmlnIG9wdGlvbiBpcyBkZXByZWNhdGVkLiBVc2UgYCArXHJcbiAgICAgICAgICAgICAgICAgICAgYFxcYGNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnRcXGAgaW5zdGVhZC5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IGFwcC5jb25maWcuY29tcGlsZXJPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IGBUaGUgXFxgY29tcGlsZXJPcHRpb25zXFxgIGNvbmZpZyBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyBgICtcclxuICAgICAgICAgICAgYGEgYnVpbGQgb2YgVnVlLmpzIHRoYXQgaW5jbHVkZXMgdGhlIHJ1bnRpbWUgY29tcGlsZXIgKGFrYSBcImZ1bGwgYnVpbGRcIikuIGAgK1xyXG4gICAgICAgICAgICBgU2luY2UgeW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkLCBcXGBjb21waWxlck9wdGlvbnNcXGAgYCArXHJcbiAgICAgICAgICAgIGBtdXN0IGJlIHBhc3NlZCB0byBcXGBAdnVlL2NvbXBpbGVyLWRvbVxcYCBpbiB0aGUgYnVpbGQgc2V0dXAgaW5zdGVhZC5cXG5gICtcclxuICAgICAgICAgICAgYC0gRm9yIHZ1ZS1sb2FkZXI6IHBhc3MgaXQgdmlhIHZ1ZS1sb2FkZXIncyBcXGBjb21waWxlck9wdGlvbnNcXGAgbG9hZGVyIG9wdGlvbi5cXG5gICtcclxuICAgICAgICAgICAgYC0gRm9yIHZ1ZS1jbGk6IHNlZSBodHRwczovL2NsaS52dWVqcy5vcmcvZ3VpZGUvd2VicGFjay5odG1sI21vZGlmeWluZy1vcHRpb25zLW9mLWEtbG9hZGVyXFxuYCArXHJcbiAgICAgICAgICAgIGAtIEZvciB2aXRlOiBwYXNzIGl0IHZpYSBAdml0ZWpzL3BsdWdpbi12dWUgb3B0aW9ucy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS90cmVlL21haW4vcGFja2FnZXMvcGx1Z2luLXZ1ZSNleGFtcGxlLWZvci1wYXNzaW5nLW9wdGlvbnMtdG8tdnVlY29tcGlsZXItZG9tYDtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLmNvbmZpZywgJ2NvbXBpbGVyT3B0aW9ucycsIHtcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgd2Fybihtc2cpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyT3B0aW9ucztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0KCkge1xyXG4gICAgICAgICAgICAgICAgd2Fybihtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplQ29udGFpbmVyKGNvbnRhaW5lcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGNvbnRhaW5lcikpIHtcclxuICAgICAgICBjb25zdCByZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XHJcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhcmVzKSB7XHJcbiAgICAgICAgICAgIHdhcm4oYEZhaWxlZCB0byBtb3VudCBhcHA6IG1vdW50IHRhcmdldCBzZWxlY3RvciBcIiR7Y29udGFpbmVyfVwiIHJldHVybmVkIG51bGwuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXHJcbiAgICAgICAgd2luZG93LlNoYWRvd1Jvb3QgJiZcclxuICAgICAgICBjb250YWluZXIgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCAmJlxyXG4gICAgICAgIGNvbnRhaW5lci5tb2RlID09PSAnY2xvc2VkJykge1xyXG4gICAgICAgIHdhcm4oYG1vdW50aW5nIG9uIGEgU2hhZG93Um9vdCB3aXRoIFxcYHttb2RlOiBcImNsb3NlZFwifVxcYCBtYXkgbGVhZCB0byB1bnByZWRpY3RhYmxlIGJ1Z3NgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250YWluZXI7XHJcbn1cclxubGV0IHNzckRpcmVjdGl2ZUluaXRpYWxpemVkID0gZmFsc2U7XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IGluaXREaXJlY3RpdmVzRm9yU1NSID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3NyRGlyZWN0aXZlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgc3NyRGlyZWN0aXZlSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpbml0Vk1vZGVsRm9yU1NSKCk7XHJcbiAgICAgICAgICAgIGluaXRWU2hvd0ZvclNTUigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIDtcblxuZXhwb3J0IHsgVHJhbnNpdGlvbiwgVHJhbnNpdGlvbkdyb3VwLCBWdWVFbGVtZW50LCBjcmVhdGVBcHAsIGNyZWF0ZVNTUkFwcCwgZGVmaW5lQ3VzdG9tRWxlbWVudCwgZGVmaW5lU1NSQ3VzdG9tRWxlbWVudCwgaHlkcmF0ZSwgaW5pdERpcmVjdGl2ZXNGb3JTU1IsIHJlbmRlciwgdXNlQ3NzTW9kdWxlLCB1c2VDc3NWYXJzLCB2TW9kZWxDaGVja2JveCwgdk1vZGVsRHluYW1pYywgdk1vZGVsUmFkaW8sIHZNb2RlbFNlbGVjdCwgdk1vZGVsVGV4dCwgdlNob3csIHdpdGhLZXlzLCB3aXRoTW9kaWZpZXJzIH07XG4iLCIvKipcclxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XHJcbiAqIGlzIGluIHRoYXQgbWFwLlxyXG4gKiBJTVBPUlRBTlQ6IGFsbCBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJlZml4ZWQgd2l0aFxyXG4gKiBcXC9cXCojXFxfXFxfUFVSRVxcX1xcX1xcKlxcL1xyXG4gKiBTbyB0aGF0IHJvbGx1cCBjYW4gdHJlZS1zaGFrZSB0aGVtIGlmIG5lY2Vzc2FyeS5cclxuICovXHJcbmZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XHJcbiAgICBjb25zdCBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgY29uc3QgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBleHBlY3RzTG93ZXJDYXNlID8gdmFsID0+ICEhbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXSA6IHZhbCA9PiAhIW1hcFt2YWxdO1xyXG59XG5cbi8qKlxyXG4gKiBkZXYgb25seSBmbGFnIC0+IG5hbWUgbWFwcGluZ1xyXG4gKi9cclxuY29uc3QgUGF0Y2hGbGFnTmFtZXMgPSB7XHJcbiAgICBbMSAvKiBQYXRjaEZsYWdzLlRFWFQgKi9dOiBgVEVYVGAsXHJcbiAgICBbMiAvKiBQYXRjaEZsYWdzLkNMQVNTICovXTogYENMQVNTYCxcclxuICAgIFs0IC8qIFBhdGNoRmxhZ3MuU1RZTEUgKi9dOiBgU1RZTEVgLFxyXG4gICAgWzggLyogUGF0Y2hGbGFncy5QUk9QUyAqL106IGBQUk9QU2AsXHJcbiAgICBbMTYgLyogUGF0Y2hGbGFncy5GVUxMX1BST1BTICovXTogYEZVTExfUFJPUFNgLFxyXG4gICAgWzMyIC8qIFBhdGNoRmxhZ3MuSFlEUkFURV9FVkVOVFMgKi9dOiBgSFlEUkFURV9FVkVOVFNgLFxyXG4gICAgWzY0IC8qIFBhdGNoRmxhZ3MuU1RBQkxFX0ZSQUdNRU5UICovXTogYFNUQUJMRV9GUkFHTUVOVGAsXHJcbiAgICBbMTI4IC8qIFBhdGNoRmxhZ3MuS0VZRURfRlJBR01FTlQgKi9dOiBgS0VZRURfRlJBR01FTlRgLFxyXG4gICAgWzI1NiAvKiBQYXRjaEZsYWdzLlVOS0VZRURfRlJBR01FTlQgKi9dOiBgVU5LRVlFRF9GUkFHTUVOVGAsXHJcbiAgICBbNTEyIC8qIFBhdGNoRmxhZ3MuTkVFRF9QQVRDSCAqL106IGBORUVEX1BBVENIYCxcclxuICAgIFsxMDI0IC8qIFBhdGNoRmxhZ3MuRFlOQU1JQ19TTE9UUyAqL106IGBEWU5BTUlDX1NMT1RTYCxcclxuICAgIFsyMDQ4IC8qIFBhdGNoRmxhZ3MuREVWX1JPT1RfRlJBR01FTlQgKi9dOiBgREVWX1JPT1RfRlJBR01FTlRgLFxyXG4gICAgWy0xIC8qIFBhdGNoRmxhZ3MuSE9JU1RFRCAqL106IGBIT0lTVEVEYCxcclxuICAgIFstMiAvKiBQYXRjaEZsYWdzLkJBSUwgKi9dOiBgQkFJTGBcclxufTtcblxuLyoqXHJcbiAqIERldiBvbmx5XHJcbiAqL1xyXG5jb25zdCBzbG90RmxhZ3NUZXh0ID0ge1xyXG4gICAgWzEgLyogU2xvdEZsYWdzLlNUQUJMRSAqL106ICdTVEFCTEUnLFxyXG4gICAgWzIgLyogU2xvdEZsYWdzLkRZTkFNSUMgKi9dOiAnRFlOQU1JQycsXHJcbiAgICBbMyAvKiBTbG90RmxhZ3MuRk9SV0FSREVEICovXTogJ0ZPUldBUkRFRCdcclxufTtcblxuY29uc3QgR0xPQkFMU19XSElURV9MSVNURUQgPSAnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSwnICtcclxuICAgICdkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LCcgK1xyXG4gICAgJ09iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50JztcclxuY29uc3QgaXNHbG9iYWxseVdoaXRlbGlzdGVkID0gLyojX19QVVJFX18qLyBtYWtlTWFwKEdMT0JBTFNfV0hJVEVfTElTVEVEKTtcblxuY29uc3QgcmFuZ2UgPSAyO1xyXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVGcmFtZShzb3VyY2UsIHN0YXJ0ID0gMCwgZW5kID0gc291cmNlLmxlbmd0aCkge1xyXG4gICAgLy8gU3BsaXQgdGhlIGNvbnRlbnQgaW50byBpbmRpdmlkdWFsIGxpbmVzIGJ1dCBjYXB0dXJlIHRoZSBuZXdsaW5lIHNlcXVlbmNlXHJcbiAgICAvLyB0aGF0IHNlcGFyYXRlZCBlYWNoIGxpbmUuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGFjdHVhbCBzZXF1ZW5jZSBpc1xyXG4gICAgLy8gbmVlZGVkIHRvIHByb3Blcmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBmdWxsIGxpbmUgbGVuZ3RoIGZvciBvZmZzZXRcclxuICAgIC8vIGNvbXBhcmlzb25cclxuICAgIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvKFxccj9cXG4pLyk7XHJcbiAgICAvLyBTZXBhcmF0ZSB0aGUgbGluZXMgYW5kIG5ld2xpbmUgc2VxdWVuY2VzIGludG8gc2VwYXJhdGUgYXJyYXlzIGZvciBlYXNpZXIgcmVmZXJlbmNpbmdcclxuICAgIGNvbnN0IG5ld2xpbmVTZXF1ZW5jZXMgPSBsaW5lcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ICUgMiA9PT0gMSk7XHJcbiAgICBsaW5lcyA9IGxpbmVzLmZpbHRlcigoXywgaWR4KSA9PiBpZHggJSAyID09PSAwKTtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBjb25zdCByZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb3VudCArPVxyXG4gICAgICAgICAgICBsaW5lc1tpXS5sZW5ndGggK1xyXG4gICAgICAgICAgICAgICAgKChuZXdsaW5lU2VxdWVuY2VzW2ldICYmIG5ld2xpbmVTZXF1ZW5jZXNbaV0ubGVuZ3RoKSB8fCAwKTtcclxuICAgICAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgLSByYW5nZTsgaiA8PSBpICsgcmFuZ2UgfHwgZW5kID4gY291bnQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGogPCAwIHx8IGogPj0gbGluZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGogKyAxO1xyXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYCR7bGluZX0keycgJy5yZXBlYXQoTWF0aC5tYXgoMyAtIFN0cmluZyhsaW5lKS5sZW5ndGgsIDApKX18ICAke2xpbmVzW2pdfWApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUxlbmd0aCA9IGxpbmVzW2pdLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xpbmVTZXFMZW5ndGggPSAobmV3bGluZVNlcXVlbmNlc1tqXSAmJiBuZXdsaW5lU2VxdWVuY2VzW2pdLmxlbmd0aCkgfHwgMDtcclxuICAgICAgICAgICAgICAgIGlmIChqID09PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWQgPSBzdGFydCAtIChjb3VudCAtIChsaW5lTGVuZ3RoICsgbmV3TGluZVNlcUxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDEsIGVuZCA+IGNvdW50ID8gbGluZUxlbmd0aCAtIHBhZCA6IGVuZCAtIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChgICAgfCAgYCArICcgJy5yZXBlYXQocGFkKSArICdeJy5yZXBlYXQobGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID4gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPiBjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heChNYXRoLm1pbihlbmQgLSBjb3VudCwgbGluZUxlbmd0aCksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChgICAgfCAgYCArICdeJy5yZXBlYXQobGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGxpbmVMZW5ndGggKyBuZXdMaW5lU2VxTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXMuam9pbignXFxuJyk7XHJcbn1cblxuLyoqXHJcbiAqIE9uIHRoZSBjbGllbnQgd2Ugb25seSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgY2FzZXMgZm9yIGJvb2xlYW4gYXR0cmlidXRlcyB0aGF0XHJcbiAqIGhhdmUgZGlmZmVyZW50IG5hbWVzIGZyb20gdGhlaXIgY29ycmVzcG9uZGluZyBkb20gcHJvcGVydGllczpcclxuICogLSBpdGVtc2NvcGUgLT4gTi9BXHJcbiAqIC0gYWxsb3dmdWxsc2NyZWVuIC0+IGFsbG93RnVsbHNjcmVlblxyXG4gKiAtIGZvcm1ub3ZhbGlkYXRlIC0+IGZvcm1Ob1ZhbGlkYXRlXHJcbiAqIC0gaXNtYXAgLT4gaXNNYXBcclxuICogLSBub21vZHVsZSAtPiBub01vZHVsZVxyXG4gKiAtIG5vdmFsaWRhdGUgLT4gbm9WYWxpZGF0ZVxyXG4gKiAtIHJlYWRvbmx5IC0+IHJlYWRPbmx5XHJcbiAqL1xyXG5jb25zdCBzcGVjaWFsQm9vbGVhbkF0dHJzID0gYGl0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92YWxpZGF0ZSxyZWFkb25seWA7XHJcbmNvbnN0IGlzU3BlY2lhbEJvb2xlYW5BdHRyID0gLyojX19QVVJFX18qLyBtYWtlTWFwKHNwZWNpYWxCb29sZWFuQXR0cnMpO1xyXG4vKipcclxuICogVGhlIGZ1bGwgbGlzdCBpcyBuZWVkZWQgZHVyaW5nIFNTUiB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGluaXRpYWwgbWFya3VwLlxyXG4gKi9cclxuY29uc3QgaXNCb29sZWFuQXR0ciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChzcGVjaWFsQm9vbGVhbkF0dHJzICtcclxuICAgIGAsYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNvbnRyb2xzLGRlZmF1bHQsZGVmZXIsZGlzYWJsZWQsaGlkZGVuLGAgK1xyXG4gICAgYGxvb3Asb3BlbixyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3MsYCArXHJcbiAgICBgY2hlY2tlZCxtdXRlZCxtdWx0aXBsZSxzZWxlY3RlZGApO1xyXG4vKipcclxuICogQm9vbGVhbiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBpbmNsdWRlZCBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IG9yICcnLlxyXG4gKiBlLmcuIGA8c2VsZWN0IG11bHRpcGxlPmAgY29tcGlsZXMgdG8gYHsgbXVsdGlwbGU6ICcnIH1gXHJcbiAqL1xyXG5mdW5jdGlvbiBpbmNsdWRlQm9vbGVhbkF0dHIodmFsdWUpIHtcclxuICAgIHJldHVybiAhIXZhbHVlIHx8IHZhbHVlID09PSAnJztcclxufVxyXG5jb25zdCB1bnNhZmVBdHRyQ2hhclJFID0gL1s+Lz1cIidcXHUwMDA5XFx1MDAwYVxcdTAwMGNcXHUwMDIwXS87XHJcbmNvbnN0IGF0dHJWYWxpZGF0aW9uQ2FjaGUgPSB7fTtcclxuZnVuY3Rpb24gaXNTU1JTYWZlQXR0ck5hbWUobmFtZSkge1xyXG4gICAgaWYgKGF0dHJWYWxpZGF0aW9uQ2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYXR0clZhbGlkYXRpb25DYWNoZVtuYW1lXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGlzVW5zYWZlID0gdW5zYWZlQXR0ckNoYXJSRS50ZXN0KG5hbWUpO1xyXG4gICAgaWYgKGlzVW5zYWZlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgdW5zYWZlIGF0dHJpYnV0ZSBuYW1lOiAke25hbWV9YCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGF0dHJWYWxpZGF0aW9uQ2FjaGVbbmFtZV0gPSAhaXNVbnNhZmUpO1xyXG59XHJcbmNvbnN0IHByb3BzVG9BdHRyTWFwID0ge1xyXG4gICAgYWNjZXB0Q2hhcnNldDogJ2FjY2VwdC1jaGFyc2V0JyxcclxuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcclxuICAgIGh0bWxGb3I6ICdmb3InLFxyXG4gICAgaHR0cEVxdWl2OiAnaHR0cC1lcXVpdidcclxufTtcclxuLyoqXHJcbiAqIENTUyBwcm9wZXJ0aWVzIHRoYXQgYWNjZXB0IHBsYWluIG51bWJlcnNcclxuICovXHJcbmNvbnN0IGlzTm9Vbml0TnVtZXJpY1N0eWxlUHJvcCA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCxib3JkZXItaW1hZ2Utb3V0c2V0LGJvcmRlci1pbWFnZS1zbGljZSxgICtcclxuICAgIGBib3JkZXItaW1hZ2Utd2lkdGgsYm94LWZsZXgsYm94LWZsZXgtZ3JvdXAsYm94LW9yZGluYWwtZ3JvdXAsY29sdW1uLWNvdW50LGAgK1xyXG4gICAgYGNvbHVtbnMsZmxleCxmbGV4LWdyb3csZmxleC1wb3NpdGl2ZSxmbGV4LXNocmluayxmbGV4LW5lZ2F0aXZlLGZsZXgtb3JkZXIsYCArXHJcbiAgICBgZ3JpZC1yb3csZ3JpZC1yb3ctZW5kLGdyaWQtcm93LXNwYW4sZ3JpZC1yb3ctc3RhcnQsZ3JpZC1jb2x1bW4sYCArXHJcbiAgICBgZ3JpZC1jb2x1bW4tZW5kLGdyaWQtY29sdW1uLXNwYW4sZ3JpZC1jb2x1bW4tc3RhcnQsZm9udC13ZWlnaHQsbGluZS1jbGFtcCxgICtcclxuICAgIGBsaW5lLWhlaWdodCxvcGFjaXR5LG9yZGVyLG9ycGhhbnMsdGFiLXNpemUsd2lkb3dzLHotaW5kZXgsem9vbSxgICtcclxuICAgIC8vIFNWR1xyXG4gICAgYGZpbGwtb3BhY2l0eSxmbG9vZC1vcGFjaXR5LHN0b3Atb3BhY2l0eSxzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LGAgK1xyXG4gICAgYHN0cm9rZS1taXRlcmxpbWl0LHN0cm9rZS1vcGFjaXR5LHN0cm9rZS13aWR0aGApO1xyXG4vKipcclxuICogS25vd24gYXR0cmlidXRlcywgdGhpcyBpcyB1c2VkIGZvciBzdHJpbmdpZmljYXRpb24gb2YgcnVudGltZSBzdGF0aWMgbm9kZXNcclxuICogc28gdGhhdCB3ZSBkb24ndCBzdHJpbmdpZnkgYmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgc2V0IGZyb20gSFRNTC5cclxuICogRG9uJ3QgYWxzbyBmb3JnZXQgdG8gYWxsb3cgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIVxyXG4gKiBHZW5lcmF0ZWQgZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXNcclxuICovXHJcbmNvbnN0IGlzS25vd25IdG1sQXR0ciA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChgYWNjZXB0LGFjY2VwdC1jaGFyc2V0LGFjY2Vzc2tleSxhY3Rpb24sYWxpZ24sYWxsb3csYWx0LGFzeW5jLGAgK1xyXG4gICAgYGF1dG9jYXBpdGFsaXplLGF1dG9jb21wbGV0ZSxhdXRvZm9jdXMsYXV0b3BsYXksYmFja2dyb3VuZCxiZ2NvbG9yLGAgK1xyXG4gICAgYGJvcmRlcixidWZmZXJlZCxjYXB0dXJlLGNoYWxsZW5nZSxjaGFyc2V0LGNoZWNrZWQsY2l0ZSxjbGFzcyxjb2RlLGAgK1xyXG4gICAgYGNvZGViYXNlLGNvbG9yLGNvbHMsY29sc3Bhbixjb250ZW50LGNvbnRlbnRlZGl0YWJsZSxjb250ZXh0bWVudSxjb250cm9scyxgICtcclxuICAgIGBjb29yZHMsY3Jvc3NvcmlnaW4sY3NwLGRhdGEsZGF0ZXRpbWUsZGVjb2RpbmcsZGVmYXVsdCxkZWZlcixkaXIsZGlybmFtZSxgICtcclxuICAgIGBkaXNhYmxlZCxkb3dubG9hZCxkcmFnZ2FibGUsZHJvcHpvbmUsZW5jdHlwZSxlbnRlcmtleWhpbnQsZm9yLGZvcm0sYCArXHJcbiAgICBgZm9ybWFjdGlvbixmb3JtZW5jdHlwZSxmb3JtbWV0aG9kLGZvcm1ub3ZhbGlkYXRlLGZvcm10YXJnZXQsaGVhZGVycyxgICtcclxuICAgIGBoZWlnaHQsaGlkZGVuLGhpZ2gsaHJlZixocmVmbGFuZyxodHRwLWVxdWl2LGljb24saWQsaW1wb3J0YW5jZSxpbnRlZ3JpdHksYCArXHJcbiAgICBgaXNtYXAsaXRlbXByb3Asa2V5dHlwZSxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9hZGluZyxsaXN0LGxvb3AsbG93LGAgK1xyXG4gICAgYG1hbmlmZXN0LG1heCxtYXhsZW5ndGgsbWlubGVuZ3RoLG1lZGlhLG1pbixtdWx0aXBsZSxtdXRlZCxuYW1lLG5vdmFsaWRhdGUsYCArXHJcbiAgICBgb3BlbixvcHRpbXVtLHBhdHRlcm4scGluZyxwbGFjZWhvbGRlcixwb3N0ZXIscHJlbG9hZCxyYWRpb2dyb3VwLHJlYWRvbmx5LGAgK1xyXG4gICAgYHJlZmVycmVycG9saWN5LHJlbCxyZXF1aXJlZCxyZXZlcnNlZCxyb3dzLHJvd3NwYW4sc2FuZGJveCxzY29wZSxzY29wZWQsYCArXHJcbiAgICBgc2VsZWN0ZWQsc2hhcGUsc2l6ZSxzaXplcyxzbG90LHNwYW4sc3BlbGxjaGVjayxzcmMsc3JjZG9jLHNyY2xhbmcsc3Jjc2V0LGAgK1xyXG4gICAgYHN0YXJ0LHN0ZXAsc3R5bGUsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLGAgK1xyXG4gICAgYHZhbHVlLHdpZHRoLHdyYXBgKTtcclxuLyoqXHJcbiAqIEdlbmVyYXRlZCBmcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGVcclxuICovXHJcbmNvbnN0IGlzS25vd25TdmdBdHRyID0gLyojX19QVVJFX18qLyBtYWtlTWFwKGB4bWxucyxhY2NlbnQtaGVpZ2h0LGFjY3VtdWxhdGUsYWRkaXRpdmUsYWxpZ25tZW50LWJhc2VsaW5lLGFscGhhYmV0aWMsYW1wbGl0dWRlLGAgK1xyXG4gICAgYGFyYWJpYy1mb3JtLGFzY2VudCxhdHRyaWJ1dGVOYW1lLGF0dHJpYnV0ZVR5cGUsYXppbXV0aCxiYXNlRnJlcXVlbmN5LGAgK1xyXG4gICAgYGJhc2VsaW5lLXNoaWZ0LGJhc2VQcm9maWxlLGJib3gsYmVnaW4sYmlhcyxieSxjYWxjTW9kZSxjYXAtaGVpZ2h0LGNsYXNzLGAgK1xyXG4gICAgYGNsaXAsY2xpcFBhdGhVbml0cyxjbGlwLXBhdGgsY2xpcC1ydWxlLGNvbG9yLGNvbG9yLWludGVycG9sYXRpb24sYCArXHJcbiAgICBgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLGNvbG9yLXByb2ZpbGUsY29sb3ItcmVuZGVyaW5nLGAgK1xyXG4gICAgYGNvbnRlbnRTY3JpcHRUeXBlLGNvbnRlbnRTdHlsZVR5cGUsY3Jvc3NvcmlnaW4sY3Vyc29yLGN4LGN5LGQsZGVjZWxlcmF0ZSxgICtcclxuICAgIGBkZXNjZW50LGRpZmZ1c2VDb25zdGFudCxkaXJlY3Rpb24sZGlzcGxheSxkaXZpc29yLGRvbWluYW50LWJhc2VsaW5lLGR1cixkeCxgICtcclxuICAgIGBkeSxlZGdlTW9kZSxlbGV2YXRpb24sZW5hYmxlLWJhY2tncm91bmQsZW5kLGV4cG9uZW50LGZpbGwsZmlsbC1vcGFjaXR5LGAgK1xyXG4gICAgYGZpbGwtcnVsZSxmaWx0ZXIsZmlsdGVyUmVzLGZpbHRlclVuaXRzLGZsb29kLWNvbG9yLGZsb29kLW9wYWNpdHksYCArXHJcbiAgICBgZm9udC1mYW1pbHksZm9udC1zaXplLGZvbnQtc2l6ZS1hZGp1c3QsZm9udC1zdHJldGNoLGZvbnQtc3R5bGUsYCArXHJcbiAgICBgZm9udC12YXJpYW50LGZvbnQtd2VpZ2h0LGZvcm1hdCxmcm9tLGZyLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsYCArXHJcbiAgICBgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCxnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCxnbHlwaFJlZixgICtcclxuICAgIGBncmFkaWVudFRyYW5zZm9ybSxncmFkaWVudFVuaXRzLGhhbmdpbmcsaGVpZ2h0LGhyZWYsaHJlZmxhbmcsaG9yaXotYWR2LXgsYCArXHJcbiAgICBgaG9yaXotb3JpZ2luLXgsaWQsaWRlb2dyYXBoaWMsaW1hZ2UtcmVuZGVyaW5nLGluLGluMixpbnRlcmNlcHQsayxrMSxrMixrMyxgICtcclxuICAgIGBrNCxrZXJuZWxNYXRyaXgsa2VybmVsVW5pdExlbmd0aCxrZXJuaW5nLGtleVBvaW50cyxrZXlTcGxpbmVzLGtleVRpbWVzLGAgK1xyXG4gICAgYGxhbmcsbGVuZ3RoQWRqdXN0LGxldHRlci1zcGFjaW5nLGxpZ2h0aW5nLWNvbG9yLGxpbWl0aW5nQ29uZUFuZ2xlLGxvY2FsLGAgK1xyXG4gICAgYG1hcmtlci1lbmQsbWFya2VyLW1pZCxtYXJrZXItc3RhcnQsbWFya2VySGVpZ2h0LG1hcmtlclVuaXRzLG1hcmtlcldpZHRoLGAgK1xyXG4gICAgYG1hc2ssbWFza0NvbnRlbnRVbml0cyxtYXNrVW5pdHMsbWF0aGVtYXRpY2FsLG1heCxtZWRpYSxtZXRob2QsbWluLG1vZGUsYCArXHJcbiAgICBgbmFtZSxudW1PY3RhdmVzLG9mZnNldCxvcGFjaXR5LG9wZXJhdG9yLG9yZGVyLG9yaWVudCxvcmllbnRhdGlvbixvcmlnaW4sYCArXHJcbiAgICBgb3ZlcmZsb3csb3ZlcmxpbmUtcG9zaXRpb24sb3ZlcmxpbmUtdGhpY2tuZXNzLHBhbm9zZS0xLHBhaW50LW9yZGVyLHBhdGgsYCArXHJcbiAgICBgcGF0aExlbmd0aCxwYXR0ZXJuQ29udGVudFVuaXRzLHBhdHRlcm5UcmFuc2Zvcm0scGF0dGVyblVuaXRzLHBpbmcsYCArXHJcbiAgICBgcG9pbnRlci1ldmVudHMscG9pbnRzLHBvaW50c0F0WCxwb2ludHNBdFkscG9pbnRzQXRaLHByZXNlcnZlQWxwaGEsYCArXHJcbiAgICBgcHJlc2VydmVBc3BlY3RSYXRpbyxwcmltaXRpdmVVbml0cyxyLHJhZGl1cyxyZWZlcnJlclBvbGljeSxyZWZYLHJlZlkscmVsLGAgK1xyXG4gICAgYHJlbmRlcmluZy1pbnRlbnQscmVwZWF0Q291bnQscmVwZWF0RHVyLHJlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLGAgK1xyXG4gICAgYHJlc3RhcnQscmVzdWx0LHJvdGF0ZSxyeCxyeSxzY2FsZSxzZWVkLHNoYXBlLXJlbmRlcmluZyxzbG9wZSxzcGFjaW5nLGAgK1xyXG4gICAgYHNwZWN1bGFyQ29uc3RhbnQsc3BlY3VsYXJFeHBvbmVudCxzcGVlZCxzcHJlYWRNZXRob2Qsc3RhcnRPZmZzZXQsYCArXHJcbiAgICBgc3RkRGV2aWF0aW9uLHN0ZW1oLHN0ZW12LHN0aXRjaFRpbGVzLHN0b3AtY29sb3Isc3RvcC1vcGFjaXR5LGAgK1xyXG4gICAgYHN0cmlrZXRocm91Z2gtcG9zaXRpb24sc3RyaWtldGhyb3VnaC10aGlja25lc3Msc3RyaW5nLHN0cm9rZSxgICtcclxuICAgIGBzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LHN0cm9rZS1saW5lY2FwLHN0cm9rZS1saW5lam9pbixgICtcclxuICAgIGBzdHJva2UtbWl0ZXJsaW1pdCxzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGgsc3R5bGUsc3VyZmFjZVNjYWxlLGAgK1xyXG4gICAgYHN5c3RlbUxhbmd1YWdlLHRhYmluZGV4LHRhYmxlVmFsdWVzLHRhcmdldCx0YXJnZXRYLHRhcmdldFksdGV4dC1hbmNob3IsYCArXHJcbiAgICBgdGV4dC1kZWNvcmF0aW9uLHRleHQtcmVuZGVyaW5nLHRleHRMZW5ndGgsdG8sdHJhbnNmb3JtLHRyYW5zZm9ybS1vcmlnaW4sYCArXHJcbiAgICBgdHlwZSx1MSx1Mix1bmRlcmxpbmUtcG9zaXRpb24sdW5kZXJsaW5lLXRoaWNrbmVzcyx1bmljb2RlLHVuaWNvZGUtYmlkaSxgICtcclxuICAgIGB1bmljb2RlLXJhbmdlLHVuaXRzLXBlci1lbSx2LWFscGhhYmV0aWMsdi1oYW5naW5nLHYtaWRlb2dyYXBoaWMsYCArXHJcbiAgICBgdi1tYXRoZW1hdGljYWwsdmFsdWVzLHZlY3Rvci1lZmZlY3QsdmVyc2lvbix2ZXJ0LWFkdi15LHZlcnQtb3JpZ2luLXgsYCArXHJcbiAgICBgdmVydC1vcmlnaW4teSx2aWV3Qm94LHZpZXdUYXJnZXQsdmlzaWJpbGl0eSx3aWR0aCx3aWR0aHMsd29yZC1zcGFjaW5nLGAgK1xyXG4gICAgYHdyaXRpbmctbW9kZSx4LHgtaGVpZ2h0LHgxLHgyLHhDaGFubmVsU2VsZWN0b3IseGxpbms6YWN0dWF0ZSx4bGluazphcmNyb2xlLGAgK1xyXG4gICAgYHhsaW5rOmhyZWYseGxpbms6cm9sZSx4bGluazpzaG93LHhsaW5rOnRpdGxlLHhsaW5rOnR5cGUseG1sOmJhc2UseG1sOmxhbmcsYCArXHJcbiAgICBgeG1sOnNwYWNlLHkseTEseTIseUNoYW5uZWxTZWxlY3Rvcix6LHpvb21BbmRQYW5gKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGUodmFsdWUpIHtcclxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHZhbHVlW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gaXNTdHJpbmcoaXRlbSlcclxuICAgICAgICAgICAgICAgID8gcGFyc2VTdHJpbmdTdHlsZShpdGVtKVxyXG4gICAgICAgICAgICAgICAgOiBub3JtYWxpemVTdHlsZShpdGVtKTtcclxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vcm1hbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IG5vcm1hbGl6ZWRba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGxpc3REZWxpbWl0ZXJSRSA9IC87KD8hW14oXSpcXCkpL2c7XHJcbmNvbnN0IHByb3BlcnR5RGVsaW1pdGVyUkUgPSAvOiguKykvO1xyXG5mdW5jdGlvbiBwYXJzZVN0cmluZ1N0eWxlKGNzc1RleHQpIHtcclxuICAgIGNvbnN0IHJldCA9IHt9O1xyXG4gICAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyUkUpLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlclJFKTtcclxuICAgICAgICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJldFt0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdpZnlTdHlsZShzdHlsZXMpIHtcclxuICAgIGxldCByZXQgPSAnJztcclxuICAgIGlmICghc3R5bGVzIHx8IGlzU3RyaW5nKHN0eWxlcykpIHtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHlsZXNba2V5XTtcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnN0YXJ0c1dpdGgoYC0tYCkgPyBrZXkgOiBoeXBoZW5hdGUoa2V5KTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpIHx8XHJcbiAgICAgICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTm9Vbml0TnVtZXJpY1N0eWxlUHJvcChub3JtYWxpemVkS2V5KSkpIHtcclxuICAgICAgICAgICAgLy8gb25seSByZW5kZXIgdmFsaWQgdmFsdWVzXHJcbiAgICAgICAgICAgIHJldCArPSBgJHtub3JtYWxpemVkS2V5fToke3ZhbHVlfTtgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3ModmFsdWUpIHtcclxuICAgIGxldCByZXMgPSAnJztcclxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICByZXMgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ2xhc3ModmFsdWVbaV0pO1xyXG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzICs9IG5vcm1hbGl6ZWQgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXMgKz0gbmFtZSArICcgJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXMudHJpbSgpO1xyXG59XHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKHByb3BzKSB7XHJcbiAgICBpZiAoIXByb3BzKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHsgY2xhc3M6IGtsYXNzLCBzdHlsZSB9ID0gcHJvcHM7XHJcbiAgICBpZiAoa2xhc3MgJiYgIWlzU3RyaW5nKGtsYXNzKSkge1xyXG4gICAgICAgIHByb3BzLmNsYXNzID0gbm9ybWFsaXplQ2xhc3Moa2xhc3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0eWxlKSB7XHJcbiAgICAgICAgcHJvcHMuc3R5bGUgPSBub3JtYWxpemVTdHlsZShzdHlsZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbn1cblxuLy8gVGhlc2UgdGFnIGNvbmZpZ3MgYXJlIHNoYXJlZCBiZXR3ZWVuIGNvbXBpbGVyLWRvbSBhbmQgcnVudGltZS1kb20sIHNvIHRoZXlcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50XHJcbmNvbnN0IEhUTUxfVEFHUyA9ICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLCcgK1xyXG4gICAgJ2hlYWRlcixoMSxoMixoMyxoNCxoNSxoNixuYXYsc2VjdGlvbixkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbiwnICtcclxuICAgICdmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCxhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSwnICtcclxuICAgICdkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCwnICtcclxuICAgICd0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLCcgK1xyXG4gICAgJ2NhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCwnICtcclxuICAgICd0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsJyArXHJcbiAgICAnb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSwnICtcclxuICAgICdzdW1tYXJ5LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290JztcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL0VsZW1lbnRcclxuY29uc3QgU1ZHX1RBR1MgPSAnc3ZnLGFuaW1hdGUsYW5pbWF0ZU1vdGlvbixhbmltYXRlVHJhbnNmb3JtLGNpcmNsZSxjbGlwUGF0aCxjb2xvci1wcm9maWxlLCcgK1xyXG4gICAgJ2RlZnMsZGVzYyxkaXNjYXJkLGVsbGlwc2UsZmVCbGVuZCxmZUNvbG9yTWF0cml4LGZlQ29tcG9uZW50VHJhbnNmZXIsJyArXHJcbiAgICAnZmVDb21wb3NpdGUsZmVDb252b2x2ZU1hdHJpeCxmZURpZmZ1c2VMaWdodGluZyxmZURpc3BsYWNlbWVudE1hcCwnICtcclxuICAgICdmZURpc3RhbmNlTGlnaHQsZmVEcm9wU2hhZG93LGZlRmxvb2QsZmVGdW5jQSxmZUZ1bmNCLGZlRnVuY0csZmVGdW5jUiwnICtcclxuICAgICdmZUdhdXNzaWFuQmx1cixmZUltYWdlLGZlTWVyZ2UsZmVNZXJnZU5vZGUsZmVNb3JwaG9sb2d5LGZlT2Zmc2V0LCcgK1xyXG4gICAgJ2ZlUG9pbnRMaWdodCxmZVNwZWN1bGFyTGlnaHRpbmcsZmVTcG90TGlnaHQsZmVUaWxlLGZlVHVyYnVsZW5jZSxmaWx0ZXIsJyArXHJcbiAgICAnZm9yZWlnbk9iamVjdCxnLGhhdGNoLGhhdGNocGF0aCxpbWFnZSxsaW5lLGxpbmVhckdyYWRpZW50LG1hcmtlcixtYXNrLCcgK1xyXG4gICAgJ21lc2gsbWVzaGdyYWRpZW50LG1lc2hwYXRjaCxtZXNocm93LG1ldGFkYXRhLG1wYXRoLHBhdGgscGF0dGVybiwnICtcclxuICAgICdwb2x5Z29uLHBvbHlsaW5lLHJhZGlhbEdyYWRpZW50LHJlY3Qsc2V0LHNvbGlkY29sb3Isc3RvcCxzd2l0Y2gsc3ltYm9sLCcgK1xyXG4gICAgJ3RleHQsdGV4dFBhdGgsdGl0bGUsdHNwYW4sdW5rbm93bix1c2Usdmlldyc7XHJcbmNvbnN0IFZPSURfVEFHUyA9ICdhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicic7XHJcbi8qKlxyXG4gKiBDb21waWxlciBvbmx5LlxyXG4gKiBEbyBOT1QgdXNlIGluIHJ1bnRpbWUgY29kZSBwYXRocyB1bmxlc3MgYmVoaW5kIGAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylgIGZsYWcuXHJcbiAqL1xyXG5jb25zdCBpc0hUTUxUYWcgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoSFRNTF9UQUdTKTtcclxuLyoqXHJcbiAqIENvbXBpbGVyIG9ubHkuXHJcbiAqIERvIE5PVCB1c2UgaW4gcnVudGltZSBjb2RlIHBhdGhzIHVubGVzcyBiZWhpbmQgYChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKWAgZmxhZy5cclxuICovXHJcbmNvbnN0IGlzU1ZHVGFnID0gLyojX19QVVJFX18qLyBtYWtlTWFwKFNWR19UQUdTKTtcclxuLyoqXHJcbiAqIENvbXBpbGVyIG9ubHkuXHJcbiAqIERvIE5PVCB1c2UgaW4gcnVudGltZSBjb2RlIHBhdGhzIHVubGVzcyBiZWhpbmQgYChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKWAgZmxhZy5cclxuICovXHJcbmNvbnN0IGlzVm9pZFRhZyA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcChWT0lEX1RBR1MpO1xuXG5jb25zdCBlc2NhcGVSRSA9IC9bXCInJjw+XS87XHJcbmZ1bmN0aW9uIGVzY2FwZUh0bWwoc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzdHIgPSAnJyArIHN0cmluZztcclxuICAgIGNvbnN0IG1hdGNoID0gZXNjYXBlUkUuZXhlYyhzdHIpO1xyXG4gICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgICBsZXQgaHRtbCA9ICcnO1xyXG4gICAgbGV0IGVzY2FwZWQ7XHJcbiAgICBsZXQgaW5kZXg7XHJcbiAgICBsZXQgbGFzdEluZGV4ID0gMDtcclxuICAgIGZvciAoaW5kZXggPSBtYXRjaC5pbmRleDsgaW5kZXggPCBzdHIubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgc3dpdGNoIChzdHIuY2hhckNvZGVBdChpbmRleCkpIHtcclxuICAgICAgICAgICAgY2FzZSAzNDogLy8gXCJcclxuICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAnJnF1b3Q7JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM4OiAvLyAmXHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gJyZhbXA7JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM5OiAvLyAnXHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gJyYjMzk7JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDYwOiAvLyA8XHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gJyZsdDsnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjI6IC8vID5cclxuICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAnJmd0Oyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGFzdEluZGV4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICBodG1sICs9IHN0ci5zbGljZShsYXN0SW5kZXgsIGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdEluZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgIGh0bWwgKz0gZXNjYXBlZDtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXN0SW5kZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zbGljZShsYXN0SW5kZXgsIGluZGV4KSA6IGh0bWw7XHJcbn1cclxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1Mi9zeW50YXguaHRtbCNjb21tZW50c1xyXG5jb25zdCBjb21tZW50U3RyaXBSRSA9IC9eLT8+fDwhLS18LS0+fC0tIT58PCEtJC9nO1xyXG5mdW5jdGlvbiBlc2NhcGVIdG1sQ29tbWVudChzcmMpIHtcclxuICAgIHJldHVybiBzcmMucmVwbGFjZShjb21tZW50U3RyaXBSRSwgJycpO1xyXG59XG5cbmZ1bmN0aW9uIGxvb3NlQ29tcGFyZUFycmF5cyhhLCBiKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBlcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgZXF1YWwgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBlcXVhbCA9IGxvb3NlRXF1YWwoYVtpXSwgYltpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXF1YWw7XHJcbn1cclxuZnVuY3Rpb24gbG9vc2VFcXVhbChhLCBiKSB7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGxldCBhVmFsaWRUeXBlID0gaXNEYXRlKGEpO1xyXG4gICAgbGV0IGJWYWxpZFR5cGUgPSBpc0RhdGUoYik7XHJcbiAgICBpZiAoYVZhbGlkVHlwZSB8fCBiVmFsaWRUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGFWYWxpZFR5cGUgJiYgYlZhbGlkVHlwZSA/IGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgYVZhbGlkVHlwZSA9IGlzU3ltYm9sKGEpO1xyXG4gICAgYlZhbGlkVHlwZSA9IGlzU3ltYm9sKGIpO1xyXG4gICAgaWYgKGFWYWxpZFR5cGUgfHwgYlZhbGlkVHlwZSkge1xyXG4gICAgICAgIHJldHVybiBhID09PSBiO1xyXG4gICAgfVxyXG4gICAgYVZhbGlkVHlwZSA9IGlzQXJyYXkoYSk7XHJcbiAgICBiVmFsaWRUeXBlID0gaXNBcnJheShiKTtcclxuICAgIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcclxuICAgICAgICByZXR1cm4gYVZhbGlkVHlwZSAmJiBiVmFsaWRUeXBlID8gbG9vc2VDb21wYXJlQXJyYXlzKGEsIGIpIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICBhVmFsaWRUeXBlID0gaXNPYmplY3QoYSk7XHJcbiAgICBiVmFsaWRUeXBlID0gaXNPYmplY3QoYik7XHJcbiAgICBpZiAoYVZhbGlkVHlwZSB8fCBiVmFsaWRUeXBlKSB7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmOiB0aGlzIGlmIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgY2FsbGVkICovXHJcbiAgICAgICAgaWYgKCFhVmFsaWRUeXBlIHx8ICFiVmFsaWRUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYUtleXNDb3VudCA9IE9iamVjdC5rZXlzKGEpLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBiS2V5c0NvdW50ID0gT2JqZWN0LmtleXMoYikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChhS2V5c0NvdW50ICE9PSBiS2V5c0NvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xyXG4gICAgICAgICAgICBjb25zdCBhSGFzS2V5ID0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgICAgICAgICBjb25zdCBiSGFzS2V5ID0gYi5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoKGFIYXNLZXkgJiYgIWJIYXNLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICAoIWFIYXNLZXkgJiYgYkhhc0tleSkgfHxcclxuICAgICAgICAgICAgICAgICFsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xyXG59XHJcbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZihhcnIsIHZhbCkge1xyXG4gICAgcmV0dXJuIGFyci5maW5kSW5kZXgoaXRlbSA9PiBsb29zZUVxdWFsKGl0ZW0sIHZhbCkpO1xyXG59XG5cbi8qKlxyXG4gKiBGb3IgY29udmVydGluZyB7eyBpbnRlcnBvbGF0aW9uIH19IHZhbHVlcyB0byBkaXNwbGF5ZWQgc3RyaW5ncy5cclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IHRvRGlzcGxheVN0cmluZyA9ICh2YWwpID0+IHtcclxuICAgIHJldHVybiBpc1N0cmluZyh2YWwpXHJcbiAgICAgICAgPyB2YWxcclxuICAgICAgICA6IHZhbCA9PSBudWxsXHJcbiAgICAgICAgICAgID8gJydcclxuICAgICAgICAgICAgOiBpc0FycmF5KHZhbCkgfHxcclxuICAgICAgICAgICAgICAgIChpc09iamVjdCh2YWwpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbC50b1N0cmluZyA9PT0gb2JqZWN0VG9TdHJpbmcgfHwgIWlzRnVuY3Rpb24odmFsLnRvU3RyaW5nKSkpXHJcbiAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgcmVwbGFjZXIsIDIpXHJcbiAgICAgICAgICAgICAgICA6IFN0cmluZyh2YWwpO1xyXG59O1xyXG5jb25zdCByZXBsYWNlciA9IChfa2V5LCB2YWwpID0+IHtcclxuICAgIC8vIGNhbid0IHVzZSBpc1JlZiBoZXJlIHNpbmNlIEB2dWUvc2hhcmVkIGhhcyBubyBkZXBzXHJcbiAgICBpZiAodmFsICYmIHZhbC5fX3ZfaXNSZWYpIHtcclxuICAgICAgICByZXR1cm4gcmVwbGFjZXIoX2tleSwgdmFsLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzTWFwKHZhbCkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBbYE1hcCgke3ZhbC5zaXplfSlgXTogWy4uLnZhbC5lbnRyaWVzKCldLnJlZHVjZSgoZW50cmllcywgW2tleSwgdmFsXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZW50cmllc1tgJHtrZXl9ID0+YF0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcztcclxuICAgICAgICAgICAgfSwge30pXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU2V0KHZhbCkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBbYFNldCgke3ZhbC5zaXplfSlgXTogWy4uLnZhbC52YWx1ZXMoKV1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsKSAmJiAhaXNBcnJheSh2YWwpICYmICFpc1BsYWluT2JqZWN0KHZhbCkpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59O1xuXG5jb25zdCBFTVBUWV9PQkogPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJylcclxuICAgID8gT2JqZWN0LmZyZWV6ZSh7fSlcclxuICAgIDoge307XHJcbmNvbnN0IEVNUFRZX0FSUiA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IE9iamVjdC5mcmVlemUoW10pIDogW107XHJcbmNvbnN0IE5PT1AgPSAoKSA9PiB7IH07XHJcbi8qKlxyXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxyXG4gKi9cclxuY29uc3QgTk8gPSAoKSA9PiBmYWxzZTtcclxuY29uc3Qgb25SRSA9IC9eb25bXmEtel0vO1xyXG5jb25zdCBpc09uID0gKGtleSkgPT4gb25SRS50ZXN0KGtleSk7XHJcbmNvbnN0IGlzTW9kZWxMaXN0ZW5lciA9IChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdvblVwZGF0ZTonKTtcclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuY29uc3QgcmVtb3ZlID0gKGFyciwgZWwpID0+IHtcclxuICAgIGNvbnN0IGkgPSBhcnIuaW5kZXhPZihlbCk7XHJcbiAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxufTtcclxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5jb25zdCBoYXNPd24gPSAodmFsLCBrZXkpID0+IGhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpO1xyXG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuY29uc3QgaXNNYXAgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gJ1tvYmplY3QgTWFwXSc7XHJcbmNvbnN0IGlzU2V0ID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IFNldF0nO1xyXG5jb25zdCBpc0RhdGUgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xyXG5jb25zdCBpc0Z1bmN0aW9uID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcclxuY29uc3QgaXNTdHJpbmcgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcclxuY29uc3QgaXNTeW1ib2wgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnc3ltYm9sJztcclxuY29uc3QgaXNPYmplY3QgPSAodmFsKSA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XHJcbmNvbnN0IGlzUHJvbWlzZSA9ICh2YWwpID0+IHtcclxuICAgIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnRoZW4pICYmIGlzRnVuY3Rpb24odmFsLmNhdGNoKTtcclxufTtcclxuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xyXG5jb25zdCB0b1R5cGVTdHJpbmcgPSAodmFsdWUpID0+IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xyXG5jb25zdCB0b1Jhd1R5cGUgPSAodmFsdWUpID0+IHtcclxuICAgIC8vIGV4dHJhY3QgXCJSYXdUeXBlXCIgZnJvbSBzdHJpbmdzIGxpa2UgXCJbb2JqZWN0IFJhd1R5cGVdXCJcclxuICAgIHJldHVybiB0b1R5cGVTdHJpbmcodmFsdWUpLnNsaWNlKDgsIC0xKTtcclxufTtcclxuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJztcclxuY29uc3QgaXNJbnRlZ2VyS2V5ID0gKGtleSkgPT4gaXNTdHJpbmcoa2V5KSAmJlxyXG4gICAga2V5ICE9PSAnTmFOJyAmJlxyXG4gICAga2V5WzBdICE9PSAnLScgJiZcclxuICAgICcnICsgcGFyc2VJbnQoa2V5LCAxMCkgPT09IGtleTtcclxuY29uc3QgaXNSZXNlcnZlZFByb3AgPSAvKiNfX1BVUkVfXyovIG1ha2VNYXAoXHJcbi8vIHRoZSBsZWFkaW5nIGNvbW1hIGlzIGludGVudGlvbmFsIHNvIGVtcHR5IHN0cmluZyBcIlwiIGlzIGFsc28gaW5jbHVkZWRcclxuJyxrZXkscmVmLHJlZl9mb3IscmVmX2tleSwnICtcclxuICAgICdvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsJyArXHJcbiAgICAnb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCwnICtcclxuICAgICdvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkJyk7XHJcbmNvbnN0IGlzQnVpbHRJbkRpcmVjdGl2ZSA9IC8qI19fUFVSRV9fKi8gbWFrZU1hcCgnYmluZCxjbG9hayxlbHNlLWlmLGVsc2UsZm9yLGh0bWwsaWYsbW9kZWwsb24sb25jZSxwcmUsc2hvdyxzbG90LHRleHQsbWVtbycpO1xyXG5jb25zdCBjYWNoZVN0cmluZ0Z1bmN0aW9uID0gKGZuKSA9PiB7XHJcbiAgICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICByZXR1cm4gKChzdHIpID0+IHtcclxuICAgICAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xyXG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcclxuICAgIH0pO1xyXG59O1xyXG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IGNhbWVsaXplID0gY2FjaGVTdHJpbmdGdW5jdGlvbigoc3RyKSA9PiB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgKF8sIGMpID0+IChjID8gYy50b1VwcGVyQ2FzZSgpIDogJycpKTtcclxufSk7XHJcbmNvbnN0IGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBoeXBoZW5hdGUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKSk7XHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgY2FwaXRhbGl6ZSA9IGNhY2hlU3RyaW5nRnVuY3Rpb24oKHN0cikgPT4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKTtcclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCB0b0hhbmRsZXJLZXkgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHN0ciA/IGBvbiR7Y2FwaXRhbGl6ZShzdHIpfWAgOiBgYCk7XHJcbi8vIGNvbXBhcmUgd2hldGhlciBhIHZhbHVlIGhhcyBjaGFuZ2VkLCBhY2NvdW50aW5nIGZvciBOYU4uXHJcbmNvbnN0IGhhc0NoYW5nZWQgPSAodmFsdWUsIG9sZFZhbHVlKSA9PiAhT2JqZWN0LmlzKHZhbHVlLCBvbGRWYWx1ZSk7XHJcbmNvbnN0IGludm9rZUFycmF5Rm5zID0gKGZucywgYXJnKSA9PiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZuc1tpXShhcmcpO1xyXG4gICAgfVxyXG59O1xyXG5jb25zdCBkZWYgPSAob2JqLCBrZXksIHZhbHVlKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG59O1xyXG5jb25zdCB0b051bWJlciA9ICh2YWwpID0+IHtcclxuICAgIGNvbnN0IG4gPSBwYXJzZUZsb2F0KHZhbCk7XHJcbiAgICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuO1xyXG59O1xyXG5sZXQgX2dsb2JhbFRoaXM7XHJcbmNvbnN0IGdldEdsb2JhbFRoaXMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gKF9nbG9iYWxUaGlzIHx8XHJcbiAgICAgICAgKF9nbG9iYWxUaGlzID1cclxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFRoaXNcclxuICAgICAgICAgICAgICAgIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSkpO1xyXG59O1xyXG5jb25zdCBpZGVudFJFID0gL15bXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVtfJGEtekEtWjAtOVxceEEwLVxcdUZGRkZdKiQvO1xyXG5mdW5jdGlvbiBnZW5Qcm9wc0FjY2Vzc0V4cChuYW1lKSB7XHJcbiAgICByZXR1cm4gaWRlbnRSRS50ZXN0KG5hbWUpXHJcbiAgICAgICAgPyBgX19wcm9wcy4ke25hbWV9YFxyXG4gICAgICAgIDogYF9fcHJvcHNbJHtKU09OLnN0cmluZ2lmeShuYW1lKX1dYDtcclxufVxuXG5leHBvcnQgeyBFTVBUWV9BUlIsIEVNUFRZX09CSiwgTk8sIE5PT1AsIFBhdGNoRmxhZ05hbWVzLCBjYW1lbGl6ZSwgY2FwaXRhbGl6ZSwgZGVmLCBlc2NhcGVIdG1sLCBlc2NhcGVIdG1sQ29tbWVudCwgZXh0ZW5kLCBnZW5Qcm9wc0FjY2Vzc0V4cCwgZ2VuZXJhdGVDb2RlRnJhbWUsIGdldEdsb2JhbFRoaXMsIGhhc0NoYW5nZWQsIGhhc093biwgaHlwaGVuYXRlLCBpbmNsdWRlQm9vbGVhbkF0dHIsIGludm9rZUFycmF5Rm5zLCBpc0FycmF5LCBpc0Jvb2xlYW5BdHRyLCBpc0J1aWx0SW5EaXJlY3RpdmUsIGlzRGF0ZSwgaXNGdW5jdGlvbiwgaXNHbG9iYWxseVdoaXRlbGlzdGVkLCBpc0hUTUxUYWcsIGlzSW50ZWdlcktleSwgaXNLbm93bkh0bWxBdHRyLCBpc0tub3duU3ZnQXR0ciwgaXNNYXAsIGlzTW9kZWxMaXN0ZW5lciwgaXNOb1VuaXROdW1lcmljU3R5bGVQcm9wLCBpc09iamVjdCwgaXNPbiwgaXNQbGFpbk9iamVjdCwgaXNQcm9taXNlLCBpc1Jlc2VydmVkUHJvcCwgaXNTU1JTYWZlQXR0ck5hbWUsIGlzU1ZHVGFnLCBpc1NldCwgaXNTcGVjaWFsQm9vbGVhbkF0dHIsIGlzU3RyaW5nLCBpc1N5bWJvbCwgaXNWb2lkVGFnLCBsb29zZUVxdWFsLCBsb29zZUluZGV4T2YsIG1ha2VNYXAsIG5vcm1hbGl6ZUNsYXNzLCBub3JtYWxpemVQcm9wcywgbm9ybWFsaXplU3R5bGUsIG9iamVjdFRvU3RyaW5nLCBwYXJzZVN0cmluZ1N0eWxlLCBwcm9wc1RvQXR0ck1hcCwgcmVtb3ZlLCBzbG90RmxhZ3NUZXh0LCBzdHJpbmdpZnlTdHlsZSwgdG9EaXNwbGF5U3RyaW5nLCB0b0hhbmRsZXJLZXksIHRvTnVtYmVyLCB0b1Jhd1R5cGUsIHRvVHlwZVN0cmluZyB9O1xuIiwiaW1wb3J0IHsgdG9SZWZzLCBnZXRDdXJyZW50SW5zdGFuY2UsIHJlZiwgY29tcHV0ZWQsIHdhdGNoLCBuZXh0VGljaywgb25Nb3VudGVkLCBvcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jaywgbm9ybWFsaXplQ2xhc3MsIGNyZWF0ZUNvbW1lbnRWTm9kZSwgbWVyZ2VQcm9wcywgd2l0aE1vZGlmaWVycywgRnJhZ21lbnQsIHJlbmRlckxpc3QsIHJlbmRlclNsb3QsIGNyZWF0ZVRleHRWTm9kZSwgdG9EaXNwbGF5U3RyaW5nLCBjcmVhdGVFbGVtZW50Vk5vZGUgfSBmcm9tICd2dWUnO1xuXG5mdW5jdGlvbiBpc051bGxpc2ggKHZhbCkge1xuICByZXR1cm4gW251bGwsIHVuZGVmaW5lZF0uaW5kZXhPZih2YWwpICE9PSAtMVxufVxuXG5mdW5jdGlvbiB1c2VEYXRhIChwcm9wcywgY29udGV4dCwgZGVwKVxue1xuICBjb25zdCB7IG9iamVjdCwgdmFsdWVQcm9wLCBtb2RlIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIGNvbnN0ICR0aGlzID0gZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpdiA9IGRlcC5pdjtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IHVwZGF0ZSA9ICh2YWwpID0+IHtcbiAgICAvLyBTZXR0aW5nIG9iamVjdChzKSBhcyBpbnRlcm5hbCB2YWx1ZVxuICAgIGl2LnZhbHVlID0gbWFrZUludGVybmFsKHZhbCk7XG5cbiAgICAvLyBTZXR0aW5nIG9iamVjdChzKSBvciBwbGFpbiB2YWx1ZSBhcyBleHRlcm5hbCBcbiAgICAvLyB2YWx1ZSBiYXNlZCBvbiBgb3B0aW9uYCBzZXR0aW5nXG4gICAgY29uc3QgZXh0ZXJuYWxWYWwgPSBtYWtlRXh0ZXJuYWwodmFsKTtcblxuICAgIGNvbnRleHQuZW1pdCgnY2hhbmdlJywgZXh0ZXJuYWxWYWwsICR0aGlzKTtcbiAgICBjb250ZXh0LmVtaXQoJ2lucHV0JywgZXh0ZXJuYWxWYWwpO1xuICAgIGNvbnRleHQuZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBleHRlcm5hbFZhbCk7XG4gIH07IFxuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBtYWtlRXh0ZXJuYWwgPSAodmFsKSA9PiB7XG4gICAgLy8gSWYgZXh0ZXJuYWwgdmFsdWUgc2hvdWxkIGJlIG9iamVjdFxuICAgIC8vIG5vIHRyYW5zZm9ybWF0aW9uIGlzIHJlcXVpcmVkXG4gICAgaWYgKG9iamVjdC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgIH1cblxuICAgIC8vIE5vIG5lZWQgdG8gdHJhbnNmb3JtIGlmIGVtcHR5IHZhbHVlXG4gICAgaWYgKGlzTnVsbGlzaCh2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuXG4gICAgLy8gSWYgZXh0ZXJuYWwgc2hvdWxkIGJlIHBsYWluIHRyYW5zZm9ybVxuICAgIC8vIHZhbHVlIG9iamVjdCB0byBwbGFpbiB2YWx1ZXNcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsKSA/IHZhbFt2YWx1ZVByb3AudmFsdWVdIDogdmFsLm1hcCh2ID0+IHZbdmFsdWVQcm9wLnZhbHVlXSlcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgbWFrZUludGVybmFsID0gKHZhbCkgPT4ge1xuICAgIGlmIChpc051bGxpc2godmFsKSkge1xuICAgICAgcmV0dXJuIG1vZGUudmFsdWUgPT09ICdzaW5nbGUnID8ge30gOiBbXVxuICAgIH1cblxuICAgIHJldHVybiB2YWxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHVwZGF0ZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VWYWx1ZSAocHJvcHMsIGNvbnRleHQpXG57XG4gIGNvbnN0IHsgdmFsdWUsIG1vZGVsVmFsdWUsIG1vZGUsIHZhbHVlUHJvcCB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIC8vIGludGVybmFsVmFsdWVcbiAgY29uc3QgaXYgPSByZWYobW9kZS52YWx1ZSAhPT0gJ3NpbmdsZScgPyBbXSA6IHt9KTtcblxuICAvLyA9PT09PT09PT09PT09PSBDT01QVVRFRCA9PT09PT09PT09PT09PVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIC8vIGV4dGVybmFsVmFsdWVcbiAgY29uc3QgZXYgPSBtb2RlbFZhbHVlICYmIG1vZGVsVmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCA/IG1vZGVsVmFsdWUgOiB2YWx1ZTtcblxuICBjb25zdCBwbGFpblZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBtb2RlLnZhbHVlID09PSAnc2luZ2xlJyA/IGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0gOiBpdi52YWx1ZS5tYXAodj0+dlt2YWx1ZVByb3AudmFsdWVdKVxuICB9KTtcblxuICBjb25zdCB0ZXh0VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIG1vZGUudmFsdWUgIT09ICdzaW5nbGUnID8gaXYudmFsdWUubWFwKHY9PnZbdmFsdWVQcm9wLnZhbHVlXSkuam9pbignLCcpIDogaXYudmFsdWVbdmFsdWVQcm9wLnZhbHVlXVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGl2LFxuICAgIGludGVybmFsVmFsdWU6IGl2LFxuICAgIGV2LFxuICAgIGV4dGVybmFsVmFsdWU6IGV2LFxuICAgIHRleHRWYWx1ZSxcbiAgICBwbGFpblZhbHVlLFxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVNlYXJjaCAocHJvcHMsIGNvbnRleHQsIGRlcClcbnsgIGNvbnN0IHsgcmVnZXggfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgY29uc3QgJHRoaXMgPSBnZXRDdXJyZW50SW5zdGFuY2UoKS5wcm94eTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IGlzT3BlbiA9IGRlcC5pc09wZW47XG4gIGNvbnN0IG9wZW4gPSBkZXAub3BlbjtcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IHNlYXJjaCA9IHJlZihudWxsKTtcblxuICBjb25zdCBpbnB1dCA9IHJlZihudWxsKTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGNsZWFyU2VhcmNoID0gKCkgPT4ge1xuICAgIHNlYXJjaC52YWx1ZSA9ICcnO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0ID0gKGUpID0+IHtcbiAgICBzZWFyY2gudmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlwcmVzcyA9IChlKSA9PiB7XG4gICAgaWYgKHJlZ2V4ICYmIHJlZ2V4LnZhbHVlKSB7XG4gICAgICBsZXQgcmVnZXhwID0gcmVnZXgudmFsdWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVnZXhwID09PSAnc3RyaW5nJykge1xuICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZS5rZXkubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBhc3RlID0gKGUpID0+IHtcbiAgICBpZiAocmVnZXggJiYgcmVnZXgudmFsdWUpIHtcbiAgICAgIGxldCBjbGlwYm9hcmREYXRhID0gZS5jbGlwYm9hcmREYXRhIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICAgICAgbGV0IHBhc3RlZERhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKTtcblxuICAgICAgbGV0IHJlZ2V4cCA9IHJlZ2V4LnZhbHVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZ2V4cCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIXBhc3RlZERhdGEuc3BsaXQoJycpLmV2ZXJ5KGMgPT4gISFjLm1hdGNoKHJlZ2V4cCkpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250ZXh0LmVtaXQoJ3Bhc3RlJywgZSwgJHRoaXMpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09IFdBVENIRVJTID09PT09PT09PT09PT09XG5cbiAgd2F0Y2goc2VhcmNoLCAodmFsKSA9PiB7XG4gICAgaWYgKCFpc09wZW4udmFsdWUgJiYgdmFsKSB7XG4gICAgICBvcGVuKCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5lbWl0KCdzZWFyY2gtY2hhbmdlJywgdmFsLCAkdGhpcyk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc2VhcmNoLFxuICAgIGlucHV0LFxuICAgIGNsZWFyU2VhcmNoLFxuICAgIGhhbmRsZVNlYXJjaElucHV0LFxuICAgIGhhbmRsZUtleXByZXNzLFxuICAgIGhhbmRsZVBhc3RlLFxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVBvaW50ZXIkMSAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBncm91cFNlbGVjdCwgbW9kZSwgZ3JvdXBzLCBkaXNhYmxlZFByb3AgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICBjb25zdCBwb2ludGVyID0gcmVmKG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgY29uc3Qgc2V0UG9pbnRlciA9IChvcHRpb24pID0+IHtcbiAgICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQgfHwgKG9wdGlvbiAhPT0gbnVsbCAmJiBvcHRpb25bZGlzYWJsZWRQcm9wLnZhbHVlXSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChncm91cHMudmFsdWUgJiYgb3B0aW9uICYmIG9wdGlvbi5ncm91cCAmJiAobW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScgfHwgIWdyb3VwU2VsZWN0LnZhbHVlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcG9pbnRlci52YWx1ZSA9IG9wdGlvbjtcbiAgfTtcblxuICBjb25zdCBjbGVhclBvaW50ZXIgPSAoKSA9PiB7XG4gICAgc2V0UG9pbnRlcihudWxsKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50ZXIsXG4gICAgc2V0UG9pbnRlcixcbiAgICBjbGVhclBvaW50ZXIsXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplIChzdHIsIHN0cmljdCA9IHRydWUpIHtcbiAgcmV0dXJuIHN0cmljdFxuICAgID8gU3RyaW5nKHN0cikudG9Mb3dlckNhc2UoKS50cmltKClcbiAgICA6IFN0cmluZyhzdHIpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvXFxwe0RpYWNyaXRpY30vZ3UsICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAodmFyaWFibGUpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YXJpYWJsZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGFycmF5c0VxdWFsIChhcnJheTEsIGFycmF5Mikge1xuICBjb25zdCBhcnJheTJTb3J0ZWQgPSBhcnJheTIuc2xpY2UoKS5zb3J0KCk7XG5cbiAgcmV0dXJuIGFycmF5MS5sZW5ndGggPT09IGFycmF5Mi5sZW5ndGggJiYgYXJyYXkxLnNsaWNlKCkuc29ydCgpLmV2ZXJ5KGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSBhcnJheTJTb3J0ZWRbaW5kZXhdO1xuICB9KVxufVxuXG5mdW5jdGlvbiB1c2VPcHRpb25zIChwcm9wcywgY29udGV4dCwgZGVwKVxue1xuICBjb25zdCB7IFxuICAgIG9wdGlvbnMsIG1vZGUsIHRyYWNrQnk6IHRyYWNrQnlfLCBsaW1pdCwgaGlkZVNlbGVjdGVkLCBjcmVhdGVUYWcsIGNyZWF0ZU9wdGlvbjogY3JlYXRlT3B0aW9uXywgbGFiZWwsXG4gICAgYXBwZW5kTmV3VGFnLCBhcHBlbmROZXdPcHRpb246IGFwcGVuZE5ld09wdGlvbl8sIG11bHRpcGxlTGFiZWwsIG9iamVjdCwgbG9hZGluZywgZGVsYXksIHJlc29sdmVPbkxvYWQsXG4gICAgbWluQ2hhcnMsIGZpbHRlclJlc3VsdHMsIGNsZWFyT25TZWFyY2gsIGNsZWFyT25TZWxlY3QsIHZhbHVlUHJvcCxcbiAgICBjYW5EZXNlbGVjdCwgbWF4LCBzdHJpY3QsIGNsb3NlT25TZWxlY3QsIGdyb3VwczogZ3JvdXBwZWQsIHJldmVyc2UsIGluZmluaXRlLFxuICAgIGdyb3VwT3B0aW9ucywgZ3JvdXBIaWRlRW1wdHksIGdyb3VwU2VsZWN0LCBvbkNyZWF0ZSwgZGlzYWJsZWRQcm9wLCBzZWFyY2hTdGFydCxcbiAgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgY29uc3QgJHRoaXMgPSBnZXRDdXJyZW50SW5zdGFuY2UoKS5wcm94eTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IGl2ID0gZGVwLml2O1xuICBjb25zdCBldiA9IGRlcC5ldjtcbiAgY29uc3Qgc2VhcmNoID0gZGVwLnNlYXJjaDtcbiAgY29uc3QgY2xlYXJTZWFyY2ggPSBkZXAuY2xlYXJTZWFyY2g7XG4gIGNvbnN0IHVwZGF0ZSA9IGRlcC51cGRhdGU7XG4gIGNvbnN0IHBvaW50ZXIgPSBkZXAucG9pbnRlcjtcbiAgY29uc3QgY2xlYXJQb2ludGVyID0gZGVwLmNsZWFyUG9pbnRlcjtcbiAgY29uc3QgZm9jdXMgPSBkZXAuZm9jdXM7XG4gIGNvbnN0IGRlYWN0aXZhdGUgPSBkZXAuZGVhY3RpdmF0ZTtcbiAgY29uc3QgY2xvc2UgPSBkZXAuY2xvc2U7XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBEQVRBID09PT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgLy8gYXBwZW5kZWRPcHRpb25zXG4gIGNvbnN0IGFwID0gcmVmKFtdKTtcblxuICAvLyBubyBleHBvcnRcbiAgLy8gcmVzb2x2ZWRPcHRpb25zXG4gIGNvbnN0IHJvID0gcmVmKFtdKTtcblxuICBjb25zdCByZXNvbHZpbmcgPSByZWYoZmFsc2UpO1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBzZWFyY2hXYXRjaGVyID0gcmVmKG51bGwpO1xuXG4gIGNvbnN0IG9mZnNldCA9IHJlZihpbmZpbml0ZS52YWx1ZSAmJiBsaW1pdC52YWx1ZSA9PT0gLTEgPyAxMCA6IGxpbWl0LnZhbHVlKTtcblxuICAvLyA9PT09PT09PT09PT09PSBDT01QVVRFRCA9PT09PT09PT09PT09PVxuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBjcmVhdGVPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVRhZy52YWx1ZSB8fCBjcmVhdGVPcHRpb25fLnZhbHVlIHx8IGZhbHNlXG4gIH0pO1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBhcHBlbmROZXdPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKGFwcGVuZE5ld1RhZy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXBwZW5kTmV3VGFnLnZhbHVlXG4gICAgfSBlbHNlIGlmIChhcHBlbmROZXdPcHRpb25fLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhcHBlbmROZXdPcHRpb25fLnZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfSk7XG5cbiAgLy8gbm8gZXhwb3J0XG4gIC8vIGV4dGVuZGVkT3B0aW9uc1xuICBjb25zdCBlbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoZ3JvdXBwZWQudmFsdWUpIHtcbiAgICAgIGxldCBncm91cHMgPSByby52YWx1ZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBbXTtcblxuICAgICAgbGV0IGVvID0gW107XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBvcHRpb25zVG9BcnJheShncm91cFtncm91cE9wdGlvbnMudmFsdWVdKS5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgICBlby5wdXNoKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbiwgZ3JvdXBbZGlzYWJsZWRQcm9wLnZhbHVlXSA/IHsgW2Rpc2FibGVkUHJvcC52YWx1ZV06IHRydWUgfSA6IHt9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBlb1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW8gPSBvcHRpb25zVG9BcnJheShyby52YWx1ZSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBbXSk7XG5cbiAgICAgIGlmIChhcC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgZW8gPSBlby5jb25jYXQoYXAudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW9cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGZnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghZ3JvdXBwZWQudmFsdWUpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJHcm91cHMoKHJvLnZhbHVlIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFtdKS5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBvcHRpb25zVG9BcnJheShncm91cFtncm91cE9wdGlvbnMudmFsdWVdKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGdyb3VwOiB0cnVlLFxuICAgICAgICBbZ3JvdXBPcHRpb25zLnZhbHVlXTogZmlsdGVyT3B0aW9ucyhhcnJheU9wdGlvbnMsIGZhbHNlKS5tYXAobyA9PiBPYmplY3QuYXNzaWduKHt9LCBvLCBncm91cFtkaXNhYmxlZFByb3AudmFsdWVdID8geyBbZGlzYWJsZWRQcm9wLnZhbHVlXTogdHJ1ZSB9IDoge30pKSxcbiAgICAgICAgX19WSVNJQkxFX186IGZpbHRlck9wdGlvbnMoYXJyYXlPcHRpb25zKS5tYXAobyA9PiBPYmplY3QuYXNzaWduKHt9LCBvLCBncm91cFtkaXNhYmxlZFByb3AudmFsdWVdID8geyBbZGlzYWJsZWRQcm9wLnZhbHVlXTogdHJ1ZSB9IDoge30pKSxcbiAgICAgIH1cbiAgICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiBfX1ZJU0lCTEVfXyBhbmQge2dyb3VwT3B0aW9uc306IHZpc2libGUgZG9lcyBub3QgY29udGFpbiBzZWxlY3RlZCBvcHRpb25zIHdoZW4gaGlkZVNlbGVjdGVkPXRydWVcbiAgICB9KSlcbiAgfSk7XG5cbiAgLy8gcHJlRmlsdGVyZWRPcHRpb25zXG4gIGNvbnN0IHBmbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IGVvLnZhbHVlO1xuXG4gICAgaWYgKHJldmVyc2UudmFsdWUpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlZE9wdGlvbi52YWx1ZS5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbnMgPSBjcmVhdGVkT3B0aW9uLnZhbHVlLmNvbmNhdChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyT3B0aW9ucyhvcHRpb25zKVxuICB9KTtcblxuICAvLyBmaWx0ZXJlZE9wdGlvbnNcbiAgY29uc3QgZm8gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IG9wdGlvbnMgPSBwZm8udmFsdWU7XG5cbiAgICBpZiAob2Zmc2V0LnZhbHVlID4gMCkge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuc2xpY2UoMCwgb2Zmc2V0LnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9KTtcblxuICBjb25zdCBoYXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKG1vZGUudmFsdWUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHJldHVybiAhaXNOdWxsaXNoKGl2LnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pXG5cbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICByZXR1cm4gIWlzTnVsbGlzaChpdi52YWx1ZSkgJiYgaXYudmFsdWUubGVuZ3RoID4gMFxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbXVsdGlwbGVMYWJlbFRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIG11bHRpcGxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBtdWx0aXBsZUxhYmVsLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgID8gbXVsdGlwbGVMYWJlbC52YWx1ZShpdi52YWx1ZSwgJHRoaXMpXG4gICAgICA6IChpdi52YWx1ZSAmJiBpdi52YWx1ZS5sZW5ndGggPiAxID8gYCR7aXYudmFsdWUubGVuZ3RofSBvcHRpb25zIHNlbGVjdGVkYCA6IGAxIG9wdGlvbiBzZWxlY3RlZGApXG4gIH0pO1xuXG4gIGNvbnN0IG5vT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gIWVvLnZhbHVlLmxlbmd0aCAmJiAhcmVzb2x2aW5nLnZhbHVlICYmICFjcmVhdGVkT3B0aW9uLnZhbHVlLmxlbmd0aFxuICB9KTtcblxuXG4gIGNvbnN0IG5vUmVzdWx0cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZW8udmFsdWUubGVuZ3RoID4gMCAmJiBmby52YWx1ZS5sZW5ndGggPT0gMCAmJiAoKHNlYXJjaC52YWx1ZSAmJiBncm91cHBlZC52YWx1ZSkgfHwgIWdyb3VwcGVkLnZhbHVlKVxuICB9KTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgY3JlYXRlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoY3JlYXRlT3B0aW9uLnZhbHVlID09PSBmYWxzZSB8fCAhc2VhcmNoLnZhbHVlKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0T3B0aW9uQnlUcmFja0J5KHNlYXJjaC52YWx1ZSkgIT09IC0xID8gW10gOiBbe1xuICAgICAgW3ZhbHVlUHJvcC52YWx1ZV06IHNlYXJjaC52YWx1ZSxcbiAgICAgIFtsYWJlbC52YWx1ZV06IHNlYXJjaC52YWx1ZSxcbiAgICAgIFt0cmFja0J5LnZhbHVlXTogc2VhcmNoLnZhbHVlLFxuICAgICAgX19DUkVBVEVfXzogdHJ1ZSxcbiAgICB9XVxuICB9KTtcblxuICBjb25zdCB0cmFja0J5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0cmFja0J5Xy52YWx1ZSB8fCBsYWJlbC52YWx1ZVxuICB9KTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgbnVsbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAobW9kZS52YWx1ZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgY2FzZSAndGFncyc6XG4gICAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYnVzeSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gbG9hZGluZy52YWx1ZSB8fCByZXNvbHZpbmcudmFsdWVcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQHBhcmFtIHthcnJheXxvYmplY3R8c3RyaW5nfG51bWJlcn0gb3B0aW9uIFxuICAgKi9cbiAgY29uc3Qgc2VsZWN0ID0gKG9wdGlvbikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9uID0gZ2V0T3B0aW9uKG9wdGlvbik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICB1cGRhdGUob3B0aW9uKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgY2FzZSAndGFncyc6XG4gICAgICAgIHVwZGF0ZSgoaXYudmFsdWUpLmNvbmNhdChvcHRpb24pKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb250ZXh0LmVtaXQoJ3NlbGVjdCcsIGZpbmFsVmFsdWUob3B0aW9uKSwgb3B0aW9uLCAkdGhpcyk7XG4gIH07XG5cbiAgY29uc3QgZGVzZWxlY3QgPSAob3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gIT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb24gPSBnZXRPcHRpb24ob3B0aW9uKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG1vZGUudmFsdWUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICB1cGRhdGUoQXJyYXkuaXNBcnJheShvcHRpb24pXG4gICAgICAgICAgPyBpdi52YWx1ZS5maWx0ZXIodiA9PiBvcHRpb24ubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKHZbdmFsdWVQcm9wLnZhbHVlXSkgPT09IC0xKVxuICAgICAgICAgIDogaXYudmFsdWUuZmlsdGVyKHYgPT4gdlt2YWx1ZVByb3AudmFsdWVdICE9IG9wdGlvblt2YWx1ZVByb3AudmFsdWVdKSk7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29udGV4dC5lbWl0KCdkZXNlbGVjdCcsIGZpbmFsVmFsdWUob3B0aW9uKSwgb3B0aW9uLCAkdGhpcyk7XG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGZpbmFsVmFsdWUgPSAob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG9iamVjdC52YWx1ZSA/IG9wdGlvbiA6IG9wdGlvblt2YWx1ZVByb3AudmFsdWVdXG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKG9wdGlvbikgPT4ge1xuICAgIGRlc2VsZWN0KG9wdGlvbik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVGFnUmVtb3ZlID0gKG9wdGlvbiwgZSkgPT4ge1xuICAgIGlmIChlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmVtb3ZlKG9wdGlvbik7XG4gIH07XG5cbiAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgY29udGV4dC5lbWl0KCdjbGVhcicsICR0aGlzKTtcbiAgICB1cGRhdGUobnVsbFZhbHVlLnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gKG9wdGlvbikgPT4ge1xuICAgIGlmIChvcHRpb24uZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG1vZGUudmFsdWUgPT09ICdzaW5nbGUnID8gZmFsc2UgOiBhcmVBbGxTZWxlY3RlZChvcHRpb25bZ3JvdXBPcHRpb25zLnZhbHVlXSkgJiYgb3B0aW9uW2dyb3VwT3B0aW9ucy52YWx1ZV0ubGVuZ3RoXG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICByZXR1cm4gIWlzTnVsbGlzaChpdi52YWx1ZSkgJiYgaXYudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSA9PSBvcHRpb25bdmFsdWVQcm9wLnZhbHVlXVxuXG4gICAgICBjYXNlICd0YWdzJzpcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgcmV0dXJuICFpc051bGxpc2goaXYudmFsdWUpICYmIGl2LnZhbHVlLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihvcHRpb25bdmFsdWVQcm9wLnZhbHVlXSkgIT09IC0xXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbltkaXNhYmxlZFByb3AudmFsdWVdID09PSB0cnVlXG4gIH07XG5cbiAgY29uc3QgaXNNYXggPSAoKSA9PiB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkIHx8IG1heC52YWx1ZSA9PT0gLTEgfHwgKCFoYXNTZWxlY3RlZC52YWx1ZSAmJiBtYXgudmFsdWUgPiAwKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIFxuICAgIHJldHVybiBpdi52YWx1ZS5sZW5ndGggPj0gbWF4LnZhbHVlXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3B0aW9uQ2xpY2sgPSAob3B0aW9uKSA9PiB7XG4gICAgaWYgKGlzRGlzYWJsZWQob3B0aW9uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG9uQ3JlYXRlICYmIG9uQ3JlYXRlLnZhbHVlICYmICFpc1NlbGVjdGVkKG9wdGlvbikgJiYgb3B0aW9uLl9fQ1JFQVRFX18pIHtcbiAgICAgIG9wdGlvbiA9IHsgLi4ub3B0aW9uIH07XG4gICAgICBkZWxldGUgb3B0aW9uLl9fQ1JFQVRFX187XG5cbiAgICAgIG9wdGlvbiA9IG9uQ3JlYXRlLnZhbHVlKG9wdGlvbiwgJHRoaXMpO1xuICAgICAgXG4gICAgICBpZiAob3B0aW9uIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXNvbHZpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICBvcHRpb24udGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgaGFuZGxlT3B0aW9uU2VsZWN0KHJlc3VsdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVyblxuICAgICAgfSBcbiAgICB9XG5cbiAgICBoYW5kbGVPcHRpb25TZWxlY3Qob3B0aW9uKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25TZWxlY3QgPSAob3B0aW9uKSA9PiB7XG4gICAgaWYgKG9wdGlvbi5fX0NSRUFURV9fKSB7XG4gICAgICBvcHRpb24gPSB7IC4uLm9wdGlvbiB9O1xuICAgICAgZGVsZXRlIG9wdGlvbi5fX0NSRUFURV9fO1xuICAgIH1cbiAgICBcbiAgICBzd2l0Y2ggKG1vZGUudmFsdWUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIGlmIChvcHRpb24gJiYgaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgaWYgKGNhbkRlc2VsZWN0LnZhbHVlKSB7XG4gICAgICAgICAgICBkZXNlbGVjdChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBoYW5kbGVPcHRpb25BcHBlbmQob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChjbGVhck9uU2VsZWN0LnZhbHVlKSB7XG4gICAgICAgICAgY2xlYXJTZWFyY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9zZU9uU2VsZWN0LnZhbHVlKSB7XG4gICAgICAgICAgY2xlYXJQb2ludGVyKCk7XG4gICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBzZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICAgIGlmIChvcHRpb24gJiYgaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgZGVzZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlT3B0aW9uQXBwZW5kKG9wdGlvbik7XG4gICAgICAgICAgc2VsZWN0KG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xlYXJPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyU2VhcmNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGlkZVNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICAgICAgY2xlYXJQb2ludGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAndGFncyc6XG4gICAgICAgIGlmIChvcHRpb24gJiYgaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgZGVzZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlT3B0aW9uQXBwZW5kKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xlYXJPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsZWFyU2VhcmNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgc2VsZWN0KG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGlkZVNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICAgICAgY2xlYXJQb2ludGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VPblNlbGVjdC52YWx1ZSkge1xuICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoIWNsb3NlT25TZWxlY3QudmFsdWUpIHtcbiAgICAgIGZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSAoZ3JvdXApID0+IHtcbiAgICBpZiAoaXNEaXNhYmxlZChncm91cCkgfHwgbW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScgfHwgIWdyb3VwU2VsZWN0LnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzd2l0Y2ggKG1vZGUudmFsdWUpIHtcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgIGNhc2UgJ3RhZ3MnOlxuICAgICAgICBpZiAoYXJlQWxsRW5hYmxlZFNlbGVjdGVkKGdyb3VwW2dyb3VwT3B0aW9ucy52YWx1ZV0pKSB7XG4gICAgICAgICAgZGVzZWxlY3QoZ3JvdXBbZ3JvdXBPcHRpb25zLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0KGdyb3VwW2dyb3VwT3B0aW9ucy52YWx1ZV1cbiAgICAgICAgICAgIC5maWx0ZXIobyA9PiBpdi52YWx1ZS5tYXAodiA9PiB2W3ZhbHVlUHJvcC52YWx1ZV0pLmluZGV4T2Yob1t2YWx1ZVByb3AudmFsdWVdKSA9PT0gLTEpXG4gICAgICAgICAgICAuZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKG8sIGspID0+IGl2LnZhbHVlLmxlbmd0aCArIDEgKyBrIDw9IG1heC52YWx1ZSB8fCBtYXgudmFsdWUgPT09IC0xKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VPblNlbGVjdC52YWx1ZSkge1xuICAgICAgZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25BcHBlbmQgPSAob3B0aW9uKSA9PiB7XG4gICAgaWYgKGdldE9wdGlvbihvcHRpb25bdmFsdWVQcm9wLnZhbHVlXSkgPT09IHVuZGVmaW5lZCAmJiBjcmVhdGVPcHRpb24udmFsdWUpIHtcbiAgICAgIGNvbnRleHQuZW1pdCgndGFnJywgb3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV0sICR0aGlzKTtcbiAgICAgIGNvbnRleHQuZW1pdCgnb3B0aW9uJywgb3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV0sICR0aGlzKTtcblxuICAgICAgaWYgKGFwcGVuZE5ld09wdGlvbi52YWx1ZSkge1xuICAgICAgICBhcHBlbmRPcHRpb24ob3B0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY2xlYXJTZWFyY2goKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0QWxsID0gKCkgPT4ge1xuICAgIGlmIChtb2RlLnZhbHVlID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2VsZWN0KGZvLnZhbHVlKTtcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgYXJlQWxsRW5hYmxlZFNlbGVjdGVkID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKG8gPT4gIWlzU2VsZWN0ZWQobykgJiYgIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSkgPT09IHVuZGVmaW5lZFxuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBhcmVBbGxTZWxlY3RlZCA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChvID0+ICFpc1NlbGVjdGVkKG8pKSA9PT0gdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3QgZ2V0T3B0aW9uID0gKHZhbCkgPT4ge1xuICAgIHJldHVybiBlby52YWx1ZVtlby52YWx1ZS5tYXAobyA9PiBTdHJpbmcob1t2YWx1ZVByb3AudmFsdWVdKSkuaW5kZXhPZihTdHJpbmcodmFsKSldXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IGdldE9wdGlvbkJ5VHJhY2tCeSA9ICh2YWwsIG5vcm0gPSB0cnVlKSA9PiB7XG4gICAgcmV0dXJuIGVvLnZhbHVlLm1hcChvID0+IHBhcnNlSW50KG9bdHJhY2tCeS52YWx1ZV0pID09IG9bdHJhY2tCeS52YWx1ZV0gPyBwYXJzZUludChvW3RyYWNrQnkudmFsdWVdKSA6IG9bdHJhY2tCeS52YWx1ZV0pLmluZGV4T2YoXG4gICAgICBwYXJzZUludCh2YWwpID09IHZhbCA/IHBhcnNlSW50KHZhbCkgOiB2YWxcbiAgICApXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IHNob3VsZEhpZGVPcHRpb24gPSAob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIFsndGFncycsICdtdWx0aXBsZSddLmluZGV4T2YobW9kZS52YWx1ZSkgIT09IC0xICYmIGhpZGVTZWxlY3RlZC52YWx1ZSAmJiBpc1NlbGVjdGVkKG9wdGlvbilcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgYXBwZW5kT3B0aW9uID0gKG9wdGlvbikgPT4ge1xuICAgIGFwLnZhbHVlLnB1c2gob3B0aW9uKTtcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgZmlsdGVyR3JvdXBzID0gKGdyb3VwcykgPT4ge1xuICAgIC8vIElmIHRoZSBzZWFyY2ggaGFzIHZhbHVlIHdlIG5lZWQgdG8gZmlsdGVyIGFtb25nIFxuICAgIC8vIGhlIG9uZXMgdGhhdCBhcmUgdmlzaWJsZSB0byB0aGUgdXNlciB0byBhdm9pZFxuICAgIC8vIGRpc3BsYXlpbmcgZ3JvdXBzIHdoaWNoIHRlY2huaWNhbGx5IGhhdmUgb3B0aW9uc1xuICAgIC8vIGJhc2VkIG9uIHNlYXJjaCBidXQgdGhhdCBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZC5cbiAgICByZXR1cm4gZ3JvdXBIaWRlRW1wdHkudmFsdWVcbiAgICAgID8gZ3JvdXBzLmZpbHRlcihnID0+IHNlYXJjaC52YWx1ZVxuICAgICAgICAgID8gZy5fX1ZJU0lCTEVfXy5sZW5ndGhcbiAgICAgICAgICA6IGdbZ3JvdXBPcHRpb25zLnZhbHVlXS5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgOiBncm91cHMuZmlsdGVyKGcgPT4gc2VhcmNoLnZhbHVlID8gZy5fX1ZJU0lCTEVfXy5sZW5ndGggOiB0cnVlKVxuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnMsIGV4Y2x1ZGVIaWRlU2VsZWN0ZWQgPSB0cnVlKSA9PiB7XG4gICAgbGV0IGZvID0gb3B0aW9ucztcbiAgICBcbiAgICBpZiAoc2VhcmNoLnZhbHVlICYmIGZpbHRlclJlc3VsdHMudmFsdWUpIHtcbiAgICAgIGZvID0gZm8uZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHNlYXJjaFN0YXJ0LnZhbHVlXG4gICAgICAgICAgPyBub3JtYWxpemUob3B0aW9uW3RyYWNrQnkudmFsdWVdLCBzdHJpY3QudmFsdWUpLnN0YXJ0c1dpdGgobm9ybWFsaXplKHNlYXJjaC52YWx1ZSwgc3RyaWN0LnZhbHVlKSlcbiAgICAgICAgICA6IG5vcm1hbGl6ZShvcHRpb25bdHJhY2tCeS52YWx1ZV0sIHN0cmljdC52YWx1ZSkuaW5kZXhPZihub3JtYWxpemUoc2VhcmNoLnZhbHVlLCBzdHJpY3QudmFsdWUpKSAhPT0gLTFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWRlU2VsZWN0ZWQudmFsdWUgJiYgZXhjbHVkZUhpZGVTZWxlY3RlZCkge1xuICAgICAgZm8gPSBmby5maWx0ZXIoKG9wdGlvbikgPT4gIXNob3VsZEhpZGVPcHRpb24ob3B0aW9uKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvXG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IG9wdGlvbnNUb0FycmF5ID0gKG9wdGlvbnMpID0+IHtcbiAgICBsZXQgdW8gPSBvcHRpb25zO1xuICAgIFxuICAgIC8vIFRyYW5zZm9ybWluZyBhbiBvYmplY3QgdG8gYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgIGlmIChpc09iamVjdCh1bykpIHtcbiAgICAgIHVvID0gT2JqZWN0LmtleXModW8pLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGxldCB2YWwgPSB1b1trZXldO1xuXG4gICAgICAgIHJldHVybiB7IFt2YWx1ZVByb3AudmFsdWVdOiBrZXksIFt0cmFja0J5LnZhbHVlXTogdmFsLCBbbGFiZWwudmFsdWVdOiB2YWx9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm1pbmcgYW4gcGxhaW4gYXJyYXlzIHRvIGFuIGFycmF5IG9mIG9iamVjdHNcbiAgICB1byA9IHVvLm1hcCgodmFsKSA9PiB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyB2YWwgOiB7IFt2YWx1ZVByb3AudmFsdWVdOiB2YWwsIFt0cmFja0J5LnZhbHVlXTogdmFsLCBbbGFiZWwudmFsdWVdOiB2YWx9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW9cbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgaW5pdEludGVybmFsVmFsdWUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc051bGxpc2goZXYudmFsdWUpKSB7XG4gICAgICBpdi52YWx1ZSA9IG1ha2VJbnRlcm5hbChldi52YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlc29sdmVPcHRpb25zID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgcmVzb2x2aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvcHRpb25zLnZhbHVlKHNlYXJjaC52YWx1ZSwgJHRoaXMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJvLnZhbHVlID0gcmVzcG9uc2UgfHwgW107XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuXG4gICAgICAgIHJvLnZhbHVlID0gW107XG5cbiAgICAgICAgcmVzb2x2aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgcmVmcmVzaExhYmVscyA9ICgpID0+IHtcbiAgICBpZiAoIWhhc1NlbGVjdGVkLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAobW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGxldCBvcHRpb24gPSBnZXRPcHRpb24oaXYudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSk7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IG5ld0xhYmVsID0gb3B0aW9uW2xhYmVsLnZhbHVlXTtcblxuICAgICAgICBpdi52YWx1ZVtsYWJlbC52YWx1ZV0gPSBuZXdMYWJlbDtcblxuICAgICAgICBpZiAob2JqZWN0LnZhbHVlKSB7XG4gICAgICAgICAgZXYudmFsdWVbbGFiZWwudmFsdWVdID0gbmV3TGFiZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXYudmFsdWUuZm9yRWFjaCgodmFsLCBpKSA9PiB7XG4gICAgICAgIGxldCBvcHRpb24gPSBnZXRPcHRpb24oaXYudmFsdWVbaV1bdmFsdWVQcm9wLnZhbHVlXSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IG5ld0xhYmVsID0gb3B0aW9uW2xhYmVsLnZhbHVlXTtcblxuICAgICAgICAgIGl2LnZhbHVlW2ldW2xhYmVsLnZhbHVlXSA9IG5ld0xhYmVsO1xuXG4gICAgICAgICAgaWYgKG9iamVjdC52YWx1ZSkge1xuICAgICAgICAgICAgZXYudmFsdWVbaV1bbGFiZWwudmFsdWVdID0gbmV3TGFiZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVmcmVzaE9wdGlvbnMgPSAoY2FsbGJhY2spID0+IHtcbiAgICByZXNvbHZlT3B0aW9ucyhjYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IG1ha2VJbnRlcm5hbCA9ICh2YWwpID0+IHtcbiAgICBpZiAoaXNOdWxsaXNoKHZhbCkpIHtcbiAgICAgIHJldHVybiBtb2RlLnZhbHVlID09PSAnc2luZ2xlJyA/IHt9IDogW11cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0LnZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuXG4gICAgLy8gSWYgZXh0ZXJuYWwgc2hvdWxkIGJlIHBsYWluIHRyYW5zZm9ybVxuICAgIC8vIHZhbHVlIG9iamVjdCB0byBwbGFpbiB2YWx1ZXNcbiAgICByZXR1cm4gbW9kZS52YWx1ZSA9PT0gJ3NpbmdsZScgPyBnZXRPcHRpb24odmFsKSB8fCB7fSA6IHZhbC5maWx0ZXIodiA9PiAhISBnZXRPcHRpb24odikpLm1hcCh2ID0+IGdldE9wdGlvbih2KSlcbiAgfTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgaW5pdFNlYXJjaFdhdGNoZXIgPSAoKSA9PiB7XG4gICAgc2VhcmNoV2F0Y2hlci52YWx1ZSA9IHdhdGNoKHNlYXJjaCwgKHF1ZXJ5KSA9PiB7XG4gICAgICBpZiAocXVlcnkubGVuZ3RoIDwgbWluQ2hhcnMudmFsdWUgfHwgKCFxdWVyeSAmJiBtaW5DaGFycy52YWx1ZSAhPT0gMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgIGlmIChjbGVhck9uU2VhcmNoLnZhbHVlKSB7XG4gICAgICAgIHJvLnZhbHVlID0gW107XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9IHNlYXJjaC52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy52YWx1ZShzZWFyY2gudmFsdWUsICR0aGlzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChxdWVyeSA9PSBzZWFyY2gudmFsdWUgfHwgIXNlYXJjaC52YWx1ZSkge1xuICAgICAgICAgICAgcm8udmFsdWUgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHBvaW50ZXIudmFsdWUgPSBmby52YWx1ZS5maWx0ZXIobyA9PiBvW2Rpc2FibGVkUHJvcC52YWx1ZV0gIT09IHRydWUpWzBdIHx8IG51bGw7XG4gICAgICAgICAgICByZXNvbHZpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAoZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkudmFsdWUpO1xuXG4gICAgfSwgeyBmbHVzaDogJ3N5bmMnIH0pO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT0gSE9PS1MgPT09PT09PT09PT09PT09XG5cbiAgaWYgKG1vZGUudmFsdWUgIT09ICdzaW5nbGUnICYmICFpc051bGxpc2goZXYudmFsdWUpICYmICFBcnJheS5pc0FycmF5KGV2LnZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdi1tb2RlbCBtdXN0IGJlIGFuIGFycmF5IHdoZW4gdXNpbmcgXCIke21vZGUudmFsdWV9XCIgbW9kZWApXG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy52YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHJlc29sdmVPbkxvYWQudmFsdWUpIHtcbiAgICAgIHJlc29sdmVPcHRpb25zKGluaXRJbnRlcm5hbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG9iamVjdC52YWx1ZSA9PSB0cnVlKSB7XG4gICAgICBpbml0SW50ZXJuYWxWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICByby52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICBpbml0SW50ZXJuYWxWYWx1ZSgpO1xuICB9XG4gIFxuICAvLyA9PT09PT09PT09PT09PSBXQVRDSEVSUyA9PT09PT09PT09PT09PVxuXG4gIGlmIChkZWxheS52YWx1ZSA+IC0xKSB7XG4gICAgaW5pdFNlYXJjaFdhdGNoZXIoKTtcbiAgfVxuXG4gIHdhdGNoKGRlbGF5LCAodmFsdWUsIG9sZCkgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHNlYXJjaFdhdGNoZXIudmFsdWUpIHtcbiAgICAgIHNlYXJjaFdhdGNoZXIudmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgaW5pdFNlYXJjaFdhdGNoZXIoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHdhdGNoKGV2LCAobmV3VmFsdWUpID0+IHtcbiAgICBpZiAoaXNOdWxsaXNoKG5ld1ZhbHVlKSkge1xuICAgICAgaXYudmFsdWUgPSBtYWtlSW50ZXJuYWwobmV3VmFsdWUpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlLnZhbHVlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICBpZiAob2JqZWN0LnZhbHVlID8gbmV3VmFsdWVbdmFsdWVQcm9wLnZhbHVlXSAhPSBpdi52YWx1ZVt2YWx1ZVByb3AudmFsdWVdIDogbmV3VmFsdWUgIT0gaXYudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSkge1xuICAgICAgICAgIGl2LnZhbHVlID0gbWFrZUludGVybmFsKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICBjYXNlICd0YWdzJzpcbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChvYmplY3QudmFsdWUgPyBuZXdWYWx1ZS5tYXAobyA9PiBvW3ZhbHVlUHJvcC52YWx1ZV0pIDogbmV3VmFsdWUsIGl2LnZhbHVlLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkpKSB7XG4gICAgICAgICAgaXYudmFsdWUgPSBtYWtlSW50ZXJuYWwobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9LCB7IGRlZXA6IHRydWUgfSk7XG5cbiAgd2F0Y2gob3B0aW9ucywgKG4sIG8pID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3BzLm9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChyZXNvbHZlT25Mb2FkLnZhbHVlKSB7XG4gICAgICAgIHJlc29sdmVPcHRpb25zKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvLnZhbHVlID0gcHJvcHMub3B0aW9ucztcblxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhpdi52YWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgIGluaXRJbnRlcm5hbFZhbHVlKCk7XG4gICAgICB9XG5cbiAgICAgIHJlZnJlc2hMYWJlbHMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHdhdGNoKGxhYmVsLCByZWZyZXNoTGFiZWxzKTtcblxuICByZXR1cm4ge1xuICAgIHBmbyxcbiAgICBmbyxcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IGZvLFxuICAgIGhhc1NlbGVjdGVkLFxuICAgIG11bHRpcGxlTGFiZWxUZXh0LFxuICAgIGVvLFxuICAgIGV4dGVuZGVkT3B0aW9uczogZW8sXG4gICAgZmcsXG4gICAgZmlsdGVyZWRHcm91cHM6IGZnLFxuICAgIG5vT3B0aW9ucyxcbiAgICBub1Jlc3VsdHMsXG4gICAgcmVzb2x2aW5nLFxuICAgIGJ1c3ksXG4gICAgb2Zmc2V0LFxuICAgIHNlbGVjdCxcbiAgICBkZXNlbGVjdCxcbiAgICByZW1vdmUsXG4gICAgc2VsZWN0QWxsLFxuICAgIGNsZWFyLFxuICAgIGlzU2VsZWN0ZWQsXG4gICAgaXNEaXNhYmxlZCxcbiAgICBpc01heCxcbiAgICBnZXRPcHRpb24sXG4gICAgaGFuZGxlT3B0aW9uQ2xpY2ssXG4gICAgaGFuZGxlR3JvdXBDbGljayxcbiAgICBoYW5kbGVUYWdSZW1vdmUsXG4gICAgcmVmcmVzaE9wdGlvbnMsXG4gICAgcmVzb2x2ZU9wdGlvbnMsXG4gICAgcmVmcmVzaExhYmVscyxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VQb2ludGVyIChwcm9wcywgY29udGV4dCwgZGVwKVxue1xuICBjb25zdCB7XG4gICAgdmFsdWVQcm9wLCBzaG93T3B0aW9ucywgc2VhcmNoYWJsZSwgZ3JvdXBMYWJlbCxcbiAgICBncm91cHM6IGdyb3VwcGVkLCBtb2RlLCBncm91cFNlbGVjdCwgZGlzYWJsZWRQcm9wLFxuICB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IGZvID0gZGVwLmZvO1xuICBjb25zdCBmZyA9IGRlcC5mZztcbiAgY29uc3QgaGFuZGxlT3B0aW9uQ2xpY2sgPSBkZXAuaGFuZGxlT3B0aW9uQ2xpY2s7XG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSBkZXAuaGFuZGxlR3JvdXBDbGljaztcbiAgY29uc3Qgc2VhcmNoID0gZGVwLnNlYXJjaDtcbiAgY29uc3QgcG9pbnRlciA9IGRlcC5wb2ludGVyO1xuICBjb25zdCBzZXRQb2ludGVyID0gZGVwLnNldFBvaW50ZXI7XG4gIGNvbnN0IGNsZWFyUG9pbnRlciA9IGRlcC5jbGVhclBvaW50ZXI7XG4gIGNvbnN0IG11bHRpc2VsZWN0ID0gZGVwLm11bHRpc2VsZWN0O1xuICBjb25zdCBpc09wZW4gPSBkZXAuaXNPcGVuO1xuXG4gIC8vID09PT09PT09PT09PT09IENPTVBVVEVEID09PT09PT09PT09PT09XG5cbiAgLy8gbm8gZXhwb3J0XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGZvLnZhbHVlLmZpbHRlcihvID0+ICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pXG4gIH0pO1xuXG4gIGNvbnN0IGdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZmcudmFsdWUuZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSlcbiAgfSk7XG5cbiAgY29uc3QgY2FuUG9pbnRHcm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIG1vZGUudmFsdWUgIT09ICdzaW5nbGUnICYmIGdyb3VwU2VsZWN0LnZhbHVlXG4gIH0pO1xuXG4gIGNvbnN0IGlzUG9pbnRlckdyb3VwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBwb2ludGVyLnZhbHVlICYmIHBvaW50ZXIudmFsdWUuZ3JvdXBcbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudEdyb3VwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBnZXRQYXJlbnRHcm91cChwb2ludGVyLnZhbHVlKVxuICB9KTtcblxuICBjb25zdCBwcmV2R3JvdXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXAgPSBpc1BvaW50ZXJHcm91cC52YWx1ZSA/IHBvaW50ZXIudmFsdWUgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBnZXRQYXJlbnRHcm91cChwb2ludGVyLnZhbHVlKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBzLnZhbHVlLm1hcChnID0+IGdbZ3JvdXBMYWJlbC52YWx1ZV0pLmluZGV4T2YoZ3JvdXBbZ3JvdXBMYWJlbC52YWx1ZV0pO1xuICAgIGxldCBwcmV2R3JvdXAgPSBncm91cHMudmFsdWVbZ3JvdXBJbmRleCAtIDFdO1xuXG4gICAgaWYgKHByZXZHcm91cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcmV2R3JvdXAgPSBsYXN0R3JvdXAudmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZHcm91cFxuICB9KTtcbiAgXG4gIGNvbnN0IG5leHRHcm91cCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgbmV4dEluZGV4ID0gZ3JvdXBzLnZhbHVlLm1hcChnID0+IGcubGFiZWwpLmluZGV4T2YoaXNQb2ludGVyR3JvdXAudmFsdWVcbiAgICAgID8gcG9pbnRlci52YWx1ZVtncm91cExhYmVsLnZhbHVlXVxuICAgICAgOiBnZXRQYXJlbnRHcm91cChwb2ludGVyLnZhbHVlKVtncm91cExhYmVsLnZhbHVlXSkgKyAxO1xuXG4gICAgaWYgKGdyb3Vwcy52YWx1ZS5sZW5ndGggPD0gbmV4dEluZGV4KSB7XG4gICAgICBuZXh0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cHMudmFsdWVbbmV4dEluZGV4XVxuICB9KTtcblxuICBjb25zdCBsYXN0R3JvdXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5ncm91cHMudmFsdWVdLnNsaWNlKC0xKVswXVxuICB9KTtcbiAgXG4gIGNvbnN0IGN1cnJlbnRHcm91cEZpcnN0RW5hYmxlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gcG9pbnRlci52YWx1ZS5fX1ZJU0lCTEVfXy5maWx0ZXIobyA9PiAhb1tkaXNhYmxlZFByb3AudmFsdWVdKVswXVxuICB9KTtcblxuICBjb25zdCBjdXJyZW50R3JvdXBQcmV2RW5hYmxlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gY3VycmVudEdyb3VwLnZhbHVlLl9fVklTSUJMRV9fLmZpbHRlcihvID0+ICFvW2Rpc2FibGVkUHJvcC52YWx1ZV0pO1xuICAgIHJldHVybiBvcHRpb25zW29wdGlvbnMubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKHBvaW50ZXIudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSkgLSAxXVxuICB9KTtcbiAgXG4gIGNvbnN0IGN1cnJlbnRHcm91cE5leHRFbmFibGVkT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRQYXJlbnRHcm91cChwb2ludGVyLnZhbHVlKS5fX1ZJU0lCTEVfXy5maWx0ZXIobyA9PiAhb1tkaXNhYmxlZFByb3AudmFsdWVdKTtcbiAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25zLm1hcChvID0+IG9bdmFsdWVQcm9wLnZhbHVlXSkuaW5kZXhPZihwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pICsgMV1cbiAgfSk7XG5cbiAgY29uc3QgcHJldkdyb3VwTGFzdEVuYWJsZWRPcHRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5wcmV2R3JvdXAudmFsdWUuX19WSVNJQkxFX18uZmlsdGVyKG8gPT4gIW9bZGlzYWJsZWRQcm9wLnZhbHVlXSldLnNsaWNlKC0xKVswXVxuICB9KTtcblxuICBjb25zdCBsYXN0R3JvdXBMYXN0RW5hYmxlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gWy4uLmxhc3RHcm91cC52YWx1ZS5fX1ZJU0lCTEVfXy5maWx0ZXIobyA9PiAhb1tkaXNhYmxlZFByb3AudmFsdWVdKV0uc2xpY2UoLTEpWzBdXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgY29uc3QgaXNQb2ludGVkID0gKG9wdGlvbikgPT4ge1xuICAgIHJldHVybiAoISFwb2ludGVyLnZhbHVlICYmIChcbiAgICAgICghb3B0aW9uLmdyb3VwICYmwqBwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0gPT0gb3B0aW9uW3ZhbHVlUHJvcC52YWx1ZV0pIHx8XG4gICAgICAob3B0aW9uLmdyb3VwICE9PSB1bmRlZmluZWQgJibCoHBvaW50ZXIudmFsdWVbZ3JvdXBMYWJlbC52YWx1ZV0gPT0gb3B0aW9uW2dyb3VwTGFiZWwudmFsdWVdKVxuICAgICkpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IHNldFBvaW50ZXJGaXJzdCA9ICgpID0+IHtcbiAgICBzZXRQb2ludGVyKG9wdGlvbnMudmFsdWVbMF0gfHwgbnVsbCk7XG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0UG9pbnRlciA9ICgpID0+IHtcbiAgICBpZiAoIXBvaW50ZXIudmFsdWUgfHwgcG9pbnRlci52YWx1ZVtkaXNhYmxlZFByb3AudmFsdWVdID09PSB0cnVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNQb2ludGVyR3JvdXAudmFsdWUpIHtcbiAgICAgIGhhbmRsZUdyb3VwQ2xpY2socG9pbnRlci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZU9wdGlvbkNsaWNrKHBvaW50ZXIudmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmb3J3YXJkUG9pbnRlciA9ICgpID0+IHtcbiAgICBpZiAocG9pbnRlci52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgc2V0UG9pbnRlcigoZ3JvdXBwZWQudmFsdWUgJiYgY2FuUG9pbnRHcm91cHMudmFsdWUgPyBncm91cHMudmFsdWVbMF0gOiBvcHRpb25zLnZhbHVlWzBdKSB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ3JvdXBwZWQudmFsdWUgJiYgY2FuUG9pbnRHcm91cHMudmFsdWUpIHtcbiAgICAgIGxldCBuZXh0UG9pbnRlciA9IGlzUG9pbnRlckdyb3VwLnZhbHVlID8gY3VycmVudEdyb3VwRmlyc3RFbmFibGVkT3B0aW9uLnZhbHVlIDogY3VycmVudEdyb3VwTmV4dEVuYWJsZWRPcHRpb24udmFsdWU7XG5cbiAgICAgIGlmIChuZXh0UG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5leHRQb2ludGVyID0gbmV4dEdyb3VwLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzZXRQb2ludGVyKG5leHRQb2ludGVyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV4dCA9IG9wdGlvbnMudmFsdWUubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKHBvaW50ZXIudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSkgKyAxO1xuXG4gICAgICBpZiAob3B0aW9ucy52YWx1ZS5sZW5ndGggPD0gbmV4dCkge1xuICAgICAgICBuZXh0ID0gMDtcbiAgICAgIH1cblxuICAgICAgc2V0UG9pbnRlcihvcHRpb25zLnZhbHVlW25leHRdIHx8IG51bGwpO1xuICAgIH1cblxuICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgIGFkanVzdFdyYXBwZXJTY3JvbGxUb1BvaW50ZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBiYWNrd2FyZFBvaW50ZXIgPSAoKSA9PiB7XG4gICAgaWYgKHBvaW50ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGxldCBwcmV2UG9pbnRlciA9IG9wdGlvbnMudmFsdWVbb3B0aW9ucy52YWx1ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKGdyb3VwcGVkLnZhbHVlICYmIGNhblBvaW50R3JvdXBzLnZhbHVlKSB7XG4gICAgICAgIHByZXZQb2ludGVyID0gbGFzdEdyb3VwTGFzdEVuYWJsZWRPcHRpb24udmFsdWU7XG5cbiAgICAgICAgaWYgKHByZXZQb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcmV2UG9pbnRlciA9IGxhc3RHcm91cC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRQb2ludGVyKHByZXZQb2ludGVyICB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ3JvdXBwZWQudmFsdWUgJiYgY2FuUG9pbnRHcm91cHMudmFsdWUpIHtcbiAgICAgIGxldCBwcmV2UG9pbnRlciA9IGlzUG9pbnRlckdyb3VwLnZhbHVlID8gcHJldkdyb3VwTGFzdEVuYWJsZWRPcHRpb24udmFsdWUgOiBjdXJyZW50R3JvdXBQcmV2RW5hYmxlZE9wdGlvbi52YWx1ZTtcblxuICAgICAgaWYgKHByZXZQb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJldlBvaW50ZXIgPSBpc1BvaW50ZXJHcm91cC52YWx1ZSA/IHByZXZHcm91cC52YWx1ZSA6IGN1cnJlbnRHcm91cC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0UG9pbnRlcihwcmV2UG9pbnRlciB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByZXZJbmRleCA9IG9wdGlvbnMudmFsdWUubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKHBvaW50ZXIudmFsdWVbdmFsdWVQcm9wLnZhbHVlXSkgLSAxO1xuXG4gICAgICBpZiAocHJldkluZGV4IDwgMCkge1xuICAgICAgICBwcmV2SW5kZXggPSBvcHRpb25zLnZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHNldFBvaW50ZXIob3B0aW9ucy52YWx1ZVtwcmV2SW5kZXhdIHx8IG51bGwpO1xuICAgIH1cblxuICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgIGFkanVzdFdyYXBwZXJTY3JvbGxUb1BvaW50ZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRQYXJlbnRHcm91cCA9IChvcHRpb24pID0+IHtcbiAgICByZXR1cm4gZ3JvdXBzLnZhbHVlLmZpbmQoKGdyb3VwKSA9PiB7XG4gICAgICByZXR1cm4gZ3JvdXAuX19WSVNJQkxFX18ubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKG9wdGlvblt2YWx1ZVByb3AudmFsdWVdKSAhPT0gLTFcbiAgICB9KVxuICB9O1xuXG4gIC8vIG5vIGV4cG9ydFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdCBhZGp1c3RXcmFwcGVyU2Nyb2xsVG9Qb2ludGVyID0gKCkgPT4ge1xuICAgIGxldCBwb2ludGVkT3B0aW9uID0gbXVsdGlzZWxlY3QudmFsdWUucXVlcnlTZWxlY3RvcihgW2RhdGEtcG9pbnRlZF1gKTtcblxuICAgIGlmICghcG9pbnRlZE9wdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHdyYXBwZXIgPSBwb2ludGVkT3B0aW9uLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgIGlmIChncm91cHBlZC52YWx1ZSkge1xuICAgICAgd3JhcHBlciA9IGlzUG9pbnRlckdyb3VwLnZhbHVlXG4gICAgICAgID8gcG9pbnRlZE9wdGlvbi5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICA6IHBvaW50ZWRPcHRpb24ucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAocG9pbnRlZE9wdGlvbi5vZmZzZXRUb3AgKyBwb2ludGVkT3B0aW9uLm9mZnNldEhlaWdodCA+IHdyYXBwZXIuY2xpZW50SGVpZ2h0ICsgd3JhcHBlci5zY3JvbGxUb3ApIHtcbiAgICAgIHdyYXBwZXIuc2Nyb2xsVG9wID0gcG9pbnRlZE9wdGlvbi5vZmZzZXRUb3AgKyBwb2ludGVkT3B0aW9uLm9mZnNldEhlaWdodCAtIHdyYXBwZXIuY2xpZW50SGVpZ2h0O1xuICAgIH1cbiAgICBcbiAgICBpZiAocG9pbnRlZE9wdGlvbi5vZmZzZXRUb3AgPCB3cmFwcGVyLnNjcm9sbFRvcCkge1xuICAgICAgd3JhcHBlci5zY3JvbGxUb3AgPSBwb2ludGVkT3B0aW9uLm9mZnNldFRvcDtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT0gV0FUQ0hFUlMgPT09PT09PT09PT09PT1cblxuICB3YXRjaChzZWFyY2gsICh2YWwpID0+IHtcbiAgICBpZiAoc2VhcmNoYWJsZS52YWx1ZSkge1xuICAgICAgaWYgKHZhbC5sZW5ndGggJiYgc2hvd09wdGlvbnMudmFsdWUpIHtcbiAgICAgICAgc2V0UG9pbnRlckZpcnN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclBvaW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHdhdGNoKGlzT3BlbiwgKHZhbCkgPT4ge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIGxldCBmaXJzdFNlbGVjdGVkID0gbXVsdGlzZWxlY3QudmFsdWUucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtc2VsZWN0ZWRdYClbMF07XG5cbiAgICAgIGlmICghZmlyc3RTZWxlY3RlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IHdyYXBwZXIgPSBmaXJzdFNlbGVjdGVkLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIFxuICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAod3JhcHBlci5zY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IGZpcnN0U2VsZWN0ZWQub2Zmc2V0VG9wO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50ZXIsXG4gICAgY2FuUG9pbnRHcm91cHMsXG4gICAgaXNQb2ludGVkLFxuICAgIHNldFBvaW50ZXJGaXJzdCxcbiAgICBzZWxlY3RQb2ludGVyLFxuICAgIGZvcndhcmRQb2ludGVyLFxuICAgIGJhY2t3YXJkUG9pbnRlcixcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VEcm9wZG93biAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBkaXNhYmxlZCB9ID0gdG9SZWZzKHByb3BzKTtcblxuICBjb25zdCAkdGhpcyA9IGdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O1xuXG4gIC8vID09PT09PT09PT09PT09PT0gREFUQSA9PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgaXNPcGVuID0gcmVmKGZhbHNlKTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgaWYgKGlzT3Blbi52YWx1ZSB8fCBkaXNhYmxlZC52YWx1ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgICBjb250ZXh0LmVtaXQoJ29wZW4nLCAkdGhpcyk7XG4gIH07XG5cbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4udmFsdWUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGNvbnRleHQuZW1pdCgnY2xvc2UnLCAkdGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBpc09wZW4sXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VNdWx0aXNlbGVjdCAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBzZWFyY2hhYmxlLCBkaXNhYmxlZCB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IGlucHV0ID0gZGVwLmlucHV0O1xuICBjb25zdCBvcGVuID0gZGVwLm9wZW47XG4gIGNvbnN0IGNsb3NlID0gZGVwLmNsb3NlO1xuICBjb25zdCBjbGVhclNlYXJjaCA9IGRlcC5jbGVhclNlYXJjaDtcbiAgY29uc3QgaXNPcGVuID0gZGVwLmlzT3BlbjtcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IG11bHRpc2VsZWN0ID0gcmVmKG51bGwpO1xuICBjb25zdCB0YWdzID0gcmVmKG51bGwpO1xuXG4gIGNvbnN0IGlzQWN0aXZlID0gcmVmKGZhbHNlKTtcblxuICAvLyA9PT09PT09PT09PT09PSBDT01QVVRFRCA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IHRhYmluZGV4ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBzZWFyY2hhYmxlLnZhbHVlIHx8IGRpc2FibGVkLnZhbHVlID8gLTEgOiAwXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PSBNRVRIT0RTID09PT09PT09PT09PT09XG5cbiAgY29uc3QgYmx1ciA9ICgpID0+IHtcbiAgICBpZiAoc2VhcmNoYWJsZS52YWx1ZSkge1xuICAgICAgaW5wdXQudmFsdWUuYmx1cigpO1xuICAgIH1cblxuICAgIG11bHRpc2VsZWN0LnZhbHVlLmJsdXIoKTtcbiAgfTtcblxuICBjb25zdCBmb2N1cyA9ICgpID0+IHtcbiAgICBpZiAoc2VhcmNoYWJsZS52YWx1ZSAmJiAhZGlzYWJsZWQudmFsdWUpIHtcbiAgICAgIGlucHV0LnZhbHVlLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGZvY3VzKCk7XG4gIH07XG5cbiAgY29uc3QgYWN0aXZhdGUgPSAoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpc0FjdGl2ZS52YWx1ZSA9IHRydWU7XG5cbiAgICBvcGVuKCk7XG4gIH07XG5cbiAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWlzQWN0aXZlLnZhbHVlKSB7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgICAgIGNsZWFyU2VhcmNoKCk7XG4gICAgICB9XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FyZXRDbGljayA9ICgpID0+IHtcbiAgICBkZWFjdGl2YXRlKCk7XG4gICAgYmx1cigpO1xuICB9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGNvbnN0IGhhbmRsZU1vdXNlZG93biA9IChlKSA9PiB7XG4gICAgaWYgKGlzT3Blbi52YWx1ZSAmJiAoZS50YXJnZXQuaXNFcXVhbE5vZGUobXVsdGlzZWxlY3QudmFsdWUpIHx8IGUudGFyZ2V0LmlzRXF1YWxOb2RlKHRhZ3MudmFsdWUpKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRlYWN0aXZhdGUoKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5pc0VxdWFsTm9kZShtdWx0aXNlbGVjdC52YWx1ZSkgJiYgIWlzT3Blbi52YWx1ZSkge1xuICAgICAgYWN0aXZhdGUoKTsgICAgXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbXVsdGlzZWxlY3QsXG4gICAgdGFncyxcbiAgICB0YWJpbmRleCxcbiAgICBpc0FjdGl2ZSxcbiAgICBibHVyLFxuICAgIGZvY3VzLFxuICAgIGhhbmRsZUZvY3VzLFxuICAgIGFjdGl2YXRlLFxuICAgIGRlYWN0aXZhdGUsXG4gICAgaGFuZGxlQ2FyZXRDbGljayxcbiAgICBoYW5kbGVNb3VzZWRvd24sXG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlS2V5Ym9hcmQgKHByb3BzLCBjb250ZXh0LCBkZXApXG57XG4gIGNvbnN0IHtcbiAgICBtb2RlLCBhZGRUYWdPbiwgb3BlbkRpcmVjdGlvbiwgc2VhcmNoYWJsZSxcbiAgICBzaG93T3B0aW9ucywgdmFsdWVQcm9wLCBncm91cHM6IGdyb3VwcGVkLFxuICAgIGFkZE9wdGlvbk9uOiBhZGRPcHRpb25Pbl8sIGNyZWF0ZVRhZywgY3JlYXRlT3B0aW9uOiBjcmVhdGVPcHRpb25fLFxuICAgIHJldmVyc2UsXG4gIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIGNvbnN0ICR0aGlzID0gZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpdiA9IGRlcC5pdjtcbiAgY29uc3QgdXBkYXRlID0gZGVwLnVwZGF0ZTtcbiAgY29uc3Qgc2VhcmNoID0gZGVwLnNlYXJjaDtcbiAgY29uc3Qgc2V0UG9pbnRlciA9IGRlcC5zZXRQb2ludGVyO1xuICBjb25zdCBzZWxlY3RQb2ludGVyID0gZGVwLnNlbGVjdFBvaW50ZXI7XG4gIGNvbnN0IGJhY2t3YXJkUG9pbnRlciA9IGRlcC5iYWNrd2FyZFBvaW50ZXI7XG4gIGNvbnN0IGZvcndhcmRQb2ludGVyID0gZGVwLmZvcndhcmRQb2ludGVyO1xuICBjb25zdCBpc09wZW4gPSBkZXAuaXNPcGVuO1xuICBjb25zdCBvcGVuID0gZGVwLm9wZW47XG4gIGNvbnN0IGJsdXIgPSBkZXAuYmx1cjtcbiAgY29uc3QgZm8gPSBkZXAuZm87XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgY3JlYXRlT3B0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBjcmVhdGVUYWcudmFsdWUgfHwgY3JlYXRlT3B0aW9uXy52YWx1ZSB8fCBmYWxzZVxuICB9KTtcblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgYWRkT3B0aW9uT24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKGFkZFRhZ09uLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhZGRUYWdPbi52YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmIChhZGRPcHRpb25Pbl8udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFkZE9wdGlvbk9uXy52YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBbJ2VudGVyJ11cbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgY29uc3QgcHJlcGFyZVBvaW50ZXIgPSAoKSA9PiB7XG4gICAgLy8gV2hlbiBvcHRpb25zIGFyZSBoaWRkZW4gYW5kIGNyZWF0aW5nIHRhZ3MgaXMgYWxsb3dlZFxuICAgIC8vIG5vIHBvaW50ZXIgd2lsbCBiZSBzZXQgKGJlY2F1c2Ugb3B0aW9ucyBhcmUgaGlkZGVuKS5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgbmVlZCB0byBzZXQgdGhlIHBvaW50ZXIgbWFudWFsbHkgdG8gdGhlIFxuICAgIC8vIGZpcnN0IG9wdGlvbiwgd2hpY2ggZXF1YWxzIHRvIHRoZSBvcHRpb24gY3JlYXRlZCBmcm9tXG4gICAgLy8gdGhlIHNlYXJjaCB2YWx1ZS5cbiAgICBpZiAobW9kZS52YWx1ZSA9PT0gJ3RhZ3MnICYmICFzaG93T3B0aW9ucy52YWx1ZSAmJiBjcmVhdGVPcHRpb24udmFsdWUgJiYgc2VhcmNoYWJsZS52YWx1ZSAmJiAhZ3JvdXBwZWQudmFsdWUpIHtcbiAgICAgIHNldFBvaW50ZXIoZm8udmFsdWVbZm8udmFsdWUubWFwKG8gPT4gb1t2YWx1ZVByb3AudmFsdWVdKS5pbmRleE9mKHNlYXJjaC52YWx1ZSldKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5ZG93biA9IChlKSA9PiB7XG4gICAgY29udGV4dC5lbWl0KCdrZXlkb3duJywgZSwgJHRoaXMpO1xuXG4gICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgaWYgKG1vZGUudmFsdWUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoYWJsZS52YWx1ZSAmJiBbbnVsbCwgJyddLmluZGV4T2Yoc2VhcmNoLnZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdi52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdXBkYXRlKFsuLi5pdi52YWx1ZV0uc2xpY2UoMCwtMSkpO1xuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoYWRkT3B0aW9uT24udmFsdWUuaW5kZXhPZignZW50ZXInKSA9PT0gLTEgJiYgY3JlYXRlT3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHByZXBhcmVQb2ludGVyKCk7XG4gICAgICAgIHNlbGVjdFBvaW50ZXIoKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGlmICghY3JlYXRlT3B0aW9uLnZhbHVlICYmICFzZWFyY2hhYmxlLnZhbHVlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIFxuICAgICAgICAgIHByZXBhcmVQb2ludGVyKCk7XG4gICAgICAgICAgc2VsZWN0UG9pbnRlcigpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjcmVhdGVPcHRpb24udmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBcblxuICAgICAgICBpZiAoYWRkT3B0aW9uT24udmFsdWUuaW5kZXhPZignc3BhY2UnKSA9PT0gLTEgJiYgY3JlYXRlT3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIFxuICAgICAgICBwcmVwYXJlUG9pbnRlcigpO1xuICAgICAgICBzZWxlY3RQb2ludGVyKCk7XG4gICAgICAgIGJyZWFrXG4gICAgICBcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICBjYXNlICc7JzpcbiAgICAgIGNhc2UgJywnOlxuICAgICAgICBpZiAoYWRkT3B0aW9uT24udmFsdWUuaW5kZXhPZihlLmtleS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEgfHwgIWNyZWF0ZU9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcHJlcGFyZVBvaW50ZXIoKTtcbiAgICAgICAgc2VsZWN0UG9pbnRlcigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGJsdXIoKTtcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXNob3dPcHRpb25zLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkge1xuICAgICAgICAgIG9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYmFja3dhcmRQb2ludGVyKCk7XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIXNob3dPcHRpb25zLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkge1xuICAgICAgICAgIG9wZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRQb2ludGVyKCk7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleXVwID0gKGUpID0+IHtcbiAgICBjb250ZXh0LmVtaXQoJ2tleXVwJywgZSwgJHRoaXMpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgaGFuZGxlS2V5ZG93bixcbiAgICBoYW5kbGVLZXl1cCxcbiAgICBwcmVwYXJlUG9pbnRlcixcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VDbGFzc2VzIChwcm9wcywgY29udGV4dCwgZGVwZW5kZW5jaWVzKVxue2NvbnN0IHsgXG4gICAgY2xhc3NlczogY2xhc3Nlc18sIGRpc2FibGVkLCBvcGVuRGlyZWN0aW9uLCBzaG93T3B0aW9uc1xuICB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IGlzT3BlbiA9IGRlcGVuZGVuY2llcy5pc09wZW47XG4gIGNvbnN0IGlzUG9pbnRlZCA9IGRlcGVuZGVuY2llcy5pc1BvaW50ZWQ7XG4gIGNvbnN0IGlzU2VsZWN0ZWQgPSBkZXBlbmRlbmNpZXMuaXNTZWxlY3RlZDtcbiAgY29uc3QgaXNEaXNhYmxlZCA9IGRlcGVuZGVuY2llcy5pc0Rpc2FibGVkO1xuICBjb25zdCBpc0FjdGl2ZSA9IGRlcGVuZGVuY2llcy5pc0FjdGl2ZTtcbiAgY29uc3QgY2FuUG9pbnRHcm91cHMgPSBkZXBlbmRlbmNpZXMuY2FuUG9pbnRHcm91cHM7XG4gIGNvbnN0IHJlc29sdmluZyA9IGRlcGVuZGVuY2llcy5yZXNvbHZpbmc7XG4gIGNvbnN0IGZvID0gZGVwZW5kZW5jaWVzLmZvO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIGNvbnRhaW5lcjogJ211bHRpc2VsZWN0JyxcbiAgICBjb250YWluZXJEaXNhYmxlZDogJ2lzLWRpc2FibGVkJyxcbiAgICBjb250YWluZXJPcGVuOiAnaXMtb3BlbicsXG4gICAgY29udGFpbmVyT3BlblRvcDogJ2lzLW9wZW4tdG9wJyxcbiAgICBjb250YWluZXJBY3RpdmU6ICdpcy1hY3RpdmUnLFxuICAgIHNpbmdsZUxhYmVsOiAnbXVsdGlzZWxlY3Qtc2luZ2xlLWxhYmVsJyxcbiAgICBzaW5nbGVMYWJlbFRleHQ6ICdtdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWwtdGV4dCcsXG4gICAgbXVsdGlwbGVMYWJlbDogJ211bHRpc2VsZWN0LW11bHRpcGxlLWxhYmVsJyxcbiAgICBzZWFyY2g6ICdtdWx0aXNlbGVjdC1zZWFyY2gnLFxuICAgIHRhZ3M6ICdtdWx0aXNlbGVjdC10YWdzJyxcbiAgICB0YWc6ICdtdWx0aXNlbGVjdC10YWcnLFxuICAgIHRhZ0Rpc2FibGVkOiAnaXMtZGlzYWJsZWQnLFxuICAgIHRhZ1JlbW92ZTogJ211bHRpc2VsZWN0LXRhZy1yZW1vdmUnLFxuICAgIHRhZ1JlbW92ZUljb246ICdtdWx0aXNlbGVjdC10YWctcmVtb3ZlLWljb24nLFxuICAgIHRhZ3NTZWFyY2hXcmFwcGVyOiAnbXVsdGlzZWxlY3QtdGFncy1zZWFyY2gtd3JhcHBlcicsXG4gICAgdGFnc1NlYXJjaDogJ211bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoJyxcbiAgICB0YWdzU2VhcmNoQ29weTogJ211bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoLWNvcHknLFxuICAgIHBsYWNlaG9sZGVyOiAnbXVsdGlzZWxlY3QtcGxhY2Vob2xkZXInLFxuICAgIGNhcmV0OiAnbXVsdGlzZWxlY3QtY2FyZXQnLFxuICAgIGNhcmV0T3BlbjogJ2lzLW9wZW4nLFxuICAgIGNsZWFyOiAnbXVsdGlzZWxlY3QtY2xlYXInLFxuICAgIGNsZWFySWNvbjogJ211bHRpc2VsZWN0LWNsZWFyLWljb24nLFxuICAgIHNwaW5uZXI6ICdtdWx0aXNlbGVjdC1zcGlubmVyJyxcbiAgICBpbmlmaW5pdGU6ICdtdWx0aXNlbGVjdC1pbmlmaXRlJyxcbiAgICBpbmlmaW5pdGVTcGlubmVyOiAnbXVsdGlzZWxlY3QtaW5pZml0ZS1zcGlubmVyJyxcbiAgICBkcm9wZG93bjogJ211bHRpc2VsZWN0LWRyb3Bkb3duJyxcbiAgICBkcm9wZG93blRvcDogJ2lzLXRvcCcsXG4gICAgZHJvcGRvd25IaWRkZW46ICdpcy1oaWRkZW4nLFxuICAgIG9wdGlvbnM6ICdtdWx0aXNlbGVjdC1vcHRpb25zJyxcbiAgICBvcHRpb25zVG9wOiAnaXMtdG9wJyxcbiAgICBncm91cDogJ211bHRpc2VsZWN0LWdyb3VwJyxcbiAgICBncm91cExhYmVsOiAnbXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwnLFxuICAgIGdyb3VwTGFiZWxQb2ludGFibGU6ICdpcy1wb2ludGFibGUnLFxuICAgIGdyb3VwTGFiZWxQb2ludGVkOiAnaXMtcG9pbnRlZCcsXG4gICAgZ3JvdXBMYWJlbFNlbGVjdGVkOiAnaXMtc2VsZWN0ZWQnLFxuICAgIGdyb3VwTGFiZWxEaXNhYmxlZDogJ2lzLWRpc2FibGVkJyxcbiAgICBncm91cExhYmVsU2VsZWN0ZWRQb2ludGVkOiAnaXMtc2VsZWN0ZWQgaXMtcG9pbnRlZCcsXG4gICAgZ3JvdXBMYWJlbFNlbGVjdGVkRGlzYWJsZWQ6ICdpcy1zZWxlY3RlZCBpcy1kaXNhYmxlZCcsXG4gICAgZ3JvdXBPcHRpb25zOiAnbXVsdGlzZWxlY3QtZ3JvdXAtb3B0aW9ucycsXG4gICAgb3B0aW9uOiAnbXVsdGlzZWxlY3Qtb3B0aW9uJyxcbiAgICBvcHRpb25Qb2ludGVkOiAnaXMtcG9pbnRlZCcsXG4gICAgb3B0aW9uU2VsZWN0ZWQ6ICdpcy1zZWxlY3RlZCcsXG4gICAgb3B0aW9uRGlzYWJsZWQ6ICdpcy1kaXNhYmxlZCcsXG4gICAgb3B0aW9uU2VsZWN0ZWRQb2ludGVkOiAnaXMtc2VsZWN0ZWQgaXMtcG9pbnRlZCcsXG4gICAgb3B0aW9uU2VsZWN0ZWREaXNhYmxlZDogJ2lzLXNlbGVjdGVkIGlzLWRpc2FibGVkJyxcbiAgICBub09wdGlvbnM6ICdtdWx0aXNlbGVjdC1uby1vcHRpb25zJyxcbiAgICBub1Jlc3VsdHM6ICdtdWx0aXNlbGVjdC1uby1yZXN1bHRzJyxcbiAgICBmYWtlSW5wdXQ6ICdtdWx0aXNlbGVjdC1mYWtlLWlucHV0JyxcbiAgICBzcGFjZXI6ICdtdWx0aXNlbGVjdC1zcGFjZXInLFxuICAgIC4uLmNsYXNzZXNfLnZhbHVlLFxuICB9KSk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICBjb25zdCBzaG93RHJvcGRvd24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhKGlzT3Blbi52YWx1ZSAmJiBzaG93T3B0aW9ucy52YWx1ZSAmJiAoIXJlc29sdmluZy52YWx1ZSB8fCAocmVzb2x2aW5nLnZhbHVlICYmIGZvLnZhbHVlLmxlbmd0aCkpKVxuICB9KTtcblxuICBjb25zdCBjbGFzc0xpc3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYyA9IGNsYXNzZXMudmFsdWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbmVyOiBbYy5jb250YWluZXJdXG4gICAgICAgIC5jb25jYXQoZGlzYWJsZWQudmFsdWUgPyBjLmNvbnRhaW5lckRpc2FibGVkIDogW10pXG4gICAgICAgIC5jb25jYXQoc2hvd0Ryb3Bkb3duLnZhbHVlICYmIG9wZW5EaXJlY3Rpb24udmFsdWUgPT09ICd0b3AnICA/IGMuY29udGFpbmVyT3BlblRvcCA6IFtdKVxuICAgICAgICAuY29uY2F0KHNob3dEcm9wZG93bi52YWx1ZSAmJiBvcGVuRGlyZWN0aW9uLnZhbHVlICE9PSAndG9wJyA/IGMuY29udGFpbmVyT3BlbiA6IFtdKVxuICAgICAgICAuY29uY2F0KGlzQWN0aXZlLnZhbHVlID8gYy5jb250YWluZXJBY3RpdmUgOiBbXSksXG4gICAgICBzcGFjZXI6IGMuc3BhY2VyLFxuICAgICAgc2luZ2xlTGFiZWw6IGMuc2luZ2xlTGFiZWwsXG4gICAgICBzaW5nbGVMYWJlbFRleHQ6IGMuc2luZ2xlTGFiZWxUZXh0LFxuICAgICAgbXVsdGlwbGVMYWJlbDogYy5tdWx0aXBsZUxhYmVsLFxuICAgICAgc2VhcmNoOiBjLnNlYXJjaCxcbiAgICAgIHRhZ3M6IGMudGFncyxcbiAgICAgIHRhZzogW2MudGFnXVxuICAgICAgICAuY29uY2F0KGRpc2FibGVkLnZhbHVlID8gYy50YWdEaXNhYmxlZCA6IFtdKSxcbiAgICAgIHRhZ1JlbW92ZTogYy50YWdSZW1vdmUsXG4gICAgICB0YWdSZW1vdmVJY29uOiBjLnRhZ1JlbW92ZUljb24sXG4gICAgICB0YWdzU2VhcmNoV3JhcHBlcjogYy50YWdzU2VhcmNoV3JhcHBlcixcbiAgICAgIHRhZ3NTZWFyY2g6IGMudGFnc1NlYXJjaCxcbiAgICAgIHRhZ3NTZWFyY2hDb3B5OiBjLnRhZ3NTZWFyY2hDb3B5LFxuICAgICAgcGxhY2Vob2xkZXI6IGMucGxhY2Vob2xkZXIsXG4gICAgICBjYXJldDogW2MuY2FyZXRdXG4gICAgICAgIC5jb25jYXQoaXNPcGVuLnZhbHVlID8gYy5jYXJldE9wZW4gOiBbXSksXG4gICAgICBjbGVhcjogYy5jbGVhcixcbiAgICAgIGNsZWFySWNvbjogYy5jbGVhckljb24sXG4gICAgICBzcGlubmVyOiBjLnNwaW5uZXIsXG4gICAgICBpbmlmaW5pdGU6IGMuaW5pZmluaXRlLFxuICAgICAgaW5pZmluaXRlU3Bpbm5lcjogYy5pbmlmaW5pdGVTcGlubmVyLFxuICAgICAgZHJvcGRvd246IFtjLmRyb3Bkb3duXVxuICAgICAgICAuY29uY2F0KG9wZW5EaXJlY3Rpb24udmFsdWUgPT09ICd0b3AnID8gYy5kcm9wZG93blRvcCA6IFtdKVxuICAgICAgICAuY29uY2F0KCFpc09wZW4udmFsdWUgfHwgIXNob3dPcHRpb25zLnZhbHVlIHx8ICFzaG93RHJvcGRvd24udmFsdWUgPyBjLmRyb3Bkb3duSGlkZGVuIDogW10pLFxuICAgICAgb3B0aW9uczogW2Mub3B0aW9uc11cbiAgICAgICAgLmNvbmNhdChvcGVuRGlyZWN0aW9uLnZhbHVlID09PSAndG9wJyA/IGMub3B0aW9uc1RvcCA6IFtdKSxcbiAgICAgIGdyb3VwOiBjLmdyb3VwLFxuICAgICAgZ3JvdXBMYWJlbDogKGcpID0+IHtcbiAgICAgICAgbGV0IGdyb3VwTGFiZWwgPSBbYy5ncm91cExhYmVsXTtcblxuICAgICAgICBpZiAoaXNQb2ludGVkKGcpKSB7XG4gICAgICAgICAgZ3JvdXBMYWJlbC5wdXNoKGlzU2VsZWN0ZWQoZykgPyBjLmdyb3VwTGFiZWxTZWxlY3RlZFBvaW50ZWQgOiBjLmdyb3VwTGFiZWxQb2ludGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKGcpICYmIGNhblBvaW50R3JvdXBzLnZhbHVlKSB7XG4gICAgICAgICAgZ3JvdXBMYWJlbC5wdXNoKGlzRGlzYWJsZWQoZykgPyBjLmdyb3VwTGFiZWxTZWxlY3RlZERpc2FibGVkIDogYy5ncm91cExhYmVsU2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQoZykpIHtcbiAgICAgICAgICBncm91cExhYmVsLnB1c2goYy5ncm91cExhYmVsRGlzYWJsZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhblBvaW50R3JvdXBzLnZhbHVlKSB7XG4gICAgICAgICAgZ3JvdXBMYWJlbC5wdXNoKGMuZ3JvdXBMYWJlbFBvaW50YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ3JvdXBMYWJlbFxuICAgICAgfSxcbiAgICAgIGdyb3VwT3B0aW9uczogYy5ncm91cE9wdGlvbnMsXG4gICAgICBvcHRpb246IChvLCBnKSA9PiB7XG4gICAgICAgIGxldCBvcHRpb24gPSBbYy5vcHRpb25dO1xuXG4gICAgICAgIGlmIChpc1BvaW50ZWQobykpIHtcbiAgICAgICAgICBvcHRpb24ucHVzaChpc1NlbGVjdGVkKG8pID8gYy5vcHRpb25TZWxlY3RlZFBvaW50ZWQgOiBjLm9wdGlvblBvaW50ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU2VsZWN0ZWQobykpIHtcbiAgICAgICAgICBvcHRpb24ucHVzaChpc0Rpc2FibGVkKG8pID8gYy5vcHRpb25TZWxlY3RlZERpc2FibGVkIDogYy5vcHRpb25TZWxlY3RlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEaXNhYmxlZChvKSB8fCAoZyAmJiBpc0Rpc2FibGVkKGcpKSkge1xuICAgICAgICAgIG9wdGlvbi5wdXNoKGMub3B0aW9uRGlzYWJsZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfSxcbiAgICAgIG5vT3B0aW9uczogYy5ub09wdGlvbnMsXG4gICAgICBub1Jlc3VsdHM6IGMubm9SZXN1bHRzLFxuICAgICAgZmFrZUlucHV0OiBjLmZha2VJbnB1dCxcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgY2xhc3NMaXN0LFxuICAgIHNob3dEcm9wZG93bixcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGwkMSAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3Qge1xuICAgIGxpbWl0LCBpbmZpbml0ZSxcbiAgfSA9IHRvUmVmcyhwcm9wcyk7XG5cbiAgLy8gPT09PT09PT09PT09IERFUEVOREVOQ0lFUyA9PT09PT09PT09PT1cblxuICBjb25zdCBpc09wZW4gPSBkZXAuaXNPcGVuO1xuICBjb25zdCBvZmZzZXQgPSBkZXAub2Zmc2V0O1xuICBjb25zdCBzZWFyY2ggPSBkZXAuc2VhcmNoO1xuICBjb25zdCBwZm8gPSBkZXAucGZvO1xuICBjb25zdCBlbyA9IGRlcC5lbztcblxuICAvLyA9PT09PT09PT09PT09PT09IERBVEEgPT09PT09PT09PT09PT09PVxuXG4gIC8vIG5vIGV4cG9ydFxuICBjb25zdCBvYnNlcnZlciA9IHJlZihudWxsKTtcblxuICBjb25zdCBpbmZpbml0ZUxvYWRlciA9IHJlZihudWxsKTtcblxuICAvLyA9PT09PT09PT09PT09PSBDT01QVVRFRCA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGhhc01vcmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIG9mZnNldC52YWx1ZSA8IHBmby52YWx1ZS5sZW5ndGhcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09IE1FVEhPRFMgPT09PT09PT09PT09PT1cblxuICAvLyBubyBleHBvcnRcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3QgaGFuZGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSAoZW50cmllcykgPT4ge1xuICAgIGNvbnN0IHsgaXNJbnRlcnNlY3RpbmcsIHRhcmdldCB9ID0gZW50cmllc1swXTtcblxuICAgIGlmIChpc0ludGVyc2VjdGluZykge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Lm9mZnNldFBhcmVudDtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHBhcmVudC5zY3JvbGxUb3A7XG5cbiAgICAgIG9mZnNldC52YWx1ZSArPSBsaW1pdC52YWx1ZSA9PSAtMSA/IDEwIDogbGltaXQudmFsdWU7XG5cbiAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgcGFyZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvYnNlcnZlID0gKCkgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzT3Blbi52YWx1ZSAmJiBvZmZzZXQudmFsdWUgPCBwZm8udmFsdWUubGVuZ3RoKSB7XG4gICAgICBvYnNlcnZlci52YWx1ZS5vYnNlcnZlKGluZmluaXRlTG9hZGVyLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgb2JzZXJ2ZXIudmFsdWUpIHtcbiAgICAgIG9ic2VydmVyLnZhbHVlLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT0gV0FUQ0hFUlMgPT09PT09PT09PT09PT1cblxuICB3YXRjaChpc09wZW4sICgpID0+IHtcbiAgICBpZiAoIWluZmluaXRlLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvYnNlcnZlKCk7XG4gIH0pO1xuXG4gIHdhdGNoKHNlYXJjaCwgKCkgPT4ge1xuICAgIGlmICghaW5maW5pdGUudmFsdWUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG9mZnNldC52YWx1ZSA9IGxpbWl0LnZhbHVlO1xuXG4gICAgb2JzZXJ2ZSgpO1xuICB9LCB7IGZsdXNoOiAncG9zdCcgfSk7XG5cbiAgd2F0Y2goZW8sICgpID0+IHtcbiAgICBpZiAoIWluZmluaXRlLnZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvYnNlcnZlKCk7XG4gIH0sIHsgaW1tZWRpYXRlOiBmYWxzZSwgZmx1c2g6ICdwb3N0JyB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09IEhPT0tTID09PT09PT09PT09PT09PVxuXG4gIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIudmFsdWUgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNNb3JlLFxuICAgIGluZmluaXRlTG9hZGVyLFxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbCAocHJvcHMsIGNvbnRleHQsIGRlcClcbntcbiAgY29uc3QgeyBwbGFjZWhvbGRlciwgaWQsIHZhbHVlUHJvcCwgbGFiZWw6IGxhYmVsUHJvcCwgbW9kZSwgZ3JvdXBMYWJlbCB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAvLyA9PT09PT09PT09PT0gREVQRU5ERU5DSUVTID09PT09PT09PT09PVxuXG4gIGNvbnN0IHBvaW50ZXIgPSBkZXAucG9pbnRlcjtcbiAgY29uc3QgaXYgPSBkZXAuaXY7XG4gIGNvbnN0IGlzU2VsZWN0ZWQgPSBkZXAuaXNTZWxlY3RlZDtcbiAgY29uc3QgaGFzU2VsZWN0ZWQgPSBkZXAuaGFzU2VsZWN0ZWQ7XG4gIGNvbnN0IG11bHRpcGxlTGFiZWxUZXh0ID0gZGVwLm11bHRpcGxlTGFiZWxUZXh0O1xuXG4gIC8vID09PT09PT09PT09PT09PT0gREFUQSA9PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgbGFiZWwgPSByZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT0gQ09NUFVURUQgPT09PT09PT09PT09PT1cblxuICBjb25zdCBhcmlhT3ducyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGV4dHMgPSBbXTtcblxuICAgIGlmIChpZCAmJiBpZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChpZC52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGV4dHMucHVzaCgnbXVsdGlzZWxlY3Qtb3B0aW9ucycpO1xuXG4gICAgcmV0dXJuIHRleHRzLmpvaW4oJy0nKVxuICB9KTtcblxuICBjb25zdCBhcmlhQWN0aXZlRGVzY2VuZGFudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGV4dHMgPSBbXTtcblxuICAgIGlmIChpZCAmJiBpZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChpZC52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGV4dHMucHVzaCgnbXVsdGlzZWxlY3Qtb3B0aW9uJyk7XG5cbiAgICBpZiAocG9pbnRlci52YWx1ZSAmJiBwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dHMucHVzaChwb2ludGVyLnZhbHVlW3ZhbHVlUHJvcC52YWx1ZV0pO1xuXG4gICAgICByZXR1cm4gdGV4dHMuam9pbignLScpXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBhcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRleHRzID0gW107XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChsYWJlbC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChsYWJlbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlaG9sZGVyLnZhbHVlICYmICFoYXNTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChwbGFjZWhvbGRlci52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUudmFsdWUgPT09ICdzaW5nbGUnICYmIGl2LnZhbHVlICYmIGl2LnZhbHVlW2xhYmVsUHJvcC52YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dHMucHVzaChpdi52YWx1ZVtsYWJlbFByb3AudmFsdWVdKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZS52YWx1ZSA9PT0gJ211bHRpcGxlJyAmJiBoYXNTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChtdWx0aXBsZUxhYmVsVGV4dC52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUudmFsdWUgPT09ICd0YWdzJyAmJiBoYXNTZWxlY3RlZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaCguLi5pdi52YWx1ZS5tYXAodiA9PiB2W2xhYmVsUHJvcC52YWx1ZV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHMuam9pbignLCAnKVxuICB9KTtcblxuICBjb25zdCBhcmlhUGxhY2Vob2xkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGFyaWFMYWJlbC52YWx1ZVxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT0gTUVUSE9EUyA9PT09PT09PT09PT09PVxuXG4gIGNvbnN0IGFyaWFPcHRpb25JZCA9IChvcHRpb24pID0+IHtcbiAgICBsZXQgdGV4dHMgPSBbXTtcblxuICAgIGlmIChpZCAmJiBpZC52YWx1ZSkge1xuICAgICAgdGV4dHMucHVzaChpZC52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGV4dHMucHVzaCgnbXVsdGlzZWxlY3Qtb3B0aW9uJyk7XG5cbiAgICB0ZXh0cy5wdXNoKG9wdGlvblt2YWx1ZVByb3AudmFsdWVdKTtcblxuICAgIHJldHVybiB0ZXh0cy5qb2luKCctJylcbiAgfTtcblxuICBjb25zdCBhcmlhT3B0aW9uTGFiZWwgPSAob3B0aW9uKSA9PiB7XG4gICAgbGV0IHRleHRzID0gW107XG5cbiAgICBpZiAoaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICB0ZXh0cy5wdXNoKCfinJMnKTtcbiAgICB9XG5cbiAgICB0ZXh0cy5wdXNoKG9wdGlvbltsYWJlbFByb3AudmFsdWVdKTtcblxuICAgIHJldHVybiB0ZXh0cy5qb2luKCcgJylcbiAgfTtcblxuICBjb25zdCBhcmlhR3JvdXBMYWJlbCA9IChncm91cCkgPT4ge1xuICAgIGxldCB0ZXh0cyA9IFtdO1xuXG4gICAgdGV4dHMucHVzaChncm91cFtncm91cExhYmVsLnZhbHVlXSk7XG5cbiAgICByZXR1cm4gdGV4dHMuam9pbignICcpXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09IEhPT0tTID09PT09PT09PT09PT09PT1cblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKGlkICYmIGlkLnZhbHVlICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICAgIGxldCBmb3JUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZm9yPVwiJHtpZC52YWx1ZX1cIl1gKTtcbiAgICAgIGxhYmVsLnZhbHVlID0gZm9yVGFnID8gZm9yVGFnLmlubmVyVGV4dCA6IG51bGw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGFyaWFPd25zLFxuICAgIGFyaWFMYWJlbCxcbiAgICBhcmlhUGxhY2Vob2xkZXIsXG4gICAgYXJpYUFjdGl2ZURlc2NlbmRhbnQsXG4gICAgYXJpYU9wdGlvbklkLFxuICAgIGFyaWFPcHRpb25MYWJlbCxcbiAgICBhcmlhR3JvdXBMYWJlbCxcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVwcyAocHJvcHMsIGNvbnRleHQsIGZlYXR1cmVzLCBkZXBzID0ge30pIHtcbiAgZmVhdHVyZXMuZm9yRWFjaCgoY29tcG9zYWJsZSkgPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGNvbXBvc2FibGUpIHtcbiAgICAgIGRlcHMgPSB7XG4gICAgICAgIC4uLmRlcHMsXG4gICAgICAgIC4uLmNvbXBvc2FibGUocHJvcHMsIGNvbnRleHQsIGRlcHMpXG4gICAgICB9O1xuICAgIH1cblxuICB9KTtcbiAgXG4gIHJldHVybiBkZXBzXG59XG5cbnZhciBzY3JpcHQgPSB7XG4gICAgbmFtZTogJ011bHRpc2VsZWN0JyxcbiAgICBlbWl0czogW1xuICAgICAgJ3Bhc3RlJywgJ29wZW4nLCAnY2xvc2UnLCAnc2VsZWN0JywgJ2Rlc2VsZWN0JywgXG4gICAgICAnaW5wdXQnLCAnc2VhcmNoLWNoYW5nZScsICd0YWcnLCAnb3B0aW9uJywgJ3VwZGF0ZTptb2RlbFZhbHVlJyxcbiAgICAgICdjaGFuZ2UnLCAnY2xlYXInLCAna2V5ZG93bicsICdrZXl1cCcsXG4gICAgXSxcbiAgICBwcm9wczoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogW0FycmF5LCBPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoW10pXG4gICAgICB9LFxuICAgICAgaWQ6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnbXVsdGlzZWxlY3QnLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICdsYWJlbCcsXG4gICAgICB9LFxuICAgICAgdHJhY2tCeToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHZhbHVlUHJvcDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ3ZhbHVlJyxcbiAgICAgIH0sXG4gICAgICBwbGFjZWhvbGRlcjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBtb2RlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnc2luZ2xlJywgLy8gc2luZ2xlfG11bHRpcGxlfHRhZ3NcbiAgICAgIH0sXG4gICAgICBzZWFyY2hhYmxlOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbGltaXQ6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgfSxcbiAgICAgIGhpZGVTZWxlY3RlZDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY3JlYXRlVGFnOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGNyZWF0ZU9wdGlvbjoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBhcHBlbmROZXdUYWc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgYXBwZW5kTmV3T3B0aW9uOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGFkZFRhZ09uOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBhZGRPcHRpb25Pbjoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgY2FyZXQ6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGxvYWRpbmc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBub09wdGlvbnNUZXh0OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnVGhlIGxpc3QgaXMgZW1wdHknLFxuICAgICAgfSxcbiAgICAgIG5vUmVzdWx0c1RleHQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZUxhYmVsOiB7XG4gICAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgb2JqZWN0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGVsYXk6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgfSxcbiAgICAgIG1pbkNoYXJzOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmVPbkxvYWQ6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGZpbHRlclJlc3VsdHM6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsZWFyT25TZWFyY2g6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBjbGVhck9uU2VsZWN0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjYW5EZXNlbGVjdDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2FuQ2xlYXI6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG1heDoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogLTEsXG4gICAgICB9LFxuICAgICAgc2hvd09wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgb3BlbkRpcmVjdGlvbjoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ2JvdHRvbScsXG4gICAgICB9LFxuICAgICAgbmF0aXZlU3VwcG9ydDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcbiAgICAgIH0sXG4gICAgICBzdHJpY3Q6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsb3NlT25TZWxlY3Q6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGF1dG9jb21wbGV0ZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBncm91cHM6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBncm91cExhYmVsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnbGFiZWwnLFxuICAgICAgfSxcbiAgICAgIGdyb3VwT3B0aW9uczoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ29wdGlvbnMnLFxuICAgICAgfSxcbiAgICAgIGdyb3VwSGlkZUVtcHR5OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZ3JvdXBTZWxlY3Q6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGlucHV0VHlwZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogJ3RleHQnLFxuICAgICAgfSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgfSxcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICB9LFxuICAgICAgZGlzYWJsZWRQcm9wOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiAnZGlzYWJsZWQnLFxuICAgICAgfSxcbiAgICAgIHNlYXJjaFN0YXJ0OiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgcmV2ZXJzZToge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHJlZ2V4OiB7XG4gICAgICAgIHR5cGU6IFtPYmplY3QsIFN0cmluZywgUmVnRXhwXSxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgcnRsOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaW5maW5pdGU6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzZXR1cChwcm9wcywgY29udGV4dClcbiAgICB7IFxuICAgICAgcmV0dXJuIHJlc29sdmVEZXBzKHByb3BzLCBjb250ZXh0LCBbXG4gICAgICAgIHVzZVZhbHVlLFxuICAgICAgICB1c2VQb2ludGVyJDEsXG4gICAgICAgIHVzZURyb3Bkb3duLFxuICAgICAgICB1c2VTZWFyY2gsXG4gICAgICAgIHVzZURhdGEsXG4gICAgICAgIHVzZU11bHRpc2VsZWN0LFxuICAgICAgICB1c2VPcHRpb25zLFxuICAgICAgICB1c2VTY3JvbGwkMSxcbiAgICAgICAgdXNlUG9pbnRlcixcbiAgICAgICAgdXNlS2V5Ym9hcmQsXG4gICAgICAgIHVzZUNsYXNzZXMsXG4gICAgICAgIHVzZVNjcm9sbCxcbiAgICAgIF0pXG4gICAgfVxuICB9O1xuXG5jb25zdCBfaG9pc3RlZF8xID0gW1widGFiaW5kZXhcIiwgXCJpZFwiLCBcImRpclwiLCBcImFyaWEtb3duc1wiLCBcImFyaWEtZXhwYW5kZWRcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1wbGFjZWhvbGRlclwiLCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiXTtcbmNvbnN0IF9ob2lzdGVkXzIgPSBbXCJ0eXBlXCIsIFwibW9kZWxWYWx1ZVwiLCBcInZhbHVlXCIsIFwiYXV0b2NvbXBsZXRlXCIsIFwiaWRcIiwgXCJhcmlhLW93bnNcIiwgXCJhcmlhLWV4cGFuZGVkXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtcGxhY2Vob2xkZXJcIiwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIl07XG5jb25zdCBfaG9pc3RlZF8zID0gW1wib25DbGlja1wiXTtcbmNvbnN0IF9ob2lzdGVkXzQgPSBbXCJ0eXBlXCIsIFwibW9kZWxWYWx1ZVwiLCBcInZhbHVlXCIsIFwiaWRcIiwgXCJhdXRvY29tcGxldGVcIiwgXCJhcmlhLW93bnNcIiwgXCJhcmlhLWV4cGFuZGVkXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtcGxhY2Vob2xkZXJcIiwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIl07XG5jb25zdCBfaG9pc3RlZF81ID0gW1wiaW5uZXJIVE1MXCJdO1xuY29uc3QgX2hvaXN0ZWRfNiA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzcgPSBbXCJpZFwiXTtcbmNvbnN0IF9ob2lzdGVkXzggPSBbXCJkYXRhLXBvaW50ZWRcIiwgXCJvbk1vdXNlZW50ZXJcIiwgXCJvbkNsaWNrXCJdO1xuY29uc3QgX2hvaXN0ZWRfOSA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzEwID0gW1wiYXJpYS1sYWJlbFwiXTtcbmNvbnN0IF9ob2lzdGVkXzExID0gW1wiZGF0YS1wb2ludGVkXCIsIFwiZGF0YS1zZWxlY3RlZFwiLCBcImlkXCIsIFwiYXJpYS1sYWJlbFwiLCBcIm9uTW91c2VlbnRlclwiLCBcIm9uQ2xpY2tcIl07XG5jb25zdCBfaG9pc3RlZF8xMiA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzEzID0gW1wiaWRcIiwgXCJhcmlhLWxhYmVsXCIsIFwiZGF0YS1wb2ludGVkXCIsIFwiZGF0YS1zZWxlY3RlZFwiLCBcIm9uTW91c2VlbnRlclwiLCBcIm9uQ2xpY2tcIl07XG5jb25zdCBfaG9pc3RlZF8xNCA9IFtcImlubmVySFRNTFwiXTtcbmNvbnN0IF9ob2lzdGVkXzE1ID0gW1wiaW5uZXJIVE1MXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTYgPSBbXCJpbm5lckhUTUxcIl07XG5jb25zdCBfaG9pc3RlZF8xNyA9IFtcInZhbHVlXCJdO1xuY29uc3QgX2hvaXN0ZWRfMTggPSBbXCJuYW1lXCIsIFwidmFsdWVcIl07XG5jb25zdCBfaG9pc3RlZF8xOSA9IFtcIm5hbWVcIiwgXCJ2YWx1ZVwiXTtcblxuZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgIHJlZjogXCJtdWx0aXNlbGVjdFwiLFxuICAgIHRhYmluZGV4OiBfY3R4LnRhYmluZGV4LFxuICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5jb250YWluZXIpLFxuICAgIGlkOiAkcHJvcHMuc2VhcmNoYWJsZSA/IHVuZGVmaW5lZCA6ICRwcm9wcy5pZCxcbiAgICBkaXI6ICRwcm9wcy5ydGwgPyAncnRsJyA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtb3duc1wiOiBfY3R4LmFyaWFPd25zLFxuICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfY3R4LmlzT3BlbixcbiAgICBcImFyaWEtbGFiZWxcIjogX2N0eC5hcmlhTGFiZWwsXG4gICAgXCJhcmlhLXBsYWNlaG9sZGVyXCI6IF9jdHguYXJpYVBsYWNlaG9sZGVyLFxuICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF9jdHguYXJpYUFjdGl2ZURlc2NlbmRhbnQsXG4gICAgb25Gb2N1c2luOiBfY2FjaGVbOF0gfHwgKF9jYWNoZVs4XSA9ICguLi5hcmdzKSA9PiAoX2N0eC5hY3RpdmF0ZSAmJiBfY3R4LmFjdGl2YXRlKC4uLmFyZ3MpKSksXG4gICAgb25Gb2N1c291dDogX2NhY2hlWzldIHx8IChfY2FjaGVbOV0gPSAoLi4uYXJncykgPT4gKF9jdHguZGVhY3RpdmF0ZSAmJiBfY3R4LmRlYWN0aXZhdGUoLi4uYXJncykpKSxcbiAgICBvbktleWRvd246IF9jYWNoZVsxMF0gfHwgKF9jYWNoZVsxMF0gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlS2V5ZG93biAmJiBfY3R4LmhhbmRsZUtleWRvd24oLi4uYXJncykpKSxcbiAgICBvbktleXVwOiBfY2FjaGVbMTFdIHx8IChfY2FjaGVbMTFdID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZUtleXVwICYmIF9jdHguaGFuZGxlS2V5dXAoLi4uYXJncykpKSxcbiAgICBvbkZvY3VzOiBfY2FjaGVbMTJdIHx8IChfY2FjaGVbMTJdID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZUZvY3VzICYmIF9jdHguaGFuZGxlRm9jdXMoLi4uYXJncykpKSxcbiAgICBvbk1vdXNlZG93bjogX2NhY2hlWzEzXSB8fCAoX2NhY2hlWzEzXSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVNb3VzZWRvd24gJiYgX2N0eC5oYW5kbGVNb3VzZWRvd24oLi4uYXJncykpKSxcbiAgICByb2xlOiBcImNvbWJvYm94XCJcbiAgfSwgW1xuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBTZWFyY2ggXCIpLFxuICAgICgkcHJvcHMubW9kZSAhPT0gJ3RhZ3MnICYmICRwcm9wcy5zZWFyY2hhYmxlICYmICEkcHJvcHMuZGlzYWJsZWQpXG4gICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiaW5wdXRcIiwgbWVyZ2VQcm9wcyh7XG4gICAgICAgICAga2V5OiAwLFxuICAgICAgICAgIHR5cGU6ICRwcm9wcy5pbnB1dFR5cGUsXG4gICAgICAgICAgbW9kZWxWYWx1ZTogX2N0eC5zZWFyY2gsXG4gICAgICAgICAgdmFsdWU6IF9jdHguc2VhcmNoLFxuICAgICAgICAgIGNsYXNzOiBfY3R4LmNsYXNzTGlzdC5zZWFyY2gsXG4gICAgICAgICAgYXV0b2NvbXBsZXRlOiAkcHJvcHMuYXV0b2NvbXBsZXRlLFxuICAgICAgICAgIGlkOiAkcHJvcHMuc2VhcmNoYWJsZSA/ICRwcm9wcy5pZCA6IHVuZGVmaW5lZFxuICAgICAgICB9LCAkcHJvcHMuYXR0cnMsIHtcbiAgICAgICAgICBcImFyaWEtb3duc1wiOiBfY3R4LmFyaWFPd25zLFxuICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfY3R4LmlzT3BlbixcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX2N0eC5hcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLXBsYWNlaG9sZGVyXCI6IF9jdHguYXJpYVBsYWNlaG9sZGVyLFxuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF9jdHguYXJpYUFjdGl2ZURlc2NlbmRhbnQsXG4gICAgICAgICAgb25JbnB1dDogX2NhY2hlWzBdIHx8IChfY2FjaGVbMF0gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlU2VhcmNoSW5wdXQgJiYgX2N0eC5oYW5kbGVTZWFyY2hJbnB1dCguLi5hcmdzKSkpLFxuICAgICAgICAgIG9uS2V5cHJlc3M6IF9jYWNoZVsxXSB8fCAoX2NhY2hlWzFdID0gKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZUtleXByZXNzICYmIF9jdHguaGFuZGxlS2V5cHJlc3MoLi4uYXJncykpKSxcbiAgICAgICAgICBvblBhc3RlOiBfY2FjaGVbMl0gfHwgKF9jYWNoZVsyXSA9IHdpdGhNb2RpZmllcnMoKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZVBhc3RlICYmIF9jdHguaGFuZGxlUGFzdGUoLi4uYXJncykpLCBbXCJzdG9wXCJdKSksXG4gICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgcm9sZTogXCJjb21ib2JveFwiXG4gICAgICAgIH0pLCBudWxsLCAxNiAvKiBGVUxMX1BST1BTICovLCBfaG9pc3RlZF8yKSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgVGFncyAod2l0aCBzZWFyY2gpIFwiKSxcbiAgICAoJHByb3BzLm1vZGUgPT0gJ3RhZ3MnKVxuICAgICAgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiAxLFxuICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC50YWdzKVxuICAgICAgICB9LCBbXG4gICAgICAgICAgKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCBudWxsLCByZW5kZXJMaXN0KF9jdHguaXYsIChvcHRpb24sIGksIGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwidGFnXCIsIHtcbiAgICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgICAgIGhhbmRsZVRhZ1JlbW92ZTogX2N0eC5oYW5kbGVUYWdSZW1vdmUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAkcHJvcHMuZGlzYWJsZWRcbiAgICAgICAgICAgIH0sICgpID0+IFtcbiAgICAgICAgICAgICAgKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QudGFnKSxcbiAgICAgICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgY3JlYXRlVGV4dFZOb2RlKHRvRGlzcGxheVN0cmluZyhvcHRpb25bJHByb3BzLmxhYmVsXSkgKyBcIiBcIiwgMSAvKiBURVhUICovKSxcbiAgICAgICAgICAgICAgICAoISRwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgID8gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnRhZ1JlbW92ZSksXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljazogJGV2ZW50ID0+IChfY3R4LmhhbmRsZVRhZ1JlbW92ZShvcHRpb24sICRldmVudCkpXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC50YWdSZW1vdmVJY29uKVxuICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgICAgICAgICAgICAgIF0sIDEwIC8qIENMQVNTLCBQUk9QUyAqLywgX2hvaXN0ZWRfMykpXG4gICAgICAgICAgICAgICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgXSwgMiAvKiBDTEFTUyAqLykpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH0pLCAyNTYgLyogVU5LRVlFRF9GUkFHTUVOVCAqLykpLFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QudGFnc1NlYXJjaFdyYXBwZXIpLFxuICAgICAgICAgICAgcmVmOiBcInRhZ3NcIlxuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBVc2VkIGZvciBtZWFzdXJpbmcgc2VhcmNoIHdpZHRoIFwiKSxcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QudGFnc1NlYXJjaENvcHkpXG4gICAgICAgICAgICB9LCB0b0Rpc3BsYXlTdHJpbmcoX2N0eC5zZWFyY2gpLCAzIC8qIFRFWFQsIENMQVNTICovKSxcbiAgICAgICAgICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBBY3R1YWwgc2VhcmNoIGlucHV0IFwiKSxcbiAgICAgICAgICAgICgkcHJvcHMuc2VhcmNoYWJsZSAmJiAhJHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiaW5wdXRcIiwgbWVyZ2VQcm9wcyh7XG4gICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAkcHJvcHMuaW5wdXRUeXBlLFxuICAgICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogX2N0eC5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX2N0eC5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX2N0eC5jbGFzc0xpc3QudGFnc1NlYXJjaCxcbiAgICAgICAgICAgICAgICAgIGlkOiAkcHJvcHMuc2VhcmNoYWJsZSA/ICRwcm9wcy5pZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogJHByb3BzLmF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgIH0sICRwcm9wcy5hdHRycywge1xuICAgICAgICAgICAgICAgICAgXCJhcmlhLW93bnNcIjogX2N0eC5hcmlhT3ducyxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfY3R4LmlzT3BlbixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfY3R4LmFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiBfY3R4LmFyaWFQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF9jdHguYXJpYUFjdGl2ZURlc2NlbmRhbnQsXG4gICAgICAgICAgICAgICAgICBvbklucHV0OiBfY2FjaGVbM10gfHwgKF9jYWNoZVszXSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVTZWFyY2hJbnB1dCAmJiBfY3R4LmhhbmRsZVNlYXJjaElucHV0KC4uLmFyZ3MpKSksXG4gICAgICAgICAgICAgICAgICBvbktleXByZXNzOiBfY2FjaGVbNF0gfHwgKF9jYWNoZVs0XSA9ICguLi5hcmdzKSA9PiAoX2N0eC5oYW5kbGVLZXlwcmVzcyAmJiBfY3R4LmhhbmRsZUtleXByZXNzKC4uLmFyZ3MpKSksXG4gICAgICAgICAgICAgICAgICBvblBhc3RlOiBfY2FjaGVbNV0gfHwgKF9jYWNoZVs1XSA9IHdpdGhNb2RpZmllcnMoKC4uLmFyZ3MpID0+IChfY3R4LmhhbmRsZVBhc3RlICYmIF9jdHguaGFuZGxlUGFzdGUoLi4uYXJncykpLCBbXCJzdG9wXCJdKSksXG4gICAgICAgICAgICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgIH0pLCBudWxsLCAxNiAvKiBGVUxMX1BST1BTICovLCBfaG9pc3RlZF80KSlcbiAgICAgICAgICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgICAgICAgXSwgMiAvKiBDTEFTUyAqLylcbiAgICAgICAgXSwgMiAvKiBDTEFTUyAqLykpXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIFNpbmdsZSBsYWJlbCBcIiksXG4gICAgKCRwcm9wcy5tb2RlID09ICdzaW5nbGUnICYmIF9jdHguaGFzU2VsZWN0ZWQgJiYgIV9jdHguc2VhcmNoICYmIF9jdHguaXYpXG4gICAgICA/IHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwic2luZ2xlbGFiZWxcIiwge1xuICAgICAgICAgIGtleTogMixcbiAgICAgICAgICB2YWx1ZTogX2N0eC5pdlxuICAgICAgICB9LCAoKSA9PiBbXG4gICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5zaW5nbGVMYWJlbClcbiAgICAgICAgICB9LCBbXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnNpbmdsZUxhYmVsVGV4dCksXG4gICAgICAgICAgICAgIGlubmVySFRNTDogX2N0eC5pdlskcHJvcHMubGFiZWxdXG4gICAgICAgICAgICB9LCBudWxsLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzUpXG4gICAgICAgICAgXSwgMiAvKiBDTEFTUyAqLylcbiAgICAgICAgXSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgTXVsdGlwbGUgbGFiZWwgXCIpLFxuICAgICgkcHJvcHMubW9kZSA9PSAnbXVsdGlwbGUnICYmIF9jdHguaGFzU2VsZWN0ZWQgJiYgIV9jdHguc2VhcmNoKVxuICAgICAgPyByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcIm11bHRpcGxlbGFiZWxcIiwge1xuICAgICAgICAgIGtleTogMyxcbiAgICAgICAgICB2YWx1ZXM6IF9jdHguaXZcbiAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QubXVsdGlwbGVMYWJlbCksXG4gICAgICAgICAgICBpbm5lckhUTUw6IF9jdHgubXVsdGlwbGVMYWJlbFRleHRcbiAgICAgICAgICB9LCBudWxsLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzYpXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIFBsYWNlaG9sZGVyIFwiKSxcbiAgICAoJHByb3BzLnBsYWNlaG9sZGVyICYmICFfY3R4Lmhhc1NlbGVjdGVkICYmICFfY3R4LnNlYXJjaClcbiAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJwbGFjZWhvbGRlclwiLCB7IGtleTogNCB9LCAoKSA9PiBbXG4gICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5wbGFjZWhvbGRlcilcbiAgICAgICAgICB9LCB0b0Rpc3BsYXlTdHJpbmcoJHByb3BzLnBsYWNlaG9sZGVyKSwgMyAvKiBURVhULCBDTEFTUyAqLylcbiAgICAgICAgXSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgU3Bpbm5lciBcIiksXG4gICAgKCRwcm9wcy5sb2FkaW5nIHx8IF9jdHgucmVzb2x2aW5nKVxuICAgICAgPyByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcInNwaW5uZXJcIiwgeyBrZXk6IDUgfSwgKCkgPT4gW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LnNwaW5uZXIpXG4gICAgICAgICAgfSwgbnVsbCwgMiAvKiBDTEFTUyAqLylcbiAgICAgICAgXSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgQ2xlYXIgXCIpLFxuICAgIChfY3R4Lmhhc1NlbGVjdGVkICYmICEkcHJvcHMuZGlzYWJsZWQgJiYgJHByb3BzLmNhbkNsZWFyICYmICFfY3R4LmJ1c3kpXG4gICAgICA/IHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiY2xlYXJcIiwge1xuICAgICAgICAgIGtleTogNixcbiAgICAgICAgICBjbGVhcjogX2N0eC5jbGVhclxuICAgICAgICB9LCAoKSA9PiBbXG4gICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuY2xlYXIpLFxuICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzZdIHx8IChfY2FjaGVbNl0gPSAoLi4uYXJncykgPT4gKF9jdHguY2xlYXIgJiYgX2N0eC5jbGVhciguLi5hcmdzKSkpXG4gICAgICAgICAgfSwgW1xuICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5jbGVhckljb24pXG4gICAgICAgICAgICB9LCBudWxsLCAyIC8qIENMQVNTICovKVxuICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIENhcmV0IFwiKSxcbiAgICAoJHByb3BzLmNhcmV0ICYmICRwcm9wcy5zaG93T3B0aW9ucylcbiAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJjYXJldFwiLCB7IGtleTogNyB9LCAoKSA9PiBbXG4gICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuY2FyZXQpLFxuICAgICAgICAgICAgb25DbGljazogX2NhY2hlWzddIHx8IChfY2FjaGVbN10gPSAoLi4uYXJncykgPT4gKF9jdHguaGFuZGxlQ2FyZXRDbGljayAmJiBfY3R4LmhhbmRsZUNhcmV0Q2xpY2soLi4uYXJncykpKVxuICAgICAgICAgIH0sIG51bGwsIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgIF0pXG4gICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgY3JlYXRlQ29tbWVudFZOb2RlKFwiIE9wdGlvbnMgXCIpLFxuICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7XG4gICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuZHJvcGRvd24pLFxuICAgICAgdGFiaW5kZXg6IFwiLTFcIlxuICAgIH0sIFtcbiAgICAgIHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiYmVmb3JlbGlzdFwiLCB7IG9wdGlvbnM6IF9jdHguZm8gfSksXG4gICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJ1bFwiLCB7XG4gICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5vcHRpb25zKSxcbiAgICAgICAgaWQ6IF9jdHguYXJpYU93bnMsXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiXG4gICAgICB9LCBbXG4gICAgICAgICgkcHJvcHMuZ3JvdXBzKVxuICAgICAgICAgID8gKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMCB9LCByZW5kZXJMaXN0KF9jdHguZmcsIChncm91cCwgaSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImxpXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuZ3JvdXApLFxuICAgICAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lmdyb3VwTGFiZWwoZ3JvdXApKSxcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1wb2ludGVkXCI6IF9jdHguaXNQb2ludGVkKGdyb3VwKSxcbiAgICAgICAgICAgICAgICAgIG9uTW91c2VlbnRlcjogJGV2ZW50ID0+IChfY3R4LnNldFBvaW50ZXIoZ3JvdXApKSxcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRldmVudCA9PiAoX2N0eC5oYW5kbGVHcm91cENsaWNrKGdyb3VwKSksXG4gICAgICAgICAgICAgICAgICByb2xlOiBcIm5vbmVcIlxuICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgIHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiZ3JvdXBsYWJlbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwOiBncm91cCxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogX2N0eC5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICBpc1BvaW50ZWQ6IF9jdHguaXNQb2ludGVkXG4gICAgICAgICAgICAgICAgICB9LCAoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogZ3JvdXBbJHByb3BzLmdyb3VwTGFiZWxdXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sIDQyIC8qIENMQVNTLCBQUk9QUywgSFlEUkFURV9FVkVOVFMgKi8sIF9ob2lzdGVkXzgpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnRWTm9kZShcInVsXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5ncm91cE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF9jdHguYXJpYUdyb3VwTGFiZWwoZ3JvdXApLFxuICAgICAgICAgICAgICAgICAgcm9sZTogXCJncm91cFwiXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCBudWxsLCByZW5kZXJMaXN0KGdyb3VwLl9fVklTSUJMRV9fLCAob3B0aW9uLCBpLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwibGlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5vcHRpb24ob3B0aW9uLCBncm91cCkpLFxuICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1wb2ludGVkXCI6IF9jdHguaXNQb2ludGVkKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXNlbGVjdGVkXCI6IF9jdHguaXNTZWxlY3RlZChvcHRpb24pIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogX2N0eC5hcmlhT3B0aW9uSWQob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX2N0eC5hcmlhT3B0aW9uTGFiZWwob3B0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlZW50ZXI6ICRldmVudCA9PiAoX2N0eC5zZXRQb2ludGVyKG9wdGlvbikpLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRldmVudCA9PiAoX2N0eC5oYW5kbGVPcHRpb25DbGljayhvcHRpb24pKSxcbiAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IF9jdHguaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUG9pbnRlZDogX2N0eC5pc1BvaW50ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IF9jdHguc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogb3B0aW9uWyRwcm9wcy5sYWJlbF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzEyKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0sIDQyIC8qIENMQVNTLCBQUk9QUywgSFlEUkFURV9FVkVOVFMgKi8sIF9ob2lzdGVkXzExKSlcbiAgICAgICAgICAgICAgICAgIH0pLCAxMjggLyogS0VZRURfRlJBR01FTlQgKi8pKVxuICAgICAgICAgICAgICAgIF0sIDEwIC8qIENMQVNTLCBQUk9QUyAqLywgX2hvaXN0ZWRfMTApXG4gICAgICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pKVxuICAgICAgICAgICAgfSksIDEyOCAvKiBLRVlFRF9GUkFHTUVOVCAqLykpXG4gICAgICAgICAgOiAob3BlbkJsb2NrKHRydWUpLCBjcmVhdGVFbGVtZW50QmxvY2soRnJhZ21lbnQsIHsga2V5OiAxIH0sIHJlbmRlckxpc3QoX2N0eC5mbywgKG9wdGlvbiwgaSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImxpXCIsIHtcbiAgICAgICAgICAgICAgICBpZDogX2N0eC5hcmlhT3B0aW9uSWQob3B0aW9uKSxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX2N0eC5hcmlhT3B0aW9uTGFiZWwob3B0aW9uKSxcbiAgICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Qub3B0aW9uKG9wdGlvbikpLFxuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIFwiZGF0YS1wb2ludGVkXCI6IF9jdHguaXNQb2ludGVkKG9wdGlvbiksXG4gICAgICAgICAgICAgICAgXCJkYXRhLXNlbGVjdGVkXCI6IF9jdHguaXNTZWxlY3RlZChvcHRpb24pIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvbk1vdXNlZW50ZXI6ICRldmVudCA9PiAoX2N0eC5zZXRQb2ludGVyKG9wdGlvbikpLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICRldmVudCA9PiAoX2N0eC5oYW5kbGVPcHRpb25DbGljayhvcHRpb24pKSxcbiAgICAgICAgICAgICAgICByb2xlOiBcIm9wdGlvblwiXG4gICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IF9jdHguaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgIGlzUG9pbnRlZDogX2N0eC5pc1BvaW50ZWQsXG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IF9jdHguc2VhcmNoXG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogb3B0aW9uWyRwcm9wcy5sYWJlbF1cbiAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzE0KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0sIDQyIC8qIENMQVNTLCBQUk9QUywgSFlEUkFURV9FVkVOVFMgKi8sIF9ob2lzdGVkXzEzKSlcbiAgICAgICAgICAgIH0pLCAxMjggLyogS0VZRURfRlJBR01FTlQgKi8pKVxuICAgICAgXSwgMTAgLyogQ0xBU1MsIFBST1BTICovLCBfaG9pc3RlZF83KSxcbiAgICAgIChfY3R4Lm5vT3B0aW9ucylcbiAgICAgICAgPyByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcIm5vb3B0aW9uc1wiLCB7IGtleTogMCB9LCAoKSA9PiBbXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3Qubm9PcHRpb25zKSxcbiAgICAgICAgICAgICAgaW5uZXJIVE1MOiAkcHJvcHMubm9PcHRpb25zVGV4dFxuICAgICAgICAgICAgfSwgbnVsbCwgMTAgLyogQ0xBU1MsIFBST1BTICovLCBfaG9pc3RlZF8xNSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgICAoX2N0eC5ub1Jlc3VsdHMpXG4gICAgICAgID8gcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJub3Jlc3VsdHNcIiwgeyBrZXk6IDEgfSwgKCkgPT4gW1xuICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0Lm5vUmVzdWx0cyksXG4gICAgICAgICAgICAgIGlubmVySFRNTDogJHByb3BzLm5vUmVzdWx0c1RleHRcbiAgICAgICAgICAgIH0sIG51bGwsIDEwIC8qIENMQVNTLCBQUk9QUyAqLywgX2hvaXN0ZWRfMTYpXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgICAgKCRwcm9wcy5pbmZpbml0ZSAmJiBfY3R4Lmhhc01vcmUpXG4gICAgICAgID8gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgICAga2V5OiAyLFxuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmluaWZpbml0ZSksXG4gICAgICAgICAgICByZWY6IFwiaW5maW5pdGVMb2FkZXJcIlxuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiaW5maW5pdGVcIiwge30sICgpID0+IFtcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKF9jdHguY2xhc3NMaXN0LmluaWZpbml0ZVNwaW5uZXIpXG4gICAgICAgICAgICAgIH0sIG51bGwsIDIgLyogQ0xBU1MgKi8pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0sIDIgLyogQ0xBU1MgKi8pKVxuICAgICAgICA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImFmdGVybGlzdFwiLCB7IG9wdGlvbnM6IF9jdHguZm8gfSlcbiAgICBdLCAyIC8qIENMQVNTICovKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgSGFja3kgaW5wdXQgZWxlbWVudCB0byBzaG93IEhUTUw1IHJlcXVpcmVkIHdhcm5pbmcgXCIpLFxuICAgICgkcHJvcHMucmVxdWlyZWQpXG4gICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGtleTogOCxcbiAgICAgICAgICBjbGFzczogbm9ybWFsaXplQ2xhc3MoX2N0eC5jbGFzc0xpc3QuZmFrZUlucHV0KSxcbiAgICAgICAgICB0YWJpbmRleDogXCItMVwiLFxuICAgICAgICAgIHZhbHVlOiBfY3R4LnRleHRWYWx1ZSxcbiAgICAgICAgICByZXF1aXJlZDogXCJcIlxuICAgICAgICB9LCBudWxsLCAxMCAvKiBDTEFTUywgUFJPUFMgKi8sIF9ob2lzdGVkXzE3KSlcbiAgICAgIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKSxcbiAgICBjcmVhdGVDb21tZW50Vk5vZGUoXCIgTmF0aXZlIGlucHV0IHN1cHBvcnQgXCIpLFxuICAgICgkcHJvcHMubmF0aXZlU3VwcG9ydClcbiAgICAgID8gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soRnJhZ21lbnQsIHsga2V5OiA5IH0sIFtcbiAgICAgICAgICAoJHByb3BzLm1vZGUgPT0gJ3NpbmdsZScpXG4gICAgICAgICAgICA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgIG5hbWU6ICRwcm9wcy5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfY3R4LnBsYWluVmFsdWUgIT09IHVuZGVmaW5lZCA/IF9jdHgucGxhaW5WYWx1ZSA6ICcnXG4gICAgICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzE4KSlcbiAgICAgICAgICAgIDogKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMSB9LCByZW5kZXJMaXN0KF9jdHgucGxhaW5WYWx1ZSwgKHYsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7JHByb3BzLm5hbWV9W11gLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgICAgICBrZXk6IGlcbiAgICAgICAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xOSkpXG4gICAgICAgICAgICAgIH0pLCAxMjggLyogS0VZRURfRlJBR01FTlQgKi8pKVxuICAgICAgICBdLCA2NCAvKiBTVEFCTEVfRlJBR01FTlQgKi8pKVxuICAgICAgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpLFxuICAgIGNyZWF0ZUNvbW1lbnRWTm9kZShcIiBDcmVhdGUgaGVpZ2h0IGZvciBlbXB0eSBpbnB1dCBcIiksXG4gICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhfY3R4LmNsYXNzTGlzdC5zcGFjZXIpXG4gICAgfSwgbnVsbCwgMiAvKiBDTEFTUyAqLylcbiAgXSwgNDIgLyogQ0xBU1MsIFBST1BTLCBIWURSQVRFX0VWRU5UUyAqLywgX2hvaXN0ZWRfMSkpXG59XG5cbnNjcmlwdC5yZW5kZXIgPSByZW5kZXI7XG5zY3JpcHQuX19maWxlID0gXCJzcmMvTXVsdGlzZWxlY3QudnVlXCI7XG5cbmV4cG9ydCB7IHNjcmlwdCBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCAgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJykgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcblxuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihjYW5jZWwpIHtcbiAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgIHZhciBpO1xuICAgIHZhciBsID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgfVxuICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbiA9IGZ1bmN0aW9uKG9uZnVsZmlsbGVkKSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICB9XG5cbiAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCBjb25maWcgdXJsIGlzIG5vdCB2YWxpZCcpO1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbDtcblxuICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdmFyIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcHJvbWlzZTtcblxuICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG5cbiAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgIGNoYWluID0gY2hhaW4uY29uY2F0KHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG5cbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgdmFyIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgd2hpbGUgKHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdmFyIG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHRyeSB7XG4gICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvblJlamVjdGVkKGVycm9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdChuZXdDb25maWcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cblxuICB3aGlsZSAocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCksIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCBjb25maWcgdXJsIGlzIG5vdCB2YWxpZCcpO1xuICB9XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZCxcbiAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cblxuICBlcnJvci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgZXJyb3IuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcblxuICBlcnJvci50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWVyZ2VNYXAgPSB7XG4gICAgJ3VybCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ21ldGhvZCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2RhdGEnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdiYXNlVVJMJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVxdWVzdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlc3BvbnNlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncGFyYW1zU2VyaWFsaXplcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0TWVzc2FnZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3dpdGhDcmVkZW50aWFscyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2FkYXB0ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZVR5cGUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmQ29va2llTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25VcGxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uRG93bmxvYWRQcm9ncmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2RlY29tcHJlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Qm9keUxlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuL2NyZWF0ZUVycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb250ZXh0LCBkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9jb3JlL2VuaGFuY2VFcnJvcicpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB7XG4gICAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gICAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2VcbiAgfSxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpIHx8IChoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID09PSAnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZW5oYW5jZUVycm9yKGUsIHRoaXMsICdFX0pTT05fUEFSU0UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNS4wXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSkpO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAodG9TdHJpbmcuY2FsbCh2YWwpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaWxlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGaWxlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCbG9iKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBCbG9iXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXModmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10nO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gTG9va3VwIHRhYmxlc1xuXHQgICAgdmFyIFNCT1ggPSBbXTtcblx0ICAgIHZhciBJTlZfU0JPWCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMSA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMyA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzAgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzMgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBsb29rdXAgdGFibGVzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgZG91YmxlIHRhYmxlXG5cdCAgICAgICAgdmFyIGQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gaSA8PCAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZFtpXSA9IChpIDw8IDEpIF4gMHgxMWI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBXYWxrIEdGKDJeOClcblx0ICAgICAgICB2YXIgeCA9IDA7XG5cdCAgICAgICAgdmFyIHhpID0gMDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgc2JveFxuXHQgICAgICAgICAgICB2YXIgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KTtcblx0ICAgICAgICAgICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzO1xuXHQgICAgICAgICAgICBTQk9YW3hdID0gc3g7XG5cdCAgICAgICAgICAgIElOVl9TQk9YW3N4XSA9IHg7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBtdWx0aXBsaWNhdGlvblxuXHQgICAgICAgICAgICB2YXIgeDIgPSBkW3hdO1xuXHQgICAgICAgICAgICB2YXIgeDQgPSBkW3gyXTtcblx0ICAgICAgICAgICAgdmFyIHg4ID0gZFt4NF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9IChkW3N4XSAqIDB4MTAxKSBeIChzeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfMFt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8xW3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8yW3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8zW3hdID0gdDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGludiBzdWIgYnl0ZXMsIGludiBtaXggY29sdW1ucyB0YWJsZXNcblx0ICAgICAgICAgICAgdmFyIHQgPSAoeDggKiAweDEwMTAxMDEpIF4gKHg0ICogMHgxMDAwMSkgXiAoeDIgKiAweDEwMSkgXiAoeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzBbc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8xW3N4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNik7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbc3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfM1tzeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbmV4dCBjb3VudGVyXG5cdCAgICAgICAgICAgIGlmICgheCkge1xuXHQgICAgICAgICAgICAgICAgeCA9IHhpID0gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV07XG5cdCAgICAgICAgICAgICAgICB4aSBePSBkW2RbeGldXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFByZWNvbXB1dGVkIFJjb24gbG9va3VwXG5cdCAgICB2YXIgUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBRVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEFFUyA9IENfYWxnby5BRVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciB0O1xuXG5cdCAgICAgICAgICAgIC8vIFNraXAgcmVzZXQgb2YgblJvdW5kcyBoYXMgYmVlbiBzZXQgYmVmb3JlIGFuZCBrZXkgZGlkIG5vdCBjaGFuZ2Vcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX25Sb3VuZHMgJiYgdGhpcy5fa2V5UHJpb3JSZXNldCA9PT0gdGhpcy5fa2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleVByaW9yUmVzZXQgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBrZXkuc2lnQnl0ZXMgLyA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIHJvdW5kc1xuXHQgICAgICAgICAgICB2YXIgblJvdW5kcyA9IHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG51bWJlciBvZiBrZXkgc2NoZWR1bGUgcm93c1xuXHQgICAgICAgICAgICB2YXIga3NSb3dzID0gKG5Sb3VuZHMgKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBrZXkgc2NoZWR1bGVcblx0ICAgICAgICAgICAgdmFyIGtleVNjaGVkdWxlID0gdGhpcy5fa2V5U2NoZWR1bGUgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIga3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGtzUm93IDwga2V5U2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVdvcmRzW2tzUm93XTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gMV07XG5cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoIShrc1JvdyAlIGtleVNpemUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvdCB3b3JkXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAodCA8PCA4KSB8ICh0ID4+PiAyNCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggUmNvblxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0IF49IFJDT05bKGtzUm93IC8ga2V5U2l6ZSkgfCAwXSA8PCAyNDtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleVNpemUgPiA2ICYmIGtzUm93ICUga2V5U2l6ZSA9PSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiB3b3JkXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFt0ICYgMHhmZl07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5U2NoZWR1bGVba3NSb3cgLSBrZXlTaXplXSBeIHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGludiBrZXkgc2NoZWR1bGVcblx0ICAgICAgICAgICAgdmFyIGludktleVNjaGVkdWxlID0gdGhpcy5faW52S2V5U2NoZWR1bGUgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaW52S3NSb3cgPSAwOyBpbnZLc1JvdyA8IGtzUm93czsgaW52S3NSb3crKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtzUm93ID0ga3NSb3dzIC0gaW52S3NSb3c7XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93XTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1JvdyAtIDRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBpZiAoaW52S3NSb3cgPCA0IHx8IGtzUm93IDw9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpbnZLZXlTY2hlZHVsZVtpbnZLc1Jvd10gPSB0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBpbnZLZXlTY2hlZHVsZVtpbnZLc1Jvd10gPSBJTlZfU1VCX01JWF8wW1NCT1hbdCA+Pj4gMjRdXSBeIElOVl9TVUJfTUlYXzFbU0JPWFsodCA+Pj4gMTYpICYgMHhmZl1dIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZfU1VCX01JWF8yW1NCT1hbKHQgPj4+IDgpICYgMHhmZl1dIF4gSU5WX1NVQl9NSVhfM1tTQk9YW3QgJiAweGZmXV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX2tleVNjaGVkdWxlLCBTVUJfTUlYXzAsIFNVQl9NSVhfMSwgU1VCX01JWF8yLCBTVUJfTUlYXzMsIFNCT1gpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX2ludktleVNjaGVkdWxlLCBJTlZfU1VCX01JWF8wLCBJTlZfU1VCX01JWF8xLCBJTlZfU1VCX01JWF8yLCBJTlZfU1VCX01JWF8zLCBJTlZfU0JPWCk7XG5cblx0ICAgICAgICAgICAgLy8gSW52IHN3YXAgMm5kIGFuZCA0dGggcm93c1xuXHQgICAgICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvQ3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCwga2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgblJvdW5kcyA9IHRoaXMuX25Sb3VuZHM7XG5cblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0LCBhZGQgcm91bmQga2V5XG5cdCAgICAgICAgICAgIHZhciBzMCA9IE1bb2Zmc2V0XSAgICAgXiBrZXlTY2hlZHVsZVswXTtcblx0ICAgICAgICAgICAgdmFyIHMxID0gTVtvZmZzZXQgKyAxXSBeIGtleVNjaGVkdWxlWzFdO1xuXHQgICAgICAgICAgICB2YXIgczIgPSBNW29mZnNldCArIDJdIF4ga2V5U2NoZWR1bGVbMl07XG5cdCAgICAgICAgICAgIHZhciBzMyA9IE1bb2Zmc2V0ICsgM10gXiBrZXlTY2hlZHVsZVszXTtcblxuXHQgICAgICAgICAgICAvLyBLZXkgc2NoZWR1bGUgcm93IGNvdW50ZXJcblx0ICAgICAgICAgICAgdmFyIGtzUm93ID0gNDtcblxuXHQgICAgICAgICAgICAvLyBSb3VuZHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgcm91bmQgPSAxOyByb3VuZCA8IG5Sb3VuZHM7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgbWl4IGNvbHVtbnMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgICAgIHZhciB0MCA9IFNVQl9NSVhfMFtzMCA+Pj4gMjRdIF4gU1VCX01JWF8xWyhzMSA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYXzJbKHMyID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWF8zW3MzICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IFNVQl9NSVhfMFtzMSA+Pj4gMjRdIF4gU1VCX01JWF8xWyhzMiA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYXzJbKHMzID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWF8zW3MwICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IFNVQl9NSVhfMFtzMiA+Pj4gMjRdIF4gU1VCX01JWF8xWyhzMyA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYXzJbKHMwID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWF8zW3MxICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MyA9IFNVQl9NSVhfMFtzMyA+Pj4gMjRdIF4gU1VCX01JWF8xWyhzMCA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYXzJbKHMxID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWF8zW3MyICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlXG5cdCAgICAgICAgICAgICAgICBzMCA9IHQwO1xuXHQgICAgICAgICAgICAgICAgczEgPSB0MTtcblx0ICAgICAgICAgICAgICAgIHMyID0gdDI7XG5cdCAgICAgICAgICAgICAgICBzMyA9IHQzO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBhZGQgcm91bmQga2V5XG5cdCAgICAgICAgICAgIHZhciB0MCA9ICgoU0JPWFtzMCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMSA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMyID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMyAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDEgPSAoKFNCT1hbczEgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczIgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMyA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczAgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQyID0gKChTQk9YW3MyID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMzID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczAgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MxICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MyA9ICgoU0JPWFtzMyA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMxID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMiAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBvdXRwdXRcblx0ICAgICAgICAgICAgTVtvZmZzZXRdICAgICA9IHQwO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gdDE7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMl0gPSB0Mjtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAyNTYvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5BRVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKEFFUyk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuQUVTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9ldnBrZGZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0Q3J5cHRvSlMubGliLkNpcGhlciB8fCAoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoaXMgY2lwaGVyJ3Mga2V5IHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl2U2l6ZSBUaGlzIGNpcGhlcidzIElWIHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9FTkNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0RFQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGRlY3J5cHRpb24gbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlciA9IENfbGliLkNpcGhlciA9IEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gaXYgVGhlIElWIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCgpLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVFbmNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fRU5DX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVEZWNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Zm9ybU1vZGUgRWl0aGVyIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdHJhbnNvcm1hdGlvbiBtb2RlIGNvbnN0YW50LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlKENyeXB0b0pTLmFsZ28uQUVTLl9FTkNfWEZPUk1fTU9ERSwga2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoeGZvcm1Nb2RlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBTdG9yZSB0cmFuc2Zvcm0gbW9kZSBhbmQga2V5XG5cdCAgICAgICAgICAgIHRoaXMuX3hmb3JtTW9kZSA9IHhmb3JtTW9kZTtcblx0ICAgICAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGNpcGhlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgY2lwaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBkYXRhIHRvIGJlIGVuY3J5cHRlZCBvciBkZWNyeXB0ZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGFVcGRhdGUgVGhlIGRhdGEgdG8gZW5jcnlwdCBvciBkZWNyeXB0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGF0YSBhZnRlciBwcm9jZXNzaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3MoJ2RhdGEnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGF2YWlsYWJsZSBibG9ja3Ncblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gcHJvY2Vzcy5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBmaW5hbCBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgZmluYWwgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgZGF0YSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZERhdGEgPSB0aGlzLl9kb0ZpbmFsaXplKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkRGF0YTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBfRU5DX1hGT1JNX01PREU6IDEsXG5cblx0ICAgICAgICBfREVDX1hGT1JNX01PREU6IDIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHNob3J0Y3V0IGZ1bmN0aW9ucyB0byBhIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHdpdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBzaG9ydGN1dCBmdW5jdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBBRVMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5BRVMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFzc3dvcmRCYXNlZENpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZUNpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2lwaGVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0Q2lwaGVyU3RyYXRlZ3koa2V5KS5lbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0oKSlcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2Ugc3RyZWFtIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxICgzMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkQmxvY2tzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDFcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGUgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19tb2RlID0gQy5tb2RlID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgbW9kZSB0ZW1wbGF0ZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyTW9kZSA9IENfbGliLkJsb2NrQ2lwaGVyTW9kZSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZW5jcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZUVuY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBtb2RlIGZvciBkZWNyeXB0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuY3JlYXRlRGVjcnlwdG9yKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNyZWF0ZURlY3J5cHRvcjogZnVuY3Rpb24gKGNpcGhlciwgaXYpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlciA9IGNpcGhlcjtcblx0ICAgICAgICAgICAgdGhpcy5faXYgPSBpdjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENCQyA9IENfbW9kZS5DQkMgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFic3RyYWN0IGJhc2UgQ0JDIG1vZGUuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdmFyIENCQyA9IEJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBlbmNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkVuY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFhPUiBhbmQgZW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBkZWNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkRlY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRGVjcnlwdCBhbmQgWE9SXG5cdCAgICAgICAgICAgICAgICBjaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBUaGlzIGJsb2NrIGJlY29tZXMgdGhlIHByZXZpb3VzIGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGZ1bmN0aW9uIHhvckJsb2NrKHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICB2YXIgYmxvY2s7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gaXY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSB0aGlzLl9wcmV2QmxvY2s7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBYT1IgYmxvY2tzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGJsb2NrW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIENCQztcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFkZGluZyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3BhZCA9IEMucGFkID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogUEtDUyAjNS83IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQa2NzNyA9IENfcGFkLlBrY3M3ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFBhZHMgZGF0YSB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gcGFkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG11bHRpcGxlIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIHBhZGRlZCB0by5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnBhZCh3b3JkQXJyYXksIDQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZyB3b3JkXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZCA9IChuUGFkZGluZ0J5dGVzIDw8IDI0KSB8IChuUGFkZGluZ0J5dGVzIDw8IDE2KSB8IChuUGFkZGluZ0J5dGVzIDw8IDgpIHwgblBhZGRpbmdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBhZGRpbmdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nV29yZHMucHVzaChwYWRkaW5nV29yZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBXb3JkQXJyYXkuY3JlYXRlKHBhZGRpbmdXb3JkcywgblBhZGRpbmdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5jb25jYXQocGFkZGluZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVucGFkcyBkYXRhIHRoYXQgaGFkIGJlZW4gcGFkZGVkIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byB1bnBhZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnVucGFkKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdGhpcyBjaXBoZXIgb3BlcmF0ZXMgb24uIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB0byB1c2UuIERlZmF1bHQ6IENCQ1xuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7UGFkZGluZ30gcGFkZGluZyBUaGUgcGFkZGluZyBzdHJhdGVneSB0byB1c2UuIERlZmF1bHQ6IFBrY3M3XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIG1vZGU6IENCQyxcblx0ICAgICAgICAgICAgcGFkZGluZzogUGtjczdcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBjaXBoZXJcblx0ICAgICAgICAgICAgQ2lwaGVyLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gY2ZnLml2O1xuXHQgICAgICAgICAgICB2YXIgbW9kZSA9IGNmZy5tb2RlO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGJsb2NrIG1vZGVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgbW9kZUNyZWF0b3IgPSBtb2RlLmNyZWF0ZUVuY3J5cHRvcjtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuY2ZnLnBhZGRpbmc7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWxpemVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgLy8gUGFkIGRhdGFcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmcucGFkKHRoaXMuX2RhdGEsIHRoaXMuYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVbnBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnVucGFkKGZpbmFsUHJvY2Vzc2VkQmxvY2tzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY29sbGVjdGlvbiBvZiBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gY2lwaGVydGV4dCBUaGUgcmF3IGNpcGhlcnRleHQuXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkgdG8gdGhpcyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IHNhbHQgVGhlIHNhbHQgdXNlZCB3aXRoIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge0NpcGhlcn0gYWxnb3JpdGhtIFRoZSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc2NoZW1lIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIuXG5cdCAgICAgKiBAcHJvcGVydHkge0Zvcm1hdH0gZm9ybWF0dGVyIFRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaXBoZXJQYXJhbXMgQW4gb2JqZWN0IHdpdGggYW55IG9mIHRoZSBwb3NzaWJsZSBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmxpYi5DaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgKiAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBrZXk6IGtleVdvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIGl2OiBpdldvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIHNhbHQ6IHNhbHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBhbGdvcml0aG06IENyeXB0b0pTLmFsZ28uQUVTLFxuXHQgICAgICAgICAqICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXG5cdCAgICAgICAgICogICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUEtDUzcsXG5cdCAgICAgICAgICogICAgICAgICBibG9ja1NpemU6IDQsXG5cdCAgICAgICAgICogICAgICAgICBmb3JtYXR0ZXI6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMXG5cdCAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5taXhJbihjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR9IGZvcm1hdHRlciAoT3B0aW9uYWwpIFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZ2lmaWVkIGNpcGhlciBwYXJhbXMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAdGhyb3dzIEVycm9yIElmIG5laXRoZXIgdGhlIGZvcm1hdHRlciBub3IgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGlzIHNldC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcyArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMudG9TdHJpbmcoQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZm9ybWF0dGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZm9ybWF0dGVyIHx8IHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRm9ybWF0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGZvcm1hdHRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMRm9ybWF0dGVyID0gQ19mb3JtYXQuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBvcGVuU1NMU3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wuc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHZhciB3b3JkQXJyYXk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBzYWx0ID0gY2lwaGVyUGFyYW1zLnNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gRm9ybWF0XG5cdCAgICAgICAgICAgIGlmIChzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRBcnJheSA9IGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gd29yZEFycmF5LnRvU3RyaW5nKEJhc2U2NCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVuU1NMU3RyIFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTC5wYXJzZShvcGVuU1NMU3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKG9wZW5TU0xTdHIpIHtcblx0ICAgICAgICAgICAgdmFyIHNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gUGFyc2UgYmFzZTY0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gQmFzZTY0LnBhcnNlKG9wZW5TU0xTdHIpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0V29yZHMgPSBjaXBoZXJ0ZXh0LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFRlc3QgZm9yIHNhbHRcblx0ICAgICAgICAgICAgaWYgKGNpcGhlcnRleHRXb3Jkc1swXSA9PSAweDUzNjE2Yzc0ICYmIGNpcGhlcnRleHRXb3Jkc1sxXSA9PSAweDY1NjQ1ZjVmKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNhbHRcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkuY3JlYXRlKGNpcGhlcnRleHRXb3Jkcy5zbGljZSgyLCA0KSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzYWx0IGZyb20gY2lwaGVydGV4dFxuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dFdvcmRzLnNwbGljZSgwLCA0KTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQuc2lnQnl0ZXMgLT0gMTY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNpcGhlciB3cmFwcGVyIHRoYXQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgU2VyaWFsaXphYmxlQ2lwaGVyID0gQ19saWIuU2VyaWFsaXphYmxlQ2lwaGVyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCBjaXBoZXIgcGFyYW0gb2JqZWN0cyB0byBhbmQgZnJvbSBhIHN0cmluZy4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBmb3JtYXQ6IE9wZW5TU0xGb3JtYXR0ZXJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBlbmNyeXB0b3IgPSBjaXBoZXIuY3JlYXRlRW5jcnlwdG9yKGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0b3IuZmluYWxpemUobWVzc2FnZSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlckNmZyA9IGVuY3J5cHRvci5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoe1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dCxcblx0ICAgICAgICAgICAgICAgIGtleToga2V5LFxuXHQgICAgICAgICAgICAgICAgaXY6IGNpcGhlckNmZy5pdixcblx0ICAgICAgICAgICAgICAgIGFsZ29yaXRobTogY2lwaGVyLFxuXHQgICAgICAgICAgICAgICAgbW9kZTogY2lwaGVyQ2ZnLm1vZGUsXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nOiBjaXBoZXJDZmcucGFkZGluZyxcblx0ICAgICAgICAgICAgICAgIGJsb2NrU2l6ZTogY2lwaGVyLmJsb2NrU2l6ZSxcblx0ICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY2ZnLmZvcm1hdFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gY2lwaGVyLmNyZWF0ZURlY3J5cHRvcihrZXksIGNmZykuZmluYWxpemUoY2lwaGVydGV4dC5jaXBoZXJ0ZXh0KTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdG8gQ2lwaGVyUGFyYW1zLFxuXHQgICAgICAgICAqIGVsc2UgYXNzdW1lZCBDaXBoZXJQYXJhbXMgYWxyZWFkeSBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IHVuY2hhbmdlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKiBAcGFyYW0ge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZSB0byBwYXJzZSBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSB1bnNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLl9wYXJzZShjaXBoZXJ0ZXh0U3RyaW5nT3JQYXJhbXMsIGZvcm1hdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3BhcnNlOiBmdW5jdGlvbiAoY2lwaGVydGV4dCwgZm9ybWF0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY2lwaGVydGV4dCA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZShjaXBoZXJ0ZXh0LCB0aGlzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogS2V5IGRlcml2YXRpb24gZnVuY3Rpb24gbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19rZGYgPSBDLmtkZiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIE9wZW5TU0wga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMS2RmID0gQ19rZGYuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZXJpdmVzIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGRlcml2ZSBmcm9tLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXlTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBrZXkgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGl2U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUgSVYgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IChPcHRpb25hbCkgQSA2NC1iaXQgc2FsdCB0byB1c2UuIElmIG9taXR0ZWQsIGEgc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCByYW5kb21seS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdCB3aXRoIHRoZSBrZXksIElWLCBhbmQgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyLCAnc2FsdHNhbHQnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIGtleVNpemUsIGl2U2l6ZSwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSByYW5kb20gc2FsdFxuXHQgICAgICAgICAgICBpZiAoIXNhbHQpIHtcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkucmFuZG9tKDY0LzgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGtleSA9IEV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplIH0pLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIFNlcGFyYXRlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGl2ID0gV29yZEFycmF5LmNyZWF0ZShrZXkud29yZHMuc2xpY2Uoa2V5U2l6ZSksIGl2U2l6ZSAqIDQpO1xuXHQgICAgICAgICAgICBrZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsga2V5OiBrZXksIGl2OiBpdiwgc2FsdDogc2FsdCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgc2VyaWFsaXphYmxlIGNpcGhlciB3cmFwcGVyIHRoYXQgZGVyaXZlcyB0aGUga2V5IGZyb20gYSBwYXNzd29yZCxcblx0ICAgICAqIGFuZCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQYXNzd29yZEJhc2VkQ2lwaGVyID0gQ19saWIuUGFzc3dvcmRCYXNlZENpcGhlciA9IFNlcmlhbGl6YWJsZUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7S0RGfSBrZGYgVGhlIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIHRvIHVzZSB0byBnZW5lcmF0ZSBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLiBEZWZhdWx0OiBPcGVuU1NMXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBTZXJpYWxpemFibGVDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtkZjogT3BlblNTTEtkZlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRW5jcnlwdHMgYSBtZXNzYWdlIHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJyk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIHBhc3N3b3JkLCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIG1lc3NhZ2UsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIE1peCBpbiBkZXJpdmVkIHBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0Lm1peEluKGRlcml2ZWRQYXJhbXMpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUsIGNpcGhlcnRleHQuc2FsdCk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBjaXBoZXJ0ZXh0LCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0LypnbG9iYWxzIHdpbmRvdywgZ2xvYmFsLCByZXF1aXJlKi9cblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblxuXHQgICAgdmFyIGNyeXB0bztcblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdpbmRvdyAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93LmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbiB3ZWIgd29ya2VyIChCcm93c2VyKVxuXHQgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHNlbGYuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gd29ya2VyXG5cdCAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSAoZXhwZXJpbWVudGFsIElFIDExKSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubXNDcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSB3aW5kb3cubXNDcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSBnbG9iYWwgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGltcG9ydCB2aWEgcmVxdWlyZSAoTm9kZUpTKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblx0ICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICB9XG5cblx0ICAgIC8qXG5cdCAgICAgKiBDcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3Jcblx0ICAgICAqXG5cdCAgICAgKiBBcyBNYXRoLnJhbmRvbSgpIGlzIGNyeXB0b2dyYXBoaWNhbGx5IG5vdCBzYWZlIHRvIHVzZVxuXHQgICAgICovXG5cdCAgICB2YXIgY3J5cHRvU2VjdXJlUmFuZG9tSW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChjcnlwdG8pIHtcblx0ICAgICAgICAgICAgLy8gVXNlIGdldFJhbmRvbVZhbHVlcyBtZXRob2QgKEJyb3dzZXIpXG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gVXNlIHJhbmRvbUJ5dGVzIG1ldGhvZCAoTm9kZUpTKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4nKTtcblx0ICAgIH07XG5cblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsbCBvZiBPYmplY3QuY3JlYXRlXG5cblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge31cblxuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gb2JqO1xuXG5cdCAgICAgICAgICAgIHN1YnR5cGUgPSBuZXcgRigpO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gbnVsbDtcblxuXHQgICAgICAgICAgICByZXR1cm4gc3VidHlwZTtcblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhhdFNpZ0J5dGVzOyBqICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGopID4+PiAyXSA9IHRoYXRXb3Jkc1tqID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKGNyeXB0b1NlY3VyZVJhbmRvbUludCgpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBCYXNlNjQgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlNjQgPSBDX2VuYy5CYXNlNjQgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIHdvcmRBcnJheS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NENoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUxID0gKHdvcmRzW2kgPj4+IDJdICAgICAgID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICAgICAgICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMiA9ICh3b3Jkc1soaSArIDEpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMSkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTMgPSAod29yZHNbKGkgKyAyKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDIpICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlMSA8PCAxNikgfCAoYnl0ZTIgPDwgOCkgfCBieXRlMztcblxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IChqIDwgNCkgJiYgKGkgKyBqICogMC43NSA8IHNpZ0J5dGVzKTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiAoNiAqICgzIC0gaikpKSAmIDB4M2YpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRDaGFycy5sZW5ndGggJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gYmFzZTY0Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0U3RyIFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoYmFzZTY0U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGJhc2U2NFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJZ25vcmUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFkZGluZ0luZGV4ID0gYmFzZTY0U3RyLmluZGV4T2YocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdJbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRTdHJMZW5ndGggPSBwYWRkaW5nSW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHJldHVybiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApO1xuXG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSdcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgdmFyIG5CeXRlcyA9IDA7XG5cdCAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmIChpICUgNCkge1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMSA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSAtIDEpXSA8PCAoKGkgJSA0KSAqIDIpO1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB2YXIgYml0c0NvbWJpbmVkID0gYml0czEgfCBiaXRzMjtcblx0ICAgICAgICAgICAgICB3b3Jkc1tuQnl0ZXMgPj4+IDJdIHw9IGJpdHNDb21iaW5lZCA8PCAoMjQgLSAobkJ5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0dXJsIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0dXJsID0gQ19lbmMuQmFzZTY0dXJsID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1cmxTYWZlIFdoZXRoZXIgdG8gdXNlIHVybCBzYWZlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjR1cmwgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXksIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgYmFzZTY0Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTEgPSAod29yZHNbaSA+Pj4gMl0gICAgICAgPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgICAgICAgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUyID0gKHdvcmRzWyhpICsgMSkgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAxKSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMyA9ICh3b3Jkc1soaSArIDIpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMikgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzO1xuXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgKGogPCA0KSAmJiAoaSArIGogKiAwLjc1IDwgc2lnQnl0ZXMpOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+ICg2ICogKDMgLSBqKSkpICYgMHgzZikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2U2NENoYXJzLmxlbmd0aCAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBiYXNlNjRDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBCYXNlNjR1cmwgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVybFNhZmUgV2hldGhlciB0byB1c2UgdXJsIHNhZmVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0dXJsLnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIsIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElnbm9yZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0ckxlbmd0aCA9IHBhZGRpbmdJbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCk7XG5cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21hcDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Jyxcblx0ICAgICAgICBfc2FmZV9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyxcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuXHQgICAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi0xNiBCRSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjE2QkUgPSBDX2VuYy5VdGYxNiA9IENfZW5jLlV0ZjE2QkUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmMTYuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDE2IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IEJFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2LnBhcnNlKHV0ZjE2U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjE2U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNlN0ckxlbmd0aCA9IHV0ZjE2U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHV0ZjE2U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDFdIHw9IHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCB1dGYxNlN0ckxlbmd0aCAqIDIpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IExFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICBDX2VuYy5VdGYxNkxFID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjE2U3RyID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUuc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB1dGYxNkNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHN3YXBFbmRpYW4oKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmKTtcblx0ICAgICAgICAgICAgICAgIHV0ZjE2Q2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTE2IExFIHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXRmMTZTdHIgVGhlIFVURi0xNiBMRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjE2TEUucGFyc2UodXRmMTZTdHIpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gc3dhcEVuZGlhbih1dGYxNlN0ci5jaGFyQ29kZUF0KGkpIDw8ICgxNiAtIChpICUgMikgKiAxNikpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgZnVuY3Rpb24gc3dhcEVuZGlhbih3b3JkKSB7XG5cdCAgICAgICAgcmV0dXJuICgod29yZCA8PCA4KSAmIDB4ZmYwMGZmMDApIHwgKCh3b3JkID4+PiA4KSAmIDB4MDBmZjAwZmYpO1xuXHQgICAgfVxuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmVuYy5VdGYxNjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGExXCIpLCByZXF1aXJlKFwiLi9obWFjXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3NoYTFcIiwgXCIuL2htYWNcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIE1ENSA9IENfYWxnby5NRDU7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVGhpcyBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBpcyBtZWFudCB0byBjb25mb3JtIHdpdGggRVZQX0J5dGVzVG9LZXkuXG5cdCAgICAgKiB3d3cub3BlbnNzbC5vcmcvZG9jcy9jcnlwdG8vRVZQX0J5dGVzVG9LZXkuaHRtbFxuXHQgICAgICovXG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERiA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGUga2V5IHNpemUgaW4gd29yZHMgdG8gZ2VuZXJhdGUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4gRGVmYXVsdDogTUQ1XG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl0ZXJhdGlvbnMgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHBlcmZvcm0uIERlZmF1bHQ6IDFcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXHQgICAgICAgICAgICBoYXNoZXI6IE1ENSxcblx0ICAgICAgICAgICAgaXRlcmF0aW9uczogMVxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgZGVyaXZhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGNmZykge1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb21wdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQpIHtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblxuXHQgICAgICAgICAgICAvLyBJbml0IGhhc2hlclxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gY2ZnLmhhc2hlci5jcmVhdGUoKTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IFdvcmRBcnJheS5jcmVhdGUoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBrZXlTaXplID0gY2ZnLmtleVNpemU7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gY2ZnLml0ZXJhdGlvbnM7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5XG5cdCAgICAgICAgICAgIHdoaWxlIChkZXJpdmVkS2V5V29yZHMubGVuZ3RoIDwga2V5U2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShibG9jayk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBibG9jayA9IGhhc2hlci51cGRhdGUocGFzc3dvcmQpLmZpbmFsaXplKHNhbHQpO1xuXHQgICAgICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGlvbnNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIuZmluYWxpemUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZGVyaXZlZEtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBkZXJpdmVkS2V5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERlcml2ZXMgYSBrZXkgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBjb21wdXRhdGlvbi5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLkV2cEtERihwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLkV2cEtERihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAqL1xuXHQgICAgQy5FdnBLREYgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGNmZykge1xuXHQgICAgICAgIHJldHVybiBFdnBLREYuY3JlYXRlKGNmZykuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLkV2cEtERjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcztcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleDtcblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0O1xuXG5cdCAgICB2YXIgSGV4Rm9ybWF0dGVyID0gQ19mb3JtYXQuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoZSBjaXBoZXJ0ZXh0IG9mIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QgdG8gYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaGV4U3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5zdHJpbmdpZnkoY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0LnRvU3RyaW5nKEhleCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIGNpcGhlcnRleHQgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmZvcm1hdC5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGlucHV0KSB7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gSGV4LnBhcnNlKGlucHV0KTtcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZm9ybWF0LkhleDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhNQUMgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgSE1BQyA9IENfYWxnby5ITUFDID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBITUFDLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaG1hY0hhc2hlciA9IENyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoQ3J5cHRvSlMuYWxnby5TSEEyNTYsIGtleSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGhhc2hlciwga2V5KSB7XG5cdCAgICAgICAgICAgIC8vIEluaXQgaGFzaGVyXG5cdCAgICAgICAgICAgIGhhc2hlciA9IHRoaXMuX2hhc2hlciA9IG5ldyBoYXNoZXIuaW5pdCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IFV0ZjgucGFyc2Uoa2V5KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplID0gaGFzaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGhhc2hlckJsb2NrU2l6ZUJ5dGVzID0gaGFzaGVyQmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBBbGxvdyBhcmJpdHJhcnkgbGVuZ3RoIGtleXNcblx0ICAgICAgICAgICAgaWYgKGtleS5zaWdCeXRlcyA+IGhhc2hlckJsb2NrU2l6ZUJ5dGVzKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBoYXNoZXIuZmluYWxpemUoa2V5KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIGtleS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIGtleSBmb3IgaW5uZXIgYW5kIG91dGVyIHBhZHNcblx0ICAgICAgICAgICAgdmFyIG9LZXkgPSB0aGlzLl9vS2V5ID0ga2V5LmNsb25lKCk7XG5cdCAgICAgICAgICAgIHZhciBpS2V5ID0gdGhpcy5faUtleSA9IGtleS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgb0tleVdvcmRzID0gb0tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGlLZXlXb3JkcyA9IGlLZXkud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gWE9SIGtleXMgd2l0aCBwYWQgY29uc3RhbnRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFzaGVyQmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9LZXlXb3Jkc1tpXSBePSAweDVjNWM1YzVjO1xuXHQgICAgICAgICAgICAgICAgaUtleVdvcmRzW2ldIF49IDB4MzYzNjM2MzY7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb0tleS5zaWdCeXRlcyA9IGlLZXkuc2lnQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBITUFDIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldFxuXHQgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZSh0aGlzLl9pS2V5KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIEhNQUMgd2l0aCBhIG1lc3NhZ2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgVGhlIG1lc3NhZ2UgdG8gYXBwZW5kLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7SE1BQ30gVGhpcyBITUFDIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnVwZGF0ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaGVyLnVwZGF0ZShtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgSE1BQyBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBITUFDXG5cdCAgICAgICAgICAgIHZhciBpbm5lckhhc2ggPSBoYXNoZXIuZmluYWxpemUobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICB2YXIgaG1hYyA9IGhhc2hlci5maW5hbGl6ZSh0aGlzLl9vS2V5LmNsb25lKCkuY29uY2F0KGlubmVySGFzaCkpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBobWFjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIiksIHJlcXVpcmUoXCIuL2xpYi10eXBlZGFycmF5c1wiKSwgcmVxdWlyZShcIi4vZW5jLXV0ZjE2XCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0dXJsXCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL3NoYTFcIiksIHJlcXVpcmUoXCIuL3NoYTI1NlwiKSwgcmVxdWlyZShcIi4vc2hhMjI0XCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIiksIHJlcXVpcmUoXCIuL3NoYTM4NFwiKSwgcmVxdWlyZShcIi4vc2hhM1wiKSwgcmVxdWlyZShcIi4vcmlwZW1kMTYwXCIpLCByZXF1aXJlKFwiLi9obWFjXCIpLCByZXF1aXJlKFwiLi9wYmtkZjJcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIiksIHJlcXVpcmUoXCIuL21vZGUtY2ZiXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0clwiKSwgcmVxdWlyZShcIi4vbW9kZS1jdHItZ2xhZG1hblwiKSwgcmVxdWlyZShcIi4vbW9kZS1vZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtZWNiXCIpLCByZXF1aXJlKFwiLi9wYWQtYW5zaXg5MjNcIiksIHJlcXVpcmUoXCIuL3BhZC1pc28xMDEyNlwiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzk3OTcxXCIpLCByZXF1aXJlKFwiLi9wYWQtemVyb3BhZGRpbmdcIiksIHJlcXVpcmUoXCIuL3BhZC1ub3BhZGRpbmdcIiksIHJlcXVpcmUoXCIuL2Zvcm1hdC1oZXhcIiksIHJlcXVpcmUoXCIuL2Flc1wiKSwgcmVxdWlyZShcIi4vdHJpcGxlZGVzXCIpLCByZXF1aXJlKFwiLi9yYzRcIiksIHJlcXVpcmUoXCIuL3JhYmJpdFwiKSwgcmVxdWlyZShcIi4vcmFiYml0LWxlZ2FjeVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiLCBcIi4vbGliLXR5cGVkYXJyYXlzXCIsIFwiLi9lbmMtdXRmMTZcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL2VuYy1iYXNlNjR1cmxcIiwgXCIuL21kNVwiLCBcIi4vc2hhMVwiLCBcIi4vc2hhMjU2XCIsIFwiLi9zaGEyMjRcIiwgXCIuL3NoYTUxMlwiLCBcIi4vc2hhMzg0XCIsIFwiLi9zaGEzXCIsIFwiLi9yaXBlbWQxNjBcIiwgXCIuL2htYWNcIiwgXCIuL3Bia2RmMlwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiLCBcIi4vbW9kZS1jZmJcIiwgXCIuL21vZGUtY3RyXCIsIFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIsIFwiLi9tb2RlLW9mYlwiLCBcIi4vbW9kZS1lY2JcIiwgXCIuL3BhZC1hbnNpeDkyM1wiLCBcIi4vcGFkLWlzbzEwMTI2XCIsIFwiLi9wYWQtaXNvOTc5NzFcIiwgXCIuL3BhZC16ZXJvcGFkZGluZ1wiLCBcIi4vcGFkLW5vcGFkZGluZ1wiLCBcIi4vZm9ybWF0LWhleFwiLCBcIi4vYWVzXCIsIFwiLi90cmlwbGVkZXNcIiwgXCIuL3JjNFwiLCBcIi4vcmFiYml0XCIsIFwiLi9yYWJiaXQtbGVnYWN5XCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gQ2hlY2sgaWYgdHlwZWQgYXJyYXlzIGFyZSBzdXBwb3J0ZWRcblx0ICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgIH1cblxuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvLyBSZWZlcmVuY2Ugb3JpZ2luYWwgaW5pdFxuXHQgICAgdmFyIHN1cGVySW5pdCA9IFdvcmRBcnJheS5pbml0O1xuXG5cdCAgICAvLyBBdWdtZW50IFdvcmRBcnJheS5pbml0IHRvIGhhbmRsZSB0eXBlZCBhcnJheXNcblx0ICAgIHZhciBzdWJJbml0ID0gV29yZEFycmF5LmluaXQgPSBmdW5jdGlvbiAodHlwZWRBcnJheSkge1xuXHQgICAgICAgIC8vIENvbnZlcnQgYnVmZmVycyB0byB1aW50OFxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KHR5cGVkQXJyYXkpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENvbnZlcnQgb3RoZXIgYXJyYXkgdmlld3MgdG8gdWludDhcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgfHxcblx0ICAgICAgICAgICAgKHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5XG5cdCAgICAgICAgKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5LmJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5LmJ5dGVMZW5ndGgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIEhhbmRsZSBVaW50OEFycmF5XG5cdCAgICAgICAgaWYgKHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB0eXBlZEFycmF5Qnl0ZUxlbmd0aCA9IHR5cGVkQXJyYXkuYnl0ZUxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBFeHRyYWN0IGJ5dGVzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkQXJyYXlCeXRlTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IHR5cGVkQXJyYXlbaV0gPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIHdvcmQgYXJyYXlcblx0ICAgICAgICAgICAgc3VwZXJJbml0LmNhbGwodGhpcywgd29yZHMsIHR5cGVkQXJyYXlCeXRlTGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyBFbHNlIGNhbGwgbm9ybWFsIGluaXRcblx0ICAgICAgICAgICAgc3VwZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgc3ViSW5pdC5wcm90b3R5cGUgPSBXb3JkQXJyYXk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubGliLldvcmRBcnJheTtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gQ29uc3RhbnRzIHRhYmxlXG5cdCAgICB2YXIgVCA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGNvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgVFtpXSA9IChNYXRoLmFicyhNYXRoLnNpbihpICsgMSkpICogMHgxMDAwMDAwMDApIHwgMDtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1ENSBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIE1ENSA9IENfYWxnby5NRDUgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksXG5cdCAgICAgICAgICAgICAgICAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG5cdCAgICAgICAgICAgICAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldO1xuXG5cdCAgICAgICAgICAgICAgICBNW29mZnNldF9pXSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDgpICB8IChNX29mZnNldF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgMjQpIHwgKE1fb2Zmc2V0X2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzAgID0gTVtvZmZzZXQgKyAwXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEgID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzIgID0gTVtvZmZzZXQgKyAyXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzMgID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzQgID0gTVtvZmZzZXQgKyA0XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzUgID0gTVtvZmZzZXQgKyA1XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzYgID0gTVtvZmZzZXQgKyA2XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzcgID0gTVtvZmZzZXQgKyA3XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzggID0gTVtvZmZzZXQgKyA4XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzkgID0gTVtvZmZzZXQgKyA5XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEwID0gTVtvZmZzZXQgKyAxMF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMSA9IE1bb2Zmc2V0ICsgMTFdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTIgPSBNW29mZnNldCArIDEyXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEzID0gTVtvZmZzZXQgKyAxM107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xNCA9IE1bb2Zmc2V0ICsgMTRdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTUgPSBNW29mZnNldCArIDE1XTtcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhbGJlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzAsICA3LCAgVFswXSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF8xLCAgMTIsIFRbMV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgIDE3LCBUWzJdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzMsICAyMiwgVFszXSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF80LCAgNywgIFRbNF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfNSwgIDEyLCBUWzVdKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsICAxNywgVFs2XSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF83LCAgMjIsIFRbN10pO1xuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfOCwgIDcsICBUWzhdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzksICAxMiwgVFs5XSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTcsIFRbMTBdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzExLCAyMiwgVFsxMV0pO1xuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTIsIDcsICBUWzEyXSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF8xMywgMTIsIFRbMTNdKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE0LCAxNywgVFsxNF0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTUsIDIyLCBUWzE1XSk7XG5cblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEsICA1LCAgVFsxNl0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfNiwgIDksICBUWzE3XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8xMSwgMTQsIFRbMThdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzAsICAyMCwgVFsxOV0pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfNSwgIDUsICBUWzIwXSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8xMCwgOSwgIFRbMjFdKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE1LCAxNCwgVFsyMl0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfNCwgIDIwLCBUWzIzXSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF85LCAgNSwgIFRbMjRdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzE0LCA5LCAgVFsyNV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMywgIDE0LCBUWzI2XSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF84LCAgMjAsIFRbMjddKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEzLCA1LCAgVFsyOF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMiwgIDksICBUWzI5XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF83LCAgMTQsIFRbMzBdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEyLCAyMCwgVFszMV0pO1xuXG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF81LCAgNCwgIFRbMzJdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzgsICAxMSwgVFszM10pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE2LCBUWzM0XSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8xNCwgMjMsIFRbMzVdKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEsICA0LCAgVFszNl0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfNCwgIDExLCBUWzM3XSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF83LCAgMTYsIFRbMzhdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEwLCAyMywgVFszOV0pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTMsIDQsICBUWzQwXSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF8wLCAgMTEsIFRbNDFdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzMsICAxNiwgVFs0Ml0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfNiwgIDIzLCBUWzQzXSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF85LCAgNCwgIFRbNDRdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEyLCAxMSwgVFs0NV0pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTUsIDE2LCBUWzQ2XSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8yLCAgMjMsIFRbNDddKTtcblxuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfMCwgIDYsICBUWzQ4XSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF83LCAgMTAsIFRbNDldKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE0LCAxNSwgVFs1MF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfNSwgIDIxLCBUWzUxXSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNiwgIFRbNTJdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzMsICAxMCwgVFs1M10pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTAsIDE1LCBUWzU0XSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF8xLCAgMjEsIFRbNTVdKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzgsICA2LCAgVFs1Nl0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTUsIDEwLCBUWzU3XSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF82LCAgMTUsIFRbNThdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEzLCAyMSwgVFs1OV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfNCwgIDYsICBUWzYwXSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xMSwgMTAsIFRbNjFdKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzIsICAxNSwgVFs2Ml0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfOSwgIDIxLCBUWzYzXSk7XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWxIID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbEwgPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE1XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxIIDw8IDgpICB8IChuQml0c1RvdGFsSCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxIIDw8IDI0KSB8IChuQml0c1RvdGFsSCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEwgPDwgOCkgIHwgKG5CaXRzVG90YWxMID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEwgPDwgMjQpIHwgKG5CaXRzVG90YWxMID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2g7XG5cdCAgICAgICAgICAgIHZhciBIID0gaGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBIX2kgPSBIW2ldO1xuXG5cdCAgICAgICAgICAgICAgICBIW2ldID0gKCgoSF9pIDw8IDgpICB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoSF9pIDw8IDI0KSB8IChIX2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBGRihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG5cdCAgICAgICAgdmFyIG4gPSBhICsgKChiICYgYykgfCAofmIgJiBkKSkgKyB4ICsgdDtcblx0ICAgICAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBHRyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG5cdCAgICAgICAgdmFyIG4gPSBhICsgKChiICYgZCkgfCAoYyAmIH5kKSkgKyB4ICsgdDtcblx0ICAgICAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBISChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG5cdCAgICAgICAgdmFyIG4gPSBhICsgKGIgXiBjIF4gZCkgKyB4ICsgdDtcblx0ICAgICAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBJSShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG5cdCAgICAgICAgdmFyIG4gPSBhICsgKGMgXiAoYiB8IH5kKSkgKyB4ICsgdDtcblx0ICAgICAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuTUQ1KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5NRDUgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihNRDUpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY01ENShtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNNRDUgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoTUQ1KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuTUQ1O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNGQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgQ0ZCLkVuY3J5cHRvciA9IENGQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdC5jYWxsKHRoaXMsIHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBDRkIuRGVjcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFRoaXMgYmxvY2sgYmVjb21lcyB0aGUgcHJldmlvdXMgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQod29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpIHtcblx0ICAgICAgICB2YXIga2V5c3RyZWFtO1xuXG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICBrZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIENGQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNGQjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW47XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJcblx0ICAgICAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IChjb3VudGVyW2Jsb2NrU2l6ZSAtIDFdICsgMSkgfCAwXG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuRUNCO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogT3V0cHV0IEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLk9GQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgT0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IE9GQi5FbmNyeXB0b3IgPSBPRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IHRoaXMuX2tleXN0cmVhbTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIE9GQi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBPRkI7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5PRkI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBTlNJIFguOTIzIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuQW5zaVg5MjMgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhU2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgIC8vIENvbXB1dGUgbGFzdCBieXRlIHBvc2l0aW9uXG5cdCAgICAgICAgdmFyIGxhc3RCeXRlUG9zID0gZGF0YVNpZ0J5dGVzICsgblBhZGRpbmdCeXRlcyAtIDE7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNsYW1wKCk7XG5cdCAgICAgICAgZGF0YS53b3Jkc1tsYXN0Qnl0ZVBvcyA+Pj4gMl0gfD0gblBhZGRpbmdCeXRlcyA8PCAoMjQgLSAobGFzdEJ5dGVQb3MgJSA0KSAqIDgpO1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgKz0gblBhZGRpbmdCeXRlcztcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuQW5zaXg5MjM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08gMTAxMjYgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc28xMDEyNiA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oblBhZGRpbmdCeXRlcyAtIDEpKS5cblx0ICAgICAgICAgICAgIGNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbblBhZGRpbmdCeXRlcyA8PCAyNF0sIDEpKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08vSUVDIDk3OTctMSBQYWRkaW5nIE1ldGhvZCAyLlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLklzbzk3OTcxID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gQWRkIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDgwMDAwMDAwXSwgMSkpO1xuXG5cdCAgICAgICAgLy8gWmVybyBwYWQgdGhlIHJlc3Rcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcucGFkKGRhdGEsIGJsb2NrU2l6ZSk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBSZW1vdmUgemVybyBwYWRkaW5nXG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnVucGFkKGRhdGEpO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIG9uZSBtb3JlIGJ5dGUgLS0gdGhlIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMtLTtcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvOTc5NzE7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBIG5vb3AgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoKSB7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLk5vUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICBpZiAoKChkYXRhV29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTFcIiksIHJlcXVpcmUoXCIuL2htYWNcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMVwiLCBcIi4vaG1hY1wiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExO1xuXHQgICAgdmFyIEhNQUMgPSBDX2FsZ28uSE1BQztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBCS0RGMiA9IENfYWxnby5QQktERjIgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlLiBEZWZhdWx0OiBTSEExXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl0ZXJhdGlvbnMgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHBlcmZvcm0uIERlZmF1bHQ6IDFcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXHQgICAgICAgICAgICBoYXNoZXI6IFNIQTEsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblxuXHQgICAgICAgICAgICAvLyBJbml0IEhNQUNcblx0ICAgICAgICAgICAgdmFyIGhtYWMgPSBITUFDLmNyZWF0ZShjZmcuaGFzaGVyLCBwYXNzd29yZCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4ID0gV29yZEFycmF5LmNyZWF0ZShbMHgwMDAwMDAwMV0pO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleVdvcmRzID0gZGVyaXZlZEtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrSW5kZXhXb3JkcyA9IGJsb2NrSW5kZXgud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBrZXlTaXplID0gY2ZnLmtleVNpemU7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gY2ZnLml0ZXJhdGlvbnM7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5XG5cdCAgICAgICAgICAgIHdoaWxlIChkZXJpdmVkS2V5V29yZHMubGVuZ3RoIDwga2V5U2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gaG1hYy51cGRhdGUoc2FsdCkuZmluYWxpemUoYmxvY2tJbmRleCk7XG5cdCAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrV29yZHMgPSBibG9jay53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzTGVuZ3RoID0gYmxvY2tXb3Jkcy5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGlvbnNcblx0ICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGUgPSBibG9jaztcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW50ZXJtZWRpYXRlID0gaG1hYy5maW5hbGl6ZShpbnRlcm1lZGlhdGUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGhtYWMucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVybWVkaWF0ZVdvcmRzID0gaW50ZXJtZWRpYXRlLndvcmRzO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gWE9SIGludGVybWVkaWF0ZSB3aXRoIGJsb2NrXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBibG9ja1dvcmRzTGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tXb3Jkc1tqXSBePSBpbnRlcm1lZGlhdGVXb3Jkc1tqXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGRlcml2ZWRLZXkuY29uY2F0KGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgIGJsb2NrSW5kZXhXb3Jkc1swXSsrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDb21wdXRlcyB0aGUgUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMi5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5QQktERjIocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5QQktERjIocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuUEJLREYyID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gUEJLREYyLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5QQktERjI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBTICA9IFtdO1xuXHQgICAgdmFyIENfID0gW107XG5cdCAgICB2YXIgRyAgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSYWJiaXQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKlxuXHQgICAgICogVGhpcyBpcyBhIGxlZ2FjeSB2ZXJzaW9uIHRoYXQgbmVnbGVjdGVkIHRvIGNvbnZlcnQgdGhlIGtleSB0byBsaXR0bGUtZW5kaWFuLlxuXHQgICAgICogVGhpcyBlcnJvciBkb2Vzbid0IGFmZmVjdCB0aGUgY2lwaGVyJ3Mgc2VjdXJpdHksXG5cdCAgICAgKiBidXQgaXQgZG9lcyBhZmZlY3QgaXRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXRMZWdhY3kgPSBDX2FsZ28uUmFiYml0TGVnYWN5ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbXG5cdCAgICAgICAgICAgICAgICBLWzBdLCAoS1szXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1sxXSwgKEtbMF0gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMl0sIChLWzFdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzNdLCAoS1syXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgQyA9IHRoaXMuX0MgPSBbXG5cdCAgICAgICAgICAgICAgICAoS1syXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLCAoS1swXSAmIDB4ZmZmZjAwMDApIHwgKEtbMV0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzNdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksIChLWzFdICYgMHhmZmZmMDAwMCkgfCAoS1syXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMF0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSwgKEtbMl0gJiAweGZmZmYwMDAwKSB8IChLWzNdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1sxXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpLCAoS1szXSAmIDB4ZmZmZjAwMDApIHwgKEtbMF0gJiAweDAwMDBmZmZmKVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIENhcnJ5IGJpdFxuXHQgICAgICAgICAgICB0aGlzLl9iID0gMDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvdW50ZXJzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBDW2ldIF49IFhbKGkgKyA0KSAmIDddO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSVYgc2V0dXBcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8xID0gSVZbMV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIgc3VidmVjdG9yc1xuXHQgICAgICAgICAgICAgICAgdmFyIGkwID0gKCgoSVZfMCA8PCA4KSB8IChJVl8wID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8wIDw8IDI0KSB8IChJVl8wID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMiA9ICgoKElWXzEgPDwgOCkgfCAoSVZfMSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMSA8PCAyNCkgfCAoSVZfMSA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTEgPSAoaTAgPj4+IDE2KSB8IChpMiAmIDB4ZmZmZjAwMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkzID0gKGkyIDw8IDE2KSAgfCAoaTAgJiAweDAwMDBmZmZmKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICBDWzBdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1sxXSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbMl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzNdIF49IGkzO1xuXHQgICAgICAgICAgICAgICAgQ1s0XSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbNV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzZdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1s3XSBePSBpMztcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblx0ICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblx0ICAgICAgICAgICAgU1swXSA9IFhbMF0gXiAoWFs1XSA+Pj4gMTYpIF4gKFhbM10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzFdID0gWFsyXSBeIChYWzddID4+PiAxNikgXiAoWFs1XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMl0gPSBYWzRdIF4gKFhbMV0gPj4+IDE2KSBeIChYWzddIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1szXSA9IFhbNl0gXiAoWFszXSA+Pj4gMTYpIF4gKFhbMV0gPDwgMTYpO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgU1tpXSA9ICgoKFNbaV0gPDwgOCkgIHwgKFNbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoU1tpXSA8PCAyNCkgfCAoU1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgICAgICBNW29mZnNldCArIGldIF49IFNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblx0ICAgICAgICB2YXIgQyA9IHRoaXMuX0M7XG5cblx0ICAgICAgICAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIENfW2ldID0gQ1tpXTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgQ1swXSA9IChDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IpIHwgMDtcblx0ICAgICAgICBDWzFdID0gKENbMV0gKyAweGQzNGQzNGQzICsgKChDWzBdID4+PiAwKSA8IChDX1swXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzJdID0gKENbMl0gKyAweDM0ZDM0ZDM0ICsgKChDWzFdID4+PiAwKSA8IChDX1sxXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzNdID0gKENbM10gKyAweDRkMzRkMzRkICsgKChDWzJdID4+PiAwKSA8IChDX1syXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzRdID0gKENbNF0gKyAweGQzNGQzNGQzICsgKChDWzNdID4+PiAwKSA8IChDX1szXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzVdID0gKENbNV0gKyAweDM0ZDM0ZDM0ICsgKChDWzRdID4+PiAwKSA8IChDX1s0XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzZdID0gKENbNl0gKyAweDRkMzRkMzRkICsgKChDWzVdID4+PiAwKSA8IChDX1s1XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzddID0gKENbN10gKyAweGQzNGQzNGQzICsgKChDWzZdID4+PiAwKSA8IChDX1s2XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICB0aGlzLl9iID0gKENbN10gPj4+IDApIDwgKENfWzddID4+PiAwKSA/IDEgOiAwO1xuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBnLXZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuXHQgICAgICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7XG5cblx0ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdoID0gKCgoKGdhICogZ2EpID4+PiAxNykgKyBnYSAqIGdiKSA+Pj4gMTUpICsgZ2IgKiBnYjtcblx0ICAgICAgICAgICAgdmFyIGdsID0gKCgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4KSB8IDApICsgKCgoZ3ggJiAweDAwMDBmZmZmKSAqIGd4KSB8IDApO1xuXG5cdCAgICAgICAgICAgIC8vIEhpZ2ggWE9SIGxvd1xuXHQgICAgICAgICAgICBHW2ldID0gZ2ggXiBnbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXRlIHZhbHVlc1xuXHQgICAgICAgIFhbMF0gPSAoR1swXSArICgoR1s3XSA8PCAxNikgfCAoR1s3XSA+Pj4gMTYpKSArICgoR1s2XSA8PCAxNikgfCAoR1s2XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbMV0gPSAoR1sxXSArICgoR1swXSA8PCA4KSAgfCAoR1swXSA+Pj4gMjQpKSArIEdbN10pIHwgMDtcblx0ICAgICAgICBYWzJdID0gKEdbMl0gKyAoKEdbMV0gPDwgMTYpIHwgKEdbMV0gPj4+IDE2KSkgKyAoKEdbMF0gPDwgMTYpIHwgKEdbMF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzNdID0gKEdbM10gKyAoKEdbMl0gPDwgOCkgIHwgKEdbMl0gPj4+IDI0KSkgKyBHWzFdKSB8IDA7XG5cdCAgICAgICAgWFs0XSA9IChHWzRdICsgKChHWzNdIDw8IDE2KSB8IChHWzNdID4+PiAxNikpICsgKChHWzJdIDw8IDE2KSB8IChHWzJdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs1XSA9IChHWzVdICsgKChHWzRdIDw8IDgpICB8IChHWzRdID4+PiAyNCkpICsgR1szXSkgfCAwO1xuXHQgICAgICAgIFhbNl0gPSAoR1s2XSArICgoR1s1XSA8PCAxNikgfCAoR1s1XSA+Pj4gMTYpKSArICgoR1s0XSA8PCAxNikgfCAoR1s0XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbN10gPSAoR1s3XSArICgoR1s2XSA8PCA4KSAgfCAoR1s2XSA+Pj4gMjQpKSArIEdbNV0pIHwgMDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXRMZWdhY3kuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SYWJiaXRMZWdhY3kuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUmFiYml0TGVnYWN5ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUmFiYml0TGVnYWN5KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SYWJiaXRMZWdhY3k7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBTICA9IFtdO1xuXHQgICAgdmFyIENfID0gW107XG5cdCAgICB2YXIgRyAgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSYWJiaXQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG1cblx0ICAgICAqL1xuXHQgICAgdmFyIFJhYmJpdCA9IENfYWxnby5SYWJiaXQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBLW2ldID0gKCgoS1tpXSA8PCA4KSAgfCAoS1tpXSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChLW2ldIDw8IDI0KSB8IChLW2ldID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbXG5cdCAgICAgICAgICAgICAgICBLWzBdLCAoS1szXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1sxXSwgKEtbMF0gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMl0sIChLWzFdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzNdLCAoS1syXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgQyA9IHRoaXMuX0MgPSBbXG5cdCAgICAgICAgICAgICAgICAoS1syXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLCAoS1swXSAmIDB4ZmZmZjAwMDApIHwgKEtbMV0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzNdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksIChLWzFdICYgMHhmZmZmMDAwMCkgfCAoS1syXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMF0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSwgKEtbMl0gJiAweGZmZmYwMDAwKSB8IChLWzNdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1sxXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpLCAoS1szXSAmIDB4ZmZmZjAwMDApIHwgKEtbMF0gJiAweDAwMDBmZmZmKVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIENhcnJ5IGJpdFxuXHQgICAgICAgICAgICB0aGlzLl9iID0gMDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvdW50ZXJzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBDW2ldIF49IFhbKGkgKyA0KSAmIDddO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSVYgc2V0dXBcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8xID0gSVZbMV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIgc3VidmVjdG9yc1xuXHQgICAgICAgICAgICAgICAgdmFyIGkwID0gKCgoSVZfMCA8PCA4KSB8IChJVl8wID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8wIDw8IDI0KSB8IChJVl8wID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMiA9ICgoKElWXzEgPDwgOCkgfCAoSVZfMSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMSA8PCAyNCkgfCAoSVZfMSA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTEgPSAoaTAgPj4+IDE2KSB8IChpMiAmIDB4ZmZmZjAwMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkzID0gKGkyIDw8IDE2KSAgfCAoaTAgJiAweDAwMDBmZmZmKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICBDWzBdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1sxXSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbMl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzNdIF49IGkzO1xuXHQgICAgICAgICAgICAgICAgQ1s0XSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbNV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzZdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1s3XSBePSBpMztcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblx0ICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblx0ICAgICAgICAgICAgU1swXSA9IFhbMF0gXiAoWFs1XSA+Pj4gMTYpIF4gKFhbM10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzFdID0gWFsyXSBeIChYWzddID4+PiAxNikgXiAoWFs1XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMl0gPSBYWzRdIF4gKFhbMV0gPj4+IDE2KSBeIChYWzddIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1szXSA9IFhbNl0gXiAoWFszXSA+Pj4gMTYpIF4gKFhbMV0gPDwgMTYpO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgU1tpXSA9ICgoKFNbaV0gPDwgOCkgIHwgKFNbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoU1tpXSA8PCAyNCkgfCAoU1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgICAgICBNW29mZnNldCArIGldIF49IFNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblx0ICAgICAgICB2YXIgQyA9IHRoaXMuX0M7XG5cblx0ICAgICAgICAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIENfW2ldID0gQ1tpXTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgQ1swXSA9IChDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IpIHwgMDtcblx0ICAgICAgICBDWzFdID0gKENbMV0gKyAweGQzNGQzNGQzICsgKChDWzBdID4+PiAwKSA8IChDX1swXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzJdID0gKENbMl0gKyAweDM0ZDM0ZDM0ICsgKChDWzFdID4+PiAwKSA8IChDX1sxXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzNdID0gKENbM10gKyAweDRkMzRkMzRkICsgKChDWzJdID4+PiAwKSA8IChDX1syXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzRdID0gKENbNF0gKyAweGQzNGQzNGQzICsgKChDWzNdID4+PiAwKSA8IChDX1szXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzVdID0gKENbNV0gKyAweDM0ZDM0ZDM0ICsgKChDWzRdID4+PiAwKSA8IChDX1s0XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzZdID0gKENbNl0gKyAweDRkMzRkMzRkICsgKChDWzVdID4+PiAwKSA8IChDX1s1XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzddID0gKENbN10gKyAweGQzNGQzNGQzICsgKChDWzZdID4+PiAwKSA8IChDX1s2XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICB0aGlzLl9iID0gKENbN10gPj4+IDApIDwgKENfWzddID4+PiAwKSA/IDEgOiAwO1xuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBnLXZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuXHQgICAgICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7XG5cblx0ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdoID0gKCgoKGdhICogZ2EpID4+PiAxNykgKyBnYSAqIGdiKSA+Pj4gMTUpICsgZ2IgKiBnYjtcblx0ICAgICAgICAgICAgdmFyIGdsID0gKCgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4KSB8IDApICsgKCgoZ3ggJiAweDAwMDBmZmZmKSAqIGd4KSB8IDApO1xuXG5cdCAgICAgICAgICAgIC8vIEhpZ2ggWE9SIGxvd1xuXHQgICAgICAgICAgICBHW2ldID0gZ2ggXiBnbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXRlIHZhbHVlc1xuXHQgICAgICAgIFhbMF0gPSAoR1swXSArICgoR1s3XSA8PCAxNikgfCAoR1s3XSA+Pj4gMTYpKSArICgoR1s2XSA8PCAxNikgfCAoR1s2XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbMV0gPSAoR1sxXSArICgoR1swXSA8PCA4KSAgfCAoR1swXSA+Pj4gMjQpKSArIEdbN10pIHwgMDtcblx0ICAgICAgICBYWzJdID0gKEdbMl0gKyAoKEdbMV0gPDwgMTYpIHwgKEdbMV0gPj4+IDE2KSkgKyAoKEdbMF0gPDwgMTYpIHwgKEdbMF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzNdID0gKEdbM10gKyAoKEdbMl0gPDwgOCkgIHwgKEdbMl0gPj4+IDI0KSkgKyBHWzFdKSB8IDA7XG5cdCAgICAgICAgWFs0XSA9IChHWzRdICsgKChHWzNdIDw8IDE2KSB8IChHWzNdID4+PiAxNikpICsgKChHWzJdIDw8IDE2KSB8IChHWzJdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs1XSA9IChHWzVdICsgKChHWzRdIDw8IDgpICB8IChHWzRdID4+PiAyNCkpICsgR1szXSkgfCAwO1xuXHQgICAgICAgIFhbNl0gPSAoR1s2XSArICgoR1s1XSA8PCAxNikgfCAoR1s1XSA+Pj4gMTYpKSArICgoR1s0XSA8PCAxNikgfCAoR1s0XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbN10gPSAoR1s3XSArICgoR1s2XSA8PCA4KSAgfCAoR1s2XSA+Pj4gMjQpKSArIEdbNV0pIHwgMDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SYWJiaXQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUmFiYml0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUmFiYml0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SYWJiaXQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8qKlxuXHQgICAgICogUkM0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUkM0ID0gQ19hbGdvLlJDNCA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBrZXlTaWdCeXRlcyA9IGtleS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBJbml0IHNib3hcblx0ICAgICAgICAgICAgdmFyIFMgPSB0aGlzLl9TID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIFNbaV0gPSBpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gS2V5IHNldHVwXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qnl0ZUluZGV4ID0gaSAlIGtleVNpZ0J5dGVzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJ5dGUgPSAoa2V5V29yZHNba2V5Qnl0ZUluZGV4ID4+PiAyXSA+Pj4gKDI0IC0gKGtleUJ5dGVJbmRleCAlIDQpICogOCkpICYgMHhmZjtcblxuXHQgICAgICAgICAgICAgICAgaiA9IChqICsgU1tpXSArIGtleUJ5dGUpICUgMjU2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICB2YXIgdCA9IFNbaV07XG5cdCAgICAgICAgICAgICAgICBTW2ldID0gU1tqXTtcblx0ICAgICAgICAgICAgICAgIFNbal0gPSB0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnRlcnNcblx0ICAgICAgICAgICAgdGhpcy5faSA9IHRoaXMuX2ogPSAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgTVtvZmZzZXRdIF49IGdlbmVyYXRlS2V5c3RyZWFtV29yZC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAyNTYvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBnZW5lcmF0ZUtleXN0cmVhbVdvcmQoKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgdmFyIFMgPSB0aGlzLl9TO1xuXHQgICAgICAgIHZhciBpID0gdGhpcy5faTtcblx0ICAgICAgICB2YXIgaiA9IHRoaXMuX2o7XG5cblx0ICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW0gd29yZFxuXHQgICAgICAgIHZhciBrZXlzdHJlYW1Xb3JkID0gMDtcblx0ICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IDQ7IG4rKykge1xuXHQgICAgICAgICAgICBpID0gKGkgKyAxKSAlIDI1Njtcblx0ICAgICAgICAgICAgaiA9IChqICsgU1tpXSkgJSAyNTY7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICB2YXIgdCA9IFNbaV07XG5cdCAgICAgICAgICAgIFNbaV0gPSBTW2pdO1xuXHQgICAgICAgICAgICBTW2pdID0gdDtcblxuXHQgICAgICAgICAgICBrZXlzdHJlYW1Xb3JkIHw9IFNbKFNbaV0gKyBTW2pdKSAlIDI1Nl0gPDwgKDI0IC0gbiAqIDgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFVwZGF0ZSBjb3VudGVyc1xuXHQgICAgICAgIHRoaXMuX2kgPSBpO1xuXHQgICAgICAgIHRoaXMuX2ogPSBqO1xuXG5cdCAgICAgICAgcmV0dXJuIGtleXN0cmVhbVdvcmQ7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUkM0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJDNCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJDNCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogTW9kaWZpZWQgUkM0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUkM0RHJvcCA9IENfYWxnby5SQzREcm9wID0gUkM0LmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGRyb3AgVGhlIG51bWJlciBvZiBrZXlzdHJlYW0gd29yZHMgdG8gZHJvcC4gRGVmYXVsdCAxOTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IFJDNC5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgZHJvcDogMTkyXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBSQzQuX2RvUmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBEcm9wXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmNmZy5kcm9wOyBpID4gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbVdvcmQuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJDNERyb3AuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SQzREcm9wLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJDNERyb3AgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzREcm9wKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SQzQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKiBAcHJlc2VydmVcblx0KGMpIDIwMTIgYnkgQ8OpZHJpYyBNZXNuaWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblx0UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG5cdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5cdFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblx0Ki9cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBfemwgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuXHQgICAgICAgIDcsICA0LCAxMywgIDEsIDEwLCAgNiwgMTUsICAzLCAxMiwgIDAsICA5LCAgNSwgIDIsIDE0LCAxMSwgIDgsXG5cdCAgICAgICAgMywgMTAsIDE0LCAgNCwgIDksIDE1LCAgOCwgIDEsICAyLCAgNywgIDAsICA2LCAxMywgMTEsICA1LCAxMixcblx0ICAgICAgICAxLCAgOSwgMTEsIDEwLCAgMCwgIDgsIDEyLCAgNCwgMTMsICAzLCAgNywgMTUsIDE0LCAgNSwgIDYsICAyLFxuXHQgICAgICAgIDQsICAwLCAgNSwgIDksICA3LCAxMiwgIDIsIDEwLCAxNCwgIDEsICAzLCAgOCwgMTEsICA2LCAxNSwgMTNdKTtcblx0ICAgIHZhciBfenIgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICA1LCAxNCwgIDcsICAwLCAgOSwgIDIsIDExLCAgNCwgMTMsICA2LCAxNSwgIDgsICAxLCAxMCwgIDMsIDEyLFxuXHQgICAgICAgIDYsIDExLCAgMywgIDcsICAwLCAxMywgIDUsIDEwLCAxNCwgMTUsICA4LCAxMiwgIDQsICA5LCAgMSwgIDIsXG5cdCAgICAgICAgMTUsICA1LCAgMSwgIDMsICA3LCAxNCwgIDYsICA5LCAxMSwgIDgsIDEyLCAgMiwgMTAsICAwLCAgNCwgMTMsXG5cdCAgICAgICAgOCwgIDYsICA0LCAgMSwgIDMsIDExLCAxNSwgIDAsICA1LCAxMiwgIDIsIDEzLCAgOSwgIDcsIDEwLCAxNCxcblx0ICAgICAgICAxMiwgMTUsIDEwLCAgNCwgIDEsICA1LCAgOCwgIDcsICA2LCAgMiwgMTMsIDE0LCAgMCwgIDMsICA5LCAxMV0pO1xuXHQgICAgdmFyIF9zbCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAxMSwgMTQsIDE1LCAxMiwgIDUsICA4LCAgNywgIDksIDExLCAxMywgMTQsIDE1LCAgNiwgIDcsICA5LCAgOCxcblx0ICAgICAgICA3LCA2LCAgIDgsIDEzLCAxMSwgIDksICA3LCAxNSwgIDcsIDEyLCAxNSwgIDksIDExLCAgNywgMTMsIDEyLFxuXHQgICAgICAgIDExLCAxMywgIDYsICA3LCAxNCwgIDksIDEzLCAxNSwgMTQsICA4LCAxMywgIDYsICA1LCAxMiwgIDcsICA1LFxuXHQgICAgICAgICAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgIDksICA4LCAgOSwgMTQsICA1LCAgNiwgIDgsICA2LCAgNSwgMTIsXG5cdCAgICAgICAgOSwgMTUsICA1LCAxMSwgIDYsICA4LCAxMywgMTIsICA1LCAxMiwgMTMsIDE0LCAxMSwgIDgsICA1LCAgNiBdKTtcblx0ICAgIHZhciBfc3IgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICA4LCAgOSwgIDksIDExLCAxMywgMTUsIDE1LCAgNSwgIDcsICA3LCAgOCwgMTEsIDE0LCAxNCwgMTIsICA2LFxuXHQgICAgICAgIDksIDEzLCAxNSwgIDcsIDEyLCAgOCwgIDksIDExLCAgNywgIDcsIDEyLCAgNywgIDYsIDE1LCAxMywgMTEsXG5cdCAgICAgICAgOSwgIDcsIDE1LCAxMSwgIDgsICA2LCAgNiwgMTQsIDEyLCAxMywgIDUsIDE0LCAxMywgMTMsICA3LCAgNSxcblx0ICAgICAgICAxNSwgIDUsICA4LCAxMSwgMTQsIDE0LCAgNiwgMTQsICA2LCAgOSwgMTIsICA5LCAxMiwgIDUsIDE1LCAgOCxcblx0ICAgICAgICA4LCAgNSwgMTIsICA5LCAxMiwgIDUsIDE0LCAgNiwgIDgsIDEzLCAgNiwgIDUsIDE1LCAxMywgMTEsIDExIF0pO1xuXG5cdCAgICB2YXIgX2hsID0gIFdvcmRBcnJheS5jcmVhdGUoWyAweDAwMDAwMDAwLCAweDVBODI3OTk5LCAweDZFRDlFQkExLCAweDhGMUJCQ0RDLCAweEE5NTNGRDRFXSk7XG5cdCAgICB2YXIgX2hyID0gIFdvcmRBcnJheS5jcmVhdGUoWyAweDUwQTI4QkU2LCAweDVDNEREMTI0LCAweDZENzAzRUYzLCAweDdBNkQ3NkU5LCAweDAwMDAwMDAwXSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUklQRU1EMTYwIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUklQRU1EMTYwID0gQ19hbGdvLlJJUEVNRDE2MCA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggID0gV29yZEFycmF5LmNyZWF0ZShbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3NiwgMHhDM0QyRTFGMF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIICA9IHRoaXMuX2hhc2gud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBobCA9IF9obC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhyID0gX2hyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgemwgPSBfemwud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6ciA9IF96ci53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNsID0gX3NsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc3IgPSBfc3Iud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGFsLCBibCwgY2wsIGRsLCBlbDtcblx0ICAgICAgICAgICAgdmFyIGFyLCBiciwgY3IsIGRyLCBlcjtcblxuXHQgICAgICAgICAgICBhciA9IGFsID0gSFswXTtcblx0ICAgICAgICAgICAgYnIgPSBibCA9IEhbMV07XG5cdCAgICAgICAgICAgIGNyID0gY2wgPSBIWzJdO1xuXHQgICAgICAgICAgICBkciA9IGRsID0gSFszXTtcblx0ICAgICAgICAgICAgZXIgPSBlbCA9IEhbNF07XG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIHZhciB0O1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpICs9IDEpIHtcblx0ICAgICAgICAgICAgICAgIHQgPSAoYWwgKyAgTVtvZmZzZXQremxbaV1dKXwwO1xuXHQgICAgICAgICAgICAgICAgaWYgKGk8MTYpe1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYxKGJsLGNsLGRsKSArIGhsWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDMyKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYmwsY2wsZGwpICsgaGxbMV07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NDgpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMyhibCxjbCxkbCkgKyBobFsyXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw2NCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY0KGJsLGNsLGRsKSArIGhsWzNdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY1KGJsLGNsLGRsKSArIGhsWzRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdCA9IHR8MDtcblx0ICAgICAgICAgICAgICAgIHQgPSAgcm90bCh0LHNsW2ldKTtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlbCl8MDtcblx0ICAgICAgICAgICAgICAgIGFsID0gZWw7XG5cdCAgICAgICAgICAgICAgICBlbCA9IGRsO1xuXHQgICAgICAgICAgICAgICAgZGwgPSByb3RsKGNsLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjbCA9IGJsO1xuXHQgICAgICAgICAgICAgICAgYmwgPSB0O1xuXG5cdCAgICAgICAgICAgICAgICB0ID0gKGFyICsgTVtvZmZzZXQrenJbaV1dKXwwO1xuXHQgICAgICAgICAgICAgICAgaWYgKGk8MTYpe1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY1KGJyLGNyLGRyKSArIGhyWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDMyKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYnIsY3IsZHIpICsgaHJbMV07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NDgpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMyhicixjcixkcikgKyBoclsyXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw2NCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYyKGJyLGNyLGRyKSArIGhyWzNdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYxKGJyLGNyLGRyKSArIGhyWzRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdCA9IHR8MDtcblx0ICAgICAgICAgICAgICAgIHQgPSAgcm90bCh0LHNyW2ldKSA7XG5cdCAgICAgICAgICAgICAgICB0ID0gKHQrZXIpfDA7XG5cdCAgICAgICAgICAgICAgICBhciA9IGVyO1xuXHQgICAgICAgICAgICAgICAgZXIgPSBkcjtcblx0ICAgICAgICAgICAgICAgIGRyID0gcm90bChjciwgMTApO1xuXHQgICAgICAgICAgICAgICAgY3IgPSBicjtcblx0ICAgICAgICAgICAgICAgIGJyID0gdDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICB0ICAgID0gKEhbMV0gKyBjbCArIGRyKXwwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMl0gKyBkbCArIGVyKXwwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbM10gKyBlbCArIGFyKXwwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbNF0gKyBhbCArIGJyKXwwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbMF0gKyBibCArIGNyKXwwO1xuXHQgICAgICAgICAgICBIWzBdID0gIHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDgpICB8IChuQml0c1RvdGFsID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbCA8PCAyNCkgfCAobkJpdHNUb3RhbCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblxuXHQgICAgZnVuY3Rpb24gZjEoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKHkpIF4gKHopKTtcblxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMih4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpJih5KSkgfCAoKH54KSYoeikpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjMoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSB8ICh+KHkpKSkgXiAoeikpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmNCh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpICYgKHopKSB8ICgoeSkmKH4oeikpKSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY1KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCh4KSBeICgoeSkgfCh+KHopKSkpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHJvdGwoeCxuKSB7XG5cdCAgICAgICAgcmV0dXJuICh4PDxuKSB8ICh4Pj4+KDMyLW4pKTtcblx0ICAgIH1cblxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuUklQRU1EMTYwKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5SSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihSSVBFTUQxNjApO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1JJUEVNRDE2MChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNSSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoUklQRU1EMTYwKTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUklQRU1EMTYwO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsXG5cdCAgICAgICAgICAgICAgICAweGMzZDJlMWYwXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblx0ICAgICAgICAgICAgdmFyIGUgPSBIWzRdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSAobiA8PCAxKSB8IChuID4+PiAzMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gKChhIDw8IDUpIHwgKGEgPj4+IDI3KSkgKyBlICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKH5iICYgZCkpICsgMHg1YTgyNzk5OTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSArIDB4NmVkOWViYTE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA2MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSkgLSAweDcwZTQ0MzI0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChpIDwgODApICovIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpIC0gMHgzNTlkM2UyYTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZSA9IGQ7XG5cdCAgICAgICAgICAgICAgICBkID0gYztcblx0ICAgICAgICAgICAgICAgIGMgPSAoYiA8PCAzMCkgfCAoYiA+Pj4gMik7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSB0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEExID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMShtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEExID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTEpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTE7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3NoYTI1NlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjI0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjI0ID0gQ19hbGdvLlNIQTIyNCA9IFNIQTI1Ni5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHhjMTA1OWVkOCwgMHgzNjdjZDUwNywgMHgzMDcwZGQxNywgMHhmNzBlNTkzOSxcblx0ICAgICAgICAgICAgICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTRcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gU0hBMjU2Ll9kb0ZpbmFsaXplLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgaGFzaC5zaWdCeXRlcyAtPSA0O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyMjQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyMjQgPSBTSEEyNTYuX2NyZWF0ZUhlbHBlcihTSEEyMjQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTIyNChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyMjQgPSBTSEEyNTYuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjI0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEyMjQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgSCA9IFtdO1xuXHQgICAgdmFyIEsgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG5cdCAgICAgICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFjdG9yID0gMjsgZmFjdG9yIDw9IHNxcnROOyBmYWN0b3IrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsQml0cyhuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIG4gPSAyO1xuXHQgICAgICAgIHZhciBuUHJpbWUgPSAwO1xuXHQgICAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuXHQgICAgICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5QcmltZSA8IDgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgS1tuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDMpKTtcblxuXHQgICAgICAgICAgICAgICAgblByaW1lKys7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBuKys7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yNTYgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChILnNsaWNlKDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblx0ICAgICAgICAgICAgdmFyIGYgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgZyA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBoID0gSFs3XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTAgID0gKChnYW1tYTB4IDw8IDI1KSB8IChnYW1tYTB4ID4+PiA3KSkgIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWEweCA8PCAxNCkgfCAoZ2FtbWEweCA+Pj4gMTgpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMHggPj4+IDMpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExICA9ICgoZ2FtbWExeCA8PCAxNSkgfCAoZ2FtbWExeCA+Pj4gMTcpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMXggPDwgMTMpIHwgKGdhbW1hMXggPj4+IDE5KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTF4ID4+PiAxMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaCAgPSAoZSAmIGYpIF4gKH5lICYgZyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqID0gKGEgJiBiKSBeIChhICYgYykgXiAoYiAmIGMpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwID0gKChhIDw8IDMwKSB8IChhID4+PiAyKSkgXiAoKGEgPDwgMTkpIHwgKGEgPj4+IDEzKSkgXiAoKGEgPDwgMTApIHwgKGEgPj4+IDIyKSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExID0gKChlIDw8IDI2KSB8IChlID4+PiA2KSkgXiAoKGUgPDwgMjEpIHwgKGUgPj4+IDExKSkgXiAoKGUgPDwgNykgIHwgKGUgPj4+IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gc2lnbWEwICsgbWFqO1xuXG5cdCAgICAgICAgICAgICAgICBoID0gZztcblx0ICAgICAgICAgICAgICAgIGcgPSBmO1xuXHQgICAgICAgICAgICAgICAgZiA9IGU7XG5cdCAgICAgICAgICAgICAgICBlID0gKGQgKyB0MSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gYjtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9ICh0MSArIHQyKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICAgICAgSFs1XSA9IChIWzVdICsgZikgfCAwO1xuXHQgICAgICAgICAgICBIWzZdID0gKEhbNl0gKyBnKSB8IDA7XG5cdCAgICAgICAgICAgIEhbN10gPSAoSFs3XSArIGgpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEyNTYpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjU2KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjU2O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZXNcblx0ICAgIHZhciBSSE9fT0ZGU0VUUyA9IFtdO1xuXHQgICAgdmFyIFBJX0lOREVYRVMgID0gW107XG5cdCAgICB2YXIgUk9VTkRfQ09OU1RBTlRTID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgQ29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgcmhvIG9mZnNldCBjb25zdGFudHNcblx0ICAgICAgICB2YXIgeCA9IDEsIHkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuXHQgICAgICAgICAgICBSSE9fT0ZGU0VUU1t4ICsgNSAqIHldID0gKCh0ICsgMSkgKiAodCArIDIpIC8gMikgJSA2NDtcblxuXHQgICAgICAgICAgICB2YXIgbmV3WCA9IHkgJSA1O1xuXHQgICAgICAgICAgICB2YXIgbmV3WSA9ICgyICogeCArIDMgKiB5KSAlIDU7XG5cdCAgICAgICAgICAgIHggPSBuZXdYO1xuXHQgICAgICAgICAgICB5ID0gbmV3WTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHBpIGluZGV4IGNvbnN0YW50c1xuXHQgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICBQSV9JTkRFWEVTW3ggKyA1ICogeV0gPSB5ICsgKCgyICogeCArIDMgKiB5KSAlIDUpICogNTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENvbXB1dGUgcm91bmQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIExGU1IgPSAweDAxO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudE1zdyA9IDA7XG5cdCAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50THN3ID0gMDtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDc7IGorKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGJpdFBvc2l0aW9uID0gKDEgPDwgaikgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChiaXRQb3NpdGlvbiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRMc3cgXj0gMSA8PCBiaXRQb3NpdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGJpdFBvc2l0aW9uID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRNc3cgXj0gMSA8PCAoYml0UG9zaXRpb24gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgTEZTUlxuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDgwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHBvbHlub21pYWwgb3ZlciBHRigyKTogeF44ICsgeF42ICsgeF41ICsgeF40ICsgMVxuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPSAoTEZTUiA8PCAxKSBeIDB4NzE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPDw9IDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBST1VORF9DT05TVEFOVFNbaV0gPSBYNjRXb3JkLmNyZWF0ZShyb3VuZENvbnN0YW50TXN3LCByb3VuZENvbnN0YW50THN3KTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzIGZvciB0ZW1wb3JhcnkgdmFsdWVzXG5cdCAgICB2YXIgVCA9IFtdO1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgVFtpXSA9IFg2NFdvcmQuY3JlYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMyBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTMgPSBDX2FsZ28uU0hBMyA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvdXRwdXRMZW5ndGhcblx0ICAgICAgICAgKiAgIFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIGluIHRoZSBvdXRwdXQgaGFzaC5cblx0ICAgICAgICAgKiAgIE9ubHkgdmFsdWVzIHBlcm1pdHRlZCBhcmU6IDIyNCwgMjU2LCAzODQsIDUxMi5cblx0ICAgICAgICAgKiAgIERlZmF1bHQ6IDUxMlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogSGFzaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBvdXRwdXRMZW5ndGg6IDUxMlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGUgPSBbXVxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gbmV3IFg2NFdvcmQuaW5pdCgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgdGhpcy5ibG9ja1NpemUgPSAoMTYwMCAtIDIgKiB0aGlzLmNmZy5vdXRwdXRMZW5ndGgpIC8gMzI7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tTaXplTGFuZXMgPSB0aGlzLmJsb2NrU2l6ZSAvIDI7XG5cblx0ICAgICAgICAgICAgLy8gQWJzb3JiXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbkJsb2NrU2l6ZUxhbmVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIE0yaSAgPSBNW29mZnNldCArIDIgKiBpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkxID0gTVtvZmZzZXQgKyAyICogaSArIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgTTJpID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCA4KSAgfCAoTTJpID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCAyNCkgfCAoTTJpID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgICAgICBNMmkxID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgOCkgIHwgKE0yaTEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTTJpMSA8PCAyNCkgfCAoTTJpMSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBYnNvcmIgbWVzc2FnZSBpbnRvIHN0YXRlXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IE0yaTE7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gTTJpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gVGhldGFcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IGNvbHVtbiBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gMCwgdExzdyA9IDA7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3IF49IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyBePSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBUZW1wb3JhcnkgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4ID0gVFt4XTtcblx0ICAgICAgICAgICAgICAgICAgICBUeC5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUeC5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4NCA9IFRbKHggKyA0KSAlIDVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDEgPSBUWyh4ICsgMSkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTXN3ID0gVHgxLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MUxzdyA9IFR4MS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBNaXggc3Vycm91bmRpbmcgY29sdW1uc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gVHg0LmhpZ2ggXiAoKFR4MU1zdyA8PCAxKSB8IChUeDFMc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3cgPSBUeDQubG93ICBeICgoVHgxTHN3IDw8IDEpIHwgKFR4MU1zdyA+Pj4gMzEpKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW3ggKyA1ICogeV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gdExzdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJobyBQaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgbGFuZUluZGV4ID0gMTsgbGFuZUluZGV4IDwgMjU7IGxhbmVJbmRleCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVMc3cgPSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmhvT2Zmc2V0ID0gUkhPX09GRlNFVFNbbGFuZUluZGV4XTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0ZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyaG9PZmZzZXQgPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3ID0gKGxhbmVNc3cgPDwgcmhvT2Zmc2V0KSB8IChsYW5lTHN3ID4+PiAoMzIgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTHN3IDw8IHJob09mZnNldCkgfCAobGFuZU1zdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChyaG9PZmZzZXQgPj0gMzIpICovIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTHN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVNc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0THN3ID0gKGxhbmVNc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZUxzdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNwb3NlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFRQaUxhbmUgPSBUW1BJX0lOREVYRVNbbGFuZUluZGV4XV07XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUUGlMYW5lLmxvdyAgPSB0THN3O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gcGkgYXQgeCA9IHkgPSAwXG5cdCAgICAgICAgICAgICAgICB2YXIgVDAgPSBUWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgVDAubG93ICA9IHN0YXRlMC5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIENoaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVJbmRleCA9IHggKyA1ICogeTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVExhbmUgPSBUW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMYW5lID0gVFsoKHggKyAxKSAlIDUpICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKCh4ICsgMikgJSA1KSArIDUgKiB5XTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggcm93c1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggPSBUTGFuZS5oaWdoIF4gKH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgPSBUTGFuZS5sb3cgIF4gKH5UeDFMYW5lLmxvdyAgJiBUeDJMYW5lLmxvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJb3RhXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IHJvdW5kQ29uc3RhbnQuaGlnaDtcblx0ICAgICAgICAgICAgICAgIGxhbmUubG93ICBePSByb3VuZENvbnN0YW50Lmxvdztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQml0cyA9IHRoaXMuYmxvY2tTaXplICogMzI7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHgxIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoTWF0aC5jZWlsKChuQml0c0xlZnQgKyAxKSAvIGJsb2NrU2l6ZUJpdHMpICogYmxvY2tTaXplQml0cykgPj4+IDUpIC0gMV0gfD0gMHg4MDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhCeXRlcyA9IHRoaXMuY2ZnLm91dHB1dExlbmd0aCAvIDg7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhMYW5lcyA9IG91dHB1dExlbmd0aEJ5dGVzIC8gODtcblxuXHQgICAgICAgICAgICAvLyBTcXVlZXplXG5cdCAgICAgICAgICAgIHZhciBoYXNoV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRwdXRMZW5ndGhMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZU1zdyA9IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgICAgICBsYW5lTXN3ID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgOCkgIHwgKGxhbmVNc3cgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZU1zdyA8PCAyNCkgfCAobGFuZU1zdyA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgbGFuZUxzdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDgpICB8IChsYW5lTHN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVMc3cgPDwgMjQpIHwgKGxhbmVMc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3F1ZWV6ZSBzdGF0ZSB0byByZXRyaWV2ZSBoYXNoXG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTHN3KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hXb3Jkcy5wdXNoKGxhbmVNc3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChoYXNoV29yZHMsIG91dHB1dExlbmd0aEJ5dGVzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gY2xvbmUuX3N0YXRlID0gdGhpcy5fc3RhdGUuc2xpY2UoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgc3RhdGVbaV0gPSBzdGF0ZVtpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMygnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMyh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTMgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEzKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTMgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMyk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiLCBcIi4vc2hhNTEyXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgWDY0V29yZEFycmF5ID0gQ194NjQuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0zODQgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzODQgPSBDX2FsZ28uU0hBMzg0ID0gU0hBNTEyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4Y2JiYjlkNWQsIDB4YzEwNTllZDgpLCBuZXcgWDY0V29yZC5pbml0KDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDkxNTkwMTVhLCAweDMwNzBkZDE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDE1MmZlY2Q4LCAweGY3MGU1OTM5KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg2NzMzMjY2NywgMHhmZmMwMGIzMSksIG5ldyBYNjRXb3JkLmluaXQoMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4ZGIwYzJlMGQsIDB4NjRmOThmYTcpLCBuZXcgWDY0V29yZC5pbml0KDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTUxMi5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gMTY7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTM4NCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTM4NCA9IFNIQTUxMi5fY3JlYXRlSGVscGVyKFNIQTM4NCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMzg0KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTM4NCA9IFNIQTUxMi5fY3JlYXRlSG1hY0hlbHBlcihTSEEzODQpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTM4NDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIGZ1bmN0aW9uIFg2NFdvcmRfY3JlYXRlKCkge1xuXHQgICAgICAgIHJldHVybiBYNjRXb3JkLmNyZWF0ZS5hcHBseShYNjRXb3JkLCBhcmd1bWVudHMpO1xuXHQgICAgfVxuXG5cdCAgICAvLyBDb25zdGFudHNcblx0ICAgIHZhciBLID0gW1xuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIpLCBYNjRXb3JkX2NyZWF0ZSgweDcxMzc0NDkxLCAweDIzZWY2NWNkKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGI1YzBmYmNmLCAweGVjNGQzYjJmKSwgWDY0V29yZF9jcmVhdGUoMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCksIFg2NFdvcmRfY3JlYXRlKDB4NTlmMTExZjEsIDB4YjYwNWQwMTkpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIpLCBYNjRXb3JkX2NyZWF0ZSgweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGQ4MDdhYTk4LCAweGEzMDMwMjQyKSwgWDY0V29yZF9jcmVhdGUoMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNDMxODViZSwgMHg0ZWU0YjI4YyksIFg2NFdvcmRfY3JlYXRlKDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYpLCBYNjRXb3JkX2NyZWF0ZSgweDgwZGViMWZlLCAweDNiMTY5NmIxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDliZGMwNmE3LCAweDI1YzcxMjM1KSwgWDY0V29yZF9jcmVhdGUoMHhjMTliZjE3NCwgMHhjZjY5MjY5NCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhlNDliNjljMSwgMHg5ZWYxNGFkMiksIFg2NFdvcmRfY3JlYXRlKDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUpLCBYNjRXb3JkX2NyZWF0ZSgweDI0MGNhMWNjLCAweDc3YWM5YzY1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDJkZTkyYzZmLCAweDU5MmIwMjc1KSwgWDY0V29yZF9jcmVhdGUoMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCksIFg2NFdvcmRfY3JlYXRlKDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MzFjNjZkLCAweDJkYjQzMjEwKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGIwMDMyN2M4LCAweDk4ZmIyMTNmKSwgWDY0V29yZF9jcmVhdGUoMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhjNmUwMGJmMywgMHgzZGE4OGZjMiksIFg2NFdvcmRfY3JlYXRlKDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYpLCBYNjRXb3JkX2NyZWF0ZSgweDE0MjkyOTY3LCAweDBhMGU2ZTcwKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI3YjcwYTg1LCAweDQ2ZDIyZmZjKSwgWDY0V29yZF9jcmVhdGUoMHgyZTFiMjEzOCwgMHg1YzI2YzkyNiksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCksIFg2NFdvcmRfY3JlYXRlKDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NjUwYTczNTQsIDB4OGJhZjYzZGUpLCBYNjRXb3JkX2NyZWF0ZSgweDc2NmEwYWJiLCAweDNjNzdiMmE4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDgxYzJjOTJlLCAweDQ3ZWRhZWU2KSwgWDY0V29yZF9jcmVhdGUoMHg5MjcyMmM4NSwgMHgxNDgyMzUzYiksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCksIFg2NFdvcmRfY3JlYXRlKDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEpLCBYNjRXb3JkX2NyZWF0ZSgweGM3NmM1MWEzLCAweDA2NTRiZTMwKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGQxOTJlODE5LCAweGQ2ZWY1MjE4KSwgWDY0V29yZF9jcmVhdGUoMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSksIFg2NFdvcmRfY3JlYXRlKDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgpLCBYNjRXb3JkX2NyZWF0ZSgweDFlMzc2YzA4LCAweDUxNDFhYjUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI3NDg3NzRjLCAweGRmOGVlYjk5KSwgWDY0V29yZF9jcmVhdGUoMHgzNGIwYmNiNSwgMHhlMTliNDhhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzOTFjMGNiMywgMHhjNWM5NWE2MyksIFg2NFdvcmRfY3JlYXRlKDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMpLCBYNjRXb3JkX2NyZWF0ZSgweDY4MmU2ZmYzLCAweGQ2YjJiOGEzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDc0OGY4MmVlLCAweDVkZWZiMmZjKSwgWDY0V29yZF9jcmVhdGUoMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiksIFg2NFdvcmRfY3JlYXRlKDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgpLCBYNjRXb3JkX2NyZWF0ZSgweGE0NTA2Y2ViLCAweGRlODJiZGU5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGJlZjlhM2Y3LCAweGIyYzY3OTE1KSwgWDY0V29yZF9jcmVhdGUoMHhjNjcxNzhmMiwgMHhlMzcyNTMyYiksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhjYTI3M2VjZSwgMHhlYTI2NjE5YyksIFg2NFdvcmRfY3JlYXRlKDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUpLCBYNjRXb3JkX2NyZWF0ZSgweGY1N2Q0ZjdmLCAweGVlNmVkMTc4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2ZjA2N2FhLCAweDcyMTc2ZmJhKSwgWDY0V29yZF9jcmVhdGUoMHgwYTYzN2RjNSwgMHhhMmM4OThhNiksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSksIFg2NFdvcmRfY3JlYXRlKDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQpLCBYNjRXb3JkX2NyZWF0ZSgweDMyY2FhYjdiLCAweDQwYzcyNDkzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDNjOWViZTBhLCAweDE1YzliZWJjKSwgWDY0V29yZF9jcmVhdGUoMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiksIFg2NFdvcmRfY3JlYXRlKDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMpLCBYNjRXb3JkX2NyZWF0ZSgweDZjNDQxOThjLCAweDRhNDc1ODE3KVxuXHQgICAgXTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0c1xuXHQgICAgdmFyIFcgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgIFdbaV0gPSBYNjRXb3JkX2NyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTUxMiBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTUxMiA9IENfYWxnby5TSEE1MTIgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFg2NFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCksIG5ldyBYNjRXb3JkLmluaXQoMHhiYjY3YWU4NSwgMHg4NGNhYTczYiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIpLCBuZXcgWDY0V29yZC5pbml0KDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDUxMGU1MjdmLCAweGFkZTY4MmQxKSwgbmV3IFg2NFdvcmQuaW5pdCgweDliMDU2ODhjLCAweDJiM2U2YzFmKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YiksIG5ldyBYNjRXb3JkLmluaXQoMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSlcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBIMCA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBIMSA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBIMiA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBIMyA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBINCA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBINSA9IEhbNV07XG5cdCAgICAgICAgICAgIHZhciBINiA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBINyA9IEhbN107XG5cblx0ICAgICAgICAgICAgdmFyIEgwaCA9IEgwLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMGwgPSBIMC5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIMWggPSBIMS5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDFsID0gSDEubG93O1xuXHQgICAgICAgICAgICB2YXIgSDJoID0gSDIuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgybCA9IEgyLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgzaCA9IEgzLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIM2wgPSBIMy5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINGggPSBINC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDRsID0gSDQubG93O1xuXHQgICAgICAgICAgICB2YXIgSDVoID0gSDUuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg1bCA9IEg1Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg2aCA9IEg2LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINmwgPSBINi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIN2ggPSBINy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDdsID0gSDcubG93O1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhaCA9IEgwaDtcblx0ICAgICAgICAgICAgdmFyIGFsID0gSDBsO1xuXHQgICAgICAgICAgICB2YXIgYmggPSBIMWg7XG5cdCAgICAgICAgICAgIHZhciBibCA9IEgxbDtcblx0ICAgICAgICAgICAgdmFyIGNoID0gSDJoO1xuXHQgICAgICAgICAgICB2YXIgY2wgPSBIMmw7XG5cdCAgICAgICAgICAgIHZhciBkaCA9IEgzaDtcblx0ICAgICAgICAgICAgdmFyIGRsID0gSDNsO1xuXHQgICAgICAgICAgICB2YXIgZWggPSBINGg7XG5cdCAgICAgICAgICAgIHZhciBlbCA9IEg0bDtcblx0ICAgICAgICAgICAgdmFyIGZoID0gSDVoO1xuXHQgICAgICAgICAgICB2YXIgZmwgPSBINWw7XG5cdCAgICAgICAgICAgIHZhciBnaCA9IEg2aDtcblx0ICAgICAgICAgICAgdmFyIGdsID0gSDZsO1xuXHQgICAgICAgICAgICB2YXIgaGggPSBIN2g7XG5cdCAgICAgICAgICAgIHZhciBobCA9IEg3bDtcblxuXHQgICAgICAgICAgICAvLyBSb3VuZHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpaDtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBXaSA9IFdbaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEV4dGVuZCBtZXNzYWdlXG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2kuaGlnaCA9IE1bb2Zmc2V0ICsgaSAqIDJdICAgICB8IDA7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2kubG93ICA9IE1bb2Zmc2V0ICsgaSAqIDIgKyAxXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIEdhbW1hMFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ICA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweGggPSBnYW1tYTB4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhsID0gZ2FtbWEweC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMGggID0gKChnYW1tYTB4aCA+Pj4gMSkgfCAoZ2FtbWEweGwgPDwgMzEpKSBeICgoZ2FtbWEweGggPj4+IDgpIHwgKGdhbW1hMHhsIDw8IDI0KSkgXiAoZ2FtbWEweGggPj4+IDcpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBsICA9ICgoZ2FtbWEweGwgPj4+IDEpIHwgKGdhbW1hMHhoIDw8IDMxKSkgXiAoKGdhbW1hMHhsID4+PiA4KSB8IChnYW1tYTB4aCA8PCAyNCkpIF4gKChnYW1tYTB4bCA+Pj4gNykgfCAoZ2FtbWEweGggPDwgMjUpKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIEdhbW1hMVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ICA9IFdbaSAtIDJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4aCA9IGdhbW1hMXguaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGwgPSBnYW1tYTF4Lmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExaCAgPSAoKGdhbW1hMXhoID4+PiAxOSkgfCAoZ2FtbWExeGwgPDwgMTMpKSBeICgoZ2FtbWExeGggPDwgMykgfCAoZ2FtbWExeGwgPj4+IDI5KSkgXiAoZ2FtbWExeGggPj4+IDYpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTFsICA9ICgoZ2FtbWExeGwgPj4+IDE5KSB8IChnYW1tYTF4aCA8PCAxMykpIF4gKChnYW1tYTF4bCA8PCAzKSB8IChnYW1tYTF4aCA+Pj4gMjkpKSBeICgoZ2FtbWExeGwgPj4+IDYpIHwgKGdhbW1hMXhoIDw8IDI2KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3ICA9IFdbaSAtIDddO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdoID0gV2k3LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpN2wgPSBXaTcubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTYgID0gV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2aCA9IFdpMTYuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmwgPSBXaTE2LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IGdhbW1hMGwgKyBXaTdsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IGdhbW1hMGggKyBXaTdoICsgKChXaWwgPj4+IDApIDwgKGdhbW1hMGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpbCArIGdhbW1hMWw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgZ2FtbWExaCArICgoV2lsID4+PiAwKSA8IChnYW1tYTFsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBXaTE2bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBXaWggKyBXaTE2aCArICgoV2lsID4+PiAwKSA8IChXaTE2bCA+Pj4gMCkgPyAxIDogMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaS5oaWdoID0gV2loO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpLmxvdyAgPSBXaWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaGggID0gKGVoICYgZmgpIF4gKH5laCAmIGdoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGwgID0gKGVsICYgZmwpIF4gKH5lbCAmIGdsKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpoID0gKGFoICYgYmgpIF4gKGFoICYgY2gpIF4gKGJoICYgY2gpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1hamwgPSAoYWwgJiBibCkgXiAoYWwgJiBjbCkgXiAoYmwgJiBjbCk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTBoID0gKChhaCA+Pj4gMjgpIHwgKGFsIDw8IDQpKSAgXiAoKGFoIDw8IDMwKSAgfCAoYWwgPj4+IDIpKSBeICgoYWggPDwgMjUpIHwgKGFsID4+PiA3KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwbCA9ICgoYWwgPj4+IDI4KSB8IChhaCA8PCA0KSkgIF4gKChhbCA8PCAzMCkgIHwgKGFoID4+PiAyKSkgXiAoKGFsIDw8IDI1KSB8IChhaCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMWggPSAoKGVoID4+PiAxNCkgfCAoZWwgPDwgMTgpKSBeICgoZWggPj4+IDE4KSB8IChlbCA8PCAxNCkpIF4gKChlaCA8PCAyMykgfCAoZWwgPj4+IDkpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFsID0gKChlbCA+Pj4gMTQpIHwgKGVoIDw8IDE4KSkgXiAoKGVsID4+PiAxOCkgfCAoZWggPDwgMTQpKSBeICgoZWwgPDwgMjMpIHwgKGVoID4+PiA5KSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIHQxID0gaCArIHNpZ21hMSArIGNoICsgS1tpXSArIFdbaV1cblx0ICAgICAgICAgICAgICAgIHZhciBLaSAgPSBLW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpaCA9IEtpLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgS2lsID0gS2kubG93O1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gaGwgKyBzaWdtYTFsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IGhoICsgc2lnbWExaCArICgodDFsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgY2hsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIGNoaCArICgodDFsID4+PiAwKSA8IChjaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIEtpbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBLaWggKyAoKHQxbCA+Pj4gMCkgPCAoS2lsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBXaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgV2loICsgKCh0MWwgPj4+IDApIDwgKFdpbCA+Pj4gMCkgPyAxIDogMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIHQyID0gc2lnbWEwICsgbWFqXG5cdCAgICAgICAgICAgICAgICB2YXIgdDJsID0gc2lnbWEwbCArIG1hamw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDJoID0gc2lnbWEwaCArIG1hamggKyAoKHQybCA+Pj4gMCkgPCAoc2lnbWEwbCA+Pj4gMCkgPyAxIDogMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB3b3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICAgICAgaGggPSBnaDtcblx0ICAgICAgICAgICAgICAgIGhsID0gZ2w7XG5cdCAgICAgICAgICAgICAgICBnaCA9IGZoO1xuXHQgICAgICAgICAgICAgICAgZ2wgPSBmbDtcblx0ICAgICAgICAgICAgICAgIGZoID0gZWg7XG5cdCAgICAgICAgICAgICAgICBmbCA9IGVsO1xuXHQgICAgICAgICAgICAgICAgZWwgPSAoZGwgKyB0MWwpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGVoID0gKGRoICsgdDFoICsgKChlbCA+Pj4gMCkgPCAoZGwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBkaCA9IGNoO1xuXHQgICAgICAgICAgICAgICAgZGwgPSBjbDtcblx0ICAgICAgICAgICAgICAgIGNoID0gYmg7XG5cdCAgICAgICAgICAgICAgICBjbCA9IGJsO1xuXHQgICAgICAgICAgICAgICAgYmggPSBhaDtcblx0ICAgICAgICAgICAgICAgIGJsID0gYWw7XG5cdCAgICAgICAgICAgICAgICBhbCA9ICh0MWwgKyB0MmwpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGFoID0gKHQxaCArIHQyaCArICgoYWwgPj4+IDApIDwgKHQxbCA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEgwbCA9IEgwLmxvdyAgPSAoSDBsICsgYWwpO1xuXHQgICAgICAgICAgICBIMC5oaWdoID0gKEgwaCArIGFoICsgKChIMGwgPj4+IDApIDwgKGFsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEgxbCA9IEgxLmxvdyAgPSAoSDFsICsgYmwpO1xuXHQgICAgICAgICAgICBIMS5oaWdoID0gKEgxaCArIGJoICsgKChIMWwgPj4+IDApIDwgKGJsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEgybCA9IEgyLmxvdyAgPSAoSDJsICsgY2wpO1xuXHQgICAgICAgICAgICBIMi5oaWdoID0gKEgyaCArIGNoICsgKChIMmwgPj4+IDApIDwgKGNsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEgzbCA9IEgzLmxvdyAgPSAoSDNsICsgZGwpO1xuXHQgICAgICAgICAgICBIMy5oaWdoID0gKEgzaCArIGRoICsgKChIM2wgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEg0bCA9IEg0LmxvdyAgPSAoSDRsICsgZWwpO1xuXHQgICAgICAgICAgICBINC5oaWdoID0gKEg0aCArIGVoICsgKChINGwgPj4+IDApIDwgKGVsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEg1bCA9IEg1LmxvdyAgPSAoSDVsICsgZmwpO1xuXHQgICAgICAgICAgICBINS5oaWdoID0gKEg1aCArIGZoICsgKChINWwgPj4+IDApIDwgKGZsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEg2bCA9IEg2LmxvdyAgPSAoSDZsICsgZ2wpO1xuXHQgICAgICAgICAgICBINi5oaWdoID0gKEg2aCArIGdoICsgKChINmwgPj4+IDApIDwgKGdsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgICAgIEg3bCA9IEg3LmxvdyAgPSAoSDdsICsgaGwpO1xuXHQgICAgICAgICAgICBINy5oaWdoID0gKEg3aCArIGhoICsgKChIN2wgPj4+IDApIDwgKGhsID4+PiAwKSA/IDEgOiAwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDEyOCkgPj4+IDEwKSA8PCA1KSArIDMwXSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDEyOCkgPj4+IDEwKSA8PCA1KSArIDMxXSA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBoYXNoIHRvIDMyLWJpdCB3b3JkIGFycmF5IGJlZm9yZSByZXR1cm5pbmdcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoLnRvWDMyKCk7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTAyNC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTUxMih3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTUxMiA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTUxMik7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBNTEyKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTUxMiA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEE1MTIpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTUxMjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBQZXJtdXRlZCBDaG9pY2UgMSBjb25zdGFudHNcblx0ICAgIHZhciBQQzEgPSBbXG5cdCAgICAgICAgNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwgIDEsXG5cdCAgICAgICAgNTgsIDUwLCA0MiwgMzQsIDI2LCAxOCwgMTAsIDIsXG5cdCAgICAgICAgNTksIDUxLCA0MywgMzUsIDI3LCAxOSwgMTEsIDMsXG5cdCAgICAgICAgNjAsIDUyLCA0NCwgMzYsIDYzLCA1NSwgNDcsIDM5LFxuXHQgICAgICAgIDMxLCAyMywgMTUsIDcsICA2MiwgNTQsIDQ2LCAzOCxcblx0ICAgICAgICAzMCwgMjIsIDE0LCA2LCAgNjEsIDUzLCA0NSwgMzcsXG5cdCAgICAgICAgMjksIDIxLCAxMywgNSwgIDI4LCAyMCwgMTIsIDRcblx0ICAgIF07XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAyIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMiA9IFtcblx0ICAgICAgICAxNCwgMTcsIDExLCAyNCwgMSwgIDUsXG5cdCAgICAgICAgMywgIDI4LCAxNSwgNiwgIDIxLCAxMCxcblx0ICAgICAgICAyMywgMTksIDEyLCA0LCAgMjYsIDgsXG5cdCAgICAgICAgMTYsIDcsICAyNywgMjAsIDEzLCAyLFxuXHQgICAgICAgIDQxLCA1MiwgMzEsIDM3LCA0NywgNTUsXG5cdCAgICAgICAgMzAsIDQwLCA1MSwgNDUsIDMzLCA0OCxcblx0ICAgICAgICA0NCwgNDksIDM5LCA1NiwgMzQsIDUzLFxuXHQgICAgICAgIDQ2LCA0MiwgNTAsIDM2LCAyOSwgMzJcblx0ICAgIF07XG5cblx0ICAgIC8vIEN1bXVsYXRpdmUgYml0IHNoaWZ0IGNvbnN0YW50c1xuXHQgICAgdmFyIEJJVF9TSElGVFMgPSBbMSwgIDIsICA0LCAgNiwgIDgsICAxMCwgMTIsIDE0LCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjhdO1xuXG5cdCAgICAvLyBTQk9YZXMgYW5kIHJvdW5kIHBlcm11dGF0aW9uIGNvbnN0YW50c1xuXHQgICAgdmFyIFNCT1hfUCA9IFtcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMDogMHg4MDgwMDIsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDA6IDB4Mixcblx0ICAgICAgICAgICAgMHg0MDAwMDAwMDogMHgyMDAsXG5cdCAgICAgICAgICAgIDB4NTAwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAwOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMDogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMDogMHg4MDAyLFxuXHQgICAgICAgICAgICAweGQwMDAwMDAwOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHhlMDAwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDAwOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgyODAwMDAwMDogMHg4MjAyLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAwOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4NDgwMDAwMDA6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMDogMHg4MDgwMDIsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwMDA6IDB4Mixcblx0ICAgICAgICAgICAgMHg4ODAwMDAwMDogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwMDA6IDB4ODIwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDAwMDogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweGM4MDAwMDAwOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHhkODAwMDAwMDogMHg4MDAyLFxuXHQgICAgICAgICAgICAweGU4MDAwMDAwOiAweDIwMixcblx0ICAgICAgICAgICAgMHhmODAwMDAwMDogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAxOiAweDIsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwMDE6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweDMwMDAwMDAxOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwMTogMHg4MDgwMDIsXG5cdCAgICAgICAgICAgIDB4NTAwMDAwMDE6IDB4ODIwMCxcblx0ICAgICAgICAgICAgMHg2MDAwMDAwMTogMHgyMDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDAwMDE6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHg5MDAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDAwMDE6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGIwMDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGQwMDAwMDAxOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHhlMDAwMDAwMTogMHg4MDAyLFxuXHQgICAgICAgICAgICAweGYwMDAwMDAxOiAweDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDE6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAxOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwMTogMHgyMDAsXG5cdCAgICAgICAgICAgIDB4NDgwMDAwMDE6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMTogMHg4MjAyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwMDE6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAxOiAweDIwMixcblx0ICAgICAgICAgICAgMHhiODAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAxOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDE6IDB4ODIwMCxcblx0ICAgICAgICAgICAgMHhmODAwMDAwMTogMHg4MDgwMDJcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgyMDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDMwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwOiAweDQwMDg0MDAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4YTAwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHhiMDAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDA6IDB4NDAxMCxcblx0ICAgICAgICAgICAgMHhmMDAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDI4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwMDogMHg4MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDg4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweGM4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDogMHg4NDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwOiAweDQwMDg0MDAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDA6IDB4NDAxMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDExMDAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDEzMDAwMDAwOiAweDQwMDg0MDAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDE2MDAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4NDAxMCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwMDogMHg4MDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDAwMDogMHg4NDAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHgxZTAwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjAwMDAwMDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwMDogMHg4MDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE4ODAwMDAwOiAweDQwMDg0MDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFhODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDFiODAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFjODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDA6IDB4NDAxMCxcblx0ICAgICAgICAgICAgMHgxZTgwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwMDogMHg4NDAwMFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDEwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDMwMDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHg0MDAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4NTAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwOiAweDQwMTAxMDQsXG5cdCAgICAgICAgICAgIDB4NzAwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweGMwMDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGQwMDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHhlMDAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHhmMDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4NDgwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg3ODAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDg4MDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDk4MDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweGM4MDAwMDogMHgxMDEwMCxcblx0ICAgICAgICAgICAgMHhkODAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHhlODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHhmODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHgxMjAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDEzMDAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHgxNDAwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHgxNTAwMDAwOiAweDQwMTAxMDQsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDE3MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxYjAwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxZTAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFmMDAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxMDgwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTI4MDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDE1ODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHgxNjgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHgxNzgwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHgxOTgwMDAwOiAweDQwMTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYjgwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweDFkODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4MWY4MDAwMDogMHgxMDEwMFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDA6IDB4ODAwMDEwNDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDMwMDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4NTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDYwMDAwOiAweDgwMDAwMDQwLFxuXHQgICAgICAgICAgICAweDcwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDogMHg4MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDogMHg0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDA6IDB4NDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDA6IDB4ODAwMDEwMDAsXG5cdCAgICAgICAgICAgIDB4YzAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4ZDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHhlMDAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweGYwMDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDgwMDA6IDB4ODAwMDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4NDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MzgwMDA6IDB4ODAwMDEwMDAsXG5cdCAgICAgICAgICAgIDB4NDgwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDY4MDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4NzgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODgwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDogMHg0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4YjgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHhjODAwMDogMHg4MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHhkODAwMDogMHg0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4ZTgwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweGY4MDAwOiAweDgwMDAwMDQwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDogMHg0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweDE2MDAwMDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxNzAwMDA6IDB4ODAwMDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDogMHg4MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWIwMDAwOiAweDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgxYzAwMDA6IDB4ODAwMDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTAwMDA6IDB4NDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTA4MDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDExODAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgxMjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxMzgwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDogMHg0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxNzgwMDA6IDB4NDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwOiAweDgwMDAwMDQwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDFhODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxYjgwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDogMHg0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWY4MDAwOiAweDQwMTA0MFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTAwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDIwMDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg0MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDUwMDA6IDB4MTAwMDA4MCxcblx0ICAgICAgICAgICAgMHg2MDAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDcwMDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHgxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHhiMDAwOiAweDIxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGMwMDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweGUwMDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHhmMDAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MjgwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgzODAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDgwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHg1ODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDY4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDk4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhhODAwOiAweDIxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGI4MDA6IDB4MTAwMDA4MCxcblx0ICAgICAgICAgICAgMHhjODAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGQ4MDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZTgwMDogMHgxMDAwMDAwLFxuXHQgICAgICAgICAgICAweGY4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTAwMDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTIwMDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTQwMDA6IDB4MTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxNzAwMDogMHgxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwOiAweDIxMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE5MDAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWIwMDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MWQwMDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MWUwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweDEwODAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDExODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxNDgwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNTgwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE2ODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDE3ODAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE4ODAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDE5ODAwOiAweDIxMDQwMDgwLFxuXHQgICAgICAgICAgICAweDFhODAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWI4MDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWM4MDA6IDB4MTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxZTgwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDogMHgyMDAwMDA4MFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDMwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHg0MDA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NTAwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg2MDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDcwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg5MDA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YTAwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhiMDA6IDB4OCxcblx0ICAgICAgICAgICAgMHhjMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4ZDAwOiAweDIwMjAwOCxcblx0ICAgICAgICAgICAgMHhlMDA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHhmMDA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4ODA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDI4MDogMHg4LFxuXHQgICAgICAgICAgICAweDM4MDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDgwOiAweDIwMjAwOCxcblx0ICAgICAgICAgICAgMHg1ODA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NjgwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDc4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDg4MDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4OTgwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4YTgwOiAweDEwMDAyMDA4LFxuXHQgICAgICAgICAgICAweGI4MDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhjODA6IDB4MCxcblx0ICAgICAgICAgICAgMHhkODA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4ZTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhmODA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweDEyMDA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTMwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE0MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDE1MDA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxNzAwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxODAwOiAweDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxOTAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDogMHg4LFxuXHQgICAgICAgICAgICAweDFiMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFkMDA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MWUwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxZjAwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MTE4MDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxNDgwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDE1ODA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHgxNjgwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDE3ODA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxOTgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweDFhODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgxYjgwOiAweDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxYzgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxZDgwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwOiAweDEwMDAyMDA4XG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgyMDogMHg0MDAsXG5cdCAgICAgICAgICAgIDB4MzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDQwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NTA6IDB4MCxcblx0ICAgICAgICAgICAgMHg2MDogMHgxLFxuXHQgICAgICAgICAgICAweDcwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4ODA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHg5MDogMHgxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4YTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHhiMDogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweGMwOiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZDA6IDB4NDAxLFxuXHQgICAgICAgICAgICAweGUwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHhmMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxODogMHgwLFxuXHQgICAgICAgICAgICAweDI4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4Mzg6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHg0ODogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NTg6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHg2ODogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDc4OiAweDQwMSxcblx0ICAgICAgICAgICAgMHg4ODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4OTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHhhODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweGI4OiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhjODogMHg0MDAsXG5cdCAgICAgICAgICAgIDB4ZDg6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHhlODogMHgxLFxuXHQgICAgICAgICAgICAweGY4OiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTA6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDEyMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDEzMDogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE0MDogMHgxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTUwOiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTYwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTcwOiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxODA6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE5MDogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFhMDogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MWIwOiAweDEsXG5cdCAgICAgICAgICAgIDB4MWMwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWQwOiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWUwOiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MWYwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxMDg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDExODogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDEyODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDEzODogMHgxLFxuXHQgICAgICAgICAgICAweDE0ODogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4OiAweDQwMSxcblx0ICAgICAgICAgICAgMHgxNzg6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxODg6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxOTg6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjg6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxYzg6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDFkODogMHg0MDAsXG5cdCAgICAgICAgICAgIDB4MWU4OiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MWY4OiAweDEwMDAwMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHgxOiAweDIwMDAwLFxuXHQgICAgICAgICAgICAweDI6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHgzOiAweDIwLFxuXHQgICAgICAgICAgICAweDQ6IDB4MjAwMjAsXG5cdCAgICAgICAgICAgIDB4NTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDY6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHg3OiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4OiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4OTogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweGE6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4YjogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweGM6IDB4ODIwLFxuXHQgICAgICAgICAgICAweGQ6IDB4MCxcblx0ICAgICAgICAgICAgMHhlOiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ZjogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMjogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAzOiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDQ6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNjogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNzogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwODogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA5OiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwYTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwYjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBjOiAweDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGQ6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZTogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBmOiAweDIwMDAwLFxuXHQgICAgICAgICAgICAweDEwOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDExOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4MTI6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4MTM6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDE0OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4MTU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHgxNjogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDE3OiAweDIwMDAwLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4MTk6IDB4MjAwMjAsXG5cdCAgICAgICAgICAgIDB4MWE6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDFjOiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4MWQ6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4MWU6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDFmOiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTA6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTE6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDEyOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTM6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTQ6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTU6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE3OiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTg6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFhOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWI6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYzogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZDogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWU6IDB4MjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWY6IDB4ODAyMDgwMFxuXHQgICAgICAgIH1cblx0ICAgIF07XG5cblx0ICAgIC8vIE1hc2tzIHRoYXQgc2VsZWN0IHRoZSBTQk9YIGlucHV0XG5cdCAgICB2YXIgU0JPWF9NQVNLID0gW1xuXHQgICAgICAgIDB4ZjgwMDAwMDEsIDB4MWY4MDAwMDAsIDB4MDFmODAwMDAsIDB4MDAxZjgwMDAsXG5cdCAgICAgICAgMHgwMDAxZjgwMCwgMHgwMDAwMWY4MCwgMHgwMDAwMDFmOCwgMHg4MDAwMDAxZlxuXHQgICAgXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIERFUyA9IENfYWxnby5ERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU2VsZWN0IDU2IGJpdHMgYWNjb3JkaW5nIHRvIFBDMVxuXHQgICAgICAgICAgICB2YXIga2V5Qml0cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCaXRQb3MgPSBQQzFbaV0gLSAxO1xuXHQgICAgICAgICAgICAgICAga2V5Qml0c1tpXSA9IChrZXlXb3Jkc1trZXlCaXRQb3MgPj4+IDVdID4+PiAoMzEgLSBrZXlCaXRQb3MgJSAzMikpICYgMTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFzc2VtYmxlIDE2IHN1YmtleXNcblx0ICAgICAgICAgICAgdmFyIHN1YktleXMgPSB0aGlzLl9zdWJLZXlzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIG5TdWJLZXkgPSAwOyBuU3ViS2V5IDwgMTY7IG5TdWJLZXkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHN1YmtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YktleSA9IHN1YktleXNbblN1YktleV0gPSBbXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRTaGlmdCA9IEJJVF9TSElGVFNbblN1YktleV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNlbGVjdCA0OCBiaXRzIGFjY29yZGluZyB0byBQQzJcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBmcm9tIHRoZSBsZWZ0IDI4IGtleSBiaXRzXG5cdCAgICAgICAgICAgICAgICAgICAgc3ViS2V5WyhpIC8gNikgfCAwXSB8PSBrZXlCaXRzWygoUEMyW2ldIC0gMSkgKyBiaXRTaGlmdCkgJSAyOF0gPDwgKDMxIC0gaSAlIDYpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIHJpZ2h0IDI4IGtleSBiaXRzXG5cdCAgICAgICAgICAgICAgICAgICAgc3ViS2V5WzQgKyAoKGkgLyA2KSB8IDApXSB8PSBrZXlCaXRzWzI4ICsgKCgoUEMyW2kgKyAyNF0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4KV0gPDwgKDMxIC0gaSAlIDYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBTaW5jZSBlYWNoIHN1YmtleSBpcyBhcHBsaWVkIHRvIGFuIGV4cGFuZGVkIDMyLWJpdCBpbnB1dCxcblx0ICAgICAgICAgICAgICAgIC8vIHRoZSBzdWJrZXkgY2FuIGJlIGJyb2tlbiBpbnRvIDggdmFsdWVzIHNjYWxlZCB0byAzMi1iaXRzLFxuXHQgICAgICAgICAgICAgICAgLy8gd2hpY2ggYWxsb3dzIHRoZSBrZXkgdG8gYmUgdXNlZCB3aXRob3V0IGV4cGFuc2lvblxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzBdID0gKHN1YktleVswXSA8PCAxKSB8IChzdWJLZXlbMF0gPj4+IDMxKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgNzsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViS2V5W2ldID0gc3ViS2V5W2ldID4+PiAoKGkgLSAxKSAqIDQgKyAzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHN1YktleVs3XSA9IChzdWJLZXlbN10gPDwgNSkgfCAoc3ViS2V5WzddID4+PiAyNyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGludmVyc2Ugc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgaW52U3ViS2V5cyA9IHRoaXMuX2ludlN1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpbnZTdWJLZXlzW2ldID0gc3ViS2V5c1sxNSAtIGldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9zdWJLZXlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX2ludlN1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBzdWJLZXlzKSB7XG5cdCAgICAgICAgICAgIC8vIEdldCBpbnB1dFxuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSBNW29mZnNldF07XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IE1bb2Zmc2V0ICsgMV07XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCBwZXJtdXRhdGlvblxuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgNCwgIDB4MGYwZjBmMGYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMTYsIDB4MDAwMGZmZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgMiwgIDB4MzMzMzMzMzMpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgOCwgIDB4MDBmZjAwZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMSwgIDB4NTU1NTU1NTUpO1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMTY7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIHN1YktleSA9IHN1YktleXNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxCbG9jayA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgICAgIHZhciByQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEZlaXN0ZWwgZnVuY3Rpb25cblx0ICAgICAgICAgICAgICAgIHZhciBmID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZiB8PSBTQk9YX1BbaV1bKChyQmxvY2sgXiBzdWJLZXlbaV0pICYgU0JPWF9NQVNLW2ldKSA+Pj4gMF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSByQmxvY2s7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yQmxvY2sgPSBsQmxvY2sgXiBmO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gVW5kbyBzd2FwIGZyb20gbGFzdCByb3VuZFxuXHQgICAgICAgICAgICB2YXIgdCA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgdGhpcy5fbEJsb2NrID0gdGhpcy5fckJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9yQmxvY2sgPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIEZpbmFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gPSB0aGlzLl9sQmxvY2s7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvLyBTd2FwIGJpdHMgYWNyb3NzIHRoZSBsZWZ0IGFuZCByaWdodCB3b3Jkc1xuXHQgICAgZnVuY3Rpb24gZXhjaGFuZ2VMUihvZmZzZXQsIG1hc2spIHtcblx0ICAgICAgICB2YXIgdCA9ICgodGhpcy5fbEJsb2NrID4+PiBvZmZzZXQpIF4gdGhpcy5fckJsb2NrKSAmIG1hc2s7XG5cdCAgICAgICAgdGhpcy5fckJsb2NrIF49IHQ7XG5cdCAgICAgICAgdGhpcy5fbEJsb2NrIF49IHQgPDwgb2Zmc2V0O1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZVJMKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9yQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9sQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuREVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkRFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoREVTKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBUcmlwbGUtREVTIGJsb2NrIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBUcmlwbGVERVMgPSBDX2FsZ28uVHJpcGxlREVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGtleSBsZW5ndGggaXMgdmFsaWQgKDY0LCAxMjggb3IgPj0gMTkyIGJpdClcblx0ICAgICAgICAgICAgaWYgKGtleVdvcmRzLmxlbmd0aCAhPT0gMiAmJiBrZXlXb3Jkcy5sZW5ndGggIT09IDQgJiYga2V5V29yZHMubGVuZ3RoIDwgNikge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleSBsZW5ndGggLSAzREVTIHJlcXVpcmVzIHRoZSBrZXkgbGVuZ3RoIHRvIGJlIDY0LCAxMjgsIDE5MiBvciA+MTkyLicpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBrZXkgYWNjb3JkaW5nIHRvIHRoZSBrZXlpbmcgb3B0aW9ucyBkZWZpbmVkIGluIDNERVMgc3RhbmRhcmRcblx0ICAgICAgICAgICAgdmFyIGtleTEgPSBrZXlXb3Jkcy5zbGljZSgwLCAyKTtcblx0ICAgICAgICAgICAgdmFyIGtleTIgPSBrZXlXb3Jkcy5sZW5ndGggPCA0ID8ga2V5V29yZHMuc2xpY2UoMCwgMikgOiBrZXlXb3Jkcy5zbGljZSgyLCA0KTtcblx0ICAgICAgICAgICAgdmFyIGtleTMgPSBrZXlXb3Jkcy5sZW5ndGggPCA2ID8ga2V5V29yZHMuc2xpY2UoMCwgMikgOiBrZXlXb3Jkcy5zbGljZSg0LCA2KTtcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgREVTIGluc3RhbmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTEpKTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMiA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkyKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MykpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMS5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMi5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMy5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDE5Mi8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBibG9ja1NpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5UcmlwbGVERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5UcmlwbGVERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuVHJpcGxlREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihUcmlwbGVERVMpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlRyaXBsZURFUztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFgzMldvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiB4NjQgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ194NjQgPSBDLng2NCA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgNjQtYml0IHdvcmQuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZCA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgNjQtYml0IHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAzMiBiaXRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3cgVGhlIGxvdyAzMiBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeDY0V29yZCA9IENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoaGlnaCwgbG93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgICAgIHRoaXMubG93ID0gbG93O1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgTk9UcyB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgbmVnYXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBuZWdhdGVkID0geDY0V29yZC5ub3QoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBub3Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB+dGhpcy5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gfnRoaXMubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIEFORHMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBBTkQgd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgQU5EaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYW5kZWQgPSB4NjRXb3JkLmFuZChhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gYW5kOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCAmIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93ICYgd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgT1JzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgT1JpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBvcmVkID0geDY0V29yZC5vcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gb3I6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoIHwgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgfCB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBYT1JzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gWE9SIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIFhPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHhvcmVkID0geDY0V29yZC54b3IoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHhvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggXiB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyBeIHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgbGVmdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byBzaGlmdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBzaGlmdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHNoaWZ0ZWQgPSB4NjRXb3JkLnNoaWZ0TCgyNSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gc2hpZnRMOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyBpZiAobiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggPDwgbikgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyA8PCBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmxvdyA8PCAobiAtIDMyKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBsb3cgPSAwO1xuXHQgICAgICAgICAgICAvLyB9XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byBzaGlmdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBzaGlmdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHNoaWZ0ZWQgPSB4NjRXb3JkLnNoaWZ0Uig3KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgPj4+IG4pIHwgKHRoaXMuaGlnaCA8PCAoMzIgLSBuKSk7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCA+Pj4gbjtcblx0ICAgICAgICAgICAgLy8gfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmhpZ2ggPj4+IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAwO1xuXHQgICAgICAgICAgICAvLyB9XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJvdGF0ZXMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgbGVmdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyByb3RMOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5zaGlmdEwobikub3IodGhpcy5zaGlmdFIoNjQgLSBuKSk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJvdGF0ZXMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcm90YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHJvdGF0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcm90YXRlZCA9IHg2NFdvcmQucm90Uig3KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyByb3RSOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5zaGlmdFIobikub3IodGhpcy5zaGlmdEwoNjQgLSBuKSk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBhZGQgd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgYWRkaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYWRkZWQgPSB4NjRXb3JkLmFkZChhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gYWRkOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gKHRoaXMubG93ICsgd29yZC5sb3cpIHwgMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGNhcnJ5ID0gKGxvdyA+Pj4gMCkgPCAodGhpcy5sb3cgPj4+IDApID8gMSA6IDA7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCArIHdvcmQuaGlnaCArIGNhcnJ5KSB8IDA7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQW4gYXJyYXkgb2YgNjQtYml0IHdvcmRzLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7QXJyYXl9IHdvcmRzIFRoZSBhcnJheSBvZiBDcnlwdG9KUy54NjQuV29yZCBvYmplY3RzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgWDY0V29yZEFycmF5ID0gQ194NjQuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiBDcnlwdG9KUy54NjQuV29yZCBvYmplY3RzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MTgxOTFhMWIsIDB4MWMxZDFlMWYpXG5cdCAgICAgICAgICogICAgIF0pO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSwgMTApO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyA2NC1iaXQgd29yZCBhcnJheSB0byBhIDMyLWJpdCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q3J5cHRvSlMubGliLldvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5J3MgZGF0YSBhcyBhIDMyLWJpdCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeDMyV29yZEFycmF5ID0geDY0V29yZEFycmF5LnRvWDMyKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9YMzI6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB4NjRXb3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB4NjRXb3Jkc0xlbmd0aCA9IHg2NFdvcmRzLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB4MzJXb3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHg2NFdvcmRzTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4NjRXb3JkID0geDY0V29yZHNbaV07XG5cdCAgICAgICAgICAgICAgICB4MzJXb3Jkcy5wdXNoKHg2NFdvcmQuaGlnaCk7XG5cdCAgICAgICAgICAgICAgICB4MzJXb3Jkcy5wdXNoKHg2NFdvcmQubG93KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBYMzJXb3JkQXJyYXkuY3JlYXRlKHgzMldvcmRzLCB0aGlzLnNpZ0J5dGVzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHg2NFdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBcIndvcmRzXCIgYXJyYXlcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIGVhY2ggWDY0V29yZCBvYmplY3Rcblx0ICAgICAgICAgICAgdmFyIHdvcmRzTGVuZ3RoID0gd29yZHMubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2ldID0gd29yZHNbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUztcblxufSkpOyIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5tdWx0aXNlbGVjdHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tcy1iZywjZmZmKTtib3JkZXI6dmFyKC0tbXMtYm9yZGVyLXdpZHRoLDFweCkgc29saWQgdmFyKC0tbXMtYm9yZGVyLWNvbG9yLCNkMWQ1ZGIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtcmFkaXVzLDRweCk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6dmFyKC0tbXMtZm9udC1zaXplLDFyZW0pO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MCBhdXRvO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqMiArIHZhcigtLW1zLWZvbnQtc2l6ZSwgMXJlbSkqdmFyKC0tbXMtbGluZS1oZWlnaHQsIDEuMzc1KSArIHZhcigtLW1zLXB5LCAuNXJlbSkqMik7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LmlzLW9wZW57Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1yYWRpdXMsNHB4KSB2YXIoLS1tcy1yYWRpdXMsNHB4KSAwIDB9Lm11bHRpc2VsZWN0LmlzLW9wZW4tdG9we2JvcmRlci1yYWRpdXM6MCAwIHZhcigtLW1zLXJhZGl1cyw0cHgpIHZhcigtLW1zLXJhZGl1cyw0cHgpfS5tdWx0aXNlbGVjdC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWJnLWRpc2FibGVkLCNmM2Y0ZjYpO2N1cnNvcjpkZWZhdWx0fS5tdWx0aXNlbGVjdC5pcy1hY3RpdmV7Ym94LXNoYWRvdzowIDAgMCB2YXIoLS1tcy1yaW5nLXdpZHRoLDNweCkgdmFyKC0tbXMtcmluZy1jb2xvcixyZ2JhKDE2LDE4NSwxMjksLjE4OCkpfS5tdWx0aXNlbGVjdC1tdWx0aXBsZS1sYWJlbCwubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXIsLm11bHRpc2VsZWN0LXNpbmdsZS1sYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2xlZnQ6MDtsaW5lLWhlaWdodDp2YXIoLS1tcy1saW5lLWhlaWdodCwxLjM3NSk7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXB4LC44NzVyZW0pO3BhZGRpbmctcmlnaHQ6Y2FsYygxLjI1cmVtICsgdmFyKC0tbXMtcHgsIC44NzVyZW0pKjMpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9Lm11bHRpc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLW1zLXBsYWNlaG9sZGVyLWNvbG9yLCM5Y2EzYWYpfS5tdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWwtdGV4dHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubXVsdGlzZWxlY3Qtc2VhcmNoey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLW1zLWJnLCNmZmYpO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtcmFkaXVzLDRweCk7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwYWRkaW5nLWxlZnQ6dmFyKC0tbXMtcHgsLjg3NXJlbSk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm11bHRpc2VsZWN0LXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm11bHRpc2VsZWN0LXRhZ3N7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtmbGV4LXNocmluazoxO2ZsZXgtd3JhcDp3cmFwO21hcmdpbjp2YXIoLS1tcy10YWctbXksLjI1cmVtKSAwIDA7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXB5LC41cmVtKX0ubXVsdGlzZWxlY3QtdGFne2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1zLXRhZy1iZywjMTBiOTgxKTtib3JkZXItcmFkaXVzOnZhcigtLW1zLXRhZy1yYWRpdXMsNHB4KTtjb2xvcjp2YXIoLS1tcy10YWctY29sb3IsI2ZmZik7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTp2YXIoLS1tcy10YWctZm9udC1zaXplLC44NzVyZW0pO2ZvbnQtd2VpZ2h0OnZhcigtLW1zLXRhZy1mb250LXdlaWdodCw2MDApO2xpbmUtaGVpZ2h0OnZhcigtLW1zLXRhZy1saW5lLWhlaWdodCwxLjI1cmVtKTttYXJnaW4tYm90dG9tOnZhcigtLW1zLXRhZy1teSwuMjVyZW0pO21hcmdpbi1yaWdodDp2YXIoLS1tcy10YWctbXgsLjI1cmVtKTtwYWRkaW5nOnZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSAwIHZhcigtLW1zLXRhZy1weSwuMTI1cmVtKSB2YXIoLS1tcy10YWctcHgsLjVyZW0pO3doaXRlLXNwYWNlOm5vd3JhcH0ubXVsdGlzZWxlY3QtdGFnLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtdGFnLWJnLWRpc2FibGVkLCM5Y2EzYWYpO2NvbG9yOnZhcigtLW1zLXRhZy1jb2xvci1kaXNhYmxlZCwjZmZmKTtwYWRkaW5nLXJpZ2h0OnZhcigtLW1zLXRhZy1weCwuNXJlbSl9Lm11bHRpc2VsZWN0LXRhZy1yZW1vdmV7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtdGFnLXJlbW92ZS1yYWRpdXMsNHB4KTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46dmFyKC0tbXMtdGFnLXJlbW92ZS1teSwwKSB2YXIoLS1tcy10YWctcmVtb3ZlLW14LC4xMjVyZW0pO3BhZGRpbmc6dmFyKC0tbXMtdGFnLXJlbW92ZS1weSwuMjVyZW0pIHZhcigtLW1zLXRhZy1yZW1vdmUtcHgsLjI1cmVtKX0ubXVsdGlzZWxlY3QtdGFnLXJlbW92ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2Myl9Lm11bHRpc2VsZWN0LXRhZy1yZW1vdmUtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6Ljc1cmVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjtvcGFjaXR5Oi44O3dpZHRoOi43NXJlbX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2gtd3JhcHBlcntkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTtmbGV4LXNocmluazoxO2hlaWdodDoxMDAlO21hcmdpbjowIHZhcigtLW1zLXRhZy1teCw0cHgpIHZhcigtLW1zLXRhZy1teSw0cHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaC1jb3B5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxcHg7dmlzaWJpbGl0eTpoaWRkZW47d2hpdGUtc3BhY2U6cHJlLXdyYXA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2h7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JvcmRlcjowO2JvdHRvbTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2xlZnQ6MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtdGFncy1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sLm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm11bHRpc2VsZWN0LWluaWZpdGV7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqMiArIHZhcigtLW1zLWZvbnQtc2l6ZSwgMXJlbSkqdmFyKC0tbXMtbGluZS1oZWlnaHQsIDEuMzc1KSArIHZhcigtLW1zLXB5LCAuNXJlbSkqMik7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtaW5pZml0ZS1zcGlubmVyLC5tdWx0aXNlbGVjdC1zcGlubmVyey13ZWJraXQtYW5pbWF0aW9uOm11bHRpc2VsZWN0LXNwaW4gMXMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjptdWx0aXNlbGVjdC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLXNwaW5uZXItY29sb3IsIzEwYjk4MSk7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtoZWlnaHQ6MXJlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDUxMiA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTQ1Ni40MzMgMzcxLjcyLTI3Ljc5LTE2LjA0NWMtNy4xOTItNC4xNTItMTAuMDUyLTEzLjEzNi02LjQ4Ny0yMC42MzYgMjUuODItNTQuMzI4IDIzLjU2Ni0xMTguNjAyLTYuNzY4LTE3MS4wMy0zMC4yNjUtNTIuNTI5LTg0LjgwMi04Ni42MjEtMTQ0Ljc2LTkxLjQyNEMyNjIuMzUgNzEuOTIyIDI1NiA2NC45NTMgMjU2IDU2LjY0OVYyNC41NmMwLTkuMzEgNy45MTYtMTYuNjA5IDE3LjIwNC0xNS45NiA4MS43OTUgNS43MTcgMTU2LjQxMiA1MS45MDIgMTk3LjYxMSAxMjMuNDA4IDQxLjMwMSA3MS4zODUgNDMuOTkgMTU5LjA5NiA4LjA0MiAyMzIuNzkyLTQuMDgyIDguMzY5LTE0LjM2MSAxMS41NzUtMjIuNDI0IDYuOTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgNTEyIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtNDU2LjQzMyAzNzEuNzItMjcuNzktMTYuMDQ1Yy03LjE5Mi00LjE1Mi0xMC4wNTItMTMuMTM2LTYuNDg3LTIwLjYzNiAyNS44Mi01NC4zMjggMjMuNTY2LTExOC42MDItNi43NjgtMTcxLjAzLTMwLjI2NS01Mi41MjktODQuODAyLTg2LjYyMS0xNDQuNzYtOTEuNDI0QzI2Mi4zNSA3MS45MjIgMjU2IDY0Ljk1MyAyNTYgNTYuNjQ5VjI0LjU2YzAtOS4zMSA3LjkxNi0xNi42MDkgMTcuMjA0LTE1Ljk2IDgxLjc5NSA1LjcxNyAxNTYuNDEyIDUxLjkwMiAxOTcuNjExIDEyMy40MDggNDEuMzAxIDcxLjM4NSA0My45OSAxNTkuMDk2IDguMDQyIDIzMi43OTItNC4wODIgOC4zNjktMTQuMzYxIDExLjU3NS0yMi40MjQgNi45MnonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFyZW07ei1pbmRleDoxMH0ubXVsdGlzZWxlY3Qtc3Bpbm5lcnttYXJnaW46MCB2YXIoLS1tcy1weCwuODc1cmVtKSAwIDB9Lm11bHRpc2VsZWN0LWNsZWFye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO29wYWNpdHk6MTtwYWRkaW5nOjAgdmFyKC0tbXMtcHgsLjg3NXJlbSkgMCAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246LjNzO3otaW5kZXg6MTB9Lm11bHRpc2VsZWN0LWNsZWFyOmhvdmVyIC5tdWx0aXNlbGVjdC1jbGVhci1pY29ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXMtY2xlYXItY29sb3ItaG92ZXIsIzAwMCl9Lm11bHRpc2VsZWN0LWNsZWFyLWljb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tcy1jbGVhci1jb2xvciwjOTk5KTtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nbTIwNy42IDI1NiAxMDcuNzItMTA3LjcyYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThsLTI1LjAzLTI1LjAzYy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDE2MCAyMDguNCA1Mi4yOCAxMDAuNjhjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMNC42OCAxMjUuN2MtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OEwxMTIuNCAyNTYgNC42OCAzNjMuNzJjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThsMjUuMDMgMjUuMDNjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMEwxNjAgMzAzLjZsMTA3LjcyIDEwNy43MmM2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwbDI1LjAzLTI1LjAzYzYuMjMtNi4yMyA2LjIzLTE2LjM0IDAtMjIuNThMMjA3LjYgMjU2eicvJTNFJTNDL3N2ZyUzRVxcXCIpO3RyYW5zaXRpb246LjNzfS5tdWx0aXNlbGVjdC1jYXJldCwubXVsdGlzZWxlY3QtY2xlYXItaWNvbntoZWlnaHQ6MS4xMjVyZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDouNjI1cmVtfS5tdWx0aXNlbGVjdC1jYXJldHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLWNhcmV0LWNvbG9yLCM5OTkpO2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7bWFyZ2luOjAgdmFyKC0tbXMtcHgsLjg3NXJlbSkgMCAwOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMzEuMyAxOTJoMjU3LjNjMTcuOCAwIDI2LjcgMjEuNSAxNC4xIDM0LjFMMTc0LjEgMzU0LjhjLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwTDE3LjIgMjI2LjFDNC42IDIxMy41IDEzLjUgMTkyIDMxLjMgMTkyeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0nMCAwIDMyMCA1MTInIGZpbGw9J2N1cnJlbnRDb2xvcicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTMxLjMgMTkyaDI1Ny4zYzE3LjggMCAyNi43IDIxLjUgMTQuMSAzNC4xTDE3NC4xIDM1NC44Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMEwxNy4yIDIyNi4xQzQuNiAyMTMuNSAxMy41IDE5MiAzMS4zIDE5MnonLyUzRSUzQy9zdmclM0VcXFwiKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3otaW5kZXg6MTB9Lm11bHRpc2VsZWN0LWNhcmV0LmlzLW9wZW57cG9pbnRlci1ldmVudHM6YXV0bzt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9Lm11bHRpc2VsZWN0LWRyb3Bkb3duey13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2JhY2tncm91bmQ6dmFyKC0tbXMtZHJvcGRvd24tYmcsI2ZmZik7Ym9yZGVyOnZhcigtLW1zLWRyb3Bkb3duLWJvcmRlci13aWR0aCwxcHgpIHNvbGlkIHZhcigtLW1zLWRyb3Bkb3duLWJvcmRlci1jb2xvciwjZDFkNWRiKTtib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KTtib3R0b206MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xlZnQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO21heC1oZWlnaHQ6MTVyZW07bWF4LWhlaWdodDp2YXIoLS1tcy1tYXgtaGVpZ2h0LDEwcmVtKTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3cteTpzY3JvbGw7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6Y2FsYyh2YXIoLS1tcy1ib3JkZXItd2lkdGgsIDFweCkqLTEpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpO3otaW5kZXg6MTAwfS5tdWx0aXNlbGVjdC1kcm9wZG93bi5pcy10b3B7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSB2YXIoLS1tcy1kcm9wZG93bi1yYWRpdXMsNHB4KSAwIDA7Ym90dG9tOmF1dG87dG9wOnZhcigtLW1zLWJvcmRlci13aWR0aCwxcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX0ubXVsdGlzZWxlY3QtZHJvcGRvd24uaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0ubXVsdGlzZWxlY3Qtb3B0aW9uc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9Lm11bHRpc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmcsI2U1ZTdlYik7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLCMzNzQxNTEpO2N1cnNvcjpkZWZhdWx0O2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTtmb250LXdlaWdodDo2MDA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGluZS1oZWlnaHQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtbGluZS1oZWlnaHQsMS4zNzUpO3BhZGRpbmc6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtcHksLjNyZW0pIHZhcigtLW1zLWdyb3VwLWxhYmVsLXB4LC43NXJlbSk7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1wb2ludGFibGV7Y3Vyc29yOnBvaW50ZXJ9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1wb2ludGVkLCNkMWQ1ZGIpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXBvaW50ZWQsIzM3NDE1MSl9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctc2VsZWN0ZWQsIzA1OTY2OSk7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3Itc2VsZWN0ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctZGlzYWJsZWQsI2YzZjRmNik7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3ItZGlzYWJsZWQsI2QxZDVkYik7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1zZWxlY3RlZC5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctc2VsZWN0ZWQtcG9pbnRlZCwjMGM5ZTcwKTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1zZWxlY3RlZC1wb2ludGVkLCNmZmYpfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbC5pcy1zZWxlY3RlZC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLXNlbGVjdGVkLWRpc2FibGVkLCM3NWNmYjEpO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXNlbGVjdGVkLWRpc2FibGVkLCNkMWZhZTUpfS5tdWx0aXNlbGVjdC1ncm91cC1vcHRpb25ze21hcmdpbjowO3BhZGRpbmc6MH0ubXVsdGlzZWxlY3Qtb3B0aW9ue2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTp2YXIoLS1tcy1vcHRpb24tZm9udC1zaXplLDFyZW0pO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2xpbmUtaGVpZ2h0OnZhcigtLW1zLW9wdGlvbi1saW5lLWhlaWdodCwxLjM3NSk7cGFkZGluZzp2YXIoLS1tcy1vcHRpb24tcHksLjVyZW0pIHZhcigtLW1zLW9wdGlvbi1weCwuNzVyZW0pO3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctcG9pbnRlZCwjZjNmNGY2KTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3ItcG9pbnRlZCwjMWYyOTM3KX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXNlbGVjdGVkLCMxMGI5ODEpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1zZWxlY3RlZCwjZmZmKX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLWRpc2FibGVkLCNmZmYpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1kaXNhYmxlZCwjZDFkNWRiKTtjdXJzb3I6bm90LWFsbG93ZWR9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1zZWxlY3RlZC5pcy1wb2ludGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXNlbGVjdGVkLXBvaW50ZWQsIzI2YzA4ZSk7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLXNlbGVjdGVkLXBvaW50ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LW9wdGlvbi5pcy1zZWxlY3RlZC5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1zZWxlY3RlZC1kaXNhYmxlZCwjODdkY2MwKTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3Itc2VsZWN0ZWQtZGlzYWJsZWQsI2QxZmFlNSl9Lm11bHRpc2VsZWN0LW5vLW9wdGlvbnMsLm11bHRpc2VsZWN0LW5vLXJlc3VsdHN7Y29sb3I6dmFyKC0tbXMtZW1wdHktY29sb3IsIzRiNTU2Myk7cGFkZGluZzp2YXIoLS1tcy1vcHRpb24tcHksLjVyZW0pIHZhcigtLW1zLW9wdGlvbi1weCwuNzVyZW0pfS5tdWx0aXNlbGVjdC1mYWtlLWlucHV0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7Ym90dG9tOi0xcHg7Zm9udC1zaXplOjA7aGVpZ2h0OjFweDtsZWZ0OjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LWZha2UtaW5wdXQ6YWN0aXZlLC5tdWx0aXNlbGVjdC1mYWtlLWlucHV0OmZvY3Vze291dGxpbmU6bm9uZX0ubXVsdGlzZWxlY3Qtc3BhY2Vye2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LW11bHRpcGxlLWxhYmVsLFtkaXI9cnRsXSAubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXIsW2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1zaW5nbGUtbGFiZWx7bGVmdDphdXRvO3BhZGRpbmctbGVmdDpjYWxjKDEuMjVyZW0gKyB2YXIoLS1tcy1weCwgLjg3NXJlbSkqMyk7cGFkZGluZy1yaWdodDp2YXIoLS1tcy1weCwuODc1cmVtKTtyaWdodDowfVtkaXI9cnRsXSAubXVsdGlzZWxlY3Qtc2VhcmNoe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtcHgsLjg3NXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC10YWdze3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtcHksLjVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtdGFne21hcmdpbi1sZWZ0OnZhcigtLW1zLXRhZy1teCwuMjVyZW0pO21hcmdpbi1yaWdodDowO3BhZGRpbmc6dmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIHZhcigtLW1zLXRhZy1weCwuNXJlbSkgdmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIDB9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC10YWcuaXMtZGlzYWJsZWR7cGFkZGluZy1sZWZ0OnZhcigtLW1zLXRhZy1weCwuNXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1jYXJldCxbZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXNwaW5uZXJ7bWFyZ2luOjAgMCAwIHZhcigtLW1zLXB4LC44NzVyZW0pfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtY2xlYXJ7cGFkZGluZzowIDAgMCB2YXIoLS1tcy1weCwuODc1cmVtKX1ALXdlYmtpdC1rZXlmcmFtZXMgbXVsdGlzZWxlY3Qtc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIG11bHRpc2VsZWN0LXNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL0B2dWVmb3JtL211bHRpc2VsZWN0L3RoZW1lcy9kZWZhdWx0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSxhQUFhLGtC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QUFjLENBQUMsa0ZBQWtGLENBQUMsdUNBQXVDLG1DQUFtQyxDQUFDLDREQUE0RCxpQ0FBaUMsQ0FBQyw2QkFBNkIsa0NBQWtDLENBQUMsb0NBQW9DLEdBQUcsbUJBQW1CLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLDRCQUE0QixHQUFHLG1CQUFtQixDQUFDLEdBQUcsdUJBQXVCLENBQUNcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLm11bHRpc2VsZWN0e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1zLWJnLCNmZmYpO2JvcmRlcjp2YXIoLS1tcy1ib3JkZXItd2lkdGgsMXB4KSBzb2xpZCB2YXIoLS1tcy1ib3JkZXItY29sb3IsI2QxZDVkYik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1yYWRpdXMsNHB4KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTp2YXIoLS1tcy1mb250LXNpemUsMXJlbSk7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbjowIGF1dG87bWluLWhlaWdodDpjYWxjKHZhcigtLW1zLWJvcmRlci13aWR0aCwgMXB4KSoyICsgdmFyKC0tbXMtZm9udC1zaXplLCAxcmVtKSp2YXIoLS1tcy1saW5lLWhlaWdodCwgMS4zNzUpICsgdmFyKC0tbXMtcHksIC41cmVtKSoyKTtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QuaXMtb3Blbntib3JkZXItcmFkaXVzOnZhcigtLW1zLXJhZGl1cyw0cHgpIHZhcigtLW1zLXJhZGl1cyw0cHgpIDAgMH0ubXVsdGlzZWxlY3QuaXMtb3Blbi10b3B7Ym9yZGVyLXJhZGl1czowIDAgdmFyKC0tbXMtcmFkaXVzLDRweCkgdmFyKC0tbXMtcmFkaXVzLDRweCl9Lm11bHRpc2VsZWN0LmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtYmctZGlzYWJsZWQsI2YzZjRmNik7Y3Vyc29yOmRlZmF1bHR9Lm11bHRpc2VsZWN0LmlzLWFjdGl2ZXtib3gtc2hhZG93OjAgMCAwIHZhcigtLW1zLXJpbmctd2lkdGgsM3B4KSB2YXIoLS1tcy1yaW5nLWNvbG9yLHJnYmEoMTYsMTg1LDEyOSwuMTg4KSl9Lm11bHRpc2VsZWN0LW11bHRpcGxlLWxhYmVsLC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlciwubXVsdGlzZWxlY3Qtc2luZ2xlLWxhYmVse2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7bGVmdDowO2xpbmUtaGVpZ2h0OnZhcigtLW1zLWxpbmUtaGVpZ2h0LDEuMzc1KTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nLWxlZnQ6dmFyKC0tbXMtcHgsLjg3NXJlbSk7cGFkZGluZy1yaWdodDpjYWxjKDEuMjVyZW0gKyB2YXIoLS1tcy1weCwgLjg3NXJlbSkqMyk7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0ubXVsdGlzZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tbXMtcGxhY2Vob2xkZXItY29sb3IsIzljYTNhZil9Lm11bHRpc2VsZWN0LXNpbmdsZS1sYWJlbC10ZXh0e2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tdWx0aXNlbGVjdC1zZWFyY2h7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQ6dmFyKC0tbXMtYmcsI2ZmZik7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy1yYWRpdXMsNHB4KTtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3V0bGluZTpub25lO3BhZGRpbmctbGVmdDp2YXIoLS1tcy1weCwuODc1cmVtKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOjEwMCV9Lm11bHRpc2VsZWN0LXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubXVsdGlzZWxlY3Qtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC5tdWx0aXNlbGVjdC1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLC5tdWx0aXNlbGVjdC1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubXVsdGlzZWxlY3QtdGFnc3thbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2ZsZXgtc2hyaW5rOjE7ZmxleC13cmFwOndyYXA7bWFyZ2luOnZhcigtLW1zLXRhZy1teSwuMjVyZW0pIDAgMDtwYWRkaW5nLWxlZnQ6dmFyKC0tbXMtcHksLjVyZW0pfS5tdWx0aXNlbGVjdC10YWd7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbXMtdGFnLWJnLCMxMGI5ODEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbXMtdGFnLXJhZGl1cyw0cHgpO2NvbG9yOnZhcigtLW1zLXRhZy1jb2xvciwjZmZmKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOnZhcigtLW1zLXRhZy1mb250LXNpemUsLjg3NXJlbSk7Zm9udC13ZWlnaHQ6dmFyKC0tbXMtdGFnLWZvbnQtd2VpZ2h0LDYwMCk7bGluZS1oZWlnaHQ6dmFyKC0tbXMtdGFnLWxpbmUtaGVpZ2h0LDEuMjVyZW0pO21hcmdpbi1ib3R0b206dmFyKC0tbXMtdGFnLW15LC4yNXJlbSk7bWFyZ2luLXJpZ2h0OnZhcigtLW1zLXRhZy1teCwuMjVyZW0pO3BhZGRpbmc6dmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIDAgdmFyKC0tbXMtdGFnLXB5LC4xMjVyZW0pIHZhcigtLW1zLXRhZy1weCwuNXJlbSk7d2hpdGUtc3BhY2U6bm93cmFwfS5tdWx0aXNlbGVjdC10YWcuaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy10YWctYmctZGlzYWJsZWQsIzljYTNhZik7Y29sb3I6dmFyKC0tbXMtdGFnLWNvbG9yLWRpc2FibGVkLCNmZmYpO3BhZGRpbmctcmlnaHQ6dmFyKC0tbXMtdGFnLXB4LC41cmVtKX0ubXVsdGlzZWxlY3QtdGFnLXJlbW92ZXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXJhZGl1czp2YXIoLS1tcy10YWctcmVtb3ZlLXJhZGl1cyw0cHgpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjp2YXIoLS1tcy10YWctcmVtb3ZlLW15LDApIHZhcigtLW1zLXRhZy1yZW1vdmUtbXgsLjEyNXJlbSk7cGFkZGluZzp2YXIoLS1tcy10YWctcmVtb3ZlLXB5LC4yNXJlbSkgdmFyKC0tbXMtdGFnLXJlbW92ZS1weCwuMjVyZW0pfS5tdWx0aXNlbGVjdC10YWctcmVtb3ZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYzKX0ubXVsdGlzZWxlY3QtdGFnLXJlbW92ZS1pY29ue2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDouNzVyZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J20yMDcuNiAyNTYgMTA3LjcyLTEwNy43MmM2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4bC0yNS4wMy0yNS4wM2MtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEwxNjAgMjA4LjQgNTIuMjggMTAwLjY4Yy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDQuNjggMTI1LjdjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThMMTEyLjQgMjU2IDQuNjggMzYzLjcyYy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4bDI1LjAzIDI1LjAzYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBMMTYwIDMwMy42bDEwNy43MiAxMDcuNzJjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMGwyNS4wMy0yNS4wM2M2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4TDIwNy42IDI1NnonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J20yMDcuNiAyNTYgMTA3LjcyLTEwNy43MmM2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4bC0yNS4wMy0yNS4wM2MtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEwxNjAgMjA4LjQgNTIuMjggMTAwLjY4Yy02LjIzLTYuMjMtMTYuMzQtNi4yMy0yMi41OCAwTDQuNjggMTI1LjdjLTYuMjMgNi4yMy02LjIzIDE2LjM0IDAgMjIuNThMMTEyLjQgMjU2IDQuNjggMzYzLjcyYy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4bDI1LjAzIDI1LjAzYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBMMTYwIDMwMy42bDEwNy43MiAxMDcuNzJjNi4yMyA2LjIzIDE2LjM0IDYuMjMgMjIuNTggMGwyNS4wMy0yNS4wM2M2LjIzLTYuMjMgNi4yMy0xNi4zNCAwLTIyLjU4TDIwNy42IDI1NnonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO29wYWNpdHk6Ljg7d2lkdGg6Ljc1cmVtfS5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaC13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2ZsZXgtc2hyaW5rOjE7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgdmFyKC0tbXMtdGFnLW14LDRweCkgdmFyKC0tbXMtdGFnLW15LDRweCk7cG9zaXRpb246cmVsYXRpdmV9Lm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoLWNvcHl7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFweDt2aXNpYmlsaXR5OmhpZGRlbjt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOjA7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGVmdDowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC10YWdzLXNlYXJjaDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubXVsdGlzZWxlY3QtdGFncy1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm11bHRpc2VsZWN0LXRhZ3Mtc2VhcmNoOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubXVsdGlzZWxlY3QtdGFncy1zZWFyY2g6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubXVsdGlzZWxlY3QtaW5pZml0ZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLWhlaWdodDpjYWxjKHZhcigtLW1zLWJvcmRlci13aWR0aCwgMXB4KSoyICsgdmFyKC0tbXMtZm9udC1zaXplLCAxcmVtKSp2YXIoLS1tcy1saW5lLWhlaWdodCwgMS4zNzUpICsgdmFyKC0tbXMtcHksIC41cmVtKSoyKTt3aWR0aDoxMDAlfS5tdWx0aXNlbGVjdC1pbmlmaXRlLXNwaW5uZXIsLm11bHRpc2VsZWN0LXNwaW5uZXJ7LXdlYmtpdC1hbmltYXRpb246bXVsdGlzZWxlY3Qtc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOm11bHRpc2VsZWN0LXNwaW4gMXMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXMtc3Bpbm5lci1jb2xvciwjMTBiOTgxKTtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO2hlaWdodDoxcmVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgNTEyIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtNDU2LjQzMyAzNzEuNzItMjcuNzktMTYuMDQ1Yy03LjE5Mi00LjE1Mi0xMC4wNTItMTMuMTM2LTYuNDg3LTIwLjYzNiAyNS44Mi01NC4zMjggMjMuNTY2LTExOC42MDItNi43NjgtMTcxLjAzLTMwLjI2NS01Mi41MjktODQuODAyLTg2LjYyMS0xNDQuNzYtOTEuNDI0QzI2Mi4zNSA3MS45MjIgMjU2IDY0Ljk1MyAyNTYgNTYuNjQ5VjI0LjU2YzAtOS4zMSA3LjkxNi0xNi42MDkgMTcuMjA0LTE1Ljk2IDgxLjc5NSA1LjcxNyAxNTYuNDEyIDUxLjkwMiAxOTcuNjExIDEyMy40MDggNDEuMzAxIDcxLjM4NSA0My45OSAxNTkuMDk2IDguMDQyIDIzMi43OTItNC4wODIgOC4zNjktMTQuMzYxIDExLjU3NS0yMi40MjQgNi45MnonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J200NTYuNDMzIDM3MS43Mi0yNy43OS0xNi4wNDVjLTcuMTkyLTQuMTUyLTEwLjA1Mi0xMy4xMzYtNi40ODctMjAuNjM2IDI1LjgyLTU0LjMyOCAyMy41NjYtMTE4LjYwMi02Ljc2OC0xNzEuMDMtMzAuMjY1LTUyLjUyOS04NC44MDItODYuNjIxLTE0NC43Ni05MS40MjRDMjYyLjM1IDcxLjkyMiAyNTYgNjQuOTUzIDI1NiA1Ni42NDlWMjQuNTZjMC05LjMxIDcuOTE2LTE2LjYwOSAxNy4yMDQtMTUuOTYgODEuNzk1IDUuNzE3IDE1Ni40MTIgNTEuOTAyIDE5Ny42MTEgMTIzLjQwOCA0MS4zMDEgNzEuMzg1IDQzLjk5IDE1OS4wOTYgOC4wNDIgMjMyLjc5Mi00LjA4MiA4LjM2OS0xNC4zNjEgMTEuNTc1LTIyLjQyNCA2LjkyeicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MXJlbTt6LWluZGV4OjEwfS5tdWx0aXNlbGVjdC1zcGlubmVye21hcmdpbjowIHZhcigtLW1zLXB4LC44NzVyZW0pIDAgMH0ubXVsdGlzZWxlY3QtY2xlYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7b3BhY2l0eToxO3BhZGRpbmc6MCB2YXIoLS1tcy1weCwuODc1cmVtKSAwIDA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjouM3M7ei1pbmRleDoxMH0ubXVsdGlzZWxlY3QtY2xlYXI6aG92ZXIgLm11bHRpc2VsZWN0LWNsZWFyLWljb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tcy1jbGVhci1jb2xvci1ob3ZlciwjMDAwKX0ubXVsdGlzZWxlY3QtY2xlYXItaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1zLWNsZWFyLWNvbG9yLCM5OTkpO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdtMjA3LjYgMjU2IDEwNy43Mi0xMDcuNzJjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OGwtMjUuMDMtMjUuMDNjLTYuMjMtNi4yMy0xNi4zNC02LjIzLTIyLjU4IDBMMTYwIDIwOC40IDUyLjI4IDEwMC42OGMtNi4yMy02LjIzLTE2LjM0LTYuMjMtMjIuNTggMEw0LjY4IDEyNS43Yy02LjIzIDYuMjMtNi4yMyAxNi4zNCAwIDIyLjU4TDExMi40IDI1NiA0LjY4IDM2My43MmMtNi4yMyA2LjIzLTYuMjMgMTYuMzQgMCAyMi41OGwyNS4wMyAyNS4wM2M2LjIzIDYuMjMgMTYuMzQgNi4yMyAyMi41OCAwTDE2MCAzMDMuNmwxMDcuNzIgMTA3LjcyYzYuMjMgNi4yMyAxNi4zNCA2LjIzIDIyLjU4IDBsMjUuMDMtMjUuMDNjNi4yMy02LjIzIDYuMjMtMTYuMzQgMC0yMi41OEwyMDcuNiAyNTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7dHJhbnNpdGlvbjouM3N9Lm11bHRpc2VsZWN0LWNhcmV0LC5tdWx0aXNlbGVjdC1jbGVhci1pY29ue2hlaWdodDoxLjEyNXJlbTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOi42MjVyZW19Lm11bHRpc2VsZWN0LWNhcmV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXMtY2FyZXQtY29sb3IsIzk5OSk7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDttYXJnaW46MCB2YXIoLS1tcy1weCwuODc1cmVtKSAwIDA7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMjAgNTEyJyBmaWxsPSdjdXJyZW50Q29sb3InIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzIwIDUxMicgZmlsbD0nY3VycmVudENvbG9yJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMzEuMyAxOTJoMjU3LjNjMTcuOCAwIDI2LjcgMjEuNSAxNC4xIDM0LjFMMTc0LjEgMzU0LjhjLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwTDE3LjIgMjI2LjFDNC42IDIxMy41IDEzLjUgMTkyIDMxLjMgMTkyeicvJTNFJTNDL3N2ZyUzRVxcXCIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7ei1pbmRleDoxMH0ubXVsdGlzZWxlY3QtY2FyZXQuaXMtb3Blbntwb2ludGVyLWV2ZW50czphdXRvO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0ubXVsdGlzZWxlY3QtZHJvcGRvd257LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7YmFja2dyb3VuZDp2YXIoLS1tcy1kcm9wZG93bi1iZywjZmZmKTtib3JkZXI6dmFyKC0tbXMtZHJvcGRvd24tYm9yZGVyLXdpZHRoLDFweCkgc29saWQgdmFyKC0tbXMtZHJvcGRvd24tYm9yZGVyLWNvbG9yLCNkMWQ1ZGIpO2JvcmRlci1yYWRpdXM6MCAwIHZhcigtLW1zLWRyb3Bkb3duLXJhZGl1cyw0cHgpIHZhcigtLW1zLWRyb3Bkb3duLXJhZGl1cyw0cHgpO2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGVmdDpjYWxjKHZhcigtLW1zLWJvcmRlci13aWR0aCwgMXB4KSotMSk7bWFyZ2luLXRvcDpjYWxjKHZhcigtLW1zLWJvcmRlci13aWR0aCwgMXB4KSotMSk7bWF4LWhlaWdodDoxNXJlbTttYXgtaGVpZ2h0OnZhcigtLW1zLW1heC1oZWlnaHQsMTByZW0pO291dGxpbmU6bm9uZTtvdmVyZmxvdy15OnNjcm9sbDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKHZhcigtLW1zLWJvcmRlci13aWR0aCwgMXB4KSotMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSk7ei1pbmRleDoxMDB9Lm11bHRpc2VsZWN0LWRyb3Bkb3duLmlzLXRvcHtib3JkZXItcmFkaXVzOnZhcigtLW1zLWRyb3Bkb3duLXJhZGl1cyw0cHgpIHZhcigtLW1zLWRyb3Bkb3duLXJhZGl1cyw0cHgpIDAgMDtib3R0b206YXV0bzt0b3A6dmFyKC0tbXMtYm9yZGVyLXdpZHRoLDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfS5tdWx0aXNlbGVjdC1kcm9wZG93bi5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5tdWx0aXNlbGVjdC1vcHRpb25ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH0ubXVsdGlzZWxlY3QtZ3JvdXB7bWFyZ2luOjA7cGFkZGluZzowfS5tdWx0aXNlbGVjdC1ncm91cC1sYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZywjZTVlN2ViKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3IsIzM3NDE1MSk7Y3Vyc29yOmRlZmF1bHQ7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtsaW5lLWhlaWdodDp2YXIoLS1tcy1ncm91cC1sYWJlbC1saW5lLWhlaWdodCwxLjM3NSk7cGFkZGluZzp2YXIoLS1tcy1ncm91cC1sYWJlbC1weSwuM3JlbSkgdmFyKC0tbXMtZ3JvdXAtbGFiZWwtcHgsLjc1cmVtKTt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXBvaW50YWJsZXtjdXJzb3I6cG9pbnRlcn0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtcG9pbnRlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLWdyb3VwLWxhYmVsLWJnLXBvaW50ZWQsI2QxZDVkYik7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3ItcG9pbnRlZCwjMzc0MTUxKX0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtc2VsZWN0ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1zZWxlY3RlZCwjMDU5NjY5KTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1zZWxlY3RlZCwjZmZmKX0ubXVsdGlzZWxlY3QtZ3JvdXAtbGFiZWwuaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1kaXNhYmxlZCwjZjNmNGY2KTtjb2xvcjp2YXIoLS1tcy1ncm91cC1sYWJlbC1jb2xvci1kaXNhYmxlZCwjZDFkNWRiKTtjdXJzb3I6bm90LWFsbG93ZWR9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXNlbGVjdGVkLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1ncm91cC1sYWJlbC1iZy1zZWxlY3RlZC1wb2ludGVkLCMwYzllNzApO2NvbG9yOnZhcigtLW1zLWdyb3VwLWxhYmVsLWNvbG9yLXNlbGVjdGVkLXBvaW50ZWQsI2ZmZil9Lm11bHRpc2VsZWN0LWdyb3VwLWxhYmVsLmlzLXNlbGVjdGVkLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtYmctc2VsZWN0ZWQtZGlzYWJsZWQsIzc1Y2ZiMSk7Y29sb3I6dmFyKC0tbXMtZ3JvdXAtbGFiZWwtY29sb3Itc2VsZWN0ZWQtZGlzYWJsZWQsI2QxZmFlNSl9Lm11bHRpc2VsZWN0LWdyb3VwLW9wdGlvbnN7bWFyZ2luOjA7cGFkZGluZzowfS5tdWx0aXNlbGVjdC1vcHRpb257YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOnZhcigtLW1zLW9wdGlvbi1mb250LXNpemUsMXJlbSk7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bGluZS1oZWlnaHQ6dmFyKC0tbXMtb3B0aW9uLWxpbmUtaGVpZ2h0LDEuMzc1KTtwYWRkaW5nOnZhcigtLW1zLW9wdGlvbi1weSwuNXJlbSkgdmFyKC0tbXMtb3B0aW9uLXB4LC43NXJlbSk7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lfS5tdWx0aXNlbGVjdC1vcHRpb24uaXMtcG9pbnRlZHtiYWNrZ3JvdW5kOnZhcigtLW1zLW9wdGlvbi1iZy1wb2ludGVkLCNmM2Y0ZjYpO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1wb2ludGVkLCMxZjI5MzcpfS5tdWx0aXNlbGVjdC1vcHRpb24uaXMtc2VsZWN0ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctc2VsZWN0ZWQsIzEwYjk4MSk7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLXNlbGVjdGVkLCNmZmYpfS5tdWx0aXNlbGVjdC1vcHRpb24uaXMtZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctZGlzYWJsZWQsI2ZmZik7Y29sb3I6dmFyKC0tbXMtb3B0aW9uLWNvbG9yLWRpc2FibGVkLCNkMWQ1ZGIpO2N1cnNvcjpub3QtYWxsb3dlZH0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkLmlzLXBvaW50ZWR7YmFja2dyb3VuZDp2YXIoLS1tcy1vcHRpb24tYmctc2VsZWN0ZWQtcG9pbnRlZCwjMjZjMDhlKTtjb2xvcjp2YXIoLS1tcy1vcHRpb24tY29sb3Itc2VsZWN0ZWQtcG9pbnRlZCwjZmZmKX0ubXVsdGlzZWxlY3Qtb3B0aW9uLmlzLXNlbGVjdGVkLmlzLWRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tbXMtb3B0aW9uLWJnLXNlbGVjdGVkLWRpc2FibGVkLCM4N2RjYzApO2NvbG9yOnZhcigtLW1zLW9wdGlvbi1jb2xvci1zZWxlY3RlZC1kaXNhYmxlZCwjZDFmYWU1KX0ubXVsdGlzZWxlY3Qtbm8tb3B0aW9ucywubXVsdGlzZWxlY3Qtbm8tcmVzdWx0c3tjb2xvcjp2YXIoLS1tcy1lbXB0eS1jb2xvciwjNGI1NTYzKTtwYWRkaW5nOnZhcigtLW1zLW9wdGlvbi1weSwuNXJlbSkgdmFyKC0tbXMtb3B0aW9uLXB4LC43NXJlbSl9Lm11bHRpc2VsZWN0LWZha2UtaW5wdXR7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtib3R0b206LTFweDtmb250LXNpemU6MDtoZWlnaHQ6MXB4O2xlZnQ6MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6MTAwJX0ubXVsdGlzZWxlY3QtZmFrZS1pbnB1dDphY3RpdmUsLm11bHRpc2VsZWN0LWZha2UtaW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5tdWx0aXNlbGVjdC1zcGFjZXJ7ZGlzcGxheTpub25lfVtkaXI9cnRsXSAubXVsdGlzZWxlY3QtbXVsdGlwbGUtbGFiZWwsW2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1wbGFjZWhvbGRlcixbZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXNpbmdsZS1sYWJlbHtsZWZ0OmF1dG87cGFkZGluZy1sZWZ0OmNhbGMoMS4yNXJlbSArIHZhcigtLW1zLXB4LCAuODc1cmVtKSozKTtwYWRkaW5nLXJpZ2h0OnZhcigtLW1zLXB4LC44NzVyZW0pO3JpZ2h0OjB9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1zZWFyY2h7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDp2YXIoLS1tcy1weCwuODc1cmVtKX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXRhZ3N7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDp2YXIoLS1tcy1weSwuNXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC10YWd7bWFyZ2luLWxlZnQ6dmFyKC0tbXMtdGFnLW14LC4yNXJlbSk7bWFyZ2luLXJpZ2h0OjA7cGFkZGluZzp2YXIoLS1tcy10YWctcHksLjEyNXJlbSkgdmFyKC0tbXMtdGFnLXB4LC41cmVtKSB2YXIoLS1tcy10YWctcHksLjEyNXJlbSkgMH1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LXRhZy5pcy1kaXNhYmxlZHtwYWRkaW5nLWxlZnQ6dmFyKC0tbXMtdGFnLXB4LC41cmVtKX1bZGlyPXJ0bF0gLm11bHRpc2VsZWN0LWNhcmV0LFtkaXI9cnRsXSAubXVsdGlzZWxlY3Qtc3Bpbm5lcnttYXJnaW46MCAwIDAgdmFyKC0tbXMtcHgsLjg3NXJlbSl9W2Rpcj1ydGxdIC5tdWx0aXNlbGVjdC1jbGVhcntwYWRkaW5nOjAgMCAwIHZhcigtLW1zLXB4LC44NzVyZW0pfUAtd2Via2l0LWtleWZyYW1lcyBtdWx0aXNlbGVjdC1zcGluezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fUBrZXlmcmFtZXMgbXVsdGlzZWxlY3Qtc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyICYmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl0pOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSkge1xuICB2YXIgX2l0ZW0gPSBfc2xpY2VkVG9BcnJheShpdGVtLCA0KSxcbiAgICAgIGNvbnRlbnQgPSBfaXRlbVsxXSxcbiAgICAgIGNzc01hcHBpbmcgPSBfaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMi0wOC0yNlQxNzo1MlpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgdHJhYy0xNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG5cdFx0Ly8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG5cdFx0Ly8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cblx0XHQvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG5cdFx0Ly8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41XG5cdFx0Ly8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIGNvbGxlY3Rpb25zXG5cdFx0Ly8gKGUuZy4sIGB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikgPT09IFwiZnVuY3Rpb25cImApLiAoZ2gtNDc1Nilcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdHR5cGVvZiBvYmouaXRlbSAhPT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy42LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNlxuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXG4gKlxuICogRGF0ZTogMjAyMS0wMi0xNlxuICovXG4oIGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoIHt9ICkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoTmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0WyBpIF0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxcIiArXG5cdFx0XCJpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XVxuXHRcdC8vIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fFxcXFxcXFxcKFteXFxcXHJcXFxcblxcXFxmXSlcIiwgXCJnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlLnNsaWNlKCAxICkgLSAweDEwMDAwO1xuXG5cdFx0cmV0dXJuIG5vbkhleCA/XG5cblx0XHRcdC8vIFN0cmlwIHRoZSBiYWNrc2xhc2ggcHJlZml4IGZyb20gYSBub24taGV4IGVzY2FwZSBzZXF1ZW5jZVxuXHRcdFx0bm9uSGV4IDpcblxuXHRcdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgK1xuXHRcdFx0XHRjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KCBhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApICksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggZWxzICkgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICggdGFyZ2V0WyBqKysgXSA9IGVsc1sgaSsrIF0gKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOCBvbmx5XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdCggbm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoZSB0ZWNobmlxdWUgaGFzIHRvIGJlIHVzZWQgYXMgd2VsbCB3aGVuIGEgbGVhZGluZyBjb21iaW5hdG9yIGlzIHVzZWRcblx0XHRcdFx0Ly8gYXMgc3VjaCBzZWxlY3RvcnMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHF1ZXJ5U2VsZWN0b3JBbGwuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSB8fCByY29tYmluYXRvcnMudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gV2UgY2FuIHVzZSA6c2NvcGUgaW5zdGVhZCBvZiB0aGUgSUQgaGFjayBpZiB0aGUgYnJvd3NlclxuXHRcdFx0XHRcdC8vIHN1cHBvcnRzIGl0ICYgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBjb250ZXh0LlxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoIGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUgKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoIFwifFwiICksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbIGkgXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5uZXh0U2libGluZyApICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuICggbmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IGVsZW0gJiYgKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAodHJhYy05NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAodHJhYy0xMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSB0cmFjLTY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAodHJhYy05NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgdHJhYy04MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAodHJhYy0xNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAodHJhYy0xMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKHRyYWMtMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKHRyYWMtMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICh0cmFjLTE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAodHJhYy0xMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAodHJhYy0xMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHRyYWMtMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHRcdFx0Ly8gSW4gQ2hyb21lLCBpZiBhbiBlbGVtZW50IGhhdmluZyBhIGZvY3Vzb3V0IGhhbmRsZXIgaXMgYmx1cnJlZCBieVxuXHRcdFx0XHRcdFx0Ly8gY2xpY2tpbmcgb3V0c2lkZSBvZiBpdCwgaXQgaW52b2tlcyB0aGUgaGFuZGxlciBzeW5jaHJvbm91c2x5LiBJZlxuXHRcdFx0XHRcdFx0Ly8gdGhhdCBoYW5kbGVyIGNhbGxzIGAucmVtb3ZlKClgIG9uIHRoZSBlbGVtZW50LCB0aGUgZGF0YSBpcyBjbGVhcmVkLFxuXHRcdFx0XHRcdFx0Ly8gbGVhdmluZyBgcmVzdWx0YCB1bmRlZmluZWQuIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGlzLlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAodHJhYy01MDQsIHRyYWMtMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblx0d2hpY2g6IHRydWVcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZVxuXHRcdC8vIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBldmVudC50YXJnZXQsIHR5cGUgKTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCFcXFtDREFUQVxcW3xcXF1cXF0+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVW53cmFwIGEgQ0RBVEEgc2VjdGlvbiBjb250YWluaW5nIHNjcmlwdCBjb250ZW50cy4gVGhpcyBzaG91bGRuJ3QgYmVcblx0XHRcdFx0XHRcdFx0Ly8gbmVlZGVkIGFzIGluIFhNTCBkb2N1bWVudHMgdGhleSdyZSBhbHJlYWR5IG5vdCB2aXNpYmxlIHdoZW5cblx0XHRcdFx0XHRcdFx0Ly8gaW5zcGVjdGluZyBlbGVtZW50IGNvbnRlbnRzIGFuZCBpbiBIVE1MIGRvY3VtZW50cyB0aGV5IGhhdmUgbm9cblx0XHRcdFx0XHRcdFx0Ly8gbWVhbmluZyBidXQgd2UncmUgcHJlc2VydmluZyB0aGF0IGxvZ2ljIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiA0LjAuIFNlZSBnaC00OTA0LlxuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciByY3VzdG9tUHJvcCA9IC9eLS0vO1xuXG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICh0cmFjLTE1MDk4LCB0cmFjLTE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxudmFyIHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCI7XG5cblxudmFyIHJ0cmltQ1NTID0gbmV3IFJlZ0V4cChcblx0XCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIixcblx0XCJnXCJcbik7XG5cblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAodHJhYy04OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgZGlzcGxheTogYmxvY2tcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCB0cmFjLTEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpIChnaC0zMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0Ly8gdHJpbSB3aGl0ZXNwYWNlIGZvciBjdXN0b20gcHJvcGVydHkgKGlzc3VlIGdoLTQ5MjYpXG5cdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cblx0XHRcdC8vIHJ0cmltIHRyZWF0cyBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIGFuZCBVKzAwMEMgRk9STSBGRUVEXG5cdFx0XHQvLyBhcyB3aGl0ZXNwYWNlIHdoaWxlIENTUyBkb2VzIG5vdCwgYnV0IHRoaXMgaXMgbm90IGEgcHJvYmxlbVxuXHRcdFx0Ly8gYmVjYXVzZSBDU1MgcHJlcHJvY2Vzc2luZyByZXBsYWNlcyB0aGVtIHdpdGggVSswMDBBIExJTkUgRkVFRFxuXHRcdFx0Ly8gKHdoaWNoICppcyogQ1NTIHdoaXRlc3BhY2UpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpbnB1dC1wcmVwcm9jZXNzaW5nXG5cdFx0XHRyZXQgPSByZXQucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApO1xuXHRcdH1cblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAodHJhYy03MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgdHJhYy05MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKHRyYWMtNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICh0cmFjLTEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsICh0cmFjLTEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY3VyLCBjdXJWYWx1ZSwgY2xhc3NOYW1lLCBpLCBmaW5hbFZhbHVlO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzTmFtZXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0Y3VyID0gdGhpcy5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY3VyLCBjdXJWYWx1ZSwgY2xhc3NOYW1lLCBpLCBmaW5hbFZhbHVlO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gdGhpcy5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY2xhc3NOYW1lLCBpLCBzZWxmLFxuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAodHJhYy0xNDY4NiwgdHJhYy0xNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0c3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbiwgaSxcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRcdGkgPSBtYXg7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKHRyYWMtMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICh0cmFjLTk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICh0cmFjLTk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0bGFzdEVsZW1lbnQgPSBjdXI7XG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKHRyYWMtNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyB0cmFjLTc2NTMsIHRyYWMtODEyNSwgdHJhYy04MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICh0cmFjLTEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzIHRyYWMtOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKHRyYWMtMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgdHJhYy0xMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKHRyYWMtMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyB0cmFjLTk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKHRyYWMtMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vIHRyYWMtMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlIHRyYWMtODYwNSwgdHJhYy0xNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gdHJhYy0xNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIF9pLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7XG5cdFx0cGFkZGluZzogXCJpbm5lclwiICsgbmFtZSxcblx0XHRjb250ZW50OiB0eXBlLFxuXHRcdFwiXCI6IFwib3V0ZXJcIiArIG5hbWVcblx0fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaChcblx0KCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fVxuKTtcblxuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG4vLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcbi8vIFJlcXVpcmUgdGhhdCB0aGUgXCJ3aGl0ZXNwYWNlIHJ1blwiIHN0YXJ0cyBmcm9tIGEgbm9uLXdoaXRlc3BhY2Vcbi8vIHRvIGF2b2lkIE8oTl4yKSBiZWhhdmlvciB3aGVuIHRoZSBlbmdpbmUgd291bGQgdHJ5IG1hdGNoaW5nIFwiXFxzKyRcIiBhdCBlYWNoIHNwYWNlIHBvc2l0aW9uLlxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8KFteXFxzXFx1RkVGRlxceEEwXSlbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICk7XG59O1xuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICh0cmFjLTcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICh0cmFjLTEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBZnJpa2FhbnMgW2FmXVxuLy8hIGF1dGhvciA6IFdlcm5lciBNb2xsZW50emUgOiBodHRwczovL2dpdGh1Yi5jb20vd2VybmVybVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFmID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYWYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01hX0RpX1dvX0RvX1ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvdm18bm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15ubSQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICd2bScgOiAnVk0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdubScgOiAnTk0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1ZhbmRhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNw7RyZSBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHaXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhYXNdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29vciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlJyxcbiAgICAgICAgICAgIHM6IFwiJ24gcGFhciBzZWtvbmRlc1wiLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRlcycsXG4gICAgICAgICAgICBtOiBcIiduIG1pbnV1dFwiLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGUnLFxuICAgICAgICAgICAgaDogXCInbiB1dXJcIixcbiAgICAgICAgICAgIGhoOiAnJWQgdXJlJyxcbiAgICAgICAgICAgIGQ6IFwiJ24gZGFnXCIsXG4gICAgICAgICAgICBkZDogJyVkIGRhZScsXG4gICAgICAgICAgICBNOiBcIiduIG1hYW5kXCIsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZScsXG4gICAgICAgICAgICB5OiBcIiduIGphYXJcIixcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7IC8vIFRoYW5rcyB0byBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pqdXBpdGVyXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTWFhbmRhZyBpcyBkaWUgZWVyc3RlIGRhZyB2YW4gZGllIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIERpZSB3ZWVrIHdhdCBkaWUgNGRlIEphbnVhcmllIGJldmF0IGlzIGRpZSBlZXJzdGUgd2VlayB2YW4gZGllIGphYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChBbGdlcmlhKSBbYXItZHpdXG4vLyEgYXV0aG9yIDogQW1pbmUgUm91a2g6IGh0dHBzOi8vZ2l0aHViLmNvbS9BbWluZTI3XG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcbi8vISBhdXRob3IgOiBOb3VyZWRkaW5lIExPVUFIRURKIDogaHR0cHM6Ly9naXRodWIuY29tL25vdXJlZGRpbmVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzYp9mG2YHZiicsXG4gICAgICAgICAgICAn2YHZitmB2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2YHYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZiicsXG4gICAgICAgICAgICAn2KzZiNin2YYnLFxuICAgICAgICAgICAgJ9is2YjZitmE2YrYqScsXG4gICAgICAgICAgICAn2KPZiNiqJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyRHogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1keicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJEejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEt1d2FpdCkgW2FyLWt3XVxuLy8hIGF1dGhvciA6IE51c3JldCBQYXJsYWs6IGh0dHBzOi8vZ2l0aHViLmNvbS9udXNyZXRwYXJsYWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhckt3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXIta3cnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYp9it2K9f2KfYqtmG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTTogJ9i02YfYsScsXG4gICAgICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXk6ICclZCDYs9mG2YjYp9iqJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJLdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKExpYnlhKSBbYXItbHldXG4vLyEgYXV0aG9yIDogQWxpIEhtZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9raWtvYW5pc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIDI6ICcyJyxcbiAgICAgICAgICAgIDM6ICczJyxcbiAgICAgICAgICAgIDQ6ICc0JyxcbiAgICAgICAgICAgIDU6ICc1JyxcbiAgICAgICAgICAgIDY6ICc2JyxcbiAgICAgICAgICAgIDc6ICc3JyxcbiAgICAgICAgICAgIDg6ICc4JyxcbiAgICAgICAgICAgIDk6ICc5JyxcbiAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXJMeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWx5Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhckx5O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoTW9yb2NjbykgW2FyLW1hXVxuLy8hIGF1dGhvciA6IEVsRmFkaWxpIFlhc3NpbmUgOiBodHRwczovL2dpdGh1Yi5jb20vRWxGYWRpbGlZXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhck1hID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbWEnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYp9it2K9f2KfYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTTogJ9i02YfYsScsXG4gICAgICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXk6ICclZCDYs9mG2YjYp9iqJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyTWE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChTYXVkaSBBcmFiaWEpIFthci1zYV1cbi8vISBhdXRob3IgOiBTdWhhaWwgQWxrb3dhaWxlZXQgOiBodHRwczovL2dpdGh1Yi5jb20veHNvaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfZoScsXG4gICAgICAgICAgICAyOiAn2aInLFxuICAgICAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgICAgIDQ6ICfZpCcsXG4gICAgICAgICAgICA1OiAn2aUnLFxuICAgICAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgICAgIDc6ICfZpycsXG4gICAgICAgICAgICA4OiAn2agnLFxuICAgICAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgICAgIDA6ICfZoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgICAgICfZoCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBhclNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItc2EnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJTYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgIDogIEFyYWJpYyAoVHVuaXNpYSkgW2FyLXRuXVxuLy8hIGF1dGhvciA6IE5hZGVyIFRvdWthYnJpIDogaHR0cHM6Ly9naXRodWIuY29tL25hZGVyaW9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhclRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhclRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyBbYXJdXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXInLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL1xcdTIwMEZNL1xcdTIwMEZZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEF6ZXJiYWlqYW5pIFthel1cbi8vISBhdXRob3IgOiB0b3BjaGl5ZXYgOiBodHRwczovL2dpdGh1Yi5jb20vdG9wY2hpeWV2XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDE6ICctaW5jaScsXG4gICAgICAgIDU6ICctaW5jaScsXG4gICAgICAgIDg6ICctaW5jaScsXG4gICAgICAgIDcwOiAnLWluY2knLFxuICAgICAgICA4MDogJy1pbmNpJyxcbiAgICAgICAgMjogJy1uY2knLFxuICAgICAgICA3OiAnLW5jaScsXG4gICAgICAgIDIwOiAnLW5jaScsXG4gICAgICAgIDUwOiAnLW5jaScsXG4gICAgICAgIDM6ICctw7xuY8O8JyxcbiAgICAgICAgNDogJy3DvG5jw7wnLFxuICAgICAgICAxMDA6ICctw7xuY8O8JyxcbiAgICAgICAgNjogJy1uY8SxJyxcbiAgICAgICAgOTogJy11bmN1JyxcbiAgICAgICAgMTA6ICctdW5jdScsXG4gICAgICAgIDMwOiAnLXVuY3UnLFxuICAgICAgICA2MDogJy3EsW5jxLEnLFxuICAgICAgICA5MDogJy3EsW5jxLEnLFxuICAgIH07XG5cbiAgICB2YXIgYXogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdheicsIHtcbiAgICAgICAgbW9udGhzOiAneWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICd5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnQmF6YXJfQmF6YXIgZXJ0yZlzaV/Dh8mZcsWfyZluYsmZIGF4xZ9hbcSxX8OHyZlyxZ/JmW5iyZlfQ8O8bcmZIGF4xZ9hbcSxX0PDvG3JmV/FnsmZbmLJmScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0J6X0JFX8OHQV/Dh8mZX0NBX0PDvF/FnsmZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2FiYWggc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2TDvG7JmW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBzb25yYScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyZl2dsmZbCcsXG4gICAgICAgICAgICBzOiAnYmlyIG5lw6fJmSBzYW5pecmZJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FuaXnJmScsXG4gICAgICAgICAgICBtOiAnYmlyIGTJmXFpccmZJyxcbiAgICAgICAgICAgIG1tOiAnJWQgZMmZcWlxyZknLFxuICAgICAgICAgICAgaDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIGlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaWwnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZ2VjyZl8c8mZaMmZcnxnw7xuZMO8enxheMWfYW0vLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXihnw7xuZMO8enxheMWfYW0pJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2dlY8mZJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzyZloyZlyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnw7xuZMO8eic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnYXjFn2FtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctxLFuY8SxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF6O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbGFydXNpYW4gW2JlXVxuLy8hIGF1dGhvciA6IERtaXRyeSBEZW1pZG92IDogaHR0cHM6Ly9naXRodWIuY29tL2RlbWlkb3Y5MVxuLy8hIGF1dGhvcjogUHJhbGVza2E6IGh0dHA6Ly9wcmFsZXNrYS5wcm8vXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScgOiAn0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyxcbiAgICAgICAgICAgIGhoOiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvScgOiAn0LPQsNC00LfRltC90YNf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyxcbiAgICAgICAgICAgIGRkOiAn0LTQt9C10L3RjF/QtNC90ZZf0LTQt9GR0L0nLFxuICAgICAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbRi1/QvNC10YHRj9GG0LDRnicsXG4gICAgICAgICAgICB5eTogJ9Cz0L7QtF/Qs9Cw0LTRi1/Qs9Cw0LTQvtGeJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfRhdCy0ZbQu9GW0L3QsCcgOiAn0YXQstGW0LvRltC90YMnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQs9Cw0LTQt9GW0L3QsCcgOiAn0LPQsNC00LfRltC90YMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGC0YPQtNC30LXQvdGPX9C70Y7RgtCw0LPQsF/RgdCw0LrQsNCy0ZbQutCwX9C60YDQsNGB0LDQstGW0LrQsF/RgtGA0LDRntC90Y9f0YfRjdGA0LLQtdC90Y9f0LvRltC/0LXQvdGPX9C20L3RltGe0L3Rj1/QstC10YDQsNGB0L3Rj1/QutCw0YHRgtGA0YvRh9C90ZbQutCwX9C70ZbRgdGC0LDQv9Cw0LTQsF/RgdC90LXQttC90Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GB0YLRg9C00LfQtdC90Yxf0LvRjtGC0Ytf0YHQsNC60LDQstGW0Lpf0LrRgNCw0YHQsNCy0ZbQul/RgtGA0LDQstC10L3RjF/Rh9GN0YDQstC10L3RjF/Qu9GW0L/QtdC90Yxf0LbQvdGW0LLQtdC90Yxf0LLQtdGA0LDRgdC10L3RjF/QutCw0YHRgtGA0YvRh9C90ZbQul/Qu9GW0YHRgtCw0L/QsNC0X9GB0L3QtdC20LDQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn0YHRgtGD0LRf0LvRjtGCX9GB0LDQul/QutGA0LDRgV/RgtGA0LDQsl/Rh9GN0YDQsl/Qu9GW0L9f0LbQvdGW0LJf0LLQtdGAX9C60LDRgdGCX9C70ZbRgdGCX9GB0L3QtdC2Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0L3Rj9C00LfQtdC70Y5f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNGDX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbRg1/RgdGD0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9C90Y/QtNC30LXQu9GPX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTQsF/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0LBf0YHRg9Cx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0KPRg9GeXSA/KD860LzRltC90YPQu9GD0Y580L3QsNGB0YLRg9C/0L3Rg9GOKT8gP1xcXSA/ZGRkZC8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQodGR0L3QvdGPINGeXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDRntGC0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQo9GH0L7RgNCwINGeXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9CjXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRg9GOXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0KMg0LzRltC90YPQu9GLXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C/0YDQsNC3ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtCw0LzRgycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60LDQu9GM0LrRliDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LfQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAn0LzQtdGB0Y/RhicsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfQs9C+0LQnLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRi3zRgNCw0L3RltGG0Yt80LTQvdGPfNCy0LXRh9Cw0YDQsC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQsNGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9GLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3RltGG0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LDRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRlnzRi3zQs9CwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG51bWJlciAlIDEwID09PSAyIHx8IG51bWJlciAlIDEwID09PSAzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwICE9PSAxMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwICE9PSAxM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBudW1iZXIgKyAnLdGWJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgKyAnLdGLJztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQsCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1bGdhcmlhbiBbYmddXG4vLyEgYXV0aG9yIDogS3Jhc2VuIEJvcmlzb3YgOiBodHRwczovL2dpdGh1Yi5jb20va3JhelxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGJnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYmcnLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdGDX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0L3QtdC00LXQu9GPX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDRj9C00LBf0YfQtdGC0LLRitGA0YLRitC6X9C/0LXRgtGK0Lpf0YHRitCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNGPX9GH0LXRgl/Qv9C10YJf0YHRitCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0L3QtdGBINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cj0YLRgNC1INCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9CyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQnNC40L3QsNC70LDRgtCwXSBkZGRkIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQnNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfRgdC70LXQtCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LTQuCAlcycsXG4gICAgICAgICAgICBzOiAn0L3Rj9C60L7Qu9C60L4g0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBtOiAn0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgtC4JyxcbiAgICAgICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkOiAn0LTQtdC9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LTQtdC90LAnLFxuICAgICAgICAgICAgdzogJ9GB0LXQtNC80LjRhtCwJyxcbiAgICAgICAgICAgIHd3OiAnJWQg0YHQtdC00LzQuNGG0LgnLFxuICAgICAgICAgICAgTTogJ9C80LXRgdC10YYnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC10YHQtdGG0LAnLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eTogJyVkINCz0L7QtNC40L3QuCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGxhc3QyRGlnaXRzID0gbnVtYmVyICUgMTAwO1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10LInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10L0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA+IDEwICYmIGxhc3QyRGlnaXRzIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGA0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDcgfHwgbGFzdERpZ2l0ID09PSA4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LzQuCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmFtYmFyYSBbYm1dXG4vLyEgYXV0aG9yIDogRXN0ZWxsZSBDb21tZW50IDogaHR0cHM6Ly9naXRodWIuY29tL2VzdGVsbGVjb21tZW50XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYm0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibScsIHtcbiAgICAgICAgbW9udGhzOiAnWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTcmba2Fsb19adXfJm25rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TyZt0YW5idXJ1a2Fsb1/JlGt1dMmUYnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1phbl9GZXdfTWFyX0F3aV9NyZtfWnV3X1p1bF9VdGlfU8mbdF/JlGt1X05vd19EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0thcl9OdMmbX1Rhcl9BcmFfQWxhX0p1bV9TaWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnS2FfTnRfVGFfQXJfQWxfSnVfU2knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tCaSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbU2luaSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZG9uIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLdW51IGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0yZttyZtuZW4gbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGvJlG7JlCcsXG4gICAgICAgICAgICBwYXN0OiAnYSBiyZsgJXMgYsmUJyxcbiAgICAgICAgICAgIHM6ICdzYW5nYSBkYW1hIGRhbWEnLFxuICAgICAgICAgICAgc3M6ICdzZWtvbmRpICVkJyxcbiAgICAgICAgICAgIG06ICdtaW5pdGkga2VsZW4nLFxuICAgICAgICAgICAgbW06ICdtaW5pdGkgJWQnLFxuICAgICAgICAgICAgaDogJ2zJm3LJmyBrZWxlbicsXG4gICAgICAgICAgICBoaDogJ2zJm3LJmyAlZCcsXG4gICAgICAgICAgICBkOiAndGlsZSBrZWxlbicsXG4gICAgICAgICAgICBkZDogJ3RpbGUgJWQnLFxuICAgICAgICAgICAgTTogJ2thbG8ga2VsZW4nLFxuICAgICAgICAgICAgTU06ICdrYWxvICVkJyxcbiAgICAgICAgICAgIHk6ICdzYW4ga2VsZW4nLFxuICAgICAgICAgICAgeXk6ICdzYW4gJWQnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVuZ2FsaSAoQmFuZ2xhZGVzaCkgW2JuLWJkXVxuLy8hIGF1dGhvciA6IEFzcmFmIEhvc3NhaW4gUGF0b2FyeSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h3b29sZm9yZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgp6cnLFxuICAgICAgICAgICAgMjogJ+CnqCcsXG4gICAgICAgICAgICAzOiAn4KepJyxcbiAgICAgICAgICAgIDQ6ICfgp6onLFxuICAgICAgICAgICAgNTogJ+CnqycsXG4gICAgICAgICAgICA2OiAn4KesJyxcbiAgICAgICAgICAgIDc6ICfgp60nLFxuICAgICAgICAgICAgODogJ+CnricsXG4gICAgICAgICAgICA5OiAn4KevJyxcbiAgICAgICAgICAgIDA6ICfgp6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAgICAgJ+CnqCc6ICcyJyxcbiAgICAgICAgICAgICfgp6knOiAnMycsXG4gICAgICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAgICAgJ+Cnqyc6ICc1JyxcbiAgICAgICAgICAgICfgp6wnOiAnNicsXG4gICAgICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAgICAgJ+Cnric6ICc4JyxcbiAgICAgICAgICAgICfgp68nOiAnOScsXG4gICAgICAgICAgICAn4KemJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJuQmQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibi1iZCcsIHtcbiAgICAgICAgbW9udGhzOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CmnOCmvuCmqOCngV/gpqvgp4fgpqzgp43gprDgp4Ff4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ka44Kau4KefJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KaX4KakXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KaG4KaX4KeHJyxcbiAgICAgICAgICAgIHM6ICfgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG06ICfgpo/gppUg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIGg6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGQ6ICfgpo/gppUg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE06ICfgpo/gppUg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIHk6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kas4Kab4KawJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kaw4Ka+4KakfOCmreCni+CmsHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprjgpqjgp43gpqfgp43gpq/gpr584Kaw4Ka+4KakLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kaw4Ka+4KakJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kat4KeL4KawJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmuOCmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMyA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kas4Ka/4KaV4Ka+4KayJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ka44Kao4KeN4Kan4KeN4Kav4Ka+Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmreCni+CmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44Kao4KeN4Kan4KeN4Kav4Ka+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm5CZDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZW5nYWxpIFtibl1cbi8vISBhdXRob3IgOiBLYXVzaGlrIEdhbmRoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYXVzaGlrZ2FuZGhpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CnpycsXG4gICAgICAgICAgICAyOiAn4KeoJyxcbiAgICAgICAgICAgIDM6ICfgp6knLFxuICAgICAgICAgICAgNDogJ+CnqicsXG4gICAgICAgICAgICA1OiAn4KerJyxcbiAgICAgICAgICAgIDY6ICfgp6wnLFxuICAgICAgICAgICAgNzogJ+CnrScsXG4gICAgICAgICAgICA4OiAn4KeuJyxcbiAgICAgICAgICAgIDk6ICfgp68nLFxuICAgICAgICAgICAgMDogJ+CnpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgp6cnOiAnMScsXG4gICAgICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAgICAgJ+CnqSc6ICczJyxcbiAgICAgICAgICAgICfgp6onOiAnNCcsXG4gICAgICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAgICAgJ+CnrCc6ICc2JyxcbiAgICAgICAgICAgICfgp60nOiAnNycsXG4gICAgICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAgICAgJ+Cnryc6ICc5JyxcbiAgICAgICAgICAgICfgp6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibicsIHtcbiAgICAgICAgbW9udGhzOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CmnOCmvuCmqOCngV/gpqvgp4fgpqzgp43gprDgp4Ff4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ka44Kau4KefJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KaX4KakXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KaG4KaX4KeHJyxcbiAgICAgICAgICAgIHM6ICfgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG06ICfgpo/gppUg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIGg6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGQ6ICfgpo/gppUg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE06ICfgpo/gppUg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIHk6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kas4Kab4KawJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4Kaw4Ka+4KakJyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4Kam4KeB4Kaq4KeB4KawJyAmJiBob3VyIDwgNSkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kam4KeB4Kaq4KeB4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqzgpr/gppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUaWJldGFuIFtib11cbi8vISBhdXRob3IgOiBUaHVwdGVuIE4uIENoYWtyaXNoYXIgOiBodHRwczovL2dpdGh1Yi5jb20vdmFqcmFkb2dcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4LyhJyxcbiAgICAgICAgICAgIDI6ICfgvKInLFxuICAgICAgICAgICAgMzogJ+C8oycsXG4gICAgICAgICAgICA0OiAn4LykJyxcbiAgICAgICAgICAgIDU6ICfgvKUnLFxuICAgICAgICAgICAgNjogJ+C8picsXG4gICAgICAgICAgICA3OiAn4LynJyxcbiAgICAgICAgICAgIDg6ICfgvKgnLFxuICAgICAgICAgICAgOTogJ+C8qScsXG4gICAgICAgICAgICAwOiAn4LygJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+C8oSc6ICcxJyxcbiAgICAgICAgICAgICfgvKInOiAnMicsXG4gICAgICAgICAgICAn4LyjJzogJzMnLFxuICAgICAgICAgICAgJ+C8pCc6ICc0JyxcbiAgICAgICAgICAgICfgvKUnOiAnNScsXG4gICAgICAgICAgICAn4LymJzogJzYnLFxuICAgICAgICAgICAgJ+C8pyc6ICc3JyxcbiAgICAgICAgICAgICfgvKgnOiAnOCcsXG4gICAgICAgICAgICAn4LypJzogJzknLFxuICAgICAgICAgICAgJ+C8oCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JvJywge1xuICAgICAgICBtb250aHM6ICfgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4L2f4L6z4LyLMV/gvZ/gvrPgvIsyX+C9n+C+s+C8izNf4L2f4L6z4LyLNF/gvZ/gvrPgvIs1X+C9n+C+s+C8izZf4L2f4L6z4LyLN1/gvZ/gvrPgvIs4X+C9n+C+s+C8izlf4L2f4L6z4LyLMTBf4L2f4L6z4LyLMTFf4L2f4L6z4LyLMTInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogL14o4L2f4L6z4LyLXFxkezEsMn0pLyxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn4L2C4L2f4L2g4LyL4L2J4L2y4LyL4L2Y4LyLX+C9guC9n+C9oOC8i+C9n+C+s+C8i+C9luC8i1/gvYLgvZ/gvaDgvIvgvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2C4L2f4L2g4LyL4L2j4L634L2C4LyL4L2U4LyLX+C9guC9n+C9oOC8i+C9leC9tOC9ouC8i+C9luC9tF/gvYLgvZ/gvaDgvIvgvZTgvIvgvabgvYTgvabgvItf4L2C4L2f4L2g4LyL4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgvYngvbLgvIvgvZjgvItf4L2f4L6z4LyL4L2W4LyLX+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvaPgvrfgvYLgvIvgvZTgvItf4L2V4L204L2i4LyL4L2W4L20X+C9lOC8i+C9puC9hOC9puC8i1/gvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4L2J4L2yX+C9n+C+s1/gvZjgvbLgvYJf4L2j4L634L2CX+C9leC9tOC9ol/gvabgvYTgvaZf4L2m4L6k4L264L2TJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C9keC9suC8i+C9ouC9suC9hF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgvabgvYTgvIvgvYngvbLgvZNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9ouC+l+C9uuC9puC8i+C9mF0sIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4L2B4LyL4L2m4L2EXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvZjgvZDgvaDgvIvgvZhdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4L2j4LyLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgvabgvpTgvZPgvIvgvaMnLFxuICAgICAgICAgICAgczogJ+C9o+C9mOC8i+C9puC9hCcsXG4gICAgICAgICAgICBzczogJyVkIOC9puC+kOC9ouC8i+C9huC8jScsXG4gICAgICAgICAgICBtOiAn4L2m4L6Q4L2i4LyL4L2Y4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4L2m4L6Q4L2i4LyL4L2YJyxcbiAgICAgICAgICAgIGg6ICfgvYbgvbTgvIvgvZrgvbzgvZHgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgaGg6ICclZCDgvYbgvbTgvIvgvZrgvbzgvZEnLFxuICAgICAgICAgICAgZDogJ+C9ieC9suC9k+C8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBkZDogJyVkIOC9ieC9suC9k+C8iycsXG4gICAgICAgICAgICBNOiAn4L2f4L6z4LyL4L2W4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4L2f4L6z4LyL4L2WJyxcbiAgICAgICAgICAgIHk6ICfgvaPgvbzgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgeXk6ICclZCDgvaPgvbwnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Lyh4Lyi4Lyj4Lyk4Lyl4Lym4Lyn4Lyo4Lyp4LygXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4L2Y4L2a4L2T4LyL4L2Y4L28fOC9nuC9vOC9guC9puC8i+C9gOC9pnzgvYngvbLgvZPgvIvgvYLgvbTgvYR84L2R4L2C4L284L2E4LyL4L2R4L2CfOC9mOC9muC9k+C8i+C9mOC9vC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvZjgvZrgvZPgvIvgvZjgvbwnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4L2R4L2C4L284L2E4LyL4L2R4L2CJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2e4L284L2C4L2m4LyL4L2A4L2mJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9keC9guC9vOC9hOC8i+C9keC9gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2Y4L2a4L2T4LyL4L2Y4L28JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJyZXRvbiBbYnJdXG4vLyEgYXV0aG9yIDogSmVhbi1CYXB0aXN0ZSBMZSBEdWlnb3UgOiBodHRwczovL2dpdGh1Yi5jb20vamJsZWR1aWdvdVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtbTogJ211bnV0ZW5uJyxcbiAgICAgICAgICAgIE1NOiAnbWl6JyxcbiAgICAgICAgICAgIGRkOiAnZGV2ZXpoJyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIG11dGF0aW9uKGZvcm1hdFtrZXldLCBudW1iZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyhudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChsYXN0TnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyBibG9heic7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIHZsb2F6JztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsYXN0TnVtYmVyKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID4gOSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROdW1iZXIobnVtYmVyICUgMTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG11dGF0aW9uKHRleHQsIG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gc29mdE11dGF0aW9uKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzb2Z0TXV0YXRpb24odGV4dCkge1xuICAgICAgICB2YXIgbXV0YXRpb25UYWJsZSA9IHtcbiAgICAgICAgICAgIG06ICd2JyxcbiAgICAgICAgICAgIGI6ICd2JyxcbiAgICAgICAgICAgIGQ6ICd6JyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZ2VuL2ksXG4gICAgICAgICAgICAvXmNbyrxcXCddaHdlL2ksXG4gICAgICAgICAgICAvXm1ldS9pLFxuICAgICAgICAgICAgL15lYnIvaSxcbiAgICAgICAgICAgIC9ebWFlL2ksXG4gICAgICAgICAgICAvXihtZXp8ZXZlKS9pLFxuICAgICAgICAgICAgL15nb3UvaSxcbiAgICAgICAgICAgIC9eZW9zL2ksXG4gICAgICAgICAgICAvXmd3ZS9pLFxuICAgICAgICAgICAgL15oZXIvaSxcbiAgICAgICAgICAgIC9eZHUvaSxcbiAgICAgICAgICAgIC9ea2VyL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnZlcnxjW8q8XFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1fGdlbnxjW8q8XFwnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXggPVxuICAgICAgICAgICAgL14oZ2VudmVyfGNbyrxcXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXggPVxuICAgICAgICAgICAgL14oZ2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgICAgICBmdWxsV2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ec3VsL2ksXG4gICAgICAgICAgICAvXmx1bi9pLFxuICAgICAgICAgICAgL15tZXVyemgvaSxcbiAgICAgICAgICAgIC9ebWVyY1vKvFxcJ11oZXIvaSxcbiAgICAgICAgICAgIC9eeWFvdS9pLFxuICAgICAgICAgICAgL15nd2VuZXIvaSxcbiAgICAgICAgICAgIC9ec2Fkb3JuL2ksXG4gICAgICAgIF0sXG4gICAgICAgIHNob3J0V2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eU3VsL2ksXG4gICAgICAgICAgICAvXkx1bi9pLFxuICAgICAgICAgICAgL15NZXUvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhby9pLFxuICAgICAgICAgICAgL15Hd2UvaSxcbiAgICAgICAgICAgIC9eU2FkL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXlN1L2ksXG4gICAgICAgICAgICAvXkx1L2ksXG4gICAgICAgICAgICAvXk1lKFtecl18JCkvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhL2ksXG4gICAgICAgICAgICAvXkd3L2ksXG4gICAgICAgICAgICAvXlNhL2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgYnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdicicsIHtcbiAgICAgICAgbW9udGhzOiAnR2VudmVyX0PKvGh3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0dlbl9Dyrxod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VsX0x1bl9NZXVyemhfTWVyY8q8aGVyX1lhb3VfR3dlbmVyX1NhZG9ybicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MdV9NZV9NZXJfWWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG4gICAgICAgIGZ1bGxXZWVrZGF5c1BhcnNlOiBmdWxsV2Vla2RheXNQYXJzZSxcbiAgICAgICAgc2hvcnRXZWVrZGF5c1BhcnNlOiBzaG9ydFdlZWtkYXlzUGFyc2UsXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGl6aXYgZGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbV2FyY8q8aG9hemggZGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGVjyrxoIGRhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2EtYmVubiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyrx6bycsXG4gICAgICAgICAgICBzOiAndW4gbmViZXVkIHNlZ29uZGVubm/DuScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGVubicsXG4gICAgICAgICAgICBtOiAndXIgdnVudXRlbm4nLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIGg6ICd1biBldXInLFxuICAgICAgICAgICAgaGg6ICclZCBldXInLFxuICAgICAgICAgICAgZDogJ3VuIGRldmV6aCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgTTogJ3VyIG1peicsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgeTogJ3VyIGJsb2F6JyxcbiAgICAgICAgICAgIHl5OiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGHDsXx2ZXQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9hLm0ufGcubS4vLCAvLyBnb3VkZSBtZXJlbm4gfCBhLXJhb2sgbWVyZW5uXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuID09PSAnZy5tLic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDEyID8gJ2EubS4nIDogJ2cubS4nO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJvc25pYW4gW2JzXVxuLy8hIGF1dGhvciA6IE5lZGltIENob2xpY2ggOiBodHRwczovL2dpdGh1Yi5jb20vZnJvbnR5YXJkXG4vLyEgYmFzZWQgb24gKGhyKSB0cmFuc2xhdGlvbiBieSBCb2phbiBNYXJrb3ZpxIdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZG5hIG1pbnV0YScgOiAnamVkbmUgbWludXRlJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRhbiBzYXQnIDogJ2plZG5vZyBzYXRhJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2RhbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWMnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBicyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JzJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmlqZSAlcycsXG4gICAgICAgICAgICBzOiAncGFyIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhdGFsYW4gW2NhXVxuLy8hIGF1dGhvciA6IEp1YW4gRy4gSHVydGFkbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWFuZ2h1cnRhZG9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NhJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ2dlbmVyX2ZlYnJlcl9tYXLDp19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXLDp19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmVcIi5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXHMpK01NTU0vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkZ19kbF9kdF9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXZ1aSBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZGVtw6AgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thaGlyIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzc2F0IGEgJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgICAgICBwYXN0OiAnZmEgJXMnLFxuICAgICAgICAgICAgczogJ3VucyBzZWdvbnMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWdvbnMnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRzJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWVzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNvcycsXG4gICAgICAgICAgICB5OiAndW4gYW55JyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW55cycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ24nXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAzXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgICAgID8gJ3QnXG4gICAgICAgICAgICAgICAgICAgIDogJ8OoJztcbiAgICAgICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDemVjaCBbY3NdXG4vLyEgYXV0aG9yIDogcGV0cmJlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vcGV0cmJlbGFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdsZWRlbl/Dum5vcl9ixZllemVuX2R1YmVuX2t2xJt0ZW5fxI1lcnZlbl/EjWVydmVuZWNfc3JwZW5fesOhxZnDrV/FmcOtamVuX2xpc3RvcGFkX3Byb3NpbmVjJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdsZWRuYV/Dum5vcmFfYsWZZXpuYV9kdWJuYV9rdsSbdG5hX8SNZXJ2bmFfxI1lcnZlbmNlX3NycG5hX3rDocWZw61fxZnDrWpuYV9saXN0b3BhZHVfcHJvc2luY2UnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA9ICdsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3Bybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmxlZC9pLFxuICAgICAgICAgICAgL17Dum5vL2ksXG4gICAgICAgICAgICAvXmLFmWUvaSxcbiAgICAgICAgICAgIC9eZHViL2ksXG4gICAgICAgICAgICAvXmt2xJsvaSxcbiAgICAgICAgICAgIC9eKMSNdm58xI1lcnZlbiR8xI1lcnZuYSkvaSxcbiAgICAgICAgICAgIC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSxcbiAgICAgICAgICAgIC9ec3JwL2ksXG4gICAgICAgICAgICAvXnrDocWZL2ksXG4gICAgICAgICAgICAvXsWZw61qL2ksXG4gICAgICAgICAgICAvXmxpcy9pLFxuICAgICAgICAgICAgL15wcm8vaSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihsZWRlbnzDum5vcnxixZllemVufGR1YmVufGt2xJt0ZW58xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58esOhxZnDrXzFmcOtamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pO1xuXG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1ICYmIH5+KG4gLyAxMCkgIT09IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOiAvLyBhIGZldyBzZWNvbmRzIC8gaW4gYSBmZXcgc2Vjb25kcyAvIGEgZmV3IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncMOhciBzZWt1bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzogLy8gOSBzZWNvbmRzIC8gaW4gOSBzZWNvbmRzIC8gOSBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWt1bmRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ20nOiAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6IGlzRnV0dXJlID8gJ21pbnV0dScgOiAnbWludXRvdSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbnV0eScgOiAnbWludXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiBpc0Z1dHVyZSA/ICdob2RpbnUnIDogJ2hvZGlub3UnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOiAvLyA5IGhvdXJzIC8gaW4gOSBob3VycyAvIDkgaG91cnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdob2RpbnknIDogJ2hvZGluJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZCc6IC8vIGEgZGF5IC8gaW4gYSBkYXkgLyBhIGRheSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkZW4nIDogJ2RuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOiAvLyA5IGRheXMgLyBpbiA5IGRheXMgLyA5IGRheXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbnknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2RueSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTSc6IC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtxJtzw61jJyA6ICdtxJtzw61jZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtxJtzw61jZScgOiAnbcSbc8OtY8WvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtxJtzw61jaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdyb2snIDogJ3Jva2VtJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAncm9reScgOiAnbGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdsZXR5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY3MgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjcycsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGxlZGVufGxlZG5hfMO6bm9yYXzDum5vcnxixZllemVufGLFmWV6bmF8ZHViZW58ZHVibmF8a3bEm3RlbnxrdsSbdG5hfMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHNycG5hfHrDocWZw618xZnDrWplbnzFmcOtam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBsOiAnRC4gTS4gWVlZWScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6w610cmEgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIHN0xZllZHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSDEjXR2cnRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcMOhdGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYSB2XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw6ldIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncMWZZWQgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENodXZhc2ggW2N2XVxuLy8hIGF1dGhvciA6IEFuYXRvbHkgTWlyb25vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvbnRvbGlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N2Jywge1xuICAgICAgICBtb250aHM6ICfQutOR0YDQu9Cw0Ydf0L3QsNGA05HRgV/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YDRgtC80LVf0YPRgtORX9Kr0YPRgNC70LBf0LDQstOR0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YjRgtCw0LInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9Cy0YvRgNGB0LDRgNC90LjQutGD0L1f0YLRg9C90YLQuNC60YPQvV/Ri9GC0LvQsNGA0LjQutGD0L1f0Y7QvdC60YPQvV/QutOX0qvQvdC10YDQvdC40LrRg9C9X9GN0YDQvdC10LrRg9C9X9GI05HQvNCw0YLQutGD0L0nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cy0YvRgF/RgtGD0L1f0YvRgtC7X9GO0L1f0LrTl9KrX9GN0YDQvV/RiNOR0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Cf0LDRj9C9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KvRgNCw0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vTltC90LXRgF0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vSqtC40YLQtdGBXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0JjRgNGC0L3Tl10gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFmZml4ID0gL9GB0LXRhdC10YIkL2kuZXhlYyhvdXRwdXQpXG4gICAgICAgICAgICAgICAgICAgID8gJ9GA0LXQvSdcbiAgICAgICAgICAgICAgICAgICAgOiAv0qvRg9C7JC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICA/ICfRgtCw0L0nXG4gICAgICAgICAgICAgICAgICAgIDogJ9GA0LDQvSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQutCw0Y/Qu9C70LAnLFxuICAgICAgICAgICAgczogJ9C/05fRgC3QuNC6INKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgbTogJ9C/05fRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoOiAn0L/Tl9GAINGB0LXRhdC10YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGQ6ICfQv9OX0YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQv9OX0YAg0YPQudOR0YUnLFxuICAgICAgICAgICAgTU06ICclZCDRg9C505HRhScsXG4gICAgICAgICAgICB5OiAn0L/Tl9GAINKr0YPQuycsXG4gICAgICAgICAgICB5eTogJyVkINKr0YPQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS3QvNOX0YgvLFxuICAgICAgICBvcmRpbmFsOiAnJWQt0LzTl9GIJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFdlbHNoIFtjeV1cbi8vISBhdXRob3IgOiBSb2JlcnQgQWxsZW4gOiBodHRwczovL2dpdGh1Yi5jb20vcm9iZ2FsbGVuXG4vLyEgYXV0aG9yIDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5ncmVhdmVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY3kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjeScsIHtcbiAgICAgICAgbW9udGhzOiAnSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0R5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3cm4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTGxfTWFfTWVfSWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgLy8gdGltZSBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyBlbi1nYlxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hlZGRpdyBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZG9lIGFtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ21ld24gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHluIMO0bCcsXG4gICAgICAgICAgICBzOiAneWNoeWRpZyBlaWxpYWRhdScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGlhZCcsXG4gICAgICAgICAgICBtOiAnbXVudWQnLFxuICAgICAgICAgICAgbW06ICclZCBtdW51ZCcsXG4gICAgICAgICAgICBoOiAnYXdyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgYXdyJyxcbiAgICAgICAgICAgIGQ6ICdkaXdybm9kJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGl3cm5vZCcsXG4gICAgICAgICAgICBNOiAnbWlzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWlzJyxcbiAgICAgICAgICAgIHk6ICdibHd5ZGR5bicsXG4gICAgICAgICAgICB5eTogJyVkIGZseW5lZGQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxcbiAgICAgICAgLy8gdHJhZGl0aW9uYWwgb3JkaW5hbCBudW1iZXJzIGFib3ZlIDMxIGFyZSBub3QgY29tbW9ubHkgdXNlZCBpbiBjb2xsb3F1aWFsIFdlbHNoXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGxvb2t1cCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICdhZicsXG4gICAgICAgICAgICAgICAgICAgICdpbCcsXG4gICAgICAgICAgICAgICAgICAgICd5ZGQnLFxuICAgICAgICAgICAgICAgICAgICAneWRkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJywgLy8gMWFmIHRvIDEwZmVkXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLCAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChiID4gMjApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdmZWQnOyAvLyBub3QgMzBhaW4sIDcwYWluIG9yIDkwYWluXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiID4gMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEYW5pc2ggW2RhXVxuLy8hIGF1dGhvciA6IFVscmlrIE5pZWxzZW4gOiBodHRwczovL2dpdGh1Yi5jb20vbXJiYXNlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkYScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sw7hyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAncMOlIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tpXSBkZGRkW3Mga2wuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzOiAnZsOlIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2V0IG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZScsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmVkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeTogJ2V0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChBdXN0cmlhKSBbZGUtYXRdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1hcnRpbiBHcm9sbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL01hZE1HXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHM6ICdKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0rDpG4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChTd2l0emVybGFuZCkgW2RlLWNoXVxuLy8hIGF1dGhvciA6IHNzY2h1ZWxsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vc3NjaHVlbGxlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWNoJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQ2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIFtkZV1cbi8vISBhdXRob3IgOiBsbHVjaHMgOiBodHRwczovL2dpdGh1Yi5jb20vbGx1Y2hzXG4vLyEgYXV0aG9yOiBNZW5lbGlvbiBFbGVuc8O6bGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsZGl2aWFuIFtkdl1cbi8vISBhdXRob3IgOiBKYXdpc2ggSGFtZWVkIDogaHR0cHM6Ly9naXRodWIuY29tL2phd2lzaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfelt6s3oLeqt6H3qbeg96pJyxcbiAgICAgICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICAgICAn3onep96D3qjel96qJyxcbiAgICAgICAgICAgICfeh96t3pXesN6D3qnejd6qJyxcbiAgICAgICAgICAgICfeid6tJyxcbiAgICAgICAgICAgICfelt6r3oLesCcsXG4gICAgICAgICAgICAn3pbeqt6N3qbeh96oJyxcbiAgICAgICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgICAgICfekN6s3pXesN6T3qzeid6w3oTept6D3qonLFxuICAgICAgICAgICAgJ96H3q7eht6w3pPer96E3qbeg96qJyxcbiAgICAgICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICAgICAn3pHeqN6Q3qzeid6w3oTept6D3qonLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICfeh96n3oveqN6H3rDejN6mJyxcbiAgICAgICAgICAgICfegN6v3onepicsXG4gICAgICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICAgICAn3oTeqt6L3qYnLFxuICAgICAgICAgICAgJ96E3qreg96n3pDesN6K3qbejN6oJyxcbiAgICAgICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAgICAgJ96A3q7egt6o3oDeqN6D3qonLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGR2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ96H3qfei96oX96A3q/eid6mX96H3qbegt6wX96E3qrei96mX96E3qreg96nX96A3qreht6qX96A3q7egt6oJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/eid6GfN6J3oovLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn3oneiicgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3onehic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3oneiic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW96J3qjeh96m3oveql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW96H3qjeh96w3pTerF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ96M3qzeg96t3o7ept6H3qggJXMnLFxuICAgICAgICAgICAgcGFzdDogJ96G3qreg96o3oLesCAlcycsXG4gICAgICAgICAgICBzOiAn3pDeqN6G3qregt6w3ozeqt6G3q7ehd6s3ofesCcsXG4gICAgICAgICAgICBzczogJ2QlIN6Q3qjeht6q3oLesN6M3qonLFxuICAgICAgICAgICAgbTogJ96J3qjegt6o3pPerN6H3rAnLFxuICAgICAgICAgICAgbW06ICfeid6o3oLeqN6T3qogJWQnLFxuICAgICAgICAgICAgaDogJ96O3qbekd6o3ofeqN6D3qzeh96wJyxcbiAgICAgICAgICAgIGhoOiAn3o7ept6R3qjeh96o3oPeqiAlZCcsXG4gICAgICAgICAgICBkOiAn3oveqt6I3qbegN6s3ofesCcsXG4gICAgICAgICAgICBkZDogJ96L3qreiN6m3pDesCAlZCcsXG4gICAgICAgICAgICBNOiAn3onept6A3qzeh96wJyxcbiAgICAgICAgICAgIE1NOiAn3onept6Q3rAgJWQnLFxuICAgICAgICAgICAgeTogJ96H3qbegN6m3oPerN6H3rAnLFxuICAgICAgICAgICAgeXk6ICfeh96m3oDept6D3qogJWQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNywgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGR2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdyZWVrIFtlbF1cbi8vISBhdXRob3IgOiBBZ2dlbG9zIEthcmFsaWFzIDogaHR0cHM6Ly9naXRodWIuY29tL21laGllbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsOlxuICAgICAgICAgICAgJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzR2VuaXRpdmVFbDpcbiAgICAgICAgICAgICfOmc6xzr3Ov8+FzrHPgc6vzr/PhV/Ops61zrLPgc6/z4XOsc+Bzq/Ov8+FX86czrHPgc+Ezq/Ov8+FX86Rz4DPgc65zrvOr86/z4VfzpzOsc6Qzr/PhV/Omc6/z4XOvc6vzr/PhV/Omc6/z4XOu86vzr/PhV/Okc+FzrPOv8+Nz4PPhM6/z4VfzqPOtc+Az4TOtc68zrLPgc6vzr/PhV/On866z4TPic6yz4HOr86/z4Vfzp3Ov861zrzOss+Bzq/Ov8+FX86UzrXOus61zrzOss+Bzq/Ov8+FJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9ELy50ZXN0KGZvcm1hdC5zdWJzdHJpbmcoMCwgZm9ybWF0LmluZGV4T2YoJ01NTU0nKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ86ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xz4pfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgF/On866z4Rfzp3Ov861X86UzrXOuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnzprPhV/OlM61X86kz4FfzqTOtV/OoM61X86gzrFfzqPOsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfOvM68JyA6ICfOnM6cJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnz4DOvCcgOiAnzqDOnCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpWzBdID09PSAnzrwnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vOo86uzrzOtc+BzrEge31dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vOp864zrXPgiB7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiBmdW5jdGlvbiAoa2V5LCBtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhckVsW2tleV0sXG4gICAgICAgICAgICAgICAgaG91cnMgPSBtb20gJiYgbW9tLmhvdXJzKCk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvdXRwdXQpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmFwcGx5KG1vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoJ3t9JywgaG91cnMgJSAxMiA9PT0gMSA/ICfPg8+EzrcnIDogJ8+Dz4TOuc+CJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnz4POtSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgczogJ867zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBzczogJyVkIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBtOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW06ICclZCDOu861z4DPhM6sJyxcbiAgICAgICAgICAgIGg6ICfOvM6vzrEgz47Pgc6xJyxcbiAgICAgICAgICAgIGhoOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZDogJ868zq/OsSDOvM6tz4HOsScsXG4gICAgICAgICAgICBkZDogJyVkIM68zq3Pgc61z4InLFxuICAgICAgICAgICAgTTogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU06ICclZCDOvM6uzr3Otc+CJyxcbiAgICAgICAgICAgIHk6ICfOrc69zrHPgiDPh8+Bz4zOvc6/z4InLFxuICAgICAgICAgICAgeXk6ICclZCDPh8+Bz4zOvc65zrEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Oty8sXG4gICAgICAgIG9yZGluYWw6ICclZM63JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKEF1c3RyYWxpYSkgW2VuLWF1XVxuLy8hIGF1dGhvciA6IEphcmVkIE1vcnNlIDogaHR0cHM6Ly9naXRodWIuY29tL2phcmNvYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkF1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tYXUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQXU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoQ2FuYWRhKSBbZW4tY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5DYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWNhJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5DYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkgW2VuLWdiXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuR2IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkdiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElyZWxhbmQpIFtlbi1pZV1cbi8vISBhdXRob3IgOiBDaHJpcyBDYXJ0bGlkZ2UgOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNjYXJ0bGlkZ2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkllID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkllO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElzcmFlbCkgW2VuLWlsXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJbmRpYSkgW2VuLWluXVxuLy8hIGF1dGhvciA6IEphdGluIEFncmF3YWwgOiBodHRwczovL2dpdGh1Yi5jb20vamF0aW5hZzIyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWluJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkluO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKE5ldyBaZWFsYW5kKSBbZW4tbnpdXG4vLyEgYXV0aG9yIDogTHVrZSBNY0dyZWdvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlbWNncmVnb3JcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbk56ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tbnonLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuTno7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoU2luZ2Fwb3JlKSBbZW4tc2ddXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDYXN0cmlsbG9uLU1hZHJpZ2FsIDogaHR0cHM6Ly9naXRodWIuY29tL3RlY2hkaW1lbnNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlblNnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tc2cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5TZztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFc3BlcmFudG8gW2VvXVxuLy8hIGF1dGhvciA6IENvbGluIERlYW4gOiBodHRwczovL2dpdGh1Yi5jb20vY29saW5kZWFuXG4vLyEgYXV0aG9yIDogTWlhIE5vcmRlbnRvZnQgSW1wZXJhdG9yaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWVzdGFzbWlhXG4vLyEgY29tbWVudCA6IG1pZXN0YXNtaWEgY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW5cbi8vISBjb21tZW50IDogVml2YWt2byBjb3JyZWN0ZWQgdGhlIHRyYW5zbGF0aW9uIGJ5IGNvbGluZGVhbiBhbmQgbWllc3Rhc21pYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW8nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYcWtZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcHRfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW7EiW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fxLVhxa1kb192ZW5kcmVkb19zYWJhdG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW1fbHVuX21hcmRfbWVya1/EtWHFrV92ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX8S1YV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ1tsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1thcF1cXC50XFwubS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3AudC5tLicgOiAnUC5ULk0uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYS50Lm0uJyA6ICdBLlQuTS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2RpYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01vcmdhxa0gamVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXJhxa0gamVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3Bhc2ludGFuXSBkZGRkW24gamVdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncG9zdCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnYW50YcWtICVzJyxcbiAgICAgICAgICAgIHM6ICdrZWxrYWogc2VrdW5kb2onLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRvaicsXG4gICAgICAgICAgICBtOiAndW51IG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b2onLFxuICAgICAgICAgICAgaDogJ3VudSBob3JvJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yb2onLFxuICAgICAgICAgICAgZDogJ3VudSB0YWdvJywgLy9uZSAnZGl1cm5vJywgxIlhciBlc3RhcyB1eml0YSBwb3IgcHJva3NpbXVtb1xuICAgICAgICAgICAgZGQ6ICclZCB0YWdvaicsXG4gICAgICAgICAgICBNOiAndW51IG1vbmF0bycsXG4gICAgICAgICAgICBNTTogJyVkIG1vbmF0b2onLFxuICAgICAgICAgICAgeTogJ3VudSBqYXJvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFyb2onLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1hLyxcbiAgICAgICAgb3JkaW5hbDogJyVkYScsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpIFtlcy1kb11cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzRG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1kbycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNEbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChNZXhpY28pIFtlcy1teF1cbi8vISBhdXRob3IgOiBKQyBGcmFuY28gOiBodHRwczovL2dpdGh1Yi5jb20vamNmcmFuY29cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzTXggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1teCcsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgICAgICBpbnZhbGlkRGF0ZTogJ0ZlY2hhIGludsOhbGlkYScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNNeDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChVbml0ZWQgU3RhdGVzKSBbZXMtdXNdXG4vLyEgYXV0aG9yIDogYnVzdHRhIDogaHR0cHM6Ly9naXRodWIuY29tL2J1c3R0YVxuLy8hIGF1dGhvciA6IGNocmlzcm9keiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3JvZHpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzVXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy11cycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNVcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIFtlc11cbi8vISBhdXRob3IgOiBKdWxpbyBOYXB1csOtIDogaHR0cHM6Ly9naXRodWIuY29tL2p1bGlvbmNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJ3Nla3VuZGknLCBudW1iZXIgKyAnc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnV0aScsIG51bWJlciArICcgbWludXRpdCddLFxuICAgICAgICAgICAgaDogWyfDvGhlIHR1bm5pJywgJ3R1bmQgYWVnYScsICfDvGtzIHR1bmQnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgIGQ6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgTTogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgICAgICB5OiBbJ8O8aGUgYWFzdGEnLCAnYWFzdGEnLCAnw7xrcyBhYXN0YSddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIGFhc3RhJywgbnVtYmVyICsgJyBhYXN0YXQnXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFhbl92ZWVicl9tw6RydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUF9FX1RfS19OX1JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVMOkbmEsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSsOkcmdtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0VlbG1pbmVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgcMOkZXZhJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYXNxdWUgW2V1XVxuLy8hIGF1dGhvciA6IEVuZWtvIElsbGFycmFtZW5kaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9laWxsYXJyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGV1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXUnLCB7XG4gICAgICAgIG1vbnRoczogJ3VydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnaWdfYWxfYXJfYXpfb2dfb2xfbHInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVktTS1EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWVtrb10gTU1NIERbYV0nLFxuICAgICAgICAgICAgbGxsOiAnWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tnYXVyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2JpaGFyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRbZXRhbl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1thdHpvXSBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thdXJyZWtvXSBkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFycnUnLFxuICAgICAgICAgICAgcGFzdDogJ2R1ZWxhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvIGJhdHp1aycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ21pbnV0dSBiYXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHUnLFxuICAgICAgICAgICAgaDogJ29yZHUgYmF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JkdScsXG4gICAgICAgICAgICBkOiAnZWd1biBiYXQnLFxuICAgICAgICAgICAgZGQ6ICclZCBlZ3VuJyxcbiAgICAgICAgICAgIE06ICdoaWxhYmV0ZSBiYXQnLFxuICAgICAgICAgICAgTU06ICclZCBoaWxhYmV0ZScsXG4gICAgICAgICAgICB5OiAndXJ0ZSBiYXQnLFxuICAgICAgICAgICAgeXk6ICclZCB1cnRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQZXJzaWFuIFtmYV1cbi8vISBhdXRob3IgOiBFYnJhaGltIEJ5YWdvd2kgOiBodHRwczovL2dpdGh1Yi5jb20vZWJyYW1pbmlvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9uxJyxcbiAgICAgICAgICAgIDI6ICfbsicsXG4gICAgICAgICAgICAzOiAn27MnLFxuICAgICAgICAgICAgNDogJ9u0JyxcbiAgICAgICAgICAgIDU6ICfbtScsXG4gICAgICAgICAgICA2OiAn27YnLFxuICAgICAgICAgICAgNzogJ9u3JyxcbiAgICAgICAgICAgIDg6ICfbuCcsXG4gICAgICAgICAgICA5OiAn27knLFxuICAgICAgICAgICAgMDogJ9uwJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9uxJzogJzEnLFxuICAgICAgICAgICAgJ9uyJzogJzInLFxuICAgICAgICAgICAgJ9uzJzogJzMnLFxuICAgICAgICAgICAgJ9u0JzogJzQnLFxuICAgICAgICAgICAgJ9u1JzogJzUnLFxuICAgICAgICAgICAgJ9u2JzogJzYnLFxuICAgICAgICAgICAgJ9u3JzogJzcnLFxuICAgICAgICAgICAgJ9u4JzogJzgnLFxuICAgICAgICAgICAgJ9u5JzogJzknLFxuICAgICAgICAgICAgJ9uwJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmEnLCB7XG4gICAgICAgIG1vbnRoczogJ9qY2KfZhtmI24zZh1/ZgdmI2LHbjNmHX9mF2KfYsdizX9ii2YjYsduM2YRf2YXZh1/amNmI2KbZhl/amNmI2KbbjNmHX9in2YjYql/Ys9m+2KrYp9mF2KjYsV/Yp9qp2KrYqNixX9mG2YjYp9mF2KjYsV/Yr9iz2KfZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9qY2KfZhtmI24zZh1/ZgdmI2LHbjNmHX9mF2KfYsdizX9ii2YjYsduM2YRf2YXZh1/amNmI2KbZhl/amNmI2KbbjNmHX9in2YjYql/Ys9m+2KrYp9mF2KjYsV/Yp9qp2KrYqNixX9mG2YjYp9mF2KjYsV/Yr9iz2KfZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn24zaqVxcdTIwMGPYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZh1xcdTIwMGPYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrFxcdTIwMGPYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OlxuICAgICAgICAgICAgJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfbjF/Yr1/Ys1/ahl/Zvl/YrF/YtCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Zgtio2YQg2KfYsiDYuNmH2LF82KjYudivINin2LIg2LjZh9ixLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZgtio2YQg2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9io2LnYryDYp9iyINi42YfYsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YXYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2YHYsdiv2Kcg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2K/bjNix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvZvtuM2LRdIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYr9ixICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDZvtuM2LQnLFxuICAgICAgICAgICAgczogJ9qG2YbYryDYq9in2YbbjNmHJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG24zZhycsXG4gICAgICAgICAgICBtOiAn24zaqSDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBoOiAn24zaqSDYs9in2LnYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudiqJyxcbiAgICAgICAgICAgIGQ6ICfbjNqpINix2YjYsicsXG4gICAgICAgICAgICBkZDogJyVkINix2YjYsicsXG4gICAgICAgICAgICBNOiAn24zaqSDZhdin2YcnLFxuICAgICAgICAgICAgTU06ICclZCDZhdin2YcnLFxuICAgICAgICAgICAgeTogJ9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9uwLdu5XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfdmFLyxcbiAgICAgICAgb3JkaW5hbDogJyVk2YUnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzUGFzdCA9XG4gICAgICAgICAgICAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnICdcbiAgICAgICAgICAgICksXG4gICAgICAgIG51bWJlcnNGdXR1cmUgPSBbXG4gICAgICAgICAgICAnbm9sbGEnLFxuICAgICAgICAgICAgJ3loZGVuJyxcbiAgICAgICAgICAgICdrYWhkZW4nLFxuICAgICAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICAgICAnbmVsasOkbicsXG4gICAgICAgICAgICAndmlpZGVuJyxcbiAgICAgICAgICAgICdrdXVkZW4nLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbN10sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs4XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTBcbiAgICAgICAgICAgID8gaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyc1Bhc3RbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmknLCB7XG4gICAgICAgIG1vbnRoczogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaXR0ZW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbGlwaW5vIFtmaWxdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cbi8vISBhdXRob3IgOiBNYXR0aGV3IENvIDogaHR0cHM6Ly9naXRodWIuY29tL21hdHRoZXdkZWVjb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGZpbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpbCcsIHtcbiAgICAgICAgbW9udGhzOiAnRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0VuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0xpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0xpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdMaV9MdV9NYV9NaV9IdV9CaV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdNTS9EL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdMVCBbbmdheW9uZyBhcmF3XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0J1a2FzIG5nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xUIFtzYSBzdXN1bm9kIG5hXSBkZGRkJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdMVCBba2FoYXBvbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnc2EgbG9vYiBuZyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYW5nIG5ha2FsaXBhcycsXG4gICAgICAgICAgICBzOiAnaWxhbmcgc2VndW5kbycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ2lzYW5nIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0bycsXG4gICAgICAgICAgICBoOiAnaXNhbmcgb3JhcycsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ2lzYW5nIGFyYXcnLFxuICAgICAgICAgICAgZGQ6ICclZCBhcmF3JyxcbiAgICAgICAgICAgIE06ICdpc2FuZyBidXdhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1d2FuJyxcbiAgICAgICAgICAgIHk6ICdpc2FuZyB0YW9uJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmFyb2VzZSBbZm9dXG4vLyEgYXV0aG9yIDogUmFnbmFyIEpvaGFubmVzZW4gOiBodHRwczovL2dpdGh1Yi5jb20vcmFnbmFyMTIzXG4vLyEgYXV0aG9yIDogS3Jpc3RpYW4gU2FrYXJpc3NvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYWthcmlzc29uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmbycsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdW5fbcOhbl90w71zX21pa19ow7NzX2Zyw61fbGV5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X23DoV90w71fbWlfaMOzX2ZyX2xlJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDjSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8ONIG1vcmdpbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8ONIGdqw6FyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8Otw7BzdHVdIGRkZGQgW2tsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3VtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzw63DsGFuaScsXG4gICAgICAgICAgICBzOiAnZsOhIHNla3VuZCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGlyJyxcbiAgICAgICAgICAgIG06ICdlaW4gbWludXR0dXInLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHRpcicsXG4gICAgICAgICAgICBoOiAnZWluIHTDrW1pJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdMOtbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlaW4gZGFndXInLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZWluIG3DoW5hw7B1cicsXG4gICAgICAgICAgICBNTTogJyVkIG3DoW5hw7BpcicsXG4gICAgICAgICAgICB5OiAnZWl0dCDDoXInLFxuICAgICAgICAgICAgeXk6ICclZCDDoXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoQ2FuYWRhKSBbZnItY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZnJDYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNhJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyQ2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIChTd2l0emVybGFuZCkgW2ZyLWNoXVxuLy8hIGF1dGhvciA6IEdhc3BhcmQgQnVjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2dhc3BhcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmckNoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmckNoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCBbZnJdXG4vLyEgYXV0aG9yIDogSm9obiBGaXNjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2pmcm9mZmljZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1N0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/KS9pLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/fGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbnYvaSxcbiAgICAgICAgICAgIC9eZsOpdnIvaSxcbiAgICAgICAgICAgIC9ebWFycy9pLFxuICAgICAgICAgICAgL15hdnIvaSxcbiAgICAgICAgICAgIC9ebWFpL2ksXG4gICAgICAgICAgICAvXmp1aW4vaSxcbiAgICAgICAgICAgIC9eanVpbC9pLFxuICAgICAgICAgICAgL15hb8O7dC9pLFxuICAgICAgICAgICAgL15zZXB0L2ksXG4gICAgICAgICAgICAvXm9jdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZMOpYy9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGZyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbTogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGg6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgICAgICB3OiAndW5lIHNlbWFpbmUnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1haW5lcycsXG4gICAgICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogUmV0dXJuICdlJyB3aGVuIGRheSBvZiBtb250aCA+IDEuIE1vdmUgdGhpcyBjYXNlIGluc2lkZVxuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGZvciBtYXNjdWxpbmUgd29yZHMgYmVsb3cuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8zMzc1XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICcnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyaXNpYW4gW2Z5XVxuLy8hIGF1dGhvciA6IFJvYmluIHZhbiBkZXIgVmxpZXQgOiBodHRwczovL2dpdGh1Yi5jb20vcm9iaW4wdmFuMGRlcjB2XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9XG4gICAgICAgICAgICAnamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9XG4gICAgICAgICAgICAnamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgZnkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmeScsIHtcbiAgICAgICAgbW9udGhzOiAnamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU2lfTW9fVGlfV29fVG9fRnJfU28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hqb2VkIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vYXJuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1c3RlciBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbw7RmcsO7bmVdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29lciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgbHluJyxcbiAgICAgICAgICAgIHM6ICdpbiBwZWFyIHNla29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kZW4nLFxuICAgICAgICAgICAgbTogJ2llbiBtaW7DunQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICdpZW4gb2VyZScsXG4gICAgICAgICAgICBoaDogJyVkIG9lcmVuJyxcbiAgICAgICAgICAgIGQ6ICdpZW4gZGVpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTTogJ2llbiBtb2FubmUnLFxuICAgICAgICAgICAgTU06ICclZCBtb2FubmVuJyxcbiAgICAgICAgICAgIHk6ICdpZW4gamllcicsXG4gICAgICAgICAgICB5eTogJyVkIGppZXJyZW4nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXJpc2ggb3IgSXJpc2ggR2FlbGljIFtnYV1cbi8vISBhdXRob3IgOiBBbmRyw6kgU2lsdmEgOiBodHRwczovL2dpdGh1Yi5jb20vYXNrcHRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAnRWFuw6FpcicsXG4gICAgICAgICAgICAnRmVhYmhyYScsXG4gICAgICAgICAgICAnTcOhcnRhJyxcbiAgICAgICAgICAgICdBaWJyZcOhbicsXG4gICAgICAgICAgICAnQmVhbHRhaW5lJyxcbiAgICAgICAgICAgICdNZWl0aGVhbWgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puYXNhJyxcbiAgICAgICAgICAgICdNZcOhbiBGw7NtaGFpcicsXG4gICAgICAgICAgICAnRGVpcmVhZGggRsOzbWhhaXInLFxuICAgICAgICAgICAgJ1NhbWhhaW4nLFxuICAgICAgICAgICAgJ05vbGxhaWcnLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNTaG9ydCA9IFtcbiAgICAgICAgICAgICdFYW4nLFxuICAgICAgICAgICAgJ0ZlYWJoJyxcbiAgICAgICAgICAgICdNw6FydCcsXG4gICAgICAgICAgICAnQWliJyxcbiAgICAgICAgICAgICdCZWFsJyxcbiAgICAgICAgICAgICdNZWl0aCcsXG4gICAgICAgICAgICAnScO6aWwnLFxuICAgICAgICAgICAgJ0zDum4nLFxuICAgICAgICAgICAgJ00uRi4nLFxuICAgICAgICAgICAgJ0QuRi4nLFxuICAgICAgICAgICAgJ1NhbWgnLFxuICAgICAgICAgICAgJ05vbGwnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICdEw6kgRG9taG5haWdoJyxcbiAgICAgICAgICAgICdEw6kgTHVhaW4nLFxuICAgICAgICAgICAgJ0TDqSBNw6FpcnQnLFxuICAgICAgICAgICAgJ0TDqSBDw6lhZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqWFyZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqSBoQW9pbmUnLFxuICAgICAgICAgICAgJ0TDqSBTYXRoYWlybicsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgPSBbJ0RvbWgnLCAnTHVhbicsICdNw6FpcnQnLCAnQ8OpYWQnLCAnRMOpYXInLCAnQW9pbmUnLCAnU2F0aCddLFxuICAgICAgICB3ZWVrZGF5c01pbiA9IFsnRG8nLCAnTHUnLCAnTcOhJywgJ0PDqScsICdEw6knLCAnQScsICdTYSddO1xuXG4gICAgdmFyIGdhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2EnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICAgICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lubml1IGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Ftw6FyYWNoIGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lubsOpIGFnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOzIHNoaW4nLFxuICAgICAgICAgICAgczogJ2PDunBsYSBzb2ljaW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29pY2luZCcsXG4gICAgICAgICAgICBtOiAnbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIGg6ICd1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXIgYW4gY2hsb2lnJyxcbiAgICAgICAgICAgIGQ6ICdsw6EnLFxuICAgICAgICAgICAgZGQ6ICclZCBsw6EnLFxuICAgICAgICAgICAgTTogJ23DrScsXG4gICAgICAgICAgICBNTTogJyVkIG3DrW9ubmEnLFxuICAgICAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFpbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNjb3R0aXNoIEdhZWxpYyBbZ2RdXG4vLyEgYXV0aG9yIDogSm9uIEFzaGRvd24gOiBodHRwczovL2dpdGh1Yi5jb20vam9uYXNoZG93blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICdBbSBGYW9pbGxlYWNoJyxcbiAgICAgICAgICAgICdBbiBHZWFycmFuJyxcbiAgICAgICAgICAgICdBbSBNw6BydCcsXG4gICAgICAgICAgICAnQW4gR2libGVhbicsXG4gICAgICAgICAgICAnQW4gQ8OoaXRlYW4nLFxuICAgICAgICAgICAgJ0FuIHQtw5JnbWhpb3MnLFxuICAgICAgICAgICAgJ0FuIHQtSXVjaGFyJyxcbiAgICAgICAgICAgICdBbiBMw7luYXN0YWwnLFxuICAgICAgICAgICAgJ0FuIHQtU3VsdGFpbicsXG4gICAgICAgICAgICAnQW4gRMOgbWhhaXInLFxuICAgICAgICAgICAgJ0FuIHQtU2FtaGFpbicsXG4gICAgICAgICAgICAnQW4gRMO5YmhsYWNoZCcsXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gW1xuICAgICAgICAgICAgJ0Zhb2knLFxuICAgICAgICAgICAgJ0dlYXInLFxuICAgICAgICAgICAgJ03DoHJ0JyxcbiAgICAgICAgICAgICdHaWJsJyxcbiAgICAgICAgICAgICdDw6hpdCcsXG4gICAgICAgICAgICAnw5JnbWgnLFxuICAgICAgICAgICAgJ0l1Y2gnLFxuICAgICAgICAgICAgJ0zDuW4nLFxuICAgICAgICAgICAgJ1N1bHQnLFxuICAgICAgICAgICAgJ0TDoG1oJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdEw7liaCcsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAgICAgJ0RpZMOybWhuYWljaCcsXG4gICAgICAgICAgICAnRGlsdWFpbicsXG4gICAgICAgICAgICAnRGltw6BpcnQnLFxuICAgICAgICAgICAgJ0RpY2lhZGFpbicsXG4gICAgICAgICAgICAnRGlhcmRhb2luJyxcbiAgICAgICAgICAgICdEaWhhb2luZScsXG4gICAgICAgICAgICAnRGlzYXRoYWlybmUnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0TDsicsICdMdScsICdNw6AnLCAnQ2knLCAnQXInLCAnSGEnLCAnU2EnXTtcblxuICAgIHZhciBnZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBbi1kaXVnaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQS1tw6BpcmVhY2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBbi1kw6ggYWlnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnYW5uIGFuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiaG8gY2hpb25uICVzJyxcbiAgICAgICAgICAgIHM6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGlvZ2FuJyxcbiAgICAgICAgICAgIG06ICdtaW9uYWlkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoOiAndWFpcicsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXJlYW4nLFxuICAgICAgICAgICAgZDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbGF0aGEnLFxuICAgICAgICAgICAgTTogJ23DrG9zJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5OiAnYmxpYWRobmEnLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhZGhuYScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdhbGljaWFuIFtnbF1cbi8vISBhdXRob3IgOiBKdWFuIEcuIEh1cnRhZG8gOiBodHRwczovL2dpdGh1Yi5jb20vanVhbmdodXJ0YWRvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZ2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnbCcsIHtcbiAgICAgICAgbW9udGhzOiAneGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX23DqXIuX3hvdi5fdmVuLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9tw6lfeG9fdmVfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxw6EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFsnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoXMnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbb250ZSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoScgOiAnYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tvXSBkZGRkIFtwYXNhZG8gJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKCd1bicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbicgKyBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnZW4gJyArIHN0cjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnaGFpICVzJyxcbiAgICAgICAgICAgIHM6ICd1bnMgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5oYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgRGV2YW5hZ2FyaSBzY3JpcHQgW2dvbS1kZXZhXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyfgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgJ+CkpeCli+CkoeClhyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKHgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkuOClheCkleCkguCkoSddLFxuICAgICAgICAgICAgbTogWyfgpI/gpJXgpL4g4KSu4KS/4KSj4KSf4KS+4KSoJywgJ+Ckj+CklSDgpK7gpL/gpKjgpYLgpJ8nXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkruCkv+Cko+Ckn+CkvuCkgiddLFxuICAgICAgICAgICAgaDogWyfgpI/gpJXgpL4g4KS14KSw4KS+4KSoJywgJ+Ckj+CklSDgpLXgpLAnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDgpLXgpLDgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCkvuCkgiddLFxuICAgICAgICAgICAgZDogWyfgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoJywgJ+Ckj+CklSDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyDgpKbgpL/gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkpuClgOCkuCddLFxuICAgICAgICAgICAgTTogWyfgpI/gpJXgpL4g4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSoJywgJ+Ckj+CklSDgpK7gpY3gpLngpK/gpKjgpYsnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAnLCBudW1iZXIgKyAnIOCkruCljeCkueCkr+CkqOClhyddLFxuICAgICAgICAgICAgeTogWyfgpI/gpJXgpL4g4KS14KSw4KWN4KS44KS+4KSoJywgJ+Ckj+CklSDgpLXgpLDgpY3gpLgnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCljeCkuOCkvuCkgiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21EZXZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWRldmEnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWA4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KSvX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWA4KSa4KWN4KSv4KS+X+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpK7gpL7gpLDgpY3gpJrgpL7gpJrgpY3gpK/gpL5f4KSP4KSq4KWN4KSw4KWA4KSy4KS+4KSa4KWN4KSv4KS+X+CkruClh+Ckr+CkvuCkmuCljeCkr+Ckvl/gpJzgpYLgpKjgpL7gpJrgpY3gpK/gpL5f4KSc4KWB4KSy4KSv4KS+4KSa4KWN4KSv4KS+X+CkkeCkl+CkuOCljeCkn+CkvuCkmuCljeCkr+Ckvl/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSR4KSV4KWN4KSf4KWL4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkqOCli+CkteCljeCkueClh+CkguCkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKHgpL/gpLjgpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWALl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksi5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4KSG4KSv4KSk4KS+4KSwX+CkuOCli+CkruCkvuCksF/gpK7gpILgpJfgpLPgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+CkrOCkv+CksOClh+CkuOCljeCkpOCkvuCksF/gpLjgpYHgpJXgpY3gpLDgpL7gpLBf4KS24KWH4KSo4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSG4KSv4KSkLl/gpLjgpYvgpK4uX+CkruCkguCkl+Cksy5f4KSs4KWB4KSnLl/gpKzgpY3gpLDgpYfgpLjgpY3gpKQuX+CkuOClgeCkleCljeCksC5f4KS24KWH4KSoLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpIZf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSs4KWN4KSw4KWHX+CkuOClgV/gpLbgpYcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCkr+CknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpKvgpL7gpLLgpY3gpK/gpL7gpIJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+Ckq+ClgeCkoeCksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCkvuCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSr4KS+4KSf4KSy4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkhuCkpuClgOCkgicsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgpLXgpYfgpLApLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICfgpLXgpYfgpLAnIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4KS14KWH4KSwJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgICAgIGRveTogMywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyICg3ICsgMCAtIDQpXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKTgpYB84KS44KSV4KS+4KSz4KWA4KSCfOCkpuCkqOCkquCkvuCksOCkvuCkgnzgpLjgpL7gpILgpJzgpYcvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYDgpIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID4gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkguCknOClhycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgOCkgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpILgpJzgpYcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tRGV2YTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb25rYW5pIExhdGluIHNjcmlwdCBbZ29tLWxhdG5dXG4vLyEgYXV0aG9yIDogVGhlIERpc2NvdmVyZXIgOiBodHRwczovL2dpdGh1Yi5jb20vV2lraURpc2NvdmVyZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ3Rob2RkZWEgc2Vrb25kYW1uaScsICd0aG9kZGUgc2Vrb25kJ10sXG4gICAgICAgICAgICBzczogW251bWJlciArICcgc2Vrb25kYW1uaScsIG51bWJlciArICcgc2Vrb25kJ10sXG4gICAgICAgICAgICBtOiBbJ2VrYSBtaW50YW4nLCAnZWsgbWludXQnXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtaW50YW1uaScsIG51bWJlciArICcgbWludGFtJ10sXG4gICAgICAgICAgICBoOiBbJ2VrYSB2b3JhbicsICdlayB2b3InXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB2b3JhbW5pJywgbnVtYmVyICsgJyB2b3JhbSddLFxuICAgICAgICAgICAgZDogWydla2EgZGlzYW4nLCAnZWsgZGlzJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgZGlzYW1uaScsIG51bWJlciArICcgZGlzJ10sXG4gICAgICAgICAgICBNOiBbJ2VrYSBtaG9pbmVhbicsICdlayBtaG9pbm8nXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBtaG9pbmVhbW5pJywgbnVtYmVyICsgJyBtaG9pbmUnXSxcbiAgICAgICAgICAgIHk6IFsnZWthIHZvcnNhbicsICdlayB2b3JvcyddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIHZvcnNhbW5pJywgbnVtYmVyICsgJyB2b3JzYW0nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZ29tTGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dvbS1sYXRuJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ0phbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnInLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAnSmFuZXJhY2hlYV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxhY2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9NTU1NKFxccykrRFtvRF0/LyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogXCJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFyXCIuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWlfU21fTW9fQnVfQnJfU3VfU24nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIFt2YXp0YV0nLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBaXpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRmFsZWFtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tGdWRkbG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLYWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ZhdHRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZGltJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JkaW5hbCAnZXInIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnZXInO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1xuICAgICAgICAgICAgZG95OiAzLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgKDcgKyAwIC0gNClcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdyYXRpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29rYWxsaW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZG9ucGFyYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPiAxMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2FuamUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29rYWxsaW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvbnBhcmFtJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzYW5qZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tTGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHdWphcmF0aSBbZ3VdXG4vLyEgYXV0aG9yIDogS2F1c2hpayBUaGFua2kgOiBodHRwczovL2dpdGh1Yi5jb20vS2F1c2hpazE5ODdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KunJyxcbiAgICAgICAgICAgIDI6ICfgq6gnLFxuICAgICAgICAgICAgMzogJ+CrqScsXG4gICAgICAgICAgICA0OiAn4KuqJyxcbiAgICAgICAgICAgIDU6ICfgq6snLFxuICAgICAgICAgICAgNjogJ+CrrCcsXG4gICAgICAgICAgICA3OiAn4KutJyxcbiAgICAgICAgICAgIDg6ICfgq64nLFxuICAgICAgICAgICAgOTogJ+CrrycsXG4gICAgICAgICAgICAwOiAn4KumJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Crpyc6ICcxJyxcbiAgICAgICAgICAgICfgq6gnOiAnMicsXG4gICAgICAgICAgICAn4KupJzogJzMnLFxuICAgICAgICAgICAgJ+Crqic6ICc0JyxcbiAgICAgICAgICAgICfgq6snOiAnNScsXG4gICAgICAgICAgICAn4KusJzogJzYnLFxuICAgICAgICAgICAgJ+CrrSc6ICc3JyxcbiAgICAgICAgICAgICfgq64nOiAnOCcsXG4gICAgICAgICAgICAn4KuvJzogJzknLFxuICAgICAgICAgICAgJ+Crpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBndSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2d1Jywge1xuICAgICAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgqrDgqrXgqr/gqrXgqr7gqrBf4Kq44KuL4Kqu4Kq14Kq+4KqwX+CqruCqguCql+Cqs+CqteCqvuCqsF/gqqzgq4Hgqqfgq43gqrXgqr7gqrBf4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwX+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsF/gqrbgqqjgqr/gqrXgqr7gqrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kqu4Kq+JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgqqrgqrngq4fgqrLgqr4nLFxuICAgICAgICAgICAgczogJ+CqheCqruCrgeCqlSDgqqrgqrPgq4snLFxuICAgICAgICAgICAgc3M6ICclZCDgqrjgq4fgqpXgqoLgqqEnLFxuICAgICAgICAgICAgbTogJ+Cqj+CqlSDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgbW06ICclZCDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgaDogJ+Cqj+CqlSDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgaGg6ICclZCDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgZDogJ+Cqj+CqlSDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgTTogJ+Cqj+CqlSDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgTU06ICclZCDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgeTogJ+Cqj+CqlSDgqrXgqrDgq43gqrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgqrXgqrDgq43gqrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBHdWphcmF0aS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CqsOCqvuCqpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqqzgqqrgq4vgqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqvuCqguCqnCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqs4Kqq4KuL4KqwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqr7gqoLgqpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBndTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIZWJyZXcgW2hlXVxuLy8hIGF1dGhvciA6IFRvbWVyIENvaGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3RvbWVyXG4vLyEgYXV0aG9yIDogTW9zaGUgU2ltYW50b3YgOiBodHRwczovL2dpdGh1Yi5jb20vRGV2ZWxvcG1lbnRJTFxuLy8hIGF1dGhvciA6IFRhbCBBdGVyIDogaHR0cHM6Ly9naXRodWIuY29tL1RhbEF0ZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgICAgICBtb250aHM6ICfXmdeg15XXkNeoX9ek15HXqNeV15DXqF/Xnteo16Vf15DXpNeo15nXnF/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS15XXodeYX9eh16TXmNee15HXqF/XkNeV16fXmNeV15HXqF/XoNeV15HXnteR16hf15PXptee15HXqCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn15nXoNeV17Nf16TXkdeo17Nf157XqNelX9eQ16TXqNezX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXs1/Xodek15jXs1/XkNeV16fXs1/XoNeV15HXs1/Xk9em157Xsycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfXqNeQ16nXldefX9ep16DXmV/Xqdec15nXqdeZX9eo15HXmdei15lf15fXnteZ16nXmV/XqdeZ16nXmV/XqdeR16onLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9eQX9eRX9eSX9eTX9eUX9eVX9epJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW9eRXU1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFvXkV1NTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9eU15nXldedINeR1r5dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vXnteX16gg15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9eR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9eQ16rXnteV15wg15HWvl1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vXkdeZ15XXnV0gZGRkZCBb15TXkNeX16jXldefINeR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9eR16LXldeTICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfXnNek16DXmSAlcycsXG4gICAgICAgICAgICBzOiAn157Xodek16gg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBzczogJyVkINep16DXmdeV16onLFxuICAgICAgICAgICAgbTogJ9eT16fXlCcsXG4gICAgICAgICAgICBtbTogJyVkINeT16fXldeqJyxcbiAgICAgICAgICAgIGg6ICfXqdei15QnLFxuICAgICAgICAgICAgaGg6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn16nXoteq15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoteV16onO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQ6ICfXmdeV150nLFxuICAgICAgICAgICAgZGQ6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn15nXldee15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg15nXnteZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE06ICfXl9eV15PXqScsXG4gICAgICAgICAgICBNTTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXl9eV15PXqdeZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeX15XXk9ep15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeTogJ9ep16DXlCcsXG4gICAgICAgICAgICB5eTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdeg16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyICUgMTAgPT09IDAgJiYgbnVtYmVyICE9PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15QnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOlxuICAgICAgICAgICAgL9eQ15fXlFwi16Z815zXpNeg15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNec16TXoNeZINeU16bXlNeo15nXmdedfNec16TXoNeV16og15HXlden16h815HXkdeV16fXqHzXkdei16jXkS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijXkNeX15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNeR16LXqNeRKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXnNek16DXldeqINeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15zXpNeg15RcItemJyA6ICfXnNek16DXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9eQ15fXlFwi16YnIDogJ9eQ15fXqNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdei16jXkSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSGluZGkgW2hpXVxuLy8hIGF1dGhvciA6IE1heWFuayBTaW5naGFsIDogaHR0cHM6Ly9naXRodWIuY29tL21heWFua3NpbmdoYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXuCknOCkqC9pLFxuICAgICAgICAgICAgL17gpKvgpLzgpLB84KSr4KSwL2ksXG4gICAgICAgICAgICAvXuCkruCkvuCksOCljeCkmi9pLFxuICAgICAgICAgICAgL17gpIXgpKrgpY3gpLDgpYgvaSxcbiAgICAgICAgICAgIC9e4KSu4KSIL2ksXG4gICAgICAgICAgICAvXuCknOClguCkqC9pLFxuICAgICAgICAgICAgL17gpJzgpYHgpLIvaSxcbiAgICAgICAgICAgIC9e4KSF4KSXL2ksXG4gICAgICAgICAgICAvXuCkuOCkv+CkpOCkgnzgpLjgpL/gpKQvaSxcbiAgICAgICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgICAgICAvXuCkqOCktXzgpKjgpLXgpIIvaSxcbiAgICAgICAgICAgIC9e4KSm4KS/4KS44KSCfOCkpuCkv+CkuC9pLFxuICAgICAgICBdLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL17gpJzgpKgvaSxcbiAgICAgICAgICAgIC9e4KSr4KS84KSwL2ksXG4gICAgICAgICAgICAvXuCkruCkvuCksOCljeCkmi9pLFxuICAgICAgICAgICAgL17gpIXgpKrgpY3gpLDgpYgvaSxcbiAgICAgICAgICAgIC9e4KSu4KSIL2ksXG4gICAgICAgICAgICAvXuCknOClguCkqC9pLFxuICAgICAgICAgICAgL17gpJzgpYHgpLIvaSxcbiAgICAgICAgICAgIC9e4KSF4KSXL2ksXG4gICAgICAgICAgICAvXuCkuOCkv+CkpC9pLFxuICAgICAgICAgICAgL17gpIXgpJXgpY3gpJ/gpYIvaSxcbiAgICAgICAgICAgIC9e4KSo4KS1L2ksXG4gICAgICAgICAgICAvXuCkpuCkv+CkuC9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGhpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaGknLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn4KSc4KSo4KS14KSw4KWAX+Ckq+CkvOCksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkruCljeCkrOCksF/gpKbgpL/gpLjgpK7gpY3gpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ+CknOCkqOCkteCksOClgF/gpKvgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSC4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpILgpKzgpLBf4KSm4KS/4KS44KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KSoLl/gpKvgpLzgpLAuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYguX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpIXgpJcuX+CkuOCkv+CkpC5f4KSF4KSV4KWN4KSf4KWCLl/gpKjgpLUuX+CkpuCkv+CkuC4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLLgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLJf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IHNob3J0TW9udGhzUGFyc2UsXG5cbiAgICAgICAgbW9udGhzUmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKjgpLXgpLDgpYB84KSc4KSoXFwuP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAfOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIfOCknOClgeCkslxcLj984KSF4KSX4KS44KWN4KSkfOCkheCkl1xcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLB84KSo4KS1XFwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFxcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcXC4/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYB84KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksnzgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXFwuP3zgpIXgpJfgpLjgpY3gpKR84KSF4KSXXFwuP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksHzgpKjgpLVcXC4/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLB84KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgD984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgD984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLI/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIg/fOCkheCkl+CkuOCljeCkpD984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKQ/XFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwPykvaSxcblxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSoXFwuP3zgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSyXFwuP3zgpIXgpJdcXC4/fOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLVcXC4/fOCkpuCkv+CkuFxcLj8pL2ksXG5cbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSq4KS/4KSb4KSy4KWHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCkruClh+CkgicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KSq4KS54KSy4KWHJyxcbiAgICAgICAgICAgIHM6ICfgpJXgpYHgpJsg4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleCkguCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCkguCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCkguCkn+ClhycsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkteCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkteCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEhpbmRpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAgICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIEhpbmRpLlxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSkfOCkuOClgeCkrOCkuXzgpKbgpYvgpKrgpLngpLB84KS24KS+4KSuLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KWB4KSs4KS5Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCli+CkquCkueCksCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS24KS+4KSuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KWB4KSs4KS5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpYvgpKrgpLngpLAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CktuCkvuCkric7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENyb2F0aWFuIFtocl1cbi8vISBhdXRob3IgOiBCb2phbiBNYXJrb3ZpxIcgOiBodHRwczovL2dpdGh1Yi5jb20vYm1hcmtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRub2cgc2F0YSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2Rhbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5lJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdocicsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzaWplxI1uamFfdmVsamHEjWVfb8W+dWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdzaWouX3ZlbGouX2/FvnUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGldIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBocjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIdW5nYXJpYW4gW2h1XVxuLy8hIGF1dGhvciA6IEFkYW0gQnJ1bm5lciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnJ1bm5lclxuLy8hIGF1dGhvciA6IFBldGVyIFZpc3p0ICA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXNzYXRndFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHdlZWtFbmRpbmdzID1cbiAgICAgICAgJ3Zhc8Ohcm5hcCBow6l0ZsWRbiBrZWRkZW4gc3plcmTDoW4gY3PDvHTDtnJ0w7Zrw7ZuIHDDqW50ZWtlbiBzem9tYmF0b24nLnNwbGl0KCcgJyk7XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgbnVtID0gbnVtYmVyO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgPyAnbsOpaMOhbnkgbcOhc29kcGVyYydcbiAgICAgICAgICAgICAgICAgICAgOiAnbsOpaMOhbnkgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgPyAnIG3DoXNvZHBlcmMnXG4gICAgICAgICAgICAgICAgICAgIDogJyBtw6Fzb2RwZXJjZSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBwZXJjJyA6ICcgcGVyY2UnKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDs3JhJyA6ICcgw7Nyw6FqYScpO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBuYXAnIDogJyBuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBow7NuYXAnIDogJyBow7NuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3ZWVrKGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaXNGdXR1cmUgPyAnJyA6ICdbbcO6bHRdICcpICtcbiAgICAgICAgICAgICdbJyArXG4gICAgICAgICAgICB3ZWVrRW5kaW5nc1t0aGlzLmRheSgpXSArXG4gICAgICAgICAgICAnXSBMVFsta29yXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgaHUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdodScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudcOhcl9mZWJydcOhcl9tw6FyY2l1c1/DoXByaWxpc19tw6FqdXNfasO6bml1c19qw7psaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbcOhcmMuX8OhcHIuX23DoWouX2rDum4uX2rDumwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAndmFzw6FybmFwX2jDqXRmxZFfa2VkZF9zemVyZGFfY3PDvHTDtnJ0w7ZrX3DDqW50ZWtfc3pvbWJhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3Zhc19ow6l0X2tlZGRfc3plX2Nzw7x0X3DDqW5fc3pvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3ZfaF9rX3N6ZV9jc19wX3N6bycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBMTDogJ1lZWVkuIE1NTU0gRC4nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gTU1NTSBELiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZGV8ZHUvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09ICd1JztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA9PT0gdHJ1ZSA/ICdkZScgOiAnREUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA9PT0gdHJ1ZSA/ICdkdScgOiAnRFUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1ttYV0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tob2xuYXBdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3RlZ25hcF0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vlay5jYWxsKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIG3Dumx2YScsXG4gICAgICAgICAgICBwYXN0OiAnJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFybWVuaWFuIFtoeS1hbV1cbi8vISBhdXRob3IgOiBBcm1lbmRhcmFieWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2FybWVuZGFyYWJ5YW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoeUFtID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHktYW0nLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn1bDVuNaC1bbVvtWh1oBf1oPVpdW/1oDVvtWh1oBf1bTVodaA1b9f1aHVutaA1avVrF/VtNWh1bXVq9W9X9Ww1bjWgtW21avVvV/VsNW41oLVrNWr1b1f1oXVo9W41b3Vv9W41b1f1b3VpdW61b/VpdW01aLVpdaAX9Ww1bjVr9W/1aXVtNWi1aXWgF/VttW41bXVpdW01aLVpdaAX9Wk1aXVr9W/1aXVtNWi1aXWgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9Wv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Wh1bXVvdaF1oBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb1b7VodWy1ahdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb1aXWgNWl1a9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg1bDVpdW/1bgnLFxuICAgICAgICAgICAgcGFzdDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgICAgIHM6ICfVtNWrINaE1aHVttWrINW+1aHVtdaA1a/VtdWh1bYnLFxuICAgICAgICAgICAgc3M6ICclZCDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIG06ICfWgNW41brVpScsXG4gICAgICAgICAgICBtbTogJyVkINaA1bjVutWlJyxcbiAgICAgICAgICAgIGg6ICfVqtWh1bQnLFxuICAgICAgICAgICAgaGg6ICclZCDVqtWh1bQnLFxuICAgICAgICAgICAgZDogJ9aF1oAnLFxuICAgICAgICAgICAgZGQ6ICclZCDWhdaAJyxcbiAgICAgICAgICAgIE06ICfVodW01avVvScsXG4gICAgICAgICAgICBNTTogJyVkINWh1bTVq9W9JyxcbiAgICAgICAgICAgIHk6ICfVv9Wh1oDVqycsXG4gICAgICAgICAgICB5eTogJyVkINW/1aHWgNWrJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVo9Wr1bfVpdaA1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aHVvNWh1b7VuNW/1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wl1oDVpdWv1bjVtdWh1bYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERERvJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1avVtic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh5QW07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSW5kb25lc2lhbiBbaWRdXG4vLyEgYXV0aG9yIDogTW9oYW1tYWQgU2F0cmlvIFV0b21vIDogaHR0cHM6Ly9naXRodWIuY29tL3R5b2tcbi8vISByZWZlcmVuY2U6IGh0dHA6Ly9pZC53aWtpc291cmNlLm9yZy93aWtpL1BlZG9tYW5fVW11bV9FamFhbl9CYWhhc2FfSW5kb25lc2lhX3lhbmdfRGlzZW1wdXJuYWthblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGlkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaWQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ01pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdNZ19Tbl9TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2lhbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NvcmUnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvcmUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQmVzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsYWx1IHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxhbHUnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIGRldGlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGV0aWsnLFxuICAgICAgICAgICAgbTogJ3NlbWVuaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEljZWxhbmRpYyBbaXNdXG4vLyEgYXV0aG9yIDogSGlucmlrIMOWcm4gU2lndXLDsHNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vaGlucmlrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG4gJSAxMCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICdub2trcmFyIHNla8O6bmR1cidcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9ra3J1bSBzZWvDum5kdW0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla8O6bmR1cicgOiAnc2Vrw7puZHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtw61uw7p0YScgOiAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdrbHVra3VzdHVuZGlyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2tsdWtrdXN0dW5kdW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnYScgOiAnZMO2Z3VtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsGknIDogJ23DoW51w7B1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcnVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lzJywge1xuICAgICAgICBtb250aHM6ICdqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hw61fasO6bl9qw7psX8OhZ8O6X3NlcF9va3RfbsOzdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51ZGFndXJfbcOhbnVkYWd1cl/DvnJpw7BqdWRhZ3VyX21pw7B2aWt1ZGFndXJfZmltbXR1ZGFndXJfZsO2c3R1ZGFndXJfbGF1Z2FyZGFndXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTcOhX8Oecl9NaV9GaV9Gw7ZfTGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDrSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8OhIG1vcmd1biBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OtIGfDpnIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsGFzdGFdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlZnRpciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZnlyaXIgJXMgc8Otw7BhbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6ICdrbHVra3VzdHVuZCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSBbaXQtY2hdXG4vLyEgYXV0aG9yIDogeGZoIDogaHR0cHM6Ly9naXRodWIuY29tL3hmaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0Q2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpdC1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWVfZ2lfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRG9tYW5pIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoL15bMC05XS4rJC8udGVzdChzKSA/ICd0cmEnIDogJ2luJykgKyAnICcgKyBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgICAgICBzOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQ6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRDaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIFtpdF1cbi8vISBhdXRob3IgOiBMb3JlbnpvIDogaHR0cHM6Ly9naXRodWIuY29tL2FsaWVtXG4vLyEgYXV0aG9yOiBNYXR0aWEgTGFyZW50aXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub3N0YWxnaWF6XG4vLyEgYXV0aG9yOiBNYXJjbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYW5mcmU5OFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW09nZ2kgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0RvbWFuaSBhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnZGRkZCBbYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0llcmkgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMYSBzY29yc2FdIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMbyBzY29yc29dIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd0cmEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGZhJyxcbiAgICAgICAgICAgIHM6ICdhbGN1bmkgc2Vjb25kaScsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGknLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0aScsXG4gICAgICAgICAgICBoOiBcInVuJ29yYVwiLFxuICAgICAgICAgICAgaGg6ICclZCBvcmUnLFxuICAgICAgICAgICAgZDogJ3VuIGdpb3JubycsXG4gICAgICAgICAgICBkZDogJyVkIGdpb3JuaScsXG4gICAgICAgICAgICB3OiAndW5hIHNldHRpbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNldHRpbWFuZScsXG4gICAgICAgICAgICBNOiAndW4gbWVzZScsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2knLFxuICAgICAgICAgICAgeTogJ3VuIGFubm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm5pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXBhbmVzZSBbamFdXG4vLyEgYXV0aG9yIDogTEkgTG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYXJ5b25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBqYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2phJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcyMDE5LTA1LTAxJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+S7pOWSjCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn44u/JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnUicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTk4OS0wMS0wOCcsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcyMDE5LTA0LTMwJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+W5s+aIkCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4427JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnSCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTkyNi0xMi0yNScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTg5LTAxLTA3JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+aYreWSjCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4428JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnUycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTkxMi0wNy0zMCcsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTI2LTEyLTI0JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+Wkp+atoycsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4429JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnVCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTg3My0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTEyLTA3LTI5JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDYsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+aYjuayuycsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn442+JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnTScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxODczLTEyLTMxJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+ilv+aapicsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+e0gOWFg+WJjScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBlcmFZZWFyT3JkaW5hbFJlZ2V4OiAvKOWFg3xcXGQrKeW5tC8sXG4gICAgICAgIGVyYVllYXJPcmRpbmFsUGFyc2U6IGZ1bmN0aW9uIChpbnB1dCwgbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXSA9PT0gJ+WFgycgPyAxIDogcGFyc2VJbnQobWF0Y2hbMV0gfHwgaW5wdXQsIDEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcnycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpShkZGQpIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WNiOWJjXzljYjlvowvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfljYjlvownO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Y2I5YmNJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjlvownO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rml6VdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5pelXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnaXpgLFdZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjml6VdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VlaygpICE9PSBub3cud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+WFiOmAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3ml6UvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDEgPyAn5YWD5bm0JyA6IG51bWJlciArICflubQnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5pWw56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWTnp5InLFxuICAgICAgICAgICAgbTogJzHliIYnLFxuICAgICAgICAgICAgbW06ICclZOWIhicsXG4gICAgICAgICAgICBoOiAnMeaZgumWkycsXG4gICAgICAgICAgICBoaDogJyVk5pmC6ZaTJyxcbiAgICAgICAgICAgIGQ6ICcx5pelJyxcbiAgICAgICAgICAgIGRkOiAnJWTml6UnLFxuICAgICAgICAgICAgTTogJzHjg7bmnIgnLFxuICAgICAgICAgICAgTU06ICclZOODtuaciCcsXG4gICAgICAgICAgICB5OiAnMeW5tCcsXG4gICAgICAgICAgICB5eTogJyVk5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBqYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXZhbmVzZSBbanZdXG4vLyEgYXV0aG9yIDogUm9ueSBMYW50aXAgOiBodHRwczovL2dpdGh1Yi5jb20vbGFudGlwXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vanYud2lraXBlZGlhLm9yZy93aWtpL0Jhc2FfSmF3YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGp2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnanYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ01nX1NuX1NsX1JiX0ttX0ptX1NwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdlbmppbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2l5YW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuamluZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpeWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbnRlbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmRhbHUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01iZW5qYW5nIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbGEgd2luZ2kgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGluZ2thbmcga2VwZW5na2VyJyxcbiAgICAgICAgICAgIHM6ICdzYXdldGF3aXMgZGV0aWsnLFxuICAgICAgICAgICAgc3M6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtOiAnc2V0dW5nZ2FsIG1lbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuaXQnLFxuICAgICAgICAgICAgaDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlZGludGVuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGludGVuJyxcbiAgICAgICAgICAgIE06ICdzZXd1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgd3VsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGF1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhdW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ganY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VvcmdpYW4gW2thXVxuLy8hIGF1dGhvciA6IElyYWtsaSBKYW5pYXNodmlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9JcmFrbGlKYW5pXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrYScsIHtcbiAgICAgICAgbW9udGhzOiAn4YOY4YOQ4YOc4YOV4YOQ4YOg4YOYX+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmF/hg5vhg5Dhg6Dhg6Lhg5hf4YOQ4YOe4YOg4YOY4YOa4YOYX+GDm+GDkOGDmOGDoeGDmF/hg5jhg5Xhg5zhg5jhg6Hhg5hf4YOY4YOV4YOa4YOY4YOh4YOYX+GDkOGDkuGDleGDmOGDoeGDouGDnV/hg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg5hf4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYX+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDmF/hg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg5gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YOY4YOQ4YOcX+GDl+GDlOGDkV/hg5vhg5Dhg6Bf4YOQ4YOe4YOgX+GDm+GDkOGDmF/hg5jhg5Xhg5xf4YOY4YOV4YOaX+GDkOGDkuGDlV/hg6Hhg5Thg6Vf4YOd4YOl4YOiX+GDnOGDneGDlF/hg5Phg5Thg5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5gnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogLyjhg6zhg5jhg5zhg5B84YOo4YOU4YOb4YOT4YOU4YOSKS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YOZ4YOVX+GDneGDoF/hg6Hhg5Bf4YOd4YOXX+GDruGDo1/hg57hg5Bf4YOo4YOQJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GDk+GDpuGDlOGDoV0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhg67hg5Xhg5Dhg5pdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YOS4YOj4YOo4YOY4YOcXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vhg6jhg5Thg5vhg5Phg5Thg5JdIGRkZGQgTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YOs4YOY4YOc4YOQXSBkZGRkIExULeGDluGDlCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKOGDrOGDkOGDm3zhg6zhg6Phg5d84YOh4YOQ4YOQ4YOXfOGDrOGDlOGDmnzhg5Phg6Z84YOX4YOVKSjhg5h84YOUKS8sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJDIgPT09ICfhg5gnID8gJDEgKyAn4YOo4YOYJyA6ICQxICsgJDIgKyAn4YOo4YOYJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8o4YOYfOGDlCkkLywgJ+GDmOGDoSDhg6zhg5jhg5wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC/hg6zhg5Thg5rhg5gvLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6ICfhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIG06ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW06ICclZCDhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgaDogJ+GDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBoaDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkOiAn4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIE06ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU06ICclZCDhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgeTogJ+GDrOGDlOGDmuGDmCcsXG4gICAgICAgICAgICB5eTogJyVkIOGDrOGDlOGDmuGDmCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8wfDEt4YOa4YOYfOGDm+GDlC1cXGR7MSwyfXxcXGR7MSwyfS3hg5QvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bWJlciA8IDIwIHx8XG4gICAgICAgICAgICAgICAgKG51bWJlciA8PSAxMDAgJiYgbnVtYmVyICUgMjAgPT09IDApIHx8XG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLFxuICAgICAgICAgICAgZG95OiA3LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGthO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEthemFraCBba2tdXG4vLyEgYXV0aG9ycyA6IE51cmxhbiBSYWtoaW16aGFub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbnVybGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YjRlicsXG4gICAgICAgIDE6ICct0YjRlicsXG4gICAgICAgIDI6ICct0YjRlicsXG4gICAgICAgIDM6ICct0YjRlicsXG4gICAgICAgIDQ6ICct0YjRlicsXG4gICAgICAgIDU6ICct0YjRlicsXG4gICAgICAgIDY6ICct0YjRiycsXG4gICAgICAgIDc6ICct0YjRlicsXG4gICAgICAgIDg6ICct0YjRlicsXG4gICAgICAgIDk6ICct0YjRiycsXG4gICAgICAgIDEwOiAnLdGI0YsnLFxuICAgICAgICAyMDogJy3RiNGLJyxcbiAgICAgICAgMzA6ICct0YjRiycsXG4gICAgICAgIDQwOiAnLdGI0YsnLFxuICAgICAgICA1MDogJy3RiNGWJyxcbiAgICAgICAgNjA6ICct0YjRiycsXG4gICAgICAgIDcwOiAnLdGI0ZYnLFxuICAgICAgICA4MDogJy3RiNGWJyxcbiAgICAgICAgOTA6ICct0YjRiycsXG4gICAgICAgIDEwMDogJy3RiNGWJyxcbiAgICB9O1xuXG4gICAgdmFyIGtrID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2snLCB7XG4gICAgICAgIG1vbnRoczogJ9Kb0LDSo9GC0LDRgF/QsNKb0L/QsNC9X9C90LDRg9GA0YvQt1/RgdOZ0YPRltGAX9C80LDQvNGL0YBf0LzQsNGD0YHRi9C8X9GI0ZbQu9C00LVf0YLQsNC80YvQt1/Sm9GL0YDQutKv0LnQtdC6X9Kb0LDQt9Cw0L1f0pvQsNGA0LDRiNCwX9C20LXQu9GC0L7Sm9GB0LDQvScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfSm9Cw0qNf0LDSm9C/X9C90LDRg1/RgdOZ0YNf0LzQsNC8X9C80LDRg1/RiNGW0Ltf0YLQsNC8X9Kb0YvRgF/Sm9Cw0Ldf0pvQsNGAX9C20LXQuycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRlicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQttC6X9C00Llf0YHQuV/RgdGAX9Cx0Llf0LbQvF/RgdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0q/Qs9GW0L0g0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQldGA0YLQtdKjINGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YjQtSDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9KjXSBkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINGW0YjRltC90LTQtScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0LHSsdGA0YvQvScsXG4gICAgICAgICAgICBzOiAn0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06ICfQsdGW0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaDogJ9Cx0ZbRgCDRgdCw0pPQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHRltGAINC60q/QvScsXG4gICAgICAgICAgICBkZDogJyVkINC60q/QvScsXG4gICAgICAgICAgICBNOiAn0LHRltGAINCw0LknLFxuICAgICAgICAgICAgTU06ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHk6ICfQsdGW0YAg0LbRi9C7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LbRi9C7JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRiNGWfNGI0YspLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga2s7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2FtYm9kaWFuIFtrbV1cbi8vISBhdXRob3IgOiBLcnV5IFZhbm5hIDogaHR0cHM6Ly9naXRodWIuY29tL2tydXl2YW5uYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfhn6EnLFxuICAgICAgICAgICAgMjogJ+GfoicsXG4gICAgICAgICAgICAzOiAn4Z+jJyxcbiAgICAgICAgICAgIDQ6ICfhn6QnLFxuICAgICAgICAgICAgNTogJ+GfpScsXG4gICAgICAgICAgICA2OiAn4Z+mJyxcbiAgICAgICAgICAgIDc6ICfhn6cnLFxuICAgICAgICAgICAgODogJ+GfqCcsXG4gICAgICAgICAgICA5OiAn4Z+pJyxcbiAgICAgICAgICAgIDA6ICfhn6AnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4Z+hJzogJzEnLFxuICAgICAgICAgICAgJ+Gfoic6ICcyJyxcbiAgICAgICAgICAgICfhn6MnOiAnMycsXG4gICAgICAgICAgICAn4Z+kJzogJzQnLFxuICAgICAgICAgICAgJ+GfpSc6ICc1JyxcbiAgICAgICAgICAgICfhn6YnOiAnNicsXG4gICAgICAgICAgICAn4Z+nJzogJzcnLFxuICAgICAgICAgICAgJ+GfqCc6ICc4JyxcbiAgICAgICAgICAgICfhn6knOiAnOScsXG4gICAgICAgICAgICAn4Z+gJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGttID0gbW9tZW50LmRlZmluZUxvY2FsZSgna20nLCB7XG4gICAgICAgIG1vbnRoczogJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+GeouGetuGekeGet+Gej+GfkuGemV/hnoXhn5DhnpPhn5LhnpFf4Z6i4Z6E4Z+S4Z6C4Z624Z6aX+GeluGeu+Gekl/hnpbhn5LhnprhnqDhnp/hn5LhnpThno/hnrfhn41f4Z6f4Z674Z6A4Z+S4Z6aX+Gen+GfheGemuGfjScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Z6W4Z+S4Z6a4Z654Z6AfOGem+GfkuGehOGetuGehS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GeluGfkuGemuGeueGegCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Z6Q4Z+S4Z6E4Z+D4Z6T4Z+B4Z+HIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhnp/hn5LhnqLhn4LhnoAg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhnpjhn5Lhnp/hnrfhnpvhnpjhnrfhnokg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+Gen+GelOGfkuGej+GetuGeoOGfjeGemOGeu+Gek10gW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+GekeGfgOGejycsXG4gICAgICAgICAgICBwYXN0OiAnJXPhnpjhnrvhnpMnLFxuICAgICAgICAgICAgczogJ+GelOGfieGeu+Gek+GfkuGemOGetuGek+GenOGet+Gek+GetuGekeGeuCcsXG4gICAgICAgICAgICBzczogJyVkIOGenOGet+Gek+GetuGekeGeuCcsXG4gICAgICAgICAgICBtOiAn4Z6Y4Z694Z6Z4Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIGg6ICfhnpjhnr3hnpnhnpjhn4nhn4ThnoQnLFxuICAgICAgICAgICAgaGg6ICclZCDhnpjhn4nhn4ThnoQnLFxuICAgICAgICAgICAgZDogJ+GemOGeveGemeGekOGfkuGehOGfgycsXG4gICAgICAgICAgICBkZDogJyVkIOGekOGfkuGehOGfgycsXG4gICAgICAgICAgICBNOiAn4Z6Y4Z694Z6Z4Z6B4Z+CJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Z6B4Z+CJyxcbiAgICAgICAgICAgIHk6ICfhnpjhnr3hnpnhnobhn5LhnpPhnrbhn4YnLFxuICAgICAgICAgICAgeXk6ICclZCDhnobhn5LhnpPhnrbhn4YnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAv4Z6R4Z64XFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiAn4Z6R4Z64JWQnLFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Z+h4Z+i4Z+j4Z+k4Z+l4Z+m4Z+n4Z+o4Z+p4Z+gXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga207XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2FubmFkYSBba25dXG4vLyEgYXV0aG9yIDogUmFqZWV2IE5haWsgOiBodHRwczovL2dpdGh1Yi5jb20vcmFqZWV2bmFpa3RlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CzpycsXG4gICAgICAgICAgICAyOiAn4LOoJyxcbiAgICAgICAgICAgIDM6ICfgs6knLFxuICAgICAgICAgICAgNDogJ+CzqicsXG4gICAgICAgICAgICA1OiAn4LOrJyxcbiAgICAgICAgICAgIDY6ICfgs6wnLFxuICAgICAgICAgICAgNzogJ+CzrScsXG4gICAgICAgICAgICA4OiAn4LOuJyxcbiAgICAgICAgICAgIDk6ICfgs68nLFxuICAgICAgICAgICAgMDogJ+CzpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgs6cnOiAnMScsXG4gICAgICAgICAgICAn4LOoJzogJzInLFxuICAgICAgICAgICAgJ+CzqSc6ICczJyxcbiAgICAgICAgICAgICfgs6onOiAnNCcsXG4gICAgICAgICAgICAn4LOrJzogJzUnLFxuICAgICAgICAgICAgJ+CzrCc6ICc2JyxcbiAgICAgICAgICAgICfgs60nOiAnNycsXG4gICAgICAgICAgICAn4LOuJzogJzgnLFxuICAgICAgICAgICAgJ+Czryc6ICc5JyxcbiAgICAgICAgICAgICfgs6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIga24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbicsIHtcbiAgICAgICAgbW9udGhzOiAn4LKc4LKo4LK14LKw4LK/X+Cyq+CzhuCyrOCzjeCysOCyteCysOCyv1/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoLgsqzgsrDgs41f4LKF4LKV4LON4LKf4LOG4LOC4LOV4LKs4LKw4LONX+CyqOCyteCzhuCyguCyrOCysOCzjV/gsqHgsr/gsrjgs4bgsoLgsqzgsrDgs40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CynOCyqF/gsqvgs4bgsqzgs43gsrBf4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKCX+CyheCyleCzjeCyn+CzhuCzguCzlV/gsqjgsrXgs4bgsoJf4LKh4LK/4LK44LOG4LKCJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LKt4LK+4LKo4LOBX+CyuOCzhuCzguCzleCyrl/gsq7gsoLgspfgsrNf4LKs4LOB4LKnX+Cyl+CzgeCysOCzgV/gsrbgs4HgspXgs43gsrBf4LK24LKo4LK/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+Cyticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsofgsoLgsqbgs4FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LKo4LK/4LKo4LON4LKo4LOGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LKo4LKC4LKk4LKwJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsrngsr/gsoLgsqbgs4YnLFxuICAgICAgICAgICAgczogJ+CyleCzhuCysuCyteCzgSDgspXgs43gsrfgsqPgspfgsrPgs4EnLFxuICAgICAgICAgICAgc3M6ICclZCDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgs4EnLFxuICAgICAgICAgICAgbTogJ+CykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgbW06ICclZCDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgaDogJ+CykuCyguCypuCzgSDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgaGg6ICclZCDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgZDogJ+CykuCyguCypuCzgSDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgTTogJ+CykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgTU06ICclZCDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgeTogJ+CykuCyguCypuCzgSDgsrXgsrDgs43gsrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgsrXgsrDgs43gsrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4LOn4LOo4LOp4LOq4LOr4LOs4LOt4LOu4LOv4LOmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LKw4LK+4LKk4LON4LKw4LK/fOCyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhnzgsq7gsqfgs43gsq/gsr7gsrngs43gsqh84LK44LKC4LKc4LOGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LKw4LK+4LKk4LON4LKw4LK/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LK44LKC4LKc4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsq7gsqfgs43gsq/gsr7gsrngs43gsqgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyuOCyguCynOCzhic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOCyqOCzhuCzlSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CyqOCzhuCzlSc7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb3JlYW4gW2tvXVxuLy8hIGF1dGhvciA6IEt5dW5nd29vaywgUGFyayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9reXVuZ3cwMGtcbi8vISBhdXRob3IgOiBKZWVleXVsIExlZSA8amVlZXl1bEBnbWFpbC5jb20+XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga28gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbycsIHtcbiAgICAgICAgbW9udGhzOiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn7J287JqU7J28X+yblOyalOydvF/tmZTsmpTsnbxf7IiY7JqU7J28X+uqqeyalOydvF/quIjsmpTsnbxf7Yag7JqU7J28Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+ydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBsbDogJ1lZWVnrhYQgTU1NTSBE7J28JyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IEEgaDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ+yYpOuKmCBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAn64K07J28IExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAn7Ja07KCcIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAn7KeA64Kc7KO8IGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDtm4QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOyghCcsXG4gICAgICAgICAgICBzOiAn66qHIOy0iCcsXG4gICAgICAgICAgICBzczogJyVk7LSIJyxcbiAgICAgICAgICAgIG06ICcx67aEJyxcbiAgICAgICAgICAgIG1tOiAnJWTrtoQnLFxuICAgICAgICAgICAgaDogJ+2VnCDsi5zqsIQnLFxuICAgICAgICAgICAgaGg6ICclZOyLnOqwhCcsXG4gICAgICAgICAgICBkOiAn7ZWY66OoJyxcbiAgICAgICAgICAgIGRkOiAnJWTsnbwnLFxuICAgICAgICAgICAgTTogJ+2VnCDri6wnLFxuICAgICAgICAgICAgTU06ICclZOuLrCcsXG4gICAgICAgICAgICB5OiAn7J28IOuFhCcsXG4gICAgICAgICAgICB5eTogJyVk64WEJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOydvHzsm5R87KO8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7JuUJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfso7wnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/smKTsoIR87Jik7ZuELyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICfsmKTtm4QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga287XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3VyZGlzaCBba3VdXG4vLyEgYXV0aG9yIDogU2hhaHJhbSBNZWJhc2hhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9TaGFocmFtTWViYXNoYXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfaqdin2YbZiNmG24wg2K/ZiNmI25XZhScsXG4gICAgICAgICAgICAn2LTZiNio2KfYqicsXG4gICAgICAgICAgICAn2KbYp9iy2KfYsScsXG4gICAgICAgICAgICAn2YbbjNiz2KfZhicsXG4gICAgICAgICAgICAn2KbYp9uM2KfYsScsXG4gICAgICAgICAgICAn2K3ZiNiy25XbjNix2KfZhicsXG4gICAgICAgICAgICAn2KrbldmF2YXZiNiyJyxcbiAgICAgICAgICAgICfYptin2KgnLFxuICAgICAgICAgICAgJ9im25XbjNmE2YjZiNmEJyxcbiAgICAgICAgICAgICfYqti02LHbjNmG24wg24zbldmD25XZhScsXG4gICAgICAgICAgICAn2KrYtNix24zZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAgICAgJ9mD2KfZhtmI2YbbjCDbjNuV2qnbldmFJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBrdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn24zZh+KAjNmD2LTZh+KAjNmF2YXZh+KAjF/Yr9mI2YjYtNmH4oCM2YXZhdmH4oCMX9iz247YtNmH4oCM2YXZhdmH4oCMX9qG2YjYp9ix2LTZh+KAjNmF2YXZh+KAjF/ZvtuO2YbYrNi02YfigIzZhdmF2YfigIxf2YfZh+KAjNuM2YbbjF/YtNmH4oCM2YXZhdmH4oCMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6XG4gICAgICAgICAgICAn24zZh+KAjNmD2LTZh+KAjNmFX9iv2YjZiNi02YfigIzZhV/Ys9uO2LTZh+KAjNmFX9qG2YjYp9ix2LTZh+KAjNmFX9m+247Zhtis2LTZh+KAjNmFX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfbjF/Yr1/Ys1/ahl/Zvl/Zh1/YtCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YptuO2YjYp9ix2YfigIx82KjZh+KAjNuM2KfZhtuMLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9im247ZiNin2LHZh+KAjC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNmH4oCM24zYp9mG24wnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9im247ZiNin2LHZh+KAjCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9im2YfigIzZhdix24Yg2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2KjZh+KAjNuM2KfZhtuMINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9mD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9iv2YjbjtmG244g2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YTZh+KAjCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMnLFxuICAgICAgICAgICAgczogJ9qG2YfigIzZhtivINqG2LHZg9mH4oCM24zZh+KAjNmDJyxcbiAgICAgICAgICAgIHNzOiAn2obYsdmD2YfigIwgJWQnLFxuICAgICAgICAgICAgbTogJ9uM2YfigIzZgyDYrtmI2YTZh+KAjNmDJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K7ZiNmE2YfigIzZgycsXG4gICAgICAgICAgICBoOiAn24zZh+KAjNmDINmD2KfYqtqY2YXbjtixJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgZDogJ9uM2YfigIzZgyDalduG2pgnLFxuICAgICAgICAgICAgZGQ6ICclZCDalduG2pgnLFxuICAgICAgICAgICAgTTogJ9uM2YfigIzZgyDZhdin2YbarycsXG4gICAgICAgICAgICBNTTogJyVkINmF2KfZhtqvJyxcbiAgICAgICAgICAgIHk6ICfbjNmH4oCM2YMg2LPYp9q1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9q1JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3lyZ3l6IFtreV1cbi8vISBhdXRob3IgOiBDaHluZ3l6IEFyeXN0YW4gdXVsdSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHluZ3l6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YfSrycsXG4gICAgICAgIDE6ICct0YfQuCcsXG4gICAgICAgIDI6ICct0YfQuCcsXG4gICAgICAgIDM6ICct0YfSrycsXG4gICAgICAgIDQ6ICct0YfSrycsXG4gICAgICAgIDU6ICct0YfQuCcsXG4gICAgICAgIDY6ICct0YfRiycsXG4gICAgICAgIDc6ICct0YfQuCcsXG4gICAgICAgIDg6ICct0YfQuCcsXG4gICAgICAgIDk6ICct0YfRgycsXG4gICAgICAgIDEwOiAnLdGH0YMnLFxuICAgICAgICAyMDogJy3Rh9GLJyxcbiAgICAgICAgMzA6ICct0YfRgycsXG4gICAgICAgIDQwOiAnLdGH0YsnLFxuICAgICAgICA1MDogJy3Rh9KvJyxcbiAgICAgICAgNjA6ICct0YfRiycsXG4gICAgICAgIDcwOiAnLdGH0LgnLFxuICAgICAgICA4MDogJy3Rh9C4JyxcbiAgICAgICAgOTA6ICct0YfRgycsXG4gICAgICAgIDEwMDogJy3Rh9KvJyxcbiAgICB9O1xuXG4gICAgdmFyIGt5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgna3knLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YDRjF/RhNC10LLRgNCw0LvRjF/QvNCw0YDRgl/QsNC/0YDQtdC70Yxf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgNGMX9C+0LrRgtGP0LHRgNGMX9C90L7Rj9Cx0YDRjF/QtNC10LrQsNCx0YDRjCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgNGCX9Cw0L/RgF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0JbQtdC6X9CU0q/QuV/QqNC10Llf0KjQsNGAX9CR0LXQuV/QltGD0Lxf0JjRiNC1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9CW0Lpf0JTQuV/QqNC5X9Co0YBf0JHQuV/QltC8X9CY0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHSr9Cz0q/QvSDRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQrdGA0YLQtdKjINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9GN0Y0g0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Oo0YLQutOp0L0g0LDQv9GC0LDQvdGL0L1dIGRkZGQgW9C60q/QvdKvXSBb0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LjRh9C40L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQvNGD0YDRg9C9JyxcbiAgICAgICAgICAgIHM6ICfQsdC40YDQvdC10YfQtSDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQvNKv0L3TqdGCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzSr9C906nRgicsXG4gICAgICAgICAgICBoOiAn0LHQuNGAINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNCw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0LjRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0LjRgCDQsNC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5OiAn0LHQuNGAINC20YvQuycsXG4gICAgICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBreTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMdXhlbWJvdXJnaXNoIFtsYl1cbi8vISBhdXRob3IgOiBtd2VpbWVyc2tpcmNoIDogaHR0cHM6Ly9naXRodWIuY29tL213ZWltZXJza2lyY2hcbi8vISBhdXRob3IgOiBEYXZpZCBSYWlzb24gOiBodHRwczovL2dpdGh1Yi5jb20va3dpc2F0elxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZW5nIE1pbnV0dCcsICdlbmdlciBNaW51dHQnXSxcbiAgICAgICAgICAgIGg6IFsnZW5nIFN0b25uJywgJ2VuZ2VyIFN0b25uJ10sXG4gICAgICAgICAgICBkOiBbJ2VlbiBEYWcnLCAnZW5nZW0gRGFnJ10sXG4gICAgICAgICAgICBNOiBbJ2VlIE1vdW50JywgJ2VuZ2VtIE1vdW50J10sXG4gICAgICAgICAgICB5OiBbJ2VlIEpvZXInLCAnZW5nZW0gSm9lciddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NGdXR1cmVUaW1lKHN0cmluZykge1xuICAgICAgICB2YXIgbnVtYmVyID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZignICcpKTtcbiAgICAgICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2EgJyArIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2FuICcgKyBzdHJpbmc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NQYXN0VGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICd2aXJ1ICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICd2aXJ1biAnICsgc3RyaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdvcmQgYmVmb3JlIHRoZSBnaXZlbiBudW1iZXIgbG9zZXMgdGhlICctbicgZW5kaW5nLlxuICAgICAqIGUuZy4gJ2FuIDEwIERlZWcnIGJ1dCAnYSA1IERlZWcnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtpbnRlZ2VyfVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQobnVtYmVyLCAxMCk7XG4gICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIE51bWJlciAtLT4gYWx3YXlzIHRydWVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwKSB7XG4gICAgICAgICAgICAvLyBPbmx5IDEgZGlnaXRcbiAgICAgICAgICAgIGlmICg0IDw9IG51bWJlciAmJiBudW1iZXIgPD0gNykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgLy8gMiBkaWdpdHNcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBmaXJzdERpZ2l0ID0gbnVtYmVyIC8gMTA7XG4gICAgICAgICAgICBpZiAobGFzdERpZ2l0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihmaXJzdERpZ2l0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobGFzdERpZ2l0KTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDAwMCkge1xuICAgICAgICAgICAgLy8gMyBvciA0IGRpZ2l0cyAtLT4gcmVjdXJzaXZlbHkgY2hlY2sgZmlyc3QgZGlnaXRcbiAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPj0gMTApIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFueXRoaW5nIGxhcmdlciB0aGFuIDQgZGlnaXRzOiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBuLTMgZGlnaXRzXG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDAwO1xuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxiID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbGInLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubmRlZ19Nw6lpbmRlZ19Ew6tuc2NoZGVnX03Dq3R0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX03DqS5fRMOrLl9Nw6suX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX03DqV9Ew6tfTcOrX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0gW0F1ZXJdJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MgW0F1ZXJdJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGF1dCB1bV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTXVlciB1bV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHw6tzY2h0ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW50IGRhdGUgc3RyaW5nIGZvciAnRMOrbnNjaGRlZycgKFR1ZXNkYXkpIGFuZCAnRG9ubmVzY2hkZWcnIChUaHVyc2RheSkgZHVlIHRvIHBob25vbG9naWNhbCBydWxlXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBwcm9jZXNzRnV0dXJlVGltZSxcbiAgICAgICAgICAgIHBhc3Q6IHByb2Nlc3NQYXN0VGltZSxcbiAgICAgICAgICAgIHM6ICdlIHB1ZXIgU2Vrb25uZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWtvbm5lbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dHRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdG9ubmVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogJyVkIERlZWcnLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiAnJWQgTcOpaW50JyxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogJyVkIEpvZXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhbyBbbG9dXG4vLyEgYXV0aG9yIDogUnlhbiBIYXJ0IDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5oYXJ0MlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGxvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbG8nLCB7XG4gICAgICAgIG1vbnRoczogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+C6reC6suC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgupdf4LqIX+C6reC6hF/gup5f4Lqe4LqrX+C6quC6gV/guqonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAn4Lqn4Lqx4LqZZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vguqHgurfgu4ngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4Lqh4Lq34LuJ4Lqt4Lq34LuI4LqZ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vguqfgurHgupldZGRkZFvgu5zgu4ngurLgu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4Lqh4Lq34LuJ4Lqn4Lqy4LqZ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vguqfgurHgupldZGRkZFvgu4HguqXgu4nguqfgupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4Lqt4Lq14LqBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C6nOC7iOC6suC6meC6oeC6sicsXG4gICAgICAgICAgICBzOiAn4Lqa4LuN4LuI4LuA4LqX4Lq74LuI4Lqy4LuD4LqU4Lqn4Lq04LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Lqn4Lq04LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIG06ICcxIOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBtbTogJyVkIOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBoOiAnMSDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgaGg6ICclZCDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgZDogJzEg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIE06ICcxIOC7gOC6lOC6t+C6reC6mScsXG4gICAgICAgICAgICBNTTogJyVkIOC7gOC6lOC6t+C6reC6mScsXG4gICAgICAgICAgICB5OiAnMSDgupvgurUnLFxuICAgICAgICAgICAgeXk6ICclZCDgupvgurUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvKOC6l+C6teC7iClcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LqX4Lq14LuIJyArIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMaXRodWFuaWFuIFtsdF1cbi8vISBhdXRob3IgOiBNaW5kYXVnYXMgTW96xatyYXMgOiBodHRwczovL2dpdGh1Yi5jb20vbW1venVyYXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1bml0cyA9IHtcbiAgICAgICAgc3M6ICdzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcycsXG4gICAgICAgIG06ICdtaW51dMSXX21pbnV0xJdzX21pbnV0xJknLFxuICAgICAgICBtbTogJ21pbnV0xJdzX21pbnXEjWnFs19taW51dGVzJyxcbiAgICAgICAgaDogJ3ZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kxIUnLFxuICAgICAgICBoaDogJ3ZhbGFuZG9zX3ZhbGFuZMWzX3ZhbGFuZGFzJyxcbiAgICAgICAgZDogJ2RpZW5hX2RpZW5vc19kaWVuxIUnLFxuICAgICAgICBkZDogJ2RpZW5vc19kaWVuxbNfZGllbmFzJyxcbiAgICAgICAgTTogJ23El251b19txJduZXNpb19txJduZXPErycsXG4gICAgICAgIE1NOiAnbcSXbmVzaWFpX23El25lc2nFs19txJduZXNpdXMnLFxuICAgICAgICB5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgICAgICB5eTogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tlbGlvcyBzZWt1bmTEl3MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2tlbGnFsyBzZWt1bmTFvmnFsycgOiAna2VsaWFzIHNla3VuZGVzJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgID8gZm9ybXMoa2V5KVswXVxuICAgICAgICAgICAgOiBpc0Z1dHVyZVxuICAgICAgICAgICAgPyBmb3JtcyhrZXkpWzFdXG4gICAgICAgICAgICA6IGZvcm1zKGtleSlbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNwZWNpYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMCB8fCAobnVtYmVyID4gMTAgJiYgbnVtYmVyIDwgMjApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuaXRzW2tleV0uc3BsaXQoJ18nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHJlc3VsdCArIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5WzBdLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgZm9ybXMoa2V5KVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGx0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbHQnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmTFvmlvX2dlZ3XFvsSXc19iaXLFvmVsaW9fbGllcG9zX3J1Z3BqxavEjWlvX3J1Z3PEl2pvX3NwYWxpb19sYXBrcmnEjWlvX2dydW9kxb5pbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT98TU1NTT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnc2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzZWttYWRpZW7Er19waXJtYWRpZW7Er19hbnRyYWRpZW7Er190cmXEjWlhZGllbsSvX2tldHZpcnRhZGllbsSvX3Blbmt0YWRpZW7Er1/FoWXFoXRhZGllbsSvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmXEjWlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc1/FoWXFoXRhZGllbmlzJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvZGRkZCBISDptbS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTX1BfQV9UX0tfUG5fxaAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbxaBpYW5kaWVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1J5dG9qXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthcl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3BvICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmllxaEgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS1vamkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGF0dmlhbiBbbHZdXG4vLyEgYXV0aG9yIDogS3Jpc3RhcHMgS2FybHNvbnMgOiBodHRwczovL2dpdGh1Yi5jb20vc2tha3JpXG4vLyEgYXV0aG9yIDogSsSBbmlzIEVsbWVyaXMgOiBodHRwczovL2dpdGh1Yi5jb20vSmFuaXNFXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdW5pdHMgPSB7XG4gICAgICAgIHNzOiAnc2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG06ICdtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW06ICdtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGhoOiAnc3R1bmRhc19zdHVuZMSBbV9zdHVuZGFfc3R1bmRhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgZDogJ2RpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcycuc3BsaXQoJ18nKSxcbiAgICAgICAgZGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIE06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICBNTTogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgICAgIHk6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHl5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHdpdGhvdXRTdWZmaXggYm9vbGVhbiB0cnVlID0gYSBsZW5ndGggb2YgdGltZTsgZmFsc2UgPSBiZWZvcmUvYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JtYXQoZm9ybXMsIG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVcIiwgXCIzIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzJdIDogZm9ybXNbM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFLmcuIFwiMjEgbWluxat0ZXNcIiBhcyBpbiBcInDEk2MgMjEgbWluxat0ZXNcIi5cbiAgICAgICAgICAgIC8vIEUuZy4gXCIzIG1pbsWrdMSTbVwiIGFzIGluIFwicMSTYyAzIG1pbsWrdMSTbVwiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IGZvcm1zWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2Rhxb5hcyBzZWt1bmRlcycgOiAnZGHFvsSBbSBzZWt1bmTEk20nO1xuICAgIH1cblxuICAgIHZhciBsdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2x2Jywge1xuICAgICAgICBtb250aHM6ICdqYW52xIFyaXNfZmVicnXEgXJpc19tYXJ0c19hcHLEq2xpc19tYWlqc19qxatuaWpzX2rFq2xpanNfYXVndXN0c19zZXB0ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21haV9qxatuX2rFq2xfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3bEk3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlxaFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWS4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8Wgb2RpZW4gcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbUsSrdCBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthciBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUGFnxIFqdcWhxIFdIGRkZGQgW3B1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3DEk2MgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3Bpcm1zICVzJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNb250ZW5lZ3JpbiBbbWVdXG4vLyEgYXV0aG9yIDogTWlvZHJhZyBOaWthxI0gPG1pb2RyYWdAcmVzdGFydGl0Lm1lPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taW9kcmFnbmlrYWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZCcsICdzZWt1bmRhJywgJ3Nla3VuZGknXSxcbiAgICAgICAgICAgIG06IFsnamVkYW4gbWludXQnLCAnamVkbm9nIG1pbnV0YSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRhJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21qZXNlYycsICdtamVzZWNhJywgJ21qZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgICAgICA6IG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0XG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIG1lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3NqdXRyYSB1XSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdcSNZSB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGplbGplXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyaWplZGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFvEjWV0dnJ0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwZXRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmlqZSAlcycsXG4gICAgICAgICAgICBzOiAnbmVrb2xpa28gc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hb3JpIFttaV1cbi8vISBhdXRob3IgOiBKb2huIENvcnJpZ2FuIDxyb2JiaWVjbG9zZXRAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb2huaWRlYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21pJywge1xuICAgICAgICBtb250aHM6ICdLb2hpLXTEgXRlX0h1aS10YW5ndXJ1X1BvdXTFqy10ZS1yYW5naV9QYWVuZ2Etd2jEgXdoxIFfSGFyYXR1YV9QaXBpcmlfSMWNbmdvaW5nb2lfSGVyZS10dXJpLWvFjWvEgV9NYWh1cnVfV2hpcmluZ2EtxIEtbnVrdV9XaGlyaW5nYS3EgS1yYW5naV9IYWtpaGVhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IxY1uZ29pX0hlcmVfTWFodV9XaGktbnVfV2hpLXJhX0hha2knLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsMn0vaSxcbiAgICAgICAgd2Vla2RheXM6ICdSxIF0YXB1X01hbmVfVMWrcmVpX1dlbmVyZWlfVMSBaXRlX1BhcmFpcmVfSMSBdGFyZWknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtpXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaSB0ZWllIG1haGFuYSwgaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1thcG9wbyBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaW5hbmFoaSBpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3doYWthbXV0dW5nYSBpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgcm90byBpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBpIG11YScsXG4gICAgICAgICAgICBzOiAndGUgaMSTa29uYSBydWFydWEnLFxuICAgICAgICAgICAgc3M6ICclZCBoxJNrb25hJyxcbiAgICAgICAgICAgIG06ICdoZSBtZW5ldGknLFxuICAgICAgICAgICAgbW06ICclZCBtZW5ldGknLFxuICAgICAgICAgICAgaDogJ3RlIGhhb3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGFvcmEnLFxuICAgICAgICAgICAgZDogJ2hlIHJhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgcmEnLFxuICAgICAgICAgICAgTTogJ2hlIG1hcmFtYScsXG4gICAgICAgICAgICBNTTogJyVkIG1hcmFtYScsXG4gICAgICAgICAgICB5OiAnaGUgdGF1JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGF1JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWNlZG9uaWFuIFtta11cbi8vISBhdXRob3IgOiBCb3Jpc2xhdiBNaWNrb3YgOiBodHRwczovL2dpdGh1Yi5jb20vQjBrMFxuLy8hIGF1dGhvciA6IFNhc2hrbyBUb2Rvcm92IDogaHR0cHM6Ly9naXRodWIuY29tL2JreWNlaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1rID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWsnLCB7XG4gICAgICAgIG1vbnRoczogJ9GY0LDQvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Zhf0ZjRg9C90Lhf0ZjRg9C70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0ZjQsNC9X9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0L3QtdC00LXQu9CwX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0L7Qul/Qv9C10YLQvtC6X9GB0LDQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDQtV/Rh9C10YJf0L/QtdGCX9GB0LDQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvWVf0L9vX9Cy0YJf0YHRgF/Rh9C1X9C/0LVf0YFhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQlNC10L3QtdGBINCy0L5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KPRgtGA0LUg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0JLQvl0gZGRkZCBb0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQktGH0LXRgNCwINCy0L5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQmNC30LzQuNC90LDRgtCw0YLQsF0gZGRkZCBb0LLQvl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQmNC30LzQuNC90LDRgtC40L7Rgl0gZGRkZCBb0LLQvl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtdC0ICVzJyxcbiAgICAgICAgICAgIHM6ICfQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIG06ICfQtdC00L3QsCDQvNC40L3Rg9GC0LAnLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICAgICAgaDogJ9C10LTQtdC9INGH0LDRgScsXG4gICAgICAgICAgICBoaDogJyVkINGH0LDRgdCwJyxcbiAgICAgICAgICAgIGQ6ICfQtdC00LXQvSDQtNC10L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQtNC10L3QsCcsXG4gICAgICAgICAgICBNOiAn0LXQtNC10L0g0LzQtdGB0LXRhicsXG4gICAgICAgICAgICBNTTogJyVkINC80LXRgdC10YbQuCcsXG4gICAgICAgICAgICB5OiAn0LXQtNC90LAg0LPQvtC00LjQvdCwJyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LPQvtC00LjQvdC4JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQtdCyfNC10L180YLQuHzQstC4fNGA0Lh80LzQuCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgbGFzdDJEaWdpdHMgPSBudW1iZXIgJSAxMDA7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQvSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID4gMTAgJiYgbGFzdDJEaWdpdHMgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QstC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YDQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNyB8fCBsYXN0RGlnaXQgPT09IDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QvNC4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtaztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheWFsYW0gW21sXVxuLy8hIGF1dGhvciA6IEZsb3lkIFBpbmsgOiBodHRwczovL2dpdGh1Yi5jb20vZmxveWRwaW5rXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbCcsIHtcbiAgICAgICAgbW9udGhzOiAn4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+C0nOC0qOC1gS5f4LSr4LWG4LSs4LWN4LSw4LWBLl/gtK7gtL7gtbwuX+C0j+C0quC1jeC0sOC0vy5f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYguX+C0k+C0ly5f4LS44LWG4LSq4LWN4LSx4LWN4LSxLl/gtJLgtJXgtY3gtJ/gtYsuX+C0qOC0teC0gi5f4LSh4LS/4LS44LSCLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgtJ7gtL7gtK/gtLHgtL7gtLTgtY3gtJpf4LSk4LS/4LSZ4LWN4LSV4LSz4LS+4LS04LWN4LSaX+C0muC1iuC0teC1jeC0teC0vuC0tOC1jeC0ml/gtKzgtYHgtKfgtKjgtL7gtLTgtY3gtJpf4LS14LWN4LSv4LS+4LS04LS+4LS04LWN4LSaX+C0teC1huC0s+C1jeC0s+C0v+C0r+C0vuC0tOC1jeC0ml/gtLbgtKjgtL/gtK/gtL7gtLTgtY3gtJonLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C0nuC0vuC0r+C1vF/gtKTgtL/gtJngtY3gtJXgtb5f4LSa4LWK4LS14LWN4LS1X+C0rOC1geC0p+C1u1/gtLXgtY3gtK/gtL7gtLTgtIJf4LS14LWG4LSz4LWN4LSz4LS/X+C0tuC0qOC0vycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgtJ7gtL5f4LSk4LS/X+C0muC1il/gtKzgtYFf4LS14LWN4LSv4LS+X+C0teC1hl/gtLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyAt4LSo4LWBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgtIfgtKjgtY3gtKjgtY1dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LSo4LS+4LSz4LWGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LSH4LSo4LWN4LSo4LSy4LWGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgtJXgtLTgtL/gtJ7gtY3gtJ5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LSV4LS04LS/4LSe4LWN4LSe4LWNJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgtK7gtYHgtbvgtKrgtY0nLFxuICAgICAgICAgICAgczogJ+C0heC1veC0qiDgtKjgtL/gtK7gtL/gtLfgtJngtY3gtJngtb4nLFxuICAgICAgICAgICAgc3M6ICclZCDgtLjgtYbgtJXgtY3gtJXgtbvgtKHgtY0nLFxuICAgICAgICAgICAgbTogJ+C0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgbW06ICclZCDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgaDogJ+C0kuC0sOC1gSDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICAgICAgaGg6ICclZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICAgICAgZDogJ+C0kuC0sOC1gSDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICAgICAgZGQ6ICclZCDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICAgICAgTTogJ+C0kuC0sOC1gSDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgTU06ICclZCDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgeTogJ+C0kuC0sOC1gSDgtLXgtbzgtLfgtIInLFxuICAgICAgICAgICAgeXk6ICclZCDgtLXgtbzgtLfgtIInLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LSw4LS+4LSk4LWN4LSw4LS/fOC0sOC0vuC0teC0v+C0suC1hnzgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNfOC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gnzgtLDgtL7gtKTgtY3gtLDgtL8vaSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C0sOC0vuC0pOC1jeC0sOC0vycgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0teC0v+C0suC1hic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1sO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1vbmdvbGlhbiBbbW5dXG4vLyEgYXV0aG9yIDogSmF2a2hsYW50dWdzIE55YW1kb3JqIDogaHR0cHM6Ly9naXRodWIuY29tL2phdmtoYWFuajdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LQnIDogJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LTRi9C9JztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LXQutGD0L3QtCcgOiAnINGB0LXQutGD0L3QtNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LzQuNC90YPRgicgOiAnINC80LjQvdGD0YLRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGG0LDQsycgOiAnINGG0LDQs9C40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDTqdC006nRgCcgOiAnINOp0LTRgNC40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRgdCw0YAnIDogJyDRgdCw0YDRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINC20LjQuycgOiAnINC20LjQu9C40LnQvScpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbW4nLCB7XG4gICAgICAgIG1vbnRoczogJ9Cd0Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0KXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAX9CT0YPRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CU06nRgNOp0LLQtNKv0LPRjdGN0YAg0YHQsNGAX9Ci0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JfRg9GA0LPQsNC00YPQs9Cw0LDRgCDRgdCw0YBf0JTQvtC70LTRg9Cz0LDQsNGAINGB0LDRgF/QndCw0LnQvNC00YPQs9Cw0LDRgCDRgdCw0YBf0JXRgdC00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CQ0YDQstCw0L0g0L3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LLQsNC9INGF0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnMSDRgdCw0YBfMiDRgdCw0YBfMyDRgdCw0YBfNCDRgdCw0YBfNSDRgdCw0YBfNiDRgdCw0YBfNyDRgdCw0YBfOCDRgdCw0YBfOSDRgdCw0YBfMTAg0YHQsNGAXzExINGB0LDRgF8xMiDRgdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQndGP0Lxf0JTQsNCyX9Cc0Y/Qs1/Qm9GF0LBf0J/Sr9GAX9CR0LDQsF/QkdGP0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0J3Rj1/QlNCwX9Cc0Y9f0JvRhV/Qn9KvX9CR0LBf0JHRjycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkg0L7QvdGLIE1NTU3Ri9C9IEQnLFxuICAgICAgICAgICAgTExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/SrtOofNKu0KUvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfSrtClJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku06gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku0KUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vTqNC906nTqdC006nRgF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQnNCw0YDQs9Cw0LDRiF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0JjRgNGN0YVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vTqNGH0LjQs9C006nRgF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb06jQvdCz06nRgNGB06nQvV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINC00LDRgNCw0LAnLFxuICAgICAgICAgICAgcGFzdDogJyVzINOp0LzQvdOpJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9INOp0LTTqdGALyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINOp0LTTqdGAJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1uO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hcmF0aGkgW21yXVxuLy8hIGF1dGhvciA6IEhhcnNoYWQgS2FsZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYWxlaHZcbi8vISBhdXRob3IgOiBWaXZlayBBdGhhbHllIDogaHR0cHM6Ly9naXRodWIuY29tL3ZuYXRoYWx5ZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgpacnLFxuICAgICAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgICAgIDQ6ICfgpaonLFxuICAgICAgICAgICAgNTogJ+ClqycsXG4gICAgICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgICAgIDc6ICfgpa0nLFxuICAgICAgICAgICAgODogJ+ClricsXG4gICAgICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgICAgIDA6ICfgpaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICAgICAn4KWmJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lTXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSAnJztcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSmJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS44KWH4KSV4KSC4KSmJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJUg4KSu4KS/4KSo4KS/4KSfJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS/4KSo4KS/4KSf4KWHJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJUg4KSk4KS+4KS4JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSk4KS+4KS4JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJUg4KSm4KS/4KS14KS4JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSm4KS/4KS14KS4JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS54KS/4KSo4KWHJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJUg4KS14KSw4KWN4KS3JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS14KSw4KWN4KS34KWHJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpuCkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpuCkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkruCkv+CkqOCkv+Ckn+Ckvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+CkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkpOCkvuCkuOCkvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpOCkvuCkuOCkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkpuCkv+CkteCkuOCkvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuOCkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkruCkueCkv+CkqOCljeCkr+Ckvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOCljeCkr+CkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSV4KS+IOCkteCksOCljeCkt+Ckvic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+CkvuCkgic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgbXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcicsIHtcbiAgICAgICAgbW9udGhzOiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KS/4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KWIX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJouX+Ckj+CkquCljeCksOCkvy5f4KSu4KWHLl/gpJzgpYLgpKguX+CknOClgeCksuCliC5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLPgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLNf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CkieCkpuCljeCkr+Ckvl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCkvuCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSu4KS+4KSX4KWA4KSyXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4KSu4KSn4KWN4KSv4KWHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+CkquClguCksOCljeCkteClgCcsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpKrgpLngpL7gpJ/gpYd84KS44KSV4KS+4KSz4KWAfOCkpuClgeCkquCkvuCksOClgHzgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYB84KSw4KS+4KSk4KWN4KSw4KWALyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSq4KS54KS+4KSf4KWHJyB8fCBtZXJpZGllbSA9PT0gJ+CkuOCkleCkvuCks+ClgCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpKbgpYHgpKrgpL7gpLDgpYAnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpY3gpLDgpYAnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKrgpLngpL7gpJ/gpYcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWB4KSq4KS+4KSw4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCljeCksOClgCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXMtbXldXG4vLyEgbm90ZSA6IERFUFJFQ0FURUQsIHRoZSBjb3JyZWN0IG9uZSBpcyBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtc015ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXMtbXknLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWhfSXNfU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAncGV0YW5nJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndGVuZ2FoYXJpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Vzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVwYXMgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFsYW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtc015O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5IFttc11cbi8vISBhdXRob3IgOiBXZWxkYW4gSmFtaWxpIDogaHR0cHM6Ly9naXRodWIuY29tL3dlbGRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1zID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXMnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWhfSXNfU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAncGV0YW5nJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndGVuZ2FoYXJpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Vzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVwYXMgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFsYW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWx0ZXNlIChNYWx0YSkgW210XVxuLy8hIGF1dGhvciA6IEFsZXNzYW5kcm8gTWFydWNjaWEgOiBodHRwczovL2dpdGh1Yi5jb20vYWxlc21hXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtdCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFubmFyX0ZyYXJfTWFyenVfQXByaWxfTWVqanVfxKB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGnEi2VtYnJ1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxIsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0lsLcSmYWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmfEp2FfSWwtxKZhbWlzX0lsLcSgaW1nxKdhX0lzLVNpYnQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ8SmYWRfVG5lX1RsaV9FcmJfxKZhbV/EoGltX1NpYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfEpmFfVG5fVGxfRXJfxKZhX8SgaV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJbGx1bSBmaWwtXUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbR8SnYWRhIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtmaWwtXUxUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWwtYmllcmHEpyBmaWwtXUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGkgZ8SnYWRkYV0gW2ZpbC1dTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdm4oCZICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBpbHUnLFxuICAgICAgICAgICAgczogJ2Z0aXQgc2Vrb25kaScsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGknLFxuICAgICAgICAgICAgbTogJ21pbnV0YScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0aScsXG4gICAgICAgICAgICBoOiAnc2llZ8SnYScsXG4gICAgICAgICAgICBoaDogJyVkIHNpZWfEp2F0JyxcbiAgICAgICAgICAgIGQ6ICfEoXVybmF0YScsXG4gICAgICAgICAgICBkZDogJyVkIMShcmFuZXQnLFxuICAgICAgICAgICAgTTogJ3hhaGFyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgeGh1cicsXG4gICAgICAgICAgICB5OiAnc2VuYScsXG4gICAgICAgICAgICB5eTogJyVkIHNuaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQnVybWVzZSBbbXldXG4vLyEgYXV0aG9yIDogU3F1YXIgdGVhbSwgbXlzcXVhci5jb21cbi8vISBhdXRob3IgOiBEYXZpZCBSb3NzZWxsYXQgOiBodHRwczovL2dpdGh1Yi5jb20vZ2hvbGFkclxuLy8hIGF1dGhvciA6IFRpbiBBdW5nIExpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS90aGFueWF3emlubWluXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+GBgScsXG4gICAgICAgICAgICAyOiAn4YGCJyxcbiAgICAgICAgICAgIDM6ICfhgYMnLFxuICAgICAgICAgICAgNDogJ+GBhCcsXG4gICAgICAgICAgICA1OiAn4YGFJyxcbiAgICAgICAgICAgIDY6ICfhgYYnLFxuICAgICAgICAgICAgNzogJ+GBhycsXG4gICAgICAgICAgICA4OiAn4YGIJyxcbiAgICAgICAgICAgIDk6ICfhgYknLFxuICAgICAgICAgICAgMDogJ+GBgCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfhgYEnOiAnMScsXG4gICAgICAgICAgICAn4YGCJzogJzInLFxuICAgICAgICAgICAgJ+GBgyc6ICczJyxcbiAgICAgICAgICAgICfhgYQnOiAnNCcsXG4gICAgICAgICAgICAn4YGFJzogJzUnLFxuICAgICAgICAgICAgJ+GBhic6ICc2JyxcbiAgICAgICAgICAgICfhgYcnOiAnNycsXG4gICAgICAgICAgICAn4YGIJzogJzgnLFxuICAgICAgICAgICAgJ+GBiSc6ICc5JyxcbiAgICAgICAgICAgICfhgYAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgbXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdteScsIHtcbiAgICAgICAgbW9udGhzOiAn4YCH4YCU4YC64YCU4YCd4YCr4YCb4YCuX+GAluGAseGAluGAseGArOGAuuGAneGAq+GAm+GArl/hgJnhgJDhgLpf4YCn4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCH4YCw4YCc4YCt4YCv4YCE4YC6X+GAnuGAvOGAguGAr+GAkOGAul/hgIXhgIDhgLrhgJDhgIThgLrhgJjhgKxf4YCh4YCx4YCs4YCA4YC64YCQ4YCt4YCv4YCY4YCsX+GAlOGAreGAr+GAneGAhOGAuuGAmOGArF/hgJLhgK7hgIfhgIThgLrhgJjhgKwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YCH4YCU4YC6X+GAluGAsV/hgJnhgJDhgLpf4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCc4YCt4YCv4YCE4YC6X+GAnuGAvF/hgIXhgIDhgLpf4YCh4YCx4YCs4YCA4YC6X+GAlOGAreGAr1/hgJLhgK4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn4YCQ4YCU4YCE4YC64YC54YCC4YCU4YC94YCxX+GAkOGAlOGAhOGAuuGAueGAnOGArF/hgKHhgIThgLrhgLnhgILhgKtf4YCX4YCv4YCS4YC54YCT4YCf4YCw4YC4X+GAgOGAvOGArOGAnuGAleGAkOGAseGAuF/hgJ7hgLHhgKzhgIDhgLzhgKxf4YCF4YCU4YCxJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+GAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsScuc3BsaXQoJ18nKSxcblxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4YCa4YCU4YCxLl0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhgJnhgJThgIDhgLrhgJbhgLzhgJThgLpdIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+GAmeGAlOGAsS7hgIBdIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+GAleGAvOGAruGAuOGAgeGAsuGAt+GAnuGAseGArF0gZGRkZCBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+GAnOGArOGAmeGAiuGAuuGAtyAlcyDhgJnhgL7hgKwnLFxuICAgICAgICAgICAgcGFzdDogJ+GAnOGAveGAlOGAuuGAgeGAsuGAt+GAnuGAseGArCAlcyDhgIAnLFxuICAgICAgICAgICAgczogJ+GAheGAgOGAueGAgOGAlOGAui7hgKHhgJThgIrhgLrhgLjhgIThgJrhgLonLFxuICAgICAgICAgICAgc3M6ICclZCDhgIXhgIDhgLnhgIDhgJThgLfhgLonLFxuICAgICAgICAgICAgbTogJ+GAkOGAheGAuuGAmeGAreGAlOGAheGAuicsXG4gICAgICAgICAgICBtbTogJyVkIOGAmeGAreGAlOGAheGAuicsXG4gICAgICAgICAgICBoOiAn4YCQ4YCF4YC64YCU4YCs4YCb4YCuJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4YCU4YCs4YCb4YCuJyxcbiAgICAgICAgICAgIGQ6ICfhgJDhgIXhgLrhgJvhgIDhgLonLFxuICAgICAgICAgICAgZGQ6ICclZCDhgJvhgIDhgLonLFxuICAgICAgICAgICAgTTogJ+GAkOGAheGAuuGAnCcsXG4gICAgICAgICAgICBNTTogJyVkIOGAnCcsXG4gICAgICAgICAgICB5OiAn4YCQ4YCF4YC64YCU4YC+4YCF4YC6JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4YCU4YC+4YCF4YC6JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+GBgeGBguGBg+GBhOGBheGBhuGBh+GBiOGBieGBgF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG15O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5vcndlZ2lhbiBCb2ttw6VsIFtuYl1cbi8vISBhdXRob3JzIDogRXNwZW4gSG92bGFuZHNkYWwgOiBodHRwczovL2dpdGh1Yi5jb20vcmV4eGFyc1xuLy8hICAgICAgICAgICBTaWd1cmQgR2FydG1hbm4gOiBodHRwczovL2dpdGh1Yi5jb20vc2lndXJkZ2Fcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbmIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCduYicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc8O4Ll9tYS5fdGkuX29uLl90by5fZnIuX2zDuC4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O4X21hX3RpX29uX3RvX2ZyX2zDuCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2kgbW9yZ2VuIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaSBnw6VyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZm9ycmlnZV0gZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzOiAnbm9lbiBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdldHQgbWludXR0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZXInLFxuICAgICAgICAgICAgdzogJ2VuIHVrZScsXG4gICAgICAgICAgICB3dzogJyVkIHVrZXInLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5lZGVyJyxcbiAgICAgICAgICAgIHk6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuYjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOZXBhbGVzZSBbbmVdXG4vLyEgYXV0aG9yIDogc3V2YXNoIDogaHR0cHM6Ly9naXRodWIuY29tL3N1dmFzaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgpacnLFxuICAgICAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgICAgIDQ6ICfgpaonLFxuICAgICAgICAgICAgNTogJ+ClqycsXG4gICAgICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgICAgIDc6ICfgpa0nLFxuICAgICAgICAgICAgODogJ+ClricsXG4gICAgICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgICAgIDA6ICfgpaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICAgICAn4KWmJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIG5lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CknOCkqOCkteCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkv+Cksl/gpK7gpIhf4KSc4KWB4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLfgpY3gpJ9f4KS44KWH4KSq4KWN4KSf4KWH4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpK3gpYfgpK7gpY3gpKzgpLBf4KSh4KS/4KS44KWH4KSu4KWN4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpKguX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkvy5f4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIguX+CkheCkly5f4KS44KWH4KSq4KWN4KSfLl/gpIXgpJXgpY3gpJ/gpYsuX+CkqOCli+CkreClhy5f4KSh4KS/4KS44KWHLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CkhuCkh+CkpOCkrOCkvuCksF/gpLjgpYvgpK7gpKzgpL7gpLBf4KSu4KSZ4KWN4KSX4KSy4KSs4KS+4KSwX+CkrOClgeCkp+CkrOCkvuCksF/gpKzgpL/gpLngpL/gpKzgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KSs4KS+4KSwX+CktuCkqOCkv+CkrOCkvuCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CkhuCkh+CkpC5f4KS44KWL4KSuLl/gpK7gpJngpY3gpJfgpLIuX+CkrOClgeCkpy5f4KSs4KS/4KS54KS/Ll/gpLbgpYHgpJXgpY3gpLAuX+CktuCkqOCkvy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUzogJ0HgpJXgpYsgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KS/fOCkrOCkv+CkueCkvuCkqHzgpKbgpL/gpIngpIHgpLjgpYt84KS44KS+4KSB4KSdLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KS/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSs4KS/4KS54KS+4KSoJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCkv+CkieCkgeCkuOCliycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KS+4KSB4KSdJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSs4KS/4KS54KS+4KSoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpL/gpIngpIHgpLjgpYsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkgeCknSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CkreCli+CksuCkv10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4KSG4KSJ4KSB4KSm4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KS54KS/4KSc4KWLXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpJfgpI/gpJXgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+CkruCkvicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KSF4KSX4KS+4KSh4KS/JyxcbiAgICAgICAgICAgIHM6ICfgpJXgpYfgpLngpYAg4KSV4KWN4KS34KSjJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4KS44KWH4KSV4KWH4KSj4KWN4KShJyxcbiAgICAgICAgICAgIG06ICfgpI/gpJUg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIGg6ICfgpI/gpJUg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGQ6ICfgpI/gpJUg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE06ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIHk6ICfgpI/gpJUg4KSs4KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4KSs4KSw4KWN4KS3JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5lO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IER1dGNoIChCZWxnaXVtKSBbbmwtYmVdXG4vLyEgYXV0aG9yIDogSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3Jpc3JvbGluZ1xuLy8hIGF1dGhvciA6IEphY29iIE1pZGRhZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWRkYWdqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9XG4gICAgICAgICAgICAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9XG4gICAgICAgICAgICAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW4vaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hYXJ0fG1ydC4/JC9pLFxuICAgICAgICAgICAgL15hcHIvaSxcbiAgICAgICAgICAgIC9ebWVpJC9pLFxuICAgICAgICAgICAgL15qdW5baS5dPyQvaSxcbiAgICAgICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmF1Zy9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2t0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kZWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pO1xuXG4gICAgdmFyIG5sQmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubC1iZScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnem9fbWFfZGlfd29fZG9fdnJfemEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3ZhbmRhYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dpc3RlcmVuIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thZmdlbG9wZW5dIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgczogJ2VlbiBwYWFyIHNlY29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICAgICAgbTogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgICAgICBoaDogJyVkIHV1cicsXG4gICAgICAgICAgICBkOiAnw6nDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTTogJ8Opw6luIG1hYW5kJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFhbmRlbicsXG4gICAgICAgICAgICB5OiAnw6nDqW4gamFhcicsXG4gICAgICAgICAgICB5eTogJyVkIGphYXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmxCZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEdXRjaCBbbmxdXG4vLyEgYXV0aG9yIDogSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3Jpc3JvbGluZ1xuLy8hIGF1dGhvciA6IEphY29iIE1pZGRhZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWRkYWdqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9XG4gICAgICAgICAgICAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9XG4gICAgICAgICAgICAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW4vaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hYXJ0fG1ydC4/JC9pLFxuICAgICAgICAgICAgL15hcHIvaSxcbiAgICAgICAgICAgIC9ebWVpJC9pLFxuICAgICAgICAgICAgL15qdW5baS5dPyQvaSxcbiAgICAgICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmF1Zy9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2t0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kZWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pO1xuXG4gICAgdmFyIG5sID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmwnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICd6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvdmVyICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBnZWxlZGVuJyxcbiAgICAgICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVuJyxcbiAgICAgICAgICAgIG06ICfDqcOpbiBtaW51dXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICfDqcOpbiB1dXInLFxuICAgICAgICAgICAgaGg6ICclZCB1dXInLFxuICAgICAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIHc6ICfDqcOpbiB3ZWVrJyxcbiAgICAgICAgICAgIHd3OiAnJWQgd2VrZW4nLFxuICAgICAgICAgICAgTTogJ8Opw6luIG1hYW5kJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFhbmRlbicsXG4gICAgICAgICAgICB5OiAnw6nDqW4gamFhcicsXG4gICAgICAgICAgICB5eTogJyVkIGphYXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTnlub3JzayBbbm5dXG4vLyEgYXV0aG9ycyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWNodXdpbmRcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbm4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdS5fbcOlLl90eS5fb24uX3RvLl9mci5fbGF1Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tw6VfdHlfb25fdG9fZnJfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSSBkYWcga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSSBnw6VyIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGFuJyxcbiAgICAgICAgICAgIHM6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmQnLFxuICAgICAgICAgICAgbTogJ2VpdCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHQnLFxuICAgICAgICAgICAgaDogJ2VpbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICB3OiAnZWkgdmVrZScsXG4gICAgICAgICAgICB3dzogJyVkIHZla2VyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2VpdCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5uO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlIFtvYy1sbmNdXG4vLyEgYXV0aG9yIDogUXVlbnRpbiBQQUfDiFMgOiBodHRwczovL2dpdGh1Yi5jb20vUXVlbnR5MzFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBvY0xuYyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ29jLWxuYycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdnZW5pw6hyX2ZlYnJpw6hyX21hcsOnX2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGUgZ2VuacOocl9kZSBmZWJyacOocl9kZSBtYXLDp19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0w7JicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmVcIi5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXHMpK01NTU0vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpX2p1bmhfanVsaC5fYWdvLl9zZXQuX29jdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbcOoY3Jlc19kaWrDsnVzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RnLl9kbC5fZG0uX2RjLl9kai5fZHYuX2RzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkZ19kbF9kbV9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t1w6hpIGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZGVtYW4gYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2nDqHIgYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtwYXNzYXQgYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IFwiZCdhcXXDrSAlc1wiLFxuICAgICAgICAgICAgcGFzdDogJ2ZhICVzJyxcbiAgICAgICAgICAgIHM6ICd1bmFzIHNlZ29uZGFzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vnb25kYXMnLFxuICAgICAgICAgICAgbTogJ3VuYSBtaW51dGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGFzJyxcbiAgICAgICAgICAgIGg6ICd1bmEgb3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAndW4gam9ybicsXG4gICAgICAgICAgICBkZDogJyVkIGpvcm5zJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0ocnxufHR8w6h8YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIG51bWJlciA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gNFxuICAgICAgICAgICAgICAgICAgICA/ICd0J1xuICAgICAgICAgICAgICAgICAgICA6ICfDqCc7XG4gICAgICAgICAgICBpZiAocGVyaW9kID09PSAndycgfHwgcGVyaW9kID09PSAnVycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9jTG5jO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFB1bmphYmkgKEluZGlhKSBbcGEtaW5dXG4vLyEgYXV0aG9yIDogSGFycHJlZXQgU2luZ2ggOiBodHRwczovL2dpdGh1Yi5jb20vaGFycHJlZXRraGFsc2FndGJpdFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgqacnLFxuICAgICAgICAgICAgMjogJ+CpqCcsXG4gICAgICAgICAgICAzOiAn4KmpJyxcbiAgICAgICAgICAgIDQ6ICfgqaonLFxuICAgICAgICAgICAgNTogJ+CpqycsXG4gICAgICAgICAgICA2OiAn4KmsJyxcbiAgICAgICAgICAgIDc6ICfgqa0nLFxuICAgICAgICAgICAgODogJ+CpricsXG4gICAgICAgICAgICA5OiAn4KmvJyxcbiAgICAgICAgICAgIDA6ICfgqaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KmnJzogJzEnLFxuICAgICAgICAgICAgJ+CpqCc6ICcyJyxcbiAgICAgICAgICAgICfgqaknOiAnMycsXG4gICAgICAgICAgICAn4KmqJzogJzQnLFxuICAgICAgICAgICAgJ+Cpqyc6ICc1JyxcbiAgICAgICAgICAgICfgqawnOiAnNicsXG4gICAgICAgICAgICAn4KmtJzogJzcnLFxuICAgICAgICAgICAgJ+Cpric6ICc4JyxcbiAgICAgICAgICAgICfgqa8nOiAnOScsXG4gICAgICAgICAgICAn4KmmJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIHBhSW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwYS1pbicsIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG1vbnRocyBuYW1lIGFzIHBlciBOYW5ha3NoYWhpIENhbGVuZGFyIGJ1dCB0aGV5IGFyZSBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBQdW5qYWJpLlxuICAgICAgICBtb250aHM6ICfgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgqJDgqKTgqLXgqL7gqLBf4Ki44KmL4Kiu4Ki14Ki+4KiwX+CoruCpsOCol+CosuCoteCovuCosF/gqKzgqYHgqKfgqLXgqL7gqLBf4Ki14KmA4Kiw4Ki14Ki+4KiwX+CouOCovOCpgeCpseColeCosOCoteCovuCosF/gqLjgqLzgqKjgqYDgqJrgqLDgqLXgqL7gqLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqIXgqJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KiV4KiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgqIXgqJfgqLLgqL5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KiV4KiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqKrgqL/gqJvgqLLgqYddIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Ki14Ki/4Kmx4KiaJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgqKrgqL/gqJvgqLLgqYcnLFxuICAgICAgICAgICAgczogJ+ColeCpgeConSDgqLjgqJXgqL/gqbDgqJ8nLFxuICAgICAgICAgICAgc3M6ICclZCDgqLjgqJXgqL/gqbDgqJ8nLFxuICAgICAgICAgICAgbTogJ+Coh+ColSDgqK7gqL/gqbDgqJ8nLFxuICAgICAgICAgICAgbW06ICclZCDgqK7gqL/gqbDgqJ8nLFxuICAgICAgICAgICAgaDogJ+Coh+CpseColSDgqJjgqbDgqJ/gqL4nLFxuICAgICAgICAgICAgaGg6ICclZCDgqJjgqbDgqJ/gqYcnLFxuICAgICAgICAgICAgZDogJ+Coh+CpseColSDgqKbgqL/gqKgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgqKbgqL/gqKgnLFxuICAgICAgICAgICAgTTogJ+Coh+CpseColSDgqK7gqLngqYDgqKjgqL4nLFxuICAgICAgICAgICAgTU06ICclZCDgqK7gqLngqYDgqKjgqYcnLFxuICAgICAgICAgICAgeTogJ+Coh+CpseColSDgqLjgqL7gqLInLFxuICAgICAgICAgICAgeXk6ICclZCDgqLjgqL7gqLInLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kmn4Kmo4Kmp4Kmq4Kmr4Kms4Kmt4Kmu4Kmv4KmmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBQdW5qYWJpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAgICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gqLDgqL7gqKR84Ki44Ki14KmH4KiwfOCopuCpgeCoquCoueCov+CosHzgqLjgqLzgqL7gqK4vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgqLDgqL7gqKQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqLjgqLXgqYfgqLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kim4KmB4Kiq4Ki54Ki/4KiwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqLjgqLzgqL7gqK4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kiw4Ki+4KikJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLXgqYfgqLAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CopuCpgeCoquCoueCov+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ki44Ki84Ki+4KiuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFJbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb2xpc2ggW3BsXVxuLy8hIGF1dGhvciA6IFJhZmFsIEhpcnN6IDogaHR0cHM6Ly9naXRodWIuY29tL2V2b0xcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNOb21pbmF0aXZlID1cbiAgICAgICAgICAgICdzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU3ViamVjdGl2ZSA9XG4gICAgICAgICAgICAnc3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplxZtuaWFfcGHFumR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ec3R5L2ksXG4gICAgICAgICAgICAvXmx1dC9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9ea3dpL2ksXG4gICAgICAgICAgICAvXm1hai9pLFxuICAgICAgICAgICAgL15jemUvaSxcbiAgICAgICAgICAgIC9ebGlwL2ksXG4gICAgICAgICAgICAvXnNpZS9pLFxuICAgICAgICAgICAgL153cnovaSxcbiAgICAgICAgICAgIC9ecGHFui9pLFxuICAgICAgICAgICAgL15saXMvaSxcbiAgICAgICAgICAgIC9eZ3J1L2ksXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gJSAxMCA8IDUgJiYgbiAlIDEwID4gMSAmJiB+fihuIC8gMTApICUgMTAgIT09IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0xJknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZ29kemluYScgOiAnZ29kemluxJknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZ29kemlueScgOiAnZ29kemluJyk7XG4gICAgICAgICAgICBjYXNlICd3dyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICd0eWdvZG5pZScgOiAndHlnb2RuaScpO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWllc2nEhWNlJyA6ICdtaWVzacSZY3knKTtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2xhdGEnIDogJ2xhdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHBsID0gbW9tZW50LmRlZmluZUxvY2FsZSgncGwnLCB7XG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzTm9taW5hdGl2ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL0QgTU1NTS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1N1YmplY3RpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3N0eV9sdXRfbWFyX2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhxbpfbGlzX2dydScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnbmllZHppZWxhX3BvbmllZHppYcWCZWtfd3RvcmVrX8Wbcm9kYV9jendhcnRla19wacSFdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25kel9wb25fd3RfxZtyX2N6d19wdF9zb2InLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTmRfUG5fV3RfxZpyX0N6X1B0X1NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0R6acWbIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSnV0cm8gb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBuaWVkemllbMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXZSB3dG9yZWsgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgxZtyb2TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBzb2JvdMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV10gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1djem9yYWogb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBuaWVkemllbMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSDFm3JvZMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCeV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0ZW11JyxcbiAgICAgICAgICAgIHM6ICdraWxrYSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJzEgZHppZcWEJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZG5pJyxcbiAgICAgICAgICAgIHc6ICd0eWR6aWXFhCcsXG4gICAgICAgICAgICB3dzogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21pZXNpxIVjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAncm9rJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9ydHVndWVzZSAoQnJhemlsKSBbcHQtYnJdXG4vLyEgYXV0aG9yIDogQ2FpbyBSaWJlaXJvIFBlcmVpcmEgOiBodHRwczovL2dpdGh1Yi5jb20vY2Fpby1yaWJlaXJvLXBlcmVpcmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwdEJyID0gbW9tZW50LmRlZmluZUxvY2FsZSgncHQtYnInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc8OhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb18ywqpfM8KqXzTCql81wqpfNsKqX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hvamUgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0FtYW5ow6Mgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tPbnRlbSDDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgPT09IDAgfHwgdGhpcy5kYXkoKSA9PT0gNlxuICAgICAgICAgICAgICAgICAgICA/ICdbw5psdGltb10gZGRkZCBbw6BzXSBMVCcgLy8gU2F0dXJkYXkgKyBTdW5kYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQnOyAvLyBNb25kYXkgLSBGcmlkYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdow6EgJXMnLFxuICAgICAgICAgICAgczogJ3BvdWNvcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIE06ICd1bSBtw6pzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VtIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgaW52YWxpZERhdGU6ICdEYXRhIGludsOhbGlkYScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHRCcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb3J0dWd1ZXNlIFtwdF1cbi8vISBhdXRob3IgOiBKZWZmZXJzb24gOiBodHRwczovL2dpdGh1Yi5jb20vamFsZXg3OVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHB0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgncHQnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyw6dhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU8OhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEb18ywqpfM8KqXzTCql81wqpfNsKqX1PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hvamUgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0FtYW5ow6Mgw6BzXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tPbnRlbSDDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgPT09IDAgfHwgdGhpcy5kYXkoKSA9PT0gNlxuICAgICAgICAgICAgICAgICAgICA/ICdbw5psdGltb10gZGRkZCBbw6BzXSBMVCcgLy8gU2F0dXJkYXkgKyBTdW5kYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQnOyAvLyBNb25kYXkgLSBGcmlkYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdow6EgJXMnLFxuICAgICAgICAgICAgczogJ3NlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VtIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VtYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VtIGRpYScsXG4gICAgICAgICAgICBkZDogJyVkIGRpYXMnLFxuICAgICAgICAgICAgdzogJ3VtYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1bSBtw6pzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VtIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFJvbWFuaWFuIFtyb11cbi8vISBhdXRob3IgOiBWbGFkIEd1cmRpZ2EgOiBodHRwczovL2dpdGh1Yi5jb20vZ3VyZGlnYVxuLy8hIGF1dGhvciA6IFZhbGVudGluIEFnYWNoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdmFseVxuLy8hIGF1dGhvciA6IEVtYW51ZWwgQ2Vwb2kgOiBodHRwczovL2dpdGh1Yi5jb20vY2VwZW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICAgICBzczogJ3NlY3VuZGUnLFxuICAgICAgICAgICAgICAgIG1tOiAnbWludXRlJyxcbiAgICAgICAgICAgICAgICBoaDogJ29yZScsXG4gICAgICAgICAgICAgICAgZGQ6ICd6aWxlJyxcbiAgICAgICAgICAgICAgICB3dzogJ3PEg3B0xINtw6JuaScsXG4gICAgICAgICAgICAgICAgTU06ICdsdW5pJyxcbiAgICAgICAgICAgICAgICB5eTogJ2FuaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBpZiAobnVtYmVyICUgMTAwID49IDIwIHx8IChudW1iZXIgPj0gMTAwICYmIG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgZGUgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgc2VwYXJhdG9yICsgZm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIHJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgncm8nLCB7XG4gICAgICAgIG1vbnRoczogJ2lhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2lhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2R1bWluaWPEg19sdW5pX21hcsibaV9taWVyY3VyaV9qb2lfdmluZXJpX3PDom1ixIN0xIMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0R1X0x1X01hX01pX0pvX1ZpX1PDoicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2F6aSBsYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttw6JpbmUgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWVyaSBsYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZm9zdGFdIGRkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Blc3RlICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDrm4gdXJtxIMnLFxuICAgICAgICAgICAgczogJ2PDonRldmEgc2VjdW5kZScsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICdvIG9yxIMnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAnbyB6aScsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHc6ICdvIHPEg3B0xINtw6JuxIMnLFxuICAgICAgICAgICAgd3c6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAnbyBsdW7EgycsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFJ1c3NpYW4gW3J1XVxuLy8hIGF1dGhvciA6IFZpa3Rvcm1pbmF0b3IgOiBodHRwczovL2dpdGh1Yi5jb20vVmlrdG9ybWluYXRvclxuLy8hIGF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDog0JrQvtGA0LXQvdCx0LXRgNCzINCc0LDRgNC6IDogaHR0cHM6Ly9naXRodWIuY29tL3NvY2tldHBhaXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsF/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicgOiAn0LzQuNC90YPRgtGDX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGhoOiAn0YfQsNGBX9GH0LDRgdCwX9GH0LDRgdC+0LInLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90Y9f0LTQvdC10LknLFxuICAgICAgICAgICAgd3c6ICfQvdC10LTQtdC70Y9f0L3QtdC00LXQu9C4X9C90LXQtNC10LvRjCcsXG4gICAgICAgICAgICBNTTogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyJyxcbiAgICAgICAgICAgIHl5OiAn0LPQvtC0X9Cz0L7QtNCwX9C70LXRgicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LzQuNC90YPRgtCwJyA6ICfQvNC40L3Rg9GC0YMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAvXtGP0L3Qsi9pLFxuICAgICAgICAvXtGE0LXQsi9pLFxuICAgICAgICAvXtC80LDRgC9pLFxuICAgICAgICAvXtCw0L/RgC9pLFxuICAgICAgICAvXtC80LBb0LnRj10vaSxcbiAgICAgICAgL17QuNGO0L0vaSxcbiAgICAgICAgL17QuNGO0LsvaSxcbiAgICAgICAgL17QsNCy0LMvaSxcbiAgICAgICAgL17RgdC10L0vaSxcbiAgICAgICAgL17QvtC60YIvaSxcbiAgICAgICAgL17QvdC+0Y8vaSxcbiAgICAgICAgL17QtNC10LovaSxcbiAgICBdO1xuXG4gICAgLy8gaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvcnVsZXMvMTM5LXByb3AgOiDCpyAxMDNcbiAgICAvLyDQodC+0LrRgNCw0YnQtdC90LjRjyDQvNC10YHRj9GG0LXQsjogaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvYnVyby9zZWFyY2gtYW5zd2VyP3M9MjQyNjM3XG4gICAgLy8gQ0xEUiBkYXRhOiAgICAgICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvY2hhcnRzLzI4L3N1bW1hcnkvcnUuaHRtbCMxNzUzXG4gICAgdmFyIHJ1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgncnUnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IHtcbiAgICAgICAgICAgIC8vINC/0L4gQ0xEUiDQuNC80LXQvdC90L4gXCLQuNGO0LsuXCIg0LggXCLQuNGO0L0uXCIsINC90L4g0LrQsNC60L7QuSDRgdC80YvRgdC7INC80LXQvdGP0YLRjCDQsdGD0LrQstGDINC90LAg0YLQvtGH0LrRgz9cbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0Y/QvdCyLl/RhNC10LLRgC5f0LzQsNGA0YJf0LDQv9GALl/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbQsF/RgdGD0LHQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQktCyXSA/KD860L/RgNC+0YjQu9GD0Y580YHQu9C10LTRg9GO0YnRg9GOfNGN0YLRgyk/ID9dID9kZGRkLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4LCDQv9C+INGC0YDQuCDQsdGD0LrQstGLLCDQtNC70Y8g0L3QtdC60L7RgtC+0YDRi9GFLCDQv9C+IDQg0LHRg9C60LLRiywg0YHQvtC60YDQsNGJ0LXQvdC40Y8g0YEg0YLQvtGH0LrQvtC5INC4INCx0LXQtyDRgtC+0YfQutC4XG4gICAgICAgIG1vbnRoc1JlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0LrQvtC/0LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+XG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6XG4gICAgICAgICAgICAvXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4XG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRj9GMXXzRhNC10LLRgNCw0Ltb0Y/RjF180LzQsNGA0YLQsD980LDQv9GA0LXQu1vRj9GMXXzQvNCwW9GP0LldfNC40Y7QvVvRj9GMXXzQuNGO0Ltb0Y/RjF180LDQstCz0YPRgdGC0LA/fNGB0LXQvdGC0Y/QsdGAW9GP0YxdfNC+0LrRgtGP0LHRgFvRj9GMXXzQvdC+0Y/QsdGAW9GP0YxdfNC00LXQutCw0LHRgFvRj9GMXSkvaSxcblxuICAgICAgICAvLyDQktGL0YDQsNC20LXQvdC40LUsINC60L7RgtC+0YDQvtC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0L7Qu9GM0LrQviDRgdC+0LrRgNCw0YnRkdC90L3Ri9C8INGE0L7RgNC80LDQvFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCyXFwufNGE0LXQstGAP1xcLnzQvNCw0YBb0YIuXXzQsNC/0YBcXC580LzQsFvRj9C5XXzQuNGO0L1b0YzRjy5dfNC40Y7Qu1vRjNGPLl180LDQstCzXFwufNGB0LXQvdGCP1xcLnzQvtC60YJcXC580L3QvtGP0LE/XFwufNC00LXQulxcLikvaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHQtdCz0L7QtNC90Y8sINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDQstGC0YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LXQtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidGD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70YvQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0YfQtdGA0LXQtyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0L3QsNC30LDQtCcsXG4gICAgICAgICAgICBzOiAn0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAn0L3QtdC00LXQu9GPJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Lh80YPRgtGA0LB80LTQvdGPfNCy0LXRh9C10YDQsC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LXRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YPRgtGA0LAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LXRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+fNGPKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Rjyc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJ1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmRoaSBbc2RdXG4vLyEgYXV0aG9yIDogTmFyYWluIFNhZ2FyIDogaHR0cHM6Ly9naXRodWIuY29tL25hcmFpbnNhZ2FyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2YbZiNix2YonLFxuICAgICAgICAgICAgJ9mB2YrYqNix2YjYsdmKJyxcbiAgICAgICAgICAgICfZhdin2LHahicsXG4gICAgICAgICAgICAn2KfZvtix2YrZhCcsXG4gICAgICAgICAgICAn2YXYptmKJyxcbiAgICAgICAgICAgICfYrNmI2YYnLFxuICAgICAgICAgICAgJ9is2YjZhNin2KHZkCcsXG4gICAgICAgICAgICAn2KLar9iz2b0nLFxuICAgICAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgICAgICfYotqq2b3ZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9qK2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYotqG2LEnLCAn2LPZiNmF2LEnLCAn2Kfasdin2LHZiCcsICfYp9ix2KjYuScsICfYrtmF2YrYsycsICfYrNmF2LknLCAn2ofZhtqH2LEnXTtcblxuICAgIHZhciBzZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2oRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LPagNin2rvZil0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9qq2KfZhNmH2YddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LLYsdmK2YQg2YfZgdiq2YpdIGRkZGQgW9iq2YpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2b7ZiNihJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYp9qzJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPZitqq2YbaiicsXG4gICAgICAgICAgICBzczogJyVkINiz2YraqtmG2oonLFxuICAgICAgICAgICAgbTogJ9mH2qog2YXZhtm9JyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZhtm9JyxcbiAgICAgICAgICAgIGg6ICfZh9qqINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2qrZhNin2qonLFxuICAgICAgICAgICAgZDogJ9mH2qog2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBkZDogJyVkINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgTTogJ9mH2qog2YXZh9mK2YbZiCcsXG4gICAgICAgICAgICBNTTogJyVkINmF2YfZitmG2KcnLFxuICAgICAgICAgICAgeTogJ9mH2qog2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2Q7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTm9ydGhlcm4gU2FtaSBbc2VdXG4vLyEgYXV0aG9ycyA6IELDpXJkIFJvbHN0YWQgSGVucmlrc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL2thcmFtZWxsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc2UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZScsIHtcbiAgICAgICAgbW9udGhzOiAnb8SRxJFhamFnZW3DoW5udV9ndW92dmFtw6FubnVfbmp1a8SNYW3DoW5udV9jdW/Fi29tw6FubnVfbWllc3NlbcOhbm51X2dlYXNzZW3DoW5udV9zdW9pZG5lbcOhbm51X2JvcmdlbcOhbm51X8SNYWvEjWFtw6FubnVfZ29sZ2dvdG3DoW5udV9za8OhYm1hbcOhbm51X2p1b3ZsYW3DoW5udScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnb8SRxJFqX2d1b3Zfbmp1a19jdW9fbWllc19nZWFzX3N1b2lfYm9yZ1/EjWFrxI1fZ29sZ19za8OhYl9qdW92Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzb3RuYWJlYWl2aV92dW9zc8OhcmdhX21hxYvFi2Viw6FyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sw6F2dmFyZGF0Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzb3RuX3Z1b3NfbWHFi19nYXNrX2R1b3JfYmVhcl9sw6F2Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3Nfdl9tX2dfZF9iX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELiBbYi5dIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3RuZSB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpaHR0aW4gdGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdGldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWt0ZSB0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbb3ZkZGl0XSBkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBnZWHFvmVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdtYcWLaXQgJXMnLFxuICAgICAgICAgICAgczogJ21vYWRkZSBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgbTogJ29rdGEgbWludWh0YScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnVodGF0JyxcbiAgICAgICAgICAgIGg6ICdva3RhIGRpaW1tdScsXG4gICAgICAgICAgICBoaDogJyVkIGRpaW1tdXQnLFxuICAgICAgICAgICAgZDogJ29rdGEgYmVhaXZpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgYmVhaXZ2aXQnLFxuICAgICAgICAgICAgTTogJ29rdGEgbcOhbm51JyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOhbnV0JyxcbiAgICAgICAgICAgIHk6ICdva3RhIGphaGtpJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFnaXQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmhhbGVzZSBbc2ldXG4vLyEgYXV0aG9yIDogU2FtcGF0aCBTaXRpbmFtYWx1d2EgOiBodHRwczovL2dpdGh1Yi5jb20vc2FtcGF0aHNyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIC8qanNoaW50IC1XMTAwKi9cbiAgICB2YXIgc2kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaScsIHtcbiAgICAgICAgbW9udGhzOiAn4Lai4Lax4LeA4LeP4La74LeSX+C2tOC3meC2tuC2u+C3gOC3j+C2u+C3kl/gtrjgt4/gtrvgt4rgtq3gt5Rf4LaF4La04LeK4oCN4La74Lea4La94LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3neC3g+C3iuC2reC3lF/gt4Pgt5DgtrTgt4rgtq3gt5Dgtrjgt4rgtrbgtrvgt4pf4LaU4Laa4LeK4Lat4Led4La24La74LeKX+C2seC3nOC3gOC3kOC2uOC3iuC2tuC2u+C3il/gtq/gt5ngt4Pgt5Dgtrjgt4rgtrbgtrvgt4onLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Lai4LaxX+C2tOC3meC2tl/gtrjgt4/gtrvgt4pf4LaF4La04LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3nV/gt4Pgt5DgtrTgt4pf4LaU4Laa4LeKX+C2seC3nOC3gOC3kF/gtq/gt5ngt4Pgt5AnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C2ieC2u+C3kuC2r+C3j1/gt4PgtrPgt5Tgtq/gt49f4LaF4Laf4LeE4La74LeU4LeA4LeP4Lav4LePX+C2tuC2r+C3j+C2r+C3j1/gtrbgt4rigI3gtrvgt4Tgt4Pgt4rgtrTgtq3gt5LgtrHgt4rgtq/gt49f4LeD4LeS4Laa4LeU4La74LeP4Lav4LePX+C3g+C3meC2seC3g+C3lOC2u+C3j+C2r+C3jycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LaJ4La74LeSX+C3g+C2s+C3lF/gtoXgtp9f4La24Lav4LePX+C2tuC3iuKAjeC2u+C3hF/gt4Pgt5Lgtprgt5Rf4LeD4LeZ4LaxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C2iV/gt4Nf4LaFX+C2tl/gtrbgt4rigI3gtrtf4LeD4LeSX+C3g+C3mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdhIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnYSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBNTU1NIEQnLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBNTU1NIEQsIGEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWSBNTU1NIEQgW+C3gOC3kOC2seC3kl0gZGRkZCwgYSBoOm1tOnNzJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LaF4LavXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LeE4LeZ4LanXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LaK4La64LeaXSBMVFvgtqddJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C2tOC3g+C3lOC2nOC3kuC2ul0gZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgtprgt5LgtrHgt4onLFxuICAgICAgICAgICAgcGFzdDogJyVz4Laa4LanIOC2tOC3meC2uycsXG4gICAgICAgICAgICBzOiAn4Lat4Lat4LeK4La04La7IOC2muC3kuC3hOC3kuC2tOC2uicsXG4gICAgICAgICAgICBzczogJ+C2reC2reC3iuC2tOC2uyAlZCcsXG4gICAgICAgICAgICBtOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAJyxcbiAgICAgICAgICAgIG1tOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUICVkJyxcbiAgICAgICAgICAgIGg6ICfgtrTgt5DgtronLFxuICAgICAgICAgICAgaGg6ICfgtrTgt5DgtrogJWQnLFxuICAgICAgICAgICAgZDogJ+C2r+C3kuC2seC2uicsXG4gICAgICAgICAgICBkZDogJ+C2r+C3kuC2sSAlZCcsXG4gICAgICAgICAgICBNOiAn4La44LeP4LeD4La6JyxcbiAgICAgICAgICAgIE1NOiAn4La44LeP4LeDICVkJyxcbiAgICAgICAgICAgIHk6ICfgt4Dgt4PgtrsnLFxuICAgICAgICAgICAgeXk6ICfgt4Dgt4PgtrsgJWQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g4LeA4LeQ4Lax4LeSLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg4LeA4LeQ4Lax4LeSJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C2tOC3meC2uyDgt4Dgtrvgt5R84La04LeD4LeKIOC3gOC2u+C3lHzgtrTgt5ku4LeAfOC2tC7gt4AuLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfgtrQu4LeALicgfHwgaW5wdXQgPT09ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrQu4LeALicgOiAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tOC3mS7gt4AuJyA6ICfgtrTgt5ngtrsg4LeA4La74LeUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92YWsgW3NrXVxuLy8hIGF1dGhvciA6IE1hcnRpbiBNaW5rYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rMnNcbi8vISBiYXNlZCBvbiB3b3JrIG9mIHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID1cbiAgICAgICAgICAgICdqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2phbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuID4gMSAmJiBuIDwgNTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla8O6bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzogLy8gOSBzZWNvbmRzIC8gaW4gOSBzZWNvbmRzIC8gOSBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2Vrw7puZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtJzogLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbsO6dGEnIDogaXNGdXR1cmUgPyAnbWluw7p0dScgOiAnbWluw7p0b3UnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW7DunR5JyA6ICdtaW7DunQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21pbsO6dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaCc6IC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2TDrW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlxYgnIDogJ2TFiG9tJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG5pJyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkxYhhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ00nOiAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzaWFjJyA6ICdtZXNpYWNvbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21lc2lhY2UnIDogJ21lc2lhY292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtZXNpYWNtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdyb2snIDogJ3Jva29tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAncm9reScgOiAncm9rb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Jva21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2sgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaycsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlxL5hX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfxaF0dnJ0b2tfcGlhdG9rX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6YWp0cmEgb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdm8gxaF0dnJ0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHBpYXRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlZCAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2s7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2xvdmVuaWFuIFtzbF1cbi8vISBhdXRob3IgOiBSb2JlcnQgU2Vkb3bFoWVrIDogaHR0cHM6Ly9naXRodWIuY29tL3NlZG92c2VrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPyAnbmVrYWogc2VrdW5kJ1xuICAgICAgICAgICAgICAgICAgICA6ICduZWthaiBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnc2VrdW5kbycgOiAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kaScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRlJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZW5hIG1pbnV0YScgOiAnZW5vIG1pbnV0byc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0byc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRpJyA6ICdtaW51dGFtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0ZScgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0JyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgdXJhJyA6ICdlbm8gdXJvJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3VyYScgOiAndXJvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmknIDogJ3VyYW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJlJyA6ICd1cmFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXInIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIGRhbicgOiAnZW5pbSBkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RhbicgOiAnZG5lbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2b21hJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIG1lc2VjJyA6ICdlbmltIG1lc2VjZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWMnIDogJ21lc2VjZW0nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjYScgOiAnbWVzZWNlbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2UnIDogJ21lc2VjaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNldicgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VubyBsZXRvJyA6ICdlbmltIGxldG9tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldG8nIDogJ2xldG9tJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRpJyA6ICdsZXRvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRhJyA6ICdsZXRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXQnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2wnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl90b3IuX3NyZS5fxI1ldC5fcGV0Ll9zb2IuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3RvX3NyX8SNZV9wZV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELiBNTS4gWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5lcyBvYl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tqdXRyaSBvYl0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYWogb2JdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfEjWV6ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBbGJhbmlhbiBbc3FdXG4vLyEgYXV0aG9yIDogRmxha8OrcmltIElzbWFuaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGFrZXJpbWlcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE9lcmQgQ3VrYWxsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9vZXJkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTsOrbnRvcl9EaGpldG9yJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9HdXNfU2h0X1RldF9Ow6tuX0Roaicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6snLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEaWVfSMOrbl9NYXJfTcOrcl9FbmpfUHJlX1NodCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEX0hfTWFfTcOrX0VfUF9TaCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvUER8TUQvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkgPT09ICdNJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXJzIDwgMTIgPyAnUEQnIDogJ01EJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tTb3QgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW05lc8OrciBuw6tdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbsOrXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0RqZSBuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZSBrYWx1YXIgbsOrXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ27DqyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgbcOrIHBhcsOrJyxcbiAgICAgICAgICAgIHM6ICdkaXNhIHNla29uZGEnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRhJyxcbiAgICAgICAgICAgIG06ICduasOrIG1pbnV0w6snLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGEnLFxuICAgICAgICAgICAgaDogJ25qw6sgb3LDqycsXG4gICAgICAgICAgICBoaDogJyVkIG9yw6snLFxuICAgICAgICAgICAgZDogJ25qw6sgZGl0w6snLFxuICAgICAgICAgICAgZGQ6ICclZCBkaXTDqycsXG4gICAgICAgICAgICBNOiAnbmrDqyBtdWFqJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbXVhaicsXG4gICAgICAgICAgICB5OiAnbmrDqyB2aXQnLFxuICAgICAgICAgICAgeXk6ICclZCB2aXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzcTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIEN5cmlsbGljIFtzci1jeXJsXVxuLy8hIGF1dGhvciA6IE1pbGFuIEphbmHEjWtvdmnEhzxtaWxhbmphbmFja292aWNAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWxhbi1qXG4vLyEgYXV0aG9yIDogU3RlZmFuIENybmpha292acSHIDxzdGVmYW5AaG90bWFpbC5ycz4gOiBodHRwczovL2dpdGh1Yi5jb20vY3JuamFrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7XG4gICAgICAgICAgICAvL0RpZmZlcmVudCBncmFtbWF0aWNhbCBjYXNlc1xuICAgICAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgICAgIG06IFsn0ZjQtdC00LDQvSDQvNC40L3Rg9GCJywgJ9GY0LXQtNC90L7QsyDQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtCwJywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZDogWyfRmNC10LTQsNC9INC00LDQvScsICfRmNC10LTQvdC+0LMg0LTQsNC90LAnXSxcbiAgICAgICAgICAgIGRkOiBbJ9C00LDQvScsICfQtNCw0L3QsCcsICfQtNCw0L3QsCddLFxuICAgICAgICAgICAgTTogWyfRmNC10LTQsNC9INC80LXRgdC10YYnLCAn0ZjQtdC00L3QvtCzINC80LXRgdC10YbQsCddLFxuICAgICAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgICAgICB5OiBbJ9GY0LXQtNC90YMg0LPQvtC00LjQvdGDJywgJ9GY0LXQtNC90LUg0LPQvtC00LjQvdC1J10sXG4gICAgICAgICAgICB5eTogWyfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC1JywgJ9Cz0L7QtNC40L3QsCddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPj0gMSAmJlxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAobnVtYmVyICUgMTAwIDwgMTAgfHwgbnVtYmVyICUgMTAwID49IDIwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XSxcbiAgICAgICAgICAgICAgICB3b3JkO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbWluYXRpdlxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd5JyAmJiB3aXRob3V0U3VmZml4KSByZXR1cm4gJ9GY0LXQtNC90LAg0LPQvtC00LjQvdCwJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAn0LPQvtC00LjQvdGDJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINCz0L7QtNC40L3QsCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9C00LDQvdCw0YEg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBkZGRkIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIFtzcl1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkOiBbJ2plZGFuIGRhbicsICdqZWRub2cgZGFuYSddLFxuICAgICAgICAgICAgZGQ6IFsnZGFuJywgJ2RhbmEnLCAnZGFuYSddLFxuICAgICAgICAgICAgTTogWydqZWRhbiBtZXNlYycsICdqZWRub2cgbWVzZWNhJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5OiBbJ2plZG51IGdvZGludScsICdqZWRuZSBnb2RpbmUnXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGludScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMCA+PSAxICYmXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgIChudW1iZXIgJSAxMDAgPCAxMCB8fCBudW1iZXIgJSAxMDAgPj0gMjApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldLFxuICAgICAgICAgICAgICAgIHdvcmQ7XG5cbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3knICYmIHdpdGhvdXRTdWZmaXgpIHJldHVybiAnamVkbmEgZ29kaW5hJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAnZ29kaW51Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGdvZGluYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyZS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogc2lTd2F0aSBbc3NdXG4vLyEgYXV0aG9yIDogTmljb2xhaSBEYXZpZXM8bWFpbEBuaWNvbGFpLmlvPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFpZGF2aWVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3MgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcycsIHtcbiAgICAgICAgbW9udGhzOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0JoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfVXNfTGJfTHRfTHNfTGhfVWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbTmFtdWhsYSBuZ2FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbS3VzYXNhIG5nYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSXRvbG8gbmdhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25nYSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnd2VudGVrYSBuZ2EgJXMnLFxuICAgICAgICAgICAgczogJ2VtaXp1endhbmEgbG9tY2FuZScsXG4gICAgICAgICAgICBzczogJyVkIG16dXp3YW5hJyxcbiAgICAgICAgICAgIG06ICd1bXp1enUnLFxuICAgICAgICAgICAgbW06ICclZCBlbWl6dXp1JyxcbiAgICAgICAgICAgIGg6ICdsaWhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBlbWFob3JhJyxcbiAgICAgICAgICAgIGQ6ICdsaWxhbmdhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZW1hbGFuZ2EnLFxuICAgICAgICAgICAgTTogJ2lueWFuZ2EnLFxuICAgICAgICAgICAgTU06ICclZCB0aW55YW5nYScsXG4gICAgICAgICAgICB5OiAndW1ueWFrYScsXG4gICAgICAgICAgICB5eTogJyVkIGltaW55YWthJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VrdXNlbmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbWluaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VudHNhbWJhbWEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VidXN1a3UnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdla3VzZW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbnRzYW1iYW1hJyB8fCBtZXJpZGllbSA9PT0gJ2VidXN1a3UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICclZCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dhaGlsaSBbc3ddXG4vLyEgYXV0aG9yIDogRmFoYWQgS2Fzc2ltIDogaHR0cHM6Ly9naXRodWIuY29tL2ZhZHNlbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdKMl9KM19KNF9KNV9BbF9Jal9KMScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1trZXNobyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0OiAndG9rZWEgJXMnLFxuICAgICAgICAgICAgczogJ2hpdmkgcHVuZGUnLFxuICAgICAgICAgICAgc3M6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG06ICdkYWtpa2EgbW9qYScsXG4gICAgICAgICAgICBtbTogJ2Rha2lrYSAlZCcsXG4gICAgICAgICAgICBoOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaDogJ21hc2FhICVkJyxcbiAgICAgICAgICAgIGQ6ICdzaWt1IG1vamEnLFxuICAgICAgICAgICAgZGQ6ICdzaWt1ICVkJyxcbiAgICAgICAgICAgIE06ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTTogJ21pZXppICVkJyxcbiAgICAgICAgICAgIHk6ICdtd2FrYSBtbW9qYScsXG4gICAgICAgICAgICB5eTogJ21pYWthICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN3O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbWlsIFt0YV1cbi8vISBhdXRob3IgOiBBcmp1bmt1bWFyIEtyaXNobmFtb29ydGh5IDogaHR0cHM6Ly9naXRodWIuY29tL3RrMTIwNDA0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CvpycsXG4gICAgICAgICAgICAyOiAn4K+oJyxcbiAgICAgICAgICAgIDM6ICfgr6knLFxuICAgICAgICAgICAgNDogJ+CvqicsXG4gICAgICAgICAgICA1OiAn4K+rJyxcbiAgICAgICAgICAgIDY6ICfgr6wnLFxuICAgICAgICAgICAgNzogJ+CvrScsXG4gICAgICAgICAgICA4OiAn4K+uJyxcbiAgICAgICAgICAgIDk6ICfgr68nLFxuICAgICAgICAgICAgMDogJ+CvpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgr6cnOiAnMScsXG4gICAgICAgICAgICAn4K+oJzogJzInLFxuICAgICAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgICAgICfgr6onOiAnNCcsXG4gICAgICAgICAgICAn4K+rJzogJzUnLFxuICAgICAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgICAgICfgr60nOiAnNycsXG4gICAgICAgICAgICAn4K+uJzogJzgnLFxuICAgICAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgICAgICfgr6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgdGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICAgICAgbW9udGhzOiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+Cumicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+Cuh+CuqeCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgrqjgr4fgrrHgr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4K6H4K6y4K+NJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgrq7gr4Hgrqngr40nLFxuICAgICAgICAgICAgczogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIG06ICfgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIGg6ICfgrpLgrrDgr4Eg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBoaDogJyVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgZDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICAgICAgZGQ6ICclZCDgrqjgrr7grp/gr43grpXgrrPgr40nLFxuICAgICAgICAgICAgTTogJ+CukuCusOCvgSDgrq7grr7grqTgrq7gr40nLFxuICAgICAgICAgICAgTU06ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgeTogJ+CukuCusOCvgSDgrrXgrrDgr4Hgrp/grq7gr40nLFxuICAgICAgICAgICAgeXk6ICclZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3grrXgrqTgr4EvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4K6v4K6+4K6u4K6u4K+NfOCuteCviOCuleCuseCviHzgrpXgrr7grrLgr4h84K6o4K6j4K+N4K6q4K6V4K6y4K+NfOCujuCuseCvjeCuquCuvuCun+CvgXzgrq7grr7grrLgr4gvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAvLyDgrrXgr4jgrpXgrrHgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6V4K6+4K6y4K+IJzsgLy8g4K6V4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuqOCuo+CvjeCuquCuleCusuCvjSc7IC8vIOCuqOCuo+CvjeCuquCuleCusuCvjVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgro7grrHgr43grqrgrr7grp/gr4EnOyAvLyDgro7grrHgr43grqrgrr7grp/gr4FcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6u4K6+4K6y4K+IJzsgLy8g4K6u4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+Cur+CuvuCuruCuruCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuteCviOCuleCuseCviCcgfHwgbWVyaWRpZW0gPT09ICfgrpXgrr7grrLgr4gnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRlbHVndSBbdGVdXG4vLyEgYXV0aG9yIDogS3Jpc2huYSBDaGFpdGFueWEgVGhvdGEgOiBodHRwczovL2dpdGh1Yi5jb20va2N0aG90YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgsJzgsKguX+Cwq+Cwv+CwrOCxjeCwsC5f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwvy5f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCXLl/gsLjgsYbgsKrgsY0uX+CwheCwleCxjeCwn+Cxiy5f4LCo4LC1Ll/gsKHgsL/gsLjgsYYuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgczogJ+CwleCxiuCwqOCxjeCwqOCwvyDgsJXgsY3gsLfgsKPgsL7gsLLgsYEnLFxuICAgICAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbTogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW06ICclZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLLgsYEnLFxuICAgICAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGg6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZDogJ+CwkuCwlSDgsLDgsYvgsJzgsYEnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTTogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU06ICclZCDgsKjgsYbgsLLgsLLgsYEnLFxuICAgICAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXk6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTgsLUnLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LCw4LC+4LCk4LGN4LCw4LC/fOCwieCwpuCwr+CwgnzgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJ84LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWppayBbdGddXG4vLyEgYXV0aG9yIDogT3JpZiBOLiBKci4gOiBodHRwczovL2dpdGh1Yi5jb20vb3JpZi1qclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGD0LwnLFxuICAgICAgICAxOiAnLdGD0LwnLFxuICAgICAgICAyOiAnLdGO0LwnLFxuICAgICAgICAzOiAnLdGO0LwnLFxuICAgICAgICA0OiAnLdGD0LwnLFxuICAgICAgICA1OiAnLdGD0LwnLFxuICAgICAgICA2OiAnLdGD0LwnLFxuICAgICAgICA3OiAnLdGD0LwnLFxuICAgICAgICA4OiAnLdGD0LwnLFxuICAgICAgICA5OiAnLdGD0LwnLFxuICAgICAgICAxMDogJy3Rg9C8JyxcbiAgICAgICAgMTI6ICct0YPQvCcsXG4gICAgICAgIDEzOiAnLdGD0LwnLFxuICAgICAgICAyMDogJy3Rg9C8JyxcbiAgICAgICAgMzA6ICct0Y7QvCcsXG4gICAgICAgIDQwOiAnLdGD0LwnLFxuICAgICAgICA1MDogJy3Rg9C8JyxcbiAgICAgICAgNjA6ICct0YPQvCcsXG4gICAgICAgIDcwOiAnLdGD0LwnLFxuICAgICAgICA4MDogJy3Rg9C8JyxcbiAgICAgICAgOTA6ICct0YPQvCcsXG4gICAgICAgIDEwMDogJy3Rg9C8JyxcbiAgICB9O1xuXG4gICAgdmFyIHRnID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGcnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNC4X9GE0LXQstGA0LDQu9C4X9C80LDRgNGC0Lhf0LDQv9GA0LXQu9C4X9C80LDQudC4X9C40Y7QvdC4X9C40Y7Qu9C4X9Cw0LLQs9GD0YHRgtC4X9GB0LXQvdGC0Y/QsdGA0Lhf0L7QutGC0Y/QsdGA0Lhf0L3QvtGP0LHRgNC4X9C00LXQutCw0LHRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9GP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9GP0YjQsV/QtNGI0LFf0YHRiNCxX9GH0YjQsV/Qv9GI0LFf0rfRg9C8X9GI0L3QsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQpNCw0YDQtNC+INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQv9C10YgnLFxuICAgICAgICAgICAgczogJ9GP0LrRh9Cw0L3QtCDRgdC+0L3QuNGPJyxcbiAgICAgICAgICAgIG06ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBoOiAn0Y/QuiDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfRj9C6INGA06/QtycsXG4gICAgICAgICAgICBkZDogJyVkINGA06/QtycsXG4gICAgICAgICAgICBNOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC+0rMnLFxuICAgICAgICAgICAgeTogJ9GP0Log0YHQvtC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0YHQvtC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ9GI0LDQsScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GA06/QtycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0LHQtdCz0L7SsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNOv0LcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cx0LXQs9C+0rMnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRnO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRoYWkgW3RoXVxuLy8hIGF1dGhvciA6IEtyaWRzYWRhIFRoYW5hYnVscG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXJuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aCcsIHtcbiAgICAgICAgbW9udGhzOiAn4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+C4oS7guIQuX+C4gS7guJ4uX+C4oeC4tS7guIQuX+C5gOC4oS7guKIuX+C4ni7guIQuX+C4oeC4tC7guKIuX+C4gS7guIQuX+C4qi7guIQuX+C4gS7guKIuX+C4lS7guIQuX+C4ni7guKIuX+C4mC7guIQuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4quC4muC4lOC4tV/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLCAvLyB5ZXMsIHRocmVlIGNoYXJhY3RlcnMgZGlmZmVyZW5jZVxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C4reC4si5f4LiILl/guK0uX+C4ni5f4Lie4LikLl/guKguX+C4qi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C4p+C4seC4mWRkZGTguJfguLXguYggRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lin4Lix4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vguJ7guKPguLjguYjguIfguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb4Lir4LiZ4LmJ4LiyIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vguYDguKHguLfguYjguK3guKfguLLguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vguKfguLHguJldZGRkZFvguJfguLXguYjguYHguKXguYnguKcg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C4reC4teC4gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPguJfguLXguYjguYHguKXguYnguKcnLFxuICAgICAgICAgICAgczogJ+C5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBzczogJyVkIOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtOiAnMSDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgbW06ICclZCDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgaDogJzEg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC4p+C4seC4mScsXG4gICAgICAgICAgICBkZDogJyVkIOC4p+C4seC4mScsXG4gICAgICAgICAgICB3OiAnMSDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgd3c6ICclZCDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgTTogJzEg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIHk6ICcxIOC4m+C4tScsXG4gICAgICAgICAgICB5eTogJyVkIOC4m+C4tScsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVHVya21lbiBbdGtdXG4vLyEgYXV0aG9yIDogQXRhbXlyYXQgQWJkeXJhaG1hbm92IDogaHR0cHM6Ly9naXRodWIuY29tL2F0YW15cmF0YWJkeVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmppXCIsXG4gICAgICAgIDU6IFwiJ2luamlcIixcbiAgICAgICAgODogXCInaW5qaVwiLFxuICAgICAgICA3MDogXCInaW5qaVwiLFxuICAgICAgICA4MDogXCInaW5qaVwiLFxuICAgICAgICAyOiBcIiduamlcIixcbiAgICAgICAgNzogXCInbmppXCIsXG4gICAgICAgIDIwOiBcIiduamlcIixcbiAgICAgICAgNTA6IFwiJ25qaVwiLFxuICAgICAgICAzOiBcIifDvG5qaVwiLFxuICAgICAgICA0OiBcIifDvG5qaVwiLFxuICAgICAgICAxMDA6IFwiJ8O8bmppXCIsXG4gICAgICAgIDY6IFwiJ25qeVwiLFxuICAgICAgICA5OiBcIid1bmp5XCIsXG4gICAgICAgIDEwOiBcIid1bmp5XCIsXG4gICAgICAgIDMwOiBcIid1bmp5XCIsXG4gICAgICAgIDYwOiBcIid5bmp5XCIsXG4gICAgICAgIDkwOiBcIid5bmp5XCIsXG4gICAgfTtcblxuICAgIHZhciB0ayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RrJywge1xuICAgICAgICBtb250aHM6ICfDnWFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hw71fScO9dW5fScO9dWxfQXdndXN0X1NlbnTDvWFicl9Pa3TDvWFicl9Ob8O9YWJyX0Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfDnWFuX0Zld19NYXJfQXByX01hw71fScO9bl9Jw71sX0F3Z19TZW5fT2t0X05vw71fRGVrJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ8OdZWvFn2VuYmVfRHXFn2VuYmVfU2nFn2VuYmVfw4dhcsWfZW5iZV9QZW7Fn2VuYmVfQW5uYV/FnmVuYmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfDnWVrX0R1xZ9fU2nFn1/Dh2FyX1Blbl9Bbm5fxZ5lbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfDnWtfRMWfX1PFn1/Dh3JfUG5fQW5fxZ5uJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2J1Z8O8biBzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tlcnRpciBzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7zDvW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2dlw6dlbl0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc2/FiCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw7bFiCcsXG4gICAgICAgICAgICBzOiAnYmlybsOkw6dlIHNla3VudCcsXG4gICAgICAgICAgICBtOiAnYmlyIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXQnLFxuICAgICAgICAgICAgaDogJ2JpciBzYWdhdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNhZ2F0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgTTogJ2JpciBhw70nLFxuICAgICAgICAgICAgTU06ICclZCBhw70nLFxuICAgICAgICAgICAgeTogJ2JpciDDvXlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw715bCcsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEbyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIFwiJ3VuanlcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWdhbG9nIChQaGlsaXBwaW5lcykgW3RsLXBoXVxuLy8hIGF1dGhvciA6IERhbiBIYWdtYW4gOiBodHRwczovL2dpdGh1Yi5jb20vaGFnbWFuZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGxQaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RsLXBoJywge1xuICAgICAgICBtb250aHM6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ01NL0QvWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ0xUIFtuZ2F5b25nIGFyYXddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQnVrYXMgbmddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQnLFxuICAgICAgICAgICAgbGFzdERheTogJ0xUIFtrYWhhcG9uXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xUIFtub29uZyBuYWthcmFhbmddIGRkZGQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgICAgIHM6ICdpbGFuZyBzZWd1bmRvJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvJyxcbiAgICAgICAgICAgIGg6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAnaXNhbmcgYXJhdycsXG4gICAgICAgICAgICBkZDogJyVkIGFyYXcnLFxuICAgICAgICAgICAgTTogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnV3YW4nLFxuICAgICAgICAgICAgeTogJ2lzYW5nIHRhb24nLFxuICAgICAgICAgICAgeXk6ICclZCB0YW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsUGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2xpbmdvbiBbdGxoXVxuLy8hIGF1dGhvciA6IERvbWluaWthIEtydWsgOiBodHRwczovL2dpdGh1Yi5jb20vYW1hcmFudGhyb3NlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc05vdW5zID0gJ3BhZ2hfd2HigJlfY2hh4oCZX3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Jy5zcGxpdCgnXycpO1xuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlKG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdsZVMnXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3YVEnXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICduZW0nXG4gICAgICAgICAgICAgICAgOiB0aW1lICsgJyBwSXEnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVQYXN0KG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdIdeKAmSdcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dlbidcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ2JlbidcbiAgICAgICAgICAgICAgICA6IHRpbWUgKyAnIHJldCc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bWJlck5vdW4gPSBudW1iZXJBc05vdW4obnVtYmVyKTtcbiAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgbHVwJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgdHVwJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgcmVwJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFqJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFyJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgRElTJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG51bWJlckFzTm91bihudW1iZXIpIHtcbiAgICAgICAgdmFyIGh1bmRyZWQgPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDAwKSAvIDEwMCksXG4gICAgICAgICAgICB0ZW4gPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDApIC8gMTApLFxuICAgICAgICAgICAgb25lID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICB3b3JkID0gJyc7XG4gICAgICAgIGlmIChodW5kcmVkID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSBudW1iZXJzTm91bnNbaHVuZHJlZF0gKyAndmF0bGgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW4gPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1t0ZW5dICsgJ21hSCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uZSA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKHdvcmQgIT09ICcnID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW29uZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmQgPT09ICcnID8gJ3BhZ2gnIDogd29yZDtcbiAgICB9XG5cbiAgICB2YXIgdGxoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGxoJywge1xuICAgICAgICBtb250aHM6ICd0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYXIgd2HigJlfamFyIGNoYeKAmV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdh4oCZbWFIX2phciB3YeKAmW1hSCB3YeKAmV9qYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6XG4gICAgICAgICAgICAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOlxuICAgICAgICAgICAgJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0RhSGphal0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t3YeKAmWxlU10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgbGFzdERheTogJ1t3YeKAmUh14oCZXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xMTCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogdHJhbnNsYXRlRnV0dXJlLFxuICAgICAgICAgICAgcGFzdDogdHJhbnNsYXRlUGFzdCxcbiAgICAgICAgICAgIHM6ICdwdVMgbHVwJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiAnd2HigJkgdHVwJyxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiAnd2HigJkgcmVwJyxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnd2HigJkgamFqJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnd2HigJkgamFyJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnd2HigJkgRElTJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmtpc2ggW3RyXVxuLy8hIGF1dGhvcnMgOiBFcmhhbiBHdW5kb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmhhbmd1bmRvZ2FuLFxuLy8hICAgICAgICAgICBCdXJhayBZacSfaXQgS2F5YTogaHR0cHM6Ly9naXRodWIuY29tL0JZS1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmNpXCIsXG4gICAgICAgIDU6IFwiJ2luY2lcIixcbiAgICAgICAgODogXCInaW5jaVwiLFxuICAgICAgICA3MDogXCInaW5jaVwiLFxuICAgICAgICA4MDogXCInaW5jaVwiLFxuICAgICAgICAyOiBcIiduY2lcIixcbiAgICAgICAgNzogXCInbmNpXCIsXG4gICAgICAgIDIwOiBcIiduY2lcIixcbiAgICAgICAgNTA6IFwiJ25jaVwiLFxuICAgICAgICAzOiBcIifDvG5jw7xcIixcbiAgICAgICAgNDogXCInw7xuY8O8XCIsXG4gICAgICAgIDEwMDogXCInw7xuY8O8XCIsXG4gICAgICAgIDY6IFwiJ25jxLFcIixcbiAgICAgICAgOTogXCIndW5jdVwiLFxuICAgICAgICAxMDogXCIndW5jdVwiLFxuICAgICAgICAzMDogXCIndW5jdVwiLFxuICAgICAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgICAgIDkwOiBcIifEsW5jxLFcIixcbiAgICB9O1xuXG4gICAgdmFyIHRyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgICAgIG1vbnRoczogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ09jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUGF6X1B6dF9TYWxfw4dhcl9QZXJfQ3VtX0NtdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2cycgOiAnw5ZTJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL8O2w7Z8w5bDlnzDtnN8w5ZTLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfDtnMnIHx8IGlucHV0ID09PSAnw5ZTJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t5YXLEsW4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgICAgIHM6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5ZScsXG4gICAgICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgICAgICBtbTogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgICAgICB3dzogJyVkIGhhZnRhJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5xLFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCInxLFuY8SxXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFsb3NzYW4gW3R6bF1cbi8vISBhdXRob3IgOiBSb2JpbiB2YW4gZGVyIFZsaWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmluMHZhbjBkZXIwdlxuLy8hIGF1dGhvciA6IEl1c3TDrCBDYW51blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgLy8gQWZ0ZXIgdGhlIHllYXIgdGhlcmUgc2hvdWxkIGJlIGEgc2xhc2ggYW5kIHRoZSBhbW91bnQgb2YgeWVhcnMgc2luY2UgRGVjZW1iZXIgMjYsIDE5NzkgaW4gUm9tYW4gbnVtZXJhbHMuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdG9vIGRpZmZpY3VsdCAobWF5YmUgZXZlbiBpbXBvc3NpYmxlKSB0byBhZGQuXG4gICAgdmFyIHR6bCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZXZfTWFyX0F2cl9NYWlfR8O8bl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTw7psYWRpX0zDum5lw6dpX01haXR6aV9Nw6FyY3VyaV9YaMO6YWRpX1Zpw6luZXLDp2lfU8OhdHVyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1PDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBbZGFsbGFzXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZFxcJ298ZFxcJ2EvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJkJ29cIiA9PT0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdvXCIgOiBcIkQnT1wiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdhXCIgOiBcIkQnQVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tveGhpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbcOgIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llaXJpIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3NwcmVpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdqYSVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ3ZpZW5zYXMgc2VjdW5kcycsIFwiJ2llbnNhcyBzZWN1bmRzXCJdLFxuICAgICAgICAgICAgc3M6IFtudW1iZXIgKyAnIHNlY3VuZHMnLCAnJyArIG51bWJlciArICcgc2VjdW5kcyddLFxuICAgICAgICAgICAgbTogW1wiJ24gbcOtdXRcIiwgXCInaWVucyBtw611dFwiXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtw611dHMnLCAnJyArIG51bWJlciArICcgbcOtdXRzJ10sXG4gICAgICAgICAgICBoOiBbXCInbiDDvm9yYVwiLCBcIidpZW5zYSDDvm9yYVwiXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDDvm9yYXMnLCAnJyArIG51bWJlciArICcgw75vcmFzJ10sXG4gICAgICAgICAgICBkOiBbXCInbiB6aXVhXCIsIFwiJ2llbnNhIHppdWFcIl0sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgeml1YXMnLCAnJyArIG51bWJlciArICcgeml1YXMnXSxcbiAgICAgICAgICAgIE06IFtcIiduIG1lc1wiLCBcIidpZW5zIG1lc1wiXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBtZXNlbicsICcnICsgbnVtYmVyICsgJyBtZXNlbiddLFxuICAgICAgICAgICAgeTogW1wiJ24gYXJcIiwgXCInaWVucyBhclwiXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBhcnMnLCAnJyArIG51bWJlciArICcgYXJzJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZVxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICA/IGZvcm1hdFtrZXldWzBdXG4gICAgICAgICAgICA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHJldHVybiB0emw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgTGF0aW4gW3R6bS1sYXRuXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHptTGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bS1sYXRuJywge1xuICAgICAgICBtb250aHM6ICdpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2FzZGtoIGddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXNrYSBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbYXNzYW50IGddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWRraCBzIHlhbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAneWFuICVzJyxcbiAgICAgICAgICAgIHM6ICdpbWlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgaW1paycsXG4gICAgICAgICAgICBtOiAnbWludeG4jScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnXhuI0nLFxuICAgICAgICAgICAgaDogJ3NhyZthJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGFzc2HJm2luJyxcbiAgICAgICAgICAgIGQ6ICdhc3MnLFxuICAgICAgICAgICAgZGQ6ICclZCBvc3NhbicsXG4gICAgICAgICAgICBNOiAnYXlvd3InLFxuICAgICAgICAgICAgTU06ICclZCBpeXlpcm4nLFxuICAgICAgICAgICAgeTogJ2FzZ2FzJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaXNnYXNuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0em1MYXRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IFt0em1dXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0em0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0nLCB7XG4gICAgICAgIG1vbnRoczogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vitLDitZnitLfitYUg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+K0sOK1meK0veK0sCDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+K0sOK1muK0sOK1j+K1nCDitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+K0t+K0sOK0t+K1hSDitZkg4rWi4rSw4rWPICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfitaLitLDitY8gJXMnLFxuICAgICAgICAgICAgczogJ+K1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBzczogJyVkIOK1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBtOiAn4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIGg6ICfitZnitLDitYTitLAnLFxuICAgICAgICAgICAgaGg6ICclZCDitZzitLDitZnitZnitLDitYTitYnitY8nLFxuICAgICAgICAgICAgZDogJ+K0sOK1meK1mScsXG4gICAgICAgICAgICBkZDogJyVkIG/itZnitZnitLDitY8nLFxuICAgICAgICAgICAgTTogJ+K0sOK1om/itZPitZQnLFxuICAgICAgICAgICAgTU06ICclZCDitYnitaLitaLitYnitZTitY8nLFxuICAgICAgICAgICAgeTogJ+K0sOK1meK0s+K0sOK1mScsXG4gICAgICAgICAgICB5eTogJyVkIOK1ieK1meK0s+K0sOK1meK1jycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV5Z2h1ciAoQ2hpbmEpIFt1Zy1jbl1cbi8vISBhdXRob3I6IGJveWFxIDogaHR0cHM6Ly9naXRodWIuY29tL2JveWFxXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdWdDbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VnLWNuJywge1xuICAgICAgICBtb250aHM6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25UnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2YrbkNix2YnZhSDZg9uQ2obblXzYs9uV2r7bldixfNqG24jYtNiq2YnZhiDYqNuH2LHbh9mGfNqG24jYtHzahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhnzZg9uV2oYvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfZituQ2LHZidmFINmD25DahtuVJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2LPbldq+25XYsScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn2obbiNi02KrZidmGINmD25DZitmJ2YYnIHx8IG1lcmlkaWVtID09PSAn2YPbldqGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mK25DYsdmJ2YUg2YPbkNqG25UnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LPbldq+25XYsSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINio24fYsduH2YYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINmD25DZitmJ2YYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mD25Xahic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9io24jar9uI2YYg2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYptuV2KrblSDYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vZg9uQ2YTbldix2YPZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYqtuG2YbbiNqv24jZhl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb2KbYp9mE2K/ZidmG2YLZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDZg9uQ2YrZidmGJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYqNuH2LHbh9mGJyxcbiAgICAgICAgICAgIHM6ICfZhtuV2obahtuVINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBzczogJyVkINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBtOiAn2KjZidixINmF2YnZhtuH2KonLFxuICAgICAgICAgICAgbW06ICclZCDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIGg6ICfYqNmJ2LEg2LPYp9im25XYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYptuV2KonLFxuICAgICAgICAgICAgZDogJ9io2YnYsSDZg9uI2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDZg9uI2YYnLFxuICAgICAgICAgICAgTTogJ9io2YnYsSDYptin2YonLFxuICAgICAgICAgICAgTU06ICclZCDYptin2YonLFxuICAgICAgICAgICAgeTogJ9io2YnYsSDZitmJ2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDZitmJ2YQnLFxuICAgICAgICB9LFxuXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2YPbiNmG2YknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3avtuV2b7YqtuVJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1Z0NuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVrcmFpbmlhbiBbdWtdXG4vLyEgYXV0aG9yIDogemVtbGFuaW4gOiBodHRwczovL2dpdGh1Yi5jb20vemVtbGFuaW5cbi8vISBBdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyA6ICfRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyA6ICfQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LInLFxuICAgICAgICAgICAgTU06ICfQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyJyxcbiAgICAgICAgICAgIHl5OiAn0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwJyA6ICfRhdCy0LjQu9C40L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzQ2FzZVJlcGxhY2UobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgICAgICBub21pbmF0aXZlOlxuICAgICAgICAgICAgICAgICAgICAn0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGFjY3VzYXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70Y5f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNGDX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRjl/RgdGD0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2VuaXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdW5DYXNlO1xuXG4gICAgICAgIGlmIChtID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXVxuICAgICAgICAgICAgICAgIC5zbGljZSgxLCA3KVxuICAgICAgICAgICAgICAgIC5jb25jYXQod2Vla2RheXNbJ25vbWluYXRpdmUnXS5zbGljZSgwLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdW5DYXNlID0gLyhcXFtb0JLQstCj0YNdXFxdKSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgICAgICA/ICdhY2N1c2F0aXZlJ1xuICAgICAgICAgICAgOiAvXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgPyAnZ2VuaXRpdmUnXG4gICAgICAgICAgICA6ICdub21pbmF0aXZlJztcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW25vdW5DYXNlXVttLmRheSgpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyICsgJ9C+JyArICh0aGlzLmhvdXJzKCkgPT09IDExID8gJ9CxJyA6ICcnKSArICddIExUJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1aycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0YHRltGH0LXQvdGMX9C70Y7RgtC40Llf0LHQtdGA0LXQt9C10L3RjF/QutCy0ZbRgtC10L3RjF/RgtGA0LDQstC10L3RjF/Rh9C10YDQstC10L3RjF/Qu9C40L/QtdC90Yxf0YHQtdGA0L/QtdC90Yxf0LLQtdGA0LXRgdC10L3RjF/QttC+0LLRgtC10L3RjF/Qu9C40YHRgtC+0L/QsNC0X9Cz0YDRg9C00LXQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXNDYXNlUmVwbGFjZSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDRgC4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Ch0YzQvtCz0L7QtNC90ZYgJyksXG4gICAgICAgICAgICBuZXh0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CX0LDQstGC0YDQsCAnKSxcbiAgICAgICAgICAgIGxhc3REYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JLRh9C+0YDQsCAnKSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CjXSBkZGRkIFsnKSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtGXXSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0LPQvl0gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtC+0LzRgycsXG4gICAgICAgICAgICBzOiAn0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfRgNGW0LonLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE0uIEUuOiB0aG9zZSB0d28gYXJlIHZpcnR1YWxseSB1bnVzZWQgYnV0IGEgdXNlciBtaWdodCB3YW50IHRvIGltcGxlbWVudCB0aGVtIGZvciBoaXMvaGVyIHdlYnNpdGUgZm9yIHNvbWUgcmVhc29uXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0L7RgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90LrRgyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVyZHUgW3VyXVxuLy8hIGF1dGhvciA6IFNhd29vZCBBbGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2libmVzYXllZWRcbi8vISBhdXRob3IgOiBaYWNrIDogaHR0cHM6Ly9naXRodWIuY29tL1phY2tWaXNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICAgICAn2YHYsdmI2LHbjCcsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAgICAgJ9mF2KbbjCcsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAgICAgJ9in2q/Ys9iqJyxcbiAgICAgICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYp9iq2YjYp9ixJywgJ9m+24zYsScsICfZhdmG2q/ZhCcsICfYqNiv2r4nLCAn2KzZhdi52LHYp9iqJywgJ9is2YXYuduBJywgJ9uB2YHYqtuBJ107XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbTogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW06ICclZCDZhdmG2bknLFxuICAgICAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkOiAn2KfbjNqpINiv2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE06ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9uBJyxcbiAgICAgICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgTGF0aW4gW3V6LWxhdG5dXG4vLyEgYXV0aG9yIDogUmFzdWxiZWsgTWlyemF5ZXYgOiBnaXRodWIuY29tL1Jhc3VsYmVlZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1ekxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1ei1sYXRuJywge1xuICAgICAgICBtb250aHM6ICdZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tCdWd1biBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXJ0YWdhXSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VjaGEgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0V2VlazogXCJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV1cIixcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnWWFxaW4gJXMgaWNoaWRhJyxcbiAgICAgICAgICAgIHBhc3Q6ICdCaXIgbmVjaGEgJXMgb2xkaW4nLFxuICAgICAgICAgICAgczogJ3Nvbml5YScsXG4gICAgICAgICAgICBzczogJyVkIHNvbml5YScsXG4gICAgICAgICAgICBtOiAnYmlyIGRhcWlxYScsXG4gICAgICAgICAgICBtbTogJyVkIGRhcWlxYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNvYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzb2F0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIga3VuJyxcbiAgICAgICAgICAgIGRkOiAnJWQga3VuJyxcbiAgICAgICAgICAgIE06ICdiaXIgb3knLFxuICAgICAgICAgICAgTU06ICclZCBveScsXG4gICAgICAgICAgICB5OiAnYmlyIHlpbCcsXG4gICAgICAgICAgICB5eTogJyVkIHlpbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1ekxhdG47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgW3V6XVxuLy8hIGF1dGhvciA6IFNhcmRvciBNdW1pbm92IDogaHR0cHM6Ly9naXRodWIuY29tL211bWlub2ZmXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdXogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1eicsIHtcbiAgICAgICAgbW9udGhzOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9Cv0LrRiNCw0L3QsdCwX9CU0YPRiNCw0L3QsdCwX9Ch0LXRiNCw0L3QsdCwX9Cn0L7RgNGI0LDQvdCx0LBf0J/QsNC50YjQsNC90LHQsF/QltGD0LzQsF/QqNCw0L3QsdCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0K/QutGIX9CU0YPRiF/QodC10Yhf0KfQvtGAX9Cf0LDQuV/QltGD0Lxf0KjQsNC9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cv0Lpf0JTRg1/QodC1X9Cn0L5f0J/QsF/QltGDX9Co0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ0QgTU1NTSBZWVlZLCBkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHRg9Cz0YPQvSDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0K3RgNGC0LDQs9CwXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JrQtdGH0LAg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vQo9GC0LPQsNC9XSBkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0K/QutC40L0gJXMg0LjRh9C40LTQsCcsXG4gICAgICAgICAgICBwYXN0OiAn0JHQuNGAINC90LXRh9CwICVzINC+0LvQtNC40L0nLFxuICAgICAgICAgICAgczogJ9GE0YPRgNGB0LDRgicsXG4gICAgICAgICAgICBzczogJyVkINGE0YPRgNGB0LDRgicsXG4gICAgICAgICAgICBtOiAn0LHQuNGAINC00LDQutC40LrQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDQutC40LrQsCcsXG4gICAgICAgICAgICBoOiAn0LHQuNGAINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQvtCw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0LjRgCDQutGD0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutGD0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0LjRgCDQvtC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0L7QuScsXG4gICAgICAgICAgICB5OiAn0LHQuNGAINC50LjQuycsXG4gICAgICAgICAgICB5eTogJyVkINC50LjQuycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1ejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBWaWV0bmFtZXNlIFt2aV1cbi8vISBhdXRob3IgOiBCYW5nIE5ndXllbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYW5nbmtcbi8vISBhdXRob3IgOiBDaGllbiBLaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NoaWVua2lyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgndmknLCB7XG4gICAgICAgIG1vbnRoczogJ3Row6FuZyAxX3Row6FuZyAyX3Row6FuZyAzX3Row6FuZyA0X3Row6FuZyA1X3Row6FuZyA2X3Row6FuZyA3X3Row6FuZyA4X3Row6FuZyA5X3Row6FuZyAxMF90aMOhbmcgMTFfdGjDoW5nIDEyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2No4bunIG5o4bqtdF90aOG7qSBoYWlfdGjhu6kgYmFfdGjhu6kgdMawX3Ro4bupIG7Eg21fdGjhu6kgc8OhdV90aOG7qSBi4bqjeScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9zYXxjaC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXmNoJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3NhJyA6ICdTQSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2NoJyA6ICdDSCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtuxINtXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdERC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0jDtG0gbmF5IGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSMO0bSBxdWEgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gdHLGsOG7m2MgbMO6Y10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyB04bubaScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdHLGsOG7m2MnLFxuICAgICAgICAgICAgczogJ3bDoGkgZ2nDonknLFxuICAgICAgICAgICAgc3M6ICclZCBnacOieScsXG4gICAgICAgICAgICBtOiAnbeG7mXQgcGjDunQnLFxuICAgICAgICAgICAgbW06ICclZCBwaMO6dCcsXG4gICAgICAgICAgICBoOiAnbeG7mXQgZ2nhu50nLFxuICAgICAgICAgICAgaGg6ICclZCBnaeG7nScsXG4gICAgICAgICAgICBkOiAnbeG7mXQgbmfDoHknLFxuICAgICAgICAgICAgZGQ6ICclZCBuZ8OgeScsXG4gICAgICAgICAgICB3OiAnbeG7mXQgdHXhuqduJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdHXhuqduJyxcbiAgICAgICAgICAgIE06ICdt4buZdCB0aMOhbmcnLFxuICAgICAgICAgICAgTU06ICclZCB0aMOhbmcnLFxuICAgICAgICAgICAgeTogJ23hu5l0IG7Eg20nLFxuICAgICAgICAgICAgeXk6ICclZCBuxINtJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBzZXVkbyBbeC1wc2V1ZG9dXG4vLyEgYXV0aG9yIDogQW5kcmV3IEhvb2QgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kcmV3aG9vZDEyNVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHhQc2V1ZG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd4LXBzZXVkbycsIHtcbiAgICAgICAgbW9udGhzOiAnSn7DocOxw7rDoX5yw71fRn7DqWJyw7p+w6Fyw71ffk3DoXJjfmhfw4FwfnLDrWxffk3DocO9X35Kw7rDscOpfl9Kw7psfsO9X8OBw7p+Z8O6c3R+X1PDqXB+dMOpbWJ+w6lyX8OTfmN0w7NifsOpcl/DkX7Ds3bDqW1+YsOpcl9+RMOpY8Opfm1iw6lyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N+w7rDsV9+TcOzw7FfflTDusOpX35Xw6lkX35UaMO6X35GcsOtX35Tw6F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1R+w7Nkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1R+w7Ntw7N+cnLDs353IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw51+w6lzdH7DqXJkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMfsOhc3RdIGRkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfDrX7DsSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw6F+Z8OzJyxcbiAgICAgICAgICAgIHM6ICfDoSB+ZsOpdyB+c8OpY8OzfsOxZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzfsOpY8Ozw7F+ZHMnLFxuICAgICAgICAgICAgbTogJ8OhIH5tw63DsX7DunTDqScsXG4gICAgICAgICAgICBtbTogJyVkIG1+w63DscO6fnTDqXMnLFxuICAgICAgICAgICAgaDogJ8OhfsOxIGjDs37DunInLFxuICAgICAgICAgICAgaGg6ICclZCBofsOzw7pycycsXG4gICAgICAgICAgICBkOiAnw6EgfmTDocO9JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZH7DocO9cycsXG4gICAgICAgICAgICBNOiAnw6Egfm3Ds8OxfnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbX7Ds8OxdH5ocycsXG4gICAgICAgICAgICB5OiAnw6EgfsO9w6nDoXInLFxuICAgICAgICAgICAgeXk6ICclZCDDvX7DqcOhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geFBzZXVkbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBZb3J1YmEgTmlnZXJpYSBbeW9dXG4vLyEgYXV0aG9yIDogQXRvbGFnYmUgQWJpc295ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRlbGEtYmF0b2xhZ2JlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgeW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd5bycsIHtcbiAgICAgICAgbW9udGhzOiAnU+G6ucyBcuG6ucyBX0XMgHJlzIBsZcyAX+G6uHLhurnMgG5hzIBfScyAZ2JlzIFfRcyAYmliaV9PzIBrdcyAZHVfQWfhurltb19PzIBndcyBbl9Pd2V3ZV/hu4zMgHdhzIByYcyAX0JlzIFsdcyBX+G7jMyAcOG6ucyAzIAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnU+G6ucyBcl9FzIBybF/hurhybl9JzIBnYl9FzIBiaV9PzIBrdcyAX0Fn4bq5X0/MgGd1zIFfT3dlX+G7jMyAd2HMgF9CZcyBbF/hu4zMgHDhurnMgMyAJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0HMgGnMgGt1zIFfQWplzIFfScyAc+G6ucyBZ3VuX+G7jGrhu43MgXJ1zIFf4buMauG7jcyBYuG7jV/hurh0acyAX0HMgGJhzIFt4bq5zIF0YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0HMgGnMgGtfQWplzIFfScyAc+G6ucyBX+G7jGpyX+G7jGpiX+G6uHRpzIBfQcyAYmHMgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPzIBuacyAIG5pXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+G7jMyAbGEgbmldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBcImRkZGQgW+G7jHPhurnMgCB0b8yBbidi4buNXSBbbmldIExUXCIsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0HMgG5hIG5pXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+G7jHPhurnMgCB0b8yBbOG7jcyBXSBbbmldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbmnMgSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMga+G7jWphzIEnLFxuICAgICAgICAgICAgczogJ2nMgHPhurlqdcyBIGFheWHMgSBkaWUnLFxuICAgICAgICAgICAgc3M6ICdhYXlhzIEgJWQnLFxuICAgICAgICAgICAgbTogJ2nMgHPhurlqdcyBIGthbicsXG4gICAgICAgICAgICBtbTogJ2nMgHPhurlqdcyBICVkJyxcbiAgICAgICAgICAgIGg6ICd3YcyBa2F0aSBrYW4nLFxuICAgICAgICAgICAgaGg6ICd3YcyBa2F0aSAlZCcsXG4gICAgICAgICAgICBkOiAn4buNauG7jcyBIGthbicsXG4gICAgICAgICAgICBkZDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgICAgICBNOiAnb3N1zIAga2FuJyxcbiAgICAgICAgICAgIE1NOiAnb3N1zIAgJWQnLFxuICAgICAgICAgICAgeTogJ+G7jWR1zIFuIGthbicsXG4gICAgICAgICAgICB5eTogJ+G7jWR1zIFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL+G7jWrhu43MgVxcc1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB5bztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChDaGluYSkgW3poLWNuXVxuLy8hIGF1dGhvciA6IHN1dXBpYyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXVwaWNcbi8vISBhdXRob3IgOiBaZW5vIFplbmcgOiBodHRwczovL2dpdGh1Yi5jb20vemVub3plbmdcbi8vISBhdXRob3IgOiB1dTEwOSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91dTEwOVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn5ZGo5pelX+WRqOS4gF/lkajkuoxf5ZGo5LiJX+WRqOWbm1/lkajkupRf5ZGo5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelQWjngrltbeWIhicsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYnLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiLXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSAhPT0gbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuIpdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+acrF1kZGRMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOWRqCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5ZGoJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5ZCOJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5Yeg56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumSnycsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumSnycsXG4gICAgICAgICAgICBoOiAnMSDlsI/ml7YnLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/ml7YnLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIHc6ICcxIOWRqCcsXG4gICAgICAgICAgICB3dzogJyVkIOWRqCcsXG4gICAgICAgICAgICBNOiAnMSDkuKrmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDkuKrmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgLy8gR0IvVCA3NDA4LTE5OTTjgIrmlbDmja7lhYPlkozkuqTmjaLmoLzlvI/Ct+S/oeaBr+S6pOaNosK35pel5pyf5ZKM5pe26Ze06KGo56S65rOV44CL5LiOSVNPIDg2MDE6MTk4OOetieaViFxuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoQ247XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoSG9uZyBLb25nKSBbemgtaGtdXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogS29uc3RhbnRpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2ZkXG4vLyEgYXV0aG9yIDogQW50aG9ueSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRob255bGF1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhIayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWhrJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPT09IDEyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGRMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoSGs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoTWFjYXUpIFt6aC1tb11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcbi8vISBhdXRob3IgOiBUYW4gWXVhbmhvbmcgOiBodHRwczovL2dpdGh1Yi5jb20vbGUwdGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhNbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLW1vJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5YWnJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoTW87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoVGFpd2FuKSBbemgtdHddXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhUdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLXR3Jywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoVHc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuNFxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgICAgID8gbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKClcbiAgICAgICAgICAgIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHVuaXQgPT09ICdGdWxsWWVhcicgJiZcbiAgICAgICAgICAgICAgICBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBtb20uZGF0ZSgpID09PSAyOVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDAsXG4gICAgICAgIE1PTlRIID0gMSxcbiAgICAgICAgREFURSA9IDIsXG4gICAgICAgIEhPVVIgPSAzLFxuICAgICAgICBNSU5VVEUgPSA0LFxuICAgICAgICBTRUNPTkQgPSA1LFxuICAgICAgICBNSUxMSVNFQ09ORCA9IDYsXG4gICAgICAgIFdFRUsgPSA3LFxuICAgICAgICBXRUVLREFZID0gODtcblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtb250aCcsICdNJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtb250aCcsIDgpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgJ01vbnRoJ10odmFsdWUsIGRheU9mTW9udGgpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdob3VyJywgMTMpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbGVOYW1lU2FuZShuYW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbmFtZXMgdGhhdCBsb29rIGxpa2UgZmlsZXN5c3RlbSBwYXRocywgaS5lIGNvbnRhaW4gJy8nIG9yICdcXCdcbiAgICAgICAgcmV0dXJuIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpICE9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LyxcbiAgICAgICAgaXNvRGF0ZXMgPSBbXG4gICAgICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTScsIC9cXGR7Nn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgICAgICBdLFxuICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgICAgIGlzb1RpbWVzID0gW1xuICAgICAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgICAgIF0sXG4gICAgICAgIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLFxuICAgICAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgICAgIHJmYzI4MjIgPVxuICAgICAgICAgICAgL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdCxcbiAgICAgICAgICAgIGlzb0RhdGVzTGVuID0gaXNvRGF0ZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXNvVGltZXNMZW4gPSBpc29UaW1lcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14oKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYSxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW5zLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ2ZMZW4gPSBjb25maWcuX2YubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb25maWdmTGVuID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnZkxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG9yZGVyTGVuID0gb3JkZXJpbmcubGVuZ3RoO1xuICAgICAgICBmb3IgKGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9XG4gICAgICAgICAgICAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24oaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSAraW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgZDogdG9JbnQobWF0Y2hbREFURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG06IHRvSW50KG1hdGNoW01JTlVURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBzOiB0b0ludChtYXRjaFtTRUNPTkRdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3OiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi50bylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfaXNWYWxpZCcpKSB7XG4gICAgICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2YXIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9XG4gICAgICAgICAgICBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAnbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgICAgIHZhbCA9IHBlcmlvZDtcbiAgICAgICAgICAgICAgICBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyksXG4gICAgICAgIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc0RhdGUoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc1N0cmluZyhpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3llYXJzJyxcbiAgICAgICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICdtb250aHMnLFxuICAgICAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAgICAgJ00nLFxuICAgICAgICAgICAgICAgICdkYXlzJyxcbiAgICAgICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICAgICAnZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGVzJyxcbiAgICAgICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAgICAgJ0QnLFxuICAgICAgICAgICAgICAgICdob3VycycsXG4gICAgICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgICAgICdoJyxcbiAgICAgICAgICAgICAgICAnbWludXRlcycsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgICAgICdzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAncycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAnbXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnR5TGVuID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnR5TGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFxuICAgICAgICBbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgICAgIGlmIChlcmEpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmEgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcblxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3NlY29uZCcsIDE1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaWxsaXNlY29uZCcsIDE2KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIHRoaXMuYXMoJ21zJyk/XG4gICAgZnVuY3Rpb24gdmFsdWVPZiQxKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI5LjQnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyohXG4gKiBTZWxlY3QyIDQuMS4wLXJjLjBcbiAqIGh0dHBzOi8vc2VsZWN0Mi5naXRodWIuaW9cbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgLy8gTm9kZS9Db21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkge1xuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHJlcXVpcmUoJ2pRdWVyeScpIHJldHVybnMgYSBmYWN0b3J5IHRoYXQgcmVxdWlyZXMgd2luZG93IHRvXG4gICAgICAgIC8vIGJ1aWxkIGEgalF1ZXJ5IGluc3RhbmNlLCB3ZSBub3JtYWxpemUgaG93IHdlIHVzZSBtb2R1bGVzXG4gICAgICAgIC8vIHRoYXQgcmVxdWlyZSB0aGlzIHBhdHRlcm4gYnV0IHRoZSB3aW5kb3cgcHJvdmlkZWQgaXMgYSBub29wXG4gICAgICAgIC8vIGlmIGl0J3MgZGVmaW5lZCAoaG93IGpxdWVyeSB3b3JrcylcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jykocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZhY3RvcnkoalF1ZXJ5KTtcbiAgICAgIHJldHVybiBqUXVlcnk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbHNcbiAgICBmYWN0b3J5KGpRdWVyeSk7XG4gIH1cbn0gKGZ1bmN0aW9uIChqUXVlcnkpIHtcbiAgLy8gVGhpcyBpcyBuZWVkZWQgc28gd2UgY2FuIGNhdGNoIHRoZSBBTUQgbG9hZGVyIGNvbmZpZ3VyYXRpb24gYW5kIHVzZSBpdFxuICAvLyBUaGUgaW5uZXIgZmlsZSBzaG91bGQgYmUgd3JhcHBlZCAoYnkgYGJhbm5lci5zdGFydC5qc2ApIGluIGEgZnVuY3Rpb24gdGhhdFxuICAvLyByZXR1cm5zIHRoZSBBTUQgbG9hZGVyIHJlZmVyZW5jZXMuXG4gIHZhciBTMiA9KGZ1bmN0aW9uICgpIHtcbiAgLy8gUmVzdG9yZSB0aGUgU2VsZWN0MiBBTUQgbG9hZGVyIHNvIGl0IGNhbiBiZSB1c2VkXG4gIC8vIE5lZWRlZCBtb3N0bHkgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aGVyZSB0aGUgbG9hZGVyIGlzIG5vdCBpbnNlcnRlZFxuICBpZiAoalF1ZXJ5ICYmIGpRdWVyeS5mbiAmJiBqUXVlcnkuZm4uc2VsZWN0MiAmJiBqUXVlcnkuZm4uc2VsZWN0Mi5hbWQpIHtcbiAgICB2YXIgUzIgPSBqUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7XG4gIH1cbnZhciBTMjsoZnVuY3Rpb24gKCkgeyBpZiAoIVMyIHx8ICFTMi5yZXF1aXJlanMpIHtcbmlmICghUzIpIHsgUzIgPSB7fTsgfSBlbHNlIHsgcmVxdWlyZSA9IFMyOyB9XG4vKipcbiAqIEBsaWNlbnNlIGFsbW9uZCAwLjMuMyBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvYWxtb25kL0xJQ0VOU0VcbiAqL1xuLy9Hb2luZyBzbG9wcHkgdG8gYXZvaWQgJ3VzZSBzdHJpY3QnIHN0cmluZyBjb3N0LCBidXQgc3RyaWN0IHByYWN0aWNlcyBzaG91bGRcbi8vYmUgZm9sbG93ZWQuXG4vKmdsb2JhbCBzZXRUaW1lb3V0OiBmYWxzZSAqL1xuXG52YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7XG4oZnVuY3Rpb24gKHVuZGVmKSB7XG4gICAgdmFyIG1haW4sIHJlcSwgbWFrZU1hcCwgaGFuZGxlcnMsXG4gICAgICAgIGRlZmluZWQgPSB7fSxcbiAgICAgICAgd2FpdGluZyA9IHt9LFxuICAgICAgICBjb25maWcgPSB7fSxcbiAgICAgICAgZGVmaW5pbmcgPSB7fSxcbiAgICAgICAgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgICAgYXBzID0gW10uc2xpY2UsXG4gICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1xcLmpzJC87XG5cbiAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkge1xuICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG9cbiAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlXG4gICAgICogdG8uXG4gICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lKSB7XG4gICAgICAgIHZhciBuYW1lUGFydHMsIG5hbWVTZWdtZW50LCBtYXBWYWx1ZSwgZm91bmRNYXAsIGxhc3RJbmRleCxcbiAgICAgICAgICAgIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgaSwgaiwgcGFydCwgbm9ybWFsaXplZEJhc2VQYXJ0cyxcbiAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KFwiL1wiKSxcbiAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsXG4gICAgICAgICAgICBzdGFyTWFwID0gKG1hcCAmJiBtYXBbJyonXSkgfHwge307XG5cbiAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLlxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgLy8gSWYgd2FudGluZyBub2RlIElEIGNvbXBhdGliaWxpdHksIHN0cmlwIC5qcyBmcm9tIGVuZFxuICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmxcbiAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5qcyBvciBub24gLmpzIHRvIG1hcFxuICAgICAgICAgICAgLy8gdG8gc2FtZSBmaWxlLlxuICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5kZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWVcbiAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykge1xuICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCxcbiAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzXG4gICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvXG4gICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3JcbiAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi5cbiAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vc3RhcnQgdHJpbURvdHNcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5hbWVbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLFxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaFxuICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludFxuICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBuYW1lWzJdID09PSAnLi4nKSB8fCBuYW1lW2kgLSAxXSA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3BsaWNlKGkgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZW5kIHRyaW1Eb3RzXG5cbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuXG4gICAgICAgIGlmICgoYmFzZVBhcnRzIHx8IHN0YXJNYXApICYmIG1hcCkge1xuICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7XG4gICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbihcIi9cIik7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuXG4gICAgICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0IHRvIHNtYWxsZXN0IGxlbmd0aHMgb2YgYmFzZVBhcnRzLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiYXNlUGFydHMubGVuZ3RoOyBqID4gMDsgaiAtPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcFtiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyAgY29uZmlnLCBmaW5kIGlmIGl0IGhhcyBvbmUgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gbWFwVmFsdWVbbmFtZVNlZ21lbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCxcbiAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmdcbiAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuXG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBzdGFyTWFwW25hbWVTZWdtZW50XSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZFN0YXJNYXAgPSBzdGFyTWFwW25hbWVTZWdtZW50XTtcbiAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHtcbiAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDtcbiAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7XG4gICAgICAgICAgICAgICAgbmFtZVBhcnRzLnNwbGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTtcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VSZXF1aXJlKHJlbE5hbWUsIGZvcmNlU3luYykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy9BIHZlcnNpb24gb2YgYSByZXF1aXJlIGZ1bmN0aW9uIHRoYXQgcGFzc2VzIGEgbW9kdWxlTmFtZVxuICAgICAgICAgICAgLy92YWx1ZSBmb3IgaXRlbXMgdGhhdCBtYXkgbmVlZCB0b1xuICAgICAgICAgICAgLy9sb29rIHVwIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBtb2R1bGVOYW1lXG4gICAgICAgICAgICB2YXIgYXJncyA9IGFwcy5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgICAgIC8vSWYgZmlyc3QgYXJnIGlzIG5vdCByZXF1aXJlKCdzdHJpbmcnKSwgYW5kIHRoZXJlIGlzIG9ubHlcbiAgICAgICAgICAgIC8vb25lIGFyZywgaXQgaXMgdGhlIGFycmF5IGZvcm0gd2l0aG91dCBhIGNhbGxiYWNrLiBJbnNlcnRcbiAgICAgICAgICAgIC8vYSBudWxsIHNvIHRoYXQgdGhlIGZvbGxvd2luZyBjb25jYXQgaXMgY29ycmVjdC5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycgJiYgYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVxLmFwcGx5KHVuZGVmLCBhcmdzLmNvbmNhdChbcmVsTmFtZSwgZm9yY2VTeW5jXSkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VOb3JtYWxpemUocmVsTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcmVsTmFtZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUxvYWQoZGVwTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBkZWZpbmVkW2RlcE5hbWVdID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsbERlcChuYW1lKSB7XG4gICAgICAgIGlmIChoYXNQcm9wKHdhaXRpbmcsIG5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IHdhaXRpbmdbbmFtZV07XG4gICAgICAgICAgICBkZWxldGUgd2FpdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIGRlZmluaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIG1haW4uYXBwbHkodW5kZWYsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIG5hbWUpICYmICFoYXNQcm9wKGRlZmluaW5nLCBuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyAnICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmluZWRbbmFtZV07XG4gICAgfVxuXG4gICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2luLCByZXNvdXJjZV1cbiAgICAvL3dpdGggdGhlIHBsdWdpbiBiZWluZyB1bmRlZmluZWQgaWYgdGhlIG5hbWVcbiAgICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguXG4gICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkge1xuICAgICAgICB2YXIgcHJlZml4LFxuICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3ByZWZpeCwgbmFtZV07XG4gICAgfVxuXG4gICAgLy9DcmVhdGVzIGEgcGFydHMgYXJyYXkgZm9yIGEgcmVsTmFtZSB3aGVyZSBmaXJzdCBwYXJ0IGlzIHBsdWdpbiBJRCxcbiAgICAvL3NlY29uZCBwYXJ0IGlzIHJlc291cmNlIElELiBBc3N1bWVzIHJlbE5hbWUgaGFzIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLlxuICAgIGZ1bmN0aW9uIG1ha2VSZWxQYXJ0cyhyZWxOYW1lKSB7XG4gICAgICAgIHJldHVybiByZWxOYW1lID8gc3BsaXRQcmVmaXgocmVsTmFtZSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIG5hbWUgbWFwLCBub3JtYWxpemluZyB0aGUgbmFtZSwgYW5kIHVzaW5nIGEgcGx1Z2luXG4gICAgICogZm9yIG5vcm1hbGl6YXRpb24gaWYgbmVjZXNzYXJ5LiBHcmFicyBhIHJlZiB0byBwbHVnaW5cbiAgICAgKiB0b28sIGFzIGFuIG9wdGltaXphdGlvbi5cbiAgICAgKi9cbiAgICBtYWtlTWFwID0gZnVuY3Rpb24gKG5hbWUsIHJlbFBhcnRzKSB7XG4gICAgICAgIHZhciBwbHVnaW4sXG4gICAgICAgICAgICBwYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpLFxuICAgICAgICAgICAgcHJlZml4ID0gcGFydHNbMF0sXG4gICAgICAgICAgICByZWxSZXNvdXJjZU5hbWUgPSByZWxQYXJ0c1sxXTtcblxuICAgICAgICBuYW1lID0gcGFydHNbMV07XG5cbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcmVsUmVzb3VyY2VOYW1lKTtcbiAgICAgICAgICAgIHBsdWdpbiA9IGNhbGxEZXAocHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vTm9ybWFsaXplIGFjY29yZGluZ1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICBpZiAocGx1Z2luICYmIHBsdWdpbi5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBtYWtlTm9ybWFsaXplKHJlbFJlc291cmNlTmFtZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplKG5hbWUsIHJlbFJlc291cmNlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplKG5hbWUsIHJlbFJlc291cmNlTmFtZSk7XG4gICAgICAgICAgICBwYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpO1xuICAgICAgICAgICAgcHJlZml4ID0gcGFydHNbMF07XG4gICAgICAgICAgICBuYW1lID0gcGFydHNbMV07XG4gICAgICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luID0gY2FsbERlcChwcmVmaXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9Vc2luZyByaWRpY3Vsb3VzIHByb3BlcnR5IG5hbWVzIGZvciBzcGFjZSByZWFzb25zXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmOiBwcmVmaXggPyBwcmVmaXggKyAnIScgKyBuYW1lIDogbmFtZSwgLy9mdWxsTmFtZVxuICAgICAgICAgICAgbjogbmFtZSxcbiAgICAgICAgICAgIHByOiBwcmVmaXgsXG4gICAgICAgICAgICBwOiBwbHVnaW5cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbWFrZUNvbmZpZyhuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGNvbmZpZyAmJiBjb25maWcuY29uZmlnICYmIGNvbmZpZy5jb25maWdbbmFtZV0pIHx8IHt9O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhbmRsZXJzID0ge1xuICAgICAgICByZXF1aXJlOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VSZXF1aXJlKG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBleHBvcnRzOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgdmFyIGUgPSBkZWZpbmVkW25hbWVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRlZmluZWRbbmFtZV0gPSB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IG5hbWUsXG4gICAgICAgICAgICAgICAgdXJpOiAnJyxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBkZWZpbmVkW25hbWVdLFxuICAgICAgICAgICAgICAgIGNvbmZpZzogbWFrZUNvbmZpZyhuYW1lKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBtYWluID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lKSB7XG4gICAgICAgIHZhciBjanNNb2R1bGUsIGRlcE5hbWUsIHJldCwgbWFwLCBpLCByZWxQYXJ0cyxcbiAgICAgICAgICAgIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgIGNhbGxiYWNrVHlwZSA9IHR5cGVvZiBjYWxsYmFjayxcbiAgICAgICAgICAgIHVzaW5nRXhwb3J0cztcblxuICAgICAgICAvL1VzZSBuYW1lIGlmIG5vIHJlbE5hbWVcbiAgICAgICAgcmVsTmFtZSA9IHJlbE5hbWUgfHwgbmFtZTtcbiAgICAgICAgcmVsUGFydHMgPSBtYWtlUmVsUGFydHMocmVsTmFtZSk7XG5cbiAgICAgICAgLy9DYWxsIHRoZSBjYWxsYmFjayB0byBkZWZpbmUgdGhlIG1vZHVsZSwgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoY2FsbGJhY2tUeXBlID09PSAndW5kZWZpbmVkJyB8fCBjYWxsYmFja1R5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIGRlZmluZWQgZGVwZW5kZW5jaWVzIGFuZCBwYXNzIHRoZSBvcmRlcmVkXG4gICAgICAgICAgICAvL3ZhbHVlcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgICAgICAvL0RlZmF1bHQgdG8gW3JlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZV0gaWYgbm8gZGVwc1xuICAgICAgICAgICAgZGVwcyA9ICFkZXBzLmxlbmd0aCAmJiBjYWxsYmFjay5sZW5ndGggPyBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXSA6IGRlcHM7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGVwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNYXAoZGVwc1tpXSwgcmVsUGFydHMpO1xuICAgICAgICAgICAgICAgIGRlcE5hbWUgPSBtYXAuZjtcblxuICAgICAgICAgICAgICAgIC8vRmFzdCBwYXRoIENvbW1vbkpTIHN0YW5kYXJkIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICBpZiAoZGVwTmFtZSA9PT0gXCJyZXF1aXJlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGhhbmRsZXJzLnJlcXVpcmUobmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXBOYW1lID09PSBcImV4cG9ydHNcIikge1xuICAgICAgICAgICAgICAgICAgICAvL0NvbW1vbkpTIG1vZHVsZSBzcGVjIDEuMVxuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gaGFuZGxlcnMuZXhwb3J0cyhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdXNpbmdFeHBvcnRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcE5hbWUgPT09IFwibW9kdWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Db21tb25KUyBtb2R1bGUgc3BlYyAxLjFcbiAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gYXJnc1tpXSA9IGhhbmRsZXJzLm1vZHVsZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhc1Byb3AoZGVmaW5lZCwgZGVwTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Byb3Aod2FpdGluZywgZGVwTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Byb3AoZGVmaW5pbmcsIGRlcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjYWxsRGVwKGRlcE5hbWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwLnApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwLnAubG9hZChtYXAubiwgbWFrZVJlcXVpcmUocmVsTmFtZSwgdHJ1ZSksIG1ha2VMb2FkKGRlcE5hbWUpLCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBkZWZpbmVkW2RlcE5hbWVdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBtaXNzaW5nICcgKyBkZXBOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrID8gY2FsbGJhY2suYXBwbHkoZGVmaW5lZFtuYW1lXSwgYXJncykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgLy9JZiBzZXR0aW5nIGV4cG9ydHMgdmlhIFwibW9kdWxlXCIgaXMgaW4gcGxheSxcbiAgICAgICAgICAgICAgICAvL2Zhdm9yIHRoYXQgb3ZlciByZXR1cm4gdmFsdWUgYW5kIGV4cG9ydHMuIEFmdGVyIHRoYXQsXG4gICAgICAgICAgICAgICAgLy9mYXZvciBhIG5vbi11bmRlZmluZWQgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cyB1c2UuXG4gICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSAmJiBjanNNb2R1bGUuZXhwb3J0cyAhPT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5leHBvcnRzICE9PSBkZWZpbmVkW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZWRbbmFtZV0gPSBjanNNb2R1bGUuZXhwb3J0cztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldCAhPT0gdW5kZWYgfHwgIXVzaW5nRXhwb3J0cykge1xuICAgICAgICAgICAgICAgICAgICAvL1VzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW25hbWVdID0gcmV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAvL01heSBqdXN0IGJlIGFuIG9iamVjdCBkZWZpbml0aW9uIGZvciB0aGUgbW9kdWxlLiBPbmx5XG4gICAgICAgICAgICAvL3dvcnJ5IGFib3V0IGRlZmluaW5nIGlmIGhhdmUgYSBtb2R1bGUgbmFtZS5cbiAgICAgICAgICAgIGRlZmluZWRbbmFtZV0gPSBjYWxsYmFjaztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXF1aXJlanMgPSByZXF1aXJlID0gcmVxID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lLCBmb3JjZVN5bmMsIGFsdCkge1xuICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyc1tkZXBzXSkge1xuICAgICAgICAgICAgICAgIC8vY2FsbGJhY2sgaW4gdGhpcyBjYXNlIGlzIHJlYWxseSByZWxOYW1lXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vSnVzdCByZXR1cm4gdGhlIG1vZHVsZSB3YW50ZWQuIEluIHRoaXMgc2NlbmFyaW8sIHRoZVxuICAgICAgICAgICAgLy9kZXBzIGFyZyBpcyB0aGUgbW9kdWxlIG5hbWUsIGFuZCBzZWNvbmQgYXJnIChpZiBwYXNzZWQpXG4gICAgICAgICAgICAvL2lzIGp1c3QgdGhlIHJlbE5hbWUuXG4gICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxEZXAobWFrZU1hcChkZXBzLCBtYWtlUmVsUGFydHMoY2FsbGJhY2spKS5mKTtcbiAgICAgICAgfSBlbHNlIGlmICghZGVwcy5zcGxpY2UpIHtcbiAgICAgICAgICAgIC8vZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QsIG5vdCBhbiBhcnJheS5cbiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmRlcHMpIHtcbiAgICAgICAgICAgICAgICByZXEoY29uZmlnLmRlcHMsIGNvbmZpZy5jYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suc3BsaWNlKSB7XG4gICAgICAgICAgICAgICAgLy9jYWxsYmFjayBpcyBhbiBhcnJheSwgd2hpY2ggbWVhbnMgaXQgaXMgYSBkZXBlbmRlbmN5IGxpc3QuXG4gICAgICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcmVsTmFtZTtcbiAgICAgICAgICAgICAgICByZWxOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVwcyA9IHVuZGVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9TdXBwb3J0IHJlcXVpcmUoWydhJ10pXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgLy9JZiByZWxOYW1lIGlzIGEgZnVuY3Rpb24sIGl0IGlzIGFuIGVycmJhY2sgaGFuZGxlcixcbiAgICAgICAgLy9zbyByZW1vdmUgaXQuXG4gICAgICAgIGlmICh0eXBlb2YgcmVsTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVsTmFtZSA9IGZvcmNlU3luYztcbiAgICAgICAgICAgIGZvcmNlU3luYyA9IGFsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2ltdWxhdGUgYXN5bmMgY2FsbGJhY2s7XG4gICAgICAgIGlmIChmb3JjZVN5bmMpIHtcbiAgICAgICAgICAgIG1haW4odW5kZWYsIGRlcHMsIGNhbGxiYWNrLCByZWxOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vVXNpbmcgYSBub24temVybyB2YWx1ZSBiZWNhdXNlIG9mIGNvbmNlcm4gZm9yIHdoYXQgb2xkIGJyb3dzZXJzXG4gICAgICAgICAgICAvL2RvLCBhbmQgbGF0ZXN0IGJyb3dzZXJzIFwidXBncmFkZVwiIHRvIDQgaWYgbG93ZXIgdmFsdWUgaXMgdXNlZDpcbiAgICAgICAgICAgIC8vaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGltZXJzLmh0bWwjZG9tLXdpbmRvd3RpbWVycy1zZXR0aW1lb3V0OlxuICAgICAgICAgICAgLy9JZiB3YW50IGEgdmFsdWUgaW1tZWRpYXRlbHksIHVzZSByZXF1aXJlKCdpZCcpIGluc3RlYWQgLS0gc29tZXRoaW5nXG4gICAgICAgICAgICAvL3RoYXQgd29ya3MgaW4gYWxtb25kIG9uIHRoZSBnbG9iYWwgbGV2ZWwsIGJ1dCBub3QgZ3VhcmFudGVlZCBhbmRcbiAgICAgICAgICAgIC8vdW5saWtlbHkgdG8gd29yayBpbiBvdGhlciBBTUQgaW1wbGVtZW50YXRpb25zLlxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbWFpbih1bmRlZiwgZGVwcywgY2FsbGJhY2ssIHJlbE5hbWUpO1xuICAgICAgICAgICAgfSwgNCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVxO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBKdXN0IGRyb3BzIHRoZSBjb25maWcgb24gdGhlIGZsb29yLCBidXQgcmV0dXJucyByZXEgaW4gY2FzZVxuICAgICAqIHRoZSBjb25maWcgcmV0dXJuIHZhbHVlIGlzIHVzZWQuXG4gICAgICovXG4gICAgcmVxLmNvbmZpZyA9IGZ1bmN0aW9uIChjZmcpIHtcbiAgICAgICAgcmV0dXJuIHJlcShjZmcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2UgbW9kdWxlIHJlZ2lzdHJ5IGZvciBkZWJ1Z2dpbmcgYW5kIHRvb2xpbmdcbiAgICAgKi9cbiAgICByZXF1aXJlanMuX2RlZmluZWQgPSBkZWZpbmVkO1xuXG4gICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VlIGFsbW9uZCBSRUFETUU6IGluY29ycmVjdCBtb2R1bGUgYnVpbGQsIG5vIG1vZHVsZSBuYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXNcbiAgICAgICAgaWYgKCFkZXBzLnNwbGljZSkge1xuICAgICAgICAgICAgLy9kZXBzIGlzIG5vdCBhbiBhcnJheSwgc28gcHJvYmFibHkgbWVhbnNcbiAgICAgICAgICAgIC8vYW4gb2JqZWN0IGxpdGVyYWwgb3IgZmFjdG9yeSBmdW5jdGlvbiBmb3JcbiAgICAgICAgICAgIC8vdGhlIHZhbHVlLiBBZGp1c3QgYXJncy5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwcztcbiAgICAgICAgICAgIGRlcHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBuYW1lKSAmJiAhaGFzUHJvcCh3YWl0aW5nLCBuYW1lKSkge1xuICAgICAgICAgICAgd2FpdGluZ1tuYW1lXSA9IFtuYW1lLCBkZXBzLCBjYWxsYmFja107XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lLmFtZCA9IHtcbiAgICAgICAgalF1ZXJ5OiB0cnVlXG4gICAgfTtcbn0oKSk7XG5cblMyLnJlcXVpcmVqcyA9IHJlcXVpcmVqcztTMi5yZXF1aXJlID0gcmVxdWlyZTtTMi5kZWZpbmUgPSBkZWZpbmU7XG59XG59KCkpO1xuUzIuZGVmaW5lKFwiYWxtb25kXCIsIGZ1bmN0aW9uKCl7fSk7XG5cbi8qIGdsb2JhbCBqUXVlcnk6ZmFsc2UsICQ6ZmFsc2UgKi9cblMyLmRlZmluZSgnanF1ZXJ5JyxbXSxmdW5jdGlvbiAoKSB7XG4gIHZhciBfJCA9IGpRdWVyeSB8fCAkO1xuXG4gIGlmIChfJCA9PSBudWxsICYmIGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnU2VsZWN0MjogQW4gaW5zdGFuY2Ugb2YgalF1ZXJ5IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgbGlicmFyeSB3YXMgbm90ICcgK1xuICAgICAgJ2ZvdW5kLiBNYWtlIHN1cmUgdGhhdCB5b3UgYXJlIGluY2x1ZGluZyBqUXVlcnkgYmVmb3JlIFNlbGVjdDIgb24geW91ciAnICtcbiAgICAgICd3ZWIgcGFnZS4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBfJDtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvdXRpbHMnLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIHZhciBVdGlscyA9IHt9O1xuXG4gIFV0aWxzLkV4dGVuZCA9IGZ1bmN0aW9uIChDaGlsZENsYXNzLCBTdXBlckNsYXNzKSB7XG4gICAgdmFyIF9faGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gICAgZnVuY3Rpb24gQmFzZUNvbnN0cnVjdG9yICgpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDaGlsZENsYXNzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBTdXBlckNsYXNzKSB7XG4gICAgICBpZiAoX19oYXNQcm9wLmNhbGwoU3VwZXJDbGFzcywga2V5KSkge1xuICAgICAgICBDaGlsZENsYXNzW2tleV0gPSBTdXBlckNsYXNzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgQmFzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFN1cGVyQ2xhc3MucHJvdG90eXBlO1xuICAgIENoaWxkQ2xhc3MucHJvdG90eXBlID0gbmV3IEJhc2VDb25zdHJ1Y3RvcigpO1xuICAgIENoaWxkQ2xhc3MuX19zdXBlcl9fID0gU3VwZXJDbGFzcy5wcm90b3R5cGU7XG5cbiAgICByZXR1cm4gQ2hpbGRDbGFzcztcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRNZXRob2RzICh0aGVDbGFzcykge1xuICAgIHZhciBwcm90byA9IHRoZUNsYXNzLnByb3RvdHlwZTtcblxuICAgIHZhciBtZXRob2RzID0gW107XG5cbiAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIHByb3RvKSB7XG4gICAgICB2YXIgbSA9IHByb3RvW21ldGhvZE5hbWVdO1xuXG4gICAgICBpZiAodHlwZW9mIG0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2ROYW1lID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtZXRob2RzLnB1c2gobWV0aG9kTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZHM7XG4gIH1cblxuICBVdGlscy5EZWNvcmF0ZSA9IGZ1bmN0aW9uIChTdXBlckNsYXNzLCBEZWNvcmF0b3JDbGFzcykge1xuICAgIHZhciBkZWNvcmF0ZWRNZXRob2RzID0gZ2V0TWV0aG9kcyhEZWNvcmF0b3JDbGFzcyk7XG4gICAgdmFyIHN1cGVyTWV0aG9kcyA9IGdldE1ldGhvZHMoU3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBEZWNvcmF0ZWRDbGFzcyAoKSB7XG4gICAgICB2YXIgdW5zaGlmdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0O1xuXG4gICAgICB2YXIgYXJnQ291bnQgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IubGVuZ3RoO1xuXG4gICAgICB2YXIgY2FsbGVkQ29uc3RydWN0b3IgPSBTdXBlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGFyZ0NvdW50ID4gMCkge1xuICAgICAgICB1bnNoaWZ0LmNhbGwoYXJndW1lbnRzLCBTdXBlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcik7XG5cbiAgICAgICAgY2FsbGVkQ29uc3RydWN0b3IgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgICB9XG5cbiAgICAgIGNhbGxlZENvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgRGVjb3JhdG9yQ2xhc3MuZGlzcGxheU5hbWUgPSBTdXBlckNsYXNzLmRpc3BsYXlOYW1lO1xuXG4gICAgZnVuY3Rpb24gY3RyICgpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBEZWNvcmF0ZWRDbGFzcztcbiAgICB9XG5cbiAgICBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGUgPSBuZXcgY3RyKCk7XG5cbiAgICBmb3IgKHZhciBtID0gMDsgbSA8IHN1cGVyTWV0aG9kcy5sZW5ndGg7IG0rKykge1xuICAgICAgdmFyIHN1cGVyTWV0aG9kID0gc3VwZXJNZXRob2RzW21dO1xuXG4gICAgICBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGVbc3VwZXJNZXRob2RdID1cbiAgICAgICAgU3VwZXJDbGFzcy5wcm90b3R5cGVbc3VwZXJNZXRob2RdO1xuICAgIH1cblxuICAgIHZhciBjYWxsZWRNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgICAgLy8gU3R1YiBvdXQgdGhlIG9yaWdpbmFsIG1ldGhvZCBpZiBpdCdzIG5vdCBkZWNvcmF0aW5nIGFuIGFjdHVhbCBtZXRob2RcbiAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICBpZiAobWV0aG9kTmFtZSBpbiBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGUpIHtcbiAgICAgICAgb3JpZ2luYWxNZXRob2QgPSBEZWNvcmF0ZWRDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV07XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvcmF0ZWRNZXRob2QgPSBEZWNvcmF0b3JDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV07XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1bnNoaWZ0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQ7XG5cbiAgICAgICAgdW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgb3JpZ2luYWxNZXRob2QpO1xuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZWRNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGVjb3JhdGVkTWV0aG9kcy5sZW5ndGg7IGQrKykge1xuICAgICAgdmFyIGRlY29yYXRlZE1ldGhvZCA9IGRlY29yYXRlZE1ldGhvZHNbZF07XG5cbiAgICAgIERlY29yYXRlZENsYXNzLnByb3RvdHlwZVtkZWNvcmF0ZWRNZXRob2RdID0gY2FsbGVkTWV0aG9kKGRlY29yYXRlZE1ldGhvZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIERlY29yYXRlZENsYXNzO1xuICB9O1xuXG4gIHZhciBPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0ge307XG4gIH07XG5cbiAgT2JzZXJ2YWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyB8fCB7fTtcblxuICAgIGlmIChldmVudCBpbiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgdGhpcy5saXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc1tldmVudF0gPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgfTtcblxuICBPYnNlcnZhYmxlLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuICAgIHZhciBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzIHx8IHt9O1xuXG4gICAgLy8gUGFyYW1zIHNob3VsZCBhbHdheXMgY29tZSBpbiBhcyBhbiBhcnJheVxuICAgIGlmIChwYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcGFyYW1zID0gW107XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cyB0byB0aGUgZXZlbnQsIHVzZSBhIHRlbXBvcmFyeSBvYmplY3RcbiAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcGFyYW1zLnB1c2goe30pO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgYF90eXBlYCBvZiB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBldmVudFxuICAgIHBhcmFtc1swXS5fdHlwZSA9IGV2ZW50O1xuXG4gICAgaWYgKGV2ZW50IGluIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLmludm9rZSh0aGlzLmxpc3RlbmVyc1tldmVudF0sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgfVxuXG4gICAgaWYgKCcqJyBpbiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgdGhpcy5pbnZva2UodGhpcy5saXN0ZW5lcnNbJyonXSwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG5cbiAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKGxpc3RlbmVycywgcGFyYW1zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfVxuICB9O1xuXG4gIFV0aWxzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlO1xuXG4gIFV0aWxzLmdlbmVyYXRlQ2hhcnMgPSBmdW5jdGlvbiAobGVuZ3RoKSB7XG4gICAgdmFyIGNoYXJzID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZG9tQ2hhciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDM2KTtcbiAgICAgIGNoYXJzICs9IHJhbmRvbUNoYXIudG9TdHJpbmcoMzYpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFycztcbiAgfTtcblxuICBVdGlscy5iaW5kID0gZnVuY3Rpb24gKGZ1bmMsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH07XG5cbiAgVXRpbHMuX2NvbnZlcnREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBmb3IgKHZhciBvcmlnaW5hbEtleSBpbiBkYXRhKSB7XG4gICAgICB2YXIga2V5cyA9IG9yaWdpbmFsS2V5LnNwbGl0KCctJyk7XG5cbiAgICAgIHZhciBkYXRhTGV2ZWwgPSBkYXRhO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1trXTtcblxuICAgICAgICAvLyBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlclxuICAgICAgICAvLyBCeSBkZWZhdWx0LCBkYXNoLXNlcGFyYXRlZCBiZWNvbWVzIGNhbWVsQ2FzZVxuICAgICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGlmICghKGtleSBpbiBkYXRhTGV2ZWwpKSB7XG4gICAgICAgICAgZGF0YUxldmVsW2tleV0gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrID09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGRhdGFMZXZlbFtrZXldID0gZGF0YVtvcmlnaW5hbEtleV07XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhTGV2ZWwgPSBkYXRhTGV2ZWxba2V5XTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGRhdGFbb3JpZ2luYWxLZXldO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIFV0aWxzLmhhc1Njcm9sbCA9IGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAvLyBBZGFwdGVkIGZyb20gdGhlIGZ1bmN0aW9uIGNyZWF0ZWQgYnkgQFNoYWRvd1NjcmlwdGVyXG4gICAgLy8gYW5kIGFkYXB0ZWQgYnkgQEJpbGxCYXJyeSBvbiB0aGUgU3RhY2sgRXhjaGFuZ2UgQ29kZSBSZXZpZXcgd2Vic2l0ZS5cbiAgICAvLyBUaGUgb3JpZ2luYWwgY29kZSBjYW4gYmUgZm91bmQgYXRcbiAgICAvLyBodHRwOi8vY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xLzEzMzM4XG4gICAgLy8gYW5kIHdhcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIFNpenpsZSBzZWxlY3RvciBlbmdpbmUuXG5cbiAgICB2YXIgJGVsID0gJChlbCk7XG4gICAgdmFyIG92ZXJmbG93WCA9IGVsLnN0eWxlLm92ZXJmbG93WDtcbiAgICB2YXIgb3ZlcmZsb3dZID0gZWwuc3R5bGUub3ZlcmZsb3dZO1xuXG4gICAgLy9DaGVjayBib3RoIHggYW5kIHkgZGVjbGFyYXRpb25zXG4gICAgaWYgKG92ZXJmbG93WCA9PT0gb3ZlcmZsb3dZICYmXG4gICAgICAgIChvdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IG92ZXJmbG93WSA9PT0gJ3Zpc2libGUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChvdmVyZmxvd1ggPT09ICdzY3JvbGwnIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAoJGVsLmlubmVySGVpZ2h0KCkgPCBlbC5zY3JvbGxIZWlnaHQgfHxcbiAgICAgICRlbC5pbm5lcldpZHRoKCkgPCBlbC5zY3JvbGxXaWR0aCk7XG4gIH07XG5cbiAgVXRpbHMuZXNjYXBlTWFya3VwID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciByZXBsYWNlTWFwID0ge1xuICAgICAgJ1xcXFwnOiAnJiM5MjsnLFxuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7JyxcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgJ1xcJyc6ICcmIzM5OycsXG4gICAgICAnLyc6ICcmIzQ3OydcbiAgICB9O1xuXG4gICAgLy8gRG8gbm90IHRyeSB0byBlc2NhcGUgdGhlIG1hcmt1cCBpZiBpdCdzIG5vdCBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgbWFya3VwICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKG1hcmt1cCkucmVwbGFjZSgvWyY8PlwiJ1xcL1xcXFxdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHJlcGxhY2VNYXBbbWF0Y2hdO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENhY2hlIG9iamVjdHMgaW4gVXRpbHMuX19jYWNoZSBpbnN0ZWFkIG9mICQuZGF0YSAoc2VlICM0MzQ2KVxuICBVdGlscy5fX2NhY2hlID0ge307XG5cbiAgdmFyIGlkID0gMDtcbiAgVXRpbHMuR2V0VW5pcXVlRWxlbWVudElkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAvLyBHZXQgYSB1bmlxdWUgZWxlbWVudCBJZC4gSWYgZWxlbWVudCBoYXMgbm8gaWQsXG4gICAgLy8gY3JlYXRlcyBhIG5ldyB1bmlxdWUgbnVtYmVyLCBzdG9yZXMgaXQgaW4gdGhlIGlkXG4gICAgLy8gYXR0cmlidXRlIGFuZCByZXR1cm5zIHRoZSBuZXcgaWQgd2l0aCBhIHByZWZpeC5cbiAgICAvLyBJZiBhbiBpZCBhbHJlYWR5IGV4aXN0cywgaXQgc2ltcGx5IHJldHVybnMgaXQgd2l0aCBhIHByZWZpeC5cblxuICAgIHZhciBzZWxlY3QySWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLWlkJyk7XG5cbiAgICBpZiAoc2VsZWN0MklkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBzZWxlY3QySWQ7XG4gICAgfVxuXG4gICAgLy8gSWYgZWxlbWVudCBoYXMgaWQsIHVzZSBpdC5cbiAgICBpZiAoZWxlbWVudC5pZCkge1xuICAgICAgc2VsZWN0MklkID0gJ3NlbGVjdDItZGF0YS0nICsgZWxlbWVudC5pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0MklkID0gJ3NlbGVjdDItZGF0YS0nICsgKCsraWQpLnRvU3RyaW5nKCkgK1xuICAgICAgICAnLScgKyBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNlbGVjdDItaWQnLCBzZWxlY3QySWQpO1xuXG4gICAgcmV0dXJuIHNlbGVjdDJJZDtcbiAgfTtcblxuICBVdGlscy5TdG9yZURhdGEgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAvLyBTdG9yZXMgYW4gaXRlbSBpbiB0aGUgY2FjaGUgZm9yIGEgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAgLy8gbmFtZSBpcyB0aGUgY2FjaGUga2V5LlxuICAgIHZhciBpZCA9IFV0aWxzLkdldFVuaXF1ZUVsZW1lbnRJZChlbGVtZW50KTtcbiAgICBpZiAoIVV0aWxzLl9fY2FjaGVbaWRdKSB7XG4gICAgICBVdGlscy5fX2NhY2hlW2lkXSA9IHt9O1xuICAgIH1cblxuICAgIFV0aWxzLl9fY2FjaGVbaWRdW25hbWVdID0gdmFsdWU7XG4gIH07XG5cbiAgVXRpbHMuR2V0RGF0YSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7XG4gICAgLy8gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgY2FjaGUgYnkgaXRzIGtleSAobmFtZSlcbiAgICAvLyBuYW1lIGlzIG9wdGlvbmFsLiBJZiBubyBuYW1lIHNwZWNpZmllZCwgcmV0dXJuXG4gICAgLy8gYWxsIGNhY2hlIGl0ZW1zIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAgLy8gYW5kIGZvciBhIHNwZWNpZmllZCBlbGVtZW50LlxuICAgIHZhciBpZCA9IFV0aWxzLkdldFVuaXF1ZUVsZW1lbnRJZChlbGVtZW50KTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgaWYgKFV0aWxzLl9fY2FjaGVbaWRdKSB7XG4gICAgICAgIGlmIChVdGlscy5fX2NhY2hlW2lkXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFV0aWxzLl9fY2FjaGVbaWRdW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkKGVsZW1lbnQpLmRhdGEobmFtZSk7IC8vIEZhbGxiYWNrIHRvIEhUTUw1IGRhdGEgYXR0cmlicy5cbiAgICAgIH1cbiAgICAgIHJldHVybiAkKGVsZW1lbnQpLmRhdGEobmFtZSk7IC8vIEZhbGxiYWNrIHRvIEhUTUw1IGRhdGEgYXR0cmlicy5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFV0aWxzLl9fY2FjaGVbaWRdO1xuICAgIH1cbiAgfTtcblxuICBVdGlscy5SZW1vdmVEYXRhID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAvLyBSZW1vdmVzIGFsbCBjYWNoZWQgaXRlbXMgZm9yIGEgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAgdmFyIGlkID0gVXRpbHMuR2V0VW5pcXVlRWxlbWVudElkKGVsZW1lbnQpO1xuICAgIGlmIChVdGlscy5fX2NhY2hlW2lkXSAhPSBudWxsKSB7XG4gICAgICBkZWxldGUgVXRpbHMuX19jYWNoZVtpZF07XG4gICAgfVxuXG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2VsZWN0Mi1pZCcpO1xuICB9O1xuXG4gIFV0aWxzLmNvcHlOb25JbnRlcm5hbENzc0NsYXNzZXMgPSBmdW5jdGlvbiAoZGVzdCwgc3JjKSB7XG4gICAgdmFyIGNsYXNzZXM7XG5cbiAgICB2YXIgZGVzdGluYXRpb25DbGFzc2VzID0gZGVzdC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICBkZXN0aW5hdGlvbkNsYXNzZXMgPSBkZXN0aW5hdGlvbkNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGF6eikge1xuICAgICAgLy8gU2F2ZSBhbGwgU2VsZWN0MiBjbGFzc2VzXG4gICAgICByZXR1cm4gY2xhenouaW5kZXhPZignc2VsZWN0Mi0nKSA9PT0gMDtcbiAgICB9KTtcblxuICAgIHZhciBzb3VyY2VDbGFzc2VzID0gc3JjLmdldEF0dHJpYnV0ZSgnY2xhc3MnKS50cmltKCkuc3BsaXQoL1xccysvKTtcblxuICAgIHNvdXJjZUNsYXNzZXMgPSBzb3VyY2VDbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhenopIHtcbiAgICAgIC8vIE9ubHkgY29weSBub24tU2VsZWN0MiBjbGFzc2VzXG4gICAgICByZXR1cm4gY2xhenouaW5kZXhPZignc2VsZWN0Mi0nKSAhPT0gMDtcbiAgICB9KTtcblxuICAgIHZhciByZXBsYWNlbWVudHMgPSBkZXN0aW5hdGlvbkNsYXNzZXMuY29uY2F0KHNvdXJjZUNsYXNzZXMpO1xuXG4gICAgZGVzdC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZW1lbnRzLmpvaW4oJyAnKSk7XG4gIH07XG5cbiAgcmV0dXJuIFV0aWxzO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9yZXN1bHRzJyxbXG4gICdqcXVlcnknLFxuICAnLi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBVdGlscykge1xuICBmdW5jdGlvbiBSZXN1bHRzICgkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgdGhpcy5kYXRhID0gZGF0YUFkYXB0ZXI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIFJlc3VsdHMuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoUmVzdWx0cywgVXRpbHMuT2JzZXJ2YWJsZSk7XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkcmVzdWx0cyA9ICQoXG4gICAgICAnPHVsIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zXCIgcm9sZT1cImxpc3Rib3hcIj48L3VsPidcbiAgICApO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ211bHRpcGxlJykpIHtcbiAgICAgICRyZXN1bHRzLmF0dHIoJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLiRyZXN1bHRzID0gJHJlc3VsdHM7XG5cbiAgICByZXR1cm4gJHJlc3VsdHM7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kcmVzdWx0cy5lbXB0eSgpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmRpc3BsYXlNZXNzYWdlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmhpZGVMb2FkaW5nKCk7XG5cbiAgICB2YXIgJG1lc3NhZ2UgPSAkKFxuICAgICAgJzxsaSByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIicgK1xuICAgICAgJyBjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uXCI+PC9saT4nXG4gICAgKTtcblxuICAgIHZhciBtZXNzYWdlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KHBhcmFtcy5tZXNzYWdlKTtcblxuICAgICRtZXNzYWdlLmFwcGVuZChcbiAgICAgIGVzY2FwZU1hcmt1cChcbiAgICAgICAgbWVzc2FnZShwYXJhbXMuYXJncylcbiAgICAgIClcbiAgICApO1xuXG4gICAgJG1lc3NhZ2VbMF0uY2xhc3NOYW1lICs9ICcgc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJztcblxuICAgIHRoaXMuJHJlc3VsdHMuYXBwZW5kKCRtZXNzYWdlKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5oaWRlTWVzc2FnZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kcmVzdWx0cy5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19tZXNzYWdlJykucmVtb3ZlKCk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0aGlzLmhpZGVMb2FkaW5nKCk7XG5cbiAgICB2YXIgJG9wdGlvbnMgPSBbXTtcblxuICAgIGlmIChkYXRhLnJlc3VsdHMgPT0gbnVsbCB8fCBkYXRhLnJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy4kcmVzdWx0cy5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcbiAgICAgICAgICBtZXNzYWdlOiAnbm9SZXN1bHRzJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEucmVzdWx0cyA9IHRoaXMuc29ydChkYXRhLnJlc3VsdHMpO1xuXG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLnJlc3VsdHMubGVuZ3RoOyBkKyspIHtcbiAgICAgIHZhciBpdGVtID0gZGF0YS5yZXN1bHRzW2RdO1xuXG4gICAgICB2YXIgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGl0ZW0pO1xuXG4gICAgICAkb3B0aW9ucy5wdXNoKCRvcHRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuJHJlc3VsdHMuYXBwZW5kKCRvcHRpb25zKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uICgkcmVzdWx0cywgJGRyb3Bkb3duKSB7XG4gICAgdmFyICRyZXN1bHRzQ29udGFpbmVyID0gJGRyb3Bkb3duLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHMnKTtcbiAgICAkcmVzdWx0c0NvbnRhaW5lci5hcHBlbmQoJHJlc3VsdHMpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLnNvcnQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBzb3J0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdzb3J0ZXInKTtcblxuICAgIHJldHVybiBzb3J0ZXIoZGF0YSk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuaGlnaGxpZ2h0Rmlyc3RJdGVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJHJlc3VsdHNcbiAgICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcblxuICAgIHZhciAkc2VsZWN0ZWQgPSAkb3B0aW9ucy5maWx0ZXIoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWQnKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0ZWQgb3B0aW9uc1xuICAgIGlmICgkc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIG9wdGlvbnMsIGhpZ2hsaWdodCB0aGUgZmlyc3RcbiAgICAgICRzZWxlY3RlZC5maXJzdCgpLnRyaWdnZXIoJ21vdXNlZW50ZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHNlbGVjdGVkIG9wdGlvbnMsIGhpZ2hsaWdodCB0aGUgZmlyc3Qgb3B0aW9uXG4gICAgICAvLyBpbiB0aGUgZHJvcGRvd25cbiAgICAgICRvcHRpb25zLmZpcnN0KCkudHJpZ2dlcignbW91c2VlbnRlcicpO1xuICAgIH1cblxuICAgIHRoaXMuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLnNldENsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5kYXRhLmN1cnJlbnQoZnVuY3Rpb24gKHNlbGVjdGVkKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRJZHMgPSBzZWxlY3RlZC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHMuaWQudG9TdHJpbmcoKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzXG4gICAgICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcblxuICAgICAgJG9wdGlvbnMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkb3B0aW9uID0gJCh0aGlzKTtcblxuICAgICAgICB2YXIgaXRlbSA9IFV0aWxzLkdldERhdGEodGhpcywgJ2RhdGEnKTtcblxuICAgICAgICAvLyBpZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2hlbiBjb21wYXJpbmdcbiAgICAgICAgdmFyIGlkID0gJycgKyBpdGVtLmlkO1xuXG4gICAgICAgIGlmICgoaXRlbS5lbGVtZW50ICE9IG51bGwgJiYgaXRlbS5lbGVtZW50LnNlbGVjdGVkKSB8fFxuICAgICAgICAgICAgKGl0ZW0uZWxlbWVudCA9PSBudWxsICYmIHNlbGVjdGVkSWRzLmluZGV4T2YoaWQpID4gLTEpKSB7XG4gICAgICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWQnKTtcbiAgICAgICAgICAkb3B0aW9uLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkJyk7XG4gICAgICAgICAgJG9wdGlvbi5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuc2hvd0xvYWRpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgdGhpcy5oaWRlTG9hZGluZygpO1xuXG4gICAgdmFyIGxvYWRpbmdNb3JlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2hpbmcnKTtcblxuICAgIHZhciBsb2FkaW5nID0ge1xuICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgdGV4dDogbG9hZGluZ01vcmUocGFyYW1zKVxuICAgIH07XG4gICAgdmFyICRsb2FkaW5nID0gdGhpcy5vcHRpb24obG9hZGluZyk7XG4gICAgJGxvYWRpbmcuY2xhc3NOYW1lICs9ICcgbG9hZGluZy1yZXN1bHRzJztcblxuICAgIHRoaXMuJHJlc3VsdHMucHJlcGVuZCgkbG9hZGluZyk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuaGlkZUxvYWRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kcmVzdWx0cy5maW5kKCcubG9hZGluZy1yZXN1bHRzJykucmVtb3ZlKCk7XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24nKTtcbiAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGFibGUnKTtcblxuICAgIHZhciBhdHRycyA9IHtcbiAgICAgICdyb2xlJzogJ29wdGlvbidcbiAgICB9O1xuXG4gICAgdmFyIG1hdGNoZXMgPSB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgICAgd2luZG93LkVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgICB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXG4gICAgaWYgKChkYXRhLmVsZW1lbnQgIT0gbnVsbCAmJiBtYXRjaGVzLmNhbGwoZGF0YS5lbGVtZW50LCAnOmRpc2FibGVkJykpIHx8XG4gICAgICAgIChkYXRhLmVsZW1lbnQgPT0gbnVsbCAmJiBkYXRhLmRpc2FibGVkKSkge1xuICAgICAgYXR0cnNbJ2FyaWEtZGlzYWJsZWQnXSA9ICd0cnVlJztcblxuICAgICAgb3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG4gICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWRpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaWQgPT0gbnVsbCkge1xuICAgICAgb3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuX3Jlc3VsdElkICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbi5pZCA9IGRhdGEuX3Jlc3VsdElkO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICBvcHRpb24udGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7XG4gICAgICBhdHRycy5yb2xlID0gJ2dyb3VwJztcbiAgICAgIGF0dHJzWydhcmlhLWxhYmVsJ10gPSBkYXRhLnRleHQ7XG5cbiAgICAgIG9wdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1ncm91cCcpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cnMpIHtcbiAgICAgIHZhciB2YWwgPSBhdHRyc1thdHRyXTtcblxuICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZShhdHRyLCB2YWwpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7XG4gICAgICB2YXIgJG9wdGlvbiA9ICQob3B0aW9uKTtcblxuICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG4gICAgICBsYWJlbC5jbGFzc05hbWUgPSAnc2VsZWN0Mi1yZXN1bHRzX19ncm91cCc7XG5cbiAgICAgIHRoaXMudGVtcGxhdGUoZGF0YSwgbGFiZWwpO1xuXG4gICAgICB2YXIgJGNoaWxkcmVuID0gW107XG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgZGF0YS5jaGlsZHJlbi5sZW5ndGg7IGMrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBkYXRhLmNoaWxkcmVuW2NdO1xuXG4gICAgICAgIHZhciAkY2hpbGQgPSB0aGlzLm9wdGlvbihjaGlsZCk7XG5cbiAgICAgICAgJGNoaWxkcmVuLnB1c2goJGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgdmFyICRjaGlsZHJlbkNvbnRhaW5lciA9ICQoJzx1bD48L3VsPicsIHtcbiAgICAgICAgJ2NsYXNzJzogJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9ucyBzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMtLW5lc3RlZCcsXG4gICAgICAgICdyb2xlJzogJ25vbmUnXG4gICAgICB9KTtcblxuICAgICAgJGNoaWxkcmVuQ29udGFpbmVyLmFwcGVuZCgkY2hpbGRyZW4pO1xuXG4gICAgICAkb3B0aW9uLmFwcGVuZChsYWJlbCk7XG4gICAgICAkb3B0aW9uLmFwcGVuZCgkY2hpbGRyZW5Db250YWluZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlKGRhdGEsIG9wdGlvbik7XG4gICAgfVxuXG4gICAgVXRpbHMuU3RvcmVEYXRhKG9wdGlvbiwgJ2RhdGEnLCBkYXRhKTtcblxuICAgIHJldHVybiBvcHRpb247XG4gIH07XG5cbiAgUmVzdWx0cy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdHMnO1xuXG4gICAgdGhpcy4kcmVzdWx0cy5hdHRyKCdpZCcsIGlkKTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICBzZWxmLmFwcGVuZChwYXJhbXMuZGF0YSk7XG5cbiAgICAgIGlmIChjb250YWluZXIuaXNPcGVuKCkpIHtcbiAgICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7XG4gICAgICAgIHNlbGYuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6YXBwZW5kJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi5hcHBlbmQocGFyYW1zLmRhdGEpO1xuXG4gICAgICBpZiAoY29udGFpbmVyLmlzT3BlbigpKSB7XG4gICAgICAgIHNlbGYuc2V0Q2xhc3NlcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdxdWVyeScsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuaGlkZU1lc3NhZ2VzKCk7XG4gICAgICBzZWxmLnNob3dMb2FkaW5nKHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY29udGFpbmVyLmlzT3BlbigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5zZXRDbGFzc2VzKCk7XG5cbiAgICAgIGlmIChzZWxmLm9wdGlvbnMuZ2V0KCdzY3JvbGxBZnRlclNlbGVjdCcpKSB7XG4gICAgICAgIHNlbGYuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFjb250YWluZXIuaXNPcGVuKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnNldENsYXNzZXMoKTtcblxuICAgICAgaWYgKHNlbGYub3B0aW9ucy5nZXQoJ3Njcm9sbEFmdGVyU2VsZWN0JykpIHtcbiAgICAgICAgc2VsZi5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW4sIGFyaWEtZXhwZW5kZWQ9XCJ0cnVlXCJcbiAgICAgIHNlbGYuJHJlc3VsdHMuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgIHNlbGYuc2V0Q2xhc3NlcygpO1xuICAgICAgc2VsZi5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCBhcmlhLWV4cGVuZGVkPVwiZmFsc2VcIlxuICAgICAgc2VsZi4kcmVzdWx0cy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICBzZWxmLiRyZXN1bHRzLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgIHNlbGYuJHJlc3VsdHMucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6dG9nZ2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRoaWdobGlnaHRlZCA9IHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cbiAgICAgIGlmICgkaGlnaGxpZ2h0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJGhpZ2hsaWdodGVkLnRyaWdnZXIoJ21vdXNldXAnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJGhpZ2hsaWdodGVkID0gc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblxuICAgICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEoJGhpZ2hsaWdodGVkWzBdLCAnZGF0YScpO1xuXG4gICAgICBpZiAoJGhpZ2hsaWdodGVkLmhhc0NsYXNzKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWQnKSkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoJ2Nsb3NlJywge30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7XG4gICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpwcmV2aW91cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSBzZWxmLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXG4gICAgICB2YXIgJG9wdGlvbnMgPSBzZWxmLiRyZXN1bHRzLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuXG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gJG9wdGlvbnMuaW5kZXgoJGhpZ2hsaWdodGVkKTtcblxuICAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgYXQgdGhlIHRvcCwgZG9uJ3QgbW92ZSBmdXJ0aGVyXG4gICAgICAvLyBJZiBubyBvcHRpb25zLCBjdXJyZW50SW5kZXggd2lsbCBiZSAtMVxuICAgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG5cbiAgICAgIC8vIElmIG5vbmUgYXJlIGhpZ2hsaWdodGVkLCBoaWdobGlnaHQgdGhlIGZpcnN0XG4gICAgICBpZiAoJGhpZ2hsaWdodGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBuZXh0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgJG5leHQgPSAkb3B0aW9ucy5lcShuZXh0SW5kZXgpO1xuXG4gICAgICAkbmV4dC50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5vZmZzZXQoKS50b3A7XG4gICAgICB2YXIgbmV4dFRvcCA9ICRuZXh0Lm9mZnNldCgpLnRvcDtcbiAgICAgIHZhciBuZXh0T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoKSArIChuZXh0VG9wIC0gY3VycmVudE9mZnNldCk7XG5cbiAgICAgIGlmIChuZXh0SW5kZXggPT09IDApIHtcbiAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoMCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHRUb3AgLSBjdXJyZW50T2Zmc2V0IDwgMCkge1xuICAgICAgICBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcChuZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpuZXh0JywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRoaWdobGlnaHRlZCA9IHNlbGYuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7XG5cbiAgICAgIHZhciAkb3B0aW9ucyA9IHNlbGYuJHJlc3VsdHMuZmluZCgnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyk7XG5cbiAgICAgIHZhciBjdXJyZW50SW5kZXggPSAkb3B0aW9ucy5pbmRleCgkaGlnaGxpZ2h0ZWQpO1xuXG4gICAgICB2YXIgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcblxuICAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBsYXN0IG9wdGlvbiwgc3RheSB0aGVyZVxuICAgICAgaWYgKG5leHRJbmRleCA+PSAkb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgJG5leHQgPSAkb3B0aW9ucy5lcShuZXh0SW5kZXgpO1xuXG4gICAgICAkbmV4dC50cmlnZ2VyKCdtb3VzZWVudGVyJyk7XG5cbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gc2VsZi4kcmVzdWx0cy5vZmZzZXQoKS50b3AgK1xuICAgICAgICBzZWxmLiRyZXN1bHRzLm91dGVySGVpZ2h0KGZhbHNlKTtcbiAgICAgIHZhciBuZXh0Qm90dG9tID0gJG5leHQub2Zmc2V0KCkudG9wICsgJG5leHQub3V0ZXJIZWlnaHQoZmFsc2UpO1xuICAgICAgdmFyIG5leHRPZmZzZXQgPSBzZWxmLiRyZXN1bHRzLnNjcm9sbFRvcCgpICsgbmV4dEJvdHRvbSAtIGN1cnJlbnRPZmZzZXQ7XG5cbiAgICAgIGlmIChuZXh0SW5kZXggPT09IDApIHtcbiAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoMCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHRCb3R0b20gPiBjdXJyZW50T2Zmc2V0KSB7XG4gICAgICAgIHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKG5leHRPZmZzZXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmZvY3VzJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgcGFyYW1zLmVsZW1lbnRbMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7XG4gICAgICBwYXJhbXMuZWxlbWVudFswXS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOm1lc3NhZ2UnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLmRpc3BsYXlNZXNzYWdlKHBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoJC5mbi5tb3VzZXdoZWVsKSB7XG4gICAgICB0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZXdoZWVsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHRvcCA9IHNlbGYuJHJlc3VsdHMuc2Nyb2xsVG9wKCk7XG5cbiAgICAgICAgdmFyIGJvdHRvbSA9IHNlbGYuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodCAtIHRvcCArIGUuZGVsdGFZO1xuXG4gICAgICAgIHZhciBpc0F0VG9wID0gZS5kZWx0YVkgPiAwICYmIHRvcCAtIGUuZGVsdGFZIDw9IDA7XG4gICAgICAgIHZhciBpc0F0Qm90dG9tID0gZS5kZWx0YVkgPCAwICYmIGJvdHRvbSA8PSBzZWxmLiRyZXN1bHRzLmhlaWdodCgpO1xuXG4gICAgICAgIGlmIChpc0F0VG9wKSB7XG4gICAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoMCk7XG5cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0F0Qm90dG9tKSB7XG4gICAgICAgICAgc2VsZi4kcmVzdWx0cy5zY3JvbGxUb3AoXG4gICAgICAgICAgICBzZWxmLiRyZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSBzZWxmLiRyZXN1bHRzLmhlaWdodCgpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZXVwJywgJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScsXG4gICAgICBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuXG4gICAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEodGhpcywgJ2RhdGEnKTtcblxuICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKCdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0ZWQnKSkge1xuICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmdldCgnbXVsdGlwbGUnKSkge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigndW5zZWxlY3QnLCB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi50cmlnZ2VyKCdjbG9zZScsIHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dCxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRyZXN1bHRzLm9uKCdtb3VzZWVudGVyJywgJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScsXG4gICAgICBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICB2YXIgZGF0YSA9IFV0aWxzLkdldERhdGEodGhpcywgJ2RhdGEnKTtcblxuICAgICAgc2VsZi5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKVxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJylcbiAgICAgICAgICAuYXR0cignYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuXG4gICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6Zm9jdXMnLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGVsZW1lbnQ6ICQodGhpcylcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGhpZ2hsaWdodGVkID0gdGhpcy4kcmVzdWx0c1xuICAgIC5maW5kKCcuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkJyk7XG5cbiAgICByZXR1cm4gJGhpZ2hsaWdodGVkO1xuICB9O1xuXG4gIFJlc3VsdHMucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kcmVzdWx0cy5yZW1vdmUoKTtcbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS5lbnN1cmVIaWdobGlnaHRWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkaGlnaGxpZ2h0ZWQgPSB0aGlzLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO1xuXG4gICAgaWYgKCRoaWdobGlnaHRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRyZXN1bHRzLmZpbmQoJy5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0tc2VsZWN0YWJsZScpO1xuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9ICRvcHRpb25zLmluZGV4KCRoaWdobGlnaHRlZCk7XG5cbiAgICB2YXIgY3VycmVudE9mZnNldCA9IHRoaXMuJHJlc3VsdHMub2Zmc2V0KCkudG9wO1xuICAgIHZhciBuZXh0VG9wID0gJGhpZ2hsaWdodGVkLm9mZnNldCgpLnRvcDtcbiAgICB2YXIgbmV4dE9mZnNldCA9IHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAobmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgdmFyIG9mZnNldERlbHRhID0gbmV4dFRvcCAtIGN1cnJlbnRPZmZzZXQ7XG4gICAgbmV4dE9mZnNldCAtPSAkaGlnaGxpZ2h0ZWQub3V0ZXJIZWlnaHQoZmFsc2UpICogMjtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPD0gMikge1xuICAgICAgdGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoMCk7XG4gICAgfSBlbHNlIGlmIChvZmZzZXREZWx0YSA+IHRoaXMuJHJlc3VsdHMub3V0ZXJIZWlnaHQoKSB8fCBvZmZzZXREZWx0YSA8IDApIHtcbiAgICAgIHRoaXMuJHJlc3VsdHMuc2Nyb2xsVG9wKG5leHRPZmZzZXQpO1xuICAgIH1cbiAgfTtcblxuICBSZXN1bHRzLnByb3RvdHlwZS50ZW1wbGF0ZSA9IGZ1bmN0aW9uIChyZXN1bHQsIGNvbnRhaW5lcikge1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlUmVzdWx0Jyk7XG4gICAgdmFyIGVzY2FwZU1hcmt1cCA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpO1xuXG4gICAgdmFyIGNvbnRlbnQgPSB0ZW1wbGF0ZShyZXN1bHQsIGNvbnRhaW5lcik7XG5cbiAgICBpZiAoY29udGVudCA9PSBudWxsKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGVzY2FwZU1hcmt1cChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChjb250YWluZXIpLmFwcGVuZChjb250ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdHM7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2tleXMnLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICB2YXIgS0VZUyA9IHtcbiAgICBCQUNLU1BBQ0U6IDgsXG4gICAgVEFCOiA5LFxuICAgIEVOVEVSOiAxMyxcbiAgICBTSElGVDogMTYsXG4gICAgQ1RSTDogMTcsXG4gICAgQUxUOiAxOCxcbiAgICBFU0M6IDI3LFxuICAgIFNQQUNFOiAzMixcbiAgICBQQUdFX1VQOiAzMyxcbiAgICBQQUdFX0RPV046IDM0LFxuICAgIEVORDogMzUsXG4gICAgSE9NRTogMzYsXG4gICAgTEVGVDogMzcsXG4gICAgVVA6IDM4LFxuICAgIFJJR0hUOiAzOSxcbiAgICBET1dOOiA0MCxcbiAgICBERUxFVEU6IDQ2XG4gIH07XG5cbiAgcmV0dXJuIEtFWVM7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9iYXNlJyxbXG4gICdqcXVlcnknLFxuICAnLi4vdXRpbHMnLFxuICAnLi4va2V5cydcbl0sIGZ1bmN0aW9uICgkLCBVdGlscywgS0VZUykge1xuICBmdW5jdGlvbiBCYXNlU2VsZWN0aW9uICgkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgQmFzZVNlbGVjdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChCYXNlU2VsZWN0aW9uLCBVdGlscy5PYnNlcnZhYmxlKTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRzZWxlY3Rpb24gPSAkKFxuICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25cIiByb2xlPVwiY29tYm9ib3hcIiAnICtcbiAgICAgICcgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj4nICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG5cbiAgICB0aGlzLl90YWJpbmRleCA9IDA7XG5cbiAgICBpZiAoVXRpbHMuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLCAnb2xkLXRhYmluZGV4JykgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSBVdGlscy5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnKTtcbiAgICB9XG5cbiAgICAkc2VsZWN0aW9uLmF0dHIoJ3RpdGxlJywgdGhpcy4kZWxlbWVudC5hdHRyKCd0aXRsZScpKTtcbiAgICAkc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JywgdGhpcy5fdGFiaW5kZXgpO1xuICAgICRzZWxlY3Rpb24uYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uID0gJHNlbGVjdGlvbjtcblxuICAgIHJldHVybiAkc2VsZWN0aW9uO1xuICB9O1xuXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHJlc3VsdHNJZCA9IGNvbnRhaW5lci5pZCArICctcmVzdWx0cyc7XG5cbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ2ZvY3VzJywgZXZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignYmx1cicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIHNlbGYuX2hhbmRsZUJsdXIoZXZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIHNlbGYudHJpZ2dlcigna2V5cHJlc3MnLCBldnQpO1xuXG4gICAgICBpZiAoZXZ0LndoaWNoID09PSBLRVlTLlNQQUNFKSB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmZvY3VzJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIHBhcmFtcy5kYXRhLl9yZXN1bHRJZCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3NlbGVjdGlvbjp1cGRhdGUnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBzZWxmLnVwZGF0ZShwYXJhbXMuZGF0YSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXaGVuIHRoZSBkcm9wZG93biBpcyBvcGVuLCBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1vd25zJywgcmVzdWx0c0lkKTtcblxuICAgICAgc2VsZi5fYXR0YWNoQ2xvc2VIYW5kbGVyKGNvbnRhaW5lcik7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgIHNlbGYuJHNlbGVjdGlvbi5yZW1vdmVBdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICAgIHNlbGYuJHNlbGVjdGlvbi5yZW1vdmVBdHRyKCdhcmlhLW93bnMnKTtcblxuICAgICAgc2VsZi4kc2VsZWN0aW9uLnRyaWdnZXIoJ2ZvY3VzJyk7XG5cbiAgICAgIHNlbGYuX2RldGFjaENsb3NlSGFuZGxlcihjb250YWluZXIpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cigndGFiaW5kZXgnLCBzZWxmLl90YWJpbmRleCk7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICBzZWxmLiRzZWxlY3Rpb24uYXR0cignYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgfSk7XG4gIH07XG5cbiAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuX2hhbmRsZUJsdXIgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIGFzIHRoZSBhY3RpdmUgZWxlbWVudCBpcyB0aGUgYm9keSB3aGVuIHRoZSB0YWJcbiAgICAvLyBrZXkgaXMgcHJlc3NlZCwgcG9zc2libHkgYWxvbmcgd2l0aCBvdGhlcnMuXG4gICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9uJ3QgdHJpZ2dlciBgYmx1cmAgaWYgdGhlIGZvY3VzIGlzIHN0aWxsIGluIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmIChcbiAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gc2VsZi4kc2VsZWN0aW9uWzBdKSB8fFxuICAgICAgICAoJC5jb250YWlucyhzZWxmLiRzZWxlY3Rpb25bMF0sIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi50cmlnZ2VyKCdibHVyJywgZXZ0KTtcbiAgICB9LCAxKTtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS5fYXR0YWNoQ2xvc2VIYW5kbGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuXG4gICAgJChkb2N1bWVudC5ib2R5KS5vbignbW91c2Vkb3duLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciAkdGFyZ2V0ID0gJChlLnRhcmdldCk7XG5cbiAgICAgIHZhciAkc2VsZWN0ID0gJHRhcmdldC5jbG9zZXN0KCcuc2VsZWN0MicpO1xuXG4gICAgICB2YXIgJGFsbCA9ICQoJy5zZWxlY3QyLnNlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG5cbiAgICAgICRhbGwuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzID09ICRzZWxlY3RbMF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgJGVsZW1lbnQgPSBVdGlscy5HZXREYXRhKHRoaXMsICdlbGVtZW50Jyk7XG5cbiAgICAgICAgJGVsZW1lbnQuc2VsZWN0MignY2xvc2UnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLl9kZXRhY2hDbG9zZUhhbmRsZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgJChkb2N1bWVudC5ib2R5KS5vZmYoJ21vdXNlZG93bi5zZWxlY3QyLicgKyBjb250YWluZXIuaWQpO1xuICB9O1xuXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLnBvc2l0aW9uID0gZnVuY3Rpb24gKCRzZWxlY3Rpb24sICRjb250YWluZXIpIHtcbiAgICB2YXIgJHNlbGVjdGlvbkNvbnRhaW5lciA9ICRjb250YWluZXIuZmluZCgnLnNlbGVjdGlvbicpO1xuICAgICRzZWxlY3Rpb25Db250YWluZXIuYXBwZW5kKCRzZWxlY3Rpb24pO1xuICB9O1xuXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZGV0YWNoQ2xvc2VIYW5kbGVyKHRoaXMuY29udGFpbmVyKTtcbiAgfTtcblxuICBCYXNlU2VsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGB1cGRhdGVgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTtcbiAgfTtcblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBhYnN0cmFjdCB0aGUgXCJlbmFibGVkXCIgKG5vdCBcImRpc2FibGVkXCIpIHN0YXRlIG9mIHRoaXNcbiAgICogb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJuIHt0cnVlfSBpZiB0aGUgaW5zdGFuY2UgaXMgbm90IGRpc2FibGVkLlxuICAgKiBAcmV0dXJuIHtmYWxzZX0gaWYgdGhlIGluc3RhbmNlIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgQmFzZVNlbGVjdGlvbi5wcm90b3R5cGUuaXNFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0Rpc2FibGVkKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gYWJzdHJhY3QgdGhlIFwiZGlzYWJsZWRcIiBzdGF0ZSBvZiB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybiB7dHJ1ZX0gaWYgdGhlIGRpc2FibGVkIG9wdGlvbiBpcyB0cnVlLlxuICAgKiBAcmV0dXJuIHtmYWxzZX0gaWYgdGhlIGRpc2FibGVkIG9wdGlvbiBpcyBmYWxzZS5cbiAgICovXG4gIEJhc2VTZWxlY3Rpb24ucHJvdG90eXBlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoJ2Rpc2FibGVkJyk7XG4gIH07XG5cbiAgcmV0dXJuIEJhc2VTZWxlY3Rpb247XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9zaW5nbGUnLFtcbiAgJ2pxdWVyeScsXG4gICcuL2Jhc2UnLFxuICAnLi4vdXRpbHMnLFxuICAnLi4va2V5cydcbl0sIGZ1bmN0aW9uICgkLCBCYXNlU2VsZWN0aW9uLCBVdGlscywgS0VZUykge1xuICBmdW5jdGlvbiBTaW5nbGVTZWxlY3Rpb24gKCkge1xuICAgIFNpbmdsZVNlbGVjdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChTaW5nbGVTZWxlY3Rpb24sIEJhc2VTZWxlY3Rpb24pO1xuXG4gIFNpbmdsZVNlbGVjdGlvbi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkc2VsZWN0aW9uID0gU2luZ2xlU2VsZWN0aW9uLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtcblxuICAgICRzZWxlY3Rpb25bMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZScpO1xuXG4gICAgJHNlbGVjdGlvbi5odG1sKFxuICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCI+PC9zcGFuPicgK1xuICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93XCIgcm9sZT1cInByZXNlbnRhdGlvblwiPicgK1xuICAgICAgICAnPGIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvYj4nICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG5cbiAgICByZXR1cm4gJHNlbGVjdGlvbjtcbiAgfTtcblxuICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgU2luZ2xlU2VsZWN0aW9uLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLWNvbnRhaW5lcic7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpXG4gICAgICAuYXR0cignaWQnLCBpZClcbiAgICAgIC5hdHRyKCdyb2xlJywgJ3RleHRib3gnKVxuICAgICAgLmF0dHIoJ2FyaWEtcmVhZG9ubHknLCAndHJ1ZScpO1xuICAgIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCdhcmlhLWxhYmVsbGVkYnknLCBpZCk7XG4gICAgdGhpcy4kc2VsZWN0aW9uLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpZCk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIC8vIE9ubHkgcmVzcG9uZCB0byBsZWZ0IGNsaWNrc1xuICAgICAgaWYgKGV2dC53aGljaCAhPT0gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYudHJpZ2dlcigndG9nZ2xlJywge1xuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIC8vIFVzZXIgZm9jdXNlcyBvbiB0aGUgY29udGFpbmVyXG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2JsdXInLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAvLyBVc2VyIGV4aXRzIHRoZSBjb250YWluZXJcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkge1xuICAgICAgICBzZWxmLiRzZWxlY3Rpb24udHJpZ2dlcignZm9jdXMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkcmVuZGVyZWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpO1xuICAgICRyZW5kZXJlZC5lbXB0eSgpO1xuICAgICRyZW5kZXJlZC5yZW1vdmVBdHRyKCd0aXRsZScpOyAvLyBjbGVhciB0b29sdGlwIG9uIGVtcHR5XG4gIH07XG5cbiAgU2luZ2xlU2VsZWN0aW9uLnByb3RvdHlwZS5kaXNwbGF5ID0gZnVuY3Rpb24gKGRhdGEsIGNvbnRhaW5lcikge1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RlbXBsYXRlU2VsZWN0aW9uJyk7XG4gICAgdmFyIGVzY2FwZU1hcmt1cCA9IHRoaXMub3B0aW9ucy5nZXQoJ2VzY2FwZU1hcmt1cCcpO1xuXG4gICAgcmV0dXJuIGVzY2FwZU1hcmt1cCh0ZW1wbGF0ZShkYXRhLCBjb250YWluZXIpKTtcbiAgfTtcblxuICBTaW5nbGVTZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdGlvbkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJCgnPHNwYW4+PC9zcGFuPicpO1xuICB9O1xuXG4gIFNpbmdsZVNlbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0aW9uID0gZGF0YVswXTtcblxuICAgIHZhciAkcmVuZGVyZWQgPSB0aGlzLiRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcpO1xuICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLmRpc3BsYXkoc2VsZWN0aW9uLCAkcmVuZGVyZWQpO1xuXG4gICAgJHJlbmRlcmVkLmVtcHR5KCkuYXBwZW5kKGZvcm1hdHRlZCk7XG5cbiAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24udGl0bGUgfHwgc2VsZWN0aW9uLnRleHQ7XG5cbiAgICBpZiAodGl0bGUpIHtcbiAgICAgICRyZW5kZXJlZC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHJlbmRlcmVkLnJlbW92ZUF0dHIoJ3RpdGxlJyk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTaW5nbGVTZWxlY3Rpb247XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9tdWx0aXBsZScsW1xuICAnanF1ZXJ5JyxcbiAgJy4vYmFzZScsXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBCYXNlU2VsZWN0aW9uLCBVdGlscykge1xuICBmdW5jdGlvbiBNdWx0aXBsZVNlbGVjdGlvbiAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBNdWx0aXBsZVNlbGVjdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChNdWx0aXBsZVNlbGVjdGlvbiwgQmFzZVNlbGVjdGlvbik7XG5cbiAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHNlbGVjdGlvbiA9IE11bHRpcGxlU2VsZWN0aW9uLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtcblxuICAgICRzZWxlY3Rpb25bMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlJyk7XG5cbiAgICAkc2VsZWN0aW9uLmh0bWwoXG4gICAgICAnPHVsIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCI+PC91bD4nXG4gICAgKTtcblxuICAgIHJldHVybiAkc2VsZWN0aW9uO1xuICB9O1xuXG4gIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIE11bHRpcGxlU2VsZWN0aW9uLl9fc3VwZXJfXy5iaW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaWQgPSBjb250YWluZXIuaWQgKyAnLWNvbnRhaW5lcic7XG4gICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hdHRyKCdpZCcsIGlkKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ3RvZ2dsZScsIHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbihcbiAgICAgICdjbGljaycsXG4gICAgICAnLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZScsXG4gICAgICBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZXZlbnQgaWYgaXQgaXMgZGlzYWJsZWRcbiAgICAgICAgaWYgKHNlbGYuaXNEaXNhYmxlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyICRyZW1vdmUgPSAkKHRoaXMpO1xuICAgICAgICB2YXIgJHNlbGVjdGlvbiA9ICRyZW1vdmUucGFyZW50KCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRzZWxlY3Rpb25bMF0sICdkYXRhJyk7XG5cbiAgICAgICAgc2VsZi50cmlnZ2VyKCd1bnNlbGVjdCcsIHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnQsXG4gICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLm9uKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IGlzIGRpc2FibGVkXG4gICAgICAgIGlmIChzZWxmLmlzRGlzYWJsZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIE11bHRpcGxlU2VsZWN0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHJlbmRlcmVkID0gdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKTtcbiAgICAkcmVuZGVyZWQuZW1wdHkoKTtcbiAgICAkcmVuZGVyZWQucmVtb3ZlQXR0cigndGl0bGUnKTtcbiAgfTtcblxuICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUuZGlzcGxheSA9IGZ1bmN0aW9uIChkYXRhLCBjb250YWluZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm9wdGlvbnMuZ2V0KCd0ZW1wbGF0ZVNlbGVjdGlvbicpO1xuICAgIHZhciBlc2NhcGVNYXJrdXAgPSB0aGlzLm9wdGlvbnMuZ2V0KCdlc2NhcGVNYXJrdXAnKTtcblxuICAgIHJldHVybiBlc2NhcGVNYXJrdXAodGVtcGxhdGUoZGF0YSwgY29udGFpbmVyKSk7XG4gIH07XG5cbiAgTXVsdGlwbGVTZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdGlvbkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGNvbnRhaW5lciA9ICQoXG4gICAgICAnPGxpIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiPicgK1xuICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19yZW1vdmVcIiAnICtcbiAgICAgICAgJ3RhYmluZGV4PVwiLTFcIj4nICtcbiAgICAgICAgICAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj4nICtcbiAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlX19kaXNwbGF5XCI+PC9zcGFuPicgK1xuICAgICAgJzwvbGk+J1xuICAgICk7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcjtcbiAgfTtcblxuICBNdWx0aXBsZVNlbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgJHNlbGVjdGlvbnMgPSBbXTtcblxuICAgIHZhciBzZWxlY3Rpb25JZFByZWZpeCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJylcbiAgICAgIC5hdHRyKCdpZCcpICsgJy1jaG9pY2UtJztcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGF0YS5sZW5ndGg7IGQrKykge1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IGRhdGFbZF07XG5cbiAgICAgIHZhciAkc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIoKTtcbiAgICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLmRpc3BsYXkoc2VsZWN0aW9uLCAkc2VsZWN0aW9uKTtcblxuICAgICAgdmFyIHNlbGVjdGlvbklkID0gc2VsZWN0aW9uSWRQcmVmaXggKyBVdGlscy5nZW5lcmF0ZUNoYXJzKDQpICsgJy0nO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uLmlkKSB7XG4gICAgICAgIHNlbGVjdGlvbklkICs9IHNlbGVjdGlvbi5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGlvbklkICs9IFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7XG4gICAgICB9XG5cbiAgICAgICRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX2Rpc3BsYXknKVxuICAgICAgICAuYXBwZW5kKGZvcm1hdHRlZClcbiAgICAgICAgLmF0dHIoJ2lkJywgc2VsZWN0aW9uSWQpO1xuXG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24udGl0bGUgfHwgc2VsZWN0aW9uLnRleHQ7XG5cbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAkc2VsZWN0aW9uLmF0dHIoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVtb3ZlSXRlbSA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgncmVtb3ZlSXRlbScpO1xuXG4gICAgICB2YXIgJHJlbW92ZSA9ICRzZWxlY3Rpb24uZmluZCgnLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZScpO1xuXG4gICAgICAkcmVtb3ZlLmF0dHIoJ3RpdGxlJywgcmVtb3ZlSXRlbSgpKTtcbiAgICAgICRyZW1vdmUuYXR0cignYXJpYS1sYWJlbCcsIHJlbW92ZUl0ZW0oKSk7XG4gICAgICAkcmVtb3ZlLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCBzZWxlY3Rpb25JZCk7XG5cbiAgICAgIFV0aWxzLlN0b3JlRGF0YSgkc2VsZWN0aW9uWzBdLCAnZGF0YScsIHNlbGVjdGlvbik7XG5cbiAgICAgICRzZWxlY3Rpb25zLnB1c2goJHNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgdmFyICRyZW5kZXJlZCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJyk7XG5cbiAgICAkcmVuZGVyZWQuYXBwZW5kKCRzZWxlY3Rpb25zKTtcbiAgfTtcblxuICByZXR1cm4gTXVsdGlwbGVTZWxlY3Rpb247XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9wbGFjZWhvbGRlcicsW1xuXG5dLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsYWNlaG9sZGVyIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIob3B0aW9ucy5nZXQoJ3BsYWNlaG9sZGVyJykpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgUGxhY2Vob2xkZXIucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKF8sIHBsYWNlaG9sZGVyKSB7XG4gICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBsYWNlaG9sZGVyID0ge1xuICAgICAgICBpZDogJycsXG4gICAgICAgIHRleHQ6IHBsYWNlaG9sZGVyXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwbGFjZWhvbGRlcjtcbiAgfTtcblxuICBQbGFjZWhvbGRlci5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwbGFjZWhvbGRlcikge1xuICAgIHZhciAkcGxhY2Vob2xkZXIgPSB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpO1xuXG4gICAgJHBsYWNlaG9sZGVyLmh0bWwodGhpcy5kaXNwbGF5KHBsYWNlaG9sZGVyKSk7XG4gICAgJHBsYWNlaG9sZGVyWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlcicpO1xuICAgICRwbGFjZWhvbGRlclswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlJyk7XG5cbiAgICB2YXIgcGxhY2Vob2xkZXJUaXRsZSA9IHBsYWNlaG9sZGVyLnRpdGxlIHx8XG4gICAgICBwbGFjZWhvbGRlci50ZXh0IHx8XG4gICAgICAkcGxhY2Vob2xkZXIudGV4dCgpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hdHRyKFxuICAgICAgJ3RpdGxlJyxcbiAgICAgIHBsYWNlaG9sZGVyVGl0bGVcbiAgICApO1xuXG4gICAgcmV0dXJuICRwbGFjZWhvbGRlcjtcbiAgfTtcblxuICBQbGFjZWhvbGRlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkge1xuICAgIHZhciBzaW5nbGVQbGFjZWhvbGRlciA9IChcbiAgICAgIGRhdGEubGVuZ3RoID09IDEgJiYgZGF0YVswXS5pZCAhPSB0aGlzLnBsYWNlaG9sZGVyLmlkXG4gICAgKTtcbiAgICB2YXIgbXVsdGlwbGVTZWxlY3Rpb25zID0gZGF0YS5sZW5ndGggPiAxO1xuXG4gICAgaWYgKG11bHRpcGxlU2VsZWN0aW9ucyB8fCBzaW5nbGVQbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHZhciAkcGxhY2Vob2xkZXIgPSB0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQnKS5hcHBlbmQoJHBsYWNlaG9sZGVyKTtcbiAgfTtcblxuICByZXR1cm4gUGxhY2Vob2xkZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3NlbGVjdGlvbi9hbGxvd0NsZWFyJyxbXG4gICdqcXVlcnknLFxuICAnLi4va2V5cycsXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBLRVlTLCBVdGlscykge1xuICBmdW5jdGlvbiBBbGxvd0NsZWFyICgpIHsgfVxuXG4gIEFsbG93Q2xlYXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdTZWxlY3QyOiBUaGUgYGFsbG93Q2xlYXJgIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiAnICtcbiAgICAgICAgICAnd2l0aCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24uJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignbW91c2Vkb3duJywgJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXInLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBzZWxmLl9oYW5kbGVDbGVhcihldnQpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdrZXlwcmVzcycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIHNlbGYuX2hhbmRsZUtleWJvYXJkQ2xlYXIoZXZ0LCBjb250YWluZXIpO1xuICAgIH0pO1xuICB9O1xuXG4gIEFsbG93Q2xlYXIucHJvdG90eXBlLl9oYW5kbGVDbGVhciA9IGZ1bmN0aW9uIChfLCBldnQpIHtcbiAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGl0IGlzIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyICRjbGVhciA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyJyk7XG5cbiAgICAvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIG5vdGhpbmcgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICBpZiAoJGNsZWFyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHZhciBkYXRhID0gVXRpbHMuR2V0RGF0YSgkY2xlYXJbMF0sICdkYXRhJyk7XG5cbiAgICB2YXIgcHJldmlvdXNWYWwgPSB0aGlzLiRlbGVtZW50LnZhbCgpO1xuICAgIHRoaXMuJGVsZW1lbnQudmFsKHRoaXMucGxhY2Vob2xkZXIuaWQpO1xuXG4gICAgdmFyIHVuc2VsZWN0RGF0YSA9IHtcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICAgIHRoaXMudHJpZ2dlcignY2xlYXInLCB1bnNlbGVjdERhdGEpO1xuICAgIGlmICh1bnNlbGVjdERhdGEucHJldmVudGVkKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnZhbChwcmV2aW91c1ZhbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7XG4gICAgICB1bnNlbGVjdERhdGEgPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbZF1cbiAgICAgIH07XG5cbiAgICAgIC8vIFRyaWdnZXIgdGhlIGB1bnNlbGVjdGAgZXZlbnQsIHNvIHBlb3BsZSBjYW4gcHJldmVudCBpdCBmcm9tIGJlaW5nXG4gICAgICAvLyBjbGVhcmVkLlxuICAgICAgdGhpcy50cmlnZ2VyKCd1bnNlbGVjdCcsIHVuc2VsZWN0RGF0YSk7XG5cbiAgICAgIC8vIElmIHRoZSBldmVudCB3YXMgcHJldmVudGVkLCBkb24ndCBjbGVhciBpdCBvdXQuXG4gICAgICBpZiAodW5zZWxlY3REYXRhLnByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50LnZhbChwcmV2aW91c1ZhbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgICB0aGlzLnRyaWdnZXIoJ3RvZ2dsZScsIHt9KTtcbiAgfTtcblxuICBBbGxvd0NsZWFyLnByb3RvdHlwZS5faGFuZGxlS2V5Ym9hcmRDbGVhciA9IGZ1bmN0aW9uIChfLCBldnQsIGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuaXNPcGVuKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZ0LndoaWNoID09IEtFWVMuREVMRVRFIHx8IGV2dC53aGljaCA9PSBLRVlTLkJBQ0tTUEFDRSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xlYXIoZXZ0KTtcbiAgICB9XG4gIH07XG5cbiAgQWxsb3dDbGVhci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkge1xuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXInKS5yZW1vdmUoKTtcbiAgICB0aGlzLiRzZWxlY3Rpb25bMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1zZWxlY3Rpb24tLWNsZWFyYWJsZScpO1xuXG4gICAgaWYgKHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyJykubGVuZ3RoID4gMCB8fFxuICAgICAgICBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzZWxlY3Rpb25JZCA9IHRoaXMuJHNlbGVjdGlvbi5maW5kKCcuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkJylcbiAgICAgIC5hdHRyKCdpZCcpO1xuXG4gICAgdmFyIHJlbW92ZUFsbCA9IHRoaXMub3B0aW9ucy5nZXQoJ3RyYW5zbGF0aW9ucycpLmdldCgncmVtb3ZlQWxsSXRlbXMnKTtcblxuICAgIHZhciAkcmVtb3ZlID0gJChcbiAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19jbGVhclwiIHRhYmluZGV4PVwiLTFcIj4nICtcbiAgICAgICAgJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+JyArXG4gICAgICAnPC9idXR0b24+J1xuICAgICk7XG4gICAgJHJlbW92ZS5hdHRyKCd0aXRsZScsIHJlbW92ZUFsbCgpKTtcbiAgICAkcmVtb3ZlLmF0dHIoJ2FyaWEtbGFiZWwnLCByZW1vdmVBbGwoKSk7XG4gICAgJHJlbW92ZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5Jywgc2VsZWN0aW9uSWQpO1xuICAgIFV0aWxzLlN0b3JlRGF0YSgkcmVtb3ZlWzBdLCAnZGF0YScsIGRhdGEpO1xuXG4gICAgdGhpcy4kc2VsZWN0aW9uLnByZXBlbmQoJHJlbW92ZSk7XG4gICAgdGhpcy4kc2VsZWN0aW9uWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItc2VsZWN0aW9uLS1jbGVhcmFibGUnKTtcbiAgfTtcblxuICByZXR1cm4gQWxsb3dDbGVhcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvc2VsZWN0aW9uL3NlYXJjaCcsW1xuICAnanF1ZXJ5JyxcbiAgJy4uL3V0aWxzJyxcbiAgJy4uL2tleXMnXG5dLCBmdW5jdGlvbiAoJCwgVXRpbHMsIEtFWVMpIHtcbiAgZnVuY3Rpb24gU2VhcmNoIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgU2VhcmNoLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyIHNlYXJjaExhYmVsID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2gnKTtcbiAgICB2YXIgJHNlYXJjaCA9ICQoXG4gICAgICAnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlYXJjaCBzZWxlY3QyLXNlYXJjaC0taW5saW5lXCI+JyArXG4gICAgICAgICc8dGV4dGFyZWEgY2xhc3M9XCJzZWxlY3QyLXNlYXJjaF9fZmllbGRcIicrXG4gICAgICAgICcgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIicgK1xuICAgICAgICAnIGF1dG9jb3JyZWN0PVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJub25lXCInICtcbiAgICAgICAgJyBzcGVsbGNoZWNrPVwiZmFsc2VcIiByb2xlPVwic2VhcmNoYm94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgPicgK1xuICAgICAgICAnPC90ZXh0YXJlYT4nICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG5cbiAgICB0aGlzLiRzZWFyY2hDb250YWluZXIgPSAkc2VhcmNoO1xuICAgIHRoaXMuJHNlYXJjaCA9ICRzZWFyY2guZmluZCgndGV4dGFyZWEnKTtcblxuICAgIHRoaXMuJHNlYXJjaC5wcm9wKCdhdXRvY29tcGxldGUnLCB0aGlzLm9wdGlvbnMuZ2V0KCdhdXRvY29tcGxldGUnKSk7XG4gICAgdGhpcy4kc2VhcmNoLmF0dHIoJ2FyaWEtbGFiZWwnLCBzZWFyY2hMYWJlbCgpKTtcblxuICAgIHZhciAkcmVuZGVyZWQgPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuX3RyYW5zZmVyVGFiSW5kZXgoKTtcbiAgICAkcmVuZGVyZWQuYXBwZW5kKHRoaXMuJHNlYXJjaENvbnRhaW5lcik7XG5cbiAgICByZXR1cm4gJHJlbmRlcmVkO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciByZXN1bHRzSWQgPSBjb250YWluZXIuaWQgKyAnLXJlc3VsdHMnO1xuICAgIHZhciBzZWxlY3Rpb25JZCA9IGNvbnRhaW5lci5pZCArICctY29udGFpbmVyJztcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICBzZWxmLiRzZWFyY2guYXR0cignYXJpYS1kZXNjcmliZWRieScsIHNlbGVjdGlvbklkKTtcblxuICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgcmVzdWx0c0lkKTtcbiAgICAgIHNlbGYuJHNlYXJjaC50cmlnZ2VyKCdmb2N1cycpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlYXJjaC52YWwoJycpO1xuICAgICAgc2VsZi5yZXNpemVTZWFyY2goKTtcbiAgICAgIHNlbGYuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZW5hYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kc2VhcmNoLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXG4gICAgICBzZWxmLl90cmFuc2ZlclRhYkluZGV4KCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ2Rpc2FibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRzZWFyY2gucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czpmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIGlmIChwYXJhbXMuZGF0YS5fcmVzdWx0SWQpIHtcbiAgICAgICAgc2VsZi4kc2VhcmNoLmF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIHBhcmFtcy5kYXRhLl9yZXN1bHRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2ZvY3VzaW4nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ2ZvY3VzJywgZXZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbignZm9jdXNvdXQnLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLl9oYW5kbGVCbHVyKGV2dCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2tleWRvd24nLCAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIHNlbGYudHJpZ2dlcigna2V5cHJlc3MnLCBldnQpO1xuXG4gICAgICBzZWxmLl9rZXlVcFByZXZlbnRlZCA9IGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcblxuICAgICAgdmFyIGtleSA9IGV2dC53aGljaDtcblxuICAgICAgaWYgKGtleSA9PT0gS0VZUy5CQUNLU1BBQ0UgJiYgc2VsZi4kc2VhcmNoLnZhbCgpID09PSAnJykge1xuICAgICAgICB2YXIgJHByZXZpb3VzQ2hvaWNlID0gc2VsZi4kc2VsZWN0aW9uXG4gICAgICAgICAgLmZpbmQoJy5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlJykubGFzdCgpO1xuXG4gICAgICAgIGlmICgkcHJldmlvdXNDaG9pY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBpdGVtID0gVXRpbHMuR2V0RGF0YSgkcHJldmlvdXNDaG9pY2VbMF0sICdkYXRhJyk7XG5cbiAgICAgICAgICBzZWxmLnNlYXJjaFJlbW92ZUNob2ljZShpdGVtKTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWxlY3Rpb24ub24oJ2NsaWNrJywgJy5zZWxlY3QyLXNlYXJjaC0taW5saW5lJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgaWYgKHNlbGYuJHNlYXJjaC52YWwoKSkge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSBJRSB2ZXJzaW9uIHNob3VsZCB0aGUgYGRvY3VtZW50TW9kZWAgcHJvcGVydHkgdGhhdFxuICAgIC8vIGlzIHN0b3JlZCBvbiB0aGUgZG9jdW1lbnQuIFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBpbiBJRSBhbmQgaXNcbiAgICAvLyBzbGlnaHRseSBjbGVhbmVyIHRoYW4gZG9pbmcgYSB1c2VyIGFnZW50IGNoZWNrLlxuICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZSBpbiBFZGdlLCBidXQgRWRnZSBhbHNvIGRvZXNuJ3QgaGF2ZVxuICAgIC8vIHRoaXMgYnVnLlxuICAgIHZhciBtc2llID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuICAgIHZhciBkaXNhYmxlSW5wdXRFdmVudHMgPSBtc2llICYmIG1zaWUgPD0gMTE7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciBicm93c2VycyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGUgYGlucHV0YCBldmVudFxuICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGRvdWJsZS10cmlnZ2VyaW5nIG9mIGV2ZW50cyBmb3IgYnJvd3NlcnMgd2hpY2ggc3VwcG9ydFxuICAgIC8vIGJvdGggdGhlIGBrZXl1cGAgYW5kIGBpbnB1dGAgZXZlbnRzLlxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbihcbiAgICAgICdpbnB1dC5zZWFyY2hjaGVjaycsXG4gICAgICAnLnNlbGVjdDItc2VhcmNoLS1pbmxpbmUnLFxuICAgICAgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAvLyBJRSB3aWxsIHRyaWdnZXIgdGhlIGBpbnB1dGAgZXZlbnQgd2hlbiBhIHBsYWNlaG9sZGVyIGlzIHVzZWQgb24gYVxuICAgICAgICAvLyBzZWFyY2ggYm94LiBUbyBnZXQgYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGFyZSBmb3JjZWQgdG8gaWdub3JlIGFsbFxuICAgICAgICAvLyBgaW5wdXRgIGV2ZW50cyBpbiBJRSBhbmQga2VlcCB1c2luZyBga2V5dXBgLlxuICAgICAgICBpZiAoZGlzYWJsZUlucHV0RXZlbnRzKSB7XG4gICAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZignaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5iaW5kIHRoZSBkdXBsaWNhdGVkIGBrZXl1cGAgZXZlbnRcbiAgICAgICAgc2VsZi4kc2VsZWN0aW9uLm9mZigna2V5dXAuc2VhcmNoJyk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuJHNlbGVjdGlvbi5vbihcbiAgICAgICdrZXl1cC5zZWFyY2ggaW5wdXQuc2VhcmNoJyxcbiAgICAgICcuc2VsZWN0Mi1zZWFyY2gtLWlubGluZScsXG4gICAgICBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgIC8vIElFIHdpbGwgdHJpZ2dlciB0aGUgYGlucHV0YCBldmVudCB3aGVuIGEgcGxhY2Vob2xkZXIgaXMgdXNlZCBvbiBhXG4gICAgICAgIC8vIHNlYXJjaCBib3guIFRvIGdldCBhcm91bmQgdGhpcyBpc3N1ZSwgd2UgYXJlIGZvcmNlZCB0byBpZ25vcmUgYWxsXG4gICAgICAgIC8vIGBpbnB1dGAgZXZlbnRzIGluIElFIGFuZCBrZWVwIHVzaW5nIGBrZXl1cGAuXG4gICAgICAgIGlmIChkaXNhYmxlSW5wdXRFdmVudHMgJiYgZXZ0LnR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICBzZWxmLiRzZWxlY3Rpb24ub2ZmKCdpbnB1dC5zZWFyY2ggaW5wdXQuc2VhcmNoY2hlY2snKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5ID0gZXZ0LndoaWNoO1xuXG4gICAgICAgIC8vIFdlIGNhbiBmcmVlbHkgaWdub3JlIGV2ZW50cyBmcm9tIG1vZGlmaWVyIGtleXNcbiAgICAgICAgaWYgKGtleSA9PSBLRVlTLlNISUZUIHx8IGtleSA9PSBLRVlTLkNUUkwgfHwga2V5ID09IEtFWVMuQUxUKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGFiYmluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIHRoZSBga2V5ZG93bmAgcGhhc2VcbiAgICAgICAgaWYgKGtleSA9PSBLRVlTLlRBQikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuaGFuZGxlU2VhcmNoKGV2dCk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCB0cmFuc2ZlciB0aGUgdGFiaW5kZXggYXR0cmlidXRlIGZyb20gdGhlIHJlbmRlcmVkXG4gICAqIHNlbGVjdGlvbiB0byB0aGUgc2VhcmNoIGJveC4gVGhpcyBhbGxvd3MgZm9yIHRoZSBzZWFyY2ggYm94IHRvIGJlIHVzZWQgYXNcbiAgICogdGhlIHByaW1hcnkgZm9jdXMgaW5zdGVhZCBvZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIFNlYXJjaC5wcm90b3R5cGUuX3RyYW5zZmVyVGFiSW5kZXggPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdGhpcy4kc2VhcmNoLmF0dHIoJ3RhYmluZGV4JywgdGhpcy4kc2VsZWN0aW9uLmF0dHIoJ3RhYmluZGV4JykpO1xuICAgIHRoaXMuJHNlbGVjdGlvbi5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwbGFjZWhvbGRlcikge1xuICAgIHRoaXMuJHNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyLnRleHQpO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgZGF0YSkge1xuICAgIHZhciBzZWFyY2hIYWRGb2N1cyA9IHRoaXMuJHNlYXJjaFswXSA9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJywgJycpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgZGF0YSk7XG5cbiAgICB0aGlzLnJlc2l6ZVNlYXJjaCgpO1xuICAgIGlmIChzZWFyY2hIYWRGb2N1cykge1xuICAgICAgdGhpcy4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgfVxuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVzaXplU2VhcmNoKCk7XG5cbiAgICBpZiAoIXRoaXMuX2tleVVwUHJldmVudGVkKSB7XG4gICAgICB2YXIgaW5wdXQgPSB0aGlzLiRzZWFyY2gudmFsKCk7XG5cbiAgICAgIHRoaXMudHJpZ2dlcigncXVlcnknLCB7XG4gICAgICAgIHRlcm06IGlucHV0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9rZXlVcFByZXZlbnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuc2VhcmNoUmVtb3ZlQ2hvaWNlID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgaXRlbSkge1xuICAgIHRoaXMudHJpZ2dlcigndW5zZWxlY3QnLCB7XG4gICAgICBkYXRhOiBpdGVtXG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWFyY2gudmFsKGl0ZW0udGV4dCk7XG4gICAgdGhpcy5oYW5kbGVTZWFyY2goKTtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLnJlc2l6ZVNlYXJjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsICcyNXB4Jyk7XG5cbiAgICB2YXIgd2lkdGggPSAnMTAwJSc7XG5cbiAgICBpZiAodGhpcy4kc2VhcmNoLmF0dHIoJ3BsYWNlaG9sZGVyJykgPT09ICcnKSB7XG4gICAgICB2YXIgbWluaW11bVdpZHRoID0gdGhpcy4kc2VhcmNoLnZhbCgpLmxlbmd0aCArIDE7XG5cbiAgICAgIHdpZHRoID0gKG1pbmltdW1XaWR0aCAqIDAuNzUpICsgJ2VtJztcbiAgICB9XG5cbiAgICB0aGlzLiRzZWFyY2guY3NzKCd3aWR0aCcsIHdpZHRoKTtcbiAgfTtcblxuICByZXR1cm4gU2VhcmNoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vc2VsZWN0aW9uQ3NzJyxbXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uIChVdGlscykge1xuICBmdW5jdGlvbiBTZWxlY3Rpb25DU1MgKCkgeyB9XG5cbiAgU2VsZWN0aW9uQ1NTLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGVjb3JhdGVkKSB7XG4gICAgdmFyICRzZWxlY3Rpb24gPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxlY3Rpb25Dc3NDbGFzcyA9IHRoaXMub3B0aW9ucy5nZXQoJ3NlbGVjdGlvbkNzc0NsYXNzJykgfHwgJyc7XG5cbiAgICBpZiAoc2VsZWN0aW9uQ3NzQ2xhc3MuaW5kZXhPZignOmFsbDonKSAhPT0gLTEpIHtcbiAgICAgIHNlbGVjdGlvbkNzc0NsYXNzID0gc2VsZWN0aW9uQ3NzQ2xhc3MucmVwbGFjZSgnOmFsbDonLCAnJyk7XG5cbiAgICAgIFV0aWxzLmNvcHlOb25JbnRlcm5hbENzc0NsYXNzZXMoJHNlbGVjdGlvblswXSwgdGhpcy4kZWxlbWVudFswXSk7XG4gICAgfVxuXG4gICAgJHNlbGVjdGlvbi5hZGRDbGFzcyhzZWxlY3Rpb25Dc3NDbGFzcyk7XG5cbiAgICByZXR1cm4gJHNlbGVjdGlvbjtcbiAgfTtcblxuICByZXR1cm4gU2VsZWN0aW9uQ1NTO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9zZWxlY3Rpb24vZXZlbnRSZWxheScsW1xuICAnanF1ZXJ5J1xuXSwgZnVuY3Rpb24gKCQpIHtcbiAgZnVuY3Rpb24gRXZlbnRSZWxheSAoKSB7IH1cblxuICBFdmVudFJlbGF5LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByZWxheUV2ZW50cyA9IFtcbiAgICAgICdvcGVuJywgJ29wZW5pbmcnLFxuICAgICAgJ2Nsb3NlJywgJ2Nsb3NpbmcnLFxuICAgICAgJ3NlbGVjdCcsICdzZWxlY3RpbmcnLFxuICAgICAgJ3Vuc2VsZWN0JywgJ3Vuc2VsZWN0aW5nJyxcbiAgICAgICdjbGVhcicsICdjbGVhcmluZydcbiAgICBdO1xuXG4gICAgdmFyIHByZXZlbnRhYmxlRXZlbnRzID0gW1xuICAgICAgJ29wZW5pbmcnLCAnY2xvc2luZycsICdzZWxlY3RpbmcnLCAndW5zZWxlY3RpbmcnLCAnY2xlYXJpbmcnXG4gICAgXTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICBjb250YWluZXIub24oJyonLCBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7XG4gICAgICAvLyBJZ25vcmUgZXZlbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSByZWxheWVkXG4gICAgICBpZiAocmVsYXlFdmVudHMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcGFyYW1ldGVycyBzaG91bGQgYWx3YXlzIGJlIGFuIG9iamVjdFxuICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXG4gICAgICAvLyBHZW5lcmF0ZSB0aGUgalF1ZXJ5IGV2ZW50IGZvciB0aGUgU2VsZWN0MiBldmVudFxuICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ3NlbGVjdDI6JyArIG5hbWUsIHtcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgIH0pO1xuXG4gICAgICBzZWxmLiRlbGVtZW50LnRyaWdnZXIoZXZ0KTtcblxuICAgICAgLy8gT25seSBoYW5kbGUgcHJldmVudGFibGUgZXZlbnRzIGlmIGl0IHdhcyBvbmVcbiAgICAgIGlmIChwcmV2ZW50YWJsZUV2ZW50cy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBhcmFtcy5wcmV2ZW50ZWQgPSBldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50UmVsYXk7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL3RyYW5zbGF0aW9uJyxbXG4gICdqcXVlcnknLFxuICAncmVxdWlyZSdcbl0sIGZ1bmN0aW9uICgkLCByZXF1aXJlKSB7XG4gIGZ1bmN0aW9uIFRyYW5zbGF0aW9uIChkaWN0KSB7XG4gICAgdGhpcy5kaWN0ID0gZGljdCB8fCB7fTtcbiAgfVxuXG4gIFRyYW5zbGF0aW9uLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGljdDtcbiAgfTtcblxuICBUcmFuc2xhdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiB0aGlzLmRpY3Rba2V5XTtcbiAgfTtcblxuICBUcmFuc2xhdGlvbi5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gKHRyYW5zbGF0aW9uKSB7XG4gICAgdGhpcy5kaWN0ID0gJC5leHRlbmQoe30sIHRyYW5zbGF0aW9uLmFsbCgpLCB0aGlzLmRpY3QpO1xuICB9O1xuXG4gIC8vIFN0YXRpYyBmdW5jdGlvbnNcblxuICBUcmFuc2xhdGlvbi5fY2FjaGUgPSB7fTtcblxuICBUcmFuc2xhdGlvbi5sb2FkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgaWYgKCEocGF0aCBpbiBUcmFuc2xhdGlvbi5fY2FjaGUpKSB7XG4gICAgICB2YXIgdHJhbnNsYXRpb25zID0gcmVxdWlyZShwYXRoKTtcblxuICAgICAgVHJhbnNsYXRpb24uX2NhY2hlW3BhdGhdID0gdHJhbnNsYXRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHJhbnNsYXRpb24oVHJhbnNsYXRpb24uX2NhY2hlW3BhdGhdKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNsYXRpb247XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RpYWNyaXRpY3MnLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICB2YXIgZGlhY3JpdGljcyA9IHtcbiAgICAnXFx1MjRCNic6ICdBJyxcbiAgICAnXFx1RkYyMSc6ICdBJyxcbiAgICAnXFx1MDBDMCc6ICdBJyxcbiAgICAnXFx1MDBDMSc6ICdBJyxcbiAgICAnXFx1MDBDMic6ICdBJyxcbiAgICAnXFx1MUVBNic6ICdBJyxcbiAgICAnXFx1MUVBNCc6ICdBJyxcbiAgICAnXFx1MUVBQSc6ICdBJyxcbiAgICAnXFx1MUVBOCc6ICdBJyxcbiAgICAnXFx1MDBDMyc6ICdBJyxcbiAgICAnXFx1MDEwMCc6ICdBJyxcbiAgICAnXFx1MDEwMic6ICdBJyxcbiAgICAnXFx1MUVCMCc6ICdBJyxcbiAgICAnXFx1MUVBRSc6ICdBJyxcbiAgICAnXFx1MUVCNCc6ICdBJyxcbiAgICAnXFx1MUVCMic6ICdBJyxcbiAgICAnXFx1MDIyNic6ICdBJyxcbiAgICAnXFx1MDFFMCc6ICdBJyxcbiAgICAnXFx1MDBDNCc6ICdBJyxcbiAgICAnXFx1MDFERSc6ICdBJyxcbiAgICAnXFx1MUVBMic6ICdBJyxcbiAgICAnXFx1MDBDNSc6ICdBJyxcbiAgICAnXFx1MDFGQSc6ICdBJyxcbiAgICAnXFx1MDFDRCc6ICdBJyxcbiAgICAnXFx1MDIwMCc6ICdBJyxcbiAgICAnXFx1MDIwMic6ICdBJyxcbiAgICAnXFx1MUVBMCc6ICdBJyxcbiAgICAnXFx1MUVBQyc6ICdBJyxcbiAgICAnXFx1MUVCNic6ICdBJyxcbiAgICAnXFx1MUUwMCc6ICdBJyxcbiAgICAnXFx1MDEwNCc6ICdBJyxcbiAgICAnXFx1MDIzQSc6ICdBJyxcbiAgICAnXFx1MkM2Ric6ICdBJyxcbiAgICAnXFx1QTczMic6ICdBQScsXG4gICAgJ1xcdTAwQzYnOiAnQUUnLFxuICAgICdcXHUwMUZDJzogJ0FFJyxcbiAgICAnXFx1MDFFMic6ICdBRScsXG4gICAgJ1xcdUE3MzQnOiAnQU8nLFxuICAgICdcXHVBNzM2JzogJ0FVJyxcbiAgICAnXFx1QTczOCc6ICdBVicsXG4gICAgJ1xcdUE3M0EnOiAnQVYnLFxuICAgICdcXHVBNzNDJzogJ0FZJyxcbiAgICAnXFx1MjRCNyc6ICdCJyxcbiAgICAnXFx1RkYyMic6ICdCJyxcbiAgICAnXFx1MUUwMic6ICdCJyxcbiAgICAnXFx1MUUwNCc6ICdCJyxcbiAgICAnXFx1MUUwNic6ICdCJyxcbiAgICAnXFx1MDI0Myc6ICdCJyxcbiAgICAnXFx1MDE4Mic6ICdCJyxcbiAgICAnXFx1MDE4MSc6ICdCJyxcbiAgICAnXFx1MjRCOCc6ICdDJyxcbiAgICAnXFx1RkYyMyc6ICdDJyxcbiAgICAnXFx1MDEwNic6ICdDJyxcbiAgICAnXFx1MDEwOCc6ICdDJyxcbiAgICAnXFx1MDEwQSc6ICdDJyxcbiAgICAnXFx1MDEwQyc6ICdDJyxcbiAgICAnXFx1MDBDNyc6ICdDJyxcbiAgICAnXFx1MUUwOCc6ICdDJyxcbiAgICAnXFx1MDE4Nyc6ICdDJyxcbiAgICAnXFx1MDIzQic6ICdDJyxcbiAgICAnXFx1QTczRSc6ICdDJyxcbiAgICAnXFx1MjRCOSc6ICdEJyxcbiAgICAnXFx1RkYyNCc6ICdEJyxcbiAgICAnXFx1MUUwQSc6ICdEJyxcbiAgICAnXFx1MDEwRSc6ICdEJyxcbiAgICAnXFx1MUUwQyc6ICdEJyxcbiAgICAnXFx1MUUxMCc6ICdEJyxcbiAgICAnXFx1MUUxMic6ICdEJyxcbiAgICAnXFx1MUUwRSc6ICdEJyxcbiAgICAnXFx1MDExMCc6ICdEJyxcbiAgICAnXFx1MDE4Qic6ICdEJyxcbiAgICAnXFx1MDE4QSc6ICdEJyxcbiAgICAnXFx1MDE4OSc6ICdEJyxcbiAgICAnXFx1QTc3OSc6ICdEJyxcbiAgICAnXFx1MDFGMSc6ICdEWicsXG4gICAgJ1xcdTAxQzQnOiAnRFonLFxuICAgICdcXHUwMUYyJzogJ0R6JyxcbiAgICAnXFx1MDFDNSc6ICdEeicsXG4gICAgJ1xcdTI0QkEnOiAnRScsXG4gICAgJ1xcdUZGMjUnOiAnRScsXG4gICAgJ1xcdTAwQzgnOiAnRScsXG4gICAgJ1xcdTAwQzknOiAnRScsXG4gICAgJ1xcdTAwQ0EnOiAnRScsXG4gICAgJ1xcdTFFQzAnOiAnRScsXG4gICAgJ1xcdTFFQkUnOiAnRScsXG4gICAgJ1xcdTFFQzQnOiAnRScsXG4gICAgJ1xcdTFFQzInOiAnRScsXG4gICAgJ1xcdTFFQkMnOiAnRScsXG4gICAgJ1xcdTAxMTInOiAnRScsXG4gICAgJ1xcdTFFMTQnOiAnRScsXG4gICAgJ1xcdTFFMTYnOiAnRScsXG4gICAgJ1xcdTAxMTQnOiAnRScsXG4gICAgJ1xcdTAxMTYnOiAnRScsXG4gICAgJ1xcdTAwQ0InOiAnRScsXG4gICAgJ1xcdTFFQkEnOiAnRScsXG4gICAgJ1xcdTAxMUEnOiAnRScsXG4gICAgJ1xcdTAyMDQnOiAnRScsXG4gICAgJ1xcdTAyMDYnOiAnRScsXG4gICAgJ1xcdTFFQjgnOiAnRScsXG4gICAgJ1xcdTFFQzYnOiAnRScsXG4gICAgJ1xcdTAyMjgnOiAnRScsXG4gICAgJ1xcdTFFMUMnOiAnRScsXG4gICAgJ1xcdTAxMTgnOiAnRScsXG4gICAgJ1xcdTFFMTgnOiAnRScsXG4gICAgJ1xcdTFFMUEnOiAnRScsXG4gICAgJ1xcdTAxOTAnOiAnRScsXG4gICAgJ1xcdTAxOEUnOiAnRScsXG4gICAgJ1xcdTI0QkInOiAnRicsXG4gICAgJ1xcdUZGMjYnOiAnRicsXG4gICAgJ1xcdTFFMUUnOiAnRicsXG4gICAgJ1xcdTAxOTEnOiAnRicsXG4gICAgJ1xcdUE3N0InOiAnRicsXG4gICAgJ1xcdTI0QkMnOiAnRycsXG4gICAgJ1xcdUZGMjcnOiAnRycsXG4gICAgJ1xcdTAxRjQnOiAnRycsXG4gICAgJ1xcdTAxMUMnOiAnRycsXG4gICAgJ1xcdTFFMjAnOiAnRycsXG4gICAgJ1xcdTAxMUUnOiAnRycsXG4gICAgJ1xcdTAxMjAnOiAnRycsXG4gICAgJ1xcdTAxRTYnOiAnRycsXG4gICAgJ1xcdTAxMjInOiAnRycsXG4gICAgJ1xcdTAxRTQnOiAnRycsXG4gICAgJ1xcdTAxOTMnOiAnRycsXG4gICAgJ1xcdUE3QTAnOiAnRycsXG4gICAgJ1xcdUE3N0QnOiAnRycsXG4gICAgJ1xcdUE3N0UnOiAnRycsXG4gICAgJ1xcdTI0QkQnOiAnSCcsXG4gICAgJ1xcdUZGMjgnOiAnSCcsXG4gICAgJ1xcdTAxMjQnOiAnSCcsXG4gICAgJ1xcdTFFMjInOiAnSCcsXG4gICAgJ1xcdTFFMjYnOiAnSCcsXG4gICAgJ1xcdTAyMUUnOiAnSCcsXG4gICAgJ1xcdTFFMjQnOiAnSCcsXG4gICAgJ1xcdTFFMjgnOiAnSCcsXG4gICAgJ1xcdTFFMkEnOiAnSCcsXG4gICAgJ1xcdTAxMjYnOiAnSCcsXG4gICAgJ1xcdTJDNjcnOiAnSCcsXG4gICAgJ1xcdTJDNzUnOiAnSCcsXG4gICAgJ1xcdUE3OEQnOiAnSCcsXG4gICAgJ1xcdTI0QkUnOiAnSScsXG4gICAgJ1xcdUZGMjknOiAnSScsXG4gICAgJ1xcdTAwQ0MnOiAnSScsXG4gICAgJ1xcdTAwQ0QnOiAnSScsXG4gICAgJ1xcdTAwQ0UnOiAnSScsXG4gICAgJ1xcdTAxMjgnOiAnSScsXG4gICAgJ1xcdTAxMkEnOiAnSScsXG4gICAgJ1xcdTAxMkMnOiAnSScsXG4gICAgJ1xcdTAxMzAnOiAnSScsXG4gICAgJ1xcdTAwQ0YnOiAnSScsXG4gICAgJ1xcdTFFMkUnOiAnSScsXG4gICAgJ1xcdTFFQzgnOiAnSScsXG4gICAgJ1xcdTAxQ0YnOiAnSScsXG4gICAgJ1xcdTAyMDgnOiAnSScsXG4gICAgJ1xcdTAyMEEnOiAnSScsXG4gICAgJ1xcdTFFQ0EnOiAnSScsXG4gICAgJ1xcdTAxMkUnOiAnSScsXG4gICAgJ1xcdTFFMkMnOiAnSScsXG4gICAgJ1xcdTAxOTcnOiAnSScsXG4gICAgJ1xcdTI0QkYnOiAnSicsXG4gICAgJ1xcdUZGMkEnOiAnSicsXG4gICAgJ1xcdTAxMzQnOiAnSicsXG4gICAgJ1xcdTAyNDgnOiAnSicsXG4gICAgJ1xcdTI0QzAnOiAnSycsXG4gICAgJ1xcdUZGMkInOiAnSycsXG4gICAgJ1xcdTFFMzAnOiAnSycsXG4gICAgJ1xcdTAxRTgnOiAnSycsXG4gICAgJ1xcdTFFMzInOiAnSycsXG4gICAgJ1xcdTAxMzYnOiAnSycsXG4gICAgJ1xcdTFFMzQnOiAnSycsXG4gICAgJ1xcdTAxOTgnOiAnSycsXG4gICAgJ1xcdTJDNjknOiAnSycsXG4gICAgJ1xcdUE3NDAnOiAnSycsXG4gICAgJ1xcdUE3NDInOiAnSycsXG4gICAgJ1xcdUE3NDQnOiAnSycsXG4gICAgJ1xcdUE3QTInOiAnSycsXG4gICAgJ1xcdTI0QzEnOiAnTCcsXG4gICAgJ1xcdUZGMkMnOiAnTCcsXG4gICAgJ1xcdTAxM0YnOiAnTCcsXG4gICAgJ1xcdTAxMzknOiAnTCcsXG4gICAgJ1xcdTAxM0QnOiAnTCcsXG4gICAgJ1xcdTFFMzYnOiAnTCcsXG4gICAgJ1xcdTFFMzgnOiAnTCcsXG4gICAgJ1xcdTAxM0InOiAnTCcsXG4gICAgJ1xcdTFFM0MnOiAnTCcsXG4gICAgJ1xcdTFFM0EnOiAnTCcsXG4gICAgJ1xcdTAxNDEnOiAnTCcsXG4gICAgJ1xcdTAyM0QnOiAnTCcsXG4gICAgJ1xcdTJDNjInOiAnTCcsXG4gICAgJ1xcdTJDNjAnOiAnTCcsXG4gICAgJ1xcdUE3NDgnOiAnTCcsXG4gICAgJ1xcdUE3NDYnOiAnTCcsXG4gICAgJ1xcdUE3ODAnOiAnTCcsXG4gICAgJ1xcdTAxQzcnOiAnTEonLFxuICAgICdcXHUwMUM4JzogJ0xqJyxcbiAgICAnXFx1MjRDMic6ICdNJyxcbiAgICAnXFx1RkYyRCc6ICdNJyxcbiAgICAnXFx1MUUzRSc6ICdNJyxcbiAgICAnXFx1MUU0MCc6ICdNJyxcbiAgICAnXFx1MUU0Mic6ICdNJyxcbiAgICAnXFx1MkM2RSc6ICdNJyxcbiAgICAnXFx1MDE5Qyc6ICdNJyxcbiAgICAnXFx1MjRDMyc6ICdOJyxcbiAgICAnXFx1RkYyRSc6ICdOJyxcbiAgICAnXFx1MDFGOCc6ICdOJyxcbiAgICAnXFx1MDE0Myc6ICdOJyxcbiAgICAnXFx1MDBEMSc6ICdOJyxcbiAgICAnXFx1MUU0NCc6ICdOJyxcbiAgICAnXFx1MDE0Nyc6ICdOJyxcbiAgICAnXFx1MUU0Nic6ICdOJyxcbiAgICAnXFx1MDE0NSc6ICdOJyxcbiAgICAnXFx1MUU0QSc6ICdOJyxcbiAgICAnXFx1MUU0OCc6ICdOJyxcbiAgICAnXFx1MDIyMCc6ICdOJyxcbiAgICAnXFx1MDE5RCc6ICdOJyxcbiAgICAnXFx1QTc5MCc6ICdOJyxcbiAgICAnXFx1QTdBNCc6ICdOJyxcbiAgICAnXFx1MDFDQSc6ICdOSicsXG4gICAgJ1xcdTAxQ0InOiAnTmonLFxuICAgICdcXHUyNEM0JzogJ08nLFxuICAgICdcXHVGRjJGJzogJ08nLFxuICAgICdcXHUwMEQyJzogJ08nLFxuICAgICdcXHUwMEQzJzogJ08nLFxuICAgICdcXHUwMEQ0JzogJ08nLFxuICAgICdcXHUxRUQyJzogJ08nLFxuICAgICdcXHUxRUQwJzogJ08nLFxuICAgICdcXHUxRUQ2JzogJ08nLFxuICAgICdcXHUxRUQ0JzogJ08nLFxuICAgICdcXHUwMEQ1JzogJ08nLFxuICAgICdcXHUxRTRDJzogJ08nLFxuICAgICdcXHUwMjJDJzogJ08nLFxuICAgICdcXHUxRTRFJzogJ08nLFxuICAgICdcXHUwMTRDJzogJ08nLFxuICAgICdcXHUxRTUwJzogJ08nLFxuICAgICdcXHUxRTUyJzogJ08nLFxuICAgICdcXHUwMTRFJzogJ08nLFxuICAgICdcXHUwMjJFJzogJ08nLFxuICAgICdcXHUwMjMwJzogJ08nLFxuICAgICdcXHUwMEQ2JzogJ08nLFxuICAgICdcXHUwMjJBJzogJ08nLFxuICAgICdcXHUxRUNFJzogJ08nLFxuICAgICdcXHUwMTUwJzogJ08nLFxuICAgICdcXHUwMUQxJzogJ08nLFxuICAgICdcXHUwMjBDJzogJ08nLFxuICAgICdcXHUwMjBFJzogJ08nLFxuICAgICdcXHUwMUEwJzogJ08nLFxuICAgICdcXHUxRURDJzogJ08nLFxuICAgICdcXHUxRURBJzogJ08nLFxuICAgICdcXHUxRUUwJzogJ08nLFxuICAgICdcXHUxRURFJzogJ08nLFxuICAgICdcXHUxRUUyJzogJ08nLFxuICAgICdcXHUxRUNDJzogJ08nLFxuICAgICdcXHUxRUQ4JzogJ08nLFxuICAgICdcXHUwMUVBJzogJ08nLFxuICAgICdcXHUwMUVDJzogJ08nLFxuICAgICdcXHUwMEQ4JzogJ08nLFxuICAgICdcXHUwMUZFJzogJ08nLFxuICAgICdcXHUwMTg2JzogJ08nLFxuICAgICdcXHUwMTlGJzogJ08nLFxuICAgICdcXHVBNzRBJzogJ08nLFxuICAgICdcXHVBNzRDJzogJ08nLFxuICAgICdcXHUwMTUyJzogJ09FJyxcbiAgICAnXFx1MDFBMic6ICdPSScsXG4gICAgJ1xcdUE3NEUnOiAnT08nLFxuICAgICdcXHUwMjIyJzogJ09VJyxcbiAgICAnXFx1MjRDNSc6ICdQJyxcbiAgICAnXFx1RkYzMCc6ICdQJyxcbiAgICAnXFx1MUU1NCc6ICdQJyxcbiAgICAnXFx1MUU1Nic6ICdQJyxcbiAgICAnXFx1MDFBNCc6ICdQJyxcbiAgICAnXFx1MkM2Myc6ICdQJyxcbiAgICAnXFx1QTc1MCc6ICdQJyxcbiAgICAnXFx1QTc1Mic6ICdQJyxcbiAgICAnXFx1QTc1NCc6ICdQJyxcbiAgICAnXFx1MjRDNic6ICdRJyxcbiAgICAnXFx1RkYzMSc6ICdRJyxcbiAgICAnXFx1QTc1Nic6ICdRJyxcbiAgICAnXFx1QTc1OCc6ICdRJyxcbiAgICAnXFx1MDI0QSc6ICdRJyxcbiAgICAnXFx1MjRDNyc6ICdSJyxcbiAgICAnXFx1RkYzMic6ICdSJyxcbiAgICAnXFx1MDE1NCc6ICdSJyxcbiAgICAnXFx1MUU1OCc6ICdSJyxcbiAgICAnXFx1MDE1OCc6ICdSJyxcbiAgICAnXFx1MDIxMCc6ICdSJyxcbiAgICAnXFx1MDIxMic6ICdSJyxcbiAgICAnXFx1MUU1QSc6ICdSJyxcbiAgICAnXFx1MUU1Qyc6ICdSJyxcbiAgICAnXFx1MDE1Nic6ICdSJyxcbiAgICAnXFx1MUU1RSc6ICdSJyxcbiAgICAnXFx1MDI0Qyc6ICdSJyxcbiAgICAnXFx1MkM2NCc6ICdSJyxcbiAgICAnXFx1QTc1QSc6ICdSJyxcbiAgICAnXFx1QTdBNic6ICdSJyxcbiAgICAnXFx1QTc4Mic6ICdSJyxcbiAgICAnXFx1MjRDOCc6ICdTJyxcbiAgICAnXFx1RkYzMyc6ICdTJyxcbiAgICAnXFx1MUU5RSc6ICdTJyxcbiAgICAnXFx1MDE1QSc6ICdTJyxcbiAgICAnXFx1MUU2NCc6ICdTJyxcbiAgICAnXFx1MDE1Qyc6ICdTJyxcbiAgICAnXFx1MUU2MCc6ICdTJyxcbiAgICAnXFx1MDE2MCc6ICdTJyxcbiAgICAnXFx1MUU2Nic6ICdTJyxcbiAgICAnXFx1MUU2Mic6ICdTJyxcbiAgICAnXFx1MUU2OCc6ICdTJyxcbiAgICAnXFx1MDIxOCc6ICdTJyxcbiAgICAnXFx1MDE1RSc6ICdTJyxcbiAgICAnXFx1MkM3RSc6ICdTJyxcbiAgICAnXFx1QTdBOCc6ICdTJyxcbiAgICAnXFx1QTc4NCc6ICdTJyxcbiAgICAnXFx1MjRDOSc6ICdUJyxcbiAgICAnXFx1RkYzNCc6ICdUJyxcbiAgICAnXFx1MUU2QSc6ICdUJyxcbiAgICAnXFx1MDE2NCc6ICdUJyxcbiAgICAnXFx1MUU2Qyc6ICdUJyxcbiAgICAnXFx1MDIxQSc6ICdUJyxcbiAgICAnXFx1MDE2Mic6ICdUJyxcbiAgICAnXFx1MUU3MCc6ICdUJyxcbiAgICAnXFx1MUU2RSc6ICdUJyxcbiAgICAnXFx1MDE2Nic6ICdUJyxcbiAgICAnXFx1MDFBQyc6ICdUJyxcbiAgICAnXFx1MDFBRSc6ICdUJyxcbiAgICAnXFx1MDIzRSc6ICdUJyxcbiAgICAnXFx1QTc4Nic6ICdUJyxcbiAgICAnXFx1QTcyOCc6ICdUWicsXG4gICAgJ1xcdTI0Q0EnOiAnVScsXG4gICAgJ1xcdUZGMzUnOiAnVScsXG4gICAgJ1xcdTAwRDknOiAnVScsXG4gICAgJ1xcdTAwREEnOiAnVScsXG4gICAgJ1xcdTAwREInOiAnVScsXG4gICAgJ1xcdTAxNjgnOiAnVScsXG4gICAgJ1xcdTFFNzgnOiAnVScsXG4gICAgJ1xcdTAxNkEnOiAnVScsXG4gICAgJ1xcdTFFN0EnOiAnVScsXG4gICAgJ1xcdTAxNkMnOiAnVScsXG4gICAgJ1xcdTAwREMnOiAnVScsXG4gICAgJ1xcdTAxREInOiAnVScsXG4gICAgJ1xcdTAxRDcnOiAnVScsXG4gICAgJ1xcdTAxRDUnOiAnVScsXG4gICAgJ1xcdTAxRDknOiAnVScsXG4gICAgJ1xcdTFFRTYnOiAnVScsXG4gICAgJ1xcdTAxNkUnOiAnVScsXG4gICAgJ1xcdTAxNzAnOiAnVScsXG4gICAgJ1xcdTAxRDMnOiAnVScsXG4gICAgJ1xcdTAyMTQnOiAnVScsXG4gICAgJ1xcdTAyMTYnOiAnVScsXG4gICAgJ1xcdTAxQUYnOiAnVScsXG4gICAgJ1xcdTFFRUEnOiAnVScsXG4gICAgJ1xcdTFFRTgnOiAnVScsXG4gICAgJ1xcdTFFRUUnOiAnVScsXG4gICAgJ1xcdTFFRUMnOiAnVScsXG4gICAgJ1xcdTFFRjAnOiAnVScsXG4gICAgJ1xcdTFFRTQnOiAnVScsXG4gICAgJ1xcdTFFNzInOiAnVScsXG4gICAgJ1xcdTAxNzInOiAnVScsXG4gICAgJ1xcdTFFNzYnOiAnVScsXG4gICAgJ1xcdTFFNzQnOiAnVScsXG4gICAgJ1xcdTAyNDQnOiAnVScsXG4gICAgJ1xcdTI0Q0InOiAnVicsXG4gICAgJ1xcdUZGMzYnOiAnVicsXG4gICAgJ1xcdTFFN0MnOiAnVicsXG4gICAgJ1xcdTFFN0UnOiAnVicsXG4gICAgJ1xcdTAxQjInOiAnVicsXG4gICAgJ1xcdUE3NUUnOiAnVicsXG4gICAgJ1xcdTAyNDUnOiAnVicsXG4gICAgJ1xcdUE3NjAnOiAnVlknLFxuICAgICdcXHUyNENDJzogJ1cnLFxuICAgICdcXHVGRjM3JzogJ1cnLFxuICAgICdcXHUxRTgwJzogJ1cnLFxuICAgICdcXHUxRTgyJzogJ1cnLFxuICAgICdcXHUwMTc0JzogJ1cnLFxuICAgICdcXHUxRTg2JzogJ1cnLFxuICAgICdcXHUxRTg0JzogJ1cnLFxuICAgICdcXHUxRTg4JzogJ1cnLFxuICAgICdcXHUyQzcyJzogJ1cnLFxuICAgICdcXHUyNENEJzogJ1gnLFxuICAgICdcXHVGRjM4JzogJ1gnLFxuICAgICdcXHUxRThBJzogJ1gnLFxuICAgICdcXHUxRThDJzogJ1gnLFxuICAgICdcXHUyNENFJzogJ1knLFxuICAgICdcXHVGRjM5JzogJ1knLFxuICAgICdcXHUxRUYyJzogJ1knLFxuICAgICdcXHUwMEREJzogJ1knLFxuICAgICdcXHUwMTc2JzogJ1knLFxuICAgICdcXHUxRUY4JzogJ1knLFxuICAgICdcXHUwMjMyJzogJ1knLFxuICAgICdcXHUxRThFJzogJ1knLFxuICAgICdcXHUwMTc4JzogJ1knLFxuICAgICdcXHUxRUY2JzogJ1knLFxuICAgICdcXHUxRUY0JzogJ1knLFxuICAgICdcXHUwMUIzJzogJ1knLFxuICAgICdcXHUwMjRFJzogJ1knLFxuICAgICdcXHUxRUZFJzogJ1knLFxuICAgICdcXHUyNENGJzogJ1onLFxuICAgICdcXHVGRjNBJzogJ1onLFxuICAgICdcXHUwMTc5JzogJ1onLFxuICAgICdcXHUxRTkwJzogJ1onLFxuICAgICdcXHUwMTdCJzogJ1onLFxuICAgICdcXHUwMTdEJzogJ1onLFxuICAgICdcXHUxRTkyJzogJ1onLFxuICAgICdcXHUxRTk0JzogJ1onLFxuICAgICdcXHUwMUI1JzogJ1onLFxuICAgICdcXHUwMjI0JzogJ1onLFxuICAgICdcXHUyQzdGJzogJ1onLFxuICAgICdcXHUyQzZCJzogJ1onLFxuICAgICdcXHVBNzYyJzogJ1onLFxuICAgICdcXHUyNEQwJzogJ2EnLFxuICAgICdcXHVGRjQxJzogJ2EnLFxuICAgICdcXHUxRTlBJzogJ2EnLFxuICAgICdcXHUwMEUwJzogJ2EnLFxuICAgICdcXHUwMEUxJzogJ2EnLFxuICAgICdcXHUwMEUyJzogJ2EnLFxuICAgICdcXHUxRUE3JzogJ2EnLFxuICAgICdcXHUxRUE1JzogJ2EnLFxuICAgICdcXHUxRUFCJzogJ2EnLFxuICAgICdcXHUxRUE5JzogJ2EnLFxuICAgICdcXHUwMEUzJzogJ2EnLFxuICAgICdcXHUwMTAxJzogJ2EnLFxuICAgICdcXHUwMTAzJzogJ2EnLFxuICAgICdcXHUxRUIxJzogJ2EnLFxuICAgICdcXHUxRUFGJzogJ2EnLFxuICAgICdcXHUxRUI1JzogJ2EnLFxuICAgICdcXHUxRUIzJzogJ2EnLFxuICAgICdcXHUwMjI3JzogJ2EnLFxuICAgICdcXHUwMUUxJzogJ2EnLFxuICAgICdcXHUwMEU0JzogJ2EnLFxuICAgICdcXHUwMURGJzogJ2EnLFxuICAgICdcXHUxRUEzJzogJ2EnLFxuICAgICdcXHUwMEU1JzogJ2EnLFxuICAgICdcXHUwMUZCJzogJ2EnLFxuICAgICdcXHUwMUNFJzogJ2EnLFxuICAgICdcXHUwMjAxJzogJ2EnLFxuICAgICdcXHUwMjAzJzogJ2EnLFxuICAgICdcXHUxRUExJzogJ2EnLFxuICAgICdcXHUxRUFEJzogJ2EnLFxuICAgICdcXHUxRUI3JzogJ2EnLFxuICAgICdcXHUxRTAxJzogJ2EnLFxuICAgICdcXHUwMTA1JzogJ2EnLFxuICAgICdcXHUyQzY1JzogJ2EnLFxuICAgICdcXHUwMjUwJzogJ2EnLFxuICAgICdcXHVBNzMzJzogJ2FhJyxcbiAgICAnXFx1MDBFNic6ICdhZScsXG4gICAgJ1xcdTAxRkQnOiAnYWUnLFxuICAgICdcXHUwMUUzJzogJ2FlJyxcbiAgICAnXFx1QTczNSc6ICdhbycsXG4gICAgJ1xcdUE3MzcnOiAnYXUnLFxuICAgICdcXHVBNzM5JzogJ2F2JyxcbiAgICAnXFx1QTczQic6ICdhdicsXG4gICAgJ1xcdUE3M0QnOiAnYXknLFxuICAgICdcXHUyNEQxJzogJ2InLFxuICAgICdcXHVGRjQyJzogJ2InLFxuICAgICdcXHUxRTAzJzogJ2InLFxuICAgICdcXHUxRTA1JzogJ2InLFxuICAgICdcXHUxRTA3JzogJ2InLFxuICAgICdcXHUwMTgwJzogJ2InLFxuICAgICdcXHUwMTgzJzogJ2InLFxuICAgICdcXHUwMjUzJzogJ2InLFxuICAgICdcXHUyNEQyJzogJ2MnLFxuICAgICdcXHVGRjQzJzogJ2MnLFxuICAgICdcXHUwMTA3JzogJ2MnLFxuICAgICdcXHUwMTA5JzogJ2MnLFxuICAgICdcXHUwMTBCJzogJ2MnLFxuICAgICdcXHUwMTBEJzogJ2MnLFxuICAgICdcXHUwMEU3JzogJ2MnLFxuICAgICdcXHUxRTA5JzogJ2MnLFxuICAgICdcXHUwMTg4JzogJ2MnLFxuICAgICdcXHUwMjNDJzogJ2MnLFxuICAgICdcXHVBNzNGJzogJ2MnLFxuICAgICdcXHUyMTg0JzogJ2MnLFxuICAgICdcXHUyNEQzJzogJ2QnLFxuICAgICdcXHVGRjQ0JzogJ2QnLFxuICAgICdcXHUxRTBCJzogJ2QnLFxuICAgICdcXHUwMTBGJzogJ2QnLFxuICAgICdcXHUxRTBEJzogJ2QnLFxuICAgICdcXHUxRTExJzogJ2QnLFxuICAgICdcXHUxRTEzJzogJ2QnLFxuICAgICdcXHUxRTBGJzogJ2QnLFxuICAgICdcXHUwMTExJzogJ2QnLFxuICAgICdcXHUwMThDJzogJ2QnLFxuICAgICdcXHUwMjU2JzogJ2QnLFxuICAgICdcXHUwMjU3JzogJ2QnLFxuICAgICdcXHVBNzdBJzogJ2QnLFxuICAgICdcXHUwMUYzJzogJ2R6JyxcbiAgICAnXFx1MDFDNic6ICdkeicsXG4gICAgJ1xcdTI0RDQnOiAnZScsXG4gICAgJ1xcdUZGNDUnOiAnZScsXG4gICAgJ1xcdTAwRTgnOiAnZScsXG4gICAgJ1xcdTAwRTknOiAnZScsXG4gICAgJ1xcdTAwRUEnOiAnZScsXG4gICAgJ1xcdTFFQzEnOiAnZScsXG4gICAgJ1xcdTFFQkYnOiAnZScsXG4gICAgJ1xcdTFFQzUnOiAnZScsXG4gICAgJ1xcdTFFQzMnOiAnZScsXG4gICAgJ1xcdTFFQkQnOiAnZScsXG4gICAgJ1xcdTAxMTMnOiAnZScsXG4gICAgJ1xcdTFFMTUnOiAnZScsXG4gICAgJ1xcdTFFMTcnOiAnZScsXG4gICAgJ1xcdTAxMTUnOiAnZScsXG4gICAgJ1xcdTAxMTcnOiAnZScsXG4gICAgJ1xcdTAwRUInOiAnZScsXG4gICAgJ1xcdTFFQkInOiAnZScsXG4gICAgJ1xcdTAxMUInOiAnZScsXG4gICAgJ1xcdTAyMDUnOiAnZScsXG4gICAgJ1xcdTAyMDcnOiAnZScsXG4gICAgJ1xcdTFFQjknOiAnZScsXG4gICAgJ1xcdTFFQzcnOiAnZScsXG4gICAgJ1xcdTAyMjknOiAnZScsXG4gICAgJ1xcdTFFMUQnOiAnZScsXG4gICAgJ1xcdTAxMTknOiAnZScsXG4gICAgJ1xcdTFFMTknOiAnZScsXG4gICAgJ1xcdTFFMUInOiAnZScsXG4gICAgJ1xcdTAyNDcnOiAnZScsXG4gICAgJ1xcdTAyNUInOiAnZScsXG4gICAgJ1xcdTAxREQnOiAnZScsXG4gICAgJ1xcdTI0RDUnOiAnZicsXG4gICAgJ1xcdUZGNDYnOiAnZicsXG4gICAgJ1xcdTFFMUYnOiAnZicsXG4gICAgJ1xcdTAxOTInOiAnZicsXG4gICAgJ1xcdUE3N0MnOiAnZicsXG4gICAgJ1xcdTI0RDYnOiAnZycsXG4gICAgJ1xcdUZGNDcnOiAnZycsXG4gICAgJ1xcdTAxRjUnOiAnZycsXG4gICAgJ1xcdTAxMUQnOiAnZycsXG4gICAgJ1xcdTFFMjEnOiAnZycsXG4gICAgJ1xcdTAxMUYnOiAnZycsXG4gICAgJ1xcdTAxMjEnOiAnZycsXG4gICAgJ1xcdTAxRTcnOiAnZycsXG4gICAgJ1xcdTAxMjMnOiAnZycsXG4gICAgJ1xcdTAxRTUnOiAnZycsXG4gICAgJ1xcdTAyNjAnOiAnZycsXG4gICAgJ1xcdUE3QTEnOiAnZycsXG4gICAgJ1xcdTFENzknOiAnZycsXG4gICAgJ1xcdUE3N0YnOiAnZycsXG4gICAgJ1xcdTI0RDcnOiAnaCcsXG4gICAgJ1xcdUZGNDgnOiAnaCcsXG4gICAgJ1xcdTAxMjUnOiAnaCcsXG4gICAgJ1xcdTFFMjMnOiAnaCcsXG4gICAgJ1xcdTFFMjcnOiAnaCcsXG4gICAgJ1xcdTAyMUYnOiAnaCcsXG4gICAgJ1xcdTFFMjUnOiAnaCcsXG4gICAgJ1xcdTFFMjknOiAnaCcsXG4gICAgJ1xcdTFFMkInOiAnaCcsXG4gICAgJ1xcdTFFOTYnOiAnaCcsXG4gICAgJ1xcdTAxMjcnOiAnaCcsXG4gICAgJ1xcdTJDNjgnOiAnaCcsXG4gICAgJ1xcdTJDNzYnOiAnaCcsXG4gICAgJ1xcdTAyNjUnOiAnaCcsXG4gICAgJ1xcdTAxOTUnOiAnaHYnLFxuICAgICdcXHUyNEQ4JzogJ2knLFxuICAgICdcXHVGRjQ5JzogJ2knLFxuICAgICdcXHUwMEVDJzogJ2knLFxuICAgICdcXHUwMEVEJzogJ2knLFxuICAgICdcXHUwMEVFJzogJ2knLFxuICAgICdcXHUwMTI5JzogJ2knLFxuICAgICdcXHUwMTJCJzogJ2knLFxuICAgICdcXHUwMTJEJzogJ2knLFxuICAgICdcXHUwMEVGJzogJ2knLFxuICAgICdcXHUxRTJGJzogJ2knLFxuICAgICdcXHUxRUM5JzogJ2knLFxuICAgICdcXHUwMUQwJzogJ2knLFxuICAgICdcXHUwMjA5JzogJ2knLFxuICAgICdcXHUwMjBCJzogJ2knLFxuICAgICdcXHUxRUNCJzogJ2knLFxuICAgICdcXHUwMTJGJzogJ2knLFxuICAgICdcXHUxRTJEJzogJ2knLFxuICAgICdcXHUwMjY4JzogJ2knLFxuICAgICdcXHUwMTMxJzogJ2knLFxuICAgICdcXHUyNEQ5JzogJ2onLFxuICAgICdcXHVGRjRBJzogJ2onLFxuICAgICdcXHUwMTM1JzogJ2onLFxuICAgICdcXHUwMUYwJzogJ2onLFxuICAgICdcXHUwMjQ5JzogJ2onLFxuICAgICdcXHUyNERBJzogJ2snLFxuICAgICdcXHVGRjRCJzogJ2snLFxuICAgICdcXHUxRTMxJzogJ2snLFxuICAgICdcXHUwMUU5JzogJ2snLFxuICAgICdcXHUxRTMzJzogJ2snLFxuICAgICdcXHUwMTM3JzogJ2snLFxuICAgICdcXHUxRTM1JzogJ2snLFxuICAgICdcXHUwMTk5JzogJ2snLFxuICAgICdcXHUyQzZBJzogJ2snLFxuICAgICdcXHVBNzQxJzogJ2snLFxuICAgICdcXHVBNzQzJzogJ2snLFxuICAgICdcXHVBNzQ1JzogJ2snLFxuICAgICdcXHVBN0EzJzogJ2snLFxuICAgICdcXHUyNERCJzogJ2wnLFxuICAgICdcXHVGRjRDJzogJ2wnLFxuICAgICdcXHUwMTQwJzogJ2wnLFxuICAgICdcXHUwMTNBJzogJ2wnLFxuICAgICdcXHUwMTNFJzogJ2wnLFxuICAgICdcXHUxRTM3JzogJ2wnLFxuICAgICdcXHUxRTM5JzogJ2wnLFxuICAgICdcXHUwMTNDJzogJ2wnLFxuICAgICdcXHUxRTNEJzogJ2wnLFxuICAgICdcXHUxRTNCJzogJ2wnLFxuICAgICdcXHUwMTdGJzogJ2wnLFxuICAgICdcXHUwMTQyJzogJ2wnLFxuICAgICdcXHUwMTlBJzogJ2wnLFxuICAgICdcXHUwMjZCJzogJ2wnLFxuICAgICdcXHUyQzYxJzogJ2wnLFxuICAgICdcXHVBNzQ5JzogJ2wnLFxuICAgICdcXHVBNzgxJzogJ2wnLFxuICAgICdcXHVBNzQ3JzogJ2wnLFxuICAgICdcXHUwMUM5JzogJ2xqJyxcbiAgICAnXFx1MjREQyc6ICdtJyxcbiAgICAnXFx1RkY0RCc6ICdtJyxcbiAgICAnXFx1MUUzRic6ICdtJyxcbiAgICAnXFx1MUU0MSc6ICdtJyxcbiAgICAnXFx1MUU0Myc6ICdtJyxcbiAgICAnXFx1MDI3MSc6ICdtJyxcbiAgICAnXFx1MDI2Ric6ICdtJyxcbiAgICAnXFx1MjRERCc6ICduJyxcbiAgICAnXFx1RkY0RSc6ICduJyxcbiAgICAnXFx1MDFGOSc6ICduJyxcbiAgICAnXFx1MDE0NCc6ICduJyxcbiAgICAnXFx1MDBGMSc6ICduJyxcbiAgICAnXFx1MUU0NSc6ICduJyxcbiAgICAnXFx1MDE0OCc6ICduJyxcbiAgICAnXFx1MUU0Nyc6ICduJyxcbiAgICAnXFx1MDE0Nic6ICduJyxcbiAgICAnXFx1MUU0Qic6ICduJyxcbiAgICAnXFx1MUU0OSc6ICduJyxcbiAgICAnXFx1MDE5RSc6ICduJyxcbiAgICAnXFx1MDI3Mic6ICduJyxcbiAgICAnXFx1MDE0OSc6ICduJyxcbiAgICAnXFx1QTc5MSc6ICduJyxcbiAgICAnXFx1QTdBNSc6ICduJyxcbiAgICAnXFx1MDFDQyc6ICduaicsXG4gICAgJ1xcdTI0REUnOiAnbycsXG4gICAgJ1xcdUZGNEYnOiAnbycsXG4gICAgJ1xcdTAwRjInOiAnbycsXG4gICAgJ1xcdTAwRjMnOiAnbycsXG4gICAgJ1xcdTAwRjQnOiAnbycsXG4gICAgJ1xcdTFFRDMnOiAnbycsXG4gICAgJ1xcdTFFRDEnOiAnbycsXG4gICAgJ1xcdTFFRDcnOiAnbycsXG4gICAgJ1xcdTFFRDUnOiAnbycsXG4gICAgJ1xcdTAwRjUnOiAnbycsXG4gICAgJ1xcdTFFNEQnOiAnbycsXG4gICAgJ1xcdTAyMkQnOiAnbycsXG4gICAgJ1xcdTFFNEYnOiAnbycsXG4gICAgJ1xcdTAxNEQnOiAnbycsXG4gICAgJ1xcdTFFNTEnOiAnbycsXG4gICAgJ1xcdTFFNTMnOiAnbycsXG4gICAgJ1xcdTAxNEYnOiAnbycsXG4gICAgJ1xcdTAyMkYnOiAnbycsXG4gICAgJ1xcdTAyMzEnOiAnbycsXG4gICAgJ1xcdTAwRjYnOiAnbycsXG4gICAgJ1xcdTAyMkInOiAnbycsXG4gICAgJ1xcdTFFQ0YnOiAnbycsXG4gICAgJ1xcdTAxNTEnOiAnbycsXG4gICAgJ1xcdTAxRDInOiAnbycsXG4gICAgJ1xcdTAyMEQnOiAnbycsXG4gICAgJ1xcdTAyMEYnOiAnbycsXG4gICAgJ1xcdTAxQTEnOiAnbycsXG4gICAgJ1xcdTFFREQnOiAnbycsXG4gICAgJ1xcdTFFREInOiAnbycsXG4gICAgJ1xcdTFFRTEnOiAnbycsXG4gICAgJ1xcdTFFREYnOiAnbycsXG4gICAgJ1xcdTFFRTMnOiAnbycsXG4gICAgJ1xcdTFFQ0QnOiAnbycsXG4gICAgJ1xcdTFFRDknOiAnbycsXG4gICAgJ1xcdTAxRUInOiAnbycsXG4gICAgJ1xcdTAxRUQnOiAnbycsXG4gICAgJ1xcdTAwRjgnOiAnbycsXG4gICAgJ1xcdTAxRkYnOiAnbycsXG4gICAgJ1xcdTAyNTQnOiAnbycsXG4gICAgJ1xcdUE3NEInOiAnbycsXG4gICAgJ1xcdUE3NEQnOiAnbycsXG4gICAgJ1xcdTAyNzUnOiAnbycsXG4gICAgJ1xcdTAxNTMnOiAnb2UnLFxuICAgICdcXHUwMUEzJzogJ29pJyxcbiAgICAnXFx1MDIyMyc6ICdvdScsXG4gICAgJ1xcdUE3NEYnOiAnb28nLFxuICAgICdcXHUyNERGJzogJ3AnLFxuICAgICdcXHVGRjUwJzogJ3AnLFxuICAgICdcXHUxRTU1JzogJ3AnLFxuICAgICdcXHUxRTU3JzogJ3AnLFxuICAgICdcXHUwMUE1JzogJ3AnLFxuICAgICdcXHUxRDdEJzogJ3AnLFxuICAgICdcXHVBNzUxJzogJ3AnLFxuICAgICdcXHVBNzUzJzogJ3AnLFxuICAgICdcXHVBNzU1JzogJ3AnLFxuICAgICdcXHUyNEUwJzogJ3EnLFxuICAgICdcXHVGRjUxJzogJ3EnLFxuICAgICdcXHUwMjRCJzogJ3EnLFxuICAgICdcXHVBNzU3JzogJ3EnLFxuICAgICdcXHVBNzU5JzogJ3EnLFxuICAgICdcXHUyNEUxJzogJ3InLFxuICAgICdcXHVGRjUyJzogJ3InLFxuICAgICdcXHUwMTU1JzogJ3InLFxuICAgICdcXHUxRTU5JzogJ3InLFxuICAgICdcXHUwMTU5JzogJ3InLFxuICAgICdcXHUwMjExJzogJ3InLFxuICAgICdcXHUwMjEzJzogJ3InLFxuICAgICdcXHUxRTVCJzogJ3InLFxuICAgICdcXHUxRTVEJzogJ3InLFxuICAgICdcXHUwMTU3JzogJ3InLFxuICAgICdcXHUxRTVGJzogJ3InLFxuICAgICdcXHUwMjREJzogJ3InLFxuICAgICdcXHUwMjdEJzogJ3InLFxuICAgICdcXHVBNzVCJzogJ3InLFxuICAgICdcXHVBN0E3JzogJ3InLFxuICAgICdcXHVBNzgzJzogJ3InLFxuICAgICdcXHUyNEUyJzogJ3MnLFxuICAgICdcXHVGRjUzJzogJ3MnLFxuICAgICdcXHUwMERGJzogJ3MnLFxuICAgICdcXHUwMTVCJzogJ3MnLFxuICAgICdcXHUxRTY1JzogJ3MnLFxuICAgICdcXHUwMTVEJzogJ3MnLFxuICAgICdcXHUxRTYxJzogJ3MnLFxuICAgICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUxRTY3JzogJ3MnLFxuICAgICdcXHUxRTYzJzogJ3MnLFxuICAgICdcXHUxRTY5JzogJ3MnLFxuICAgICdcXHUwMjE5JzogJ3MnLFxuICAgICdcXHUwMTVGJzogJ3MnLFxuICAgICdcXHUwMjNGJzogJ3MnLFxuICAgICdcXHVBN0E5JzogJ3MnLFxuICAgICdcXHVBNzg1JzogJ3MnLFxuICAgICdcXHUxRTlCJzogJ3MnLFxuICAgICdcXHUyNEUzJzogJ3QnLFxuICAgICdcXHVGRjU0JzogJ3QnLFxuICAgICdcXHUxRTZCJzogJ3QnLFxuICAgICdcXHUxRTk3JzogJ3QnLFxuICAgICdcXHUwMTY1JzogJ3QnLFxuICAgICdcXHUxRTZEJzogJ3QnLFxuICAgICdcXHUwMjFCJzogJ3QnLFxuICAgICdcXHUwMTYzJzogJ3QnLFxuICAgICdcXHUxRTcxJzogJ3QnLFxuICAgICdcXHUxRTZGJzogJ3QnLFxuICAgICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMUFEJzogJ3QnLFxuICAgICdcXHUwMjg4JzogJ3QnLFxuICAgICdcXHUyQzY2JzogJ3QnLFxuICAgICdcXHVBNzg3JzogJ3QnLFxuICAgICdcXHVBNzI5JzogJ3R6JyxcbiAgICAnXFx1MjRFNCc6ICd1JyxcbiAgICAnXFx1RkY1NSc6ICd1JyxcbiAgICAnXFx1MDBGOSc6ICd1JyxcbiAgICAnXFx1MDBGQSc6ICd1JyxcbiAgICAnXFx1MDBGQic6ICd1JyxcbiAgICAnXFx1MDE2OSc6ICd1JyxcbiAgICAnXFx1MUU3OSc6ICd1JyxcbiAgICAnXFx1MDE2Qic6ICd1JyxcbiAgICAnXFx1MUU3Qic6ICd1JyxcbiAgICAnXFx1MDE2RCc6ICd1JyxcbiAgICAnXFx1MDBGQyc6ICd1JyxcbiAgICAnXFx1MDFEQyc6ICd1JyxcbiAgICAnXFx1MDFEOCc6ICd1JyxcbiAgICAnXFx1MDFENic6ICd1JyxcbiAgICAnXFx1MDFEQSc6ICd1JyxcbiAgICAnXFx1MUVFNyc6ICd1JyxcbiAgICAnXFx1MDE2Ric6ICd1JyxcbiAgICAnXFx1MDE3MSc6ICd1JyxcbiAgICAnXFx1MDFENCc6ICd1JyxcbiAgICAnXFx1MDIxNSc6ICd1JyxcbiAgICAnXFx1MDIxNyc6ICd1JyxcbiAgICAnXFx1MDFCMCc6ICd1JyxcbiAgICAnXFx1MUVFQic6ICd1JyxcbiAgICAnXFx1MUVFOSc6ICd1JyxcbiAgICAnXFx1MUVFRic6ICd1JyxcbiAgICAnXFx1MUVFRCc6ICd1JyxcbiAgICAnXFx1MUVGMSc6ICd1JyxcbiAgICAnXFx1MUVFNSc6ICd1JyxcbiAgICAnXFx1MUU3Myc6ICd1JyxcbiAgICAnXFx1MDE3Myc6ICd1JyxcbiAgICAnXFx1MUU3Nyc6ICd1JyxcbiAgICAnXFx1MUU3NSc6ICd1JyxcbiAgICAnXFx1MDI4OSc6ICd1JyxcbiAgICAnXFx1MjRFNSc6ICd2JyxcbiAgICAnXFx1RkY1Nic6ICd2JyxcbiAgICAnXFx1MUU3RCc6ICd2JyxcbiAgICAnXFx1MUU3Ric6ICd2JyxcbiAgICAnXFx1MDI4Qic6ICd2JyxcbiAgICAnXFx1QTc1Ric6ICd2JyxcbiAgICAnXFx1MDI4Qyc6ICd2JyxcbiAgICAnXFx1QTc2MSc6ICd2eScsXG4gICAgJ1xcdTI0RTYnOiAndycsXG4gICAgJ1xcdUZGNTcnOiAndycsXG4gICAgJ1xcdTFFODEnOiAndycsXG4gICAgJ1xcdTFFODMnOiAndycsXG4gICAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTFFODcnOiAndycsXG4gICAgJ1xcdTFFODUnOiAndycsXG4gICAgJ1xcdTFFOTgnOiAndycsXG4gICAgJ1xcdTFFODknOiAndycsXG4gICAgJ1xcdTJDNzMnOiAndycsXG4gICAgJ1xcdTI0RTcnOiAneCcsXG4gICAgJ1xcdUZGNTgnOiAneCcsXG4gICAgJ1xcdTFFOEInOiAneCcsXG4gICAgJ1xcdTFFOEQnOiAneCcsXG4gICAgJ1xcdTI0RTgnOiAneScsXG4gICAgJ1xcdUZGNTknOiAneScsXG4gICAgJ1xcdTFFRjMnOiAneScsXG4gICAgJ1xcdTAwRkQnOiAneScsXG4gICAgJ1xcdTAxNzcnOiAneScsXG4gICAgJ1xcdTFFRjknOiAneScsXG4gICAgJ1xcdTAyMzMnOiAneScsXG4gICAgJ1xcdTFFOEYnOiAneScsXG4gICAgJ1xcdTAwRkYnOiAneScsXG4gICAgJ1xcdTFFRjcnOiAneScsXG4gICAgJ1xcdTFFOTknOiAneScsXG4gICAgJ1xcdTFFRjUnOiAneScsXG4gICAgJ1xcdTAxQjQnOiAneScsXG4gICAgJ1xcdTAyNEYnOiAneScsXG4gICAgJ1xcdTFFRkYnOiAneScsXG4gICAgJ1xcdTI0RTknOiAneicsXG4gICAgJ1xcdUZGNUEnOiAneicsXG4gICAgJ1xcdTAxN0EnOiAneicsXG4gICAgJ1xcdTFFOTEnOiAneicsXG4gICAgJ1xcdTAxN0MnOiAneicsXG4gICAgJ1xcdTAxN0UnOiAneicsXG4gICAgJ1xcdTFFOTMnOiAneicsXG4gICAgJ1xcdTFFOTUnOiAneicsXG4gICAgJ1xcdTAxQjYnOiAneicsXG4gICAgJ1xcdTAyMjUnOiAneicsXG4gICAgJ1xcdTAyNDAnOiAneicsXG4gICAgJ1xcdTJDNkMnOiAneicsXG4gICAgJ1xcdUE3NjMnOiAneicsXG4gICAgJ1xcdTAzODYnOiAnXFx1MDM5MScsXG4gICAgJ1xcdTAzODgnOiAnXFx1MDM5NScsXG4gICAgJ1xcdTAzODknOiAnXFx1MDM5NycsXG4gICAgJ1xcdTAzOEEnOiAnXFx1MDM5OScsXG4gICAgJ1xcdTAzQUEnOiAnXFx1MDM5OScsXG4gICAgJ1xcdTAzOEMnOiAnXFx1MDM5RicsXG4gICAgJ1xcdTAzOEUnOiAnXFx1MDNBNScsXG4gICAgJ1xcdTAzQUInOiAnXFx1MDNBNScsXG4gICAgJ1xcdTAzOEYnOiAnXFx1MDNBOScsXG4gICAgJ1xcdTAzQUMnOiAnXFx1MDNCMScsXG4gICAgJ1xcdTAzQUQnOiAnXFx1MDNCNScsXG4gICAgJ1xcdTAzQUUnOiAnXFx1MDNCNycsXG4gICAgJ1xcdTAzQUYnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzQ0EnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzOTAnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzQ0MnOiAnXFx1MDNCRicsXG4gICAgJ1xcdTAzQ0QnOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQ0InOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQjAnOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQ0UnOiAnXFx1MDNDOScsXG4gICAgJ1xcdTAzQzInOiAnXFx1MDNDMycsXG4gICAgJ1xcdTIwMTknOiAnXFwnJ1xuICB9O1xuXG4gIHJldHVybiBkaWFjcml0aWNzO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2Jhc2UnLFtcbiAgJy4uL3V0aWxzJ1xuXSwgZnVuY3Rpb24gKFV0aWxzKSB7XG4gIGZ1bmN0aW9uIEJhc2VBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIEJhc2VBZGFwdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuICB9XG5cbiAgVXRpbHMuRXh0ZW5kKEJhc2VBZGFwdGVyLCBVdGlscy5PYnNlcnZhYmxlKTtcblxuICBCYXNlQWRhcHRlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBjdXJyZW50YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuJyk7XG4gIH07XG5cbiAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgcXVlcnlgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy4nKTtcbiAgfTtcblxuICBCYXNlQWRhcHRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICAvLyBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9O1xuXG4gIEJhc2VBZGFwdGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIENhbiBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH07XG5cbiAgQmFzZUFkYXB0ZXIucHJvdG90eXBlLmdlbmVyYXRlUmVzdWx0SWQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBkYXRhKSB7XG4gICAgdmFyIGlkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHQtJztcblxuICAgIGlkICs9IFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7XG5cbiAgICBpZiAoZGF0YS5pZCAhPSBudWxsKSB7XG4gICAgICBpZCArPSAnLScgKyBkYXRhLmlkLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkICs9ICctJyArIFV0aWxzLmdlbmVyYXRlQ2hhcnMoNCk7XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfTtcblxuICByZXR1cm4gQmFzZUFkYXB0ZXI7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvc2VsZWN0JyxbXG4gICcuL2Jhc2UnLFxuICAnLi4vdXRpbHMnLFxuICAnanF1ZXJ5J1xuXSwgZnVuY3Rpb24gKEJhc2VBZGFwdGVyLCBVdGlscywgJCkge1xuICBmdW5jdGlvbiBTZWxlY3RBZGFwdGVyICgkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgU2VsZWN0QWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIFV0aWxzLkV4dGVuZChTZWxlY3RBZGFwdGVyLCBCYXNlQWRhcHRlcik7XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBkYXRhID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKFxuICAgICAgdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLFxuICAgICAgZnVuY3Rpb24gKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gc2VsZi5pdGVtKCQoc2VsZWN0ZWRFbGVtZW50KSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNhbGxiYWNrKGRhdGEpO1xuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgZGF0YS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAvLyBJZiBkYXRhLmVsZW1lbnQgaXMgYSBET00gbm9kZSwgdXNlIGl0IGluc3RlYWRcbiAgICBpZiAoXG4gICAgICBkYXRhLmVsZW1lbnQgIT0gbnVsbCAmJiBkYXRhLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb3B0aW9uJ1xuICAgICkge1xuICAgICAgZGF0YS5lbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnB1dCcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJGVsZW1lbnQucHJvcCgnbXVsdGlwbGUnKSkge1xuICAgICAgdGhpcy5jdXJyZW50KGZ1bmN0aW9uIChjdXJyZW50RGF0YSkge1xuICAgICAgICB2YXIgdmFsID0gW107XG5cbiAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgZGF0YS5wdXNoLmFwcGx5KGRhdGEsIGN1cnJlbnREYXRhKTtcblxuICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHtcbiAgICAgICAgICB2YXIgaWQgPSBkYXRhW2RdLmlkO1xuXG4gICAgICAgICAgaWYgKHZhbC5pbmRleE9mKGlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhbC5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLiRlbGVtZW50LnZhbCh2YWwpO1xuICAgICAgICBzZWxmLiRlbGVtZW50LnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZhbCA9IGRhdGEuaWQ7XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQudmFsKHZhbCk7XG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfVxuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLnVuc2VsZWN0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQucHJvcCgnbXVsdGlwbGUnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIGRhdGEuZWxlbWVudCAhPSBudWxsICYmXG4gICAgICBkYXRhLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb3B0aW9uJ1xuICAgICkge1xuICAgICAgZGF0YS5lbGVtZW50LnNlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaW5wdXQnKS50cmlnZ2VyKCdjaGFuZ2UnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHtcbiAgICAgIHZhciB2YWwgPSBbXTtcblxuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBjdXJyZW50RGF0YS5sZW5ndGg7IGQrKykge1xuICAgICAgICB2YXIgaWQgPSBjdXJyZW50RGF0YVtkXS5pZDtcblxuICAgICAgICBpZiAoaWQgIT09IGRhdGEuaWQgJiYgdmFsLmluZGV4T2YoaWQpID09PSAtMSkge1xuICAgICAgICAgIHZhbC5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZWxmLiRlbGVtZW50LnZhbCh2YWwpO1xuXG4gICAgICBzZWxmLiRlbGVtZW50LnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuICAgIGNvbnRhaW5lci5vbignc2VsZWN0JywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi5zZWxlY3QocGFyYW1zLmRhdGEpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCd1bnNlbGVjdCcsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYudW5zZWxlY3QocGFyYW1zLmRhdGEpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUmVtb3ZlIGFueXRoaW5nIGFkZGVkIHRvIGNoaWxkIGVsZW1lbnRzXG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCcqJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSZW1vdmUgYW55IGN1c3RvbSBkYXRhIHNldCBieSBTZWxlY3QyXG4gICAgICBVdGlscy5SZW1vdmVEYXRhKHRoaXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdEFkYXB0ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICB2YXIgZGF0YSA9IFtdO1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKTtcblxuICAgICRvcHRpb25zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ29wdGlvbicgJiZcbiAgICAgICAgdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdvcHRncm91cCdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciAkb3B0aW9uID0gJCh0aGlzKTtcblxuICAgICAgdmFyIG9wdGlvbiA9IHNlbGYuaXRlbSgkb3B0aW9uKTtcblxuICAgICAgdmFyIG1hdGNoZXMgPSBzZWxmLm1hdGNoZXMocGFyYW1zLCBvcHRpb24pO1xuXG4gICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICBkYXRhLnB1c2gobWF0Y2hlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjYWxsYmFjayh7XG4gICAgICByZXN1bHRzOiBkYXRhXG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0QWRhcHRlci5wcm90b3R5cGUuYWRkT3B0aW9ucyA9IGZ1bmN0aW9uICgkb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQuYXBwZW5kKCRvcHRpb25zKTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5vcHRpb24gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBvcHRpb247XG5cbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTtcbiAgICAgIG9wdGlvbi5sYWJlbCA9IGRhdGEudGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cbiAgICAgIGlmIChvcHRpb24udGV4dENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBkYXRhLnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gZGF0YS50ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbi52YWx1ZSA9IGRhdGEuaWQ7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuZGlzYWJsZWQpIHtcbiAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuc2VsZWN0ZWQpIHtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgIG9wdGlvbi50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWREYXRhID0gdGhpcy5fbm9ybWFsaXplSXRlbShkYXRhKTtcbiAgICBub3JtYWxpemVkRGF0YS5lbGVtZW50ID0gb3B0aW9uO1xuXG4gICAgLy8gT3ZlcnJpZGUgdGhlIG9wdGlvbidzIGRhdGEgd2l0aCB0aGUgY29tYmluZWQgZGF0YVxuICAgIFV0aWxzLlN0b3JlRGF0YShvcHRpb24sICdkYXRhJywgbm9ybWFsaXplZERhdGEpO1xuXG4gICAgcmV0dXJuICQob3B0aW9uKTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gKCRvcHRpb24pIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgZGF0YSA9IFV0aWxzLkdldERhdGEoJG9wdGlvblswXSwgJ2RhdGEnKTtcblxuICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHZhciBvcHRpb24gPSAkb3B0aW9uWzBdO1xuXG4gICAgaWYgKG9wdGlvbi50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdvcHRpb24nKSB7XG4gICAgICBkYXRhID0ge1xuICAgICAgICBpZDogJG9wdGlvbi52YWwoKSxcbiAgICAgICAgdGV4dDogJG9wdGlvbi50ZXh0KCksXG4gICAgICAgIGRpc2FibGVkOiAkb3B0aW9uLnByb3AoJ2Rpc2FibGVkJyksXG4gICAgICAgIHNlbGVjdGVkOiAkb3B0aW9uLnByb3AoJ3NlbGVjdGVkJyksXG4gICAgICAgIHRpdGxlOiAkb3B0aW9uLnByb3AoJ3RpdGxlJylcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb24udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnb3B0Z3JvdXAnKSB7XG4gICAgICBkYXRhID0ge1xuICAgICAgICB0ZXh0OiAkb3B0aW9uLnByb3AoJ2xhYmVsJyksXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgdGl0bGU6ICRvcHRpb24ucHJvcCgndGl0bGUnKVxuICAgICAgfTtcblxuICAgICAgdmFyICRjaGlsZHJlbiA9ICRvcHRpb24uY2hpbGRyZW4oJ29wdGlvbicpO1xuICAgICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgJGNoaWxkcmVuLmxlbmd0aDsgYysrKSB7XG4gICAgICAgIHZhciAkY2hpbGQgPSAkKCRjaGlsZHJlbltjXSk7XG5cbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5pdGVtKCRjaGlsZCk7XG5cbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBkYXRhID0gdGhpcy5fbm9ybWFsaXplSXRlbShkYXRhKTtcbiAgICBkYXRhLmVsZW1lbnQgPSAkb3B0aW9uWzBdO1xuXG4gICAgVXRpbHMuU3RvcmVEYXRhKCRvcHRpb25bMF0sICdkYXRhJywgZGF0YSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5fbm9ybWFsaXplSXRlbSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0gIT09IE9iamVjdChpdGVtKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgaWQ6IGl0ZW0sXG4gICAgICAgIHRleHQ6IGl0ZW1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaXRlbSA9ICQuZXh0ZW5kKHt9LCB7XG4gICAgICB0ZXh0OiAnJ1xuICAgIH0sIGl0ZW0pO1xuXG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmIChpdGVtLmlkICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uaWQgPSBpdGVtLmlkLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0udGV4dCAhPSBudWxsKSB7XG4gICAgICBpdGVtLnRleHQgPSBpdGVtLnRleHQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5fcmVzdWx0SWQgPT0gbnVsbCAmJiBpdGVtLmlkICYmIHRoaXMuY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uX3Jlc3VsdElkID0gdGhpcy5nZW5lcmF0ZVJlc3VsdElkKHRoaXMuY29udGFpbmVyLCBpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJC5leHRlbmQoe30sIGRlZmF1bHRzLCBpdGVtKTtcbiAgfTtcblxuICBTZWxlY3RBZGFwdGVyLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gKHBhcmFtcywgZGF0YSkge1xuICAgIHZhciBtYXRjaGVyID0gdGhpcy5vcHRpb25zLmdldCgnbWF0Y2hlcicpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXIocGFyYW1zLCBkYXRhKTtcbiAgfTtcblxuICByZXR1cm4gU2VsZWN0QWRhcHRlcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9hcnJheScsW1xuICAnLi9zZWxlY3QnLFxuICAnLi4vdXRpbHMnLFxuICAnanF1ZXJ5J1xuXSwgZnVuY3Rpb24gKFNlbGVjdEFkYXB0ZXIsIFV0aWxzLCAkKSB7XG4gIGZ1bmN0aW9uIEFycmF5QWRhcHRlciAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLl9kYXRhVG9Db252ZXJ0ID0gb3B0aW9ucy5nZXQoJ2RhdGEnKSB8fCBbXTtcblxuICAgIEFycmF5QWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoQXJyYXlBZGFwdGVyLCBTZWxlY3RBZGFwdGVyKTtcblxuICBBcnJheUFkYXB0ZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgQXJyYXlBZGFwdGVyLl9fc3VwZXJfXy5iaW5kLmNhbGwodGhpcywgY29udGFpbmVyLCAkY29udGFpbmVyKTtcblxuICAgIHRoaXMuYWRkT3B0aW9ucyh0aGlzLmNvbnZlcnRUb09wdGlvbnModGhpcy5fZGF0YVRvQ29udmVydCkpO1xuICB9O1xuXG4gIEFycmF5QWRhcHRlci5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgJG9wdGlvbiA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJykuZmlsdGVyKGZ1bmN0aW9uIChpLCBlbG0pIHtcbiAgICAgIHJldHVybiBlbG0udmFsdWUgPT0gZGF0YS5pZC50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaWYgKCRvcHRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAkb3B0aW9uID0gdGhpcy5vcHRpb24oZGF0YSk7XG5cbiAgICAgIHRoaXMuYWRkT3B0aW9ucygkb3B0aW9uKTtcbiAgICB9XG5cbiAgICBBcnJheUFkYXB0ZXIuX19zdXBlcl9fLnNlbGVjdC5jYWxsKHRoaXMsIGRhdGEpO1xuICB9O1xuXG4gIEFycmF5QWRhcHRlci5wcm90b3R5cGUuY29udmVydFRvT3B0aW9ucyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyICRleGlzdGluZyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uJyk7XG4gICAgdmFyIGV4aXN0aW5nSWRzID0gJGV4aXN0aW5nLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2VsZi5pdGVtKCQodGhpcykpLmlkO1xuICAgIH0pLmdldCgpO1xuXG4gICAgdmFyICRvcHRpb25zID0gW107XG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBpdGVtcyBleGNlcHQgZm9yIHRoZSBvbmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudFxuICAgIGZ1bmN0aW9uIG9ubHlJdGVtIChpdGVtKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKSA9PSBpdGVtLmlkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRhdGEubGVuZ3RoOyBkKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5fbm9ybWFsaXplSXRlbShkYXRhW2RdKTtcblxuICAgICAgLy8gU2tpcCBpdGVtcyB3aGljaCB3ZXJlIHByZS1sb2FkZWQsIG9ubHkgbWVyZ2UgdGhlIGRhdGFcbiAgICAgIGlmIChleGlzdGluZ0lkcy5pbmRleE9mKGl0ZW0uaWQpID49IDApIHtcbiAgICAgICAgdmFyICRleGlzdGluZ09wdGlvbiA9ICRleGlzdGluZy5maWx0ZXIob25seUl0ZW0oaXRlbSkpO1xuXG4gICAgICAgIHZhciBleGlzdGluZ0RhdGEgPSB0aGlzLml0ZW0oJGV4aXN0aW5nT3B0aW9uKTtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgaXRlbSwgZXhpc3RpbmdEYXRhKTtcblxuICAgICAgICB2YXIgJG5ld09wdGlvbiA9IHRoaXMub3B0aW9uKG5ld0RhdGEpO1xuXG4gICAgICAgICRleGlzdGluZ09wdGlvbi5yZXBsYWNlV2l0aCgkbmV3T3B0aW9uKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyICRvcHRpb24gPSB0aGlzLm9wdGlvbihpdGVtKTtcblxuICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyICRjaGlsZHJlbiA9IHRoaXMuY29udmVydFRvT3B0aW9ucyhpdGVtLmNoaWxkcmVuKTtcblxuICAgICAgICAkb3B0aW9uLmFwcGVuZCgkY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICAkb3B0aW9ucy5wdXNoKCRvcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiAkb3B0aW9ucztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlBZGFwdGVyO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL2FqYXgnLFtcbiAgJy4vYXJyYXknLFxuICAnLi4vdXRpbHMnLFxuICAnanF1ZXJ5J1xuXSwgZnVuY3Rpb24gKEFycmF5QWRhcHRlciwgVXRpbHMsICQpIHtcbiAgZnVuY3Rpb24gQWpheEFkYXB0ZXIgKCRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5hamF4T3B0aW9ucyA9IHRoaXMuX2FwcGx5RGVmYXVsdHMob3B0aW9ucy5nZXQoJ2FqYXgnKSk7XG5cbiAgICBpZiAodGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cyAhPSBudWxsKSB7XG4gICAgICB0aGlzLnByb2Nlc3NSZXN1bHRzID0gdGhpcy5hamF4T3B0aW9ucy5wcm9jZXNzUmVzdWx0cztcbiAgICB9XG5cbiAgICBBamF4QWRhcHRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cblxuICBVdGlscy5FeHRlbmQoQWpheEFkYXB0ZXIsIEFycmF5QWRhcHRlcik7XG5cbiAgQWpheEFkYXB0ZXIucHJvdG90eXBlLl9hcHBseURlZmF1bHRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICBkYXRhOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgcGFyYW1zLCB7XG4gICAgICAgICAgcTogcGFyYW1zLnRlcm1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgdHJhbnNwb3J0OiBmdW5jdGlvbiAocGFyYW1zLCBzdWNjZXNzLCBmYWlsdXJlKSB7XG4gICAgICAgIHZhciAkcmVxdWVzdCA9ICQuYWpheChwYXJhbXMpO1xuXG4gICAgICAgICRyZXF1ZXN0LnRoZW4oc3VjY2Vzcyk7XG4gICAgICAgICRyZXF1ZXN0LmZhaWwoZmFpbHVyZSk7XG5cbiAgICAgICAgcmV0dXJuICRyZXF1ZXN0O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gJC5leHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zLCB0cnVlKTtcbiAgfTtcblxuICBBamF4QWRhcHRlci5wcm90b3R5cGUucHJvY2Vzc1Jlc3VsdHMgPSBmdW5jdGlvbiAocmVzdWx0cykge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIEFqYXhBZGFwdGVyLnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdCAhPSBudWxsKSB7XG4gICAgICAvLyBKU09OUCByZXF1ZXN0cyBjYW5ub3QgYWx3YXlzIGJlIGFib3J0ZWRcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fcmVxdWVzdC5hYm9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0LmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe1xuICAgICAgdHlwZTogJ0dFVCdcbiAgICB9LCB0aGlzLmFqYXhPcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy51cmwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwuY2FsbCh0aGlzLiRlbGVtZW50LCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSBvcHRpb25zLmRhdGEuY2FsbCh0aGlzLiRlbGVtZW50LCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcXVlc3QgKCkge1xuICAgICAgdmFyICRyZXF1ZXN0ID0gb3B0aW9ucy50cmFuc3BvcnQob3B0aW9ucywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBzZWxmLnByb2Nlc3NSZXN1bHRzKGRhdGEsIHBhcmFtcyk7XG5cbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5nZXQoJ2RlYnVnJykgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXNwb25zZSBpbmNsdWRlZCBhIGByZXN1bHRzYCBrZXkuXG4gICAgICAgICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzLnJlc3VsdHMgfHwgIUFycmF5LmlzQXJyYXkocmVzdWx0cy5yZXN1bHRzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ1NlbGVjdDI6IFRoZSBBSkFYIHJlc3VsdHMgZGlkIG5vdCByZXR1cm4gYW4gYXJyYXkgaW4gdGhlICcgK1xuICAgICAgICAgICAgICAnYHJlc3VsdHNgIGtleSBvZiB0aGUgcmVzcG9uc2UuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhyZXN1bHRzKTtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBkZXRlY3QgaWYgYSByZXF1ZXN0IHdhcyBhYm9ydGVkXG4gICAgICAgIC8vIE9ubHkgd29ya3MgaWYgdGhlIHRyYW5zcG9ydCBleHBvc2VzIGEgc3RhdHVzIHByb3BlcnR5XG4gICAgICAgIGlmICgnc3RhdHVzJyBpbiAkcmVxdWVzdCAmJlxuICAgICAgICAgICAgKCRyZXF1ZXN0LnN0YXR1cyA9PT0gMCB8fCAkcmVxdWVzdC5zdGF0dXMgPT09ICcwJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcbiAgICAgICAgICBtZXNzYWdlOiAnZXJyb3JMb2FkaW5nJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZWxmLl9yZXF1ZXN0ID0gJHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWpheE9wdGlvbnMuZGVsYXkgJiYgcGFyYW1zLnRlcm0gIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuX3F1ZXJ5VGltZW91dCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3F1ZXJ5VGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3F1ZXJ5VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHJlcXVlc3QsIHRoaXMuYWpheE9wdGlvbnMuZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBBamF4QWRhcHRlcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90YWdzJyxbXG4gICdqcXVlcnknXG5dLCBmdW5jdGlvbiAoJCkge1xuICBmdW5jdGlvbiBUYWdzIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIHRhZ3MgPSBvcHRpb25zLmdldCgndGFncycpO1xuXG4gICAgdmFyIGNyZWF0ZVRhZyA9IG9wdGlvbnMuZ2V0KCdjcmVhdGVUYWcnKTtcblxuICAgIGlmIChjcmVhdGVUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jcmVhdGVUYWcgPSBjcmVhdGVUYWc7XG4gICAgfVxuXG4gICAgdmFyIGluc2VydFRhZyA9IG9wdGlvbnMuZ2V0KCdpbnNlcnRUYWcnKTtcblxuICAgIGlmIChpbnNlcnRUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluc2VydFRhZyA9IGluc2VydFRhZztcbiAgICB9XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWdzKSkge1xuICAgICAgZm9yICh2YXIgdCA9IDA7IHQgPCB0YWdzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgIHZhciB0YWcgPSB0YWdzW3RdO1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX25vcm1hbGl6ZUl0ZW0odGFnKTtcblxuICAgICAgICB2YXIgJG9wdGlvbiA9IHRoaXMub3B0aW9uKGl0ZW0pO1xuXG4gICAgICAgIHRoaXMuJGVsZW1lbnQuYXBwZW5kKCRvcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFRhZ3MucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuX3JlbW92ZU9sZFRhZ3MoKTtcblxuICAgIGlmIChwYXJhbXMudGVybSA9PSBudWxsIHx8IHBhcmFtcy5wYWdlICE9IG51bGwpIHtcbiAgICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBwZXIgKG9iaiwgY2hpbGQpIHtcbiAgICAgIHZhciBkYXRhID0gb2JqLnJlc3VsdHM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgb3B0aW9uID0gZGF0YVtpXTtcblxuICAgICAgICB2YXIgY2hlY2tDaGlsZHJlbiA9IChcbiAgICAgICAgICBvcHRpb24uY2hpbGRyZW4gIT0gbnVsbCAmJlxuICAgICAgICAgICF3cmFwcGVyKHtcbiAgICAgICAgICAgIHJlc3VsdHM6IG9wdGlvbi5jaGlsZHJlblxuICAgICAgICAgIH0sIHRydWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIG9wdGlvblRleHQgPSAob3B0aW9uLnRleHQgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHZhciBwYXJhbXNUZXJtID0gKHBhcmFtcy50ZXJtIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIHZhciBjaGVja1RleHQgPSBvcHRpb25UZXh0ID09PSBwYXJhbXNUZXJtO1xuXG4gICAgICAgIGlmIChjaGVja1RleHQgfHwgY2hlY2tDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9iai5kYXRhID0gZGF0YTtcbiAgICAgICAgICBjYWxsYmFjayhvYmopO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhZyA9IHNlbGYuY3JlYXRlVGFnKHBhcmFtcyk7XG5cbiAgICAgIGlmICh0YWcgIT0gbnVsbCkge1xuICAgICAgICB2YXIgJG9wdGlvbiA9IHNlbGYub3B0aW9uKHRhZyk7XG4gICAgICAgICRvcHRpb24uYXR0cignZGF0YS1zZWxlY3QyLXRhZycsICd0cnVlJyk7XG5cbiAgICAgICAgc2VsZi5hZGRPcHRpb25zKFskb3B0aW9uXSk7XG5cbiAgICAgICAgc2VsZi5pbnNlcnRUYWcoZGF0YSwgdGFnKTtcbiAgICAgIH1cblxuICAgICAgb2JqLnJlc3VsdHMgPSBkYXRhO1xuXG4gICAgICBjYWxsYmFjayhvYmopO1xuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgd3JhcHBlcik7XG4gIH07XG5cbiAgVGFncy5wcm90b3R5cGUuY3JlYXRlVGFnID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy50ZXJtID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB0ZXJtID0gcGFyYW1zLnRlcm0udHJpbSgpO1xuXG4gICAgaWYgKHRlcm0gPT09ICcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlcm0sXG4gICAgICB0ZXh0OiB0ZXJtXG4gICAgfTtcbiAgfTtcblxuICBUYWdzLnByb3RvdHlwZS5pbnNlcnRUYWcgPSBmdW5jdGlvbiAoXywgZGF0YSwgdGFnKSB7XG4gICAgZGF0YS51bnNoaWZ0KHRhZyk7XG4gIH07XG5cbiAgVGFncy5wcm90b3R5cGUuX3JlbW92ZU9sZFRhZ3MgPSBmdW5jdGlvbiAoXykge1xuICAgIHZhciAkb3B0aW9ucyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnb3B0aW9uW2RhdGEtc2VsZWN0Mi10YWddJyk7XG5cbiAgICAkb3B0aW9ucy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJCh0aGlzKS5yZW1vdmUoKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVGFncztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS90b2tlbml6ZXInLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIGZ1bmN0aW9uIFRva2VuaXplciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHZhciB0b2tlbml6ZXIgPSBvcHRpb25zLmdldCgndG9rZW5pemVyJyk7XG5cbiAgICBpZiAodG9rZW5pemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVyO1xuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlbGVtZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIFRva2VuaXplci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICB0aGlzLiRzZWFyY2ggPSAgY29udGFpbmVyLmRyb3Bkb3duLiRzZWFyY2ggfHwgY29udGFpbmVyLnNlbGVjdGlvbi4kc2VhcmNoIHx8XG4gICAgICAkY29udGFpbmVyLmZpbmQoJy5zZWxlY3QyLXNlYXJjaF9fZmllbGQnKTtcbiAgfTtcblxuICBUb2tlbml6ZXIucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFuZFNlbGVjdCAoZGF0YSkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSBkYXRhIG9iamVjdCBzbyB3ZSBjYW4gdXNlIGl0IGZvciBjaGVja3NcbiAgICAgIHZhciBpdGVtID0gc2VsZi5fbm9ybWFsaXplSXRlbShkYXRhKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgb2JqZWN0IGFscmVhZHkgZXhpc3RzIGFzIGEgdGFnXG4gICAgICAvLyBTZWxlY3QgaXQgaWYgaXQgZG9lc24ndFxuICAgICAgdmFyICRleGlzdGluZ09wdGlvbnMgPSBzZWxmLiRlbGVtZW50LmZpbmQoJ29wdGlvbicpLmZpbHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAkKHRoaXMpLnZhbCgpID09PSBpdGVtLmlkO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIGFuIGV4aXN0aW5nIG9wdGlvbiB3YXNuJ3QgZm91bmQgZm9yIGl0LCBjcmVhdGUgdGhlIG9wdGlvblxuICAgICAgaWYgKCEkZXhpc3RpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB2YXIgJG9wdGlvbiA9IHNlbGYub3B0aW9uKGl0ZW0pO1xuICAgICAgICAkb3B0aW9uLmF0dHIoJ2RhdGEtc2VsZWN0Mi10YWcnLCB0cnVlKTtcblxuICAgICAgICBzZWxmLl9yZW1vdmVPbGRUYWdzKCk7XG4gICAgICAgIHNlbGYuYWRkT3B0aW9ucyhbJG9wdGlvbl0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWxlY3QgdGhlIGl0ZW0sIG5vdyB0aGF0IHdlIGtub3cgdGhlcmUgaXMgYW4gb3B0aW9uIGZvciBpdFxuICAgICAgc2VsZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlbGVjdCAoZGF0YSkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3QnLCB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7XG5cbiAgICB2YXIgdG9rZW5EYXRhID0gdGhpcy50b2tlbml6ZXIocGFyYW1zLCB0aGlzLm9wdGlvbnMsIGNyZWF0ZUFuZFNlbGVjdCk7XG5cbiAgICBpZiAodG9rZW5EYXRhLnRlcm0gIT09IHBhcmFtcy50ZXJtKSB7XG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWFyY2ggdGVybSBpZiB3ZSBoYXZlIHRoZSBzZWFyY2ggYm94XG4gICAgICBpZiAodGhpcy4kc2VhcmNoLmxlbmd0aCkge1xuICAgICAgICB0aGlzLiRzZWFyY2gudmFsKHRva2VuRGF0YS50ZXJtKTtcbiAgICAgICAgdGhpcy4kc2VhcmNoLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG5cbiAgICAgIHBhcmFtcy50ZXJtID0gdG9rZW5EYXRhLnRlcm07XG4gICAgfVxuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgVG9rZW5pemVyLnByb3RvdHlwZS50b2tlbml6ZXIgPSBmdW5jdGlvbiAoXywgcGFyYW1zLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciBzZXBhcmF0b3JzID0gb3B0aW9ucy5nZXQoJ3Rva2VuU2VwYXJhdG9ycycpIHx8IFtdO1xuICAgIHZhciB0ZXJtID0gcGFyYW1zLnRlcm07XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgdmFyIGNyZWF0ZVRhZyA9IHRoaXMuY3JlYXRlVGFnIHx8IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXJhbXMudGVybSxcbiAgICAgICAgdGV4dDogcGFyYW1zLnRlcm1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHdoaWxlIChpIDwgdGVybS5sZW5ndGgpIHtcbiAgICAgIHZhciB0ZXJtQ2hhciA9IHRlcm1baV07XG5cbiAgICAgIGlmIChzZXBhcmF0b3JzLmluZGV4T2YodGVybUNoYXIpID09PSAtMSkge1xuICAgICAgICBpKys7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJ0ID0gdGVybS5zdWJzdHIoMCwgaSk7XG4gICAgICB2YXIgcGFydFBhcmFtcyA9ICQuZXh0ZW5kKHt9LCBwYXJhbXMsIHtcbiAgICAgICAgdGVybTogcGFydFxuICAgICAgfSk7XG5cbiAgICAgIHZhciBkYXRhID0gY3JlYXRlVGFnKHBhcnRQYXJhbXMpO1xuXG4gICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuXG4gICAgICAvLyBSZXNldCB0aGUgdGVybSB0byBub3QgaW5jbHVkZSB0aGUgdG9rZW5pemVkIHBvcnRpb25cbiAgICAgIHRlcm0gPSB0ZXJtLnN1YnN0cihpICsgMSkgfHwgJyc7XG4gICAgICBpID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVybTogdGVybVxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIFRva2VuaXplcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZGF0YS9taW5pbXVtSW5wdXRMZW5ndGgnLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNaW5pbXVtSW5wdXRMZW5ndGggKGRlY29yYXRlZCwgJGUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCA9IG9wdGlvbnMuZ2V0KCdtaW5pbXVtSW5wdXRMZW5ndGgnKTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsICRlLCBvcHRpb25zKTtcbiAgfVxuXG4gIE1pbmltdW1JbnB1dExlbmd0aC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgcGFyYW1zLnRlcm0gPSBwYXJhbXMudGVybSB8fCAnJztcblxuICAgIGlmIChwYXJhbXMudGVybS5sZW5ndGggPCB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCkge1xuICAgICAgdGhpcy50cmlnZ2VyKCdyZXN1bHRzOm1lc3NhZ2UnLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdpbnB1dFRvb1Nob3J0JyxcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIG1pbmltdW06IHRoaXMubWluaW11bUlucHV0TGVuZ3RoLFxuICAgICAgICAgIGlucHV0OiBwYXJhbXMudGVybSxcbiAgICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIHBhcmFtcywgY2FsbGJhY2spO1xuICB9O1xuXG4gIHJldHVybiBNaW5pbXVtSW5wdXRMZW5ndGg7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoJyxbXG5cbl0sIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWF4aW11bUlucHV0TGVuZ3RoIChkZWNvcmF0ZWQsICRlLCBvcHRpb25zKSB7XG4gICAgdGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPSBvcHRpb25zLmdldCgnbWF4aW11bUlucHV0TGVuZ3RoJyk7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZSwgb3B0aW9ucyk7XG4gIH1cblxuICBNYXhpbXVtSW5wdXRMZW5ndGgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHBhcmFtcy50ZXJtID0gcGFyYW1zLnRlcm0gfHwgJyc7XG5cbiAgICBpZiAodGhpcy5tYXhpbXVtSW5wdXRMZW5ndGggPiAwICYmXG4gICAgICAgIHBhcmFtcy50ZXJtLmxlbmd0aCA+IHRoaXMubWF4aW11bUlucHV0TGVuZ3RoKSB7XG4gICAgICB0aGlzLnRyaWdnZXIoJ3Jlc3VsdHM6bWVzc2FnZScsIHtcbiAgICAgICAgbWVzc2FnZTogJ2lucHV0VG9vTG9uZycsXG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBtYXhpbXVtOiB0aGlzLm1heGltdW1JbnB1dExlbmd0aCxcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLnRlcm0sXG4gICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gTWF4aW11bUlucHV0TGVuZ3RoO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgnLFtcblxuXSwgZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIE1heGltdW1TZWxlY3Rpb25MZW5ndGggKGRlY29yYXRlZCwgJGUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm1heGltdW1TZWxlY3Rpb25MZW5ndGggPSBvcHRpb25zLmdldCgnbWF4aW11bVNlbGVjdGlvbkxlbmd0aCcpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgTWF4aW11bVNlbGVjdGlvbkxlbmd0aC5wcm90b3R5cGUuYmluZCA9XG4gICAgZnVuY3Rpb24gKGRlY29yYXRlZCwgY29udGFpbmVyLCAkY29udGFpbmVyKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnRhaW5lci5vbignc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9jaGVja0lmTWF4aW11bVNlbGVjdGVkKCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoLnByb3RvdHlwZS5xdWVyeSA9XG4gICAgZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9jaGVja0lmTWF4aW11bVNlbGVjdGVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVjb3JhdGVkLmNhbGwoc2VsZiwgcGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgfTtcblxuICBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoLnByb3RvdHlwZS5fY2hlY2tJZk1heGltdW1TZWxlY3RlZCA9XG4gICAgZnVuY3Rpb24gKF8sIHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICB0aGlzLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7XG4gICAgICAgIHZhciBjb3VudCA9IGN1cnJlbnREYXRhICE9IG51bGwgPyBjdXJyZW50RGF0YS5sZW5ndGggOiAwO1xuICAgICAgICBpZiAoc2VsZi5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGNvdW50ID49IHNlbGYubWF4aW11bVNlbGVjdGlvbkxlbmd0aCkge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czptZXNzYWdlJywge1xuICAgICAgICAgICAgbWVzc2FnZTogJ21heGltdW1TZWxlY3RlZCcsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIG1heGltdW06IHNlbGYubWF4aW11bVNlbGVjdGlvbkxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1heGltdW1TZWxlY3Rpb25MZW5ndGg7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duJyxbXG4gICdqcXVlcnknLFxuICAnLi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBVdGlscykge1xuICBmdW5jdGlvbiBEcm9wZG93biAoJGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIERyb3Bkb3duLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuICB9XG5cbiAgVXRpbHMuRXh0ZW5kKERyb3Bkb3duLCBVdGlscy5PYnNlcnZhYmxlKTtcblxuICBEcm9wZG93bi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkZHJvcGRvd24gPSAkKFxuICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0Mi1kcm9wZG93blwiPicgK1xuICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNcIj48L3NwYW4+JyArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuXG4gICAgJGRyb3Bkb3duLmF0dHIoJ2RpcicsIHRoaXMub3B0aW9ucy5nZXQoJ2RpcicpKTtcblxuICAgIHRoaXMuJGRyb3Bkb3duID0gJGRyb3Bkb3duO1xuXG4gICAgcmV0dXJuICRkcm9wZG93bjtcbiAgfTtcblxuICBEcm9wZG93bi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9O1xuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5wb3NpdGlvbiA9IGZ1bmN0aW9uICgkZHJvcGRvd24sICRjb250YWluZXIpIHtcbiAgICAvLyBTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9O1xuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlbW92ZSB0aGUgZHJvcGRvd24gZnJvbSB0aGUgRE9NXG4gICAgdGhpcy4kZHJvcGRvd24ucmVtb3ZlKCk7XG4gIH07XG5cbiAgcmV0dXJuIERyb3Bkb3duO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9zZWFyY2gnLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIGZ1bmN0aW9uIFNlYXJjaCAoKSB7IH1cblxuICBTZWFyY2gucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB2YXIgJHJlbmRlcmVkID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7XG4gICAgdmFyIHNlYXJjaExhYmVsID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdzZWFyY2gnKTtcblxuICAgIHZhciAkc2VhcmNoID0gJChcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1kcm9wZG93blwiPicgK1xuICAgICAgICAnPGlucHV0IGNsYXNzPVwic2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIgdHlwZT1cInNlYXJjaFwiIHRhYmluZGV4PVwiLTFcIicgK1xuICAgICAgICAnIGF1dG9jb3JyZWN0PVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJub25lXCInICtcbiAgICAgICAgJyBzcGVsbGNoZWNrPVwiZmFsc2VcIiByb2xlPVwic2VhcmNoYm94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgLz4nICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG5cbiAgICB0aGlzLiRzZWFyY2hDb250YWluZXIgPSAkc2VhcmNoO1xuICAgIHRoaXMuJHNlYXJjaCA9ICRzZWFyY2guZmluZCgnaW5wdXQnKTtcblxuICAgIHRoaXMuJHNlYXJjaC5wcm9wKCdhdXRvY29tcGxldGUnLCB0aGlzLm9wdGlvbnMuZ2V0KCdhdXRvY29tcGxldGUnKSk7XG4gICAgdGhpcy4kc2VhcmNoLmF0dHIoJ2FyaWEtbGFiZWwnLCBzZWFyY2hMYWJlbCgpKTtcblxuICAgICRyZW5kZXJlZC5wcmVwZW5kKCRzZWFyY2gpO1xuXG4gICAgcmV0dXJuICRyZW5kZXJlZDtcbiAgfTtcblxuICBTZWFyY2gucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcmVzdWx0c0lkID0gY29udGFpbmVyLmlkICsgJy1yZXN1bHRzJztcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICB0aGlzLiRzZWFyY2gub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ2tleXByZXNzJywgZXZ0KTtcblxuICAgICAgc2VsZi5fa2V5VXBQcmV2ZW50ZWQgPSBldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciBicm93c2VycyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aGUgYGlucHV0YCBldmVudFxuICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGRvdWJsZS10cmlnZ2VyaW5nIG9mIGV2ZW50cyBmb3IgYnJvd3NlcnMgd2hpY2ggc3VwcG9ydFxuICAgIC8vIGJvdGggdGhlIGBrZXl1cGAgYW5kIGBpbnB1dGAgZXZlbnRzLlxuICAgIHRoaXMuJHNlYXJjaC5vbignaW5wdXQnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAvLyBVbmJpbmQgdGhlIGR1cGxpY2F0ZWQgYGtleXVwYCBldmVudFxuICAgICAgJCh0aGlzKS5vZmYoJ2tleXVwJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzZWFyY2gub24oJ2tleXVwIGlucHV0JywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgc2VsZi5oYW5kbGVTZWFyY2goZXZ0KTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIDApO1xuICAgICAgc2VsZi4kc2VhcmNoLmF0dHIoJ2FyaWEtY29udHJvbHMnLCByZXN1bHRzSWQpO1xuXG4gICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcblxuICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgIH0sIDApO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCd0YWJpbmRleCcsIC0xKTtcbiAgICAgIHNlbGYuJHNlYXJjaC5yZW1vdmVBdHRyKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICBzZWxmLiRzZWFyY2gucmVtb3ZlQXR0cignYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG5cbiAgICAgIHNlbGYuJHNlYXJjaC52YWwoJycpO1xuICAgICAgc2VsZi4kc2VhcmNoLnRyaWdnZXIoJ2JsdXInKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5pc09wZW4oKSkge1xuICAgICAgICBzZWxmLiRzZWFyY2gudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLnF1ZXJ5LnRlcm0gPT0gbnVsbCB8fCBwYXJhbXMucXVlcnkudGVybSA9PT0gJycpIHtcbiAgICAgICAgdmFyIHNob3dTZWFyY2ggPSBzZWxmLnNob3dTZWFyY2gocGFyYW1zKTtcblxuICAgICAgICBpZiAoc2hvd1NlYXJjaCkge1xuICAgICAgICAgIHNlbGYuJHNlYXJjaENvbnRhaW5lclswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLXNlYXJjaC0taGlkZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGYuJHNlYXJjaENvbnRhaW5lclswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3QyLXNlYXJjaC0taGlkZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6Zm9jdXMnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLmRhdGEuX3Jlc3VsdElkKSB7XG4gICAgICAgIHNlbGYuJHNlYXJjaC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBwYXJhbXMuZGF0YS5fcmVzdWx0SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi4kc2VhcmNoLnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFNlYXJjaC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIGlmICghdGhpcy5fa2V5VXBQcmV2ZW50ZWQpIHtcbiAgICAgIHZhciBpbnB1dCA9IHRoaXMuJHNlYXJjaC52YWwoKTtcblxuICAgICAgdGhpcy50cmlnZ2VyKCdxdWVyeScsIHtcbiAgICAgICAgdGVybTogaW5wdXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2tleVVwUHJldmVudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgU2VhcmNoLnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKF8sIHBhcmFtcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHJldHVybiBTZWFyY2g7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2hpZGVQbGFjZWhvbGRlcicsW1xuXG5dLCBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEhpZGVQbGFjZWhvbGRlciAoZGVjb3JhdGVkLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpIHtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5ub3JtYWxpemVQbGFjZWhvbGRlcihvcHRpb25zLmdldCgncGxhY2Vob2xkZXInKSk7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCAkZWxlbWVudCwgb3B0aW9ucywgZGF0YUFkYXB0ZXIpO1xuICB9XG5cbiAgSGlkZVBsYWNlaG9sZGVyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBkYXRhKSB7XG4gICAgZGF0YS5yZXN1bHRzID0gdGhpcy5yZW1vdmVQbGFjZWhvbGRlcihkYXRhLnJlc3VsdHMpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgZGF0YSk7XG4gIH07XG5cbiAgSGlkZVBsYWNlaG9sZGVyLnByb3RvdHlwZS5ub3JtYWxpemVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfLCBwbGFjZWhvbGRlcikge1xuICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IHtcbiAgICAgICAgaWQ6ICcnLFxuICAgICAgICB0ZXh0OiBwbGFjZWhvbGRlclxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgSGlkZVBsYWNlaG9sZGVyLnByb3RvdHlwZS5yZW1vdmVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfLCBkYXRhKSB7XG4gICAgdmFyIG1vZGlmaWVkRGF0YSA9IGRhdGEuc2xpY2UoMCk7XG5cbiAgICBmb3IgKHZhciBkID0gZGF0YS5sZW5ndGggLSAxOyBkID49IDA7IGQtLSkge1xuICAgICAgdmFyIGl0ZW0gPSBkYXRhW2RdO1xuXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlci5pZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICBtb2RpZmllZERhdGEuc3BsaWNlKGQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZERhdGE7XG4gIH07XG5cbiAgcmV0dXJuIEhpZGVQbGFjZWhvbGRlcjtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIGZ1bmN0aW9uIEluZmluaXRlU2Nyb2xsIChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zLCBkYXRhQWRhcHRlcikge1xuICAgIHRoaXMubGFzdFBhcmFtcyA9IHt9O1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKTtcblxuICAgIHRoaXMuJGxvYWRpbmdNb3JlID0gdGhpcy5jcmVhdGVMb2FkaW5nTW9yZSgpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGRhdGEpIHtcbiAgICB0aGlzLiRsb2FkaW5nTW9yZS5yZW1vdmUoKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuc2hvd0xvYWRpbmdNb3JlKGRhdGEpKSB7XG4gICAgICB0aGlzLiRyZXN1bHRzLmFwcGVuZCh0aGlzLiRsb2FkaW5nTW9yZSk7XG4gICAgICB0aGlzLmxvYWRNb3JlSWZOZWVkZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgY29udGFpbmVyLm9uKCdxdWVyeScsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYubGFzdFBhcmFtcyA9IHBhcmFtcztcbiAgICAgIHNlbGYubG9hZGluZyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3F1ZXJ5OmFwcGVuZCcsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYubGFzdFBhcmFtcyA9IHBhcmFtcztcbiAgICAgIHNlbGYubG9hZGluZyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRyZXN1bHRzLm9uKCdzY3JvbGwnLCB0aGlzLmxvYWRNb3JlSWZOZWVkZWQuYmluZCh0aGlzKSk7XG4gIH07XG5cbiAgSW5maW5pdGVTY3JvbGwucHJvdG90eXBlLmxvYWRNb3JlSWZOZWVkZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlzTG9hZE1vcmVWaXNpYmxlID0gJC5jb250YWlucyhcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHRoaXMuJGxvYWRpbmdNb3JlWzBdXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgIWlzTG9hZE1vcmVWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCArXG4gICAgICB0aGlzLiRyZXN1bHRzLm91dGVySGVpZ2h0KGZhbHNlKTtcbiAgICB2YXIgbG9hZGluZ01vcmVPZmZzZXQgPSB0aGlzLiRsb2FkaW5nTW9yZS5vZmZzZXQoKS50b3AgK1xuICAgICAgdGhpcy4kbG9hZGluZ01vcmUub3V0ZXJIZWlnaHQoZmFsc2UpO1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgKyA1MCA+PSBsb2FkaW5nTW9yZU9mZnNldCkge1xuICAgICAgdGhpcy5sb2FkTW9yZSgpO1xuICAgIH1cbiAgfTtcblxuICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUubG9hZE1vcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIHZhciBwYXJhbXMgPSAkLmV4dGVuZCh7fSwge3BhZ2U6IDF9LCB0aGlzLmxhc3RQYXJhbXMpO1xuXG4gICAgcGFyYW1zLnBhZ2UrKztcblxuICAgIHRoaXMudHJpZ2dlcigncXVlcnk6YXBwZW5kJywgcGFyYW1zKTtcbiAgfTtcblxuICBJbmZpbml0ZVNjcm9sbC5wcm90b3R5cGUuc2hvd0xvYWRpbmdNb3JlID0gZnVuY3Rpb24gKF8sIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5wYWdpbmF0aW9uICYmIGRhdGEucGFnaW5hdGlvbi5tb3JlO1xuICB9O1xuXG4gIEluZmluaXRlU2Nyb2xsLnByb3RvdHlwZS5jcmVhdGVMb2FkaW5nTW9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJG9wdGlvbiA9ICQoXG4gICAgICAnPGxpICcgK1xuICAgICAgJ2NsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWxvYWQtbW9yZVwiJyArXG4gICAgICAncm9sZT1cIm9wdGlvblwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+PC9saT4nXG4gICAgKTtcblxuICAgIHZhciBtZXNzYWdlID0gdGhpcy5vcHRpb25zLmdldCgndHJhbnNsYXRpb25zJykuZ2V0KCdsb2FkaW5nTW9yZScpO1xuXG4gICAgJG9wdGlvbi5odG1sKG1lc3NhZ2UodGhpcy5sYXN0UGFyYW1zKSk7XG5cbiAgICByZXR1cm4gJG9wdGlvbjtcbiAgfTtcblxuICByZXR1cm4gSW5maW5pdGVTY3JvbGw7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2F0dGFjaEJvZHknLFtcbiAgJ2pxdWVyeScsXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uICgkLCBVdGlscykge1xuICBmdW5jdGlvbiBBdHRhY2hCb2R5IChkZWNvcmF0ZWQsICRlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZHJvcGRvd25QYXJlbnQgPSAkKG9wdGlvbnMuZ2V0KCdkcm9wZG93blBhcmVudCcpIHx8IGRvY3VtZW50LmJvZHkpO1xuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICBjb250YWluZXIub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9zaG93RHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX2F0dGFjaFBvc2l0aW9uaW5nSGFuZGxlcihjb250YWluZXIpO1xuXG4gICAgICAvLyBNdXN0IGJpbmQgYWZ0ZXIgdGhlIHJlc3VsdHMgaGFuZGxlcnMgdG8gZW5zdXJlIGNvcnJlY3Qgc2l6aW5nXG4gICAgICBzZWxmLl9iaW5kQ29udGFpbmVyUmVzdWx0SGFuZGxlcnMoY29udGFpbmVyKTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9oaWRlRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX2RldGFjaFBvc2l0aW9uaW5nSGFuZGxlcihjb250YWluZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlY29yYXRlZCkge1xuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIucmVtb3ZlKCk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUucG9zaXRpb24gPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCAkZHJvcGRvd24sICRjb250YWluZXIpIHtcbiAgICAvLyBDbG9uZSBhbGwgb2YgdGhlIGNvbnRhaW5lciBjbGFzc2VzXG4gICAgJGRyb3Bkb3duLmF0dHIoJ2NsYXNzJywgJGNvbnRhaW5lci5hdHRyKCdjbGFzcycpKTtcblxuICAgICRkcm9wZG93blswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyJyk7XG4gICAgJGRyb3Bkb3duWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG5cbiAgICAkZHJvcGRvd24uY3NzKHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdG9wOiAtOTk5OTk5XG4gICAgfSk7XG5cbiAgICB0aGlzLiRjb250YWluZXIgPSAkY29udGFpbmVyO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB2YXIgJGNvbnRhaW5lciA9ICQoJzxzcGFuPjwvc3Bhbj4nKTtcblxuICAgIHZhciAkZHJvcGRvd24gPSBkZWNvcmF0ZWQuY2FsbCh0aGlzKTtcbiAgICAkY29udGFpbmVyLmFwcGVuZCgkZHJvcGRvd24pO1xuXG4gICAgdGhpcy4kZHJvcGRvd25Db250YWluZXIgPSAkY29udGFpbmVyO1xuXG4gICAgcmV0dXJuICRjb250YWluZXI7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX2hpZGVEcm9wZG93biA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5kZXRhY2goKTtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzID1cbiAgICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lcikge1xuXG4gICAgLy8gVGhlc2Ugc2hvdWxkIG9ubHkgYmUgYm91bmQgb25jZVxuICAgIGlmICh0aGlzLl9jb250YWluZXJSZXN1bHRzSGFuZGxlcnNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGNvbnRhaW5lci5vbigncmVzdWx0czphbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9wb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgICBzZWxmLl9yZXNpemVEcm9wZG93bigpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLm9uKCdyZXN1bHRzOmFwcGVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Jlc3VsdHM6bWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX3Bvc2l0aW9uRHJvcGRvd24oKTtcbiAgICAgIHNlbGYuX3Jlc2l6ZURyb3Bkb3duKCk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIub24oJ3Vuc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbnRhaW5lclJlc3VsdHNIYW5kbGVyc0JvdW5kID0gdHJ1ZTtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyID1cbiAgICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBzY3JvbGxFdmVudCA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkO1xuICAgIHZhciByZXNpemVFdmVudCA9ICdyZXNpemUuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkO1xuICAgIHZhciBvcmllbnRhdGlvbkV2ZW50ID0gJ29yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcblxuICAgIHZhciAkd2F0Y2hlcnMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihVdGlscy5oYXNTY3JvbGwpO1xuICAgICR3YXRjaGVycy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLlN0b3JlRGF0YSh0aGlzLCAnc2VsZWN0Mi1zY3JvbGwtcG9zaXRpb24nLCB7XG4gICAgICAgIHg6ICQodGhpcykuc2Nyb2xsTGVmdCgpLFxuICAgICAgICB5OiAkKHRoaXMpLnNjcm9sbFRvcCgpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICR3YXRjaGVycy5vbihzY3JvbGxFdmVudCwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBVdGlscy5HZXREYXRhKHRoaXMsICdzZWxlY3QyLXNjcm9sbC1wb3NpdGlvbicpO1xuICAgICAgJCh0aGlzKS5zY3JvbGxUb3AocG9zaXRpb24ueSk7XG4gICAgfSk7XG5cbiAgICAkKHdpbmRvdykub24oc2Nyb2xsRXZlbnQgKyAnICcgKyByZXNpemVFdmVudCArICcgJyArIG9yaWVudGF0aW9uRXZlbnQsXG4gICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgc2VsZi5fcG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgc2VsZi5fcmVzaXplRHJvcGRvd24oKTtcbiAgICB9KTtcbiAgfTtcblxuICBBdHRhY2hCb2R5LnByb3RvdHlwZS5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyID1cbiAgICAgIGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lcikge1xuICAgIHZhciBzY3JvbGxFdmVudCA9ICdzY3JvbGwuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkO1xuICAgIHZhciByZXNpemVFdmVudCA9ICdyZXNpemUuc2VsZWN0Mi4nICsgY29udGFpbmVyLmlkO1xuICAgIHZhciBvcmllbnRhdGlvbkV2ZW50ID0gJ29yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuJyArIGNvbnRhaW5lci5pZDtcblxuICAgIHZhciAkd2F0Y2hlcnMgPSB0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihVdGlscy5oYXNTY3JvbGwpO1xuICAgICR3YXRjaGVycy5vZmYoc2Nyb2xsRXZlbnQpO1xuXG4gICAgJCh3aW5kb3cpLm9mZihzY3JvbGxFdmVudCArICcgJyArIHJlc2l6ZUV2ZW50ICsgJyAnICsgb3JpZW50YXRpb25FdmVudCk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX3Bvc2l0aW9uRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR3aW5kb3cgPSAkKHdpbmRvdyk7XG5cbiAgICB2YXIgaXNDdXJyZW50bHlBYm92ZSA9IHRoaXMuJGRyb3Bkb3duWzBdLmNsYXNzTGlzdFxuICAgICAgLmNvbnRhaW5zKCdzZWxlY3QyLWRyb3Bkb3duLS1hYm92ZScpO1xuICAgIHZhciBpc0N1cnJlbnRseUJlbG93ID0gdGhpcy4kZHJvcGRvd25bMF0uY2xhc3NMaXN0XG4gICAgICAuY29udGFpbnMoJ3NlbGVjdDItZHJvcGRvd24tLWJlbG93Jyk7XG5cbiAgICB2YXIgbmV3RGlyZWN0aW9uID0gbnVsbDtcblxuICAgIHZhciBvZmZzZXQgPSB0aGlzLiRjb250YWluZXIub2Zmc2V0KCk7XG5cbiAgICBvZmZzZXQuYm90dG9tID0gb2Zmc2V0LnRvcCArIHRoaXMuJGNvbnRhaW5lci5vdXRlckhlaWdodChmYWxzZSk7XG5cbiAgICB2YXIgY29udGFpbmVyID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoZmFsc2UpXG4gICAgfTtcblxuICAgIGNvbnRhaW5lci50b3AgPSBvZmZzZXQudG9wO1xuICAgIGNvbnRhaW5lci5ib3R0b20gPSBvZmZzZXQudG9wICsgY29udGFpbmVyLmhlaWdodDtcblxuICAgIHZhciBkcm9wZG93biA9IHtcbiAgICAgIGhlaWdodDogdGhpcy4kZHJvcGRvd24ub3V0ZXJIZWlnaHQoZmFsc2UpXG4gICAgfTtcblxuICAgIHZhciB2aWV3cG9ydCA9IHtcbiAgICAgIHRvcDogJHdpbmRvdy5zY3JvbGxUb3AoKSxcbiAgICAgIGJvdHRvbTogJHdpbmRvdy5zY3JvbGxUb3AoKSArICR3aW5kb3cuaGVpZ2h0KClcbiAgICB9O1xuXG4gICAgdmFyIGVub3VnaFJvb21BYm92ZSA9IHZpZXdwb3J0LnRvcCA8IChvZmZzZXQudG9wIC0gZHJvcGRvd24uaGVpZ2h0KTtcbiAgICB2YXIgZW5vdWdoUm9vbUJlbG93ID0gdmlld3BvcnQuYm90dG9tID4gKG9mZnNldC5ib3R0b20gKyBkcm9wZG93bi5oZWlnaHQpO1xuXG4gICAgdmFyIGNzcyA9IHtcbiAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0LFxuICAgICAgdG9wOiBjb250YWluZXIuYm90dG9tXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSB3aGF0IHRoZSBwYXJlbnQgZWxlbWVudCBpcyB0byB1c2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXRcbiAgICB2YXIgJG9mZnNldFBhcmVudCA9IHRoaXMuJGRyb3Bkb3duUGFyZW50O1xuXG4gICAgLy8gRm9yIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50cywgd2UgbmVlZCB0byBnZXQgdGhlIGVsZW1lbnRcbiAgICAvLyB0aGF0IGlzIGRldGVybWluaW5nIHRoZSBvZmZzZXRcbiAgICBpZiAoJG9mZnNldFBhcmVudC5jc3MoJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSB7XG4gICAgICAkb2Zmc2V0UGFyZW50ID0gJG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQoKTtcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50T2Zmc2V0ID0ge1xuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMFxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICAkLmNvbnRhaW5zKGRvY3VtZW50LmJvZHksICRvZmZzZXRQYXJlbnRbMF0pIHx8XG4gICAgICAkb2Zmc2V0UGFyZW50WzBdLmlzQ29ubmVjdGVkXG4gICAgICApIHtcbiAgICAgIHBhcmVudE9mZnNldCA9ICRvZmZzZXRQYXJlbnQub2Zmc2V0KCk7XG4gICAgfVxuXG4gICAgY3NzLnRvcCAtPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgIGNzcy5sZWZ0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuXG4gICAgaWYgKCFpc0N1cnJlbnRseUFib3ZlICYmICFpc0N1cnJlbnRseUJlbG93KSB7XG4gICAgICBuZXdEaXJlY3Rpb24gPSAnYmVsb3cnO1xuICAgIH1cblxuICAgIGlmICghZW5vdWdoUm9vbUJlbG93ICYmIGVub3VnaFJvb21BYm92ZSAmJiAhaXNDdXJyZW50bHlBYm92ZSkge1xuICAgICAgbmV3RGlyZWN0aW9uID0gJ2Fib3ZlJztcbiAgICB9IGVsc2UgaWYgKCFlbm91Z2hSb29tQWJvdmUgJiYgZW5vdWdoUm9vbUJlbG93ICYmIGlzQ3VycmVudGx5QWJvdmUpIHtcbiAgICAgIG5ld0RpcmVjdGlvbiA9ICdiZWxvdyc7XG4gICAgfVxuXG4gICAgaWYgKG5ld0RpcmVjdGlvbiA9PSAnYWJvdmUnIHx8XG4gICAgICAoaXNDdXJyZW50bHlBYm92ZSAmJiBuZXdEaXJlY3Rpb24gIT09ICdiZWxvdycpKSB7XG4gICAgICBjc3MudG9wID0gY29udGFpbmVyLnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBkcm9wZG93bi5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKG5ld0RpcmVjdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLiRkcm9wZG93blswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLWRyb3Bkb3duLS1iZWxvdycpO1xuICAgICAgdGhpcy4kZHJvcGRvd25bMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmUnKTtcbiAgICAgIHRoaXMuJGRyb3Bkb3duWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItZHJvcGRvd24tLScgKyBuZXdEaXJlY3Rpb24pO1xuXG4gICAgICB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1jb250YWluZXItLWJlbG93Jyk7XG4gICAgICB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1jb250YWluZXItLWFib3ZlJyk7XG4gICAgICB0aGlzLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1jb250YWluZXItLScgKyBuZXdEaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmNzcyhjc3MpO1xuICB9O1xuXG4gIEF0dGFjaEJvZHkucHJvdG90eXBlLl9yZXNpemVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3NzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuJGNvbnRhaW5lci5vdXRlcldpZHRoKGZhbHNlKSArICdweCdcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ2Ryb3Bkb3duQXV0b1dpZHRoJykpIHtcbiAgICAgIGNzcy5taW5XaWR0aCA9IGNzcy53aWR0aDtcbiAgICAgIGNzcy5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICBjc3Mud2lkdGggPSAnYXV0byc7XG4gICAgfVxuXG4gICAgdGhpcy4kZHJvcGRvd24uY3NzKGNzcyk7XG4gIH07XG5cbiAgQXR0YWNoQm9keS5wcm90b3R5cGUuX3Nob3dEcm9wZG93biA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5hcHBlbmRUbyh0aGlzLiRkcm9wZG93blBhcmVudCk7XG5cbiAgICB0aGlzLl9wb3NpdGlvbkRyb3Bkb3duKCk7XG4gICAgdGhpcy5fcmVzaXplRHJvcGRvd24oKTtcbiAgfTtcblxuICByZXR1cm4gQXR0YWNoQm9keTtcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2gnLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBjb3VudFJlc3VsdHMgKGRhdGEpIHtcbiAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkYXRhLmxlbmd0aDsgZCsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGRhdGFbZF07XG5cbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvdW50ICs9IGNvdW50UmVzdWx0cyhpdGVtLmNoaWxkcmVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgZnVuY3Rpb24gTWluaW11bVJlc3VsdHNGb3JTZWFyY2ggKGRlY29yYXRlZCwgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKSB7XG4gICAgdGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCA9IG9wdGlvbnMuZ2V0KCdtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCcpO1xuXG4gICAgaWYgKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPCAwKSB7XG4gICAgICB0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcywgJGVsZW1lbnQsIG9wdGlvbnMsIGRhdGFBZGFwdGVyKTtcbiAgfVxuXG4gIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoLnByb3RvdHlwZS5zaG93U2VhcmNoID0gZnVuY3Rpb24gKGRlY29yYXRlZCwgcGFyYW1zKSB7XG4gICAgaWYgKGNvdW50UmVzdWx0cyhwYXJhbXMuZGF0YS5yZXN1bHRzKSA8IHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2gpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb3JhdGVkLmNhbGwodGhpcywgcGFyYW1zKTtcbiAgfTtcblxuICByZXR1cm4gTWluaW11bVJlc3VsdHNGb3JTZWFyY2g7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL3NlbGVjdE9uQ2xvc2UnLFtcbiAgJy4uL3V0aWxzJ1xuXSwgZnVuY3Rpb24gKFV0aWxzKSB7XG4gIGZ1bmN0aW9uIFNlbGVjdE9uQ2xvc2UgKCkgeyB9XG5cbiAgU2VsZWN0T25DbG9zZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQsIGNvbnRhaW5lciwgJGNvbnRhaW5lcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGRlY29yYXRlZC5jYWxsKHRoaXMsIGNvbnRhaW5lciwgJGNvbnRhaW5lcik7XG5cbiAgICBjb250YWluZXIub24oJ2Nsb3NlJywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgc2VsZi5faGFuZGxlU2VsZWN0T25DbG9zZShwYXJhbXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdE9uQ2xvc2UucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlID0gZnVuY3Rpb24gKF8sIHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLm9yaWdpbmFsU2VsZWN0MkV2ZW50ICE9IG51bGwpIHtcbiAgICAgIHZhciBldmVudCA9IHBhcmFtcy5vcmlnaW5hbFNlbGVjdDJFdmVudDtcblxuICAgICAgLy8gRG9uJ3Qgc2VsZWN0IGFuIGl0ZW0gaWYgdGhlIGNsb3NlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgZnJvbSBhIHNlbGVjdCBvclxuICAgICAgLy8gdW5zZWxlY3QgZXZlbnRcbiAgICAgIGlmIChldmVudC5fdHlwZSA9PT0gJ3NlbGVjdCcgfHwgZXZlbnQuX3R5cGUgPT09ICd1bnNlbGVjdCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciAkaGlnaGxpZ2h0ZWRSZXN1bHRzID0gdGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtcblxuICAgIC8vIE9ubHkgc2VsZWN0IGhpZ2hsaWdodGVkIHJlc3VsdHNcbiAgICBpZiAoJGhpZ2hsaWdodGVkUmVzdWx0cy5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRoaWdobGlnaHRlZFJlc3VsdHNbMF0sICdkYXRhJyk7XG5cbiAgICAvLyBEb24ndCByZS1zZWxlY3QgYWxyZWFkeSBzZWxlY3RlZCByZXN1bHRlXG4gICAgaWYgKFxuICAgICAgKGRhdGEuZWxlbWVudCAhPSBudWxsICYmIGRhdGEuZWxlbWVudC5zZWxlY3RlZCkgfHxcbiAgICAgIChkYXRhLmVsZW1lbnQgPT0gbnVsbCAmJiBkYXRhLnNlbGVjdGVkKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcignc2VsZWN0Jywge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNlbGVjdE9uQ2xvc2U7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3QnLFtcblxuXSwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDbG9zZU9uU2VsZWN0ICgpIHsgfVxuXG4gIENsb3NlT25TZWxlY3QucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoZGVjb3JhdGVkLCBjb250YWluZXIsICRjb250YWluZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBkZWNvcmF0ZWQuY2FsbCh0aGlzLCBjb250YWluZXIsICRjb250YWluZXIpO1xuXG4gICAgY29udGFpbmVyLm9uKCdzZWxlY3QnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLl9zZWxlY3RUcmlnZ2VyZWQoZXZ0KTtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5vbigndW5zZWxlY3QnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLl9zZWxlY3RUcmlnZ2VyZWQoZXZ0KTtcbiAgICB9KTtcbiAgfTtcblxuICBDbG9zZU9uU2VsZWN0LnByb3RvdHlwZS5fc2VsZWN0VHJpZ2dlcmVkID0gZnVuY3Rpb24gKF8sIGV2dCkge1xuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZ0Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAvLyBEb24ndCBjbG9zZSBpZiB0aGUgY29udHJvbCBrZXkgaXMgYmVpbmcgaGVsZFxuICAgIGlmIChvcmlnaW5hbEV2ZW50ICYmIChvcmlnaW5hbEV2ZW50LmN0cmxLZXkgfHwgb3JpZ2luYWxFdmVudC5tZXRhS2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcignY2xvc2UnLCB7XG4gICAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50LFxuICAgICAgb3JpZ2luYWxTZWxlY3QyRXZlbnQ6IGV2dFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBDbG9zZU9uU2VsZWN0O1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi9kcm9wZG93bkNzcycsW1xuICAnLi4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoVXRpbHMpIHtcbiAgZnVuY3Rpb24gRHJvcGRvd25DU1MgKCkgeyB9XG5cbiAgRHJvcGRvd25DU1MucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB2YXIgJGRyb3Bkb3duID0gZGVjb3JhdGVkLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgZHJvcGRvd25Dc3NDbGFzcyA9IHRoaXMub3B0aW9ucy5nZXQoJ2Ryb3Bkb3duQ3NzQ2xhc3MnKSB8fCAnJztcblxuICAgIGlmIChkcm9wZG93bkNzc0NsYXNzLmluZGV4T2YoJzphbGw6JykgIT09IC0xKSB7XG4gICAgICBkcm9wZG93bkNzc0NsYXNzID0gZHJvcGRvd25Dc3NDbGFzcy5yZXBsYWNlKCc6YWxsOicsICcnKTtcblxuICAgICAgVXRpbHMuY29weU5vbkludGVybmFsQ3NzQ2xhc3NlcygkZHJvcGRvd25bMF0sIHRoaXMuJGVsZW1lbnRbMF0pO1xuICAgIH1cblxuICAgICRkcm9wZG93bi5hZGRDbGFzcyhkcm9wZG93bkNzc0NsYXNzKTtcblxuICAgIHJldHVybiAkZHJvcGRvd247XG4gIH07XG5cbiAgcmV0dXJuIERyb3Bkb3duQ1NTO1xufSk7XG5cblMyLmRlZmluZSgnc2VsZWN0Mi9kcm9wZG93bi90YWdzU2VhcmNoSGlnaGxpZ2h0JyxbXG4gICcuLi91dGlscydcbl0sIGZ1bmN0aW9uIChVdGlscykge1xuICBmdW5jdGlvbiBUYWdzU2VhcmNoSGlnaGxpZ2h0ICgpIHsgfVxuXG4gIFRhZ3NTZWFyY2hIaWdobGlnaHQucHJvdG90eXBlLmhpZ2hsaWdodEZpcnN0SXRlbSA9IGZ1bmN0aW9uIChkZWNvcmF0ZWQpIHtcbiAgICB2YXIgJG9wdGlvbnMgPSB0aGlzLiRyZXN1bHRzXG4gICAgLmZpbmQoXG4gICAgICAnLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1zZWxlY3RhYmxlJyArXG4gICAgICAnOm5vdCguc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLXNlbGVjdGVkKSdcbiAgICApO1xuXG4gICAgaWYgKCRvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciAkZmlyc3RPcHRpb24gPSAkb3B0aW9ucy5maXJzdCgpO1xuICAgICAgdmFyIGRhdGEgPSBVdGlscy5HZXREYXRhKCRmaXJzdE9wdGlvblswXSwgJ2RhdGEnKTtcbiAgICAgIHZhciBmaXJzdEVsZW1lbnQgPSBkYXRhLmVsZW1lbnQ7XG5cbiAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LmdldEF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAoZmlyc3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZWxlY3QyLXRhZycpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAkZmlyc3RPcHRpb24udHJpZ2dlcignbW91c2VlbnRlcicpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVjb3JhdGVkLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIFRhZ3NTZWFyY2hIaWdobGlnaHQ7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2kxOG4vZW4nLFtdLGZ1bmN0aW9uICgpIHtcbiAgLy8gRW5nbGlzaFxuICByZXR1cm4ge1xuICAgIGVycm9yTG9hZGluZzogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdUaGUgcmVzdWx0cyBjb3VsZCBub3QgYmUgbG9hZGVkLic7XG4gICAgfSxcbiAgICBpbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICB2YXIgb3ZlckNoYXJzID0gYXJncy5pbnB1dC5sZW5ndGggLSBhcmdzLm1heGltdW07XG5cbiAgICAgIHZhciBtZXNzYWdlID0gJ1BsZWFzZSBkZWxldGUgJyArIG92ZXJDaGFycyArICcgY2hhcmFjdGVyJztcblxuICAgICAgaWYgKG92ZXJDaGFycyAhPSAxKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ3MnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9LFxuICAgIGlucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICB2YXIgcmVtYWluaW5nQ2hhcnMgPSBhcmdzLm1pbmltdW0gLSBhcmdzLmlucHV0Lmxlbmd0aDtcblxuICAgICAgdmFyIG1lc3NhZ2UgPSAnUGxlYXNlIGVudGVyICcgKyByZW1haW5pbmdDaGFycyArICcgb3IgbW9yZSBjaGFyYWN0ZXJzJztcblxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSxcbiAgICBsb2FkaW5nTW9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdMb2FkaW5nIG1vcmUgcmVzdWx0c+KApic7XG4gICAgfSxcbiAgICBtYXhpbXVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdZb3UgY2FuIG9ubHkgc2VsZWN0ICcgKyBhcmdzLm1heGltdW0gKyAnIGl0ZW0nO1xuXG4gICAgICBpZiAoYXJncy5tYXhpbXVtICE9IDEpIHtcbiAgICAgICAgbWVzc2FnZSArPSAncyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG4gICAgbm9SZXN1bHRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQnO1xuICAgIH0sXG4gICAgc2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gJ1NlYXJjaGluZ+KApic7XG4gICAgfSxcbiAgICByZW1vdmVBbGxJdGVtczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdSZW1vdmUgYWxsIGl0ZW1zJztcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAnUmVtb3ZlIGl0ZW0nO1xuICAgIH0sXG4gICAgc2VhcmNoOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAnU2VhcmNoJztcbiAgICB9XG4gIH07XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL2RlZmF1bHRzJyxbXG4gICdqcXVlcnknLFxuXG4gICcuL3Jlc3VsdHMnLFxuXG4gICcuL3NlbGVjdGlvbi9zaW5nbGUnLFxuICAnLi9zZWxlY3Rpb24vbXVsdGlwbGUnLFxuICAnLi9zZWxlY3Rpb24vcGxhY2Vob2xkZXInLFxuICAnLi9zZWxlY3Rpb24vYWxsb3dDbGVhcicsXG4gICcuL3NlbGVjdGlvbi9zZWFyY2gnLFxuICAnLi9zZWxlY3Rpb24vc2VsZWN0aW9uQ3NzJyxcbiAgJy4vc2VsZWN0aW9uL2V2ZW50UmVsYXknLFxuXG4gICcuL3V0aWxzJyxcbiAgJy4vdHJhbnNsYXRpb24nLFxuICAnLi9kaWFjcml0aWNzJyxcblxuICAnLi9kYXRhL3NlbGVjdCcsXG4gICcuL2RhdGEvYXJyYXknLFxuICAnLi9kYXRhL2FqYXgnLFxuICAnLi9kYXRhL3RhZ3MnLFxuICAnLi9kYXRhL3Rva2VuaXplcicsXG4gICcuL2RhdGEvbWluaW11bUlucHV0TGVuZ3RoJyxcbiAgJy4vZGF0YS9tYXhpbXVtSW5wdXRMZW5ndGgnLFxuICAnLi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGgnLFxuXG4gICcuL2Ryb3Bkb3duJyxcbiAgJy4vZHJvcGRvd24vc2VhcmNoJyxcbiAgJy4vZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyJyxcbiAgJy4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGwnLFxuICAnLi9kcm9wZG93bi9hdHRhY2hCb2R5JyxcbiAgJy4vZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2gnLFxuICAnLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlJyxcbiAgJy4vZHJvcGRvd24vY2xvc2VPblNlbGVjdCcsXG4gICcuL2Ryb3Bkb3duL2Ryb3Bkb3duQ3NzJyxcbiAgJy4vZHJvcGRvd24vdGFnc1NlYXJjaEhpZ2hsaWdodCcsXG5cbiAgJy4vaTE4bi9lbidcbl0sIGZ1bmN0aW9uICgkLFxuXG4gICAgICAgICAgICAgUmVzdWx0c0xpc3QsXG5cbiAgICAgICAgICAgICBTaW5nbGVTZWxlY3Rpb24sIE11bHRpcGxlU2VsZWN0aW9uLCBQbGFjZWhvbGRlciwgQWxsb3dDbGVhcixcbiAgICAgICAgICAgICBTZWxlY3Rpb25TZWFyY2gsIFNlbGVjdGlvbkNTUywgRXZlbnRSZWxheSxcblxuICAgICAgICAgICAgIFV0aWxzLCBUcmFuc2xhdGlvbiwgRElBQ1JJVElDUyxcblxuICAgICAgICAgICAgIFNlbGVjdERhdGEsIEFycmF5RGF0YSwgQWpheERhdGEsIFRhZ3MsIFRva2VuaXplcixcbiAgICAgICAgICAgICBNaW5pbXVtSW5wdXRMZW5ndGgsIE1heGltdW1JbnB1dExlbmd0aCwgTWF4aW11bVNlbGVjdGlvbkxlbmd0aCxcblxuICAgICAgICAgICAgIERyb3Bkb3duLCBEcm9wZG93blNlYXJjaCwgSGlkZVBsYWNlaG9sZGVyLCBJbmZpbml0ZVNjcm9sbCxcbiAgICAgICAgICAgICBBdHRhY2hCb2R5LCBNaW5pbXVtUmVzdWx0c0ZvclNlYXJjaCwgU2VsZWN0T25DbG9zZSwgQ2xvc2VPblNlbGVjdCxcbiAgICAgICAgICAgICBEcm9wZG93bkNTUywgVGFnc1NlYXJjaEhpZ2hsaWdodCxcblxuICAgICAgICAgICAgIEVuZ2xpc2hUcmFuc2xhdGlvbikge1xuICBmdW5jdGlvbiBEZWZhdWx0cyAoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgRGVmYXVsdHMucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMuZGF0YUFkYXB0ZXIgPT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuYWpheCAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBBamF4RGF0YTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICE9IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IEFycmF5RGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBTZWxlY3REYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5taW5pbXVtSW5wdXRMZW5ndGggPiAwKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLFxuICAgICAgICAgIE1pbmltdW1JbnB1dExlbmd0aFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5tYXhpbXVtSW5wdXRMZW5ndGggPiAwKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLFxuICAgICAgICAgIE1heGltdW1JbnB1dExlbmd0aFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlcixcbiAgICAgICAgICBNYXhpbXVtU2VsZWN0aW9uTGVuZ3RoXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRhZ3MpIHtcbiAgICAgICAgb3B0aW9ucy5kYXRhQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKG9wdGlvbnMuZGF0YUFkYXB0ZXIsIFRhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50b2tlblNlcGFyYXRvcnMgIT0gbnVsbCB8fCBvcHRpb25zLnRva2VuaXplciAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMuZGF0YUFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRhdGFBZGFwdGVyLFxuICAgICAgICAgIFRva2VuaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlc3VsdHNBZGFwdGVyID09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBSZXN1bHRzTGlzdDtcblxuICAgICAgaWYgKG9wdGlvbnMuYWpheCAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLFxuICAgICAgICAgIEluZmluaXRlU2Nyb2xsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyICE9IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIsXG4gICAgICAgICAgSGlkZVBsYWNlaG9sZGVyXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNlbGVjdE9uQ2xvc2UpIHtcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRzQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIsXG4gICAgICAgICAgU2VsZWN0T25DbG9zZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICAgIG9wdGlvbnMucmVzdWx0c0FkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnJlc3VsdHNBZGFwdGVyLFxuICAgICAgICAgIFRhZ3NTZWFyY2hIaWdobGlnaHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBEcm9wZG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBTZWFyY2hhYmxlRHJvcGRvd24gPSBVdGlscy5EZWNvcmF0ZShEcm9wZG93biwgRHJvcGRvd25TZWFyY2gpO1xuXG4gICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gU2VhcmNoYWJsZURyb3Bkb3duO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCAhPT0gMCkge1xuICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLFxuICAgICAgICAgIE1pbmltdW1SZXN1bHRzRm9yU2VhcmNoXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wZG93bkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlcixcbiAgICAgICAgICBDbG9zZU9uU2VsZWN0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRyb3Bkb3duQ3NzQ2xhc3MgIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLmRyb3Bkb3duQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLFxuICAgICAgICAgIERyb3Bkb3duQ1NTXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyID0gVXRpbHMuRGVjb3JhdGUoXG4gICAgICAgIG9wdGlvbnMuZHJvcGRvd25BZGFwdGVyLFxuICAgICAgICBBdHRhY2hCb2R5XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb25BZGFwdGVyID0gTXVsdGlwbGVTZWxlY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBTaW5nbGVTZWxlY3Rpb247XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0aGUgcGxhY2Vob2xkZXIgbWl4aW4gaWYgYSBwbGFjZWhvbGRlciB3YXMgc3BlY2lmaWVkXG4gICAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlcixcbiAgICAgICAgICBQbGFjZWhvbGRlclxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5hbGxvd0NsZWFyKSB7XG4gICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlcixcbiAgICAgICAgICBBbGxvd0NsZWFyXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlcixcbiAgICAgICAgICBTZWxlY3Rpb25TZWFyY2hcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0aW9uQ3NzQ2xhc3MgIT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIgPSBVdGlscy5EZWNvcmF0ZShcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsXG4gICAgICAgICAgU2VsZWN0aW9uQ1NTXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuc2VsZWN0aW9uQWRhcHRlciA9IFV0aWxzLkRlY29yYXRlKFxuICAgICAgICBvcHRpb25zLnNlbGVjdGlvbkFkYXB0ZXIsXG4gICAgICAgIEV2ZW50UmVsYXlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRlZmF1bHRzIHdlcmUgbm90IHByZXZpb3VzbHkgYXBwbGllZCBmcm9tIGFuIGVsZW1lbnQsIGl0IGlzXG4gICAgLy8gcG9zc2libGUgZm9yIHRoZSBsYW5ndWFnZSBvcHRpb24gdG8gaGF2ZSBub3QgYmVlbiByZXNvbHZlZFxuICAgIG9wdGlvbnMubGFuZ3VhZ2UgPSB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2Uob3B0aW9ucy5sYW5ndWFnZSk7XG5cbiAgICAvLyBBbHdheXMgZmFsbCBiYWNrIHRvIEVuZ2xpc2ggc2luY2UgaXQgd2lsbCBhbHdheXMgYmUgY29tcGxldGVcbiAgICBvcHRpb25zLmxhbmd1YWdlLnB1c2goJ2VuJyk7XG5cbiAgICB2YXIgdW5pcXVlTGFuZ3VhZ2VzID0gW107XG5cbiAgICBmb3IgKHZhciBsID0gMDsgbCA8IG9wdGlvbnMubGFuZ3VhZ2UubGVuZ3RoOyBsKyspIHtcbiAgICAgIHZhciBsYW5ndWFnZSA9IG9wdGlvbnMubGFuZ3VhZ2VbbF07XG5cbiAgICAgIGlmICh1bmlxdWVMYW5ndWFnZXMuaW5kZXhPZihsYW5ndWFnZSkgPT09IC0xKSB7XG4gICAgICAgIHVuaXF1ZUxhbmd1YWdlcy5wdXNoKGxhbmd1YWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHRpb25zLmxhbmd1YWdlID0gdW5pcXVlTGFuZ3VhZ2VzO1xuXG4gICAgb3B0aW9ucy50cmFuc2xhdGlvbnMgPSB0aGlzLl9wcm9jZXNzVHJhbnNsYXRpb25zKFxuICAgICAgb3B0aW9ucy5sYW5ndWFnZSxcbiAgICAgIG9wdGlvbnMuZGVidWdcbiAgICApO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG5cbiAgRGVmYXVsdHMucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyAodGV4dCkge1xuICAgICAgLy8gVXNlZCAndW5pIHJhbmdlICsgbmFtZWQgZnVuY3Rpb24nIGZyb20gaHR0cDovL2pzcGVyZi5jb20vZGlhY3JpdGljcy8xOFxuICAgICAgZnVuY3Rpb24gbWF0Y2goYSkge1xuICAgICAgICByZXR1cm4gRElBQ1JJVElDU1thXSB8fCBhO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3RV0vZywgbWF0Y2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoZXIgKHBhcmFtcywgZGF0YSkge1xuICAgICAgLy8gQWx3YXlzIHJldHVybiB0aGUgb2JqZWN0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZVxuICAgICAgaWYgKHBhcmFtcy50ZXJtID09IG51bGwgfHwgcGFyYW1zLnRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gRG8gYSByZWN1cnNpdmUgY2hlY2sgZm9yIG9wdGlvbnMgd2l0aCBjaGlsZHJlblxuICAgICAgaWYgKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBkYXRhIG9iamVjdCBpZiB0aGVyZSBhcmUgY2hpbGRyZW5cbiAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBhcyB3ZSBtb2RpZnkgdGhlIG9iamVjdCB0byByZW1vdmUgYW55IG5vbi1tYXRjaGVzXG4gICAgICAgIHZhciBtYXRjaCA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhKTtcblxuICAgICAgICAvLyBDaGVjayBlYWNoIGNoaWxkIG9mIHRoZSBvcHRpb25cbiAgICAgICAgZm9yICh2YXIgYyA9IGRhdGEuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgYyA+PSAwOyBjLS0pIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBkYXRhLmNoaWxkcmVuW2NdO1xuXG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaGVyKHBhcmFtcywgY2hpbGQpO1xuXG4gICAgICAgICAgLy8gSWYgdGhlcmUgd2Fzbid0IGEgbWF0Y2gsIHJlbW92ZSB0aGUgb2JqZWN0IGluIHRoZSBhcnJheVxuICAgICAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgICAgIG1hdGNoLmNoaWxkcmVuLnNwbGljZShjLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgY2hpbGRyZW4gbWF0Y2hlZCwgcmV0dXJuIHRoZSBuZXcgb2JqZWN0XG4gICAgICAgIGlmIChtYXRjaC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBtYXRjaGluZyBjaGlsZHJlbiwgY2hlY2sganVzdCB0aGUgcGxhaW4gb2JqZWN0XG4gICAgICAgIHJldHVybiBtYXRjaGVyKHBhcmFtcywgbWF0Y2gpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3JpZ2luYWwgPSBzdHJpcERpYWNyaXRpY3MoZGF0YS50ZXh0KS50b1VwcGVyQ2FzZSgpO1xuICAgICAgdmFyIHRlcm0gPSBzdHJpcERpYWNyaXRpY3MocGFyYW1zLnRlcm0pLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGNvbnRhaW5zIHRoZSB0ZXJtXG4gICAgICBpZiAob3JpZ2luYWwuaW5kZXhPZih0ZXJtKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCBkb2Vzbid0IGNvbnRhaW4gdGhlIHRlcm0sIGRvbid0IHJldHVybiBhbnl0aGluZ1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIGFtZExhbmd1YWdlQmFzZTogJy4vaTE4bi8nLFxuICAgICAgYXV0b2NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICBkcm9wZG93bkF1dG9XaWR0aDogZmFsc2UsXG4gICAgICBlc2NhcGVNYXJrdXA6IFV0aWxzLmVzY2FwZU1hcmt1cCxcbiAgICAgIGxhbmd1YWdlOiB7fSxcbiAgICAgIG1hdGNoZXI6IG1hdGNoZXIsXG4gICAgICBtaW5pbXVtSW5wdXRMZW5ndGg6IDAsXG4gICAgICBtYXhpbXVtSW5wdXRMZW5ndGg6IDAsXG4gICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAwLFxuICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDAsXG4gICAgICBzZWxlY3RPbkNsb3NlOiBmYWxzZSxcbiAgICAgIHNjcm9sbEFmdGVyU2VsZWN0OiBmYWxzZSxcbiAgICAgIHNvcnRlcjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGVSZXN1bHQ6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50ZXh0O1xuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlU2VsZWN0aW9uOiBmdW5jdGlvbiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24udGV4dDtcbiAgICAgIH0sXG4gICAgICB0aGVtZTogJ2RlZmF1bHQnLFxuICAgICAgd2lkdGg6ICdyZXNvbHZlJ1xuICAgIH07XG4gIH07XG5cbiAgRGVmYXVsdHMucHJvdG90eXBlLmFwcGx5RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucywgJGVsZW1lbnQpIHtcbiAgICB2YXIgb3B0aW9uTGFuZ3VhZ2UgPSBvcHRpb25zLmxhbmd1YWdlO1xuICAgIHZhciBkZWZhdWx0TGFuZ3VhZ2UgPSB0aGlzLmRlZmF1bHRzLmxhbmd1YWdlO1xuICAgIHZhciBlbGVtZW50TGFuZ3VhZ2UgPSAkZWxlbWVudC5wcm9wKCdsYW5nJyk7XG4gICAgdmFyIHBhcmVudExhbmd1YWdlID0gJGVsZW1lbnQuY2xvc2VzdCgnW2xhbmddJykucHJvcCgnbGFuZycpO1xuXG4gICAgdmFyIGxhbmd1YWdlcyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbChcbiAgICAgIHRoaXMuX3Jlc29sdmVMYW5ndWFnZShlbGVtZW50TGFuZ3VhZ2UpLFxuICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG9wdGlvbkxhbmd1YWdlKSxcbiAgICAgIHRoaXMuX3Jlc29sdmVMYW5ndWFnZShkZWZhdWx0TGFuZ3VhZ2UpLFxuICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKHBhcmVudExhbmd1YWdlKVxuICAgICk7XG5cbiAgICBvcHRpb25zLmxhbmd1YWdlID0gbGFuZ3VhZ2VzO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG5cbiAgRGVmYXVsdHMucHJvdG90eXBlLl9yZXNvbHZlTGFuZ3VhZ2UgPSBmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCQuaXNFbXB0eU9iamVjdChsYW5ndWFnZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoJC5pc1BsYWluT2JqZWN0KGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIFtsYW5ndWFnZV07XG4gICAgfVxuXG4gICAgdmFyIGxhbmd1YWdlcztcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShsYW5ndWFnZSkpIHtcbiAgICAgIGxhbmd1YWdlcyA9IFtsYW5ndWFnZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbmd1YWdlcyA9IGxhbmd1YWdlO1xuICAgIH1cblxuICAgIHZhciByZXNvbHZlZExhbmd1YWdlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsYW5ndWFnZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIHJlc29sdmVkTGFuZ3VhZ2VzLnB1c2gobGFuZ3VhZ2VzW2xdKTtcblxuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZXNbbF0gPT09ICdzdHJpbmcnICYmIGxhbmd1YWdlc1tsXS5pbmRleE9mKCctJykgPiAwKSB7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpZiBpdCBpcyBpbmNsdWRlZFxuICAgICAgICB2YXIgbGFuZ3VhZ2VQYXJ0cyA9IGxhbmd1YWdlc1tsXS5zcGxpdCgnLScpO1xuICAgICAgICB2YXIgYmFzZUxhbmd1YWdlID0gbGFuZ3VhZ2VQYXJ0c1swXTtcblxuICAgICAgICByZXNvbHZlZExhbmd1YWdlcy5wdXNoKGJhc2VMYW5ndWFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkTGFuZ3VhZ2VzO1xuICB9O1xuXG4gIERlZmF1bHRzLnByb3RvdHlwZS5fcHJvY2Vzc1RyYW5zbGF0aW9ucyA9IGZ1bmN0aW9uIChsYW5ndWFnZXMsIGRlYnVnKSB7XG4gICAgdmFyIHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbigpO1xuXG4gICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsYW5ndWFnZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIHZhciBsYW5ndWFnZURhdGEgPSBuZXcgVHJhbnNsYXRpb24oKTtcblxuICAgICAgdmFyIGxhbmd1YWdlID0gbGFuZ3VhZ2VzW2xdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRyeSB0byBsb2FkIGl0IHdpdGggdGhlIG9yaWdpbmFsIG5hbWVcbiAgICAgICAgICBsYW5ndWFnZURhdGEgPSBUcmFuc2xhdGlvbi5sb2FkUGF0aChsYW5ndWFnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgbG9hZCBpdCwgY2hlY2sgaWYgaXQgd2Fzbid0IHRoZSBmdWxsIHBhdGhcbiAgICAgICAgICAgIGxhbmd1YWdlID0gdGhpcy5kZWZhdWx0cy5hbWRMYW5ndWFnZUJhc2UgKyBsYW5ndWFnZTtcbiAgICAgICAgICAgIGxhbmd1YWdlRGF0YSA9IFRyYW5zbGF0aW9uLmxvYWRQYXRoKGxhbmd1YWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgLy8gVGhlIHRyYW5zbGF0aW9uIGNvdWxkIG5vdCBiZSBsb2FkZWQgYXQgYWxsLiBTb21ldGltZXMgdGhpcyBpc1xuICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBhIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSwgb3RoZXIgdGltZXMgdGhpcyBjYW4gYmVcbiAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgaG93IFNlbGVjdDIgaGVscHMgbG9hZCBhbGwgcG9zc2libGUgdHJhbnNsYXRpb24gZmlsZXNcbiAgICAgICAgICAgIGlmIChkZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdTZWxlY3QyOiBUaGUgbGFuZ3VhZ2UgZmlsZSBmb3IgXCInICsgbGFuZ3VhZ2UgKyAnXCIgY291bGQgJyArXG4gICAgICAgICAgICAgICAgJ25vdCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZC4gQSBmYWxsYmFjayB3aWxsIGJlIHVzZWQgaW5zdGVhZC4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCQuaXNQbGFpbk9iamVjdChsYW5ndWFnZSkpIHtcbiAgICAgICAgbGFuZ3VhZ2VEYXRhID0gbmV3IFRyYW5zbGF0aW9uKGxhbmd1YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhbmd1YWdlRGF0YSA9IGxhbmd1YWdlO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2xhdGlvbnMuZXh0ZW5kKGxhbmd1YWdlRGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgfTtcblxuICBEZWZhdWx0cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgY2FtZWxLZXkgPSAkLmNhbWVsQ2FzZShrZXkpO1xuXG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICBkYXRhW2NhbWVsS2V5XSA9IHZhbHVlO1xuXG4gICAgdmFyIGNvbnZlcnRlZERhdGEgPSBVdGlscy5fY29udmVydERhdGEoZGF0YSk7XG5cbiAgICAkLmV4dGVuZCh0cnVlLCB0aGlzLmRlZmF1bHRzLCBjb252ZXJ0ZWREYXRhKTtcbiAgfTtcblxuICB2YXIgZGVmYXVsdHMgPSBuZXcgRGVmYXVsdHMoKTtcblxuICByZXR1cm4gZGVmYXVsdHM7XG59KTtcblxuUzIuZGVmaW5lKCdzZWxlY3QyL29wdGlvbnMnLFtcbiAgJ2pxdWVyeScsXG4gICcuL2RlZmF1bHRzJyxcbiAgJy4vdXRpbHMnXG5dLCBmdW5jdGlvbiAoJCwgRGVmYXVsdHMsIFV0aWxzKSB7XG4gIGZ1bmN0aW9uIE9wdGlvbnMgKG9wdGlvbnMsICRlbGVtZW50KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICgkZWxlbWVudCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZyb21FbGVtZW50KCRlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoJGVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gRGVmYXVsdHMuYXBwbHlGcm9tRWxlbWVudCh0aGlzLm9wdGlvbnMsICRlbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBEZWZhdWx0cy5hcHBseSh0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgT3B0aW9ucy5wcm90b3R5cGUuZnJvbUVsZW1lbnQgPSBmdW5jdGlvbiAoJGUpIHtcbiAgICB2YXIgZXhjbHVkZWREYXRhID0gWydzZWxlY3QyJ107XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlID09IG51bGwpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tdWx0aXBsZSA9ICRlLnByb3AoJ211bHRpcGxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSAkZS5wcm9wKCdkaXNhYmxlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b2NvbXBsZXRlID09IG51bGwgJiYgJGUucHJvcCgnYXV0b2NvbXBsZXRlJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5hdXRvY29tcGxldGUgPSAkZS5wcm9wKCdhdXRvY29tcGxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpciA9PSBudWxsKSB7XG4gICAgICBpZiAoJGUucHJvcCgnZGlyJykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmRpciA9ICRlLnByb3AoJ2RpcicpO1xuICAgICAgfSBlbHNlIGlmICgkZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kaXIgPSAkZS5jbG9zZXN0KCdbZGlyXScpLnByb3AoJ2RpcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmRpciA9ICdsdHInO1xuICAgICAgfVxuICAgIH1cblxuICAgICRlLnByb3AoJ2Rpc2FibGVkJywgdGhpcy5vcHRpb25zLmRpc2FibGVkKTtcbiAgICAkZS5wcm9wKCdtdWx0aXBsZScsIHRoaXMub3B0aW9ucy5tdWx0aXBsZSk7XG5cbiAgICBpZiAoVXRpbHMuR2V0RGF0YSgkZVswXSwgJ3NlbGVjdDJUYWdzJykpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnU2VsZWN0MjogVGhlIGBkYXRhLXNlbGVjdDItdGFnc2AgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJyArXG4gICAgICAgICAgJ3VzZSB0aGUgYGRhdGEtZGF0YWAgYW5kIGBkYXRhLXRhZ3M9XCJ0cnVlXCJgIGF0dHJpYnV0ZXMgYW5kIHdpbGwgYmUgJyArXG4gICAgICAgICAgJ3JlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFNlbGVjdDIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBVdGlscy5TdG9yZURhdGEoJGVbMF0sICdkYXRhJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ3NlbGVjdDJUYWdzJykpO1xuICAgICAgVXRpbHMuU3RvcmVEYXRhKCRlWzBdLCAndGFncycsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChVdGlscy5HZXREYXRhKCRlWzBdLCAnYWpheFVybCcpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1NlbGVjdDI6IFRoZSBgZGF0YS1hamF4LXVybGAgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJyArXG4gICAgICAgICAgJ2BkYXRhLWFqYXgtLXVybGAgYW5kIHN1cHBvcnQgZm9yIHRoZSBvbGQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCcgK1xuICAgICAgICAgICcgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFNlbGVjdDIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAkZS5hdHRyKCdhamF4LS11cmwnLCBVdGlscy5HZXREYXRhKCRlWzBdLCAnYWpheFVybCcpKTtcbiAgICAgIFV0aWxzLlN0b3JlRGF0YSgkZVswXSwgJ2FqYXgtVXJsJywgVXRpbHMuR2V0RGF0YSgkZVswXSwgJ2FqYXhVcmwnKSk7XG4gICAgfVxuXG4gICAgdmFyIGRhdGFzZXQgPSB7fTtcblxuICAgIGZ1bmN0aW9uIHVwcGVyQ2FzZUxldHRlcihfLCBsZXR0ZXIpIHtcbiAgICAgIHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBQcmUtbG9hZCBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIHByZWZpeGVkIHdpdGggYGRhdGEtYFxuICAgIGZvciAodmFyIGF0dHIgPSAwOyBhdHRyIDwgJGVbMF0uYXR0cmlidXRlcy5sZW5ndGg7IGF0dHIrKykge1xuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAkZVswXS5hdHRyaWJ1dGVzW2F0dHJdLm5hbWU7XG4gICAgICB2YXIgcHJlZml4ID0gJ2RhdGEtJztcblxuICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgpID09IHByZWZpeCkge1xuICAgICAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBhdHRyaWJ1dGUgYWZ0ZXIgYGRhdGEtYFxuICAgICAgICB2YXIgZGF0YU5hbWUgPSBhdHRyaWJ1dGVOYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGRhdGEgY29udGVudHMgZnJvbSB0aGUgY29uc2lzdGVudCBzb3VyY2VcbiAgICAgICAgLy8gVGhpcyBpcyBtb3JlIHRoYW4gbGlrZWx5IHRoZSBqUXVlcnkgZGF0YSBoZWxwZXJcbiAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IFV0aWxzLkdldERhdGEoJGVbMF0sIGRhdGFOYW1lKTtcblxuICAgICAgICAvLyBjYW1lbENhc2UgdGhlIGF0dHJpYnV0ZSBuYW1lIHRvIG1hdGNoIHRoZSBzcGVjXG4gICAgICAgIHZhciBjYW1lbERhdGFOYW1lID0gZGF0YU5hbWUucmVwbGFjZSgvLShbYS16XSkvZywgdXBwZXJDYXNlTGV0dGVyKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgZGF0YSBhdHRyaWJ1dGUgY29udGVudHMgaW50byB0aGUgZGF0YXNldCBzaW5jZVxuICAgICAgICBkYXRhc2V0W2NhbWVsRGF0YU5hbWVdID0gZGF0YVZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZWZlciB0aGUgZWxlbWVudCdzIGBkYXRhc2V0YCBhdHRyaWJ1dGUgaWYgaXQgZXhpc3RzXG4gICAgLy8galF1ZXJ5IDEueCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGRhdGEgYXR0cmlidXRlcyB3aXRoIG11bHRpcGxlIGRhc2hlc1xuICAgIGlmICgkLmZuLmpxdWVyeSAmJiAkLmZuLmpxdWVyeS5zdWJzdHIoMCwgMikgPT0gJzEuJyAmJiAkZVswXS5kYXRhc2V0KSB7XG4gICAgICBkYXRhc2V0ID0gJC5leHRlbmQodHJ1ZSwge30sICRlWzBdLmRhdGFzZXQsIGRhdGFzZXQpO1xuICAgIH1cblxuICAgIC8vIFByZWZlciBvdXIgaW50ZXJuYWwgZGF0YSBjYWNoZSBpZiBpdCBleGlzdHNcbiAgICB2YXIgZGF0YSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBVdGlscy5HZXREYXRhKCRlWzBdKSwgZGF0YXNldCk7XG5cbiAgICBkYXRhID0gVXRpbHMuX2NvbnZlcnREYXRhKGRhdGEpO1xuXG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChleGNsdWRlZERhdGEuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgkLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zW2tleV0pKSB7XG4gICAgICAgICQuZXh0ZW5kKHRoaXMub3B0aW9uc1trZXldLCBkYXRhW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSBkYXRhW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgT3B0aW9ucy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNba2V5XTtcbiAgfTtcblxuICBPcHRpb25zLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbDtcbiAgfTtcblxuICByZXR1cm4gT3B0aW9ucztcbn0pO1xuXG5TMi5kZWZpbmUoJ3NlbGVjdDIvY29yZScsW1xuICAnanF1ZXJ5JyxcbiAgJy4vb3B0aW9ucycsXG4gICcuL3V0aWxzJyxcbiAgJy4va2V5cydcbl0sIGZ1bmN0aW9uICgkLCBPcHRpb25zLCBVdGlscywgS0VZUykge1xuICB2YXIgU2VsZWN0MiA9IGZ1bmN0aW9uICgkZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChVdGlscy5HZXREYXRhKCRlbGVtZW50WzBdLCAnc2VsZWN0MicpICE9IG51bGwpIHtcbiAgICAgIFV0aWxzLkdldERhdGEoJGVsZW1lbnRbMF0sICdzZWxlY3QyJykuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQgPSAkZWxlbWVudDtcblxuICAgIHRoaXMuaWQgPSB0aGlzLl9nZW5lcmF0ZUlkKCRlbGVtZW50KTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9wdGlvbnMob3B0aW9ucywgJGVsZW1lbnQpO1xuXG4gICAgU2VsZWN0Mi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcblxuICAgIC8vIFNldCB1cCB0aGUgdGFiaW5kZXhcblxuICAgIHZhciB0YWJpbmRleCA9ICRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JykgfHwgMDtcbiAgICBVdGlscy5TdG9yZURhdGEoJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnLCB0YWJpbmRleCk7XG4gICAgJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcblxuICAgIC8vIFNldCB1cCBjb250YWluZXJzIGFuZCBhZGFwdGVyc1xuXG4gICAgdmFyIERhdGFBZGFwdGVyID0gdGhpcy5vcHRpb25zLmdldCgnZGF0YUFkYXB0ZXInKTtcbiAgICB0aGlzLmRhdGFBZGFwdGVyID0gbmV3IERhdGFBZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdmFyICRjb250YWluZXIgPSB0aGlzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5fcGxhY2VDb250YWluZXIoJGNvbnRhaW5lcik7XG5cbiAgICB2YXIgU2VsZWN0aW9uQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ3NlbGVjdGlvbkFkYXB0ZXInKTtcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuJHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLnJlbmRlcigpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24ucG9zaXRpb24odGhpcy4kc2VsZWN0aW9uLCAkY29udGFpbmVyKTtcblxuICAgIHZhciBEcm9wZG93bkFkYXB0ZXIgPSB0aGlzLm9wdGlvbnMuZ2V0KCdkcm9wZG93bkFkYXB0ZXInKTtcbiAgICB0aGlzLmRyb3Bkb3duID0gbmV3IERyb3Bkb3duQWRhcHRlcigkZWxlbWVudCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLiRkcm9wZG93biA9IHRoaXMuZHJvcGRvd24ucmVuZGVyKCk7XG5cbiAgICB0aGlzLmRyb3Bkb3duLnBvc2l0aW9uKHRoaXMuJGRyb3Bkb3duLCAkY29udGFpbmVyKTtcblxuICAgIHZhciBSZXN1bHRzQWRhcHRlciA9IHRoaXMub3B0aW9ucy5nZXQoJ3Jlc3VsdHNBZGFwdGVyJyk7XG4gICAgdGhpcy5yZXN1bHRzID0gbmV3IFJlc3VsdHNBZGFwdGVyKCRlbGVtZW50LCB0aGlzLm9wdGlvbnMsIHRoaXMuZGF0YUFkYXB0ZXIpO1xuICAgIHRoaXMuJHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnJlc3VsdHMucG9zaXRpb24odGhpcy4kcmVzdWx0cywgdGhpcy4kZHJvcGRvd24pO1xuXG4gICAgLy8gQmluZCBldmVudHNcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIEJpbmQgdGhlIGNvbnRhaW5lciB0byBhbGwgb2YgdGhlIGFkYXB0ZXJzXG4gICAgdGhpcy5fYmluZEFkYXB0ZXJzKCk7XG5cbiAgICAvLyBSZWdpc3RlciBhbnkgRE9NIGV2ZW50IGhhbmRsZXJzXG4gICAgdGhpcy5fcmVnaXN0ZXJEb21FdmVudHMoKTtcblxuICAgIC8vIFJlZ2lzdGVyIGFueSBpbnRlcm5hbCBldmVudCBoYW5kbGVyc1xuICAgIHRoaXMuX3JlZ2lzdGVyRGF0YUV2ZW50cygpO1xuICAgIHRoaXMuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJEcm9wZG93bkV2ZW50cygpO1xuICAgIHRoaXMuX3JlZ2lzdGVyUmVzdWx0c0V2ZW50cygpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCk7XG5cbiAgICAvLyBTZXQgdGhlIGluaXRpYWwgc3RhdGVcbiAgICB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGluaXRpYWxEYXRhKSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ3NlbGVjdGlvbjp1cGRhdGUnLCB7XG4gICAgICAgIGRhdGE6IGluaXRpYWxEYXRhXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEhpZGUgdGhlIG9yaWdpbmFsIHNlbGVjdFxuICAgICRlbGVtZW50WzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUnKTtcbiAgICAkZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAvLyBTeW5jaHJvbml6ZSBhbnkgbW9uaXRvcmVkIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zeW5jQXR0cmlidXRlcygpO1xuXG4gICAgVXRpbHMuU3RvcmVEYXRhKCRlbGVtZW50WzBdLCAnc2VsZWN0MicsIHRoaXMpO1xuXG4gICAgLy8gRW5zdXJlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggJGVsZW1lbnQuZGF0YSgnc2VsZWN0MicpLlxuICAgICRlbGVtZW50LmRhdGEoJ3NlbGVjdDInLCB0aGlzKTtcbiAgfTtcblxuICBVdGlscy5FeHRlbmQoU2VsZWN0MiwgVXRpbHMuT2JzZXJ2YWJsZSk7XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX2dlbmVyYXRlSWQgPSBmdW5jdGlvbiAoJGVsZW1lbnQpIHtcbiAgICB2YXIgaWQgPSAnJztcblxuICAgIGlmICgkZWxlbWVudC5hdHRyKCdpZCcpICE9IG51bGwpIHtcbiAgICAgIGlkID0gJGVsZW1lbnQuYXR0cignaWQnKTtcbiAgICB9IGVsc2UgaWYgKCRlbGVtZW50LmF0dHIoJ25hbWUnKSAhPSBudWxsKSB7XG4gICAgICBpZCA9ICRlbGVtZW50LmF0dHIoJ25hbWUnKSArICctJyArIFV0aWxzLmdlbmVyYXRlQ2hhcnMoMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0gVXRpbHMuZ2VuZXJhdGVDaGFycyg0KTtcbiAgICB9XG5cbiAgICBpZCA9IGlkLnJlcGxhY2UoLyg6fFxcLnxcXFt8XFxdfCwpL2csICcnKTtcbiAgICBpZCA9ICdzZWxlY3QyLScgKyBpZDtcblxuICAgIHJldHVybiBpZDtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fcGxhY2VDb250YWluZXIgPSBmdW5jdGlvbiAoJGNvbnRhaW5lcikge1xuICAgICRjb250YWluZXIuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl9yZXNvbHZlV2lkdGgodGhpcy4kZWxlbWVudCwgdGhpcy5vcHRpb25zLmdldCgnd2lkdGgnKSk7XG5cbiAgICBpZiAod2lkdGggIT0gbnVsbCkge1xuICAgICAgJGNvbnRhaW5lci5jc3MoJ3dpZHRoJywgd2lkdGgpO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fcmVzb2x2ZVdpZHRoID0gZnVuY3Rpb24gKCRlbGVtZW50LCBtZXRob2QpIHtcbiAgICB2YXIgV0lEVEggPSAvXndpZHRoOigoWy0rXT8oWzAtOV0qXFwuKT9bMC05XSspKHB4fGVtfGV4fCV8aW58Y218bW18cHR8cGMpKS9pO1xuXG4gICAgaWYgKG1ldGhvZCA9PSAncmVzb2x2ZScpIHtcbiAgICAgIHZhciBzdHlsZVdpZHRoID0gdGhpcy5fcmVzb2x2ZVdpZHRoKCRlbGVtZW50LCAnc3R5bGUnKTtcblxuICAgICAgaWYgKHN0eWxlV2lkdGggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3R5bGVXaWR0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVXaWR0aCgkZWxlbWVudCwgJ2VsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09ICdlbGVtZW50Jykge1xuICAgICAgdmFyIGVsZW1lbnRXaWR0aCA9ICRlbGVtZW50Lm91dGVyV2lkdGgoZmFsc2UpO1xuXG4gICAgICBpZiAoZWxlbWVudFdpZHRoIDw9IDApIHtcbiAgICAgICAgcmV0dXJuICdhdXRvJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVsZW1lbnRXaWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PSAnc3R5bGUnKSB7XG4gICAgICB2YXIgc3R5bGUgPSAkZWxlbWVudC5hdHRyKCdzdHlsZScpO1xuXG4gICAgICBpZiAodHlwZW9mKHN0eWxlKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRycyA9IHN0eWxlLnNwbGl0KCc7Jyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSA9IGkgKyAxKSB7XG4gICAgICAgIHZhciBhdHRyID0gYXR0cnNbaV0ucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBhdHRyLm1hdGNoKFdJRFRIKTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PSAnY29tcHV0ZWRzdHlsZScpIHtcbiAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoJGVsZW1lbnRbMF0pO1xuXG4gICAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS53aWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9iaW5kQWRhcHRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kYXRhQWRhcHRlci5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7XG4gICAgdGhpcy5zZWxlY3Rpb24uYmluZCh0aGlzLCB0aGlzLiRjb250YWluZXIpO1xuXG4gICAgdGhpcy5kcm9wZG93bi5iaW5kKHRoaXMsIHRoaXMuJGNvbnRhaW5lcik7XG4gICAgdGhpcy5yZXN1bHRzLmJpbmQodGhpcywgdGhpcy4kY29udGFpbmVyKTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fcmVnaXN0ZXJEb21FdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5vbignY2hhbmdlLnNlbGVjdDInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywge1xuICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ2ZvY3VzLnNlbGVjdDInLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBzZWxmLnRyaWdnZXIoJ2ZvY3VzJywgZXZ0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N5bmNBID0gVXRpbHMuYmluZCh0aGlzLl9zeW5jQXR0cmlidXRlcywgdGhpcyk7XG4gICAgdGhpcy5fc3luY1MgPSBVdGlscy5iaW5kKHRoaXMuX3N5bmNTdWJ0cmVlLCB0aGlzKTtcblxuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgIHNlbGYuX3N5bmNBKCk7XG4gICAgICBzZWxmLl9zeW5jUyhtdXRhdGlvbnMpO1xuICAgIH0pO1xuICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy4kZWxlbWVudFswXSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IGZhbHNlXG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRGF0YUV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLmRhdGFBZGFwdGVyLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykge1xuICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyU2VsZWN0aW9uRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbm9uUmVsYXlFdmVudHMgPSBbJ3RvZ2dsZScsICdmb2N1cyddO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24ub24oJ3RvZ2dsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudG9nZ2xlRHJvcGRvd24oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgIHNlbGYuZm9jdXMocGFyYW1zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykge1xuICAgICAgaWYgKG5vblJlbGF5RXZlbnRzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRHJvcGRvd25FdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5kcm9wZG93bi5vbignKicsIGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHtcbiAgICAgIHNlbGYudHJpZ2dlcihuYW1lLCBwYXJhbXMpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9yZWdpc3RlclJlc3VsdHNFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5yZXN1bHRzLm9uKCcqJywgZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykge1xuICAgICAgc2VsZi50cmlnZ2VyKG5hbWUsIHBhcmFtcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuX3JlZ2lzdGVyRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMub24oJ29wZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0Mi1jb250YWluZXItLW9wZW4nKTtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdlbmFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLiRjb250YWluZXJbMF0uY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdkaXNhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbignYmx1cicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXMnKTtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ3F1ZXJ5JywgZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgaWYgKCFzZWxmLmlzT3BlbigpKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcignb3BlbicsIHt9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRhQWRhcHRlci5xdWVyeShwYXJhbXMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czphbGwnLCB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBxdWVyeTogcGFyYW1zXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uKCdxdWVyeTphcHBlbmQnLCBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICB0aGlzLmRhdGFBZGFwdGVyLnF1ZXJ5KHBhcmFtcywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOmFwcGVuZCcsIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIHF1ZXJ5OiBwYXJhbXNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMub24oJ2tleXByZXNzJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgdmFyIGtleSA9IGV2dC53aGljaDtcblxuICAgICAgaWYgKHNlbGYuaXNPcGVuKCkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gS0VZUy5FU0MgfHwgKGtleSA9PT0gS0VZUy5VUCAmJiBldnQuYWx0S2V5KSkge1xuICAgICAgICAgIHNlbGYuY2xvc2UoZXZ0KTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5FTlRFUiB8fCBrZXkgPT09IEtFWVMuVEFCKSB7XG4gICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOnNlbGVjdCcsIHt9KTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKChrZXkgPT09IEtFWVMuU1BBQ0UgJiYgZXZ0LmN0cmxLZXkpKSB7XG4gICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOnRvZ2dsZScsIHt9KTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5VUCkge1xuICAgICAgICAgIHNlbGYudHJpZ2dlcigncmVzdWx0czpwcmV2aW91cycsIHt9KTtcblxuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS0VZUy5ET1dOKSB7XG4gICAgICAgICAgc2VsZi50cmlnZ2VyKCdyZXN1bHRzOm5leHQnLCB7fSk7XG5cbiAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gS0VZUy5FTlRFUiB8fCBrZXkgPT09IEtFWVMuU1BBQ0UgfHxcbiAgICAgICAgICAgIChrZXkgPT09IEtFWVMuRE9XTiAmJiBldnQuYWx0S2V5KSkge1xuICAgICAgICAgIHNlbGYub3BlbigpO1xuXG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fc3luY0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5vcHRpb25zLnNldCgnZGlzYWJsZWQnLCB0aGlzLiRlbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpO1xuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCgpKSB7XG4gICAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJpZ2dlcignZGlzYWJsZScsIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyKCdlbmFibGUnLCB7fSk7XG4gICAgfVxuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLl9pc0NoYW5nZU11dGF0aW9uID0gZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmIChtdXRhdGlvbnMuYWRkZWROb2RlcyAmJiBtdXRhdGlvbnMuYWRkZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG11dGF0aW9ucy5hZGRlZE5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgIHZhciBub2RlID0gbXV0YXRpb25zLmFkZGVkTm9kZXNbbl07XG5cbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobXV0YXRpb25zLnJlbW92ZWROb2RlcyAmJiBtdXRhdGlvbnMucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtdXRhdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbXV0YXRpb25zLnNvbWUoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxmLl9pc0NoYW5nZU11dGF0aW9uKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5fc3luY1N1YnRyZWUgPSBmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgdmFyIGNoYW5nZWQgPSB0aGlzLl9pc0NoYW5nZU11dGF0aW9uKG11dGF0aW9ucyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gT25seSByZS1wdWxsIHRoZSBkYXRhIGlmIHdlIHRoaW5rIHRoZXJlIGlzIGEgY2hhbmdlXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZGF0YUFkYXB0ZXIuY3VycmVudChmdW5jdGlvbiAoY3VycmVudERhdGEpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKCdzZWxlY3Rpb246dXBkYXRlJywge1xuICAgICAgICAgIGRhdGE6IGN1cnJlbnREYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJpZ2dlciBtZXRob2QgdG8gYXV0b21hdGljYWxseSB0cmlnZ2VyIHByZS1ldmVudHMgd2hlblxuICAgKiB0aGVyZSBhcmUgZXZlbnRzIHRoYXQgY2FuIGJlIHByZXZlbnRlZC5cbiAgICovXG4gIFNlbGVjdDIucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAobmFtZSwgYXJncykge1xuICAgIHZhciBhY3R1YWxUcmlnZ2VyID0gU2VsZWN0Mi5fX3N1cGVyX18udHJpZ2dlcjtcbiAgICB2YXIgcHJlVHJpZ2dlck1hcCA9IHtcbiAgICAgICdvcGVuJzogJ29wZW5pbmcnLFxuICAgICAgJ2Nsb3NlJzogJ2Nsb3NpbmcnLFxuICAgICAgJ3NlbGVjdCc6ICdzZWxlY3RpbmcnLFxuICAgICAgJ3Vuc2VsZWN0JzogJ3Vuc2VsZWN0aW5nJyxcbiAgICAgICdjbGVhcic6ICdjbGVhcmluZydcbiAgICB9O1xuXG4gICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChuYW1lIGluIHByZVRyaWdnZXJNYXApIHtcbiAgICAgIHZhciBwcmVUcmlnZ2VyTmFtZSA9IHByZVRyaWdnZXJNYXBbbmFtZV07XG4gICAgICB2YXIgcHJlVHJpZ2dlckFyZ3MgPSB7XG4gICAgICAgIHByZXZlbnRlZDogZmFsc2UsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgIH07XG5cbiAgICAgIGFjdHVhbFRyaWdnZXIuY2FsbCh0aGlzLCBwcmVUcmlnZ2VyTmFtZSwgcHJlVHJpZ2dlckFyZ3MpO1xuXG4gICAgICBpZiAocHJlVHJpZ2dlckFyZ3MucHJldmVudGVkKSB7XG4gICAgICAgIGFyZ3MucHJldmVudGVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWN0dWFsVHJpZ2dlci5jYWxsKHRoaXMsIG5hbWUsIGFyZ3MpO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLnRvZ2dsZURyb3Bkb3duID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyKCdxdWVyeScsIHt9KTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXIoJ2Nsb3NlJywgeyBvcmlnaW5hbEV2ZW50IDogZXZ0IH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGFic3RyYWN0IHRoZSBcImVuYWJsZWRcIiAobm90IFwiZGlzYWJsZWRcIikgc3RhdGUgb2YgdGhpc1xuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm4ge3RydWV9IGlmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGlzYWJsZWQuXG4gICAqIEByZXR1cm4ge2ZhbHNlfSBpZiB0aGUgaW5zdGFuY2UgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBTZWxlY3QyLnByb3RvdHlwZS5pc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWQoKTtcbiAgfTtcblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBhYnN0cmFjdCB0aGUgXCJkaXNhYmxlZFwiIHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJuIHt0cnVlfSBpZiB0aGUgZGlzYWJsZWQgb3B0aW9uIGlzIHRydWUuXG4gICAqIEByZXR1cm4ge2ZhbHNlfSBpZiB0aGUgZGlzYWJsZWQgb3B0aW9uIGlzIGZhbHNlLlxuICAgKi9cbiAgU2VsZWN0Mi5wcm90b3R5cGUuaXNEaXNhYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdldCgnZGlzYWJsZWQnKTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdDItY29udGFpbmVyLS1vcGVuJyk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuaGFzRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lclswXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpO1xuICB9O1xuXG4gIFNlbGVjdDIucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAvLyBObyBuZWVkIHRvIHJlLXRyaWdnZXIgZm9jdXMgZXZlbnRzIGlmIHdlIGFyZSBhbHJlYWR5IGZvY3VzZWRcbiAgICBpZiAodGhpcy5oYXNGb2N1cygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4kY29udGFpbmVyWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS1mb2N1cycpO1xuICAgIHRoaXMudHJpZ2dlcignZm9jdXMnLCB7fSk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnZGVidWcnKSAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NlbGVjdDI6IFRoZSBgc2VsZWN0MihcImVuYWJsZVwiKWAgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwnICtcbiAgICAgICAgJyBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiknICtcbiAgICAgICAgJyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt0cnVlXTtcbiAgICB9XG5cbiAgICB2YXIgZGlzYWJsZWQgPSAhYXJnc1swXTtcblxuICAgIHRoaXMuJGVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuZGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmdldCgnZGVidWcnKSAmJlxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NlbGVjdDI6IERhdGEgY2FuIG5vIGxvbmdlciBiZSBzZXQgdXNpbmcgYHNlbGVjdDIoXCJkYXRhXCIpYC4gWW91ICcgK1xuICAgICAgICAnc2hvdWxkIGNvbnNpZGVyIHNldHRpbmcgdGhlIHZhbHVlIGluc3RlYWQgdXNpbmcgYCRlbGVtZW50LnZhbCgpYC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gW107XG5cbiAgICB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24gKGN1cnJlbnREYXRhKSB7XG4gICAgICBkYXRhID0gY3VycmVudERhdGE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBTZWxlY3QyLnByb3RvdHlwZS52YWwgPSBmdW5jdGlvbiAoYXJncykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZ2V0KCdkZWJ1ZycpICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwidmFsXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZScgK1xuICAgICAgICAnIHJlbW92ZWQgaW4gbGF0ZXIgU2VsZWN0MiB2ZXJzaW9ucy4gVXNlICRlbGVtZW50LnZhbCgpIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZWxlbWVudC52YWwoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3VmFsID0gYXJnc1swXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgIG5ld1ZhbCA9IG5ld1ZhbC5tYXAoZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LnZhbChuZXdWYWwpLnRyaWdnZXIoJ2lucHV0JykudHJpZ2dlcignY2hhbmdlJyk7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBVdGlscy5SZW1vdmVEYXRhKHRoaXMuJGNvbnRhaW5lclswXSk7XG4gICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpO1xuXG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcblxuICAgIHRoaXMuX3N5bmNBID0gbnVsbDtcbiAgICB0aGlzLl9zeW5jUyA9IG51bGw7XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnNlbGVjdDInKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JyxcbiAgICBVdGlscy5HZXREYXRhKHRoaXMuJGVsZW1lbnRbMF0sICdvbGQtdGFiaW5kZXgnKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50WzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUnKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgVXRpbHMuUmVtb3ZlRGF0YSh0aGlzLiRlbGVtZW50WzBdKTtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ3NlbGVjdDInKTtcblxuICAgIHRoaXMuZGF0YUFkYXB0ZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uLmRlc3Ryb3koKTtcbiAgICB0aGlzLmRyb3Bkb3duLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJlc3VsdHMuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5kYXRhQWRhcHRlciA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuZHJvcGRvd24gPSBudWxsO1xuICAgIHRoaXMucmVzdWx0cyA9IG51bGw7XG4gIH07XG5cbiAgU2VsZWN0Mi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkY29udGFpbmVyID0gJChcbiAgICAgICc8c3BhbiBjbGFzcz1cInNlbGVjdDIgc2VsZWN0Mi1jb250YWluZXJcIj4nICtcbiAgICAgICAgJzxzcGFuIGNsYXNzPVwic2VsZWN0aW9uXCI+PC9zcGFuPicgK1xuICAgICAgICAnPHNwYW4gY2xhc3M9XCJkcm9wZG93bi13cmFwcGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPicgK1xuICAgICAgJzwvc3Bhbj4nXG4gICAgKTtcblxuICAgICRjb250YWluZXIuYXR0cignZGlyJywgdGhpcy5vcHRpb25zLmdldCgnZGlyJykpO1xuXG4gICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lcjtcblxuICAgIHRoaXMuJGNvbnRhaW5lclswXS5jbGFzc0xpc3RcbiAgICAgIC5hZGQoJ3NlbGVjdDItY29udGFpbmVyLS0nICsgdGhpcy5vcHRpb25zLmdldCgndGhlbWUnKSk7XG5cbiAgICBVdGlscy5TdG9yZURhdGEoJGNvbnRhaW5lclswXSwgJ2VsZW1lbnQnLCB0aGlzLiRlbGVtZW50KTtcblxuICAgIHJldHVybiAkY29udGFpbmVyO1xuICB9O1xuXG4gIHJldHVybiBTZWxlY3QyO1xufSk7XG5cblMyLmRlZmluZSgnanF1ZXJ5LW1vdXNld2hlZWwnLFtcbiAgJ2pxdWVyeSdcbl0sIGZ1bmN0aW9uICgkKSB7XG4gIC8vIFVzZWQgdG8gc2hpbSBqUXVlcnkubW91c2V3aGVlbCBmb3Igbm9uLWZ1bGwgYnVpbGRzLlxuICByZXR1cm4gJDtcbn0pO1xuXG5TMi5kZWZpbmUoJ2pxdWVyeS5zZWxlY3QyJyxbXG4gICdqcXVlcnknLFxuICAnanF1ZXJ5LW1vdXNld2hlZWwnLFxuXG4gICcuL3NlbGVjdDIvY29yZScsXG4gICcuL3NlbGVjdDIvZGVmYXVsdHMnLFxuICAnLi9zZWxlY3QyL3V0aWxzJ1xuXSwgZnVuY3Rpb24gKCQsIF8sIFNlbGVjdDIsIERlZmF1bHRzLCBVdGlscykge1xuICBpZiAoJC5mbi5zZWxlY3QyID09IG51bGwpIHtcbiAgICAvLyBBbGwgbWV0aG9kcyB0aGF0IHNob3VsZCByZXR1cm4gdGhlIGVsZW1lbnRcbiAgICB2YXIgdGhpc01ldGhvZHMgPSBbJ29wZW4nLCAnY2xvc2UnLCAnZGVzdHJveSddO1xuXG4gICAgJC5mbi5zZWxlY3QyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlT3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTtcblxuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBTZWxlY3QyKCQodGhpcyksIGluc3RhbmNlT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHJldDtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gVXRpbHMuR2V0RGF0YSh0aGlzLCAnc2VsZWN0MicpO1xuXG4gICAgICAgICAgaWYgKGluc3RhbmNlID09IG51bGwgJiYgd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ1RoZSBzZWxlY3QyKFxcJycgKyBvcHRpb25zICsgJ1xcJykgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gJyArXG4gICAgICAgICAgICAgICdlbGVtZW50IHRoYXQgaXMgbm90IHVzaW5nIFNlbGVjdDIuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXQgPSBpbnN0YW5jZVtvcHRpb25zXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBiZSByZXR1cm5pbmcgYHRoaXNgXG4gICAgICAgIGlmICh0aGlzTWV0aG9kcy5pbmRleE9mKG9wdGlvbnMpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIGZvciBTZWxlY3QyOiAnICsgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmICgkLmZuLnNlbGVjdDIuZGVmYXVsdHMgPT0gbnVsbCkge1xuICAgICQuZm4uc2VsZWN0Mi5kZWZhdWx0cyA9IERlZmF1bHRzO1xuICB9XG5cbiAgcmV0dXJuIFNlbGVjdDI7XG59KTtcblxuICAvLyBSZXR1cm4gdGhlIEFNRCBsb2FkZXIgY29uZmlndXJhdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCBvdXRzaWRlIG9mIHRoaXMgZmlsZVxuICByZXR1cm4ge1xuICAgIGRlZmluZTogUzIuZGVmaW5lLFxuICAgIHJlcXVpcmU6IFMyLnJlcXVpcmVcbiAgfTtcbn0oKSk7XG5cbiAgLy8gQXV0b2xvYWQgdGhlIGpRdWVyeSBiaW5kaW5nc1xuICAvLyBXZSBrbm93IHRoYXQgYWxsIG9mIHRoZSBtb2R1bGVzIGV4aXN0IGFib3ZlIHRoaXMsIHNvIHdlJ3JlIHNhZmVcbiAgdmFyIHNlbGVjdDIgPSBTMi5yZXF1aXJlKCdqcXVlcnkuc2VsZWN0MicpO1xuXG4gIC8vIEhvbGQgdGhlIEFNRCBtb2R1bGUgcmVmZXJlbmNlcyBvbiB0aGUgalF1ZXJ5IGZ1bmN0aW9uIHRoYXQgd2FzIGp1c3QgbG9hZGVkXG4gIC8vIFRoaXMgYWxsb3dzIFNlbGVjdDIgdG8gdXNlIHRoZSBpbnRlcm5hbCBsb2FkZXIgb3V0c2lkZSBvZiB0aGlzIGZpbGUsIHN1Y2hcbiAgLy8gYXMgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLlxuICBqUXVlcnkuZm4uc2VsZWN0Mi5hbWQgPSBTMjtcblxuICAvLyBSZXR1cm4gdGhlIFNlbGVjdDIgaW5zdGFuY2UgZm9yIGFueW9uZSB3aG8gaXMgaW1wb3J0aW5nIGl0LlxuICByZXR1cm4gc2VsZWN0Mjtcbn0pKTtcbiIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMC51c2VbMV0hLi4vLi4vLi4vdnVlLWxvYWRlci9kaXN0L3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC0xMC51c2VbMl0hLi9kZWZhdWx0LmNzcz92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9Y3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc09sZElFID0gZnVuY3Rpb24gaXNPbGRJRSgpIHtcbiAgdmFyIG1lbW87XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSgpIHtcbiAgICBpZiAodHlwZW9mIG1lbW8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuICAgICAgLy8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuICAgICAgLy8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuICAgICAgLy8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcbiAgICAgIG1lbW8gPSBCb29sZWFuKHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn0oKTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uIGdldFRhcmdldCgpIHtcbiAgdmFyIG1lbW8gPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKHRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb1t0YXJnZXRdO1xuICB9O1xufSgpO1xuXG52YXIgc3R5bGVzSW5Eb20gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRvbS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRvbVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdXG4gICAgfTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXNJbkRvbS5wdXNoKHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogYWRkU3R5bGUob2JqLCBvcHRpb25zKSxcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXMgfHwge307XG5cbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLm5vbmNlID09PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gJ3VuZGVmaW5lZCcgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgICBpZiAobm9uY2UpIHtcbiAgICAgIGF0dHJpYnV0ZXMubm9uY2UgPSBub25jZTtcbiAgICB9XG4gIH1cblxuICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pO1xuICB9KTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0aW9ucy5pbnNlcnQoc3R5bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQob3B0aW9ucy5pbnNlcnQgfHwgJ2hlYWQnKTtcblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICAgIH1cblxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlLnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbnZhciByZXBsYWNlVGV4dCA9IGZ1bmN0aW9uIHJlcGxhY2VUZXh0KCkge1xuICB2YXIgdGV4dFN0b3JlID0gW107XG4gIHJldHVybiBmdW5jdGlvbiByZXBsYWNlKGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgIHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcbiAgfTtcbn0oKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyhzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5tZWRpYSA/IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIikuY29uY2F0KG9iai5jc3MsIFwifVwiKSA6IG9iai5jc3M7IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyhzdHlsZSwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzO1xuICB2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdtZWRpYScpO1xuICB9XG5cbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xuXG5mdW5jdGlvbiBhZGRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlO1xuICB2YXIgdXBkYXRlO1xuICB2YXIgcmVtb3ZlO1xuXG4gIGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuICAgIHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUgPSBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZShvYmopO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307IC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuICAvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cbiAgaWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09ICdib29sZWFuJykge1xuICAgIG9wdGlvbnMuc2luZ2xldG9uID0gaXNPbGRJRSgpO1xuICB9XG5cbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdMaXN0KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRvbVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5Eb21bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5Eb20uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJpbXBvcnQgeyBjb21wdXRlZCwgb3BlbkJsb2NrLCBjcmVhdGVCbG9jaywgbWVyZ2VQcm9wcyB9IGZyb20gJ3Z1ZSc7XG5cbnZhciBzY3JpcHQgPSB7XG4gIG5hbWU6ICdTdmdWdWUnLFxuICBwcm9wczoge1xuICAgIGljb246IFN0cmluZ1xuICB9LFxuXG4gIHNldHVwKHByb3BzKSB7XG4gICAgY29uc3QgaWNvblBhdGggPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5pY29uLnJlcGxhY2UobmV3IFJlZ0V4cCgnLicucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyksICdnJyksICcvJykgKyAnLnN2ZycpO1xuICAgIGNvbnN0IHN2Z1N0cmluZyA9IGNvbXB1dGVkKCgpID0+IHJlcXVpcmUoYHN2Zy1maWxlcy1wYXRoLyR7aWNvblBhdGgudmFsdWV9YCkuZGVmYXVsdCk7XG4gICAgY29uc3Qgc3ZnQXR0cmlidXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGlmICghc3ZnU3RyaW5nKSByZXR1cm4ge307XG4gICAgICBsZXQgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgd3JhcHBlci5pbm5lckhUTUwgPSBzdmdTdHJpbmcudmFsdWU7XG4gICAgICBsZXQgYXR0cmlidXRlc0xpc3QgPSB3cmFwcGVyLmZpcnN0RWxlbWVudENoaWxkLmF0dHJpYnV0ZXM7XG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlc0xpc3QpLm1hcChpID0+IGF0dHJpYnV0ZXNbYXR0cmlidXRlc0xpc3RbaV0ubmFtZV0gPSBhdHRyaWJ1dGVzTGlzdFtpXS52YWx1ZSk7XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9KTtcbiAgICBjb25zdCBzdmdDb250ZW50ID0gY29tcHV0ZWQoKCkgPT4gc3ZnU3RyaW5nID8gc3ZnU3RyaW5nLnZhbHVlLnJlcGxhY2UoL148c3ZnW14+XSo+fDxcXC9zdmc+JC9nLCAnJykgOiBudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3ZnQXR0cmlidXRlcyxcbiAgICAgIHN2Z0NvbnRlbnRcbiAgICB9O1xuICB9XG5cbn07XG5cbmZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayhcInN2Z1wiLCBtZXJnZVByb3BzKCRzZXR1cC5zdmdBdHRyaWJ1dGVzLCB7XG4gICAgaW5uZXJIVE1MOiAkc2V0dXAuc3ZnQ29udGVudFxuICB9KSwgbnVsbCwgMTYsIFtcImlubmVySFRNTFwiXSk7XG59XG5cbnNjcmlwdC5yZW5kZXIgPSByZW5kZXI7XG5cbi8vIEltcG9ydCB2dWUgY29tcG9uZW50XG4vLyBJSUZFIGluamVjdHMgaW5zdGFsbCBmdW5jdGlvbiBpbnRvIGNvbXBvbmVudCwgYWxsb3dpbmcgY29tcG9uZW50XG4vLyB0byBiZSByZWdpc3RlcmVkIHZpYSBWdWUudXNlKCkgYXMgd2VsbCBhcyBWdWUuY29tcG9uZW50KCksXG5cbnZhciBlbnRyeV9lc20gPSAvKiNfX1BVUkVfXyovKCgpID0+IHtcbiAgLy8gR2V0IGNvbXBvbmVudCBpbnN0YW5jZVxuICBjb25zdCBpbnN0YWxsYWJsZSA9IHNjcmlwdDsgLy8gQXR0YWNoIGluc3RhbGwgZnVuY3Rpb24gZXhlY3V0ZWQgYnkgVnVlLnVzZSgpXG5cbiAgaW5zdGFsbGFibGUuaW5zdGFsbCA9IGFwcCA9PiB7XG4gICAgYXBwLmNvbXBvbmVudCgnU3ZnVnVlJywgaW5zdGFsbGFibGUpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YWxsYWJsZTtcbn0pKCk7IC8vIEl0J3MgcG9zc2libGUgdG8gZXhwb3NlIG5hbWVkIGV4cG9ydHMgd2hlbiB3cml0aW5nIGNvbXBvbmVudHMgdGhhdCBjYW5cbi8vIGFsc28gYmUgdXNlZCBhcyBkaXJlY3RpdmVzLCBldGMuIC0gZWcuIGltcG9ydCB7IFJvbGx1cERlbW9EaXJlY3RpdmUgfSBmcm9tICdyb2xsdXAtZGVtbyc7XG4vLyBleHBvcnQgY29uc3QgUm9sbHVwRGVtb0RpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblxuZXhwb3J0IGRlZmF1bHQgZW50cnlfZXNtO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBydW50aW1lIGhlbHBlciBmb3Igc2V0dGluZyBwcm9wZXJ0aWVzIG9uIGNvbXBvbmVudHNcbi8vIGluIGEgdHJlZS1zaGFrYWJsZSB3YXlcbmV4cG9ydHMuZGVmYXVsdCA9IChzZmMsIHByb3BzKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2ZjLl9fdmNjT3B0cyB8fCBzZmM7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHByb3BzKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsImltcG9ydCAqIGFzIHJ1bnRpbWVEb20gZnJvbSAnQHZ1ZS9ydW50aW1lLWRvbSc7XG5pbXBvcnQgeyBpbml0Q3VzdG9tRm9ybWF0dGVyLCB3YXJuLCByZWdpc3RlclJ1bnRpbWVDb21waWxlciB9IGZyb20gJ0B2dWUvcnVudGltZS1kb20nO1xuZXhwb3J0ICogZnJvbSAnQHZ1ZS9ydW50aW1lLWRvbSc7XG5pbXBvcnQgeyBjb21waWxlIH0gZnJvbSAnQHZ1ZS9jb21waWxlci1kb20nO1xuaW1wb3J0IHsgaXNTdHJpbmcsIE5PT1AsIGV4dGVuZCwgZ2VuZXJhdGVDb2RlRnJhbWUgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmZ1bmN0aW9uIGluaXREZXYoKSB7XHJcbiAgICB7XHJcbiAgICAgICAgaW5pdEN1c3RvbUZvcm1hdHRlcigpO1xyXG4gICAgfVxyXG59XG5cbi8vIFRoaXMgZW50cnkgaXMgdGhlIFwiZnVsbC1idWlsZFwiIHRoYXQgaW5jbHVkZXMgYm90aCB0aGUgcnVudGltZVxyXG5pZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XHJcbiAgICBpbml0RGV2KCk7XHJcbn1cclxuY29uc3QgY29tcGlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb24odGVtcGxhdGUsIG9wdGlvbnMpIHtcclxuICAgIGlmICghaXNTdHJpbmcodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgaWYgKHRlbXBsYXRlLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIHdhcm4oYGludmFsaWQgdGVtcGxhdGUgb3B0aW9uOiBgLCB0ZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBOT09QO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGtleSA9IHRlbXBsYXRlO1xyXG4gICAgY29uc3QgY2FjaGVkID0gY29tcGlsZUNhY2hlW2tleV07XHJcbiAgICBpZiAoY2FjaGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgIH1cclxuICAgIGlmICh0ZW1wbGF0ZVswXSA9PT0gJyMnKSB7XHJcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRlbXBsYXRlKTtcclxuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFlbCkge1xyXG4gICAgICAgICAgICB3YXJuKGBUZW1wbGF0ZSBlbGVtZW50IG5vdCBmb3VuZCBvciBpcyBlbXB0eTogJHt0ZW1wbGF0ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gX19VTlNBRkVfX1xyXG4gICAgICAgIC8vIFJlYXNvbjogcG90ZW50aWFsIGV4ZWN1dGlvbiBvZiBKUyBleHByZXNzaW9ucyBpbiBpbi1ET00gdGVtcGxhdGUuXHJcbiAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBtYWtlIHN1cmUgdGhlIGluLURPTSB0ZW1wbGF0ZSBpcyB0cnVzdGVkLiBJZiBpdCdzIHJlbmRlcmVkXHJcbiAgICAgICAgLy8gYnkgdGhlIHNlcnZlciwgdGhlIHRlbXBsYXRlIHNob3VsZCBub3QgY29udGFpbiBhbnkgdXNlciBkYXRhLlxyXG4gICAgICAgIHRlbXBsYXRlID0gZWwgPyBlbC5pbm5lckhUTUwgOiBgYDtcclxuICAgIH1cclxuICAgIGNvbnN0IG9wdHMgPSBleHRlbmQoe1xyXG4gICAgICAgIGhvaXN0U3RhdGljOiB0cnVlLFxyXG4gICAgICAgIG9uRXJyb3I6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSA/IG9uRXJyb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgb25XYXJuOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBlID0+IG9uRXJyb3IoZSwgdHJ1ZSkgOiBOT09QXHJcbiAgICB9LCBvcHRpb25zKTtcclxuICAgIGlmICghb3B0cy5pc0N1c3RvbUVsZW1lbnQgJiYgdHlwZW9mIGN1c3RvbUVsZW1lbnRzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIG9wdHMuaXNDdXN0b21FbGVtZW50ID0gdGFnID0+ICEhY3VzdG9tRWxlbWVudHMuZ2V0KHRhZyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdHMpO1xyXG4gICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGFzV2FybmluZyA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFzV2FybmluZ1xyXG4gICAgICAgICAgICA/IGVyci5tZXNzYWdlXHJcbiAgICAgICAgICAgIDogYFRlbXBsYXRlIGNvbXBpbGF0aW9uIGVycm9yOiAke2Vyci5tZXNzYWdlfWA7XHJcbiAgICAgICAgY29uc3QgY29kZUZyYW1lID0gZXJyLmxvYyAmJlxyXG4gICAgICAgICAgICBnZW5lcmF0ZUNvZGVGcmFtZSh0ZW1wbGF0ZSwgZXJyLmxvYy5zdGFydC5vZmZzZXQsIGVyci5sb2MuZW5kLm9mZnNldCk7XHJcbiAgICAgICAgd2Fybihjb2RlRnJhbWUgPyBgJHttZXNzYWdlfVxcbiR7Y29kZUZyYW1lfWAgOiBtZXNzYWdlKTtcclxuICAgIH1cclxuICAgIC8vIFRoZSB3aWxkY2FyZCBpbXBvcnQgcmVzdWx0cyBpbiBhIGh1Z2Ugb2JqZWN0IHdpdGggZXZlcnkgZXhwb3J0XHJcbiAgICAvLyB3aXRoIGtleXMgdGhhdCBjYW5ub3QgYmUgbWFuZ2xlZCwgYW5kIGNhbiBiZSBxdWl0ZSBoZWF2eSBzaXplLXdpc2UuXHJcbiAgICAvLyBJbiB0aGUgZ2xvYmFsIGJ1aWxkIHdlIGtub3cgYFZ1ZWAgaXMgYXZhaWxhYmxlIGdsb2JhbGx5IHNvIHdlIGNhbiBhdm9pZFxyXG4gICAgLy8gdGhlIHdpbGRjYXJkIG9iamVjdC5cclxuICAgIGNvbnN0IHJlbmRlciA9IChuZXcgRnVuY3Rpb24oJ1Z1ZScsIGNvZGUpKHJ1bnRpbWVEb20pKTtcclxuICAgIHJlbmRlci5fcmMgPSB0cnVlO1xyXG4gICAgcmV0dXJuIChjb21waWxlQ2FjaGVba2V5XSA9IHJlbmRlcik7XHJcbn1cclxucmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIoY29tcGlsZVRvRnVuY3Rpb24pO1xuXG5leHBvcnQgeyBjb21waWxlVG9GdW5jdGlvbiBhcyBjb21waWxlIH07XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlYWN0aXZlLCByZWYsIGNvbXB1dGVkLCB3YXRjaCwgb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2ssIG5vcm1hbGl6ZVN0eWxlLCBjcmVhdGVFbGVtZW50Vk5vZGUsIHJlbmRlclNsb3QgfSBmcm9tICd2dWUnO1xuXG5mdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMik7XG59XG5cbnZhciBzY3JpcHQgPSBkZWZpbmVDb21wb25lbnQoe1xuICBwcm9wczoge1xuICAgIC8vIFNldHMgd2lkdGgvZGlhbWV0ZXIgb2YgdGhlIGlubmVyIHN0cm9rZS5cbiAgICBkaWFtZXRlcjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMjAwXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSB0b3RhbCBzdGVwcy9wcm9ncmVzcyB0byB0aGUgZW5kLlxuICAgIHRvdGFsU3RlcHM6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZGVmYXVsdDogMTBcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGlubmVyIHN0cm9rZS5cbiAgICBjb21wbGV0ZWRTdGVwczoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSBzdGFydCBjb2xvciBvZiB0aGUgaW5uZXIgc3Ryb2tlIChncmFkaWVudCkuXG4gICAgc3RhcnRDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogXCIjMDBDNThFXCJcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIGVuZCBjb2xvciBvZiB0aGUgaW5uZXIgc3Ryb2tlIChncmFkaWVudCkuXG4gICAgc3RvcENvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBcIiMwMEUwQTFcIlxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgY29sb3Igb2YgdGhlIGlubmVyIHN0cm9rZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzaGFwZS5cbiAgICBpbm5lclN0cm9rZUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBcIiMyRjQ5NUVcIlxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgd2lkdGggb2YgdGhlIHN0cm9rZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzaGFwZS5cbiAgICAvLyBSZWFkIG1vcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLXdpZHRoXG4gICAgc3Ryb2tlV2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDEwXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSAgd2lkdGggb2YgdGhlIGlubmVyIHN0cm9rZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzaGFwZS5cbiAgICBpbm5lclN0cm9rZVdpZHRoOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAxMFxuICAgIH0sXG4gICAgLy8gU2V0cyB0aGUgc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgZW5kIG9mIHN0cm9rZWQuXG4gICAgLy8gUmVhZCBtb3JlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3N0cm9rZS1saW5lY2FwXG4gICAgc3Ryb2tlTGluZWNhcDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogXCJyb3VuZFwiXG4gICAgfSxcbiAgICAvLyBTZXRzIGhvdyBsb25nIHRoZSBhbmltYXRpb24gc2hvdWxkIHRha2UgdG8gY29tcGxldGUgb25lIGN5Y2xlLlxuICAgIC8vIFJlYWQgbW9yZTogaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9jc3NyZWYvY3NzM19wcl9hbmltYXRpb24tZHVyYXRpb24uYXNwXG4gICAgYW5pbWF0ZVNwZWVkOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAxMDAwXG4gICAgfSxcbiAgICAvLyBTZXRzIHRoZSBmcmFtZXMgcGVyIHNlY29uZHMgdG8gdXBkYXRlIGlubmVyIHN0cm9rZSBhbmltYXRpb24uXG4gICAgZnBzOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiA2MFxuICAgIH0sXG4gICAgLy8gU2V0cyBob3cgdGhlIGFuaW1hdGlvbiBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIGR1cmF0aW9uIG9mIGVhY2ggY3ljbGUuXG4gICAgLy8gUmVhZCBtb3JlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvblxuICAgIHRpbWluZ0Z1bmM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IFwibGluZWFyXCJcbiAgICB9LFxuICAgIC8vIFNldHMgdGhlIGlubmVyIHN0cm9rZSBkaXJlY3Rpb24uXG4gICAgaXNDbG9ja3dpc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIHNldHVwKHByb3BzKSB7XG4gICAgY29uc3QgZ3JhZGllbnQgPSByZWFjdGl2ZSh7XG4gICAgICBmeDogMC45OSxcbiAgICAgIGZ5OiAwLjUsXG4gICAgICBjeDogMC41LFxuICAgICAgY3k6IDAuNSxcbiAgICAgIHI6IDAuNjVcbiAgICB9KTtcbiAgICBjb25zdCByYWRpYWxHcmFkaWVudElkID0gYHJnLSR7cmFuZG9tU3RyaW5nKCl9YDtcbiAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0ID0gcmVmKDApO1xuICAgIGNvbnN0IGN1cnJlbnRBbmdsZSA9IHJlZigwKTtcbiAgICBjb25zdCBncmFkaWVudEFuaW1hdGlvbiA9IHJlZihudWxsKTtcbiAgICBjb25zdCByYWRpdXMgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5kaWFtZXRlciAvIDIpO1xuICAgIGNvbnN0IGlubmVyQ2lyY2xlRGlhbWV0ZXIgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5kaWFtZXRlciAtIHByb3BzLmlubmVyU3Ryb2tlV2lkdGggKiAyKTtcbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gY29tcHV0ZWQoKCkgPT4gTWF0aC5QSSAqIGlubmVyQ2lyY2xlRGlhbWV0ZXIudmFsdWUpO1xuICAgIGNvbnN0IHN0ZXBTaXplID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMudG90YWxTdGVwcyA9PT0gMCA/IDAgOiAxMDAgLyBwcm9wcy50b3RhbFN0ZXBzKTtcbiAgICBjb25zdCBmaW5pc2hlZFBlcmNlbnRhZ2UgPSBjb21wdXRlZCgoKSA9PiBzdGVwU2l6ZS52YWx1ZSAqIHByb3BzLmNvbXBsZXRlZFN0ZXBzKTtcbiAgICBjb25zdCBjaXJjbGVTbGljZSA9IGNvbXB1dGVkKCgpID0+IDIgKiBNYXRoLlBJIC8gcHJvcHMudG90YWxTdGVwcyk7XG4gICAgY29uc3QgYW5pbWF0aW9uSW5jcmVtZW50cyA9IGNvbXB1dGVkKCgpID0+IDEwMCAvIHByb3BzLmZwcyk7XG4gICAgY29uc3QgdG90YWxQb2ludHMgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5hbmltYXRlU3BlZWQgLyBhbmltYXRpb25JbmNyZW1lbnRzLnZhbHVlKTtcbiAgICBjb25zdCBhbmltYXRlU2xpY2UgPSBjb21wdXRlZCgoKSA9PiBjaXJjbGVTbGljZS52YWx1ZSAvIHRvdGFsUG9pbnRzLnZhbHVlKTtcbiAgICBjb25zdCBpbm5lckNpcmNsZVJhZGl1cyA9IGNvbXB1dGVkKCgpID0+IGlubmVyQ2lyY2xlRGlhbWV0ZXIudmFsdWUgLyAyKTtcbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICBoZWlnaHQ6IGAke3Byb3BzLmRpYW1ldGVyfXB4YCxcbiAgICAgIHdpZHRoOiBgJHtwcm9wcy5kaWFtZXRlcn1weGBcbiAgICB9KSk7XG4gICAgY29uc3QgcHJvZ3Jlc3NTdHlsZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICBoZWlnaHQ6IGAke3Byb3BzLmRpYW1ldGVyfXB4YCxcbiAgICAgIHdpZHRoOiBgJHtwcm9wcy5kaWFtZXRlcn1weGAsXG4gICAgICBzdHJva2VXaWR0aDogYCR7cHJvcHMuc3Ryb2tlV2lkdGh9cHhgLFxuICAgICAgc3Ryb2tlRGFzaG9mZnNldDogc3Ryb2tlRGFzaG9mZnNldC52YWx1ZSxcbiAgICAgIHRyYW5zaXRpb246IGBzdHJva2UtZGFzaG9mZnNldCAke3Byb3BzLmFuaW1hdGVTcGVlZH1tcyAke3Byb3BzLnRpbWluZ0Z1bmN9YFxuICAgIH0pKTtcbiAgICBjb25zdCBzdHJva2VTdHlsZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICBoZWlnaHQ6IGAke3Byb3BzLmRpYW1ldGVyfXB4YCxcbiAgICAgIHdpZHRoOiBgJHtwcm9wcy5kaWFtZXRlcn1weGAsXG4gICAgICBzdHJva2VXaWR0aDogYCR7cHJvcHMuaW5uZXJTdHJva2VXaWR0aH1weGBcbiAgICB9KSk7XG4gICAgY29uc3QgaW5uZXJDaXJjbGVTdHlsZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICB3aWR0aDogYCR7aW5uZXJDaXJjbGVEaWFtZXRlci52YWx1ZX1weGBcbiAgICB9KSk7XG4gICAgd2F0Y2goKCkgPT4gW3Byb3BzLmRpYW1ldGVyLCBwcm9wcy50b3RhbFN0ZXBzLCBwcm9wcy5jb21wbGV0ZWRTdGVwcywgcHJvcHMuc3Ryb2tlV2lkdGhdLCBjaGFuZ2VQcm9ncmVzcywge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRQb2ludE9mQ2lyY2xlKGFuZ2xlKSB7XG4gICAgICBjb25zdCByYWRpdXMgPSAwLjU7XG4gICAgICBjb25zdCB4ID0gcmFkaXVzICsgcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgY29uc3QgeSA9IHJhZGl1cyArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ290b1BvaW50KCkge1xuICAgICAgY29uc3QgcG9pbnQgPSBnZXRQb2ludE9mQ2lyY2xlKGN1cnJlbnRBbmdsZS52YWx1ZSk7XG5cbiAgICAgIGlmIChwb2ludC54ICYmIHBvaW50LnkpIHtcbiAgICAgICAgZ3JhZGllbnQuZnggPSBwb2ludC54O1xuICAgICAgICBncmFkaWVudC5meSA9IHBvaW50Lnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlyZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIHByb3BzLmlzQ2xvY2t3aXNlID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoYW5nZVByb2dyZXNzKCkge1xuICAgICAgc3Ryb2tlRGFzaG9mZnNldC52YWx1ZSA9ICgxMDAgLSBmaW5pc2hlZFBlcmNlbnRhZ2UudmFsdWUpIC8gMTAwICogY2lyY3VtZmVyZW5jZS52YWx1ZSAqIGRpcmVjdGlvbigpO1xuXG4gICAgICBpZiAoZ3JhZGllbnRBbmltYXRpb24udmFsdWUpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChncmFkaWVudEFuaW1hdGlvbi52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFuZ2xlT2Zmc2V0ID0gKHByb3BzLmNvbXBsZXRlZFN0ZXBzIC0gMSkgKiBjaXJjbGVTbGljZS52YWx1ZTtcbiAgICAgIGxldCBpID0gKGN1cnJlbnRBbmdsZS52YWx1ZSAtIGFuZ2xlT2Zmc2V0KSAvIGFuaW1hdGVTbGljZS52YWx1ZTtcbiAgICAgIGNvbnN0IGluY3JlbWVudGVyID0gTWF0aC5hYnMoaSAtIHRvdGFsUG9pbnRzLnZhbHVlKSAvIHRvdGFsUG9pbnRzLnZhbHVlO1xuICAgICAgY29uc3QgaXNNb3ZlRm9yd2FyZCA9IGkgPCB0b3RhbFBvaW50cy52YWx1ZTtcbiAgICAgIGdyYWRpZW50QW5pbWF0aW9uLnZhbHVlID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoaXNNb3ZlRm9yd2FyZCAmJiBpID49IHRvdGFsUG9pbnRzLnZhbHVlIHx8ICFpc01vdmVGb3J3YXJkICYmIGkgPCB0b3RhbFBvaW50cy52YWx1ZSkge1xuICAgICAgICAgIGdyYWRpZW50QW5pbWF0aW9uLnZhbHVlICYmIGNsZWFySW50ZXJ2YWwoZ3JhZGllbnRBbmltYXRpb24udmFsdWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRBbmdsZS52YWx1ZSA9IGFuZ2xlT2Zmc2V0ICsgYW5pbWF0ZVNsaWNlLnZhbHVlICogaTtcbiAgICAgICAgZ290b1BvaW50KCk7XG4gICAgICAgIGkgKz0gaXNNb3ZlRm9yd2FyZCA/IGluY3JlbWVudGVyIDogLWluY3JlbWVudGVyO1xuICAgICAgfSwgYW5pbWF0aW9uSW5jcmVtZW50cy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdyYWRpZW50QW5pbWF0aW9uLFxuICAgICAgaW5uZXJDaXJjbGVSYWRpdXMsXG4gICAgICByYWRpYWxHcmFkaWVudElkLFxuICAgICAgc3Ryb2tlRGFzaG9mZnNldCxcbiAgICAgIGlubmVyQ2lyY2xlU3R5bGUsXG4gICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgICBwcm9ncmVzc1N0eWxlLFxuICAgICAgY3VycmVudEFuZ2xlLFxuICAgICAgc3Ryb2tlU3R5bGUsXG4gICAgICBncmFkaWVudCxcbiAgICAgIHJhZGl1c1xuICAgIH07XG4gIH1cblxufSk7XG5cbmNvbnN0IF9ob2lzdGVkXzEgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXTtcbmNvbnN0IF9ob2lzdGVkXzIgPSBbXCJpZFwiLCBcImZ4XCIsIFwiZnlcIiwgXCJjeFwiLCBcImN5XCIsIFwiclwiXTtcbmNvbnN0IF9ob2lzdGVkXzMgPSBbXCJzdG9wLWNvbG9yXCJdO1xuY29uc3QgX2hvaXN0ZWRfNCA9IFtcInN0b3AtY29sb3JcIl07XG5jb25zdCBfaG9pc3RlZF81ID0gW1wiclwiLCBcImN4XCIsIFwiY3lcIiwgXCJzdHJva2VcIiwgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWxpbmVjYXBcIl07XG5jb25zdCBfaG9pc3RlZF82ID0gW1widHJhbnNmb3JtXCIsIFwiclwiLCBcImN4XCIsIFwiY3lcIiwgXCJzdHJva2VcIiwgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgXCJzdHJva2UtbGluZWNhcFwiXTtcbmZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcInZycF9fd3JhcHBlclwiLFxuICAgIHN0eWxlOiBub3JtYWxpemVTdHlsZShfY3R4LmNvbnRhaW5lclN0eWxlKVxuICB9LCBbY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJ2cnBfX2lubmVyXCIsXG4gICAgc3R5bGU6IG5vcm1hbGl6ZVN0eWxlKF9jdHguaW5uZXJDaXJjbGVTdHlsZSlcbiAgfSwgW3JlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiZGVmYXVsdFwiKV0sIDQpLCAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCB7XG4gICAgd2lkdGg6IF9jdHguZGlhbWV0ZXIsXG4gICAgaGVpZ2h0OiBfY3R4LmRpYW1ldGVyLFxuICAgIHZlcnNpb246IFwiMS4xXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICB9LCBbY3JlYXRlRWxlbWVudFZOb2RlKFwiZGVmc1wiLCBudWxsLCBbY3JlYXRlRWxlbWVudFZOb2RlKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBfY3R4LnJhZGlhbEdyYWRpZW50SWQsXG4gICAgZng6IF9jdHguZ3JhZGllbnQuZngsXG4gICAgZnk6IF9jdHguZ3JhZGllbnQuZnksXG4gICAgY3g6IF9jdHguZ3JhZGllbnQuY3gsXG4gICAgY3k6IF9jdHguZ3JhZGllbnQuY3ksXG4gICAgcjogX2N0eC5ncmFkaWVudC5yXG4gIH0sIFtjcmVhdGVFbGVtZW50Vk5vZGUoXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAlXCIsXG4gICAgXCJzdG9wLWNvbG9yXCI6IF9jdHguc3RhcnRDb2xvclxuICB9LCBudWxsLCA4LCBfaG9pc3RlZF8zKSwgY3JlYXRlRWxlbWVudFZOb2RlKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBcInN0b3AtY29sb3JcIjogX2N0eC5zdG9wQ29sb3JcbiAgfSwgbnVsbCwgOCwgX2hvaXN0ZWRfNCldLCA4LCBfaG9pc3RlZF8yKV0pLCBjcmVhdGVFbGVtZW50Vk5vZGUoXCJjaXJjbGVcIiwge1xuICAgIHI6IF9jdHguaW5uZXJDaXJjbGVSYWRpdXMsXG4gICAgY3g6IF9jdHgucmFkaXVzLFxuICAgIGN5OiBfY3R4LnJhZGl1cyxcbiAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXG4gICAgc3Ryb2tlOiBfY3R4LmlubmVyU3Ryb2tlQ29sb3IsXG4gICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IF9jdHguY2lyY3VtZmVyZW5jZSxcbiAgICBcInN0cm9rZS1kYXNob2Zmc2V0XCI6IFwiMFwiLFxuICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogX2N0eC5zdHJva2VMaW5lY2FwLFxuICAgIHN0eWxlOiBub3JtYWxpemVTdHlsZShfY3R4LnN0cm9rZVN0eWxlKVxuICB9LCBudWxsLCAxMiwgX2hvaXN0ZWRfNSksIGNyZWF0ZUVsZW1lbnRWTm9kZShcImNpcmNsZVwiLCB7XG4gICAgdHJhbnNmb3JtOiAncm90YXRlKDI3MCwgJyArIF9jdHgucmFkaXVzICsgJywnICsgX2N0eC5yYWRpdXMgKyAnKScsXG4gICAgcjogX2N0eC5pbm5lckNpcmNsZVJhZGl1cyxcbiAgICBjeDogX2N0eC5yYWRpdXMsXG4gICAgY3k6IF9jdHgucmFkaXVzLFxuICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcbiAgICBzdHJva2U6IGB1cmwoJyMke19jdHgucmFkaWFsR3JhZGllbnRJZH0nKWAsXG4gICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IF9jdHguY2lyY3VtZmVyZW5jZSxcbiAgICBcInN0cm9rZS1kYXNob2Zmc2V0XCI6IF9jdHguY2lyY3VtZmVyZW5jZSxcbiAgICBcInN0cm9rZS1saW5lY2FwXCI6IF9jdHguc3Ryb2tlTGluZWNhcCxcbiAgICBzdHlsZTogbm9ybWFsaXplU3R5bGUoX2N0eC5wcm9ncmVzc1N0eWxlKVxuICB9LCBudWxsLCAxMiwgX2hvaXN0ZWRfNildLCA4LCBfaG9pc3RlZF8xKSldLCA0KTtcbn1cblxuZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgY3NzXzI0OHogPSBcIlxcbi52cnBfX3dyYXBwZXJbZGF0YS12LTZhMGNmMWY2XSB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi52cnBfX2lubmVyW2RhdGEtdi02YTBjZjFmNl0ge1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgdG9wOiAwO1xcclxcbiAgcmlnaHQ6IDA7XFxyXFxuICBib3R0b206IDA7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgbWFyZ2luOiAwIGF1dG87XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxyXFxuXCI7XG5zdHlsZUluamVjdChjc3NfMjQ4eik7XG5cbnNjcmlwdC5yZW5kZXIgPSByZW5kZXI7XG5zY3JpcHQuX19zY29wZUlkID0gXCJkYXRhLXYtNmEwY2YxZjZcIjtcblxuLy8gSUlGRSBpbmplY3RzIGluc3RhbGwgZnVuY3Rpb24gaW50byBjb21wb25lbnQsIGFsbG93aW5nIGNvbXBvbmVudFxuLy8gdG8gYmUgcmVnaXN0ZXJlZCB2aWEgVnVlLnVzZSgpIGFzIHdlbGwgYXMgVnVlLmNvbXBvbmVudCgpLFxuXG52YXIgZW50cnlfZXNtID0gLyojX19QVVJFX18qLygoKSA9PiB7XG4gIC8vIEFzc2lnbiBJbnN0YWxsYWJsZUNvbXBvbmVudCB0eXBlXG4gIGNvbnN0IGluc3RhbGxhYmxlID0gc2NyaXB0OyAvLyBBdHRhY2ggaW5zdGFsbCBmdW5jdGlvbiBleGVjdXRlZCBieSBWdWUudXNlKClcblxuICBpbnN0YWxsYWJsZS5pbnN0YWxsID0gYXBwID0+IHtcbiAgICBhcHAuY29tcG9uZW50KFwiUmFkaWFsUHJvZ3Jlc3NCYXJcIiwgaW5zdGFsbGFibGUpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YWxsYWJsZTtcbn0pKCk7IC8vIEl0J3MgcG9zc2libGUgdG8gZXhwb3NlIG5hbWVkIGV4cG9ydHMgd2hlbiB3cml0aW5nIGNvbXBvbmVudHMgdGhhdCBjYW5cbi8vIGFsc28gYmUgdXNlZCBhcyBkaXJlY3RpdmVzLCBldGMuIC0gZWcuIGltcG9ydCB7IFJvbGx1cERlbW9EaXJlY3RpdmUgfSBmcm9tICdyb2xsdXAtZGVtbyc7XG4vLyBleHBvcnQgY29uc3QgUm9sbHVwRGVtb0RpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblxuZXhwb3J0IHsgZW50cnlfZXNtIGFzIGRlZmF1bHQgfTtcbiIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuVnVlU21vb3RoU2Nyb2xsPXQoKTplLlZ1ZVNtb290aFNjcm9sbD10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4obyl7aWYodFtvXSlyZXR1cm4gdFtvXS5leHBvcnRzO3ZhciByPXRbb109e2k6byxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW29dLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLG4pLHIubD0hMCxyLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQsbyl7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om99KX0sbi5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobyxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIHIgaW4gZSluLmQobyxyLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwscikpO3JldHVybiBvfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LFwiYVwiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPVwiXCIsbihuLnM9MCl9KFtmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gcihlKXtyZXR1cm4ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9dmFyIGk7bi5yKHQpO3ZhciB1PWZ1bmN0aW9uKGUpe3JldHVybiBlPC41PzQqZSplKmU6KGUtMSkqKDIqZS0yKSooMiplLTIpKzF9LGM9ZnVuY3Rpb24oKXtyZXR1cm57ZHVyYXRpb246NTAwLG9mZnNldDowLGNvbnRhaW5lcjp3aW5kb3csdXBkYXRlSGlzdG9yeTohMCxlYXNpbmdGdW5jdGlvbjpudWxsfX0sbD1TeW1ib2woXCJzbW9vdGhTY3JvbGxDdHhcIiksZj1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvLG49ZS5vZmZzZXQsbz1lLmR1cmF0aW9uLHI9ZS5jb250YWluZXIsYz1lLnVwZGF0ZUhpc3RvcnksbD1lLmhhc2gsZj1lLmVhc2luZ0Z1bmN0aW9uO2l8fChpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dChlLDE2KX0pLGMmJndpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSYmbG9jYXRpb24uaGFzaCE9PWwmJndpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShcIlwiLFwiXCIsbCk7dmFyIGEscyxkPVwibnVtYmVyXCI9PXR5cGVvZiB0LHA9ci5zY3JvbGxUb3B8fHdpbmRvdy5wYWdlWU9mZnNldCx5PShkP3Q6KHM9cCxcIkhUTUxcIj09PShhPXQpLm5vZGVOYW1lPy1zOmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3MpKStuLGI9XCJmdW5jdGlvblwiPT10eXBlb2YgZj9mOnUsbT1EYXRlLm5vdygpOyFmdW5jdGlvbiBlKCl7dmFyIG49RGF0ZS5ub3coKS1tLHU9bjxvLGw9dT9wKyh5LXApKmIobi9vKTp5O3U/aShlKTpjJiYhZCYmbG9jYXRpb24ucmVwbGFjZShcIiNcIit0LmlkKSxyPT09d2luZG93P3Iuc2Nyb2xsVG8oMCxsKTpyLnNjcm9sbFRvcD1sfSgpfSxhPXtpbnN0YWxsOmZ1bmN0aW9uKGUsdCl7dmFyIG4saT0hZS52ZXJzaW9uLnN0YXJ0c1dpdGgoXCIzXCIpLHU9ZnVuY3Rpb24oKXtyZXR1cm4gdD9PYmplY3QuYXNzaWduKGMoKSx0KTpjKCl9O2UuZGlyZWN0aXZlKFwic21vb3RoLXNjcm9sbFwiLChvKG49e30saT9cImluc2VydGVkXCI6XCJtb3VudGVkXCIsKGZ1bmN0aW9uKGUsdCxuKXtpZihcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/XCJ1bmRlZmluZWRcIjpyKHdpbmRvdykpJiZ2b2lkIDAhPT13aW5kb3cucGFnZVlPZmZzZXQpe3ZhciBvPU9iamVjdC5hc3NpZ24odSgpLHQudmFsdWUpO1wic3RyaW5nXCI9PXR5cGVvZiBvLmNvbnRhaW5lciYmKG8uY29udGFpbmVyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioby5jb250YWluZXIpKTt2YXIgYz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9aT9uLmRhdGEuYXR0cnMuaHJlZjpuLnByb3BzLmhyZWYscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0LnN1YnN0cmluZygxKSk7ciYmZihPYmplY3QuYXNzaWduKG8se3Njcm9sbFRvOnIsaGFzaDp0fSkpfTtlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGMpLGVbbF09e2NsaWNrSGFuZGxlcjpjfX19KSksbyhuLGk/XCJ1bmJpbmRcIjpcInVubW91bnRlZFwiLChmdW5jdGlvbihlKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGVbbF0uY2xpY2tIYW5kbGVyKSxlW2xdPW51bGx9KSksbikpO3ZhciBhPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24odSgpLGUpO3JldHVybiBmKHQpfTsoaT9lLnByb3RvdHlwZTplLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzKS4kc21vb3RoU2Nyb2xsPWEsaXx8ZS5wcm92aWRlKFwic21vb3RoU2Nyb2xsXCIsYSl9fTt0LmRlZmF1bHQ9YX1dKS5kZWZhdWx0fSkpOyIsIi8qIVxuICogdnVleCB2NC4wLjJcbiAqIChjKSAyMDIxIEV2YW4gWW91XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuaW1wb3J0IHsgaW5qZWN0LCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgc2V0dXBEZXZ0b29sc1BsdWdpbiB9IGZyb20gJ0B2dWUvZGV2dG9vbHMtYXBpJztcblxudmFyIHN0b3JlS2V5ID0gJ3N0b3JlJztcblxuZnVuY3Rpb24gdXNlU3RvcmUgKGtleSkge1xuICBpZiAoIGtleSA9PT0gdm9pZCAwICkga2V5ID0gbnVsbDtcblxuICByZXR1cm4gaW5qZWN0KGtleSAhPT0gbnVsbCA/IGtleSA6IHN0b3JlS2V5KVxufVxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgaXRlbSB0aGF0IHBhc3MgdGhlIHRlc3RcbiAqIGJ5IHNlY29uZCBhcmd1bWVudCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGZpbmQgKGxpc3QsIGYpIHtcbiAgcmV0dXJuIGxpc3QuZmlsdGVyKGYpWzBdXG59XG5cbi8qKlxuICogRGVlcCBjb3B5IHRoZSBnaXZlbiBvYmplY3QgY29uc2lkZXJpbmcgY2lyY3VsYXIgc3RydWN0dXJlLlxuICogVGhpcyBmdW5jdGlvbiBjYWNoZXMgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBpdHMgY29waWVzLlxuICogSWYgaXQgZGV0ZWN0cyBjaXJjdWxhciBzdHJ1Y3R1cmUsIHVzZSBjYWNoZWQgY29weSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNhY2hlXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBkZWVwQ29weSAob2JqLCBjYWNoZSkge1xuICBpZiAoIGNhY2hlID09PSB2b2lkIDAgKSBjYWNoZSA9IFtdO1xuXG4gIC8vIGp1c3QgcmV0dXJuIGlmIG9iaiBpcyBpbW11dGFibGUgdmFsdWVcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmpcbiAgfVxuXG4gIC8vIGlmIG9iaiBpcyBoaXQsIGl0IGlzIGluIGNpcmN1bGFyIHN0cnVjdHVyZVxuICB2YXIgaGl0ID0gZmluZChjYWNoZSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMub3JpZ2luYWwgPT09IG9iajsgfSk7XG4gIGlmIChoaXQpIHtcbiAgICByZXR1cm4gaGl0LmNvcHlcbiAgfVxuXG4gIHZhciBjb3B5ID0gQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcbiAgLy8gcHV0IHRoZSBjb3B5IGludG8gY2FjaGUgYXQgZmlyc3RcbiAgLy8gYmVjYXVzZSB3ZSB3YW50IHRvIHJlZmVyIGl0IGluIHJlY3Vyc2l2ZSBkZWVwQ29weVxuICBjYWNoZS5wdXNoKHtcbiAgICBvcmlnaW5hbDogb2JqLFxuICAgIGNvcHk6IGNvcHlcbiAgfSk7XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBjb3B5W2tleV0gPSBkZWVwQ29weShvYmpba2V5XSwgY2FjaGUpO1xuICB9KTtcblxuICByZXR1cm4gY29weVxufVxuXG4vKipcbiAqIGZvckVhY2ggZm9yIG9iamVjdFxuICovXG5mdW5jdGlvbiBmb3JFYWNoVmFsdWUgKG9iaiwgZm4pIHtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZuKG9ialtrZXldLCBrZXkpOyB9KTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSAodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nXG59XG5cbmZ1bmN0aW9uIGFzc2VydCAoY29uZGl0aW9uLCBtc2cpIHtcbiAgaWYgKCFjb25kaXRpb24pIHsgdGhyb3cgbmV3IEVycm9yKChcIlt2dWV4XSBcIiArIG1zZykpIH1cbn1cblxuZnVuY3Rpb24gcGFydGlhbCAoZm4sIGFyZykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmbihhcmcpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N1YnNjcmliZSAoZm4sIHN1YnMsIG9wdGlvbnMpIHtcbiAgaWYgKHN1YnMuaW5kZXhPZihmbikgPCAwKSB7XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnByZXBlbmRcbiAgICAgID8gc3Vicy51bnNoaWZ0KGZuKVxuICAgICAgOiBzdWJzLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBzdWJzLmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHN1YnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlIChzdG9yZSwgaG90KSB7XG4gIHN0b3JlLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX211dGF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHN0YXRlID0gc3RvcmUuc3RhdGU7XG4gIC8vIGluaXQgYWxsIG1vZHVsZXNcbiAgaW5zdGFsbE1vZHVsZShzdG9yZSwgc3RhdGUsIFtdLCBzdG9yZS5fbW9kdWxlcy5yb290LCB0cnVlKTtcbiAgLy8gcmVzZXQgc3RhdGVcbiAgcmVzZXRTdG9yZVN0YXRlKHN0b3JlLCBzdGF0ZSwgaG90KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdG9yZVN0YXRlIChzdG9yZSwgc3RhdGUsIGhvdCkge1xuICB2YXIgb2xkU3RhdGUgPSBzdG9yZS5fc3RhdGU7XG5cbiAgLy8gYmluZCBzdG9yZSBwdWJsaWMgZ2V0dGVyc1xuICBzdG9yZS5nZXR0ZXJzID0ge307XG4gIC8vIHJlc2V0IGxvY2FsIGdldHRlcnMgY2FjaGVcbiAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciB3cmFwcGVkR2V0dGVycyA9IHN0b3JlLl93cmFwcGVkR2V0dGVycztcbiAgdmFyIGNvbXB1dGVkT2JqID0ge307XG4gIGZvckVhY2hWYWx1ZSh3cmFwcGVkR2V0dGVycywgZnVuY3Rpb24gKGZuLCBrZXkpIHtcbiAgICAvLyB1c2UgY29tcHV0ZWQgdG8gbGV2ZXJhZ2UgaXRzIGxhenktY2FjaGluZyBtZWNoYW5pc21cbiAgICAvLyBkaXJlY3QgaW5saW5lIGZ1bmN0aW9uIHVzZSB3aWxsIGxlYWQgdG8gY2xvc3VyZSBwcmVzZXJ2aW5nIG9sZFN0YXRlLlxuICAgIC8vIHVzaW5nIHBhcnRpYWwgdG8gcmV0dXJuIGZ1bmN0aW9uIHdpdGggb25seSBhcmd1bWVudHMgcHJlc2VydmVkIGluIGNsb3N1cmUgZW52aXJvbm1lbnQuXG4gICAgY29tcHV0ZWRPYmpba2V5XSA9IHBhcnRpYWwoZm4sIHN0b3JlKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RvcmUuZ2V0dGVycywga2V5LCB7XG4gICAgICAvLyBUT0RPOiB1c2UgYGNvbXB1dGVkYCB3aGVuIGl0J3MgcG9zc2libGUuIGF0IHRoZSBtb21lbnQgd2UgY2FuJ3QgZHVlIHRvXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVleC9wdWxsLzE4ODNcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tcHV0ZWRPYmpba2V5XSgpOyB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSAvLyBmb3IgbG9jYWwgZ2V0dGVyc1xuICAgIH0pO1xuICB9KTtcblxuICBzdG9yZS5fc3RhdGUgPSByZWFjdGl2ZSh7XG4gICAgZGF0YTogc3RhdGVcbiAgfSk7XG5cbiAgLy8gZW5hYmxlIHN0cmljdCBtb2RlIGZvciBuZXcgc3RhdGVcbiAgaWYgKHN0b3JlLnN0cmljdCkge1xuICAgIGVuYWJsZVN0cmljdE1vZGUoc3RvcmUpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlKSB7XG4gICAgaWYgKGhvdCkge1xuICAgICAgLy8gZGlzcGF0Y2ggY2hhbmdlcyBpbiBhbGwgc3Vic2NyaWJlZCB3YXRjaGVyc1xuICAgICAgLy8gdG8gZm9yY2UgZ2V0dGVyIHJlLWV2YWx1YXRpb24gZm9yIGhvdCByZWxvYWRpbmcuXG4gICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9sZFN0YXRlLmRhdGEgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxNb2R1bGUgKHN0b3JlLCByb290U3RhdGUsIHBhdGgsIG1vZHVsZSwgaG90KSB7XG4gIHZhciBpc1Jvb3QgPSAhcGF0aC5sZW5ndGg7XG4gIHZhciBuYW1lc3BhY2UgPSBzdG9yZS5fbW9kdWxlcy5nZXROYW1lc3BhY2UocGF0aCk7XG5cbiAgLy8gcmVnaXN0ZXIgaW4gbmFtZXNwYWNlIG1hcFxuICBpZiAobW9kdWxlLm5hbWVzcGFjZWQpIHtcbiAgICBpZiAoc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIGR1cGxpY2F0ZSBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgKyBcIiBmb3IgdGhlIG5hbWVzcGFjZWQgbW9kdWxlIFwiICsgKHBhdGguam9pbignLycpKSkpO1xuICAgIH1cbiAgICBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdID0gbW9kdWxlO1xuICB9XG5cbiAgLy8gc2V0IHN0YXRlXG4gIGlmICghaXNSb290ICYmICFob3QpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZShyb290U3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICB2YXIgbW9kdWxlTmFtZSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgIGlmIChtb2R1bGVOYW1lIGluIHBhcmVudFN0YXRlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgKFwiW3Z1ZXhdIHN0YXRlIGZpZWxkIFxcXCJcIiArIG1vZHVsZU5hbWUgKyBcIlxcXCIgd2FzIG92ZXJyaWRkZW4gYnkgYSBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGF0IFxcXCJcIiArIChwYXRoLmpvaW4oJy4nKSkgKyBcIlxcXCJcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnRTdGF0ZVttb2R1bGVOYW1lXSA9IG1vZHVsZS5zdGF0ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBsb2NhbCA9IG1vZHVsZS5jb250ZXh0ID0gbWFrZUxvY2FsQ29udGV4dChzdG9yZSwgbmFtZXNwYWNlLCBwYXRoKTtcblxuICBtb2R1bGUuZm9yRWFjaE11dGF0aW9uKGZ1bmN0aW9uIChtdXRhdGlvbiwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyTXV0YXRpb24oc3RvcmUsIG5hbWVzcGFjZWRUeXBlLCBtdXRhdGlvbiwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaEFjdGlvbihmdW5jdGlvbiAoYWN0aW9uLCBrZXkpIHtcbiAgICB2YXIgdHlwZSA9IGFjdGlvbi5yb290ID8ga2V5IDogbmFtZXNwYWNlICsga2V5O1xuICAgIHZhciBoYW5kbGVyID0gYWN0aW9uLmhhbmRsZXIgfHwgYWN0aW9uO1xuICAgIHJlZ2lzdGVyQWN0aW9uKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoR2V0dGVyKGZ1bmN0aW9uIChnZXR0ZXIsIGtleSkge1xuICAgIHZhciBuYW1lc3BhY2VkVHlwZSA9IG5hbWVzcGFjZSArIGtleTtcbiAgICByZWdpc3RlckdldHRlcihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIGdldHRlciwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIChjaGlsZCwga2V5KSB7XG4gICAgaW5zdGFsbE1vZHVsZShzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLmNvbmNhdChrZXkpLCBjaGlsZCwgaG90KTtcbiAgfSk7XG59XG5cbi8qKlxuICogbWFrZSBsb2NhbGl6ZWQgZGlzcGF0Y2gsIGNvbW1pdCwgZ2V0dGVycyBhbmQgc3RhdGVcbiAqIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSwganVzdCB1c2Ugcm9vdCBvbmVzXG4gKi9cbmZ1bmN0aW9uIG1ha2VMb2NhbENvbnRleHQgKHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpIHtcbiAgdmFyIG5vTmFtZXNwYWNlID0gbmFtZXNwYWNlID09PSAnJztcblxuICB2YXIgbG9jYWwgPSB7XG4gICAgZGlzcGF0Y2g6IG5vTmFtZXNwYWNlID8gc3RvcmUuZGlzcGF0Y2ggOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhc3RvcmUuX2FjdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIGFjdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZClcbiAgICB9LFxuXG4gICAgY29tbWl0OiBub05hbWVzcGFjZSA/IHN0b3JlLmNvbW1pdCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFzdG9yZS5fbXV0YXRpb25zW3R5cGVdKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBsb2NhbCBtdXRhdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdG9yZS5jb21taXQodHlwZSwgcGF5bG9hZCwgb3B0aW9ucyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGdldHRlcnMgYW5kIHN0YXRlIG9iamVjdCBtdXN0IGJlIGdvdHRlbiBsYXppbHlcbiAgLy8gYmVjYXVzZSB0aGV5IHdpbGwgYmUgY2hhbmdlZCBieSBzdGF0ZSB1cGRhdGVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobG9jYWwsIHtcbiAgICBnZXR0ZXJzOiB7XG4gICAgICBnZXQ6IG5vTmFtZXNwYWNlXG4gICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyczsgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ha2VMb2NhbEdldHRlcnMoc3RvcmUsIG5hbWVzcGFjZSk7IH1cbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldE5lc3RlZFN0YXRlKHN0b3JlLnN0YXRlLCBwYXRoKTsgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxvY2FsXG59XG5cbmZ1bmN0aW9uIG1ha2VMb2NhbEdldHRlcnMgKHN0b3JlLCBuYW1lc3BhY2UpIHtcbiAgaWYgKCFzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlW25hbWVzcGFjZV0pIHtcbiAgICB2YXIgZ2V0dGVyc1Byb3h5ID0ge307XG4gICAgdmFyIHNwbGl0UG9zID0gbmFtZXNwYWNlLmxlbmd0aDtcbiAgICBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAvLyBza2lwIGlmIHRoZSB0YXJnZXQgZ2V0dGVyIGlzIG5vdCBtYXRjaCB0aGlzIG5hbWVzcGFjZVxuICAgICAgaWYgKHR5cGUuc2xpY2UoMCwgc3BsaXRQb3MpICE9PSBuYW1lc3BhY2UpIHsgcmV0dXJuIH1cblxuICAgICAgLy8gZXh0cmFjdCBsb2NhbCBnZXR0ZXIgdHlwZVxuICAgICAgdmFyIGxvY2FsVHlwZSA9IHR5cGUuc2xpY2Uoc3BsaXRQb3MpO1xuXG4gICAgICAvLyBBZGQgYSBwb3J0IHRvIHRoZSBnZXR0ZXJzIHByb3h5LlxuICAgICAgLy8gRGVmaW5lIGFzIGdldHRlciBwcm9wZXJ0eSBiZWNhdXNlXG4gICAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBldmFsdWF0ZSB0aGUgZ2V0dGVycyBpbiB0aGlzIHRpbWUuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2V0dGVyc1Byb3h5LCBsb2NhbFR5cGUsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5nZXR0ZXJzW3R5cGVdOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlW25hbWVzcGFjZV0gPSBnZXR0ZXJzUHJveHk7XG4gIH1cblxuICByZXR1cm4gc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdXG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YXRpb24gKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCkge1xuICB2YXIgZW50cnkgPSBzdG9yZS5fbXV0YXRpb25zW3R5cGVdIHx8IChzdG9yZS5fbXV0YXRpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRNdXRhdGlvbkhhbmRsZXIgKHBheWxvYWQpIHtcbiAgICBoYW5kbGVyLmNhbGwoc3RvcmUsIGxvY2FsLnN0YXRlLCBwYXlsb2FkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyQWN0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX2FjdGlvbnNbdHlwZV0gfHwgKHN0b3JlLl9hY3Rpb25zW3R5cGVdID0gW10pO1xuICBlbnRyeS5wdXNoKGZ1bmN0aW9uIHdyYXBwZWRBY3Rpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuY2FsbChzdG9yZSwge1xuICAgICAgZGlzcGF0Y2g6IGxvY2FsLmRpc3BhdGNoLFxuICAgICAgY29tbWl0OiBsb2NhbC5jb21taXQsXG4gICAgICBnZXR0ZXJzOiBsb2NhbC5nZXR0ZXJzLFxuICAgICAgc3RhdGU6IGxvY2FsLnN0YXRlLFxuICAgICAgcm9vdEdldHRlcnM6IHN0b3JlLmdldHRlcnMsXG4gICAgICByb290U3RhdGU6IHN0b3JlLnN0YXRlXG4gICAgfSwgcGF5bG9hZCk7XG4gICAgaWYgKCFpc1Byb21pc2UocmVzKSkge1xuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKHJlcyk7XG4gICAgfVxuICAgIGlmIChzdG9yZS5fZGV2dG9vbEhvb2spIHtcbiAgICAgIHJldHVybiByZXMuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBzdG9yZS5fZGV2dG9vbEhvb2suZW1pdCgndnVleDplcnJvcicsIGVycik7XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyR2V0dGVyIChzdG9yZSwgdHlwZSwgcmF3R2V0dGVyLCBsb2NhbCkge1xuICBpZiAoc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdKSB7XG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIGdldHRlciBrZXk6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBzdG9yZS5fd3JhcHBlZEdldHRlcnNbdHlwZV0gPSBmdW5jdGlvbiB3cmFwcGVkR2V0dGVyIChzdG9yZSkge1xuICAgIHJldHVybiByYXdHZXR0ZXIoXG4gICAgICBsb2NhbC5zdGF0ZSwgLy8gbG9jYWwgc3RhdGVcbiAgICAgIGxvY2FsLmdldHRlcnMsIC8vIGxvY2FsIGdldHRlcnNcbiAgICAgIHN0b3JlLnN0YXRlLCAvLyByb290IHN0YXRlXG4gICAgICBzdG9yZS5nZXR0ZXJzIC8vIHJvb3QgZ2V0dGVyc1xuICAgIClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlU3RyaWN0TW9kZSAoc3RvcmUpIHtcbiAgd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuX3N0YXRlLmRhdGE7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBhc3NlcnQoc3RvcmUuX2NvbW1pdHRpbmcsIFwiZG8gbm90IG11dGF0ZSB2dWV4IHN0b3JlIHN0YXRlIG91dHNpZGUgbXV0YXRpb24gaGFuZGxlcnMuXCIpO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlLCBmbHVzaDogJ3N5bmMnIH0pO1xufVxuXG5mdW5jdGlvbiBnZXROZXN0ZWRTdGF0ZSAoc3RhdGUsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChzdGF0ZSwga2V5KSB7IHJldHVybiBzdGF0ZVtrZXldOyB9LCBzdGF0ZSlcbn1cblxuZnVuY3Rpb24gdW5pZnlPYmplY3RTdHlsZSAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3QodHlwZSkgJiYgdHlwZS50eXBlKSB7XG4gICAgb3B0aW9ucyA9IHBheWxvYWQ7XG4gICAgcGF5bG9hZCA9IHR5cGU7XG4gICAgdHlwZSA9IHR5cGUudHlwZTtcbiAgfVxuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAoXCJleHBlY3RzIHN0cmluZyBhcyB0aGUgdHlwZSwgYnV0IGZvdW5kIFwiICsgKHR5cGVvZiB0eXBlKSArIFwiLlwiKSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkLCBvcHRpb25zOiBvcHRpb25zIH1cbn1cblxudmFyIExBQkVMX1ZVRVhfQklORElOR1MgPSAndnVleCBiaW5kaW5ncyc7XG52YXIgTVVUQVRJT05TX0xBWUVSX0lEID0gJ3Z1ZXg6bXV0YXRpb25zJztcbnZhciBBQ1RJT05TX0xBWUVSX0lEID0gJ3Z1ZXg6YWN0aW9ucyc7XG52YXIgSU5TUEVDVE9SX0lEID0gJ3Z1ZXgnO1xuXG52YXIgYWN0aW9uSWQgPSAwO1xuXG5mdW5jdGlvbiBhZGREZXZ0b29scyAoYXBwLCBzdG9yZSkge1xuICBzZXR1cERldnRvb2xzUGx1Z2luKFxuICAgIHtcbiAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZXgnLFxuICAgICAgYXBwOiBhcHAsXG4gICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgaG9tZXBhZ2U6ICdodHRwczovL25leHQudnVleC52dWVqcy5vcmcvJyxcbiAgICAgIGxvZ286ICdodHRwczovL3Z1ZWpzLm9yZy9pbWFnZXMvaWNvbnMvZmF2aWNvbi05Nng5Ni5wbmcnLFxuICAgICAgcGFja2FnZU5hbWU6ICd2dWV4JyxcbiAgICAgIGNvbXBvbmVudFN0YXRlVHlwZXM6IFtMQUJFTF9WVUVYX0JJTkRJTkdTXVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGFwaSkge1xuICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICBpZDogTVVUQVRJT05TX0xBWUVSX0lELFxuICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgY29sb3I6IENPTE9SX0xJTUVfNTAwXG4gICAgICB9KTtcblxuICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICBpZDogQUNUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgbGFiZWw6ICdWdWV4IEFjdGlvbnMnLFxuICAgICAgICBjb2xvcjogQ09MT1JfTElNRV81MDBcbiAgICAgIH0pO1xuXG4gICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgaWQ6IElOU1BFQ1RPUl9JRCxcbiAgICAgICAgbGFiZWw6ICdWdWV4JyxcbiAgICAgICAgaWNvbjogJ3N0b3JhZ2UnLFxuICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJ1xuICAgICAgfSk7XG5cbiAgICAgIGFwaS5vbi5nZXRJbnNwZWN0b3JUcmVlKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgIGlmIChwYXlsb2FkLmZpbHRlcikge1xuICAgICAgICAgICAgdmFyIG5vZGVzID0gW107XG4gICAgICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKG5vZGVzLCBzdG9yZS5fbW9kdWxlcy5yb290LCBwYXlsb2FkLmZpbHRlciwgJycpO1xuICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSBub2RlcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSBbXG4gICAgICAgICAgICAgIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShzdG9yZS5fbW9kdWxlcy5yb290LCAnJylcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgIHZhciBtb2R1bGVQYXRoID0gcGF5bG9hZC5ub2RlSWQ7XG4gICAgICAgICAgbWFrZUxvY2FsR2V0dGVycyhzdG9yZSwgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUoXG4gICAgICAgICAgICBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCksXG4gICAgICAgICAgICBtb2R1bGVQYXRoID09PSAncm9vdCcgPyBzdG9yZS5nZXR0ZXJzIDogc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZSxcbiAgICAgICAgICAgIG1vZHVsZVBhdGhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZShmdW5jdGlvbiAocGF5bG9hZCkge1xuICAgICAgICBpZiAocGF5bG9hZC5hcHAgPT09IGFwcCAmJiBwYXlsb2FkLmluc3BlY3RvcklkID09PSBJTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgIHZhciBwYXRoID0gcGF5bG9hZC5wYXRoO1xuICAgICAgICAgIGlmIChtb2R1bGVQYXRoICE9PSAncm9vdCcpIHtcbiAgICAgICAgICAgIHBhdGggPSBtb2R1bGVQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdCggcGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBheWxvYWQuc2V0KHN0b3JlLl9zdGF0ZS5kYXRhLCBwYXRoLCBwYXlsb2FkLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAobXV0YXRpb24sIHN0YXRlKSB7XG4gICAgICAgIHZhciBkYXRhID0ge307XG5cbiAgICAgICAgaWYgKG11dGF0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICBkYXRhLnBheWxvYWQgPSBtdXRhdGlvbi5wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgIGFwaS5ub3RpZnlDb21wb25lbnRVcGRhdGUoKTtcbiAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JUcmVlKElOU1BFQ1RPUl9JRCk7XG4gICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcblxuICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgbGF5ZXJJZDogTVVUQVRJT05TX0xBWUVSX0lELFxuICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgdGl0bGU6IG11dGF0aW9uLnR5cGUsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdG9yZS5zdWJzY3JpYmVBY3Rpb24oe1xuICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uIChhY3Rpb24sIHN0YXRlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICBhY3Rpb24uX3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgIGxheWVySWQ6IEFDVElPTlNfTEFZRVJfSUQsXG4gICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICB0aW1lOiBhY3Rpb24uX3RpbWUsXG4gICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgc3VidGl0bGU6ICdzdGFydCcsXG4gICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uIChhY3Rpb24sIHN0YXRlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICB2YXIgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gYWN0aW9uLl90aW1lO1xuICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkdXJhdGlvbicsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IChkdXJhdGlvbiArIFwibXNcIiksXG4gICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICB2YWx1ZTogZHVyYXRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgIGxheWVySWQ6IEFDVElPTlNfTEFZRVJfSUQsXG4gICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcbiAgICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG59XG5cbi8vIGV4dHJhY3RlZCBmcm9tIHRhaWx3aW5kIHBhbGV0dGVcbnZhciBDT0xPUl9MSU1FXzUwMCA9IDB4ODRjYzE2O1xudmFyIENPTE9SX0RBUksgPSAweDY2NjY2NjtcbnZhciBDT0xPUl9XSElURSA9IDB4ZmZmZmZmO1xuXG52YXIgVEFHX05BTUVTUEFDRUQgPSB7XG4gIGxhYmVsOiAnbmFtZXNwYWNlZCcsXG4gIHRleHRDb2xvcjogQ09MT1JfV0hJVEUsXG4gIGJhY2tncm91bmRDb2xvcjogQ09MT1JfREFSS1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21QYXRoIChwYXRoKSB7XG4gIHJldHVybiBwYXRoICYmIHBhdGggIT09ICdyb290JyA/IHBhdGguc3BsaXQoJy8nKS5zbGljZSgtMiwgLTEpWzBdIDogJ1Jvb3QnXG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBtb2R1bGVcbiAqIEByZXR1cm4ge2ltcG9ydCgnQHZ1ZS9kZXZ0b29scy1hcGknKS5DdXN0b21JbnNwZWN0b3JOb2RlfVxuICovXG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUgKG1vZHVsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGlkOiBwYXRoIHx8ICdyb290JyxcbiAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAvLyBjYXJ0LyAtPiBjYXJ0XG4gICAgLy8gbmVzdGVkL2NhcnQvIC0+IGNhcnRcbiAgICBsYWJlbDogZXh0cmFjdE5hbWVGcm9tUGF0aChwYXRoKSxcbiAgICB0YWdzOiBtb2R1bGUubmFtZXNwYWNlZCA/IFtUQUdfTkFNRVNQQUNFRF0gOiBbXSxcbiAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMobW9kdWxlLl9jaGlsZHJlbikubWFwKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7IHJldHVybiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoXG4gICAgICAgIG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sXG4gICAgICAgIHBhdGggKyBtb2R1bGVOYW1lICsgJy8nXG4gICAgICApOyB9XG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJ0B2dWUvZGV2dG9vbHMtYXBpJykuQ3VzdG9tSW5zcGVjdG9yTm9kZVtdfSByZXN1bHRcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICovXG5mdW5jdGlvbiBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlIChyZXN1bHQsIG1vZHVsZSwgZmlsdGVyLCBwYXRoKSB7XG4gIGlmIChwYXRoLmluY2x1ZGVzKGZpbHRlcikpIHtcbiAgICByZXN1bHQucHVzaCh7XG4gICAgICBpZDogcGF0aCB8fCAncm9vdCcsXG4gICAgICBsYWJlbDogcGF0aC5lbmRzV2l0aCgnLycpID8gcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpIDogcGF0aCB8fCAnUm9vdCcsXG4gICAgICB0YWdzOiBtb2R1bGUubmFtZXNwYWNlZCA/IFtUQUdfTkFNRVNQQUNFRF0gOiBbXVxuICAgIH0pO1xuICB9XG4gIE9iamVjdC5rZXlzKG1vZHVsZS5fY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArICcvJyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlXG4gKiBAcmV0dXJuIHtpbXBvcnQoJ0B2dWUvZGV2dG9vbHMtYXBpJykuQ3VzdG9tSW5zcGVjdG9yU3RhdGV9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUgKG1vZHVsZSwgZ2V0dGVycywgcGF0aCkge1xuICBnZXR0ZXJzID0gcGF0aCA9PT0gJ3Jvb3QnID8gZ2V0dGVycyA6IGdldHRlcnNbcGF0aF07XG4gIHZhciBnZXR0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKGdldHRlcnMpO1xuICB2YXIgc3RvcmVTdGF0ZSA9IHtcbiAgICBzdGF0ZTogT2JqZWN0LmtleXMobW9kdWxlLnN0YXRlKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogbW9kdWxlLnN0YXRlW2tleV1cbiAgICB9KTsgfSlcbiAgfTtcblxuICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgdmFyIHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKTtcbiAgICBzdG9yZVN0YXRlLmdldHRlcnMgPSBPYmplY3Qua2V5cyh0cmVlKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHtcbiAgICAgIGtleToga2V5LmVuZHNXaXRoKCcvJykgPyBleHRyYWN0TmFtZUZyb21QYXRoKGtleSkgOiBrZXksXG4gICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogY2FuVGhyb3coZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJlZVtrZXldOyB9KVxuICAgIH0pOyB9KTtcbiAgfVxuXG4gIHJldHVybiBzdG9yZVN0YXRlXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlIChnZXR0ZXJzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHBhdGggPSBrZXkuc3BsaXQoJy8nKTtcbiAgICBpZiAocGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gcmVzdWx0O1xuICAgICAgdmFyIGxlYWZLZXkgPSBwYXRoLnBvcCgpO1xuICAgICAgcGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGlmICghdGFyZ2V0W3BdKSB7XG4gICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHAsXG4gICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHRhcmdldFtsZWFmS2V5XSA9IGNhblRocm93KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldHRlcnNba2V5XTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gY2FuVGhyb3coZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0dGVyc1trZXldOyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlIChtb2R1bGVNYXAsIHBhdGgpIHtcbiAgdmFyIG5hbWVzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gbjsgfSk7XG4gIHJldHVybiBuYW1lcy5yZWR1Y2UoXG4gICAgZnVuY3Rpb24gKG1vZHVsZSwgbW9kdWxlTmFtZSwgaSkge1xuICAgICAgdmFyIGNoaWxkID0gbW9kdWxlW21vZHVsZU5hbWVdO1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwiTWlzc2luZyBtb2R1bGUgXFxcIlwiICsgbW9kdWxlTmFtZSArIFwiXFxcIiBmb3IgcGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiLlwiKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBpID09PSBuYW1lcy5sZW5ndGggLSAxID8gY2hpbGQgOiBjaGlsZC5fY2hpbGRyZW5cbiAgICB9LFxuICAgIHBhdGggPT09ICdyb290JyA/IG1vZHVsZU1hcCA6IG1vZHVsZU1hcC5yb290Ll9jaGlsZHJlblxuICApXG59XG5cbmZ1bmN0aW9uIGNhblRocm93IChjYikge1xuICB0cnkge1xuICAgIHJldHVybiBjYigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZVxuICB9XG59XG5cbi8vIEJhc2UgZGF0YSBzdHJ1Y3QgZm9yIHN0b3JlJ3MgbW9kdWxlLCBwYWNrYWdlIHdpdGggc29tZSBhdHRyaWJ1dGUgYW5kIG1ldGhvZFxudmFyIE1vZHVsZSA9IGZ1bmN0aW9uIE1vZHVsZSAocmF3TW9kdWxlLCBydW50aW1lKSB7XG4gIHRoaXMucnVudGltZSA9IHJ1bnRpbWU7XG4gIC8vIFN0b3JlIHNvbWUgY2hpbGRyZW4gaXRlbVxuICB0aGlzLl9jaGlsZHJlbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIFN0b3JlIHRoZSBvcmlnaW4gbW9kdWxlIG9iamVjdCB3aGljaCBwYXNzZWQgYnkgcHJvZ3JhbW1lclxuICB0aGlzLl9yYXdNb2R1bGUgPSByYXdNb2R1bGU7XG4gIHZhciByYXdTdGF0ZSA9IHJhd01vZHVsZS5zdGF0ZTtcblxuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSdzIHN0YXRlXG4gIHRoaXMuc3RhdGUgPSAodHlwZW9mIHJhd1N0YXRlID09PSAnZnVuY3Rpb24nID8gcmF3U3RhdGUoKSA6IHJhd1N0YXRlKSB8fCB7fTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMkMSA9IHsgbmFtZXNwYWNlZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMkMS5uYW1lc3BhY2VkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEhdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWRcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiBhZGRDaGlsZCAoa2V5LCBtb2R1bGUpIHtcbiAgdGhpcy5fY2hpbGRyZW5ba2V5XSA9IG1vZHVsZTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZCAoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltrZXldO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIGdldENoaWxkIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2tleV1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuaGFzQ2hpbGQgPSBmdW5jdGlvbiBoYXNDaGlsZCAoa2V5KSB7XG4gIHJldHVybiBrZXkgaW4gdGhpcy5fY2hpbGRyZW5cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChyYXdNb2R1bGUpIHtcbiAgdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWQgPSByYXdNb2R1bGUubmFtZXNwYWNlZDtcbiAgaWYgKHJhd01vZHVsZS5hY3Rpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMgPSByYXdNb2R1bGUuYWN0aW9ucztcbiAgfVxuICBpZiAocmF3TW9kdWxlLm11dGF0aW9ucykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMgPSByYXdNb2R1bGUubXV0YXRpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzID0gcmF3TW9kdWxlLmdldHRlcnM7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaENoaWxkID0gZnVuY3Rpb24gZm9yRWFjaENoaWxkIChmbikge1xuICBmb3JFYWNoVmFsdWUodGhpcy5fY2hpbGRyZW4sIGZuKTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEdldHRlciA9IGZ1bmN0aW9uIGZvckVhY2hHZXR0ZXIgKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hBY3Rpb24gPSBmdW5jdGlvbiBmb3JFYWNoQWN0aW9uIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoTXV0YXRpb24gPSBmdW5jdGlvbiBmb3JFYWNoTXV0YXRpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1vZHVsZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyQxICk7XG5cbnZhciBNb2R1bGVDb2xsZWN0aW9uID0gZnVuY3Rpb24gTW9kdWxlQ29sbGVjdGlvbiAocmF3Um9vdE1vZHVsZSkge1xuICAvLyByZWdpc3RlciByb290IG1vZHVsZSAoVnVleC5TdG9yZSBvcHRpb25zKVxuICB0aGlzLnJlZ2lzdGVyKFtdLCByYXdSb290TW9kdWxlLCBmYWxzZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChtb2R1bGUsIGtleSkge1xuICAgIHJldHVybiBtb2R1bGUuZ2V0Q2hpbGQoa2V5KVxuICB9LCB0aGlzLnJvb3QpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXROYW1lc3BhY2UgPSBmdW5jdGlvbiBnZXROYW1lc3BhY2UgKHBhdGgpIHtcbiAgdmFyIG1vZHVsZSA9IHRoaXMucm9vdDtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGtleSkge1xuICAgIG1vZHVsZSA9IG1vZHVsZS5nZXRDaGlsZChrZXkpO1xuICAgIHJldHVybiBuYW1lc3BhY2UgKyAobW9kdWxlLm5hbWVzcGFjZWQgPyBrZXkgKyAnLycgOiAnJylcbiAgfSwgJycpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUkMSAocmF3Um9vdE1vZHVsZSkge1xuICB1cGRhdGUoW10sIHRoaXMucm9vdCwgcmF3Um9vdE1vZHVsZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyIChwYXRoLCByYXdNb2R1bGUsIHJ1bnRpbWUpIHtcbiAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuICAgIGlmICggcnVudGltZSA9PT0gdm9pZCAwICkgcnVudGltZSA9IHRydWU7XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCByYXdNb2R1bGUpO1xuICB9XG5cbiAgdmFyIG5ld01vZHVsZSA9IG5ldyBNb2R1bGUocmF3TW9kdWxlLCBydW50aW1lKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5yb290ID0gbmV3TW9kdWxlO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgcGFyZW50LmFkZENoaWxkKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgbmV3TW9kdWxlKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChyYXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGUubW9kdWxlcywgZnVuY3Rpb24gKHJhd0NoaWxkTW9kdWxlLCBrZXkpIHtcbiAgICAgIHRoaXMkMSQxLnJlZ2lzdGVyKHBhdGguY29uY2F0KGtleSksIHJhd0NoaWxkTW9kdWxlLCBydW50aW1lKTtcbiAgICB9KTtcbiAgfVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uIHVucmVnaXN0ZXIgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgdmFyIGNoaWxkID0gcGFyZW50LmdldENoaWxkKGtleSk7XG5cbiAgaWYgKCFjaGlsZCkge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbdnVleF0gdHJ5aW5nIHRvIHVucmVnaXN0ZXIgbW9kdWxlICdcIiArIGtleSArIFwiJywgd2hpY2ggaXMgXCIgK1xuICAgICAgICBcIm5vdCByZWdpc3RlcmVkXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFjaGlsZC5ydW50aW1lKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBwYXJlbnQucmVtb3ZlQ2hpbGQoa2V5KTtcbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLmlzUmVnaXN0ZXJlZCA9IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZCAocGF0aCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5nZXQocGF0aC5zbGljZSgwLCAtMSkpO1xuICB2YXIga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmhhc0NoaWxkKGtleSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcblxuZnVuY3Rpb24gdXBkYXRlIChwYXRoLCB0YXJnZXRNb2R1bGUsIG5ld01vZHVsZSkge1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgdGFyZ2V0IG1vZHVsZVxuICB0YXJnZXRNb2R1bGUudXBkYXRlKG5ld01vZHVsZSk7XG5cbiAgLy8gdXBkYXRlIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChuZXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdNb2R1bGUubW9kdWxlcykge1xuICAgICAgaWYgKCF0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSkge1xuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJbdnVleF0gdHJ5aW5nIHRvIGFkZCBhIG5ldyBtb2R1bGUgJ1wiICsga2V5ICsgXCInIG9uIGhvdCByZWxvYWRpbmcsIFwiICtcbiAgICAgICAgICAgICdtYW51YWwgcmVsb2FkIGlzIG5lZWRlZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKFxuICAgICAgICBwYXRoLmNvbmNhdChrZXkpLFxuICAgICAgICB0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSxcbiAgICAgICAgbmV3TW9kdWxlLm1vZHVsZXNba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZ1bmN0aW9uQXNzZXJ0ID0ge1xuICBhc3NlcnQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nOyB9LFxuICBleHBlY3RlZDogJ2Z1bmN0aW9uJ1xufTtcblxudmFyIG9iamVjdEFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbiBvciBvYmplY3Qgd2l0aCBcImhhbmRsZXJcIiBmdW5jdGlvbidcbn07XG5cbnZhciBhc3NlcnRUeXBlcyA9IHtcbiAgZ2V0dGVyczogZnVuY3Rpb25Bc3NlcnQsXG4gIG11dGF0aW9uczogZnVuY3Rpb25Bc3NlcnQsXG4gIGFjdGlvbnM6IG9iamVjdEFzc2VydFxufTtcblxuZnVuY3Rpb24gYXNzZXJ0UmF3TW9kdWxlIChwYXRoLCByYXdNb2R1bGUpIHtcbiAgT2JqZWN0LmtleXMoYXNzZXJ0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghcmF3TW9kdWxlW2tleV0pIHsgcmV0dXJuIH1cblxuICAgIHZhciBhc3NlcnRPcHRpb25zID0gYXNzZXJ0VHlwZXNba2V5XTtcblxuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGVba2V5XSwgZnVuY3Rpb24gKHZhbHVlLCB0eXBlKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIGFzc2VydE9wdGlvbnMuYXNzZXJ0KHZhbHVlKSxcbiAgICAgICAgbWFrZUFzc2VydGlvbk1lc3NhZ2UocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgYXNzZXJ0T3B0aW9ucy5leHBlY3RlZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlQXNzZXJ0aW9uTWVzc2FnZSAocGF0aCwga2V5LCB0eXBlLCB2YWx1ZSwgZXhwZWN0ZWQpIHtcbiAgdmFyIGJ1ZiA9IGtleSArIFwiIHNob3VsZCBiZSBcIiArIGV4cGVjdGVkICsgXCIgYnV0IFxcXCJcIiArIGtleSArIFwiLlwiICsgdHlwZSArIFwiXFxcIlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgYnVmICs9IFwiIGluIG1vZHVsZSBcXFwiXCIgKyAocGF0aC5qb2luKCcuJykpICsgXCJcXFwiXCI7XG4gIH1cbiAgYnVmICs9IFwiIGlzIFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkgKyBcIi5cIjtcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZSAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IFN0b3JlKG9wdGlvbnMpXG59XG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIFN0b3JlIChvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEkMSA9IHRoaXM7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnLCBcInZ1ZXggcmVxdWlyZXMgYSBQcm9taXNlIHBvbHlmaWxsIGluIHRoaXMgYnJvd3Nlci5cIik7XG4gICAgYXNzZXJ0KHRoaXMgaW5zdGFuY2VvZiBTdG9yZSwgXCJzdG9yZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IuXCIpO1xuICB9XG5cbiAgdmFyIHBsdWdpbnMgPSBvcHRpb25zLnBsdWdpbnM7IGlmICggcGx1Z2lucyA9PT0gdm9pZCAwICkgcGx1Z2lucyA9IFtdO1xuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7IGlmICggc3RyaWN0ID09PSB2b2lkIDAgKSBzdHJpY3QgPSBmYWxzZTtcbiAgdmFyIGRldnRvb2xzID0gb3B0aW9ucy5kZXZ0b29scztcblxuICAvLyBzdG9yZSBpbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl9jb21taXR0aW5nID0gZmFsc2U7XG4gIHRoaXMuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX21vZHVsZXMgPSBuZXcgTW9kdWxlQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgdGhpcy5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX21ha2VMb2NhbEdldHRlcnNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX2RldnRvb2xzID0gZGV2dG9vbHM7XG5cbiAgLy8gYmluZCBjb21taXQgYW5kIGRpc3BhdGNoIHRvIHNlbGZcbiAgdmFyIHN0b3JlID0gdGhpcztcbiAgdmFyIHJlZiA9IHRoaXM7XG4gIHZhciBkaXNwYXRjaCA9IHJlZi5kaXNwYXRjaDtcbiAgdmFyIGNvbW1pdCA9IHJlZi5jb21taXQ7XG4gIHRoaXMuZGlzcGF0Y2ggPSBmdW5jdGlvbiBib3VuZERpc3BhdGNoICh0eXBlLCBwYXlsb2FkKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoLmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQpXG4gIH07XG4gIHRoaXMuY29tbWl0ID0gZnVuY3Rpb24gYm91bmRDb21taXQgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tbWl0LmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpXG4gIH07XG5cbiAgLy8gc3RyaWN0IG1vZGVcbiAgdGhpcy5zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fbW9kdWxlcy5yb290LnN0YXRlO1xuXG4gIC8vIGluaXQgcm9vdCBtb2R1bGUuXG4gIC8vIHRoaXMgYWxzbyByZWN1cnNpdmVseSByZWdpc3RlcnMgYWxsIHN1Yi1tb2R1bGVzXG4gIC8vIGFuZCBjb2xsZWN0cyBhbGwgbW9kdWxlIGdldHRlcnMgaW5zaWRlIHRoaXMuX3dyYXBwZWRHZXR0ZXJzXG4gIGluc3RhbGxNb2R1bGUodGhpcywgc3RhdGUsIFtdLCB0aGlzLl9tb2R1bGVzLnJvb3QpO1xuXG4gIC8vIGluaXRpYWxpemUgdGhlIHN0b3JlIHN0YXRlLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlYWN0aXZpdHlcbiAgLy8gKGFsc28gcmVnaXN0ZXJzIF93cmFwcGVkR2V0dGVycyBhcyBjb21wdXRlZCBwcm9wZXJ0aWVzKVxuICByZXNldFN0b3JlU3RhdGUodGhpcywgc3RhdGUpO1xuXG4gIC8vIGFwcGx5IHBsdWdpbnNcbiAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHsgcmV0dXJuIHBsdWdpbih0aGlzJDEkMSk7IH0pO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgc3RhdGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuU3RvcmUucHJvdG90eXBlLmluc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsIChhcHAsIGluamVjdEtleSkge1xuICBhcHAucHJvdmlkZShpbmplY3RLZXkgfHwgc3RvcmVLZXksIHRoaXMpO1xuICBhcHAuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJHN0b3JlID0gdGhpcztcblxuICB2YXIgdXNlRGV2dG9vbHMgPSB0aGlzLl9kZXZ0b29scyAhPT0gdW5kZWZpbmVkXG4gICAgPyB0aGlzLl9kZXZ0b29sc1xuICAgIDogKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXztcblxuICBpZiAodXNlRGV2dG9vbHMpIHtcbiAgICBhZGREZXZ0b29scyhhcHAsIHRoaXMpO1xuICB9XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc3RhdGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fc3RhdGUuZGF0YVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnN0YXRlLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQoZmFsc2UsIFwidXNlIHN0b3JlLnJlcGxhY2VTdGF0ZSgpIHRvIGV4cGxpY2l0IHJlcGxhY2Ugc3RvcmUgc3RhdGUuXCIpO1xuICB9XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuY29tbWl0ID0gZnVuY3Rpb24gY29tbWl0IChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgY29tbWl0XG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgdmFyIHBheWxvYWQgPSByZWYucGF5bG9hZDtcbiAgICB2YXIgb3B0aW9ucyA9IHJlZi5vcHRpb25zO1xuXG4gIHZhciBtdXRhdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9tdXRhdGlvbnNbdHlwZV07XG4gIGlmICghZW50cnkpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLl9zdWJzY3JpYmVyc1xuICAgIC5zbGljZSgpIC8vIHNoYWxsb3cgY29weSB0byBwcmV2ZW50IGl0ZXJhdG9yIGludmFsaWRhdGlvbiBpZiBzdWJzY3JpYmVyIHN5bmNocm9ub3VzbHkgY2FsbHMgdW5zdWJzY3JpYmVcbiAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMSQxLnN0YXRlKTsgfSk7XG5cbiAgaWYgKFxuICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJlxuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5zaWxlbnRcbiAgKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbdnVleF0gbXV0YXRpb24gdHlwZTogXCIgKyB0eXBlICsgXCIuIFNpbGVudCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gXCIgK1xuICAgICAgJ1VzZSB0aGUgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHZ1ZS1kZXZ0b29scydcbiAgICApO1xuICB9XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCAoX3R5cGUsIF9wYXlsb2FkKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgZGlzcGF0Y2hcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG5cbiAgdmFyIGFjdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9hY3Rpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBhY3Rpb24gdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVyc1xuICAgICAgLnNsaWNlKCkgLy8gc2hhbGxvdyBjb3B5IHRvIHByZXZlbnQgaXRlcmF0b3IgaW52YWxpZGF0aW9uIGlmIHN1YnNjcmliZXIgc3luY2hyb25vdXNseSBjYWxscyB1bnN1YnNjcmliZVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYmVmb3JlOyB9KVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmJlZm9yZShhY3Rpb24sIHRoaXMkMSQxLnN0YXRlKTsgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYmVmb3JlIGFjdGlvbiBzdWJzY3JpYmVyczogXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gZW50cnkubGVuZ3RoID4gMVxuICAgID8gUHJvbWlzZS5hbGwoZW50cnkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBoYW5kbGVyKHBheWxvYWQpOyB9KSlcbiAgICA6IGVudHJ5WzBdKHBheWxvYWQpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcyQxJDEuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYWZ0ZXI7IH0pXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmFmdGVyKGFjdGlvbiwgdGhpcyQxJDEuc3RhdGUpOyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlt2dWV4XSBlcnJvciBpbiBhZnRlciBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXNvbHZlKHJlcyk7XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzJDEkMS5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5lcnJvcjsgfSlcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuZXJyb3IoYWN0aW9uLCB0aGlzJDEkMS5zdGF0ZSwgZXJyb3IpOyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlt2dWV4XSBlcnJvciBpbiBlcnJvciBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuICB9KVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSAoZm4sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX3N1YnNjcmliZXJzLCBvcHRpb25zKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbiA9IGZ1bmN0aW9uIHN1YnNjcmliZUFjdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgdmFyIHN1YnMgPSB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyB7IGJlZm9yZTogZm4gfSA6IGZuO1xuICByZXR1cm4gZ2VuZXJpY1N1YnNjcmliZShzdWJzLCB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycywgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS53YXRjaCA9IGZ1bmN0aW9uIHdhdGNoJDEgKGdldHRlciwgY2IsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxJDEgPSB0aGlzO1xuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQodHlwZW9mIGdldHRlciA9PT0gJ2Z1bmN0aW9uJywgXCJzdG9yZS53YXRjaCBvbmx5IGFjY2VwdHMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgcmV0dXJuIHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldHRlcih0aGlzJDEkMS5zdGF0ZSwgdGhpcyQxJDEuZ2V0dGVycyk7IH0sIGNiLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSlcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUgKHN0YXRlKSB7XG4gICAgdmFyIHRoaXMkMSQxID0gdGhpcztcblxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzJDEkMS5fc3RhdGUuZGF0YSA9IHN0YXRlO1xuICB9KTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlIChwYXRoLCByYXdNb2R1bGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7IHBhdGggPSBbcGF0aF07IH1cblxuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGF0aCksIFwibW9kdWxlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBBcnJheS5cIik7XG4gICAgYXNzZXJ0KHBhdGgubGVuZ3RoID4gMCwgJ2Nhbm5vdCByZWdpc3RlciB0aGUgcm9vdCBtb2R1bGUgYnkgdXNpbmcgcmVnaXN0ZXJNb2R1bGUuJyk7XG4gIH1cblxuICB0aGlzLl9tb2R1bGVzLnJlZ2lzdGVyKHBhdGgsIHJhd01vZHVsZSk7XG4gIGluc3RhbGxNb2R1bGUodGhpcywgdGhpcy5zdGF0ZSwgcGF0aCwgdGhpcy5fbW9kdWxlcy5nZXQocGF0aCksIG9wdGlvbnMucHJlc2VydmVTdGF0ZSk7XG4gIC8vIHJlc2V0IHN0b3JlIHRvIHVwZGF0ZSBnZXR0ZXJzLi4uXG4gIHJlc2V0U3RvcmVTdGF0ZSh0aGlzLCB0aGlzLnN0YXRlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS51bnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gdW5yZWdpc3Rlck1vZHVsZSAocGF0aCkge1xuICAgIHZhciB0aGlzJDEkMSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy51bnJlZ2lzdGVyKHBhdGgpO1xuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZSh0aGlzJDEkMS5zdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIGRlbGV0ZSBwYXJlbnRTdGF0ZVtwYXRoW3BhdGgubGVuZ3RoIC0gMV1dO1xuICB9KTtcbiAgcmVzZXRTdG9yZSh0aGlzKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5oYXNNb2R1bGUgPSBmdW5jdGlvbiBoYXNNb2R1bGUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21vZHVsZXMuaXNSZWdpc3RlcmVkKHBhdGgpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUuaG90VXBkYXRlID0gZnVuY3Rpb24gaG90VXBkYXRlIChuZXdPcHRpb25zKSB7XG4gIHRoaXMuX21vZHVsZXMudXBkYXRlKG5ld09wdGlvbnMpO1xuICByZXNldFN0b3JlKHRoaXMsIHRydWUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLl93aXRoQ29tbWl0ID0gZnVuY3Rpb24gX3dpdGhDb21taXQgKGZuKSB7XG4gIHZhciBjb21taXR0aW5nID0gdGhpcy5fY29tbWl0dGluZztcbiAgdGhpcy5fY29tbWl0dGluZyA9IHRydWU7XG4gIGZuKCk7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSBjb21taXR0aW5nO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFN0b3JlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBnZXR0aW5nIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHN0YXRlcyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IHN0YXRlIGFuZCBnZXR0ZXJzIGZvciBwYXJhbSwgeW91IGNhbiBkbyBzb21ldGhpbmcgZm9yIHN0YXRlIGFuZCBnZXR0ZXJzIGluIGl0LlxuICogQHBhcmFtIHtPYmplY3R9XG4gKi9cbnZhciBtYXBTdGF0ZSA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBzdGF0ZXMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKHN0YXRlcykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwU3RhdGU6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKHN0YXRlcykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZFN0YXRlICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMuJHN0b3JlLnN0YXRlO1xuICAgICAgdmFyIGdldHRlcnMgPSB0aGlzLiRzdG9yZS5nZXR0ZXJzO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBTdGF0ZScsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBtb2R1bGUuY29udGV4dC5zdGF0ZTtcbiAgICAgICAgZ2V0dGVycyA9IG1vZHVsZS5jb250ZXh0LmdldHRlcnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5jYWxsKHRoaXMsIHN0YXRlLCBnZXR0ZXJzKVxuICAgICAgICA6IHN0YXRlW3ZhbF1cbiAgICB9O1xuICAgIC8vIG1hcmsgdnVleCBnZXR0ZXIgZm9yIGRldnRvb2xzXG4gICAgcmVzW2tleV0udnVleCA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWR1Y2UgdGhlIGNvZGUgd2hpY2ggd3JpdHRlbiBpbiBWdWUuanMgZm9yIGNvbW1pdHRpbmcgdGhlIG11dGF0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBtdXRhdGlvbnMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBgY29tbWl0YCBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW0sIGl0IGNhbiBhY2NlcHQgYW5vdGhlciBwYXJhbXMuIFlvdSBjYW4gY29tbWl0IG11dGF0aW9uIGFuZCBkbyBhbnkgb3RoZXIgdGhpbmdzIGluIHRoaXMgZnVuY3Rpb24uIHNwZWNpYWxseSwgWW91IG5lZWQgdG8gcGFzcyBhbnRob3IgcGFyYW1zIGZyb20gdGhlIG1hcHBlZCBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcE11dGF0aW9ucyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBtdXRhdGlvbnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKG11dGF0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwTXV0YXRpb25zOiBtYXBwZXIgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICB9XG4gIG5vcm1hbGl6ZU1hcChtdXRhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRNdXRhdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgLy8gR2V0IHRoZSBjb21taXQgbWV0aG9kIGZyb20gc3RvcmVcbiAgICAgIHZhciBjb21taXQgPSB0aGlzLiRzdG9yZS5jb21taXQ7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcE11dGF0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0ID0gbW9kdWxlLmNvbnRleHQuY29tbWl0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuYXBwbHkodGhpcywgW2NvbW1pdF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGNvbW1pdC5hcHBseSh0aGlzLiRzdG9yZSwgW3ZhbF0uY29uY2F0KGFyZ3MpKVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWR1Y2UgdGhlIGNvZGUgd2hpY2ggd3JpdHRlbiBpbiBWdWUuanMgZm9yIGdldHRpbmcgdGhlIGdldHRlcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGdldHRlcnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcEdldHRlcnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgZ2V0dGVycykge1xuICB2YXIgcmVzID0ge307XG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzVmFsaWRNYXAoZ2V0dGVycykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwR2V0dGVyczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICAvLyBUaGUgbmFtZXNwYWNlIGhhcyBiZWVuIG11dGF0ZWQgYnkgbm9ybWFsaXplTmFtZXNwYWNlXG4gICAgdmFsID0gbmFtZXNwYWNlICsgdmFsO1xuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkR2V0dGVyICgpIHtcbiAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwR2V0dGVycycsIG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICEodmFsIGluIHRoaXMuJHN0b3JlLmdldHRlcnMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gZ2V0dGVyOiBcIiArIHZhbCkpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzW3ZhbF1cbiAgICB9O1xuICAgIC8vIG1hcmsgdnVleCBnZXR0ZXIgZm9yIGRldnRvb2xzXG4gICAgcmVzW2tleV0udnVleCA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWR1Y2UgdGhlIGNvZGUgd2hpY2ggd3JpdHRlbiBpbiBWdWUuanMgZm9yIGRpc3BhdGNoIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGFjdGlvbnMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGRpc3BhdGNoIGFjdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBBY3Rpb25zID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGFjdGlvbnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKGFjdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcEFjdGlvbnM6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKGFjdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRBY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgIC8vIGdldCBkaXNwYXRjaCBmdW5jdGlvbiBmcm9tIHN0b3JlXG4gICAgICB2YXIgZGlzcGF0Y2ggPSB0aGlzLiRzdG9yZS5kaXNwYXRjaDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwQWN0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2ggPSBtb2R1bGUuY29udGV4dC5kaXNwYXRjaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtkaXNwYXRjaF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGRpc3BhdGNoLmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlYmluZGluZyBuYW1lc3BhY2UgcGFyYW0gZm9yIG1hcFhYWCBmdW5jdGlvbiBpbiBzcGVjaWFsIHNjb3BlZCwgYW5kIHJldHVybiB0aGVtIGJ5IHNpbXBsZSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSkgeyByZXR1cm4gKHtcbiAgbWFwU3RhdGU6IG1hcFN0YXRlLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwR2V0dGVyczogbWFwR2V0dGVycy5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcE11dGF0aW9uczogbWFwTXV0YXRpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwQWN0aW9uczogbWFwQWN0aW9ucy5iaW5kKG51bGwsIG5hbWVzcGFjZSlcbn0pOyB9O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgbWFwXG4gKiBub3JtYWxpemVNYXAoWzEsIDIsIDNdKSA9PiBbIHsga2V5OiAxLCB2YWw6IDEgfSwgeyBrZXk6IDIsIHZhbDogMiB9LCB7IGtleTogMywgdmFsOiAzIH0gXVxuICogbm9ybWFsaXplTWFwKHthOiAxLCBiOiAyLCBjOiAzfSkgPT4gWyB7IGtleTogJ2EnLCB2YWw6IDEgfSwgeyBrZXk6ICdiJywgdmFsOiAyIH0sIHsga2V5OiAnYycsIHZhbDogMyB9IF1cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBtYXBcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWFwIChtYXApIHtcbiAgaWYgKCFpc1ZhbGlkTWFwKG1hcCkpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShtYXApXG4gICAgPyBtYXAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7IGtleToga2V5LCB2YWw6IGtleSB9KTsgfSlcbiAgICA6IE9iamVjdC5rZXlzKG1hcCkubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7IGtleToga2V5LCB2YWw6IG1hcFtrZXldIH0pOyB9KVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIHdoZXRoZXIgZ2l2ZW4gbWFwIGlzIHZhbGlkIG9yIG5vdFxuICogQHBhcmFtIHsqfSBtYXBcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRNYXAgKG1hcCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShtYXApIHx8IGlzT2JqZWN0KG1hcClcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiBleHBlY3QgdHdvIHBhcmFtIGNvbnRhaW5zIG5hbWVzcGFjZSBhbmQgbWFwLiBpdCB3aWxsIG5vcm1hbGl6ZSB0aGUgbmFtZXNwYWNlIGFuZCB0aGVuIHRoZSBwYXJhbSdzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgbWFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lc3BhY2UgKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAobmFtZXNwYWNlLCBtYXApIHtcbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG1hcCA9IG5hbWVzcGFjZTtcbiAgICAgIG5hbWVzcGFjZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlLmNoYXJBdChuYW1lc3BhY2UubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgbmFtZXNwYWNlICs9ICcvJztcbiAgICB9XG4gICAgcmV0dXJuIGZuKG5hbWVzcGFjZSwgbWFwKVxuICB9XG59XG5cbi8qKlxuICogU2VhcmNoIGEgc3BlY2lhbCBtb2R1bGUgZnJvbSBzdG9yZSBieSBuYW1lc3BhY2UuIGlmIG1vZHVsZSBub3QgZXhpc3QsIHByaW50IGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RvcmVcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWxwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlQnlOYW1lc3BhY2UgKHN0b3JlLCBoZWxwZXIsIG5hbWVzcGFjZSkge1xuICB2YXIgbW9kdWxlID0gc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhbW9kdWxlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gbW9kdWxlIG5hbWVzcGFjZSBub3QgZm91bmQgaW4gXCIgKyBoZWxwZXIgKyBcIigpOiBcIiArIG5hbWVzcGFjZSkpO1xuICB9XG4gIHJldHVybiBtb2R1bGVcbn1cblxuLy8gQ3JlZGl0czogYm9ycm93ZWQgY29kZSBmcm9tIGZjb21iL3JlZHV4LWxvZ2dlclxuXG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIgKHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBjb2xsYXBzZWQgPSByZWYuY29sbGFwc2VkOyBpZiAoIGNvbGxhcHNlZCA9PT0gdm9pZCAwICkgY29sbGFwc2VkID0gdHJ1ZTtcbiAgdmFyIGZpbHRlciA9IHJlZi5maWx0ZXI7IGlmICggZmlsdGVyID09PSB2b2lkIDAgKSBmaWx0ZXIgPSBmdW5jdGlvbiAobXV0YXRpb24sIHN0YXRlQmVmb3JlLCBzdGF0ZUFmdGVyKSB7IHJldHVybiB0cnVlOyB9O1xuICB2YXIgdHJhbnNmb3JtZXIgPSByZWYudHJhbnNmb3JtZXI7IGlmICggdHJhbnNmb3JtZXIgPT09IHZvaWQgMCApIHRyYW5zZm9ybWVyID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZTsgfTtcbiAgdmFyIG11dGF0aW9uVHJhbnNmb3JtZXIgPSByZWYubXV0YXRpb25UcmFuc2Zvcm1lcjsgaWYgKCBtdXRhdGlvblRyYW5zZm9ybWVyID09PSB2b2lkIDAgKSBtdXRhdGlvblRyYW5zZm9ybWVyID0gZnVuY3Rpb24gKG11dCkgeyByZXR1cm4gbXV0OyB9O1xuICB2YXIgYWN0aW9uRmlsdGVyID0gcmVmLmFjdGlvbkZpbHRlcjsgaWYgKCBhY3Rpb25GaWx0ZXIgPT09IHZvaWQgMCApIGFjdGlvbkZpbHRlciA9IGZ1bmN0aW9uIChhY3Rpb24sIHN0YXRlKSB7IHJldHVybiB0cnVlOyB9O1xuICB2YXIgYWN0aW9uVHJhbnNmb3JtZXIgPSByZWYuYWN0aW9uVHJhbnNmb3JtZXI7IGlmICggYWN0aW9uVHJhbnNmb3JtZXIgPT09IHZvaWQgMCApIGFjdGlvblRyYW5zZm9ybWVyID0gZnVuY3Rpb24gKGFjdCkgeyByZXR1cm4gYWN0OyB9O1xuICB2YXIgbG9nTXV0YXRpb25zID0gcmVmLmxvZ011dGF0aW9uczsgaWYgKCBsb2dNdXRhdGlvbnMgPT09IHZvaWQgMCApIGxvZ011dGF0aW9ucyA9IHRydWU7XG4gIHZhciBsb2dBY3Rpb25zID0gcmVmLmxvZ0FjdGlvbnM7IGlmICggbG9nQWN0aW9ucyA9PT0gdm9pZCAwICkgbG9nQWN0aW9ucyA9IHRydWU7XG4gIHZhciBsb2dnZXIgPSByZWYubG9nZ2VyOyBpZiAoIGxvZ2dlciA9PT0gdm9pZCAwICkgbG9nZ2VyID0gY29uc29sZTtcblxuICByZXR1cm4gZnVuY3Rpb24gKHN0b3JlKSB7XG4gICAgdmFyIHByZXZTdGF0ZSA9IGRlZXBDb3B5KHN0b3JlLnN0YXRlKTtcblxuICAgIGlmICh0eXBlb2YgbG9nZ2VyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGxvZ011dGF0aW9ucykge1xuICAgICAgc3RvcmUuc3Vic2NyaWJlKGZ1bmN0aW9uIChtdXRhdGlvbiwgc3RhdGUpIHtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IGRlZXBDb3B5KHN0YXRlKTtcblxuICAgICAgICBpZiAoZmlsdGVyKG11dGF0aW9uLCBwcmV2U3RhdGUsIG5leHRTdGF0ZSkpIHtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkVGltZSA9IGdldEZvcm1hdHRlZFRpbWUoKTtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkTXV0YXRpb24gPSBtdXRhdGlvblRyYW5zZm9ybWVyKG11dGF0aW9uKTtcbiAgICAgICAgICB2YXIgbWVzc2FnZSA9IFwibXV0YXRpb24gXCIgKyAobXV0YXRpb24udHlwZSkgKyBmb3JtYXR0ZWRUaW1lO1xuXG4gICAgICAgICAgc3RhcnRNZXNzYWdlKGxvZ2dlciwgbWVzc2FnZSwgY29sbGFwc2VkKTtcbiAgICAgICAgICBsb2dnZXIubG9nKCclYyBwcmV2IHN0YXRlJywgJ2NvbG9yOiAjOUU5RTlFOyBmb250LXdlaWdodDogYm9sZCcsIHRyYW5zZm9ybWVyKHByZXZTdGF0ZSkpO1xuICAgICAgICAgIGxvZ2dlci5sb2coJyVjIG11dGF0aW9uJywgJ2NvbG9yOiAjMDNBOUY0OyBmb250LXdlaWdodDogYm9sZCcsIGZvcm1hdHRlZE11dGF0aW9uKTtcbiAgICAgICAgICBsb2dnZXIubG9nKCclYyBuZXh0IHN0YXRlJywgJ2NvbG9yOiAjNENBRjUwOyBmb250LXdlaWdodDogYm9sZCcsIHRyYW5zZm9ybWVyKG5leHRTdGF0ZSkpO1xuICAgICAgICAgIGVuZE1lc3NhZ2UobG9nZ2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsb2dBY3Rpb25zKSB7XG4gICAgICBzdG9yZS5zdWJzY3JpYmVBY3Rpb24oZnVuY3Rpb24gKGFjdGlvbiwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGFjdGlvbkZpbHRlcihhY3Rpb24sIHN0YXRlKSkge1xuICAgICAgICAgIHZhciBmb3JtYXR0ZWRUaW1lID0gZ2V0Rm9ybWF0dGVkVGltZSgpO1xuICAgICAgICAgIHZhciBmb3JtYXR0ZWRBY3Rpb24gPSBhY3Rpb25UcmFuc2Zvcm1lcihhY3Rpb24pO1xuICAgICAgICAgIHZhciBtZXNzYWdlID0gXCJhY3Rpb24gXCIgKyAoYWN0aW9uLnR5cGUpICsgZm9ybWF0dGVkVGltZTtcblxuICAgICAgICAgIHN0YXJ0TWVzc2FnZShsb2dnZXIsIG1lc3NhZ2UsIGNvbGxhcHNlZCk7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnJWMgYWN0aW9uJywgJ2NvbG9yOiAjMDNBOUY0OyBmb250LXdlaWdodDogYm9sZCcsIGZvcm1hdHRlZEFjdGlvbik7XG4gICAgICAgICAgZW5kTWVzc2FnZShsb2dnZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRNZXNzYWdlIChsb2dnZXIsIG1lc3NhZ2UsIGNvbGxhcHNlZCkge1xuICB2YXIgc3RhcnRNZXNzYWdlID0gY29sbGFwc2VkXG4gICAgPyBsb2dnZXIuZ3JvdXBDb2xsYXBzZWRcbiAgICA6IGxvZ2dlci5ncm91cDtcblxuICAvLyByZW5kZXJcbiAgdHJ5IHtcbiAgICBzdGFydE1lc3NhZ2UuY2FsbChsb2dnZXIsIG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmxvZyhtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRNZXNzYWdlIChsb2dnZXIpIHtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5sb2coJ+KAlOKAlCBsb2cgZW5kIOKAlOKAlCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZFRpbWUgKCkge1xuICB2YXIgdGltZSA9IG5ldyBEYXRlKCk7XG4gIHJldHVybiAoXCIgQCBcIiArIChwYWQodGltZS5nZXRIb3VycygpLCAyKSkgKyBcIjpcIiArIChwYWQodGltZS5nZXRNaW51dGVzKCksIDIpKSArIFwiOlwiICsgKHBhZCh0aW1lLmdldFNlY29uZHMoKSwgMikpICsgXCIuXCIgKyAocGFkKHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCksIDMpKSlcbn1cblxuZnVuY3Rpb24gcmVwZWF0IChzdHIsIHRpbWVzKSB7XG4gIHJldHVybiAobmV3IEFycmF5KHRpbWVzICsgMSkpLmpvaW4oc3RyKVxufVxuXG5mdW5jdGlvbiBwYWQgKG51bSwgbWF4TGVuZ3RoKSB7XG4gIHJldHVybiByZXBlYXQoJzAnLCBtYXhMZW5ndGggLSBudW0udG9TdHJpbmcoKS5sZW5ndGgpICsgbnVtXG59XG5cbnZhciBpbmRleCA9IHtcbiAgdmVyc2lvbjogJzQuMC4yJyxcbiAgU3RvcmU6IFN0b3JlLFxuICBzdG9yZUtleTogc3RvcmVLZXksXG4gIGNyZWF0ZVN0b3JlOiBjcmVhdGVTdG9yZSxcbiAgdXNlU3RvcmU6IHVzZVN0b3JlLFxuICBtYXBTdGF0ZTogbWFwU3RhdGUsXG4gIG1hcE11dGF0aW9uczogbWFwTXV0YXRpb25zLFxuICBtYXBHZXR0ZXJzOiBtYXBHZXR0ZXJzLFxuICBtYXBBY3Rpb25zOiBtYXBBY3Rpb25zLFxuICBjcmVhdGVOYW1lc3BhY2VkSGVscGVyczogY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMsXG4gIGNyZWF0ZUxvZ2dlcjogY3JlYXRlTG9nZ2VyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBpbmRleDtcbmV4cG9ydCB7IFN0b3JlLCBjcmVhdGVMb2dnZXIsIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzLCBjcmVhdGVTdG9yZSwgbWFwQWN0aW9ucywgbWFwR2V0dGVycywgbWFwTXV0YXRpb25zLCBtYXBTdGF0ZSwgc3RvcmVLZXksIHVzZVN0b3JlIH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICBfX2RlZlByb3AodG8sIGtleSwgeyBnZXQ6ICgpID0+IGZyb21ba2V5XSwgZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGUgfSk7XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbnZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4vLyBzcmMvaW5kZXgudHNcbnZhciBzcmNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc3JjX2V4cG9ydHMsIHtcbiAgQ29tYm9ib3g6ICgpID0+IENvbWJvYm94LFxuICBDb21ib2JveEJ1dHRvbjogKCkgPT4gQ29tYm9ib3hCdXR0b24sXG4gIENvbWJvYm94SW5wdXQ6ICgpID0+IENvbWJvYm94SW5wdXQsXG4gIENvbWJvYm94TGFiZWw6ICgpID0+IENvbWJvYm94TGFiZWwsXG4gIENvbWJvYm94T3B0aW9uOiAoKSA9PiBDb21ib2JveE9wdGlvbixcbiAgQ29tYm9ib3hPcHRpb25zOiAoKSA9PiBDb21ib2JveE9wdGlvbnMsXG4gIERpYWxvZzogKCkgPT4gRGlhbG9nLFxuICBEaWFsb2dCYWNrZHJvcDogKCkgPT4gRGlhbG9nQmFja2Ryb3AsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uOiAoKSA9PiBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nT3ZlcmxheTogKCkgPT4gRGlhbG9nT3ZlcmxheSxcbiAgRGlhbG9nUGFuZWw6ICgpID0+IERpYWxvZ1BhbmVsLFxuICBEaWFsb2dUaXRsZTogKCkgPT4gRGlhbG9nVGl0bGUsXG4gIERpc2Nsb3N1cmU6ICgpID0+IERpc2Nsb3N1cmUsXG4gIERpc2Nsb3N1cmVCdXR0b246ICgpID0+IERpc2Nsb3N1cmVCdXR0b24sXG4gIERpc2Nsb3N1cmVQYW5lbDogKCkgPT4gRGlzY2xvc3VyZVBhbmVsLFxuICBGb2N1c1RyYXA6ICgpID0+IEZvY3VzVHJhcCxcbiAgTGlzdGJveDogKCkgPT4gTGlzdGJveCxcbiAgTGlzdGJveEJ1dHRvbjogKCkgPT4gTGlzdGJveEJ1dHRvbixcbiAgTGlzdGJveExhYmVsOiAoKSA9PiBMaXN0Ym94TGFiZWwsXG4gIExpc3Rib3hPcHRpb246ICgpID0+IExpc3Rib3hPcHRpb24sXG4gIExpc3Rib3hPcHRpb25zOiAoKSA9PiBMaXN0Ym94T3B0aW9ucyxcbiAgTWVudTogKCkgPT4gTWVudSxcbiAgTWVudUJ1dHRvbjogKCkgPT4gTWVudUJ1dHRvbixcbiAgTWVudUl0ZW06ICgpID0+IE1lbnVJdGVtLFxuICBNZW51SXRlbXM6ICgpID0+IE1lbnVJdGVtcyxcbiAgUG9wb3ZlcjogKCkgPT4gUG9wb3ZlcixcbiAgUG9wb3ZlckJ1dHRvbjogKCkgPT4gUG9wb3ZlckJ1dHRvbixcbiAgUG9wb3Zlckdyb3VwOiAoKSA9PiBQb3BvdmVyR3JvdXAsXG4gIFBvcG92ZXJPdmVybGF5OiAoKSA9PiBQb3BvdmVyT3ZlcmxheSxcbiAgUG9wb3ZlclBhbmVsOiAoKSA9PiBQb3BvdmVyUGFuZWwsXG4gIFBvcnRhbDogKCkgPT4gUG9ydGFsLFxuICBQb3J0YWxHcm91cDogKCkgPT4gUG9ydGFsR3JvdXAsXG4gIFJhZGlvR3JvdXA6ICgpID0+IFJhZGlvR3JvdXAsXG4gIFJhZGlvR3JvdXBEZXNjcmlwdGlvbjogKCkgPT4gUmFkaW9Hcm91cERlc2NyaXB0aW9uLFxuICBSYWRpb0dyb3VwTGFiZWw6ICgpID0+IFJhZGlvR3JvdXBMYWJlbCxcbiAgUmFkaW9Hcm91cE9wdGlvbjogKCkgPT4gUmFkaW9Hcm91cE9wdGlvbixcbiAgU3dpdGNoOiAoKSA9PiBTd2l0Y2gsXG4gIFN3aXRjaERlc2NyaXB0aW9uOiAoKSA9PiBTd2l0Y2hEZXNjcmlwdGlvbixcbiAgU3dpdGNoR3JvdXA6ICgpID0+IFN3aXRjaEdyb3VwLFxuICBTd2l0Y2hMYWJlbDogKCkgPT4gU3dpdGNoTGFiZWwsXG4gIFRhYjogKCkgPT4gVGFiLFxuICBUYWJHcm91cDogKCkgPT4gVGFiR3JvdXAsXG4gIFRhYkxpc3Q6ICgpID0+IFRhYkxpc3QsXG4gIFRhYlBhbmVsOiAoKSA9PiBUYWJQYW5lbCxcbiAgVGFiUGFuZWxzOiAoKSA9PiBUYWJQYW5lbHMsXG4gIFRyYW5zaXRpb25DaGlsZDogKCkgPT4gVHJhbnNpdGlvbkNoaWxkLFxuICBUcmFuc2l0aW9uUm9vdDogKCkgPT4gVHJhbnNpdGlvblJvb3Rcbn0pO1xubW9kdWxlLmV4cG9ydHMgPSBfX3RvQ29tbW9uSlMoc3JjX2V4cG9ydHMpO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC50c1xudmFyIGltcG9ydF92dWU4ID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL3V0aWxzL3JlbmRlci50c1xudmFyIGltcG9ydF92dWUgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvdXRpbHMvbWF0Y2gudHNcbmZ1bmN0aW9uIG1hdGNoKHZhbHVlLCBsb29rdXAsIC4uLmFyZ3MpIHtcbiAgaWYgKHZhbHVlIGluIGxvb2t1cCkge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IGxvb2t1cFt2YWx1ZV07XG4gICAgcmV0dXJuIHR5cGVvZiByZXR1cm5WYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gcmV0dXJuVmFsdWUoLi4uYXJncykgOiByZXR1cm5WYWx1ZTtcbiAgfVxuICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoYFRyaWVkIHRvIGhhbmRsZSBcIiR7dmFsdWV9XCIgYnV0IHRoZXJlIGlzIG5vIGhhbmRsZXIgZGVmaW5lZC4gT25seSBkZWZpbmVkIGhhbmRsZXJzIGFyZTogJHtPYmplY3Qua2V5cyhsb29rdXApLm1hcCgoa2V5KSA9PiBgXCIke2tleX1cImApLmpvaW4oXCIsIFwiKX0uYCk7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgbWF0Y2gpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gc3JjL3V0aWxzL3JlbmRlci50c1xuZnVuY3Rpb24gcmVuZGVyKHtcbiAgdmlzaWJsZSA9IHRydWUsXG4gIGZlYXR1cmVzID0gMCAvKiBOb25lICovLFxuICBvdXJQcm9wcyxcbiAgdGhlaXJQcm9wcyxcbiAgLi4ubWFpblxufSkge1xuICB2YXIgX2E7XG4gIGxldCBwcm9wcyA9IG1lcmdlUHJvcHModGhlaXJQcm9wcywgb3VyUHJvcHMpO1xuICBsZXQgbWFpbldpdGhQcm9wcyA9IE9iamVjdC5hc3NpZ24obWFpbiwgeyBwcm9wcyB9KTtcbiAgaWYgKHZpc2libGUpXG4gICAgcmV0dXJuIF9yZW5kZXIobWFpbldpdGhQcm9wcyk7XG4gIGlmIChmZWF0dXJlcyAmIDIgLyogU3RhdGljICovKSB7XG4gICAgaWYgKHByb3BzLnN0YXRpYylcbiAgICAgIHJldHVybiBfcmVuZGVyKG1haW5XaXRoUHJvcHMpO1xuICB9XG4gIGlmIChmZWF0dXJlcyAmIDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8pIHtcbiAgICBsZXQgc3RyYXRlZ3kgPSAoKF9hID0gcHJvcHMudW5tb3VudCkgIT0gbnVsbCA/IF9hIDogdHJ1ZSkgPyAwIC8qIFVubW91bnQgKi8gOiAxIC8qIEhpZGRlbiAqLztcbiAgICByZXR1cm4gbWF0Y2goc3RyYXRlZ3ksIHtcbiAgICAgIFswIC8qIFVubW91bnQgKi9dKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBbMSAvKiBIaWRkZW4gKi9dKCkge1xuICAgICAgICByZXR1cm4gX3JlbmRlcih7XG4gICAgICAgICAgLi4ubWFpbixcbiAgICAgICAgICBwcm9wczogeyAuLi5wcm9wcywgaGlkZGVuOiB0cnVlLCBzdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9IH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIF9yZW5kZXIobWFpbldpdGhQcm9wcyk7XG59XG5mdW5jdGlvbiBfcmVuZGVyKHtcbiAgcHJvcHMsXG4gIGF0dHJzLFxuICBzbG90cyxcbiAgc2xvdCxcbiAgbmFtZVxufSkge1xuICB2YXIgX2E7XG4gIGxldCB7IGFzLCAuLi5pbmNvbWluZ1Byb3BzIH0gPSBvbWl0KHByb3BzLCBbXCJ1bm1vdW50XCIsIFwic3RhdGljXCJdKTtcbiAgbGV0IGNoaWxkcmVuID0gKF9hID0gc2xvdHMuZGVmYXVsdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwoc2xvdHMsIHNsb3QpO1xuICBsZXQgZGF0YUF0dHJpYnV0ZXMgPSB7fTtcbiAgaWYgKGFzID09PSBcInRlbXBsYXRlXCIpIHtcbiAgICBjaGlsZHJlbiA9IGZsYXR0ZW5GcmFnbWVudHMoY2hpbGRyZW4pO1xuICAgIGlmIChPYmplY3Qua2V5cyhpbmNvbWluZ1Byb3BzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKGF0dHJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgW2ZpcnN0Q2hpbGQsIC4uLm90aGVyXSA9IGNoaWxkcmVuICE9IG51bGwgPyBjaGlsZHJlbiA6IFtdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChmaXJzdENoaWxkKSB8fCBvdGhlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihbXG4gICAgICAgICAgJ1Bhc3NpbmcgcHJvcHMgb24gXCJ0ZW1wbGF0ZVwiIScsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICBgVGhlIGN1cnJlbnQgY29tcG9uZW50IDwke25hbWV9IC8+IGlzIHJlbmRlcmluZyBhIFwidGVtcGxhdGVcIi5gLFxuICAgICAgICAgIGBIb3dldmVyIHdlIG5lZWQgdG8gcGFzc3Rocm91Z2ggdGhlIGZvbGxvd2luZyBwcm9wczpgLFxuICAgICAgICAgIE9iamVjdC5rZXlzKGluY29taW5nUHJvcHMpLmNvbmNhdChPYmplY3Qua2V5cyhhdHRycykpLnNvcnQoKGEsIHopID0+IGEubG9jYWxlQ29tcGFyZSh6KSkubWFwKChsaW5lKSA9PiBgICAtICR7bGluZX1gKS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgXCJZb3UgY2FuIGFwcGx5IGEgZmV3IHNvbHV0aW9uczpcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnQWRkIGFuIGBhcz1cIi4uLlwiYCBwcm9wLCB0byBlbnN1cmUgdGhhdCB3ZSByZW5kZXIgYW4gYWN0dWFsIGVsZW1lbnQgaW5zdGVhZCBvZiBhIFwidGVtcGxhdGVcIi4nLFxuICAgICAgICAgICAgXCJSZW5kZXIgYSBzaW5nbGUgZWxlbWVudCBhcyB0aGUgY2hpbGQgc28gdGhhdCB3ZSBjYW4gZm9yd2FyZCB0aGUgcHJvcHMgb250byB0aGF0IGVsZW1lbnQuXCJcbiAgICAgICAgICBdLm1hcCgobGluZSkgPT4gYCAgLSAke2xpbmV9YCkuam9pbihcIlxcblwiKVxuICAgICAgICBdLmpvaW4oXCJcXG5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlLmNsb25lVk5vZGUpKGZpcnN0Q2hpbGQsIE9iamVjdC5hc3NpZ24oe30sIGluY29taW5nUHJvcHMsIGRhdGFBdHRyaWJ1dGVzKSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlblswXTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHJldHVybiAoMCwgaW1wb3J0X3Z1ZS5oKShhcywgT2JqZWN0LmFzc2lnbih7fSwgaW5jb21pbmdQcm9wcywgZGF0YUF0dHJpYnV0ZXMpLCBjaGlsZHJlbik7XG59XG5mdW5jdGlvbiBmbGF0dGVuRnJhZ21lbnRzKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbi5mbGF0TWFwKChjaGlsZCkgPT4ge1xuICAgIGlmIChjaGlsZC50eXBlID09PSBpbXBvcnRfdnVlLkZyYWdtZW50KSB7XG4gICAgICByZXR1cm4gZmxhdHRlbkZyYWdtZW50cyhjaGlsZC5jaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBbY2hpbGRdO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoLi4ubGlzdE9mUHJvcHMpIHtcbiAgdmFyIF9hO1xuICBpZiAobGlzdE9mUHJvcHMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiB7fTtcbiAgaWYgKGxpc3RPZlByb3BzLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gbGlzdE9mUHJvcHNbMF07XG4gIGxldCB0YXJnZXQgPSB7fTtcbiAgbGV0IGV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgZm9yIChsZXQgcHJvcHMgb2YgbGlzdE9mUHJvcHMpIHtcbiAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7XG4gICAgICBpZiAocHJvcC5zdGFydHNXaXRoKFwib25cIikgJiYgdHlwZW9mIHByb3BzW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgKF9hID0gZXZlbnRIYW5kbGVyc1twcm9wXSkgIT0gbnVsbCA/IF9hIDogZXZlbnRIYW5kbGVyc1twcm9wXSA9IFtdO1xuICAgICAgICBldmVudEhhbmRsZXJzW3Byb3BdLnB1c2gocHJvcHNbcHJvcF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh0YXJnZXQuZGlzYWJsZWQgfHwgdGFyZ2V0W1wiYXJpYS1kaXNhYmxlZFwiXSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRhcmdldCwgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGV2ZW50SGFuZGxlcnMpLm1hcCgoZXZlbnROYW1lKSA9PiBbZXZlbnROYW1lLCB2b2lkIDBdKSkpO1xuICB9XG4gIGZvciAobGV0IGV2ZW50TmFtZSBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHtcbiAgICAgIFtldmVudE5hbWVdKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBoYW5kbGVycyA9IGV2ZW50SGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICAgICAgZm9yIChsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICAgIGlmIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50LCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBjb21wYWN0KG9iamVjdCkge1xuICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBvYmplY3QpO1xuICBmb3IgKGxldCBrZXkgaW4gY2xvbmUpIHtcbiAgICBpZiAoY2xvbmVba2V5XSA9PT0gdm9pZCAwKVxuICAgICAgZGVsZXRlIGNsb25lW2tleV07XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXNUb09taXQgPSBbXSkge1xuICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBvYmplY3QpO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5c1RvT21pdCkge1xuICAgIGlmIChrZXkgaW4gY2xvbmUpXG4gICAgICBkZWxldGUgY2xvbmVba2V5XTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChpbnB1dCkge1xuICBpZiAoaW5wdXQgPT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgaW5wdXQudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBpbnB1dC50eXBlID09PSBcIm9iamVjdFwiKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAodHlwZW9mIGlucHV0LnR5cGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBzcmMvaG9va3MvdXNlLWlkLnRzXG52YXIgaWQgPSAwO1xuZnVuY3Rpb24gZ2VuZXJhdGVJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5mdW5jdGlvbiB1c2VJZCgpIHtcbiAgcmV0dXJuIGdlbmVyYXRlSWQoKTtcbn1cblxuLy8gc3JjL3V0aWxzL2NhbGN1bGF0ZS1hY3RpdmUtaW5kZXgudHNcbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBvYmplY3Q6IFwiICsgeCk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVBY3RpdmVJbmRleChhY3Rpb24sIHJlc29sdmVycykge1xuICBsZXQgaXRlbXMgPSByZXNvbHZlcnMucmVzb2x2ZUl0ZW1zKCk7XG4gIGlmIChpdGVtcy5sZW5ndGggPD0gMClcbiAgICByZXR1cm4gbnVsbDtcbiAgbGV0IGN1cnJlbnRBY3RpdmVJbmRleCA9IHJlc29sdmVycy5yZXNvbHZlQWN0aXZlSW5kZXgoKTtcbiAgbGV0IGFjdGl2ZUluZGV4ID0gY3VycmVudEFjdGl2ZUluZGV4ICE9IG51bGwgPyBjdXJyZW50QWN0aXZlSW5kZXggOiAtMTtcbiAgbGV0IG5leHRBY3RpdmVJbmRleCA9ICgoKSA9PiB7XG4gICAgc3dpdGNoIChhY3Rpb24uZm9jdXMpIHtcbiAgICAgIGNhc2UgMCAvKiBGaXJzdCAqLzpcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gIXJlc29sdmVycy5yZXNvbHZlRGlzYWJsZWQoaXRlbSkpO1xuICAgICAgY2FzZSAxIC8qIFByZXZpb3VzICovOiB7XG4gICAgICAgIGxldCBpZHggPSBpdGVtcy5zbGljZSgpLnJldmVyc2UoKS5maW5kSW5kZXgoKGl0ZW0sIGlkeDIsIGFsbCkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmVJbmRleCAhPT0gLTEgJiYgYWxsLmxlbmd0aCAtIGlkeDIgLSAxID49IGFjdGl2ZUluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIHJldHVybiAhcmVzb2x2ZXJzLnJlc29sdmVEaXNhYmxlZChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGggLSAxIC0gaWR4O1xuICAgICAgfVxuICAgICAgY2FzZSAyIC8qIE5leHQgKi86XG4gICAgICAgIHJldHVybiBpdGVtcy5maW5kSW5kZXgoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgICAgIGlmIChpZHggPD0gYWN0aXZlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuICFyZXNvbHZlcnMucmVzb2x2ZURpc2FibGVkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgMyAvKiBMYXN0ICovOiB7XG4gICAgICAgIGxldCBpZHggPSBpdGVtcy5zbGljZSgpLnJldmVyc2UoKS5maW5kSW5kZXgoKGl0ZW0pID0+ICFyZXNvbHZlcnMucmVzb2x2ZURpc2FibGVkKGl0ZW0pKTtcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpXG4gICAgICAgICAgcmV0dXJuIGlkeDtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCAtIDEgLSBpZHg7XG4gICAgICB9XG4gICAgICBjYXNlIDQgLyogU3BlY2lmaWMgKi86XG4gICAgICAgIHJldHVybiBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IHJlc29sdmVycy5yZXNvbHZlSWQoaXRlbSkgPT09IGFjdGlvbi5pZCk7XG4gICAgICBjYXNlIDUgLyogTm90aGluZyAqLzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcihhY3Rpb24pO1xuICAgIH1cbiAgfSkoKTtcbiAgcmV0dXJuIG5leHRBY3RpdmVJbmRleCA9PT0gLTEgPyBjdXJyZW50QWN0aXZlSW5kZXggOiBuZXh0QWN0aXZlSW5kZXg7XG59XG5cbi8vIHNyYy91dGlscy9kb20udHNcbmZ1bmN0aW9uIGRvbShyZWYxOSkge1xuICB2YXIgX2E7XG4gIGlmIChyZWYxOSA9PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAocmVmMTkudmFsdWUgPT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChfYSA9IHJlZjE5LnZhbHVlLiRlbCkgIT0gbnVsbCA/IF9hIDogcmVmMTkudmFsdWU7XG59XG5cbi8vIHNyYy9pbnRlcm5hbC9vcGVuLWNsb3NlZC50c1xudmFyIGltcG9ydF92dWUyID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBDb250ZXh0ID0gU3ltYm9sKFwiQ29udGV4dFwiKTtcbmZ1bmN0aW9uIGhhc09wZW5DbG9zZWQoKSB7XG4gIHJldHVybiB1c2VPcGVuQ2xvc2VkKCkgIT09IG51bGw7XG59XG5mdW5jdGlvbiB1c2VPcGVuQ2xvc2VkKCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUyLmluamVjdCkoQ29udGV4dCwgbnVsbCk7XG59XG5mdW5jdGlvbiB1c2VPcGVuQ2xvc2VkUHJvdmlkZXIodmFsdWUpIHtcbiAgKDAsIGltcG9ydF92dWUyLnByb3ZpZGUpKENvbnRleHQsIHZhbHVlKTtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS1yZXNvbHZlLWJ1dHRvbi10eXBlLnRzXG52YXIgaW1wb3J0X3Z1ZTMgPSByZXF1aXJlKFwidnVlXCIpO1xuZnVuY3Rpb24gcmVzb2x2ZVR5cGUodHlwZSwgYXMpIHtcbiAgaWYgKHR5cGUpXG4gICAgcmV0dXJuIHR5cGU7XG4gIGxldCB0YWcgPSBhcyAhPSBudWxsID8gYXMgOiBcImJ1dHRvblwiO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gXCJzdHJpbmdcIiAmJiB0YWcudG9Mb3dlckNhc2UoKSA9PT0gXCJidXR0b25cIilcbiAgICByZXR1cm4gXCJidXR0b25cIjtcbiAgcmV0dXJuIHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHVzZVJlc29sdmVCdXR0b25UeXBlKGRhdGEsIHJlZkVsZW1lbnQpIHtcbiAgbGV0IHR5cGUgPSAoMCwgaW1wb3J0X3Z1ZTMucmVmKShyZXNvbHZlVHlwZShkYXRhLnZhbHVlLnR5cGUsIGRhdGEudmFsdWUuYXMpKTtcbiAgKDAsIGltcG9ydF92dWUzLm9uTW91bnRlZCkoKCkgPT4ge1xuICAgIHR5cGUudmFsdWUgPSByZXNvbHZlVHlwZShkYXRhLnZhbHVlLnR5cGUsIGRhdGEudmFsdWUuYXMpO1xuICB9KTtcbiAgKDAsIGltcG9ydF92dWUzLndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0eXBlLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghZG9tKHJlZkVsZW1lbnQpKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChkb20ocmVmRWxlbWVudCkgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiAhKChfYSA9IGRvbShyZWZFbGVtZW50KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmhhc0F0dHJpYnV0ZShcInR5cGVcIikpKSB7XG4gICAgICB0eXBlLnZhbHVlID0gXCJidXR0b25cIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS10cmVlLXdhbGtlci50c1xudmFyIGltcG9ydF92dWU0ID0gcmVxdWlyZShcInZ1ZVwiKTtcblxuLy8gc3JjL3V0aWxzL293bmVyLnRzXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50KGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgcmV0dXJuIG51bGw7XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTm9kZSlcbiAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICBpZiAoZWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogZWxlbWVudC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpKSB7XG4gICAgbGV0IGRvbUVsZW1lbnQgPSBkb20oZWxlbWVudCk7XG4gICAgaWYgKGRvbUVsZW1lbnQpXG4gICAgICByZXR1cm4gZG9tRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS10cmVlLXdhbGtlci50c1xuZnVuY3Rpb24gdXNlVHJlZVdhbGtlcih7XG4gIGNvbnRhaW5lcixcbiAgYWNjZXB0LFxuICB3YWxrLFxuICBlbmFibGVkXG59KSB7XG4gICgwLCBpbXBvcnRfdnVlNC53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgIGxldCByb290ID0gY29udGFpbmVyLnZhbHVlO1xuICAgIGlmICghcm9vdClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZW5hYmxlZCAhPT0gdm9pZCAwICYmICFlbmFibGVkLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudChjb250YWluZXIpO1xuICAgIGlmICghb3duZXJEb2N1bWVudClcbiAgICAgIHJldHVybjtcbiAgICBsZXQgYWNjZXB0Tm9kZSA9IE9iamVjdC5hc3NpZ24oKG5vZGUpID0+IGFjY2VwdChub2RlKSwgeyBhY2NlcHROb2RlOiBhY2NlcHQgfSk7XG4gICAgbGV0IHdhbGtlciA9IG93bmVyRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyb290LCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwgYWNjZXB0Tm9kZSwgZmFsc2UpO1xuICAgIHdoaWxlICh3YWxrZXIubmV4dE5vZGUoKSlcbiAgICAgIHdhbGsod2Fsa2VyLmN1cnJlbnROb2RlKTtcbiAgfSk7XG59XG5cbi8vIHNyYy91dGlscy9mb2N1cy1tYW5hZ2VtZW50LnRzXG52YXIgZm9jdXNhYmxlU2VsZWN0b3IgPSBbXG4gIFwiW2NvbnRlbnRFZGl0YWJsZT10cnVlXVwiLFxuICBcIlt0YWJpbmRleF1cIixcbiAgXCJhW2hyZWZdXCIsXG4gIFwiYXJlYVtocmVmXVwiLFxuICBcImJ1dHRvbjpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJpbnB1dDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCJcbl0ubWFwKGZhbHNlID8gKHNlbGVjdG9yKSA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleD0nLTEnXSk6bm90KFtzdHlsZSo9J2Rpc3BsYXk6IG5vbmUnXSlgIDogKHNlbGVjdG9yKSA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleD0nLTEnXSlgKS5qb2luKFwiLFwiKTtcbmZ1bmN0aW9uIGdldEZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHkpIHtcbiAgaWYgKGNvbnRhaW5lciA9PSBudWxsKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoZm9jdXNhYmxlU2VsZWN0b3IpKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlRWxlbWVudChlbGVtZW50LCBtb2RlID0gMCAvKiBTdHJpY3QgKi8pIHtcbiAgdmFyIF9hO1xuICBpZiAoZWxlbWVudCA9PT0gKChfYSA9IGdldE93bmVyRG9jdW1lbnQoZWxlbWVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5ib2R5KSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtYXRjaChtb2RlLCB7XG4gICAgWzAgLyogU3RyaWN0ICovXSgpIHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoZm9jdXNhYmxlU2VsZWN0b3IpO1xuICAgIH0sXG4gICAgWzEgLyogTG9vc2UgKi9dKCkge1xuICAgICAgbGV0IG5leHQgPSBlbGVtZW50O1xuICAgICAgd2hpbGUgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQubWF0Y2hlcyhmb2N1c2FibGVTZWxlY3RvcikpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGZvY3VzRWxlbWVudChlbGVtZW50KSB7XG4gIGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xufVxudmFyIHNlbGVjdGFibGVTZWxlY3RvciA9IFtcInRleHRhcmVhXCIsIFwiaW5wdXRcIl0uam9pbihcIixcIik7XG5mdW5jdGlvbiBpc1NlbGVjdGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIF9hLCBfYjtcbiAgcmV0dXJuIChfYiA9IChfYSA9IGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQubWF0Y2hlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwoZWxlbWVudCwgc2VsZWN0YWJsZVNlbGVjdG9yKSkgIT0gbnVsbCA/IF9iIDogZmFsc2U7XG59XG5mdW5jdGlvbiBzb3J0QnlEb21Ob2RlKG5vZGVzLCByZXNvbHZlS2V5ID0gKGkpID0+IGkpIHtcbiAgcmV0dXJuIG5vZGVzLnNsaWNlKCkuc29ydCgoYUl0ZW0sIHpJdGVtKSA9PiB7XG4gICAgbGV0IGEgPSByZXNvbHZlS2V5KGFJdGVtKTtcbiAgICBsZXQgeiA9IHJlc29sdmVLZXkoekl0ZW0pO1xuICAgIGlmIChhID09PSBudWxsIHx8IHogPT09IG51bGwpXG4gICAgICByZXR1cm4gMDtcbiAgICBsZXQgcG9zaXRpb24gPSBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHopO1xuICAgIGlmIChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKVxuICAgICAgcmV0dXJuIC0xO1xuICAgIGlmIChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKVxuICAgICAgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuZnVuY3Rpb24gZm9jdXNJbihjb250YWluZXIsIGZvY3VzLCBzb3J0ZWQgPSB0cnVlKSB7XG4gIHZhciBfYTtcbiAgbGV0IG93bmVyRG9jdW1lbnQgPSAoX2EgPSBBcnJheS5pc0FycmF5KGNvbnRhaW5lcikgPyBjb250YWluZXIubGVuZ3RoID4gMCA/IGNvbnRhaW5lclswXS5vd25lckRvY3VtZW50IDogZG9jdW1lbnQgOiBjb250YWluZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRhaW5lci5vd25lckRvY3VtZW50KSAhPSBudWxsID8gX2EgOiBkb2N1bWVudDtcbiAgbGV0IGVsZW1lbnRzID0gQXJyYXkuaXNBcnJheShjb250YWluZXIpID8gc29ydGVkID8gc29ydEJ5RG9tTm9kZShjb250YWluZXIpIDogY29udGFpbmVyIDogZ2V0Rm9jdXNhYmxlRWxlbWVudHMoY29udGFpbmVyKTtcbiAgbGV0IGFjdGl2ZSA9IG93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgbGV0IGRpcmVjdGlvbiA9ICgoKSA9PiB7XG4gICAgaWYgKGZvY3VzICYgKDEgLyogRmlyc3QgKi8gfCA0IC8qIE5leHQgKi8pKVxuICAgICAgcmV0dXJuIDEgLyogTmV4dCAqLztcbiAgICBpZiAoZm9jdXMgJiAoMiAvKiBQcmV2aW91cyAqLyB8IDggLyogTGFzdCAqLykpXG4gICAgICByZXR1cm4gLTEgLyogUHJldmlvdXMgKi87XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBGb2N1cy5GaXJzdCwgRm9jdXMuUHJldmlvdXMsIEZvY3VzLk5leHQgb3IgRm9jdXMuTGFzdFwiKTtcbiAgfSkoKTtcbiAgbGV0IHN0YXJ0SW5kZXggPSAoKCkgPT4ge1xuICAgIGlmIChmb2N1cyAmIDEgLyogRmlyc3QgKi8pXG4gICAgICByZXR1cm4gMDtcbiAgICBpZiAoZm9jdXMgJiAyIC8qIFByZXZpb3VzICovKVxuICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGVsZW1lbnRzLmluZGV4T2YoYWN0aXZlKSkgLSAxO1xuICAgIGlmIChmb2N1cyAmIDQgLyogTmV4dCAqLylcbiAgICAgIHJldHVybiBNYXRoLm1heCgwLCBlbGVtZW50cy5pbmRleE9mKGFjdGl2ZSkpICsgMTtcbiAgICBpZiAoZm9jdXMgJiA4IC8qIExhc3QgKi8pXG4gICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIEZvY3VzLkZpcnN0LCBGb2N1cy5QcmV2aW91cywgRm9jdXMuTmV4dCBvciBGb2N1cy5MYXN0XCIpO1xuICB9KSgpO1xuICBsZXQgZm9jdXNPcHRpb25zID0gZm9jdXMgJiAzMiAvKiBOb1Njcm9sbCAqLyA/IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9IDoge307XG4gIGxldCBvZmZzZXQgPSAwO1xuICBsZXQgdG90YWwgPSBlbGVtZW50cy5sZW5ndGg7XG4gIGxldCBuZXh0ID0gdm9pZCAwO1xuICBkbyB7XG4gICAgaWYgKG9mZnNldCA+PSB0b3RhbCB8fCBvZmZzZXQgKyB0b3RhbCA8PSAwKVxuICAgICAgcmV0dXJuIDAgLyogRXJyb3IgKi87XG4gICAgbGV0IG5leHRJZHggPSBzdGFydEluZGV4ICsgb2Zmc2V0O1xuICAgIGlmIChmb2N1cyAmIDE2IC8qIFdyYXBBcm91bmQgKi8pIHtcbiAgICAgIG5leHRJZHggPSAobmV4dElkeCArIHRvdGFsKSAlIHRvdGFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV4dElkeCA8IDApXG4gICAgICAgIHJldHVybiAzIC8qIFVuZGVyZmxvdyAqLztcbiAgICAgIGlmIChuZXh0SWR4ID49IHRvdGFsKVxuICAgICAgICByZXR1cm4gMSAvKiBPdmVyZmxvdyAqLztcbiAgICB9XG4gICAgbmV4dCA9IGVsZW1lbnRzW25leHRJZHhdO1xuICAgIG5leHQgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICBvZmZzZXQgKz0gZGlyZWN0aW9uO1xuICB9IHdoaWxlIChuZXh0ICE9PSBvd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICBpZiAoIW5leHQuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIikpXG4gICAgbmV4dC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIjBcIik7XG4gIGlmIChmb2N1cyAmICg0IC8qIE5leHQgKi8gfCAyIC8qIFByZXZpb3VzICovKSAmJiBpc1NlbGVjdGFibGVFbGVtZW50KG5leHQpKSB7XG4gICAgbmV4dC5zZWxlY3QoKTtcbiAgfVxuICByZXR1cm4gMiAvKiBTdWNjZXNzICovO1xufVxuXG4vLyBzcmMvaG9va3MvdXNlLXdpbmRvdy1ldmVudC50c1xudmFyIGltcG9ydF92dWU1ID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIHVzZVdpbmRvd0V2ZW50KHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKVxuICAgIHJldHVybjtcbiAgKDAsIGltcG9ydF92dWU1LndhdGNoRWZmZWN0KSgob25JbnZhbGlkYXRlKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIG9uSW52YWxpZGF0ZSgoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykpO1xuICB9KTtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS1vdXRzaWRlLWNsaWNrLnRzXG52YXIgaW1wb3J0X3Z1ZTYgPSByZXF1aXJlKFwidnVlXCIpO1xuZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNvbnRhaW5lcnMsIGNiLCBlbmFibGVkID0gKDAsIGltcG9ydF92dWU2LmNvbXB1dGVkKSgoKSA9PiB0cnVlKSkge1xuICBmdW5jdGlvbiBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQsIHJlc29sdmVUYXJnZXQpIHtcbiAgICBpZiAoIWVuYWJsZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICByZXR1cm47XG4gICAgbGV0IHRhcmdldCA9IHJlc29sdmVUYXJnZXQoZXZlbnQpO1xuICAgIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIHJldHVybjtcbiAgICBsZXQgX2NvbnRhaW5lcnMgPSBmdW5jdGlvbiByZXNvbHZlKGNvbnRhaW5lcnMyKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbnRhaW5lcnMyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoY29udGFpbmVyczIoKSk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250YWluZXJzMikpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcnMyO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5lcnMyIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXJzMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbY29udGFpbmVyczJdO1xuICAgIH0oY29udGFpbmVycyk7XG4gICAgZm9yIChsZXQgY29udGFpbmVyIG9mIF9jb250YWluZXJzKSB7XG4gICAgICBpZiAoY29udGFpbmVyID09PSBudWxsKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGxldCBkb21Ob2RlID0gY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBjb250YWluZXIgOiBkb20oY29udGFpbmVyKTtcbiAgICAgIGlmIChkb21Ob2RlID09IG51bGwgPyB2b2lkIDAgOiBkb21Ob2RlLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRm9jdXNhYmxlRWxlbWVudCh0YXJnZXQsIDEgLyogTG9vc2UgKi8pICYmIHRhcmdldC50YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiBjYihldmVudCwgdGFyZ2V0KTtcbiAgfVxuICB1c2VXaW5kb3dFdmVudChcImNsaWNrXCIsIChldmVudCkgPT4gaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50LCAoZXZlbnQyKSA9PiBldmVudDIudGFyZ2V0KSwgdHJ1ZSk7XG4gIHVzZVdpbmRvd0V2ZW50KFwiYmx1clwiLCAoZXZlbnQpID0+IGhhbmRsZU91dHNpZGVDbGljayhldmVudCwgKCkgPT4gd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCA/IHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbCksIHRydWUpO1xufVxuXG4vLyBzcmMvaW50ZXJuYWwvaGlkZGVuLnRzXG52YXIgaW1wb3J0X3Z1ZTcgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEhpZGRlbiA9ICgwLCBpbXBvcnRfdnVlNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJIaWRkZW5cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgZmVhdHVyZXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIC8qIE5vbmUgKi8gfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBmZWF0dXJlcywgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogKGZlYXR1cmVzICYgMiAvKiBGb2N1c2FibGUgKi8pID09PSAyIC8qIEZvY3VzYWJsZSAqLyA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICBtYXJnaW46IC0xLFxuICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgIGNsaXA6IFwicmVjdCgwLCAwLCAwLCAwKVwiLFxuICAgICAgICAgIHdoaXRlU3BhY2U6IFwibm93cmFwXCIsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IFwiMFwiLFxuICAgICAgICAgIC4uLihmZWF0dXJlcyAmIDQgLyogSGlkZGVuICovKSA9PT0gNCAvKiBIaWRkZW4gKi8gJiYgISgoZmVhdHVyZXMgJiAyIC8qIEZvY3VzYWJsZSAqLykgPT09IDIgLyogRm9jdXNhYmxlICovKSAmJiB7IGRpc3BsYXk6IFwibm9uZVwiIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdDoge30sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJIaWRkZW5cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy91dGlscy9mb3JtLnRzXG5mdW5jdGlvbiBvYmplY3RUb0Zvcm1FbnRyaWVzKHNvdXJjZSA9IHt9LCBwYXJlbnRLZXkgPSBudWxsLCBlbnRyaWVzID0gW10pIHtcbiAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICBhcHBlbmQoZW50cmllcywgY29tcG9zZUtleShwYXJlbnRLZXksIGtleSksIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIGNvbXBvc2VLZXkocGFyZW50LCBrZXkpIHtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudCArIFwiW1wiICsga2V5ICsgXCJdXCIgOiBrZXk7XG59XG5mdW5jdGlvbiBhcHBlbmQoZW50cmllcywga2V5LCB2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGxldCBbc3Via2V5LCBzdWJ2YWx1ZV0gb2YgdmFsdWUuZW50cmllcygpKSB7XG4gICAgICBhcHBlbmQoZW50cmllcywgY29tcG9zZUtleShrZXksIHN1YmtleS50b1N0cmluZygpKSwgc3VidmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWUudG9JU09TdHJpbmcoKV0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWUgPyBcIjFcIiA6IFwiMFwiXSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIGAke3ZhbHVlfWBdKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIFwiXCJdKTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RUb0Zvcm1FbnRyaWVzKHZhbHVlLCBrZXksIGVudHJpZXMpO1xuICB9XG59XG5mdW5jdGlvbiBhdHRlbXB0U3VibWl0KGVsZW1lbnQpIHtcbiAgdmFyIF9hO1xuICBsZXQgZm9ybSA9IChfYSA9IGVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW1lbnQuZm9ybSkgIT0gbnVsbCA/IF9hIDogZWxlbWVudC5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgaWYgKCFmb3JtKVxuICAgIHJldHVybjtcbiAgZm9yIChsZXQgZWxlbWVudDIgb2YgZm9ybS5lbGVtZW50cykge1xuICAgIGlmIChlbGVtZW50Mi50YWdOYW1lID09PSBcIklOUFVUXCIgJiYgZWxlbWVudDIudHlwZSA9PT0gXCJzdWJtaXRcIiB8fCBlbGVtZW50Mi50YWdOYW1lID09PSBcIkJVVFRPTlwiICYmIGVsZW1lbnQyLnR5cGUgPT09IFwic3VibWl0XCIgfHwgZWxlbWVudDIubm9kZU5hbWUgPT09IFwiSU5QVVRcIiAmJiBlbGVtZW50Mi50eXBlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGVsZW1lbnQyLmNsaWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LnRzXG52YXIgQ29tYm9ib3hDb250ZXh0ID0gU3ltYm9sKFwiQ29tYm9ib3hDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlQ29tYm9ib3hDb250ZXh0KGNvbXBvbmVudCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlOC5pbmplY3QpKENvbWJvYm94Q29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDxDb21ib2JveCAvPiBjb21wb25lbnQuYCk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VDb21ib2JveENvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBDb21ib2JveCA9ICgwLCBpbXBvcnRfdnVlOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJDb21ib2JveFwiLFxuICBlbWl0czogeyBcInVwZGF0ZTptb2RlbFZhbHVlXCI6IChfdmFsdWUpID0+IHRydWUgfSxcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbl0gfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIG51bGxhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbXVsdGlwbGU6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycywgZW1pdCB9KSB7XG4gICAgbGV0IGNvbWJvYm94U3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKSgxIC8qIENsb3NlZCAqLyk7XG4gICAgbGV0IGxhYmVsUmVmID0gKDAsIGltcG9ydF92dWU4LnJlZikobnVsbCk7XG4gICAgbGV0IGlucHV0UmVmID0gKDAsIGltcG9ydF92dWU4LnJlZikobnVsbCk7XG4gICAgbGV0IGJ1dHRvblJlZiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKG51bGwpO1xuICAgIGxldCBvcHRpb25zUmVmID0gKDAsIGltcG9ydF92dWU4LnJlZikobnVsbCk7XG4gICAgbGV0IG9wdGlvbnNQcm9wc1JlZiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKHtcbiAgICAgIHN0YXRpYzogZmFsc2UsXG4gICAgICBob2xkOiBmYWxzZVxuICAgIH0pO1xuICAgIGxldCBvcHRpb25zID0gKDAsIGltcG9ydF92dWU4LnJlZikoW10pO1xuICAgIGxldCBhY3RpdmVPcHRpb25JbmRleCA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKG51bGwpO1xuICAgIGxldCBhY3RpdmF0aW9uVHJpZ2dlciA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKDEgLyogT3RoZXIgKi8pO1xuICAgIGxldCBkZWZhdWx0VG9GaXJzdE9wdGlvbiA9ICgwLCBpbXBvcnRfdnVlOC5yZWYpKGZhbHNlKTtcbiAgICBmdW5jdGlvbiBhZGp1c3RPcmRlcmVkU3RhdGUoYWRqdXN0bWVudCA9IChpKSA9PiBpKSB7XG4gICAgICBsZXQgY3VycmVudEFjdGl2ZU9wdGlvbiA9IGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlICE9PSBudWxsID8gb3B0aW9ucy52YWx1ZVthY3RpdmVPcHRpb25JbmRleC52YWx1ZV0gOiBudWxsO1xuICAgICAgbGV0IHNvcnRlZE9wdGlvbnMgPSBzb3J0QnlEb21Ob2RlKGFkanVzdG1lbnQob3B0aW9ucy52YWx1ZS5zbGljZSgpKSwgKG9wdGlvbikgPT4gZG9tKG9wdGlvbi5kYXRhUmVmLmRvbVJlZikpO1xuICAgICAgbGV0IGFkanVzdGVkQWN0aXZlT3B0aW9uSW5kZXggPSBjdXJyZW50QWN0aXZlT3B0aW9uID8gc29ydGVkT3B0aW9ucy5pbmRleE9mKGN1cnJlbnRBY3RpdmVPcHRpb24pIDogbnVsbDtcbiAgICAgIGlmIChhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHNvcnRlZE9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgdmFsdWUgPSAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IHByb3BzLm1vZGVsVmFsdWUpO1xuICAgIGxldCBtb2RlID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tdWx0aXBsZSA/IDEgLyogTXVsdGkgKi8gOiAwIC8qIFNpbmdsZSAqLyk7XG4gICAgbGV0IG51bGxhYmxlID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5udWxsYWJsZSk7XG4gICAgbGV0IGFwaSA9IHtcbiAgICAgIGNvbWJvYm94U3RhdGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1vZGUsXG4gICAgICBjb21wYXJlKGEsIHopIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IHo7XG4gICAgICB9LFxuICAgICAgbnVsbGFibGUsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIGxhYmVsUmVmLFxuICAgICAgYnV0dG9uUmVmLFxuICAgICAgb3B0aW9uc1JlZixcbiAgICAgIGRpc2FibGVkOiAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IHByb3BzLmRpc2FibGVkKSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjaGFuZ2UodmFsdWUyKSB7XG4gICAgICAgIGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCB2YWx1ZTIpO1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgICAgaWYgKGRlZmF1bHRUb0ZpcnN0T3B0aW9uLnZhbHVlICYmIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID09PSBudWxsICYmIG9wdGlvbnMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBsb2NhbEFjdGl2ZU9wdGlvbkluZGV4ID0gb3B0aW9ucy52YWx1ZS5maW5kSW5kZXgoKG9wdGlvbikgPT4gIW9wdGlvbi5kYXRhUmVmLmRpc2FibGVkKTtcbiAgICAgICAgICBpZiAobG9jYWxBY3RpdmVPcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aXZlT3B0aW9uSW5kZXgudmFsdWU7XG4gICAgICB9KSxcbiAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLFxuICAgICAgaW5wdXRQcm9wc1JlZjogKDAsIGltcG9ydF92dWU4LnJlZikoeyBkaXNwbGF5VmFsdWU6IHZvaWQgMCB9KSxcbiAgICAgIG9wdGlvbnNQcm9wc1JlZixcbiAgICAgIGNsb3NlQ29tYm9ib3goKSB7XG4gICAgICAgIGRlZmF1bHRUb0ZpcnN0T3B0aW9uLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChjb21ib2JveFN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbWJvYm94U3RhdGUudmFsdWUgPSAxIC8qIENsb3NlZCAqLztcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPSBudWxsO1xuICAgICAgfSxcbiAgICAgIG9wZW5Db21ib2JveCgpIHtcbiAgICAgICAgZGVmYXVsdFRvRmlyc3RPcHRpb24udmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG9wdGlvbklkeCA9IG9wdGlvbnMudmFsdWUuZmluZEluZGV4KChvcHRpb24pID0+IHtcbiAgICAgICAgICBsZXQgb3B0aW9uVmFsdWUgPSAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKG9wdGlvbi5kYXRhUmVmLnZhbHVlKTtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBtYXRjaChtb2RlLnZhbHVlLCB7XG4gICAgICAgICAgICBbMCAvKiBTaW5nbGUgKi9dOiAoKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSksICgwLCBpbXBvcnRfdnVlOC50b1Jhdykob3B0aW9uVmFsdWUpKSxcbiAgICAgICAgICAgIFsxIC8qIE11bHRpICovXTogKCkgPT4gKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLnNvbWUoKHZhbHVlMikgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWU4LnRvUmF3KSh2YWx1ZTIpLCAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKG9wdGlvblZhbHVlKSkpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbklkeCAhPT0gLTEpIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IG9wdGlvbklkeDtcbiAgICAgICAgfVxuICAgICAgICBjb21ib2JveFN0YXRlLnZhbHVlID0gMCAvKiBPcGVuICovO1xuICAgICAgfSxcbiAgICAgIGdvVG9PcHRpb24oZm9jdXMsIGlkMiwgdHJpZ2dlcikge1xuICAgICAgICBkZWZhdWx0VG9GaXJzdE9wdGlvbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAob3B0aW9uc1JlZi52YWx1ZSAmJiAhb3B0aW9uc1Byb3BzUmVmLnZhbHVlLnN0YXRpYyAmJiBjb21ib2JveFN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgpO1xuICAgICAgICBpZiAoYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgIGxldCBsb2NhbEFjdGl2ZU9wdGlvbkluZGV4ID0gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiAhb3B0aW9uLmRhdGFSZWYuZGlzYWJsZWQpO1xuICAgICAgICAgIGlmIChsb2NhbEFjdGl2ZU9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IGxvY2FsQWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBjYWxjdWxhdGVBY3RpdmVJbmRleChmb2N1cyA9PT0gNCAvKiBTcGVjaWZpYyAqLyA/IHsgZm9jdXM6IDQgLyogU3BlY2lmaWMgKi8sIGlkOiBpZDIgfSA6IHsgZm9jdXMgfSwge1xuICAgICAgICAgIHJlc29sdmVJdGVtczogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zLFxuICAgICAgICAgIHJlc29sdmVBY3RpdmVJbmRleDogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICByZXNvbHZlSWQ6IChvcHRpb24pID0+IG9wdGlvbi5pZCxcbiAgICAgICAgICByZXNvbHZlRGlzYWJsZWQ6IChvcHRpb24pID0+IG9wdGlvbi5kYXRhUmVmLmRpc2FibGVkXG4gICAgICAgIH0pO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IG5leHRBY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSB0cmlnZ2VyICE9IG51bGwgPyB0cmlnZ2VyIDogMSAvKiBPdGhlciAqLztcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGFkanVzdGVkU3RhdGUub3B0aW9ucztcbiAgICAgIH0sXG4gICAgICBzeW5jSW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgdmFsdWUyID0gYXBpLnZhbHVlLnZhbHVlO1xuICAgICAgICBpZiAoIWRvbShhcGkuaW5wdXRSZWYpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IGRpc3BsYXlWYWx1ZSA9IGFwaS5pbnB1dFByb3BzUmVmLnZhbHVlLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGF5VmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGFwaS5pbnB1dFJlZi52YWx1ZS52YWx1ZSA9IChfYSA9IGRpc3BsYXlWYWx1ZSh2YWx1ZTIpKSAhPSBudWxsID8gX2EgOiBcIlwiO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBhcGkuaW5wdXRSZWYudmFsdWUudmFsdWUgPSB2YWx1ZTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXBpLmlucHV0UmVmLnZhbHVlLnZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNlbGVjdE9wdGlvbihpZDIpIHtcbiAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnMudmFsdWUuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQyKTtcbiAgICAgICAgaWYgKCFvcHRpb24pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgeyBkYXRhUmVmIH0gPSBvcHRpb247XG4gICAgICAgIGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCBtYXRjaChtb2RlLnZhbHVlLCB7XG4gICAgICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gZGF0YVJlZi52YWx1ZSxcbiAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb3B5ID0gKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLnNsaWNlKCk7XG4gICAgICAgICAgICBsZXQgcmF3ID0gKDAsIGltcG9ydF92dWU4LnRvUmF3KShkYXRhUmVmLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBpZHggPSBjb3B5LmluZGV4T2YocmF3KTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvcHkucHVzaChyYXcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29weS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBhcGkuc3luY0lucHV0VmFsdWUoKTtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RBY3RpdmVPcHRpb24oKSB7XG4gICAgICAgIGlmIChhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgeyBkYXRhUmVmLCBpZDogaWQyIH0gPSBvcHRpb25zLnZhbHVlW2FwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZV07XG4gICAgICAgIGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCBtYXRjaChtb2RlLnZhbHVlLCB7XG4gICAgICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gZGF0YVJlZi52YWx1ZSxcbiAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb3B5ID0gKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLnNsaWNlKCk7XG4gICAgICAgICAgICBsZXQgcmF3ID0gKDAsIGltcG9ydF92dWU4LnRvUmF3KShkYXRhUmVmLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBpZHggPSBjb3B5LmluZGV4T2YocmF3KTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvcHkucHVzaChyYXcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29weS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBhcGkuc3luY0lucHV0VmFsdWUoKTtcbiAgICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3Rlck9wdGlvbihpZDIsIGRhdGFSZWYpIHtcbiAgICAgICAgbGV0IG9wdGlvbiA9IHsgaWQ6IGlkMiwgZGF0YVJlZiB9O1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgob3B0aW9uczIpID0+IFsuLi5vcHRpb25zMiwgb3B0aW9uXSk7XG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGxldCBvcHRpb25WYWx1ZSA9IGRhdGFSZWYudmFsdWUudmFsdWU7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gbWF0Y2gobW9kZS52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWU4LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKG9wdGlvblZhbHVlKSksXG4gICAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+ICgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zb21lKCh2YWx1ZTIpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlOC50b1JhdykodmFsdWUyKSwgKDAsIGltcG9ydF92dWU4LnRvUmF3KShvcHRpb25WYWx1ZSkpKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IGFkanVzdGVkU3RhdGUub3B0aW9ucy5pbmRleE9mKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLm9wdGlvbnM7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSAxIC8qIE90aGVyICovO1xuICAgICAgfSxcbiAgICAgIHVucmVnaXN0ZXJPcHRpb24oaWQyKSB7XG4gICAgICAgIGxldCBhZGp1c3RlZFN0YXRlID0gYWRqdXN0T3JkZXJlZFN0YXRlKChvcHRpb25zMikgPT4ge1xuICAgICAgICAgIGxldCBpZHggPSBvcHRpb25zMi5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IGlkMik7XG4gICAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgICBvcHRpb25zMi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uczI7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zO1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9IGFkanVzdGVkU3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gMSAvKiBPdGhlciAqLztcbiAgICAgIH1cbiAgICB9O1xuICAgIHVzZU91dHNpZGVDbGljayhbaW5wdXRSZWYsIGJ1dHRvblJlZiwgb3B0aW9uc1JlZl0sICgpID0+IGFwaS5jbG9zZUNvbWJvYm94KCksICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSk7XG4gICAgKDAsIGltcG9ydF92dWU4LndhdGNoKShbYXBpLnZhbHVlLCBhcGkuaW5wdXRSZWZdLCAoKSA9PiBhcGkuc3luY0lucHV0VmFsdWUoKSwge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWU4LndhdGNoKShhcGkuY29tYm9ib3hTdGF0ZSwgKHN0YXRlKSA9PiB7XG4gICAgICBpZiAoc3RhdGUgPT09IDEgLyogQ2xvc2VkICovKSB7XG4gICAgICAgIGFwaS5zeW5jSW5wdXRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlOC5wcm92aWRlKShDb21ib2JveENvbnRleHQsIGFwaSk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gbWF0Y2goY29tYm9ib3hTdGF0ZS52YWx1ZSwge1xuICAgICAgWzAgLyogT3BlbiAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgIFsxIC8qIENsb3NlZCAqL106IDEgLyogQ2xvc2VkICovXG4gICAgfSkpKTtcbiAgICBsZXQgYWN0aXZlT3B0aW9uID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwgPyBudWxsIDogb3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdLmRhdGFSZWYudmFsdWUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBuYW1lLCBtb2RlbFZhbHVlLCBkaXNhYmxlZCwgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHtcbiAgICAgICAgb3BlbjogY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgYWN0aXZlSW5kZXg6IGFwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZSxcbiAgICAgICAgYWN0aXZlT3B0aW9uOiBhY3RpdmVPcHRpb24udmFsdWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWU4LmgpKGltcG9ydF92dWU4LkZyYWdtZW50LCBbXG4gICAgICAgIC4uLm5hbWUgIT0gbnVsbCAmJiBtb2RlbFZhbHVlICE9IG51bGwgPyBvYmplY3RUb0Zvcm1FbnRyaWVzKHsgW25hbWVdOiBtb2RlbFZhbHVlIH0pLm1hcCgoW25hbWUyLCB2YWx1ZTJdKSA9PiAoMCwgaW1wb3J0X3Z1ZTguaCkoSGlkZGVuLCBjb21wYWN0KHtcbiAgICAgICAgICBmZWF0dXJlczogNCAvKiBIaWRkZW4gKi8sXG4gICAgICAgICAga2V5OiBuYW1lMixcbiAgICAgICAgICBhczogXCJpbnB1dFwiLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIG5hbWU6IG5hbWUyLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZTJcbiAgICAgICAgfSkpKSA6IFtdLFxuICAgICAgICByZW5kZXIoe1xuICAgICAgICAgIHRoZWlyUHJvcHM6IHtcbiAgICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgICAgLi4ub21pdCh0aGVpclByb3BzLCBbXCJudWxsYWJsZVwiLCBcIm11bHRpcGxlXCIsIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiLCBcImJ5XCJdKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3VyUHJvcHM6IHt9LFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgbmFtZTogXCJDb21ib2JveFwiXG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBDb21ib2JveExhYmVsID0gKDAsIGltcG9ydF92dWU4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkNvbWJvYm94TGFiZWxcIixcbiAgcHJvcHM6IHsgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJsYWJlbFwiIH0gfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlQ29tYm9ib3hDb250ZXh0KFwiQ29tYm9ib3hMYWJlbFwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktY29tYm9ib3gtbGFiZWwtJHt1c2VJZCgpfWA7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICAoX2EgPSBkb20oYXBpLmlucHV0UmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0ge1xuICAgICAgICBvcGVuOiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBkaXNhYmxlZDogYXBpLmRpc2FibGVkLnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0geyBpZDogaWQyLCByZWY6IGFwaS5sYWJlbFJlZiwgb25DbGljazogaGFuZGxlQ2xpY2sgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJDb21ib2JveExhYmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIENvbWJvYm94QnV0dG9uID0gKDAsIGltcG9ydF92dWU4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkNvbWJvYm94QnV0dG9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlQ29tYm9ib3hDb250ZXh0KFwiQ29tYm9ib3hCdXR0b25cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWNvbWJvYm94LWJ1dHRvbi0ke3VzZUlkKCl9YDtcbiAgICBleHBvc2UoeyBlbDogYXBpLmJ1dHRvblJlZiwgJGVsOiBhcGkuYnV0dG9uUmVmIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAoYXBpLmRpc2FibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLykge1xuICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXBpLm9wZW5Db21ib2JveCgpO1xuICAgICAgfVxuICAgICAgKDAsIGltcG9ydF92dWU4Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGRvbShhcGkuaW5wdXRSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKSB7XG4gICAgICAgICAgICBhcGkub3BlbkNvbWJvYm94KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgICgwLCBpbXBvcnRfdnVlOC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGFwaS5pbnB1dFJlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCIgLyogQXJyb3dVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pIHtcbiAgICAgICAgICAgIGFwaS5vcGVuQ29tYm9ib3goKTtcbiAgICAgICAgICAgICgwLCBpbXBvcnRfdnVlOC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWFwaS52YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDMgLyogTGFzdCAqLyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTgubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSBhcGkuaW5wdXRSZWYudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCIgLyogRXNjYXBlICovOlxuICAgICAgICAgIGlmIChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKGFwaS5vcHRpb25zUmVmLnZhbHVlICYmICFhcGkub3B0aW9uc1Byb3BzUmVmLnZhbHVlLnN0YXRpYykge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFwaS5jbG9zZUNvbWJvYm94KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWU4Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gYXBpLmlucHV0UmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+ICh7IGFzOiBwcm9wcy5hcywgdHlwZTogYXR0cnMudHlwZSB9KSksIGFwaS5idXR0b25SZWYpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgbGV0IHNsb3QgPSB7XG4gICAgICAgIG9wZW46IGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIGRpc2FibGVkOiBhcGkuZGlzYWJsZWQudmFsdWVcbiAgICAgIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogYXBpLmJ1dHRvblJlZixcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgdGFiaW5kZXg6IFwiLTFcIixcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAoX2EgPSBkb20oYXBpLm9wdGlvbnNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBhcGkuZGlzYWJsZWQudmFsdWUgPyB2b2lkIDAgOiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcGkubGFiZWxSZWYudmFsdWUgPyBbKF9iID0gZG9tKGFwaS5sYWJlbFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pZCwgaWQyXS5qb2luKFwiIFwiKSA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQ6IGFwaS5kaXNhYmxlZC52YWx1ZSA9PT0gdHJ1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5ZG93bixcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiQ29tYm9ib3hCdXR0b25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgQ29tYm9ib3hJbnB1dCA9ICgwLCBpbXBvcnRfdnVlOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJDb21ib2JveElucHV0XCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJpbnB1dFwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzcGxheVZhbHVlOiB7IHR5cGU6IEZ1bmN0aW9uIH1cbiAgfSxcbiAgZW1pdHM6IHtcbiAgICBjaGFuZ2U6IChfdmFsdWUpID0+IHRydWVcbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgZW1pdCwgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VDb21ib2JveENvbnRleHQoXCJDb21ib2JveElucHV0XCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1jb21ib2JveC1pbnB1dC0ke3VzZUlkKCl9YDtcbiAgICBhcGkuaW5wdXRQcm9wc1JlZiA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gcHJvcHMpO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkuaW5wdXRSZWYsICRlbDogYXBpLmlucHV0UmVmIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCJCYWNrc3BhY2VcIiAvKiBCYWNrc3BhY2UgKi86XG4gICAgICAgIGNhc2UgXCJEZWxldGVcIiAvKiBEZWxldGUgKi86XG4gICAgICAgICAgaWYgKGFwaS5tb2RlLnZhbHVlICE9PSAwIC8qIFNpbmdsZSAqLylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBpZiAoIWFwaS5udWxsYWJsZS52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBsZXQgaW5wdXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgYXBpLmNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBkb20oYXBpLm9wdGlvbnNSZWYpO1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcGkuZ29Ub09wdGlvbig1IC8qIE5vdGhpbmcgKi8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICBpZiAoYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFwaS5jbG9zZUNvbWJvYm94KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGFwaS5zZWxlY3RBY3RpdmVPcHRpb24oKTtcbiAgICAgICAgICBpZiAoYXBpLm1vZGUudmFsdWUgPT09IDAgLyogU2luZ2xlICovKSB7XG4gICAgICAgICAgICBhcGkuY2xvc2VDb21ib2JveCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiIC8qIEFycm93RG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBtYXRjaChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogT3BlbiAqL106ICgpID0+IGFwaS5nb1RvT3B0aW9uKDIgLyogTmV4dCAqLyksXG4gICAgICAgICAgICBbMSAvKiBDbG9zZWQgKi9dOiAoKSA9PiBhcGkub3BlbkNvbWJvYm94KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoKGFwaS5jb21ib2JveFN0YXRlLnZhbHVlLCB7XG4gICAgICAgICAgICBbMCAvKiBPcGVuICovXTogKCkgPT4gYXBpLmdvVG9PcHRpb24oMSAvKiBQcmV2aW91cyAqLyksXG4gICAgICAgICAgICBbMSAvKiBDbG9zZWQgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGFwaS5vcGVuQ29tYm9ib3goKTtcbiAgICAgICAgICAgICAgKDAsIGltcG9ydF92dWU4Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcGkudmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDMgLyogTGFzdCAqLyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkhvbWVcIiAvKiBIb21lICovOlxuICAgICAgICBjYXNlIFwiUGFnZVVwXCIgLyogUGFnZVVwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDAgLyogRmlyc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRW5kXCIgLyogRW5kICovOlxuICAgICAgICBjYXNlIFwiUGFnZURvd25cIiAvKiBQYWdlRG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub09wdGlvbigzIC8qIExhc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCIgLyogRXNjYXBlICovOlxuICAgICAgICAgIGlmIChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKGFwaS5vcHRpb25zUmVmLnZhbHVlICYmICFhcGkub3B0aW9uc1Byb3BzUmVmLnZhbHVlLnN0YXRpYykge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFwaS5jbG9zZUNvbWJvYm94KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUYWJcIiAvKiBUYWIgKi86XG4gICAgICAgICAgaWYgKGFwaS5jb21ib2JveFN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgYXBpLnNlbGVjdEFjdGl2ZU9wdGlvbigpO1xuICAgICAgICAgIGFwaS5jbG9zZUNvbWJvYm94KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgZW1pdChcImNoYW5nZVwiLCBldmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50KSB7XG4gICAgICBhcGkub3BlbkNvbWJvYm94KCk7XG4gICAgICBlbWl0KFwiY2hhbmdlXCIsIGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IChfYSA9IGFwaS5vcHRpb25zUmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBhcGkuZGlzYWJsZWQudmFsdWUgPyB2b2lkIDAgOiBhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwgPyB2b2lkIDAgOiAoX2IgPSBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQsXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogYXBpLm1vZGUudmFsdWUgPT09IDEgLyogTXVsdGkgKi8gPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAoX2UgPSAoX2MgPSBkb20oYXBpLmxhYmVsUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmlkKSAhPSBudWxsID8gX2UgOiAoX2QgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfZC5pZCxcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICBvbklucHV0OiBoYW5kbGVJbnB1dCxcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICB0eXBlOiAoX2YgPSBhdHRycy50eXBlKSAhPSBudWxsID8gX2YgOiBcInRleHRcIixcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIHJlZjogYXBpLmlucHV0UmVmXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBvbWl0KHByb3BzLCBbXCJkaXNwbGF5VmFsdWVcIl0pO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIG5hbWU6IFwiQ29tYm9ib3hJbnB1dFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBDb21ib2JveE9wdGlvbnMgPSAoMCwgaW1wb3J0X3Z1ZTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiQ29tYm9ib3hPcHRpb25zXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJ1bFwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaG9sZDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VDb21ib2JveENvbnRleHQoXCJDb21ib2JveE9wdGlvbnNcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWNvbWJvYm94LW9wdGlvbnMtJHt1c2VJZCgpfWA7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5vcHRpb25zUmVmLCAkZWw6IGFwaS5vcHRpb25zUmVmIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlOC53YXRjaEVmZmVjdCkoKCkgPT4ge1xuICAgICAgYXBpLm9wdGlvbnNQcm9wc1JlZi52YWx1ZS5zdGF0aWMgPSBwcm9wcy5zdGF0aWM7XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWU4LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBhcGkub3B0aW9uc1Byb3BzUmVmLnZhbHVlLmhvbGQgPSBwcm9wcy5ob2xkO1xuICAgIH0pO1xuICAgIGxldCB1c2VzT3BlbkNsb3NlZFN0YXRlID0gdXNlT3BlbkNsb3NlZCgpO1xuICAgIGxldCB2aXNpYmxlID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAodXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgfSk7XG4gICAgdXNlVHJlZVdhbGtlcih7XG4gICAgICBjb250YWluZXI6ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gZG9tKGFwaS5vcHRpb25zUmVmKSksXG4gICAgICBlbmFibGVkOiAoMCwgaW1wb3J0X3Z1ZTguY29tcHV0ZWQpKCgpID0+IGFwaS5jb21ib2JveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pLFxuICAgICAgYWNjZXB0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKSA9PT0gXCJvcHRpb25cIilcbiAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKVxuICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgICAgfSxcbiAgICAgIHdhbGsobm9kZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJub25lXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogYXBpLmNvbWJvYm94U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBhcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPT09IG51bGwgPyB2b2lkIDAgOiAoX2EgPSBhcGkub3B0aW9ucy52YWx1ZVthcGkuYWN0aXZlT3B0aW9uSW5kZXgudmFsdWVdKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IChfZCA9IChfYiA9IGRvbShhcGkubGFiZWxSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQpICE9IG51bGwgPyBfZCA6IChfYyA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmlkLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IGFwaS5vcHRpb25zUmVmLFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIlxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gb21pdChwcm9wcywgW1wiaG9sZFwiXSk7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgZmVhdHVyZXM6IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8gfCAyIC8qIFN0YXRpYyAqLyxcbiAgICAgICAgdmlzaWJsZTogdmlzaWJsZS52YWx1ZSxcbiAgICAgICAgbmFtZTogXCJDb21ib2JveE9wdGlvbnNcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgQ29tYm9ib3hPcHRpb24gPSAoMCwgaW1wb3J0X3Z1ZTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiQ29tYm9ib3hPcHRpb25cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImxpXCIgfSxcbiAgICB2YWx1ZTogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbl0gfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlQ29tYm9ib3hDb250ZXh0KFwiQ29tYm9ib3hPcHRpb25cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWNvbWJvYm94LW9wdGlvbi0ke3VzZUlkKCl9YDtcbiAgICBsZXQgaW50ZXJuYWxPcHRpb25SZWYgPSAoMCwgaW1wb3J0X3Z1ZTgucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxPcHRpb25SZWYsICRlbDogaW50ZXJuYWxPcHRpb25SZWYgfSk7XG4gICAgbGV0IGFjdGl2ZSA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgcmV0dXJuIGFwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCA/IGFwaS5vcHRpb25zLnZhbHVlW2FwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZV0uaWQgPT09IGlkMiA6IGZhbHNlO1xuICAgIH0pO1xuICAgIGxldCBzZWxlY3RlZCA9ICgwLCBpbXBvcnRfdnVlOC5jb21wdXRlZCkoKCkgPT4gbWF0Y2goYXBpLm1vZGUudmFsdWUsIHtcbiAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlOC50b1JhdykoYXBpLnZhbHVlLnZhbHVlKSwgKDAsIGltcG9ydF92dWU4LnRvUmF3KShwcm9wcy52YWx1ZSkpLFxuICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKGFwaS52YWx1ZS52YWx1ZSkuc29tZSgodmFsdWUpID0+IGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlOC50b1JhdykodmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTgudG9SYXcpKHByb3BzLnZhbHVlKSkpXG4gICAgfSkpO1xuICAgIGxldCBkYXRhUmVmID0gKDAsIGltcG9ydF92dWU4LmNvbXB1dGVkKSgoKSA9PiAoe1xuICAgICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgZG9tUmVmOiBpbnRlcm5hbE9wdGlvblJlZlxuICAgIH0pKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTgub25Nb3VudGVkKSgoKSA9PiBhcGkucmVnaXN0ZXJPcHRpb24oaWQyLCBkYXRhUmVmKSk7XG4gICAgKDAsIGltcG9ydF92dWU4Lm9uVW5tb3VudGVkKSgoKSA9PiBhcGkudW5yZWdpc3Rlck9wdGlvbihpZDIpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTgud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgIGlmIChhcGkuY29tYm9ib3hTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5hY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9PT0gMCAvKiBQb2ludGVyICovKVxuICAgICAgICByZXR1cm47XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTgubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IGRvbShpbnRlcm5hbE9wdGlvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zY3JvbGxJbnRvVmlldykgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHsgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhcGkuc2VsZWN0T3B0aW9uKGlkMik7XG4gICAgICBpZiAoYXBpLm1vZGUudmFsdWUgPT09IDAgLyogU2luZ2xlICovKSB7XG4gICAgICAgIGFwaS5jbG9zZUNvbWJvYm94KCk7XG4gICAgICAgIChfYSA9IGRvbShhcGkuaW5wdXRSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDUgLyogTm90aGluZyAqLyk7XG4gICAgICBhcGkuZ29Ub09wdGlvbig0IC8qIFNwZWNpZmljICovLCBpZDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoYWN0aXZlLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBhcGkuZ29Ub09wdGlvbig0IC8qIFNwZWNpZmljICovLCBpZDIsIDAgLyogUG9pbnRlciAqLyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUxlYXZlKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5vcHRpb25zUHJvcHNSZWYudmFsdWUuaG9sZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNSAvKiBOb3RoaW5nICovKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IGRpc2FibGVkIH0gPSBwcm9wcztcbiAgICAgIGxldCBzbG90ID0geyBhY3RpdmU6IGFjdGl2ZS52YWx1ZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkLnZhbHVlLCBkaXNhYmxlZCB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IGludGVybmFsT3B0aW9uUmVmLFxuICAgICAgICByb2xlOiBcIm9wdGlvblwiLFxuICAgICAgICB0YWJJbmRleDogZGlzYWJsZWQgPT09IHRydWUgPyB2b2lkIDAgOiAtMSxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID09PSB0cnVlID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkLnZhbHVlID09PSB0cnVlID8gc2VsZWN0ZWQudmFsdWUgOiB2b2lkIDAsXG4gICAgICAgIGRpc2FibGVkOiB2b2lkIDAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgb25Qb2ludGVybW92ZTogaGFuZGxlTW92ZSxcbiAgICAgICAgb25Nb3VzZW1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uUG9pbnRlcmxlYXZlOiBoYW5kbGVMZWF2ZSxcbiAgICAgICAgb25Nb3VzZWxlYXZlOiBoYW5kbGVMZWF2ZVxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJDb21ib2JveE9wdGlvblwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy50c1xudmFyIGltcG9ydF92dWUxNyA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcC50c1xudmFyIGltcG9ydF92dWUxMSA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8vIHNyYy9ob29rcy91c2UtdGFiLWRpcmVjdGlvbi50c1xudmFyIGltcG9ydF92dWU5ID0gcmVxdWlyZShcInZ1ZVwiKTtcbmZ1bmN0aW9uIHVzZVRhYkRpcmVjdGlvbigpIHtcbiAgbGV0IGRpcmVjdGlvbiA9ICgwLCBpbXBvcnRfdnVlOS5yZWYpKDAgLyogRm9yd2FyZHMgKi8pO1xuICB1c2VXaW5kb3dFdmVudChcImtleWRvd25cIiwgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuICAgICAgZGlyZWN0aW9uLnZhbHVlID0gZXZlbnQuc2hpZnRLZXkgPyAxIC8qIEJhY2t3YXJkcyAqLyA6IDAgLyogRm9yd2FyZHMgKi87XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRpcmVjdGlvbjtcbn1cblxuLy8gc3JjL2hvb2tzL3VzZS1ldmVudC1saXN0ZW5lci50c1xudmFyIGltcG9ydF92dWUxMCA9IHJlcXVpcmUoXCJ2dWVcIik7XG5mdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyKGVsZW1lbnQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKVxuICAgIHJldHVybjtcbiAgKDAsIGltcG9ydF92dWUxMC53YXRjaEVmZmVjdCkoKG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50IDogd2luZG93O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgb25JbnZhbGlkYXRlKCgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykpO1xuICB9KTtcbn1cblxuLy8gc3JjL2NvbXBvbmVudHMvZm9jdXMtdHJhcC9mb2N1cy10cmFwLnRzXG52YXIgRmVhdHVyZXMzID0gLyogQF9fUFVSRV9fICovICgoRmVhdHVyZXM0KSA9PiB7XG4gIEZlYXR1cmVzNFtGZWF0dXJlczRbXCJOb25lXCJdID0gMV0gPSBcIk5vbmVcIjtcbiAgRmVhdHVyZXM0W0ZlYXR1cmVzNFtcIkluaXRpYWxGb2N1c1wiXSA9IDJdID0gXCJJbml0aWFsRm9jdXNcIjtcbiAgRmVhdHVyZXM0W0ZlYXR1cmVzNFtcIlRhYkxvY2tcIl0gPSA0XSA9IFwiVGFiTG9ja1wiO1xuICBGZWF0dXJlczRbRmVhdHVyZXM0W1wiRm9jdXNMb2NrXCJdID0gOF0gPSBcIkZvY3VzTG9ja1wiO1xuICBGZWF0dXJlczRbRmVhdHVyZXM0W1wiUmVzdG9yZUZvY3VzXCJdID0gMTZdID0gXCJSZXN0b3JlRm9jdXNcIjtcbiAgRmVhdHVyZXM0W0ZlYXR1cmVzNFtcIkFsbFwiXSA9IDMwXSA9IFwiQWxsXCI7XG4gIHJldHVybiBGZWF0dXJlczQ7XG59KShGZWF0dXJlczMgfHwge30pO1xudmFyIEZvY3VzVHJhcCA9IE9iamVjdC5hc3NpZ24oKDAsIGltcG9ydF92dWUxMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJGb2N1c1RyYXBcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgaW5pdGlhbEZvY3VzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGZlYXR1cmVzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMzAgLyogQWxsICovIH0sXG4gICAgY29udGFpbmVyczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKDAsIGltcG9ydF92dWUxMS5yZWYpKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpXG4gICAgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGNvbnRhaW5lciA9ICgwLCBpbXBvcnRfdnVlMTEucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogY29udGFpbmVyLCAkZWw6IGNvbnRhaW5lciB9KTtcbiAgICBsZXQgb3duZXJEb2N1bWVudCA9ICgwLCBpbXBvcnRfdnVlMTEuY29tcHV0ZWQpKCgpID0+IGdldE93bmVyRG9jdW1lbnQoY29udGFpbmVyKSk7XG4gICAgdXNlUmVzdG9yZUZvY3VzKHsgb3duZXJEb2N1bWVudCB9LCAoMCwgaW1wb3J0X3Z1ZTExLmNvbXB1dGVkKSgoKSA9PiBCb29sZWFuKHByb3BzLmZlYXR1cmVzICYgMTYgLyogUmVzdG9yZUZvY3VzICovKSkpO1xuICAgIGxldCBwcmV2aW91c0FjdGl2ZUVsZW1lbnQgPSB1c2VJbml0aWFsRm9jdXMoeyBvd25lckRvY3VtZW50LCBjb250YWluZXIsIGluaXRpYWxGb2N1czogKDAsIGltcG9ydF92dWUxMS5jb21wdXRlZCkoKCkgPT4gcHJvcHMuaW5pdGlhbEZvY3VzKSB9LCAoMCwgaW1wb3J0X3Z1ZTExLmNvbXB1dGVkKSgoKSA9PiBCb29sZWFuKHByb3BzLmZlYXR1cmVzICYgMiAvKiBJbml0aWFsRm9jdXMgKi8pKSk7XG4gICAgdXNlRm9jdXNMb2NrKHtcbiAgICAgIG93bmVyRG9jdW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250YWluZXJzOiBwcm9wcy5jb250YWluZXJzLFxuICAgICAgcHJldmlvdXNBY3RpdmVFbGVtZW50XG4gICAgfSwgKDAsIGltcG9ydF92dWUxMS5jb21wdXRlZCkoKCkgPT4gQm9vbGVhbihwcm9wcy5mZWF0dXJlcyAmIDggLyogRm9jdXNMb2NrICovKSkpO1xuICAgIGxldCBkaXJlY3Rpb24gPSB1c2VUYWJEaXJlY3Rpb24oKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIGxldCBlbCA9IGRvbShjb250YWluZXIpO1xuICAgICAgaWYgKCFlbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIG1pY3JvVGFzaygoKSA9PiB7XG4gICAgICAgICAgbWF0Y2goZGlyZWN0aW9uLnZhbHVlLCB7XG4gICAgICAgICAgICBbMCAvKiBGb3J3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDEgLyogRmlyc3QgKi8pLFxuICAgICAgICAgICAgWzEgLyogQmFja3dhcmRzICovXTogKCkgPT4gZm9jdXNJbihlbCwgOCAvKiBMYXN0ICovKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGNoKGRpcmVjdGlvbi52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIEZvcndhcmRzICovXTogKCkgPT4gZm9jdXNJbihlbCwgMSAvKiBGaXJzdCAqLyksXG4gICAgICAgICAgWzEgLyogQmFja3dhcmRzICovXTogKCkgPT4gZm9jdXNJbihlbCwgOCAvKiBMYXN0ICovKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBzbG90ID0ge307XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7IHJlZjogY29udGFpbmVyIH07XG4gICAgICBsZXQgeyBmZWF0dXJlcywgaW5pdGlhbEZvY3VzLCBjb250YWluZXJzOiBfY29udGFpbmVycywgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUxMS5oKShpbXBvcnRfdnVlMTEuRnJhZ21lbnQsIFtcbiAgICAgICAgQm9vbGVhbihmZWF0dXJlcyAmIDQgLyogVGFiTG9jayAqLykgJiYgKDAsIGltcG9ydF92dWUxMS5oKShIaWRkZW4sIHtcbiAgICAgICAgICBhczogXCJidXR0b25cIixcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqL1xuICAgICAgICB9KSxcbiAgICAgICAgcmVuZGVyKHtcbiAgICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgICB0aGVpclByb3BzOiB7IC4uLmF0dHJzLCAuLi50aGVpclByb3BzIH0sXG4gICAgICAgICAgc2xvdCxcbiAgICAgICAgICBhdHRycyxcbiAgICAgICAgICBzbG90cyxcbiAgICAgICAgICBuYW1lOiBcIkZvY3VzVHJhcFwiXG4gICAgICAgIH0pLFxuICAgICAgICBCb29sZWFuKGZlYXR1cmVzICYgNCAvKiBUYWJMb2NrICovKSAmJiAoMCwgaW1wb3J0X3Z1ZTExLmgpKEhpZGRlbiwge1xuICAgICAgICAgIGFzOiBcImJ1dHRvblwiLFxuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgZmVhdHVyZXM6IDIgLyogRm9jdXNhYmxlICovXG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICB9O1xuICB9XG59KSwgeyBmZWF0dXJlczogRmVhdHVyZXMzIH0pO1xuZnVuY3Rpb24gdXNlUmVzdG9yZUZvY3VzKHsgb3duZXJEb2N1bWVudCB9LCBlbmFibGVkKSB7XG4gIGxldCByZXN0b3JlRWxlbWVudCA9ICgwLCBpbXBvcnRfdnVlMTEucmVmKShudWxsKTtcbiAgbGV0IG1vdW50ZWQgPSB7IHZhbHVlOiBmYWxzZSB9O1xuICAoMCwgaW1wb3J0X3Z1ZTExLm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICgwLCBpbXBvcnRfdnVlMTEud2F0Y2gpKGVuYWJsZWQsIChuZXdWYWx1ZSwgcHJldlZhbHVlKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByZXZWYWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFlbmFibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBtb3VudGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmICghcmVzdG9yZUVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgcmVzdG9yZUVsZW1lbnQudmFsdWUgPSAoX2EgPSBvd25lckRvY3VtZW50LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cbiAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTExLndhdGNoKShlbmFibGVkLCAobmV3VmFsdWUsIHByZXZWYWx1ZSwgb25JbnZhbGlkYXRlKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByZXZWYWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFlbmFibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBvbkludmFsaWRhdGUoKCkgPT4ge1xuICAgICAgICBpZiAobW91bnRlZC52YWx1ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBtb3VudGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIGZvY3VzRWxlbWVudChyZXN0b3JlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgIHJlc3RvcmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHVzZUluaXRpYWxGb2N1cyh7XG4gIG93bmVyRG9jdW1lbnQsXG4gIGNvbnRhaW5lcixcbiAgaW5pdGlhbEZvY3VzXG59LCBlbmFibGVkKSB7XG4gIGxldCBwcmV2aW91c0FjdGl2ZUVsZW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTExLnJlZikobnVsbCk7XG4gICgwLCBpbXBvcnRfdnVlMTEub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgKDAsIGltcG9ydF92dWUxMS53YXRjaCkoW2NvbnRhaW5lciwgaW5pdGlhbEZvY3VzLCBlbmFibGVkXSwgKG5ld1ZhbHVlcywgcHJldlZhbHVlcykgPT4ge1xuICAgICAgaWYgKG5ld1ZhbHVlcy5ldmVyeSgodmFsdWUsIGlkeCkgPT4gKHByZXZWYWx1ZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZWYWx1ZXNbaWR4XSkgPT09IHZhbHVlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFlbmFibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgY29udGFpbmVyRWxlbWVudCA9IGRvbShjb250YWluZXIpO1xuICAgICAgaWYgKCFjb250YWluZXJFbGVtZW50KVxuICAgICAgICByZXR1cm47XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgaW5pdGlhbEZvY3VzRWxlbWVudCA9IGRvbShpbml0aWFsRm9jdXMpO1xuICAgICAgICBsZXQgYWN0aXZlRWxlbWVudCA9IChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoaW5pdGlhbEZvY3VzRWxlbWVudCkge1xuICAgICAgICAgIGlmIChpbml0aWFsRm9jdXNFbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBwcmV2aW91c0FjdGl2ZUVsZW1lbnQudmFsdWUgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXJFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgcHJldmlvdXNBY3RpdmVFbGVtZW50LnZhbHVlID0gYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxGb2N1c0VsZW1lbnQpIHtcbiAgICAgICAgICBmb2N1c0VsZW1lbnQoaW5pdGlhbEZvY3VzRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvY3VzSW4oY29udGFpbmVyRWxlbWVudCwgMSAvKiBGaXJzdCAqLyB8IDMyIC8qIE5vU2Nyb2xsICovKSA9PT0gMCAvKiBFcnJvciAqLykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBlbGVtZW50cyBpbnNpZGUgdGhlIDxGb2N1c1RyYXAgLz5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzQWN0aXZlRWxlbWVudC52YWx1ZSA9IChfYiA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5hY3RpdmVFbGVtZW50O1xuICAgICAgfSk7XG4gICAgfSwgeyBpbW1lZGlhdGU6IHRydWUsIGZsdXNoOiBcInBvc3RcIiB9KTtcbiAgfSk7XG4gIHJldHVybiBwcmV2aW91c0FjdGl2ZUVsZW1lbnQ7XG59XG5mdW5jdGlvbiB1c2VGb2N1c0xvY2soe1xuICBvd25lckRvY3VtZW50LFxuICBjb250YWluZXIsXG4gIGNvbnRhaW5lcnMsXG4gIHByZXZpb3VzQWN0aXZlRWxlbWVudFxufSwgZW5hYmxlZCkge1xuICB2YXIgX2E7XG4gIHVzZUV2ZW50TGlzdGVuZXIoKF9hID0gb3duZXJEb2N1bWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRWaWV3LCBcImZvY3VzXCIsIChldmVudCkgPT4ge1xuICAgIGlmICghZW5hYmxlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBsZXQgYWxsQ29udGFpbmVycyA9IG5ldyBTZXQoY29udGFpbmVycyA9PSBudWxsID8gdm9pZCAwIDogY29udGFpbmVycy52YWx1ZSk7XG4gICAgYWxsQ29udGFpbmVycy5hZGQoY29udGFpbmVyKTtcbiAgICBsZXQgcHJldmlvdXMgPSBwcmV2aW91c0FjdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgaWYgKCFwcmV2aW91cylcbiAgICAgIHJldHVybjtcbiAgICBsZXQgdG9FbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICh0b0VsZW1lbnQgJiYgdG9FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGlmICghY29udGFpbnMoYWxsQ29udGFpbmVycywgdG9FbGVtZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZm9jdXNFbGVtZW50KHByZXZpb3VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpb3VzQWN0aXZlRWxlbWVudC52YWx1ZSA9IHRvRWxlbWVudDtcbiAgICAgICAgZm9jdXNFbGVtZW50KHRvRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvY3VzRWxlbWVudChwcmV2aW91c0FjdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjb250YWlucyhjb250YWluZXJzLCBlbGVtZW50KSB7XG4gIHZhciBfYTtcbiAgZm9yIChsZXQgY29udGFpbmVyIG9mIGNvbnRhaW5lcnMpIHtcbiAgICBpZiAoKF9hID0gY29udGFpbmVyLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY29udGFpbnMoZWxlbWVudCkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIHNyYy9ob29rcy91c2UtaW5lcnQtb3RoZXJzLnRzXG52YXIgaW1wb3J0X3Z1ZTEyID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBDSElMRFJFTl9TRUxFQ1RPUiA9IGZhbHNlID8gJ1tkYXRhLXYtYXBwPVwiXCJdID4gKicgOiBcImJvZHkgPiAqXCI7XG52YXIgaW50ZXJhY3RhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG52YXIgb3JpZ2luYWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGluZXJ0KGVsZW1lbnQpIHtcbiAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGVsZW1lbnQuaW5lcnQgPSB0cnVlO1xufVxuZnVuY3Rpb24gcmVzdG9yZShlbGVtZW50KSB7XG4gIGxldCBvcmlnaW5hbCA9IG9yaWdpbmFscy5nZXQoZWxlbWVudCk7XG4gIGlmICghb3JpZ2luYWwpXG4gICAgcmV0dXJuO1xuICBpZiAob3JpZ2luYWxbXCJhcmlhLWhpZGRlblwiXSA9PT0gbnVsbClcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpO1xuICBlbHNlXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCBvcmlnaW5hbFtcImFyaWEtaGlkZGVuXCJdKTtcbiAgZWxlbWVudC5pbmVydCA9IG9yaWdpbmFsLmluZXJ0O1xufVxuZnVuY3Rpb24gdXNlSW5lcnRPdGhlcnMoY29udGFpbmVyLCBlbmFibGVkID0gKDAsIGltcG9ydF92dWUxMi5yZWYpKHRydWUpKSB7XG4gICgwLCBpbXBvcnRfdnVlMTIud2F0Y2hFZmZlY3QpKChvbkludmFsaWRhdGUpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFjb250YWluZXIudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgbGV0IGVsZW1lbnQgPSBjb250YWluZXIudmFsdWU7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50KGVsZW1lbnQpO1xuICAgIGlmICghb3duZXJEb2N1bWVudClcbiAgICAgIHJldHVybjtcbiAgICBpbnRlcmFjdGFibGVzLmFkZChlbGVtZW50KTtcbiAgICBmb3IgKGxldCBvcmlnaW5hbCBvZiBvcmlnaW5hbHMua2V5cygpKSB7XG4gICAgICBpZiAob3JpZ2luYWwuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmVzdG9yZShvcmlnaW5hbCk7XG4gICAgICAgIG9yaWdpbmFscy5kZWxldGUob3JpZ2luYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoQ0hJTERSRU5fU0VMRUNUT1IpLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoIShjaGlsZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZm9yIChsZXQgaW50ZXJhY3RhYmxlIG9mIGludGVyYWN0YWJsZXMpIHtcbiAgICAgICAgaWYgKGNoaWxkLmNvbnRhaW5zKGludGVyYWN0YWJsZSkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGludGVyYWN0YWJsZXMuc2l6ZSA9PT0gMSkge1xuICAgICAgICBvcmlnaW5hbHMuc2V0KGNoaWxkLCB7XG4gICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBjaGlsZC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSxcbiAgICAgICAgICBpbmVydDogY2hpbGQuaW5lcnRcbiAgICAgICAgfSk7XG4gICAgICAgIGluZXJ0KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvbkludmFsaWRhdGUoKCkgPT4ge1xuICAgICAgaW50ZXJhY3RhYmxlcy5kZWxldGUoZWxlbWVudCk7XG4gICAgICBpZiAoaW50ZXJhY3RhYmxlcy5zaXplID4gMCkge1xuICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoQ0hJTERSRU5fU0VMRUNUT1IpLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKG9yaWdpbmFscy5oYXMoY2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGZvciAobGV0IGludGVyYWN0YWJsZSBvZiBpbnRlcmFjdGFibGVzKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuY29udGFpbnMoaW50ZXJhY3RhYmxlKSlcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcmlnaW5hbHMuc2V0KGNoaWxkLCB7XG4gICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IGNoaWxkLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpLFxuICAgICAgICAgICAgaW5lcnQ6IGNoaWxkLmluZXJ0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaW5lcnQoY2hpbGQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQyIG9mIG9yaWdpbmFscy5rZXlzKCkpIHtcbiAgICAgICAgICByZXN0b3JlKGVsZW1lbnQyKTtcbiAgICAgICAgICBvcmlnaW5hbHMuZGVsZXRlKGVsZW1lbnQyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gc3JjL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC50c1xudmFyIGltcG9ydF92dWUxNCA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8vIHNyYy9pbnRlcm5hbC9wb3J0YWwtZm9yY2Utcm9vdC50c1xudmFyIGltcG9ydF92dWUxMyA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgRm9yY2VQb3J0YWxSb290Q29udGV4dCA9IFN5bWJvbChcIkZvcmNlUG9ydGFsUm9vdENvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VQb3J0YWxSb290KCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUxMy5pbmplY3QpKEZvcmNlUG9ydGFsUm9vdENvbnRleHQsIGZhbHNlKTtcbn1cbnZhciBGb3JjZVBvcnRhbFJvb3QgPSAoMCwgaW1wb3J0X3Z1ZTEzLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkZvcmNlUG9ydGFsUm9vdFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwidGVtcGxhdGVcIiB9LFxuICAgIGZvcmNlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzIH0pIHtcbiAgICAoMCwgaW1wb3J0X3Z1ZTEzLnByb3ZpZGUpKEZvcmNlUG9ydGFsUm9vdENvbnRleHQsIHByb3BzLmZvcmNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgZm9yY2UsIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgc2xvdDoge30sXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBhdHRycyxcbiAgICAgICAgbmFtZTogXCJGb3JjZVBvcnRhbFJvb3RcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BvcnRhbC9wb3J0YWwudHNcbmZ1bmN0aW9uIGdldFBvcnRhbFJvb3QoY29udGV4dEVsZW1lbnQpIHtcbiAgbGV0IG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50KGNvbnRleHRFbGVtZW50KTtcbiAgaWYgKCFvd25lckRvY3VtZW50KSB7XG4gICAgaWYgKGNvbnRleHRFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbSGVhZGxlc3MgVUldOiBDYW5ub3QgZmluZCBvd25lckRvY3VtZW50IGZvciBjb250ZXh0RWxlbWVudDogJHtjb250ZXh0RWxlbWVudH1gKTtcbiAgfVxuICBsZXQgZXhpc3RpbmdSb290ID0gb3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlYWRsZXNzdWktcG9ydGFsLXJvb3RcIik7XG4gIGlmIChleGlzdGluZ1Jvb3QpXG4gICAgcmV0dXJuIGV4aXN0aW5nUm9vdDtcbiAgbGV0IHJvb3QgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHJvb3Quc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJoZWFkbGVzc3VpLXBvcnRhbC1yb290XCIpO1xuICByZXR1cm4gb3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xufVxudmFyIFBvcnRhbCA9ICgwLCBpbXBvcnRfdnVlMTQuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9ydGFsXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycyB9KSB7XG4gICAgbGV0IGVsZW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTE0LnJlZikobnVsbCk7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTE0LmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgZm9yY2VQb3J0YWxSb290ID0gdXNlUG9ydGFsUm9vdCgpO1xuICAgIGxldCBncm91cENvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTE0LmluamVjdCkoUG9ydGFsR3JvdXBDb250ZXh0LCBudWxsKTtcbiAgICBsZXQgbXlUYXJnZXQgPSAoMCwgaW1wb3J0X3Z1ZTE0LnJlZikoZm9yY2VQb3J0YWxSb290ID09PSB0cnVlID8gZ2V0UG9ydGFsUm9vdChlbGVtZW50LnZhbHVlKSA6IGdyb3VwQ29udGV4dCA9PSBudWxsID8gZ2V0UG9ydGFsUm9vdChlbGVtZW50LnZhbHVlKSA6IGdyb3VwQ29udGV4dC5yZXNvbHZlVGFyZ2V0KCkpO1xuICAgICgwLCBpbXBvcnRfdnVlMTQud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgIGlmIChmb3JjZVBvcnRhbFJvb3QpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChncm91cENvbnRleHQgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbXlUYXJnZXQudmFsdWUgPSBncm91cENvbnRleHQucmVzb2x2ZVRhcmdldCgpO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTQub25Vbm1vdW50ZWQpKCgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgcm9vdCA9IChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50QnlJZChcImhlYWRsZXNzdWktcG9ydGFsLXJvb3RcIik7XG4gICAgICBpZiAoIXJvb3QpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChteVRhcmdldC52YWx1ZSAhPT0gcm9vdClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKG15VGFyZ2V0LnZhbHVlLmNoaWxkcmVuLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIChfYiA9IG15VGFyZ2V0LnZhbHVlLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5yZW1vdmVDaGlsZChteVRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChteVRhcmdldC52YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogZWxlbWVudCxcbiAgICAgICAgXCJkYXRhLWhlYWRsZXNzdWktcG9ydGFsXCI6IFwiXCJcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUxNC5oKShpbXBvcnRfdnVlMTQuVGVsZXBvcnQsIHsgdG86IG15VGFyZ2V0LnZhbHVlIH0sIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgc2xvdDoge30sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJQb3J0YWxcIlxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFBvcnRhbEdyb3VwQ29udGV4dCA9IFN5bWJvbChcIlBvcnRhbEdyb3VwQ29udGV4dFwiKTtcbnZhciBQb3J0YWxHcm91cCA9ICgwLCBpbXBvcnRfdnVlMTQuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9ydGFsR3JvdXBcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzIH0pIHtcbiAgICBsZXQgYXBpID0gKDAsIGltcG9ydF92dWUxNC5yZWFjdGl2ZSkoe1xuICAgICAgcmVzb2x2ZVRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLnRhcmdldDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE0LnByb3ZpZGUpKFBvcnRhbEdyb3VwQ29udGV4dCwgYXBpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgdGFyZ2V0OiBfLCAuLi50aGVpclByb3BzIH0gPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBvdXJQcm9wczoge30sXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiUG9ydGFsR3JvdXBcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9pbnRlcm5hbC9zdGFjay1jb250ZXh0LnRzXG52YXIgaW1wb3J0X3Z1ZTE1ID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBTdGFja0NvbnRleHQgPSBTeW1ib2woXCJTdGFja0NvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VTdGFja0NvbnRleHQoKSB7XG4gIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTE1LmluamVjdCkoU3RhY2tDb250ZXh0LCAoKSA9PiB7XG4gIH0pO1xufVxuZnVuY3Rpb24gdXNlU3RhY2tQcm92aWRlcih7XG4gIHR5cGUsXG4gIGVsZW1lbnQsXG4gIG9uVXBkYXRlXG59KSB7XG4gIGxldCBwYXJlbnRVcGRhdGUgPSB1c2VTdGFja0NvbnRleHQoKTtcbiAgZnVuY3Rpb24gbm90aWZ5KC4uLmFyZ3MpIHtcbiAgICBvblVwZGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb25VcGRhdGUoLi4uYXJncyk7XG4gICAgcGFyZW50VXBkYXRlKC4uLmFyZ3MpO1xuICB9XG4gICgwLCBpbXBvcnRfdnVlMTUub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgbm90aWZ5KDAgLyogQWRkICovLCB0eXBlLCBlbGVtZW50KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE1Lm9uVW5tb3VudGVkKSgoKSA9PiB7XG4gICAgICBub3RpZnkoMSAvKiBSZW1vdmUgKi8sIHR5cGUsIGVsZW1lbnQpO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIGltcG9ydF92dWUxNS5wcm92aWRlKShTdGFja0NvbnRleHQsIG5vdGlmeSk7XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL2Rlc2NyaXB0aW9uL2Rlc2NyaXB0aW9uLnRzXG52YXIgaW1wb3J0X3Z1ZTE2ID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBEZXNjcmlwdGlvbkNvbnRleHQgPSBTeW1ib2woXCJEZXNjcmlwdGlvbkNvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VEZXNjcmlwdGlvbkNvbnRleHQoKSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUxNi5pbmplY3QpKERlc2NyaXB0aW9uQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBwYXJlbnRcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5mdW5jdGlvbiB1c2VEZXNjcmlwdGlvbnMoe1xuICBzbG90ID0gKDAsIGltcG9ydF92dWUxNi5yZWYpKHt9KSxcbiAgbmFtZSA9IFwiRGVzY3JpcHRpb25cIixcbiAgcHJvcHMgPSB7fVxufSA9IHt9KSB7XG4gIGxldCBkZXNjcmlwdGlvbklkcyA9ICgwLCBpbXBvcnRfdnVlMTYucmVmKShbXSk7XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhbHVlKSB7XG4gICAgZGVzY3JpcHRpb25JZHMudmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBpZHggPSBkZXNjcmlwdGlvbklkcy52YWx1ZS5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgICByZXR1cm47XG4gICAgICBkZXNjcmlwdGlvbklkcy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICB9O1xuICB9XG4gICgwLCBpbXBvcnRfdnVlMTYucHJvdmlkZSkoRGVzY3JpcHRpb25Db250ZXh0LCB7IHJlZ2lzdGVyLCBzbG90LCBuYW1lLCBwcm9wcyB9KTtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMTYuY29tcHV0ZWQpKCgpID0+IGRlc2NyaXB0aW9uSWRzLnZhbHVlLmxlbmd0aCA+IDAgPyBkZXNjcmlwdGlvbklkcy52YWx1ZS5qb2luKFwiIFwiKSA6IHZvaWQgMCk7XG59XG52YXIgRGVzY3JpcHRpb24gPSAoMCwgaW1wb3J0X3Z1ZTE2LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkRlc2NyaXB0aW9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJwXCIgfVxuICB9LFxuICBzZXR1cChteVByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGNvbnRleHQgPSB1c2VEZXNjcmlwdGlvbkNvbnRleHQoKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktZGVzY3JpcHRpb24tJHt1c2VJZCgpfWA7XG4gICAgKDAsIGltcG9ydF92dWUxNi5vbk1vdW50ZWQpKCgpID0+ICgwLCBpbXBvcnRfdnVlMTYub25Vbm1vdW50ZWQpKGNvbnRleHQucmVnaXN0ZXIoaWQyKSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBuYW1lID0gXCJEZXNjcmlwdGlvblwiLCBzbG90ID0gKDAsIGltcG9ydF92dWUxNi5yZWYpKHt9KSwgcHJvcHMgPSB7fSB9ID0gY29udGV4dDtcbiAgICAgIGxldCB0aGVpclByb3BzID0gbXlQcm9wcztcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiAoMCwgaW1wb3J0X3Z1ZTE2LnVucmVmKSh2YWx1ZSkgfSksIHt9KSxcbiAgICAgICAgaWQ6IGlkMlxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdDogc2xvdC52YWx1ZSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy50c1xudmFyIERpYWxvZ0NvbnRleHQgPSBTeW1ib2woXCJEaWFsb2dDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlRGlhbG9nQ29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTE3LmluamVjdCkoRGlhbG9nQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDxEaWFsb2cgLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlRGlhbG9nQ29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIE1pc3NpbmcgPSBcIkRDOEY4OTJELTJFQkQtNDQ3Qy1BNEM4LUEwMzA1ODQzNkZGNFwiO1xudmFyIERpYWxvZyA9ICgwLCBpbXBvcnRfdnVlMTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlhbG9nXCIsXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIG9wZW46IHsgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sIGRlZmF1bHQ6IE1pc3NpbmcgfSxcbiAgICBpbml0aWFsRm9jdXM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcbiAgZW1pdHM6IHsgY2xvc2U6IChfY2xvc2UpID0+IHRydWUgfSxcbiAgc2V0dXAocHJvcHMsIHsgZW1pdCwgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIHZhciBfYTtcbiAgICBsZXQgcmVhZHkgPSAoMCwgaW1wb3J0X3Z1ZTE3LnJlZikoZmFsc2UpO1xuICAgICgwLCBpbXBvcnRfdnVlMTcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICByZWFkeS52YWx1ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgbGV0IG5lc3RlZERpYWxvZ0NvdW50ID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKDApO1xuICAgIGxldCB1c2VzT3BlbkNsb3NlZFN0YXRlID0gdXNlT3BlbkNsb3NlZCgpO1xuICAgIGxldCBvcGVuID0gKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLm9wZW4gPT09IE1pc3NpbmcgJiYgdXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2godXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIE9wZW4gKi9dOiB0cnVlLFxuICAgICAgICAgIFsxIC8qIENsb3NlZCAqL106IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BzLm9wZW47XG4gICAgfSk7XG4gICAgbGV0IGNvbnRhaW5lcnMgPSAoMCwgaW1wb3J0X3Z1ZTE3LnJlZikoLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG4gICAgbGV0IGludGVybmFsRGlhbG9nUmVmID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKG51bGwpO1xuICAgIGxldCBtYWluVHJlZU5vZGUgPSAoMCwgaW1wb3J0X3Z1ZTE3LnJlZikobnVsbCk7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGludGVybmFsRGlhbG9nUmVmKSk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsRGlhbG9nUmVmLCAkZWw6IGludGVybmFsRGlhbG9nUmVmIH0pO1xuICAgIGxldCBoYXNPcGVuID0gcHJvcHMub3BlbiAhPT0gTWlzc2luZyB8fCB1c2VzT3BlbkNsb3NlZFN0YXRlICE9PSBudWxsO1xuICAgIGlmICghaGFzT3Blbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgZm9yZ290IHRvIHByb3ZpZGUgYW4gXFxgb3BlblxcYCBwcm9wIHRvIHRoZSBcXGBEaWFsb2dcXGAuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3Blbi52YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IHByb3ZpZGVkIGFuIFxcYG9wZW5cXGAgcHJvcCB0byB0aGUgXFxgRGlhbG9nXFxgLCBidXQgdGhlIHZhbHVlIGlzIG5vdCBhIGJvb2xlYW4uIFJlY2VpdmVkOiAke29wZW4udmFsdWUgPT09IE1pc3NpbmcgPyB2b2lkIDAgOiBwcm9wcy5vcGVufWApO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nU3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiAhcmVhZHkudmFsdWUgPyAxIC8qIENsb3NlZCAqLyA6IG9wZW4udmFsdWUgPyAwIC8qIE9wZW4gKi8gOiAxIC8qIENsb3NlZCAqLyk7XG4gICAgbGV0IGVuYWJsZWQgPSAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiBkaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKTtcbiAgICBsZXQgaGFzTmVzdGVkRGlhbG9ncyA9ICgwLCBpbXBvcnRfdnVlMTcuY29tcHV0ZWQpKCgpID0+IG5lc3RlZERpYWxvZ0NvdW50LnZhbHVlID4gMSk7XG4gICAgbGV0IGhhc1BhcmVudERpYWxvZyA9ICgwLCBpbXBvcnRfdnVlMTcuaW5qZWN0KShEaWFsb2dDb250ZXh0LCBudWxsKSAhPT0gbnVsbDtcbiAgICBsZXQgcG9zaXRpb24gPSAoMCwgaW1wb3J0X3Z1ZTE3LmNvbXB1dGVkKSgoKSA9PiAhaGFzTmVzdGVkRGlhbG9ncy52YWx1ZSA/IFwibGVhZlwiIDogXCJwYXJlbnRcIik7XG4gICAgdXNlSW5lcnRPdGhlcnMoaW50ZXJuYWxEaWFsb2dSZWYsICgwLCBpbXBvcnRfdnVlMTcuY29tcHV0ZWQpKCgpID0+IGhhc05lc3RlZERpYWxvZ3MudmFsdWUgPyBlbmFibGVkLnZhbHVlIDogZmFsc2UpKTtcbiAgICB1c2VTdGFja1Byb3ZpZGVyKHtcbiAgICAgIHR5cGU6IFwiRGlhbG9nXCIsXG4gICAgICBlbGVtZW50OiBpbnRlcm5hbERpYWxvZ1JlZixcbiAgICAgIG9uVXBkYXRlOiAobWVzc2FnZSwgdHlwZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodHlwZSAhPT0gXCJEaWFsb2dcIilcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBtYXRjaChtZXNzYWdlLCB7XG4gICAgICAgICAgWzAgLyogQWRkICovXSgpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lcnMudmFsdWUuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgbmVzdGVkRGlhbG9nQ291bnQudmFsdWUgKz0gMTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFsxIC8qIFJlbW92ZSAqL10oKSB7XG4gICAgICAgICAgICBjb250YWluZXJzLnZhbHVlLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgIG5lc3RlZERpYWxvZ0NvdW50LnZhbHVlIC09IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgZGVzY3JpYmVkYnkgPSB1c2VEZXNjcmlwdGlvbnMoe1xuICAgICAgbmFtZTogXCJEaWFsb2dEZXNjcmlwdGlvblwiLFxuICAgICAgc2xvdDogKDAsIGltcG9ydF92dWUxNy5jb21wdXRlZCkoKCkgPT4gKHsgb3Blbjogb3Blbi52YWx1ZSB9KSlcbiAgICB9KTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktZGlhbG9nLSR7dXNlSWQoKX1gO1xuICAgIGxldCB0aXRsZUlkID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKG51bGwpO1xuICAgIGxldCBhcGkgPSB7XG4gICAgICB0aXRsZUlkLFxuICAgICAgcGFuZWxSZWY6ICgwLCBpbXBvcnRfdnVlMTcucmVmKShudWxsKSxcbiAgICAgIGRpYWxvZ1N0YXRlLFxuICAgICAgc2V0VGl0bGVJZChpZDMpIHtcbiAgICAgICAgaWYgKHRpdGxlSWQudmFsdWUgPT09IGlkMylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRpdGxlSWQudmFsdWUgPSBpZDM7XG4gICAgICB9LFxuICAgICAgY2xvc2UoKSB7XG4gICAgICAgIGVtaXQoXCJjbG9zZVwiLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTE3LnByb3ZpZGUpKERpYWxvZ0NvbnRleHQsIGFwaSk7XG4gICAgdXNlT3V0c2lkZUNsaWNrKCgpID0+IHtcbiAgICAgIHZhciBfYTIsIF9iLCBfYztcbiAgICAgIGxldCByb290Q29udGFpbmVycyA9IEFycmF5LmZyb20oKF9iID0gKF9hMiA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqLCBbZGF0YS1oZWFkbGVzc3VpLXBvcnRhbF1cIikpICE9IG51bGwgPyBfYiA6IFtdKS5maWx0ZXIoKGNvbnRhaW5lcikgPT4ge1xuICAgICAgICBpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGFpbmVyLmNvbnRhaW5zKGRvbShtYWluVHJlZU5vZGUpKSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhcGkucGFuZWxSZWYudmFsdWUgJiYgY29udGFpbmVyLmNvbnRhaW5zKGFwaS5wYW5lbFJlZi52YWx1ZSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFsuLi5yb290Q29udGFpbmVycywgKF9jID0gYXBpLnBhbmVsUmVmLnZhbHVlKSAhPSBudWxsID8gX2MgOiBpbnRlcm5hbERpYWxvZ1JlZi52YWx1ZV07XG4gICAgfSwgKF9ldmVudCwgdGFyZ2V0KSA9PiB7XG4gICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICgwLCBpbXBvcnRfdnVlMTcubmV4dFRpY2spKCgpID0+IHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LmZvY3VzKCkpO1xuICAgIH0sICgwLCBpbXBvcnRfdnVlMTcuY29tcHV0ZWQpKCgpID0+IGRpYWxvZ1N0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gJiYgIWhhc05lc3RlZERpYWxvZ3MudmFsdWUpKTtcbiAgICB1c2VFdmVudExpc3RlbmVyKChfYSA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kZWZhdWx0VmlldywgXCJrZXlkb3duXCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IFwiRXNjYXBlXCIgLyogRXNjYXBlICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoZGlhbG9nU3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGhhc05lc3RlZERpYWxvZ3MudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGFwaS5jbG9zZSgpO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTcud2F0Y2hFZmZlY3QpKChvbkludmFsaWRhdGUpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICBpZiAoZGlhbG9nU3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGhhc1BhcmVudERpYWxvZylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IG93bmVyID0gb3duZXJEb2N1bWVudC52YWx1ZTtcbiAgICAgIGlmICghb3duZXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBkb2N1bWVudEVsZW1lbnQgPSBvd25lciA9PSBudWxsID8gdm9pZCAwIDogb3duZXIuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgbGV0IG93bmVyV2luZG93ID0gKF9hMiA9IG93bmVyLmRlZmF1bHRWaWV3KSAhPSBudWxsID8gX2EyIDogd2luZG93O1xuICAgICAgbGV0IG92ZXJmbG93ID0gZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93O1xuICAgICAgbGV0IHBhZGRpbmdSaWdodCA9IGRvY3VtZW50RWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ7XG4gICAgICBsZXQgc2Nyb2xsYmFyV2lkdGhCZWZvcmUgPSBvd25lcldpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICAgIGlmIChzY3JvbGxiYXJXaWR0aEJlZm9yZSA+IDApIHtcbiAgICAgICAgbGV0IHNjcm9sbGJhcldpZHRoQWZ0ZXIgPSBkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBkb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGxldCBzY3JvbGxiYXJXaWR0aCA9IHNjcm9sbGJhcldpZHRoQmVmb3JlIC0gc2Nyb2xsYmFyV2lkdGhBZnRlcjtcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICAgIH1cbiAgICAgIG9uSW52YWxpZGF0ZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gcGFkZGluZ1JpZ2h0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUxNy53YXRjaEVmZmVjdCkoKG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBjb250YWluZXIgPSBkb20oaW50ZXJuYWxEaWFsb2dSZWYpO1xuICAgICAgaWYgKCFjb250YWluZXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC54ID09PSAwICYmIGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC55ID09PSAwICYmIGVudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCA9PT0gMCAmJiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICBhcGkuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpO1xuICAgICAgb25JbnZhbGlkYXRlKCgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgIHJlZjogaW50ZXJuYWxEaWFsb2dSZWYsXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIFwiYXJpYS1tb2RhbFwiOiBkaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZC52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGRlc2NyaWJlZGJ5LnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IHsgb3BlbjogXywgaW5pdGlhbEZvY3VzLCAuLi50aGVpclByb3BzIH0gPSBwcm9wcztcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBkaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUxNy5oKShGb3JjZVBvcnRhbFJvb3QsIHsgZm9yY2U6IHRydWUgfSwgKCkgPT4gW1xuICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE3LmgpKFBvcnRhbCwgKCkgPT4gKDAsIGltcG9ydF92dWUxNy5oKShQb3J0YWxHcm91cCwgeyB0YXJnZXQ6IGludGVybmFsRGlhbG9nUmVmLnZhbHVlIH0sICgpID0+ICgwLCBpbXBvcnRfdnVlMTcuaCkoRm9yY2VQb3J0YWxSb290LCB7IGZvcmNlOiBmYWxzZSB9LCAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTE3LmgpKEZvY3VzVHJhcCwge1xuICAgICAgICAgIGluaXRpYWxGb2N1cyxcbiAgICAgICAgICBjb250YWluZXJzLFxuICAgICAgICAgIGZlYXR1cmVzOiBlbmFibGVkLnZhbHVlID8gbWF0Y2gocG9zaXRpb24udmFsdWUsIHtcbiAgICAgICAgICAgIHBhcmVudDogRm9jdXNUcmFwLmZlYXR1cmVzLlJlc3RvcmVGb2N1cyxcbiAgICAgICAgICAgIGxlYWY6IEZvY3VzVHJhcC5mZWF0dXJlcy5BbGwgJiB+Rm9jdXNUcmFwLmZlYXR1cmVzLkZvY3VzTG9ja1xuICAgICAgICAgIH0pIDogRm9jdXNUcmFwLmZlYXR1cmVzLk5vbmVcbiAgICAgICAgfSwgKCkgPT4gcmVuZGVyKHtcbiAgICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgdmlzaWJsZTogZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICAgIG5hbWU6IFwiRGlhbG9nXCJcbiAgICAgICAgfSkpKSkpLFxuICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE3LmgpKEhpZGRlbiwgeyBmZWF0dXJlczogNCAvKiBIaWRkZW4gKi8sIHJlZjogbWFpblRyZWVOb2RlIH0pXG4gICAgICBdKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaWFsb2dPdmVybGF5ID0gKDAsIGltcG9ydF92dWUxNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEaWFsb2dPdmVybGF5XCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZURpYWxvZ0NvbnRleHQoXCJEaWFsb2dPdmVybGF5XCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1kaWFsb2ctb3ZlcmxheS0ke3VzZUlkKCl9YDtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgYXBpLmNsb3NlKCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90OiB7IG9wZW46IGFwaS5kaWFsb2dTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH0sXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJEaWFsb2dPdmVybGF5XCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIERpYWxvZ0JhY2tkcm9wID0gKDAsIGltcG9ydF92dWUxNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEaWFsb2dCYWNrZHJvcFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZURpYWxvZ0NvbnRleHQoXCJEaWFsb2dCYWNrZHJvcFwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktZGlhbG9nLWJhY2tkcm9wLSR7dXNlSWQoKX1gO1xuICAgIGxldCBpbnRlcm5hbEJhY2tkcm9wUmVmID0gKDAsIGltcG9ydF92dWUxNy5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbEJhY2tkcm9wUmVmLCAkZWw6IGludGVybmFsQmFja2Ryb3BSZWYgfSk7XG4gICAgKDAsIGltcG9ydF92dWUxNy5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgIGlmIChhcGkucGFuZWxSZWYudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIDxEaWFsb2dCYWNrZHJvcCAvPiBjb21wb25lbnQgaXMgYmVpbmcgdXNlZCwgYnV0IGEgPERpYWxvZ1BhbmVsIC8+IGNvbXBvbmVudCBpcyBtaXNzaW5nLmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IGludGVybmFsQmFja2Ryb3BSZWYsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTE3LmgpKEZvcmNlUG9ydGFsUm9vdCwgeyBmb3JjZTogdHJ1ZSB9LCAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTE3LmgpKFBvcnRhbCwgKCkgPT4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHsgLi4uYXR0cnMsIC4uLnRoZWlyUHJvcHMgfSxcbiAgICAgICAgc2xvdDogeyBvcGVuOiBhcGkuZGlhbG9nU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiRGlhbG9nQmFja2Ryb3BcIlxuICAgICAgfSkpKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaWFsb2dQYW5lbCA9ICgwLCBpbXBvcnRfdnVlMTcuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlhbG9nUGFuZWxcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VEaWFsb2dDb250ZXh0KFwiRGlhbG9nUGFuZWxcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWRpYWxvZy1wYW5lbC0ke3VzZUlkKCl9YDtcbiAgICBleHBvc2UoeyBlbDogYXBpLnBhbmVsUmVmLCAkZWw6IGFwaS5wYW5lbFJlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHJlZjogYXBpLnBhbmVsUmVmLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja1xuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3Q6IHsgb3BlbjogYXBpLmRpYWxvZ1N0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIkRpYWxvZ1BhbmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIERpYWxvZ1RpdGxlID0gKDAsIGltcG9ydF92dWUxNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEaWFsb2dUaXRsZVwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiaDJcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZURpYWxvZ0NvbnRleHQoXCJEaWFsb2dUaXRsZVwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktZGlhbG9nLXRpdGxlLSR7dXNlSWQoKX1gO1xuICAgICgwLCBpbXBvcnRfdnVlMTcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICBhcGkuc2V0VGl0bGVJZChpZDIpO1xuICAgICAgKDAsIGltcG9ydF92dWUxNy5vblVubW91bnRlZCkoKCkgPT4gYXBpLnNldFRpdGxlSWQobnVsbCkpO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7IGlkOiBpZDIgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3Q6IHsgb3BlbjogYXBpLmRpYWxvZ1N0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIkRpYWxvZ1RpdGxlXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIERpYWxvZ0Rlc2NyaXB0aW9uID0gRGVzY3JpcHRpb247XG5cbi8vIHNyYy9jb21wb25lbnRzL2Rpc2Nsb3N1cmUvZGlzY2xvc3VyZS50c1xudmFyIGltcG9ydF92dWUxOCA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgRGlzY2xvc3VyZUNvbnRleHQgPSBTeW1ib2woXCJEaXNjbG9zdXJlQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZURpc2Nsb3N1cmVDb250ZXh0KGNvbXBvbmVudCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMTguaW5qZWN0KShEaXNjbG9zdXJlQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDxEaXNjbG9zdXJlIC8+IGNvbXBvbmVudC5gKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZURpc2Nsb3N1cmVDb250ZXh0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG52YXIgRGlzY2xvc3VyZVBhbmVsQ29udGV4dCA9IFN5bWJvbChcIkRpc2Nsb3N1cmVQYW5lbENvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VEaXNjbG9zdXJlUGFuZWxDb250ZXh0KCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUxOC5pbmplY3QpKERpc2Nsb3N1cmVQYW5lbENvbnRleHQsIG51bGwpO1xufVxudmFyIERpc2Nsb3N1cmUgPSAoMCwgaW1wb3J0X3Z1ZTE4LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIkRpc2Nsb3N1cmVcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBkZWZhdWx0T3BlbjogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzIH0pIHtcbiAgICBsZXQgYnV0dG9uSWQgPSBgaGVhZGxlc3N1aS1kaXNjbG9zdXJlLWJ1dHRvbi0ke3VzZUlkKCl9YDtcbiAgICBsZXQgcGFuZWxJZCA9IGBoZWFkbGVzc3VpLWRpc2Nsb3N1cmUtcGFuZWwtJHt1c2VJZCgpfWA7XG4gICAgbGV0IGRpc2Nsb3N1cmVTdGF0ZSA9ICgwLCBpbXBvcnRfdnVlMTgucmVmKShwcm9wcy5kZWZhdWx0T3BlbiA/IDAgLyogT3BlbiAqLyA6IDEgLyogQ2xvc2VkICovKTtcbiAgICBsZXQgcGFuZWxSZWYgPSAoMCwgaW1wb3J0X3Z1ZTE4LnJlZikobnVsbCk7XG4gICAgbGV0IGJ1dHRvblJlZiA9ICgwLCBpbXBvcnRfdnVlMTgucmVmKShudWxsKTtcbiAgICBsZXQgYXBpID0ge1xuICAgICAgYnV0dG9uSWQsXG4gICAgICBwYW5lbElkLFxuICAgICAgZGlzY2xvc3VyZVN0YXRlLFxuICAgICAgcGFuZWw6IHBhbmVsUmVmLFxuICAgICAgYnV0dG9uOiBidXR0b25SZWYsXG4gICAgICB0b2dnbGVEaXNjbG9zdXJlKCkge1xuICAgICAgICBkaXNjbG9zdXJlU3RhdGUudmFsdWUgPSBtYXRjaChkaXNjbG9zdXJlU3RhdGUudmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBPcGVuICovXTogMSAvKiBDbG9zZWQgKi8sXG4gICAgICAgICAgWzEgLyogQ2xvc2VkICovXTogMCAvKiBPcGVuICovXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNsb3NlRGlzY2xvc3VyZSgpIHtcbiAgICAgICAgaWYgKGRpc2Nsb3N1cmVTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkaXNjbG9zdXJlU3RhdGUudmFsdWUgPSAxIC8qIENsb3NlZCAqLztcbiAgICAgIH0sXG4gICAgICBjbG9zZShmb2N1c2FibGVFbGVtZW50KSB7XG4gICAgICAgIGFwaS5jbG9zZURpc2Nsb3N1cmUoKTtcbiAgICAgICAgbGV0IHJlc3RvcmVFbGVtZW50ID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWZvY3VzYWJsZUVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gZG9tKGFwaS5idXR0b24pO1xuICAgICAgICAgIGlmIChmb2N1c2FibGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudDtcbiAgICAgICAgICBpZiAoZm9jdXNhYmxlRWxlbWVudC52YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuIGRvbShmb2N1c2FibGVFbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gZG9tKGFwaS5idXR0b24pO1xuICAgICAgICB9KSgpO1xuICAgICAgICByZXN0b3JlRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcmVzdG9yZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgICgwLCBpbXBvcnRfdnVlMTgucHJvdmlkZSkoRGlzY2xvc3VyZUNvbnRleHQsIGFwaSk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlMTguY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIHJldHVybiBtYXRjaChkaXNjbG9zdXJlU3RhdGUudmFsdWUsIHtcbiAgICAgICAgWzAgLyogT3BlbiAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgICAgWzEgLyogQ2xvc2VkICovXTogMSAvKiBDbG9zZWQgKi9cbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHsgZGVmYXVsdE9wZW46IF8sIC4uLnRoZWlyUHJvcHMgfSA9IHByb3BzO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGRpc2Nsb3N1cmVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLCBjbG9zZTogYXBpLmNsb3NlIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgb3VyUHJvcHM6IHt9LFxuICAgICAgICBzbG90LFxuICAgICAgICBzbG90cyxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIG5hbWU6IFwiRGlzY2xvc3VyZVwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBEaXNjbG9zdXJlQnV0dG9uID0gKDAsIGltcG9ydF92dWUxOC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJEaXNjbG9zdXJlQnV0dG9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJidXR0b25cIiB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZURpc2Nsb3N1cmVDb250ZXh0KFwiRGlzY2xvc3VyZUJ1dHRvblwiKTtcbiAgICBsZXQgcGFuZWxDb250ZXh0ID0gdXNlRGlzY2xvc3VyZVBhbmVsQ29udGV4dCgpO1xuICAgIGxldCBpc1dpdGhpblBhbmVsID0gcGFuZWxDb250ZXh0ID09PSBudWxsID8gZmFsc2UgOiBwYW5lbENvbnRleHQgPT09IGFwaS5wYW5lbElkO1xuICAgIGxldCBpbnRlcm5hbEJ1dHRvblJlZiA9ICgwLCBpbXBvcnRfdnVlMTgucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxCdXR0b25SZWYsICRlbDogaW50ZXJuYWxCdXR0b25SZWYgfSk7XG4gICAgaWYgKCFpc1dpdGhpblBhbmVsKSB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTE4LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICAgIGFwaS5idXR0b24udmFsdWUgPSBpbnRlcm5hbEJ1dHRvblJlZi52YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgdHlwZSA9IHVzZVJlc29sdmVCdXR0b25UeXBlKCgwLCBpbXBvcnRfdnVlMTguY29tcHV0ZWQpKCgpID0+ICh7IGFzOiBwcm9wcy5hcywgdHlwZTogYXR0cnMudHlwZSB9KSksIGludGVybmFsQnV0dG9uUmVmKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzV2l0aGluUGFuZWwpIHtcbiAgICAgICAgYXBpLnRvZ2dsZURpc2Nsb3N1cmUoKTtcbiAgICAgICAgKF9hID0gZG9tKGFwaS5idXR0b24pKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwaS50b2dnbGVEaXNjbG9zdXJlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzV2l0aGluUGFuZWwpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgYXBpLnRvZ2dsZURpc2Nsb3N1cmUoKTtcbiAgICAgICAgICAgIChfYSA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgYXBpLnRvZ2dsZURpc2Nsb3N1cmUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVVwKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogYXBpLmRpc2Nsb3N1cmVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSBpc1dpdGhpblBhbmVsID8ge1xuICAgICAgICByZWY6IGludGVybmFsQnV0dG9uUmVmLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duXG4gICAgICB9IDoge1xuICAgICAgICBpZDogYXBpLmJ1dHRvbklkLFxuICAgICAgICByZWY6IGludGVybmFsQnV0dG9uUmVmLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogcHJvcHMuZGlzYWJsZWQgPyB2b2lkIDAgOiBhcGkuZGlzY2xvc3VyZVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBkb20oYXBpLnBhbmVsKSA/IGFwaS5wYW5lbElkIDogdm9pZCAwLFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgPyB0cnVlIDogdm9pZCAwLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbktleXVwOiBoYW5kbGVLZXlVcFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJEaXNjbG9zdXJlQnV0dG9uXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIERpc2Nsb3N1cmVQYW5lbCA9ICgwLCBpbXBvcnRfdnVlMTguZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiRGlzY2xvc3VyZVBhbmVsXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIHN0YXRpYzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlRGlzY2xvc3VyZUNvbnRleHQoXCJEaXNjbG9zdXJlUGFuZWxcIik7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5wYW5lbCwgJGVsOiBhcGkucGFuZWwgfSk7XG4gICAgKDAsIGltcG9ydF92dWUxOC5wcm92aWRlKShEaXNjbG9zdXJlUGFuZWxDb250ZXh0LCBhcGkucGFuZWxJZCk7XG4gICAgbGV0IHVzZXNPcGVuQ2xvc2VkU3RhdGUgPSB1c2VPcGVuQ2xvc2VkKCk7XG4gICAgbGV0IHZpc2libGUgPSAoMCwgaW1wb3J0X3Z1ZTE4LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAodXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaS5kaXNjbG9zdXJlU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5kaXNjbG9zdXJlU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLywgY2xvc2U6IGFwaS5jbG9zZSB9O1xuICAgICAgbGV0IG91clByb3BzID0geyBpZDogYXBpLnBhbmVsSWQsIHJlZjogYXBpLnBhbmVsIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIHZpc2libGU6IHZpc2libGUudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiRGlzY2xvc3VyZVBhbmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9saXN0Ym94L2xpc3Rib3gudHNcbnZhciBpbXBvcnRfdnVlMTkgPSByZXF1aXJlKFwidnVlXCIpO1xuZnVuY3Rpb24gbmV4dEZyYW1lKGNiKSB7XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpKTtcbn1cbnZhciBMaXN0Ym94Q29udGV4dCA9IFN5bWJvbChcIkxpc3Rib3hDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlTGlzdGJveENvbnRleHQoY29tcG9uZW50KSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUxOS5pbmplY3QpKExpc3Rib3hDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKGA8JHtjb21wb25lbnR9IC8+IGlzIG1pc3NpbmcgYSBwYXJlbnQgPExpc3Rib3ggLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlTGlzdGJveENvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBMaXN0Ym94ID0gKDAsIGltcG9ydF92dWUxOS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJMaXN0Ym94XCIsXG4gIGVtaXRzOiB7IFwidXBkYXRlOm1vZGVsVmFsdWVcIjogKF92YWx1ZSkgPT4gdHJ1ZSB9LFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwidGVtcGxhdGVcIiB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBob3Jpem9udGFsOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZywgTnVtYmVyLCBCb29sZWFuXSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9LFxuICAgIG11bHRpcGxlOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGVtaXQgfSkge1xuICAgIGxldCBsaXN0Ym94U3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTE5LnJlZikoMSAvKiBDbG9zZWQgKi8pO1xuICAgIGxldCBsYWJlbFJlZiA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKShudWxsKTtcbiAgICBsZXQgYnV0dG9uUmVmID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKG51bGwpO1xuICAgIGxldCBvcHRpb25zUmVmID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKG51bGwpO1xuICAgIGxldCBvcHRpb25zID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKFtdKTtcbiAgICBsZXQgc2VhcmNoUXVlcnkgPSAoMCwgaW1wb3J0X3Z1ZTE5LnJlZikoXCJcIik7XG4gICAgbGV0IGFjdGl2ZU9wdGlvbkluZGV4ID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKG51bGwpO1xuICAgIGxldCBhY3RpdmF0aW9uVHJpZ2dlciA9ICgwLCBpbXBvcnRfdnVlMTkucmVmKSgxIC8qIE90aGVyICovKTtcbiAgICBmdW5jdGlvbiBhZGp1c3RPcmRlcmVkU3RhdGUoYWRqdXN0bWVudCA9IChpKSA9PiBpKSB7XG4gICAgICBsZXQgY3VycmVudEFjdGl2ZU9wdGlvbiA9IGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlICE9PSBudWxsID8gb3B0aW9ucy52YWx1ZVthY3RpdmVPcHRpb25JbmRleC52YWx1ZV0gOiBudWxsO1xuICAgICAgbGV0IHNvcnRlZE9wdGlvbnMgPSBzb3J0QnlEb21Ob2RlKGFkanVzdG1lbnQob3B0aW9ucy52YWx1ZS5zbGljZSgpKSwgKG9wdGlvbikgPT4gZG9tKG9wdGlvbi5kYXRhUmVmLmRvbVJlZikpO1xuICAgICAgbGV0IGFkanVzdGVkQWN0aXZlT3B0aW9uSW5kZXggPSBjdXJyZW50QWN0aXZlT3B0aW9uID8gc29ydGVkT3B0aW9ucy5pbmRleE9mKGN1cnJlbnRBY3RpdmVPcHRpb24pIDogbnVsbDtcbiAgICAgIGlmIChhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHNvcnRlZE9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhZGp1c3RlZEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgdmFsdWUgPSAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tb2RlbFZhbHVlKTtcbiAgICBsZXQgbW9kZSA9ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IHByb3BzLm11bHRpcGxlID8gMSAvKiBNdWx0aSAqLyA6IDAgLyogU2luZ2xlICovKTtcbiAgICBsZXQgYXBpID0ge1xuICAgICAgbGlzdGJveFN0YXRlLFxuICAgICAgdmFsdWUsXG4gICAgICBtb2RlLFxuICAgICAgY29tcGFyZShhLCB6KSB7XG4gICAgICAgIHJldHVybiBhID09PSB6O1xuICAgICAgfSxcbiAgICAgIG9yaWVudGF0aW9uOiAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5ob3Jpem9udGFsID8gXCJob3Jpem9udGFsXCIgOiBcInZlcnRpY2FsXCIpLFxuICAgICAgbGFiZWxSZWYsXG4gICAgICBidXR0b25SZWYsXG4gICAgICBvcHRpb25zUmVmLFxuICAgICAgZGlzYWJsZWQ6ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IHByb3BzLmRpc2FibGVkKSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWFyY2hRdWVyeSxcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgYWN0aXZhdGlvblRyaWdnZXIsXG4gICAgICBjbG9zZUxpc3Rib3goKSB7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChsaXN0Ym94U3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGlzdGJveFN0YXRlLnZhbHVlID0gMSAvKiBDbG9zZWQgKi87XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBvcGVuTGlzdGJveCgpIHtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGlzdGJveFN0YXRlLnZhbHVlID0gMCAvKiBPcGVuICovO1xuICAgICAgfSxcbiAgICAgIGdvVG9PcHRpb24oZm9jdXMsIGlkMiwgdHJpZ2dlcikge1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAobGlzdGJveFN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBhZGp1c3RlZFN0YXRlID0gYWRqdXN0T3JkZXJlZFN0YXRlKCk7XG4gICAgICAgIGxldCBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBjYWxjdWxhdGVBY3RpdmVJbmRleChmb2N1cyA9PT0gNCAvKiBTcGVjaWZpYyAqLyA/IHsgZm9jdXM6IDQgLyogU3BlY2lmaWMgKi8sIGlkOiBpZDIgfSA6IHsgZm9jdXMgfSwge1xuICAgICAgICAgIHJlc29sdmVJdGVtczogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zLFxuICAgICAgICAgIHJlc29sdmVBY3RpdmVJbmRleDogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICByZXNvbHZlSWQ6IChvcHRpb24pID0+IG9wdGlvbi5pZCxcbiAgICAgICAgICByZXNvbHZlRGlzYWJsZWQ6IChvcHRpb24pID0+IG9wdGlvbi5kYXRhUmVmLmRpc2FibGVkXG4gICAgICAgIH0pO1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSA9IFwiXCI7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IHRyaWdnZXIgIT0gbnVsbCA/IHRyaWdnZXIgOiAxIC8qIE90aGVyICovO1xuICAgICAgICBvcHRpb25zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5vcHRpb25zO1xuICAgICAgfSxcbiAgICAgIHNlYXJjaCh2YWx1ZTIpIHtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgd2FzQWxyZWFkeVNlYXJjaGluZyA9IHNlYXJjaFF1ZXJ5LnZhbHVlICE9PSBcIlwiO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gd2FzQWxyZWFkeVNlYXJjaGluZyA/IDAgOiAxO1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSArPSB2YWx1ZTIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHJlT3JkZXJlZE9wdGlvbnMgPSBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCA/IG9wdGlvbnMudmFsdWUuc2xpY2UoYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgKyBvZmZzZXQpLmNvbmNhdChvcHRpb25zLnZhbHVlLnNsaWNlKDAsIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlICsgb2Zmc2V0KSkgOiBvcHRpb25zLnZhbHVlO1xuICAgICAgICBsZXQgbWF0Y2hpbmdPcHRpb24gPSByZU9yZGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmRhdGFSZWYudGV4dFZhbHVlLnN0YXJ0c1dpdGgoc2VhcmNoUXVlcnkudmFsdWUpICYmICFvcHRpb24uZGF0YVJlZi5kaXNhYmxlZCk7XG4gICAgICAgIGxldCBtYXRjaElkeCA9IG1hdGNoaW5nT3B0aW9uID8gb3B0aW9ucy52YWx1ZS5pbmRleE9mKG1hdGNoaW5nT3B0aW9uKSA6IC0xO1xuICAgICAgICBpZiAobWF0Y2hJZHggPT09IC0xIHx8IG1hdGNoSWR4ID09PSBhY3RpdmVPcHRpb25JbmRleC52YWx1ZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gbWF0Y2hJZHg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gMSAvKiBPdGhlciAqLztcbiAgICAgIH0sXG4gICAgICBjbGVhclNlYXJjaCgpIHtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoc2VhcmNoUXVlcnkudmFsdWUgPT09IFwiXCIpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSA9IFwiXCI7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJPcHRpb24oaWQyLCBkYXRhUmVmKSB7XG4gICAgICAgIGxldCBhZGp1c3RlZFN0YXRlID0gYWRqdXN0T3JkZXJlZFN0YXRlKChvcHRpb25zMikgPT4ge1xuICAgICAgICAgIHJldHVybiBbLi4ub3B0aW9uczIsIHsgaWQ6IGlkMiwgZGF0YVJlZiB9XTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLm9wdGlvbnM7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgIH0sXG4gICAgICB1bnJlZ2lzdGVyT3B0aW9uKGlkMikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgob3B0aW9uczIpID0+IHtcbiAgICAgICAgICBsZXQgaWR4ID0gb3B0aW9uczIuZmluZEluZGV4KChhKSA9PiBhLmlkID09PSBpZDIpO1xuICAgICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgICAgb3B0aW9uczIuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMyO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IGFkanVzdGVkU3RhdGUub3B0aW9ucztcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgudmFsdWUgPSBhZGp1c3RlZFN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IDEgLyogT3RoZXIgKi87XG4gICAgICB9LFxuICAgICAgc2VsZWN0KHZhbHVlMikge1xuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgbWF0Y2gobW9kZS52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IHZhbHVlMixcbiAgICAgICAgICBbMSAvKiBNdWx0aSAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb3B5ID0gKDAsIGltcG9ydF92dWUxOS50b1JhdykoYXBpLnZhbHVlLnZhbHVlKS5zbGljZSgpO1xuICAgICAgICAgICAgbGV0IHJhdyA9ICgwLCBpbXBvcnRfdnVlMTkudG9SYXcpKHZhbHVlMik7XG4gICAgICAgICAgICBsZXQgaWR4ID0gY29weS5maW5kSW5kZXgoKHZhbHVlMykgPT4gYXBpLmNvbXBhcmUocmF3LCAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KSh2YWx1ZTMpKSk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBjb3B5LnB1c2gocmF3KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvcHkuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHVzZU91dHNpZGVDbGljayhbYnV0dG9uUmVmLCBvcHRpb25zUmVmXSwgKGV2ZW50LCB0YXJnZXQpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGFwaS5jbG9zZUxpc3Rib3goKTtcbiAgICAgIGlmICghaXNGb2N1c2FibGVFbGVtZW50KHRhcmdldCwgMSAvKiBMb29zZSAqLykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgKF9hID0gZG9tKGJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IGxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSk7XG4gICAgKDAsIGltcG9ydF92dWUxOS5wcm92aWRlKShMaXN0Ym94Q29udGV4dCwgYXBpKTtcbiAgICB1c2VPcGVuQ2xvc2VkUHJvdmlkZXIoKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4gbWF0Y2gobGlzdGJveFN0YXRlLnZhbHVlLCB7XG4gICAgICBbMCAvKiBPcGVuICovXTogMCAvKiBPcGVuICovLFxuICAgICAgWzEgLyogQ2xvc2VkICovXTogMSAvKiBDbG9zZWQgKi9cbiAgICB9KSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBuYW1lLCBtb2RlbFZhbHVlLCBkaXNhYmxlZCwgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogbGlzdGJveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sIGRpc2FibGVkIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUxOS5oKShpbXBvcnRfdnVlMTkuRnJhZ21lbnQsIFtcbiAgICAgICAgLi4ubmFtZSAhPSBudWxsICYmIG1vZGVsVmFsdWUgIT0gbnVsbCA/IG9iamVjdFRvRm9ybUVudHJpZXMoeyBbbmFtZV06IG1vZGVsVmFsdWUgfSkubWFwKChbbmFtZTIsIHZhbHVlMl0pID0+ICgwLCBpbXBvcnRfdnVlMTkuaCkoSGlkZGVuLCBjb21wYWN0KHtcbiAgICAgICAgICBmZWF0dXJlczogNCAvKiBIaWRkZW4gKi8sXG4gICAgICAgICAga2V5OiBuYW1lMixcbiAgICAgICAgICBhczogXCJpbnB1dFwiLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIG5hbWU6IG5hbWUyLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZTJcbiAgICAgICAgfSkpKSA6IFtdLFxuICAgICAgICByZW5kZXIoe1xuICAgICAgICAgIG91clByb3BzOiB7fSxcbiAgICAgICAgICB0aGVpclByb3BzOiB7XG4gICAgICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgICAgIC4uLm9taXQodGhlaXJQcm9wcywgW1wib25VcGRhdGU6bW9kZWxWYWx1ZVwiLCBcImhvcml6b250YWxcIiwgXCJtdWx0aXBsZVwiLCBcImJ5XCJdKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xvdCxcbiAgICAgICAgICBzbG90cyxcbiAgICAgICAgICBhdHRycyxcbiAgICAgICAgICBuYW1lOiBcIkxpc3Rib3hcIlxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTGlzdGJveExhYmVsID0gKDAsIGltcG9ydF92dWUxOS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJMaXN0Ym94TGFiZWxcIixcbiAgcHJvcHM6IHsgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJsYWJlbFwiIH0gfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlTGlzdGJveENvbnRleHQoXCJMaXN0Ym94TGFiZWxcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWxpc3Rib3gtbGFiZWwtJHt1c2VJZCgpfWA7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHtcbiAgICAgICAgb3BlbjogYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBkaXNhYmxlZDogYXBpLmRpc2FibGVkLnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0geyBpZDogaWQyLCByZWY6IGFwaS5sYWJlbFJlZiwgb25DbGljazogaGFuZGxlQ2xpY2sgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJMaXN0Ym94TGFiZWxcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgTGlzdGJveEJ1dHRvbiA9ICgwLCBpbXBvcnRfdnVlMTkuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGlzdGJveEJ1dHRvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiYnV0dG9uXCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUxpc3Rib3hDb250ZXh0KFwiTGlzdGJveEJ1dHRvblwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktbGlzdGJveC1idXR0b24tJHt1c2VJZCgpfWA7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5idXR0b25SZWYsICRlbDogYXBpLmJ1dHRvblJlZiB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiIC8qIEFycm93RG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGFwaS5vcGVuTGlzdGJveCgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMTkubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IGRvbShhcGkub3B0aW9uc1JlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICBpZiAoIWFwaS52YWx1ZS52YWx1ZSlcbiAgICAgICAgICAgICAgYXBpLmdvVG9PcHRpb24oMCAvKiBGaXJzdCAqLyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCIgLyogQXJyb3dVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGFwaS5vcGVuTGlzdGJveCgpO1xuICAgICAgICAgICgwLCBpbXBvcnRfdnVlMTkubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IGRvbShhcGkub3B0aW9uc1JlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICBpZiAoIWFwaS52YWx1ZS52YWx1ZSlcbiAgICAgICAgICAgICAgYXBpLmdvVG9PcHRpb24oMyAvKiBMYXN0ICovKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5VXAoZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGlmIChhcGkuZGlzYWJsZWQudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChhcGkubGlzdGJveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pIHtcbiAgICAgICAgYXBpLmNsb3NlTGlzdGJveCgpO1xuICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYXBpLm9wZW5MaXN0Ym94KCk7XG4gICAgICAgIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLm9wdGlvbnNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBhcGkuYnV0dG9uUmVmKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGxldCBzbG90ID0ge1xuICAgICAgICBvcGVuOiBhcGkubGlzdGJveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIGRpc2FibGVkOiBhcGkuZGlzYWJsZWQudmFsdWVcbiAgICAgIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogYXBpLmJ1dHRvblJlZixcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAoX2EgPSBkb20oYXBpLm9wdGlvbnNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBhcGkuZGlzYWJsZWQudmFsdWUgPyB2b2lkIDAgOiBhcGkubGlzdGJveFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8sXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFwaS5sYWJlbFJlZi52YWx1ZSA/IFsoX2IgPSBkb20oYXBpLmxhYmVsUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkLCBpZDJdLmpvaW4oXCIgXCIpIDogdm9pZCAwLFxuICAgICAgICBkaXNhYmxlZDogYXBpLmRpc2FibGVkLnZhbHVlID09PSB0cnVlID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbktleXVwOiBoYW5kbGVLZXlVcCxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiTGlzdGJveEJ1dHRvblwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBMaXN0Ym94T3B0aW9ucyA9ICgwLCBpbXBvcnRfdnVlMTkuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGlzdGJveE9wdGlvbnNcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInVsXCIgfSxcbiAgICBzdGF0aWM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUxpc3Rib3hDb250ZXh0KFwiTGlzdGJveE9wdGlvbnNcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLWxpc3Rib3gtb3B0aW9ucy0ke3VzZUlkKCl9YDtcbiAgICBsZXQgc2VhcmNoRGVib3VuY2UgPSAoMCwgaW1wb3J0X3Z1ZTE5LnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5vcHRpb25zUmVmLCAkZWw6IGFwaS5vcHRpb25zUmVmIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIGlmIChzZWFyY2hEZWJvdW5jZS52YWx1ZSlcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNlYXJjaERlYm91bmNlLnZhbHVlKTtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAgaWYgKGFwaS5zZWFyY2hRdWVyeS52YWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5zZWFyY2goZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKGFwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGFjdGl2ZU9wdGlvbiA9IGFwaS5vcHRpb25zLnZhbHVlW2FwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZV07XG4gICAgICAgICAgICBhcGkuc2VsZWN0KGFjdGl2ZU9wdGlvbi5kYXRhUmVmLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFwaS5tb2RlLnZhbHVlID09PSAwIC8qIFNpbmdsZSAqLykge1xuICAgICAgICAgICAgYXBpLmNsb3NlTGlzdGJveCgpO1xuICAgICAgICAgICAgKDAsIGltcG9ydF92dWUxOS5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgbWF0Y2goYXBpLm9yaWVudGF0aW9uLnZhbHVlLCB7XG4gICAgICAgICAgdmVydGljYWw6IFwiQXJyb3dEb3duXCIgLyogQXJyb3dEb3duICovLFxuICAgICAgICAgIGhvcml6b250YWw6IFwiQXJyb3dSaWdodFwiIC8qIEFycm93UmlnaHQgKi9cbiAgICAgICAgfSk6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gYXBpLmdvVG9PcHRpb24oMiAvKiBOZXh0ICovKTtcbiAgICAgICAgY2FzZSBtYXRjaChhcGkub3JpZW50YXRpb24udmFsdWUsIHsgdmVydGljYWw6IFwiQXJyb3dVcFwiIC8qIEFycm93VXAgKi8sIGhvcml6b250YWw6IFwiQXJyb3dMZWZ0XCIgLyogQXJyb3dMZWZ0ICovIH0pOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDEgLyogUHJldmlvdXMgKi8pO1xuICAgICAgICBjYXNlIFwiSG9tZVwiIC8qIEhvbWUgKi86XG4gICAgICAgIGNhc2UgXCJQYWdlVXBcIiAvKiBQYWdlVXAgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gYXBpLmdvVG9PcHRpb24oMCAvKiBGaXJzdCAqLyk7XG4gICAgICAgIGNhc2UgXCJFbmRcIiAvKiBFbmQgKi86XG4gICAgICAgIGNhc2UgXCJQYWdlRG93blwiIC8qIFBhZ2VEb3duICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDMgLyogTGFzdCAqLyk7XG4gICAgICAgIGNhc2UgXCJFc2NhcGVcIiAvKiBFc2NhcGUgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhcGkuY2xvc2VMaXN0Ym94KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWUxOS5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRhYlwiIC8qIFRhYiAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBhcGkuc2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgICBzZWFyY2hEZWJvdW5jZS52YWx1ZSA9IHNldFRpbWVvdXQoKCkgPT4gYXBpLmNsZWFyU2VhcmNoKCksIDM1MCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgdmlzaWJsZSA9ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmICh1c2VzT3BlbkNsb3NlZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1c2VzT3BlbkNsb3NlZFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogYXBpLmxpc3Rib3hTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IGFwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZSA9PT0gbnVsbCA/IHZvaWQgMCA6IChfYSA9IGFwaS5vcHRpb25zLnZhbHVlW2FwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZV0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5pZCxcbiAgICAgICAgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiOiBhcGkubW9kZS52YWx1ZSA9PT0gMSAvKiBNdWx0aSAqLyA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IChfZCA9IChfYiA9IGRvbShhcGkubGFiZWxSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQpICE9IG51bGwgPyBfZCA6IChfYyA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmlkLFxuICAgICAgICBcImFyaWEtb3JpZW50YXRpb25cIjogYXBpLm9yaWVudGF0aW9uLnZhbHVlLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiLFxuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgcmVmOiBhcGkub3B0aW9uc1JlZlxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgZmVhdHVyZXM6IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi8gfCAyIC8qIFN0YXRpYyAqLyxcbiAgICAgICAgdmlzaWJsZTogdmlzaWJsZS52YWx1ZSxcbiAgICAgICAgbmFtZTogXCJMaXN0Ym94T3B0aW9uc1wiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBMaXN0Ym94T3B0aW9uID0gKDAsIGltcG9ydF92dWUxOS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJMaXN0Ym94T3B0aW9uXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJsaVwiIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW5dIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZUxpc3Rib3hDb250ZXh0KFwiTGlzdGJveE9wdGlvblwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktbGlzdGJveC1vcHRpb24tJHt1c2VJZCgpfWA7XG4gICAgbGV0IGludGVybmFsT3B0aW9uUmVmID0gKDAsIGltcG9ydF92dWUxOS5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbE9wdGlvblJlZiwgJGVsOiBpbnRlcm5hbE9wdGlvblJlZiB9KTtcbiAgICBsZXQgYWN0aXZlID0gKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgcmV0dXJuIGFwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZSAhPT0gbnVsbCA/IGFwaS5vcHRpb25zLnZhbHVlW2FwaS5hY3RpdmVPcHRpb25JbmRleC52YWx1ZV0uaWQgPT09IGlkMiA6IGZhbHNlO1xuICAgIH0pO1xuICAgIGxldCBzZWxlY3RlZCA9ICgwLCBpbXBvcnRfdnVlMTkuY29tcHV0ZWQpKCgpID0+IG1hdGNoKGFwaS5tb2RlLnZhbHVlLCB7XG4gICAgICBbMCAvKiBTaW5nbGUgKi9dOiAoKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KShwcm9wcy52YWx1ZSkpLFxuICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KShhcGkudmFsdWUudmFsdWUpLnNvbWUoKHZhbHVlKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KSh2YWx1ZSksICgwLCBpbXBvcnRfdnVlMTkudG9SYXcpKHByb3BzLnZhbHVlKSkpXG4gICAgfSkpO1xuICAgIGxldCBpc0ZpcnN0U2VsZWN0ZWQgPSAoMCwgaW1wb3J0X3Z1ZTE5LmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICByZXR1cm4gbWF0Y2goYXBpLm1vZGUudmFsdWUsIHtcbiAgICAgICAgWzEgLyogTXVsdGkgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIGxldCBjdXJyZW50VmFsdWVzID0gKDAsIGltcG9ydF92dWUxOS50b1JhdykoYXBpLnZhbHVlLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gKChfYSA9IGFwaS5vcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4gY3VycmVudFZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUxOS50b1JhdykodmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTE5LnRvUmF3KShvcHRpb24uZGF0YVJlZi52YWx1ZSkpKSkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5pZCkgPT09IGlkMjtcbiAgICAgICAgfSxcbiAgICAgICAgWzAgLyogU2luZ2xlICovXTogKCkgPT4gc2VsZWN0ZWQudmFsdWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGxldCBkYXRhUmVmID0gKDAsIGltcG9ydF92dWUxOS5jb21wdXRlZCkoKCkgPT4gKHtcbiAgICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHRleHRWYWx1ZTogXCJcIixcbiAgICAgIGRvbVJlZjogaW50ZXJuYWxPcHRpb25SZWZcbiAgICB9KSk7XG4gICAgKDAsIGltcG9ydF92dWUxOS5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgdGV4dFZhbHVlID0gKF9iID0gKF9hID0gZG9tKGludGVybmFsT3B0aW9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2IudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBpZiAodGV4dFZhbHVlICE9PSB2b2lkIDApXG4gICAgICAgIGRhdGFSZWYudmFsdWUudGV4dFZhbHVlID0gdGV4dFZhbHVlO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTkub25Nb3VudGVkKSgoKSA9PiBhcGkucmVnaXN0ZXJPcHRpb24oaWQyLCBkYXRhUmVmKSk7XG4gICAgKDAsIGltcG9ydF92dWUxOS5vblVubW91bnRlZCkoKCkgPT4gYXBpLnVucmVnaXN0ZXJPcHRpb24oaWQyKSk7XG4gICAgKDAsIGltcG9ydF92dWUxOS5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgICgwLCBpbXBvcnRfdnVlMTkud2F0Y2gpKFthcGkubGlzdGJveFN0YXRlLCBzZWxlY3RlZF0sICgpID0+IHtcbiAgICAgICAgaWYgKGFwaS5saXN0Ym94U3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghc2VsZWN0ZWQudmFsdWUpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBtYXRjaChhcGkubW9kZS52YWx1ZSwge1xuICAgICAgICAgIFsxIC8qIE11bHRpICovXTogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRmlyc3RTZWxlY3RlZC52YWx1ZSlcbiAgICAgICAgICAgICAgYXBpLmdvVG9PcHRpb24oNCAvKiBTcGVjaWZpYyAqLywgaWQyKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFswIC8qIFNpbmdsZSAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGFwaS5nb1RvT3B0aW9uKDQgLyogU3BlY2lmaWMgKi8sIGlkMik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMTkud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgIGlmIChhcGkubGlzdGJveFN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghYWN0aXZlLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoYXBpLmFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID09PSAwIC8qIFBvaW50ZXIgKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgICgwLCBpbXBvcnRfdnVlMTkubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IGRvbShpbnRlcm5hbE9wdGlvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zY3JvbGxJbnRvVmlldykgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHsgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhcGkuc2VsZWN0KHByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChhcGkubW9kZS52YWx1ZSA9PT0gMCAvKiBTaW5nbGUgKi8pIHtcbiAgICAgICAgYXBpLmNsb3NlTGlzdGJveCgpO1xuICAgICAgICAoMCwgaW1wb3J0X3Z1ZTE5Lm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLmJ1dHRvblJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuIGFwaS5nb1RvT3B0aW9uKDUgLyogTm90aGluZyAqLyk7XG4gICAgICBhcGkuZ29Ub09wdGlvbig0IC8qIFNwZWNpZmljICovLCBpZDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVNb3ZlKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoYWN0aXZlLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBhcGkuZ29Ub09wdGlvbig0IC8qIFNwZWNpZmljICovLCBpZDIsIDAgLyogUG9pbnRlciAqLyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUxlYXZlKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9PcHRpb24oNSAvKiBOb3RoaW5nICovKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IGRpc2FibGVkIH0gPSBwcm9wcztcbiAgICAgIGxldCBzbG90ID0geyBhY3RpdmU6IGFjdGl2ZS52YWx1ZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkLnZhbHVlLCBkaXNhYmxlZCB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IGludGVybmFsT3B0aW9uUmVmLFxuICAgICAgICByb2xlOiBcIm9wdGlvblwiLFxuICAgICAgICB0YWJJbmRleDogZGlzYWJsZWQgPT09IHRydWUgPyB2b2lkIDAgOiAtMSxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID09PSB0cnVlID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkLnZhbHVlID09PSB0cnVlID8gc2VsZWN0ZWQudmFsdWUgOiB2b2lkIDAsXG4gICAgICAgIGRpc2FibGVkOiB2b2lkIDAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgb25Qb2ludGVybW92ZTogaGFuZGxlTW92ZSxcbiAgICAgICAgb25Nb3VzZW1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uUG9pbnRlcmxlYXZlOiBoYW5kbGVMZWF2ZSxcbiAgICAgICAgb25Nb3VzZWxlYXZlOiBoYW5kbGVMZWF2ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogb21pdChwcm9wcywgW1widmFsdWVcIiwgXCJkaXNhYmxlZFwiXSksXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJMaXN0Ym94T3B0aW9uXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tZW51L21lbnUudHNcbnZhciBpbXBvcnRfdnVlMjAgPSByZXF1aXJlKFwidnVlXCIpO1xuZnVuY3Rpb24gbmV4dEZyYW1lMihjYikge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKSk7XG59XG52YXIgTWVudUNvbnRleHQgPSBTeW1ib2woXCJNZW51Q29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZU1lbnVDb250ZXh0KGNvbXBvbmVudCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMjAuaW5qZWN0KShNZW51Q29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcihgPCR7Y29tcG9uZW50fSAvPiBpcyBtaXNzaW5nIGEgcGFyZW50IDxNZW51IC8+IGNvbXBvbmVudC5gKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZU1lbnVDb250ZXh0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG52YXIgTWVudSA9ICgwLCBpbXBvcnRfdnVlMjAuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTWVudVwiLFxuICBwcm9wczogeyBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIGxldCBtZW51U3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikoMSAvKiBDbG9zZWQgKi8pO1xuICAgIGxldCBidXR0b25SZWYgPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikobnVsbCk7XG4gICAgbGV0IGl0ZW1zUmVmID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKG51bGwpO1xuICAgIGxldCBpdGVtcyA9ICgwLCBpbXBvcnRfdnVlMjAucmVmKShbXSk7XG4gICAgbGV0IHNlYXJjaFF1ZXJ5ID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKFwiXCIpO1xuICAgIGxldCBhY3RpdmVJdGVtSW5kZXggPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikobnVsbCk7XG4gICAgbGV0IGFjdGl2YXRpb25UcmlnZ2VyID0gKDAsIGltcG9ydF92dWUyMC5yZWYpKDEgLyogT3RoZXIgKi8pO1xuICAgIGZ1bmN0aW9uIGFkanVzdE9yZGVyZWRTdGF0ZShhZGp1c3RtZW50ID0gKGkpID0+IGkpIHtcbiAgICAgIGxldCBjdXJyZW50QWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSAhPT0gbnVsbCA/IGl0ZW1zLnZhbHVlW2FjdGl2ZUl0ZW1JbmRleC52YWx1ZV0gOiBudWxsO1xuICAgICAgbGV0IHNvcnRlZEl0ZW1zID0gc29ydEJ5RG9tTm9kZShhZGp1c3RtZW50KGl0ZW1zLnZhbHVlLnNsaWNlKCkpLCAoaXRlbSkgPT4gZG9tKGl0ZW0uZGF0YVJlZi5kb21SZWYpKTtcbiAgICAgIGxldCBhZGp1c3RlZEFjdGl2ZUl0ZW1JbmRleCA9IGN1cnJlbnRBY3RpdmVJdGVtID8gc29ydGVkSXRlbXMuaW5kZXhPZihjdXJyZW50QWN0aXZlSXRlbSkgOiBudWxsO1xuICAgICAgaWYgKGFkanVzdGVkQWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhZGp1c3RlZEFjdGl2ZUl0ZW1JbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogc29ydGVkSXRlbXMsXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleDogYWRqdXN0ZWRBY3RpdmVJdGVtSW5kZXhcbiAgICAgIH07XG4gICAgfVxuICAgIGxldCBhcGkgPSB7XG4gICAgICBtZW51U3RhdGUsXG4gICAgICBidXR0b25SZWYsXG4gICAgICBpdGVtc1JlZixcbiAgICAgIGl0ZW1zLFxuICAgICAgc2VhcmNoUXVlcnksXG4gICAgICBhY3RpdmVJdGVtSW5kZXgsXG4gICAgICBhY3RpdmF0aW9uVHJpZ2dlcixcbiAgICAgIGNsb3NlTWVudTogKCkgPT4ge1xuICAgICAgICBtZW51U3RhdGUudmFsdWUgPSAxIC8qIENsb3NlZCAqLztcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LnZhbHVlID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBvcGVuTWVudTogKCkgPT4gbWVudVN0YXRlLnZhbHVlID0gMCAvKiBPcGVuICovLFxuICAgICAgZ29Ub0l0ZW0oZm9jdXMsIGlkMiwgdHJpZ2dlcikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgpO1xuICAgICAgICBsZXQgbmV4dEFjdGl2ZUl0ZW1JbmRleCA9IGNhbGN1bGF0ZUFjdGl2ZUluZGV4KGZvY3VzID09PSA0IC8qIFNwZWNpZmljICovID8geyBmb2N1czogNCAvKiBTcGVjaWZpYyAqLywgaWQ6IGlkMiB9IDogeyBmb2N1cyB9LCB7XG4gICAgICAgICAgcmVzb2x2ZUl0ZW1zOiAoKSA9PiBhZGp1c3RlZFN0YXRlLml0ZW1zLFxuICAgICAgICAgIHJlc29sdmVBY3RpdmVJbmRleDogKCkgPT4gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVJdGVtSW5kZXgsXG4gICAgICAgICAgcmVzb2x2ZUlkOiAoaXRlbSkgPT4gaXRlbS5pZCxcbiAgICAgICAgICByZXNvbHZlRGlzYWJsZWQ6IChpdGVtKSA9PiBpdGVtLmRhdGFSZWYuZGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHNlYXJjaFF1ZXJ5LnZhbHVlID0gXCJcIjtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LnZhbHVlID0gbmV4dEFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSB0cmlnZ2VyICE9IG51bGwgPyB0cmlnZ2VyIDogMSAvKiBPdGhlciAqLztcbiAgICAgICAgaXRlbXMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLml0ZW1zO1xuICAgICAgfSxcbiAgICAgIHNlYXJjaCh2YWx1ZSkge1xuICAgICAgICBsZXQgd2FzQWxyZWFkeVNlYXJjaGluZyA9IHNlYXJjaFF1ZXJ5LnZhbHVlICE9PSBcIlwiO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gd2FzQWxyZWFkeVNlYXJjaGluZyA/IDAgOiAxO1xuICAgICAgICBzZWFyY2hRdWVyeS52YWx1ZSArPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgcmVPcmRlcmVkSXRlbXMgPSBhY3RpdmVJdGVtSW5kZXgudmFsdWUgIT09IG51bGwgPyBpdGVtcy52YWx1ZS5zbGljZShhY3RpdmVJdGVtSW5kZXgudmFsdWUgKyBvZmZzZXQpLmNvbmNhdChpdGVtcy52YWx1ZS5zbGljZSgwLCBhY3RpdmVJdGVtSW5kZXgudmFsdWUgKyBvZmZzZXQpKSA6IGl0ZW1zLnZhbHVlO1xuICAgICAgICBsZXQgbWF0Y2hpbmdJdGVtID0gcmVPcmRlcmVkSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRhUmVmLnRleHRWYWx1ZS5zdGFydHNXaXRoKHNlYXJjaFF1ZXJ5LnZhbHVlKSAmJiAhaXRlbS5kYXRhUmVmLmRpc2FibGVkKTtcbiAgICAgICAgbGV0IG1hdGNoSWR4ID0gbWF0Y2hpbmdJdGVtID8gaXRlbXMudmFsdWUuaW5kZXhPZihtYXRjaGluZ0l0ZW0pIDogLTE7XG4gICAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEgfHwgbWF0Y2hJZHggPT09IGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleC52YWx1ZSA9IG1hdGNoSWR4O1xuICAgICAgICBhY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9IDEgLyogT3RoZXIgKi87XG4gICAgICB9LFxuICAgICAgY2xlYXJTZWFyY2goKSB7XG4gICAgICAgIHNlYXJjaFF1ZXJ5LnZhbHVlID0gXCJcIjtcbiAgICAgIH0sXG4gICAgICByZWdpc3Rlckl0ZW0oaWQyLCBkYXRhUmVmKSB7XG4gICAgICAgIGxldCBhZGp1c3RlZFN0YXRlID0gYWRqdXN0T3JkZXJlZFN0YXRlKChpdGVtczIpID0+IHtcbiAgICAgICAgICByZXR1cm4gWy4uLml0ZW1zMiwgeyBpZDogaWQyLCBkYXRhUmVmIH1dO1xuICAgICAgICB9KTtcbiAgICAgICAgaXRlbXMudmFsdWUgPSBhZGp1c3RlZFN0YXRlLml0ZW1zO1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXgudmFsdWUgPSBhZGp1c3RlZFN0YXRlLmFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgICAgYWN0aXZhdGlvblRyaWdnZXIudmFsdWUgPSAxIC8qIE90aGVyICovO1xuICAgICAgfSxcbiAgICAgIHVucmVnaXN0ZXJJdGVtKGlkMikge1xuICAgICAgICBsZXQgYWRqdXN0ZWRTdGF0ZSA9IGFkanVzdE9yZGVyZWRTdGF0ZSgoaXRlbXMyKSA9PiB7XG4gICAgICAgICAgbGV0IGlkeCA9IGl0ZW1zMi5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IGlkMik7XG4gICAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgICBpdGVtczIuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zMjtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0ZW1zLnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5pdGVtcztcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LnZhbHVlID0gYWRqdXN0ZWRTdGF0ZS5hY3RpdmVJdGVtSW5kZXg7XG4gICAgICAgIGFjdGl2YXRpb25UcmlnZ2VyLnZhbHVlID0gMSAvKiBPdGhlciAqLztcbiAgICAgIH1cbiAgICB9O1xuICAgIHVzZU91dHNpZGVDbGljayhbYnV0dG9uUmVmLCBpdGVtc1JlZl0sIChldmVudCwgdGFyZ2V0KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBhcGkuY2xvc2VNZW51KCk7XG4gICAgICBpZiAoIWlzRm9jdXNhYmxlRWxlbWVudCh0YXJnZXQsIDEgLyogTG9vc2UgKi8pKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIChfYSA9IGRvbShidXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAoMCwgaW1wb3J0X3Z1ZTIwLmNvbXB1dGVkKSgoKSA9PiBtZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLykpO1xuICAgICgwLCBpbXBvcnRfdnVlMjAucHJvdmlkZSkoTWVudUNvbnRleHQsIGFwaSk7XG4gICAgdXNlT3BlbkNsb3NlZFByb3ZpZGVyKCgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+IG1hdGNoKG1lbnVTdGF0ZS52YWx1ZSwge1xuICAgICAgWzAgLyogT3BlbiAqL106IDAgLyogT3BlbiAqLyxcbiAgICAgIFsxIC8qIENsb3NlZCAqL106IDEgLyogQ2xvc2VkICovXG4gICAgfSkpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IG1lbnVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHsgb3VyUHJvcHM6IHt9LCB0aGVpclByb3BzOiBwcm9wcywgc2xvdCwgc2xvdHMsIGF0dHJzLCBuYW1lOiBcIk1lbnVcIiB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBNZW51QnV0dG9uID0gKDAsIGltcG9ydF92dWUyMC5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJNZW51QnV0dG9uXCIsXG4gIHByb3BzOiB7XG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImJ1dHRvblwiIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzLCBleHBvc2UgfSkge1xuICAgIGxldCBhcGkgPSB1c2VNZW51Q29udGV4dChcIk1lbnVCdXR0b25cIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLW1lbnUtYnV0dG9uLSR7dXNlSWQoKX1gO1xuICAgIGV4cG9zZSh7IGVsOiBhcGkuYnV0dG9uUmVmLCAkZWw6IGFwaS5idXR0b25SZWYgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgY2FzZSBcIkVudGVyXCIgLyogRW50ZXIgKi86XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhcGkub3Blbk1lbnUoKTtcbiAgICAgICAgICAoMCwgaW1wb3J0X3Z1ZTIwLm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSBkb20oYXBpLml0ZW1zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGFwaS5nb1RvSXRlbSgwIC8qIEZpcnN0ICovKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXBpLm9wZW5NZW51KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWUyMC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gZG9tKGFwaS5pdGVtc1JlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICBhcGkuZ29Ub0l0ZW0oMyAvKiBMYXN0ICovKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5VXAoZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5tZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLykge1xuICAgICAgICBhcGkuY2xvc2VNZW51KCk7XG4gICAgICAgICgwLCBpbXBvcnRfdnVlMjAubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgcmV0dXJuIChfYSA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhcGkub3Blbk1lbnUoKTtcbiAgICAgICAgbmV4dEZyYW1lMigoKSA9PiB7XG4gICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgIHJldHVybiAoX2EgPSBkb20oYXBpLml0ZW1zUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB0eXBlID0gdXNlUmVzb2x2ZUJ1dHRvblR5cGUoKDAsIGltcG9ydF92dWUyMC5jb21wdXRlZCkoKCkgPT4gKHsgYXM6IHByb3BzLmFzLCB0eXBlOiBhdHRycy50eXBlIH0pKSwgYXBpLmJ1dHRvblJlZik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGxldCBzbG90ID0geyBvcGVuOiBhcGkubWVudVN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8gfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgcmVmOiBhcGkuYnV0dG9uUmVmLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogdHJ1ZSxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IChfYSA9IGRvbShhcGkuaXRlbXNSZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBwcm9wcy5kaXNhYmxlZCA/IHZvaWQgMCA6IGFwaS5tZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbktleXVwOiBoYW5kbGVLZXlVcCxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHByb3BzO1xuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiTWVudUJ1dHRvblwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBNZW51SXRlbXMgPSAoMCwgaW1wb3J0X3Z1ZTIwLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIk1lbnVJdGVtc1wiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBzdGF0aWM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZU1lbnVDb250ZXh0KFwiTWVudUl0ZW1zXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1tZW51LWl0ZW1zLSR7dXNlSWQoKX1gO1xuICAgIGxldCBzZWFyY2hEZWJvdW5jZSA9ICgwLCBpbXBvcnRfdnVlMjAucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogYXBpLml0ZW1zUmVmLCAkZWw6IGFwaS5pdGVtc1JlZiB9KTtcbiAgICB1c2VUcmVlV2Fsa2VyKHtcbiAgICAgIGNvbnRhaW5lcjogKDAsIGltcG9ydF92dWUyMC5jb21wdXRlZCkoKCkgPT4gZG9tKGFwaS5pdGVtc1JlZikpLFxuICAgICAgZW5hYmxlZDogKDAsIGltcG9ydF92dWUyMC5jb21wdXRlZCkoKCkgPT4gYXBpLm1lbnVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovKSxcbiAgICAgIGFjY2VwdChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcInJvbGVcIikgPT09IFwibWVudWl0ZW1cIilcbiAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKVxuICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgICAgfSxcbiAgICAgIHdhbGsobm9kZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJub25lXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChzZWFyY2hEZWJvdW5jZS52YWx1ZSlcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNlYXJjaERlYm91bmNlLnZhbHVlKTtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAgaWYgKGFwaS5zZWFyY2hRdWVyeS52YWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5zZWFyY2goZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgaWYgKGFwaS5hY3RpdmVJdGVtSW5kZXgudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBhY3RpdmVJdGVtID0gYXBpLml0ZW1zLnZhbHVlW2FwaS5hY3RpdmVJdGVtSW5kZXgudmFsdWVdO1xuICAgICAgICAgICAgbGV0IF9hY3RpdmVJdGVtID0gYWN0aXZlSXRlbTtcbiAgICAgICAgICAgIChfYSA9IGRvbShfYWN0aXZlSXRlbS5kYXRhUmVmLmRvbVJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcGkuY2xvc2VNZW51KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWUyMC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hMjtcbiAgICAgICAgICAgIHJldHVybiAoX2EyID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiIC8qIEFycm93RG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBhcGkuZ29Ub0l0ZW0oMiAvKiBOZXh0ICovKTtcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIiAvKiBBcnJvd1VwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvSXRlbSgxIC8qIFByZXZpb3VzICovKTtcbiAgICAgICAgY2FzZSBcIkhvbWVcIiAvKiBIb21lICovOlxuICAgICAgICBjYXNlIFwiUGFnZVVwXCIgLyogUGFnZVVwICovOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGFwaS5nb1RvSXRlbSgwIC8qIEZpcnN0ICovKTtcbiAgICAgICAgY2FzZSBcIkVuZFwiIC8qIEVuZCAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VEb3duXCIgLyogUGFnZURvd24gKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm4gYXBpLmdvVG9JdGVtKDMgLyogTGFzdCAqLyk7XG4gICAgICAgIGNhc2UgXCJFc2NhcGVcIiAvKiBFc2NhcGUgKi86XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhcGkuY2xvc2VNZW51KCk7XG4gICAgICAgICAgKDAsIGltcG9ydF92dWUyMC5uZXh0VGljaykoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hMjtcbiAgICAgICAgICAgIHJldHVybiAoX2EyID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRhYlwiIC8qIFRhYiAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBhcGkuc2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgICBzZWFyY2hEZWJvdW5jZS52YWx1ZSA9IHNldFRpbWVvdXQoKCkgPT4gYXBpLmNsZWFyU2VhcmNoKCksIDM1MCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIiBcIiAvKiBTcGFjZSAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgdmlzaWJsZSA9ICgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmICh1c2VzT3BlbkNsb3NlZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1c2VzT3BlbkNsb3NlZFN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBpLm1lbnVTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IGFwaS5tZW51U3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBhcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlID09PSBudWxsID8gdm9pZCAwIDogKF9hID0gYXBpLml0ZW1zLnZhbHVlW2FwaS5hY3RpdmVJdGVtSW5kZXgudmFsdWVdKSA9PSBudWxsID8gdm9pZCAwIDogX2EuaWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IChfYiA9IGRvbShhcGkuYnV0dG9uUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlkLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgIG9uS2V5dXA6IGhhbmRsZUtleVVwLFxuICAgICAgICByb2xlOiBcIm1lbnVcIixcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIHJlZjogYXBpLml0ZW1zUmVmXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBmZWF0dXJlczogMSAvKiBSZW5kZXJTdHJhdGVneSAqLyB8IDIgLyogU3RhdGljICovLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlLnZhbHVlLFxuICAgICAgICBuYW1lOiBcIk1lbnVJdGVtc1wiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBNZW51SXRlbSA9ICgwLCBpbXBvcnRfdnVlMjAuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTWVudUl0ZW1cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlTWVudUNvbnRleHQoXCJNZW51SXRlbVwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktbWVudS1pdGVtLSR7dXNlSWQoKX1gO1xuICAgIGxldCBpbnRlcm5hbEl0ZW1SZWYgPSAoMCwgaW1wb3J0X3Z1ZTIwLnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsSXRlbVJlZiwgJGVsOiBpbnRlcm5hbEl0ZW1SZWYgfSk7XG4gICAgbGV0IGFjdGl2ZSA9ICgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIHJldHVybiBhcGkuYWN0aXZlSXRlbUluZGV4LnZhbHVlICE9PSBudWxsID8gYXBpLml0ZW1zLnZhbHVlW2FwaS5hY3RpdmVJdGVtSW5kZXgudmFsdWVdLmlkID09PSBpZDIgOiBmYWxzZTtcbiAgICB9KTtcbiAgICBsZXQgZGF0YVJlZiA9ICgwLCBpbXBvcnRfdnVlMjAuY29tcHV0ZWQpKCgpID0+ICh7XG4gICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgICB0ZXh0VmFsdWU6IFwiXCIsXG4gICAgICBkb21SZWY6IGludGVybmFsSXRlbVJlZlxuICAgIH0pKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIwLm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGxldCB0ZXh0VmFsdWUgPSAoX2IgPSAoX2EgPSBkb20oaW50ZXJuYWxJdGVtUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2IudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBpZiAodGV4dFZhbHVlICE9PSB2b2lkIDApXG4gICAgICAgIGRhdGFSZWYudmFsdWUudGV4dFZhbHVlID0gdGV4dFZhbHVlO1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMjAub25Nb3VudGVkKSgoKSA9PiBhcGkucmVnaXN0ZXJJdGVtKGlkMiwgZGF0YVJlZikpO1xuICAgICgwLCBpbXBvcnRfdnVlMjAub25Vbm1vdW50ZWQpKCgpID0+IGFwaS51bnJlZ2lzdGVySXRlbShpZDIpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIwLndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoYXBpLm1lbnVTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5hY3RpdmF0aW9uVHJpZ2dlci52YWx1ZSA9PT0gMCAvKiBQb2ludGVyICovKVxuICAgICAgICByZXR1cm47XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTIwLm5leHRUaWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBkb20oaW50ZXJuYWxJdGVtUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnNjcm9sbEludG9WaWV3KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSwgeyBibG9jazogXCJuZWFyZXN0XCIgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFwaS5jbG9zZU1lbnUoKTtcbiAgICAgICgwLCBpbXBvcnRfdnVlMjAubmV4dFRpY2spKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZG9tKGFwaS5idXR0b25SZWYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm4gYXBpLmdvVG9JdGVtKDUgLyogTm90aGluZyAqLyk7XG4gICAgICBhcGkuZ29Ub0l0ZW0oNCAvKiBTcGVjaWZpYyAqLywgaWQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlTW92ZSgpIHtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFjdGl2ZS52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgYXBpLmdvVG9JdGVtKDQgLyogU3BlY2lmaWMgKi8sIGlkMiwgMCAvKiBQb2ludGVyICovKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlTGVhdmUoKSB7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghYWN0aXZlLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICBhcGkuZ29Ub0l0ZW0oNSAvKiBOb3RoaW5nICovKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IGRpc2FibGVkIH0gPSBwcm9wcztcbiAgICAgIGxldCBzbG90ID0geyBhY3RpdmU6IGFjdGl2ZS52YWx1ZSwgZGlzYWJsZWQgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcmVmOiBpbnRlcm5hbEl0ZW1SZWYsXG4gICAgICAgIHJvbGU6IFwibWVudWl0ZW1cIixcbiAgICAgICAgdGFiSW5kZXg6IGRpc2FibGVkID09PSB0cnVlID8gdm9pZCAwIDogLTEsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA9PT0gdHJ1ZSA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgb25Qb2ludGVybW92ZTogaGFuZGxlTW92ZSxcbiAgICAgICAgb25Nb3VzZW1vdmU6IGhhbmRsZU1vdmUsXG4gICAgICAgIG9uUG9pbnRlcmxlYXZlOiBoYW5kbGVMZWF2ZSxcbiAgICAgICAgb25Nb3VzZWxlYXZlOiBoYW5kbGVMZWF2ZVxuICAgICAgfTtcbiAgICAgIGxldCB0aGVpclByb3BzID0gcHJvcHM7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgbmFtZTogXCJNZW51SXRlbVwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnRzXG52YXIgaW1wb3J0X3Z1ZTIxID0gcmVxdWlyZShcInZ1ZVwiKTtcbnZhciBQb3BvdmVyQ29udGV4dCA9IFN5bWJvbChcIlBvcG92ZXJDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlUG9wb3ZlckNvbnRleHQoY29tcG9uZW50KSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUyMS5pbmplY3QpKFBvcG92ZXJDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKGA8JHtjb21wb25lbnR9IC8+IGlzIG1pc3NpbmcgYSBwYXJlbnQgPCR7UG9wb3Zlci5uYW1lfSAvPiBjb21wb25lbnQuYCk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VQb3BvdmVyQ29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIFBvcG92ZXJHcm91cENvbnRleHQgPSBTeW1ib2woXCJQb3BvdmVyR3JvdXBDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlUG9wb3Zlckdyb3VwQ29udGV4dCgpIHtcbiAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjEuaW5qZWN0KShQb3BvdmVyR3JvdXBDb250ZXh0LCBudWxsKTtcbn1cbnZhciBQb3BvdmVyUGFuZWxDb250ZXh0ID0gU3ltYm9sKFwiUG9wb3ZlclBhbmVsQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZVBvcG92ZXJQYW5lbENvbnRleHQoKSB7XG4gIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTIxLmluamVjdCkoUG9wb3ZlclBhbmVsQ29udGV4dCwgbnVsbCk7XG59XG52YXIgUG9wb3ZlciA9ICgwLCBpbXBvcnRfdnVlMjEuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9wb3ZlclwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMsIGV4cG9zZSB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGxldCBidXR0b25JZCA9IGBoZWFkbGVzc3VpLXBvcG92ZXItYnV0dG9uLSR7dXNlSWQoKX1gO1xuICAgIGxldCBwYW5lbElkID0gYGhlYWRsZXNzdWktcG9wb3Zlci1wYW5lbC0ke3VzZUlkKCl9YDtcbiAgICBsZXQgaW50ZXJuYWxQb3BvdmVyUmVmID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKG51bGwpO1xuICAgIGV4cG9zZSh7IGVsOiBpbnRlcm5hbFBvcG92ZXJSZWYsICRlbDogaW50ZXJuYWxQb3BvdmVyUmVmIH0pO1xuICAgIGxldCBwb3BvdmVyU3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikoMSAvKiBDbG9zZWQgKi8pO1xuICAgIGxldCBidXR0b24gPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IGJlZm9yZVBhbmVsU2VudGluZWwgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IGFmdGVyUGFuZWxTZW50aW5lbCA9ICgwLCBpbXBvcnRfdnVlMjEucmVmKShudWxsKTtcbiAgICBsZXQgcGFuZWwgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IG93bmVyRG9jdW1lbnQgPSAoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiBnZXRPd25lckRvY3VtZW50KGludGVybmFsUG9wb3ZlclJlZikpO1xuICAgIGxldCBpc1BvcnRhbGxlZCA9ICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmICghZG9tKGJ1dHRvbikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghZG9tKHBhbmVsKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChsZXQgcm9vdCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpIHtcbiAgICAgICAgaWYgKE51bWJlcihyb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LmNvbnRhaW5zKGRvbShidXR0b24pKSkgXiBOdW1iZXIocm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5jb250YWlucyhkb20ocGFuZWwpKSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGxldCBhcGkgPSB7XG4gICAgICBwb3BvdmVyU3RhdGUsXG4gICAgICBidXR0b25JZCxcbiAgICAgIHBhbmVsSWQsXG4gICAgICBwYW5lbCxcbiAgICAgIGJ1dHRvbixcbiAgICAgIGlzUG9ydGFsbGVkLFxuICAgICAgYmVmb3JlUGFuZWxTZW50aW5lbCxcbiAgICAgIGFmdGVyUGFuZWxTZW50aW5lbCxcbiAgICAgIHRvZ2dsZVBvcG92ZXIoKSB7XG4gICAgICAgIHBvcG92ZXJTdGF0ZS52YWx1ZSA9IG1hdGNoKHBvcG92ZXJTdGF0ZS52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIE9wZW4gKi9dOiAxIC8qIENsb3NlZCAqLyxcbiAgICAgICAgICBbMSAvKiBDbG9zZWQgKi9dOiAwIC8qIE9wZW4gKi9cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgY2xvc2VQb3BvdmVyKCkge1xuICAgICAgICBpZiAocG9wb3ZlclN0YXRlLnZhbHVlID09PSAxIC8qIENsb3NlZCAqLylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBvcG92ZXJTdGF0ZS52YWx1ZSA9IDEgLyogQ2xvc2VkICovO1xuICAgICAgfSxcbiAgICAgIGNsb3NlKGZvY3VzYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgYXBpLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICBsZXQgcmVzdG9yZUVsZW1lbnQgPSAoKCkgPT4ge1xuICAgICAgICAgIGlmICghZm9jdXNhYmxlRWxlbWVudClcbiAgICAgICAgICAgIHJldHVybiBkb20oYXBpLmJ1dHRvbik7XG4gICAgICAgICAgaWYgKGZvY3VzYWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcbiAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVFbGVtZW50O1xuICAgICAgICAgIGlmIChmb2N1c2FibGVFbGVtZW50LnZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gZG9tKGZvY3VzYWJsZUVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiBkb20oYXBpLmJ1dHRvbik7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJlc3RvcmVFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiByZXN0b3JlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgKDAsIGltcG9ydF92dWUyMS5wcm92aWRlKShQb3BvdmVyQ29udGV4dCwgYXBpKTtcbiAgICB1c2VPcGVuQ2xvc2VkUHJvdmlkZXIoKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4gbWF0Y2gocG9wb3ZlclN0YXRlLnZhbHVlLCB7XG4gICAgICBbMCAvKiBPcGVuICovXTogMCAvKiBPcGVuICovLFxuICAgICAgWzEgLyogQ2xvc2VkICovXTogMSAvKiBDbG9zZWQgKi9cbiAgICB9KSkpO1xuICAgIGxldCByZWdpc3RlckJhZyA9IHtcbiAgICAgIGJ1dHRvbklkLFxuICAgICAgcGFuZWxJZCxcbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgZ3JvdXBDb250ZXh0ID0gdXNlUG9wb3Zlckdyb3VwQ29udGV4dCgpO1xuICAgIGxldCByZWdpc3RlclBvcG92ZXIgPSBncm91cENvbnRleHQgPT0gbnVsbCA/IHZvaWQgMCA6IGdyb3VwQ29udGV4dC5yZWdpc3RlclBvcG92ZXI7XG4gICAgZnVuY3Rpb24gaXNGb2N1c1dpdGhpblBvcG92ZXJHcm91cCgpIHtcbiAgICAgIHZhciBfYTIsIF9iLCBfYywgX2Q7XG4gICAgICByZXR1cm4gKF9kID0gZ3JvdXBDb250ZXh0ID09IG51bGwgPyB2b2lkIDAgOiBncm91cENvbnRleHQuaXNGb2N1c1dpdGhpblBvcG92ZXJHcm91cCgpKSAhPSBudWxsID8gX2QgOiAoKF9hMiA9IG93bmVyRG9jdW1lbnQudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgJiYgKCgoX2IgPSBkb20oYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNvbnRhaW5zKG93bmVyRG9jdW1lbnQudmFsdWUuYWN0aXZlRWxlbWVudCkpIHx8ICgoX2MgPSBkb20ocGFuZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX2MuY29udGFpbnMob3duZXJEb2N1bWVudC52YWx1ZS5hY3RpdmVFbGVtZW50KSkpO1xuICAgIH1cbiAgICAoMCwgaW1wb3J0X3Z1ZTIxLndhdGNoRWZmZWN0KSgoKSA9PiByZWdpc3RlclBvcG92ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHJlZ2lzdGVyUG9wb3ZlcihyZWdpc3RlckJhZykpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoKF9hID0gb3duZXJEb2N1bWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRWaWV3LCBcImZvY3VzXCIsIChldmVudCkgPT4ge1xuICAgICAgdmFyIF9hMiwgX2I7XG4gICAgICBpZiAocG9wb3ZlclN0YXRlLnZhbHVlICE9PSAwIC8qIE9wZW4gKi8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0ZvY3VzV2l0aGluUG9wb3Zlckdyb3VwKCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghYnV0dG9uKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIXBhbmVsKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoKF9hMiA9IGRvbShhcGkuYmVmb3JlUGFuZWxTZW50aW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKChfYiA9IGRvbShhcGkuYWZ0ZXJQYW5lbFNlbnRpbmVsKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICB9LCB0cnVlKTtcbiAgICB1c2VPdXRzaWRlQ2xpY2soW2J1dHRvbiwgcGFuZWxdLCAoZXZlbnQsIHRhcmdldCkgPT4ge1xuICAgICAgdmFyIF9hMjtcbiAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIGlmICghaXNGb2N1c2FibGVFbGVtZW50KHRhcmdldCwgMSAvKiBMb29zZSAqLykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgKF9hMiA9IGRvbShidXR0b24pKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4gcG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi8pKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IG9wZW46IHBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLCBjbG9zZTogYXBpLmNsb3NlIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIG91clByb3BzOiB7IHJlZjogaW50ZXJuYWxQb3BvdmVyUmVmIH0sXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBhdHRycyxcbiAgICAgICAgbmFtZTogXCJQb3BvdmVyXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFBvcG92ZXJCdXR0b24gPSAoMCwgaW1wb3J0X3Z1ZTIxLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlBvcG92ZXJCdXR0b25cIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImJ1dHRvblwiIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlUG9wb3ZlckNvbnRleHQoXCJQb3BvdmVyQnV0dG9uXCIpO1xuICAgIGxldCBvd25lckRvY3VtZW50ID0gKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4gZ2V0T3duZXJEb2N1bWVudChhcGkuYnV0dG9uKSk7XG4gICAgZXhwb3NlKHsgZWw6IGFwaS5idXR0b24sICRlbDogYXBpLmJ1dHRvbiB9KTtcbiAgICBsZXQgZ3JvdXBDb250ZXh0ID0gdXNlUG9wb3Zlckdyb3VwQ29udGV4dCgpO1xuICAgIGxldCBjbG9zZU90aGVycyA9IGdyb3VwQ29udGV4dCA9PSBudWxsID8gdm9pZCAwIDogZ3JvdXBDb250ZXh0LmNsb3NlT3RoZXJzO1xuICAgIGxldCBwYW5lbENvbnRleHQgPSB1c2VQb3BvdmVyUGFuZWxDb250ZXh0KCk7XG4gICAgbGV0IGlzV2l0aGluUGFuZWwgPSBwYW5lbENvbnRleHQgPT09IG51bGwgPyBmYWxzZSA6IHBhbmVsQ29udGV4dCA9PT0gYXBpLnBhbmVsSWQ7XG4gICAgbGV0IGVsZW1lbnRSZWYgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IHNlbnRpbmVsSWQgPSBgaGVhZGxlc3N1aS1mb2N1cy1zZW50aW5lbC0ke3VzZUlkKCl9YDtcbiAgICBpZiAoIWlzV2l0aGluUGFuZWwpIHtcbiAgICAgICgwLCBpbXBvcnRfdnVlMjEud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgICAgYXBpLmJ1dHRvbi52YWx1ZSA9IGVsZW1lbnRSZWYudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBlbGVtZW50UmVmKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgaWYgKGlzV2l0aGluUGFuZWwpIHtcbiAgICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IGV2ZW50LnRhcmdldCkuY2xpY2spID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIChfYyA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmZvY3VzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIFwiIFwiIC8qIFNwYWNlICovOlxuICAgICAgICAgIGNhc2UgXCJFbnRlclwiIC8qIEVudGVyICovOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDEgLyogQ2xvc2VkICovKVxuICAgICAgICAgICAgICBjbG9zZU90aGVycyA9PSBudWxsID8gdm9pZCAwIDogY2xvc2VPdGhlcnMoYXBpLmJ1dHRvbklkKTtcbiAgICAgICAgICAgIGFwaS50b2dnbGVQb3BvdmVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiRXNjYXBlXCIgLyogRXNjYXBlICovOlxuICAgICAgICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgICAgICAgcmV0dXJuIGNsb3NlT3RoZXJzID09IG51bGwgPyB2b2lkIDAgOiBjbG9zZU90aGVycyhhcGkuYnV0dG9uSWQpO1xuICAgICAgICAgICAgaWYgKCFkb20oYXBpLmJ1dHRvbikpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICgoKF9kID0gb3duZXJEb2N1bWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLmFjdGl2ZUVsZW1lbnQpICYmICEoKF9lID0gZG9tKGFwaS5idXR0b24pKSA9PSBudWxsID8gdm9pZCAwIDogX2UuY29udGFpbnMob3duZXJEb2N1bWVudC52YWx1ZS5hY3RpdmVFbGVtZW50KSkpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVVwKGV2ZW50KSB7XG4gICAgICBpZiAoaXNXaXRoaW5QYW5lbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCIgXCIgLyogU3BhY2UgKi8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBpZiAocHJvcHMuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc1dpdGhpblBhbmVsKSB7XG4gICAgICAgIGFwaS5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgKF9hID0gZG9tKGFwaS5idXR0b24pKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMSAvKiBDbG9zZWQgKi8pXG4gICAgICAgICAgY2xvc2VPdGhlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsb3NlT3RoZXJzKGFwaS5idXR0b25JZCk7XG4gICAgICAgIGFwaS50b2dnbGVQb3BvdmVyKCk7XG4gICAgICAgIChfYiA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHZpc2libGUgPSBhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogdmlzaWJsZSB9O1xuICAgICAgbGV0IG91clByb3BzID0gaXNXaXRoaW5QYW5lbCA/IHtcbiAgICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgICB0eXBlOiB0eXBlLnZhbHVlLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgICB9IDoge1xuICAgICAgICByZWY6IGVsZW1lbnRSZWYsXG4gICAgICAgIGlkOiBhcGkuYnV0dG9uSWQsXG4gICAgICAgIHR5cGU6IHR5cGUudmFsdWUsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBwcm9wcy5kaXNhYmxlZCA/IHZvaWQgMCA6IGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGRvbShhcGkucGFuZWwpID8gYXBpLnBhbmVsSWQgOiB2b2lkIDAsXG4gICAgICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCA/IHRydWUgOiB2b2lkIDAsXG4gICAgICAgIG9uS2V5ZG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25LZXl1cDogaGFuZGxlS2V5VXAsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbk1vdXNlZG93bjogaGFuZGxlTW91c2VEb3duXG4gICAgICB9O1xuICAgICAgbGV0IGRpcmVjdGlvbiA9IHVzZVRhYkRpcmVjdGlvbigpO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGxldCBlbCA9IGRvbShhcGkucGFuZWwpO1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICAgIG1hdGNoKGRpcmVjdGlvbi52YWx1ZSwge1xuICAgICAgICAgICAgWzAgLyogRm9yd2FyZHMgKi9dOiAoKSA9PiBmb2N1c0luKGVsLCAxIC8qIEZpcnN0ICovKSxcbiAgICAgICAgICAgIFsxIC8qIEJhY2t3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDggLyogTGFzdCAqLylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICBtaWNyb1Rhc2socnVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfdnVlMjEuaCkoaW1wb3J0X3Z1ZTIxLkZyYWdtZW50LCBbXG4gICAgICAgIHJlbmRlcih7XG4gICAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgICAgdGhlaXJQcm9wczogeyAuLi5hdHRycywgLi4ucHJvcHMgfSxcbiAgICAgICAgICBzbG90LFxuICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgIHNsb3RzLFxuICAgICAgICAgIG5hbWU6IFwiUG9wb3ZlckJ1dHRvblwiXG4gICAgICAgIH0pLFxuICAgICAgICB2aXNpYmxlICYmICFpc1dpdGhpblBhbmVsICYmIGFwaS5pc1BvcnRhbGxlZC52YWx1ZSAmJiAoMCwgaW1wb3J0X3Z1ZTIxLmgpKEhpZGRlbiwge1xuICAgICAgICAgIGlkOiBzZW50aW5lbElkLFxuICAgICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqLyxcbiAgICAgICAgICBhczogXCJidXR0b25cIixcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzXG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBQb3BvdmVyT3ZlcmxheSA9ICgwLCBpbXBvcnRfdnVlMjEuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9wb3Zlck92ZXJsYXlcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgYXR0cnMsIHNsb3RzIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlUG9wb3ZlckNvbnRleHQoXCJQb3BvdmVyT3ZlcmxheVwiKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktcG9wb3Zlci1vdmVybGF5LSR7dXNlSWQoKX1gO1xuICAgIGxldCB1c2VzT3BlbkNsb3NlZFN0YXRlID0gdXNlT3BlbkNsb3NlZCgpO1xuICAgIGxldCB2aXNpYmxlID0gKDAsIGltcG9ydF92dWUyMS5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcGkucG9wb3ZlclN0YXRlLnZhbHVlID09PSAwIC8qIE9wZW4gKi87XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHsgb3BlbjogYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIHZpc2libGU6IHZpc2libGUudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiUG9wb3Zlck92ZXJsYXlcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgUG9wb3ZlclBhbmVsID0gKDAsIGltcG9ydF92dWUyMS5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJQb3BvdmVyUGFuZWxcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc3RhdGljOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdW5tb3VudDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IHsgZm9jdXMgfSA9IHByb3BzO1xuICAgIGxldCBhcGkgPSB1c2VQb3BvdmVyQ29udGV4dChcIlBvcG92ZXJQYW5lbFwiKTtcbiAgICBsZXQgb3duZXJEb2N1bWVudCA9ICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IGdldE93bmVyRG9jdW1lbnQoYXBpLnBhbmVsKSk7XG4gICAgbGV0IGJlZm9yZVBhbmVsU2VudGluZWxJZCA9IGBoZWFkbGVzc3VpLWZvY3VzLXNlbnRpbmVsLWJlZm9yZS0ke3VzZUlkKCl9YDtcbiAgICBsZXQgYWZ0ZXJQYW5lbFNlbnRpbmVsSWQgPSBgaGVhZGxlc3N1aS1mb2N1cy1zZW50aW5lbC1hZnRlci0ke3VzZUlkKCl9YDtcbiAgICBleHBvc2UoeyBlbDogYXBpLnBhbmVsLCAkZWw6IGFwaS5wYW5lbCB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIxLnByb3ZpZGUpKFBvcG92ZXJQYW5lbENvbnRleHQsIGFwaS5wYW5lbElkKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTIxLndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgaWYgKCFmb2N1cylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgIT09IDAgLyogT3BlbiAqLylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFhcGkucGFuZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBhY3RpdmVFbGVtZW50ID0gKF9hID0gb3duZXJEb2N1bWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoKF9iID0gZG9tKGFwaS5wYW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jb250YWlucyhhY3RpdmVFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZm9jdXNJbihkb20oYXBpLnBhbmVsKSwgMSAvKiBGaXJzdCAqLyk7XG4gICAgfSk7XG4gICAgbGV0IHVzZXNPcGVuQ2xvc2VkU3RhdGUgPSB1c2VPcGVuQ2xvc2VkKCk7XG4gICAgbGV0IHZpc2libGUgPSAoMCwgaW1wb3J0X3Z1ZTIxLmNvbXB1dGVkKSgoKSA9PiB7XG4gICAgICBpZiAodXNlc09wZW5DbG9zZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdXNlc09wZW5DbG9zZWRTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLztcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiIC8qIEVzY2FwZSAqLzpcbiAgICAgICAgICBpZiAoYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSAhPT0gMCAvKiBPcGVuICovKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGlmICghZG9tKGFwaS5wYW5lbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQudmFsdWUgJiYgISgoX2EgPSBkb20oYXBpLnBhbmVsKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNvbnRhaW5zKG93bmVyRG9jdW1lbnQudmFsdWUuYWN0aXZlRWxlbWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXBpLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIChfYiA9IGRvbShhcGkuYnV0dG9uKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcbiAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICBsZXQgZWwgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgaWYgKCFlbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKCFkb20oYXBpLnBhbmVsKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKChfYSA9IGRvbShhcGkucGFuZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY29udGFpbnMoZWwpKVxuICAgICAgICByZXR1cm47XG4gICAgICBhcGkuY2xvc2VQb3BvdmVyKCk7XG4gICAgICBpZiAoKChfYyA9IChfYiA9IGRvbShhcGkuYmVmb3JlUGFuZWxTZW50aW5lbCkpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jb250YWlucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmNhbGwoX2IsIGVsKSkgfHwgKChfZSA9IChfZCA9IGRvbShhcGkuYWZ0ZXJQYW5lbFNlbnRpbmVsKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLmNvbnRhaW5zKSA9PSBudWxsID8gdm9pZCAwIDogX2UuY2FsbChfZCwgZWwpKSkge1xuICAgICAgICBlbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBkaXJlY3Rpb24gPSB1c2VUYWJEaXJlY3Rpb24oKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVCZWZvcmVGb2N1cygpIHtcbiAgICAgIGxldCBlbCA9IGRvbShhcGkucGFuZWwpO1xuICAgICAgaWYgKCFlbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICBtYXRjaChkaXJlY3Rpb24udmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBGb3J3YXJkcyAqL106ICgpID0+IHtcbiAgICAgICAgICAgIGZvY3VzSW4oZWwsIDQgLyogTmV4dCAqLyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbMSAvKiBCYWNrd2FyZHMgKi9dOiAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSBkb20oYXBpLmJ1dHRvbikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICBtaWNyb1Rhc2socnVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bigpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVBZnRlckZvY3VzKCkge1xuICAgICAgbGV0IGVsID0gZG9tKGFwaS5wYW5lbCk7XG4gICAgICBpZiAoIWVsKVxuICAgICAgICByZXR1cm47XG4gICAgICBmdW5jdGlvbiBydW4oKSB7XG4gICAgICAgIG1hdGNoKGRpcmVjdGlvbi52YWx1ZSwge1xuICAgICAgICAgIFswIC8qIEZvcndhcmRzICovXTogKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGxldCBidXR0b24gPSBkb20oYXBpLmJ1dHRvbik7XG4gICAgICAgICAgICBsZXQgcGFuZWwgPSBkb20oYXBpLnBhbmVsKTtcbiAgICAgICAgICAgIGlmICghYnV0dG9uKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBnZXRGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgbGV0IGlkeCA9IGVsZW1lbnRzLmluZGV4T2YoYnV0dG9uKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmUgPSBlbGVtZW50cy5zbGljZSgwLCBpZHggKyAxKTtcbiAgICAgICAgICAgIGxldCBhZnRlciA9IGVsZW1lbnRzLnNsaWNlKGlkeCArIDEpO1xuICAgICAgICAgICAgbGV0IGNvbWJpbmVkID0gWy4uLmFmdGVyLCAuLi5iZWZvcmVdO1xuICAgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBjb21iaW5lZC5zbGljZSgpKSB7XG4gICAgICAgICAgICAgIGlmICgoKF9iID0gKF9hID0gZWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogZWxlbWVudC5pZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN0YXJ0c1dpdGgpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBcImhlYWRsZXNzdWktZm9jdXMtc2VudGluZWwtXCIpKSB8fCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmNvbnRhaW5zKGVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpZHgyID0gY29tYmluZWQuaW5kZXhPZihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaWR4MiAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICBjb21iaW5lZC5zcGxpY2UoaWR4MiwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvY3VzSW4oY29tYmluZWQsIDEgLyogRmlyc3QgKi8sIGZhbHNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFsxIC8qIEJhY2t3YXJkcyAqL106ICgpID0+IGZvY3VzSW4oZWwsIDIgLyogUHJldmlvdXMgKi8pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIG1pY3JvVGFzayhydW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHtcbiAgICAgICAgb3BlbjogYXBpLnBvcG92ZXJTdGF0ZS52YWx1ZSA9PT0gMCAvKiBPcGVuICovLFxuICAgICAgICBjbG9zZTogYXBpLmNsb3NlXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICByZWY6IGFwaS5wYW5lbCxcbiAgICAgICAgaWQ6IGFwaS5wYW5lbElkLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgIG9uRm9jdXNvdXQ6IGZvY3VzICYmIGFwaS5wb3BvdmVyU3RhdGUudmFsdWUgPT09IDAgLyogT3BlbiAqLyA/IGhhbmRsZUJsdXIgOiB2b2lkIDAsXG4gICAgICAgIHRhYkluZGV4OiAtMVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogeyAuLi5hdHRycywgLi4ucHJvcHMgfSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHNsb3RzOiB7XG4gICAgICAgICAgLi4uc2xvdHMsXG4gICAgICAgICAgZGVmYXVsdDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICgwLCBpbXBvcnRfdnVlMjEuaCkoaW1wb3J0X3Z1ZTIxLkZyYWdtZW50LCBbXG4gICAgICAgICAgICAgICAgdmlzaWJsZS52YWx1ZSAmJiBhcGkuaXNQb3J0YWxsZWQudmFsdWUgJiYgKDAsIGltcG9ydF92dWUyMS5oKShIaWRkZW4sIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBiZWZvcmVQYW5lbFNlbnRpbmVsSWQsXG4gICAgICAgICAgICAgICAgICByZWY6IGFwaS5iZWZvcmVQYW5lbFNlbnRpbmVsLFxuICAgICAgICAgICAgICAgICAgZmVhdHVyZXM6IDIgLyogRm9jdXNhYmxlICovLFxuICAgICAgICAgICAgICAgICAgYXM6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgb25Gb2N1czogaGFuZGxlQmVmb3JlRm9jdXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAoX2EgPSBzbG90cy5kZWZhdWx0KSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChzbG90cywgLi4uYXJncyksXG4gICAgICAgICAgICAgICAgdmlzaWJsZS52YWx1ZSAmJiBhcGkuaXNQb3J0YWxsZWQudmFsdWUgJiYgKDAsIGltcG9ydF92dWUyMS5oKShIaWRkZW4sIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBhZnRlclBhbmVsU2VudGluZWxJZCxcbiAgICAgICAgICAgICAgICAgIHJlZjogYXBpLmFmdGVyUGFuZWxTZW50aW5lbCxcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqLyxcbiAgICAgICAgICAgICAgICAgIGFzOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUFmdGVyRm9jdXNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZlYXR1cmVzOiAxIC8qIFJlbmRlclN0cmF0ZWd5ICovIHwgMiAvKiBTdGF0aWMgKi8sXG4gICAgICAgIHZpc2libGU6IHZpc2libGUudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiUG9wb3ZlclBhbmVsXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFBvcG92ZXJHcm91cCA9ICgwLCBpbXBvcnRfdnVlMjEuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUG9wb3Zlckdyb3VwXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgZ3JvdXBSZWYgPSAoMCwgaW1wb3J0X3Z1ZTIxLnJlZikobnVsbCk7XG4gICAgbGV0IHBvcG92ZXJzID0gKDAsIGltcG9ydF92dWUyMS5yZWYpKFtdKTtcbiAgICBsZXQgb3duZXJEb2N1bWVudCA9ICgwLCBpbXBvcnRfdnVlMjEuY29tcHV0ZWQpKCgpID0+IGdldE93bmVyRG9jdW1lbnQoZ3JvdXBSZWYpKTtcbiAgICBleHBvc2UoeyBlbDogZ3JvdXBSZWYsICRlbDogZ3JvdXBSZWYgfSk7XG4gICAgZnVuY3Rpb24gdW5yZWdpc3RlclBvcG92ZXIocmVnaXN0ZXJCYWcpIHtcbiAgICAgIGxldCBpZHggPSBwb3BvdmVycy52YWx1ZS5pbmRleE9mKHJlZ2lzdGVyQmFnKTtcbiAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICBwb3BvdmVycy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJQb3BvdmVyKHJlZ2lzdGVyQmFnKSB7XG4gICAgICBwb3BvdmVycy52YWx1ZS5wdXNoKHJlZ2lzdGVyQmFnKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVucmVnaXN0ZXJQb3BvdmVyKHJlZ2lzdGVyQmFnKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRm9jdXNXaXRoaW5Qb3BvdmVyR3JvdXAoKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBsZXQgb3duZXIgPSBvd25lckRvY3VtZW50LnZhbHVlO1xuICAgICAgaWYgKCFvd25lcilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgbGV0IGVsZW1lbnQgPSBvd25lci5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKChfYSA9IGRvbShncm91cFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jb250YWlucyhlbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gcG9wb3ZlcnMudmFsdWUuc29tZSgoYmFnKSA9PiB7XG4gICAgICAgIHZhciBfYTIsIF9iO1xuICAgICAgICByZXR1cm4gKChfYTIgPSBvd25lci5nZXRFbGVtZW50QnlJZChiYWcuYnV0dG9uSWQpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNvbnRhaW5zKGVsZW1lbnQpKSB8fCAoKF9iID0gb3duZXIuZ2V0RWxlbWVudEJ5SWQoYmFnLnBhbmVsSWQpKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY29udGFpbnMoZWxlbWVudCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb3NlT3RoZXJzKGJ1dHRvbklkKSB7XG4gICAgICBmb3IgKGxldCBwb3BvdmVyIG9mIHBvcG92ZXJzLnZhbHVlKSB7XG4gICAgICAgIGlmIChwb3BvdmVyLmJ1dHRvbklkICE9PSBidXR0b25JZClcbiAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICAgICgwLCBpbXBvcnRfdnVlMjEucHJvdmlkZSkoUG9wb3Zlckdyb3VwQ29udGV4dCwge1xuICAgICAgcmVnaXN0ZXJQb3BvdmVyLFxuICAgICAgdW5yZWdpc3RlclBvcG92ZXIsXG4gICAgICBpc0ZvY3VzV2l0aGluUG9wb3Zlckdyb3VwLFxuICAgICAgY2xvc2VPdGhlcnNcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IG91clByb3BzID0geyByZWY6IGdyb3VwUmVmIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90OiB7fSxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlBvcG92ZXJHcm91cFwiXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmFkaW8tZ3JvdXAvcmFkaW8tZ3JvdXAudHNcbnZhciBpbXBvcnRfdnVlMjMgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvY29tcG9uZW50cy9sYWJlbC9sYWJlbC50c1xudmFyIGltcG9ydF92dWUyMiA9IHJlcXVpcmUoXCJ2dWVcIik7XG52YXIgTGFiZWxDb250ZXh0ID0gU3ltYm9sKFwiTGFiZWxDb250ZXh0XCIpO1xuZnVuY3Rpb24gdXNlTGFiZWxDb250ZXh0KCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMjIuaW5qZWN0KShMYWJlbENvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoXCJZb3UgdXNlZCBhIDxMYWJlbCAvPiBjb21wb25lbnQsIGJ1dCBpdCBpcyBub3QgaW5zaWRlIGEgcGFyZW50LlwiKTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHVzZUxhYmVsQ29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuZnVuY3Rpb24gdXNlTGFiZWxzKHtcbiAgc2xvdCA9IHt9LFxuICBuYW1lID0gXCJMYWJlbFwiLFxuICBwcm9wcyA9IHt9XG59ID0ge30pIHtcbiAgbGV0IGxhYmVsSWRzID0gKDAsIGltcG9ydF92dWUyMi5yZWYpKFtdKTtcbiAgZnVuY3Rpb24gcmVnaXN0ZXIodmFsdWUpIHtcbiAgICBsYWJlbElkcy52YWx1ZS5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IGlkeCA9IGxhYmVsSWRzLnZhbHVlLmluZGV4T2YodmFsdWUpO1xuICAgICAgaWYgKGlkeCA9PT0gLTEpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxhYmVsSWRzLnZhbHVlLnNwbGljZShpZHgsIDEpO1xuICAgIH07XG4gIH1cbiAgKDAsIGltcG9ydF92dWUyMi5wcm92aWRlKShMYWJlbENvbnRleHQsIHsgcmVnaXN0ZXIsIHNsb3QsIG5hbWUsIHByb3BzIH0pO1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUyMi5jb21wdXRlZCkoKCkgPT4gbGFiZWxJZHMudmFsdWUubGVuZ3RoID4gMCA/IGxhYmVsSWRzLnZhbHVlLmpvaW4oXCIgXCIpIDogdm9pZCAwKTtcbn1cbnZhciBMYWJlbCA9ICgwLCBpbXBvcnRfdnVlMjIuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiTGFiZWxcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImxhYmVsXCIgfSxcbiAgICBwYXNzaXZlOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuICBzZXR1cChteVByb3BzLCB7IHNsb3RzLCBhdHRycyB9KSB7XG4gICAgbGV0IGNvbnRleHQgPSB1c2VMYWJlbENvbnRleHQoKTtcbiAgICBsZXQgaWQyID0gYGhlYWRsZXNzdWktbGFiZWwtJHt1c2VJZCgpfWA7XG4gICAgKDAsIGltcG9ydF92dWUyMi5vbk1vdW50ZWQpKCgpID0+ICgwLCBpbXBvcnRfdnVlMjIub25Vbm1vdW50ZWQpKGNvbnRleHQucmVnaXN0ZXIoaWQyKSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBuYW1lID0gXCJMYWJlbFwiLCBzbG90ID0ge30sIHByb3BzID0ge30gfSA9IGNvbnRleHQ7XG4gICAgICBsZXQgeyBwYXNzaXZlLCAuLi50aGVpclByb3BzIH0gPSBteVByb3BzO1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICAuLi5PYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06ICgwLCBpbXBvcnRfdnVlMjIudW5yZWYpKHZhbHVlKSB9KSwge30pLFxuICAgICAgICBpZDogaWQyXG4gICAgICB9O1xuICAgICAgaWYgKHBhc3NpdmUpIHtcbiAgICAgICAgZGVsZXRlIG91clByb3BzW1wib25DbGlja1wiXTtcbiAgICAgICAgZGVsZXRlIHRoZWlyUHJvcHNbXCJvbkNsaWNrXCJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbmRlcih7XG4gICAgICAgIG91clByb3BzLFxuICAgICAgICB0aGVpclByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWVcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9yYWRpby1ncm91cC9yYWRpby1ncm91cC50c1xudmFyIFJhZGlvR3JvdXBDb250ZXh0ID0gU3ltYm9sKFwiUmFkaW9Hcm91cENvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VSYWRpb0dyb3VwQ29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTIzLmluamVjdCkoUmFkaW9Hcm91cENvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8UmFkaW9Hcm91cCAvPiBjb21wb25lbnQuYCk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB1c2VSYWRpb0dyb3VwQ29udGV4dCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIFJhZGlvR3JvdXAgPSAoMCwgaW1wb3J0X3Z1ZTIzLmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlJhZGlvR3JvdXBcIixcbiAgZW1pdHM6IHsgXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiOiAoX3ZhbHVlKSA9PiB0cnVlIH0sXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZywgTnVtYmVyLCBCb29sZWFuXSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9XG4gIH0sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHNldHVwKHByb3BzLCB7IGVtaXQsIGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgcmFkaW9Hcm91cFJlZiA9ICgwLCBpbXBvcnRfdnVlMjMucmVmKShudWxsKTtcbiAgICBsZXQgb3B0aW9ucyA9ICgwLCBpbXBvcnRfdnVlMjMucmVmKShbXSk7XG4gICAgbGV0IGxhYmVsbGVkYnkgPSB1c2VMYWJlbHMoeyBuYW1lOiBcIlJhZGlvR3JvdXBMYWJlbFwiIH0pO1xuICAgIGxldCBkZXNjcmliZWRieSA9IHVzZURlc2NyaXB0aW9ucyh7IG5hbWU6IFwiUmFkaW9Hcm91cERlc2NyaXB0aW9uXCIgfSk7XG4gICAgZXhwb3NlKHsgZWw6IHJhZGlvR3JvdXBSZWYsICRlbDogcmFkaW9Hcm91cFJlZiB9KTtcbiAgICBsZXQgdmFsdWUgPSAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tb2RlbFZhbHVlKTtcbiAgICBsZXQgYXBpID0ge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIHZhbHVlLFxuICAgICAgZGlzYWJsZWQ6ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IHByb3BzLmRpc2FibGVkKSxcbiAgICAgIGZpcnN0T3B0aW9uOiAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBvcHRpb25zLnZhbHVlLmZpbmQoKG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLnByb3BzUmVmLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KSksXG4gICAgICBjb250YWluc0NoZWNrZWRPcHRpb246ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IG9wdGlvbnMudmFsdWUuc29tZSgob3B0aW9uKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTIzLnRvUmF3KShvcHRpb24ucHJvcHNSZWYudmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTIzLnRvUmF3KShwcm9wcy5tb2RlbFZhbHVlKSkpKSxcbiAgICAgIGNvbXBhcmUoYSwgeikge1xuICAgICAgICByZXR1cm4gYSA9PT0gejtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2UobmV4dFZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGFwaS5jb21wYXJlKCgwLCBpbXBvcnRfdnVlMjMudG9SYXcpKHZhbHVlLnZhbHVlKSwgKDAsIGltcG9ydF92dWUyMy50b1JhdykobmV4dFZhbHVlKSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgbmV4dE9wdGlvbiA9IChfYSA9IG9wdGlvbnMudmFsdWUuZmluZCgob3B0aW9uKSA9PiBhcGkuY29tcGFyZSgoMCwgaW1wb3J0X3Z1ZTIzLnRvUmF3KShvcHRpb24ucHJvcHNSZWYudmFsdWUpLCAoMCwgaW1wb3J0X3Z1ZTIzLnRvUmF3KShuZXh0VmFsdWUpKSkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wcm9wc1JlZjtcbiAgICAgICAgaWYgKG5leHRPcHRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRPcHRpb24uZGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgbmV4dFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJPcHRpb24oYWN0aW9uKSB7XG4gICAgICAgIG9wdGlvbnMudmFsdWUucHVzaChhY3Rpb24pO1xuICAgICAgICBvcHRpb25zLnZhbHVlID0gc29ydEJ5RG9tTm9kZShvcHRpb25zLnZhbHVlLCAob3B0aW9uKSA9PiBvcHRpb24uZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdW5yZWdpc3Rlck9wdGlvbihpZDMpIHtcbiAgICAgICAgbGV0IGlkeCA9IG9wdGlvbnMudmFsdWUuZmluZEluZGV4KChyYWRpbykgPT4gcmFkaW8uaWQgPT09IGlkMyk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3B0aW9ucy52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgICgwLCBpbXBvcnRfdnVlMjMucHJvdmlkZSkoUmFkaW9Hcm91cENvbnRleHQsIGFwaSk7XG4gICAgdXNlVHJlZVdhbGtlcih7XG4gICAgICBjb250YWluZXI6ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+IGRvbShyYWRpb0dyb3VwUmVmKSksXG4gICAgICBhY2NlcHQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpID09PSBcInJhZGlvXCIpXG4gICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKFwicm9sZVwiKSlcbiAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0sXG4gICAgICB3YWxrKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibm9uZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAoIXJhZGlvR3JvdXBSZWYudmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghcmFkaW9Hcm91cFJlZi52YWx1ZS5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgYWxsID0gb3B0aW9ucy52YWx1ZS5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnByb3BzUmVmLmRpc2FibGVkID09PSBmYWxzZSkubWFwKChyYWRpbykgPT4gcmFkaW8uZWxlbWVudCk7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIFwiRW50ZXJcIiAvKiBFbnRlciAqLzpcbiAgICAgICAgICBhdHRlbXB0U3VibWl0KGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCIgLyogQXJyb3dMZWZ0ICovOlxuICAgICAgICBjYXNlIFwiQXJyb3dVcFwiIC8qIEFycm93VXAgKi86XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZvY3VzSW4oYWxsLCAyIC8qIFByZXZpb3VzICovIHwgMTYgLyogV3JhcEFyb3VuZCAqLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSAyIC8qIFN1Y2Nlc3MgKi8pIHtcbiAgICAgICAgICAgICAgbGV0IGFjdGl2ZU9wdGlvbiA9IG9wdGlvbnMudmFsdWUuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24uZWxlbWVudCA9PT0gKChfYSA9IGdldE93bmVyRG9jdW1lbnQocmFkaW9Hcm91cFJlZikpID09IG51bGwgPyB2b2lkIDAgOiBfYS5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVPcHRpb24pXG4gICAgICAgICAgICAgICAgYXBpLmNoYW5nZShhY3RpdmVPcHRpb24ucHJvcHNSZWYudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93UmlnaHRcIiAvKiBBcnJvd1JpZ2h0ICovOlxuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCIgLyogQXJyb3dEb3duICovOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBmb2N1c0luKGFsbCwgNCAvKiBOZXh0ICovIHwgMTYgLyogV3JhcEFyb3VuZCAqLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSAyIC8qIFN1Y2Nlc3MgKi8pIHtcbiAgICAgICAgICAgICAgbGV0IGFjdGl2ZU9wdGlvbiA9IG9wdGlvbnMudmFsdWUuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24uZWxlbWVudCA9PT0gKChfYSA9IGdldE93bmVyRG9jdW1lbnQob3B0aW9uLmVsZW1lbnQpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKVxuICAgICAgICAgICAgICAgIGFwaS5jaGFuZ2UoYWN0aXZlT3B0aW9uLnByb3BzUmVmLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIgXCIgLyogU3BhY2UgKi86XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgbGV0IGFjdGl2ZU9wdGlvbiA9IG9wdGlvbnMudmFsdWUuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5lbGVtZW50ID09PSAoKF9hID0gZ2V0T3duZXJEb2N1bWVudChvcHRpb24uZWxlbWVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbilcbiAgICAgICAgICAgICAgYXBpLmNoYW5nZShhY3RpdmVPcHRpb24ucHJvcHNSZWYudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLXJhZGlvZ3JvdXAtJHt1c2VJZCgpfWA7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB7IG1vZGVsVmFsdWUsIGRpc2FibGVkLCBuYW1lLCAuLi50aGVpclByb3BzIH0gPSBwcm9wcztcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgcmVmOiByYWRpb0dyb3VwUmVmLFxuICAgICAgICBpZDogaWQyLFxuICAgICAgICByb2xlOiBcInJhZGlvZ3JvdXBcIixcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogbGFiZWxsZWRieS52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGRlc2NyaWJlZGJ5LnZhbHVlLFxuICAgICAgICBvbktleWRvd246IGhhbmRsZUtleURvd25cbiAgICAgIH07XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUyMy5oKShpbXBvcnRfdnVlMjMuRnJhZ21lbnQsIFtcbiAgICAgICAgLi4ubmFtZSAhPSBudWxsICYmIG1vZGVsVmFsdWUgIT0gbnVsbCA/IG9iamVjdFRvRm9ybUVudHJpZXMoeyBbbmFtZV06IG1vZGVsVmFsdWUgfSkubWFwKChbbmFtZTIsIHZhbHVlMl0pID0+ICgwLCBpbXBvcnRfdnVlMjMuaCkoSGlkZGVuLCBjb21wYWN0KHtcbiAgICAgICAgICBmZWF0dXJlczogNCAvKiBIaWRkZW4gKi8sXG4gICAgICAgICAga2V5OiBuYW1lMixcbiAgICAgICAgICBhczogXCJpbnB1dFwiLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIG5hbWU6IG5hbWUyLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZTJcbiAgICAgICAgfSkpKSA6IFtdLFxuICAgICAgICByZW5kZXIoe1xuICAgICAgICAgIG91clByb3BzLFxuICAgICAgICAgIHRoZWlyUHJvcHM6IHsgLi4uYXR0cnMsIC4uLnRoZWlyUHJvcHMgfSxcbiAgICAgICAgICBzbG90OiB7fSxcbiAgICAgICAgICBhdHRycyxcbiAgICAgICAgICBzbG90cyxcbiAgICAgICAgICBuYW1lOiBcIlJhZGlvR3JvdXBcIlxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgUmFkaW9Hcm91cE9wdGlvbiA9ICgwLCBpbXBvcnRfdnVlMjMuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiUmFkaW9Hcm91cE9wdGlvblwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICB2YWx1ZTogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbl0gfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlUmFkaW9Hcm91cENvbnRleHQoXCJSYWRpb0dyb3VwT3B0aW9uXCIpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1yYWRpb2dyb3VwLW9wdGlvbi0ke3VzZUlkKCl9YDtcbiAgICBsZXQgbGFiZWxsZWRieSA9IHVzZUxhYmVscyh7IG5hbWU6IFwiUmFkaW9Hcm91cExhYmVsXCIgfSk7XG4gICAgbGV0IGRlc2NyaWJlZGJ5ID0gdXNlRGVzY3JpcHRpb25zKHsgbmFtZTogXCJSYWRpb0dyb3VwRGVzY3JpcHRpb25cIiB9KTtcbiAgICBsZXQgb3B0aW9uUmVmID0gKDAsIGltcG9ydF92dWUyMy5yZWYpKG51bGwpO1xuICAgIGxldCBwcm9wc1JlZiA9ICgwLCBpbXBvcnRfdnVlMjMuY29tcHV0ZWQpKCgpID0+ICh7IHZhbHVlOiBwcm9wcy52YWx1ZSwgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkIH0pKTtcbiAgICBsZXQgc3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTIzLnJlZikoMSAvKiBFbXB0eSAqLyk7XG4gICAgZXhwb3NlKHsgZWw6IG9wdGlvblJlZiwgJGVsOiBvcHRpb25SZWYgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyMy5vbk1vdW50ZWQpKCgpID0+IGFwaS5yZWdpc3Rlck9wdGlvbih7IGlkOiBpZDIsIGVsZW1lbnQ6IG9wdGlvblJlZiwgcHJvcHNSZWYgfSkpO1xuICAgICgwLCBpbXBvcnRfdnVlMjMub25Vbm1vdW50ZWQpKCgpID0+IGFwaS51bnJlZ2lzdGVyT3B0aW9uKGlkMikpO1xuICAgIGxldCBpc0ZpcnN0T3B0aW9uID0gKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuICgoX2EgPSBhcGkuZmlyc3RPcHRpb24udmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5pZCkgPT09IGlkMjtcbiAgICB9KTtcbiAgICBsZXQgZGlzYWJsZWQgPSAoMCwgaW1wb3J0X3Z1ZTIzLmNvbXB1dGVkKSgoKSA9PiBhcGkuZGlzYWJsZWQudmFsdWUgfHwgcHJvcHMuZGlzYWJsZWQpO1xuICAgIGxldCBjaGVja2VkID0gKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4gYXBpLmNvbXBhcmUoKDAsIGltcG9ydF92dWUyMy50b1JhdykoYXBpLnZhbHVlLnZhbHVlKSwgKDAsIGltcG9ydF92dWUyMy50b1JhdykocHJvcHMudmFsdWUpKSk7XG4gICAgbGV0IHRhYkluZGV4ID0gKDAsIGltcG9ydF92dWUyMy5jb21wdXRlZCkoKCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkLnZhbHVlKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoY2hlY2tlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBpZiAoIWFwaS5jb250YWluc0NoZWNrZWRPcHRpb24udmFsdWUgJiYgaXNGaXJzdE9wdGlvbi52YWx1ZSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoIWFwaS5jaGFuZ2UocHJvcHMudmFsdWUpKVxuICAgICAgICByZXR1cm47XG4gICAgICBzdGF0ZS52YWx1ZSB8PSAyIC8qIEFjdGl2ZSAqLztcbiAgICAgIChfYSA9IG9wdGlvblJlZi52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgc3RhdGUudmFsdWUgfD0gMiAvKiBBY3RpdmUgKi87XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG4gICAgICBzdGF0ZS52YWx1ZSAmPSB+MiAvKiBBY3RpdmUgKi87XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IG9taXQocHJvcHMsIFtcInZhbHVlXCIsIFwiZGlzYWJsZWRcIl0pO1xuICAgICAgbGV0IHNsb3QgPSB7XG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQudmFsdWUsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZC52YWx1ZSxcbiAgICAgICAgYWN0aXZlOiBCb29sZWFuKHN0YXRlLnZhbHVlICYgMiAvKiBBY3RpdmUgKi8pXG4gICAgICB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IG9wdGlvblJlZixcbiAgICAgICAgcm9sZTogXCJyYWRpb1wiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsbGVkYnkudmFsdWUsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBkZXNjcmliZWRieS52YWx1ZSxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLnZhbHVlID8gdHJ1ZSA6IHZvaWQgMCxcbiAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LnZhbHVlLFxuICAgICAgICBvbkNsaWNrOiBkaXNhYmxlZC52YWx1ZSA/IHZvaWQgMCA6IGhhbmRsZUNsaWNrLFxuICAgICAgICBvbkZvY3VzOiBkaXNhYmxlZC52YWx1ZSA/IHZvaWQgMCA6IGhhbmRsZUZvY3VzLFxuICAgICAgICBvbkJsdXI6IGRpc2FibGVkLnZhbHVlID8gdm9pZCAwIDogaGFuZGxlQmx1clxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlJhZGlvR3JvdXBPcHRpb25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgUmFkaW9Hcm91cExhYmVsID0gTGFiZWw7XG52YXIgUmFkaW9Hcm91cERlc2NyaXB0aW9uID0gRGVzY3JpcHRpb247XG5cbi8vIHNyYy9jb21wb25lbnRzL3N3aXRjaC9zd2l0Y2gudHNcbnZhciBpbXBvcnRfdnVlMjQgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEdyb3VwQ29udGV4dCA9IFN5bWJvbChcIkdyb3VwQ29udGV4dFwiKTtcbnZhciBTd2l0Y2hHcm91cCA9ICgwLCBpbXBvcnRfdnVlMjQuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiU3dpdGNoR3JvdXBcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cywgYXR0cnMgfSkge1xuICAgIGxldCBzd2l0Y2hSZWYgPSAoMCwgaW1wb3J0X3Z1ZTI0LnJlZikobnVsbCk7XG4gICAgbGV0IGxhYmVsbGVkYnkgPSB1c2VMYWJlbHMoe1xuICAgICAgbmFtZTogXCJTd2l0Y2hMYWJlbFwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgb25DbGljaygpIHtcbiAgICAgICAgICBpZiAoIXN3aXRjaFJlZi52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBzd2l0Y2hSZWYudmFsdWUuY2xpY2soKTtcbiAgICAgICAgICBzd2l0Y2hSZWYudmFsdWUuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGRlc2NyaWJlZGJ5ID0gdXNlRGVzY3JpcHRpb25zKHsgbmFtZTogXCJTd2l0Y2hEZXNjcmlwdGlvblwiIH0pO1xuICAgIGxldCBhcGkgPSB7IHN3aXRjaFJlZiwgbGFiZWxsZWRieSwgZGVzY3JpYmVkYnkgfTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI0LnByb3ZpZGUpKEdyb3VwQ29udGV4dCwgYXBpKTtcbiAgICByZXR1cm4gKCkgPT4gcmVuZGVyKHsgdGhlaXJQcm9wczogcHJvcHMsIG91clByb3BzOiB7fSwgc2xvdDoge30sIHNsb3RzLCBhdHRycywgbmFtZTogXCJTd2l0Y2hHcm91cFwiIH0pO1xuICB9XG59KTtcbnZhciBTd2l0Y2ggPSAoMCwgaW1wb3J0X3Z1ZTI0LmRlZmluZUNvbXBvbmVudCkoe1xuICBuYW1lOiBcIlN3aXRjaFwiLFxuICBlbWl0czogeyBcInVwZGF0ZTptb2RlbFZhbHVlXCI6IChfdmFsdWUpID0+IHRydWUgfSxcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImJ1dHRvblwiIH0sXG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFN0cmluZywgb3B0aW9uYWw6IHRydWUgfVxuICB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBzZXR1cChwcm9wcywgeyBlbWl0LCBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9ICgwLCBpbXBvcnRfdnVlMjQuaW5qZWN0KShHcm91cENvbnRleHQsIG51bGwpO1xuICAgIGxldCBpZDIgPSBgaGVhZGxlc3N1aS1zd2l0Y2gtJHt1c2VJZCgpfWA7XG4gICAgZnVuY3Rpb24gdG9nZ2xlKCkge1xuICAgICAgZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsICFwcm9wcy5tb2RlbFZhbHVlKTtcbiAgICB9XG4gICAgbGV0IGludGVybmFsU3dpdGNoUmVmID0gKDAsIGltcG9ydF92dWUyNC5yZWYpKG51bGwpO1xuICAgIGxldCBzd2l0Y2hSZWYgPSBhcGkgPT09IG51bGwgPyBpbnRlcm5hbFN3aXRjaFJlZiA6IGFwaS5zd2l0Y2hSZWY7XG4gICAgbGV0IHR5cGUgPSB1c2VSZXNvbHZlQnV0dG9uVHlwZSgoMCwgaW1wb3J0X3Z1ZTI0LmNvbXB1dGVkKSgoKSA9PiAoeyBhczogcHJvcHMuYXMsIHR5cGU6IGF0dHJzLnR5cGUgfSkpLCBzd2l0Y2hSZWYpO1xuICAgIGV4cG9zZSh7IGVsOiBzd2l0Y2hSZWYsICRlbDogc3dpdGNoUmVmIH0pO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdG9nZ2xlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleVVwKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIiBcIiAvKiBTcGFjZSAqLykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0b2dnbGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgLyogRW50ZXIgKi8pIHtcbiAgICAgICAgYXR0ZW1wdFN1Ym1pdChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5UHJlc3MoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgeyBuYW1lLCB2YWx1ZSwgbW9kZWxWYWx1ZSwgLi4udGhlaXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgICBsZXQgc2xvdCA9IHsgY2hlY2tlZDogbW9kZWxWYWx1ZSB9O1xuICAgICAgbGV0IG91clByb3BzID0ge1xuICAgICAgICBpZDogaWQyLFxuICAgICAgICByZWY6IHN3aXRjaFJlZixcbiAgICAgICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICAgICAgdHlwZTogdHlwZS52YWx1ZSxcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IG1vZGVsVmFsdWUsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFwaSA9PSBudWxsID8gdm9pZCAwIDogYXBpLmxhYmVsbGVkYnkudmFsdWUsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcGkgPT0gbnVsbCA/IHZvaWQgMCA6IGFwaS5kZXNjcmliZWRieS52YWx1ZSxcbiAgICAgICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgICAgIG9uS2V5dXA6IGhhbmRsZUtleVVwLFxuICAgICAgICBvbktleXByZXNzOiBoYW5kbGVLZXlQcmVzc1xuICAgICAgfTtcbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTI0LmgpKGltcG9ydF92dWUyNC5GcmFnbWVudCwgW1xuICAgICAgICBuYW1lICE9IG51bGwgJiYgbW9kZWxWYWx1ZSAhPSBudWxsID8gKDAsIGltcG9ydF92dWUyNC5oKShIaWRkZW4sIGNvbXBhY3Qoe1xuICAgICAgICAgIGZlYXR1cmVzOiA0IC8qIEhpZGRlbiAqLyxcbiAgICAgICAgICBhczogXCJpbnB1dFwiLFxuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgY2hlY2tlZDogbW9kZWxWYWx1ZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pKSA6IG51bGwsXG4gICAgICAgIHJlbmRlcih7XG4gICAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgICAgdGhlaXJQcm9wczogeyAuLi5hdHRycywgLi4udGhlaXJQcm9wcyB9LFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgbmFtZTogXCJTd2l0Y2hcIlxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgU3dpdGNoTGFiZWwgPSBMYWJlbDtcbnZhciBTd2l0Y2hEZXNjcmlwdGlvbiA9IERlc2NyaXB0aW9uO1xuXG4vLyBzcmMvY29tcG9uZW50cy90YWJzL3RhYnMudHNcbnZhciBpbXBvcnRfdnVlMjYgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvaW50ZXJuYWwvZm9jdXMtc2VudGluZWwudHNcbnZhciBpbXBvcnRfdnVlMjUgPSByZXF1aXJlKFwidnVlXCIpO1xudmFyIEZvY3VzU2VudGluZWwgPSAoMCwgaW1wb3J0X3Z1ZTI1LmRlZmluZUNvbXBvbmVudCkoe1xuICBwcm9wczoge1xuICAgIG9uRm9jdXM6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzKSB7XG4gICAgbGV0IGVuYWJsZWQgPSAoMCwgaW1wb3J0X3Z1ZTI1LnJlZikodHJ1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghZW5hYmxlZC52YWx1ZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF92dWUyNS5oKShIaWRkZW4sIHtcbiAgICAgICAgYXM6IFwiYnV0dG9uXCIsXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIGZlYXR1cmVzOiAyIC8qIEZvY3VzYWJsZSAqLyxcbiAgICAgICAgb25Gb2N1cyhldmVudCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbGV0IGZyYW1lO1xuICAgICAgICAgIGxldCB0cmllcyA9IDUwO1xuICAgICAgICAgIGZ1bmN0aW9uIGZvcndhcmRGb2N1cygpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0cmllcy0tIDw9IDApIHtcbiAgICAgICAgICAgICAgaWYgKGZyYW1lKVxuICAgICAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChfYSA9IHByb3BzLm9uRm9jdXMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKHByb3BzKSkge1xuICAgICAgICAgICAgICBlbmFibGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm9yd2FyZEZvY3VzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm9yd2FyZEZvY3VzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3RhYnMvdGFicy50c1xudmFyIFRhYnNDb250ZXh0ID0gU3ltYm9sKFwiVGFic0NvbnRleHRcIik7XG5mdW5jdGlvbiB1c2VUYWJzQ29udGV4dChjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRleHQgPSAoMCwgaW1wb3J0X3Z1ZTI2LmluamVjdCkoVGFic0NvbnRleHQsIG51bGwpO1xuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYDwke2NvbXBvbmVudH0gLz4gaXMgbWlzc2luZyBhIHBhcmVudCA8VGFiR3JvdXAgLz4gY29tcG9uZW50LmApO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdXNlVGFic0NvbnRleHQpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbnZhciBUYWJHcm91cCA9ICgwLCBpbXBvcnRfdnVlMjYuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiVGFiR3JvdXBcIixcbiAgZW1pdHM6IHtcbiAgICBjaGFuZ2U6IChfaW5kZXgpID0+IHRydWVcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcInRlbXBsYXRlXCIgfSxcbiAgICBzZWxlY3RlZEluZGV4OiB7IHR5cGU6IFtOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGVmYXVsdEluZGV4OiB7IHR5cGU6IFtOdW1iZXJdLCBkZWZhdWx0OiAwIH0sXG4gICAgdmVydGljYWw6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1hbnVhbDogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGF0dHJzLCBlbWl0IH0pIHtcbiAgICBsZXQgc2VsZWN0ZWRJbmRleCA9ICgwLCBpbXBvcnRfdnVlMjYucmVmKShudWxsKTtcbiAgICBsZXQgdGFicyA9ICgwLCBpbXBvcnRfdnVlMjYucmVmKShbXSk7XG4gICAgbGV0IHBhbmVscyA9ICgwLCBpbXBvcnRfdnVlMjYucmVmKShbXSk7XG4gICAgbGV0IGFwaSA9IHtcbiAgICAgIHNlbGVjdGVkSW5kZXgsXG4gICAgICBvcmllbnRhdGlvbjogKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gcHJvcHMudmVydGljYWwgPyBcInZlcnRpY2FsXCIgOiBcImhvcml6b250YWxcIiksXG4gICAgICBhY3RpdmF0aW9uOiAoMCwgaW1wb3J0X3Z1ZTI2LmNvbXB1dGVkKSgoKSA9PiBwcm9wcy5tYW51YWwgPyBcIm1hbnVhbFwiIDogXCJhdXRvXCIpLFxuICAgICAgdGFicyxcbiAgICAgIHBhbmVscyxcbiAgICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXgudmFsdWUgPT09IGluZGV4KVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZWN0ZWRJbmRleC52YWx1ZSA9IGluZGV4O1xuICAgICAgICBlbWl0KFwiY2hhbmdlXCIsIGluZGV4KTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlclRhYih0YWIpIHtcbiAgICAgICAgaWYgKCF0YWJzLnZhbHVlLmluY2x1ZGVzKHRhYikpXG4gICAgICAgICAgdGFicy52YWx1ZS5wdXNoKHRhYik7XG4gICAgICB9LFxuICAgICAgdW5yZWdpc3RlclRhYih0YWIpIHtcbiAgICAgICAgbGV0IGlkeCA9IHRhYnMudmFsdWUuaW5kZXhPZih0YWIpO1xuICAgICAgICBpZiAoaWR4ICE9PSAtMSlcbiAgICAgICAgICB0YWJzLnZhbHVlLnNwbGljZShpZHgsIDEpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyUGFuZWwocGFuZWwpIHtcbiAgICAgICAgaWYgKCFwYW5lbHMudmFsdWUuaW5jbHVkZXMocGFuZWwpKVxuICAgICAgICAgIHBhbmVscy52YWx1ZS5wdXNoKHBhbmVsKTtcbiAgICAgIH0sXG4gICAgICB1bnJlZ2lzdGVyUGFuZWwocGFuZWwpIHtcbiAgICAgICAgbGV0IGlkeCA9IHBhbmVscy52YWx1ZS5pbmRleE9mKHBhbmVsKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgcGFuZWxzLnZhbHVlLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH07XG4gICAgKDAsIGltcG9ydF92dWUyNi5wcm92aWRlKShUYWJzQ29udGV4dCwgYXBpKTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI2LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBpZiAoYXBpLnRhYnMudmFsdWUubGVuZ3RoIDw9IDApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChwcm9wcy5zZWxlY3RlZEluZGV4ID09PSBudWxsICYmIHNlbGVjdGVkSW5kZXgudmFsdWUgIT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCB0YWJzMiA9IGFwaS50YWJzLnZhbHVlLm1hcCgodGFiKSA9PiBkb20odGFiKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgbGV0IGZvY3VzYWJsZVRhYnMgPSB0YWJzMi5maWx0ZXIoKHRhYikgPT4gIXRhYi5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSk7XG4gICAgICBsZXQgaW5kZXhUb1NldCA9IChfYSA9IHByb3BzLnNlbGVjdGVkSW5kZXgpICE9IG51bGwgPyBfYSA6IHByb3BzLmRlZmF1bHRJbmRleDtcbiAgICAgIGlmIChpbmRleFRvU2V0IDwgMCkge1xuICAgICAgICBzZWxlY3RlZEluZGV4LnZhbHVlID0gdGFiczIuaW5kZXhPZihmb2N1c2FibGVUYWJzWzBdKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXhUb1NldCA+IGFwaS50YWJzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICBzZWxlY3RlZEluZGV4LnZhbHVlID0gdGFiczIuaW5kZXhPZihmb2N1c2FibGVUYWJzW2ZvY3VzYWJsZVRhYnMubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGJlZm9yZSA9IHRhYnMyLnNsaWNlKDAsIGluZGV4VG9TZXQpO1xuICAgICAgICBsZXQgYWZ0ZXIgPSB0YWJzMi5zbGljZShpbmRleFRvU2V0KTtcbiAgICAgICAgbGV0IG5leHQgPSBbLi4uYWZ0ZXIsIC4uLmJlZm9yZV0uZmluZCgodGFiKSA9PiBmb2N1c2FibGVUYWJzLmluY2x1ZGVzKHRhYikpO1xuICAgICAgICBpZiAoIW5leHQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWxlY3RlZEluZGV4LnZhbHVlID0gdGFiczIuaW5kZXhPZihuZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IHNlbGVjdGVkSW5kZXg6IHNlbGVjdGVkSW5kZXgudmFsdWUgfTtcbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3Z1ZTI2LmgpKGltcG9ydF92dWUyNi5GcmFnbWVudCwgW1xuICAgICAgICB0YWJzLnZhbHVlLmxlbmd0aCA8PSAwICYmICgwLCBpbXBvcnRfdnVlMjYuaCkoRm9jdXNTZW50aW5lbCwge1xuICAgICAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IHRhYiBvZiB0YWJzLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGxldCBlbCA9IGRvbSh0YWIpO1xuICAgICAgICAgICAgICBpZiAoKGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50YWJJbmRleCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgcmVuZGVyKHtcbiAgICAgICAgICB0aGVpclByb3BzOiB7XG4gICAgICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgICAgIC4uLm9taXQocHJvcHMsIFtcInNlbGVjdGVkSW5kZXhcIiwgXCJkZWZhdWx0SW5kZXhcIiwgXCJtYW51YWxcIiwgXCJ2ZXJ0aWNhbFwiLCBcIm9uQ2hhbmdlXCJdKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3VyUHJvcHM6IHt9LFxuICAgICAgICAgIHNsb3QsXG4gICAgICAgICAgc2xvdHMsXG4gICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgbmFtZTogXCJUYWJHcm91cFwiXG4gICAgICAgIH0pXG4gICAgICBdKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBUYWJMaXN0ID0gKDAsIGltcG9ydF92dWUyNi5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJUYWJMaXN0XCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVRhYnNDb250ZXh0KFwiVGFiTGlzdFwiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGV0IHNsb3QgPSB7IHNlbGVjdGVkSW5kZXg6IGFwaS5zZWxlY3RlZEluZGV4LnZhbHVlIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJvbGU6IFwidGFibGlzdFwiLFxuICAgICAgICBcImFyaWEtb3JpZW50YXRpb25cIjogYXBpLm9yaWVudGF0aW9uLnZhbHVlXG4gICAgICB9O1xuICAgICAgbGV0IHRoZWlyUHJvcHMgPSBwcm9wcztcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgc2xvdCxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIHNsb3RzLFxuICAgICAgICBuYW1lOiBcIlRhYkxpc3RcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG52YXIgVGFiID0gKDAsIGltcG9ydF92dWUyNi5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJUYWJcIixcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImJ1dHRvblwiIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBsZXQgYXBpID0gdXNlVGFic0NvbnRleHQoXCJUYWJcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLXRhYnMtdGFiLSR7dXNlSWQoKX1gO1xuICAgIGxldCBpbnRlcm5hbFRhYlJlZiA9ICgwLCBpbXBvcnRfdnVlMjYucmVmKShudWxsKTtcbiAgICBleHBvc2UoeyBlbDogaW50ZXJuYWxUYWJSZWYsICRlbDogaW50ZXJuYWxUYWJSZWYgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNi5vbk1vdW50ZWQpKCgpID0+IGFwaS5yZWdpc3RlclRhYihpbnRlcm5hbFRhYlJlZikpO1xuICAgICgwLCBpbXBvcnRfdnVlMjYub25Vbm1vdW50ZWQpKCgpID0+IGFwaS51bnJlZ2lzdGVyVGFiKGludGVybmFsVGFiUmVmKSk7XG4gICAgbGV0IG15SW5kZXggPSAoMCwgaW1wb3J0X3Z1ZTI2LmNvbXB1dGVkKSgoKSA9PiBhcGkudGFicy52YWx1ZS5pbmRleE9mKGludGVybmFsVGFiUmVmKSk7XG4gICAgbGV0IHNlbGVjdGVkID0gKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gbXlJbmRleC52YWx1ZSA9PT0gYXBpLnNlbGVjdGVkSW5kZXgudmFsdWUpO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIGxldCBsaXN0ID0gYXBpLnRhYnMudmFsdWUubWFwKCh0YWIpID0+IGRvbSh0YWIpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIiBcIiAvKiBTcGFjZSAqLyB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIiAvKiBFbnRlciAqLykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYXBpLnNldFNlbGVjdGVkSW5kZXgobXlJbmRleC52YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgXCJIb21lXCIgLyogSG9tZSAqLzpcbiAgICAgICAgY2FzZSBcIlBhZ2VVcFwiIC8qIFBhZ2VVcCAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBmb2N1c0luKGxpc3QsIDEgLyogRmlyc3QgKi8pO1xuICAgICAgICBjYXNlIFwiRW5kXCIgLyogRW5kICovOlxuICAgICAgICBjYXNlIFwiUGFnZURvd25cIiAvKiBQYWdlRG93biAqLzpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJldHVybiBmb2N1c0luKGxpc3QsIDggLyogTGFzdCAqLyk7XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2goYXBpLm9yaWVudGF0aW9uLnZhbHVlLCB7XG4gICAgICAgIHZlcnRpY2FsKCkge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiIC8qIEFycm93VXAgKi8pXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCAyIC8qIFByZXZpb3VzICovIHwgMTYgLyogV3JhcEFyb3VuZCAqLyk7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiAvKiBBcnJvd0Rvd24gKi8pXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCA0IC8qIE5leHQgKi8gfCAxNiAvKiBXcmFwQXJvdW5kICovKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG4gICAgICAgIGhvcml6b250YWwoKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0xlZnRcIiAvKiBBcnJvd0xlZnQgKi8pXG4gICAgICAgICAgICByZXR1cm4gZm9jdXNJbihsaXN0LCAyIC8qIFByZXZpb3VzICovIHwgMTYgLyogV3JhcEFyb3VuZCAqLyk7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgLyogQXJyb3dSaWdodCAqLylcbiAgICAgICAgICAgIHJldHVybiBmb2N1c0luKGxpc3QsIDQgLyogTmV4dCAqLyB8IDE2IC8qIFdyYXBBcm91bmQgKi8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgdmFyIF9hO1xuICAgICAgKF9hID0gZG9tKGludGVybmFsVGFiUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGlvbigpIHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChwcm9wcy5kaXNhYmxlZClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgKF9hID0gZG9tKGludGVybmFsVGFiUmVmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICBhcGkuc2V0U2VsZWN0ZWRJbmRleChteUluZGV4LnZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBsZXQgdHlwZSA9IHVzZVJlc29sdmVCdXR0b25UeXBlKCgwLCBpbXBvcnRfdnVlMjYuY29tcHV0ZWQpKCgpID0+ICh7IGFzOiBwcm9wcy5hcywgdHlwZTogYXR0cnMudHlwZSB9KSksIGludGVybmFsVGFiUmVmKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGxldCBzbG90ID0geyBzZWxlY3RlZDogc2VsZWN0ZWQudmFsdWUgfTtcbiAgICAgIGxldCBvdXJQcm9wcyA9IHtcbiAgICAgICAgcmVmOiBpbnRlcm5hbFRhYlJlZixcbiAgICAgICAgb25LZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkZvY3VzOiBhcGkuYWN0aXZhdGlvbi52YWx1ZSA9PT0gXCJtYW51YWxcIiA/IGhhbmRsZUZvY3VzIDogaGFuZGxlU2VsZWN0aW9uLFxuICAgICAgICBvbk1vdXNlZG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgICAgICBvbkNsaWNrOiBoYW5kbGVTZWxlY3Rpb24sXG4gICAgICAgIGlkOiBpZDIsXG4gICAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICAgIHR5cGU6IHR5cGUudmFsdWUsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAoX2IgPSAoX2EgPSBhcGkucGFuZWxzLnZhbHVlW215SW5kZXgudmFsdWVdKSA9PSBudWxsID8gdm9pZCAwIDogX2EudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pZCxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkLnZhbHVlLFxuICAgICAgICB0YWJJbmRleDogc2VsZWN0ZWQudmFsdWUgPyAwIDogLTEsXG4gICAgICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCA/IHRydWUgOiB2b2lkIDBcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHRoZWlyUHJvcHM6IHByb3BzLFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiVGFiXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFRhYlBhbmVscyA9ICgwLCBpbXBvcnRfdnVlMjYuZGVmaW5lQ29tcG9uZW50KSh7XG4gIG5hbWU6IFwiVGFiUGFuZWxzXCIsXG4gIHByb3BzOiB7XG4gICAgYXM6IHsgdHlwZTogW09iamVjdCwgU3RyaW5nXSwgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzLCBhdHRycyB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVRhYnNDb250ZXh0KFwiVGFiUGFuZWxzXCIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQgc2xvdCA9IHsgc2VsZWN0ZWRJbmRleDogYXBpLnNlbGVjdGVkSW5kZXgudmFsdWUgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICB0aGVpclByb3BzOiBwcm9wcyxcbiAgICAgICAgb3VyUHJvcHM6IHt9LFxuICAgICAgICBzbG90LFxuICAgICAgICBhdHRycyxcbiAgICAgICAgc2xvdHMsXG4gICAgICAgIG5hbWU6IFwiVGFiUGFuZWxzXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIFRhYlBhbmVsID0gKDAsIGltcG9ydF92dWUyNi5kZWZpbmVDb21wb25lbnQpKHtcbiAgbmFtZTogXCJUYWJQYW5lbFwiLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBzdGF0aWM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBhdHRycywgc2xvdHMsIGV4cG9zZSB9KSB7XG4gICAgbGV0IGFwaSA9IHVzZVRhYnNDb250ZXh0KFwiVGFiUGFuZWxcIik7XG4gICAgbGV0IGlkMiA9IGBoZWFkbGVzc3VpLXRhYnMtcGFuZWwtJHt1c2VJZCgpfWA7XG4gICAgbGV0IGludGVybmFsUGFuZWxSZWYgPSAoMCwgaW1wb3J0X3Z1ZTI2LnJlZikobnVsbCk7XG4gICAgZXhwb3NlKHsgZWw6IGludGVybmFsUGFuZWxSZWYsICRlbDogaW50ZXJuYWxQYW5lbFJlZiB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI2Lm9uTW91bnRlZCkoKCkgPT4gYXBpLnJlZ2lzdGVyUGFuZWwoaW50ZXJuYWxQYW5lbFJlZikpO1xuICAgICgwLCBpbXBvcnRfdnVlMjYub25Vbm1vdW50ZWQpKCgpID0+IGFwaS51bnJlZ2lzdGVyUGFuZWwoaW50ZXJuYWxQYW5lbFJlZikpO1xuICAgIGxldCBteUluZGV4ID0gKDAsIGltcG9ydF92dWUyNi5jb21wdXRlZCkoKCkgPT4gYXBpLnBhbmVscy52YWx1ZS5pbmRleE9mKGludGVybmFsUGFuZWxSZWYpKTtcbiAgICBsZXQgc2VsZWN0ZWQgPSAoMCwgaW1wb3J0X3Z1ZTI2LmNvbXB1dGVkKSgoKSA9PiBteUluZGV4LnZhbHVlID09PSBhcGkuc2VsZWN0ZWRJbmRleC52YWx1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBsZXQgc2xvdCA9IHsgc2VsZWN0ZWQ6IHNlbGVjdGVkLnZhbHVlIH07XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7XG4gICAgICAgIHJlZjogaW50ZXJuYWxQYW5lbFJlZixcbiAgICAgICAgaWQ6IGlkMixcbiAgICAgICAgcm9sZTogXCJ0YWJwYW5lbFwiLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAoX2IgPSAoX2EgPSBhcGkudGFicy52YWx1ZVtteUluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuaWQsXG4gICAgICAgIHRhYkluZGV4OiBzZWxlY3RlZC52YWx1ZSA/IDAgOiAtMVxuICAgICAgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wcyxcbiAgICAgICAgdGhlaXJQcm9wczogcHJvcHMsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIGF0dHJzLFxuICAgICAgICBzbG90cyxcbiAgICAgICAgZmVhdHVyZXM6IDIgLyogU3RhdGljICovIHwgMSAvKiBSZW5kZXJTdHJhdGVneSAqLyxcbiAgICAgICAgdmlzaWJsZTogc2VsZWN0ZWQudmFsdWUsXG4gICAgICAgIG5hbWU6IFwiVGFiUGFuZWxcIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24udHNcbnZhciBpbXBvcnRfdnVlMjcgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vLyBzcmMvdXRpbHMvb25jZS50c1xuZnVuY3Rpb24gb25jZShjYikge1xuICBsZXQgc3RhdGUgPSB7IGNhbGxlZDogZmFsc2UgfTtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgaWYgKHN0YXRlLmNhbGxlZClcbiAgICAgIHJldHVybjtcbiAgICBzdGF0ZS5jYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBjYiguLi5hcmdzKTtcbiAgfTtcbn1cblxuLy8gc3JjL3V0aWxzL2Rpc3Bvc2FibGVzLnRzXG5mdW5jdGlvbiBkaXNwb3NhYmxlcygpIHtcbiAgbGV0IGRpc3Bvc2FibGVzMiA9IFtdO1xuICBsZXQgcXVldWUgPSBbXTtcbiAgbGV0IGFwaSA9IHtcbiAgICBlbnF1ZXVlKGZuKSB7XG4gICAgICBxdWV1ZS5wdXNoKGZuKTtcbiAgICB9LFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5hcmdzKSB7XG4gICAgICBsZXQgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLmFyZ3MpO1xuICAgICAgYXBpLmFkZCgoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShyYWYpKTtcbiAgICB9LFxuICAgIG5leHRGcmFtZSguLi5hcmdzKSB7XG4gICAgICBhcGkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgYXBpLnJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0VGltZW91dCguLi5hcmdzKSB7XG4gICAgICBsZXQgdGltZXIgPSBzZXRUaW1lb3V0KC4uLmFyZ3MpO1xuICAgICAgYXBpLmFkZCgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgICB9LFxuICAgIGFkZChjYikge1xuICAgICAgZGlzcG9zYWJsZXMyLnB1c2goY2IpO1xuICAgIH0sXG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGZvciAobGV0IGRpc3Bvc2Ugb2YgZGlzcG9zYWJsZXMyLnNwbGljZSgwKSkge1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyB3b3JrUXVldWUoKSB7XG4gICAgICBmb3IgKGxldCBoYW5kbGUgb2YgcXVldWUuc3BsaWNlKDApKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn1cblxuLy8gc3JjL2NvbXBvbmVudHMvdHJhbnNpdGlvbnMvdXRpbHMvdHJhbnNpdGlvbi50c1xuZnVuY3Rpb24gYWRkQ2xhc3Nlcyhub2RlLCAuLi5jbGFzc2VzKSB7XG4gIG5vZGUgJiYgY2xhc3Nlcy5sZW5ndGggPiAwICYmIG5vZGUuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMobm9kZSwgLi4uY2xhc3Nlcykge1xuICBub2RlICYmIGNsYXNzZXMubGVuZ3RoID4gMCAmJiBub2RlLmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XG59XG5mdW5jdGlvbiB3YWl0Rm9yVHJhbnNpdGlvbihub2RlLCBkb25lKSB7XG4gIGxldCBkID0gZGlzcG9zYWJsZXMoKTtcbiAgaWYgKCFub2RlKVxuICAgIHJldHVybiBkLmRpc3Bvc2U7XG4gIGxldCB7IHRyYW5zaXRpb25EdXJhdGlvbiwgdHJhbnNpdGlvbkRlbGF5IH0gPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICBsZXQgW2R1cmF0aW9uTXMsIGRlbGF5c01zXSA9IFt0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheV0ubWFwKCh2YWx1ZSkgPT4ge1xuICAgIGxldCBbcmVzb2x2ZWRWYWx1ZSA9IDBdID0gdmFsdWUuc3BsaXQoXCIsXCIpLmZpbHRlcihCb29sZWFuKS5tYXAoKHYpID0+IHYuaW5jbHVkZXMoXCJtc1wiKSA/IHBhcnNlRmxvYXQodikgOiBwYXJzZUZsb2F0KHYpICogMWUzKS5zb3J0KChhLCB6KSA9PiB6IC0gYSk7XG4gICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gIH0pO1xuICBpZiAoZHVyYXRpb25NcyAhPT0gMCkge1xuICAgIGQuc2V0VGltZW91dCgoKSA9PiBkb25lKFwiZmluaXNoZWRcIiAvKiBGaW5pc2hlZCAqLyksIGR1cmF0aW9uTXMgKyBkZWxheXNNcyk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZShcImZpbmlzaGVkXCIgLyogRmluaXNoZWQgKi8pO1xuICB9XG4gIGQuYWRkKCgpID0+IGRvbmUoXCJjYW5jZWxsZWRcIiAvKiBDYW5jZWxsZWQgKi8pKTtcbiAgcmV0dXJuIGQuZGlzcG9zZTtcbn1cbmZ1bmN0aW9uIHRyYW5zaXRpb24obm9kZSwgYmFzZSwgZnJvbSwgdG8sIGVudGVyZWQsIGRvbmUpIHtcbiAgbGV0IGQgPSBkaXNwb3NhYmxlcygpO1xuICBsZXQgX2RvbmUgPSBkb25lICE9PSB2b2lkIDAgPyBvbmNlKGRvbmUpIDogKCkgPT4ge1xuICB9O1xuICByZW1vdmVDbGFzc2VzKG5vZGUsIC4uLmVudGVyZWQpO1xuICBhZGRDbGFzc2VzKG5vZGUsIC4uLmJhc2UsIC4uLmZyb20pO1xuICBkLm5leHRGcmFtZSgoKSA9PiB7XG4gICAgcmVtb3ZlQ2xhc3Nlcyhub2RlLCAuLi5mcm9tKTtcbiAgICBhZGRDbGFzc2VzKG5vZGUsIC4uLnRvKTtcbiAgICBkLmFkZCh3YWl0Rm9yVHJhbnNpdGlvbihub2RlLCAocmVhc29uKSA9PiB7XG4gICAgICByZW1vdmVDbGFzc2VzKG5vZGUsIC4uLnRvLCAuLi5iYXNlKTtcbiAgICAgIGFkZENsYXNzZXMobm9kZSwgLi4uZW50ZXJlZCk7XG4gICAgICByZXR1cm4gX2RvbmUocmVhc29uKTtcbiAgICB9KSk7XG4gIH0pO1xuICBkLmFkZCgoKSA9PiByZW1vdmVDbGFzc2VzKG5vZGUsIC4uLmJhc2UsIC4uLmZyb20sIC4uLnRvLCAuLi5lbnRlcmVkKSk7XG4gIGQuYWRkKCgpID0+IF9kb25lKFwiY2FuY2VsbGVkXCIgLyogQ2FuY2VsbGVkICovKSk7XG4gIHJldHVybiBkLmRpc3Bvc2U7XG59XG5cbi8vIHNyYy9jb21wb25lbnRzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24udHNcbmZ1bmN0aW9uIHNwbGl0Q2xhc3NlcyhjbGFzc2VzID0gXCJcIikge1xuICByZXR1cm4gY2xhc3Nlcy5zcGxpdChcIiBcIikuZmlsdGVyKChjbGFzc05hbWUpID0+IGNsYXNzTmFtZS50cmltKCkubGVuZ3RoID4gMSk7XG59XG52YXIgVHJhbnNpdGlvbkNvbnRleHQgPSBTeW1ib2woXCJUcmFuc2l0aW9uQ29udGV4dFwiKTtcbmZ1bmN0aW9uIGhhc1RyYW5zaXRpb25Db250ZXh0KCkge1xuICByZXR1cm4gKDAsIGltcG9ydF92dWUyNy5pbmplY3QpKFRyYW5zaXRpb25Db250ZXh0LCBudWxsKSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHVzZVRyYW5zaXRpb25Db250ZXh0KCkge1xuICBsZXQgY29udGV4dCA9ICgwLCBpbXBvcnRfdnVlMjcuaW5qZWN0KShUcmFuc2l0aW9uQ29udGV4dCwgbnVsbCk7XG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSA8VHJhbnNpdGlvbkNoaWxkIC8+IGlzIHVzZWQgYnV0IGl0IGlzIG1pc3NpbmcgYSBwYXJlbnQgPFRyYW5zaXRpb25Sb290IC8+LlwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cbmZ1bmN0aW9uIHVzZVBhcmVudE5lc3RpbmcoKSB7XG4gIGxldCBjb250ZXh0ID0gKDAsIGltcG9ydF92dWUyNy5pbmplY3QpKE5lc3RpbmdDb250ZXh0LCBudWxsKTtcbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIDxUcmFuc2l0aW9uQ2hpbGQgLz4gaXMgdXNlZCBidXQgaXQgaXMgbWlzc2luZyBhIHBhcmVudCA8VHJhbnNpdGlvblJvb3QgLz4uXCIpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxudmFyIE5lc3RpbmdDb250ZXh0ID0gU3ltYm9sKFwiTmVzdGluZ0NvbnRleHRcIik7XG5mdW5jdGlvbiBoYXNDaGlsZHJlbihiYWcpIHtcbiAgaWYgKFwiY2hpbGRyZW5cIiBpbiBiYWcpXG4gICAgcmV0dXJuIGhhc0NoaWxkcmVuKGJhZy5jaGlsZHJlbik7XG4gIHJldHVybiBiYWcudmFsdWUuZmlsdGVyKCh7IHN0YXRlIH0pID0+IHN0YXRlID09PSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovKS5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gdXNlTmVzdGluZyhkb25lKSB7XG4gIGxldCB0cmFuc2l0aW9uYWJsZUNoaWxkcmVuID0gKDAsIGltcG9ydF92dWUyNy5yZWYpKFtdKTtcbiAgbGV0IG1vdW50ZWQgPSAoMCwgaW1wb3J0X3Z1ZTI3LnJlZikoZmFsc2UpO1xuICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uTW91bnRlZCkoKCkgPT4gbW91bnRlZC52YWx1ZSA9IHRydWUpO1xuICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uVW5tb3VudGVkKSgoKSA9PiBtb3VudGVkLnZhbHVlID0gZmFsc2UpO1xuICBmdW5jdGlvbiB1bnJlZ2lzdGVyKGNoaWxkSWQsIHN0cmF0ZWd5ID0gMSAvKiBIaWRkZW4gKi8pIHtcbiAgICBsZXQgaWR4ID0gdHJhbnNpdGlvbmFibGVDaGlsZHJlbi52YWx1ZS5maW5kSW5kZXgoKHsgaWQ6IGlkMiB9KSA9PiBpZDIgPT09IGNoaWxkSWQpO1xuICAgIGlmIChpZHggPT09IC0xKVxuICAgICAgcmV0dXJuO1xuICAgIG1hdGNoKHN0cmF0ZWd5LCB7XG4gICAgICBbMCAvKiBVbm1vdW50ICovXSgpIHtcbiAgICAgICAgdHJhbnNpdGlvbmFibGVDaGlsZHJlbi52YWx1ZS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH0sXG4gICAgICBbMSAvKiBIaWRkZW4gKi9dKCkge1xuICAgICAgICB0cmFuc2l0aW9uYWJsZUNoaWxkcmVuLnZhbHVlW2lkeF0uc3RhdGUgPSBcImhpZGRlblwiIC8qIEhpZGRlbiAqLztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWhhc0NoaWxkcmVuKHRyYW5zaXRpb25hYmxlQ2hpbGRyZW4pICYmIG1vdW50ZWQudmFsdWUpIHtcbiAgICAgIGRvbmUgPT0gbnVsbCA/IHZvaWQgMCA6IGRvbmUoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoY2hpbGRJZCkge1xuICAgIGxldCBjaGlsZCA9IHRyYW5zaXRpb25hYmxlQ2hpbGRyZW4udmFsdWUuZmluZCgoeyBpZDogaWQyIH0pID0+IGlkMiA9PT0gY2hpbGRJZCk7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgdHJhbnNpdGlvbmFibGVDaGlsZHJlbi52YWx1ZS5wdXNoKHsgaWQ6IGNoaWxkSWQsIHN0YXRlOiBcInZpc2libGVcIiAvKiBWaXNpYmxlICovIH0pO1xuICAgIH0gZWxzZSBpZiAoY2hpbGQuc3RhdGUgIT09IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8pIHtcbiAgICAgIGNoaWxkLnN0YXRlID0gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLztcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHVucmVnaXN0ZXIoY2hpbGRJZCwgMCAvKiBVbm1vdW50ICovKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiB0cmFuc2l0aW9uYWJsZUNoaWxkcmVuLFxuICAgIHJlZ2lzdGVyLFxuICAgIHVucmVnaXN0ZXJcbiAgfTtcbn1cbnZhciBUcmFuc2l0aW9uQ2hpbGRSZW5kZXJGZWF0dXJlcyA9IDEgLyogUmVuZGVyU3RyYXRlZ3kgKi87XG52YXIgVHJhbnNpdGlvbkNoaWxkID0gKDAsIGltcG9ydF92dWUyNy5kZWZpbmVDb21wb25lbnQpKHtcbiAgcHJvcHM6IHtcbiAgICBhczogeyB0eXBlOiBbT2JqZWN0LCBTdHJpbmddLCBkZWZhdWx0OiBcImRpdlwiIH0sXG4gICAgc2hvdzogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB1bm1vdW50OiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFwcGVhcjogeyB0eXBlOiBbQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZW50ZXI6IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBlbnRlckZyb206IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBlbnRlclRvOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgZW50ZXJlZDogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGxlYXZlOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgbGVhdmVGcm9tOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgbGVhdmVUbzogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9XG4gIH0sXG4gIGVtaXRzOiB7XG4gICAgYmVmb3JlRW50ZXI6ICgpID0+IHRydWUsXG4gICAgYWZ0ZXJFbnRlcjogKCkgPT4gdHJ1ZSxcbiAgICBiZWZvcmVMZWF2ZTogKCkgPT4gdHJ1ZSxcbiAgICBhZnRlckxlYXZlOiAoKSA9PiB0cnVlXG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IGVtaXQsIGF0dHJzLCBzbG90cywgZXhwb3NlIH0pIHtcbiAgICBpZiAoIWhhc1RyYW5zaXRpb25Db250ZXh0KCkgJiYgaGFzT3BlbkNsb3NlZCgpKSB7XG4gICAgICByZXR1cm4gKCkgPT4gKDAsIGltcG9ydF92dWUyNy5oKShUcmFuc2l0aW9uUm9vdCwge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgb25CZWZvcmVFbnRlcjogKCkgPT4gZW1pdChcImJlZm9yZUVudGVyXCIpLFxuICAgICAgICBvbkFmdGVyRW50ZXI6ICgpID0+IGVtaXQoXCJhZnRlckVudGVyXCIpLFxuICAgICAgICBvbkJlZm9yZUxlYXZlOiAoKSA9PiBlbWl0KFwiYmVmb3JlTGVhdmVcIiksXG4gICAgICAgIG9uQWZ0ZXJMZWF2ZTogKCkgPT4gZW1pdChcImFmdGVyTGVhdmVcIilcbiAgICAgIH0sIHNsb3RzKTtcbiAgICB9XG4gICAgbGV0IGNvbnRhaW5lciA9ICgwLCBpbXBvcnRfdnVlMjcucmVmKShudWxsKTtcbiAgICBsZXQgc3RhdGUgPSAoMCwgaW1wb3J0X3Z1ZTI3LnJlZikoXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLyk7XG4gICAgbGV0IHN0cmF0ZWd5ID0gKDAsIGltcG9ydF92dWUyNy5jb21wdXRlZCkoKCkgPT4gcHJvcHMudW5tb3VudCA/IDAgLyogVW5tb3VudCAqLyA6IDEgLyogSGlkZGVuICovKTtcbiAgICBleHBvc2UoeyBlbDogY29udGFpbmVyLCAkZWw6IGNvbnRhaW5lciB9KTtcbiAgICBsZXQgeyBzaG93LCBhcHBlYXIgfSA9IHVzZVRyYW5zaXRpb25Db250ZXh0KCk7XG4gICAgbGV0IHsgcmVnaXN0ZXIsIHVucmVnaXN0ZXIgfSA9IHVzZVBhcmVudE5lc3RpbmcoKTtcbiAgICBsZXQgaW5pdGlhbCA9IHsgdmFsdWU6IHRydWUgfTtcbiAgICBsZXQgaWQyID0gdXNlSWQoKTtcbiAgICBsZXQgaXNUcmFuc2l0aW9uaW5nID0geyB2YWx1ZTogZmFsc2UgfTtcbiAgICBsZXQgbmVzdGluZyA9IHVzZU5lc3RpbmcoKCkgPT4ge1xuICAgICAgaWYgKCFpc1RyYW5zaXRpb25pbmcudmFsdWUpIHtcbiAgICAgICAgc3RhdGUudmFsdWUgPSBcImhpZGRlblwiIC8qIEhpZGRlbiAqLztcbiAgICAgICAgdW5yZWdpc3RlcihpZDIpO1xuICAgICAgICBlbWl0KFwiYWZ0ZXJMZWF2ZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3Lm9uTW91bnRlZCkoKCkgPT4ge1xuICAgICAgbGV0IHVucmVnaXN0ZXIyID0gcmVnaXN0ZXIoaWQyKTtcbiAgICAgICgwLCBpbXBvcnRfdnVlMjcub25Vbm1vdW50ZWQpKHVucmVnaXN0ZXIyKTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICBpZiAoc3RyYXRlZ3kudmFsdWUgIT09IDEgLyogSGlkZGVuICovKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIWlkMilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKHNob3cgJiYgc3RhdGUudmFsdWUgIT09IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8pIHtcbiAgICAgICAgc3RhdGUudmFsdWUgPSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtYXRjaChzdGF0ZS52YWx1ZSwge1xuICAgICAgICBbXCJoaWRkZW5cIiAvKiBIaWRkZW4gKi9dOiAoKSA9PiB1bnJlZ2lzdGVyKGlkMiksXG4gICAgICAgIFtcInZpc2libGVcIiAvKiBWaXNpYmxlICovXTogKCkgPT4gcmVnaXN0ZXIoaWQyKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbGV0IGVudGVyQ2xhc3NlcyA9IHNwbGl0Q2xhc3Nlcyhwcm9wcy5lbnRlcik7XG4gICAgbGV0IGVudGVyRnJvbUNsYXNzZXMgPSBzcGxpdENsYXNzZXMocHJvcHMuZW50ZXJGcm9tKTtcbiAgICBsZXQgZW50ZXJUb0NsYXNzZXMgPSBzcGxpdENsYXNzZXMocHJvcHMuZW50ZXJUbyk7XG4gICAgbGV0IGVudGVyZWRDbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmVudGVyZWQpO1xuICAgIGxldCBsZWF2ZUNsYXNzZXMgPSBzcGxpdENsYXNzZXMocHJvcHMubGVhdmUpO1xuICAgIGxldCBsZWF2ZUZyb21DbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmxlYXZlRnJvbSk7XG4gICAgbGV0IGxlYXZlVG9DbGFzc2VzID0gc3BsaXRDbGFzc2VzKHByb3BzLmxlYXZlVG8pO1xuICAgICgwLCBpbXBvcnRfdnVlMjcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTI3LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS52YWx1ZSA9PT0gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLykge1xuICAgICAgICAgIGxldCBkb21FbGVtZW50ID0gZG9tKGNvbnRhaW5lcik7XG4gICAgICAgICAgbGV0IGlzRW1wdHlET01Ob2RlID0gZG9tRWxlbWVudCBpbnN0YW5jZW9mIENvbW1lbnQgJiYgZG9tRWxlbWVudC5kYXRhID09PSBcIlwiO1xuICAgICAgICAgIGlmIChpc0VtcHR5RE9NTm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIHlvdSBmb3JnZXQgdG8gcGFzc3Rocm91Z2ggdGhlIGByZWZgIHRvIHRoZSBhY3R1YWwgRE9NIG5vZGU/XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZXhlY3V0ZVRyYW5zaXRpb24ob25JbnZhbGlkYXRlKSB7XG4gICAgICBsZXQgc2tpcCA9IGluaXRpYWwudmFsdWUgJiYgIWFwcGVhci52YWx1ZTtcbiAgICAgIGxldCBub2RlID0gZG9tKGNvbnRhaW5lcik7XG4gICAgICBpZiAoIW5vZGUgfHwgIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoc2tpcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaXNUcmFuc2l0aW9uaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChzaG93LnZhbHVlKVxuICAgICAgICBlbWl0KFwiYmVmb3JlRW50ZXJcIik7XG4gICAgICBpZiAoIXNob3cudmFsdWUpXG4gICAgICAgIGVtaXQoXCJiZWZvcmVMZWF2ZVwiKTtcbiAgICAgIG9uSW52YWxpZGF0ZShzaG93LnZhbHVlID8gdHJhbnNpdGlvbihub2RlLCBlbnRlckNsYXNzZXMsIGVudGVyRnJvbUNsYXNzZXMsIGVudGVyVG9DbGFzc2VzLCBlbnRlcmVkQ2xhc3NlcywgKHJlYXNvbikgPT4ge1xuICAgICAgICBpc1RyYW5zaXRpb25pbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJlYXNvbiA9PT0gXCJmaW5pc2hlZFwiIC8qIEZpbmlzaGVkICovKVxuICAgICAgICAgIGVtaXQoXCJhZnRlckVudGVyXCIpO1xuICAgICAgfSkgOiB0cmFuc2l0aW9uKG5vZGUsIGxlYXZlQ2xhc3NlcywgbGVhdmVGcm9tQ2xhc3NlcywgbGVhdmVUb0NsYXNzZXMsIGVudGVyZWRDbGFzc2VzLCAocmVhc29uKSA9PiB7XG4gICAgICAgIGlzVHJhbnNpdGlvbmluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAocmVhc29uICE9PSBcImZpbmlzaGVkXCIgLyogRmluaXNoZWQgKi8pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIWhhc0NoaWxkcmVuKG5lc3RpbmcpKSB7XG4gICAgICAgICAgc3RhdGUudmFsdWUgPSBcImhpZGRlblwiIC8qIEhpZGRlbiAqLztcbiAgICAgICAgICB1bnJlZ2lzdGVyKGlkMik7XG4gICAgICAgICAgZW1pdChcImFmdGVyTGVhdmVcIik7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gICAgKDAsIGltcG9ydF92dWUyNy5vbk1vdW50ZWQpKCgpID0+IHtcbiAgICAgICgwLCBpbXBvcnRfdnVlMjcud2F0Y2gpKFtzaG93XSwgKF9vbGRWYWx1ZXMsIF9uZXdWYWx1ZXMsIG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgICAgICBleGVjdXRlVHJhbnNpdGlvbihvbkludmFsaWRhdGUpO1xuICAgICAgICBpbml0aWFsLnZhbHVlID0gZmFsc2U7XG4gICAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICAoMCwgaW1wb3J0X3Z1ZTI3LnByb3ZpZGUpKE5lc3RpbmdDb250ZXh0LCBuZXN0aW5nKTtcbiAgICB1c2VPcGVuQ2xvc2VkUHJvdmlkZXIoKDAsIGltcG9ydF92dWUyNy5jb21wdXRlZCkoKCkgPT4gbWF0Y2goc3RhdGUudmFsdWUsIHtcbiAgICAgIFtcInZpc2libGVcIiAvKiBWaXNpYmxlICovXTogMCAvKiBPcGVuICovLFxuICAgICAgW1wiaGlkZGVuXCIgLyogSGlkZGVuICovXTogMSAvKiBDbG9zZWQgKi9cbiAgICB9KSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBhcHBlYXI6IGFwcGVhcjIsXG4gICAgICAgIHNob3c6IHNob3cyLFxuICAgICAgICBlbnRlcixcbiAgICAgICAgZW50ZXJGcm9tLFxuICAgICAgICBlbnRlclRvLFxuICAgICAgICBlbnRlcmVkLFxuICAgICAgICBsZWF2ZSxcbiAgICAgICAgbGVhdmVGcm9tLFxuICAgICAgICBsZWF2ZVRvLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gcHJvcHM7XG4gICAgICBsZXQgb3VyUHJvcHMgPSB7IHJlZjogY29udGFpbmVyIH07XG4gICAgICBsZXQgdGhlaXJQcm9wcyA9IHJlc3Q7XG4gICAgICByZXR1cm4gcmVuZGVyKHtcbiAgICAgICAgdGhlaXJQcm9wcyxcbiAgICAgICAgb3VyUHJvcHMsXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBzbG90cyxcbiAgICAgICAgYXR0cnMsXG4gICAgICAgIGZlYXR1cmVzOiBUcmFuc2l0aW9uQ2hpbGRSZW5kZXJGZWF0dXJlcyxcbiAgICAgICAgdmlzaWJsZTogc3RhdGUudmFsdWUgPT09IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi8sXG4gICAgICAgIG5hbWU6IFwiVHJhbnNpdGlvbkNoaWxkXCJcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn0pO1xudmFyIF9UcmFuc2l0aW9uQ2hpbGQgPSBUcmFuc2l0aW9uQ2hpbGQ7XG52YXIgVHJhbnNpdGlvblJvb3QgPSAoMCwgaW1wb3J0X3Z1ZTI3LmRlZmluZUNvbXBvbmVudCkoe1xuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBwcm9wczoge1xuICAgIGFzOiB7IHR5cGU6IFtPYmplY3QsIFN0cmluZ10sIGRlZmF1bHQ6IFwiZGl2XCIgfSxcbiAgICBzaG93OiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHVubW91bnQ6IHsgdHlwZTogW0Jvb2xlYW5dLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYXBwZWFyOiB7IHR5cGU6IFtCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlbnRlcjogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGVudGVyRnJvbTogeyB0eXBlOiBbU3RyaW5nXSwgZGVmYXVsdDogXCJcIiB9LFxuICAgIGVudGVyVG86IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBlbnRlcmVkOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH0sXG4gICAgbGVhdmU6IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBsZWF2ZUZyb206IHsgdHlwZTogW1N0cmluZ10sIGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBsZWF2ZVRvOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiBcIlwiIH1cbiAgfSxcbiAgZW1pdHM6IHtcbiAgICBiZWZvcmVFbnRlcjogKCkgPT4gdHJ1ZSxcbiAgICBhZnRlckVudGVyOiAoKSA9PiB0cnVlLFxuICAgIGJlZm9yZUxlYXZlOiAoKSA9PiB0cnVlLFxuICAgIGFmdGVyTGVhdmU6ICgpID0+IHRydWVcbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgZW1pdCwgYXR0cnMsIHNsb3RzIH0pIHtcbiAgICBsZXQgdXNlc09wZW5DbG9zZWRTdGF0ZSA9IHVzZU9wZW5DbG9zZWQoKTtcbiAgICBsZXQgc2hvdyA9ICgwLCBpbXBvcnRfdnVlMjcuY29tcHV0ZWQpKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5zaG93ID09PSBudWxsICYmIHVzZXNPcGVuQ2xvc2VkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoKHVzZXNPcGVuQ2xvc2VkU3RhdGUudmFsdWUsIHtcbiAgICAgICAgICBbMCAvKiBPcGVuICovXTogdHJ1ZSxcbiAgICAgICAgICBbMSAvKiBDbG9zZWQgKi9dOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcy5zaG93O1xuICAgIH0pO1xuICAgICgwLCBpbXBvcnRfdnVlMjcud2F0Y2hFZmZlY3QpKCgpID0+IHtcbiAgICAgIGlmICghW3RydWUsIGZhbHNlXS5pbmNsdWRlcyhzaG93LnZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgPFRyYW5zaXRpb24gLz4gaXMgdXNlZCBidXQgaXQgaXMgbWlzc2luZyBhIGA6c2hvdz1cInRydWUgfCBmYWxzZVwiYCBwcm9wLicpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBzdGF0ZSA9ICgwLCBpbXBvcnRfdnVlMjcucmVmKShzaG93LnZhbHVlID8gXCJ2aXNpYmxlXCIgLyogVmlzaWJsZSAqLyA6IFwiaGlkZGVuXCIgLyogSGlkZGVuICovKTtcbiAgICBsZXQgbmVzdGluZ0JhZyA9IHVzZU5lc3RpbmcoKCkgPT4ge1xuICAgICAgc3RhdGUudmFsdWUgPSBcImhpZGRlblwiIC8qIEhpZGRlbiAqLztcbiAgICB9KTtcbiAgICBsZXQgaW5pdGlhbCA9ICgwLCBpbXBvcnRfdnVlMjcucmVmKSh0cnVlKTtcbiAgICBsZXQgdHJhbnNpdGlvbkJhZyA9IHtcbiAgICAgIHNob3csXG4gICAgICBhcHBlYXI6ICgwLCBpbXBvcnRfdnVlMjcuY29tcHV0ZWQpKCgpID0+IHByb3BzLmFwcGVhciB8fCAhaW5pdGlhbC52YWx1ZSlcbiAgICB9O1xuICAgICgwLCBpbXBvcnRfdnVlMjcub25Nb3VudGVkKSgoKSA9PiB7XG4gICAgICAoMCwgaW1wb3J0X3Z1ZTI3LndhdGNoRWZmZWN0KSgoKSA9PiB7XG4gICAgICAgIGluaXRpYWwudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNob3cudmFsdWUpIHtcbiAgICAgICAgICBzdGF0ZS52YWx1ZSA9IFwidmlzaWJsZVwiIC8qIFZpc2libGUgKi87XG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc0NoaWxkcmVuKG5lc3RpbmdCYWcpKSB7XG4gICAgICAgICAgc3RhdGUudmFsdWUgPSBcImhpZGRlblwiIC8qIEhpZGRlbiAqLztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgKDAsIGltcG9ydF92dWUyNy5wcm92aWRlKShOZXN0aW5nQ29udGV4dCwgbmVzdGluZ0JhZyk7XG4gICAgKDAsIGltcG9ydF92dWUyNy5wcm92aWRlKShUcmFuc2l0aW9uQ29udGV4dCwgdHJhbnNpdGlvbkJhZyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxldCB0aGVpclByb3BzID0gb21pdChwcm9wcywgW1xuICAgICAgICBcInNob3dcIixcbiAgICAgICAgXCJhcHBlYXJcIixcbiAgICAgICAgXCJ1bm1vdW50XCIsXG4gICAgICAgIFwib25CZWZvcmVFbnRlclwiLFxuICAgICAgICBcIm9uQmVmb3JlTGVhdmVcIixcbiAgICAgICAgXCJvbkFmdGVyRW50ZXJcIixcbiAgICAgICAgXCJvbkFmdGVyTGVhdmVcIlxuICAgICAgXSk7XG4gICAgICBsZXQgc2hhcmVkUHJvcHMgPSB7IHVubW91bnQ6IHByb3BzLnVubW91bnQgfTtcbiAgICAgIHJldHVybiByZW5kZXIoe1xuICAgICAgICBvdXJQcm9wczoge1xuICAgICAgICAgIC4uLnNoYXJlZFByb3BzLFxuICAgICAgICAgIGFzOiBcInRlbXBsYXRlXCJcbiAgICAgICAgfSxcbiAgICAgICAgdGhlaXJQcm9wczoge30sXG4gICAgICAgIHNsb3Q6IHt9LFxuICAgICAgICBzbG90czoge1xuICAgICAgICAgIC4uLnNsb3RzLFxuICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IFtcbiAgICAgICAgICAgICgwLCBpbXBvcnRfdnVlMjcuaCkoX1RyYW5zaXRpb25DaGlsZCwge1xuICAgICAgICAgICAgICBvbkJlZm9yZUVudGVyOiAoKSA9PiBlbWl0KFwiYmVmb3JlRW50ZXJcIiksXG4gICAgICAgICAgICAgIG9uQWZ0ZXJFbnRlcjogKCkgPT4gZW1pdChcImFmdGVyRW50ZXJcIiksXG4gICAgICAgICAgICAgIG9uQmVmb3JlTGVhdmU6ICgpID0+IGVtaXQoXCJiZWZvcmVMZWF2ZVwiKSxcbiAgICAgICAgICAgICAgb25BZnRlckxlYXZlOiAoKSA9PiBlbWl0KFwiYWZ0ZXJMZWF2ZVwiKSxcbiAgICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICAgIC4uLnNoYXJlZFByb3BzLFxuICAgICAgICAgICAgICAuLi50aGVpclByb3BzXG4gICAgICAgICAgICB9LCBzbG90cy5kZWZhdWx0KVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHt9LFxuICAgICAgICBmZWF0dXJlczogVHJhbnNpdGlvbkNoaWxkUmVuZGVyRmVhdHVyZXMsXG4gICAgICAgIHZpc2libGU6IHN0YXRlLnZhbHVlID09PSBcInZpc2libGVcIiAvKiBWaXNpYmxlICovLFxuICAgICAgICBuYW1lOiBcIlRyYW5zaXRpb25cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCdcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2hlYWRsZXNzdWkucHJvZC5janMnKVxufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2hlYWRsZXNzdWkuZGV2LmNqcycpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBzaGFyZWQgPSByZXF1aXJlKCdAdnVldXNlL3NoYXJlZCcpO1xudmFyIHZ1ZURlbWkgPSByZXF1aXJlKCd2dWUtZGVtaScpO1xuXG5mdW5jdGlvbiBjb21wdXRlZEFzeW5jKGV2YWx1YXRpb25DYWxsYmFjaywgaW5pdGlhbFN0YXRlLCBvcHRpb25zT3JSZWYpIHtcbiAgbGV0IG9wdGlvbnM7XG4gIGlmICh2dWVEZW1pLmlzUmVmKG9wdGlvbnNPclJlZikpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgZXZhbHVhdGluZzogb3B0aW9uc09yUmVmXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gb3B0aW9uc09yUmVmIHx8IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBsYXp5ID0gZmFsc2UsXG4gICAgZXZhbHVhdGluZyA9IHZvaWQgMCxcbiAgICBvbkVycm9yID0gc2hhcmVkLm5vb3BcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0YXJ0ZWQgPSB2dWVEZW1pLnJlZighbGF6eSk7XG4gIGNvbnN0IGN1cnJlbnQgPSB2dWVEZW1pLnJlZihpbml0aWFsU3RhdGUpO1xuICBsZXQgY291bnRlciA9IDA7XG4gIHZ1ZURlbWkud2F0Y2hFZmZlY3QoYXN5bmMgKG9uSW52YWxpZGF0ZSkgPT4ge1xuICAgIGlmICghc3RhcnRlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBjb3VudGVyKys7XG4gICAgY29uc3QgY291bnRlckF0QmVnaW5uaW5nID0gY291bnRlcjtcbiAgICBsZXQgaGFzRmluaXNoZWQgPSBmYWxzZTtcbiAgICBpZiAoZXZhbHVhdGluZykge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGV2YWx1YXRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBldmFsdWF0aW9uQ2FsbGJhY2soKGNhbmNlbENhbGxiYWNrKSA9PiB7XG4gICAgICAgIG9uSW52YWxpZGF0ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKGV2YWx1YXRpbmcpXG4gICAgICAgICAgICBldmFsdWF0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCFoYXNGaW5pc2hlZClcbiAgICAgICAgICAgIGNhbmNlbENhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoY291bnRlckF0QmVnaW5uaW5nID09PSBjb3VudGVyKVxuICAgICAgICBjdXJyZW50LnZhbHVlID0gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9uRXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChldmFsdWF0aW5nICYmIGNvdW50ZXJBdEJlZ2lubmluZyA9PT0gY291bnRlcilcbiAgICAgICAgZXZhbHVhdGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgaGFzRmluaXNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChsYXp5KSB7XG4gICAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgc3RhcnRlZC52YWx1ZSA9IHRydWU7XG4gICAgICByZXR1cm4gY3VycmVudC52YWx1ZTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlZEluamVjdChrZXksIG9wdGlvbnMsIGRlZmF1bHRTb3VyY2UsIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSkge1xuICBsZXQgc291cmNlID0gdnVlRGVtaS5pbmplY3Qoa2V5KTtcbiAgaWYgKGRlZmF1bHRTb3VyY2UpXG4gICAgc291cmNlID0gdnVlRGVtaS5pbmplY3Qoa2V5LCBkZWZhdWx0U291cmNlKTtcbiAgaWYgKHRyZWF0RGVmYXVsdEFzRmFjdG9yeSlcbiAgICBzb3VyY2UgPSB2dWVEZW1pLmluamVjdChrZXksIGRlZmF1bHRTb3VyY2UsIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSk7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKGN0eCkgPT4gb3B0aW9ucyhzb3VyY2UsIGN0eCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKHtcbiAgICAgIGdldDogKGN0eCkgPT4gb3B0aW9ucy5nZXQoc291cmNlLCBjdHgpLFxuICAgICAgc2V0OiBvcHRpb25zLnNldFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGNyZWF0ZVVucmVmRm4gPSAoZm4pID0+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncy5tYXAoKGkpID0+IHZ1ZURlbWkudW5yZWYoaSkpKTtcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHVucmVmRWxlbWVudChlbFJlZikge1xuICB2YXIgX2E7XG4gIGNvbnN0IHBsYWluID0gdnVlRGVtaS51bnJlZihlbFJlZik7XG4gIHJldHVybiAoX2EgPSBwbGFpbiA9PSBudWxsID8gdm9pZCAwIDogcGxhaW4uJGVsKSAhPSBudWxsID8gX2EgOiBwbGFpbjtcbn1cblxuY29uc3QgZGVmYXVsdFdpbmRvdyA9IHNoYXJlZC5pc0NsaWVudCA/IHdpbmRvdyA6IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHREb2N1bWVudCA9IHNoYXJlZC5pc0NsaWVudCA/IHdpbmRvdy5kb2N1bWVudCA6IHZvaWQgMDtcbmNvbnN0IGRlZmF1bHROYXZpZ2F0b3IgPSBzaGFyZWQuaXNDbGllbnQgPyB3aW5kb3cubmF2aWdhdG9yIDogdm9pZCAwO1xuY29uc3QgZGVmYXVsdExvY2F0aW9uID0gc2hhcmVkLmlzQ2xpZW50ID8gd2luZG93LmxvY2F0aW9uIDogdm9pZCAwO1xuXG5mdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyKC4uLmFyZ3MpIHtcbiAgbGV0IHRhcmdldDtcbiAgbGV0IGV2ZW50O1xuICBsZXQgbGlzdGVuZXI7XG4gIGxldCBvcHRpb25zO1xuICBpZiAoc2hhcmVkLmlzU3RyaW5nKGFyZ3NbMF0pKSB7XG4gICAgW2V2ZW50LCBsaXN0ZW5lciwgb3B0aW9uc10gPSBhcmdzO1xuICAgIHRhcmdldCA9IGRlZmF1bHRXaW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgW3RhcmdldCwgZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zXSA9IGFyZ3M7XG4gIH1cbiAgaWYgKCF0YXJnZXQpXG4gICAgcmV0dXJuIHNoYXJlZC5ub29wO1xuICBsZXQgY2xlYW51cCA9IHNoYXJlZC5ub29wO1xuICBjb25zdCBzdG9wV2F0Y2ggPSB2dWVEZW1pLndhdGNoKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLCAoZWwpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICAgIGNsZWFudXAgPSBzaGFyZWQubm9vcDtcbiAgICB9O1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSwgZmx1c2g6IFwicG9zdFwiIH0pO1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIHN0b3BXYXRjaCgpO1xuICAgIGNsZWFudXAoKTtcbiAgfTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4gc3RvcDtcbn1cblxuZnVuY3Rpb24gb25DbGlja091dHNpZGUodGFyZ2V0LCBoYW5kbGVyLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93LCBpZ25vcmUsIGNhcHR1cmUgPSB0cnVlLCBkZXRlY3RJZnJhbWUgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgaWYgKCF3aW5kb3cpXG4gICAgcmV0dXJuO1xuICBjb25zdCBzaG91bGRMaXN0ZW4gPSB2dWVEZW1pLnJlZih0cnVlKTtcbiAgbGV0IGZhbGxiYWNrO1xuICBjb25zdCBsaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZmFsbGJhY2spO1xuICAgIGNvbnN0IGVsID0gdW5yZWZFbGVtZW50KHRhcmdldCk7XG4gICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgaWYgKCFlbCB8fCBlbCA9PT0gZXZlbnQudGFyZ2V0IHx8IGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhlbCkgfHwgIXNob3VsZExpc3Rlbi52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAoaWdub3JlICYmIGlnbm9yZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoaWdub3JlLnNvbWUoKHRhcmdldDIpID0+IHtcbiAgICAgICAgY29uc3QgZWwyID0gdW5yZWZFbGVtZW50KHRhcmdldDIpO1xuICAgICAgICByZXR1cm4gZWwyICYmIChldmVudC50YXJnZXQgPT09IGVsMiB8fCBjb21wb3NlZFBhdGguaW5jbHVkZXMoZWwyKSk7XG4gICAgICB9KSlcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVyKGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgY2xlYW51cCA9IFtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJjbGlja1wiLCBsaXN0ZW5lciwgeyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlIH0pLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInBvaW50ZXJkb3duXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHVucmVmRWxlbWVudCh0YXJnZXQpO1xuICAgICAgc2hvdWxkTGlzdGVuLnZhbHVlID0gISFlbCAmJiAhZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhlbCk7XG4gICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInBvaW50ZXJ1cFwiLCAoZSkgPT4ge1xuICAgICAgaWYgKGUuYnV0dG9uID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICBlLmNvbXBvc2VkUGF0aCA9ICgpID0+IHBhdGg7XG4gICAgICAgIGZhbGxiYWNrID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gbGlzdGVuZXIoZSksIDUwKTtcbiAgICAgIH1cbiAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSksXG4gICAgZGV0ZWN0SWZyYW1lICYmIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImJsdXJcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBlbCA9IHVucmVmRWxlbWVudCh0YXJnZXQpO1xuICAgICAgaWYgKCgoX2EgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EudGFnTmFtZSkgPT09IFwiSUZSQU1FXCIgJiYgIShlbCA9PSBudWxsID8gdm9pZCAwIDogZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpKVxuICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICB9KVxuICBdLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IGNsZWFudXAuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICByZXR1cm4gc3RvcDtcbn1cblxudmFyIF9fZGVmUHJvcCRqID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkOCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDggPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRsID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kbCA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJGogPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJGoob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJGogPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRsLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkaihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkbClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkbChiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRsLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCRqKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkOCA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDgoYSwgX19nZXRPd25Qcm9wRGVzY3MkOChiKSk7XG5jb25zdCBjcmVhdGVLZXlQcmVkaWNhdGUgPSAoa2V5RmlsdGVyKSA9PiB7XG4gIGlmICh0eXBlb2Yga2V5RmlsdGVyID09PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIGtleUZpbHRlcjtcbiAgZWxzZSBpZiAodHlwZW9mIGtleUZpbHRlciA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gKGV2ZW50KSA9PiBldmVudC5rZXkgPT09IGtleUZpbHRlcjtcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlGaWx0ZXIpKVxuICAgIHJldHVybiAoZXZlbnQpID0+IGtleUZpbHRlci5pbmNsdWRlcyhldmVudC5rZXkpO1xuICBlbHNlIGlmIChrZXlGaWx0ZXIpXG4gICAgcmV0dXJuICgpID0+IHRydWU7XG4gIGVsc2VcbiAgICByZXR1cm4gKCkgPT4gZmFsc2U7XG59O1xuZnVuY3Rpb24gb25LZXlTdHJva2Uoa2V5LCBoYW5kbGVyLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0YXJnZXQgPSBkZWZhdWx0V2luZG93LCBldmVudE5hbWUgPSBcImtleWRvd25cIiwgcGFzc2l2ZSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcmVkaWNhdGUgPSBjcmVhdGVLZXlQcmVkaWNhdGUoa2V5KTtcbiAgY29uc3QgbGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUoZSkpXG4gICAgICBoYW5kbGVyKGUpO1xuICB9O1xuICByZXR1cm4gdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIHBhc3NpdmUpO1xufVxuZnVuY3Rpb24gb25LZXlEb3duKGtleSwgaGFuZGxlciwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBvbktleVN0cm9rZShrZXksIGhhbmRsZXIsIF9fc3ByZWFkUHJvcHMkOChfX3NwcmVhZFZhbHVlcyRqKHt9LCBvcHRpb25zKSwgeyBldmVudE5hbWU6IFwia2V5ZG93blwiIH0pKTtcbn1cbmZ1bmN0aW9uIG9uS2V5UHJlc3NlZChrZXksIGhhbmRsZXIsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gb25LZXlTdHJva2Uoa2V5LCBoYW5kbGVyLCBfX3NwcmVhZFByb3BzJDgoX19zcHJlYWRWYWx1ZXMkaih7fSwgb3B0aW9ucyksIHsgZXZlbnROYW1lOiBcImtleXByZXNzXCIgfSkpO1xufVxuZnVuY3Rpb24gb25LZXlVcChrZXksIGhhbmRsZXIsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gb25LZXlTdHJva2Uoa2V5LCBoYW5kbGVyLCBfX3NwcmVhZFByb3BzJDgoX19zcHJlYWRWYWx1ZXMkaih7fSwgb3B0aW9ucyksIHsgZXZlbnROYW1lOiBcImtleXVwXCIgfSkpO1xufVxuXG5jb25zdCBERUZBVUxUX0RFTEFZID0gNTAwO1xuZnVuY3Rpb24gb25Mb25nUHJlc3ModGFyZ2V0LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIHZhciBfYSwgX2I7XG4gIGNvbnN0IGVsZW1lbnRSZWYgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpKTtcbiAgbGV0IHRpbWVvdXQgPSBudWxsO1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25Eb3duKGV2KSB7XG4gICAgdmFyIF9hMiwgX2IyLCBfYywgX2Q7XG4gICAgaWYgKCgoX2EyID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tb2RpZmllcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2VsZikgJiYgZXYudGFyZ2V0ICE9PSBlbGVtZW50UmVmLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGNsZWFyKCk7XG4gICAgaWYgKChfYjIgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1vZGlmaWVycykgPT0gbnVsbCA/IHZvaWQgMCA6IF9iMi5wcmV2ZW50KVxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoKF9jID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tb2RpZmllcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYy5zdG9wKVxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gaGFuZGxlcihldiksIChfZCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZGVsYXkpICE9IG51bGwgPyBfZCA6IERFRkFVTFRfREVMQVkpO1xuICB9XG4gIGNvbnN0IGxpc3RlbmVyT3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiAoX2EgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1vZGlmaWVycykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhcHR1cmUsXG4gICAgb25jZTogKF9iID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tb2RpZmllcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYi5vbmNlXG4gIH07XG4gIHVzZUV2ZW50TGlzdGVuZXIoZWxlbWVudFJlZiwgXCJwb2ludGVyZG93blwiLCBvbkRvd24sIGxpc3RlbmVyT3B0aW9ucyk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoZWxlbWVudFJlZiwgXCJwb2ludGVydXBcIiwgY2xlYXIsIGxpc3RlbmVyT3B0aW9ucyk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoZWxlbWVudFJlZiwgXCJwb2ludGVybGVhdmVcIiwgY2xlYXIsIGxpc3RlbmVyT3B0aW9ucyk7XG59XG5cbmNvbnN0IGlzRm9jdXNlZEVsZW1lbnRFZGl0YWJsZSA9ICgpID0+IHtcbiAgY29uc3QgeyBhY3RpdmVFbGVtZW50LCBib2R5IH0gPSBkb2N1bWVudDtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFjdGl2ZUVsZW1lbnQgPT09IGJvZHkpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGFjdGl2ZUVsZW1lbnQudGFnTmFtZSkge1xuICAgIGNhc2UgXCJJTlBVVFwiOlxuICAgIGNhc2UgXCJURVhUQVJFQVwiOlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpO1xufTtcbmNvbnN0IGlzVHlwZWRDaGFyVmFsaWQgPSAoe1xuICBrZXlDb2RlLFxuICBtZXRhS2V5LFxuICBjdHJsS2V5LFxuICBhbHRLZXlcbn0pID0+IHtcbiAgaWYgKG1ldGFLZXkgfHwgY3RybEtleSB8fCBhbHRLZXkpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoa2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3IHx8IGtleUNvZGUgPj0gOTYgJiYga2V5Q29kZSA8PSAxMDUpXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmIChrZXlDb2RlID49IDY1ICYmIGtleUNvZGUgPD0gOTApXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn07XG5mdW5jdGlvbiBvblN0YXJ0VHlwaW5nKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBkb2N1bWVudDogZG9jdW1lbnQyID0gZGVmYXVsdERvY3VtZW50IH0gPSBvcHRpb25zO1xuICBjb25zdCBrZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgIWlzRm9jdXNlZEVsZW1lbnRFZGl0YWJsZSgpICYmIGlzVHlwZWRDaGFyVmFsaWQoZXZlbnQpICYmIGNhbGxiYWNrKGV2ZW50KTtcbiAgfTtcbiAgaWYgKGRvY3VtZW50MilcbiAgICB1c2VFdmVudExpc3RlbmVyKGRvY3VtZW50MiwgXCJrZXlkb3duXCIsIGtleWRvd24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbn1cblxuZnVuY3Rpb24gdGVtcGxhdGVSZWYoa2V5LCBpbml0aWFsVmFsdWUgPSBudWxsKSB7XG4gIGNvbnN0IGluc3RhbmNlID0gdnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgbGV0IF90cmlnZ2VyID0gKCkgPT4ge1xuICB9O1xuICBjb25zdCBlbGVtZW50ID0gdnVlRGVtaS5jdXN0b21SZWYoKHRyYWNrLCB0cmlnZ2VyKSA9PiB7XG4gICAgX3RyaWdnZXIgPSB0cmlnZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRyYWNrKCk7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBpbnN0YW5jZSA9PSBudWxsID8gdm9pZCAwIDogaW5zdGFuY2UucHJveHkpID09IG51bGwgPyB2b2lkIDAgOiBfYS4kcmVmc1trZXldKSAhPSBudWxsID8gX2IgOiBpbml0aWFsVmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0KCkge1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICBzaGFyZWQudHJ5T25Nb3VudGVkKF90cmlnZ2VyKTtcbiAgdnVlRGVtaS5vblVwZGF0ZWQoX3RyaWdnZXIpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gdXNlQWN0aXZlRWxlbWVudChvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBjb25zdCBjb3VudGVyID0gdnVlRGVtaS5yZWYoMCk7XG4gIGlmICh3aW5kb3cpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJibHVyXCIsICgpID0+IGNvdW50ZXIudmFsdWUgKz0gMSwgdHJ1ZSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZm9jdXNcIiwgKCkgPT4gY291bnRlci52YWx1ZSArPSAxLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgY291bnRlci52YWx1ZTtcbiAgICByZXR1cm4gd2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZUFzeW5jUXVldWUodGFza3MsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJydXB0ID0gdHJ1ZSxcbiAgICBvbkVycm9yID0gc2hhcmVkLm5vb3AsXG4gICAgb25GaW5pc2hlZCA9IHNoYXJlZC5ub29wXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9taXNlU3RhdGUgPSB7XG4gICAgcGVuZGluZzogXCJwZW5kaW5nXCIsXG4gICAgcmVqZWN0ZWQ6IFwicmVqZWN0ZWRcIixcbiAgICBmdWxmaWxsZWQ6IFwiZnVsZmlsbGVkXCJcbiAgfTtcbiAgY29uc3QgaW5pdGlhbFJlc3VsdCA9IEFycmF5LmZyb20obmV3IEFycmF5KHRhc2tzLmxlbmd0aCksICgpID0+ICh7IHN0YXRlOiBwcm9taXNlU3RhdGUucGVuZGluZywgZGF0YTogbnVsbCB9KSk7XG4gIGNvbnN0IHJlc3VsdCA9IHZ1ZURlbWkucmVhY3RpdmUoaW5pdGlhbFJlc3VsdCk7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gdnVlRGVtaS5yZWYoLTEpO1xuICBpZiAoIXRhc2tzIHx8IHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgIG9uRmluaXNoZWQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICByZXN1bHRcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVJlc3VsdChzdGF0ZSwgcmVzKSB7XG4gICAgYWN0aXZlSW5kZXgudmFsdWUrKztcbiAgICByZXN1bHRbYWN0aXZlSW5kZXgudmFsdWVdLmRhdGEgPSByZXM7XG4gICAgcmVzdWx0W2FjdGl2ZUluZGV4LnZhbHVlXS5zdGF0ZSA9IHN0YXRlO1xuICB9XG4gIHRhc2tzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgIHJldHVybiBwcmV2LnRoZW4oKHByZXZSZXMpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmICgoKF9hID0gcmVzdWx0W2FjdGl2ZUluZGV4LnZhbHVlXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN0YXRlKSA9PT0gcHJvbWlzZVN0YXRlLnJlamVjdGVkICYmIGludGVycnVwdCkge1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyKHByZXZSZXMpLnRoZW4oKGN1cnJlbnRSZXMpID0+IHtcbiAgICAgICAgdXBkYXRlUmVzdWx0KHByb21pc2VTdGF0ZS5mdWxmaWxsZWQsIGN1cnJlbnRSZXMpO1xuICAgICAgICBhY3RpdmVJbmRleC52YWx1ZSA9PT0gdGFza3MubGVuZ3RoIC0gMSAmJiBvbkZpbmlzaGVkKCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50UmVzO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIHVwZGF0ZVJlc3VsdChwcm9taXNlU3RhdGUucmVqZWN0ZWQsIGUpO1xuICAgICAgb25FcnJvcigpO1xuICAgICAgcmV0dXJuIGU7XG4gICAgfSk7XG4gIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICByZXN1bHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlQXN5bmNTdGF0ZShwcm9taXNlLCBpbml0aWFsU3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgZGVsYXkgPSAwLFxuICAgIG9uRXJyb3IgPSBzaGFyZWQubm9vcCxcbiAgICByZXNldE9uRXhlY3V0ZSA9IHRydWUsXG4gICAgc2hhbGxvdyA9IHRydWVcbiAgfSA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiB7fTtcbiAgY29uc3Qgc3RhdGUgPSBzaGFsbG93ID8gdnVlRGVtaS5zaGFsbG93UmVmKGluaXRpYWxTdGF0ZSkgOiB2dWVEZW1pLnJlZihpbml0aWFsU3RhdGUpO1xuICBjb25zdCBpc1JlYWR5ID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBpc0xvYWRpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5yZWYodm9pZCAwKTtcbiAgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShkZWxheTIgPSAwLCAuLi5hcmdzKSB7XG4gICAgaWYgKHJlc2V0T25FeGVjdXRlKVxuICAgICAgc3RhdGUudmFsdWUgPSBpbml0aWFsU3RhdGU7XG4gICAgZXJyb3IudmFsdWUgPSB2b2lkIDA7XG4gICAgaXNSZWFkeS52YWx1ZSA9IGZhbHNlO1xuICAgIGlzTG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgaWYgKGRlbGF5MiA+IDApXG4gICAgICBhd2FpdCBzaGFyZWQucHJvbWlzZVRpbWVvdXQoZGVsYXkyKTtcbiAgICBjb25zdCBfcHJvbWlzZSA9IHR5cGVvZiBwcm9taXNlID09PSBcImZ1bmN0aW9uXCIgPyBwcm9taXNlKC4uLmFyZ3MpIDogcHJvbWlzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IF9wcm9taXNlO1xuICAgICAgc3RhdGUudmFsdWUgPSBkYXRhO1xuICAgICAgaXNSZWFkeS52YWx1ZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IudmFsdWUgPSBlO1xuICAgICAgb25FcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNMb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS52YWx1ZTtcbiAgfVxuICBpZiAoaW1tZWRpYXRlKVxuICAgIGV4ZWN1dGUoZGVsYXkpO1xuICByZXR1cm4ge1xuICAgIHN0YXRlLFxuICAgIGlzUmVhZHksXG4gICAgaXNMb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGV4ZWN1dGVcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGFycmF5OiAodikgPT4gSlNPTi5zdHJpbmdpZnkodiksXG4gIG9iamVjdDogKHYpID0+IEpTT04uc3RyaW5naWZ5KHYpLFxuICBzZXQ6ICh2KSA9PiBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHYpKSxcbiAgbWFwOiAodikgPT4gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmZyb21FbnRyaWVzKHYpKSxcbiAgbnVsbDogKCkgPT4gXCJcIlxufTtcbmZ1bmN0aW9uIGdldERlZmF1bHRTZXJpYWxpemF0aW9uKHRhcmdldCkge1xuICBpZiAoIXRhcmdldClcbiAgICByZXR1cm4gZGVmYXVsdHMubnVsbDtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1hcClcbiAgICByZXR1cm4gZGVmYXVsdHMubWFwO1xuICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTZXQpXG4gICAgcmV0dXJuIGRlZmF1bHRzLnNldDtcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKVxuICAgIHJldHVybiBkZWZhdWx0cy5hcnJheTtcbiAgZWxzZVxuICAgIHJldHVybiBkZWZhdWx0cy5vYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHVzZUJhc2U2NCh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgY29uc3QgYmFzZTY0ID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IHByb21pc2UgPSB2dWVEZW1pLnJlZigpO1xuICBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgIGlmICghc2hhcmVkLmlzQ2xpZW50KVxuICAgICAgcmV0dXJuO1xuICAgIHByb21pc2UudmFsdWUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBfdGFyZ2V0ID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgICAgICBpZiAoX3RhcmdldCA9PSBudWxsKSB7XG4gICAgICAgICAgcmVzb2x2ZShcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgX3RhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJlc29sdmUoYmxvYlRvQmFzZTY0KG5ldyBCbG9iKFtfdGFyZ2V0XSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KSkpO1xuICAgICAgICB9IGVsc2UgaWYgKF90YXJnZXQgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgcmVzb2x2ZShibG9iVG9CYXNlNjQoX3RhcmdldCkpO1xuICAgICAgICB9IGVsc2UgaWYgKF90YXJnZXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJlc29sdmUod2luZG93LmJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5uZXcgVWludDhBcnJheShfdGFyZ2V0KSkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChfdGFyZ2V0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgICByZXNvbHZlKF90YXJnZXQudG9EYXRhVVJMKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudHlwZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWFsaXR5KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RhcmdldCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBpbWcgPSBfdGFyZ2V0LmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gXCJBbm9ueW1vdXNcIjtcbiAgICAgICAgICBpbWdMb2FkZWQoaW1nKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgIHJlc29sdmUoY2FudmFzLnRvRGF0YVVSTChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnR5cGUsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVhbGl0eSkpO1xuICAgICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90YXJnZXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBjb25zdCBfc2VyaWFsaXplRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zZXJpYWxpemVyKSB8fCBnZXREZWZhdWx0U2VyaWFsaXphdGlvbihfdGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gX3NlcmlhbGl6ZUZuKF90YXJnZXQpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKGJsb2JUb0Jhc2U2NChuZXcgQmxvYihbc2VyaWFsaXplZF0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwidGFyZ2V0IGlzIHVuc3VwcG9ydGVkIHR5cGVzXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9taXNlLnZhbHVlLnRoZW4oKHJlcykgPT4gYmFzZTY0LnZhbHVlID0gcmVzKTtcbiAgICByZXR1cm4gcHJvbWlzZS52YWx1ZTtcbiAgfVxuICBpZiAodnVlRGVtaS5pc1JlZih0YXJnZXQpKVxuICAgIHZ1ZURlbWkud2F0Y2godGFyZ2V0LCBleGVjdXRlLCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgZWxzZVxuICAgIGV4ZWN1dGUoKTtcbiAgcmV0dXJuIHtcbiAgICBiYXNlNjQsXG4gICAgcHJvbWlzZSxcbiAgICBleGVjdXRlXG4gIH07XG59XG5mdW5jdGlvbiBpbWdMb2FkZWQoaW1nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKCFpbWcuY29tcGxldGUpIHtcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBpbWcub25lcnJvciA9IHJlamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBibG9iVG9CYXNlNjQoYmxvYikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBmci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpO1xuICAgIH07XG4gICAgZnIub25lcnJvciA9IHJlamVjdDtcbiAgICBmci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlQmF0dGVyeSh7IG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IgfSA9IHt9KSB7XG4gIGNvbnN0IGV2ZW50cyA9IFtcImNoYXJnaW5nY2hhbmdlXCIsIFwiY2hhcmdpbmd0aW1lY2hhbmdlXCIsIFwiZGlzY2hhcmdpbmd0aW1lY2hhbmdlXCIsIFwibGV2ZWxjaGFuZ2VcIl07XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIFwiZ2V0QmF0dGVyeVwiIGluIG5hdmlnYXRvcjtcbiAgY29uc3QgY2hhcmdpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IGNoYXJnaW5nVGltZSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBkaXNjaGFyZ2luZ1RpbWUgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgbGV2ZWwgPSB2dWVEZW1pLnJlZigxKTtcbiAgbGV0IGJhdHRlcnk7XG4gIGZ1bmN0aW9uIHVwZGF0ZUJhdHRlcnlJbmZvKCkge1xuICAgIGNoYXJnaW5nLnZhbHVlID0gdGhpcy5jaGFyZ2luZztcbiAgICBjaGFyZ2luZ1RpbWUudmFsdWUgPSB0aGlzLmNoYXJnaW5nVGltZSB8fCAwO1xuICAgIGRpc2NoYXJnaW5nVGltZS52YWx1ZSA9IHRoaXMuZGlzY2hhcmdpbmdUaW1lIHx8IDA7XG4gICAgbGV2ZWwudmFsdWUgPSB0aGlzLmxldmVsO1xuICB9XG4gIGlmIChpc1N1cHBvcnRlZCkge1xuICAgIG5hdmlnYXRvci5nZXRCYXR0ZXJ5KCkudGhlbigoX2JhdHRlcnkpID0+IHtcbiAgICAgIGJhdHRlcnkgPSBfYmF0dGVyeTtcbiAgICAgIHVwZGF0ZUJhdHRlcnlJbmZvLmNhbGwoYmF0dGVyeSk7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cylcbiAgICAgICAgdXNlRXZlbnRMaXN0ZW5lcihiYXR0ZXJ5LCBldmVudCwgdXBkYXRlQmF0dGVyeUluZm8sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGNoYXJnaW5nLFxuICAgIGNoYXJnaW5nVGltZSxcbiAgICBkaXNjaGFyZ2luZ1RpbWUsXG4gICAgbGV2ZWxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlQmx1ZXRvb3RoKG9wdGlvbnMpIHtcbiAgbGV0IHtcbiAgICBhY2NlcHRBbGxEZXZpY2VzID0gZmFsc2VcbiAgfSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXJzID0gdm9pZCAwLFxuICAgIG9wdGlvbmFsU2VydmljZXMgPSB2b2lkIDAsXG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvclxuICB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgXCJibHVldG9vdGhcIiBpbiBuYXZpZ2F0b3I7XG4gIGNvbnN0IGRldmljZSA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIHZ1ZURlbWkud2F0Y2goZGV2aWNlLCAoKSA9PiB7XG4gICAgY29ubmVjdFRvQmx1ZXRvb3RoR0FUVFNlcnZlcigpO1xuICB9KTtcbiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERldmljZSgpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGVycm9yLnZhbHVlID0gbnVsbDtcbiAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCA+IDApXG4gICAgICBhY2NlcHRBbGxEZXZpY2VzID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGRldmljZS52YWx1ZSA9IGF3YWl0IChuYXZpZ2F0b3IgPT0gbnVsbCA/IHZvaWQgMCA6IG5hdmlnYXRvci5ibHVldG9vdGgucmVxdWVzdERldmljZSh7XG4gICAgICAgIGFjY2VwdEFsbERldmljZXMsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIG9wdGlvbmFsU2VydmljZXNcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yLnZhbHVlID0gZXJyO1xuICAgIH1cbiAgfVxuICBjb25zdCBzZXJ2ZXIgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBpc0Nvbm5lY3RlZCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKChfYSA9IHNlcnZlci52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNvbm5lY3RlZCkgfHwgZmFsc2U7XG4gIH0pO1xuICBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9CbHVldG9vdGhHQVRUU2VydmVyKCkge1xuICAgIGVycm9yLnZhbHVlID0gbnVsbDtcbiAgICBpZiAoZGV2aWNlLnZhbHVlICYmIGRldmljZS52YWx1ZS5nYXR0KSB7XG4gICAgICBkZXZpY2UudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcihcImdhdHRzZXJ2ZXJkaXNjb25uZWN0ZWRcIiwgKCkgPT4ge1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXJ2ZXIudmFsdWUgPSBhd2FpdCBkZXZpY2UudmFsdWUuZ2F0dC5jb25uZWN0KCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNoYXJlZC50cnlPbk1vdW50ZWQoKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAoZGV2aWNlLnZhbHVlKVxuICAgICAgKF9hID0gZGV2aWNlLnZhbHVlLmdhdHQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jb25uZWN0KCk7XG4gIH0pO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAoZGV2aWNlLnZhbHVlKVxuICAgICAgKF9hID0gZGV2aWNlLnZhbHVlLmdhdHQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5kaXNjb25uZWN0KCk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGlzQ29ubmVjdGVkLFxuICAgIGRldmljZSxcbiAgICByZXF1ZXN0RGV2aWNlLFxuICAgIHNlcnZlcixcbiAgICBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VNZWRpYVF1ZXJ5KHF1ZXJ5LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB3aW5kb3cgPSBkZWZhdWx0V2luZG93IH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IEJvb2xlYW4od2luZG93ICYmIFwibWF0Y2hNZWRpYVwiIGluIHdpbmRvdyAmJiB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09IFwiZnVuY3Rpb25cIik7XG4gIGxldCBtZWRpYVF1ZXJ5O1xuICBjb25zdCBtYXRjaGVzID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIW1lZGlhUXVlcnkpXG4gICAgICBtZWRpYVF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpO1xuICAgIG1hdGNoZXMudmFsdWUgPSBtZWRpYVF1ZXJ5Lm1hdGNoZXM7XG4gIH07XG4gIHNoYXJlZC50cnlPbkJlZm9yZU1vdW50KCgpID0+IHtcbiAgICB1cGRhdGUoKTtcbiAgICBpZiAoIW1lZGlhUXVlcnkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKFwiYWRkRXZlbnRMaXN0ZW5lclwiIGluIG1lZGlhUXVlcnkpXG4gICAgICBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdXBkYXRlKTtcbiAgICBlbHNlXG4gICAgICBtZWRpYVF1ZXJ5LmFkZExpc3RlbmVyKHVwZGF0ZSk7XG4gICAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICAgIGlmIChcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiBpbiBtZWRpYVF1ZXJ5KVxuICAgICAgICBtZWRpYVF1ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdXBkYXRlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgbWVkaWFRdWVyeS5yZW1vdmVMaXN0ZW5lcih1cGRhdGUpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmNvbnN0IGJyZWFrcG9pbnRzVGFpbHdpbmQgPSB7XG4gIFwic21cIjogNjQwLFxuICBcIm1kXCI6IDc2OCxcbiAgXCJsZ1wiOiAxMDI0LFxuICBcInhsXCI6IDEyODAsXG4gIFwiMnhsXCI6IDE1MzZcbn07XG5jb25zdCBicmVha3BvaW50c0Jvb3RzdHJhcFY1ID0ge1xuICBzbTogNTc2LFxuICBtZDogNzY4LFxuICBsZzogOTkyLFxuICB4bDogMTIwMCxcbiAgeHhsOiAxNDAwXG59O1xuY29uc3QgYnJlYWtwb2ludHNWdWV0aWZ5ID0ge1xuICB4czogNjAwLFxuICBzbTogOTYwLFxuICBtZDogMTI2NCxcbiAgbGc6IDE5MDRcbn07XG5jb25zdCBicmVha3BvaW50c0FudERlc2lnbiA9IHtcbiAgeHM6IDQ4MCxcbiAgc206IDU3NixcbiAgbWQ6IDc2OCxcbiAgbGc6IDk5MixcbiAgeGw6IDEyMDAsXG4gIHh4bDogMTYwMFxufTtcbmNvbnN0IGJyZWFrcG9pbnRzUXVhc2FyID0ge1xuICB4czogNjAwLFxuICBzbTogMTAyNCxcbiAgbWQ6IDE0NDAsXG4gIGxnOiAxOTIwXG59O1xuY29uc3QgYnJlYWtwb2ludHNTZW1hdGljID0ge1xuICBtb2JpbGVTOiAzMjAsXG4gIG1vYmlsZU06IDM3NSxcbiAgbW9iaWxlTDogNDI1LFxuICB0YWJsZXQ6IDc2OCxcbiAgbGFwdG9wOiAxMDI0LFxuICBsYXB0b3BMOiAxNDQwLFxuICBkZXNrdG9wNEs6IDI1NjBcbn07XG5cbnZhciBfX2RlZlByb3AkaSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGsgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRrID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kayA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJGkgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJGkob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJGkgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRrLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkaShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkaylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkayhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRrLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCRpKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIG9wdGlvbnMgPSB7fSkge1xuICBmdW5jdGlvbiBnZXRWYWx1ZShrLCBkZWx0YSkge1xuICAgIGxldCB2ID0gYnJlYWtwb2ludHNba107XG4gICAgaWYgKGRlbHRhICE9IG51bGwpXG4gICAgICB2ID0gc2hhcmVkLmluY3JlYXNlV2l0aFVuaXQodiwgZGVsdGEpO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIilcbiAgICAgIHYgPSBgJHt2fXB4YDtcbiAgICByZXR1cm4gdjtcbiAgfVxuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGZ1bmN0aW9uIG1hdGNoKHF1ZXJ5KSB7XG4gICAgaWYgKCF3aW5kb3cpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICB9XG4gIGNvbnN0IGdyZWF0ZXIgPSAoaykgPT4ge1xuICAgIHJldHVybiB1c2VNZWRpYVF1ZXJ5KGAobWluLXdpZHRoOiAke2dldFZhbHVlKGspfSlgLCBvcHRpb25zKTtcbiAgfTtcbiAgY29uc3Qgc2hvcnRjdXRNZXRob2RzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLnJlZHVjZSgoc2hvcnRjdXRzLCBrKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNob3J0Y3V0cywgaywge1xuICAgICAgZ2V0OiAoKSA9PiBncmVhdGVyKGspLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBzaG9ydGN1dHM7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJGkoe1xuICAgIGdyZWF0ZXIsXG4gICAgc21hbGxlcihrKSB7XG4gICAgICByZXR1cm4gdXNlTWVkaWFRdWVyeShgKG1heC13aWR0aDogJHtnZXRWYWx1ZShrLCAtMC4xKX0pYCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBiZXR3ZWVuKGEsIGIpIHtcbiAgICAgIHJldHVybiB1c2VNZWRpYVF1ZXJ5KGAobWluLXdpZHRoOiAke2dldFZhbHVlKGEpfSkgYW5kIChtYXgtd2lkdGg6ICR7Z2V0VmFsdWUoYiwgLTAuMSl9KWAsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgaXNHcmVhdGVyKGspIHtcbiAgICAgIHJldHVybiBtYXRjaChgKG1pbi13aWR0aDogJHtnZXRWYWx1ZShrKX0pYCk7XG4gICAgfSxcbiAgICBpc1NtYWxsZXIoaykge1xuICAgICAgcmV0dXJuIG1hdGNoKGAobWF4LXdpZHRoOiAke2dldFZhbHVlKGssIC0wLjEpfSlgKTtcbiAgICB9LFxuICAgIGlzSW5CZXR3ZWVuKGEsIGIpIHtcbiAgICAgIHJldHVybiBtYXRjaChgKG1pbi13aWR0aDogJHtnZXRWYWx1ZShhKX0pIGFuZCAobWF4LXdpZHRoOiAke2dldFZhbHVlKGIsIC0wLjEpfSlgKTtcbiAgICB9XG4gIH0sIHNob3J0Y3V0TWV0aG9kcyk7XG59XG5cbmNvbnN0IHVzZUJyb2FkY2FzdENoYW5uZWwgPSAob3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHdpbmRvdyAmJiBcIkJyb2FkY2FzdENoYW5uZWxcIiBpbiB3aW5kb3c7XG4gIGNvbnN0IGlzQ2xvc2VkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBjaGFubmVsID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHBvc3QgPSAoZGF0YTIpID0+IHtcbiAgICBpZiAoY2hhbm5lbC52YWx1ZSlcbiAgICAgIGNoYW5uZWwudmFsdWUucG9zdE1lc3NhZ2UoZGF0YTIpO1xuICB9O1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAoY2hhbm5lbC52YWx1ZSlcbiAgICAgIGNoYW5uZWwudmFsdWUuY2xvc2UoKTtcbiAgICBpc0Nsb3NlZC52YWx1ZSA9IHRydWU7XG4gIH07XG4gIGlmIChpc1N1cHBvcnRlZCkge1xuICAgIHNoYXJlZC50cnlPbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgZXJyb3IudmFsdWUgPSBudWxsO1xuICAgICAgY2hhbm5lbC52YWx1ZSA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKG5hbWUpO1xuICAgICAgY2hhbm5lbC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZSkgPT4ge1xuICAgICAgICBkYXRhLnZhbHVlID0gZS5kYXRhO1xuICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgY2hhbm5lbC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZWVycm9yXCIsIChlKSA9PiB7XG4gICAgICAgIGVycm9yLnZhbHVlID0gZTtcbiAgICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNoYW5uZWwudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgaXNDbG9zZWQudmFsdWUgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICBjbG9zZSgpO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBjaGFubmVsLFxuICAgIGRhdGEsXG4gICAgcG9zdCxcbiAgICBjbG9zZSxcbiAgICBlcnJvcixcbiAgICBpc0Nsb3NlZFxuICB9O1xufTtcblxuZnVuY3Rpb24gdXNlQnJvd3NlckxvY2F0aW9uKHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0ge30pIHtcbiAgY29uc3QgYnVpbGRTdGF0ZSA9ICh0cmlnZ2VyKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZTogc3RhdGUyLCBsZW5ndGggfSA9ICh3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5oaXN0b3J5KSB8fCB7fTtcbiAgICBjb25zdCB7IGhhc2gsIGhvc3QsIGhvc3RuYW1lLCBocmVmLCBvcmlnaW4sIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSAod2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cubG9jYXRpb24pIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICB0cmlnZ2VyLFxuICAgICAgc3RhdGU6IHN0YXRlMixcbiAgICAgIGxlbmd0aCxcbiAgICAgIGhhc2gsXG4gICAgICBob3N0LFxuICAgICAgaG9zdG5hbWUsXG4gICAgICBocmVmLFxuICAgICAgb3JpZ2luLFxuICAgICAgcGF0aG5hbWUsXG4gICAgICBwb3J0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBzZWFyY2hcbiAgICB9O1xuICB9O1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkucmVmKGJ1aWxkU3RhdGUoXCJsb2FkXCIpKTtcbiAgaWYgKHdpbmRvdykge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInBvcHN0YXRlXCIsICgpID0+IHN0YXRlLnZhbHVlID0gYnVpbGRTdGF0ZShcInBvcHN0YXRlXCIpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiaGFzaGNoYW5nZVwiLCAoKSA9PiBzdGF0ZS52YWx1ZSA9IGJ1aWxkU3RhdGUoXCJoYXNoY2hhbmdlXCIpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1c2VDYWNoZWQocmVmVmFsdWUsIGNvbXBhcmF0b3IgPSAoYSwgYikgPT4gYSA9PT0gYiwgd2F0Y2hPcHRpb25zKSB7XG4gIGNvbnN0IGNhY2hlZFZhbHVlID0gdnVlRGVtaS5yZWYocmVmVmFsdWUudmFsdWUpO1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHJlZlZhbHVlLnZhbHVlLCAodmFsdWUpID0+IHtcbiAgICBpZiAoIWNvbXBhcmF0b3IodmFsdWUsIGNhY2hlZFZhbHVlLnZhbHVlKSlcbiAgICAgIGNhY2hlZFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gIH0sIHdhdGNoT3B0aW9ucyk7XG4gIHJldHVybiBjYWNoZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXNlQ2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XG4gIGNvbnN0IF92YWx1ZSA9IHZ1ZURlbWkucmVmKHZhbHVlKTtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoe1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBfdmFsdWUudmFsdWUgPSBzaGFyZWQuY2xhbXAoX3ZhbHVlLnZhbHVlLCB2dWVEZW1pLnVucmVmKG1pbiksIHZ1ZURlbWkudW5yZWYobWF4KSk7XG4gICAgfSxcbiAgICBzZXQodmFsdWUyKSB7XG4gICAgICBfdmFsdWUudmFsdWUgPSBzaGFyZWQuY2xhbXAodmFsdWUyLCB2dWVEZW1pLnVucmVmKG1pbiksIHZ1ZURlbWkudW5yZWYobWF4KSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlQ2xpcGJvYXJkKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvcixcbiAgICByZWFkID0gZmFsc2UsXG4gICAgc291cmNlLFxuICAgIGNvcGllZER1cmluZyA9IDE1MDBcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGV2ZW50cyA9IFtcImNvcHlcIiwgXCJjdXRcIl07XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbihuYXZpZ2F0b3IgJiYgXCJjbGlwYm9hcmRcIiBpbiBuYXZpZ2F0b3IpO1xuICBjb25zdCB0ZXh0ID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IGNvcGllZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgdGltZW91dCA9IHNoYXJlZC51c2VUaW1lb3V0Rm4oKCkgPT4gY29waWVkLnZhbHVlID0gZmFsc2UsIGNvcGllZER1cmluZyk7XG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHQoKSB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCgpLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICB0ZXh0LnZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGlzU3VwcG9ydGVkICYmIHJlYWQpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cylcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHVwZGF0ZVRleHQpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGNvcHkodmFsdWUgPSB2dWVEZW1pLnVucmVmKHNvdXJjZSkpIHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsdWUpO1xuICAgICAgdGV4dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgY29waWVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRpbWVvdXQuc3RhcnQoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICB0ZXh0LFxuICAgIGNvcGllZCxcbiAgICBjb3B5XG4gIH07XG59XG5cbmNvbnN0IF9nbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHt9O1xuY29uc3QgZ2xvYmFsS2V5ID0gXCJfX3Z1ZXVzZV9zc3JfaGFuZGxlcnNfX1wiO1xuX2dsb2JhbFtnbG9iYWxLZXldID0gX2dsb2JhbFtnbG9iYWxLZXldIHx8IHt9O1xuY29uc3QgaGFuZGxlcnMgPSBfZ2xvYmFsW2dsb2JhbEtleV07XG5mdW5jdGlvbiBnZXRTU1JIYW5kbGVyKGtleSwgZmFsbGJhY2spIHtcbiAgcmV0dXJuIGhhbmRsZXJzW2tleV0gfHwgZmFsbGJhY2s7XG59XG5mdW5jdGlvbiBzZXRTU1JIYW5kbGVyKGtleSwgZm4pIHtcbiAgaGFuZGxlcnNba2V5XSA9IGZuO1xufVxuXG5mdW5jdGlvbiBndWVzc1NlcmlhbGl6ZXJUeXBlKHJhd0luaXQpIHtcbiAgcmV0dXJuIHJhd0luaXQgPT0gbnVsbCA/IFwiYW55XCIgOiByYXdJbml0IGluc3RhbmNlb2YgU2V0ID8gXCJzZXRcIiA6IHJhd0luaXQgaW5zdGFuY2VvZiBNYXAgPyBcIm1hcFwiIDogcmF3SW5pdCBpbnN0YW5jZW9mIERhdGUgPyBcImRhdGVcIiA6IHR5cGVvZiByYXdJbml0ID09PSBcImJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogdHlwZW9mIHJhd0luaXQgPT09IFwic3RyaW5nXCIgPyBcInN0cmluZ1wiIDogdHlwZW9mIHJhd0luaXQgPT09IFwib2JqZWN0XCIgPyBcIm9iamVjdFwiIDogQXJyYXkuaXNBcnJheShyYXdJbml0KSA/IFwib2JqZWN0XCIgOiAhTnVtYmVyLmlzTmFOKHJhd0luaXQpID8gXCJudW1iZXJcIiA6IFwiYW55XCI7XG59XG5cbmNvbnN0IFN0b3JhZ2VTZXJpYWxpemVycyA9IHtcbiAgYm9vbGVhbjoge1xuICAgIHJlYWQ6ICh2KSA9PiB2ID09PSBcInRydWVcIixcbiAgICB3cml0ZTogKHYpID0+IFN0cmluZyh2KVxuICB9LFxuICBvYmplY3Q6IHtcbiAgICByZWFkOiAodikgPT4gSlNPTi5wYXJzZSh2KSxcbiAgICB3cml0ZTogKHYpID0+IEpTT04uc3RyaW5naWZ5KHYpXG4gIH0sXG4gIG51bWJlcjoge1xuICAgIHJlYWQ6ICh2KSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2KSxcbiAgICB3cml0ZTogKHYpID0+IFN0cmluZyh2KVxuICB9LFxuICBhbnk6IHtcbiAgICByZWFkOiAodikgPT4gdixcbiAgICB3cml0ZTogKHYpID0+IFN0cmluZyh2KVxuICB9LFxuICBzdHJpbmc6IHtcbiAgICByZWFkOiAodikgPT4gdixcbiAgICB3cml0ZTogKHYpID0+IFN0cmluZyh2KVxuICB9LFxuICBtYXA6IHtcbiAgICByZWFkOiAodikgPT4gbmV3IE1hcChKU09OLnBhcnNlKHYpKSxcbiAgICB3cml0ZTogKHYpID0+IEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odi5lbnRyaWVzKCkpKVxuICB9LFxuICBzZXQ6IHtcbiAgICByZWFkOiAodikgPT4gbmV3IFNldChKU09OLnBhcnNlKHYpKSxcbiAgICB3cml0ZTogKHYpID0+IEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odikpXG4gIH0sXG4gIGRhdGU6IHtcbiAgICByZWFkOiAodikgPT4gbmV3IERhdGUodiksXG4gICAgd3JpdGU6ICh2KSA9PiB2LnRvSVNPU3RyaW5nKClcbiAgfVxufTtcbmZ1bmN0aW9uIHVzZVN0b3JhZ2Uoa2V5LCBpbml0aWFsVmFsdWUsIHN0b3JhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2E7XG4gIGNvbnN0IHtcbiAgICBmbHVzaCA9IFwicHJlXCIsXG4gICAgZGVlcCA9IHRydWUsXG4gICAgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcyA9IHRydWUsXG4gICAgd3JpdGVEZWZhdWx0cyA9IHRydWUsXG4gICAgc2hhbGxvdyxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGV2ZW50RmlsdGVyLFxuICAgIG9uRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBkYXRhID0gKHNoYWxsb3cgPyB2dWVEZW1pLnNoYWxsb3dSZWYgOiB2dWVEZW1pLnJlZikoaW5pdGlhbFZhbHVlKTtcbiAgaWYgKCFzdG9yYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0b3JhZ2UgPSBnZXRTU1JIYW5kbGVyKFwiZ2V0RGVmYXVsdFN0b3JhZ2VcIiwgKCkgPT4ge1xuICAgICAgICB2YXIgX2EyO1xuICAgICAgICByZXR1cm4gKF9hMiA9IGRlZmF1bHRXaW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubG9jYWxTdG9yYWdlO1xuICAgICAgfSkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH1cbiAgfVxuICBpZiAoIXN0b3JhZ2UpXG4gICAgcmV0dXJuIGRhdGE7XG4gIGNvbnN0IHJhd0luaXQgPSB2dWVEZW1pLnVucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHR5cGUgPSBndWVzc1NlcmlhbGl6ZXJUeXBlKHJhd0luaXQpO1xuICBjb25zdCBzZXJpYWxpemVyID0gKF9hID0gb3B0aW9ucy5zZXJpYWxpemVyKSAhPSBudWxsID8gX2EgOiBTdG9yYWdlU2VyaWFsaXplcnNbdHlwZV07XG4gIGNvbnN0IHsgcGF1c2U6IHBhdXNlV2F0Y2gsIHJlc3VtZTogcmVzdW1lV2F0Y2ggfSA9IHNoYXJlZC5wYXVzYWJsZVdhdGNoKGRhdGEsICgpID0+IHdyaXRlKGRhdGEudmFsdWUpLCB7IGZsdXNoLCBkZWVwLCBldmVudEZpbHRlciB9KTtcbiAgaWYgKHdpbmRvdyAmJiBsaXN0ZW5Ub1N0b3JhZ2VDaGFuZ2VzKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInN0b3JhZ2VcIiwgdXBkYXRlKTtcbiAgdXBkYXRlKCk7XG4gIHJldHVybiBkYXRhO1xuICBmdW5jdGlvbiB3cml0ZSh2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2ID09IG51bGwpXG4gICAgICAgIHN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgZWxzZVxuICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBzZXJpYWxpemVyLndyaXRlKHYpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZWFkKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleSAhPT0ga2V5KVxuICAgICAgcmV0dXJuO1xuICAgIHBhdXNlV2F0Y2goKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSBldmVudCA/IGV2ZW50Lm5ld1ZhbHVlIDogc3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBpZiAocmF3VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAod3JpdGVEZWZhdWx0cyAmJiByYXdJbml0ICE9PSBudWxsKVxuICAgICAgICAgIHN0b3JhZ2Uuc2V0SXRlbShrZXksIHNlcmlhbGl6ZXIud3JpdGUocmF3SW5pdCkpO1xuICAgICAgICByZXR1cm4gcmF3SW5pdDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhd1ZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyLnJlYWQocmF3VmFsdWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9uRXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3VtZVdhdGNoKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZShldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5rZXkgIT09IGtleSlcbiAgICAgIHJldHVybjtcbiAgICBkYXRhLnZhbHVlID0gcmVhZChldmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlUHJlZmVycmVkRGFyayhvcHRpb25zKSB7XG4gIHJldHVybiB1c2VNZWRpYVF1ZXJ5KFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiLCBvcHRpb25zKTtcbn1cblxudmFyIF9fZGVmUHJvcCRoID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkaiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGogPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRqID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkaCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkaChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkaCA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGouY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRoKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRqKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRqKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGouY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGgoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VDb2xvck1vZGUob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzZWxlY3RvciA9IFwiaHRtbFwiLFxuICAgIGF0dHJpYnV0ZSA9IFwiY2xhc3NcIixcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIHN0b3JhZ2UsXG4gICAgc3RvcmFnZUtleSA9IFwidnVldXNlLWNvbG9yLXNjaGVtZVwiLFxuICAgIGxpc3RlblRvU3RvcmFnZUNoYW5nZXMgPSB0cnVlLFxuICAgIHN0b3JhZ2VSZWYsXG4gICAgZW1pdEF1dG9cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG1vZGVzID0gX19zcHJlYWRWYWx1ZXMkaCh7XG4gICAgYXV0bzogXCJcIixcbiAgICBsaWdodDogXCJsaWdodFwiLFxuICAgIGRhcms6IFwiZGFya1wiXG4gIH0sIG9wdGlvbnMubW9kZXMgfHwge30pO1xuICBjb25zdCBwcmVmZXJyZWREYXJrID0gdXNlUHJlZmVycmVkRGFyayh7IHdpbmRvdyB9KTtcbiAgY29uc3QgcHJlZmVycmVkTW9kZSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gcHJlZmVycmVkRGFyay52YWx1ZSA/IFwiZGFya1wiIDogXCJsaWdodFwiKTtcbiAgY29uc3Qgc3RvcmUgPSBzdG9yYWdlUmVmIHx8IChzdG9yYWdlS2V5ID09IG51bGwgPyB2dWVEZW1pLnJlZihcImF1dG9cIikgOiB1c2VTdG9yYWdlKHN0b3JhZ2VLZXksIFwiYXV0b1wiLCBzdG9yYWdlLCB7IHdpbmRvdywgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcyB9KSk7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHN0b3JlLnZhbHVlID09PSBcImF1dG9cIiAmJiAhZW1pdEF1dG8gPyBwcmVmZXJyZWRNb2RlLnZhbHVlIDogc3RvcmUudmFsdWU7XG4gICAgfSxcbiAgICBzZXQodikge1xuICAgICAgc3RvcmUudmFsdWUgPSB2O1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHVwZGF0ZUhUTUxBdHRycyA9IGdldFNTUkhhbmRsZXIoXCJ1cGRhdGVIVE1MQXR0cnNcIiwgKHNlbGVjdG9yMiwgYXR0cmlidXRlMiwgdmFsdWUpID0+IHtcbiAgICBjb25zdCBlbCA9IHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IyKTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChhdHRyaWJ1dGUyID09PSBcImNsYXNzXCIpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZS5zcGxpdCgvXFxzL2cpO1xuICAgICAgT2JqZWN0LnZhbHVlcyhtb2RlcykuZmxhdE1hcCgoaSkgPT4gKGkgfHwgXCJcIikuc3BsaXQoL1xccy9nKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnQuaW5jbHVkZXModikpXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCh2KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUodik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZTIsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBmdW5jdGlvbiBkZWZhdWx0T25DaGFuZ2VkKG1vZGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzb2x2ZWRNb2RlID0gbW9kZSA9PT0gXCJhdXRvXCIgPyBwcmVmZXJyZWRNb2RlLnZhbHVlIDogbW9kZTtcbiAgICB1cGRhdGVIVE1MQXR0cnMoc2VsZWN0b3IsIGF0dHJpYnV0ZSwgKF9hID0gbW9kZXNbcmVzb2x2ZWRNb2RlXSkgIT0gbnVsbCA/IF9hIDogcmVzb2x2ZWRNb2RlKTtcbiAgfVxuICBmdW5jdGlvbiBvbkNoYW5nZWQobW9kZSkge1xuICAgIGlmIChvcHRpb25zLm9uQ2hhbmdlZClcbiAgICAgIG9wdGlvbnMub25DaGFuZ2VkKG1vZGUsIGRlZmF1bHRPbkNoYW5nZWQpO1xuICAgIGVsc2VcbiAgICAgIGRlZmF1bHRPbkNoYW5nZWQobW9kZSk7XG4gIH1cbiAgdnVlRGVtaS53YXRjaChzdGF0ZSwgb25DaGFuZ2VkLCB7IGZsdXNoOiBcInBvc3RcIiwgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICBzaGFyZWQudHJ5T25Nb3VudGVkKCgpID0+IG9uQ2hhbmdlZChzdGF0ZS52YWx1ZSkpO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbmZpcm1EaWFsb2cocmV2ZWFsZWQgPSB2dWVEZW1pLnJlZihmYWxzZSkpIHtcbiAgY29uc3QgY29uZmlybUhvb2sgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IGNhbmNlbEhvb2sgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IHJldmVhbEhvb2sgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGxldCBfcmVzb2x2ZSA9IHNoYXJlZC5ub29wO1xuICBjb25zdCByZXZlYWwgPSAoZGF0YSkgPT4ge1xuICAgIHJldmVhbEhvb2sudHJpZ2dlcihkYXRhKTtcbiAgICByZXZlYWxlZC52YWx1ZSA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGNvbmZpcm0gPSAoZGF0YSkgPT4ge1xuICAgIHJldmVhbGVkLnZhbHVlID0gZmFsc2U7XG4gICAgY29uZmlybUhvb2sudHJpZ2dlcihkYXRhKTtcbiAgICBfcmVzb2x2ZSh7IGRhdGEsIGlzQ2FuY2VsZWQ6IGZhbHNlIH0pO1xuICB9O1xuICBjb25zdCBjYW5jZWwgPSAoZGF0YSkgPT4ge1xuICAgIHJldmVhbGVkLnZhbHVlID0gZmFsc2U7XG4gICAgY2FuY2VsSG9vay50cmlnZ2VyKGRhdGEpO1xuICAgIF9yZXNvbHZlKHsgZGF0YSwgaXNDYW5jZWxlZDogdHJ1ZSB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc1JldmVhbGVkOiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHJldmVhbGVkLnZhbHVlKSxcbiAgICByZXZlYWwsXG4gICAgY29uZmlybSxcbiAgICBjYW5jZWwsXG4gICAgb25SZXZlYWw6IHJldmVhbEhvb2sub24sXG4gICAgb25Db25maXJtOiBjb25maXJtSG9vay5vbixcbiAgICBvbkNhbmNlbDogY2FuY2VsSG9vay5vblxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VDc3NWYXIocHJvcCwgdGFyZ2V0LCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csIGluaXRpYWxWYWx1ZSA9IFwiXCIgfSA9IHt9KSB7XG4gIGNvbnN0IHZhcmlhYmxlID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlKTtcbiAgY29uc3QgZWxSZWYgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHVucmVmRWxlbWVudCh0YXJnZXQpIHx8ICgoX2EgPSB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmRvY3VtZW50RWxlbWVudCk7XG4gIH0pO1xuICB2dWVEZW1pLndhdGNoKFtlbFJlZiwgKCkgPT4gdnVlRGVtaS51bnJlZihwcm9wKV0sIChbZWwsIHByb3AyXSkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAoZWwgJiYgd2luZG93KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChfYSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3AyKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRyaW0oKTtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWUgfHwgaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIHZ1ZURlbWkud2F0Y2godmFyaWFibGUsICh2YWwpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKChfYSA9IGVsUmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc3R5bGUpXG4gICAgICBlbFJlZi52YWx1ZS5zdHlsZS5zZXRQcm9wZXJ0eSh2dWVEZW1pLnVucmVmKHByb3ApLCB2YWwpO1xuICB9KTtcbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1c2VDdXJyZW50RWxlbWVudCgpIHtcbiAgY29uc3Qgdm0gPSB2dWVEZW1pLmdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBjb25zdCBjb3VudCA9IHZ1ZURlbWkucmVmKDApO1xuICB2dWVEZW1pLm9uVXBkYXRlZCgoKSA9PiB7XG4gICAgY291bnQudmFsdWUgKz0gMTtcbiAgfSk7XG4gIHZ1ZURlbWkub25Nb3VudGVkKCgpID0+IHtcbiAgICBjb3VudC52YWx1ZSArPSAxO1xuICB9KTtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvdW50LnZhbHVlO1xuICAgIHJldHVybiB2bS5wcm94eS4kZWw7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VDeWNsZUxpc3QobGlzdCwgb3B0aW9ucykge1xuICB2YXIgX2E7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5zaGFsbG93UmVmKChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuaW5pdGlhbFZhbHVlKSAhPSBudWxsID8gX2EgOiBsaXN0WzBdKTtcbiAgY29uc3QgaW5kZXggPSB2dWVEZW1pLmNvbXB1dGVkKHtcbiAgICBnZXQoKSB7XG4gICAgICB2YXIgX2EyO1xuICAgICAgbGV0IGluZGV4MiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldEluZGV4T2YpID8gb3B0aW9ucy5nZXRJbmRleE9mKHN0YXRlLnZhbHVlLCBsaXN0KSA6IGxpc3QuaW5kZXhPZihzdGF0ZS52YWx1ZSk7XG4gICAgICBpZiAoaW5kZXgyIDwgMClcbiAgICAgICAgaW5kZXgyID0gKF9hMiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZmFsbGJhY2tJbmRleCkgIT0gbnVsbCA/IF9hMiA6IDA7XG4gICAgICByZXR1cm4gaW5kZXgyO1xuICAgIH0sXG4gICAgc2V0KHYpIHtcbiAgICAgIHNldCh2KTtcbiAgICB9XG4gIH0pO1xuICBmdW5jdGlvbiBzZXQoaSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGluZGV4MiA9IChpICUgbGVuZ3RoICsgbGVuZ3RoKSAlIGxlbmd0aDtcbiAgICBjb25zdCB2YWx1ZSA9IGxpc3RbaW5kZXgyXTtcbiAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBmdW5jdGlvbiBzaGlmdChkZWx0YSA9IDEpIHtcbiAgICByZXR1cm4gc2V0KGluZGV4LnZhbHVlICsgZGVsdGEpO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQobiA9IDEpIHtcbiAgICByZXR1cm4gc2hpZnQobik7XG4gIH1cbiAgZnVuY3Rpb24gcHJldihuID0gMSkge1xuICAgIHJldHVybiBzaGlmdCgtbik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZSxcbiAgICBpbmRleCxcbiAgICBuZXh0LFxuICAgIHByZXZcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCRnID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkNyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDcgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRpID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kaSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJGcgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJGcob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJGcgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRpLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkZyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkaSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkaShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRpLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCRnKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkNyA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDcoYSwgX19nZXRPd25Qcm9wRGVzY3MkNyhiKSk7XG5mdW5jdGlvbiB1c2VEYXJrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdmFsdWVEYXJrID0gXCJkYXJrXCIsXG4gICAgdmFsdWVMaWdodCA9IFwiXCIsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgbW9kZSA9IHVzZUNvbG9yTW9kZShfX3NwcmVhZFByb3BzJDcoX19zcHJlYWRWYWx1ZXMkZyh7fSwgb3B0aW9ucyksIHtcbiAgICBvbkNoYW5nZWQ6IChtb2RlMiwgZGVmYXVsdEhhbmRsZXIpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGlmIChvcHRpb25zLm9uQ2hhbmdlZClcbiAgICAgICAgKF9hID0gb3B0aW9ucy5vbkNoYW5nZWQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIG1vZGUyID09PSBcImRhcmtcIik7XG4gICAgICBlbHNlXG4gICAgICAgIGRlZmF1bHRIYW5kbGVyKG1vZGUyKTtcbiAgICB9LFxuICAgIG1vZGVzOiB7XG4gICAgICBkYXJrOiB2YWx1ZURhcmssXG4gICAgICBsaWdodDogdmFsdWVMaWdodFxuICAgIH1cbiAgfSkpO1xuICBjb25zdCBwcmVmZXJyZWREYXJrID0gdXNlUHJlZmVycmVkRGFyayh7IHdpbmRvdyB9KTtcbiAgY29uc3QgaXNEYXJrID0gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIG1vZGUudmFsdWUgPT09IFwiZGFya1wiO1xuICAgIH0sXG4gICAgc2V0KHYpIHtcbiAgICAgIGlmICh2ID09PSBwcmVmZXJyZWREYXJrLnZhbHVlKVxuICAgICAgICBtb2RlLnZhbHVlID0gXCJhdXRvXCI7XG4gICAgICBlbHNlXG4gICAgICAgIG1vZGUudmFsdWUgPSB2ID8gXCJkYXJrXCIgOiBcImxpZ2h0XCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzRGFyaztcbn1cblxuY29uc3QgZm5DbG9uZSA9ICh2KSA9PiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHYpKTtcbmNvbnN0IGZuQnlwYXNzID0gKHYpID0+IHY7XG5jb25zdCBmblNldFNvdXJjZSA9IChzb3VyY2UsIHZhbHVlKSA9PiBzb3VyY2UudmFsdWUgPSB2YWx1ZTtcbmZ1bmN0aW9uIGRlZmF1bHREdW1wKGNsb25lKSB7XG4gIHJldHVybiBjbG9uZSA/IHNoYXJlZC5pc0Z1bmN0aW9uKGNsb25lKSA/IGNsb25lIDogZm5DbG9uZSA6IGZuQnlwYXNzO1xufVxuZnVuY3Rpb24gZGVmYXVsdFBhcnNlKGNsb25lKSB7XG4gIHJldHVybiBjbG9uZSA/IHNoYXJlZC5pc0Z1bmN0aW9uKGNsb25lKSA/IGNsb25lIDogZm5DbG9uZSA6IGZuQnlwYXNzO1xufVxuZnVuY3Rpb24gdXNlTWFudWFsUmVmSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY2xvbmUgPSBmYWxzZSxcbiAgICBkdW1wID0gZGVmYXVsdER1bXAoY2xvbmUpLFxuICAgIHBhcnNlID0gZGVmYXVsdFBhcnNlKGNsb25lKSxcbiAgICBzZXRTb3VyY2UgPSBmblNldFNvdXJjZVxuICB9ID0gb3B0aW9ucztcbiAgZnVuY3Rpb24gX2NyZWF0ZUhpc3RvcnlSZWNvcmQoKSB7XG4gICAgcmV0dXJuIHZ1ZURlbWkubWFya1Jhdyh7XG4gICAgICBzbmFwc2hvdDogZHVtcChzb3VyY2UudmFsdWUpLFxuICAgICAgdGltZXN0YW1wOiBzaGFyZWQudGltZXN0YW1wKClcbiAgICB9KTtcbiAgfVxuICBjb25zdCBsYXN0ID0gdnVlRGVtaS5yZWYoX2NyZWF0ZUhpc3RvcnlSZWNvcmQoKSk7XG4gIGNvbnN0IHVuZG9TdGFjayA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgY29uc3QgcmVkb1N0YWNrID0gdnVlRGVtaS5yZWYoW10pO1xuICBjb25zdCBfc2V0U291cmNlID0gKHJlY29yZCkgPT4ge1xuICAgIHNldFNvdXJjZShzb3VyY2UsIHBhcnNlKHJlY29yZC5zbmFwc2hvdCkpO1xuICAgIGxhc3QudmFsdWUgPSByZWNvcmQ7XG4gIH07XG4gIGNvbnN0IGNvbW1pdCA9ICgpID0+IHtcbiAgICB1bmRvU3RhY2sudmFsdWUudW5zaGlmdChsYXN0LnZhbHVlKTtcbiAgICBsYXN0LnZhbHVlID0gX2NyZWF0ZUhpc3RvcnlSZWNvcmQoKTtcbiAgICBpZiAob3B0aW9ucy5jYXBhY2l0eSAmJiB1bmRvU3RhY2sudmFsdWUubGVuZ3RoID4gb3B0aW9ucy5jYXBhY2l0eSlcbiAgICAgIHVuZG9TdGFjay52YWx1ZS5zcGxpY2Uob3B0aW9ucy5jYXBhY2l0eSwgSW5maW5pdHkpO1xuICAgIGlmIChyZWRvU3RhY2sudmFsdWUubGVuZ3RoKVxuICAgICAgcmVkb1N0YWNrLnZhbHVlLnNwbGljZSgwLCByZWRvU3RhY2sudmFsdWUubGVuZ3RoKTtcbiAgfTtcbiAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgdW5kb1N0YWNrLnZhbHVlLnNwbGljZSgwLCB1bmRvU3RhY2sudmFsdWUubGVuZ3RoKTtcbiAgICByZWRvU3RhY2sudmFsdWUuc3BsaWNlKDAsIHJlZG9TdGFjay52YWx1ZS5sZW5ndGgpO1xuICB9O1xuICBjb25zdCB1bmRvID0gKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gdW5kb1N0YWNrLnZhbHVlLnNoaWZ0KCk7XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICByZWRvU3RhY2sudmFsdWUudW5zaGlmdChsYXN0LnZhbHVlKTtcbiAgICAgIF9zZXRTb3VyY2Uoc3RhdGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVkbyA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlZG9TdGFjay52YWx1ZS5zaGlmdCgpO1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgdW5kb1N0YWNrLnZhbHVlLnVuc2hpZnQobGFzdC52YWx1ZSk7XG4gICAgICBfc2V0U291cmNlKHN0YXRlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIF9zZXRTb3VyY2UobGFzdC52YWx1ZSk7XG4gIH07XG4gIGNvbnN0IGhpc3RvcnkgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IFtsYXN0LnZhbHVlLCAuLi51bmRvU3RhY2sudmFsdWVdKTtcbiAgY29uc3QgY2FuVW5kbyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gdW5kb1N0YWNrLnZhbHVlLmxlbmd0aCA+IDApO1xuICBjb25zdCBjYW5SZWRvID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiByZWRvU3RhY2sudmFsdWUubGVuZ3RoID4gMCk7XG4gIHJldHVybiB7XG4gICAgc291cmNlLFxuICAgIHVuZG9TdGFjayxcbiAgICByZWRvU3RhY2ssXG4gICAgbGFzdCxcbiAgICBoaXN0b3J5LFxuICAgIGNhblVuZG8sXG4gICAgY2FuUmVkbyxcbiAgICBjbGVhcixcbiAgICBjb21taXQsXG4gICAgcmVzZXQsXG4gICAgdW5kbyxcbiAgICByZWRvXG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkZiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDYgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ2ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRoID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkaCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGggPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRmID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRmKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRmID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkaC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGYoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGgpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGgoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kaC5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkZihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDYgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ2KGEsIF9fZ2V0T3duUHJvcERlc2NzJDYoYikpO1xuZnVuY3Rpb24gdXNlUmVmSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZGVlcCA9IGZhbHNlLFxuICAgIGZsdXNoID0gXCJwcmVcIixcbiAgICBldmVudEZpbHRlclxuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGV2ZW50RmlsdGVyOiBjb21wb3NlZEZpbHRlcixcbiAgICBwYXVzZSxcbiAgICByZXN1bWU6IHJlc3VtZVRyYWNraW5nLFxuICAgIGlzQWN0aXZlOiBpc1RyYWNraW5nXG4gIH0gPSBzaGFyZWQucGF1c2FibGVGaWx0ZXIoZXZlbnRGaWx0ZXIpO1xuICBjb25zdCB7XG4gICAgaWdub3JlVXBkYXRlcyxcbiAgICBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzLFxuICAgIHN0b3BcbiAgfSA9IHNoYXJlZC53YXRjaElnbm9yYWJsZShzb3VyY2UsIGNvbW1pdCwgeyBkZWVwLCBmbHVzaCwgZXZlbnRGaWx0ZXI6IGNvbXBvc2VkRmlsdGVyIH0pO1xuICBmdW5jdGlvbiBzZXRTb3VyY2Uoc291cmNlMiwgdmFsdWUpIHtcbiAgICBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzKCk7XG4gICAgaWdub3JlVXBkYXRlcygoKSA9PiB7XG4gICAgICBzb3VyY2UyLnZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWFudWFsSGlzdG9yeSA9IHVzZU1hbnVhbFJlZkhpc3Rvcnkoc291cmNlLCBfX3NwcmVhZFByb3BzJDYoX19zcHJlYWRWYWx1ZXMkZih7fSwgb3B0aW9ucyksIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfHwgZGVlcCwgc2V0U291cmNlIH0pKTtcbiAgY29uc3QgeyBjbGVhciwgY29tbWl0OiBtYW51YWxDb21taXQgfSA9IG1hbnVhbEhpc3Rvcnk7XG4gIGZ1bmN0aW9uIGNvbW1pdCgpIHtcbiAgICBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzKCk7XG4gICAgbWFudWFsQ29tbWl0KCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKGNvbW1pdE5vdykge1xuICAgIHJlc3VtZVRyYWNraW5nKCk7XG4gICAgaWYgKGNvbW1pdE5vdylcbiAgICAgIGNvbW1pdCgpO1xuICB9XG4gIGZ1bmN0aW9uIGJhdGNoKGZuKSB7XG4gICAgbGV0IGNhbmNlbGVkID0gZmFsc2U7XG4gICAgY29uc3QgY2FuY2VsID0gKCkgPT4gY2FuY2VsZWQgPSB0cnVlO1xuICAgIGlnbm9yZVVwZGF0ZXMoKCkgPT4ge1xuICAgICAgZm4oY2FuY2VsKTtcbiAgICB9KTtcbiAgICBpZiAoIWNhbmNlbGVkKVxuICAgICAgY29tbWl0KCk7XG4gIH1cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBzdG9wKCk7XG4gICAgY2xlYXIoKTtcbiAgfVxuICByZXR1cm4gX19zcHJlYWRQcm9wcyQ2KF9fc3ByZWFkVmFsdWVzJGYoe30sIG1hbnVhbEhpc3RvcnkpLCB7XG4gICAgaXNUcmFja2luZyxcbiAgICBwYXVzZSxcbiAgICByZXN1bWUsXG4gICAgY29tbWl0LFxuICAgIGJhdGNoLFxuICAgIGRpc3Bvc2VcbiAgfSk7XG59XG5cbnZhciBfX2RlZlByb3AkZSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDUgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ1ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRnID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkZyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGcgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRlID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRlKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRlID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkZy5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGUoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGcpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGcoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kZy5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkZShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDUgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ1KGEsIF9fZ2V0T3duUHJvcERlc2NzJDUoYikpO1xuZnVuY3Rpb24gdXNlRGVib3VuY2VkUmVmSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zLmRlYm91bmNlID8gc2hhcmVkLmRlYm91bmNlRmlsdGVyKG9wdGlvbnMuZGVib3VuY2UpIDogdm9pZCAwO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlUmVmSGlzdG9yeShzb3VyY2UsIF9fc3ByZWFkUHJvcHMkNShfX3NwcmVhZFZhbHVlcyRlKHt9LCBvcHRpb25zKSwgeyBldmVudEZpbHRlcjogZmlsdGVyIH0pKTtcbiAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJGUoe30sIGhpc3RvcnkpO1xufVxuXG5mdW5jdGlvbiB1c2VEZXZpY2VNb3Rpb24ob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93LFxuICAgIGV2ZW50RmlsdGVyID0gc2hhcmVkLmJ5cGFzc0ZpbHRlclxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgYWNjZWxlcmF0aW9uID0gdnVlRGVtaS5yZWYoeyB4OiBudWxsLCB5OiBudWxsLCB6OiBudWxsIH0pO1xuICBjb25zdCByb3RhdGlvblJhdGUgPSB2dWVEZW1pLnJlZih7IGFscGhhOiBudWxsLCBiZXRhOiBudWxsLCBnYW1tYTogbnVsbCB9KTtcbiAgY29uc3QgaW50ZXJ2YWwgPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IHZ1ZURlbWkucmVmKHtcbiAgICB4OiBudWxsLFxuICAgIHk6IG51bGwsXG4gICAgejogbnVsbFxuICB9KTtcbiAgaWYgKHdpbmRvdykge1xuICAgIGNvbnN0IG9uRGV2aWNlTW90aW9uID0gc2hhcmVkLmNyZWF0ZUZpbHRlcldyYXBwZXIoZXZlbnRGaWx0ZXIsIChldmVudCkgPT4ge1xuICAgICAgYWNjZWxlcmF0aW9uLnZhbHVlID0gZXZlbnQuYWNjZWxlcmF0aW9uO1xuICAgICAgYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS52YWx1ZSA9IGV2ZW50LmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHk7XG4gICAgICByb3RhdGlvblJhdGUudmFsdWUgPSBldmVudC5yb3RhdGlvblJhdGU7XG4gICAgICBpbnRlcnZhbC52YWx1ZSA9IGV2ZW50LmludGVydmFsO1xuICAgIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImRldmljZW1vdGlvblwiLCBvbkRldmljZU1vdGlvbik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhY2NlbGVyYXRpb24sXG4gICAgYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSxcbiAgICByb3RhdGlvblJhdGUsXG4gICAgaW50ZXJ2YWxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRGV2aWNlT3JpZW50YXRpb24ob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKHdpbmRvdyAmJiBcIkRldmljZU9yaWVudGF0aW9uRXZlbnRcIiBpbiB3aW5kb3cpO1xuICBjb25zdCBpc0Fic29sdXRlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBhbHBoYSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBiZXRhID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IGdhbW1hID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGlmICh3aW5kb3cgJiYgaXNTdXBwb3J0ZWQpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJkZXZpY2VvcmllbnRhdGlvblwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlzQWJzb2x1dGUudmFsdWUgPSBldmVudC5hYnNvbHV0ZTtcbiAgICAgIGFscGhhLnZhbHVlID0gZXZlbnQuYWxwaGE7XG4gICAgICBiZXRhLnZhbHVlID0gZXZlbnQuYmV0YTtcbiAgICAgIGdhbW1hLnZhbHVlID0gZXZlbnQuZ2FtbWE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBpc0Fic29sdXRlLFxuICAgIGFscGhhLFxuICAgIGJldGEsXG4gICAgZ2FtbWFcbiAgfTtcbn1cblxuY29uc3QgREVWSUNFX1BJWEVMX1JBVElPX1NDQUxFUyA9IFtcbiAgMSxcbiAgMS4zMjUsXG4gIDEuNCxcbiAgMS41LFxuICAxLjgsXG4gIDIsXG4gIDIuNCxcbiAgMi41LFxuICAyLjc1LFxuICAzLFxuICAzLjUsXG4gIDRcbl07XG5mdW5jdGlvbiB1c2VEZXZpY2VQaXhlbFJhdGlvKHtcbiAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xufSA9IHt9KSB7XG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBpeGVsUmF0aW86IHZ1ZURlbWkucmVmKDEpXG4gICAgfTtcbiAgfVxuICBjb25zdCBwaXhlbFJhdGlvID0gdnVlRGVtaS5yZWYod2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xuICBjb25zdCBoYW5kbGVEZXZpY2VQaXhlbFJhdGlvID0gKCkgPT4ge1xuICAgIHBpeGVsUmF0aW8udmFsdWUgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgfTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwicmVzaXplXCIsIGhhbmRsZURldmljZVBpeGVsUmF0aW8sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgREVWSUNFX1BJWEVMX1JBVElPX1NDQUxFUy5mb3JFYWNoKChkcHB4KSA9PiB7XG4gICAgY29uc3QgbXFsTWluID0gdXNlTWVkaWFRdWVyeShgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246ICR7ZHBweH1kcHB4KWApO1xuICAgIGNvbnN0IG1xbE1heCA9IHVzZU1lZGlhUXVlcnkoYHNjcmVlbiBhbmQgKG1heC1yZXNvbHV0aW9uOiAke2RwcHh9ZHBweClgKTtcbiAgICB2dWVEZW1pLndhdGNoKFttcWxNaW4sIG1xbE1heF0sIGhhbmRsZURldmljZVBpeGVsUmF0aW8pO1xuICB9KTtcbiAgcmV0dXJuIHsgcGl4ZWxSYXRpbyB9O1xufVxuXG5mdW5jdGlvbiB1c2VQZXJtaXNzaW9uKHBlcm1pc3Npb25EZXNjLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRyb2xzID0gZmFsc2UsXG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvclxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKG5hdmlnYXRvciAmJiBcInBlcm1pc3Npb25zXCIgaW4gbmF2aWdhdG9yKTtcbiAgbGV0IHBlcm1pc3Npb25TdGF0dXM7XG4gIGNvbnN0IGRlc2MgPSB0eXBlb2YgcGVybWlzc2lvbkRlc2MgPT09IFwic3RyaW5nXCIgPyB7IG5hbWU6IHBlcm1pc3Npb25EZXNjIH0gOiBwZXJtaXNzaW9uRGVzYztcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICBpZiAocGVybWlzc2lvblN0YXR1cylcbiAgICAgIHN0YXRlLnZhbHVlID0gcGVybWlzc2lvblN0YXR1cy5zdGF0ZTtcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBzaGFyZWQuY3JlYXRlU2luZ2xldG9uUHJvbWlzZShhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIXBlcm1pc3Npb25TdGF0dXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBlcm1pc3Npb25TdGF0dXMgPSBhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoZGVzYyk7XG4gICAgICAgIHVzZUV2ZW50TGlzdGVuZXIocGVybWlzc2lvblN0YXR1cywgXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgICAgICBvbkNoYW5nZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGF0ZS52YWx1ZSA9IFwicHJvbXB0XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwZXJtaXNzaW9uU3RhdHVzO1xuICB9KTtcbiAgcXVlcnkoKTtcbiAgaWYgKGNvbnRyb2xzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlLFxuICAgICAgaXNTdXBwb3J0ZWQsXG4gICAgICBxdWVyeVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZURldmljZXNMaXN0KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvcixcbiAgICByZXF1ZXN0UGVybWlzc2lvbnMgPSBmYWxzZSxcbiAgICBjb25zdHJhaW50cyA9IHsgYXVkaW86IHRydWUsIHZpZGVvOiB0cnVlIH0sXG4gICAgb25VcGRhdGVkXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBkZXZpY2VzID0gdnVlRGVtaS5yZWYoW10pO1xuICBjb25zdCB2aWRlb0lucHV0cyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gZGV2aWNlcy52YWx1ZS5maWx0ZXIoKGkpID0+IGkua2luZCA9PT0gXCJ2aWRlb2lucHV0XCIpKTtcbiAgY29uc3QgYXVkaW9JbnB1dHMgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGRldmljZXMudmFsdWUuZmlsdGVyKChpKSA9PiBpLmtpbmQgPT09IFwiYXVkaW9pbnB1dFwiKSk7XG4gIGNvbnN0IGF1ZGlvT3V0cHV0cyA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gZGV2aWNlcy52YWx1ZS5maWx0ZXIoKGkpID0+IGkua2luZCA9PT0gXCJhdWRpb291dHB1dFwiKSk7XG4gIGxldCBpc1N1cHBvcnRlZCA9IGZhbHNlO1xuICBjb25zdCBwZXJtaXNzaW9uR3JhbnRlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgZGV2aWNlcy52YWx1ZSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpO1xuICAgIG9uVXBkYXRlZCA9PSBudWxsID8gdm9pZCAwIDogb25VcGRhdGVkKGRldmljZXMudmFsdWUpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGVuc3VyZVBlcm1pc3Npb25zKCkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHBlcm1pc3Npb25HcmFudGVkLnZhbHVlKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgeyBzdGF0ZSwgcXVlcnkgfSA9IHVzZVBlcm1pc3Npb24oXCJjYW1lcmFcIiwgeyBjb250cm9sczogdHJ1ZSB9KTtcbiAgICBhd2FpdCBxdWVyeSgpO1xuICAgIGlmIChzdGF0ZS52YWx1ZSAhPT0gXCJncmFudGVkXCIpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKTtcbiAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIHBlcm1pc3Npb25HcmFudGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVybWlzc2lvbkdyYW50ZWQudmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGVybWlzc2lvbkdyYW50ZWQudmFsdWU7XG4gIH1cbiAgaWYgKG5hdmlnYXRvcikge1xuICAgIGlzU3VwcG9ydGVkID0gQm9vbGVhbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzICYmIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcyk7XG4gICAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgICBpZiAocmVxdWVzdFBlcm1pc3Npb25zKVxuICAgICAgICBlbnN1cmVQZXJtaXNzaW9ucygpO1xuICAgICAgdXNlRXZlbnRMaXN0ZW5lcihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLCBcImRldmljZWNoYW5nZVwiLCB1cGRhdGUpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgZGV2aWNlcyxcbiAgICBlbnN1cmVQZXJtaXNzaW9ucyxcbiAgICBwZXJtaXNzaW9uR3JhbnRlZCxcbiAgICB2aWRlb0lucHV0cyxcbiAgICBhdWRpb0lucHV0cyxcbiAgICBhdWRpb091dHB1dHMsXG4gICAgaXNTdXBwb3J0ZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRGlzcGxheU1lZGlhKG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCBlbmFibGVkID0gdnVlRGVtaS5yZWYoKF9hID0gb3B0aW9ucy5lbmFibGVkKSAhPSBudWxsID8gX2EgOiBmYWxzZSk7XG4gIGNvbnN0IHZpZGVvID0gb3B0aW9ucy52aWRlbztcbiAgY29uc3QgYXVkaW8gPSBvcHRpb25zLmF1ZGlvO1xuICBjb25zdCB7IG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gQm9vbGVhbigoX2IgPSBuYXZpZ2F0b3IgPT0gbnVsbCA/IHZvaWQgMCA6IG5hdmlnYXRvci5tZWRpYURldmljZXMpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXREaXNwbGF5TWVkaWEpO1xuICBjb25zdCBjb25zdHJhaW50ID0geyBhdWRpbywgdmlkZW8gfTtcbiAgY29uc3Qgc3RyZWFtID0gdnVlRGVtaS5zaGFsbG93UmVmKCk7XG4gIGFzeW5jIGZ1bmN0aW9uIF9zdGFydCgpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkIHx8IHN0cmVhbS52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBzdHJlYW0udmFsdWUgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYShjb25zdHJhaW50KTtcbiAgICByZXR1cm4gc3RyZWFtLnZhbHVlO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIF9zdG9wKCkge1xuICAgIHZhciBfYTI7XG4gICAgKF9hMiA9IHN0cmVhbS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgc3RyZWFtLnZhbHVlID0gdm9pZCAwO1xuICB9XG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgX3N0b3AoKTtcbiAgICBlbmFibGVkLnZhbHVlID0gZmFsc2U7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgYXdhaXQgX3N0YXJ0KCk7XG4gICAgaWYgKHN0cmVhbS52YWx1ZSlcbiAgICAgIGVuYWJsZWQudmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiBzdHJlYW0udmFsdWU7XG4gIH1cbiAgdnVlRGVtaS53YXRjaChlbmFibGVkLCAodikgPT4ge1xuICAgIGlmICh2KVxuICAgICAgX3N0YXJ0KCk7XG4gICAgZWxzZVxuICAgICAgX3N0b3AoKTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgc3RyZWFtLFxuICAgIHN0YXJ0LFxuICAgIHN0b3AsXG4gICAgZW5hYmxlZFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VEb2N1bWVudFZpc2liaWxpdHkoeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCB9ID0ge30pIHtcbiAgaWYgKCFkb2N1bWVudClcbiAgICByZXR1cm4gdnVlRGVtaS5yZWYoXCJ2aXNpYmxlXCIpO1xuICBjb25zdCB2aXNpYmlsaXR5ID0gdnVlRGVtaS5yZWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsICgpID0+IHtcbiAgICB2aXNpYmlsaXR5LnZhbHVlID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICB9KTtcbiAgcmV0dXJuIHZpc2liaWxpdHk7XG59XG5cbnZhciBfX2RlZlByb3AkZCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDQgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRmID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkZiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGYgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRkKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRkID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkZi5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGQoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGYpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGYoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kZi5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkZChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDQgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ0KGEsIF9fZ2V0T3duUHJvcERlc2NzJDQoYikpO1xuZnVuY3Rpb24gdXNlRHJhZ2dhYmxlKHRhcmdldCwgb3B0aW9ucyA9IHt9KSB7XG4gIHZhciBfYSwgX2I7XG4gIGNvbnN0IGRyYWdnaW5nRWxlbWVudCA9IChfYSA9IG9wdGlvbnMuZHJhZ2dpbmdFbGVtZW50KSAhPSBudWxsID8gX2EgOiBkZWZhdWx0V2luZG93O1xuICBjb25zdCBwb3NpdGlvbiA9IHZ1ZURlbWkucmVmKChfYiA9IG9wdGlvbnMuaW5pdGlhbFZhbHVlKSAhPSBudWxsID8gX2IgOiB7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IHByZXNzZWREZWx0YSA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IGZpbHRlckV2ZW50ID0gKGUpID0+IHtcbiAgICBpZiAob3B0aW9ucy5wb2ludGVyVHlwZXMpXG4gICAgICByZXR1cm4gb3B0aW9ucy5wb2ludGVyVHlwZXMuaW5jbHVkZXMoZS5wb2ludGVyVHlwZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV2ZW50ID0gKGUpID0+IHtcbiAgICBpZiAodnVlRGVtaS51bnJlZihvcHRpb25zLnByZXZlbnREZWZhdWx0KSlcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodnVlRGVtaS51bnJlZihvcHRpb25zLnN0b3BQcm9wYWdhdGlvbikpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9O1xuICBjb25zdCBzdGFydCA9IChlKSA9PiB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoIWZpbHRlckV2ZW50KGUpKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh2dWVEZW1pLnVucmVmKG9wdGlvbnMuZXhhY3QpICYmIGUudGFyZ2V0ICE9PSB2dWVEZW1pLnVucmVmKHRhcmdldCkpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgcmVjdCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwb3MgPSB7XG4gICAgICB4OiBlLnBhZ2VYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogZS5wYWdlWSAtIHJlY3QudG9wXG4gICAgfTtcbiAgICBpZiAoKChfYTIgPSBvcHRpb25zLm9uU3RhcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChvcHRpb25zLCBwb3MsIGUpKSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm47XG4gICAgcHJlc3NlZERlbHRhLnZhbHVlID0gcG9zO1xuICAgIGhhbmRsZUV2ZW50KGUpO1xuICB9O1xuICBjb25zdCBtb3ZlID0gKGUpID0+IHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghZmlsdGVyRXZlbnQoZSkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFwcmVzc2VkRGVsdGEudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgcG9zaXRpb24udmFsdWUgPSB7XG4gICAgICB4OiBlLnBhZ2VYIC0gcHJlc3NlZERlbHRhLnZhbHVlLngsXG4gICAgICB5OiBlLnBhZ2VZIC0gcHJlc3NlZERlbHRhLnZhbHVlLnlcbiAgICB9O1xuICAgIChfYTIgPSBvcHRpb25zLm9uTW92ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG9wdGlvbnMsIHBvc2l0aW9uLnZhbHVlLCBlKTtcbiAgICBoYW5kbGVFdmVudChlKTtcbiAgfTtcbiAgY29uc3QgZW5kID0gKGUpID0+IHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghZmlsdGVyRXZlbnQoZSkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFwcmVzc2VkRGVsdGEudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgcHJlc3NlZERlbHRhLnZhbHVlID0gdm9pZCAwO1xuICAgIChfYTIgPSBvcHRpb25zLm9uRW5kKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwob3B0aW9ucywgcG9zaXRpb24udmFsdWUsIGUpO1xuICAgIGhhbmRsZUV2ZW50KGUpO1xuICB9O1xuICBpZiAoc2hhcmVkLmlzQ2xpZW50KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcmRvd25cIiwgc3RhcnQsIHRydWUpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoZHJhZ2dpbmdFbGVtZW50LCBcInBvaW50ZXJtb3ZlXCIsIG1vdmUsIHRydWUpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoZHJhZ2dpbmdFbGVtZW50LCBcInBvaW50ZXJ1cFwiLCBlbmQsIHRydWUpO1xuICB9XG4gIHJldHVybiBfX3NwcmVhZFByb3BzJDQoX19zcHJlYWRWYWx1ZXMkZCh7fSwgc2hhcmVkLnRvUmVmcyhwb3NpdGlvbikpLCB7XG4gICAgcG9zaXRpb24sXG4gICAgaXNEcmFnZ2luZzogdnVlRGVtaS5jb21wdXRlZCgoKSA9PiAhIXByZXNzZWREZWx0YS52YWx1ZSksXG4gICAgc3R5bGU6IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gYGxlZnQ6JHtwb3NpdGlvbi52YWx1ZS54fXB4O3RvcDoke3Bvc2l0aW9uLnZhbHVlLnl9cHg7YClcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZURyb3Bab25lKHRhcmdldCwgb25Ecm9wKSB7XG4gIGNvbnN0IGlzT3ZlckRyb3Bab25lID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBsZXQgY291bnRlciA9IDA7XG4gIGlmIChzaGFyZWQuaXNDbGllbnQpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJkcmFnZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY291bnRlciArPSAxO1xuICAgICAgaXNPdmVyRHJvcFpvbmUudmFsdWUgPSB0cnVlO1xuICAgIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImRyYWdvdmVyXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJkcmFnbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY291bnRlciAtPSAxO1xuICAgICAgaWYgKGNvdW50ZXIgPT09IDApXG4gICAgICAgIGlzT3ZlckRyb3Bab25lLnZhbHVlID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZHJvcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHZhciBfYSwgX2I7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY291bnRlciA9IDA7XG4gICAgICBpc092ZXJEcm9wWm9uZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKChfYiA9IChfYSA9IGV2ZW50LmRhdGFUcmFuc2ZlcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmZpbGVzKSAhPSBudWxsID8gX2IgOiBbXSk7XG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG9uRHJvcChudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb25Ecm9wKGZpbGVzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzT3ZlckRyb3Bab25lXG4gIH07XG59XG5cbnZhciBfX2dldE93blByb3BTeW1ib2xzJGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19vYmpSZXN0JDIgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCRlLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyRlKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRlKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSRlLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB1c2VSZXNpemVPYnNlcnZlcih0YXJnZXQsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IF9hLCBvYnNlcnZlck9wdGlvbnMgPSBfX29ialJlc3QkMihfYSwgW1wid2luZG93XCJdKTtcbiAgbGV0IG9ic2VydmVyO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHdpbmRvdyAmJiBcIlJlc2l6ZU9ic2VydmVyXCIgaW4gd2luZG93O1xuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgb2JzZXJ2ZXIgPSB2b2lkIDA7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdG9wV2F0Y2ggPSB2dWVEZW1pLndhdGNoKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLCAoZWwpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKGlzU3VwcG9ydGVkICYmIHdpbmRvdyAmJiBlbCkge1xuICAgICAgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgICB9XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlLCBmbHVzaDogXCJwb3N0XCIgfSk7XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHN0b3BXYXRjaCgpO1xuICB9O1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgc3RvcFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VFbGVtZW50Qm91bmRpbmcodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHJlc2V0ID0gdHJ1ZSxcbiAgICB3aW5kb3dSZXNpemUgPSB0cnVlLFxuICAgIHdpbmRvd1Njcm9sbCA9IHRydWUsXG4gICAgaW1tZWRpYXRlID0gdHJ1ZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaGVpZ2h0ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGJvdHRvbSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBsZWZ0ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IHJpZ2h0ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IHRvcCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCB3aWR0aCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCB4ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IHkgPSB2dWVEZW1pLnJlZigwKTtcbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGNvbnN0IGVsID0gdW5yZWZFbGVtZW50KHRhcmdldCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgIGhlaWdodC52YWx1ZSA9IDA7XG4gICAgICAgIGJvdHRvbS52YWx1ZSA9IDA7XG4gICAgICAgIGxlZnQudmFsdWUgPSAwO1xuICAgICAgICByaWdodC52YWx1ZSA9IDA7XG4gICAgICAgIHRvcC52YWx1ZSA9IDA7XG4gICAgICAgIHdpZHRoLnZhbHVlID0gMDtcbiAgICAgICAgeC52YWx1ZSA9IDA7XG4gICAgICAgIHkudmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGVpZ2h0LnZhbHVlID0gcmVjdC5oZWlnaHQ7XG4gICAgYm90dG9tLnZhbHVlID0gcmVjdC5ib3R0b207XG4gICAgbGVmdC52YWx1ZSA9IHJlY3QubGVmdDtcbiAgICByaWdodC52YWx1ZSA9IHJlY3QucmlnaHQ7XG4gICAgdG9wLnZhbHVlID0gcmVjdC50b3A7XG4gICAgd2lkdGgudmFsdWUgPSByZWN0LndpZHRoO1xuICAgIHgudmFsdWUgPSByZWN0Lng7XG4gICAgeS52YWx1ZSA9IHJlY3QueTtcbiAgfVxuICB1c2VSZXNpemVPYnNlcnZlcih0YXJnZXQsIHVwZGF0ZSk7XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksIChlbGUpID0+ICFlbGUgJiYgdXBkYXRlKCkpO1xuICBpZiAod2luZG93U2Nyb2xsKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdXBkYXRlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIGlmICh3aW5kb3dSZXNpemUpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB1cGRhdGUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZCgoKSA9PiB7XG4gICAgaWYgKGltbWVkaWF0ZSlcbiAgICAgIHVwZGF0ZSgpO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQsXG4gICAgYm90dG9tLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoLFxuICAgIHgsXG4gICAgeSxcbiAgICB1cGRhdGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlUmFmRm4oZm4sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW1tZWRpYXRlID0gdHJ1ZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc0FjdGl2ZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgbGV0IHJhZklkID0gbnVsbDtcbiAgZnVuY3Rpb24gbG9vcCgpIHtcbiAgICBpZiAoIWlzQWN0aXZlLnZhbHVlIHx8ICF3aW5kb3cpXG4gICAgICByZXR1cm47XG4gICAgZm4oKTtcbiAgICByYWZJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKCkge1xuICAgIGlmICghaXNBY3RpdmUudmFsdWUgJiYgd2luZG93KSB7XG4gICAgICBpc0FjdGl2ZS52YWx1ZSA9IHRydWU7XG4gICAgICBsb29wKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIGlzQWN0aXZlLnZhbHVlID0gZmFsc2U7XG4gICAgaWYgKHJhZklkICE9IG51bGwgJiYgd2luZG93KSB7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgcmFmSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoaW1tZWRpYXRlKVxuICAgIHJlc3VtZSgpO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UocGF1c2UpO1xuICByZXR1cm4ge1xuICAgIGlzQWN0aXZlLFxuICAgIHBhdXNlLFxuICAgIHJlc3VtZVxuICB9O1xufVxuXG52YXIgX19kZWZQcm9wJGMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRkID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkZCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGQgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRjID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRjKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRjID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkZC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGMoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGQpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGQoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kZC5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkYyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzZUVsZW1lbnRCeVBvaW50KG9wdGlvbnMpIHtcbiAgY29uc3QgZWxlbWVudCA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCB7IHgsIHkgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbnRyb2xzID0gdXNlUmFmRm4oKCkgPT4ge1xuICAgIGVsZW1lbnQudmFsdWUgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHZ1ZURlbWkudW5yZWYoeCksIHZ1ZURlbWkudW5yZWYoeSkpO1xuICB9KTtcbiAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJGMoe1xuICAgIGVsZW1lbnRcbiAgfSwgY29udHJvbHMpO1xufVxuXG5mdW5jdGlvbiB1c2VFbGVtZW50SG92ZXIoZWwpIHtcbiAgY29uc3QgaXNIb3ZlcmVkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICB1c2VFdmVudExpc3RlbmVyKGVsLCBcIm1vdXNlZW50ZXJcIiwgKCkgPT4gaXNIb3ZlcmVkLnZhbHVlID0gdHJ1ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoZWwsIFwibW91c2VsZWF2ZVwiLCAoKSA9PiBpc0hvdmVyZWQudmFsdWUgPSBmYWxzZSk7XG4gIHJldHVybiBpc0hvdmVyZWQ7XG59XG5cbmZ1bmN0aW9uIHVzZUVsZW1lbnRTaXplKHRhcmdldCwgaW5pdGlhbFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHdpZHRoID0gdnVlRGVtaS5yZWYoaW5pdGlhbFNpemUud2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSB2dWVEZW1pLnJlZihpbml0aWFsU2l6ZS5oZWlnaHQpO1xuICB1c2VSZXNpemVPYnNlcnZlcih0YXJnZXQsIChbZW50cnldKSA9PiB7XG4gICAgd2lkdGgudmFsdWUgPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICBoZWlnaHQudmFsdWUgPSBlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gIH0sIG9wdGlvbnMpO1xuICB2dWVEZW1pLndhdGNoKCgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLCAoZWxlKSA9PiB7XG4gICAgd2lkdGgudmFsdWUgPSBlbGUgPyBpbml0aWFsU2l6ZS53aWR0aCA6IDA7XG4gICAgaGVpZ2h0LnZhbHVlID0gZWxlID8gaW5pdGlhbFNpemUuaGVpZ2h0IDogMDtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZUVsZW1lbnRWaXNpYmlsaXR5KGVsZW1lbnQsIHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdywgc2Nyb2xsVGFyZ2V0IH0gPSB7fSkge1xuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCB0ZXN0Qm91bmRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgaWYgKCF2dWVEZW1pLnVucmVmKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50SXNWaXNpYmxlLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY3QgPSB2dWVEZW1pLnVucmVmKGVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgZWxlbWVudElzVmlzaWJsZS52YWx1ZSA9IHJlY3QudG9wIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiYgcmVjdC5sZWZ0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpICYmIHJlY3QuYm90dG9tID49IDAgJiYgcmVjdC5yaWdodCA+PSAwO1xuICAgIH1cbiAgfTtcbiAgc2hhcmVkLnRyeU9uTW91bnRlZCh0ZXN0Qm91bmRpbmcpO1xuICBpZiAod2luZG93KVxuICAgIHNoYXJlZC50cnlPbk1vdW50ZWQoKCkgPT4gdXNlRXZlbnRMaXN0ZW5lcih2dWVEZW1pLnVucmVmKHNjcm9sbFRhcmdldCkgfHwgd2luZG93LCBcInNjcm9sbFwiLCB0ZXN0Qm91bmRpbmcsIHsgY2FwdHVyZTogZmFsc2UsIHBhc3NpdmU6IHRydWUgfSkpO1xuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbn1cblxuY29uc3QgZXZlbnRzID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiB1c2VFdmVudEJ1cyhrZXkpIHtcbiAgY29uc3Qgc2NvcGUgPSB2dWVEZW1pLmdldEN1cnJlbnRTY29wZSgpO1xuICBmdW5jdGlvbiBvbihsaXN0ZW5lcikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBldmVudHMuZ2V0KGtleSkgfHwgW107XG4gICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBsaXN0ZW5lcnMpO1xuICAgIGNvbnN0IF9vZmYgPSAoKSA9PiBvZmYobGlzdGVuZXIpO1xuICAgIChfYSA9IHNjb3BlID09IG51bGwgPyB2b2lkIDAgOiBzY29wZS5jbGVhbnVwcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnB1c2goX29mZik7XG4gICAgcmV0dXJuIF9vZmY7XG4gIH1cbiAgZnVuY3Rpb24gb25jZShsaXN0ZW5lcikge1xuICAgIGZ1bmN0aW9uIF9saXN0ZW5lciguLi5hcmdzKSB7XG4gICAgICBvZmYoX2xpc3RlbmVyKTtcbiAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gb24oX2xpc3RlbmVyKTtcbiAgfVxuICBmdW5jdGlvbiBvZmYobGlzdGVuZXIpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBldmVudHMuZ2V0KGtleSk7XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ID4gLTEpXG4gICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGgpXG4gICAgICBldmVudHMuZGVsZXRlKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgZXZlbnRzLmRlbGV0ZShrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIGVtaXQoZXZlbnQsIHBheWxvYWQpIHtcbiAgICB2YXIgX2E7XG4gICAgKF9hID0gZXZlbnRzLmdldChrZXkpKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZm9yRWFjaCgodikgPT4gdihldmVudCwgcGF5bG9hZCkpO1xuICB9XG4gIHJldHVybiB7IG9uLCBvbmNlLCBvZmYsIGVtaXQsIHJlc2V0IH07XG59XG5cbmZ1bmN0aW9uIHVzZUV2ZW50U291cmNlKHVybCwgZXZlbnRzID0gW10sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBldmVudCA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBkYXRhID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHN0YXR1cyA9IHZ1ZURlbWkucmVmKFwiQ09OTkVDVElOR1wiKTtcbiAgY29uc3QgZXZlbnRTb3VyY2UgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgZXJyb3IgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIHdpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAoZXZlbnRTb3VyY2UudmFsdWUpIHtcbiAgICAgIGV2ZW50U291cmNlLnZhbHVlLmNsb3NlKCk7XG4gICAgICBldmVudFNvdXJjZS52YWx1ZSA9IG51bGw7XG4gICAgICBzdGF0dXMudmFsdWUgPSBcIkNMT1NFRFwiO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZXMgPSBuZXcgRXZlbnRTb3VyY2UodXJsLCB7IHdpdGhDcmVkZW50aWFscyB9KTtcbiAgZXZlbnRTb3VyY2UudmFsdWUgPSBlcztcbiAgZXMub25vcGVuID0gKCkgPT4ge1xuICAgIHN0YXR1cy52YWx1ZSA9IFwiT1BFTlwiO1xuICAgIGVycm9yLnZhbHVlID0gbnVsbDtcbiAgfTtcbiAgZXMub25lcnJvciA9IChlKSA9PiB7XG4gICAgc3RhdHVzLnZhbHVlID0gXCJDTE9TRURcIjtcbiAgICBlcnJvci52YWx1ZSA9IGU7XG4gIH07XG4gIGVzLm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgZXZlbnQudmFsdWUgPSBudWxsO1xuICAgIGRhdGEudmFsdWUgPSBlLmRhdGE7XG4gIH07XG4gIGZvciAoY29uc3QgZXZlbnRfbmFtZSBvZiBldmVudHMpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKGVzLCBldmVudF9uYW1lLCAoZSkgPT4ge1xuICAgICAgZXZlbnQudmFsdWUgPSBldmVudF9uYW1lO1xuICAgICAgZGF0YS52YWx1ZSA9IGUuZGF0YSB8fCBudWxsO1xuICAgIH0pO1xuICB9XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgY2xvc2UoKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZXZlbnRTb3VyY2UsXG4gICAgZXZlbnQsXG4gICAgZGF0YSxcbiAgICBzdGF0dXMsXG4gICAgZXJyb3IsXG4gICAgY2xvc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlRXllRHJvcHBlcihvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBpbml0aWFsVmFsdWUgPSBcIlwiIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IEJvb2xlYW4odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcIkV5ZURyb3BwZXJcIiBpbiB3aW5kb3cpO1xuICBjb25zdCBzUkdCSGV4ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlKTtcbiAgYXN5bmMgZnVuY3Rpb24gb3BlbihvcGVuT3B0aW9ucykge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZXllRHJvcHBlciA9IG5ldyB3aW5kb3cuRXllRHJvcHBlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV5ZURyb3BwZXIub3BlbihvcGVuT3B0aW9ucyk7XG4gICAgc1JHQkhleC52YWx1ZSA9IHJlc3VsdC5zUkdCSGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHsgaXNTdXBwb3J0ZWQsIHNSR0JIZXgsIG9wZW4gfTtcbn1cblxuZnVuY3Rpb24gdXNlRmF2aWNvbihuZXdJY29uID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBiYXNlVXJsID0gXCJcIixcbiAgICByZWwgPSBcImljb25cIixcbiAgICBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZmF2aWNvbiA9IHZ1ZURlbWkuaXNSZWYobmV3SWNvbikgPyBuZXdJY29uIDogdnVlRGVtaS5yZWYobmV3SWNvbik7XG4gIGNvbnN0IGFwcGx5SWNvbiA9IChpY29uKSA9PiB7XG4gICAgZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWwqPVwiJHtyZWx9XCJdYCkuZm9yRWFjaCgoZWwpID0+IGVsLmhyZWYgPSBgJHtiYXNlVXJsfSR7aWNvbn1gKTtcbiAgfTtcbiAgdnVlRGVtaS53YXRjaChmYXZpY29uLCAoaSwgbykgPT4ge1xuICAgIGlmIChzaGFyZWQuaXNTdHJpbmcoaSkgJiYgaSAhPT0gbylcbiAgICAgIGFwcGx5SWNvbihpKTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIHJldHVybiBmYXZpY29uO1xufVxuXG52YXIgX19kZWZQcm9wJGIgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkMyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJGMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSRjID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkYiA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkYihvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkYiA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJGMuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCRiKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyRjKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyRjKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJGMuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJGIoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQzID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkMyhhLCBfX2dldE93blByb3BEZXNjcyQzKGIpKTtcbmNvbnN0IHBheWxvYWRNYXBwaW5nID0ge1xuICBqc29uOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgdGV4dDogXCJ0ZXh0L3BsYWluXCIsXG4gIGZvcm1EYXRhOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIlxufTtcbmZ1bmN0aW9uIGlzRmV0Y2hPcHRpb25zKG9iaikge1xuICByZXR1cm4gc2hhcmVkLmNvbnRhaW5zUHJvcChvYmosIFwiaW1tZWRpYXRlXCIsIFwicmVmZXRjaFwiLCBcImluaXRpYWxEYXRhXCIsIFwidGltZW91dFwiLCBcImJlZm9yZUZldGNoXCIsIFwiYWZ0ZXJGZXRjaFwiLCBcIm9uRmV0Y2hFcnJvclwiLCBcImZldGNoXCIpO1xufVxuZnVuY3Rpb24gaGVhZGVyc1RvT2JqZWN0KGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBIZWFkZXJzICE9PSBcInVuZGVmaW5lZFwiICYmIGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKVxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoWy4uLmhlYWRlcnMuZW50cmllcygpXSk7XG4gIHJldHVybiBoZWFkZXJzO1xufVxuZnVuY3Rpb24gY3JlYXRlRmV0Y2goY29uZmlnID0ge30pIHtcbiAgY29uc3QgX29wdGlvbnMgPSBjb25maWcub3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgX2ZldGNoT3B0aW9ucyA9IGNvbmZpZy5mZXRjaE9wdGlvbnMgfHwge307XG4gIGZ1bmN0aW9uIHVzZUZhY3RvcnlGZXRjaCh1cmwsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb21wdXRlZFVybCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gY29uZmlnLmJhc2VVcmwgPyBqb2luUGF0aHModnVlRGVtaS51bnJlZihjb25maWcuYmFzZVVybCksIHZ1ZURlbWkudW5yZWYodXJsKSkgOiB2dWVEZW1pLnVucmVmKHVybCkpO1xuICAgIGxldCBvcHRpb25zID0gX29wdGlvbnM7XG4gICAgbGV0IGZldGNoT3B0aW9ucyA9IF9mZXRjaE9wdGlvbnM7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGlzRmV0Y2hPcHRpb25zKGFyZ3NbMF0pKSB7XG4gICAgICAgIG9wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIG9wdGlvbnMpLCBhcmdzWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoT3B0aW9ucyA9IF9fc3ByZWFkUHJvcHMkMyhfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIGZldGNoT3B0aW9ucyksIGFyZ3NbMF0pLCB7XG4gICAgICAgICAgaGVhZGVyczogX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBoZWFkZXJzVG9PYmplY3QoZmV0Y2hPcHRpb25zLmhlYWRlcnMpIHx8IHt9KSwgaGVhZGVyc1RvT2JqZWN0KGFyZ3NbMF0uaGVhZGVycykgfHwge30pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxICYmIGlzRmV0Y2hPcHRpb25zKGFyZ3NbMV0pKVxuICAgICAgb3B0aW9ucyA9IF9fc3ByZWFkVmFsdWVzJGIoX19zcHJlYWRWYWx1ZXMkYih7fSwgb3B0aW9ucyksIGFyZ3NbMV0pO1xuICAgIHJldHVybiB1c2VGZXRjaChjb21wdXRlZFVybCwgZmV0Y2hPcHRpb25zLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gdXNlRmFjdG9yeUZldGNoO1xufVxuZnVuY3Rpb24gdXNlRmV0Y2godXJsLCAuLi5hcmdzKSB7XG4gIHZhciBfYTtcbiAgY29uc3Qgc3VwcG9ydHNBYm9ydCA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09IFwiZnVuY3Rpb25cIjtcbiAgbGV0IGZldGNoT3B0aW9ucyA9IHt9O1xuICBsZXQgb3B0aW9ucyA9IHsgaW1tZWRpYXRlOiB0cnVlLCByZWZldGNoOiBmYWxzZSwgdGltZW91dDogMCB9O1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIHR5cGU6IFwidGV4dFwiLFxuICAgIHBheWxvYWQ6IHZvaWQgMFxuICB9O1xuICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGlzRmV0Y2hPcHRpb25zKGFyZ3NbMF0pKVxuICAgICAgb3B0aW9ucyA9IF9fc3ByZWFkVmFsdWVzJGIoX19zcHJlYWRWYWx1ZXMkYih7fSwgb3B0aW9ucyksIGFyZ3NbMF0pO1xuICAgIGVsc2VcbiAgICAgIGZldGNoT3B0aW9ucyA9IGFyZ3NbMF07XG4gIH1cbiAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgIGlmIChpc0ZldGNoT3B0aW9ucyhhcmdzWzFdKSlcbiAgICAgIG9wdGlvbnMgPSBfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIG9wdGlvbnMpLCBhcmdzWzFdKTtcbiAgfVxuICBjb25zdCB7XG4gICAgZmV0Y2ggPSAoX2EgPSBkZWZhdWx0V2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX2EuZmV0Y2gsXG4gICAgaW5pdGlhbERhdGEsXG4gICAgdGltZW91dFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVzcG9uc2VFdmVudCA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3QgZXJyb3JFdmVudCA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3QgZmluYWxseUV2ZW50ID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBpc0ZpbmlzaGVkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBpc0ZldGNoaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBhYm9ydGVkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBzdGF0dXNDb2RlID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gdnVlRGVtaS5zaGFsbG93UmVmKG51bGwpO1xuICBjb25zdCBlcnJvciA9IHZ1ZURlbWkuc2hhbGxvd1JlZihudWxsKTtcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkuc2hhbGxvd1JlZihpbml0aWFsRGF0YSk7XG4gIGNvbnN0IGNhbkFib3J0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBzdXBwb3J0c0Fib3J0ICYmIGlzRmV0Y2hpbmcudmFsdWUpO1xuICBsZXQgY29udHJvbGxlcjtcbiAgbGV0IHRpbWVyO1xuICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICBpZiAoc3VwcG9ydHNBYm9ydCAmJiBjb250cm9sbGVyKVxuICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICB9O1xuICBjb25zdCBsb2FkaW5nID0gKGlzTG9hZGluZykgPT4ge1xuICAgIGlzRmV0Y2hpbmcudmFsdWUgPSBpc0xvYWRpbmc7XG4gICAgaXNGaW5pc2hlZC52YWx1ZSA9ICFpc0xvYWRpbmc7XG4gIH07XG4gIGlmICh0aW1lb3V0KVxuICAgIHRpbWVyID0gc2hhcmVkLnVzZVRpbWVvdXRGbihhYm9ydCwgdGltZW91dCwgeyBpbW1lZGlhdGU6IGZhbHNlIH0pO1xuICBjb25zdCBleGVjdXRlID0gYXN5bmMgKHRocm93T25GYWlsZWQgPSBmYWxzZSkgPT4ge1xuICAgIHZhciBfYTI7XG4gICAgbG9hZGluZyh0cnVlKTtcbiAgICBlcnJvci52YWx1ZSA9IG51bGw7XG4gICAgc3RhdHVzQ29kZS52YWx1ZSA9IG51bGw7XG4gICAgYWJvcnRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIGNvbnRyb2xsZXIgPSB2b2lkIDA7XG4gICAgaWYgKHN1cHBvcnRzQWJvcnQpIHtcbiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb250cm9sbGVyLnNpZ25hbC5vbmFib3J0ID0gKCkgPT4gYWJvcnRlZC52YWx1ZSA9IHRydWU7XG4gICAgICBmZXRjaE9wdGlvbnMgPSBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYih7fSwgZmV0Y2hPcHRpb25zKSwge1xuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEZldGNoT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHt9XG4gICAgfTtcbiAgICBpZiAoY29uZmlnLnBheWxvYWQpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBoZWFkZXJzVG9PYmplY3QoZGVmYXVsdEZldGNoT3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgIGlmIChjb25maWcucGF5bG9hZFR5cGUpXG4gICAgICAgIGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSAoX2EyID0gcGF5bG9hZE1hcHBpbmdbY29uZmlnLnBheWxvYWRUeXBlXSkgIT0gbnVsbCA/IF9hMiA6IGNvbmZpZy5wYXlsb2FkVHlwZTtcbiAgICAgIGRlZmF1bHRGZXRjaE9wdGlvbnMuYm9keSA9IGNvbmZpZy5wYXlsb2FkVHlwZSA9PT0gXCJqc29uXCIgPyBKU09OLnN0cmluZ2lmeSh2dWVEZW1pLnVucmVmKGNvbmZpZy5wYXlsb2FkKSkgOiB2dWVEZW1pLnVucmVmKGNvbmZpZy5wYXlsb2FkKTtcbiAgICB9XG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjb250ZXh0ID0geyB1cmw6IHZ1ZURlbWkudW5yZWYodXJsKSwgb3B0aW9uczogX19zcHJlYWRWYWx1ZXMkYihfX3NwcmVhZFZhbHVlcyRiKHt9LCBkZWZhdWx0RmV0Y2hPcHRpb25zKSwgZmV0Y2hPcHRpb25zKSwgY2FuY2VsOiAoKSA9PiB7XG4gICAgICBpc0NhbmNlbGVkID0gdHJ1ZTtcbiAgICB9IH07XG4gICAgaWYgKG9wdGlvbnMuYmVmb3JlRmV0Y2gpXG4gICAgICBPYmplY3QuYXNzaWduKGNvbnRleHQsIGF3YWl0IG9wdGlvbnMuYmVmb3JlRmV0Y2goY29udGV4dCkpO1xuICAgIGlmIChpc0NhbmNlbGVkIHx8ICFmZXRjaCkge1xuICAgICAgbG9hZGluZyhmYWxzZSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gbnVsbDtcbiAgICBpZiAodGltZXIpXG4gICAgICB0aW1lci5zdGFydCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgZmV0Y2goY29udGV4dC51cmwsIF9fc3ByZWFkUHJvcHMkMyhfX3NwcmVhZFZhbHVlcyRiKF9fc3ByZWFkVmFsdWVzJGIoe30sIGRlZmF1bHRGZXRjaE9wdGlvbnMpLCBjb250ZXh0Lm9wdGlvbnMpLCB7XG4gICAgICAgIGhlYWRlcnM6IF9fc3ByZWFkVmFsdWVzJGIoX19zcHJlYWRWYWx1ZXMkYih7fSwgaGVhZGVyc1RvT2JqZWN0KGRlZmF1bHRGZXRjaE9wdGlvbnMuaGVhZGVycykpLCBoZWFkZXJzVG9PYmplY3QoKF9hMyA9IGNvbnRleHQub3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5oZWFkZXJzKSlcbiAgICAgIH0pKS50aGVuKGFzeW5jIChmZXRjaFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlLnZhbHVlID0gZmV0Y2hSZXNwb25zZTtcbiAgICAgICAgc3RhdHVzQ29kZS52YWx1ZSA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICByZXNwb25zZURhdGEgPSBhd2FpdCBmZXRjaFJlc3BvbnNlW2NvbmZpZy50eXBlXSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5hZnRlckZldGNoICYmIHN0YXR1c0NvZGUudmFsdWUgPj0gMjAwICYmIHN0YXR1c0NvZGUudmFsdWUgPCAzMDApXG4gICAgICAgICAgKHsgZGF0YTogcmVzcG9uc2VEYXRhIH0gPSBhd2FpdCBvcHRpb25zLmFmdGVyRmV0Y2goeyBkYXRhOiByZXNwb25zZURhdGEsIHJlc3BvbnNlOiBmZXRjaFJlc3BvbnNlIH0pKTtcbiAgICAgICAgZGF0YS52YWx1ZSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgaWYgKCFmZXRjaFJlc3BvbnNlLm9rKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICByZXNwb25zZUV2ZW50LnRyaWdnZXIoZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGZldGNoUmVzcG9uc2UpO1xuICAgICAgfSkuY2F0Y2goYXN5bmMgKGZldGNoRXJyb3IpID0+IHtcbiAgICAgICAgbGV0IGVycm9yRGF0YSA9IGZldGNoRXJyb3IubWVzc2FnZSB8fCBmZXRjaEVycm9yLm5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zLm9uRmV0Y2hFcnJvcilcbiAgICAgICAgICAoeyBkYXRhOiByZXNwb25zZURhdGEsIGVycm9yOiBlcnJvckRhdGEgfSA9IGF3YWl0IG9wdGlvbnMub25GZXRjaEVycm9yKHsgZGF0YTogcmVzcG9uc2VEYXRhLCBlcnJvcjogZmV0Y2hFcnJvciwgcmVzcG9uc2U6IHJlc3BvbnNlLnZhbHVlIH0pKTtcbiAgICAgICAgZGF0YS52YWx1ZSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgZXJyb3IudmFsdWUgPSBlcnJvckRhdGE7XG4gICAgICAgIGVycm9yRXZlbnQudHJpZ2dlcihmZXRjaEVycm9yKTtcbiAgICAgICAgaWYgKHRocm93T25GYWlsZWQpXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChmZXRjaEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgbG9hZGluZyhmYWxzZSk7XG4gICAgICAgIGlmICh0aW1lcilcbiAgICAgICAgICB0aW1lci5zdG9wKCk7XG4gICAgICAgIGZpbmFsbHlFdmVudC50cmlnZ2VyKG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gW1xuICAgIHZ1ZURlbWkudW5yZWYodXJsKSxcbiAgICB2dWVEZW1pLnVucmVmKG9wdGlvbnMucmVmZXRjaClcbiAgXSwgKCkgPT4gdnVlRGVtaS51bnJlZihvcHRpb25zLnJlZmV0Y2gpICYmIGV4ZWN1dGUoKSwgeyBkZWVwOiB0cnVlIH0pO1xuICBjb25zdCBzaGVsbCA9IHtcbiAgICBpc0ZpbmlzaGVkLFxuICAgIHN0YXR1c0NvZGUsXG4gICAgcmVzcG9uc2UsXG4gICAgZXJyb3IsXG4gICAgZGF0YSxcbiAgICBpc0ZldGNoaW5nLFxuICAgIGNhbkFib3J0LFxuICAgIGFib3J0ZWQsXG4gICAgYWJvcnQsXG4gICAgZXhlY3V0ZSxcbiAgICBvbkZldGNoUmVzcG9uc2U6IHJlc3BvbnNlRXZlbnQub24sXG4gICAgb25GZXRjaEVycm9yOiBlcnJvckV2ZW50Lm9uLFxuICAgIG9uRmV0Y2hGaW5hbGx5OiBmaW5hbGx5RXZlbnQub24sXG4gICAgZ2V0OiBzZXRNZXRob2QoXCJHRVRcIiksXG4gICAgcHV0OiBzZXRNZXRob2QoXCJQVVRcIiksXG4gICAgcG9zdDogc2V0TWV0aG9kKFwiUE9TVFwiKSxcbiAgICBkZWxldGU6IHNldE1ldGhvZChcIkRFTEVURVwiKSxcbiAgICBwYXRjaDogc2V0TWV0aG9kKFwiUEFUQ0hcIiksXG4gICAgaGVhZDogc2V0TWV0aG9kKFwiSEVBRFwiKSxcbiAgICBvcHRpb25zOiBzZXRNZXRob2QoXCJPUFRJT05TXCIpLFxuICAgIGpzb246IHNldFR5cGUoXCJqc29uXCIpLFxuICAgIHRleHQ6IHNldFR5cGUoXCJ0ZXh0XCIpLFxuICAgIGJsb2I6IHNldFR5cGUoXCJibG9iXCIpLFxuICAgIGFycmF5QnVmZmVyOiBzZXRUeXBlKFwiYXJyYXlCdWZmZXJcIiksXG4gICAgZm9ybURhdGE6IHNldFR5cGUoXCJmb3JtRGF0YVwiKVxuICB9O1xuICBmdW5jdGlvbiBzZXRNZXRob2QobWV0aG9kKSB7XG4gICAgcmV0dXJuIChwYXlsb2FkLCBwYXlsb2FkVHlwZSkgPT4ge1xuICAgICAgaWYgKCFpc0ZldGNoaW5nLnZhbHVlKSB7XG4gICAgICAgIGNvbmZpZy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIGNvbmZpZy5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgY29uZmlnLnBheWxvYWRUeXBlID0gcGF5bG9hZFR5cGU7XG4gICAgICAgIGlmICh2dWVEZW1pLmlzUmVmKGNvbmZpZy5wYXlsb2FkKSkge1xuICAgICAgICAgIHZ1ZURlbWkud2F0Y2goKCkgPT4gW1xuICAgICAgICAgICAgdnVlRGVtaS51bnJlZihjb25maWcucGF5bG9hZCksXG4gICAgICAgICAgICB2dWVEZW1pLnVucmVmKG9wdGlvbnMucmVmZXRjaClcbiAgICAgICAgICBdLCAoKSA9PiB2dWVEZW1pLnVucmVmKG9wdGlvbnMucmVmZXRjaCkgJiYgZXhlY3V0ZSgpLCB7IGRlZXA6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSAmJiB2dWVEZW1pLnVucmVmKHBheWxvYWQpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2dWVEZW1pLnVucmVmKHBheWxvYWQpKSA9PT0gT2JqZWN0LnByb3RvdHlwZSlcbiAgICAgICAgICBjb25maWcucGF5bG9hZFR5cGUgPSBcImpzb25cIjtcbiAgICAgICAgcmV0dXJuIF9fc3ByZWFkUHJvcHMkMyhfX3NwcmVhZFZhbHVlcyRiKHt9LCBzaGVsbCksIHtcbiAgICAgICAgICB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gd2FpdFVudGlsRmluaXNoZWQoKS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdhaXRVbnRpbEZpbmlzaGVkKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzaGFyZWQudW50aWwoaXNGaW5pc2hlZCkudG9CZSh0cnVlKS50aGVuKCgpID0+IHJlc29sdmUoc2hlbGwpKS5jYXRjaCgoZXJyb3IyKSA9PiByZWplY3QoZXJyb3IyKSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0VHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghaXNGZXRjaGluZy52YWx1ZSkge1xuICAgICAgICBjb25maWcudHlwZSA9IHR5cGU7XG4gICAgICAgIHJldHVybiBfX3NwcmVhZFByb3BzJDMoX19zcHJlYWRWYWx1ZXMkYih7fSwgc2hlbGwpLCB7XG4gICAgICAgICAgdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHdhaXRVbnRpbEZpbmlzaGVkKCkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfTtcbiAgfVxuICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpXG4gICAgc2V0VGltZW91dChleGVjdXRlLCAwKTtcbiAgcmV0dXJuIF9fc3ByZWFkUHJvcHMkMyhfX3NwcmVhZFZhbHVlcyRiKHt9LCBzaGVsbCksIHtcbiAgICB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gd2FpdFVudGlsRmluaXNoZWQoKS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gam9pblBhdGhzKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydC5lbmRzV2l0aChcIi9cIikgJiYgIWVuZC5zdGFydHNXaXRoKFwiL1wiKSlcbiAgICByZXR1cm4gYCR7c3RhcnR9LyR7ZW5kfWA7XG4gIHJldHVybiBgJHtzdGFydH0ke2VuZH1gO1xufVxuXG52YXIgX19kZWZQcm9wJGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRiID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkYiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGIgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCRhID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCRhKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyRhID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkYi5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJGEoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGIpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGIoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kYi5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkYShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgbXVsdGlwbGU6IHRydWUsXG4gIGFjY2VwdDogXCIqXCJcbn07XG5mdW5jdGlvbiB1c2VGaWxlRGlhbG9nKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnRcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZpbGVzID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGxldCBpbnB1dDtcbiAgaWYgKGRvY3VtZW50KSB7XG4gICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xuICAgIGlucHV0Lm9uY2hhbmdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBldmVudC50YXJnZXQ7XG4gICAgICBmaWxlcy52YWx1ZSA9IHJlc3VsdC5maWxlcztcbiAgICB9O1xuICB9XG4gIGNvbnN0IG9wZW4gPSAobG9jYWxPcHRpb25zKSA9PiB7XG4gICAgaWYgKCFpbnB1dClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBfb3B0aW9ucyA9IF9fc3ByZWFkVmFsdWVzJGEoX19zcHJlYWRWYWx1ZXMkYShfX3NwcmVhZFZhbHVlcyRhKHt9LCBERUZBVUxUX09QVElPTlMpLCBvcHRpb25zKSwgbG9jYWxPcHRpb25zKTtcbiAgICBpbnB1dC5tdWx0aXBsZSA9IF9vcHRpb25zLm11bHRpcGxlO1xuICAgIGlucHV0LmFjY2VwdCA9IF9vcHRpb25zLmFjY2VwdDtcbiAgICBpbnB1dC5jYXB0dXJlID0gX29wdGlvbnMuY2FwdHVyZTtcbiAgICBpbnB1dC5jbGljaygpO1xuICB9O1xuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBmaWxlcy52YWx1ZSA9IG51bGw7XG4gICAgaWYgKGlucHV0KVxuICAgICAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGZpbGVzOiB2dWVEZW1pLnJlYWRvbmx5KGZpbGVzKSxcbiAgICBvcGVuLFxuICAgIHJlc2V0XG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AkOSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRhID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kYSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDkgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDkob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDkgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRhLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkOShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkYSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkYShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRhLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ5KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlRmlsZVN5c3RlbUFjY2VzcyhvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdpbmRvdzogX3dpbmRvdyA9IGRlZmF1bHRXaW5kb3csXG4gICAgZGF0YVR5cGUgPSBcIlRleHRcIlxuICB9ID0gdnVlRGVtaS51bnJlZihvcHRpb25zKTtcbiAgY29uc3Qgd2luZG93ID0gX3dpbmRvdztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKHdpbmRvdyAmJiBcInNob3dTYXZlRmlsZVBpY2tlclwiIGluIHdpbmRvdyAmJiBcInNob3dPcGVuRmlsZVBpY2tlclwiIGluIHdpbmRvdyk7XG4gIGNvbnN0IGZpbGVIYW5kbGUgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBkYXRhID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3QgZmlsZSA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gZmlsZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLm5hbWUpICE9IG51bGwgPyBfYiA6IFwiXCI7XG4gIH0pO1xuICBjb25zdCBmaWxlTUlNRSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IGZpbGUudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS50eXBlKSAhPSBudWxsID8gX2IgOiBcIlwiO1xuICB9KTtcbiAgY29uc3QgZmlsZVNpemUgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSBmaWxlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc2l6ZSkgIT0gbnVsbCA/IF9iIDogMDtcbiAgfSk7XG4gIGNvbnN0IGZpbGVMYXN0TW9kaWZpZWQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSBmaWxlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EubGFzdE1vZGlmaWVkKSAhPSBudWxsID8gX2IgOiAwO1xuICB9KTtcbiAgYXN5bmMgZnVuY3Rpb24gb3Blbihfb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBbaGFuZGxlXSA9IGF3YWl0IHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoX19zcHJlYWRWYWx1ZXMkOShfX3NwcmVhZFZhbHVlcyQ5KHt9LCB2dWVEZW1pLnVucmVmKG9wdGlvbnMpKSwgX29wdGlvbnMpKTtcbiAgICBmaWxlSGFuZGxlLnZhbHVlID0gaGFuZGxlO1xuICAgIGF3YWl0IHVwZGF0ZUZpbGUoKTtcbiAgICBhd2FpdCB1cGRhdGVEYXRhKCk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlKF9vcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGZpbGVIYW5kbGUudmFsdWUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKF9fc3ByZWFkVmFsdWVzJDkoX19zcHJlYWRWYWx1ZXMkOSh7fSwgdnVlRGVtaS51bnJlZihvcHRpb25zKSksIF9vcHRpb25zKSk7XG4gICAgZGF0YS52YWx1ZSA9IHZvaWQgMDtcbiAgICBhd2FpdCB1cGRhdGVGaWxlKCk7XG4gICAgYXdhaXQgdXBkYXRlRGF0YSgpO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHNhdmUoX29wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNTdXBwb3J0ZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCFmaWxlSGFuZGxlLnZhbHVlKVxuICAgICAgcmV0dXJuIHNhdmVBcyhfb3B0aW9ucyk7XG4gICAgaWYgKGRhdGEudmFsdWUpIHtcbiAgICAgIGNvbnN0IHdyaXRhYmxlU3RyZWFtID0gYXdhaXQgZmlsZUhhbmRsZS52YWx1ZS5jcmVhdGVXcml0YWJsZSgpO1xuICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW0ud3JpdGUoZGF0YS52YWx1ZSk7XG4gICAgICBhd2FpdCB3cml0YWJsZVN0cmVhbS5jbG9zZSgpO1xuICAgIH1cbiAgICBhd2FpdCB1cGRhdGVGaWxlKCk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZUFzKF9vcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGZpbGVIYW5kbGUudmFsdWUgPSBhd2FpdCB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyKF9fc3ByZWFkVmFsdWVzJDkoX19zcHJlYWRWYWx1ZXMkOSh7fSwgdnVlRGVtaS51bnJlZihvcHRpb25zKSksIF9vcHRpb25zKSk7XG4gICAgaWYgKGRhdGEudmFsdWUpIHtcbiAgICAgIGNvbnN0IHdyaXRhYmxlU3RyZWFtID0gYXdhaXQgZmlsZUhhbmRsZS52YWx1ZS5jcmVhdGVXcml0YWJsZSgpO1xuICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW0ud3JpdGUoZGF0YS52YWx1ZSk7XG4gICAgICBhd2FpdCB3cml0YWJsZVN0cmVhbS5jbG9zZSgpO1xuICAgIH1cbiAgICBhd2FpdCB1cGRhdGVGaWxlKCk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlRmlsZSgpIHtcbiAgICB2YXIgX2E7XG4gICAgZmlsZS52YWx1ZSA9IGF3YWl0ICgoX2EgPSBmaWxlSGFuZGxlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuZ2V0RmlsZSgpKTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYoZGF0YVR5cGUpID09PSBcIlRleHRcIilcbiAgICAgIGRhdGEudmFsdWUgPSBhd2FpdCAoKF9hID0gZmlsZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRleHQoKSk7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYoZGF0YVR5cGUpID09PSBcIkFycmF5QnVmZmVyXCIpXG4gICAgICBkYXRhLnZhbHVlID0gYXdhaXQgKChfYiA9IGZpbGUudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5hcnJheUJ1ZmZlcigpKTtcbiAgICBpZiAodnVlRGVtaS51bnJlZihkYXRhVHlwZSkgPT09IFwiQmxvYlwiKVxuICAgICAgZGF0YS52YWx1ZSA9IGZpbGUudmFsdWU7XG4gIH1cbiAgdnVlRGVtaS53YXRjaCgoKSA9PiB2dWVEZW1pLnVucmVmKGRhdGFUeXBlKSwgdXBkYXRlRGF0YSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgZGF0YSxcbiAgICBmaWxlLFxuICAgIGZpbGVOYW1lLFxuICAgIGZpbGVNSU1FLFxuICAgIGZpbGVTaXplLFxuICAgIGZpbGVMYXN0TW9kaWZpZWQsXG4gICAgb3BlbixcbiAgICBjcmVhdGUsXG4gICAgc2F2ZSxcbiAgICBzYXZlQXMsXG4gICAgdXBkYXRlRGF0YVxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VGb2N1cyh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdXNlQWN0aXZlRWxlbWVudChvcHRpb25zKTtcbiAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCkpO1xuICBjb25zdCBmb2N1c2VkID0gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHNoYXJlZC5pc0RlZihhY3RpdmVFbGVtZW50LnZhbHVlKSAmJiBzaGFyZWQuaXNEZWYodGFyZ2V0RWxlbWVudC52YWx1ZSkgJiYgYWN0aXZlRWxlbWVudC52YWx1ZSA9PT0gdGFyZ2V0RWxlbWVudC52YWx1ZTtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGlmICghdmFsdWUgJiYgZm9jdXNlZC52YWx1ZSlcbiAgICAgICAgKF9hID0gdGFyZ2V0RWxlbWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmJsdXIoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiAhZm9jdXNlZC52YWx1ZSlcbiAgICAgICAgKF9iID0gdGFyZ2V0RWxlbWVudC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcbiAgdnVlRGVtaS53YXRjaCh0YXJnZXRFbGVtZW50LCAoKSA9PiB7XG4gICAgZm9jdXNlZC52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUsIGZsdXNoOiBcInBvc3RcIiB9KTtcbiAgcmV0dXJuIHsgZm9jdXNlZCB9O1xufVxuXG5mdW5jdGlvbiB1c2VGb2N1c1dpdGhpbih0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdXNlQWN0aXZlRWxlbWVudChvcHRpb25zKTtcbiAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCkpO1xuICBjb25zdCBmb2N1c2VkID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB0YXJnZXRFbGVtZW50LnZhbHVlICYmIGFjdGl2ZUVsZW1lbnQudmFsdWUgPyB0YXJnZXRFbGVtZW50LnZhbHVlLmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQudmFsdWUpIDogZmFsc2UpO1xuICByZXR1cm4geyBmb2N1c2VkIH07XG59XG5cbmZ1bmN0aW9uIHVzZUZwcyhvcHRpb25zKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgZnBzID0gdnVlRGVtaS5yZWYoMCk7XG4gIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgcmV0dXJuIGZwcztcbiAgY29uc3QgZXZlcnkgPSAoX2EgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmV2ZXJ5KSAhPSBudWxsID8gX2EgOiAxMDtcbiAgbGV0IGxhc3QgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgbGV0IHRpY2tzID0gMDtcbiAgdXNlUmFmRm4oKCkgPT4ge1xuICAgIHRpY2tzICs9IDE7XG4gICAgaWYgKHRpY2tzID49IGV2ZXJ5KSB7XG4gICAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGNvbnN0IGRpZmYgPSBub3cgLSBsYXN0O1xuICAgICAgZnBzLnZhbHVlID0gTWF0aC5yb3VuZCgxZTMgLyAoZGlmZiAvIHRpY2tzKSk7XG4gICAgICBsYXN0ID0gbm93O1xuICAgICAgdGlja3MgPSAwO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmcHM7XG59XG5cbmNvbnN0IGZ1bmN0aW9uc01hcCA9IFtcbiAgW1xuICAgIFwicmVxdWVzdEZ1bGxzY3JlZW5cIixcbiAgICBcImV4aXRGdWxsc2NyZWVuXCIsXG4gICAgXCJmdWxsc2NyZWVuRWxlbWVudFwiLFxuICAgIFwiZnVsbHNjcmVlbkVuYWJsZWRcIixcbiAgICBcImZ1bGxzY3JlZW5jaGFuZ2VcIixcbiAgICBcImZ1bGxzY3JlZW5lcnJvclwiXG4gIF0sXG4gIFtcbiAgICBcIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuXCIsXG4gICAgXCJ3ZWJraXRFeGl0RnVsbHNjcmVlblwiLFxuICAgIFwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnRcIixcbiAgICBcIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkXCIsXG4gICAgXCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCIsXG4gICAgXCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3JcIlxuICBdLFxuICBbXG4gICAgXCJ3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlblwiLFxuICAgIFwid2Via2l0Q2FuY2VsRnVsbFNjcmVlblwiLFxuICAgIFwid2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50XCIsXG4gICAgXCJ3ZWJraXRDYW5jZWxGdWxsU2NyZWVuXCIsXG4gICAgXCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCIsXG4gICAgXCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3JcIlxuICBdLFxuICBbXG4gICAgXCJtb3pSZXF1ZXN0RnVsbFNjcmVlblwiLFxuICAgIFwibW96Q2FuY2VsRnVsbFNjcmVlblwiLFxuICAgIFwibW96RnVsbFNjcmVlbkVsZW1lbnRcIixcbiAgICBcIm1vekZ1bGxTY3JlZW5FbmFibGVkXCIsXG4gICAgXCJtb3pmdWxsc2NyZWVuY2hhbmdlXCIsXG4gICAgXCJtb3pmdWxsc2NyZWVuZXJyb3JcIlxuICBdLFxuICBbXG4gICAgXCJtc1JlcXVlc3RGdWxsc2NyZWVuXCIsXG4gICAgXCJtc0V4aXRGdWxsc2NyZWVuXCIsXG4gICAgXCJtc0Z1bGxzY3JlZW5FbGVtZW50XCIsXG4gICAgXCJtc0Z1bGxzY3JlZW5FbmFibGVkXCIsXG4gICAgXCJNU0Z1bGxzY3JlZW5DaGFuZ2VcIixcbiAgICBcIk1TRnVsbHNjcmVlbkVycm9yXCJcbiAgXVxuXTtcbmZ1bmN0aW9uIHVzZUZ1bGxzY3JlZW4odGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCwgYXV0b0V4aXQgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgdGFyZ2V0UmVmID0gdGFyZ2V0IHx8IChkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIikpO1xuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGxldCBpc1N1cHBvcnRlZCA9IGZhbHNlO1xuICBsZXQgbWFwID0gZnVuY3Rpb25zTWFwWzBdO1xuICBpZiAoIWRvY3VtZW50KSB7XG4gICAgaXNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgZnVuY3Rpb25zTWFwKSB7XG4gICAgICBpZiAobVsxXSBpbiBkb2N1bWVudCkge1xuICAgICAgICBtYXAgPSBtO1xuICAgICAgICBpc1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBbUkVRVUVTVCwgRVhJVCwgRUxFTUVOVCwgLCBFVkVOVF0gPSBtYXA7XG4gIGFzeW5jIGZ1bmN0aW9uIGV4aXQoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50W0VMRU1FTlRdKVxuICAgICAgYXdhaXQgZG9jdW1lbnRbRVhJVF0oKTtcbiAgICBpc0Z1bGxzY3JlZW4udmFsdWUgPSBmYWxzZTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBlbnRlcigpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGF3YWl0IGV4aXQoKTtcbiAgICBjb25zdCB0YXJnZXQyID0gdW5yZWZFbGVtZW50KHRhcmdldFJlZik7XG4gICAgaWYgKHRhcmdldDIpIHtcbiAgICAgIGF3YWl0IHRhcmdldDJbUkVRVUVTVF0oKTtcbiAgICAgIGlzRnVsbHNjcmVlbi52YWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICBpZiAoaXNGdWxsc2NyZWVuLnZhbHVlKVxuICAgICAgYXdhaXQgZXhpdCgpO1xuICAgIGVsc2VcbiAgICAgIGF3YWl0IGVudGVyKCk7XG4gIH1cbiAgaWYgKGRvY3VtZW50KSB7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgRVZFTlQsICgpID0+IHtcbiAgICAgIGlzRnVsbHNjcmVlbi52YWx1ZSA9ICEhKGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudFtFTEVNRU5UXSk7XG4gICAgfSwgZmFsc2UpO1xuICB9XG4gIGlmIChhdXRvRXhpdClcbiAgICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoZXhpdCk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgaXNGdWxsc2NyZWVuLFxuICAgIGVudGVyLFxuICAgIGV4aXQsXG4gICAgdG9nZ2xlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEdhbWVwYWRUb1hib3gzNjBDb250cm9sbGVyKGdhbWVwYWQpIHtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChnYW1lcGFkLnZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgYTogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzBdLFxuICAgICAgICAgIGI6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1sxXSxcbiAgICAgICAgICB4OiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbMl0sXG4gICAgICAgICAgeTogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzNdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1bXBlcjoge1xuICAgICAgICAgIGxlZnQ6IGdhbWVwYWQudmFsdWUuYnV0dG9uc1s0XSxcbiAgICAgICAgICByaWdodDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzVdXG4gICAgICAgIH0sXG4gICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgbGVmdDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzZdLFxuICAgICAgICAgIHJpZ2h0OiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbN11cbiAgICAgICAgfSxcbiAgICAgICAgc3RpY2s6IHtcbiAgICAgICAgICBsZWZ0OiB7XG4gICAgICAgICAgICBob3Jpem9udGFsOiBnYW1lcGFkLnZhbHVlLmF4ZXNbMF0sXG4gICAgICAgICAgICB2ZXJ0aWNhbDogZ2FtZXBhZC52YWx1ZS5heGVzWzFdLFxuICAgICAgICAgICAgYnV0dG9uOiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbMTBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICByaWdodDoge1xuICAgICAgICAgICAgaG9yaXpvbnRhbDogZ2FtZXBhZC52YWx1ZS5heGVzWzJdLFxuICAgICAgICAgICAgdmVydGljYWw6IGdhbWVwYWQudmFsdWUuYXhlc1szXSxcbiAgICAgICAgICAgIGJ1dHRvbjogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzExXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZHBhZDoge1xuICAgICAgICAgIHVwOiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbMTJdLFxuICAgICAgICAgIGRvd246IGdhbWVwYWQudmFsdWUuYnV0dG9uc1sxM10sXG4gICAgICAgICAgbGVmdDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzE0XSxcbiAgICAgICAgICByaWdodDogZ2FtZXBhZC52YWx1ZS5idXR0b25zWzE1XVxuICAgICAgICB9LFxuICAgICAgICBiYWNrOiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbOF0sXG4gICAgICAgIHN0YXJ0OiBnYW1lcGFkLnZhbHVlLmJ1dHRvbnNbOV1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHVzZUdhbWVwYWQob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBcImdldEdhbWVwYWRzXCIgaW4gbmF2aWdhdG9yO1xuICBjb25zdCBnYW1lcGFkcyA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgY29uc3Qgb25Db25uZWN0ZWRIb29rID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBvbkRpc2Nvbm5lY3RlZEhvb2sgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IHN0YXRlRnJvbUdhbWVwYWQgPSAoZ2FtZXBhZCkgPT4ge1xuICAgIGNvbnN0IGhhcHRpY0FjdHVhdG9ycyA9IFtdO1xuICAgIGNvbnN0IHZpYnJhdGlvbkFjdHVhdG9yID0gXCJ2aWJyYXRpb25BY3R1YXRvclwiIGluIGdhbWVwYWQgPyBnYW1lcGFkLnZpYnJhdGlvbkFjdHVhdG9yIDogbnVsbDtcbiAgICBpZiAodmlicmF0aW9uQWN0dWF0b3IpXG4gICAgICBoYXB0aWNBY3R1YXRvcnMucHVzaCh2aWJyYXRpb25BY3R1YXRvcik7XG4gICAgaWYgKGdhbWVwYWQuaGFwdGljQWN0dWF0b3JzKVxuICAgICAgaGFwdGljQWN0dWF0b3JzLnB1c2goLi4uZ2FtZXBhZC5oYXB0aWNBY3R1YXRvcnMpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZ2FtZXBhZC5pZCxcbiAgICAgIGhhcHRpY0FjdHVhdG9ycyxcbiAgICAgIGluZGV4OiBnYW1lcGFkLmluZGV4LFxuICAgICAgbWFwcGluZzogZ2FtZXBhZC5tYXBwaW5nLFxuICAgICAgY29ubmVjdGVkOiBnYW1lcGFkLmNvbm5lY3RlZCxcbiAgICAgIHRpbWVzdGFtcDogZ2FtZXBhZC50aW1lc3RhbXAsXG4gICAgICBheGVzOiBnYW1lcGFkLmF4ZXMubWFwKChheGVzKSA9PiBheGVzKSxcbiAgICAgIGJ1dHRvbnM6IGdhbWVwYWQuYnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gKHsgcHJlc3NlZDogYnV0dG9uLnByZXNzZWQsIHRvdWNoZWQ6IGJ1dHRvbi50b3VjaGVkLCB2YWx1ZTogYnV0dG9uLnZhbHVlIH0pKVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHVwZGF0ZUdhbWVwYWRTdGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCBfZ2FtZXBhZHMgPSAobmF2aWdhdG9yID09IG51bGwgPyB2b2lkIDAgOiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKSkgfHwgW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfZ2FtZXBhZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGdhbWVwYWQgPSBfZ2FtZXBhZHNbaV07XG4gICAgICBpZiAoZ2FtZXBhZCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGdhbWVwYWRzLnZhbHVlLmZpbmRJbmRleCgoeyBpbmRleDogaW5kZXgyIH0pID0+IGluZGV4MiA9PT0gZ2FtZXBhZC5pbmRleCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgIGdhbWVwYWRzLnZhbHVlW2luZGV4XSA9IHN0YXRlRnJvbUdhbWVwYWQoZ2FtZXBhZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCB7IGlzQWN0aXZlLCBwYXVzZSwgcmVzdW1lIH0gPSB1c2VSYWZGbih1cGRhdGVHYW1lcGFkU3RhdGUpO1xuICBjb25zdCBvbkdhbWVwYWRDb25uZWN0ZWQgPSAoZ2FtZXBhZCkgPT4ge1xuICAgIGlmICghZ2FtZXBhZHMudmFsdWUuc29tZSgoeyBpbmRleCB9KSA9PiBpbmRleCA9PT0gZ2FtZXBhZC5pbmRleCkpIHtcbiAgICAgIGdhbWVwYWRzLnZhbHVlLnB1c2goc3RhdGVGcm9tR2FtZXBhZChnYW1lcGFkKSk7XG4gICAgICBvbkNvbm5lY3RlZEhvb2sudHJpZ2dlcihnYW1lcGFkLmluZGV4KTtcbiAgICB9XG4gICAgcmVzdW1lKCk7XG4gIH07XG4gIGNvbnN0IG9uR2FtZXBhZERpc2Nvbm5lY3RlZCA9IChnYW1lcGFkKSA9PiB7XG4gICAgZ2FtZXBhZHMudmFsdWUgPSBnYW1lcGFkcy52YWx1ZS5maWx0ZXIoKHgpID0+IHguaW5kZXggIT09IGdhbWVwYWQuaW5kZXgpO1xuICAgIG9uRGlzY29ubmVjdGVkSG9vay50cmlnZ2VyKGdhbWVwYWQuaW5kZXgpO1xuICB9O1xuICB1c2VFdmVudExpc3RlbmVyKFwiZ2FtZXBhZGNvbm5lY3RlZFwiLCAoZSkgPT4gb25HYW1lcGFkQ29ubmVjdGVkKGUuZ2FtZXBhZCkpO1xuICB1c2VFdmVudExpc3RlbmVyKFwiZ2FtZXBhZGRpc2Nvbm5lY3RlZFwiLCAoZSkgPT4gb25HYW1lcGFkRGlzY29ubmVjdGVkKGUuZ2FtZXBhZCkpO1xuICBzaGFyZWQudHJ5T25Nb3VudGVkKCgpID0+IHtcbiAgICBjb25zdCBfZ2FtZXBhZHMgPSAobmF2aWdhdG9yID09IG51bGwgPyB2b2lkIDAgOiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKSkgfHwgW107XG4gICAgaWYgKF9nYW1lcGFkcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfZ2FtZXBhZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgZ2FtZXBhZCA9IF9nYW1lcGFkc1tpXTtcbiAgICAgICAgaWYgKGdhbWVwYWQpXG4gICAgICAgICAgb25HYW1lcGFkQ29ubmVjdGVkKGdhbWVwYWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHBhdXNlKCk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgb25Db25uZWN0ZWQ6IG9uQ29ubmVjdGVkSG9vay5vbixcbiAgICBvbkRpc2Nvbm5lY3RlZDogb25EaXNjb25uZWN0ZWRIb29rLm9uLFxuICAgIGdhbWVwYWRzLFxuICAgIHBhdXNlLFxuICAgIHJlc3VtZSxcbiAgICBpc0FjdGl2ZVxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VHZW9sb2NhdGlvbihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVuYWJsZUhpZ2hBY2N1cmFjeSA9IHRydWUsXG4gICAgbWF4aW11bUFnZSA9IDNlNCxcbiAgICB0aW1lb3V0ID0gMjdlMyxcbiAgICBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBcImdlb2xvY2F0aW9uXCIgaW4gbmF2aWdhdG9yO1xuICBjb25zdCBsb2NhdGVkQXQgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgZXJyb3IgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgY29vcmRzID0gdnVlRGVtaS5yZWYoe1xuICAgIGFjY3VyYWN5OiAwLFxuICAgIGxhdGl0dWRlOiBJbmZpbml0eSxcbiAgICBsb25naXR1ZGU6IEluZmluaXR5LFxuICAgIGFsdGl0dWRlOiBudWxsLFxuICAgIGFsdGl0dWRlQWNjdXJhY3k6IG51bGwsXG4gICAgaGVhZGluZzogbnVsbCxcbiAgICBzcGVlZDogbnVsbFxuICB9KTtcbiAgZnVuY3Rpb24gdXBkYXRlUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICBsb2NhdGVkQXQudmFsdWUgPSBwb3NpdGlvbi50aW1lc3RhbXA7XG4gICAgY29vcmRzLnZhbHVlID0gcG9zaXRpb24uY29vcmRzO1xuICAgIGVycm9yLnZhbHVlID0gbnVsbDtcbiAgfVxuICBsZXQgd2F0Y2hlcjtcbiAgaWYgKGlzU3VwcG9ydGVkKSB7XG4gICAgd2F0Y2hlciA9IG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHVwZGF0ZVBvc2l0aW9uLCAoZXJyKSA9PiBlcnJvci52YWx1ZSA9IGVyciwge1xuICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5LFxuICAgICAgbWF4aW11bUFnZSxcbiAgICAgIHRpbWVvdXRcbiAgICB9KTtcbiAgfVxuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgIGlmICh3YXRjaGVyICYmIG5hdmlnYXRvcilcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHdhdGNoZXIpO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBjb29yZHMsXG4gICAgbG9jYXRlZEF0LFxuICAgIGVycm9yXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRFdmVudHMkMSA9IFtcIm1vdXNlbW92ZVwiLCBcIm1vdXNlZG93blwiLCBcInJlc2l6ZVwiLCBcImtleWRvd25cIiwgXCJ0b3VjaHN0YXJ0XCIsIFwid2hlZWxcIl07XG5jb25zdCBvbmVNaW51dGUgPSA2ZTQ7XG5mdW5jdGlvbiB1c2VJZGxlKHRpbWVvdXQgPSBvbmVNaW51dGUsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW5pdGlhbFN0YXRlID0gZmFsc2UsXG4gICAgbGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZSA9IHRydWUsXG4gICAgZXZlbnRzID0gZGVmYXVsdEV2ZW50cyQxLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csXG4gICAgZXZlbnRGaWx0ZXIgPSBzaGFyZWQudGhyb3R0bGVGaWx0ZXIoNTApXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpZGxlID0gdnVlRGVtaS5yZWYoaW5pdGlhbFN0YXRlKTtcbiAgY29uc3QgbGFzdEFjdGl2ZSA9IHZ1ZURlbWkucmVmKHNoYXJlZC50aW1lc3RhbXAoKSk7XG4gIGxldCB0aW1lcjtcbiAgY29uc3Qgb25FdmVudCA9IHNoYXJlZC5jcmVhdGVGaWx0ZXJXcmFwcGVyKGV2ZW50RmlsdGVyLCAoKSA9PiB7XG4gICAgaWRsZS52YWx1ZSA9IGZhbHNlO1xuICAgIGxhc3RBY3RpdmUudmFsdWUgPSBzaGFyZWQudGltZXN0YW1wKCk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gaWRsZS52YWx1ZSA9IHRydWUsIHRpbWVvdXQpO1xuICB9KTtcbiAgaWYgKHdpbmRvdykge1xuICAgIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKVxuICAgICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIGV2ZW50LCBvbkV2ZW50LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgaWYgKGxpc3RlbkZvclZpc2liaWxpdHlDaGFuZ2UpIHtcbiAgICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuKVxuICAgICAgICAgIG9uRXZlbnQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gaWRsZS52YWx1ZSA9IHRydWUsIHRpbWVvdXQpO1xuICByZXR1cm4geyBpZGxlLCBsYXN0QWN0aXZlIH07XG59XG5cbnZhciBfX2RlZlByb3AkOCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kOSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDggPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDgob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDggPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ5LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkOChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkOSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkOShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ5LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ4KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICBjb25zdCB7IHNyYywgc3Jjc2V0LCBzaXplcyB9ID0gb3B0aW9ucztcbiAgICBpbWcuc3JjID0gc3JjO1xuICAgIGlmIChzcmNzZXQpXG4gICAgICBpbWcuc3Jjc2V0ID0gc3Jjc2V0O1xuICAgIGlmIChzaXplcylcbiAgICAgIGltZy5zaXplcyA9IHNpemVzO1xuICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltZyk7XG4gICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gIH0pO1xufVxuY29uc3QgdXNlSW1hZ2UgPSAob3B0aW9ucywgYXN5bmNTdGF0ZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUFzeW5jU3RhdGUoKCkgPT4gbG9hZEltYWdlKHZ1ZURlbWkudW5yZWYob3B0aW9ucykpLCB2b2lkIDAsIF9fc3ByZWFkVmFsdWVzJDgoe1xuICAgIHJlc2V0T25FeGVjdXRlOiB0cnVlXG4gIH0sIGFzeW5jU3RhdGVPcHRpb25zKSk7XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gdnVlRGVtaS51bnJlZihvcHRpb25zKSwgKCkgPT4gc3RhdGUuZXhlY3V0ZShhc3luY1N0YXRlT3B0aW9ucy5kZWxheSksIHsgZGVlcDogdHJ1ZSB9KTtcbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuZnVuY3Rpb24gdXNlU2Nyb2xsKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhyb3R0bGUgPSAwLFxuICAgIGlkbGUgPSAyMDAsXG4gICAgb25TdG9wID0gc2hhcmVkLm5vb3AsXG4gICAgb25TY3JvbGwgPSBzaGFyZWQubm9vcCxcbiAgICBvZmZzZXQgPSB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICBib3R0b206IDBcbiAgICB9LFxuICAgIGV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICAgICAgY2FwdHVyZTogZmFsc2UsXG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgeCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCB5ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGlzU2Nyb2xsaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBhcnJpdmVkU3RhdGUgPSB2dWVEZW1pLnJlYWN0aXZlKHtcbiAgICBsZWZ0OiB0cnVlLFxuICAgIHJpZ2h0OiBmYWxzZSxcbiAgICB0b3A6IHRydWUsXG4gICAgYm90dG9tOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgZGlyZWN0aW9ucyA9IHZ1ZURlbWkucmVhY3RpdmUoe1xuICAgIGxlZnQ6IGZhbHNlLFxuICAgIHJpZ2h0OiBmYWxzZSxcbiAgICB0b3A6IGZhbHNlLFxuICAgIGJvdHRvbTogZmFsc2VcbiAgfSk7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgY29uc3Qgb25TY3JvbGxFbmQgPSBzaGFyZWQudXNlRGVib3VuY2VGbigoZSkgPT4ge1xuICAgICAgaXNTY3JvbGxpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIGRpcmVjdGlvbnMubGVmdCA9IGZhbHNlO1xuICAgICAgZGlyZWN0aW9ucy5yaWdodCA9IGZhbHNlO1xuICAgICAgZGlyZWN0aW9ucy50b3AgPSBmYWxzZTtcbiAgICAgIGRpcmVjdGlvbnMuYm90dG9tID0gZmFsc2U7XG4gICAgICBvblN0b3AoZSk7XG4gICAgfSwgdGhyb3R0bGUgKyBpZGxlKTtcbiAgICBjb25zdCBvblNjcm9sbEhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBlLnRhcmdldCA9PT0gZG9jdW1lbnQgPyBlLnRhcmdldC5kb2N1bWVudEVsZW1lbnQgOiBlLnRhcmdldDtcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBldmVudFRhcmdldC5zY3JvbGxMZWZ0O1xuICAgICAgZGlyZWN0aW9ucy5sZWZ0ID0gc2Nyb2xsTGVmdCA8IHgudmFsdWU7XG4gICAgICBkaXJlY3Rpb25zLnJpZ2h0ID0gc2Nyb2xsTGVmdCA+IHgudmFsdWU7XG4gICAgICBhcnJpdmVkU3RhdGUubGVmdCA9IHNjcm9sbExlZnQgPD0gMCArIChvZmZzZXQubGVmdCB8fCAwKTtcbiAgICAgIGFycml2ZWRTdGF0ZS5yaWdodCA9IHNjcm9sbExlZnQgKyBldmVudFRhcmdldC5jbGllbnRXaWR0aCA+PSBldmVudFRhcmdldC5zY3JvbGxXaWR0aCAtIChvZmZzZXQucmlnaHQgfHwgMCk7XG4gICAgICB4LnZhbHVlID0gc2Nyb2xsTGVmdDtcbiAgICAgIGxldCBzY3JvbGxUb3AgPSBldmVudFRhcmdldC5zY3JvbGxUb3A7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50ICYmICFzY3JvbGxUb3ApXG4gICAgICAgIHNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xuICAgICAgZGlyZWN0aW9ucy50b3AgPSBzY3JvbGxUb3AgPCB5LnZhbHVlO1xuICAgICAgZGlyZWN0aW9ucy5ib3R0b20gPSBzY3JvbGxUb3AgPiB5LnZhbHVlO1xuICAgICAgYXJyaXZlZFN0YXRlLnRvcCA9IHNjcm9sbFRvcCA8PSAwICsgKG9mZnNldC50b3AgfHwgMCk7XG4gICAgICBhcnJpdmVkU3RhdGUuYm90dG9tID0gc2Nyb2xsVG9wICsgZXZlbnRUYXJnZXQuY2xpZW50SGVpZ2h0ID49IGV2ZW50VGFyZ2V0LnNjcm9sbEhlaWdodCAtIChvZmZzZXQuYm90dG9tIHx8IDApO1xuICAgICAgeS52YWx1ZSA9IHNjcm9sbFRvcDtcbiAgICAgIGlzU2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIG9uU2Nyb2xsRW5kKGUpO1xuICAgICAgb25TY3JvbGwoZSk7XG4gICAgfTtcbiAgICB1c2VFdmVudExpc3RlbmVyKGVsZW1lbnQsIFwic2Nyb2xsXCIsIHRocm90dGxlID8gc2hhcmVkLnVzZVRocm90dGxlRm4ob25TY3JvbGxIYW5kbGVyLCB0aHJvdHRsZSkgOiBvblNjcm9sbEhhbmRsZXIsIGV2ZW50TGlzdGVuZXJPcHRpb25zKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBpc1Njcm9sbGluZyxcbiAgICBhcnJpdmVkU3RhdGUsXG4gICAgZGlyZWN0aW9uc1xuICB9O1xufVxuXG52YXIgX19kZWZQcm9wJDcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQyID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkOCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDggPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ4ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNyA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNyhvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDguY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ3KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ4KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ4KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDguY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDcoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQyID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkMihhLCBfX2dldE93blByb3BEZXNjcyQyKGIpKTtcbmZ1bmN0aW9uIHVzZUluZmluaXRlU2Nyb2xsKGVsZW1lbnQsIG9uTG9hZE1vcmUsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCBkaXJlY3Rpb24gPSAoX2EgPSBvcHRpb25zLmRpcmVjdGlvbikgIT0gbnVsbCA/IF9hIDogXCJib3R0b21cIjtcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlYWN0aXZlKHVzZVNjcm9sbChlbGVtZW50LCBfX3NwcmVhZFByb3BzJDIoX19zcHJlYWRWYWx1ZXMkNyh7fSwgb3B0aW9ucyksIHtcbiAgICBvZmZzZXQ6IF9fc3ByZWFkVmFsdWVzJDcoe1xuICAgICAgW2RpcmVjdGlvbl06IChfYiA9IG9wdGlvbnMuZGlzdGFuY2UpICE9IG51bGwgPyBfYiA6IDBcbiAgICB9LCBvcHRpb25zLm9mZnNldClcbiAgfSkpKTtcbiAgdnVlRGVtaS53YXRjaCgoKSA9PiBzdGF0ZS5hcnJpdmVkU3RhdGVbZGlyZWN0aW9uXSwgYXN5bmMgKHYpID0+IHtcbiAgICB2YXIgX2EyLCBfYjI7XG4gICAgaWYgKHYpIHtcbiAgICAgIGNvbnN0IGVsZW0gPSB2dWVEZW1pLnVucmVmKGVsZW1lbnQpO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB7XG4gICAgICAgIGhlaWdodDogKF9hMiA9IGVsZW0gPT0gbnVsbCA/IHZvaWQgMCA6IGVsZW0uc2Nyb2xsSGVpZ2h0KSAhPSBudWxsID8gX2EyIDogMCxcbiAgICAgICAgd2lkdGg6IChfYjIgPSBlbGVtID09IG51bGwgPyB2b2lkIDAgOiBlbGVtLnNjcm9sbFdpZHRoKSAhPSBudWxsID8gX2IyIDogMFxuICAgICAgfTtcbiAgICAgIGF3YWl0IG9uTG9hZE1vcmUoc3RhdGUpO1xuICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVTY3JvbGxQb3NpdGlvbiAmJiBlbGVtKSB7XG4gICAgICAgIHZ1ZURlbWkubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW0uc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiBlbGVtLnNjcm9sbEhlaWdodCAtIHByZXZpb3VzLmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGVsZW0uc2Nyb2xsV2lkdGggLSBwcmV2aW91cy53aWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcih0YXJnZXQsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHJvb3QsXG4gICAgcm9vdE1hcmdpbiA9IFwiMHB4XCIsXG4gICAgdGhyZXNob2xkID0gMC4xLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gd2luZG93ICYmIFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcIiBpbiB3aW5kb3c7XG4gIGxldCBjbGVhbnVwID0gc2hhcmVkLm5vb3A7XG4gIGNvbnN0IHN0b3BXYXRjaCA9IGlzU3VwcG9ydGVkID8gdnVlRGVtaS53YXRjaCgoKSA9PiAoe1xuICAgIGVsOiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICByb290OiB1bnJlZkVsZW1lbnQocm9vdClcbiAgfSksICh7IGVsLCByb290OiByb290MiB9KSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIHtcbiAgICAgIHJvb3Q6IHJvb3QyLFxuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZFxuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWwpO1xuICAgIGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICBjbGVhbnVwID0gc2hhcmVkLm5vb3A7XG4gICAgfTtcbiAgfSwgeyBpbW1lZGlhdGU6IHRydWUsIGZsdXNoOiBcInBvc3RcIiB9KSA6IHNoYXJlZC5ub29wO1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBzdG9wV2F0Y2goKTtcbiAgfTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIHN0b3BcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdEV2ZW50cyA9IFtcIm1vdXNlZG93blwiLCBcIm1vdXNldXBcIiwgXCJrZXlkb3duXCIsIFwia2V5dXBcIl07XG5mdW5jdGlvbiB1c2VLZXlNb2RpZmllcihtb2RpZmllciwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBldmVudHMgPSBkZWZhdWx0RXZlbnRzLFxuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LFxuICAgIGluaXRpYWwgPSBudWxsXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkucmVmKGluaXRpYWwpO1xuICBpZiAoZG9jdW1lbnQpIHtcbiAgICBldmVudHMuZm9yRWFjaCgobGlzdGVuZXJFdmVudCkgPT4ge1xuICAgICAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgbGlzdGVuZXJFdmVudCwgKGV2dCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGV2dC5nZXRNb2RpZmllclN0YXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgc3RhdGUudmFsdWUgPSBldnQuZ2V0TW9kaWZpZXJTdGF0ZShtb2RpZmllcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVzZUxvY2FsU3RvcmFnZShrZXksIGluaXRpYWxWYWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIHVzZVN0b3JhZ2Uoa2V5LCBpbml0aWFsVmFsdWUsIHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93LmxvY2FsU3RvcmFnZSwgb3B0aW9ucyk7XG59XG5cbmNvbnN0IERlZmF1bHRNYWdpY0tleXNBbGlhc01hcCA9IHtcbiAgY3RybDogXCJjb250cm9sXCIsXG4gIGNvbW1hbmQ6IFwibWV0YVwiLFxuICBjbWQ6IFwibWV0YVwiLFxuICBvcHRpb246IFwiYWx0XCIsXG4gIHVwOiBcImFycm93dXBcIixcbiAgZG93bjogXCJhcnJvd2Rvd25cIixcbiAgbGVmdDogXCJhcnJvd2xlZnRcIixcbiAgcmlnaHQ6IFwiYXJyb3dyaWdodFwiXG59O1xuXG5mdW5jdGlvbiB1c2VNYWdpY0tleXMob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICByZWFjdGl2ZTogdXNlUmVhY3RpdmUgPSBmYWxzZSxcbiAgICB0YXJnZXQgPSBkZWZhdWx0V2luZG93LFxuICAgIGFsaWFzTWFwID0gRGVmYXVsdE1hZ2ljS2V5c0FsaWFzTWFwLFxuICAgIHBhc3NpdmUgPSB0cnVlLFxuICAgIG9uRXZlbnRGaXJlZCA9IHNoYXJlZC5ub29wXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjdXJyZW50ID0gdnVlRGVtaS5yZWFjdGl2ZShuZXcgU2V0KCkpO1xuICBjb25zdCBvYmogPSB7IHRvSlNPTigpIHtcbiAgICByZXR1cm4ge307XG4gIH0sIGN1cnJlbnQgfTtcbiAgY29uc3QgcmVmcyA9IHVzZVJlYWN0aXZlID8gdnVlRGVtaS5yZWFjdGl2ZShvYmopIDogb2JqO1xuICBjb25zdCBtZXRhRGVwcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdXNlZEtleXMgPSBuZXcgU2V0KCk7XG4gIGZ1bmN0aW9uIHNldFJlZnMoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gcmVmcykge1xuICAgICAgaWYgKHVzZVJlYWN0aXZlKVxuICAgICAgICByZWZzW2tleV0gPSB2YWx1ZTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVmc1trZXldLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHVzZWRLZXlzKVxuICAgICAgc2V0UmVmcyhrZXksIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVSZWZzKGUsIHZhbHVlKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBrZXkgPSAoX2EgPSBlLmtleSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY29kZSA9IChfYiA9IGUuY29kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVzID0gW2NvZGUsIGtleV0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChjb2RlKSB7XG4gICAgICBpZiAodmFsdWUpXG4gICAgICAgIGN1cnJlbnQuYWRkKGUuY29kZSk7XG4gICAgICBlbHNlXG4gICAgICAgIGN1cnJlbnQuZGVsZXRlKGUuY29kZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5MiBvZiB2YWx1ZXMpIHtcbiAgICAgIHVzZWRLZXlzLmFkZChrZXkyKTtcbiAgICAgIHNldFJlZnMoa2V5MiwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSBcIm1ldGFcIiAmJiAhdmFsdWUpIHtcbiAgICAgIG1ldGFEZXBzLmZvckVhY2goKGtleTIpID0+IHtcbiAgICAgICAgY3VycmVudC5kZWxldGUoa2V5Mik7XG4gICAgICAgIHNldFJlZnMoa2V5MiwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBtZXRhRGVwcy5jbGVhcigpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGUuZ2V0TW9kaWZpZXJTdGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmIGUuZ2V0TW9kaWZpZXJTdGF0ZShcIk1ldGFcIikgJiYgdmFsdWUpIHtcbiAgICAgIFsuLi5jdXJyZW50LCAuLi52YWx1ZXNdLmZvckVhY2goKGtleTIpID0+IG1ldGFEZXBzLmFkZChrZXkyKSk7XG4gICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgICB1cGRhdGVSZWZzKGUsIHRydWUpO1xuICAgICAgcmV0dXJuIG9uRXZlbnRGaXJlZChlKTtcbiAgICB9LCB7IHBhc3NpdmUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwia2V5dXBcIiwgKGUpID0+IHtcbiAgICAgIHVwZGF0ZVJlZnMoZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIG9uRXZlbnRGaXJlZChlKTtcbiAgICB9LCB7IHBhc3NpdmUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgcmVzZXQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgcmVzZXQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShyZWZzLCB7XG4gICAgZ2V0KHRhcmdldDIsIHByb3AsIHJlYykge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0MiwgcHJvcCwgcmVjKTtcbiAgICAgIHByb3AgPSBwcm9wLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocHJvcCBpbiBhbGlhc01hcClcbiAgICAgICAgcHJvcCA9IGFsaWFzTWFwW3Byb3BdO1xuICAgICAgaWYgKCEocHJvcCBpbiByZWZzKSkge1xuICAgICAgICBpZiAoL1srXy1dLy50ZXN0KHByb3ApKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHByb3Auc3BsaXQoL1srXy1dL2cpLm1hcCgoaSkgPT4gaS50cmltKCkpO1xuICAgICAgICAgIHJlZnNbcHJvcF0gPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGtleXMuZXZlcnkoKGtleSkgPT4gdnVlRGVtaS51bnJlZihwcm94eVtrZXldKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbcHJvcF0gPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHIgPSBSZWZsZWN0LmdldCh0YXJnZXQyLCBwcm9wLCByZWMpO1xuICAgICAgcmV0dXJuIHVzZVJlYWN0aXZlID8gdnVlRGVtaS51bnJlZihyKSA6IHI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3h5O1xufVxuXG52YXIgX19kZWZQcm9wJDYgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ3ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkNyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDcgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ2ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ2KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ2ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkNy5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDYoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDcpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDcoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kNy5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkNihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzaW5nRWxSZWYoc291cmNlLCBjYikge1xuICBpZiAodnVlRGVtaS51bnJlZihzb3VyY2UpKVxuICAgIGNiKHZ1ZURlbWkudW5yZWYoc291cmNlKSk7XG59XG5mdW5jdGlvbiB0aW1lUmFuZ2VUb0FycmF5KHRpbWVSYW5nZXMpIHtcbiAgbGV0IHJhbmdlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoOyArK2kpXG4gICAgcmFuZ2VzID0gWy4uLnJhbmdlcywgW3RpbWVSYW5nZXMuc3RhcnQoaSksIHRpbWVSYW5nZXMuZW5kKGkpXV07XG4gIHJldHVybiByYW5nZXM7XG59XG5mdW5jdGlvbiB0cmFja3NUb0FycmF5KHRyYWNrcykge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0cmFja3MpLm1hcCgoeyBsYWJlbCwga2luZCwgbGFuZ3VhZ2UsIG1vZGUsIGFjdGl2ZUN1ZXMsIGN1ZXMsIGluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUgfSwgaWQpID0+ICh7IGlkLCBsYWJlbCwga2luZCwgbGFuZ3VhZ2UsIG1vZGUsIGFjdGl2ZUN1ZXMsIGN1ZXMsIGluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUgfSkpO1xufVxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHNyYzogXCJcIixcbiAgdHJhY2tzOiBbXVxufTtcbmZ1bmN0aW9uIHVzZU1lZGlhQ29udHJvbHModGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgb3B0aW9ucyA9IF9fc3ByZWFkVmFsdWVzJDYoX19zcHJlYWRWYWx1ZXMkNih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgY29uc3Qge1xuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjdXJyZW50VGltZSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBkdXJhdGlvbiA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBzZWVraW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCB2b2x1bWUgPSB2dWVEZW1pLnJlZigxKTtcbiAgY29uc3Qgd2FpdGluZyA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgZW5kZWQgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHBsYXlpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHJhdGUgPSB2dWVEZW1pLnJlZigxKTtcbiAgY29uc3Qgc3RhbGxlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgYnVmZmVyZWQgPSB2dWVEZW1pLnJlZihbXSk7XG4gIGNvbnN0IHRyYWNrcyA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgY29uc3Qgc2VsZWN0ZWRUcmFjayA9IHZ1ZURlbWkucmVmKC0xKTtcbiAgY29uc3QgaXNQaWN0dXJlSW5QaWN0dXJlID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBtdXRlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3Qgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlID0gZG9jdW1lbnQgJiYgXCJwaWN0dXJlSW5QaWN0dXJlRW5hYmxlZFwiIGluIGRvY3VtZW50O1xuICBjb25zdCBzb3VyY2VFcnJvckV2ZW50ID0gc2hhcmVkLmNyZWF0ZUV2ZW50SG9vaygpO1xuICBjb25zdCBkaXNhYmxlVHJhY2sgPSAodHJhY2spID0+IHtcbiAgICB1c2luZ0VsUmVmKHRhcmdldCwgKGVsKSA9PiB7XG4gICAgICBpZiAodHJhY2spIHtcbiAgICAgICAgY29uc3QgaWQgPSBzaGFyZWQuaXNOdW1iZXIodHJhY2spID8gdHJhY2sgOiB0cmFjay5pZDtcbiAgICAgICAgZWwudGV4dFRyYWNrc1tpZF0ubW9kZSA9IFwiZGlzYWJsZWRcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWwudGV4dFRyYWNrcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICBlbC50ZXh0VHJhY2tzW2ldLm1vZGUgPSBcImRpc2FibGVkXCI7XG4gICAgICB9XG4gICAgICBzZWxlY3RlZFRyYWNrLnZhbHVlID0gLTE7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGVuYWJsZVRyYWNrID0gKHRyYWNrLCBkaXNhYmxlVHJhY2tzID0gdHJ1ZSkgPT4ge1xuICAgIHVzaW5nRWxSZWYodGFyZ2V0LCAoZWwpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gc2hhcmVkLmlzTnVtYmVyKHRyYWNrKSA/IHRyYWNrIDogdHJhY2suaWQ7XG4gICAgICBpZiAoZGlzYWJsZVRyYWNrcylcbiAgICAgICAgZGlzYWJsZVRyYWNrKCk7XG4gICAgICBlbC50ZXh0VHJhY2tzW2lkXS5tb2RlID0gXCJzaG93aW5nXCI7XG4gICAgICBzZWxlY3RlZFRyYWNrLnZhbHVlID0gaWQ7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVzaW5nRWxSZWYodGFyZ2V0LCBhc3luYyAoZWwpID0+IHtcbiAgICAgICAgaWYgKHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSkge1xuICAgICAgICAgIGlmICghaXNQaWN0dXJlSW5QaWN0dXJlLnZhbHVlKSB7XG4gICAgICAgICAgICBlbC5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSgpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuZXhpdFBpY3R1cmVJblBpY3R1cmUoKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgdnVlRGVtaS53YXRjaEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IHZ1ZURlbWkudW5yZWYob3B0aW9ucy5zcmMpO1xuICAgIGxldCBzb3VyY2VzID0gW107XG4gICAgaWYgKCFzcmMpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHNoYXJlZC5pc1N0cmluZyhzcmMpKVxuICAgICAgc291cmNlcyA9IFt7IHNyYyB9XTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNyYykpXG4gICAgICBzb3VyY2VzID0gc3JjO1xuICAgIGVsc2UgaWYgKHNoYXJlZC5pc09iamVjdChzcmMpKVxuICAgICAgc291cmNlcyA9IFtzcmNdO1xuICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzb3VyY2VcIikuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc291cmNlRXJyb3JFdmVudC50cmlnZ2VyKTtcbiAgICAgIGUucmVtb3ZlKCk7XG4gICAgfSk7XG4gICAgc291cmNlcy5mb3JFYWNoKCh7IHNyYzogc3JjMiwgdHlwZSB9KSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic291cmNlXCIpO1xuICAgICAgc291cmNlLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMyKTtcbiAgICAgIHNvdXJjZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIHR5cGUgfHwgXCJcIik7XG4gICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNvdXJjZUVycm9yRXZlbnQudHJpZ2dlcik7XG4gICAgICBlbC5hcHBlbmRDaGlsZChzb3VyY2UpO1xuICAgIH0pO1xuICAgIGVsLmxvYWQoKTtcbiAgfSk7XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKFwic291cmNlXCIpLmZvckVhY2goKGUpID0+IGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNvdXJjZUVycm9yRXZlbnQudHJpZ2dlcikpO1xuICB9KTtcbiAgdnVlRGVtaS53YXRjaCh2b2x1bWUsICh2b2wpID0+IHtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIGVsLnZvbHVtZSA9IHZvbDtcbiAgfSk7XG4gIHZ1ZURlbWkud2F0Y2gobXV0ZWQsIChtdXRlKSA9PiB7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC5tdXRlZCA9IG11dGU7XG4gIH0pO1xuICB2dWVEZW1pLndhdGNoKHJhdGUsIChyYXRlMikgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgZWwucGxheWJhY2tSYXRlID0gcmF0ZTI7XG4gIH0pO1xuICB2dWVEZW1pLndhdGNoRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHRleHRUcmFja3MgPSB2dWVEZW1pLnVucmVmKG9wdGlvbnMudHJhY2tzKTtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIXRleHRUcmFja3MgfHwgIXRleHRUcmFja3MubGVuZ3RoIHx8ICFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKFwidHJhY2tcIikuZm9yRWFjaCgoZSkgPT4gZS5yZW1vdmUoKSk7XG4gICAgdGV4dFRyYWNrcy5mb3JFYWNoKCh7IGRlZmF1bHQ6IGlzRGVmYXVsdCwga2luZCwgbGFiZWwsIHNyYywgc3JjTGFuZyB9LCBpKSA9PiB7XG4gICAgICBjb25zdCB0cmFjayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0cmFja1wiKTtcbiAgICAgIHRyYWNrLmRlZmF1bHQgPSBpc0RlZmF1bHQgfHwgZmFsc2U7XG4gICAgICB0cmFjay5raW5kID0ga2luZDtcbiAgICAgIHRyYWNrLmxhYmVsID0gbGFiZWw7XG4gICAgICB0cmFjay5zcmMgPSBzcmM7XG4gICAgICB0cmFjay5zcmNsYW5nID0gc3JjTGFuZztcbiAgICAgIGlmICh0cmFjay5kZWZhdWx0KVxuICAgICAgICBzZWxlY3RlZFRyYWNrLnZhbHVlID0gaTtcbiAgICAgIGVsLmFwcGVuZENoaWxkKHRyYWNrKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IHsgaWdub3JlVXBkYXRlczogaWdub3JlQ3VycmVudFRpbWVVcGRhdGVzIH0gPSBzaGFyZWQud2F0Y2hJZ25vcmFibGUoY3VycmVudFRpbWUsICh0aW1lKSA9PiB7XG4gICAgY29uc3QgZWwgPSB2dWVEZW1pLnVucmVmKHRhcmdldCk7XG4gICAgaWYgKCFlbClcbiAgICAgIHJldHVybjtcbiAgICBlbC5jdXJyZW50VGltZSA9IHRpbWU7XG4gIH0pO1xuICBjb25zdCB7IGlnbm9yZVVwZGF0ZXM6IGlnbm9yZVBsYXlpbmdVcGRhdGVzIH0gPSBzaGFyZWQud2F0Y2hJZ25vcmFibGUocGxheWluZywgKGlzUGxheWluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgaXNQbGF5aW5nID8gZWwucGxheSgpIDogZWwucGF1c2UoKTtcbiAgfSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInRpbWV1cGRhdGVcIiwgKCkgPT4gaWdub3JlQ3VycmVudFRpbWVVcGRhdGVzKCgpID0+IGN1cnJlbnRUaW1lLnZhbHVlID0gdnVlRGVtaS51bnJlZih0YXJnZXQpLmN1cnJlbnRUaW1lKSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcImR1cmF0aW9uY2hhbmdlXCIsICgpID0+IGR1cmF0aW9uLnZhbHVlID0gdnVlRGVtaS51bnJlZih0YXJnZXQpLmR1cmF0aW9uKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicHJvZ3Jlc3NcIiwgKCkgPT4gYnVmZmVyZWQudmFsdWUgPSB0aW1lUmFuZ2VUb0FycmF5KHZ1ZURlbWkudW5yZWYodGFyZ2V0KS5idWZmZXJlZCkpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJzZWVraW5nXCIsICgpID0+IHNlZWtpbmcudmFsdWUgPSB0cnVlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwic2Vla2VkXCIsICgpID0+IHNlZWtpbmcudmFsdWUgPSBmYWxzZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcIndhaXRpbmdcIiwgKCkgPT4gd2FpdGluZy52YWx1ZSA9IHRydWUpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJwbGF5aW5nXCIsICgpID0+IHdhaXRpbmcudmFsdWUgPSBmYWxzZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInJhdGVjaGFuZ2VcIiwgKCkgPT4gcmF0ZS52YWx1ZSA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KS5wbGF5YmFja1JhdGUpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJzdGFsbGVkXCIsICgpID0+IHN0YWxsZWQudmFsdWUgPSB0cnVlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZW5kZWRcIiwgKCkgPT4gZW5kZWQudmFsdWUgPSB0cnVlKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicGF1c2VcIiwgKCkgPT4gaWdub3JlUGxheWluZ1VwZGF0ZXMoKCkgPT4gcGxheWluZy52YWx1ZSA9IGZhbHNlKSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBsYXlcIiwgKCkgPT4gaWdub3JlUGxheWluZ1VwZGF0ZXMoKCkgPT4gcGxheWluZy52YWx1ZSA9IHRydWUpKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwiZW50ZXJwaWN0dXJlaW5waWN0dXJlXCIsICgpID0+IGlzUGljdHVyZUluUGljdHVyZS52YWx1ZSA9IHRydWUpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJsZWF2ZXBpY3R1cmVpbnBpY3R1cmVcIiwgKCkgPT4gaXNQaWN0dXJlSW5QaWN0dXJlLnZhbHVlID0gZmFsc2UpO1xuICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ2b2x1bWVjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdnVlRGVtaS51bnJlZih0YXJnZXQpO1xuICAgIGlmICghZWwpXG4gICAgICByZXR1cm47XG4gICAgdm9sdW1lLnZhbHVlID0gZWwudm9sdW1lO1xuICAgIG11dGVkLnZhbHVlID0gZWwubXV0ZWQ7XG4gIH0pO1xuICBjb25zdCBsaXN0ZW5lcnMgPSBbXTtcbiAgY29uc3Qgc3RvcCA9IHZ1ZURlbWkud2F0Y2goW3RhcmdldF0sICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHZ1ZURlbWkudW5yZWYodGFyZ2V0KTtcbiAgICBpZiAoIWVsKVxuICAgICAgcmV0dXJuO1xuICAgIHN0b3AoKTtcbiAgICBsaXN0ZW5lcnNbMF0gPSB1c2VFdmVudExpc3RlbmVyKGVsLnRleHRUcmFja3MsIFwiYWRkdHJhY2tcIiwgKCkgPT4gdHJhY2tzLnZhbHVlID0gdHJhY2tzVG9BcnJheShlbC50ZXh0VHJhY2tzKSk7XG4gICAgbGlzdGVuZXJzWzFdID0gdXNlRXZlbnRMaXN0ZW5lcihlbC50ZXh0VHJhY2tzLCBcInJlbW92ZXRyYWNrXCIsICgpID0+IHRyYWNrcy52YWx1ZSA9IHRyYWNrc1RvQXJyYXkoZWwudGV4dFRyYWNrcykpO1xuICAgIGxpc3RlbmVyc1syXSA9IHVzZUV2ZW50TGlzdGVuZXIoZWwudGV4dFRyYWNrcywgXCJjaGFuZ2VcIiwgKCkgPT4gdHJhY2tzLnZhbHVlID0gdHJhY2tzVG9BcnJheShlbC50ZXh0VHJhY2tzKSk7XG4gIH0pO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4gbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcigpKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWUsXG4gICAgZHVyYXRpb24sXG4gICAgd2FpdGluZyxcbiAgICBzZWVraW5nLFxuICAgIGVuZGVkLFxuICAgIHN0YWxsZWQsXG4gICAgYnVmZmVyZWQsXG4gICAgcGxheWluZyxcbiAgICByYXRlLFxuICAgIHZvbHVtZSxcbiAgICBtdXRlZCxcbiAgICB0cmFja3MsXG4gICAgc2VsZWN0ZWRUcmFjayxcbiAgICBlbmFibGVUcmFjayxcbiAgICBkaXNhYmxlVHJhY2ssXG4gICAgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlLFxuICAgIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUsXG4gICAgaXNQaWN0dXJlSW5QaWN0dXJlLFxuICAgIG9uU291cmNlRXJyb3I6IHNvdXJjZUVycm9yRXZlbnQub25cbiAgfTtcbn1cblxuY29uc3QgZ2V0TWFwVnVlMkNvbXBhdCA9ICgpID0+IHtcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVhY3RpdmUoe30pO1xuICByZXR1cm4ge1xuICAgIGdldDogKGtleSkgPT4gZGF0YVtrZXldLFxuICAgIHNldDogKGtleSwgdmFsdWUpID0+IHZ1ZURlbWkuc2V0KGRhdGEsIGtleSwgdmFsdWUpLFxuICAgIGhhczogKGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSksXG4gICAgZGVsZXRlOiAoa2V5KSA9PiB2dWVEZW1pLmRlbChkYXRhLCBrZXkpLFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgdnVlRGVtaS5kZWwoZGF0YSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5mdW5jdGlvbiB1c2VNZW1vaXplKHJlc29sdmVyLCBvcHRpb25zKSB7XG4gIGNvbnN0IGluaXRDYWNoZSA9ICgpID0+IHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5jYWNoZSlcbiAgICAgIHJldHVybiB2dWVEZW1pLnJlYWN0aXZlKG9wdGlvbnMuY2FjaGUpO1xuICAgIGlmICh2dWVEZW1pLmlzVnVlMilcbiAgICAgIHJldHVybiBnZXRNYXBWdWUyQ29tcGF0KCk7XG4gICAgcmV0dXJuIHZ1ZURlbWkucmVhY3RpdmUobmV3IE1hcCgpKTtcbiAgfTtcbiAgY29uc3QgY2FjaGUgPSBpbml0Q2FjaGUoKTtcbiAgY29uc3QgZ2VuZXJhdGVLZXkgPSAoLi4uYXJncykgPT4gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0S2V5KSA/IG9wdGlvbnMuZ2V0S2V5KC4uLmFyZ3MpIDogSlNPTi5zdHJpbmdpZnkoYXJncyk7XG4gIGNvbnN0IF9sb2FkRGF0YSA9IChrZXksIC4uLmFyZ3MpID0+IHtcbiAgICBjYWNoZS5zZXQoa2V5LCByZXNvbHZlciguLi5hcmdzKSk7XG4gICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICB9O1xuICBjb25zdCBsb2FkRGF0YSA9ICguLi5hcmdzKSA9PiBfbG9hZERhdGEoZ2VuZXJhdGVLZXkoLi4uYXJncyksIC4uLmFyZ3MpO1xuICBjb25zdCBkZWxldGVEYXRhID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjYWNoZS5kZWxldGUoZ2VuZXJhdGVLZXkoLi4uYXJncykpO1xuICB9O1xuICBjb25zdCBjbGVhckRhdGEgPSAoKSA9PiB7XG4gICAgY2FjaGUuY2xlYXIoKTtcbiAgfTtcbiAgY29uc3QgbWVtb2l6ZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGdlbmVyYXRlS2V5KC4uLmFyZ3MpO1xuICAgIGlmIChjYWNoZS5oYXMoa2V5KSlcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICByZXR1cm4gX2xvYWREYXRhKGtleSwgLi4uYXJncyk7XG4gIH07XG4gIG1lbW9pemVkLmxvYWQgPSBsb2FkRGF0YTtcbiAgbWVtb2l6ZWQuZGVsZXRlID0gZGVsZXRlRGF0YTtcbiAgbWVtb2l6ZWQuY2xlYXIgPSBjbGVhckRhdGE7XG4gIG1lbW9pemVkLmdlbmVyYXRlS2V5ID0gZ2VuZXJhdGVLZXk7XG4gIG1lbW9pemVkLmNhY2hlID0gY2FjaGU7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuZnVuY3Rpb24gdXNlTWVtb3J5KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBtZW1vcnkgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBcIm1lbW9yeVwiIGluIHBlcmZvcm1hbmNlO1xuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICBjb25zdCB7IGludGVydmFsID0gMWUzIH0gPSBvcHRpb25zO1xuICAgIHNoYXJlZC51c2VJbnRlcnZhbEZuKCgpID0+IHtcbiAgICAgIG1lbW9yeS52YWx1ZSA9IHBlcmZvcm1hbmNlLm1lbW9yeTtcbiAgICB9LCBpbnRlcnZhbCwgeyBpbW1lZGlhdGU6IG9wdGlvbnMuaW1tZWRpYXRlLCBpbW1lZGlhdGVDYWxsYmFjazogb3B0aW9ucy5pbW1lZGlhdGVDYWxsYmFjayB9KTtcbiAgfVxuICByZXR1cm4geyBpc1N1cHBvcnRlZCwgbWVtb3J5IH07XG59XG5cbmZ1bmN0aW9uIHVzZU1vdW50ZWQoKSB7XG4gIGNvbnN0IGlzTW91bnRlZCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgdnVlRGVtaS5vbk1vdW50ZWQoKCkgPT4ge1xuICAgIGlzTW91bnRlZC52YWx1ZSA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gaXNNb3VudGVkO1xufVxuXG5mdW5jdGlvbiB1c2VNb3VzZShvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHR5cGUgPSBcInBhZ2VcIixcbiAgICB0b3VjaCA9IHRydWUsXG4gICAgcmVzZXRPblRvdWNoRW5kcyA9IGZhbHNlLFxuICAgIGluaXRpYWxWYWx1ZSA9IHsgeDogMCwgeTogMCB9LFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csXG4gICAgZXZlbnRGaWx0ZXJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHggPSB2dWVEZW1pLnJlZihpbml0aWFsVmFsdWUueCk7XG4gIGNvbnN0IHkgPSB2dWVEZW1pLnJlZihpbml0aWFsVmFsdWUueSk7XG4gIGNvbnN0IHNvdXJjZVR5cGUgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgbW91c2VIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKHR5cGUgPT09IFwicGFnZVwiKSB7XG4gICAgICB4LnZhbHVlID0gZXZlbnQucGFnZVg7XG4gICAgICB5LnZhbHVlID0gZXZlbnQucGFnZVk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImNsaWVudFwiKSB7XG4gICAgICB4LnZhbHVlID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHkudmFsdWUgPSBldmVudC5jbGllbnRZO1xuICAgIH1cbiAgICBzb3VyY2VUeXBlLnZhbHVlID0gXCJtb3VzZVwiO1xuICB9O1xuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICB4LnZhbHVlID0gaW5pdGlhbFZhbHVlLng7XG4gICAgeS52YWx1ZSA9IGluaXRpYWxWYWx1ZS55O1xuICB9O1xuICBjb25zdCB0b3VjaEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0b3VjaDIgPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgaWYgKHR5cGUgPT09IFwicGFnZVwiKSB7XG4gICAgICAgIHgudmFsdWUgPSB0b3VjaDIucGFnZVg7XG4gICAgICAgIHkudmFsdWUgPSB0b3VjaDIucGFnZVk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2xpZW50XCIpIHtcbiAgICAgICAgeC52YWx1ZSA9IHRvdWNoMi5jbGllbnRYO1xuICAgICAgICB5LnZhbHVlID0gdG91Y2gyLmNsaWVudFk7XG4gICAgICB9XG4gICAgICBzb3VyY2VUeXBlLnZhbHVlID0gXCJ0b3VjaFwiO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgbW91c2VIYW5kbGVyV3JhcHBlciA9IChldmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudEZpbHRlciA9PT0gdm9pZCAwID8gbW91c2VIYW5kbGVyKGV2ZW50KSA6IGV2ZW50RmlsdGVyKCgpID0+IG1vdXNlSGFuZGxlcihldmVudCksIHt9KTtcbiAgfTtcbiAgY29uc3QgdG91Y2hIYW5kbGVyV3JhcHBlciA9IChldmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudEZpbHRlciA9PT0gdm9pZCAwID8gdG91Y2hIYW5kbGVyKGV2ZW50KSA6IGV2ZW50RmlsdGVyKCgpID0+IHRvdWNoSGFuZGxlcihldmVudCksIHt9KTtcbiAgfTtcbiAgaWYgKHdpbmRvdykge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm1vdXNlbW92ZVwiLCBtb3VzZUhhbmRsZXJXcmFwcGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZHJhZ292ZXJcIiwgbW91c2VIYW5kbGVyV3JhcHBlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGlmICh0b3VjaCkge1xuICAgICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwidG91Y2hzdGFydFwiLCB0b3VjaEhhbmRsZXJXcmFwcGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJ0b3VjaG1vdmVcIiwgdG91Y2hIYW5kbGVyV3JhcHBlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgaWYgKHJlc2V0T25Ub3VjaEVuZHMpXG4gICAgICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInRvdWNoZW5kXCIsIHJlc2V0LCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHNvdXJjZVR5cGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTW91c2VJbkVsZW1lbnQodGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGhhbmRsZU91dHNpZGUgPSB0cnVlLFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgeCwgeSwgc291cmNlVHlwZSB9ID0gdXNlTW91c2Uob3B0aW9ucyk7XG4gIGNvbnN0IHRhcmdldFJlZiA9IHZ1ZURlbWkucmVmKHRhcmdldCAhPSBudWxsID8gdGFyZ2V0IDogd2luZG93ID09IG51bGwgPyB2b2lkIDAgOiB3aW5kb3cuZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IGVsZW1lbnRYID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGVsZW1lbnRZID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGVsZW1lbnRQb3NpdGlvblggPSB2dWVEZW1pLnJlZigwKTtcbiAgY29uc3QgZWxlbWVudFBvc2l0aW9uWSA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHZ1ZURlbWkucmVmKDApO1xuICBjb25zdCBpc091dHNpZGUgPSB2dWVEZW1pLnJlZih0cnVlKTtcbiAgbGV0IHN0b3AgPSAoKSA9PiB7XG4gIH07XG4gIGlmICh3aW5kb3cpIHtcbiAgICBzdG9wID0gdnVlRGVtaS53YXRjaChbdGFyZ2V0UmVmLCB4LCB5XSwgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSB1bnJlZkVsZW1lbnQodGFyZ2V0UmVmKTtcbiAgICAgIGlmICghZWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgdG9wLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBlbGVtZW50UG9zaXRpb25YLnZhbHVlID0gbGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgIGVsZW1lbnRQb3NpdGlvblkudmFsdWUgPSB0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICBlbGVtZW50SGVpZ2h0LnZhbHVlID0gaGVpZ2h0O1xuICAgICAgZWxlbWVudFdpZHRoLnZhbHVlID0gd2lkdGg7XG4gICAgICBjb25zdCBlbFggPSB4LnZhbHVlIC0gZWxlbWVudFBvc2l0aW9uWC52YWx1ZTtcbiAgICAgIGNvbnN0IGVsWSA9IHkudmFsdWUgLSBlbGVtZW50UG9zaXRpb25ZLnZhbHVlO1xuICAgICAgaXNPdXRzaWRlLnZhbHVlID0gd2lkdGggPT09IDAgfHwgaGVpZ2h0ID09PSAwIHx8IGVsWCA8IDAgfHwgZWxZIDwgMCB8fCBlbFggPiB3aWR0aCB8fCBlbFkgPiBoZWlnaHQ7XG4gICAgICBpZiAoaGFuZGxlT3V0c2lkZSB8fCAhaXNPdXRzaWRlLnZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnRYLnZhbHVlID0gZWxYO1xuICAgICAgICBlbGVtZW50WS52YWx1ZSA9IGVsWTtcbiAgICAgIH1cbiAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBzb3VyY2VUeXBlLFxuICAgIGVsZW1lbnRYLFxuICAgIGVsZW1lbnRZLFxuICAgIGVsZW1lbnRQb3NpdGlvblgsXG4gICAgZWxlbWVudFBvc2l0aW9uWSxcbiAgICBlbGVtZW50SGVpZ2h0LFxuICAgIGVsZW1lbnRXaWR0aCxcbiAgICBpc091dHNpZGUsXG4gICAgc3RvcFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VNb3VzZVByZXNzZWQob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0b3VjaCA9IHRydWUsXG4gICAgZHJhZyA9IHRydWUsXG4gICAgaW5pdGlhbFZhbHVlID0gZmFsc2UsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJlc3NlZCA9IHZ1ZURlbWkucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHNvdXJjZVR5cGUgPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgaWYgKCF3aW5kb3cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlc3NlZCxcbiAgICAgIHNvdXJjZVR5cGVcbiAgICB9O1xuICB9XG4gIGNvbnN0IG9uUHJlc3NlZCA9IChzcmNUeXBlKSA9PiAoKSA9PiB7XG4gICAgcHJlc3NlZC52YWx1ZSA9IHRydWU7XG4gICAgc291cmNlVHlwZS52YWx1ZSA9IHNyY1R5cGU7XG4gIH07XG4gIGNvbnN0IG9uUmVsZWFzZWQgPSAoKSA9PiB7XG4gICAgcHJlc3NlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHNvdXJjZVR5cGUudmFsdWUgPSBudWxsO1xuICB9O1xuICBjb25zdCB0YXJnZXQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHVucmVmRWxlbWVudChvcHRpb25zLnRhcmdldCkgfHwgd2luZG93KTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwibW91c2Vkb3duXCIsIG9uUHJlc3NlZChcIm1vdXNlXCIpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm1vdXNlbGVhdmVcIiwgb25SZWxlYXNlZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZXVwXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgaWYgKGRyYWcpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJkcmFnc3RhcnRcIiwgb25QcmVzc2VkKFwibW91c2VcIiksIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJkcm9wXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJkcmFnZW5kXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuICBpZiAodG91Y2gpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ0b3VjaHN0YXJ0XCIsIG9uUHJlc3NlZChcInRvdWNoXCIpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwidG91Y2hlbmRcIiwgb25SZWxlYXNlZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcInRvdWNoY2FuY2VsXCIsIG9uUmVsZWFzZWQsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByZXNzZWQsXG4gICAgc291cmNlVHlwZVxuICB9O1xufVxuXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ2ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkNiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDYgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fb2JqUmVzdCQxID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkNi5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkNilcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNihzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kNi5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcih0YXJnZXQsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IF9hLCBtdXRhdGlvbk9wdGlvbnMgPSBfX29ialJlc3QkMShfYSwgW1wid2luZG93XCJdKTtcbiAgbGV0IG9ic2VydmVyO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHdpbmRvdyAmJiBcIk11dGF0aW9uT2JzZXJ2ZXJcIiBpbiB3aW5kb3c7XG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICBvYnNlcnZlciA9IHZvaWQgMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0b3BXYXRjaCA9IHZ1ZURlbWkud2F0Y2goKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksIChlbCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAoaXNTdXBwb3J0ZWQgJiYgd2luZG93ICYmIGVsKSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWwsIG11dGF0aW9uT3B0aW9ucyk7XG4gICAgfVxuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgc3RvcFdhdGNoKCk7XG4gIH07XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBzdG9wXG4gIH07XG59XG5cbmNvbnN0IHVzZU5hdmlnYXRvckxhbmd1YWdlID0gKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG5hdmlnYXRvciA9IHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93Lm5hdmlnYXRvcjtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKG5hdmlnYXRvciAmJiBcImxhbmd1YWdlXCIgaW4gbmF2aWdhdG9yKTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSB2dWVEZW1pLnJlZihuYXZpZ2F0b3IgPT0gbnVsbCA/IHZvaWQgMCA6IG5hdmlnYXRvci5sYW5ndWFnZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcImxhbmd1YWdlY2hhbmdlXCIsICgpID0+IHtcbiAgICBpZiAobmF2aWdhdG9yKVxuICAgICAgbGFuZ3VhZ2UudmFsdWUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGxhbmd1YWdlXG4gIH07XG59O1xuXG5mdW5jdGlvbiB1c2VOZXR3b3JrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG5hdmlnYXRvciA9IHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93Lm5hdmlnYXRvcjtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKG5hdmlnYXRvciAmJiBcImNvbm5lY3Rpb25cIiBpbiBuYXZpZ2F0b3IpO1xuICBjb25zdCBpc09ubGluZSA9IHZ1ZURlbWkucmVmKHRydWUpO1xuICBjb25zdCBzYXZlRGF0YSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3Qgb2ZmbGluZUF0ID0gdnVlRGVtaS5yZWYodm9pZCAwKTtcbiAgY29uc3Qgb25saW5lQXQgPSB2dWVEZW1pLnJlZih2b2lkIDApO1xuICBjb25zdCBkb3dubGluayA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IGRvd25saW5rTWF4ID0gdnVlRGVtaS5yZWYodm9pZCAwKTtcbiAgY29uc3QgcnR0ID0gdnVlRGVtaS5yZWYodm9pZCAwKTtcbiAgY29uc3QgZWZmZWN0aXZlVHlwZSA9IHZ1ZURlbWkucmVmKHZvaWQgMCk7XG4gIGNvbnN0IHR5cGUgPSB2dWVEZW1pLnJlZihcInVua25vd25cIik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBpc1N1cHBvcnRlZCAmJiBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgZnVuY3Rpb24gdXBkYXRlTmV0d29ya0luZm9ybWF0aW9uKCkge1xuICAgIGlmICghbmF2aWdhdG9yKVxuICAgICAgcmV0dXJuO1xuICAgIGlzT25saW5lLnZhbHVlID0gbmF2aWdhdG9yLm9uTGluZTtcbiAgICBvZmZsaW5lQXQudmFsdWUgPSBpc09ubGluZS52YWx1ZSA/IHZvaWQgMCA6IERhdGUubm93KCk7XG4gICAgb25saW5lQXQudmFsdWUgPSBpc09ubGluZS52YWx1ZSA/IERhdGUubm93KCkgOiB2b2lkIDA7XG4gICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgIGRvd25saW5rLnZhbHVlID0gY29ubmVjdGlvbi5kb3dubGluaztcbiAgICAgIGRvd25saW5rTWF4LnZhbHVlID0gY29ubmVjdGlvbi5kb3dubGlua01heDtcbiAgICAgIGVmZmVjdGl2ZVR5cGUudmFsdWUgPSBjb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGU7XG4gICAgICBydHQudmFsdWUgPSBjb25uZWN0aW9uLnJ0dDtcbiAgICAgIHNhdmVEYXRhLnZhbHVlID0gY29ubmVjdGlvbi5zYXZlRGF0YTtcbiAgICAgIHR5cGUudmFsdWUgPSBjb25uZWN0aW9uLnR5cGU7XG4gICAgfVxuICB9XG4gIGlmICh3aW5kb3cpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJvZmZsaW5lXCIsICgpID0+IHtcbiAgICAgIGlzT25saW5lLnZhbHVlID0gZmFsc2U7XG4gICAgICBvZmZsaW5lQXQudmFsdWUgPSBEYXRlLm5vdygpO1xuICAgIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm9ubGluZVwiLCAoKSA9PiB7XG4gICAgICBpc09ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICBvbmxpbmVBdC52YWx1ZSA9IERhdGUubm93KCk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGNvbm5lY3Rpb24pXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihjb25uZWN0aW9uLCBcImNoYW5nZVwiLCB1cGRhdGVOZXR3b3JrSW5mb3JtYXRpb24sIGZhbHNlKTtcbiAgdXBkYXRlTmV0d29ya0luZm9ybWF0aW9uKCk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgaXNPbmxpbmUsXG4gICAgc2F2ZURhdGEsXG4gICAgb2ZmbGluZUF0LFxuICAgIG9ubGluZUF0LFxuICAgIGRvd25saW5rLFxuICAgIGRvd25saW5rTWF4LFxuICAgIGVmZmVjdGl2ZVR5cGUsXG4gICAgcnR0LFxuICAgIHR5cGVcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ1ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ1ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDUuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ1KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ1KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ1KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDUuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDUoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VOb3cob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250cm9sczogZXhwb3NlQ29udHJvbHMgPSBmYWxzZSxcbiAgICBpbnRlcnZhbCA9IFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG5vdyA9IHZ1ZURlbWkucmVmKG5ldyBEYXRlKCkpO1xuICBjb25zdCB1cGRhdGUgPSAoKSA9PiBub3cudmFsdWUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBjb250cm9scyA9IGludGVydmFsID09PSBcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiID8gdXNlUmFmRm4odXBkYXRlLCB7IGltbWVkaWF0ZTogdHJ1ZSB9KSA6IHNoYXJlZC51c2VJbnRlcnZhbEZuKHVwZGF0ZSwgaW50ZXJ2YWwsIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICBpZiAoZXhwb3NlQ29udHJvbHMpIHtcbiAgICByZXR1cm4gX19zcHJlYWRWYWx1ZXMkNSh7XG4gICAgICBub3dcbiAgICB9LCBjb250cm9scyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vdztcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VPYmplY3RVcmwob2JqZWN0KSB7XG4gIGNvbnN0IHVybCA9IHZ1ZURlbWkucmVmKCk7XG4gIGNvbnN0IHJlbGVhc2UgPSAoKSA9PiB7XG4gICAgaWYgKHVybC52YWx1ZSlcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsLnZhbHVlKTtcbiAgICB1cmwudmFsdWUgPSB2b2lkIDA7XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gdnVlRGVtaS51bnJlZihvYmplY3QpLCAobmV3T2JqZWN0KSA9PiB7XG4gICAgcmVsZWFzZSgpO1xuICAgIGlmIChuZXdPYmplY3QpXG4gICAgICB1cmwudmFsdWUgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ld09iamVjdCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UocmVsZWFzZSk7XG4gIHJldHVybiB2dWVEZW1pLnJlYWRvbmx5KHVybCk7XG59XG5cbmZ1bmN0aW9uIHVzZU9mZnNldFBhZ2luYXRpb24ob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgdG90YWwgPSBJbmZpbml0eSxcbiAgICBwYWdlU2l6ZSA9IDEwLFxuICAgIHBhZ2UgPSAxLFxuICAgIG9uUGFnZUNoYW5nZSA9IHNoYXJlZC5ub29wLFxuICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBzaGFyZWQubm9vcCxcbiAgICBvblBhZ2VDb3VudENoYW5nZSA9IHNoYXJlZC5ub29wXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSB1c2VDbGFtcChwYWdlU2l6ZSwgMSwgSW5maW5pdHkpO1xuICBjb25zdCBwYWdlQ291bnQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IE1hdGguY2VpbCh2dWVEZW1pLnVucmVmKHRvdGFsKSAvIHZ1ZURlbWkudW5yZWYoY3VycmVudFBhZ2VTaXplKSkpO1xuICBjb25zdCBjdXJyZW50UGFnZSA9IHVzZUNsYW1wKHBhZ2UsIDEsIHBhZ2VDb3VudCk7XG4gIGNvbnN0IGlzRmlyc3RQYWdlID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBjdXJyZW50UGFnZS52YWx1ZSA9PT0gMSk7XG4gIGNvbnN0IGlzTGFzdFBhZ2UgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGN1cnJlbnRQYWdlLnZhbHVlID09PSBwYWdlQ291bnQudmFsdWUpO1xuICBpZiAodnVlRGVtaS5pc1JlZihwYWdlKSlcbiAgICBzaGFyZWQuc3luY1JlZihwYWdlLCBjdXJyZW50UGFnZSk7XG4gIGlmICh2dWVEZW1pLmlzUmVmKHBhZ2VTaXplKSlcbiAgICBzaGFyZWQuc3luY1JlZihwYWdlU2l6ZSwgY3VycmVudFBhZ2VTaXplKTtcbiAgZnVuY3Rpb24gcHJldigpIHtcbiAgICBjdXJyZW50UGFnZS52YWx1ZS0tO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgY3VycmVudFBhZ2UudmFsdWUrKztcbiAgfVxuICBjb25zdCByZXR1cm5WYWx1ZSA9IHtcbiAgICBjdXJyZW50UGFnZSxcbiAgICBjdXJyZW50UGFnZVNpemUsXG4gICAgcGFnZUNvdW50LFxuICAgIGlzRmlyc3RQYWdlLFxuICAgIGlzTGFzdFBhZ2UsXG4gICAgcHJldixcbiAgICBuZXh0XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goY3VycmVudFBhZ2UsICgpID0+IHtcbiAgICBvblBhZ2VDaGFuZ2UodnVlRGVtaS5yZWFjdGl2ZShyZXR1cm5WYWx1ZSkpO1xuICB9KTtcbiAgdnVlRGVtaS53YXRjaChjdXJyZW50UGFnZVNpemUsICgpID0+IHtcbiAgICBvblBhZ2VTaXplQ2hhbmdlKHZ1ZURlbWkucmVhY3RpdmUocmV0dXJuVmFsdWUpKTtcbiAgfSk7XG4gIHZ1ZURlbWkud2F0Y2gocGFnZUNvdW50LCAoKSA9PiB7XG4gICAgb25QYWdlQ291bnRDaGFuZ2UodnVlRGVtaS5yZWFjdGl2ZShyZXR1cm5WYWx1ZSkpO1xuICB9KTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5mdW5jdGlvbiB1c2VPbmxpbmUob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgaXNPbmxpbmUgfSA9IHVzZU5ldHdvcmsob3B0aW9ucyk7XG4gIHJldHVybiBpc09ubGluZTtcbn1cblxuZnVuY3Rpb24gdXNlUGFnZUxlYXZlKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGlzTGVmdCA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgIGlmICghd2luZG93KVxuICAgICAgcmV0dXJuO1xuICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuICAgIGNvbnN0IGZyb20gPSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnRvRWxlbWVudDtcbiAgICBpc0xlZnQudmFsdWUgPSAhZnJvbTtcbiAgfTtcbiAgaWYgKHdpbmRvdykge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm1vdXNlb3V0XCIsIGhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgXCJtb3VzZWxlYXZlXCIsIGhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudCwgXCJtb3VzZWVudGVyXCIsIGhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gaXNMZWZ0O1xufVxuXG5mdW5jdGlvbiB1c2VQYXJhbGxheCh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZGV2aWNlT3JpZW50YXRpb25UaWx0QWRqdXN0ID0gKGkpID0+IGksXG4gICAgZGV2aWNlT3JpZW50YXRpb25Sb2xsQWRqdXN0ID0gKGkpID0+IGksXG4gICAgbW91c2VUaWx0QWRqdXN0ID0gKGkpID0+IGksXG4gICAgbW91c2VSb2xsQWRqdXN0ID0gKGkpID0+IGksXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgb3JpZW50YXRpb24gPSB2dWVEZW1pLnJlYWN0aXZlKHVzZURldmljZU9yaWVudGF0aW9uKHsgd2luZG93IH0pKTtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRYOiB4LFxuICAgIGVsZW1lbnRZOiB5LFxuICAgIGVsZW1lbnRXaWR0aDogd2lkdGgsXG4gICAgZWxlbWVudEhlaWdodDogaGVpZ2h0XG4gIH0gPSB1c2VNb3VzZUluRWxlbWVudCh0YXJnZXQsIHsgaGFuZGxlT3V0c2lkZTogZmFsc2UsIHdpbmRvdyB9KTtcbiAgY29uc3Qgc291cmNlID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKG9yaWVudGF0aW9uLmlzU3VwcG9ydGVkICYmIChvcmllbnRhdGlvbi5hbHBoYSAhPSBudWxsICYmIG9yaWVudGF0aW9uLmFscGhhICE9PSAwIHx8IG9yaWVudGF0aW9uLmdhbW1hICE9IG51bGwgJiYgb3JpZW50YXRpb24uZ2FtbWEgIT09IDApKVxuICAgICAgcmV0dXJuIFwiZGV2aWNlT3JpZW50YXRpb25cIjtcbiAgICByZXR1cm4gXCJtb3VzZVwiO1xuICB9KTtcbiAgY29uc3Qgcm9sbCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmIChzb3VyY2UudmFsdWUgPT09IFwiZGV2aWNlT3JpZW50YXRpb25cIikge1xuICAgICAgY29uc3QgdmFsdWUgPSAtb3JpZW50YXRpb24uYmV0YSAvIDkwO1xuICAgICAgcmV0dXJuIGRldmljZU9yaWVudGF0aW9uUm9sbEFkanVzdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gLSh5LnZhbHVlIC0gaGVpZ2h0LnZhbHVlIC8gMikgLyBoZWlnaHQudmFsdWU7XG4gICAgICByZXR1cm4gbW91c2VSb2xsQWRqdXN0KHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCB0aWx0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHNvdXJjZS52YWx1ZSA9PT0gXCJkZXZpY2VPcmllbnRhdGlvblwiKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9yaWVudGF0aW9uLmdhbW1hIC8gOTA7XG4gICAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25UaWx0QWRqdXN0KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWUgPSAoeC52YWx1ZSAtIHdpZHRoLnZhbHVlIC8gMikgLyB3aWR0aC52YWx1ZTtcbiAgICAgIHJldHVybiBtb3VzZVRpbHRBZGp1c3QodmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7IHJvbGwsIHRpbHQsIHNvdXJjZSB9O1xufVxuXG52YXIgX19kZWZQcm9wJDQgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQxID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ0ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNCA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDQuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ0KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ0KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ0KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDQuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDQoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQxID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkMShhLCBfX2dldE93blByb3BEZXNjcyQxKGIpKTtcbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgeDogMCxcbiAgeTogMCxcbiAgcG9pbnRlcklkOiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IG51bGxcbn07XG5jb25zdCBrZXlzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5rZXlzKGRlZmF1bHRTdGF0ZSk7XG5mdW5jdGlvbiB1c2VQb2ludGVyKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGFyZ2V0ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNJbnNpZGUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHN0YXRlID0gdnVlRGVtaS5yZWYob3B0aW9ucy5pbml0aWFsVmFsdWUgfHwge30pO1xuICBPYmplY3QuYXNzaWduKHN0YXRlLnZhbHVlLCBkZWZhdWx0U3RhdGUsIHN0YXRlLnZhbHVlKTtcbiAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgIGlzSW5zaWRlLnZhbHVlID0gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5wb2ludGVyVHlwZXMgJiYgIW9wdGlvbnMucG9pbnRlclR5cGVzLmluY2x1ZGVzKGV2ZW50LnBvaW50ZXJUeXBlKSlcbiAgICAgIHJldHVybjtcbiAgICBzdGF0ZS52YWx1ZSA9IHNoYXJlZC5vYmplY3RQaWNrKGV2ZW50LCBrZXlzLCBmYWxzZSk7XG4gIH07XG4gIGlmICh0YXJnZXQpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJwb2ludGVyZG93blwiLCBoYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcm1vdmVcIiwgaGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInBvaW50ZXJsZWF2ZVwiLCAoKSA9PiBpc0luc2lkZS52YWx1ZSA9IGZhbHNlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIF9fc3ByZWFkUHJvcHMkMShfX3NwcmVhZFZhbHVlcyQ0KHt9LCBzaGFyZWQudG9SZWZzKHN0YXRlKSksIHtcbiAgICBpc0luc2lkZVxuICB9KTtcbn1cblxuZXhwb3J0cy5Td2lwZURpcmVjdGlvbiA9IHZvaWQgMDtcbihmdW5jdGlvbihTd2lwZURpcmVjdGlvbjIpIHtcbiAgU3dpcGVEaXJlY3Rpb24yW1wiVVBcIl0gPSBcIlVQXCI7XG4gIFN3aXBlRGlyZWN0aW9uMltcIlJJR0hUXCJdID0gXCJSSUdIVFwiO1xuICBTd2lwZURpcmVjdGlvbjJbXCJET1dOXCJdID0gXCJET1dOXCI7XG4gIFN3aXBlRGlyZWN0aW9uMltcIkxFRlRcIl0gPSBcIkxFRlRcIjtcbiAgU3dpcGVEaXJlY3Rpb24yW1wiTk9ORVwiXSA9IFwiTk9ORVwiO1xufSkoZXhwb3J0cy5Td2lwZURpcmVjdGlvbiB8fCAoZXhwb3J0cy5Td2lwZURpcmVjdGlvbiA9IHt9KSk7XG5mdW5jdGlvbiB1c2VTd2lwZSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhyZXNob2xkID0gNTAsXG4gICAgb25Td2lwZSxcbiAgICBvblN3aXBlRW5kLFxuICAgIG9uU3dpcGVTdGFydCxcbiAgICBwYXNzaXZlID0gdHJ1ZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjb29yZHNTdGFydCA9IHZ1ZURlbWkucmVhY3RpdmUoeyB4OiAwLCB5OiAwIH0pO1xuICBjb25zdCBjb29yZHNFbmQgPSB2dWVEZW1pLnJlYWN0aXZlKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgZGlmZlggPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGNvb3Jkc1N0YXJ0LnggLSBjb29yZHNFbmQueCk7XG4gIGNvbnN0IGRpZmZZID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBjb29yZHNTdGFydC55IC0gY29vcmRzRW5kLnkpO1xuICBjb25zdCB7IG1heCwgYWJzIH0gPSBNYXRoO1xuICBjb25zdCBpc1RocmVzaG9sZEV4Y2VlZGVkID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBtYXgoYWJzKGRpZmZYLnZhbHVlKSwgYWJzKGRpZmZZLnZhbHVlKSkgPj0gdGhyZXNob2xkKTtcbiAgY29uc3QgaXNTd2lwaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBkaXJlY3Rpb24gPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzVGhyZXNob2xkRXhjZWVkZWQudmFsdWUpXG4gICAgICByZXR1cm4gZXhwb3J0cy5Td2lwZURpcmVjdGlvbi5OT05FO1xuICAgIGlmIChhYnMoZGlmZlgudmFsdWUpID4gYWJzKGRpZmZZLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRpZmZYLnZhbHVlID4gMCA/IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uTEVGVCA6IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uUklHSFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWZmWS52YWx1ZSA+IDAgPyBleHBvcnRzLlN3aXBlRGlyZWN0aW9uLlVQIDogZXhwb3J0cy5Td2lwZURpcmVjdGlvbi5ET1dOO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGdldFRvdWNoRXZlbnRDb29yZHMgPSAoZSkgPT4gW2UudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WV07XG4gIGNvbnN0IHVwZGF0ZUNvb3Jkc1N0YXJ0ID0gKHgsIHkpID0+IHtcbiAgICBjb29yZHNTdGFydC54ID0geDtcbiAgICBjb29yZHNTdGFydC55ID0geTtcbiAgfTtcbiAgY29uc3QgdXBkYXRlQ29vcmRzRW5kID0gKHgsIHkpID0+IHtcbiAgICBjb29yZHNFbmQueCA9IHg7XG4gICAgY29vcmRzRW5kLnkgPSB5O1xuICB9O1xuICBsZXQgbGlzdGVuZXJPcHRpb25zO1xuICBjb25zdCBpc1Bhc3NpdmVFdmVudFN1cHBvcnRlZCA9IGNoZWNrUGFzc2l2ZUV2ZW50U3VwcG9ydCh3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5kb2N1bWVudCk7XG4gIGlmICghcGFzc2l2ZSlcbiAgICBsaXN0ZW5lck9wdGlvbnMgPSBpc1Bhc3NpdmVFdmVudFN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfSA6IHsgY2FwdHVyZTogdHJ1ZSB9O1xuICBlbHNlXG4gICAgbGlzdGVuZXJPcHRpb25zID0gaXNQYXNzaXZlRXZlbnRTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IHRydWUgfSA6IHsgY2FwdHVyZTogZmFsc2UgfTtcbiAgY29uc3Qgb25Ub3VjaEVuZCA9IChlKSA9PiB7XG4gICAgaWYgKGlzU3dpcGluZy52YWx1ZSlcbiAgICAgIG9uU3dpcGVFbmQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uU3dpcGVFbmQoZSwgZGlyZWN0aW9uLnZhbHVlKTtcbiAgICBpc1N3aXBpbmcudmFsdWUgPSBmYWxzZTtcbiAgfTtcbiAgY29uc3Qgc3RvcHMgPSBbXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwidG91Y2hzdGFydFwiLCAoZSkgPT4ge1xuICAgICAgaWYgKGxpc3RlbmVyT3B0aW9ucy5jYXB0dXJlICYmICFsaXN0ZW5lck9wdGlvbnMucGFzc2l2ZSlcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgW3gsIHldID0gZ2V0VG91Y2hFdmVudENvb3JkcyhlKTtcbiAgICAgIHVwZGF0ZUNvb3Jkc1N0YXJ0KHgsIHkpO1xuICAgICAgdXBkYXRlQ29vcmRzRW5kKHgsIHkpO1xuICAgICAgb25Td2lwZVN0YXJ0ID09IG51bGwgPyB2b2lkIDAgOiBvblN3aXBlU3RhcnQoZSk7XG4gICAgfSwgbGlzdGVuZXJPcHRpb25zKSxcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJ0b3VjaG1vdmVcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IFt4LCB5XSA9IGdldFRvdWNoRXZlbnRDb29yZHMoZSk7XG4gICAgICB1cGRhdGVDb29yZHNFbmQoeCwgeSk7XG4gICAgICBpZiAoIWlzU3dpcGluZy52YWx1ZSAmJiBpc1RocmVzaG9sZEV4Y2VlZGVkLnZhbHVlKVxuICAgICAgICBpc1N3aXBpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKGlzU3dpcGluZy52YWx1ZSlcbiAgICAgICAgb25Td2lwZSA9PSBudWxsID8gdm9pZCAwIDogb25Td2lwZShlKTtcbiAgICB9LCBsaXN0ZW5lck9wdGlvbnMpLFxuICAgIHVzZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBcInRvdWNoZW5kXCIsIG9uVG91Y2hFbmQsIGxpc3RlbmVyT3B0aW9ucyksXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwidG91Y2hjYW5jZWxcIiwgb25Ub3VjaEVuZCwgbGlzdGVuZXJPcHRpb25zKVxuICBdO1xuICBjb25zdCBzdG9wID0gKCkgPT4gc3RvcHMuZm9yRWFjaCgocykgPT4gcygpKTtcbiAgcmV0dXJuIHtcbiAgICBpc1Bhc3NpdmVFdmVudFN1cHBvcnRlZCxcbiAgICBpc1N3aXBpbmcsXG4gICAgZGlyZWN0aW9uLFxuICAgIGNvb3Jkc1N0YXJ0LFxuICAgIGNvb3Jkc0VuZCxcbiAgICBsZW5ndGhYOiBkaWZmWCxcbiAgICBsZW5ndGhZOiBkaWZmWSxcbiAgICBzdG9wXG4gIH07XG59XG5mdW5jdGlvbiBjaGVja1Bhc3NpdmVFdmVudFN1cHBvcnQoZG9jdW1lbnQpIHtcbiAgaWYgKCFkb2N1bWVudClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGxldCBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbiAgY29uc3Qgb3B0aW9uc0Jsb2NrID0ge1xuICAgIGdldCBwYXNzaXZlKCkge1xuICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ4XCIsIHNoYXJlZC5ub29wLCBvcHRpb25zQmxvY2spO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwieFwiLCBzaGFyZWQubm9vcCk7XG4gIHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XG59XG5cbmZ1bmN0aW9uIHVzZVBvaW50ZXJTd2lwZSh0YXJnZXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB0YXJnZXRSZWYgPSB2dWVEZW1pLnJlZih0YXJnZXQpO1xuICBjb25zdCB7XG4gICAgdGhyZXNob2xkID0gNTAsXG4gICAgb25Td2lwZSxcbiAgICBvblN3aXBlRW5kLFxuICAgIG9uU3dpcGVTdGFydFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcG9zU3RhcnQgPSB2dWVEZW1pLnJlYWN0aXZlKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgdXBkYXRlUG9zU3RhcnQgPSAoeCwgeSkgPT4ge1xuICAgIHBvc1N0YXJ0LnggPSB4O1xuICAgIHBvc1N0YXJ0LnkgPSB5O1xuICB9O1xuICBjb25zdCBwb3NFbmQgPSB2dWVEZW1pLnJlYWN0aXZlKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgdXBkYXRlUG9zRW5kID0gKHgsIHkpID0+IHtcbiAgICBwb3NFbmQueCA9IHg7XG4gICAgcG9zRW5kLnkgPSB5O1xuICB9O1xuICBjb25zdCBkaXN0YW5jZVggPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHBvc1N0YXJ0LnggLSBwb3NFbmQueCk7XG4gIGNvbnN0IGRpc3RhbmNlWSA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gcG9zU3RhcnQueSAtIHBvc0VuZC55KTtcbiAgY29uc3QgeyBtYXgsIGFicyB9ID0gTWF0aDtcbiAgY29uc3QgaXNUaHJlc2hvbGRFeGNlZWRlZCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gbWF4KGFicyhkaXN0YW5jZVgudmFsdWUpLCBhYnMoZGlzdGFuY2VZLnZhbHVlKSkgPj0gdGhyZXNob2xkKTtcbiAgY29uc3QgaXNTd2lwaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBpc1BvaW50ZXJEb3duID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBkaXJlY3Rpb24gPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzVGhyZXNob2xkRXhjZWVkZWQudmFsdWUpXG4gICAgICByZXR1cm4gZXhwb3J0cy5Td2lwZURpcmVjdGlvbi5OT05FO1xuICAgIGlmIChhYnMoZGlzdGFuY2VYLnZhbHVlKSA+IGFicyhkaXN0YW5jZVkudmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGlzdGFuY2VYLnZhbHVlID4gMCA/IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uTEVGVCA6IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uUklHSFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaXN0YW5jZVkudmFsdWUgPiAwID8gZXhwb3J0cy5Td2lwZURpcmVjdGlvbi5VUCA6IGV4cG9ydHMuU3dpcGVEaXJlY3Rpb24uRE9XTjtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBmaWx0ZXJFdmVudCA9IChlKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMucG9pbnRlclR5cGVzKVxuICAgICAgcmV0dXJuIG9wdGlvbnMucG9pbnRlclR5cGVzLmluY2x1ZGVzKGUucG9pbnRlclR5cGUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBjb25zdCBzdG9wcyA9IFtcbiAgICB1c2VFdmVudExpc3RlbmVyKHRhcmdldCwgXCJwb2ludGVyZG93blwiLCAoZSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIGlmICghZmlsdGVyRXZlbnQoZSkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlzUG9pbnRlckRvd24udmFsdWUgPSB0cnVlO1xuICAgICAgKF9iID0gKF9hID0gdGFyZ2V0UmVmLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2Euc3R5bGUpID09IG51bGwgPyB2b2lkIDAgOiBfYi5zZXRQcm9wZXJ0eShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIik7XG4gICAgICBjb25zdCBldmVudFRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgZXZlbnRUYXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9ID0gZTtcbiAgICAgIHVwZGF0ZVBvc1N0YXJ0KHgsIHkpO1xuICAgICAgdXBkYXRlUG9zRW5kKHgsIHkpO1xuICAgICAgb25Td2lwZVN0YXJ0ID09IG51bGwgPyB2b2lkIDAgOiBvblN3aXBlU3RhcnQoZSk7XG4gICAgfSksXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcm1vdmVcIiwgKGUpID0+IHtcbiAgICAgIGlmICghZmlsdGVyRXZlbnQoZSkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghaXNQb2ludGVyRG93bi52YWx1ZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0gPSBlO1xuICAgICAgdXBkYXRlUG9zRW5kKHgsIHkpO1xuICAgICAgaWYgKCFpc1N3aXBpbmcudmFsdWUgJiYgaXNUaHJlc2hvbGRFeGNlZWRlZC52YWx1ZSlcbiAgICAgICAgaXNTd2lwaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChpc1N3aXBpbmcudmFsdWUpXG4gICAgICAgIG9uU3dpcGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9uU3dpcGUoZSk7XG4gICAgfSksXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIFwicG9pbnRlcnVwXCIsIChlKSA9PiB7XG4gICAgICB2YXIgX2EsIF9iO1xuICAgICAgaWYgKCFmaWx0ZXJFdmVudChlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzU3dpcGluZy52YWx1ZSlcbiAgICAgICAgb25Td2lwZUVuZCA9PSBudWxsID8gdm9pZCAwIDogb25Td2lwZUVuZChlLCBkaXJlY3Rpb24udmFsdWUpO1xuICAgICAgaXNQb2ludGVyRG93bi52YWx1ZSA9IGZhbHNlO1xuICAgICAgaXNTd2lwaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAoX2IgPSAoX2EgPSB0YXJnZXRSZWYudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdHlsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnNldFByb3BlcnR5KFwidG91Y2gtYWN0aW9uXCIsIFwiaW5pdGlhbFwiKTtcbiAgICB9KVxuICBdO1xuICBjb25zdCBzdG9wID0gKCkgPT4gc3RvcHMuZm9yRWFjaCgocykgPT4gcygpKTtcbiAgcmV0dXJuIHtcbiAgICBpc1N3aXBpbmc6IHZ1ZURlbWkucmVhZG9ubHkoaXNTd2lwaW5nKSxcbiAgICBkaXJlY3Rpb246IHZ1ZURlbWkucmVhZG9ubHkoZGlyZWN0aW9uKSxcbiAgICBwb3NTdGFydDogdnVlRGVtaS5yZWFkb25seShwb3NTdGFydCksXG4gICAgcG9zRW5kOiB2dWVEZW1pLnJlYWRvbmx5KHBvc0VuZCksXG4gICAgZGlzdGFuY2VYLFxuICAgIGRpc3RhbmNlWSxcbiAgICBzdG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVByZWZlcnJlZENvbG9yU2NoZW1lKG9wdGlvbnMpIHtcbiAgY29uc3QgaXNMaWdodCA9IHVzZU1lZGlhUXVlcnkoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KVwiLCBvcHRpb25zKTtcbiAgY29uc3QgaXNEYXJrID0gdXNlTWVkaWFRdWVyeShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIiwgb3B0aW9ucyk7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoaXNEYXJrLnZhbHVlKVxuICAgICAgcmV0dXJuIFwiZGFya1wiO1xuICAgIGlmIChpc0xpZ2h0LnZhbHVlKVxuICAgICAgcmV0dXJuIFwibGlnaHRcIjtcbiAgICByZXR1cm4gXCJuby1wcmVmZXJlbmNlXCI7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VQcmVmZXJyZWRMYW5ndWFnZXMob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0gb3B0aW9ucztcbiAgaWYgKCF3aW5kb3cpXG4gICAgcmV0dXJuIHZ1ZURlbWkucmVmKFtcImVuXCJdKTtcbiAgY29uc3QgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvcjtcbiAgY29uc3QgdmFsdWUgPSB2dWVEZW1pLnJlZihuYXZpZ2F0b3IubGFuZ3VhZ2VzKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwibGFuZ3VhZ2VjaGFuZ2VcIiwgKCkgPT4ge1xuICAgIHZhbHVlLnZhbHVlID0gbmF2aWdhdG9yLmxhbmd1YWdlcztcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgdXNlU2NyZWVuT3JpZW50YXRpb24gPSAob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9ICEhKHdpbmRvdyAmJiBcInNjcmVlblwiIGluIHdpbmRvdyAmJiBcIm9yaWVudGF0aW9uXCIgaW4gd2luZG93LnNjcmVlbik7XG4gIGNvbnN0IHNjcmVlbk9yaWVudGF0aW9uID0gaXNTdXBwb3J0ZWQgPyB3aW5kb3cuc2NyZWVuLm9yaWVudGF0aW9uIDoge307XG4gIGNvbnN0IG9yaWVudGF0aW9uID0gdnVlRGVtaS5yZWYoc2NyZWVuT3JpZW50YXRpb24udHlwZSk7XG4gIGNvbnN0IGFuZ2xlID0gdnVlRGVtaS5yZWYoc2NyZWVuT3JpZW50YXRpb24uYW5nbGUgfHwgMCk7XG4gIGlmIChpc1N1cHBvcnRlZCkge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93LCBcIm9yaWVudGF0aW9uY2hhbmdlXCIsICgpID0+IHtcbiAgICAgIG9yaWVudGF0aW9uLnZhbHVlID0gc2NyZWVuT3JpZW50YXRpb24udHlwZTtcbiAgICAgIGFuZ2xlLnZhbHVlID0gc2NyZWVuT3JpZW50YXRpb24uYW5nbGU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbG9ja09yaWVudGF0aW9uID0gKHR5cGUpID0+IHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWRcIikpO1xuICAgIHJldHVybiBzY3JlZW5PcmllbnRhdGlvbi5sb2NrKHR5cGUpO1xuICB9O1xuICBjb25zdCB1bmxvY2tPcmllbnRhdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQpXG4gICAgICBzY3JlZW5PcmllbnRhdGlvbi51bmxvY2soKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBvcmllbnRhdGlvbixcbiAgICBhbmdsZSxcbiAgICBsb2NrT3JpZW50YXRpb24sXG4gICAgdW5sb2NrT3JpZW50YXRpb25cbiAgfTtcbn07XG5cbmNvbnN0IHRvcFZhck5hbWUgPSBcIi0tdnVldXNlLXNhZmUtYXJlYS10b3BcIjtcbmNvbnN0IHJpZ2h0VmFyTmFtZSA9IFwiLS12dWV1c2Utc2FmZS1hcmVhLXJpZ2h0XCI7XG5jb25zdCBib3R0b21WYXJOYW1lID0gXCItLXZ1ZXVzZS1zYWZlLWFyZWEtYm90dG9tXCI7XG5jb25zdCBsZWZ0VmFyTmFtZSA9IFwiLS12dWV1c2Utc2FmZS1hcmVhLWxlZnRcIjtcbmZ1bmN0aW9uIHVzZVNjcmVlblNhZmVBcmVhKCkge1xuICBjb25zdCB0b3AgPSB2dWVEZW1pLnJlZihcIlwiKTtcbiAgY29uc3QgcmlnaHQgPSB2dWVEZW1pLnJlZihcIlwiKTtcbiAgY29uc3QgYm90dG9tID0gdnVlRGVtaS5yZWYoXCJcIik7XG4gIGNvbnN0IGxlZnQgPSB2dWVEZW1pLnJlZihcIlwiKTtcbiAgaWYgKHNoYXJlZC5pc0NsaWVudCkge1xuICAgIGNvbnN0IHRvcENzc1ZhciA9IHVzZUNzc1Zhcih0b3BWYXJOYW1lKTtcbiAgICBjb25zdCByaWdodENzc1ZhciA9IHVzZUNzc1ZhcihyaWdodFZhck5hbWUpO1xuICAgIGNvbnN0IGJvdHRvbUNzc1ZhciA9IHVzZUNzc1Zhcihib3R0b21WYXJOYW1lKTtcbiAgICBjb25zdCBsZWZ0Q3NzVmFyID0gdXNlQ3NzVmFyKGxlZnRWYXJOYW1lKTtcbiAgICB0b3BDc3NWYXIudmFsdWUgPSBcImVudihzYWZlLWFyZWEtaW5zZXQtdG9wLCAwcHgpXCI7XG4gICAgcmlnaHRDc3NWYXIudmFsdWUgPSBcImVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQsIDBweClcIjtcbiAgICBib3R0b21Dc3NWYXIudmFsdWUgPSBcImVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpXCI7XG4gICAgbGVmdENzc1Zhci52YWx1ZSA9IFwiZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0LCAwcHgpXCI7XG4gICAgdXBkYXRlKCk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBzaGFyZWQudXNlRGVib3VuY2VGbih1cGRhdGUpKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdG9wLnZhbHVlID0gZ2V0VmFsdWUodG9wVmFyTmFtZSk7XG4gICAgcmlnaHQudmFsdWUgPSBnZXRWYWx1ZShyaWdodFZhck5hbWUpO1xuICAgIGJvdHRvbS52YWx1ZSA9IGdldFZhbHVlKGJvdHRvbVZhck5hbWUpO1xuICAgIGxlZnQudmFsdWUgPSBnZXRWYWx1ZShsZWZ0VmFyTmFtZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b3AsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tLFxuICAgIGxlZnQsXG4gICAgdXBkYXRlXG4gIH07XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShwb3NpdGlvbikge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUocG9zaXRpb24pO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JpcHRUYWcoc3JjLCBvbkxvYWRlZCA9IHNoYXJlZC5ub29wLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgbWFudWFsID0gZmFsc2UsXG4gICAgdHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCIsXG4gICAgYXN5bmMgPSB0cnVlLFxuICAgIGNyb3NzT3JpZ2luLFxuICAgIHJlZmVycmVyUG9saWN5LFxuICAgIG5vTW9kdWxlLFxuICAgIGRlZmVyLFxuICAgIGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LFxuICAgIGF0dHJzID0ge31cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNjcmlwdFRhZyA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBsZXQgX3Byb21pc2UgPSBudWxsO1xuICBjb25zdCBsb2FkU2NyaXB0ID0gKHdhaXRGb3JTY3JpcHRMb2FkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZVdpdGhFbGVtZW50ID0gKGVsMikgPT4ge1xuICAgICAgc2NyaXB0VGFnLnZhbHVlID0gZWwyO1xuICAgICAgcmVzb2x2ZShlbDIpO1xuICAgICAgcmV0dXJuIGVsMjtcbiAgICB9O1xuICAgIGlmICghZG9jdW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc2hvdWxkQXBwZW5kID0gZmFsc2U7XG4gICAgbGV0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgIGVsLnR5cGUgPSB0eXBlO1xuICAgICAgZWwuYXN5bmMgPSBhc3luYztcbiAgICAgIGVsLnNyYyA9IHZ1ZURlbWkudW5yZWYoc3JjKTtcbiAgICAgIGlmIChkZWZlcilcbiAgICAgICAgZWwuZGVmZXIgPSBkZWZlcjtcbiAgICAgIGlmIChjcm9zc09yaWdpbilcbiAgICAgICAgZWwuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcbiAgICAgIGlmIChub01vZHVsZSlcbiAgICAgICAgZWwubm9Nb2R1bGUgPSBub01vZHVsZTtcbiAgICAgIGlmIChyZWZlcnJlclBvbGljeSlcbiAgICAgICAgZWwucmVmZXJyZXJQb2xpY3kgPSByZWZlcnJlclBvbGljeTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGF0dHJzKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7XG4gICAgICBzaG91bGRBcHBlbmQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1sb2FkZWRcIikpIHtcbiAgICAgIHJlc29sdmVXaXRoRWxlbWVudChlbCk7XG4gICAgfVxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoZXZlbnQpID0+IHJlamVjdChldmVudCkpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoZXZlbnQpID0+IHJlamVjdChldmVudCkpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtbG9hZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIG9uTG9hZGVkKGVsKTtcbiAgICAgIHJlc29sdmVXaXRoRWxlbWVudChlbCk7XG4gICAgfSk7XG4gICAgaWYgKHNob3VsZEFwcGVuZClcbiAgICAgIGVsID0gZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCk7XG4gICAgaWYgKCF3YWl0Rm9yU2NyaXB0TG9hZClcbiAgICAgIHJlc29sdmVXaXRoRWxlbWVudChlbCk7XG4gIH0pO1xuICBjb25zdCBsb2FkID0gKHdhaXRGb3JTY3JpcHRMb2FkID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghX3Byb21pc2UpXG4gICAgICBfcHJvbWlzZSA9IGxvYWRTY3JpcHQod2FpdEZvclNjcmlwdExvYWQpO1xuICAgIHJldHVybiBfcHJvbWlzZTtcbiAgfTtcbiAgY29uc3QgdW5sb2FkID0gKCkgPT4ge1xuICAgIGlmICghZG9jdW1lbnQpXG4gICAgICByZXR1cm47XG4gICAgX3Byb21pc2UgPSBudWxsO1xuICAgIGlmIChzY3JpcHRUYWcudmFsdWUpXG4gICAgICBzY3JpcHRUYWcudmFsdWUgPSBudWxsO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApO1xuICAgIGlmIChlbClcbiAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoZWwpO1xuICB9O1xuICBpZiAoaW1tZWRpYXRlICYmICFtYW51YWwpXG4gICAgc2hhcmVkLnRyeU9uTW91bnRlZChsb2FkKTtcbiAgaWYgKCFtYW51YWwpXG4gICAgc2hhcmVkLnRyeU9uVW5tb3VudGVkKHVubG9hZCk7XG4gIHJldHVybiB7IHNjcmlwdFRhZywgbG9hZCwgdW5sb2FkIH07XG59XG5cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KHJhd0V2ZW50KSB7XG4gIGNvbnN0IGUgPSByYXdFdmVudCB8fCB3aW5kb3cuZXZlbnQ7XG4gIGlmIChlLnRvdWNoZXMubGVuZ3RoID4gMSlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgaWYgKGUucHJldmVudERlZmF1bHQpXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB1c2VTY3JvbGxMb2NrKGVsZW1lbnQsIGluaXRpYWxTdGF0ZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGlzTG9ja2VkID0gdnVlRGVtaS5yZWYoaW5pdGlhbFN0YXRlKTtcbiAgbGV0IHN0b3BUb3VjaE1vdmVMaXN0ZW5lciA9IG51bGw7XG4gIGxldCBpbml0aWFsT3ZlcmZsb3c7XG4gIHZ1ZURlbWkud2F0Y2goKCkgPT4gdnVlRGVtaS51bnJlZihlbGVtZW50KSwgKGVsKSA9PiB7XG4gICAgaWYgKGVsKSB7XG4gICAgICBjb25zdCBlbGUgPSBlbDtcbiAgICAgIGluaXRpYWxPdmVyZmxvdyA9IGVsZS5zdHlsZS5vdmVyZmxvdztcbiAgICAgIGlmIChpc0xvY2tlZC52YWx1ZSlcbiAgICAgICAgZWxlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICB9XG4gIH0sIHtcbiAgICBpbW1lZGlhdGU6IHRydWVcbiAgfSk7XG4gIGNvbnN0IGxvY2sgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlID0gdnVlRGVtaS51bnJlZihlbGVtZW50KTtcbiAgICBpZiAoIWVsZSB8fCBpc0xvY2tlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAoc2hhcmVkLmlzSU9TKSB7XG4gICAgICBzdG9wVG91Y2hNb3ZlTGlzdGVuZXIgPSB1c2VFdmVudExpc3RlbmVyKGVsZSwgXCJ0b3VjaG1vdmVcIiwgcHJldmVudERlZmF1bHQsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgfVxuICAgIGVsZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgaXNMb2NrZWQudmFsdWUgPSB0cnVlO1xuICB9O1xuICBjb25zdCB1bmxvY2sgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlID0gdnVlRGVtaS51bnJlZihlbGVtZW50KTtcbiAgICBpZiAoIWVsZSB8fCAhaXNMb2NrZWQudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgc2hhcmVkLmlzSU9TICYmIChzdG9wVG91Y2hNb3ZlTGlzdGVuZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3BUb3VjaE1vdmVMaXN0ZW5lcigpKTtcbiAgICBlbGUuc3R5bGUub3ZlcmZsb3cgPSBpbml0aWFsT3ZlcmZsb3c7XG4gICAgaXNMb2NrZWQudmFsdWUgPSBmYWxzZTtcbiAgfTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHVubG9jayk7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gaXNMb2NrZWQudmFsdWU7XG4gICAgfSxcbiAgICBzZXQodikge1xuICAgICAgaWYgKHYpXG4gICAgICAgIGxvY2soKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdW5sb2NrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlU2Vzc2lvblN0b3JhZ2Uoa2V5LCBpbml0aWFsVmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB1c2VTdG9yYWdlKGtleSwgaW5pdGlhbFZhbHVlLCB3aW5kb3cgPT0gbnVsbCA/IHZvaWQgMCA6IHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgb3B0aW9ucyk7XG59XG5cbnZhciBfX2RlZlByb3AkMyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kMyA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDMgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDMob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQzLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkMyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkMylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQzLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQzKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gdXNlU2hhcmUoc2hhcmVPcHRpb25zID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IF9uYXZpZ2F0b3IgPSBuYXZpZ2F0b3I7XG4gIGNvbnN0IGlzU3VwcG9ydGVkID0gX25hdmlnYXRvciAmJiBcImNhblNoYXJlXCIgaW4gX25hdmlnYXRvcjtcbiAgY29uc3Qgc2hhcmUgPSBhc3luYyAob3ZlcnJpZGVPcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBfX3NwcmVhZFZhbHVlcyQzKF9fc3ByZWFkVmFsdWVzJDMoe30sIHZ1ZURlbWkudW5yZWYoc2hhcmVPcHRpb25zKSksIHZ1ZURlbWkudW5yZWYob3ZlcnJpZGVPcHRpb25zKSk7XG4gICAgICBsZXQgZ3JhbnRlZCA9IHRydWU7XG4gICAgICBpZiAoZGF0YS5maWxlcyAmJiBfbmF2aWdhdG9yLmNhblNoYXJlKVxuICAgICAgICBncmFudGVkID0gX25hdmlnYXRvci5jYW5TaGFyZSh7IGZpbGVzOiBkYXRhLmZpbGVzIH0pO1xuICAgICAgaWYgKGdyYW50ZWQpXG4gICAgICAgIHJldHVybiBfbmF2aWdhdG9yLnNoYXJlKGRhdGEpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBzaGFyZVxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTcGVlY2hSZWNvZ25pdGlvbihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVyaW1SZXN1bHRzID0gdHJ1ZSxcbiAgICBjb250aW51b3VzID0gdHJ1ZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsYW5nID0gdnVlRGVtaS5yZWYob3B0aW9ucy5sYW5nIHx8IFwiZW4tVVNcIik7XG4gIGNvbnN0IGlzTGlzdGVuaW5nID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCBpc0ZpbmFsID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCByZXN1bHQgPSB2dWVEZW1pLnJlZihcIlwiKTtcbiAgY29uc3QgZXJyb3IgPSB2dWVEZW1pLnNoYWxsb3dSZWYodm9pZCAwKTtcbiAgY29uc3QgdG9nZ2xlID0gKHZhbHVlID0gIWlzTGlzdGVuaW5nLnZhbHVlKSA9PiB7XG4gICAgaXNMaXN0ZW5pbmcudmFsdWUgPSB2YWx1ZTtcbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgaXNMaXN0ZW5pbmcudmFsdWUgPSB0cnVlO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIGlzTGlzdGVuaW5nLnZhbHVlID0gZmFsc2U7XG4gIH07XG4gIGNvbnN0IFNwZWVjaFJlY29nbml0aW9uID0gd2luZG93ICYmICh3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHwgd2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uKTtcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKFNwZWVjaFJlY29nbml0aW9uKTtcbiAgbGV0IHJlY29nbml0aW9uO1xuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICByZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpO1xuICAgIHJlY29nbml0aW9uLmNvbnRpbnVvdXMgPSBjb250aW51b3VzO1xuICAgIHJlY29nbml0aW9uLmludGVyaW1SZXN1bHRzID0gaW50ZXJpbVJlc3VsdHM7XG4gICAgcmVjb2duaXRpb24ubGFuZyA9IHZ1ZURlbWkudW5yZWYobGFuZyk7XG4gICAgcmVjb2duaXRpb24ub25zdGFydCA9ICgpID0+IHtcbiAgICAgIGlzRmluYWwudmFsdWUgPSBmYWxzZTtcbiAgICB9O1xuICAgIHZ1ZURlbWkud2F0Y2gobGFuZywgKGxhbmcyKSA9PiB7XG4gICAgICBpZiAocmVjb2duaXRpb24gJiYgIWlzTGlzdGVuaW5nLnZhbHVlKVxuICAgICAgICByZWNvZ25pdGlvbi5sYW5nID0gbGFuZzI7XG4gICAgfSk7XG4gICAgcmVjb2duaXRpb24ub25yZXN1bHQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zY3JpcHQgPSBBcnJheS5mcm9tKGV2ZW50LnJlc3VsdHMpLm1hcCgocmVzdWx0MikgPT4ge1xuICAgICAgICBpc0ZpbmFsLnZhbHVlID0gcmVzdWx0Mi5pc0ZpbmFsO1xuICAgICAgICByZXR1cm4gcmVzdWx0MlswXTtcbiAgICAgIH0pLm1hcCgocmVzdWx0MikgPT4gcmVzdWx0Mi50cmFuc2NyaXB0KS5qb2luKFwiXCIpO1xuICAgICAgcmVzdWx0LnZhbHVlID0gdHJhbnNjcmlwdDtcbiAgICAgIGVycm9yLnZhbHVlID0gdm9pZCAwO1xuICAgIH07XG4gICAgcmVjb2duaXRpb24ub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgZXJyb3IudmFsdWUgPSBldmVudDtcbiAgICB9O1xuICAgIHJlY29nbml0aW9uLm9uZW5kID0gKCkgPT4ge1xuICAgICAgaXNMaXN0ZW5pbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHJlY29nbml0aW9uLmxhbmcgPSB2dWVEZW1pLnVucmVmKGxhbmcpO1xuICAgIH07XG4gICAgdnVlRGVtaS53YXRjaChpc0xpc3RlbmluZywgKCkgPT4ge1xuICAgICAgaWYgKGlzTGlzdGVuaW5nLnZhbHVlKVxuICAgICAgICByZWNvZ25pdGlvbi5zdGFydCgpO1xuICAgICAgZWxzZVxuICAgICAgICByZWNvZ25pdGlvbi5zdG9wKCk7XG4gICAgfSk7XG4gIH1cbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICBpc0xpc3RlbmluZy52YWx1ZSA9IGZhbHNlO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpc1N1cHBvcnRlZCxcbiAgICBpc0xpc3RlbmluZyxcbiAgICBpc0ZpbmFsLFxuICAgIHJlY29nbml0aW9uLFxuICAgIHJlc3VsdCxcbiAgICBlcnJvcixcbiAgICB0b2dnbGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTcGVlY2hTeW50aGVzaXModGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gIHZhciBfYSwgX2I7XG4gIGNvbnN0IHtcbiAgICBwaXRjaCA9IDEsXG4gICAgcmF0ZSA9IDEsXG4gICAgdm9sdW1lID0gMSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBzeW50aCA9IHdpbmRvdyAmJiB3aW5kb3cuc3BlZWNoU3ludGhlc2lzO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IEJvb2xlYW4oc3ludGgpO1xuICBjb25zdCBpc1BsYXlpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGNvbnN0IHN0YXR1cyA9IHZ1ZURlbWkucmVmKFwiaW5pdFwiKTtcbiAgY29uc3Qgdm9pY2VJbmZvID0ge1xuICAgIGxhbmc6ICgoX2EgPSBvcHRpb25zLnZvaWNlKSA9PSBudWxsID8gdm9pZCAwIDogX2EubGFuZykgfHwgXCJkZWZhdWx0XCIsXG4gICAgbmFtZTogKChfYiA9IG9wdGlvbnMudm9pY2UpID09IG51bGwgPyB2b2lkIDAgOiBfYi5uYW1lKSB8fCBcIlwiXG4gIH07XG4gIGNvbnN0IHNwb2tlblRleHQgPSB2dWVEZW1pLnJlZih0ZXh0IHx8IFwiXCIpO1xuICBjb25zdCBsYW5nID0gdnVlRGVtaS5yZWYob3B0aW9ucy5sYW5nIHx8IFwiZW4tVVNcIik7XG4gIGNvbnN0IGVycm9yID0gdnVlRGVtaS5zaGFsbG93UmVmKHZvaWQgMCk7XG4gIGNvbnN0IHRvZ2dsZSA9ICh2YWx1ZSA9ICFpc1BsYXlpbmcudmFsdWUpID0+IHtcbiAgICBpc1BsYXlpbmcudmFsdWUgPSB2YWx1ZTtcbiAgfTtcbiAgY29uc3QgYmluZEV2ZW50c0ZvclV0dGVyYW5jZSA9ICh1dHRlcmFuY2UyKSA9PiB7XG4gICAgdXR0ZXJhbmNlMi5sYW5nID0gdnVlRGVtaS51bnJlZihsYW5nKTtcbiAgICBvcHRpb25zLnZvaWNlICYmICh1dHRlcmFuY2UyLnZvaWNlID0gb3B0aW9ucy52b2ljZSk7XG4gICAgdXR0ZXJhbmNlMi5waXRjaCA9IHBpdGNoO1xuICAgIHV0dGVyYW5jZTIucmF0ZSA9IHJhdGU7XG4gICAgdXR0ZXJhbmNlMi52b2x1bWUgPSB2b2x1bWU7XG4gICAgdXR0ZXJhbmNlMi5vbnN0YXJ0ID0gKCkgPT4ge1xuICAgICAgaXNQbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHN0YXR1cy52YWx1ZSA9IFwicGxheVwiO1xuICAgIH07XG4gICAgdXR0ZXJhbmNlMi5vbnBhdXNlID0gKCkgPT4ge1xuICAgICAgaXNQbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICBzdGF0dXMudmFsdWUgPSBcInBhdXNlXCI7XG4gICAgfTtcbiAgICB1dHRlcmFuY2UyLm9ucmVzdW1lID0gKCkgPT4ge1xuICAgICAgaXNQbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHN0YXR1cy52YWx1ZSA9IFwicGxheVwiO1xuICAgIH07XG4gICAgdXR0ZXJhbmNlMi5vbmVuZCA9ICgpID0+IHtcbiAgICAgIGlzUGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgc3RhdHVzLnZhbHVlID0gXCJlbmRcIjtcbiAgICB9O1xuICAgIHV0dGVyYW5jZTIub25lcnJvciA9IChldmVudCkgPT4ge1xuICAgICAgZXJyb3IudmFsdWUgPSBldmVudDtcbiAgICB9O1xuICAgIHV0dGVyYW5jZTIub25lbmQgPSAoKSA9PiB7XG4gICAgICBpc1BsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHV0dGVyYW5jZTIubGFuZyA9IHZ1ZURlbWkudW5yZWYobGFuZyk7XG4gICAgfTtcbiAgfTtcbiAgY29uc3QgdXR0ZXJhbmNlID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaXNQbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgc3RhdHVzLnZhbHVlID0gXCJpbml0XCI7XG4gICAgY29uc3QgbmV3VXR0ZXJhbmNlID0gbmV3IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZShzcG9rZW5UZXh0LnZhbHVlKTtcbiAgICBiaW5kRXZlbnRzRm9yVXR0ZXJhbmNlKG5ld1V0dGVyYW5jZSk7XG4gICAgcmV0dXJuIG5ld1V0dGVyYW5jZTtcbiAgfSk7XG4gIGNvbnN0IHNwZWFrID0gKCkgPT4ge1xuICAgIHN5bnRoLmNhbmNlbCgpO1xuICAgIHV0dGVyYW5jZSAmJiBzeW50aC5zcGVhayh1dHRlcmFuY2UudmFsdWUpO1xuICB9O1xuICBpZiAoaXNTdXBwb3J0ZWQpIHtcbiAgICBiaW5kRXZlbnRzRm9yVXR0ZXJhbmNlKHV0dGVyYW5jZS52YWx1ZSk7XG4gICAgdnVlRGVtaS53YXRjaChsYW5nLCAobGFuZzIpID0+IHtcbiAgICAgIGlmICh1dHRlcmFuY2UudmFsdWUgJiYgIWlzUGxheWluZy52YWx1ZSlcbiAgICAgICAgdXR0ZXJhbmNlLnZhbHVlLmxhbmcgPSBsYW5nMjtcbiAgICB9KTtcbiAgICB2dWVEZW1pLndhdGNoKGlzUGxheWluZywgKCkgPT4ge1xuICAgICAgaWYgKGlzUGxheWluZy52YWx1ZSlcbiAgICAgICAgc3ludGgucmVzdW1lKCk7XG4gICAgICBlbHNlXG4gICAgICAgIHN5bnRoLnBhdXNlKCk7XG4gICAgfSk7XG4gIH1cbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICBpc1BsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgaXNQbGF5aW5nLFxuICAgIHN0YXR1cyxcbiAgICB2b2ljZUluZm8sXG4gICAgdXR0ZXJhbmNlLFxuICAgIGVycm9yLFxuICAgIHRvZ2dsZSxcbiAgICBzcGVha1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTdGVwcGVyKHN0ZXBzLCBpbml0aWFsU3RlcCkge1xuICBjb25zdCBzdGVwc1JlZiA9IHZ1ZURlbWkucmVmKHN0ZXBzKTtcbiAgY29uc3Qgc3RlcE5hbWVzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBBcnJheS5pc0FycmF5KHN0ZXBzUmVmLnZhbHVlKSA/IHN0ZXBzUmVmLnZhbHVlIDogT2JqZWN0LmtleXMoc3RlcHNSZWYudmFsdWUpKTtcbiAgY29uc3QgaW5kZXggPSB2dWVEZW1pLnJlZihzdGVwTmFtZXMudmFsdWUuaW5kZXhPZihpbml0aWFsU3RlcCAhPSBudWxsID8gaW5pdGlhbFN0ZXAgOiBzdGVwTmFtZXMudmFsdWVbMF0pKTtcbiAgY29uc3QgY3VycmVudCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gYXQoaW5kZXgudmFsdWUpKTtcbiAgY29uc3QgaXNGaXJzdCA9IHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gaW5kZXgudmFsdWUgPT09IDApO1xuICBjb25zdCBpc0xhc3QgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGluZGV4LnZhbHVlID09PSBzdGVwTmFtZXMudmFsdWUubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IG5leHQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHN0ZXBOYW1lcy52YWx1ZVtpbmRleC52YWx1ZSArIDFdKTtcbiAgY29uc3QgcHJldmlvdXMgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHN0ZXBOYW1lcy52YWx1ZVtpbmRleC52YWx1ZSAtIDFdKTtcbiAgZnVuY3Rpb24gYXQoaW5kZXgyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RlcHNSZWYudmFsdWUpKVxuICAgICAgcmV0dXJuIHN0ZXBzUmVmLnZhbHVlW2luZGV4Ml07XG4gICAgcmV0dXJuIHN0ZXBzUmVmLnZhbHVlW3N0ZXBOYW1lcy52YWx1ZVtpbmRleDJdXTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoc3RlcCkge1xuICAgIGlmICghc3RlcE5hbWVzLnZhbHVlLmluY2x1ZGVzKHN0ZXApKVxuICAgICAgcmV0dXJuO1xuICAgIHJldHVybiBhdChzdGVwTmFtZXMudmFsdWUuaW5kZXhPZihzdGVwKSk7XG4gIH1cbiAgZnVuY3Rpb24gZ29UbyhzdGVwKSB7XG4gICAgaWYgKHN0ZXBOYW1lcy52YWx1ZS5pbmNsdWRlcyhzdGVwKSlcbiAgICAgIGluZGV4LnZhbHVlID0gc3RlcE5hbWVzLnZhbHVlLmluZGV4T2Yoc3RlcCk7XG4gIH1cbiAgZnVuY3Rpb24gZ29Ub05leHQoKSB7XG4gICAgaWYgKGlzTGFzdC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpbmRleC52YWx1ZSsrO1xuICB9XG4gIGZ1bmN0aW9uIGdvVG9QcmV2aW91cygpIHtcbiAgICBpZiAoaXNGaXJzdC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpbmRleC52YWx1ZS0tO1xuICB9XG4gIGZ1bmN0aW9uIGdvQmFja1RvKHN0ZXApIHtcbiAgICBpZiAoaXNBZnRlcihzdGVwKSlcbiAgICAgIGdvVG8oc3RlcCk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOZXh0KHN0ZXApIHtcbiAgICByZXR1cm4gc3RlcE5hbWVzLnZhbHVlLmluZGV4T2Yoc3RlcCkgPT09IGluZGV4LnZhbHVlICsgMTtcbiAgfVxuICBmdW5jdGlvbiBpc1ByZXZpb3VzKHN0ZXApIHtcbiAgICByZXR1cm4gc3RlcE5hbWVzLnZhbHVlLmluZGV4T2Yoc3RlcCkgPT09IGluZGV4LnZhbHVlIC0gMTtcbiAgfVxuICBmdW5jdGlvbiBpc0N1cnJlbnQoc3RlcCkge1xuICAgIHJldHVybiBzdGVwTmFtZXMudmFsdWUuaW5kZXhPZihzdGVwKSA9PT0gaW5kZXgudmFsdWU7XG4gIH1cbiAgZnVuY3Rpb24gaXNCZWZvcmUoc3RlcCkge1xuICAgIHJldHVybiBpbmRleC52YWx1ZSA8IHN0ZXBOYW1lcy52YWx1ZS5pbmRleE9mKHN0ZXApO1xuICB9XG4gIGZ1bmN0aW9uIGlzQWZ0ZXIoc3RlcCkge1xuICAgIHJldHVybiBpbmRleC52YWx1ZSA+IHN0ZXBOYW1lcy52YWx1ZS5pbmRleE9mKHN0ZXApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RlcHM6IHN0ZXBzUmVmLFxuICAgIHN0ZXBOYW1lcyxcbiAgICBpbmRleCxcbiAgICBjdXJyZW50LFxuICAgIG5leHQsXG4gICAgcHJldmlvdXMsXG4gICAgaXNGaXJzdCxcbiAgICBpc0xhc3QsXG4gICAgYXQsXG4gICAgZ2V0LFxuICAgIGdvVG8sXG4gICAgZ29Ub05leHQsXG4gICAgZ29Ub1ByZXZpb3VzLFxuICAgIGdvQmFja1RvLFxuICAgIGlzTmV4dCxcbiAgICBpc1ByZXZpb3VzLFxuICAgIGlzQ3VycmVudCxcbiAgICBpc0JlZm9yZSxcbiAgICBpc0FmdGVyXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVN0b3JhZ2VBc3luYyhrZXksIGluaXRpYWxWYWx1ZSwgc3RvcmFnZSwgb3B0aW9ucyA9IHt9KSB7XG4gIHZhciBfYTtcbiAgY29uc3Qge1xuICAgIGZsdXNoID0gXCJwcmVcIixcbiAgICBkZWVwID0gdHJ1ZSxcbiAgICBsaXN0ZW5Ub1N0b3JhZ2VDaGFuZ2VzID0gdHJ1ZSxcbiAgICB3cml0ZURlZmF1bHRzID0gdHJ1ZSxcbiAgICBzaGFsbG93LFxuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3csXG4gICAgZXZlbnRGaWx0ZXIsXG4gICAgb25FcnJvciA9IChlKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJhd0luaXQgPSB2dWVEZW1pLnVucmVmKGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHR5cGUgPSBndWVzc1NlcmlhbGl6ZXJUeXBlKHJhd0luaXQpO1xuICBjb25zdCBkYXRhID0gKHNoYWxsb3cgPyB2dWVEZW1pLnNoYWxsb3dSZWYgOiB2dWVEZW1pLnJlZikoaW5pdGlhbFZhbHVlKTtcbiAgY29uc3Qgc2VyaWFsaXplciA9IChfYSA9IG9wdGlvbnMuc2VyaWFsaXplcikgIT0gbnVsbCA/IF9hIDogU3RvcmFnZVNlcmlhbGl6ZXJzW3R5cGVdO1xuICBpZiAoIXN0b3JhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgc3RvcmFnZSA9IGdldFNTUkhhbmRsZXIoXCJnZXREZWZhdWx0U3RvcmFnZVwiLCAoKSA9PiB7XG4gICAgICAgIHZhciBfYTI7XG4gICAgICAgIHJldHVybiAoX2EyID0gZGVmYXVsdFdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5sb2NhbFN0b3JhZ2U7XG4gICAgICB9KSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9uRXJyb3IoZSk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWQoZXZlbnQpIHtcbiAgICBpZiAoIXN0b3JhZ2UgfHwgZXZlbnQgJiYgZXZlbnQua2V5ICE9PSBrZXkpXG4gICAgICByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQgPyBldmVudC5uZXdWYWx1ZSA6IGF3YWl0IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHJhd1ZhbHVlID09IG51bGwpIHtcbiAgICAgICAgZGF0YS52YWx1ZSA9IHJhd0luaXQ7XG4gICAgICAgIGlmICh3cml0ZURlZmF1bHRzICYmIHJhd0luaXQgIT09IG51bGwpXG4gICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKGtleSwgYXdhaXQgc2VyaWFsaXplci53cml0ZShyYXdJbml0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLnZhbHVlID0gYXdhaXQgc2VyaWFsaXplci5yZWFkKHJhd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvbkVycm9yKGUpO1xuICAgIH1cbiAgfVxuICByZWFkKCk7XG4gIGlmICh3aW5kb3cgJiYgbGlzdGVuVG9TdG9yYWdlQ2hhbmdlcylcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJzdG9yYWdlXCIsIChlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlYWQoZSksIDApKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBzaGFyZWQud2F0Y2hXaXRoRmlsdGVyKGRhdGEsIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRhLnZhbHVlID09IG51bGwpXG4gICAgICAgICAgYXdhaXQgc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhd2FpdCBzdG9yYWdlLnNldEl0ZW0oa2V5LCBhd2FpdCBzZXJpYWxpemVyLndyaXRlKGRhdGEudmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb25FcnJvcihlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmbHVzaCxcbiAgICAgIGRlZXAsXG4gICAgICBldmVudEZpbHRlclxuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5sZXQgX2lkID0gMDtcbmZ1bmN0aW9uIHVzZVN0eWxlVGFnKGNzcywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGlzTG9hZGVkID0gdnVlRGVtaS5yZWYoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsXG4gICAgaW1tZWRpYXRlID0gdHJ1ZSxcbiAgICBtYW51YWwgPSBmYWxzZSxcbiAgICBpZCA9IGB2dWV1c2Vfc3R5bGV0YWdfJHsrK19pZH1gXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjc3NSZWYgPSB2dWVEZW1pLnJlZihjc3MpO1xuICBsZXQgc3RvcCA9ICgpID0+IHtcbiAgfTtcbiAgY29uc3QgbG9hZCA9ICgpID0+IHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBlbC50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgIGVsLmlkID0gaWQ7XG4gICAgaWYgKG9wdGlvbnMubWVkaWEpXG4gICAgICBlbC5tZWRpYSA9IG9wdGlvbnMubWVkaWE7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCk7XG4gICAgaWYgKGlzTG9hZGVkLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHN0b3AgPSB2dWVEZW1pLndhdGNoKGNzc1JlZiwgKHZhbHVlKSA9PiB7XG4gICAgICBlbC5pbm5lclRleHQgPSB2YWx1ZTtcbiAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICBpc0xvYWRlZC52YWx1ZSA9IHRydWU7XG4gIH07XG4gIGNvbnN0IHVubG9hZCA9ICgpID0+IHtcbiAgICBpZiAoIWRvY3VtZW50IHx8ICFpc0xvYWRlZC52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBzdG9wKCk7XG4gICAgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpO1xuICAgIGlzTG9hZGVkLnZhbHVlID0gZmFsc2U7XG4gIH07XG4gIGlmIChpbW1lZGlhdGUgJiYgIW1hbnVhbClcbiAgICBzaGFyZWQudHJ5T25Nb3VudGVkKGxvYWQpO1xuICBpZiAoIW1hbnVhbClcbiAgICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UodW5sb2FkKTtcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBjc3M6IGNzc1JlZixcbiAgICB1bmxvYWQsXG4gICAgbG9hZCxcbiAgICBpc0xvYWRlZDogdnVlRGVtaS5yZWFkb25seShpc0xvYWRlZClcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlVGVtcGxhdGVSZWZzTGlzdCgpIHtcbiAgY29uc3QgcmVmcyA9IHZ1ZURlbWkucmVmKFtdKTtcbiAgcmVmcy52YWx1ZS5zZXQgPSAoZWwpID0+IHtcbiAgICBpZiAoZWwpXG4gICAgICByZWZzLnZhbHVlLnB1c2goZWwpO1xuICB9O1xuICB2dWVEZW1pLm9uQmVmb3JlVXBkYXRlKCgpID0+IHtcbiAgICByZWZzLnZhbHVlLmxlbmd0aCA9IDA7XG4gIH0pO1xuICByZXR1cm4gcmVmcztcbn1cblxuZnVuY3Rpb24gZ2V0UmFuZ2VzRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgdmFyIF9hO1xuICBjb25zdCByYW5nZUNvdW50ID0gKF9hID0gc2VsZWN0aW9uLnJhbmdlQ291bnQpICE9IG51bGwgPyBfYSA6IDA7XG4gIGNvbnN0IHJhbmdlcyA9IG5ldyBBcnJheShyYW5nZUNvdW50KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZUNvdW50OyBpKyspIHtcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpO1xuICAgIHJhbmdlc1tpXSA9IHJhbmdlO1xuICB9XG4gIHJldHVybiByYW5nZXM7XG59XG5mdW5jdGlvbiB1c2VUZXh0U2VsZWN0aW9uKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2VsZWN0aW9uID0gdnVlRGVtaS5yZWYobnVsbCk7XG4gIGNvbnN0IHRleHQgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3Rpb24udmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPSBudWxsID8gX2IgOiBcIlwiO1xuICB9KTtcbiAgY29uc3QgcmFuZ2VzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBzZWxlY3Rpb24udmFsdWUgPyBnZXRSYW5nZXNGcm9tU2VsZWN0aW9uKHNlbGVjdGlvbi52YWx1ZSkgOiBbXSk7XG4gIGNvbnN0IHJlY3RzID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiByYW5nZXMudmFsdWUubWFwKChyYW5nZSkgPT4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKTtcbiAgZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2UoKSB7XG4gICAgc2VsZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICBpZiAod2luZG93KVxuICAgICAgc2VsZWN0aW9uLnZhbHVlID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICB9XG4gIGlmICh3aW5kb3cpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3cuZG9jdW1lbnQsIFwic2VsZWN0aW9uY2hhbmdlXCIsIG9uU2VsZWN0aW9uQ2hhbmdlKTtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0LFxuICAgIHJlY3RzLFxuICAgIHJhbmdlcyxcbiAgICBzZWxlY3Rpb25cbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlVGV4dGFyZWFBdXRvc2l6ZShvcHRpb25zKSB7XG4gIGNvbnN0IHRleHRhcmVhID0gdnVlRGVtaS5yZWYob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5lbGVtZW50KTtcbiAgY29uc3QgaW5wdXQgPSB2dWVEZW1pLnJlZihvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmlucHV0KTtcbiAgZnVuY3Rpb24gdHJpZ2dlclJlc2l6ZSgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghdGV4dGFyZWEudmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgdGV4dGFyZWEudmFsdWUuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcbiAgICB0ZXh0YXJlYS52YWx1ZS5zdHlsZS5oZWlnaHQgPSBgJHsoX2EgPSB0ZXh0YXJlYS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnNjcm9sbEhlaWdodH1weGA7XG4gICAgKF9iID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5vblJlc2l6ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucyk7XG4gIH1cbiAgdnVlRGVtaS53YXRjaChbaW5wdXQsIHRleHRhcmVhXSwgdHJpZ2dlclJlc2l6ZSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7XG4gIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLndhdGNoKVxuICAgIHZ1ZURlbWkud2F0Y2gob3B0aW9ucy53YXRjaCwgdHJpZ2dlclJlc2l6ZSwgeyBpbW1lZGlhdGU6IHRydWUsIGRlZXA6IHRydWUgfSk7XG4gIHJldHVybiB7XG4gICAgdGV4dGFyZWEsXG4gICAgaW5wdXQsXG4gICAgdHJpZ2dlclJlc2l6ZVxuICB9O1xufVxuXG52YXIgX19kZWZQcm9wJDIgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQyID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDIgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQyID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQyKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQyID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkMi5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDIoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJDIpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJDIoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kMi5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkMihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzID0gKGEsIGIpID0+IF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpO1xuZnVuY3Rpb24gdXNlVGhyb3R0bGVkUmVmSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHRocm90dGxlID0gMjAwLCB0cmFpbGluZyA9IHRydWUgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZpbHRlciA9IHNoYXJlZC50aHJvdHRsZUZpbHRlcih0aHJvdHRsZSwgdHJhaWxpbmcpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlUmVmSGlzdG9yeShzb3VyY2UsIF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMkMih7fSwgb3B0aW9ucyksIHsgZXZlbnRGaWx0ZXI6IGZpbHRlciB9KSk7XG4gIHJldHVybiBfX3NwcmVhZFZhbHVlcyQyKHt9LCBoaXN0b3J5KTtcbn1cblxudmFyIF9fZGVmUHJvcCQxID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQxID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkMSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkMShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkMSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDEuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQxKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQxKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQxKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDEuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDEoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkMS5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkMSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMShzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kMS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuY29uc3QgVU5JVFMgPSBbXG4gIHsgbWF4OiA2ZTQsIHZhbHVlOiAxZTMsIG5hbWU6IFwic2Vjb25kXCIgfSxcbiAgeyBtYXg6IDI3NmU0LCB2YWx1ZTogNmU0LCBuYW1lOiBcIm1pbnV0ZVwiIH0sXG4gIHsgbWF4OiA3MmU2LCB2YWx1ZTogMzZlNSwgbmFtZTogXCJob3VyXCIgfSxcbiAgeyBtYXg6IDUxODRlNSwgdmFsdWU6IDg2NGU1LCBuYW1lOiBcImRheVwiIH0sXG4gIHsgbWF4OiAyNDE5MmU1LCB2YWx1ZTogNjA0OGU1LCBuYW1lOiBcIndlZWtcIiB9LFxuICB7IG1heDogMjg1MTJlNiwgdmFsdWU6IDI1OTJlNiwgbmFtZTogXCJtb250aFwiIH0sXG4gIHsgbWF4OiBJbmZpbml0eSwgdmFsdWU6IDMxNTM2ZTYsIG5hbWU6IFwieWVhclwiIH1cbl07XG5jb25zdCBERUZBVUxUX01FU1NBR0VTID0ge1xuICBqdXN0Tm93OiBcImp1c3Qgbm93XCIsXG4gIHBhc3Q6IChuKSA9PiBuLm1hdGNoKC9cXGQvKSA/IGAke259IGFnb2AgOiBuLFxuICBmdXR1cmU6IChuKSA9PiBuLm1hdGNoKC9cXGQvKSA/IGBpbiAke259YCA6IG4sXG4gIG1vbnRoOiAobiwgcGFzdCkgPT4gbiA9PT0gMSA/IHBhc3QgPyBcImxhc3QgbW9udGhcIiA6IFwibmV4dCBtb250aFwiIDogYCR7bn0gbW9udGgke24gPiAxID8gXCJzXCIgOiBcIlwifWAsXG4gIHllYXI6IChuLCBwYXN0KSA9PiBuID09PSAxID8gcGFzdCA/IFwibGFzdCB5ZWFyXCIgOiBcIm5leHQgeWVhclwiIDogYCR7bn0geWVhciR7biA+IDEgPyBcInNcIiA6IFwiXCJ9YCxcbiAgZGF5OiAobiwgcGFzdCkgPT4gbiA9PT0gMSA/IHBhc3QgPyBcInllc3RlcmRheVwiIDogXCJ0b21vcnJvd1wiIDogYCR7bn0gZGF5JHtuID4gMSA/IFwic1wiIDogXCJcIn1gLFxuICB3ZWVrOiAobiwgcGFzdCkgPT4gbiA9PT0gMSA/IHBhc3QgPyBcImxhc3Qgd2Vla1wiIDogXCJuZXh0IHdlZWtcIiA6IGAke259IHdlZWske24gPiAxID8gXCJzXCIgOiBcIlwifWAsXG4gIGhvdXI6IChuKSA9PiBgJHtufSBob3VyJHtuID4gMSA/IFwic1wiIDogXCJcIn1gLFxuICBtaW51dGU6IChuKSA9PiBgJHtufSBtaW51dGUke24gPiAxID8gXCJzXCIgOiBcIlwifWAsXG4gIHNlY29uZDogKG4pID0+IGAke259IHNlY29uZCR7biA+IDEgPyBcInNcIiA6IFwiXCJ9YFxufTtcbmNvbnN0IERFRkFVTFRfRk9STUFUVEVSID0gKGRhdGUpID0+IGRhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG5mdW5jdGlvbiB1c2VUaW1lQWdvKHRpbWUsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY29udHJvbHM6IGV4cG9zZUNvbnRyb2xzID0gZmFsc2UsXG4gICAgbWF4LFxuICAgIHVwZGF0ZUludGVydmFsID0gM2U0LFxuICAgIG1lc3NhZ2VzID0gREVGQVVMVF9NRVNTQUdFUyxcbiAgICBmdWxsRGF0ZUZvcm1hdHRlciA9IERFRkFVTFRfRk9STUFUVEVSXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGFicywgcm91bmQgfSA9IE1hdGg7XG4gIGNvbnN0IF9hID0gdXNlTm93KHsgaW50ZXJ2YWw6IHVwZGF0ZUludGVydmFsLCBjb250cm9sczogdHJ1ZSB9KSwgeyBub3cgfSA9IF9hLCBjb250cm9scyA9IF9fb2JqUmVzdChfYSwgW1wibm93XCJdKTtcbiAgZnVuY3Rpb24gZ2V0VGltZWFnbyhmcm9tLCBub3cyKSB7XG4gICAgdmFyIF9hMjtcbiAgICBjb25zdCBkaWZmID0gK25vdzIgLSArZnJvbTtcbiAgICBjb25zdCBhYnNEaWZmID0gYWJzKGRpZmYpO1xuICAgIGlmIChhYnNEaWZmIDwgNmU0KVxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLmp1c3ROb3c7XG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIgJiYgYWJzRGlmZiA+IG1heClcbiAgICAgIHJldHVybiBmdWxsRGF0ZUZvcm1hdHRlcihuZXcgRGF0ZShmcm9tKSk7XG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHVuaXRNYXggPSAoX2EyID0gVU5JVFMuZmluZCgoaSkgPT4gaS5uYW1lID09PSBtYXgpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm1heDtcbiAgICAgIGlmICh1bml0TWF4ICYmIGFic0RpZmYgPiB1bml0TWF4KVxuICAgICAgICByZXR1cm4gZnVsbERhdGVGb3JtYXR0ZXIobmV3IERhdGUoZnJvbSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHVuaXQgb2YgVU5JVFMpIHtcbiAgICAgIGlmIChhYnNEaWZmIDwgdW5pdC5tYXgpXG4gICAgICAgIHJldHVybiBmb3JtYXQoZGlmZiwgdW5pdCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFwcGx5Rm9ybWF0KG5hbWUsIHZhbCwgaXNQYXN0KSB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbWVzc2FnZXNbbmFtZV07XG4gICAgaWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodmFsLCBpc1Bhc3QpO1xuICAgIHJldHVybiBmb3JtYXR0ZXIucmVwbGFjZShcInswfVwiLCB2YWwudG9TdHJpbmcoKSk7XG4gIH1cbiAgZnVuY3Rpb24gZm9ybWF0KGRpZmYsIHVuaXQpIHtcbiAgICBjb25zdCB2YWwgPSByb3VuZChhYnMoZGlmZikgLyB1bml0LnZhbHVlKTtcbiAgICBjb25zdCBwYXN0ID0gZGlmZiA+IDA7XG4gICAgY29uc3Qgc3RyID0gYXBwbHlGb3JtYXQodW5pdC5uYW1lLCB2YWwsIHBhc3QpO1xuICAgIHJldHVybiBhcHBseUZvcm1hdChwYXN0ID8gXCJwYXN0XCIgOiBcImZ1dHVyZVwiLCBzdHIsIHBhc3QpO1xuICB9XG4gIGNvbnN0IHRpbWVBZ28gPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGdldFRpbWVhZ28obmV3IERhdGUodnVlRGVtaS51bnJlZih0aW1lKSksIHZ1ZURlbWkudW5yZWYobm93LnZhbHVlKSkpO1xuICBpZiAoZXhwb3NlQ29udHJvbHMpIHtcbiAgICByZXR1cm4gX19zcHJlYWRWYWx1ZXMkMSh7XG4gICAgICB0aW1lQWdvXG4gICAgfSwgY29udHJvbHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aW1lQWdvO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVRpbWVvdXRQb2xsKGZuLCBpbnRlcnZhbCwgdGltZW91dFBvbGxPcHRpb25zKSB7XG4gIGNvbnN0IHsgc3RhcnQgfSA9IHNoYXJlZC51c2VUaW1lb3V0Rm4obG9vcCwgaW50ZXJ2YWwpO1xuICBjb25zdCBpc0FjdGl2ZSA9IHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgYXN5bmMgZnVuY3Rpb24gbG9vcCgpIHtcbiAgICBpZiAoIWlzQWN0aXZlLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIGF3YWl0IGZuKCk7XG4gICAgc3RhcnQoKTtcbiAgfVxuICBmdW5jdGlvbiByZXN1bWUoKSB7XG4gICAgaWYgKCFpc0FjdGl2ZS52YWx1ZSkge1xuICAgICAgaXNBY3RpdmUudmFsdWUgPSB0cnVlO1xuICAgICAgbG9vcCgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBpc0FjdGl2ZS52YWx1ZSA9IGZhbHNlO1xuICB9XG4gIGlmICh0aW1lb3V0UG9sbE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHRpbWVvdXRQb2xsT3B0aW9ucy5pbW1lZGlhdGUpXG4gICAgcmVzdW1lKCk7XG4gIHNoYXJlZC50cnlPblNjb3BlRGlzcG9zZShwYXVzZSk7XG4gIHJldHVybiB7XG4gICAgaXNBY3RpdmUsXG4gICAgcGF1c2UsXG4gICAgcmVzdW1lXG4gIH07XG59XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmZ1bmN0aW9uIHVzZVRpbWVzdGFtcChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRyb2xzOiBleHBvc2VDb250cm9scyA9IGZhbHNlLFxuICAgIG9mZnNldCA9IDAsXG4gICAgaW1tZWRpYXRlID0gdHJ1ZSxcbiAgICBpbnRlcnZhbCA9IFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRzID0gdnVlRGVtaS5yZWYoc2hhcmVkLnRpbWVzdGFtcCgpICsgb2Zmc2V0KTtcbiAgY29uc3QgdXBkYXRlID0gKCkgPT4gdHMudmFsdWUgPSBzaGFyZWQudGltZXN0YW1wKCkgKyBvZmZzZXQ7XG4gIGNvbnN0IGNvbnRyb2xzID0gaW50ZXJ2YWwgPT09IFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIgPyB1c2VSYWZGbih1cGRhdGUsIHsgaW1tZWRpYXRlIH0pIDogc2hhcmVkLnVzZUludGVydmFsRm4odXBkYXRlLCBpbnRlcnZhbCwgeyBpbW1lZGlhdGUgfSk7XG4gIGlmIChleHBvc2VDb250cm9scykge1xuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyh7XG4gICAgICB0aW1lc3RhbXA6IHRzXG4gICAgfSwgY29udHJvbHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cztcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VUaXRsZShuZXdUaXRsZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2EsIF9iO1xuICBjb25zdCB7XG4gICAgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsXG4gICAgb2JzZXJ2ZSA9IGZhbHNlLFxuICAgIHRpdGxlVGVtcGxhdGUgPSBcIiVzXCJcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRpdGxlID0gdnVlRGVtaS5yZWYoKF9hID0gbmV3VGl0bGUgIT0gbnVsbCA/IG5ld1RpdGxlIDogZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LnRpdGxlKSAhPSBudWxsID8gX2EgOiBudWxsKTtcbiAgdnVlRGVtaS53YXRjaCh0aXRsZSwgKHQsIG8pID0+IHtcbiAgICBpZiAoc2hhcmVkLmlzU3RyaW5nKHQpICYmIHQgIT09IG8gJiYgZG9jdW1lbnQpXG4gICAgICBkb2N1bWVudC50aXRsZSA9IHRpdGxlVGVtcGxhdGUucmVwbGFjZShcIiVzXCIsIHQpO1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgaWYgKG9ic2VydmUgJiYgZG9jdW1lbnQpIHtcbiAgICB1c2VNdXRhdGlvbk9ic2VydmVyKChfYiA9IGRvY3VtZW50LmhlYWQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIiksICgpID0+IHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC50aXRsZSAhPT0gdGl0bGUudmFsdWUpXG4gICAgICAgIHRpdGxlLnZhbHVlID0gdGl0bGVUZW1wbGF0ZS5yZXBsYWNlKFwiJXNcIiwgZG9jdW1lbnQudGl0bGUpO1xuICAgIH0sIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB0aXRsZTtcbn1cblxuY29uc3QgVHJhbnNpdGlvblByZXNldHMgPSB7XG4gIGxpbmVhcjogc2hhcmVkLmlkZW50aXR5LFxuICBlYXNlSW5TaW5lOiBbMC4xMiwgMCwgMC4zOSwgMF0sXG4gIGVhc2VPdXRTaW5lOiBbMC42MSwgMSwgMC44OCwgMV0sXG4gIGVhc2VJbk91dFNpbmU6IFswLjM3LCAwLCAwLjYzLCAxXSxcbiAgZWFzZUluUXVhZDogWzAuMTEsIDAsIDAuNSwgMF0sXG4gIGVhc2VPdXRRdWFkOiBbMC41LCAxLCAwLjg5LCAxXSxcbiAgZWFzZUluT3V0UXVhZDogWzAuNDUsIDAsIDAuNTUsIDFdLFxuICBlYXNlSW5DdWJpYzogWzAuMzIsIDAsIDAuNjcsIDBdLFxuICBlYXNlT3V0Q3ViaWM6IFswLjMzLCAxLCAwLjY4LCAxXSxcbiAgZWFzZUluT3V0Q3ViaWM6IFswLjY1LCAwLCAwLjM1LCAxXSxcbiAgZWFzZUluUXVhcnQ6IFswLjUsIDAsIDAuNzUsIDBdLFxuICBlYXNlT3V0UXVhcnQ6IFswLjI1LCAxLCAwLjUsIDFdLFxuICBlYXNlSW5PdXRRdWFydDogWzAuNzYsIDAsIDAuMjQsIDFdLFxuICBlYXNlSW5RdWludDogWzAuNjQsIDAsIDAuNzgsIDBdLFxuICBlYXNlT3V0UXVpbnQ6IFswLjIyLCAxLCAwLjM2LCAxXSxcbiAgZWFzZUluT3V0UXVpbnQ6IFswLjgzLCAwLCAwLjE3LCAxXSxcbiAgZWFzZUluRXhwbzogWzAuNywgMCwgMC44NCwgMF0sXG4gIGVhc2VPdXRFeHBvOiBbMC4xNiwgMSwgMC4zLCAxXSxcbiAgZWFzZUluT3V0RXhwbzogWzAuODcsIDAsIDAuMTMsIDFdLFxuICBlYXNlSW5DaXJjOiBbMC41NSwgMCwgMSwgMC40NV0sXG4gIGVhc2VPdXRDaXJjOiBbMCwgMC41NSwgMC40NSwgMV0sXG4gIGVhc2VJbk91dENpcmM6IFswLjg1LCAwLCAwLjE1LCAxXSxcbiAgZWFzZUluQmFjazogWzAuMzYsIDAsIDAuNjYsIC0wLjU2XSxcbiAgZWFzZU91dEJhY2s6IFswLjM0LCAxLjU2LCAwLjY0LCAxXSxcbiAgZWFzZUluT3V0QmFjazogWzAuNjgsIC0wLjYsIDAuMzIsIDEuNl1cbn07XG5mdW5jdGlvbiBjcmVhdGVFYXNpbmdGdW5jdGlvbihbcDAsIHAxLCBwMiwgcDNdKSB7XG4gIGNvbnN0IGEgPSAoYTEsIGEyKSA9PiAxIC0gMyAqIGEyICsgMyAqIGExO1xuICBjb25zdCBiID0gKGExLCBhMikgPT4gMyAqIGEyIC0gNiAqIGExO1xuICBjb25zdCBjID0gKGExKSA9PiAzICogYTE7XG4gIGNvbnN0IGNhbGNCZXppZXIgPSAodCwgYTEsIGEyKSA9PiAoKGEoYTEsIGEyKSAqIHQgKyBiKGExLCBhMikpICogdCArIGMoYTEpKSAqIHQ7XG4gIGNvbnN0IGdldFNsb3BlID0gKHQsIGExLCBhMikgPT4gMyAqIGEoYTEsIGEyKSAqIHQgKiB0ICsgMiAqIGIoYTEsIGEyKSAqIHQgKyBjKGExKTtcbiAgY29uc3QgZ2V0VGZvclggPSAoeCkgPT4ge1xuICAgIGxldCBhR3Vlc3NUID0geDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgY29uc3QgY3VycmVudFNsb3BlID0gZ2V0U2xvcGUoYUd1ZXNzVCwgcDAsIHAyKTtcbiAgICAgIGlmIChjdXJyZW50U2xvcGUgPT09IDApXG4gICAgICAgIHJldHVybiBhR3Vlc3NUO1xuICAgICAgY29uc3QgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIHAwLCBwMikgLSB4O1xuICAgICAgYUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcbiAgICB9XG4gICAgcmV0dXJuIGFHdWVzc1Q7XG4gIH07XG4gIHJldHVybiAoeCkgPT4gcDAgPT09IHAxICYmIHAyID09PSBwMyA/IHggOiBjYWxjQmV6aWVyKGdldFRmb3JYKHgpLCBwMSwgcDMpO1xufVxuZnVuY3Rpb24gdXNlVHJhbnNpdGlvbihzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZGVsYXkgPSAwLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZHVyYXRpb24gPSAxZTMsXG4gICAgb25GaW5pc2hlZCA9IHNoYXJlZC5ub29wLFxuICAgIG9uU3RhcnRlZCA9IHNoYXJlZC5ub29wLFxuICAgIHRyYW5zaXRpb24gPSBzaGFyZWQuaWRlbnRpdHlcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGN1cnJlbnRUcmFuc2l0aW9uID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdCA9IHZ1ZURlbWkudW5yZWYodHJhbnNpdGlvbik7XG4gICAgcmV0dXJuIHNoYXJlZC5pc0Z1bmN0aW9uKHQpID8gdCA6IGNyZWF0ZUVhc2luZ0Z1bmN0aW9uKHQpO1xuICB9KTtcbiAgY29uc3Qgc291cmNlVmFsdWUgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdnVlRGVtaS51bnJlZihzb3VyY2UpO1xuICAgIHJldHVybiBzaGFyZWQuaXNOdW1iZXIocykgPyBzIDogcy5tYXAodnVlRGVtaS51bnJlZik7XG4gIH0pO1xuICBjb25zdCBzb3VyY2VWZWN0b3IgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHNoYXJlZC5pc051bWJlcihzb3VyY2VWYWx1ZS52YWx1ZSkgPyBbc291cmNlVmFsdWUudmFsdWVdIDogc291cmNlVmFsdWUudmFsdWUpO1xuICBjb25zdCBvdXRwdXRWZWN0b3IgPSB2dWVEZW1pLnJlZihzb3VyY2VWZWN0b3IudmFsdWUuc2xpY2UoMCkpO1xuICBsZXQgY3VycmVudER1cmF0aW9uO1xuICBsZXQgZGlmZlZlY3RvcjtcbiAgbGV0IGVuZEF0O1xuICBsZXQgc3RhcnRBdDtcbiAgbGV0IHN0YXJ0VmVjdG9yO1xuICBjb25zdCB7IHJlc3VtZSwgcGF1c2UgfSA9IHVzZVJhZkZuKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHByb2dyZXNzID0gc2hhcmVkLmNsYW1wKDEgLSAoZW5kQXQgLSBub3cpIC8gY3VycmVudER1cmF0aW9uLCAwLCAxKTtcbiAgICBvdXRwdXRWZWN0b3IudmFsdWUgPSBzdGFydFZlY3Rvci5tYXAoKHZhbCwgaSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgcmV0dXJuIHZhbCArICgoX2EgPSBkaWZmVmVjdG9yW2ldKSAhPSBudWxsID8gX2EgOiAwKSAqIGN1cnJlbnRUcmFuc2l0aW9uLnZhbHVlKHByb2dyZXNzKTtcbiAgICB9KTtcbiAgICBpZiAocHJvZ3Jlc3MgPj0gMSkge1xuICAgICAgcGF1c2UoKTtcbiAgICAgIG9uRmluaXNoZWQoKTtcbiAgICB9XG4gIH0sIHsgaW1tZWRpYXRlOiBmYWxzZSB9KTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgcGF1c2UoKTtcbiAgICBjdXJyZW50RHVyYXRpb24gPSB2dWVEZW1pLnVucmVmKGR1cmF0aW9uKTtcbiAgICBkaWZmVmVjdG9yID0gb3V0cHV0VmVjdG9yLnZhbHVlLm1hcCgobiwgaSkgPT4ge1xuICAgICAgdmFyIF9hLCBfYjtcbiAgICAgIHJldHVybiAoKF9hID0gc291cmNlVmVjdG9yLnZhbHVlW2ldKSAhPSBudWxsID8gX2EgOiAwKSAtICgoX2IgPSBvdXRwdXRWZWN0b3IudmFsdWVbaV0pICE9IG51bGwgPyBfYiA6IDApO1xuICAgIH0pO1xuICAgIHN0YXJ0VmVjdG9yID0gb3V0cHV0VmVjdG9yLnZhbHVlLnNsaWNlKDApO1xuICAgIHN0YXJ0QXQgPSBEYXRlLm5vdygpO1xuICAgIGVuZEF0ID0gc3RhcnRBdCArIGN1cnJlbnREdXJhdGlvbjtcbiAgICByZXN1bWUoKTtcbiAgICBvblN0YXJ0ZWQoKTtcbiAgfTtcbiAgY29uc3QgdGltZW91dCA9IHNoYXJlZC51c2VUaW1lb3V0Rm4oc3RhcnQsIGRlbGF5LCB7IGltbWVkaWF0ZTogZmFsc2UgfSk7XG4gIHZ1ZURlbWkud2F0Y2goc291cmNlVmVjdG9yLCAoKSA9PiB7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYoZGlzYWJsZWQpKSB7XG4gICAgICBvdXRwdXRWZWN0b3IudmFsdWUgPSBzb3VyY2VWZWN0b3IudmFsdWUuc2xpY2UoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2dWVEZW1pLnVucmVmKGRlbGF5KSA8PSAwKVxuICAgICAgICBzdGFydCgpO1xuICAgICAgZWxzZVxuICAgICAgICB0aW1lb3V0LnN0YXJ0KCk7XG4gICAgfVxuICB9LCB7IGRlZXA6IHRydWUgfSk7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWZWN0b3IgPSB2dWVEZW1pLnVucmVmKGRpc2FibGVkKSA/IHNvdXJjZVZlY3RvciA6IG91dHB1dFZlY3RvcjtcbiAgICByZXR1cm4gc2hhcmVkLmlzTnVtYmVyKHNvdXJjZVZhbHVlLnZhbHVlKSA/IHRhcmdldFZlY3Rvci52YWx1ZVswXSA6IHRhcmdldFZlY3Rvci52YWx1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZVVybFNlYXJjaFBhcmFtcyhtb2RlID0gXCJoaXN0b3J5XCIsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW5pdGlhbFZhbHVlID0ge30sXG4gICAgcmVtb3ZlTnVsbGlzaFZhbHVlcyA9IHRydWUsXG4gICAgcmVtb3ZlRmFsc3lWYWx1ZXMgPSBmYWxzZSxcbiAgICB3aW5kb3cgPSBkZWZhdWx0V2luZG93XG4gIH0gPSBvcHRpb25zO1xuICBpZiAoIXdpbmRvdylcbiAgICByZXR1cm4gdnVlRGVtaS5yZWFjdGl2ZShpbml0aWFsVmFsdWUpO1xuICBjb25zdCBzdGF0ZSA9IHZ1ZURlbWkucmVhY3RpdmUoe30pO1xuICBmdW5jdGlvbiBnZXRSYXdQYXJhbXMoKSB7XG4gICAgaWYgKG1vZGUgPT09IFwiaGlzdG9yeVwiKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnNlYXJjaCB8fCBcIlwiO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJoYXNoXCIpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaCB8fCBcIlwiO1xuICAgICAgY29uc3QgaW5kZXggPSBoYXNoLmluZGV4T2YoXCI/XCIpO1xuICAgICAgcmV0dXJuIGluZGV4ID4gMCA/IGhhc2guc2xpY2UoaW5kZXgpIDogXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICh3aW5kb3cubG9jYXRpb24uaGFzaCB8fCBcIlwiKS5yZXBsYWNlKC9eIy8sIFwiXCIpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjb25zdHJ1Y3RRdWVyeShwYXJhbXMpIHtcbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgIGlmIChtb2RlID09PSBcImhpc3RvcnlcIilcbiAgICAgIHJldHVybiBgJHtzdHJpbmdpZmllZCA/IGA/JHtzdHJpbmdpZmllZH1gIDogXCJcIn0ke2xvY2F0aW9uLmhhc2ggfHwgXCJcIn1gO1xuICAgIGlmIChtb2RlID09PSBcImhhc2gtcGFyYW1zXCIpXG4gICAgICByZXR1cm4gYCR7bG9jYXRpb24uc2VhcmNoIHx8IFwiXCJ9JHtzdHJpbmdpZmllZCA/IGAjJHtzdHJpbmdpZmllZH1gIDogXCJcIn1gO1xuICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaCB8fCBcIiNcIjtcbiAgICBjb25zdCBpbmRleCA9IGhhc2guaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKGluZGV4ID4gMClcbiAgICAgIHJldHVybiBgJHtoYXNoLnNsaWNlKDAsIGluZGV4KX0ke3N0cmluZ2lmaWVkID8gYD8ke3N0cmluZ2lmaWVkfWAgOiBcIlwifWA7XG4gICAgcmV0dXJuIGAke2hhc2h9JHtzdHJpbmdpZmllZCA/IGA/JHtzdHJpbmdpZmllZH1gIDogXCJcIn1gO1xuICB9XG4gIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoZ2V0UmF3UGFyYW1zKCkpO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHBhcmFtcykge1xuICAgIGNvbnN0IHVudXNlZEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHN0YXRlKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGFyYW1zLmtleXMoKSkge1xuICAgICAgY29uc3QgcGFyYW1zRm9yS2V5ID0gcGFyYW1zLmdldEFsbChrZXkpO1xuICAgICAgc3RhdGVba2V5XSA9IHBhcmFtc0ZvcktleS5sZW5ndGggPiAxID8gcGFyYW1zRm9yS2V5IDogcGFyYW1zLmdldChrZXkpIHx8IFwiXCI7XG4gICAgICB1bnVzZWRLZXlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBBcnJheS5mcm9tKHVudXNlZEtleXMpLmZvckVhY2goKGtleSkgPT4gZGVsZXRlIHN0YXRlW2tleV0pO1xuICB9XG4gIGNvbnN0IHsgcGF1c2UsIHJlc3VtZSB9ID0gc2hhcmVkLnBhdXNhYmxlV2F0Y2goc3RhdGUsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKFwiXCIpO1xuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IG1hcEVudHJ5ID0gc3RhdGVba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcEVudHJ5KSlcbiAgICAgICAgbWFwRW50cnkuZm9yRWFjaCgodmFsdWUpID0+IHBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSkpO1xuICAgICAgZWxzZSBpZiAocmVtb3ZlTnVsbGlzaFZhbHVlcyAmJiBtYXBFbnRyeSA9PSBudWxsKVxuICAgICAgICBwYXJhbXMuZGVsZXRlKGtleSk7XG4gICAgICBlbHNlIGlmIChyZW1vdmVGYWxzeVZhbHVlcyAmJiAhbWFwRW50cnkpXG4gICAgICAgIHBhcmFtcy5kZWxldGUoa2V5KTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyYW1zLnNldChrZXksIG1hcEVudHJ5KTtcbiAgICB9KTtcbiAgICB3cml0ZShwYXJhbXMpO1xuICB9LCB7IGRlZXA6IHRydWUgfSk7XG4gIGZ1bmN0aW9uIHdyaXRlKHBhcmFtcywgc2hvdWxkVXBkYXRlKSB7XG4gICAgcGF1c2UoKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKVxuICAgICAgdXBkYXRlU3RhdGUocGFyYW1zKTtcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsIHdpbmRvdy5kb2N1bWVudC50aXRsZSwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgY29uc3RydWN0UXVlcnkocGFyYW1zKSk7XG4gICAgcmVzdW1lKCk7XG4gIH1cbiAgZnVuY3Rpb24gb25DaGFuZ2VkKCkge1xuICAgIHdyaXRlKHJlYWQoKSwgdHJ1ZSk7XG4gIH1cbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwicG9wc3RhdGVcIiwgb25DaGFuZ2VkLCBmYWxzZSk7XG4gIGlmIChtb2RlICE9PSBcImhpc3RvcnlcIilcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJoYXNoY2hhbmdlXCIsIG9uQ2hhbmdlZCwgZmFsc2UpO1xuICBjb25zdCBpbml0aWFsID0gcmVhZCgpO1xuICBpZiAoaW5pdGlhbC5rZXlzKCkubmV4dCgpLnZhbHVlKVxuICAgIHVwZGF0ZVN0YXRlKGluaXRpYWwpO1xuICBlbHNlXG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwgaW5pdGlhbFZhbHVlKTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1c2VVc2VyTWVkaWEob3B0aW9ucyA9IHt9KSB7XG4gIHZhciBfYSwgX2IsIF9jO1xuICBjb25zdCBlbmFibGVkID0gdnVlRGVtaS5yZWYoKF9hID0gb3B0aW9ucy5lbmFibGVkKSAhPSBudWxsID8gX2EgOiBmYWxzZSk7XG4gIGNvbnN0IGF1dG9Td2l0Y2ggPSB2dWVEZW1pLnJlZigoX2IgPSBvcHRpb25zLmF1dG9Td2l0Y2gpICE9IG51bGwgPyBfYiA6IHRydWUpO1xuICBjb25zdCB2aWRlb0RldmljZUlkID0gdnVlRGVtaS5yZWYob3B0aW9ucy52aWRlb0RldmljZUlkKTtcbiAgY29uc3QgYXVkaW9EZXZpY2VJZCA9IHZ1ZURlbWkucmVmKG9wdGlvbnMuYXVkaW9EZXZpY2VJZCk7XG4gIGNvbnN0IHsgbmF2aWdhdG9yID0gZGVmYXVsdE5hdmlnYXRvciB9ID0gb3B0aW9ucztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBCb29sZWFuKChfYyA9IG5hdmlnYXRvciA9PSBudWxsID8gdm9pZCAwIDogbmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmdldFVzZXJNZWRpYSk7XG4gIGNvbnN0IHN0cmVhbSA9IHZ1ZURlbWkuc2hhbGxvd1JlZigpO1xuICBmdW5jdGlvbiBnZXREZXZpY2VPcHRpb25zKGRldmljZSkge1xuICAgIGlmIChkZXZpY2UudmFsdWUgPT09IFwibm9uZVwiIHx8IGRldmljZS52YWx1ZSA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRldmljZS52YWx1ZSA9PSBudWxsKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UudmFsdWVcbiAgICB9O1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIF9zdGFydCgpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkIHx8IHN0cmVhbS52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBzdHJlYW0udmFsdWUgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICB2aWRlbzogZ2V0RGV2aWNlT3B0aW9ucyh2aWRlb0RldmljZUlkKSxcbiAgICAgIGF1ZGlvOiBnZXREZXZpY2VPcHRpb25zKGF1ZGlvRGV2aWNlSWQpXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbS52YWx1ZTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBfc3RvcCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIChfYTIgPSBzdHJlYW0udmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodCkgPT4gdC5zdG9wKCkpO1xuICAgIHN0cmVhbS52YWx1ZSA9IHZvaWQgMDtcbiAgfVxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIF9zdG9wKCk7XG4gICAgZW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGF3YWl0IF9zdGFydCgpO1xuICAgIGlmIChzdHJlYW0udmFsdWUpXG4gICAgICBlbmFibGVkLnZhbHVlID0gdHJ1ZTtcbiAgICByZXR1cm4gc3RyZWFtLnZhbHVlO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3RhcnQoKSB7XG4gICAgX3N0b3AoKTtcbiAgICByZXR1cm4gYXdhaXQgc3RhcnQoKTtcbiAgfVxuICB2dWVEZW1pLndhdGNoKGVuYWJsZWQsICh2KSA9PiB7XG4gICAgaWYgKHYpXG4gICAgICBfc3RhcnQoKTtcbiAgICBlbHNlXG4gICAgICBfc3RvcCgpO1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgdnVlRGVtaS53YXRjaChbdmlkZW9EZXZpY2VJZCwgYXVkaW9EZXZpY2VJZF0sICgpID0+IHtcbiAgICBpZiAoYXV0b1N3aXRjaC52YWx1ZSAmJiBzdHJlYW0udmFsdWUpXG4gICAgICByZXN0YXJ0KCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIHN0cmVhbSxcbiAgICBzdGFydCxcbiAgICBzdG9wLFxuICAgIHJlc3RhcnQsXG4gICAgdmlkZW9EZXZpY2VJZCxcbiAgICBhdWRpb0RldmljZUlkLFxuICAgIGVuYWJsZWQsXG4gICAgYXV0b1N3aXRjaFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VWTW9kZWwocHJvcHMsIGtleSwgZW1pdCwgb3B0aW9ucyA9IHt9KSB7XG4gIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gIGNvbnN0IHtcbiAgICBwYXNzaXZlID0gZmFsc2UsXG4gICAgZXZlbnROYW1lLFxuICAgIGRlZXAgPSBmYWxzZSxcbiAgICBkZWZhdWx0VmFsdWVcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHZtID0gdnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgY29uc3QgX2VtaXQgPSBlbWl0IHx8ICh2bSA9PSBudWxsID8gdm9pZCAwIDogdm0uZW1pdCkgfHwgKChfYSA9IHZtID09IG51bGwgPyB2b2lkIDAgOiB2bS4kZW1pdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmJpbmQodm0pKSB8fCAoKF9jID0gKF9iID0gdm0gPT0gbnVsbCA/IHZvaWQgMCA6IHZtLnByb3h5KSA9PSBudWxsID8gdm9pZCAwIDogX2IuJGVtaXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5iaW5kKHZtID09IG51bGwgPyB2b2lkIDAgOiB2bS5wcm94eSkpO1xuICBsZXQgZXZlbnQgPSBldmVudE5hbWU7XG4gIGlmICgha2V5KSB7XG4gICAgaWYgKHZ1ZURlbWkuaXNWdWUyKSB7XG4gICAgICBjb25zdCBtb2RlbE9wdGlvbnMgPSAoX2UgPSAoX2QgPSB2bSA9PSBudWxsID8gdm9pZCAwIDogdm0ucHJveHkpID09IG51bGwgPyB2b2lkIDAgOiBfZC4kb3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9lLm1vZGVsO1xuICAgICAga2V5ID0gKG1vZGVsT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbW9kZWxPcHRpb25zLnZhbHVlKSB8fCBcInZhbHVlXCI7XG4gICAgICBpZiAoIWV2ZW50TmFtZSlcbiAgICAgICAgZXZlbnQgPSAobW9kZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBtb2RlbE9wdGlvbnMuZXZlbnQpIHx8IFwiaW5wdXRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gXCJtb2RlbFZhbHVlXCI7XG4gICAgfVxuICB9XG4gIGV2ZW50ID0gZXZlbnROYW1lIHx8IGV2ZW50IHx8IGB1cGRhdGU6JHtrZXkudG9TdHJpbmcoKX1gO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHNoYXJlZC5pc0RlZihwcm9wc1trZXldKSA/IHByb3BzW2tleV0gOiBkZWZhdWx0VmFsdWU7XG4gIGlmIChwYXNzaXZlKSB7XG4gICAgY29uc3QgcHJveHkgPSB2dWVEZW1pLnJlZihnZXRWYWx1ZSgpKTtcbiAgICB2dWVEZW1pLndhdGNoKCgpID0+IHByb3BzW2tleV0sICh2KSA9PiBwcm94eS52YWx1ZSA9IHYpO1xuICAgIHZ1ZURlbWkud2F0Y2gocHJveHksICh2KSA9PiB7XG4gICAgICBpZiAodiAhPT0gcHJvcHNba2V5XSB8fCBkZWVwKVxuICAgICAgICBfZW1pdChldmVudCwgdik7XG4gICAgfSwge1xuICAgICAgZGVlcFxuICAgIH0pO1xuICAgIHJldHVybiBwcm94eTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCh7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRWYWx1ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBfZW1pdChldmVudCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVZNb2RlbHMocHJvcHMsIGVtaXQsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZXQgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpXG4gICAgcmV0W2tleV0gPSB1c2VWTW9kZWwocHJvcHMsIGtleSwgZW1pdCwgb3B0aW9ucyk7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHVzZVZpYnJhdGUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9IFtdLFxuICAgIGludGVydmFsID0gMCxcbiAgICBuYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBpc1N1cHBvcnRlZCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJ2aWJyYXRlXCIgaW4gbmF2aWdhdG9yO1xuICBjb25zdCBwYXR0ZXJuUmVmID0gdnVlRGVtaS5yZWYocGF0dGVybik7XG4gIGxldCBpbnRlcnZhbENvbnRyb2xzO1xuICBjb25zdCB2aWJyYXRlID0gKHBhdHRlcm4yID0gcGF0dGVyblJlZi52YWx1ZSkgPT4ge1xuICAgIGlmIChpc1N1cHBvcnRlZClcbiAgICAgIG5hdmlnYXRvci52aWJyYXRlKHBhdHRlcm4yKTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBpZiAoaXNTdXBwb3J0ZWQpXG4gICAgICBuYXZpZ2F0b3IudmlicmF0ZSgwKTtcbiAgICBpbnRlcnZhbENvbnRyb2xzID09IG51bGwgPyB2b2lkIDAgOiBpbnRlcnZhbENvbnRyb2xzLnBhdXNlKCk7XG4gIH07XG4gIGlmIChpbnRlcnZhbCA+IDApIHtcbiAgICBpbnRlcnZhbENvbnRyb2xzID0gc2hhcmVkLnVzZUludGVydmFsRm4odmlicmF0ZSwgaW50ZXJ2YWwsIHtcbiAgICAgIGltbWVkaWF0ZTogZmFsc2UsXG4gICAgICBpbW1lZGlhdGVDYWxsYmFjazogZmFsc2VcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIHBhdHRlcm4sXG4gICAgaW50ZXJ2YWxDb250cm9scyxcbiAgICB2aWJyYXRlLFxuICAgIHN0b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlVmlydHVhbExpc3QobGlzdCwgb3B0aW9ucykge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCBzaXplID0gdXNlRWxlbWVudFNpemUoY29udGFpbmVyUmVmKTtcbiAgY29uc3QgY3VycmVudExpc3QgPSB2dWVEZW1pLnJlZihbXSk7XG4gIGNvbnN0IHNvdXJjZSA9IHZ1ZURlbWkuc2hhbGxvd1JlZihsaXN0KTtcbiAgY29uc3Qgc3RhdGUgPSB2dWVEZW1pLnJlZih7IHN0YXJ0OiAwLCBlbmQ6IDEwIH0pO1xuICBjb25zdCB7IGl0ZW1IZWlnaHQsIG92ZXJzY2FuID0gNSB9ID0gb3B0aW9ucztcbiAgY29uc3QgZ2V0Vmlld0NhcGFjaXR5ID0gKGNvbnRhaW5lckhlaWdodCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaXRlbUhlaWdodCA9PT0gXCJudW1iZXJcIilcbiAgICAgIHJldHVybiBNYXRoLmNlaWwoY29udGFpbmVySGVpZ2h0IC8gaXRlbUhlaWdodCk7XG4gICAgY29uc3QgeyBzdGFydCA9IDAgfSA9IHN0YXRlLnZhbHVlO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBjYXBhY2l0eSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc291cmNlLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpdGVtSGVpZ2h0KGkpO1xuICAgICAgc3VtICs9IGhlaWdodDtcbiAgICAgIGlmIChzdW0gPj0gY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgIGNhcGFjaXR5ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXBhY2l0eSAtIHN0YXJ0O1xuICB9O1xuICBjb25zdCBnZXRPZmZzZXQgPSAoc2Nyb2xsVG9wKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtSGVpZ2h0ID09PSBcIm51bWJlclwiKVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gaXRlbUhlaWdodCkgKyAxO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpdGVtSGVpZ2h0KGkpO1xuICAgICAgc3VtICs9IGhlaWdodDtcbiAgICAgIGlmIChzdW0gPj0gc2Nyb2xsVG9wKSB7XG4gICAgICAgIG9mZnNldCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0ICsgMTtcbiAgfTtcbiAgY29uc3QgY2FsY3VsYXRlUmFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGNvbnRhaW5lclJlZi52YWx1ZTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0KGVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgICAgIGNvbnN0IHZpZXdDYXBhY2l0eSA9IGdldFZpZXdDYXBhY2l0eShlbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICBjb25zdCBmcm9tID0gb2Zmc2V0IC0gb3ZlcnNjYW47XG4gICAgICBjb25zdCB0byA9IG9mZnNldCArIHZpZXdDYXBhY2l0eSArIG92ZXJzY2FuO1xuICAgICAgc3RhdGUudmFsdWUgPSB7XG4gICAgICAgIHN0YXJ0OiBmcm9tIDwgMCA/IDAgOiBmcm9tLFxuICAgICAgICBlbmQ6IHRvID4gc291cmNlLnZhbHVlLmxlbmd0aCA/IHNvdXJjZS52YWx1ZS5sZW5ndGggOiB0b1xuICAgICAgfTtcbiAgICAgIGN1cnJlbnRMaXN0LnZhbHVlID0gc291cmNlLnZhbHVlLnNsaWNlKHN0YXRlLnZhbHVlLnN0YXJ0LCBzdGF0ZS52YWx1ZS5lbmQpLm1hcCgoZWxlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZGF0YTogZWxlLFxuICAgICAgICBpbmRleDogaW5kZXggKyBzdGF0ZS52YWx1ZS5zdGFydFxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcbiAgdnVlRGVtaS53YXRjaChbc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIGxpc3RdLCAoKSA9PiB7XG4gICAgY2FsY3VsYXRlUmFuZ2UoKTtcbiAgfSk7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtSGVpZ2h0ID09PSBcIm51bWJlclwiKVxuICAgICAgcmV0dXJuIHNvdXJjZS52YWx1ZS5sZW5ndGggKiBpdGVtSGVpZ2h0O1xuICAgIHJldHVybiBzb3VyY2UudmFsdWUucmVkdWNlKChzdW0sIF8sIGluZGV4KSA9PiBzdW0gKyBpdGVtSGVpZ2h0KGluZGV4KSwgMCk7XG4gIH0pO1xuICBjb25zdCBnZXREaXN0YW5jZVRvcCA9IChpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaXRlbUhlaWdodCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc3QgaGVpZ2h0MiA9IGluZGV4ICogaXRlbUhlaWdodDtcbiAgICAgIHJldHVybiBoZWlnaHQyO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHQgPSBzb3VyY2UudmFsdWUuc2xpY2UoMCwgaW5kZXgpLnJlZHVjZSgoc3VtLCBfLCBpKSA9PiBzdW0gKyBpdGVtSGVpZ2h0KGkpLCAwKTtcbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9O1xuICBjb25zdCBzY3JvbGxUbyA9IChpbmRleCkgPT4ge1xuICAgIGlmIChjb250YWluZXJSZWYudmFsdWUpIHtcbiAgICAgIGNvbnRhaW5lclJlZi52YWx1ZS5zY3JvbGxUb3AgPSBnZXREaXN0YW5jZVRvcChpbmRleCk7XG4gICAgICBjYWxjdWxhdGVSYW5nZSgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgb2Zmc2V0VG9wID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBnZXREaXN0YW5jZVRvcChzdGF0ZS52YWx1ZS5zdGFydCkpO1xuICBjb25zdCB3cmFwcGVyUHJvcHMgPSB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICBoZWlnaHQ6IGAke3RvdGFsSGVpZ2h0LnZhbHVlIC0gb2Zmc2V0VG9wLnZhbHVlfXB4YCxcbiAgICAgICAgbWFyZ2luVG9wOiBgJHtvZmZzZXRUb3AudmFsdWV9cHhgXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlID0geyBvdmVyZmxvd1k6IFwiYXV0b1wiIH07XG4gIHJldHVybiB7XG4gICAgbGlzdDogY3VycmVudExpc3QsXG4gICAgc2Nyb2xsVG8sXG4gICAgY29udGFpbmVyUHJvcHM6IHtcbiAgICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgICAgb25TY3JvbGw6ICgpID0+IHtcbiAgICAgICAgY2FsY3VsYXRlUmFuZ2UoKTtcbiAgICAgIH0sXG4gICAgICBzdHlsZTogY29udGFpbmVyU3R5bGVcbiAgICB9LFxuICAgIHdyYXBwZXJQcm9wc1xuICB9O1xufVxuXG5jb25zdCB1c2VXYWtlTG9jayA9IChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIG5hdmlnYXRvciA9IGRlZmF1bHROYXZpZ2F0b3IsXG4gICAgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnRcbiAgfSA9IG9wdGlvbnM7XG4gIGxldCB3YWtlTG9jaztcbiAgY29uc3QgaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgXCJ3YWtlTG9ja1wiIGluIG5hdmlnYXRvcjtcbiAgY29uc3QgaXNBY3RpdmUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkIHx8ICF3YWtlTG9jaylcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcInZpc2libGVcIilcbiAgICAgIHdha2VMb2NrID0gYXdhaXQgbmF2aWdhdG9yLndha2VMb2NrLnJlcXVlc3QoXCJzY3JlZW5cIik7XG4gICAgaXNBY3RpdmUudmFsdWUgPSAhd2FrZUxvY2sucmVsZWFzZWQ7XG4gIH1cbiAgaWYgKGRvY3VtZW50KVxuICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCBvblZpc2liaWxpdHlDaGFuZ2UsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdCh0eXBlKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICB3YWtlTG9jayA9IGF3YWl0IG5hdmlnYXRvci53YWtlTG9jay5yZXF1ZXN0KHR5cGUpO1xuICAgIGlzQWN0aXZlLnZhbHVlID0gIXdha2VMb2NrLnJlbGVhc2VkO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHJlbGVhc2UoKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZCB8fCAhd2FrZUxvY2spXG4gICAgICByZXR1cm47XG4gICAgYXdhaXQgd2FrZUxvY2sucmVsZWFzZSgpO1xuICAgIGlzQWN0aXZlLnZhbHVlID0gIXdha2VMb2NrLnJlbGVhc2VkO1xuICAgIHdha2VMb2NrID0gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzU3VwcG9ydGVkLFxuICAgIGlzQWN0aXZlLFxuICAgIHJlcXVlc3QsXG4gICAgcmVsZWFzZVxuICB9O1xufTtcblxuY29uc3QgdXNlV2ViTm90aWZpY2F0aW9uID0gKGRlZmF1bHRPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIHdpbmRvdyA9IGRlZmF1bHRXaW5kb3dcbiAgfSA9IGRlZmF1bHRPcHRpb25zO1xuICBjb25zdCBpc1N1cHBvcnRlZCA9ICEhd2luZG93ICYmIFwiTm90aWZpY2F0aW9uXCIgaW4gd2luZG93O1xuICBjb25zdCBub3RpZmljYXRpb24gPSB2dWVEZW1pLnJlZihudWxsKTtcbiAgY29uc3QgcmVxdWVzdFBlcm1pc3Npb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoXCJwZXJtaXNzaW9uXCIgaW4gTm90aWZpY2F0aW9uICYmIE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uICE9PSBcImRlbmllZFwiKVxuICAgICAgYXdhaXQgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gIH07XG4gIGNvbnN0IG9uQ2xpY2sgPSBzaGFyZWQuY3JlYXRlRXZlbnRIb29rKCk7XG4gIGNvbnN0IG9uU2hvdyA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3Qgb25FcnJvciA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3Qgb25DbG9zZSA9IHNoYXJlZC5jcmVhdGVFdmVudEhvb2soKTtcbiAgY29uc3Qgc2hvdyA9IGFzeW5jIChvdmVycmlkZXMpID0+IHtcbiAgICBpZiAoIWlzU3VwcG9ydGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGF3YWl0IHJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvdmVycmlkZXMpO1xuICAgIG5vdGlmaWNhdGlvbi52YWx1ZSA9IG5ldyBOb3RpZmljYXRpb24ob3B0aW9ucy50aXRsZSB8fCBcIlwiLCBvcHRpb25zKTtcbiAgICBub3RpZmljYXRpb24udmFsdWUub25jbGljayA9IChldmVudCkgPT4gb25DbGljay50cmlnZ2VyKGV2ZW50KTtcbiAgICBub3RpZmljYXRpb24udmFsdWUub25zaG93ID0gKGV2ZW50KSA9PiBvblNob3cudHJpZ2dlcihldmVudCk7XG4gICAgbm90aWZpY2F0aW9uLnZhbHVlLm9uZXJyb3IgPSAoZXZlbnQpID0+IG9uRXJyb3IudHJpZ2dlcihldmVudCk7XG4gICAgbm90aWZpY2F0aW9uLnZhbHVlLm9uY2xvc2UgPSAoZXZlbnQpID0+IG9uQ2xvc2UudHJpZ2dlcihldmVudCk7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbi52YWx1ZTtcbiAgfTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi52YWx1ZSlcbiAgICAgIG5vdGlmaWNhdGlvbi52YWx1ZS5jbG9zZSgpO1xuICAgIG5vdGlmaWNhdGlvbi52YWx1ZSA9IG51bGw7XG4gIH07XG4gIHNoYXJlZC50cnlPbk1vdW50ZWQoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc1N1cHBvcnRlZClcbiAgICAgIGF3YWl0IHJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gIH0pO1xuICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoY2xvc2UpO1xuICBpZiAoaXNTdXBwb3J0ZWQgJiYgd2luZG93KSB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcInZpc2libGVcIikge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNTdXBwb3J0ZWQsXG4gICAgbm90aWZpY2F0aW9uLFxuICAgIHNob3csXG4gICAgY2xvc2UsXG4gICAgb25DbGljayxcbiAgICBvblNob3csXG4gICAgb25FcnJvcixcbiAgICBvbkNsb3NlXG4gIH07XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlTmVzdGVkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB0cnVlKVxuICAgIHJldHVybiB7fTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiB1c2VXZWJTb2NrZXQodXJsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG9uQ29ubmVjdGVkLFxuICAgIG9uRGlzY29ubmVjdGVkLFxuICAgIG9uRXJyb3IsXG4gICAgb25NZXNzYWdlLFxuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgYXV0b0Nsb3NlID0gdHJ1ZSxcbiAgICBwcm90b2NvbHMgPSBbXVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCBzdGF0dXMgPSB2dWVEZW1pLnJlZihcIkNPTk5FQ1RJTkdcIik7XG4gIGNvbnN0IHdzUmVmID0gdnVlRGVtaS5yZWYoKTtcbiAgbGV0IGhlYXJ0YmVhdFBhdXNlO1xuICBsZXQgaGVhcnRiZWF0UmVzdW1lO1xuICBsZXQgZXhwbGljaXRseUNsb3NlZCA9IGZhbHNlO1xuICBsZXQgcmV0cmllZCA9IDA7XG4gIGxldCBidWZmZXJlZERhdGEgPSBbXTtcbiAgY29uc3QgY2xvc2UgPSAoY29kZSA9IDFlMywgcmVhc29uKSA9PiB7XG4gICAgaWYgKCF3c1JlZi52YWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBleHBsaWNpdGx5Q2xvc2VkID0gdHJ1ZTtcbiAgICBoZWFydGJlYXRQYXVzZSA9PSBudWxsID8gdm9pZCAwIDogaGVhcnRiZWF0UGF1c2UoKTtcbiAgICB3c1JlZi52YWx1ZS5jbG9zZShjb2RlLCByZWFzb24pO1xuICB9O1xuICBjb25zdCBfc2VuZEJ1ZmZlciA9ICgpID0+IHtcbiAgICBpZiAoYnVmZmVyZWREYXRhLmxlbmd0aCAmJiB3c1JlZi52YWx1ZSAmJiBzdGF0dXMudmFsdWUgPT09IFwiT1BFTlwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJlZERhdGEpXG4gICAgICAgIHdzUmVmLnZhbHVlLnNlbmQoYnVmZmVyKTtcbiAgICAgIGJ1ZmZlcmVkRGF0YSA9IFtdO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2VuZCA9IChkYXRhMiwgdXNlQnVmZmVyID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghd3NSZWYudmFsdWUgfHwgc3RhdHVzLnZhbHVlICE9PSBcIk9QRU5cIikge1xuICAgICAgaWYgKHVzZUJ1ZmZlcilcbiAgICAgICAgYnVmZmVyZWREYXRhLnB1c2goZGF0YTIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBfc2VuZEJ1ZmZlcigpO1xuICAgIHdzUmVmLnZhbHVlLnNlbmQoZGF0YTIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBjb25zdCBfaW5pdCA9ICgpID0+IHtcbiAgICBjb25zdCB3cyA9IG5ldyBXZWJTb2NrZXQodXJsLCBwcm90b2NvbHMpO1xuICAgIHdzUmVmLnZhbHVlID0gd3M7XG4gICAgc3RhdHVzLnZhbHVlID0gXCJDT05ORUNUSU5HXCI7XG4gICAgZXhwbGljaXRseUNsb3NlZCA9IGZhbHNlO1xuICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIHN0YXR1cy52YWx1ZSA9IFwiT1BFTlwiO1xuICAgICAgb25Db25uZWN0ZWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uQ29ubmVjdGVkKHdzKTtcbiAgICAgIGhlYXJ0YmVhdFJlc3VtZSA9PSBudWxsID8gdm9pZCAwIDogaGVhcnRiZWF0UmVzdW1lKCk7XG4gICAgICBfc2VuZEJ1ZmZlcigpO1xuICAgIH07XG4gICAgd3Mub25jbG9zZSA9IChldikgPT4ge1xuICAgICAgc3RhdHVzLnZhbHVlID0gXCJDTE9TRURcIjtcbiAgICAgIHdzUmVmLnZhbHVlID0gdm9pZCAwO1xuICAgICAgb25EaXNjb25uZWN0ZWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRGlzY29ubmVjdGVkKHdzLCBldik7XG4gICAgICBpZiAoIWV4cGxpY2l0bHlDbG9zZWQgJiYgb3B0aW9ucy5hdXRvUmVjb25uZWN0KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZXRyaWVzID0gLTEsXG4gICAgICAgICAgZGVsYXkgPSAxZTMsXG4gICAgICAgICAgb25GYWlsZWRcbiAgICAgICAgfSA9IHJlc29sdmVOZXN0ZWRPcHRpb25zKG9wdGlvbnMuYXV0b1JlY29ubmVjdCk7XG4gICAgICAgIHJldHJpZWQgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRyaWVzID09PSBcIm51bWJlclwiICYmIChyZXRyaWVzIDwgMCB8fCByZXRyaWVkIDwgcmV0cmllcykpXG4gICAgICAgICAgc2V0VGltZW91dChfaW5pdCwgZGVsYXkpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmV0cmllcyA9PT0gXCJmdW5jdGlvblwiICYmIHJldHJpZXMoKSlcbiAgICAgICAgICBzZXRUaW1lb3V0KF9pbml0LCBkZWxheSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvbkZhaWxlZCA9PSBudWxsID8gdm9pZCAwIDogb25GYWlsZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdzLm9uZXJyb3IgPSAoZSkgPT4ge1xuICAgICAgb25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogb25FcnJvcih3cywgZSk7XG4gICAgfTtcbiAgICB3cy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgICAgZGF0YS52YWx1ZSA9IGUuZGF0YTtcbiAgICAgIG9uTWVzc2FnZSA9PSBudWxsID8gdm9pZCAwIDogb25NZXNzYWdlKHdzLCBlKTtcbiAgICB9O1xuICB9O1xuICBpZiAob3B0aW9ucy5oZWFydGJlYXQpIHtcbiAgICBjb25zdCB7XG4gICAgICBtZXNzYWdlID0gXCJwaW5nXCIsXG4gICAgICBpbnRlcnZhbCA9IDFlM1xuICAgIH0gPSByZXNvbHZlTmVzdGVkT3B0aW9ucyhvcHRpb25zLmhlYXJ0YmVhdCk7XG4gICAgY29uc3QgeyBwYXVzZSwgcmVzdW1lIH0gPSBzaGFyZWQudXNlSW50ZXJ2YWxGbigoKSA9PiBzZW5kKG1lc3NhZ2UsIGZhbHNlKSwgaW50ZXJ2YWwsIHsgaW1tZWRpYXRlOiBmYWxzZSB9KTtcbiAgICBoZWFydGJlYXRQYXVzZSA9IHBhdXNlO1xuICAgIGhlYXJ0YmVhdFJlc3VtZSA9IHJlc3VtZTtcbiAgfVxuICBpZiAoaW1tZWRpYXRlKVxuICAgIF9pbml0KCk7XG4gIGlmIChhdXRvQ2xvc2UpIHtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4gY2xvc2UoKSk7XG4gICAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKGNsb3NlKTtcbiAgfVxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIGNsb3NlKCk7XG4gICAgcmV0cmllZCA9IDA7XG4gICAgX2luaXQoKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBkYXRhLFxuICAgIHN0YXR1cyxcbiAgICBjbG9zZSxcbiAgICBzZW5kLFxuICAgIG9wZW4sXG4gICAgd3M6IHdzUmVmXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVdlYldvcmtlcih1cmwsIHdvcmtlck9wdGlvbnMsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGF0YSA9IHZ1ZURlbWkucmVmKG51bGwpO1xuICBjb25zdCB3b3JrZXIgPSB2dWVEZW1pLnNoYWxsb3dSZWYoKTtcbiAgY29uc3QgcG9zdCA9IGZ1bmN0aW9uIHBvc3QyKHZhbCkge1xuICAgIGlmICghd29ya2VyLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHdvcmtlci52YWx1ZS5wb3N0TWVzc2FnZSh2YWwpO1xuICB9O1xuICBjb25zdCB0ZXJtaW5hdGUgPSBmdW5jdGlvbiB0ZXJtaW5hdGUyKCkge1xuICAgIGlmICghd29ya2VyLnZhbHVlKVxuICAgICAgcmV0dXJuO1xuICAgIHdvcmtlci52YWx1ZS50ZXJtaW5hdGUoKTtcbiAgfTtcbiAgaWYgKHdpbmRvdykge1xuICAgIHdvcmtlci52YWx1ZSA9IG5ldyBXb3JrZXIodXJsLCB3b3JrZXJPcHRpb25zKTtcbiAgICB3b3JrZXIudmFsdWUub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgIGRhdGEudmFsdWUgPSBlLmRhdGE7XG4gICAgfTtcbiAgICBzaGFyZWQudHJ5T25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgaWYgKHdvcmtlci52YWx1ZSlcbiAgICAgICAgd29ya2VyLnZhbHVlLnRlcm1pbmF0ZSgpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBwb3N0LFxuICAgIHRlcm1pbmF0ZSxcbiAgICB3b3JrZXJcbiAgfTtcbn1cblxuY29uc3Qgam9iUnVubmVyID0gKHVzZXJGdW5jKSA9PiAoZSkgPT4ge1xuICBjb25zdCB1c2VyRnVuY0FyZ3MgPSBlLmRhdGFbMF07XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodXNlckZ1bmMuYXBwbHkodm9pZCAwLCB1c2VyRnVuY0FyZ3MpKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBwb3N0TWVzc2FnZShbXCJTVUNDRVNTXCIsIHJlc3VsdF0pO1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBwb3N0TWVzc2FnZShbXCJFUlJPUlwiLCBlcnJvcl0pO1xuICB9KTtcbn07XG5cbmNvbnN0IGRlcHNQYXJzZXIgPSAoZGVwcykgPT4ge1xuICBpZiAoZGVwcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGRlcHNTdHJpbmcgPSBkZXBzLm1hcCgoZGVwKSA9PiBgJyR7ZGVwfSdgKS50b1N0cmluZygpO1xuICByZXR1cm4gYGltcG9ydFNjcmlwdHMoJHtkZXBzU3RyaW5nfSlgO1xufTtcblxuY29uc3QgY3JlYXRlV29ya2VyQmxvYlVybCA9IChmbiwgZGVwcykgPT4ge1xuICBjb25zdCBibG9iQ29kZSA9IGAke2RlcHNQYXJzZXIoZGVwcyl9OyBvbm1lc3NhZ2U9KCR7am9iUnVubmVyfSkoJHtmbn0pYDtcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtibG9iQ29kZV0sIHsgdHlwZTogXCJ0ZXh0L2phdmFzY3JpcHRcIiB9KTtcbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgcmV0dXJuIHVybDtcbn07XG5cbmNvbnN0IHVzZVdlYldvcmtlckZuID0gKGZuLCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGRlcGVuZGVuY2llcyA9IFtdLFxuICAgIHRpbWVvdXQsXG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvd1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qgd29ya2VyID0gdnVlRGVtaS5yZWYoKTtcbiAgY29uc3Qgd29ya2VyU3RhdHVzID0gdnVlRGVtaS5yZWYoXCJQRU5ESU5HXCIpO1xuICBjb25zdCBwcm9taXNlID0gdnVlRGVtaS5yZWYoe30pO1xuICBjb25zdCB0aW1lb3V0SWQgPSB2dWVEZW1pLnJlZigpO1xuICBjb25zdCB3b3JrZXJUZXJtaW5hdGUgPSAoc3RhdHVzID0gXCJQRU5ESU5HXCIpID0+IHtcbiAgICBpZiAod29ya2VyLnZhbHVlICYmIHdvcmtlci52YWx1ZS5fdXJsICYmIHdpbmRvdykge1xuICAgICAgd29ya2VyLnZhbHVlLnRlcm1pbmF0ZSgpO1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh3b3JrZXIudmFsdWUuX3VybCk7XG4gICAgICBwcm9taXNlLnZhbHVlID0ge307XG4gICAgICB3b3JrZXIudmFsdWUgPSB2b2lkIDA7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZC52YWx1ZSk7XG4gICAgICB3b3JrZXJTdGF0dXMudmFsdWUgPSBzdGF0dXM7XG4gICAgfVxuICB9O1xuICB3b3JrZXJUZXJtaW5hdGUoKTtcbiAgc2hhcmVkLnRyeU9uU2NvcGVEaXNwb3NlKHdvcmtlclRlcm1pbmF0ZSk7XG4gIGNvbnN0IGdlbmVyYXRlV29ya2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IGJsb2JVcmwgPSBjcmVhdGVXb3JrZXJCbG9iVXJsKGZuLCBkZXBlbmRlbmNpZXMpO1xuICAgIGNvbnN0IG5ld1dvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG4gICAgbmV3V29ya2VyLl91cmwgPSBibG9iVXJsO1xuICAgIG5ld1dvcmtlci5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgeyByZXNvbHZlID0gKCkgPT4ge1xuICAgICAgfSwgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgfSB9ID0gcHJvbWlzZS52YWx1ZTtcbiAgICAgIGNvbnN0IFtzdGF0dXMsIHJlc3VsdF0gPSBlLmRhdGE7XG4gICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlIFwiU1VDQ0VTU1wiOlxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB3b3JrZXJUZXJtaW5hdGUoc3RhdHVzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWplY3QocmVzdWx0KTtcbiAgICAgICAgICB3b3JrZXJUZXJtaW5hdGUoXCJFUlJPUlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIG5ld1dvcmtlci5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgfSB9ID0gcHJvbWlzZS52YWx1ZTtcbiAgICAgIHJlamVjdChlKTtcbiAgICAgIHdvcmtlclRlcm1pbmF0ZShcIkVSUk9SXCIpO1xuICAgIH07XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXRJZC52YWx1ZSA9IHNldFRpbWVvdXQoKCkgPT4gd29ya2VyVGVybWluYXRlKFwiVElNRU9VVF9FWFBJUkVEXCIpLCB0aW1lb3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1dvcmtlcjtcbiAgfTtcbiAgY29uc3QgY2FsbFdvcmtlciA9ICguLi5mbkFyZ3MpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBwcm9taXNlLnZhbHVlID0ge1xuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdFxuICAgIH07XG4gICAgd29ya2VyLnZhbHVlICYmIHdvcmtlci52YWx1ZS5wb3N0TWVzc2FnZShbWy4uLmZuQXJnc11dKTtcbiAgICB3b3JrZXJTdGF0dXMudmFsdWUgPSBcIlJVTk5JTkdcIjtcbiAgfSk7XG4gIGNvbnN0IHdvcmtlckZuID0gKC4uLmZuQXJncykgPT4ge1xuICAgIGlmICh3b3JrZXJTdGF0dXMudmFsdWUgPT09IFwiUlVOTklOR1wiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW3VzZVdlYldvcmtlckZuXSBZb3UgY2FuIG9ubHkgcnVuIG9uZSBpbnN0YW5jZSBvZiB0aGUgd29ya2VyIGF0IGEgdGltZS5cIik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gICAgd29ya2VyLnZhbHVlID0gZ2VuZXJhdGVXb3JrZXIoKTtcbiAgICByZXR1cm4gY2FsbFdvcmtlciguLi5mbkFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHdvcmtlckZuLFxuICAgIHdvcmtlclN0YXR1cyxcbiAgICB3b3JrZXJUZXJtaW5hdGVcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHVzZVdpbmRvd0ZvY3VzKHsgd2luZG93ID0gZGVmYXVsdFdpbmRvdyB9ID0ge30pIHtcbiAgaWYgKCF3aW5kb3cpXG4gICAgcmV0dXJuIHZ1ZURlbWkucmVmKGZhbHNlKTtcbiAgY29uc3QgZm9jdXNlZCA9IHZ1ZURlbWkucmVmKHdpbmRvdy5kb2N1bWVudC5oYXNGb2N1cygpKTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiYmx1clwiLCAoKSA9PiB7XG4gICAgZm9jdXNlZC52YWx1ZSA9IGZhbHNlO1xuICB9KTtcbiAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csIFwiZm9jdXNcIiwgKCkgPT4ge1xuICAgIGZvY3VzZWQudmFsdWUgPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIGZvY3VzZWQ7XG59XG5cbmZ1bmN0aW9uIHVzZVdpbmRvd1Njcm9sbCh7IHdpbmRvdyA9IGRlZmF1bHRXaW5kb3cgfSA9IHt9KSB7XG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHZ1ZURlbWkucmVmKDApLFxuICAgICAgeTogdnVlRGVtaS5yZWYoMClcbiAgICB9O1xuICB9XG4gIGNvbnN0IHggPSB2dWVEZW1pLnJlZih3aW5kb3cucGFnZVhPZmZzZXQpO1xuICBjb25zdCB5ID0gdnVlRGVtaS5yZWYod2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XG4gICAgeC52YWx1ZSA9IHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICB5LnZhbHVlID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICB9LCB7XG4gICAgY2FwdHVyZTogZmFsc2UsXG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIHsgeCwgeSB9O1xufVxuXG5mdW5jdGlvbiB1c2VXaW5kb3dTaXplKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgd2luZG93ID0gZGVmYXVsdFdpbmRvdyxcbiAgICBpbml0aWFsV2lkdGggPSBJbmZpbml0eSxcbiAgICBpbml0aWFsSGVpZ2h0ID0gSW5maW5pdHksXG4gICAgbGlzdGVuT3JpZW50YXRpb24gPSB0cnVlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB3aWR0aCA9IHZ1ZURlbWkucmVmKGluaXRpYWxXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IHZ1ZURlbWkucmVmKGluaXRpYWxIZWlnaHQpO1xuICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHdpbmRvdykge1xuICAgICAgd2lkdGgudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGhlaWdodC52YWx1ZSA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICB9XG4gIH07XG4gIHVwZGF0ZSgpO1xuICBzaGFyZWQudHJ5T25Nb3VudGVkKHVwZGF0ZSk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdXBkYXRlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIGlmIChsaXN0ZW5PcmllbnRhdGlvbilcbiAgICB1c2VFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgdXBkYXRlLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTtcbn1cblxuZXhwb3J0cy5EZWZhdWx0TWFnaWNLZXlzQWxpYXNNYXAgPSBEZWZhdWx0TWFnaWNLZXlzQWxpYXNNYXA7XG5leHBvcnRzLlN0b3JhZ2VTZXJpYWxpemVycyA9IFN0b3JhZ2VTZXJpYWxpemVycztcbmV4cG9ydHMuVHJhbnNpdGlvblByZXNldHMgPSBUcmFuc2l0aW9uUHJlc2V0cztcbmV4cG9ydHMuYXN5bmNDb21wdXRlZCA9IGNvbXB1dGVkQXN5bmM7XG5leHBvcnRzLmJyZWFrcG9pbnRzQW50RGVzaWduID0gYnJlYWtwb2ludHNBbnREZXNpZ247XG5leHBvcnRzLmJyZWFrcG9pbnRzQm9vdHN0cmFwVjUgPSBicmVha3BvaW50c0Jvb3RzdHJhcFY1O1xuZXhwb3J0cy5icmVha3BvaW50c1F1YXNhciA9IGJyZWFrcG9pbnRzUXVhc2FyO1xuZXhwb3J0cy5icmVha3BvaW50c1NlbWF0aWMgPSBicmVha3BvaW50c1NlbWF0aWM7XG5leHBvcnRzLmJyZWFrcG9pbnRzVGFpbHdpbmQgPSBicmVha3BvaW50c1RhaWx3aW5kO1xuZXhwb3J0cy5icmVha3BvaW50c1Z1ZXRpZnkgPSBicmVha3BvaW50c1Z1ZXRpZnk7XG5leHBvcnRzLmNvbXB1dGVkQXN5bmMgPSBjb21wdXRlZEFzeW5jO1xuZXhwb3J0cy5jb21wdXRlZEluamVjdCA9IGNvbXB1dGVkSW5qZWN0O1xuZXhwb3J0cy5jcmVhdGVGZXRjaCA9IGNyZWF0ZUZldGNoO1xuZXhwb3J0cy5jcmVhdGVVbnJlZkZuID0gY3JlYXRlVW5yZWZGbjtcbmV4cG9ydHMuZGVmYXVsdERvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50O1xuZXhwb3J0cy5kZWZhdWx0TG9jYXRpb24gPSBkZWZhdWx0TG9jYXRpb247XG5leHBvcnRzLmRlZmF1bHROYXZpZ2F0b3IgPSBkZWZhdWx0TmF2aWdhdG9yO1xuZXhwb3J0cy5kZWZhdWx0V2luZG93ID0gZGVmYXVsdFdpbmRvdztcbmV4cG9ydHMuZ2V0U1NSSGFuZGxlciA9IGdldFNTUkhhbmRsZXI7XG5leHBvcnRzLm1hcEdhbWVwYWRUb1hib3gzNjBDb250cm9sbGVyID0gbWFwR2FtZXBhZFRvWGJveDM2MENvbnRyb2xsZXI7XG5leHBvcnRzLm9uQ2xpY2tPdXRzaWRlID0gb25DbGlja091dHNpZGU7XG5leHBvcnRzLm9uS2V5RG93biA9IG9uS2V5RG93bjtcbmV4cG9ydHMub25LZXlQcmVzc2VkID0gb25LZXlQcmVzc2VkO1xuZXhwb3J0cy5vbktleVN0cm9rZSA9IG9uS2V5U3Ryb2tlO1xuZXhwb3J0cy5vbktleVVwID0gb25LZXlVcDtcbmV4cG9ydHMub25Mb25nUHJlc3MgPSBvbkxvbmdQcmVzcztcbmV4cG9ydHMub25TdGFydFR5cGluZyA9IG9uU3RhcnRUeXBpbmc7XG5leHBvcnRzLnNldFNTUkhhbmRsZXIgPSBzZXRTU1JIYW5kbGVyO1xuZXhwb3J0cy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuZXhwb3J0cy51bnJlZkVsZW1lbnQgPSB1bnJlZkVsZW1lbnQ7XG5leHBvcnRzLnVzZUFjdGl2ZUVsZW1lbnQgPSB1c2VBY3RpdmVFbGVtZW50O1xuZXhwb3J0cy51c2VBc3luY1F1ZXVlID0gdXNlQXN5bmNRdWV1ZTtcbmV4cG9ydHMudXNlQXN5bmNTdGF0ZSA9IHVzZUFzeW5jU3RhdGU7XG5leHBvcnRzLnVzZUJhc2U2NCA9IHVzZUJhc2U2NDtcbmV4cG9ydHMudXNlQmF0dGVyeSA9IHVzZUJhdHRlcnk7XG5leHBvcnRzLnVzZUJsdWV0b290aCA9IHVzZUJsdWV0b290aDtcbmV4cG9ydHMudXNlQnJlYWtwb2ludHMgPSB1c2VCcmVha3BvaW50cztcbmV4cG9ydHMudXNlQnJvYWRjYXN0Q2hhbm5lbCA9IHVzZUJyb2FkY2FzdENoYW5uZWw7XG5leHBvcnRzLnVzZUJyb3dzZXJMb2NhdGlvbiA9IHVzZUJyb3dzZXJMb2NhdGlvbjtcbmV4cG9ydHMudXNlQ2FjaGVkID0gdXNlQ2FjaGVkO1xuZXhwb3J0cy51c2VDbGFtcCA9IHVzZUNsYW1wO1xuZXhwb3J0cy51c2VDbGlwYm9hcmQgPSB1c2VDbGlwYm9hcmQ7XG5leHBvcnRzLnVzZUNvbG9yTW9kZSA9IHVzZUNvbG9yTW9kZTtcbmV4cG9ydHMudXNlQ29uZmlybURpYWxvZyA9IHVzZUNvbmZpcm1EaWFsb2c7XG5leHBvcnRzLnVzZUNzc1ZhciA9IHVzZUNzc1ZhcjtcbmV4cG9ydHMudXNlQ3VycmVudEVsZW1lbnQgPSB1c2VDdXJyZW50RWxlbWVudDtcbmV4cG9ydHMudXNlQ3ljbGVMaXN0ID0gdXNlQ3ljbGVMaXN0O1xuZXhwb3J0cy51c2VEYXJrID0gdXNlRGFyaztcbmV4cG9ydHMudXNlRGVib3VuY2VkUmVmSGlzdG9yeSA9IHVzZURlYm91bmNlZFJlZkhpc3Rvcnk7XG5leHBvcnRzLnVzZURldmljZU1vdGlvbiA9IHVzZURldmljZU1vdGlvbjtcbmV4cG9ydHMudXNlRGV2aWNlT3JpZW50YXRpb24gPSB1c2VEZXZpY2VPcmllbnRhdGlvbjtcbmV4cG9ydHMudXNlRGV2aWNlUGl4ZWxSYXRpbyA9IHVzZURldmljZVBpeGVsUmF0aW87XG5leHBvcnRzLnVzZURldmljZXNMaXN0ID0gdXNlRGV2aWNlc0xpc3Q7XG5leHBvcnRzLnVzZURpc3BsYXlNZWRpYSA9IHVzZURpc3BsYXlNZWRpYTtcbmV4cG9ydHMudXNlRG9jdW1lbnRWaXNpYmlsaXR5ID0gdXNlRG9jdW1lbnRWaXNpYmlsaXR5O1xuZXhwb3J0cy51c2VEcmFnZ2FibGUgPSB1c2VEcmFnZ2FibGU7XG5leHBvcnRzLnVzZURyb3Bab25lID0gdXNlRHJvcFpvbmU7XG5leHBvcnRzLnVzZUVsZW1lbnRCb3VuZGluZyA9IHVzZUVsZW1lbnRCb3VuZGluZztcbmV4cG9ydHMudXNlRWxlbWVudEJ5UG9pbnQgPSB1c2VFbGVtZW50QnlQb2ludDtcbmV4cG9ydHMudXNlRWxlbWVudEhvdmVyID0gdXNlRWxlbWVudEhvdmVyO1xuZXhwb3J0cy51c2VFbGVtZW50U2l6ZSA9IHVzZUVsZW1lbnRTaXplO1xuZXhwb3J0cy51c2VFbGVtZW50VmlzaWJpbGl0eSA9IHVzZUVsZW1lbnRWaXNpYmlsaXR5O1xuZXhwb3J0cy51c2VFdmVudEJ1cyA9IHVzZUV2ZW50QnVzO1xuZXhwb3J0cy51c2VFdmVudExpc3RlbmVyID0gdXNlRXZlbnRMaXN0ZW5lcjtcbmV4cG9ydHMudXNlRXZlbnRTb3VyY2UgPSB1c2VFdmVudFNvdXJjZTtcbmV4cG9ydHMudXNlRXllRHJvcHBlciA9IHVzZUV5ZURyb3BwZXI7XG5leHBvcnRzLnVzZUZhdmljb24gPSB1c2VGYXZpY29uO1xuZXhwb3J0cy51c2VGZXRjaCA9IHVzZUZldGNoO1xuZXhwb3J0cy51c2VGaWxlRGlhbG9nID0gdXNlRmlsZURpYWxvZztcbmV4cG9ydHMudXNlRmlsZVN5c3RlbUFjY2VzcyA9IHVzZUZpbGVTeXN0ZW1BY2Nlc3M7XG5leHBvcnRzLnVzZUZvY3VzID0gdXNlRm9jdXM7XG5leHBvcnRzLnVzZUZvY3VzV2l0aGluID0gdXNlRm9jdXNXaXRoaW47XG5leHBvcnRzLnVzZUZwcyA9IHVzZUZwcztcbmV4cG9ydHMudXNlRnVsbHNjcmVlbiA9IHVzZUZ1bGxzY3JlZW47XG5leHBvcnRzLnVzZUdhbWVwYWQgPSB1c2VHYW1lcGFkO1xuZXhwb3J0cy51c2VHZW9sb2NhdGlvbiA9IHVzZUdlb2xvY2F0aW9uO1xuZXhwb3J0cy51c2VJZGxlID0gdXNlSWRsZTtcbmV4cG9ydHMudXNlSW1hZ2UgPSB1c2VJbWFnZTtcbmV4cG9ydHMudXNlSW5maW5pdGVTY3JvbGwgPSB1c2VJbmZpbml0ZVNjcm9sbDtcbmV4cG9ydHMudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbmV4cG9ydHMudXNlS2V5TW9kaWZpZXIgPSB1c2VLZXlNb2RpZmllcjtcbmV4cG9ydHMudXNlTG9jYWxTdG9yYWdlID0gdXNlTG9jYWxTdG9yYWdlO1xuZXhwb3J0cy51c2VNYWdpY0tleXMgPSB1c2VNYWdpY0tleXM7XG5leHBvcnRzLnVzZU1hbnVhbFJlZkhpc3RvcnkgPSB1c2VNYW51YWxSZWZIaXN0b3J5O1xuZXhwb3J0cy51c2VNZWRpYUNvbnRyb2xzID0gdXNlTWVkaWFDb250cm9scztcbmV4cG9ydHMudXNlTWVkaWFRdWVyeSA9IHVzZU1lZGlhUXVlcnk7XG5leHBvcnRzLnVzZU1lbW9pemUgPSB1c2VNZW1vaXplO1xuZXhwb3J0cy51c2VNZW1vcnkgPSB1c2VNZW1vcnk7XG5leHBvcnRzLnVzZU1vdW50ZWQgPSB1c2VNb3VudGVkO1xuZXhwb3J0cy51c2VNb3VzZSA9IHVzZU1vdXNlO1xuZXhwb3J0cy51c2VNb3VzZUluRWxlbWVudCA9IHVzZU1vdXNlSW5FbGVtZW50O1xuZXhwb3J0cy51c2VNb3VzZVByZXNzZWQgPSB1c2VNb3VzZVByZXNzZWQ7XG5leHBvcnRzLnVzZU11dGF0aW9uT2JzZXJ2ZXIgPSB1c2VNdXRhdGlvbk9ic2VydmVyO1xuZXhwb3J0cy51c2VOYXZpZ2F0b3JMYW5ndWFnZSA9IHVzZU5hdmlnYXRvckxhbmd1YWdlO1xuZXhwb3J0cy51c2VOZXR3b3JrID0gdXNlTmV0d29yaztcbmV4cG9ydHMudXNlTm93ID0gdXNlTm93O1xuZXhwb3J0cy51c2VPYmplY3RVcmwgPSB1c2VPYmplY3RVcmw7XG5leHBvcnRzLnVzZU9mZnNldFBhZ2luYXRpb24gPSB1c2VPZmZzZXRQYWdpbmF0aW9uO1xuZXhwb3J0cy51c2VPbmxpbmUgPSB1c2VPbmxpbmU7XG5leHBvcnRzLnVzZVBhZ2VMZWF2ZSA9IHVzZVBhZ2VMZWF2ZTtcbmV4cG9ydHMudXNlUGFyYWxsYXggPSB1c2VQYXJhbGxheDtcbmV4cG9ydHMudXNlUGVybWlzc2lvbiA9IHVzZVBlcm1pc3Npb247XG5leHBvcnRzLnVzZVBvaW50ZXIgPSB1c2VQb2ludGVyO1xuZXhwb3J0cy51c2VQb2ludGVyU3dpcGUgPSB1c2VQb2ludGVyU3dpcGU7XG5leHBvcnRzLnVzZVByZWZlcnJlZENvbG9yU2NoZW1lID0gdXNlUHJlZmVycmVkQ29sb3JTY2hlbWU7XG5leHBvcnRzLnVzZVByZWZlcnJlZERhcmsgPSB1c2VQcmVmZXJyZWREYXJrO1xuZXhwb3J0cy51c2VQcmVmZXJyZWRMYW5ndWFnZXMgPSB1c2VQcmVmZXJyZWRMYW5ndWFnZXM7XG5leHBvcnRzLnVzZVJhZkZuID0gdXNlUmFmRm47XG5leHBvcnRzLnVzZVJlZkhpc3RvcnkgPSB1c2VSZWZIaXN0b3J5O1xuZXhwb3J0cy51c2VSZXNpemVPYnNlcnZlciA9IHVzZVJlc2l6ZU9ic2VydmVyO1xuZXhwb3J0cy51c2VTY3JlZW5PcmllbnRhdGlvbiA9IHVzZVNjcmVlbk9yaWVudGF0aW9uO1xuZXhwb3J0cy51c2VTY3JlZW5TYWZlQXJlYSA9IHVzZVNjcmVlblNhZmVBcmVhO1xuZXhwb3J0cy51c2VTY3JpcHRUYWcgPSB1c2VTY3JpcHRUYWc7XG5leHBvcnRzLnVzZVNjcm9sbCA9IHVzZVNjcm9sbDtcbmV4cG9ydHMudXNlU2Nyb2xsTG9jayA9IHVzZVNjcm9sbExvY2s7XG5leHBvcnRzLnVzZVNlc3Npb25TdG9yYWdlID0gdXNlU2Vzc2lvblN0b3JhZ2U7XG5leHBvcnRzLnVzZVNoYXJlID0gdXNlU2hhcmU7XG5leHBvcnRzLnVzZVNwZWVjaFJlY29nbml0aW9uID0gdXNlU3BlZWNoUmVjb2duaXRpb247XG5leHBvcnRzLnVzZVNwZWVjaFN5bnRoZXNpcyA9IHVzZVNwZWVjaFN5bnRoZXNpcztcbmV4cG9ydHMudXNlU3RlcHBlciA9IHVzZVN0ZXBwZXI7XG5leHBvcnRzLnVzZVN0b3JhZ2UgPSB1c2VTdG9yYWdlO1xuZXhwb3J0cy51c2VTdG9yYWdlQXN5bmMgPSB1c2VTdG9yYWdlQXN5bmM7XG5leHBvcnRzLnVzZVN0eWxlVGFnID0gdXNlU3R5bGVUYWc7XG5leHBvcnRzLnVzZVN3aXBlID0gdXNlU3dpcGU7XG5leHBvcnRzLnVzZVRlbXBsYXRlUmVmc0xpc3QgPSB1c2VUZW1wbGF0ZVJlZnNMaXN0O1xuZXhwb3J0cy51c2VUZXh0U2VsZWN0aW9uID0gdXNlVGV4dFNlbGVjdGlvbjtcbmV4cG9ydHMudXNlVGV4dGFyZWFBdXRvc2l6ZSA9IHVzZVRleHRhcmVhQXV0b3NpemU7XG5leHBvcnRzLnVzZVRocm90dGxlZFJlZkhpc3RvcnkgPSB1c2VUaHJvdHRsZWRSZWZIaXN0b3J5O1xuZXhwb3J0cy51c2VUaW1lQWdvID0gdXNlVGltZUFnbztcbmV4cG9ydHMudXNlVGltZW91dFBvbGwgPSB1c2VUaW1lb3V0UG9sbDtcbmV4cG9ydHMudXNlVGltZXN0YW1wID0gdXNlVGltZXN0YW1wO1xuZXhwb3J0cy51c2VUaXRsZSA9IHVzZVRpdGxlO1xuZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gdXNlVHJhbnNpdGlvbjtcbmV4cG9ydHMudXNlVXJsU2VhcmNoUGFyYW1zID0gdXNlVXJsU2VhcmNoUGFyYW1zO1xuZXhwb3J0cy51c2VVc2VyTWVkaWEgPSB1c2VVc2VyTWVkaWE7XG5leHBvcnRzLnVzZVZNb2RlbCA9IHVzZVZNb2RlbDtcbmV4cG9ydHMudXNlVk1vZGVscyA9IHVzZVZNb2RlbHM7XG5leHBvcnRzLnVzZVZpYnJhdGUgPSB1c2VWaWJyYXRlO1xuZXhwb3J0cy51c2VWaXJ0dWFsTGlzdCA9IHVzZVZpcnR1YWxMaXN0O1xuZXhwb3J0cy51c2VXYWtlTG9jayA9IHVzZVdha2VMb2NrO1xuZXhwb3J0cy51c2VXZWJOb3RpZmljYXRpb24gPSB1c2VXZWJOb3RpZmljYXRpb247XG5leHBvcnRzLnVzZVdlYlNvY2tldCA9IHVzZVdlYlNvY2tldDtcbmV4cG9ydHMudXNlV2ViV29ya2VyID0gdXNlV2ViV29ya2VyO1xuZXhwb3J0cy51c2VXZWJXb3JrZXJGbiA9IHVzZVdlYldvcmtlckZuO1xuZXhwb3J0cy51c2VXaW5kb3dGb2N1cyA9IHVzZVdpbmRvd0ZvY3VzO1xuZXhwb3J0cy51c2VXaW5kb3dTY3JvbGwgPSB1c2VXaW5kb3dTY3JvbGw7XG5leHBvcnRzLnVzZVdpbmRvd1NpemUgPSB1c2VXaW5kb3dTaXplO1xuT2JqZWN0LmtleXMoc2hhcmVkKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gIGlmIChrICE9PSAnZGVmYXVsdCcgJiYgIWV4cG9ydHMuaGFzT3duUHJvcGVydHkoaykpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlZFtrXTsgfVxuICB9KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgdnVlRGVtaSA9IHJlcXVpcmUoJ3Z1ZS1kZW1pJyk7XG5cbnZhciBfX2RlZlByb3AkOSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzJDYgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcbnZhciBfX2dldE93blByb3BEZXNjcyQ2ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyRiID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkYiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJGIgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCQ5ID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcCQ5KG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyQ5ID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AkYi5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wJDkoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzJGIpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzJGIoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0kYi5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AkOShhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzJDYgPSAoYSwgYikgPT4gX19kZWZQcm9wcyQ2KGEsIF9fZ2V0T3duUHJvcERlc2NzJDYoYikpO1xuZnVuY3Rpb24gY29tcHV0ZWRFYWdlcihmbiwgb3B0aW9ucykge1xuICB2YXIgX2E7XG4gIGNvbnN0IHJlc3VsdCA9IHZ1ZURlbWkuc2hhbGxvd1JlZigpO1xuICB2dWVEZW1pLndhdGNoRWZmZWN0KCgpID0+IHtcbiAgICByZXN1bHQudmFsdWUgPSBmbigpO1xuICB9LCBfX3NwcmVhZFByb3BzJDYoX19zcHJlYWRWYWx1ZXMkOSh7fSwgb3B0aW9ucyksIHtcbiAgICBmbHVzaDogKF9hID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5mbHVzaCkgIT0gbnVsbCA/IF9hIDogXCJzeW5jXCJcbiAgfSkpO1xuICByZXR1cm4gdnVlRGVtaS5yZWFkb25seShyZXN1bHQpO1xufVxuXG52YXIgX2E7XG5jb25zdCBpc0NsaWVudCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBpc0RlZiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgIT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBhc3NlcnQgPSAoY29uZGl0aW9uLCAuLi5pbmZvcykgPT4ge1xuICBpZiAoIWNvbmRpdGlvbilcbiAgICBjb25zb2xlLndhcm4oLi4uaW5mb3MpO1xufTtcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IGlzQm9vbGVhbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcbmNvbnN0IGlzTnVtYmVyID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIjtcbmNvbnN0IGlzU3RyaW5nID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIjtcbmNvbnN0IGlzT2JqZWN0ID0gKHZhbCkgPT4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xuY29uc3QgaXNXaW5kb3cgPSAodmFsKSA9PiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIjtcbmNvbnN0IG5vdyA9ICgpID0+IERhdGUubm93KCk7XG5jb25zdCB0aW1lc3RhbXAgPSAoKSA9PiArRGF0ZS5ub3coKTtcbmNvbnN0IGNsYW1wID0gKG4sIG1pbiwgbWF4KSA9PiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5jb25zdCByYW5kID0gKG1pbiwgbWF4KSA9PiB7XG4gIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xufTtcbmNvbnN0IGlzSU9TID0gaXNDbGllbnQgJiYgKChfYSA9IHdpbmRvdyA9PSBudWxsID8gdm9pZCAwIDogd2luZG93Lm5hdmlnYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnVzZXJBZ2VudCkgJiYgL2lQKGFkfGhvbmV8b2QpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyV3JhcHBlcihmaWx0ZXIsIGZuKSB7XG4gIGZ1bmN0aW9uIHdyYXBwZXIoLi4uYXJncykge1xuICAgIGZpbHRlcigoKSA9PiBmbi5hcHBseSh0aGlzLCBhcmdzKSwgeyBmbiwgdGhpc0FyZzogdGhpcywgYXJncyB9KTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cbmNvbnN0IGJ5cGFzc0ZpbHRlciA9IChpbnZva2UpID0+IHtcbiAgcmV0dXJuIGludm9rZSgpO1xufTtcbmZ1bmN0aW9uIGRlYm91bmNlRmlsdGVyKG1zLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHRpbWVyO1xuICBsZXQgbWF4VGltZXI7XG4gIGNvbnN0IGZpbHRlciA9IChpbnZva2UpID0+IHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHZ1ZURlbWkudW5yZWYobXMpO1xuICAgIGNvbnN0IG1heER1cmF0aW9uID0gdnVlRGVtaS51bnJlZihvcHRpb25zLm1heFdhaXQpO1xuICAgIGlmICh0aW1lcilcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgaWYgKGR1cmF0aW9uIDw9IDAgfHwgbWF4RHVyYXRpb24gIT09IHZvaWQgMCAmJiBtYXhEdXJhdGlvbiA8PSAwKSB7XG4gICAgICBpZiAobWF4VGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KG1heFRpbWVyKTtcbiAgICAgICAgbWF4VGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZSgpO1xuICAgIH1cbiAgICBpZiAobWF4RHVyYXRpb24gJiYgIW1heFRpbWVyKSB7XG4gICAgICBtYXhUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGltZXIpXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgbWF4VGltZXIgPSBudWxsO1xuICAgICAgICBpbnZva2UoKTtcbiAgICAgIH0sIG1heER1cmF0aW9uKTtcbiAgICB9XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChtYXhUaW1lcilcbiAgICAgICAgY2xlYXJUaW1lb3V0KG1heFRpbWVyKTtcbiAgICAgIG1heFRpbWVyID0gbnVsbDtcbiAgICAgIGludm9rZSgpO1xuICAgIH0sIGR1cmF0aW9uKTtcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cbmZ1bmN0aW9uIHRocm90dGxlRmlsdGVyKG1zLCB0cmFpbGluZyA9IHRydWUsIGxlYWRpbmcgPSB0cnVlKSB7XG4gIGxldCBsYXN0RXhlYyA9IDA7XG4gIGxldCB0aW1lcjtcbiAgbGV0IGlzTGVhZGluZyA9IHRydWU7XG4gIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gdm9pZCAwO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZmlsdGVyID0gKGludm9rZSkgPT4ge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gdnVlRGVtaS51bnJlZihtcyk7XG4gICAgY29uc3QgZWxhcHNlZCA9IERhdGUubm93KCkgLSBsYXN0RXhlYztcbiAgICBjbGVhcigpO1xuICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgICBsYXN0RXhlYyA9IERhdGUubm93KCk7XG4gICAgICByZXR1cm4gaW52b2tlKCk7XG4gICAgfVxuICAgIGlmIChlbGFwc2VkID4gZHVyYXRpb24gJiYgKGxlYWRpbmcgfHwgIWlzTGVhZGluZykpIHtcbiAgICAgIGxhc3RFeGVjID0gRGF0ZS5ub3coKTtcbiAgICAgIGludm9rZSgpO1xuICAgIH0gZWxzZSBpZiAodHJhaWxpbmcpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGxhc3RFeGVjID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaXNMZWFkaW5nID0gdHJ1ZTtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgICAgaW52b2tlKCk7XG4gICAgICB9LCBkdXJhdGlvbik7XG4gICAgfVxuICAgIGlmICghbGVhZGluZyAmJiAhdGltZXIpXG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gaXNMZWFkaW5nID0gdHJ1ZSwgZHVyYXRpb24pO1xuICAgIGlzTGVhZGluZyA9IGZhbHNlO1xuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuZnVuY3Rpb24gcGF1c2FibGVGaWx0ZXIoZXh0ZW5kRmlsdGVyID0gYnlwYXNzRmlsdGVyKSB7XG4gIGNvbnN0IGlzQWN0aXZlID0gdnVlRGVtaS5yZWYodHJ1ZSk7XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIGlzQWN0aXZlLnZhbHVlID0gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gcmVzdW1lKCkge1xuICAgIGlzQWN0aXZlLnZhbHVlID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBldmVudEZpbHRlciA9ICguLi5hcmdzKSA9PiB7XG4gICAgaWYgKGlzQWN0aXZlLnZhbHVlKVxuICAgICAgZXh0ZW5kRmlsdGVyKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4geyBpc0FjdGl2ZSwgcGF1c2UsIHJlc3VtZSwgZXZlbnRGaWx0ZXIgfTtcbn1cblxuZnVuY3Rpb24gX19vbmx5VnVlMyhuYW1lID0gXCJ0aGlzIGZ1bmN0aW9uXCIpIHtcbiAgaWYgKHZ1ZURlbWkuaXNWdWUzKVxuICAgIHJldHVybjtcbiAgdGhyb3cgbmV3IEVycm9yKGBbVnVlVXNlXSAke25hbWV9IGlzIG9ubHkgd29ya3Mgb24gVnVlIDMuYCk7XG59XG5jb25zdCBkaXJlY3RpdmVIb29rcyA9IHtcbiAgbW91bnRlZDogdnVlRGVtaS5pc1Z1ZTMgPyBcIm1vdW50ZWRcIiA6IFwiaW5zZXJ0ZWRcIixcbiAgdXBkYXRlZDogdnVlRGVtaS5pc1Z1ZTMgPyBcInVwZGF0ZWRcIiA6IFwiY29tcG9uZW50VXBkYXRlZFwiLFxuICB1bm1vdW50ZWQ6IHZ1ZURlbWkuaXNWdWUzID8gXCJ1bm1vdW50ZWRcIiA6IFwidW5iaW5kXCJcbn07XG5cbmZ1bmN0aW9uIHByb21pc2VUaW1lb3V0KG1zLCB0aHJvd09uVGltZW91dCA9IGZhbHNlLCByZWFzb24gPSBcIlRpbWVvdXRcIikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0aHJvd09uVGltZW91dClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KHJlYXNvbiksIG1zKTtcbiAgICBlbHNlXG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpZGVudGl0eShhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNpbmdsZXRvblByb21pc2UoZm4pIHtcbiAgbGV0IF9wcm9taXNlO1xuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIGlmICghX3Byb21pc2UpXG4gICAgICBfcHJvbWlzZSA9IGZuKCk7XG4gICAgcmV0dXJuIF9wcm9taXNlO1xuICB9XG4gIHdyYXBwZXIucmVzZXQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgX3ByZXYgPSBfcHJvbWlzZTtcbiAgICBfcHJvbWlzZSA9IHZvaWQgMDtcbiAgICBpZiAoX3ByZXYpXG4gICAgICBhd2FpdCBfcHJldjtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5mdW5jdGlvbiBpbnZva2UoZm4pIHtcbiAgcmV0dXJuIGZuKCk7XG59XG5mdW5jdGlvbiBjb250YWluc1Byb3Aob2JqLCAuLi5wcm9wcykge1xuICByZXR1cm4gcHJvcHMuc29tZSgoaykgPT4gayBpbiBvYmopO1xufVxuZnVuY3Rpb24gaW5jcmVhc2VXaXRoVW5pdCh0YXJnZXQsIGRlbHRhKSB7XG4gIHZhciBfYTtcbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIHRhcmdldCArIGRlbHRhO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EgPSB0YXJnZXQubWF0Y2goL14tP1swLTldK1xcLj9bMC05XSovKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hWzBdKSB8fCBcIlwiO1xuICBjb25zdCB1bml0ID0gdGFyZ2V0LnNsaWNlKHZhbHVlLmxlbmd0aCk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQodmFsdWUpICsgZGVsdGE7XG4gIGlmIChOdW1iZXIuaXNOYU4ocmVzdWx0KSlcbiAgICByZXR1cm4gdGFyZ2V0O1xuICByZXR1cm4gcmVzdWx0ICsgdW5pdDtcbn1cbmZ1bmN0aW9uIG9iamVjdFBpY2sob2JqLCBrZXlzLCBvbWl0VW5kZWZpbmVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKChuLCBrKSA9PiB7XG4gICAgaWYgKGsgaW4gb2JqKSB7XG4gICAgICBpZiAoIW9taXRVbmRlZmluZWQgfHwgb2JqW2tdICE9PSB2b2lkIDApXG4gICAgICAgIG5ba10gPSBvYmpba107XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVkV2l0aENvbnRyb2woc291cmNlLCBmbikge1xuICBsZXQgdiA9IHZvaWQgMDtcbiAgbGV0IHRyYWNrO1xuICBsZXQgdHJpZ2dlcjtcbiAgY29uc3QgZGlydHkgPSB2dWVEZW1pLnJlZih0cnVlKTtcbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGRpcnR5LnZhbHVlID0gdHJ1ZTtcbiAgICB0cmlnZ2VyKCk7XG4gIH07XG4gIHZ1ZURlbWkud2F0Y2goc291cmNlLCB1cGRhdGUsIHsgZmx1c2g6IFwic3luY1wiIH0pO1xuICBjb25zdCBnZXQgPSBpc0Z1bmN0aW9uKGZuKSA/IGZuIDogZm4uZ2V0O1xuICBjb25zdCBzZXQgPSBpc0Z1bmN0aW9uKGZuKSA/IHZvaWQgMCA6IGZuLnNldDtcbiAgY29uc3QgcmVzdWx0ID0gdnVlRGVtaS5jdXN0b21SZWYoKF90cmFjaywgX3RyaWdnZXIpID0+IHtcbiAgICB0cmFjayA9IF90cmFjaztcbiAgICB0cmlnZ2VyID0gX3RyaWdnZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKGRpcnR5LnZhbHVlKSB7XG4gICAgICAgICAgdiA9IGdldCgpO1xuICAgICAgICAgIGRpcnR5LnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2soKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9LFxuICAgICAgc2V0KHYyKSB7XG4gICAgICAgIHNldCA9PSBudWxsID8gdm9pZCAwIDogc2V0KHYyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUocmVzdWx0KSlcbiAgICByZXN1bHQudHJpZ2dlciA9IHVwZGF0ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRIb29rKCkge1xuICBjb25zdCBmbnMgPSBbXTtcbiAgY29uc3Qgb2ZmID0gKGZuKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBmbnMuaW5kZXhPZihmbik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgIGZucy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuICBjb25zdCBvbiA9IChmbikgPT4ge1xuICAgIGZucy5wdXNoKGZuKTtcbiAgICByZXR1cm4ge1xuICAgICAgb2ZmOiAoKSA9PiBvZmYoZm4pXG4gICAgfTtcbiAgfTtcbiAgY29uc3QgdHJpZ2dlciA9IChwYXJhbSkgPT4ge1xuICAgIGZucy5mb3JFYWNoKChmbikgPT4gZm4ocGFyYW0pKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBvbixcbiAgICBvZmYsXG4gICAgdHJpZ2dlclxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxTdGF0ZShzdGF0ZUZhY3RvcnkpIHtcbiAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGxldCBzdGF0ZTtcbiAgY29uc3Qgc2NvcGUgPSB2dWVEZW1pLmVmZmVjdFNjb3BlKHRydWUpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHN0YXRlID0gc2NvcGUucnVuKHN0YXRlRmFjdG9yeSk7XG4gICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5qZWN0aW9uU3RhdGUoY29tcG9zYWJsZSkge1xuICBjb25zdCBrZXkgPSBTeW1ib2woXCJJbmplY3Rpb25TdGF0ZVwiKTtcbiAgY29uc3QgdXNlUHJvdmlkaW5nU3RhdGUgPSAoLi4uYXJncykgPT4ge1xuICAgIHZ1ZURlbWkucHJvdmlkZShrZXksIGNvbXBvc2FibGUoLi4uYXJncykpO1xuICB9O1xuICBjb25zdCB1c2VJbmplY3RlZFN0YXRlID0gKCkgPT4gdnVlRGVtaS5pbmplY3Qoa2V5KTtcbiAgcmV0dXJuIFt1c2VQcm92aWRpbmdTdGF0ZSwgdXNlSW5qZWN0ZWRTdGF0ZV07XG59XG5cbmZ1bmN0aW9uIHRyeU9uU2NvcGVEaXNwb3NlKGZuKSB7XG4gIGlmICh2dWVEZW1pLmdldEN1cnJlbnRTY29wZSgpKSB7XG4gICAgdnVlRGVtaS5vblNjb3BlRGlzcG9zZShmbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaGFyZWRDb21wb3NhYmxlKGNvbXBvc2FibGUpIHtcbiAgbGV0IHN1YnNjcmliZXJzID0gMDtcbiAgbGV0IHN0YXRlO1xuICBsZXQgc2NvcGU7XG4gIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgc3Vic2NyaWJlcnMgLT0gMTtcbiAgICBpZiAoc2NvcGUgJiYgc3Vic2NyaWJlcnMgPD0gMCkge1xuICAgICAgc2NvcGUuc3RvcCgpO1xuICAgICAgc3RhdGUgPSB2b2lkIDA7XG4gICAgICBzY29wZSA9IHZvaWQgMDtcbiAgICB9XG4gIH07XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHN1YnNjcmliZXJzICs9IDE7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgc2NvcGUgPSB2dWVEZW1pLmVmZmVjdFNjb3BlKHRydWUpO1xuICAgICAgc3RhdGUgPSBzY29wZS5ydW4oKCkgPT4gY29tcG9zYWJsZSguLi5hcmdzKSk7XG4gICAgfVxuICAgIHRyeU9uU2NvcGVEaXNwb3NlKGRpc3Bvc2UpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kUmVmKHJlZiwgZXh0ZW5kLCB7IGVudW1lcmFibGUgPSBmYWxzZSwgdW53cmFwID0gdHJ1ZSB9ID0ge30pIHtcbiAgX19vbmx5VnVlMygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHRlbmQpKSB7XG4gICAgaWYgKGtleSA9PT0gXCJ2YWx1ZVwiKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKHZ1ZURlbWkuaXNSZWYodmFsdWUpICYmIHVud3JhcCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZiwga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgdmFsdWUudmFsdWUgPSB2O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZiwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiBnZXQob2JqLCBrZXkpIHtcbiAgaWYgKGtleSA9PSBudWxsKVxuICAgIHJldHVybiB2dWVEZW1pLnVucmVmKG9iaik7XG4gIHJldHVybiB2dWVEZW1pLnVucmVmKG9iailba2V5XTtcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHYpIHtcbiAgcmV0dXJuIHZ1ZURlbWkudW5yZWYodikgIT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gbG9naWNBbmQoLi4uYXJncykge1xuICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBhcmdzLmV2ZXJ5KChpKSA9PiB2dWVEZW1pLnVucmVmKGkpKSk7XG59XG5cbmZ1bmN0aW9uIGxvZ2ljTm90KHYpIHtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gIXZ1ZURlbWkudW5yZWYodikpO1xufVxuXG5mdW5jdGlvbiBsb2dpY09yKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIHZ1ZURlbWkuY29tcHV0ZWQoKCkgPT4gYXJncy5zb21lKChpKSA9PiB2dWVEZW1pLnVucmVmKGkpKSk7XG59XG5cbnZhciBfX2RlZlByb3AkOCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzJGEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCRhID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kYSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDggPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDgob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDggPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCRhLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkOChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkYSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkYShiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSRhLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ4KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuZnVuY3Rpb24gbWFrZURlc3RydWN0dXJhYmxlKG9iaiwgYXJyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY29uc3QgY2xvbmUgPSBfX3NwcmVhZFZhbHVlcyQ4KHt9LCBvYmopO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZSwgU3ltYm9sLml0ZXJhdG9yLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlKCkge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5leHQ6ICgpID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogYXJyW2luZGV4KytdLFxuICAgICAgICAgICAgZG9uZTogaW5kZXggPiBhcnIubGVuZ3RoXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oWy4uLmFycl0sIG9iaik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhY3RpZnkoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiBmbi5hcHBseSh0aGlzLCBhcmdzLm1hcCgoaSkgPT4gdnVlRGVtaS51bnJlZihpKSkpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVhY3RpZnlPYmplY3Qob2JqLCBvcHRpb25zT3JLZXlzID0ge30pIHtcbiAgbGV0IGtleXMgPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uc09yS2V5cykpIHtcbiAgICBrZXlzID0gb3B0aW9uc09yS2V5cztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IGluY2x1ZGVPd25Qcm9wZXJ0aWVzID0gdHJ1ZSB9ID0gb3B0aW9uc09yS2V5cztcbiAgICBrZXlzLnB1c2goLi4uT2JqZWN0LmtleXMob2JqKSk7XG4gICAgaWYgKGluY2x1ZGVPd25Qcm9wZXJ0aWVzKVxuICAgICAga2V5cy5wdXNoKC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikpO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoKGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgcmV0dXJuIFtcbiAgICAgIGtleSxcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVhY3RpZnkodmFsdWUuYmluZChvYmopKSA6IHZhbHVlXG4gICAgXTtcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiB0b1JlYWN0aXZlKG9iamVjdFJlZikge1xuICBpZiAoIXZ1ZURlbWkuaXNSZWYob2JqZWN0UmVmKSlcbiAgICByZXR1cm4gdnVlRGVtaS5yZWFjdGl2ZShvYmplY3RSZWYpO1xuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh7fSwge1xuICAgIGdldChfLCBwLCByZWNlaXZlcikge1xuICAgICAgcmV0dXJuIHZ1ZURlbWkudW5yZWYoUmVmbGVjdC5nZXQob2JqZWN0UmVmLnZhbHVlLCBwLCByZWNlaXZlcikpO1xuICAgIH0sXG4gICAgc2V0KF8sIHAsIHZhbHVlKSB7XG4gICAgICBpZiAodnVlRGVtaS5pc1JlZihvYmplY3RSZWYudmFsdWVbcF0pICYmICF2dWVEZW1pLmlzUmVmKHZhbHVlKSlcbiAgICAgICAgb2JqZWN0UmVmLnZhbHVlW3BdLnZhbHVlID0gdmFsdWU7XG4gICAgICBlbHNlXG4gICAgICAgIG9iamVjdFJlZi52YWx1ZVtwXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfLCBwKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShvYmplY3RSZWYudmFsdWUsIHApO1xuICAgIH0sXG4gICAgaGFzKF8sIHApIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmhhcyhvYmplY3RSZWYudmFsdWUsIHApO1xuICAgIH0sXG4gICAgb3duS2V5cygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3RSZWYudmFsdWUpO1xuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2dWVEZW1pLnJlYWN0aXZlKHByb3h5KTtcbn1cblxuZnVuY3Rpb24gcmVhY3RpdmVDb21wdXRlZChmbikge1xuICByZXR1cm4gdG9SZWFjdGl2ZSh2dWVEZW1pLmNvbXB1dGVkKGZuKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWN0aXZlT21pdChvYmosIC4uLmtleXMpIHtcbiAgY29uc3QgZmxhdEtleXMgPSBrZXlzLmZsYXQoKTtcbiAgcmV0dXJuIHJlYWN0aXZlQ29tcHV0ZWQoKCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZ1ZURlbWkudG9SZWZzKG9iaikpLmZpbHRlcigoZSkgPT4gIWZsYXRLZXlzLmluY2x1ZGVzKGVbMF0pKSkpO1xufVxuXG5mdW5jdGlvbiByZWFjdGl2ZVBpY2sob2JqLCAuLi5rZXlzKSB7XG4gIGNvbnN0IGZsYXRLZXlzID0ga2V5cy5mbGF0KCk7XG4gIHJldHVybiB2dWVEZW1pLnJlYWN0aXZlKE9iamVjdC5mcm9tRW50cmllcyhmbGF0S2V5cy5tYXAoKGspID0+IFtrLCB2dWVEZW1pLnRvUmVmKG9iaiwgayldKSkpO1xufVxuXG5mdW5jdGlvbiByZWZBdXRvUmVzZXQoZGVmYXVsdFZhbHVlLCBhZnRlck1zID0gMWU0KSB7XG4gIHJldHVybiB2dWVEZW1pLmN1c3RvbVJlZigodHJhY2ssIHRyaWdnZXIpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgbGV0IHRpbWVyO1xuICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdHJpZ2dlcigpO1xuICAgIH0sIHZ1ZURlbWkudW5yZWYoYWZ0ZXJNcykpO1xuICAgIHRyeU9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgdHJhY2soKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldChuZXdWYWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB0cmlnZ2VyKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gcmVzZXRBZnRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VEZWJvdW5jZUZuKGZuLCBtcyA9IDIwMCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVGaWx0ZXJXcmFwcGVyKGRlYm91bmNlRmlsdGVyKG1zLCBvcHRpb25zKSwgZm4pO1xufVxuXG5mdW5jdGlvbiByZWZEZWJvdW5jZWQodmFsdWUsIG1zID0gMjAwLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKG1zIDw9IDApXG4gICAgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBkZWJvdW5jZWQgPSB2dWVEZW1pLnJlZih2YWx1ZS52YWx1ZSk7XG4gIGNvbnN0IHVwZGF0ZXIgPSB1c2VEZWJvdW5jZUZuKCgpID0+IHtcbiAgICBkZWJvdW5jZWQudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgfSwgbXMsIG9wdGlvbnMpO1xuICB2dWVEZW1pLndhdGNoKHZhbHVlLCAoKSA9PiB1cGRhdGVyKCkpO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5mdW5jdGlvbiByZWZEZWZhdWx0KHNvdXJjZSwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKHtcbiAgICBnZXQoKSB7XG4gICAgICB2YXIgX2E7XG4gICAgICByZXR1cm4gKF9hID0gc291cmNlLnZhbHVlKSAhPSBudWxsID8gX2EgOiBkZWZhdWx0VmFsdWU7XG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHNvdXJjZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZVRocm90dGxlRm4oZm4sIG1zID0gMjAwLCB0cmFpbGluZyA9IHRydWUsIGxlYWRpbmcgPSB0cnVlKSB7XG4gIHJldHVybiBjcmVhdGVGaWx0ZXJXcmFwcGVyKHRocm90dGxlRmlsdGVyKG1zLCB0cmFpbGluZywgbGVhZGluZyksIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVmVGhyb3R0bGVkKHZhbHVlLCBkZWxheSA9IDIwMCwgdHJhaWxpbmcgPSB0cnVlLCBsZWFkaW5nID0gdHJ1ZSkge1xuICBpZiAoZGVsYXkgPD0gMClcbiAgICByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHRocm90dGxlZCA9IHZ1ZURlbWkucmVmKHZhbHVlLnZhbHVlKTtcbiAgY29uc3QgdXBkYXRlciA9IHVzZVRocm90dGxlRm4oKCkgPT4ge1xuICAgIHRocm90dGxlZC52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICB9LCBkZWxheSwgdHJhaWxpbmcsIGxlYWRpbmcpO1xuICB2dWVEZW1pLndhdGNoKHZhbHVlLCAoKSA9PiB1cGRhdGVyKCkpO1xuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuXG5mdW5jdGlvbiByZWZXaXRoQ29udHJvbChpbml0aWFsLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvdXJjZSA9IGluaXRpYWw7XG4gIGxldCB0cmFjaztcbiAgbGV0IHRyaWdnZXI7XG4gIGNvbnN0IHJlZiA9IHZ1ZURlbWkuY3VzdG9tUmVmKChfdHJhY2ssIF90cmlnZ2VyKSA9PiB7XG4gICAgdHJhY2sgPSBfdHJhY2s7XG4gICAgdHJpZ2dlciA9IF90cmlnZ2VyO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgIH0sXG4gICAgICBzZXQodikge1xuICAgICAgICBzZXQodik7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG4gIGZ1bmN0aW9uIGdldCh0cmFja2luZyA9IHRydWUpIHtcbiAgICBpZiAodHJhY2tpbmcpXG4gICAgICB0cmFjaygpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgZnVuY3Rpb24gc2V0KHZhbHVlLCB0cmlnZ2VyaW5nID0gdHJ1ZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKHZhbHVlID09PSBzb3VyY2UpXG4gICAgICByZXR1cm47XG4gICAgY29uc3Qgb2xkID0gc291cmNlO1xuICAgIGlmICgoKF9hID0gb3B0aW9ucy5vbkJlZm9yZUNoYW5nZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgdmFsdWUsIG9sZCkpID09PSBmYWxzZSlcbiAgICAgIHJldHVybjtcbiAgICBzb3VyY2UgPSB2YWx1ZTtcbiAgICAoX2IgPSBvcHRpb25zLm9uQ2hhbmdlZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucywgdmFsdWUsIG9sZCk7XG4gICAgaWYgKHRyaWdnZXJpbmcpXG4gICAgICB0cmlnZ2VyKCk7XG4gIH1cbiAgY29uc3QgdW50cmFja2VkR2V0ID0gKCkgPT4gZ2V0KGZhbHNlKTtcbiAgY29uc3Qgc2lsZW50U2V0ID0gKHYpID0+IHNldCh2LCBmYWxzZSk7XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiBnZXQoZmFsc2UpO1xuICBjb25zdCBsYXkgPSAodikgPT4gc2V0KHYsIGZhbHNlKTtcbiAgcmV0dXJuIGV4dGVuZFJlZihyZWYsIHtcbiAgICBnZXQsXG4gICAgc2V0LFxuICAgIHVudHJhY2tlZEdldCxcbiAgICBzaWxlbnRTZXQsXG4gICAgcGVlayxcbiAgICBsYXlcbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufVxuY29uc3QgY29udHJvbGxlZFJlZiA9IHJlZldpdGhDb250cm9sO1xuXG5mdW5jdGlvbiByZXNvbHZlUmVmKHIpIHtcbiAgcmV0dXJuIHR5cGVvZiByID09PSBcImZ1bmN0aW9uXCIgPyB2dWVEZW1pLmNvbXB1dGVkKHIpIDogdnVlRGVtaS5yZWYocik7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVVbnJlZihyKSB7XG4gIHJldHVybiB0eXBlb2YgciA9PT0gXCJmdW5jdGlvblwiID8gcigpIDogdnVlRGVtaS51bnJlZihyKTtcbn1cblxuZnVuY3Rpb24gc2V0KC4uLmFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgW3JlZiwgdmFsdWVdID0gYXJncztcbiAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICBpZiAodnVlRGVtaS5pc1Z1ZTIpIHtcbiAgICAgIHZ1ZURlbWkuc2V0KC4uLmFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBbdGFyZ2V0LCBrZXksIHZhbHVlXSA9IGFyZ3M7XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzeW5jUmVmKGxlZnQsIHJpZ2h0LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGZsdXNoID0gXCJzeW5jXCIsXG4gICAgZGVlcCA9IGZhbHNlLFxuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgZGlyZWN0aW9uID0gXCJib3RoXCJcbiAgfSA9IG9wdGlvbnM7XG4gIGxldCBzdG9wMSwgc3RvcDI7XG4gIGlmIChkaXJlY3Rpb24gPT09IFwiYm90aFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJsdHJcIikge1xuICAgIHN0b3AxID0gdnVlRGVtaS53YXRjaChsZWZ0LCAobmV3VmFsdWUpID0+IHJpZ2h0LnZhbHVlID0gbmV3VmFsdWUsIHsgZmx1c2gsIGRlZXAsIGltbWVkaWF0ZSB9KTtcbiAgfVxuICBpZiAoZGlyZWN0aW9uID09PSBcImJvdGhcIiB8fCBkaXJlY3Rpb24gPT09IFwicnRsXCIpIHtcbiAgICBzdG9wMiA9IHZ1ZURlbWkud2F0Y2gocmlnaHQsIChuZXdWYWx1ZSkgPT4gbGVmdC52YWx1ZSA9IG5ld1ZhbHVlLCB7IGZsdXNoLCBkZWVwLCBpbW1lZGlhdGUgfSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHtcbiAgICBzdG9wMSA9PSBudWxsID8gdm9pZCAwIDogc3RvcDEoKTtcbiAgICBzdG9wMiA9PSBudWxsID8gdm9pZCAwIDogc3RvcDIoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3luY1JlZnMoc291cmNlLCB0YXJnZXRzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGZsdXNoID0gXCJzeW5jXCIsXG4gICAgZGVlcCA9IGZhbHNlLFxuICAgIGltbWVkaWF0ZSA9IHRydWVcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRzKSlcbiAgICB0YXJnZXRzID0gW3RhcmdldHNdO1xuICByZXR1cm4gdnVlRGVtaS53YXRjaChzb3VyY2UsIChuZXdWYWx1ZSkgPT4gdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IHRhcmdldC52YWx1ZSA9IG5ld1ZhbHVlKSwgeyBmbHVzaCwgZGVlcCwgaW1tZWRpYXRlIH0pO1xufVxuXG52YXIgX19kZWZQcm9wJDcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQ1ID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkNSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkOSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ5ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNyA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNyhvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDkuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ3KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ5KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ5KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDkuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDcoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQ1ID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkNShhLCBfX2dldE93blByb3BEZXNjcyQ1KGIpKTtcbmZ1bmN0aW9uIHRvUmVmcyhvYmplY3RSZWYpIHtcbiAgaWYgKCF2dWVEZW1pLmlzUmVmKG9iamVjdFJlZikpXG4gICAgcmV0dXJuIHZ1ZURlbWkudG9SZWZzKG9iamVjdFJlZik7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkob2JqZWN0UmVmLnZhbHVlKSA/IG5ldyBBcnJheShvYmplY3RSZWYudmFsdWUubGVuZ3RoKSA6IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3RSZWYudmFsdWUpIHtcbiAgICByZXN1bHRba2V5XSA9IHZ1ZURlbWkuY3VzdG9tUmVmKCgpID0+ICh7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RSZWYudmFsdWVba2V5XTtcbiAgICAgIH0sXG4gICAgICBzZXQodikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RSZWYudmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29weSA9IFsuLi5vYmplY3RSZWYudmFsdWVdO1xuICAgICAgICAgIGNvcHlba2V5XSA9IHY7XG4gICAgICAgICAgb2JqZWN0UmVmLnZhbHVlID0gY29weTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSBfX3NwcmVhZFByb3BzJDUoX19zcHJlYWRWYWx1ZXMkNyh7fSwgb2JqZWN0UmVmLnZhbHVlKSwgeyBba2V5XTogdiB9KTtcbiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3T2JqZWN0LCBvYmplY3RSZWYudmFsdWUpO1xuICAgICAgICAgIG9iamVjdFJlZi52YWx1ZSA9IG5ld09iamVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0cnlPbkJlZm9yZU1vdW50KGZuLCBzeW5jID0gdHJ1ZSkge1xuICBpZiAodnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKSlcbiAgICB2dWVEZW1pLm9uQmVmb3JlTW91bnQoZm4pO1xuICBlbHNlIGlmIChzeW5jKVxuICAgIGZuKCk7XG4gIGVsc2VcbiAgICB2dWVEZW1pLm5leHRUaWNrKGZuKTtcbn1cblxuZnVuY3Rpb24gdHJ5T25CZWZvcmVVbm1vdW50KGZuKSB7XG4gIGlmICh2dWVEZW1pLmdldEN1cnJlbnRJbnN0YW5jZSgpKVxuICAgIHZ1ZURlbWkub25CZWZvcmVVbm1vdW50KGZuKTtcbn1cblxuZnVuY3Rpb24gdHJ5T25Nb3VudGVkKGZuLCBzeW5jID0gdHJ1ZSkge1xuICBpZiAodnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKSlcbiAgICB2dWVEZW1pLm9uTW91bnRlZChmbik7XG4gIGVsc2UgaWYgKHN5bmMpXG4gICAgZm4oKTtcbiAgZWxzZVxuICAgIHZ1ZURlbWkubmV4dFRpY2soZm4pO1xufVxuXG5mdW5jdGlvbiB0cnlPblVubW91bnRlZChmbikge1xuICBpZiAodnVlRGVtaS5nZXRDdXJyZW50SW5zdGFuY2UoKSlcbiAgICB2dWVEZW1pLm9uVW5tb3VudGVkKGZuKTtcbn1cblxuZnVuY3Rpb24gdW50aWwocikge1xuICBsZXQgaXNOb3QgPSBmYWxzZTtcbiAgZnVuY3Rpb24gdG9NYXRjaChjb25kaXRpb24sIHsgZmx1c2ggPSBcInN5bmNcIiwgZGVlcCA9IGZhbHNlLCB0aW1lb3V0LCB0aHJvd09uVGltZW91dCB9ID0ge30pIHtcbiAgICBsZXQgc3RvcCA9IG51bGw7XG4gICAgY29uc3Qgd2F0Y2hlciA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdG9wID0gdnVlRGVtaS53YXRjaChyLCAodikgPT4ge1xuICAgICAgICBpZiAoY29uZGl0aW9uKHYpICE9PSBpc05vdCkge1xuICAgICAgICAgIHN0b3AgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3AoKTtcbiAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZsdXNoLFxuICAgICAgICBkZWVwLFxuICAgICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHByb21pc2VzID0gW3dhdGNoZXJdO1xuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZVRpbWVvdXQodGltZW91dCwgdGhyb3dPblRpbWVvdXQpLnRoZW4oKCkgPT4gdnVlRGVtaS51bnJlZihyKSkuZmluYWxseSgoKSA9PiBzdG9wID09IG51bGwgPyB2b2lkIDAgOiBzdG9wKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gIH1cbiAgZnVuY3Rpb24gdG9CZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmICghdnVlRGVtaS5pc1JlZih2YWx1ZSkpXG4gICAgICByZXR1cm4gdG9NYXRjaCgodikgPT4gdiA9PT0gdmFsdWUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgZmx1c2ggPSBcInN5bmNcIiwgZGVlcCA9IGZhbHNlLCB0aW1lb3V0LCB0aHJvd09uVGltZW91dCB9ID0gb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucyA6IHt9O1xuICAgIGxldCBzdG9wID0gbnVsbDtcbiAgICBjb25zdCB3YXRjaGVyID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHN0b3AgPSB2dWVEZW1pLndhdGNoKFtyLCB2YWx1ZV0sIChbdjEsIHYyXSkgPT4ge1xuICAgICAgICBpZiAoaXNOb3QgIT09ICh2MSA9PT0gdjIpKSB7XG4gICAgICAgICAgc3RvcCA9PSBudWxsID8gdm9pZCAwIDogc3RvcCgpO1xuICAgICAgICAgIHJlc29sdmUodjEpO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGZsdXNoLFxuICAgICAgICBkZWVwLFxuICAgICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHByb21pc2VzID0gW3dhdGNoZXJdO1xuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZVRpbWVvdXQodGltZW91dCwgdGhyb3dPblRpbWVvdXQpLnRoZW4oKCkgPT4gdnVlRGVtaS51bnJlZihyKSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHN0b3AgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3AoKTtcbiAgICAgICAgcmV0dXJuIHZ1ZURlbWkudW5yZWYocik7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICB9XG4gIGZ1bmN0aW9uIHRvQmVUcnV0aHkob3B0aW9ucykge1xuICAgIHJldHVybiB0b01hdGNoKCh2KSA9PiBCb29sZWFuKHYpLCBvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiB0b0JlTnVsbChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRvQmUobnVsbCwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gdG9CZVVuZGVmaW5lZChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRvQmUodm9pZCAwLCBvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiB0b0JlTmFOKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdG9NYXRjaChOdW1iZXIuaXNOYU4sIG9wdGlvbnMpO1xuICB9XG4gIGZ1bmN0aW9uIHRvQ29udGFpbnModmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdG9NYXRjaCgodikgPT4ge1xuICAgICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHYpO1xuICAgICAgcmV0dXJuIGFycmF5LmluY2x1ZGVzKHZhbHVlKSB8fCBhcnJheS5pbmNsdWRlcyh2dWVEZW1pLnVucmVmKHZhbHVlKSk7XG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gY2hhbmdlZChvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNoYW5nZWRUaW1lcygxLCBvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiBjaGFuZ2VkVGltZXMobiA9IDEsIG9wdGlvbnMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICByZXR1cm4gdG9NYXRjaCgoKSA9PiB7XG4gICAgICBjb3VudCArPSAxO1xuICAgICAgcmV0dXJuIGNvdW50ID49IG47XG4gICAgfSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodnVlRGVtaS51bnJlZihyKSkpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHtcbiAgICAgIHRvTWF0Y2gsXG4gICAgICB0b0NvbnRhaW5zLFxuICAgICAgY2hhbmdlZCxcbiAgICAgIGNoYW5nZWRUaW1lcyxcbiAgICAgIGdldCBub3QoKSB7XG4gICAgICAgIGlzTm90ID0gIWlzTm90O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHtcbiAgICAgIHRvTWF0Y2gsXG4gICAgICB0b0JlLFxuICAgICAgdG9CZVRydXRoeSxcbiAgICAgIHRvQmVOdWxsLFxuICAgICAgdG9CZU5hTixcbiAgICAgIHRvQmVVbmRlZmluZWQsXG4gICAgICBjaGFuZ2VkLFxuICAgICAgY2hhbmdlZFRpbWVzLFxuICAgICAgZ2V0IG5vdCgpIHtcbiAgICAgICAgaXNOb3QgPSAhaXNOb3Q7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZUNvdW50ZXIoaW5pdGlhbFZhbHVlID0gMCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGNvdW50ID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlKTtcbiAgY29uc3Qge1xuICAgIG1heCA9IEluZmluaXR5LFxuICAgIG1pbiA9IC1JbmZpbml0eVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgaW5jID0gKGRlbHRhID0gMSkgPT4gY291bnQudmFsdWUgPSBNYXRoLm1pbihtYXgsIGNvdW50LnZhbHVlICsgZGVsdGEpO1xuICBjb25zdCBkZWMgPSAoZGVsdGEgPSAxKSA9PiBjb3VudC52YWx1ZSA9IE1hdGgubWF4KG1pbiwgY291bnQudmFsdWUgLSBkZWx0YSk7XG4gIGNvbnN0IGdldCA9ICgpID0+IGNvdW50LnZhbHVlO1xuICBjb25zdCBzZXQgPSAodmFsKSA9PiBjb3VudC52YWx1ZSA9IHZhbDtcbiAgY29uc3QgcmVzZXQgPSAodmFsID0gaW5pdGlhbFZhbHVlKSA9PiB7XG4gICAgaW5pdGlhbFZhbHVlID0gdmFsO1xuICAgIHJldHVybiBzZXQodmFsKTtcbiAgfTtcbiAgcmV0dXJuIHsgY291bnQsIGluYywgZGVjLCBnZXQsIHNldCwgcmVzZXQgfTtcbn1cblxuY29uc3QgUkVHRVhfUEFSU0UgPSAvXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvO1xuY29uc3QgUkVHRVhfRk9STUFUID0gL1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nO1xuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlLCBmb3JtYXRTdHIpID0+IHtcbiAgY29uc3QgeWVhcnMgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICBjb25zdCBkYXlzID0gZGF0ZS5nZXREYXRlKCk7XG4gIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICBjb25zdCBtaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIGNvbnN0IHNlY29uZHMgPSBkYXRlLmdldFNlY29uZHMoKTtcbiAgY29uc3QgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgY29uc3QgbWF0Y2hlcyA9IHtcbiAgICBZWTogU3RyaW5nKHllYXJzKS5zbGljZSgtMiksXG4gICAgWVlZWTogeWVhcnMsXG4gICAgTTogbW9udGggKyAxLFxuICAgIE1NOiBgJHttb250aCArIDF9YC5wYWRTdGFydCgyLCBcIjBcIiksXG4gICAgRDogU3RyaW5nKGRheXMpLFxuICAgIEREOiBgJHtkYXlzfWAucGFkU3RhcnQoMiwgXCIwXCIpLFxuICAgIEg6IFN0cmluZyhob3VycyksXG4gICAgSEg6IGAke2hvdXJzfWAucGFkU3RhcnQoMiwgXCIwXCIpLFxuICAgIGg6IGAke2hvdXJzICUgMTIgfHwgMTJ9YC5wYWRTdGFydCgxLCBcIjBcIiksXG4gICAgaGg6IGAke2hvdXJzICUgMTIgfHwgMTJ9YC5wYWRTdGFydCgyLCBcIjBcIiksXG4gICAgbTogU3RyaW5nKG1pbnV0ZXMpLFxuICAgIG1tOiBgJHttaW51dGVzfWAucGFkU3RhcnQoMiwgXCIwXCIpLFxuICAgIHM6IFN0cmluZyhzZWNvbmRzKSxcbiAgICBzczogYCR7c2Vjb25kc31gLnBhZFN0YXJ0KDIsIFwiMFwiKSxcbiAgICBTU1M6IGAke21pbGxpc2Vjb25kc31gLnBhZFN0YXJ0KDMsIFwiMFwiKSxcbiAgICBkOiBkYXlcbiAgfTtcbiAgcmV0dXJuIGZvcm1hdFN0ci5yZXBsYWNlKFJFR0VYX0ZPUk1BVCwgKG1hdGNoLCAkMSkgPT4gJDEgfHwgbWF0Y2hlc1ttYXRjaF0pO1xufTtcbmNvbnN0IG5vcm1hbGl6ZURhdGUgPSAoZGF0ZSkgPT4ge1xuICBpZiAoZGF0ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgaWYgKGRhdGUgPT09IHZvaWQgMClcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiICYmICEvWiQvaS50ZXN0KGRhdGUpKSB7XG4gICAgY29uc3QgZCA9IGRhdGUubWF0Y2goUkVHRVhfUEFSU0UpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zdCBtID0gZFsyXSAtIDEgfHwgMDtcbiAgICAgIGNvbnN0IG1zID0gKGRbN10gfHwgXCIwXCIpLnN1YnN0cmluZygwLCAzKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShkWzFdLCBtLCBkWzNdIHx8IDEsIGRbNF0gfHwgMCwgZFs1XSB8fCAwLCBkWzZdIHx8IDAsIG1zKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xufTtcbmZ1bmN0aW9uIHVzZURhdGVGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyID0gXCJISDptbTpzc1wiKSB7XG4gIHJldHVybiB2dWVEZW1pLmNvbXB1dGVkKCgpID0+IGZvcm1hdERhdGUobm9ybWFsaXplRGF0ZSh2dWVEZW1pLnVucmVmKGRhdGUpKSwgdnVlRGVtaS51bnJlZihmb3JtYXRTdHIpKSk7XG59XG5cbmZ1bmN0aW9uIHVzZUludGVydmFsRm4oY2IsIGludGVydmFsID0gMWUzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGltbWVkaWF0ZSA9IHRydWUsXG4gICAgaW1tZWRpYXRlQ2FsbGJhY2sgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgbGV0IHRpbWVyID0gbnVsbDtcbiAgY29uc3QgaXNBY3RpdmUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGZ1bmN0aW9uIGNsZWFuKCkge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIGlzQWN0aXZlLnZhbHVlID0gZmFsc2U7XG4gICAgY2xlYW4oKTtcbiAgfVxuICBmdW5jdGlvbiByZXN1bWUoKSB7XG4gICAgaWYgKHZ1ZURlbWkudW5yZWYoaW50ZXJ2YWwpIDw9IDApXG4gICAgICByZXR1cm47XG4gICAgaXNBY3RpdmUudmFsdWUgPSB0cnVlO1xuICAgIGlmIChpbW1lZGlhdGVDYWxsYmFjaylcbiAgICAgIGNiKCk7XG4gICAgY2xlYW4oKTtcbiAgICB0aW1lciA9IHNldEludGVydmFsKGNiLCB2dWVEZW1pLnVucmVmKGludGVydmFsKSk7XG4gIH1cbiAgaWYgKGltbWVkaWF0ZSAmJiBpc0NsaWVudClcbiAgICByZXN1bWUoKTtcbiAgaWYgKHZ1ZURlbWkuaXNSZWYoaW50ZXJ2YWwpKSB7XG4gICAgY29uc3Qgc3RvcFdhdGNoID0gdnVlRGVtaS53YXRjaChpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgaWYgKGlzQWN0aXZlLnZhbHVlICYmIGlzQ2xpZW50KVxuICAgICAgICByZXN1bWUoKTtcbiAgICB9KTtcbiAgICB0cnlPblNjb3BlRGlzcG9zZShzdG9wV2F0Y2gpO1xuICB9XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHBhdXNlKTtcbiAgcmV0dXJuIHtcbiAgICBpc0FjdGl2ZSxcbiAgICBwYXVzZSxcbiAgICByZXN1bWVcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ2ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkOCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDggPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ4ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNiA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNihvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNiA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDguY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ2KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ4KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ4KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDguY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDYoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VJbnRlcnZhbChpbnRlcnZhbCA9IDFlMywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250cm9sczogZXhwb3NlQ29udHJvbHMgPSBmYWxzZSxcbiAgICBpbW1lZGlhdGUgPSB0cnVlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjb3VudGVyID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IGNvbnRyb2xzID0gdXNlSW50ZXJ2YWxGbigoKSA9PiBjb3VudGVyLnZhbHVlICs9IDEsIGludGVydmFsLCB7IGltbWVkaWF0ZSB9KTtcbiAgaWYgKGV4cG9zZUNvbnRyb2xzKSB7XG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJDYoe1xuICAgICAgY291bnRlclxuICAgIH0sIGNvbnRyb2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VMYXN0Q2hhbmdlZChzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICB2YXIgX2E7XG4gIGNvbnN0IG1zID0gdnVlRGVtaS5yZWYoKF9hID0gb3B0aW9ucy5pbml0aWFsVmFsdWUpICE9IG51bGwgPyBfYSA6IG51bGwpO1xuICB2dWVEZW1pLndhdGNoKHNvdXJjZSwgKCkgPT4gbXMudmFsdWUgPSB0aW1lc3RhbXAoKSwgb3B0aW9ucyk7XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gdXNlVGltZW91dEZuKGNiLCBpbnRlcnZhbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpbW1lZGlhdGUgPSB0cnVlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBpc1BlbmRpbmcgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gIGxldCB0aW1lciA9IG51bGw7XG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpc1BlbmRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICBjbGVhcigpO1xuICB9XG4gIGZ1bmN0aW9uIHN0YXJ0KC4uLmFyZ3MpIHtcbiAgICBjbGVhcigpO1xuICAgIGlzUGVuZGluZy52YWx1ZSA9IHRydWU7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlzUGVuZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgY2IoLi4uYXJncyk7XG4gICAgfSwgdnVlRGVtaS51bnJlZihpbnRlcnZhbCkpO1xuICB9XG4gIGlmIChpbW1lZGlhdGUpIHtcbiAgICBpc1BlbmRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGlmIChpc0NsaWVudClcbiAgICAgIHN0YXJ0KCk7XG4gIH1cbiAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7XG4gICAgaXNQZW5kaW5nLFxuICAgIHN0YXJ0LFxuICAgIHN0b3BcbiAgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ1ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDcgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQ3ID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkNSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkNShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkNSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDcuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQ1KGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQ3KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ3KGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDcuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDUoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5mdW5jdGlvbiB1c2VUaW1lb3V0KGludGVydmFsID0gMWUzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRyb2xzOiBleHBvc2VDb250cm9scyA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjb250cm9scyA9IHVzZVRpbWVvdXRGbihub29wLCBpbnRlcnZhbCwgb3B0aW9ucyk7XG4gIGNvbnN0IHJlYWR5ID0gdnVlRGVtaS5jb21wdXRlZCgoKSA9PiAhY29udHJvbHMuaXNQZW5kaW5nLnZhbHVlKTtcbiAgaWYgKGV4cG9zZUNvbnRyb2xzKSB7XG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzJDUoe1xuICAgICAgcmVhZHlcbiAgICB9LCBjb250cm9scyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlYWR5O1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUgPSBmYWxzZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0cnV0aHlWYWx1ZSA9IHRydWUsXG4gICAgZmFsc3lWYWx1ZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB2YWx1ZUlzUmVmID0gdnVlRGVtaS5pc1JlZihpbml0aWFsVmFsdWUpO1xuICBjb25zdCBpbm5lclZhbHVlID0gdnVlRGVtaS5yZWYoaW5pdGlhbFZhbHVlKTtcbiAgZnVuY3Rpb24gdG9nZ2xlKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGlubmVyVmFsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBpbm5lclZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lclZhbHVlLnZhbHVlID0gaW5uZXJWYWx1ZS52YWx1ZSA9PT0gdnVlRGVtaS51bnJlZih0cnV0aHlWYWx1ZSkgPyB2dWVEZW1pLnVucmVmKGZhbHN5VmFsdWUpIDogdnVlRGVtaS51bnJlZih0cnV0aHlWYWx1ZSk7XG4gICAgICByZXR1cm4gaW5uZXJWYWx1ZS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHZhbHVlSXNSZWYpXG4gICAgcmV0dXJuIHRvZ2dsZTtcbiAgZWxzZVxuICAgIHJldHVybiBbaW5uZXJWYWx1ZSwgdG9nZ2xlXTtcbn1cblxuZnVuY3Rpb24gd2F0Y2hBcnJheShzb3VyY2UsIGNiLCBvcHRpb25zKSB7XG4gIGxldCBvbGRMaXN0ID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuaW1tZWRpYXRlKSA/IFtdIDogW1xuICAgIC4uLnNvdXJjZSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gc291cmNlKCkgOiBBcnJheS5pc0FycmF5KHNvdXJjZSkgPyBzb3VyY2UgOiB2dWVEZW1pLnVucmVmKHNvdXJjZSlcbiAgXTtcbiAgcmV0dXJuIHZ1ZURlbWkud2F0Y2goc291cmNlLCAobmV3TGlzdCwgXywgb25DbGVhbnVwKSA9PiB7XG4gICAgY29uc3Qgb2xkTGlzdFJlbWFpbnMgPSBuZXcgQXJyYXkob2xkTGlzdC5sZW5ndGgpO1xuICAgIGNvbnN0IGFkZGVkID0gW107XG4gICAgZm9yIChjb25zdCBvYmogb2YgbmV3TGlzdCkge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9sZExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFvbGRMaXN0UmVtYWluc1tpXSAmJiBvYmogPT09IG9sZExpc3RbaV0pIHtcbiAgICAgICAgICBvbGRMaXN0UmVtYWluc1tpXSA9IHRydWU7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZvdW5kKVxuICAgICAgICBhZGRlZC5wdXNoKG9iaik7XG4gICAgfVxuICAgIGNvbnN0IHJlbW92ZWQgPSBvbGRMaXN0LmZpbHRlcigoXzIsIGkpID0+ICFvbGRMaXN0UmVtYWluc1tpXSk7XG4gICAgY2IobmV3TGlzdCwgb2xkTGlzdCwgYWRkZWQsIHJlbW92ZWQsIG9uQ2xlYW51cCk7XG4gICAgb2xkTGlzdCA9IFsuLi5uZXdMaXN0XTtcbiAgfSwgb3B0aW9ucyk7XG59XG5cbnZhciBfX2dldE93blByb3BTeW1ib2xzJDYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ2ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kNiA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19vYmpSZXN0JDUgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ2LmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyQ2KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ2KHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSQ2LmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB3YXRjaFdpdGhGaWx0ZXIoc291cmNlLCBjYiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywge1xuICAgIGV2ZW50RmlsdGVyID0gYnlwYXNzRmlsdGVyXG4gIH0gPSBfYSwgd2F0Y2hPcHRpb25zID0gX19vYmpSZXN0JDUoX2EsIFtcbiAgICBcImV2ZW50RmlsdGVyXCJcbiAgXSk7XG4gIHJldHVybiB2dWVEZW1pLndhdGNoKHNvdXJjZSwgY3JlYXRlRmlsdGVyV3JhcHBlcihldmVudEZpbHRlciwgY2IpLCB3YXRjaE9wdGlvbnMpO1xufVxuXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyQ1ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AkNSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtJDUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fb2JqUmVzdCQ0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AkNS5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMkNSlcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNShzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0kNS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gd2F0Y2hBdE1vc3Qoc291cmNlLCBjYiwgb3B0aW9ucykge1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHtcbiAgICBjb3VudFxuICB9ID0gX2EsIHdhdGNoT3B0aW9ucyA9IF9fb2JqUmVzdCQ0KF9hLCBbXG4gICAgXCJjb3VudFwiXG4gIF0pO1xuICBjb25zdCBjdXJyZW50ID0gdnVlRGVtaS5yZWYoMCk7XG4gIGNvbnN0IHN0b3AgPSB3YXRjaFdpdGhGaWx0ZXIoc291cmNlLCAoLi4uYXJncykgPT4ge1xuICAgIGN1cnJlbnQudmFsdWUgKz0gMTtcbiAgICBpZiAoY3VycmVudC52YWx1ZSA+PSB2dWVEZW1pLnVucmVmKGNvdW50KSlcbiAgICAgIHZ1ZURlbWkubmV4dFRpY2soKCkgPT4gc3RvcCgpKTtcbiAgICBjYiguLi5hcmdzKTtcbiAgfSwgd2F0Y2hPcHRpb25zKTtcbiAgcmV0dXJuIHsgY291bnQ6IGN1cnJlbnQsIHN0b3AgfTtcbn1cblxudmFyIF9fZGVmUHJvcCQ0ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkNCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQ0ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kNCA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDQgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDQob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDQgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ0LmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkNChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkNClcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkNChiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQ0LmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQ0KGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkNCA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDQoYSwgX19nZXRPd25Qcm9wRGVzY3MkNChiKSk7XG52YXIgX19vYmpSZXN0JDMgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCQ0LmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyQ0KVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQ0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSQ0LmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB3YXRjaERlYm91bmNlZChzb3VyY2UsIGNiLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7XG4gICAgZGVib3VuY2UgPSAwLFxuICAgIG1heFdhaXQgPSB2b2lkIDBcbiAgfSA9IF9hLCB3YXRjaE9wdGlvbnMgPSBfX29ialJlc3QkMyhfYSwgW1xuICAgIFwiZGVib3VuY2VcIixcbiAgICBcIm1heFdhaXRcIlxuICBdKTtcbiAgcmV0dXJuIHdhdGNoV2l0aEZpbHRlcihzb3VyY2UsIGNiLCBfX3NwcmVhZFByb3BzJDQoX19zcHJlYWRWYWx1ZXMkNCh7fSwgd2F0Y2hPcHRpb25zKSwge1xuICAgIGV2ZW50RmlsdGVyOiBkZWJvdW5jZUZpbHRlcihkZWJvdW5jZSwgeyBtYXhXYWl0IH0pXG4gIH0pKTtcbn1cblxudmFyIF9fZGVmUHJvcCQzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kMyA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDMgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDMob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQzLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkMyhhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkMylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQzLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQzKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMyA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDMoYSwgX19nZXRPd25Qcm9wRGVzY3MkMyhiKSk7XG52YXIgX19vYmpSZXN0JDIgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCQzLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyQzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQzKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSQzLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB3YXRjaElnbm9yYWJsZShzb3VyY2UsIGNiLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7XG4gICAgZXZlbnRGaWx0ZXIgPSBieXBhc3NGaWx0ZXJcbiAgfSA9IF9hLCB3YXRjaE9wdGlvbnMgPSBfX29ialJlc3QkMihfYSwgW1xuICAgIFwiZXZlbnRGaWx0ZXJcIlxuICBdKTtcbiAgY29uc3QgZmlsdGVyZWRDYiA9IGNyZWF0ZUZpbHRlcldyYXBwZXIoZXZlbnRGaWx0ZXIsIGNiKTtcbiAgbGV0IGlnbm9yZVVwZGF0ZXM7XG4gIGxldCBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzO1xuICBsZXQgc3RvcDtcbiAgaWYgKHdhdGNoT3B0aW9ucy5mbHVzaCA9PT0gXCJzeW5jXCIpIHtcbiAgICBjb25zdCBpZ25vcmUgPSB2dWVEZW1pLnJlZihmYWxzZSk7XG4gICAgaWdub3JlUHJldkFzeW5jVXBkYXRlcyA9ICgpID0+IHtcbiAgICB9O1xuICAgIGlnbm9yZVVwZGF0ZXMgPSAodXBkYXRlcikgPT4ge1xuICAgICAgaWdub3JlLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHVwZGF0ZXIoKTtcbiAgICAgIGlnbm9yZS52YWx1ZSA9IGZhbHNlO1xuICAgIH07XG4gICAgc3RvcCA9IHZ1ZURlbWkud2F0Y2goc291cmNlLCAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKCFpZ25vcmUudmFsdWUpXG4gICAgICAgIGZpbHRlcmVkQ2IoLi4uYXJncyk7XG4gICAgfSwgd2F0Y2hPcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaXNwb3NhYmxlcyA9IFtdO1xuICAgIGNvbnN0IGlnbm9yZUNvdW50ZXIgPSB2dWVEZW1pLnJlZigwKTtcbiAgICBjb25zdCBzeW5jQ291bnRlciA9IHZ1ZURlbWkucmVmKDApO1xuICAgIGlnbm9yZVByZXZBc3luY1VwZGF0ZXMgPSAoKSA9PiB7XG4gICAgICBpZ25vcmVDb3VudGVyLnZhbHVlID0gc3luY0NvdW50ZXIudmFsdWU7XG4gICAgfTtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKHZ1ZURlbWkud2F0Y2goc291cmNlLCAoKSA9PiB7XG4gICAgICBzeW5jQ291bnRlci52YWx1ZSsrO1xuICAgIH0sIF9fc3ByZWFkUHJvcHMkMyhfX3NwcmVhZFZhbHVlcyQzKHt9LCB3YXRjaE9wdGlvbnMpLCB7IGZsdXNoOiBcInN5bmNcIiB9KSkpO1xuICAgIGlnbm9yZVVwZGF0ZXMgPSAodXBkYXRlcikgPT4ge1xuICAgICAgY29uc3Qgc3luY0NvdW50ZXJQcmV2ID0gc3luY0NvdW50ZXIudmFsdWU7XG4gICAgICB1cGRhdGVyKCk7XG4gICAgICBpZ25vcmVDb3VudGVyLnZhbHVlICs9IHN5bmNDb3VudGVyLnZhbHVlIC0gc3luY0NvdW50ZXJQcmV2O1xuICAgIH07XG4gICAgZGlzcG9zYWJsZXMucHVzaCh2dWVEZW1pLndhdGNoKHNvdXJjZSwgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZSA9IGlnbm9yZUNvdW50ZXIudmFsdWUgPiAwICYmIGlnbm9yZUNvdW50ZXIudmFsdWUgPT09IHN5bmNDb3VudGVyLnZhbHVlO1xuICAgICAgaWdub3JlQ291bnRlci52YWx1ZSA9IDA7XG4gICAgICBzeW5jQ291bnRlci52YWx1ZSA9IDA7XG4gICAgICBpZiAoaWdub3JlKVxuICAgICAgICByZXR1cm47XG4gICAgICBmaWx0ZXJlZENiKC4uLmFyZ3MpO1xuICAgIH0sIHdhdGNoT3B0aW9ucykpO1xuICAgIHN0b3AgPSAoKSA9PiB7XG4gICAgICBkaXNwb3NhYmxlcy5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4geyBzdG9wLCBpZ25vcmVVcGRhdGVzLCBpZ25vcmVQcmV2QXN5bmNVcGRhdGVzIH07XG59XG5cbmZ1bmN0aW9uIHdhdGNoT25jZShzb3VyY2UsIGNiLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0b3AgPSB2dWVEZW1pLndhdGNoKHNvdXJjZSwgKC4uLmFyZ3MpID0+IHtcbiAgICB2dWVEZW1pLm5leHRUaWNrKCgpID0+IHN0b3AoKSk7XG4gICAgcmV0dXJuIGNiKC4uLmFyZ3MpO1xuICB9LCBvcHRpb25zKTtcbn1cblxudmFyIF9fZGVmUHJvcCQyID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmUHJvcHMkMiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzJDIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzJDIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0kMiA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wJDIgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDIob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzJDIgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcCQyLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AkMihhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMkMilcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMkMihiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bSQyLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcCQyKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMkMiA9IChhLCBiKSA9PiBfX2RlZlByb3BzJDIoYSwgX19nZXRPd25Qcm9wRGVzY3MkMihiKSk7XG52YXIgX19vYmpSZXN0JDEgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCQyLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyQyKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQyKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSQyLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB3YXRjaFBhdXNhYmxlKHNvdXJjZSwgY2IsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHtcbiAgICBldmVudEZpbHRlcjogZmlsdGVyXG4gIH0gPSBfYSwgd2F0Y2hPcHRpb25zID0gX19vYmpSZXN0JDEoX2EsIFtcbiAgICBcImV2ZW50RmlsdGVyXCJcbiAgXSk7XG4gIGNvbnN0IHsgZXZlbnRGaWx0ZXIsIHBhdXNlLCByZXN1bWUsIGlzQWN0aXZlIH0gPSBwYXVzYWJsZUZpbHRlcihmaWx0ZXIpO1xuICBjb25zdCBzdG9wID0gd2F0Y2hXaXRoRmlsdGVyKHNvdXJjZSwgY2IsIF9fc3ByZWFkUHJvcHMkMihfX3NwcmVhZFZhbHVlcyQyKHt9LCB3YXRjaE9wdGlvbnMpLCB7XG4gICAgZXZlbnRGaWx0ZXJcbiAgfSkpO1xuICByZXR1cm4geyBzdG9wLCBwYXVzZSwgcmVzdW1lLCBpc0FjdGl2ZSB9O1xufVxuXG52YXIgX19kZWZQcm9wJDEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyQxID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MkMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMkMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wJDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSQxID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AkMSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkMShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMkMSA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wJDEuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcCQxKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scyQxKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQxKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtJDEuY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wJDEoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19zcHJlYWRQcm9wcyQxID0gKGEsIGIpID0+IF9fZGVmUHJvcHMkMShhLCBfX2dldE93blByb3BEZXNjcyQxKGIpKTtcbnZhciBfX29ialJlc3QgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcCQxLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scyQxKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyQxKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bSQxLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB3YXRjaFRocm90dGxlZChzb3VyY2UsIGNiLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7XG4gICAgdGhyb3R0bGUgPSAwLFxuICAgIHRyYWlsaW5nID0gdHJ1ZSxcbiAgICBsZWFkaW5nID0gdHJ1ZVxuICB9ID0gX2EsIHdhdGNoT3B0aW9ucyA9IF9fb2JqUmVzdChfYSwgW1xuICAgIFwidGhyb3R0bGVcIixcbiAgICBcInRyYWlsaW5nXCIsXG4gICAgXCJsZWFkaW5nXCJcbiAgXSk7XG4gIHJldHVybiB3YXRjaFdpdGhGaWx0ZXIoc291cmNlLCBjYiwgX19zcHJlYWRQcm9wcyQxKF9fc3ByZWFkVmFsdWVzJDEoe30sIHdhdGNoT3B0aW9ucyksIHtcbiAgICBldmVudEZpbHRlcjogdGhyb3R0bGVGaWx0ZXIodGhyb3R0bGUsIHRyYWlsaW5nLCBsZWFkaW5nKVxuICB9KSk7XG59XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX3NwcmVhZFByb3BzID0gKGEsIGIpID0+IF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpO1xuZnVuY3Rpb24gd2F0Y2hUcmlnZ2VyYWJsZShzb3VyY2UsIGNiLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGNsZWFudXBGbjtcbiAgZnVuY3Rpb24gb25FZmZlY3QoKSB7XG4gICAgaWYgKCFjbGVhbnVwRm4pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZm4gPSBjbGVhbnVwRm47XG4gICAgY2xlYW51cEZuID0gdm9pZCAwO1xuICAgIGZuKCk7XG4gIH1cbiAgZnVuY3Rpb24gb25DbGVhbnVwKGNhbGxiYWNrKSB7XG4gICAgY2xlYW51cEZuID0gY2FsbGJhY2s7XG4gIH1cbiAgY29uc3QgX2NiID0gKHZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgIG9uRWZmZWN0KCk7XG4gICAgcmV0dXJuIGNiKHZhbHVlLCBvbGRWYWx1ZSwgb25DbGVhbnVwKTtcbiAgfTtcbiAgY29uc3QgcmVzID0gd2F0Y2hJZ25vcmFibGUoc291cmNlLCBfY2IsIG9wdGlvbnMpO1xuICBjb25zdCB7IGlnbm9yZVVwZGF0ZXMgfSA9IHJlcztcbiAgY29uc3QgdHJpZ2dlciA9ICgpID0+IHtcbiAgICBsZXQgcmVzMjtcbiAgICBpZ25vcmVVcGRhdGVzKCgpID0+IHtcbiAgICAgIHJlczIgPSBfY2IoZ2V0V2F0Y2hTb3VyY2VzKHNvdXJjZSksIGdldE9sZFZhbHVlKHNvdXJjZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXMyO1xuICB9O1xuICByZXR1cm4gX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgcmVzKSwge1xuICAgIHRyaWdnZXJcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRXYXRjaFNvdXJjZXMoc291cmNlcykge1xuICBpZiAodnVlRGVtaS5pc1JlYWN0aXZlKHNvdXJjZXMpKVxuICAgIHJldHVybiBzb3VyY2VzO1xuICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2VzKSlcbiAgICByZXR1cm4gc291cmNlcy5tYXAoKGl0ZW0pID0+IGdldE9uZVdhdGNoU291cmNlKGl0ZW0pKTtcbiAgcmV0dXJuIGdldE9uZVdhdGNoU291cmNlKHNvdXJjZXMpO1xufVxuZnVuY3Rpb24gZ2V0T25lV2F0Y2hTb3VyY2Uoc291cmNlKSB7XG4gIHJldHVybiB0eXBlb2Ygc291cmNlID09PSBcImZ1bmN0aW9uXCIgPyBzb3VyY2UoKSA6IHZ1ZURlbWkudW5yZWYoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGdldE9sZFZhbHVlKHNvdXJjZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShzb3VyY2UpID8gc291cmNlLm1hcCgoKSA9PiB2b2lkIDApIDogdm9pZCAwO1xufVxuXG5mdW5jdGlvbiB3aGVuZXZlcihzb3VyY2UsIGNiLCBvcHRpb25zKSB7XG4gIHJldHVybiB2dWVEZW1pLndhdGNoKHNvdXJjZSwgKHYsIG92LCBvbkludmFsaWRhdGUpID0+IHtcbiAgICBpZiAodilcbiAgICAgIGNiKHYsIG92LCBvbkludmFsaWRhdGUpO1xuICB9LCBvcHRpb25zKTtcbn1cblxuZXhwb3J0cy5fX29ubHlWdWUzID0gX19vbmx5VnVlMztcbmV4cG9ydHMuYW5kID0gbG9naWNBbmQ7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYXV0b1Jlc2V0UmVmID0gcmVmQXV0b1Jlc2V0O1xuZXhwb3J0cy5ieXBhc3NGaWx0ZXIgPSBieXBhc3NGaWx0ZXI7XG5leHBvcnRzLmNsYW1wID0gY2xhbXA7XG5leHBvcnRzLmNvbXB1dGVkRWFnZXIgPSBjb21wdXRlZEVhZ2VyO1xuZXhwb3J0cy5jb21wdXRlZFdpdGhDb250cm9sID0gY29tcHV0ZWRXaXRoQ29udHJvbDtcbmV4cG9ydHMuY29udGFpbnNQcm9wID0gY29udGFpbnNQcm9wO1xuZXhwb3J0cy5jb250cm9sbGVkQ29tcHV0ZWQgPSBjb21wdXRlZFdpdGhDb250cm9sO1xuZXhwb3J0cy5jb250cm9sbGVkUmVmID0gY29udHJvbGxlZFJlZjtcbmV4cG9ydHMuY3JlYXRlRXZlbnRIb29rID0gY3JlYXRlRXZlbnRIb29rO1xuZXhwb3J0cy5jcmVhdGVGaWx0ZXJXcmFwcGVyID0gY3JlYXRlRmlsdGVyV3JhcHBlcjtcbmV4cG9ydHMuY3JlYXRlR2xvYmFsU3RhdGUgPSBjcmVhdGVHbG9iYWxTdGF0ZTtcbmV4cG9ydHMuY3JlYXRlSW5qZWN0aW9uU3RhdGUgPSBjcmVhdGVJbmplY3Rpb25TdGF0ZTtcbmV4cG9ydHMuY3JlYXRlUmVhY3RpdmVGbiA9IHJlYWN0aWZ5O1xuZXhwb3J0cy5jcmVhdGVTaGFyZWRDb21wb3NhYmxlID0gY3JlYXRlU2hhcmVkQ29tcG9zYWJsZTtcbmV4cG9ydHMuY3JlYXRlU2luZ2xldG9uUHJvbWlzZSA9IGNyZWF0ZVNpbmdsZXRvblByb21pc2U7XG5leHBvcnRzLmRlYm91bmNlRmlsdGVyID0gZGVib3VuY2VGaWx0ZXI7XG5leHBvcnRzLmRlYm91bmNlZFJlZiA9IHJlZkRlYm91bmNlZDtcbmV4cG9ydHMuZGVib3VuY2VkV2F0Y2ggPSB3YXRjaERlYm91bmNlZDtcbmV4cG9ydHMuZGlyZWN0aXZlSG9va3MgPSBkaXJlY3RpdmVIb29rcztcbmV4cG9ydHMuZWFnZXJDb21wdXRlZCA9IGNvbXB1dGVkRWFnZXI7XG5leHBvcnRzLmV4dGVuZFJlZiA9IGV4dGVuZFJlZjtcbmV4cG9ydHMuZm9ybWF0RGF0ZSA9IGZvcm1hdERhdGU7XG5leHBvcnRzLmdldCA9IGdldDtcbmV4cG9ydHMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbmV4cG9ydHMuaWdub3JhYmxlV2F0Y2ggPSB3YXRjaElnbm9yYWJsZTtcbmV4cG9ydHMuaW5jcmVhc2VXaXRoVW5pdCA9IGluY3JlYXNlV2l0aFVuaXQ7XG5leHBvcnRzLmludm9rZSA9IGludm9rZTtcbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuZXhwb3J0cy5pc0NsaWVudCA9IGlzQ2xpZW50O1xuZXhwb3J0cy5pc0RlZiA9IGlzRGVmO1xuZXhwb3J0cy5pc0RlZmluZWQgPSBpc0RlZmluZWQ7XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuZXhwb3J0cy5pc0lPUyA9IGlzSU9TO1xuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc1dpbmRvdyA9IGlzV2luZG93O1xuZXhwb3J0cy5sb2dpY0FuZCA9IGxvZ2ljQW5kO1xuZXhwb3J0cy5sb2dpY05vdCA9IGxvZ2ljTm90O1xuZXhwb3J0cy5sb2dpY09yID0gbG9naWNPcjtcbmV4cG9ydHMubWFrZURlc3RydWN0dXJhYmxlID0gbWFrZURlc3RydWN0dXJhYmxlO1xuZXhwb3J0cy5ub29wID0gbm9vcDtcbmV4cG9ydHMubm9ybWFsaXplRGF0ZSA9IG5vcm1hbGl6ZURhdGU7XG5leHBvcnRzLm5vdCA9IGxvZ2ljTm90O1xuZXhwb3J0cy5ub3cgPSBub3c7XG5leHBvcnRzLm9iamVjdFBpY2sgPSBvYmplY3RQaWNrO1xuZXhwb3J0cy5vciA9IGxvZ2ljT3I7XG5leHBvcnRzLnBhdXNhYmxlRmlsdGVyID0gcGF1c2FibGVGaWx0ZXI7XG5leHBvcnRzLnBhdXNhYmxlV2F0Y2ggPSB3YXRjaFBhdXNhYmxlO1xuZXhwb3J0cy5wcm9taXNlVGltZW91dCA9IHByb21pc2VUaW1lb3V0O1xuZXhwb3J0cy5yYW5kID0gcmFuZDtcbmV4cG9ydHMucmVhY3RpZnkgPSByZWFjdGlmeTtcbmV4cG9ydHMucmVhY3RpZnlPYmplY3QgPSByZWFjdGlmeU9iamVjdDtcbmV4cG9ydHMucmVhY3RpdmVDb21wdXRlZCA9IHJlYWN0aXZlQ29tcHV0ZWQ7XG5leHBvcnRzLnJlYWN0aXZlT21pdCA9IHJlYWN0aXZlT21pdDtcbmV4cG9ydHMucmVhY3RpdmVQaWNrID0gcmVhY3RpdmVQaWNrO1xuZXhwb3J0cy5yZWZBdXRvUmVzZXQgPSByZWZBdXRvUmVzZXQ7XG5leHBvcnRzLnJlZkRlYm91bmNlZCA9IHJlZkRlYm91bmNlZDtcbmV4cG9ydHMucmVmRGVmYXVsdCA9IHJlZkRlZmF1bHQ7XG5leHBvcnRzLnJlZlRocm90dGxlZCA9IHJlZlRocm90dGxlZDtcbmV4cG9ydHMucmVmV2l0aENvbnRyb2wgPSByZWZXaXRoQ29udHJvbDtcbmV4cG9ydHMucmVzb2x2ZVJlZiA9IHJlc29sdmVSZWY7XG5leHBvcnRzLnJlc29sdmVVbnJlZiA9IHJlc29sdmVVbnJlZjtcbmV4cG9ydHMuc2V0ID0gc2V0O1xuZXhwb3J0cy5zeW5jUmVmID0gc3luY1JlZjtcbmV4cG9ydHMuc3luY1JlZnMgPSBzeW5jUmVmcztcbmV4cG9ydHMudGhyb3R0bGVGaWx0ZXIgPSB0aHJvdHRsZUZpbHRlcjtcbmV4cG9ydHMudGhyb3R0bGVkUmVmID0gcmVmVGhyb3R0bGVkO1xuZXhwb3J0cy50aHJvdHRsZWRXYXRjaCA9IHdhdGNoVGhyb3R0bGVkO1xuZXhwb3J0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG5leHBvcnRzLnRvUmVhY3RpdmUgPSB0b1JlYWN0aXZlO1xuZXhwb3J0cy50b1JlZnMgPSB0b1JlZnM7XG5leHBvcnRzLnRyeU9uQmVmb3JlTW91bnQgPSB0cnlPbkJlZm9yZU1vdW50O1xuZXhwb3J0cy50cnlPbkJlZm9yZVVubW91bnQgPSB0cnlPbkJlZm9yZVVubW91bnQ7XG5leHBvcnRzLnRyeU9uTW91bnRlZCA9IHRyeU9uTW91bnRlZDtcbmV4cG9ydHMudHJ5T25TY29wZURpc3Bvc2UgPSB0cnlPblNjb3BlRGlzcG9zZTtcbmV4cG9ydHMudHJ5T25Vbm1vdW50ZWQgPSB0cnlPblVubW91bnRlZDtcbmV4cG9ydHMudW50aWwgPSB1bnRpbDtcbmV4cG9ydHMudXNlQ291bnRlciA9IHVzZUNvdW50ZXI7XG5leHBvcnRzLnVzZURhdGVGb3JtYXQgPSB1c2VEYXRlRm9ybWF0O1xuZXhwb3J0cy51c2VEZWJvdW5jZSA9IHJlZkRlYm91bmNlZDtcbmV4cG9ydHMudXNlRGVib3VuY2VGbiA9IHVzZURlYm91bmNlRm47XG5leHBvcnRzLnVzZUludGVydmFsID0gdXNlSW50ZXJ2YWw7XG5leHBvcnRzLnVzZUludGVydmFsRm4gPSB1c2VJbnRlcnZhbEZuO1xuZXhwb3J0cy51c2VMYXN0Q2hhbmdlZCA9IHVzZUxhc3RDaGFuZ2VkO1xuZXhwb3J0cy51c2VUaHJvdHRsZSA9IHJlZlRocm90dGxlZDtcbmV4cG9ydHMudXNlVGhyb3R0bGVGbiA9IHVzZVRocm90dGxlRm47XG5leHBvcnRzLnVzZVRpbWVvdXQgPSB1c2VUaW1lb3V0O1xuZXhwb3J0cy51c2VUaW1lb3V0Rm4gPSB1c2VUaW1lb3V0Rm47XG5leHBvcnRzLnVzZVRvZ2dsZSA9IHVzZVRvZ2dsZTtcbmV4cG9ydHMud2F0Y2hBcnJheSA9IHdhdGNoQXJyYXk7XG5leHBvcnRzLndhdGNoQXRNb3N0ID0gd2F0Y2hBdE1vc3Q7XG5leHBvcnRzLndhdGNoRGVib3VuY2VkID0gd2F0Y2hEZWJvdW5jZWQ7XG5leHBvcnRzLndhdGNoSWdub3JhYmxlID0gd2F0Y2hJZ25vcmFibGU7XG5leHBvcnRzLndhdGNoT25jZSA9IHdhdGNoT25jZTtcbmV4cG9ydHMud2F0Y2hQYXVzYWJsZSA9IHdhdGNoUGF1c2FibGU7XG5leHBvcnRzLndhdGNoVGhyb3R0bGVkID0gd2F0Y2hUaHJvdHRsZWQ7XG5leHBvcnRzLndhdGNoVHJpZ2dlcmFibGUgPSB3YXRjaFRyaWdnZXJhYmxlO1xuZXhwb3J0cy53YXRjaFdpdGhGaWx0ZXIgPSB3YXRjaFdpdGhGaWx0ZXI7XG5leHBvcnRzLndoZW5ldmVyID0gd2hlbmV2ZXI7XG4iLCJ2YXIgVnVlID0gcmVxdWlyZSgndnVlJylcblxuT2JqZWN0LmtleXMoVnVlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBWdWVba2V5XVxufSlcblxuZXhwb3J0cy5zZXQgPSBmdW5jdGlvbih0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICB0YXJnZXQubGVuZ3RoID0gTWF0aC5tYXgodGFyZ2V0Lmxlbmd0aCwga2V5KVxuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpXG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHRhcmdldFtrZXldID0gdmFsXG4gIHJldHVybiB2YWxcbn1cblxuZXhwb3J0cy5kZWwgPSBmdW5jdGlvbih0YXJnZXQsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpXG4gICAgcmV0dXJuXG4gIH1cbiAgZGVsZXRlIHRhcmdldFtrZXldXG59XG5cbmV4cG9ydHMuVnVlID0gVnVlXG5leHBvcnRzLlZ1ZTIgPSB1bmRlZmluZWRcbmV4cG9ydHMuaXNWdWUyID0gZmFsc2VcbmV4cG9ydHMuaXNWdWUzID0gdHJ1ZVxuZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24oKXt9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 83a1d77d64..1b82cf4fac 100755 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,8 +1,8 @@ { - "/js/app.js": "/js/app.js?id=c63a598f613d1bf315e1648242d6c46b", + "/js/app.js": "/js/app.js?id=6fee83ce16ef17f6ce9374597ef82691", "/js/script.js": "/js/script.js?id=67f974d705cdb041f9d42e8c11e824d1", "/js/formbuilder.js": "/js/formbuilder.js?id=23e0052da87288dd57b8df6421880767", "/manifest.js": "/manifest.js?id=6ec4db78dd752c29bd9956118b1e0467", - "/css/app.css": "/css/app.css?id=8234b77a9b3823d794781f8c13044643", - "/js/vendor.js": "/js/vendor.js?id=cedc06abcdd75c5694a39366a9fe3a1c" + "/css/app.css": "/css/app.css?id=3832f33b3c75a474693bd2c11394c78b", + "/js/vendor.js": "/js/vendor.js?id=ef29136e4040bf00fd84ff7d96b45850" } diff --git a/resources/assets/js/components/AdminHeader.vue b/resources/assets/js/components/AdminHeader.vue index b5c050de07..487bbf5a2b 100644 --- a/resources/assets/js/components/AdminHeader.vue +++ b/resources/assets/js/components/AdminHeader.vue @@ -66,7 +66,7 @@ :class="data.menuNavLiClasses" > {{ menu.name }} - {{ menu.name }} - - + {{ menu.name }} + @@ -121,7 +116,7 @@ v-model="searchValue" class="search__input mr-3.5" type="text" - placeholder="Search activity..." + :placeholder=translation.admin.header.search_activity @keyup.enter="searchFunction('/activities')" /> @@ -162,11 +157,11 @@ @@ -195,11 +190,11 @@ @@ -247,6 +242,7 @@ defineProps({ superAdmin: { type: Boolean, required: true }, }); +const translation = window['globalLang']; const showUserDropdown = ref(false); const toastVisibility = ref(false); const showSidebar = ref(false); @@ -278,23 +274,23 @@ const data = reactive({ ], menus: [ { - name: 'Activity DATA', + name: translation.admin.header.activity_data, permalink: '/activities', active: true, }, { - name: 'Organisation DATA', + name: translation.admin.header.organisation_data, permalink: '/organisation', active: false, }, { - name: 'Settings', + name: translation.admin.header.settings, permalink: '/setting', active: false, }, { - name: 'Add / Import Activity', - permalink: '', + name: translation.common_lang.add_import_activity, + permalink: '#', active: false, }, ], diff --git a/resources/assets/js/components/DescriptionForm.vue b/resources/assets/js/components/DescriptionForm.vue index 2af0e2fa7b..e5ee140a18 100644 --- a/resources/assets/js/components/DescriptionForm.vue +++ b/resources/assets/js/components/DescriptionForm.vue @@ -8,7 +8,7 @@
    {{ language.commoon_lang.description }}
    - +
    +
    {{ language.common_lang.narrative }}
    {{ language.common_lang.type }} *
    -
    diff --git a/resources/assets/js/components/ErrorMessage.vue b/resources/assets/js/components/ErrorMessage.vue index 44ce6650ad..5f99bb89e5 100644 --- a/resources/assets/js/components/ErrorMessage.vue +++ b/resources/assets/js/components/ErrorMessage.vue @@ -1,3 +1,4 @@ + diff --git a/resources/assets/js/interfaces/lang.ts b/resources/assets/js/interfaces/lang.ts index bf2f9456a1..edad224e9a 100644 --- a/resources/assets/js/interfaces/lang.ts +++ b/resources/assets/js/interfaces/lang.ts @@ -1,3 +1,4 @@ export default interface Translation { - validation_lang: string; + validation_lang: string; + web_lang: string; } diff --git a/resources/assets/js/views/activity/ActivityDefaultValue.vue b/resources/assets/js/views/activity/ActivityDefaultValue.vue index 456a3a0e10..661d7265b5 100644 --- a/resources/assets/js/views/activity/ActivityDefaultValue.vue +++ b/resources/assets/js/views/activity/ActivityDefaultValue.vue @@ -2,12 +2,12 @@
    - Override default values -
    -
    + {{ language.activity_default_lang.override_default_values.label }} +
    +

    - Override default values + {{ language.activity_default_lang.override_default_values.label }}

    @@ -20,19 +20,17 @@
    - Use the following form to change the default values such as currency, - language etc for this specific activity. Changing the values here will - not change the default values in the setting page. + {{ language.activity_default_lang.override_default_values.text }}
    - + @@ -41,7 +39,7 @@ id="default-currency" v-model="defaultValues.default_currency" class="vue__select" - placeholder="Select from dropdown" + :placeholder=language.activity_default_lang.currency.placeholder :options="currencies" :searchable="true" /> @@ -59,18 +57,17 @@ v-if="defaultErrors.default_currency.length === 0" class="text-xs text-n-40" > - The currency in which you are reporting your financial - transactions for this activity. Select from dropdown + {{ language.activity_default_lang.currency.help_text }}

    - + @@ -79,7 +76,7 @@ id="default-language" v-model="defaultValues.default_language" class="vue__select" - placeholder="Select from dropdown" + :placeholder=language.activity_default_lang.language.placeholder :searchable="true" :options="props.languages" /> @@ -97,21 +94,18 @@ v-if="defaultErrors.default_language.length === 0" class="text-xs text-n-40" > - The language in which you are reporting this activity. Select - from dropdown. + {{ language.activity_default_lang.language.help_text }}

    - + @@ -121,7 +115,7 @@ v-model="defaultValues.hierarchy" class="register__input mb-2" type="text" - placeholder="Type default hierarchy here" + :placeholder=language.activity_default_lang.hierarchy.placeholder />
    - IATI allows for activities to be reported hierarchically (eg. - parent - child ; programme - project - sub-project, etc). For - activities at lower levels, their hierarchy can be edited as you - are entering them. + {{ language.activity_default_lang.hierarchy.help_text }}

    - +
    @@ -159,7 +150,7 @@ id="budget_not_provided" v-model="defaultValues.budget_not_provided" class="vue__select" - placeholder="Select budget not provided type here" + :placeholder=language.activity_default_lang.budget_not_provided.placeholder :options="budgetNotProvided" :searchable="true" /> @@ -177,12 +168,12 @@
    - + @@ -191,7 +182,7 @@ id="humanitarian" v-model="defaultValues.humanitarian" class="vue__select" - placeholder="Select Humanitarian here" + :placeholder=language.activity_default_lang.humanitarian.placeholder :options="humanitarian" :searchable="true" /> @@ -214,9 +205,9 @@ class="fixed bottom-0 left-0 w-full bg-eggshell py-5 pr-40 shadow-dropdown" >
    - Cancel + {{ language.activity_default_lang.cancel_label }}
    @@ -231,6 +222,8 @@ import axios from 'axios'; import Loader from 'Components/Loader.vue'; import Toast from 'Components/ToastMessage.vue'; +const language = window['globalLang']; + /** * Props */ diff --git a/resources/assets/js/views/activity/ActivityDetail.vue b/resources/assets/js/views/activity/ActivityDetail.vue index f2dcb77c3d..f9d6ffffc2 100644 --- a/resources/assets/js/views/activity/ActivityDetail.vue +++ b/resources/assets/js/views/activity/ActivityDetail.vue @@ -24,16 +24,16 @@